#!/bin/sh # # Copyright 2001 2002 Edson Brandi # All Rights Reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY EDSON BRANDI ``AS IS'' AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT EDSON BRANDI BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. ############################################ echo "Creating /dev under MFS..." mount_mfs -s 24000 -c 20 -o noatime swap /dev 2>&1 tar -xzpf /mfs/dev.tgz -C / >/dev/null 2>&1 cd /dev ./MAKEDEV all >/dev/null 2>&1 # # Now we will try to detect all IDE disks and existing slices and try to mount # everyone that is FAT, NTFS, UFS or EXT2FS type # # echo "Checking for slices..." # for i in `dmesg | egrep "ad0:|ad1:|ad2:|ad3:" | awk -F":" '{print $1}' | sort | uniq` do a=1 for x in `fdisk /dev/$i | grep sysid | awk -F"," '{print $1}' | awk '{print $2}'` do case ${x} in 5) echo "FAT16/32 partition found at /dev/${i}s${a}, i'll mount it under /mnt/dos.${a} ..." mount -t msdos /dev/${i}s${a} /mnt/dos.${a} ;; 6) echo "FAT16/32 partition found at /dev/${i}s${a}, i'll mount it under /mnt/dos.${a} ..." mount -t msdos /dev/${i}s${a} /mnt/dos.${a} ;; 12) echo "FAT16/32 partition found at /dev/${i}s${a}, i'll mount it under /mnt/dos.${a} ..." mount -t msdos /dev/${i}s${a} /mnt/dos.${a} ;; 7) echo "NTFS partition found at /dev/${i}s${a}, i'll mount it under /mnt/ntfs.${a} ..." mount -t ntfs /dev/${i}s${a} /mnt/ntfs.${a} ;; 131) echo "EXT2FS partition found at /dev/${i}s${a}, i'll mount it under /mnt/ext2fs.${a} ..." mount -t ext2fs /dev/${i}s${a} /mnt/ext2fs.${a} ;; 165) echo "UFS partition found at /dev/${i}s${a}, i'll mount it under /mnt/ufs.${a} ..." mount /dev/${i}s${a} /mnt/ufs.${a} ;; esac a=`expr $a + 1` done done #### #### # # Now, at boot time, we will try to find any freebsd/ directory under every slice # we have mounted. Our goal is, if we find the directory, we will look for # .flp files to attach them as Virtual Nodes ;-) # echo "Checking for Virtual Nodes..." # for i in `df -k | egrep "ufs|dos|ntfs|ext2fs" | awk '{print $6}'` do if [ -r ${i}/freebsd ]; then if [ -r ${i}/freebsd/tmp.flp ]; then vnconfig -c /dev/vn1c ${i}/freebsd/tmp.flp sleep 2 mount /tmp fi if [ -r ${i}/freebsd/var.flp ]; then vnconfig -c /dev/vn3c ${i}/freebsd/var.flp sleep 2 mount /var fi if [ -r ${i}/freebsd/etc.flp ]; then vnconfig -c /dev/vn4c ${i}/freebsd/etc.flp sleep 2 mount /etc . /etc/rc.conf fi if [ -r ${i}/freebsd/home.flp ]; then vnconfig -c /dev/vn5c ${i}/freebsd/home.flp sleep 2 mount /home fi if [ -r ${i}/freebsd/root.flp ]; then vnconfig -c /dev/vn6c ${i}/freebsd/root.flp sleep 2 mount /root fi if [ -r ${i}/freebsd/local.flp ]; then vnconfig -c /dev/vn7c ${i}/freebsd/local.flp sleep 2 mount /usr/local fi if [ -r ${i}/freebsd/X11R6.flp ]; then vnconfig -c /dev/vn8c ${i}/freebsd/X11R6.flp sleep 2 mount /usr/X11R6 fi fi done # Now we will check if virtual nodes were mount (will check for it via a control file) # If we find the partition file, its mounted, if not, we will generate it under MFS # and will unpack the necessery files. # if [ -r /tmp/XYZ123_ ]; then echo "/tmp partition was mounted via virtual node" else mount_mfs -s 32768 -c 20 -o nodev,noexec,nosuid,noatime swap /tmp 2>&1 echo "Generating /tmp under MFS" fi if [ -r /var/XYZ123_ ]; then echo "/var partition was mounted via virtual node" else mount_mfs -s 32768 -c 20 -o noatime swap /var 2>&1 /usr/sbin/mtree -deU -f /etc/mtree/BSD.var.dist -p /var >/dev/null 2>&1 logs=`/usr/bin/awk '$1 != "#" { printf "%s ", $1 } ' /etc/newsyslog.conf` if [ -n "$logs" ]; then /usr/bin/touch $logs fi /usr/bin/touch /var/log/lastlog echo "Generating /var under MFS" fi if [ -r /etc/XYZ123_ ]; then echo "/etc partition was mounted via virtual node" else mount_mfs -s 32768 -c 20 -o noatime swap /etc 2>&1 tar -xzpf /mfs/etc.tgz -C / >/dev/null 2>&1 echo "Generating /etc under MFS" fi if [ -r /home/XYZ123_ ]; then echo "/home partition was mounted via virtual node" else mount_mfs -s 32768 -c 20 -o noatime swap /home 2>&1 echo "Generating /home under MFS" fi if [ -r /root/XYZ123_ ]; then echo "/root partition was mounted via virtual node" else mount_mfs -s 32768 -c 20 -o noatime swap /root 2>&1 tar -xzpf /mfs/root.tgz -C / >/dev/null 2>&1 echo "Generating /root under MFS" fi if [ -r /usr/local/XYZ123_ ]; then echo "/usr/local partition was mounted via virtual node" else mount_mfs -s 32768 -c 20 -o noatime swap /usr/local/etc 2>&1 tar -xzpf /mfs/local_etc.tgz -C / >/dev/null 2>&1 echo "Generating /usr/local/etc under MFS" fi mount proc ############################################