initramfs-tools: add sources and use them.
* Add source files directly to avoid recreating patches and patches lots of times with no gain. * Add du and expr busybox symlinks at init time. Bump revision. --HG-- extra : convert_revision : 4928750b0110f43cde577f6068e79bd0675c64cf
This commit is contained in:
parent
4e0f708ffb
commit
7e91eb4db8
25 changed files with 3645 additions and 292 deletions
309
templates/initramfs-tools/files/scripts/functions
Normal file
309
templates/initramfs-tools/files/scripts/functions
Normal file
|
@ -0,0 +1,309 @@
|
|||
# -*- shell-script -*-
|
||||
|
||||
_log_msg()
|
||||
{
|
||||
if [ "$quiet" = "y" ]; then return; fi
|
||||
printf "$@"
|
||||
}
|
||||
|
||||
log_success_msg()
|
||||
{
|
||||
_log_msg "Success: $@\n"
|
||||
}
|
||||
|
||||
log_failure_msg()
|
||||
{
|
||||
_log_msg "Failure: $@\n"
|
||||
}
|
||||
|
||||
log_warning_msg()
|
||||
{
|
||||
_log_msg "Warning: $@\n"
|
||||
}
|
||||
|
||||
log_begin_msg()
|
||||
{
|
||||
if [ -x /sbin/usplash_write ]; then
|
||||
/sbin/usplash_write "TEXT $@"
|
||||
fi
|
||||
_log_msg "Begin: $@ ... "
|
||||
}
|
||||
|
||||
log_end_msg()
|
||||
{
|
||||
if [ -x /sbin/usplash_write ]; then
|
||||
/sbin/usplash_write "SUCCESS ok"
|
||||
fi
|
||||
_log_msg "done.\n"
|
||||
}
|
||||
|
||||
panic()
|
||||
{
|
||||
if [ -x /sbin/usplash_write ]; then
|
||||
/sbin/usplash_write "QUIT"
|
||||
fi
|
||||
# Disallow console access
|
||||
if [ -n "${panic}" ]; then
|
||||
sleep ${panic}
|
||||
reboot
|
||||
fi
|
||||
modprobe i8042
|
||||
modprobe atkbd
|
||||
echo $@
|
||||
PS1='(initramfs) ' /bin/sh -i </dev/console >/dev/console 2>&1
|
||||
}
|
||||
|
||||
maybe_break()
|
||||
{
|
||||
if [ "${break:-}" = "$1" ]; then
|
||||
panic "Spawning shell within the initramfs"
|
||||
fi
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
eval "echo -n \${$@}"
|
||||
}
|
||||
|
||||
set_initlist()
|
||||
{
|
||||
unset initlist
|
||||
for si_x in ${initdir}/*; do
|
||||
# skip empty dirs without warning
|
||||
[ "${si_x}" = "${initdir}/*" ] && return
|
||||
|
||||
# only allow variable name chars
|
||||
case ${si_x#${initdir}/} in
|
||||
*[![:alnum:]_.]*)
|
||||
[ "${verbose}" = "y" ] \
|
||||
&& echo "$si_x ignored: not alphanumeric or '_' file"
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
# skip non executable scripts
|
||||
if [ ! -x ${si_x} ]; then
|
||||
[ "${verbose}" = "y" ] \
|
||||
&& echo "$si_x ignored: not executable"
|
||||
continue
|
||||
fi
|
||||
|
||||
# skip directories
|
||||
if [ -d ${si_x} ]; then
|
||||
[ "${verbose}" = "y" ] \
|
||||
&& echo "$si_x ignored: a directory"
|
||||
continue
|
||||
fi
|
||||
|
||||
initlist="${initlist} ${si_x#${initdir}/}"
|
||||
done
|
||||
}
|
||||
|
||||
reduce_satisfied()
|
||||
{
|
||||
deplist="$(render array_${1})"
|
||||
unset tmpdeplist
|
||||
for rs_y in ${deplist}; do
|
||||
# only allow variable name chars
|
||||
case ${rs_y} in
|
||||
*[![:alnum:]_.]*)
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
# skip non executable scripts
|
||||
if [ ! -x ${initdir}/${rs_y} ]; then
|
||||
continue
|
||||
fi
|
||||
# skip directories
|
||||
if [ -d ${initdir}/${rs_y} ]; then
|
||||
continue
|
||||
fi
|
||||
tmpdeplist="${tmpdeplist} ${rs_y}"
|
||||
done
|
||||
deplist=${tmpdeplist}
|
||||
for rs_x in ${runlist}; do
|
||||
pop_list_item ${rs_x} ${deplist}
|
||||
deplist=${tmppop}
|
||||
done
|
||||
eval array_${1}=\"${deplist}\"
|
||||
}
|
||||
|
||||
get_prereqs()
|
||||
{
|
||||
set_initlist
|
||||
for gp_x in ${initlist}; do
|
||||
tmp=$(${initdir}/${gp_x} prereqs)
|
||||
eval array_${gp_x}=\"${tmp}\"
|
||||
done
|
||||
}
|
||||
|
||||
count_unsatisfied()
|
||||
{
|
||||
set -- ${@}
|
||||
return ${#}
|
||||
}
|
||||
|
||||
# Removes $1 from initlist
|
||||
pop_list_item()
|
||||
{
|
||||
item=${1}
|
||||
shift
|
||||
set -- ${@}
|
||||
unset tmppop
|
||||
# Iterate
|
||||
for pop in ${@}; do
|
||||
if [ ${pop} = ${item} ]; then
|
||||
continue
|
||||
fi
|
||||
tmppop="${tmppop} ${pop}"
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
# This function generates the runlist, so we clear it first.
|
||||
reduce_prereqs()
|
||||
{
|
||||
unset runlist
|
||||
set -- ${initlist}
|
||||
i=$#
|
||||
# Loop until there's no more in the queue to loop through
|
||||
while [ ${i} -ne 0 ]; do
|
||||
oldi=${i}
|
||||
for rp_x in ${initlist}; do
|
||||
reduce_satisfied ${rp_x}
|
||||
count_unsatisfied $(render array_${rp_x})
|
||||
cnt=${?}
|
||||
if [ ${cnt} -eq 0 ]; then
|
||||
runlist="${runlist} ${rp_x}"
|
||||
pop_list_item ${rp_x} ${initlist}
|
||||
initlist=${tmppop}
|
||||
i=$((${i} - 1))
|
||||
fi
|
||||
done
|
||||
if [ ${i} -eq ${oldi} ]; then
|
||||
panic "PANIC: Circular dependancy. Exiting."
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
call_scripts()
|
||||
{
|
||||
for cs_x in ${runlist}; do
|
||||
# mkinitramfs verbose output
|
||||
if [ "${verbose}" = "y" ]; then
|
||||
echo "Calling hook ${cs_x}"
|
||||
fi
|
||||
${initdir}/${cs_x}
|
||||
# allow boot scripts to modify exported boot paramaters
|
||||
if [ -e /conf/param.conf ]; then
|
||||
. /conf/param.conf
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
run_scripts()
|
||||
{
|
||||
initdir=${1}
|
||||
[ ! -d ${initdir} ] && return
|
||||
get_prereqs
|
||||
reduce_prereqs
|
||||
call_scripts
|
||||
}
|
||||
|
||||
# Load custom modules first
|
||||
load_modules()
|
||||
{
|
||||
if [ -e /conf/modules ]; then
|
||||
cat /conf/modules | while read m; do
|
||||
# Skip empty lines
|
||||
if [ -z "$m" ]; then
|
||||
continue
|
||||
fi
|
||||
# Skip comments - d?ash removes whitespace prefix
|
||||
com=$(printf "%.1s" "${m}")
|
||||
if [ "$com" = "#" ]; then
|
||||
continue
|
||||
fi
|
||||
modprobe $m
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
# lilo compatibility
|
||||
parse_numeric() {
|
||||
case $1 in
|
||||
"")
|
||||
return
|
||||
;;
|
||||
/*)
|
||||
return
|
||||
;;
|
||||
[0-9]*:[0-9]*)
|
||||
minor=${1#*:}
|
||||
major=${1%:*}
|
||||
;;
|
||||
[A-Fa-f0-9]*)
|
||||
value=$(( 0x${1} ))
|
||||
minor=$(( ${value} % 256 ))
|
||||
major=$(( ${value} / 256 ))
|
||||
;;
|
||||
*)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
mknod -m 600 /dev/root b ${major} ${minor}
|
||||
ROOT=/dev/root
|
||||
}
|
||||
|
||||
configure_networking()
|
||||
{
|
||||
# networking already configured thus bail out
|
||||
[ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0
|
||||
|
||||
# support ip options see linux sources
|
||||
# Documentation/filesystems/nfsroot.txt
|
||||
case ${IP} in
|
||||
none|off)
|
||||
# Do nothing
|
||||
;;
|
||||
""|on|any)
|
||||
# Bring up device
|
||||
ipconfig -t 180 ${DEVICE}
|
||||
;;
|
||||
dhcp|bootp|rarp|both)
|
||||
ipconfig -t 180 -c ${IP} -d ${DEVICE}
|
||||
;;
|
||||
*)
|
||||
ipconfig -t 180 -d $IP
|
||||
|
||||
# grab device entry from ip option
|
||||
NEW_DEVICE=${IP#*:*:*:*:*:*}
|
||||
if [ "${NEW_DEVICE}" != "${IP}" ]; 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 ipconfig output
|
||||
if [ -n "${DEVICE}" ]; then
|
||||
# source specific bootdevice
|
||||
. /tmp/net-${DEVICE}.conf
|
||||
else
|
||||
# source any interface as not exaclty specified
|
||||
. /tmp/net-*.conf
|
||||
fi
|
||||
}
|
||||
|
||||
# Wait for queued kernel/udev events
|
||||
wait_for_udev()
|
||||
{
|
||||
[ -x "$(command -v udevadm)" ] || return 0
|
||||
udevadm settle ${1:+--timeout=$1}
|
||||
}
|
25
templates/initramfs-tools/files/scripts/init-premount/blacklist
Executable file
25
templates/initramfs-tools/files/scripts/init-premount/blacklist
Executable file
|
@ -0,0 +1,25 @@
|
|||
#!/bin/sh
|
||||
|
||||
PREREQ=""
|
||||
|
||||
prereqs()
|
||||
{
|
||||
echo "$PREREQ"
|
||||
}
|
||||
|
||||
case $1 in
|
||||
# get pre-requisites
|
||||
prereqs)
|
||||
prereqs
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
# sanity check
|
||||
[ -z "${blacklist}" ] && exit 0
|
||||
|
||||
# write blacklist to modprobe.d
|
||||
IFS=','
|
||||
for b in ${blacklist}; do
|
||||
echo "blacklist $b" >> /etc/modprobe.d/initramfs
|
||||
done
|
27
templates/initramfs-tools/files/scripts/init-top/all_generic_ide
Executable file
27
templates/initramfs-tools/files/scripts/init-top/all_generic_ide
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/sh
|
||||
|
||||
PREREQ=""
|
||||
prereqs()
|
||||
{
|
||||
echo "$PREREQ"
|
||||
}
|
||||
case $1 in
|
||||
# get pre-requisites
|
||||
prereqs)
|
||||
prereqs
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
for x in $(cat /proc/cmdline); do
|
||||
case ${x} in
|
||||
all_generic_ide)
|
||||
modprobe ide-generic
|
||||
;;
|
||||
all_generic_ide=*)
|
||||
if [ ${x#all_generic_ide=} ]; then
|
||||
modprobe ide-generic
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
27
templates/initramfs-tools/files/scripts/init-top/keymap
Executable file
27
templates/initramfs-tools/files/scripts/init-top/keymap
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/sh
|
||||
|
||||
PREREQ=""
|
||||
prereqs()
|
||||
{
|
||||
echo "$PREREQ"
|
||||
}
|
||||
case $1 in
|
||||
# get pre-requisites
|
||||
prereqs)
|
||||
prereqs
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
OPTS="-q"
|
||||
|
||||
# Should terminal be in UTF8 mode?
|
||||
if [ -x /sbin/kbd_mode ]; then
|
||||
/sbin/kbd_mode -u
|
||||
OPTS="${OPTS} -u"
|
||||
fi
|
||||
|
||||
# Load custom keymap
|
||||
if [ -x /sbin/loadkeys -a -r /etc/boottime.kmap.gz ]; then
|
||||
loadkeys ${OPTS} /etc/boottime.kmap.gz
|
||||
fi
|
135
templates/initramfs-tools/files/scripts/local
Normal file
135
templates/initramfs-tools/files/scripts/local
Normal file
|
@ -0,0 +1,135 @@
|
|||
# Local filesystem mounting -*- shell-script -*-
|
||||
|
||||
# Parameter: device node to check
|
||||
# Echos fstype to stdout
|
||||
# Return value: indicates if an fs could be recognized
|
||||
get_fstype ()
|
||||
{
|
||||
local FS FSTYPE FSSIZE RET
|
||||
FS="${1}"
|
||||
|
||||
# blkid has a more complete list of file systems,
|
||||
# but fstype is more robust
|
||||
eval $(fstype "${FS}" 2> /dev/null)
|
||||
if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then
|
||||
FSTYPE=$(/sbin/blkid -s TYPE -o value "${FS}" 2> /dev/null)
|
||||
fi
|
||||
RET=$?
|
||||
|
||||
if [ -z "${FSTYPE}" ]; then
|
||||
FSTYPE="unknown"
|
||||
fi
|
||||
|
||||
echo "${FSTYPE}"
|
||||
return ${RET}
|
||||
}
|
||||
|
||||
pre_mountroot()
|
||||
{
|
||||
wait_for_udev 10
|
||||
|
||||
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top"
|
||||
run_scripts /scripts/local-top
|
||||
[ "$quiet" != "y" ] && log_end_msg
|
||||
|
||||
# Don't wait for a root device that doesn't have a corresponding
|
||||
# device in /dev (ie, mtd0)
|
||||
if [ "${ROOT#/dev}" = "${ROOT}" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# If the root device hasn't shown up yet, give it a little while
|
||||
# to deal with removable devices
|
||||
if [ ! -e "${ROOT}" ] || ! $(get_fstype "${ROOT}" >/dev/null); then
|
||||
log_begin_msg "Waiting for root file system"
|
||||
|
||||
# Default delay is 180s
|
||||
if [ -z "${ROOTDELAY}" ]; then
|
||||
slumber=180
|
||||
else
|
||||
slumber=${ROOTDELAY}
|
||||
fi
|
||||
if [ -x /sbin/usplash_write ]; then
|
||||
/sbin/usplash_write "TIMEOUT ${slumber}" || true
|
||||
fi
|
||||
|
||||
slumber=$(( ${slumber} * 10 ))
|
||||
while [ ! -e "${ROOT}" ] \
|
||||
|| ! $(get_fstype "${ROOT}" >/dev/null); do
|
||||
/bin/sleep 0.1
|
||||
slumber=$(( ${slumber} - 1 ))
|
||||
[ ${slumber} -gt 0 ] || break
|
||||
done
|
||||
|
||||
if [ ${slumber} -gt 0 ]; then
|
||||
log_end_msg 0
|
||||
else
|
||||
log_end_msg 1 || true
|
||||
fi
|
||||
if [ -x /sbin/usplash_write ]; then
|
||||
/sbin/usplash_write "TIMEOUT 15" || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# We've given up, but we'll let the user fix matters if they can
|
||||
while [ ! -e "${ROOT}" ]; do
|
||||
# give hint about renamed root
|
||||
case "${ROOT}" in
|
||||
/dev/hd*)
|
||||
suffix="${ROOT#/dev/hd}"
|
||||
major="${suffix%[[:digit:]]}"
|
||||
major="${major%[[:digit:]]}"
|
||||
if [ -d "/sys/block/sd${major}" ]; then
|
||||
echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}"
|
||||
fi
|
||||
;;
|
||||
/dev/sd*)
|
||||
suffix="${ROOT#/dev/sd}"
|
||||
major="${suffix%[[:digit:]]}"
|
||||
major="${major%[[:digit:]]}"
|
||||
if [ -d "/sys/block/hd${major}" ]; then
|
||||
echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
echo "Gave up waiting for root device. Common problems:"
|
||||
echo " - Boot args (cat /proc/cmdline)"
|
||||
echo " - Check rootdelay= (did the system wait long enough?)"
|
||||
echo " - Check root= (did the system wait for the right device?)"
|
||||
echo " - Missing modules (cat /proc/modules; ls /dev)"
|
||||
panic "ALERT! ${ROOT} does not exist. Dropping to a shell!"
|
||||
done
|
||||
}
|
||||
|
||||
mountroot()
|
||||
{
|
||||
pre_mountroot
|
||||
|
||||
# Get the root filesystem type if not set
|
||||
if [ -z "${ROOTFSTYPE}" ]; then
|
||||
FSTYPE=$(get_fstype "${ROOT}")
|
||||
else
|
||||
FSTYPE=${ROOTFSTYPE}
|
||||
fi
|
||||
|
||||
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount"
|
||||
run_scripts /scripts/local-premount
|
||||
[ "$quiet" != "y" ] && log_end_msg
|
||||
|
||||
if [ "${readonly}" = "y" ]; then
|
||||
roflag=-r
|
||||
else
|
||||
roflag=-w
|
||||
fi
|
||||
|
||||
# FIXME This has no error checking
|
||||
modprobe ${FSTYPE}
|
||||
|
||||
# FIXME This has no error checking
|
||||
# Mount root
|
||||
mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
|
||||
|
||||
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"
|
||||
run_scripts /scripts/local-bottom
|
||||
[ "$quiet" != "y" ] && log_end_msg
|
||||
}
|
67
templates/initramfs-tools/files/scripts/local-premount/resume
Executable file
67
templates/initramfs-tools/files/scripts/local-premount/resume
Executable file
|
@ -0,0 +1,67 @@
|
|||
#!/bin/sh
|
||||
|
||||
PREREQ=""
|
||||
|
||||
prereqs()
|
||||
{
|
||||
echo "$PREREQ"
|
||||
}
|
||||
|
||||
case $1 in
|
||||
# get pre-requisites
|
||||
prereqs)
|
||||
prereqs
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "${resume}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case $resume in
|
||||
LABEL=*)
|
||||
resume="${resume#LABEL=}"
|
||||
|
||||
# support any / in LABEL= path (escape to \x2f)
|
||||
case "${resume}" in
|
||||
*[/]*)
|
||||
if [ -x "$(command -v sed)" ]; then
|
||||
resume="$(echo ${resume} | sed 's,/,\\x2f,g')"
|
||||
else
|
||||
if [ "${resume}" != "${resume#/}" ]; then
|
||||
resume="\x2f${resume#/}"
|
||||
fi
|
||||
if [ "${resume}" != "${resume%/}" ]; then
|
||||
resume="${resume%/}\x2f"
|
||||
fi
|
||||
IFS='/'
|
||||
newresume=
|
||||
for s in $resume; do
|
||||
if [ -z "${newresume}" ]; then
|
||||
newresume="${s}"
|
||||
else
|
||||
newresume="${newresume}\\x2f${s}"
|
||||
fi
|
||||
done
|
||||
unset IFS
|
||||
resume="${newresume}"
|
||||
fi
|
||||
esac
|
||||
resume="/dev/disk/by-label/${resume}"
|
||||
;;
|
||||
UUID=*)
|
||||
resume="/dev/disk/by-uuid/${resume#UUID=}"
|
||||
;;
|
||||
esac
|
||||
|
||||
[ ! -e "${resume}" ] && exit 0
|
||||
|
||||
[ ! -e /sys/power/resume ] && exit 0
|
||||
|
||||
# hardcode path, uswsusp ships an resume binary too
|
||||
if [ -n "${resume_offset}" ]; then
|
||||
/bin/resume ${resume} ${resume_offset}
|
||||
else
|
||||
/bin/resume ${resume}
|
||||
fi
|
85
templates/initramfs-tools/files/scripts/nfs
Normal file
85
templates/initramfs-tools/files/scripts/nfs
Normal file
|
@ -0,0 +1,85 @@
|
|||
# NFS filesystem mounting -*- shell-script -*-
|
||||
|
||||
# FIXME This needs error checking
|
||||
|
||||
retry_nr=0
|
||||
|
||||
# parse nfs bootargs and mount nfs
|
||||
do_nfsmount()
|
||||
{
|
||||
|
||||
configure_networking
|
||||
|
||||
# get nfs root from dhcp
|
||||
if [ "x${NFSROOT}" = "xauto" ]; then
|
||||
# check if server ip is part of dhcp root-path
|
||||
if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
|
||||
NFSROOT=${ROOTSERVER}:${ROOTPATH}
|
||||
else
|
||||
NFSROOT=${ROOTPATH}
|
||||
fi
|
||||
|
||||
# nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
|
||||
elif [ -n "${NFSROOT}" ]; then
|
||||
# nfs options are an optional arg
|
||||
if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
|
||||
NFSOPTS="-o ${NFSROOT#*,}"
|
||||
fi
|
||||
NFSROOT=${NFSROOT%%,*}
|
||||
if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
|
||||
NFSROOT=${ROOTSERVER}:${NFSROOT}
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "${NFSOPTS}" ]; then
|
||||
NFSOPTS="-o retrans=10"
|
||||
fi
|
||||
|
||||
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount"
|
||||
run_scripts /scripts/nfs-premount
|
||||
[ "$quiet" != "y" ] && log_end_msg
|
||||
|
||||
if [ ${readonly} = y ]; then
|
||||
roflag="-o ro"
|
||||
else
|
||||
roflag="-o rw"
|
||||
fi
|
||||
|
||||
nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
|
||||
}
|
||||
|
||||
# NFS root mounting
|
||||
mountroot()
|
||||
{
|
||||
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top"
|
||||
run_scripts /scripts/nfs-top
|
||||
[ "$quiet" != "y" ] && log_end_msg
|
||||
|
||||
modprobe nfs
|
||||
# For DHCP
|
||||
modprobe af_packet
|
||||
|
||||
wait_for_udev 10
|
||||
|
||||
# Default delay is around 180s
|
||||
# FIXME: add usplash_write info
|
||||
if [ -z "${ROOTDELAY}" ]; then
|
||||
delay=180
|
||||
else
|
||||
delay=${ROOTDELAY}
|
||||
fi
|
||||
|
||||
# loop until nfsmount succeds
|
||||
while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do
|
||||
[ ${retry_nr} -gt 0 ] && \
|
||||
[ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount"
|
||||
do_nfsmount
|
||||
retry_nr=$(( ${retry_nr} + 1 ))
|
||||
[ ! -e ${rootmnt}${init} ] && /bin/sleep 1
|
||||
[ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg
|
||||
done
|
||||
|
||||
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom"
|
||||
run_scripts /scripts/nfs-bottom
|
||||
[ "$quiet" != "y" ] && log_end_msg
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue