|
|
|
#!/bin/sh
|
|
|
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
|
|
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
|
|
|
|
|
|
|
PATH=/usr/sbin:/usr/bin:/sbin:/bin
|
|
|
|
command -v getarg >/dev/null || . /lib/dracut-lib.sh
|
|
|
|
command -v setup_net >/dev/null || . /lib/net-lib.sh
|
|
|
|
|
|
|
|
# Huh? Empty $1?
|
|
|
|
[ -z "$1" ] && exit 1
|
|
|
|
|
|
|
|
# [ ! -z $2 ] means this is for manually bringing up network
|
|
|
|
# instead of real netroot; If It's called without $2, then there's
|
|
|
|
# no sense in doing something if no (net)root info is available
|
|
|
|
# or root is already there
|
|
|
|
[ -d $NEWROOT/proc ] && exit 0
|
|
|
|
[ -z "$netroot" ] && exit 1
|
multinic support: Add bootdev cmdline argument
This introduces a new cmdline argument bootdev, to support the case
where multiple nics need to be up before the netroot handler is called.
Cases involved might be bonding, iscsi multipathing, bonding, ...
This argument is required to decide which interface is the primary to
use for dhcp root-path, default gw, etc.
When multiple ip= items are present on the cmdline, the ip= parser
now enforces the presence of <dev> further demands that the new argument
bootdev contains the name of the primary interface. Configurtion if of
course still delegated to netroot but in is enhance to ensure that netroot
"waits" for all required interfaces to be up.
Example: root=dhcp ip=eth0:dhcp ip=client-ip:::netmask::eth1:off bootdev=eth0
First, the ip= cmdline parser ensures that all ip items contain a <dev> then
checks the ip items and checks as well that an ip= item for the given bootdev
was found.
When the first netroot starts, probably for eth1, it checks wheter interface
configuration for all interfaces is available. If not it exits. The second
start of netroot (eth0, which was a bit delayed because of dhcp) sees that
all interfaces are present, configures them and continues.
16 years ago
|
|
|
|
|
|
|
# Set or override primary interface
|
|
|
|
netif=$1
|
multinic support: Add bootdev cmdline argument
This introduces a new cmdline argument bootdev, to support the case
where multiple nics need to be up before the netroot handler is called.
Cases involved might be bonding, iscsi multipathing, bonding, ...
This argument is required to decide which interface is the primary to
use for dhcp root-path, default gw, etc.
When multiple ip= items are present on the cmdline, the ip= parser
now enforces the presence of <dev> further demands that the new argument
bootdev contains the name of the primary interface. Configurtion if of
course still delegated to netroot but in is enhance to ensure that netroot
"waits" for all required interfaces to be up.
Example: root=dhcp ip=eth0:dhcp ip=client-ip:::netmask::eth1:off bootdev=eth0
First, the ip= cmdline parser ensures that all ip items contain a <dev> then
checks the ip items and checks as well that an ip= item for the given bootdev
was found.
When the first netroot starts, probably for eth1, it checks wheter interface
configuration for all interfaces is available. If not it exits. The second
start of netroot (eth0, which was a bit delayed because of dhcp) sees that
all interfaces are present, configures them and continues.
16 years ago
|
|
|
[ -e "/tmp/net.bootdev" ] && read netif < /tmp/net.bootdev
|
|
|
|
|
|
|
|
# Figure out the handler for root=dhcp by recalling all netroot cmdline
|
|
|
|
# handlers when this is not called from manually network bringing up.
|
|
|
|
if [ -z "$2" ]; then
|
|
|
|
if [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ] ; then
|
|
|
|
# Unset root so we can check later
|
|
|
|
unset root
|
|
|
|
|
|
|
|
# Load dhcp options
|
|
|
|
[ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
|
|
|
|
|
|
|
|
# If we have a specific bootdev with no dhcpoptions or empty root-path,
|
|
|
|
# we die. Otherwise we just warn
|
|
|
|
if [ -z "$new_root_path" ] ; then
|
|
|
|
[ -n "$BOOTDEV" ] && die "No dhcp root-path received for '$BOOTDEV'"
|
|
|
|
warn "No dhcp root-path received for '$BOOTDEV' trying other interfaces if available"
|
|
|
|
exit 1
|
|
|
|
fi
|
multinic support: Add bootdev cmdline argument
This introduces a new cmdline argument bootdev, to support the case
where multiple nics need to be up before the netroot handler is called.
Cases involved might be bonding, iscsi multipathing, bonding, ...
This argument is required to decide which interface is the primary to
use for dhcp root-path, default gw, etc.
When multiple ip= items are present on the cmdline, the ip= parser
now enforces the presence of <dev> further demands that the new argument
bootdev contains the name of the primary interface. Configurtion if of
course still delegated to netroot but in is enhance to ensure that netroot
"waits" for all required interfaces to be up.
Example: root=dhcp ip=eth0:dhcp ip=client-ip:::netmask::eth1:off bootdev=eth0
First, the ip= cmdline parser ensures that all ip items contain a <dev> then
checks the ip items and checks as well that an ip= item for the given bootdev
was found.
When the first netroot starts, probably for eth1, it checks wheter interface
configuration for all interfaces is available. If not it exits. The second
start of netroot (eth0, which was a bit delayed because of dhcp) sees that
all interfaces are present, configures them and continues.
16 years ago
|
|
|
|
|
|
|
# Set netroot to new_root_path, so cmdline parsers don't call
|
|
|
|
netroot=$new_root_path
|
|
|
|
|
|
|
|
# FIXME!
|
|
|
|
for f in $hookdir/cmdline/90*.sh; do
|
|
|
|
[ -f "$f" ] && . "$f";
|
|
|
|
done
|
|
|
|
else
|
|
|
|
rootok="1"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check: do we really know how to handle (net)root?
|
|
|
|
[ -z "$root" ] && die "No or empty root= argument"
|
|
|
|
[ -z "$rootok" ] && die "Don't know how to handle 'root=$root'"
|
|
|
|
|
|
|
|
handler=${netroot%%:*}
|
|
|
|
handler=${handler%%4}
|
|
|
|
handler=$(command -v ${handler}root)
|
|
|
|
if [ -z "$netroot" ] || [ ! -e "$handler" ] ; then
|
|
|
|
die "No handler for netroot type '$netroot'"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Source netroot hooks before we start the handler
|
|
|
|
source_hook netroot $netif
|
|
|
|
|
|
|
|
# Run the handler; don't store the root, it may change from device to device
|
|
|
|
# XXX other variables to export?
|
|
|
|
if $handler $netif $netroot $NEWROOT; then
|
|
|
|
# Network rootfs mount successful - save interface info for ifcfg etc.
|
|
|
|
save_netinfo $netif
|
|
|
|
fi
|
|
|
|
exit 0
|