Skip to content

Commit

Permalink
fix(connman): copy netroot.sh from the network module and install it
Browse files Browse the repository at this point in the history
As requested by johannbg.

Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
  • Loading branch information
zboszor authored and johannbg committed Mar 28, 2022
1 parent f30d035 commit f6d83f9
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 0 deletions.
1 change: 1 addition & 0 deletions modules.d/35connman/module-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ install() {
# in an emergency shell.
inst_multiple ip sed grep

inst_script "$moddir/netroot.sh" "/sbin/netroot"
inst connmand
inst connmanctl
inst connmand-wait-online
Expand Down
92 changes: 92 additions & 0 deletions modules.d/35connman/netroot.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#!/bin/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

if [ -z "$netroot" ]; then
netroot=$(getarg netroot=)
fi

[ -z "$netroot" ] && exit 1

# Set or override primary interface
netif=$1
[ -e "/tmp/net.bootdev" ] && read -r netif < /tmp/net.bootdev

case "$netif" in
??:??:??:??:??:??) # MAC address
for i in /sys/class/net/*/address; do
mac=$(cat "$i")
if [ "$mac" = "$netif" ]; then
i=${i%/address}
netif=${i##*/}
break
fi
done ;;
esac

# 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 getarg "root=dhcp" || getarg "netroot=dhcp" || getarg "root=dhcp6" || getarg "netroot=dhcp6"; then
# Load dhcp options
# shellcheck disable=SC1090
[ -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 '$netif' trying other interfaces if available"
exit 1
fi

rm -f -- "$hookdir"/initqueue/finished/dhcp.sh

# Set netroot to new_root_path, so cmdline parsers don't call
netroot=$new_root_path

# FIXME!
unset rootok
for f in "$hookdir"/cmdline/90*.sh; do
# shellcheck disable=SC1090
[ -f "$f" ] && . "$f"
done
else
rootok="1"
fi

# Check: do we really know how to handle (net)root?
if [ -z "$root" ]; then
root=$(getarg root=)
fi
[ -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?
[ -n "$handler" ] && "$handler" "$netif" "$netroot" "$NEWROOT"
save_netinfo "$netif"

exit 0

0 comments on commit f6d83f9

Please sign in to comment.