Subject: Booting multiuser from floppy.
To: None <tech-kern@netbsd.org>
From: Roger Brooks <R.S.Brooks@liverpool.ac.uk>
List: tech-kern
Date: 08/17/2000 22:05:52
On Thu, 17 Aug 2000, Roger Brooks wrote:

>I have managed to build an md system on a single floppy which boots
>multi-user.  I did this early this year when our Novell servers went
>belly-up and I thought I'd see if I could make a bootable multi-session
>telnet disk.  I managed to build a kernel with 8 virtual consoles (pcvt).
>It didn't automatically come up multi-user, although this turned out to
>be an advantage, as I needed to log in as root anyway to set the IP address
>to that of the PC I was using.  I forget exactly what I had to do to get
>everything working, but one thing which did cause problems was that
>the getpwXXX() routines in the minimal libc didn't grok encrypted passwords
>properly.  AFAIR it didn't know about /etc/master.passwd, but then
>I don't expect that anyone has needed encrypted passwords on a floppy
>system before.  I can check the details tonight.


Building a Modified Bootfloppy
==============================

This is the procedure which I followed to build a multiuser system
with telnet on a single floppy under NetBSD 1.4 (i386).  I'm assuming
you will be using a stripped-down kernel to save space.  My kernel
was intended to run telnet over an ethernet link, and allow access
to floppies (FAT or FFS) and NFS.  I'm reconstructing something which
I did in a couple of evenings about 6 months ago, so the following
instructions may have a few holes...


1.      cd /usr/src/sys/arch/i386/conf

    Create a new kernel config file (mine is called TELNET).  I started with
    the INSTALL config, and took out CD9660, EXT2FS and all the SCSI, wdc,
    pciide and serial port drivers.  I also took out everything EISA-related,
    (as I knew we didn't have any EISA machines) and DDB.  I added entries for
    PCVT (you'd have to use wscons in current), and apart from that the only
    device drivers I was left with were fdc and most of the ethernet controllers.

    You'll very likely have to iterate this procedure when either (a) you
    run out of space and have to remove something else, or (b) you have room
    to spare on the floppy and decide to add device drivers.

2.      config TELNET

        cd ../compile/TELNET

        make depend && make

    As you have committed major butchery on the config file, it may take a
    few tries before the kernel compiles


3.      cd /usr/src/distrib/i386/floppies

        mkdir telnetfloppy

        cp bootfloppy-common/list telnetfloppy

    You now need to create a telnetfloppy/Makefile.

        cp bootfloppy/Makefile telnetfloppy/Makefile    

    Now edit telnetfloppy/Makefile, and replace the line

        .include "${TOP}/bootfloppy-common/Makefile.inc"

    by a copy of the included file.  Next, modify the following records
    in the merged Makefile:

        KERN?=  ${.CURDIR}/../../../../sys/arch/i386/compile/TELNET/netbsd

        COMMONDIR=    ${TOP}/telnetfloppy

        RAMDISK       !=cd $(.CURDIR)/../ramdisk-telnet/; \
                printf "xxx: .MAKE\n\t@echo \$${.OBJDIR}/ramdisk-telnet.fs\n" | \


4.  (Still in /usr/src/distrib/i386/floppies)

        mkdir ramdisk-telnet

        (cd ramdisk && tar cf - .) | (cd ramdisk-telnet && tar xvfpB -)

        cd ramdisk-telnet

        make clean

    Edit Makefile, to modify the record

        IMAGE=                ramdisk-telnet.fs


    You will also need to modify the AUXDEPENDS= record as you go on.

    The contents of the ramdisk are controlled by three other files:

        mtree.conf          (used by mtree to build ramdisk directory tree)
        ramdiskbin.conf     (controls what goes into the crunched binary)
        list                (controls links to crunched binary and other
                             file on ramdisk).


    You will need to hack ramdiskbin.conf and list to suit what you intend
    to put in the ramdisk.  You will notice that init is built from
    distrib/utils/init_s -- comment out (or remove) this line and add init
    to one of the "progs" lines (this will build a fully-functional init
    into the crunched binary).  Of course you will need to remove
    sysinst and the other install stuff.

    You will probably need different (compared to /usr/src/etc) versions of
    some /etc files, so create /usr/src/distrib/i386/ramdisk-telnet/etc and
    put them there (I needed  gettytab profile ttys and master.passwd), then
    modify list accordingly  -- if you don't modify list, it won't go onto the
    ramdisk.  Modify the definition of AUX_DEPENDS in Makefile to
    reflect these changes (and get rid of anything related to the
    install procedure which you've removed).

5.  (Still in /usr/src/distrib/i386/floppies/ramdisk-telnet)

        make

        cd ../telnetfloppy

        make

        dd if=boot.fs of=/dev/rfd0b

6.  If the ramdisk/kernel is too big (or you have lots of free space!),
    go back to step 4 and modify ramdiskbin.conf, or go back to step 1
    and modify the kernel config.   Iterate until everything fits (or
    you give up in frustration!)


Some of the commands on the install ramdisk are slimmed-down versions,
with the sources in /usr2/src/distrib/utils.  The crunched binary is
linked against libhack.o (from sources in /usr2/src/distrib/utils/libhack).
The main problem which I found was that the version of getpwXXX in
libhack expects encrypted passwords to be in /etc/passwd
(not /etc/master.passwd).


Apart from the problem with passwd, I didn't find out how to get the
system to come up multi-user straight away.  But someone else has
described how to fix this (no wonder I couldn't find it -- in a bloody
device driver!).  However, this was something of a blessing in diguise,
as owing to the passwd problem I wouldn't otherwise have been able to
log in a root to set the IP address and default router.  The passwd
file had another user "telnet" with a null password, and when I exited
the single-user shell I was gratified to see 8 login prompts come up on
8 PCVT consoles!

I've just checked the floppy image, and this configuration (no local
disks apart from the floppy), but with ftp and telnet has 423 KB free
space, so I could get quite a bit more stuff on the floppy.  Of course
this *is* 1.4, not current.



Roger

------------------------------------------------------------------------------
Roger Brooks (Systems Programmer),          |  Email: R.S.Brooks@liv.ac.uk
Computing Services Dept,                    |  Tel:   +44 151 794 4441
The University of Liverpool,                |  Fax:   +44 151 794 4442
PO Box 147, Liverpool L69 3BX, UK           | 
------------------------------------------------------------------------------