busyboxでmke2fsを復活させる
http://www.mail-archive.com/busybox@busybox.net/msg02934.html
http://www.mail-archive.com/busybox@busybox.net/msg03068.html
このへんにパッチがある。
e2fs関連のコードがメンテされないので、treeから捨てられて結構長いので、動作するかどうかは微妙。
後半は1.15.2では反映されているものもある。
e2fsprogsを消して、その下にあるold_e2fsprogsをe2fsprogsにして、パッチを当ててビルドする。
kinneko@OLPmother:~/busybox-1.15.2$ mv e2fsprogs/old_e2fsprogs ./ kinneko@OLPmother:~/busybox-1.15.2$ rm -r e2fsprogs/ kinneko@OLPmother:~/busybox-1.15.2$ mv old_e2fsprogs/ e2fsprogs
とりあえずパッチはこんな感じかな。
diff -Naur busybox-1.15.2/Makefile busybox-1.15.2.new/Makefile
--- busybox-1.15.2/Makefile 2009-10-08 10:06:38.000000000 +0900
+++ busybox-1.15.2.new/Makefile 2009-11-26 00:45:27.000000000 +0900
@@ -450,6 +450,10 @@
coreutils/ \
coreutils/libcoreutils/ \
debianutils/ \
+ e2fsprogs/e2p \
+ e2fsprogs/ext2fs \
+ e2fsprogs/blkid \
+ e2fsprogs/uuid \
e2fsprogs/ \
editors/ \
findutils/ \
diff -Naur busybox-1.15.2/e2fsprogs/e2fsck.c busybox-1.15.2.new/e2fsprogs/e2fsck.c
--- busybox-1.15.2/e2fsprogs/e2fsck.c 2009-09-26 22:14:57.000000000 +0900
+++ busybox-1.15.2.new/e2fsprogs/e2fsck.c 2009-11-26 01:05:32.000000000 +0900
@@ -45,7 +45,7 @@
static void e2fsck_pass1_dupblocks(e2fsck_t ctx, char *block_buf);
/* pass1.c */
-static void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int bool);
+static void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int mybool);
/* pass2.c */
static int e2fsck_process_bad_inode(e2fsck_t ctx, ext2_ino_t dir,
@@ -2512,7 +2512,7 @@
{
struct ext2_inode *inode;
struct ext2_inode_large *large_inode;
- char * time_str;
+ const char * time_str;
time_t t;
int do_gmt = -1;
@@ -4560,11 +4560,11 @@
return 0;
}
-void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int bool)
+void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int mybool)
{
ext2_filsys fs = ctx->fs;
- if (bool) {
+ if (mybool) {
fs->get_blocks = pass1_get_blocks;
fs->check_directory = pass1_check_directory;
fs->read_inode = pass1_read_inode;
@@ -13202,7 +13202,7 @@
static const char my_ver_string[] = E2FSPROGS_VERSION;
static const char my_ver_date[] = E2FSPROGS_DATE;
-int e2fsck_main (int argc, char **argv);
+int e2fsck_main (int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int e2fsck_main (int argc, char **argv)
{
errcode_t retval;
diff -Naur busybox-1.15.2/e2fsprogs/e2p/pe.c busybox-1.15.2.new/e2fsprogs/e2p/pe.c
--- busybox-1.15.2/e2fsprogs/e2p/pe.c 2009-09-26 22:14:57.000000000 +0900
+++ busybox-1.15.2.new/e2fsprogs/e2p/pe.c 2009-11-26 01:06:06.000000000 +0900
@@ -21,7 +21,7 @@
void print_fs_errors(FILE *f, unsigned short errors)
{
- char *disp = NULL;
+ const char *disp = NULL;
switch (errors) {
case EXT2_ERRORS_CONTINUE: disp = "Continue"; break;
case EXT2_ERRORS_RO: disp = "Remount read-only"; break;
diff -Naur busybox-1.15.2/e2fsprogs/ext2fs/ismounted.c busybox-1.15.2.new/e2fsprogs/ext2fs/ismounted.c
--- busybox-1.15.2/e2fsprogs/ext2fs/ismounted.c 2009-09-26 22:14:57.000000000 +0900
+++ busybox-1.15.2.new/e2fsprogs/ext2fs/ismounted.c 2009-11-26 00:51:10.000000000 +0900
@@ -148,7 +148,7 @@
is_root:
#define TEST_FILE "/.ismount-test-file"
*mount_flags |= EXT2_MF_ISROOT;
- fd = open(TEST_FILE, O_RDWR|O_CREAT);
+ fd = open(TEST_FILE, O_RDWR|O_CREAT, 0777);
if (fd < 0) {
if (errno == EROFS)
*mount_flags |= EXT2_MF_READONLY;
diff -Naur busybox-1.15.2/e2fsprogs/mke2fs.c busybox-1.15.2.new/e2fsprogs/mke2fs.c
--- busybox-1.15.2/e2fsprogs/mke2fs.c 2009-09-26 22:14:57.000000000 +0900
+++ busybox-1.15.2.new/e2fsprogs/mke2fs.c 2009-11-26 01:09:03.000000000 +0900
@@ -201,8 +201,8 @@
mke2fs_verbose("done\n");
}
-static void mke2fs_warning_msg(int retval, char *fmt, ... ) __attribute__ ((format (printf, 2, 3)));
-static void mke2fs_warning_msg(int retval, char *fmt, ... )
+static void mke2fs_warning_msg(int retval, const char *fmt, ... ) __attribute__ ((format (printf, 2, 3)));
+static void mke2fs_warning_msg(int retval, const char *fmt, ... )
{
va_list ap;
@@ -485,7 +485,7 @@
ext2_ino_t ino;
const char *name = "lost+found";
int i = 1;
- char *msg = "create";
+ const char *msg = "create";
int lpf_size = 0;
fs->umask = 077;
@@ -542,7 +542,7 @@
static void zap_sector(ext2_filsys fs, int sect, int nsect)
{
char *buf;
- char *fmt = "could not %s %d";
+ const char *fmt = "could not %s %d";
int retval;
unsigned int *magic;
@@ -574,7 +574,7 @@
struct progress_struct progress;
errcode_t retval;
char *buf;
- char *fmt = "%s journal superblock";
+ const char *fmt = "%s journal superblock";
blk_t blk;
int count;
@@ -1174,7 +1174,7 @@
if (ENABLE_FEATURE_CLEAN_UP && journal_device) free(journal_device);
}
-int mke2fs_main (int argc, char **argv);
+int mke2fs_main (int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int mke2fs_main (int argc, char **argv)
{
errcode_t retval;
diff -Naur busybox-1.15.2/e2fsprogs/tune2fs.c busybox-1.15.2.new/e2fsprogs/tune2fs.c
--- busybox-1.15.2/e2fsprogs/tune2fs.c 2009-09-26 22:14:57.000000000 +0900
+++ busybox-1.15.2.new/e2fsprogs/tune2fs.c 2009-11-26 00:55:36.000000000 +0900
@@ -182,8 +182,8 @@
struct ext2_inode inode;
errcode_t retval;
ino_t ino = fs->super->s_journal_inum;
- char *msg = "to read";
- char *s = "journal inode";
+ const char *msg = "to read";
+ const char *s = "journal inode";
retval = ext2fs_read_inode(fs, ino, &inode);
if (retval)
diff -Naur busybox-1.15.2/e2fsprogs/util.c busybox-1.15.2.new/e2fsprogs/util.c
--- busybox-1.15.2/e2fsprogs/util.c 2009-09-26 22:14:57.000000000 +0900
+++ busybox-1.15.2.new/e2fsprogs/util.c 2009-11-26 00:56:40.000000000 +0900
@@ -258,7 +258,7 @@
if (oldpath)
oldpath = xasprintf("%s:%s", PATH_SET, oldpath);
else
- oldpath = PATH_SET;
+ oldpath = (char *)PATH_SET;
putenv(oldpath);
return oldpath;
}
diff -Naur busybox-1.15.2/include/applets.h busybox-1.15.2.new/include/applets.h
--- busybox-1.15.2/include/applets.h 2009-09-26 22:14:57.000000000 +0900
+++ busybox-1.15.2.new/include/applets.h 2009-11-26 01:04:51.000000000 +0900
@@ -135,8 +135,8 @@
IF_DU(APPLET(du, _BB_DIR_USR_BIN, _BB_SUID_DROP))
IF_DUMPKMAP(APPLET(dumpkmap, _BB_DIR_BIN, _BB_SUID_DROP))
IF_APP_DUMPLEASES(APPLET(dumpleases, _BB_DIR_USR_BIN, _BB_SUID_DROP))
-//IF_E2FSCK(APPLET(e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP))
-//IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP, e2label))
+IF_E2FSCK(APPLET(e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP))
+IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP, e2label))
IF_ECHO(APPLET_NOFORK(echo, echo, _BB_DIR_BIN, _BB_SUID_DROP, echo))
IF_ED(APPLET(ed, _BB_DIR_BIN, _BB_SUID_DROP))
IF_FEATURE_GREP_EGREP_ALIAS(APPLET_ODDNAME(egrep, grep, _BB_DIR_BIN, _BB_SUID_DROP, egrep))
@@ -164,8 +164,8 @@
IF_FREE(APPLET(free, _BB_DIR_USR_BIN, _BB_SUID_DROP))
IF_FREERAMDISK(APPLET(freeramdisk, _BB_DIR_SBIN, _BB_SUID_DROP))
IF_FSCK(APPLET(fsck, _BB_DIR_SBIN, _BB_SUID_DROP))
-//IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext2))
-//IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext3))
+IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext2))
+IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext3))
IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_minix))
IF_FSYNC(APPLET_NOFORK(fsync, fsync, _BB_DIR_BIN, _BB_SUID_DROP, fsync))
IF_FTPD(APPLET(ftpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
@@ -258,10 +258,10 @@
IF_MICROCOM(APPLET(microcom, _BB_DIR_USR_BIN, _BB_SUID_DROP))
IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, _BB_DIR_BIN, _BB_SUID_DROP, mkdir))
IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_vfat))
-//IF_MKE2FS(APPLET(mke2fs, _BB_DIR_SBIN, _BB_SUID_DROP))
+IF_MKE2FS(APPLET(mke2fs, _BB_DIR_SBIN, _BB_SUID_DROP))
IF_MKFIFO(APPLET(mkfifo, _BB_DIR_USR_BIN, _BB_SUID_DROP))
-//IF_MKE2FS(APPLET_ODDNAME(mkfs.ext2, mke2fs, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext2))
-//IF_MKE2FS(APPLET_ODDNAME(mkfs.ext3, mke2fs, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext3))
+IF_MKE2FS(APPLET_ODDNAME(mkfs.ext2, mke2fs, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext2))
+IF_MKE2FS(APPLET_ODDNAME(mkfs.ext3, mke2fs, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext3))
IF_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_minix))
IF_MKFS_VFAT(APPLET_ODDNAME(mkfs.vfat, mkfs_vfat, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_vfat))
IF_MKNOD(APPLET(mknod, _BB_DIR_BIN, _BB_SUID_DROP))
@@ -396,7 +396,7 @@
IF_TTY(APPLET(tty, _BB_DIR_USR_BIN, _BB_SUID_DROP))
IF_TTYSIZE(APPLET(ttysize, _BB_DIR_USR_BIN, _BB_SUID_DROP))
IF_TUNCTL(APPLET(tunctl, _BB_DIR_SBIN, _BB_SUID_DROP))
-//IF_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP))
+IF_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP))
IF_APP_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_DROP))
IF_APP_UDHCPD(APPLET(udhcpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_DROP, udpsvd))
うはは、これだけじゃ通らない(^^;。
続きはこちら。
http://d.hatena.ne.jp/kinneko/20091127/p5