Hello,
I created a new set of my Special Edition boot floppies with kernel
2.4.7, ext3 flavor and integrated GNU parted. The compiled version will
be uploaded to http://people.debian.org/~blade/bf-ext3/ when ready and I
could provide a user HOWTO. They install fine on my testing system.

I tried make the changes compatible with the main boot floppy branch, so
here is a patch to make the boot floppies ext3-aware. I will comment
some parts here, the diff file is in the attachment.

| --- boot-floppies-3.0.9.orig/debian/changelog
| +++ boot-floppies-3.0.9/debian/changelog
| @@ -1,3 +1,18 @@
| +boot-floppies (3.0.9-0.2.blade) unstable; urgency=low
| +
| +  * new upstream release
| +  * new kernel image with newer ext3
| +  * fixed ext3 decission in baseconfig.c, should insert ext3 for / in fstab now
| +  * still using the braindead solution choosing 2.4.7-ext3 in 'config' and
| +    disabling other variants. To use kernel 2.2.x, change it back in 'config',
| +    enable all other version in the Makefile again and provide
| +    kernel-image-2.2.X-ext3

When we are going to release woody with kernel-2.2.19 (or even 20?),
someone should package kernel-image-2.2.19-ext3. Is anyone willing too
or should I approach this task?

| +  * removed resize_reiserfs, reiserfsck (no sence and no disk space)

Either there are this binaries, or the parted stuff. If you don't like
this, strip the changes in scripts/rootdisk/* files from this patch.

| +  * rewrote user interaction after discussion with ext3 upstream
| +  * mke2fs -j created ext3 know, droped tune2fs
| +
| + -- Eduard Bloch <[EMAIL PROTECTED]>  Wed,  8 Aug 2001 18:21:22 +0200
| +
|  boot-floppies (3.0.9) unstable; urgency=low
|  
|    * Falk Hueffner
| @@ -58,6 +73,15 @@
| --- boot-floppies-3.0.9.orig/common.sh
| +++ boot-floppies-3.0.9/common.sh
| @@ -91,7 +91,7 @@
|          # package name might  have '=' or /', so get rid of that
|          pkg=${pkg%%[/=]*}
|          # force files in the 'updates' dir to alway override

As wrotten in a previous mail, I don't see any sence in this [^a-zA-Z],
removing it.

| -     for j in `pwd`/updates/${pkg}_[^a-zA-Z]*.deb; do
| +     for j in `pwd`/updates/${pkg}_*.deb; do
|              if [ -f "$j" ]; then
|               f="$f $j"
|              fi
| --- boot-floppies-3.0.9.orig/config
| +++ boot-floppies-3.0.9/config
| @@ -17,7 +17,9 @@
|      kver     := 2.4.5
|  endif
|  ifeq "$(architecture)" "i386"
| -    kver     := 2.2.19

To revert if we use kernel-image-2.2.19-ext3 along with other
kernel-image-2.2.19-* flavors

| +# changed this to 2.4.7 branch because of newer ext3
| +#    kver    := 2.2.19
| +    kver     := 2.4.7
|  endif
|  ifeq "$(architecture)" "m68k"
|      kver     := 2.2.19
| --- boot-floppies-3.0.9.orig/rootdisk.sh
| +++ boot-floppies-3.0.9/rootdisk.sh
| @@ -627,6 +627,8 @@
|      else
|       mklibs=$scripts/mklibs.sh
|      fi
| +    # hack, overwritting test result.
| +    mklibs=$scripts/mklibs.py

Yes, with the current function, mklibs.sh is used on i386, even if
mklibs.py is MUCH faster and works fine.

|      $mklibs $vflag -L $E/lib:$E/usr/lib:/lib:/usr/lib --dest-dir $R/lib $EXECUTABLES
|      /usr/sbin/chroot $R /sbin/ldconfig $vflag
|  else
| --- boot-floppies-3.0.9.orig/documentation/README-ext3
| +++ boot-floppies-3.0.9/documentation/README-ext3

The README is to be improved, once the patch is adopted.

| --- boot-floppies-3.0.9.orig/make/i386.rules
| +++ boot-floppies-3.0.9/make/i386.rules
| @@ -17,11 +17,11 @@
|  root1440%.bin:       resc1440%.bin
|  
|  rootide.bin:         rootdisk.sh moduleside.tgz

I had to increase the ramdisk size to get parted on it. Strip this out
from the patch if parted is not used.

| -     $(ROOTCMD) ./rootdisk.sh "ide" $(archive) 3200 $(debianversion) "" $(LINGUA) 
|"$(FONT)" $(SFONT)
| +     $(ROOTCMD) ./rootdisk.sh "ide" $(archive) 4000 $(debianversion) "" $(LINGUA) 
|"$(FONT)" $(SFONT)
|  
|  rootidepci.bin:              rootdisk.sh modulesidepci.tgz
| -     $(ROOTCMD) ./rootdisk.sh "idepci" $(archive) 3200 $(debianversion) "" 
|$(LINGUA) "$(FONT)" $(SFONT)
| +     $(ROOTCMD) ./rootdisk.sh "idepci" $(archive) 4000 $(debianversion) "" 
|$(LINGUA) "$(FONT)" $(SFONT)
|  
|  rootcompact.bin:     rootdisk.sh modulescompact.tgz
| -     $(ROOTCMD) ./rootdisk.sh "compact" $(archive) 3200 $(debianversion) "" 
|$(LINGUA) "$(FONT)" $(SFONT)
| +     $(ROOTCMD) ./rootdisk.sh "compact" $(archive) 4000 $(debianversion) "" 
|$(LINGUA) "$(FONT)" $(SFONT)
|  
| --- boot-floppies-3.0.9.orig/scripts/dos/install-ext3.bat
| +++ boot-floppies-3.0.9/scripts/dos/install-ext3.bat
| @@ -0,0 +1 @@
| +..\dosutils\loadlin linux root=/dev/ram initrd=../images-1.44/ext3/root.bin 
|disksize=1.44 flavor=ext3

Like above, this was changed for parted. Strip this out from the patch
if parted is not to be included.

| --- boot-floppies-3.0.9.orig/scripts/rootdisk/EXTRACT_LIST_all
| +++ boot-floppies-3.0.9/scripts/rootdisk/EXTRACT_LIST_all
| @@ -6,11 +6,15 @@
...
| +libncurses5
...
| +libparted1.4
| +libreadline4
...
| +parted
...
| --- boot-floppies-3.0.9.orig/scripts/rootdisk/SMALL_BASE_LIST_all
| +++ boot-floppies-3.0.9/scripts/rootdisk/SMALL_BASE_LIST_all
...
| --- boot-floppies-3.0.9.orig/utilities/dbootstrap/baseconfig.c
| +++ boot-floppies-3.0.9/utilities/dbootstrap/baseconfig.c
| @@ -273,6 +273,8 @@
|       else
|       {
|         fsname = "ext2";

Chooses the right fs-type for /, tested, works.

| +     if(is_fstype("/target", "ext3") == 1)
| +        fsname = "ext3";
|         fsopts="defaults,errors=remount-ro";
|         pass = 1;
|       }
| --- boot-floppies-3.0.9.orig/utilities/dbootstrap/choose_medium.c
| +++ boot-floppies-3.0.9/utilities/dbootstrap/choose_medium.c
| @@ -35,7 +35,7 @@
|  #if #cpu(sparc) || #cpu(powerpc)
|  const char *fs_type_tab[] = { "ext2", NULL };
|  #else

Probe more FS types on floppies, I droped msdos support from my kernel
and used vfat instead.

| -const char *fs_type_tab[] = { "msdos", "ext2", NULL };
| +const char *fs_type_tab[] = { "msdos", "vfat", "fat", "ext2", NULL };
|  #endif
|  
|  /* Return Values:

In following files, ext3 is included similar to reiserfs.

| --- boot-floppies-3.0.9.orig/utilities/dbootstrap/extract_kernel.c
| +++ boot-floppies-3.0.9/utilities/dbootstrap/extract_kernel.c
| @@ -17,7 +17,7 @@
|  extern int patidx;
|  
|  char *driver_filenames[] = { "drv12", "drv14", "drv14compact", "drv14idepci", 
| -     "drv14ide", "drv14reiserfs", "drv14pmac", "drv14chrp", "drv14prep", 
| +     "drv14ide", "drv14reiserfs", "drv14ext3", "drv14pmac", "drv14chrp", 
|"drv14prep", 
|       "drv14apus", "drv14-sun4cdm", "drv14-sun4u", "drv14-sun4dm-pci",
|          "drv14generic", "drv14jensen", "drv14nautilus", NULL };
|  
| --- boot-floppies-3.0.9.orig/utilities/dbootstrap/partition_config.c
| +++ boot-floppies-3.0.9/utilities/dbootstrap/partition_config.c
| @@ -11,6 +11,7 @@
|  #include "notail.h"
|  
|  #define is_rfs (bootargs.flavor && !strcmp ("reiserfs", bootargs.flavor))
| +#define is_e3 (bootargs.flavor && !strcmp ("ext3", bootargs.flavor))
|  
|  int check_for_native_partition (struct fdisk_disk **d, int first);
|  
| @@ -59,7 +60,7 @@
|  int partition_disk (void) {
|    struct fdisk_disk *d;
|    struct fdisk_partition *p;
| -  char *mounts, *swaps, *tmpbuf; 
| +  char *mounts, *swaps, *tmpbuf, *myfdisk; 
|    int root_on_disk=0, status=0;
|    struct stat statbuf;
|  
| @@ -135,6 +136,21 @@
|      }
|      free (swaps);
|    }

Some autodetection, use parted if we have it, otherwise act as usual
(invoke cfdisk).

| +  if(fopen("/sbin/parted", "r")) { /* check whether we have parted */
| +     if(twoButtonBox( _("This set of boot floppies has varios programs for 
|partitioning of the harddisk. However, to partition with other programs then cfdisk 
|(default) is dangerous, you should not try them if you are not an expert or if you 
|don't exactly know what you are doing. Which way do you want to go?"), _("CFDISK or 
|Expert mode?"), _("default"), _("expert only"), 1) == DLG_YES)
| +        myfdisk="/sbin/cfdisk";
| +     else {
| +        if(twoButtonBox( _("Now you have the choice between: fdisk and parted. 
|Fdisk is the old program, but allows to do some tricks with the partition table. GNU 
|parted is new, not complete and not 100\% stable, but has features like fs resizing 
|and moving of the partitions. Which one should be invoked now?"), _("fdisk or 
|parted?"), _("fdisk"), _("parted"), 2) == DLG_YES)
| +           myfdisk="/sbin/fdisk";
| +        else
| +           myfdisk="/sbin/parted";
| +     }
| +  }
| +  else { /* no parted present, use default cfdisk */
| +     myfdisk="/sbin/cfdisk";
| +  }
| +     
| +  
|  #if #cpu(i386)
|    if (! bootargs.isquiet)
|      wideMessageBox(_(
| @@ -215,7 +231,7 @@
|  #endif
|  
|      INFOMSG("running cfdisk to partition %s", d->name);
| -    sprintf(prtbuf, "cfdisk %s", d->name);
| +    sprintf(prtbuf, "%s %s", myfdisk, d->name);
|      status = fullscreen_execlog(prtbuf);
|  #ifdef pc_use_cfdisk_err_ret_switch
|      switch (status) {
| @@ -470,7 +486,6 @@
|          addnotail (partition->name);
|          addnotail (real_mount_point);
|        }
| -
|        sprintf(prtbuf, _("Mounting %s on %s"), 
|            partition->name, mount_point);
|        pleaseWaitBox (prtbuf);
| @@ -484,15 +499,16 @@
|      }
|      else  /* ext2  - with reiserfs aware kernel */
|      { /* this block is the same as the one below */

To let the decission up to kernel the easiest way to choose between ext2
and ext3. Worked fine in my tests.

| -      sprintf(prtbuf, "mount -t %s %s %s",
| -       type, partition->name, real_mount_point);
| +      sprintf(prtbuf, "mount -t auto %s %s",
| +       partition->name, real_mount_point);
|        status = execlog(prtbuf, LOG_INFO);
|      }
|    }
|    else /* ext2 */
| -  { /* this block is the same as the one above */
| -    sprintf(prtbuf, "mount -t %s %s %s",
| -       type, partition->name, real_mount_point);
| +  { /* this block is the same as the one above
| +     will detect ext3 or ext2 automaticaly */
| +    sprintf(prtbuf, "mount -t auto %s %s",
| +        partition->name, real_mount_point);
|      status = execlog(prtbuf, LOG_INFO);
|    }
|  
| @@ -579,14 +595,25 @@
|  
|  int init_linux (void) {
|    struct fdisk_partition *p;
| -  int Oflag, cflag, status;
| -
| +  int Oflag, e3flag = DLG_NO, cflag, status;
| +  
|    if (is_rfs)
|    {
|      if (!twoButtonBox (_("Ext2 is the defacto standard filesystem for GNU/Linux. It 
|is well tested and proven. It supports extended file attributes, and has more 
|maintenance utilities.\n\nReiserFS is newer, faster, more space efficient, and has 
|meta-data journalling.\n\nIf in doubt, use Ext2.\n\nWould you like to create an Ext2 
|or a ReiserFS filesystem?"), _("Choose Filesystem Type"), _("Ext2"), _("ReiserFS"), 
|1))
|      return (init_reiser());
|    }
| -       
| +

Some code for the future, may be used when supporting reiserfs _and_
ext3.

| +/* This is only a template. Currently, I didn't manage to get both reiserfs and
| + * ext3 at the same time into a kernel. Patches for 2.2.x conflict with each
| + * other, and linux-2.4.x kernel becomes too big. It could be possible if I
| + * create a compact kernel with less built-in drivers, e.g. without drivers for
| + * SCSI adapters
| +  if (is_e3 && has_rfs)
| +  {
| +    if (!twoButtonBox (_("Ext2 is the defacto standard filesystem for GNU/Linux. It 
|is well tested and proven. It supports extended file attributes, and has more 
|maintenance utilities.\n\nExt3 is a new but compatible variant of Ext2. It is faster 
|and has meta-data journaling.\n\nReiserFS is newer, faster, more space efficient, and 
|has meta-data journalling.\n\nIf in doubt, use Ext2.\n\nWould you like to create an 
|Ext2, Ext3 or a ReiserFS filesystem?"), _("Choose Filesystem Type"), _("Ext2 or 
|Ext3"), _("ReiserFS"), 1))
| +    return (init_reiser());
| +  }
| +      */ 
|    sync();
|    p = select_not_mounted(_("Please select the partition to initialize as a Linux 
|\"ext2\" filesystem.") ,_("Select Partition"),1,FSTYPE_EXT2);
|    if (! p)
| @@ -598,10 +625,13 @@
|    if (! bootargs.isquiet) {
|  #if #cpu(arm)
|      /* ARM wants ext2 from kernel 2.0 for the boot-loader */

In following boxes I changed the text, it is not fixed to 2.2 (we use
2.4 too).

| -    Oflag = yesNoBox(_("This 2.2 version of the Linux kernel has new \"ext2\" 
|filesystem features not present in earlier kernel versions. Using these features, 
|however, means that you will not be able to use this filesystem with earlier kernels, 
|such as Linux 2.0 or with the Netwinder firmware.\n\nDo you want to retain Linux 
|kernel 2.0 compatibility?"), _("Pre-2.2 Linux Kernel Compatibility?"));
| +    Oflag = yesNoBox(_("This version of the Linux kernel has new \"ext2\" 
|filesystem features not present in kernel versions prior to 2.2.x. Using these 
|features, however, means that you will not be able to use this filesystem with 
|earlier kernels, such as Linux 2.0 or with the Netwinder firmware.\n\nDo you want to 
|retain Linux kernel 2.0 compatibility?"), _("Pre-2.2 Linux Kernel Compatibility?"));
|  #else
|      /* nobody else needs the old linux 2.0 version ext2 */
| -    Oflag = twoButtonBox( _("This 2.2 version of the Linux kernel has new \"ext2\" 
|filesystem features not present in earlier kernel versions. Using these features, 
|however, means that you will not be able to use this filesystem with earlier kernels, 
|such as Linux 2.0.\n\nDo you want to retain Linux kernel 2.0 compatibility?"), 
|_("Pre-2.2 Linux Kernel Compatibility?"), _("Yes"), _("No"), 2);
| +    if(is_e3) {
| +      e3flag = twoButtonBox( _("This set of boot floppies has support for the new 
|Journaling Extension for the Ext2 filesystem, also known as Ext3. Journaling means 
|faster recovery process after crashes and better performance in certain 
|conditions.\n\nEnable Ext3 support and create Journal on this filesystem?\n"), 
|_("Ext3 Journaling support?"), _("Yes"), _("No"), 1);
| +    }
| +    Oflag = twoButtonBox( _("This version of the Linux kernel has new \"ext2\" 
|filesystem features not present in kernel versions prior to 2.2.x. Using these 
|features, however, means that you will not be able to use this filesystem with 
|earlier kernels, such as Linux 2.0.\n\nDo you want to retain Linux kernel 2.0 
|compatibility?"), _("Pre-2.2 Linux Kernel Compatibility?"), _("Yes"), _("No"), 2);
|  #endif
|    } else {
|      /* be quiet and pick the right default */
| @@ -609,36 +639,38 @@
|      Oflag = DLG_YES;
|  #else
|      Oflag = DLG_NO;

I am not sure at this point: should ext3 be used by default if the user
doesn't care?

| +    /* we don't keep compatibility, so why not try journaling? */
| +    e3flag = DLG_YES;
|  #endif
|    }
|  
|    cflag = get_cflag(p->name);
|  

Following changes are cosmetic. Presents ext2 or ext3 depending on the
choice.

|    if (! bootargs.isquiet) {
| -    sprintf(prtbuf,_("You have chosen to initialize %s as a Linux \"ext2\" 
|filesystem. This will permanently erase any data on this partition. Are you sure you 
|want to do this?"),
| -         p->name);
| +    sprintf(prtbuf,_("You have chosen to initialize %s as a Linux \"ext%s\" 
|filesystem. This will permanently erase any data on this partition. Are you sure you 
|want to do this?"),
| +         p->name, (e3flag == DLG_YES) ? "3" : "2");
|      if (yesNoBox(prtbuf, _("Are You Sure?")) == DLG_NO)
|        return 1;
|    }
|  
| -  INFOMSG("formatting partition %s as ext2 for kernel %s or better", 
| -          p->name, 
| -          ( Oflag == DLG_NO ? "2.2" : "2.0"));
| +  INFOMSG("formatting partition %s as ext%s for kernel %s or better", 
| +          p->name, (e3flag == DLG_YES) ? "3" : "2", ( Oflag == DLG_NO ? "2.2" : 
|"2.0"));
|  #if #cpu(alpha)
|    /* Alpha-specific workaround for MILO's failure to support 4k blocks */
|    if (!(srm_boot || strcmp(Arch2, "nautilus") == 0))


Appending -j option for ext3.

| -    sprintf(prtbuf, "mkfs.ext2 -O none -b 1024 %s %s",
| -         ( cflag ? "-c" : ""), p->name);
| +    sprintf(prtbuf, "mkfs.ext2 -O none -b 1024 %s %s %s",
| +         ( cflag ? "-c" : ""), (e3flag == DLG_YES) ? "-j" : "", p->name);
|    else
|  #endif
| -  sprintf(prtbuf, "mkfs.ext2 %s %s %s", ( Oflag == DLG_NO ? "" : "-O none"),
| -       ( cflag ? "-c" : ""), p->name);
| +  sprintf(prtbuf, "mkfs.ext2 %s %s %s %s", ( Oflag == DLG_NO ? "" : "-O none"),
| +       ( cflag ? "-c" : ""),  (e3flag == DLG_YES) ? "-j" : "", p->name);
|    boxSuspend();
|    printf(CLEAR);
|    if ( Oflag == DLG_YES )

Cosmetic changes.

| -    printf(_("Creating filesystem (with 2.0 kernel compatibility)...\n"));
| +    printf(_("Creating filesystem (with 2.0 kernel compatibility%s)...\n"),
| +          (e3flag == DLG_YES) ? " and Journaling" : "");
|    else
| -    printf(_("Creating filesystem (for 2.2 kernels only)...\n"));
| +    printf(_("Creating filesystem%s (for 2.2 and newer kernels only)...\n"), 
|(e3flag == DLG_YES) ? " with Journaling" : "");
|    DEBUGMSG("make filesystem with '%s'", prtbuf);
|    status = system(prtbuf);
|    boxResume();
| @@ -647,6 +679,7 @@
|      problemBox(_("The filesystem was not created."), _("Problem"));
|      return 1;
|    }
| +   
|    return mount_partition(p);
|  }

Gruss/Regards,
Eduard.
-- 
Wie währs mit Windows CE auf einer Kaffeemaschiene?
Nachdem der Kaffee zur Hälfte gekocht ist, stürzt die
Kaffeemaschiene ab.        (Ulrich Eckhardt in dcolm)

boot-floppies_3.0.9-0.2.blade.diff.gz

Reply via email to