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