/etc/initramfs-tools/scripts/mythbuntu_nbd is in mythbuntu-diskless-client 0.9-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 | # 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
if [ -n "$dhcpport" ]; then
DHCPPORT="$dhcpport"
fi
# For DHCP
modprobe -q af_packet
case ${IPOPTS} in
none|off)
# Do nothing
;;
""|on|any)
# Bring up device
ipconfig ${DEVICE}
;;
dhcp|bootp|rarp|both)
if [ ${IPOPTS} == "dhcp"] && [ -n "$DHCPPORT" ]; then
IPOPTS="${IPOPTS} -p ${DHCPPORT}"
fi
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
# command line parsing
for x in $(cat /proc/cmdline); do
case $x in
wol=*)
WOLADDRESS="${x#wol=}"
;;
overlay=*)
OVERLAY="${x#overlay=}"
;;
overlaykey=*)
OVERLAYKEY="${x#overlaykey=}"
;;
minram=*)
MINRAM="${x#minram=}"
;;
union=*)
UNIONTYPE="${x#union=}"
;;
hostnameoverride=*)
HOSTNAMEOVERRIDE="${x#hostnameoverride=}"
;;
esac
done
# 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/.*://')
if [ -z "$NBD_ROOT_PORT" ] || [ "$NBD_ROOT_SERVER" = "$NBD_ROOT_PORT" ]; then
NBD_ROOT_PORT="2000"
fi
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/.*://')
if [ -z "$NBD_SWAP_PORT" ] || [ "$NBD_SWAP_SERVER" = "$NBD_SWAP_PORT" ]; then
NBD_ROOT_PORT="9572"
fi
else
NBD_SWAP_SERVER="${ROOTSERVER}"
NBD_SWAP_PORT=${nbdswapport:-"9572"}
fi
if [ -n "$WOLADDRESS" ] && [ -x /sbin/etherwake ]; then
[ "$quiet" != "y" ] && log_begin_msg "WOL: waking up $WOLADDRESS (using etherwake)"
etherwake -i $DEVICE $WOLADDRESS
[ "$quiet" != "y" ] && log_end_msg
fi
# try to get swap from the server if we dont have enough ram (less than 48M)
if [ -n "$MINRAM" ]; then
min_ram="$MINRAM"
else
min_ram=49152
fi
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
# mount the readonly root
# borrowed from scripts/nfs (initramfs-tools package)
if [ -z "${ROOTDELAY}" ]; then
delay=180
else
delay=${ROOTDELAY}
fi
retry_nr=0
while [ ${retry_nr} -lt ${delay} ] && [ ! -e /rofs${init} ]; do
[ ${retry_nr} -gt 0 ] && \
[ "$quiet" != "y" ] && log_begin_msg "Retrying nbd mount"
# FIXME: what happens if nbd-client has already mounted /dev/nbd0 ?!
nbd-client ${NBD_ROOT_SERVER} ${NBD_ROOT_PORT} /dev/nbd0 && mount -o ro -t squashfs /dev/nbd0 /rofs
retry_nr=$(( ${retry_nr} + 1 ))
[ ! -e /rofs${init} ] && /bin/sleep 1
[ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg
done
# mount the overlay file system
if [ ! "x$OVERLAY" = "xtmpfs" ]; then
if [ "x$OVERLAYKEY" = "xMAC" ]; then
# thanks to Scorpi for pointing me to this file
# Note: we strip colons from the MAC address
KEY=`cat /sys/class/net/${DEVICE}/address | tr -d :`
elif [ "x$OVERLAYKEY" = "xHOSTNAME" ]; then
# $HOSTNAME is provided by ipconfig
# It's set via DHCP or via the ip= boot option
# Maybe we should try to get that via /etc/hostname
# but that might come from a static environment (squashfs),
# so I'll leave it out for the moment
KEY="$HOSTNAME"
else
KEY="$OVERLAYKEY"
fi
if [ "x$HOSTNAMEOVERRIDE" = "xtrue" ]; then
hostname "$KEY"
fi
case "$OVERLAY" in
# either specify the share using nfs=
# or say NFS or nfs to enable auto-detection
nfs=*|NFS|nfs)
OL="${OVERLAY#nfs=}"
# defaults are used if OL=""
if [ "$OL" == "NFS" ] || [ "$OL" == "nfs" ]; then
OL=""
fi
# Sorry if this is a bit messy, but I don't want to overwrite variables
# borrowed from scripts/nfs (initramfs-tools package)
if [ -z "${NFSOPTS}" ]; then
NFSOPTS="-o retrans=10"
fi
OVERLAYSERVER=$( echo "${OL}" | sed 's/:.*//')
OVERLAYPATH=$( echo "${OL}" | sed 's/.*://')
if [ ! -n "$OVERLAYSERVER" ]; then
OVERLAYSERVER="${NBD_ROOT_SERVER}"
fi
if [ ! -n "$OVERLAYPATH" ]; then
# is this the correct path?
OVERLAYPATH="/var/cache/mythbuntu-diskless/overlay/"
fi
SHARE="${OVERLAYSERVER}:${OVERLAYPATH}"
# I wish this could be wrapped in a while loop like nbd-client
# But I can't think of a good way to check if the file system was successfully mounted
nfsmount -o rw -o nolock ${NFSOPTS} ${SHARE} /cow
;;
*)
mount ${OVERLAY} /cow
;;
esac
if [ ! -d /cow/${KEY} ]; then
mkdir /cow/${KEY}
fi
else
KEY=""
mount -t tmpfs tmpfs /cow
fi
# merge ro and rw file systems
if [ "x$UNIONTYPE" = "xaufs" ]; then
mount -t aufs -o br:/cow/${KEY}=rw:/rofs=ro aufsroot ${rootmnt}
else
mount -t unionfs -o dirs=/cow/${KEY}=rw:/rofs=ro,debug=1 unionfs ${rootmnt}
fi
# make the filesystems accessible
mkdir -p ${rootmnt}/cow
# note: this line also applies to default tmpfs/unionfs setup from ltsp
# use of ${KEY} might be problematic there, but that doesn't matter for
# mythbuntu-diskless
mount -o bind /cow/${KEY} ${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
if [ -n "$IPV4DNS0" ] && [ ! "$IPV4DNS0" = "0.0.0.0" ]; then
echo "# created by mythbuntu-diskless initramfs script" > ${rootmnt}/etc/resolv.conf
echo "nameserver $IPV4DNS0" >> ${rootmnt}/etc/resolv.conf
fi
if [ -n "$IPV4DNS1" ] && [ ! "$IPV4DNS1" = "0.0.0.0" ]; then
echo "nameserver $IPV4DNS1" >> ${rootmnt}/etc/resolv.conf
fi
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom"
run_scripts /scripts/nfs-bottom
[ "$quiet" != "y" ] && log_end_msg
}
|