# NFS filesystem mounting -*- shell-script -*- # NBD root mounting mountroot() { [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" run_scripts /scripts/nfs-top [ "$quiet" != "y" ] && log_end_msg # For DHCP modprobe -q af_packet case ${IPOPTS} in none|off) # Do nothing ;; ""|on|any) # Bring up device ipconfig ${DEVICE} ;; dhcp|bootp|rarp|both) ipconfig -c ${IPOPTS} -d ${DEVICE} ;; *) ipconfig -d $IPOPTS # grab device entry from ip option NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then NEW_DEVICE=${NEW_DEVICE%:*} else # wrong parse, possibly only a partial string NEW_DEVICE= fi if [ -n "${NEW_DEVICE}" ]; then DEVICE="${NEW_DEVICE}" fi ;; esac # source relevant ipconfig output . /tmp/net-${DEVICE}.conf if [ -n "${nbdroot}" ]; then NBD_ROOT_SERVER=$( echo "${nbdroot}" | sed 's/:.*//') NBD_ROOT_PORT=$( echo "${nbdroot}" | sed 's/.*://') else NBD_ROOT_SERVER="${ROOTSERVER}" NBD_ROOT_PORT=${nbdport:-"2000"} fi if [ -n "${nbdswap}" ]; then NBD_SWAP_SERVER=$( echo "${nbdswap}" | sed 's/:.*//') NBD_SWAP_PORT=$( echo "${nbdswap}" | sed 's/.*://') else NBD_SWAP_SERVER="${ROOTSERVER}" NBD_SWAP_PORT=${nbdswapport:-"9572"} fi # try to get swap from the server if we dont have enough ram (less than 48M) min_ram=49152 real_ram=$(cat /proc/meminfo |grep MemTotal|tr -d " [a-z][A-Z]:") if [ ${real_ram} -lt ${min_ram} ];then [ "$quiet" != "y" ] && log_begin_msg "Only found ${real_ram}k main ram, trying network swap." nbd-client ${NBD_SWAP_SERVER} ${NBD_SWAP_PORT} /dev/nbd1 || true mkswap /dev/nbd1 || true swapon /dev/nbd1 || true [ "$quiet" != "y" ] && log_end_msg fi mkdir -p /cow mkdir -p /rofs # create tmpfs for writeable files mount -t tmpfs tmpfs /cow # mount the readonly root nbd-client ${NBD_ROOT_SERVER} ${NBD_ROOT_PORT} /dev/nbd0 && mount -o ro -t squashfs /dev/nbd0 /rofs # merge ro and rw filesystems mount -t unionfs -o dirs=/cow=rw:/rofs=ro unionfs ${rootmnt} # make the filesystems accessible mkdir -p ${rootmnt}/cow mount -o bind /cow ${rootmnt}/cow mkdir -p ${rootmnt}/rofs mount -o move /rofs ${rootmnt}/rofs # get the lts.conf via tftp tftpath=$(echo ${filename%/*}|tr -d '"') (echo "get ${tftpath}/lts.conf"|tftp ${ROOTSERVER} >/dev/null 2>&1) if [ -s ./lts.conf ];then cp ./lts.conf ${rootmnt}/etc/ fi [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" run_scripts /scripts/nfs-bottom [ "$quiet" != "y" ] && log_end_msg }