#!/bin/sh # IP-, NFS- und (D)NBD-Parameter aus der Kernel-Kommandozeile lesen for opts in ${KCMDLINE} ; do case ${KCMDLINE} in ip=*) # IP-Konfiguration: client-ip:server-ip:gateway:netmask IPINFO=${opts#ip=};; nfsroot=*) # NFS-Server und Pfad NFSROOT=${opts#nfsroot=};; nbdroot=*) # NBD-Konfiguration: server:port NBD=nbd # name of kernel module NBDOPT=${opts#nbdroot=};; dnbdroot=*) # DNBD-Konfiguration: server:port NBD=dnbd # name of kernel module NBDOPT=${opts#dnbdroot=};; dcsize=*) # RAM-Cache-Größe für DNBD DNBDCACHESIZE=${opts#dcsize=};; esac done RWDIR=/dev/shm # Root-Filesystem via NBD/DNBD importieren if [ -n "${NBD}" ] ; then nbdhost=${NBDOPT%:*} nbdopt=${NBDOPT#*:} nbdport=${nbdopt%,*} nbdfs=${nbdopt#$nbdport*} if [ -z "$nbdfs" ]; then RFST=ext2; else RFST=${nbdfs#*,}; fi echo "Diskless client using ${NBD} on $nbdhost:$nbdport with $RFST" modprobe ${RFST} case "${NBD}" in nbd) # Network Block Device des Standard-Kernels sleep 2 nbd-client $nbdhost $nbdport /dev/nbd0 RDEV=/dev/nbd0;; dnbd) # DNBD (Distributed Network Block Device) if [ -z $nodnbdcache ] ; then # variable not really used yet mkdir /dnbd mount -n -o 'size=$dcsize' -t tmpfs tmpfs ${RWDIR} cat /dev/zero > ${RWDIR}/cache 2>/dev/null clientopt="-c ${RWDIR}/cache" fi sleep 2 while ! dnbd-client -b $nbdhost -d /dev/dnbd0 $clientopt ; do sleep 1 done RDEV=/dev/dnbd0;; esac RWRO="ro" if [ -n "${COWLOOP}" -a -x /bin/cowdev ] ; then modprobe cowloop echo "Using Copy-on-Write block device for rw access" mount -n -t tmpfs -o size=50% ramfs ${RWDIR} mkdir /dev/cow && cp -a /tmp/ctl /dev/cow ln -s /dev/cowloop0 /dev/cow/0 cowdev -a ${RDEV} ${RWDIR}/nbd.cow usleep 10 RWRO="rw" RDEV=/dev/cow/0 fi sleep 2 mount -n -t $RFST -o $RWRO $RDEV /mnt # Root-Filesystem via NFS importieren elif [ -n NFS ] modprobe nfs portmap NFSRO=nfs mount -t nfs <§§I>[...]<§§I> fi # Union-FS aktivieren echo "Using UnionFS for rw access" RWDIR=/dev/shm mkdir -p ${RWDIR}/union ${RWDIR}/uniontmp mount -n -t tmpfs none ${RWDIR}/uniontmp mount -n --move /mnt /root mount -n -t unionfs -o dirs=${RWDIR}/uniontmp=rw:/root=${NFSRO}ro none /mnt mkdir -p /mnt/uniontmp mount -n --move ${RWDIR}/uniontmp /mnt/uniontmp mount -n --move /root /mnt/mnt # Pivoting nach neuer Art exec run-init -c dev/console /mnt /sbin/init