#!/bin/sh # # mkdist 3.6 - Make a Minix distribution Author: Kees J. Bot # 20 Dec 1994 system=`uname` usage() { case $system in Minix) echo "Usage: $0" >&2 ;; Minix-vmd) echo "Usage: $0 base-path root-device usr-device" >&2 esac exit 1 } # No options. while getopts '' opt; do usage; done shift `expr $OPTIND - 1` case $system:$# in Minix:0) # Interactive. case "$0" in /tmp/*) rm -f "$0" ;; *) # Move out of /usr. cp -p "$0" /tmp/mkdist exec /tmp/mkdist esac std=t base=/ export PATH=/bin:/usr/bin ;; Minix-vmd:3) # Called by an external script from Minix-vmd to help make a distribution. std= base="$1" rootdev="$2" usrdev="$3" esac usrlist=" bin bin/MAKEDEV bin/arch bin/badblocks bin/chmod bin/clone bin/compress bin/cp bin/cpdir bin/df `test -f $base/usr/bin/mtools || echo bin/dosdir bin/dosread bin/doswrite` `test -f $base/usr/bin/mtools && echo bin/mtools` bin/edparams bin/getty bin/grep bin/installboot bin/isodir bin/isoinfo bin/isoread bin/kill bin/ln bin/login bin/ls bin/mined bin/mkdir bin/mkfs bin/mknod bin/mkswap bin/mv bin/od bin/part bin/partition bin/readall bin/repartition bin/rm bin/rmdir bin/sed bin/setup bin/shutdown bin/sleep bin/sort bin/stty bin/sysenv bin/tar bin/uname bin/uncompress bin/update bin/vol bin/zcat etc etc/rc lib lib/keymaps `cd $base/usr && echo lib/keymaps/*` lib/pwdauth mdec mdec/boot mdec/bootblock mdec/jumpboot mdec/masterboot tmp " if [ "$std" ] then # Find the root device, and the real root device. . /etc/fstab realroot=`printroot -r` if [ $realroot = $root ] then rootdir=/ else umount $root >/dev/null 2>&1 mount $root /root || exit rootdir=/root fi echo -n " The installation root and /usr can be put on either one diskette of at least 1.2 Mb, or on two diskettes of at least 720 kb. Do you want to use a single diskette of at least 1.2 Mb? [y] "; read single case $single in ''|[yY]*|sure) single=t ;; *) single= esac echo -n "Which drive to use? [0] "; read drive case $drive in '') drive=0 ;; [01]) ;; *) echo "Please type '0' or '1'" >&2; exit 1 esac if [ "$single" ] then echo -n "Insert the root+usr diskette in drive $drive and hit RETURN" else echo -n "Insert the root diskette in drive $drive and hit RETURN" fi read ret rootdev=/dev/fd$drive v1=-1 else rootdir=$base v1='-t 1' fi umount $rootdev 2>/dev/null if [ "$std" ] then umount ${rootdev}p1 2>/dev/null umount ${rootdev}p2 2>/dev/null else umount $rootdir/minix 2>/dev/null umount $rootdir/etc 2>/dev/null fi mkfs $v1 -i 272 $rootdev 480 || exit mount $rootdev /mnt || exit if [ "$std" ] then partition -mf $rootdev 0 81:960 81:240 81:240 >/dev/null || exit repartition $rootdev >/dev/null || exit mkfs $v1 ${rootdev}p1 || exit mkfs $v1 ${rootdev}p2 || exit mount ${rootdev}p1 $rootdir/minix || exit # Hide /minix and /etc mount ${rootdev}p2 $rootdir/etc 2>/dev/null # (complains about /etc/mtab) else install -d /tmp/.minix || exit install -d /tmp/.etc || exit # Hide /minix and /etc mount -t lo /tmp/.minix $rootdir/minix || exit mount -t lo /tmp/.etc $rootdir/etc || exit fi cpdir -vx $rootdir /mnt || exit install -d -o 0 -g 0 -m 755 /mnt || exit install -d -o 0 -g 0 -m 555 /mnt/root || exit install -d -o 0 -g 0 -m 555 /mnt/mnt || exit install -d -o 0 -g 0 -m 555 /mnt/usr || exit if [ "$std" ] then umount ${rootdev}p2 2>/dev/null # Unhide /etc umount ${rootdev}p1 || exit # Unhide /minix else umount $rootdir/etc || exit # Unhide /etc umount $rootdir/minix || exit # Unhide /minix fi install -d -o 2 -g 0 -m 755 /mnt/minix || exit install -d -o 2 -g 0 -m 755 /mnt/etc || exit set `ls -t $rootdir/minix` # Install the latest kernel install -c $rootdir/minix/$1 /mnt/minix/`echo $1 | sed 's/r[0-9]*$//` || exit cpdir -v $base/usr/src/etc /mnt/etc || exit # Install a fresh /etc chown -R 0:0 /mnt/etc # Patch up owner and mode chmod 600 /mnt/etc/shadow # Change /etc/fstab. echo >/mnt/etc/fstab "\ # Poor man's File System Table. root=unknown usr=unknown" # How to install? echo >/mnt/etc/issue "\ Login as root and run 'setup' to install Minix." umount $rootdev || exit test "$std" && umount $root 2>/dev/null installboot -d $rootdev $base/usr/mdec/bootblock boot >/dev/null # Partition the root floppy whether necessary or not. (Two images can be # concatenated, or a combined image can be split later.) partition -mf $rootdev 0 81:960 0:0 81:1440 81:480 >/dev/null || exit if [ "$std" ] then if [ "$single" ] then repartition $rootdev >/dev/null usrdev=${rootdev}p2 else echo -n "Insert the usr diskette in drive $drive and hit RETURN" read ret usrdev=$rootdev fi fi mkfs $v1 -i 96 $usrdev 720 || exit mount $usrdev /mnt || exit install -d -o 0 -g 0 -m 755 /mnt || exit (cd $base/usr && exec tar cfD - $usrlist) | (cd /mnt && exec tar xvfp -) || exit umount $usrdev || exit # Put a "boot the other drive" bootblock on the /usr floppy. installboot -m $usrdev /usr/mdec/masterboot >/dev/null # We're done for Minix-vmd here, it has its own ideas on how to package /usr. test "$std" || exit 0 # Guess the size of /usr in compressed form. Assume compression down to 60% # of the original size. Use "disk megabytes" of 1000*1024 for a safe guess. set -$- `df | grep "^$usr"` size=`expr \\( $4 \\* 6 / 10 + 999 \\) / 1000` echo -n " You now need enough diskettes to hold /usr in compressed form, close to $size Mb total. " size= while [ -z "$size" ] do if [ "$single" ]; then defsize=1440; else defsize=720; fi echo -n "What is the size of the diskettes? [$defsize] "; read size case $size in '') size=$defsize ;; 360|720|1200|1440) ;; *) echo "Sorry, I don't believe \"$size\", try again." >&2 size= esac done drive= while [ -z "$drive" ] do echo -n "What floppy drive to use? [0] "; read drive case $drive in '') drive=0 ;; [01]) ;; *) echo "It must be 0 or 1, not \"$drive\"." drive= esac done echo " Enter the floppies in drive $drive when asked to. Mark them with the volume numbers! " sleep 2 if [ `arch` = i86 ]; then bits=13; else bits=16; fi >/tmp/DONE cd /usr && tar cvf - . /tmp/DONE \ | compress -b$bits | vol -w $size /dev/fd$drive && echo Done.