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