From f4841254ada770b12d6a950f609d60ce100a8544 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 27 Oct 2017 17:22:48 +0200 Subject: [rfs-stage31/dhcp] "Fix" DHCP setup logic Like this can ever be fixed... --- .../data/opt/openslx/scripts/udhcpc-openslx | 4 ++-- core/rootfs/rootfs-stage31/data/inc/setup_stage32 | 1 - core/rootfs/rootfs-stage31/data/inc/setup_stage4 | 1 - core/rootfs/rootfs-stage31/data/inc/udhcpc-trigger | 15 +++++++++++++-- core/rootfs/rootfs-stage31/data/init | 18 +++++++++++++++--- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/core/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx b/core/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx index 13de9ff4..d0fb2410 100755 --- a/core/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx +++ b/core/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx @@ -112,8 +112,8 @@ case "$1" in # Search domains if [ -n "$search" ]; then printf -v CONF "${CONF}search $search\n" - elif [ -n "$SLX_SEARCH_DOMAIN" ]; then - printf -v CONF "${CONF}search $SLX_SEARCH_DOMAIN\n" + elif [ -n "$SLX_NET_SEARCH" ]; then + printf -v CONF "${CONF}search $SLX_NET_SEARCH\n" elif [ -n "$SLX_NET_DOMAIN" ]; then printf -v CONF "${CONF}search $SLX_NET_DOMAIN\n" fi diff --git a/core/rootfs/rootfs-stage31/data/inc/setup_stage32 b/core/rootfs/rootfs-stage31/data/inc/setup_stage32 index 6568fb7d..81a3da16 100644 --- a/core/rootfs/rootfs-stage31/data/inc/setup_stage32 +++ b/core/rootfs/rootfs-stage31/data/inc/setup_stage32 @@ -47,7 +47,6 @@ FUTURE_ROOT="/mnt" # Move network stuff cp /etc/hostname /etc/hosts "${FUTURE_ROOT}/etc/" cp /etc/resolv.conf "${FUTURE_ROOT}/opt/openslx/" -[ -s "/run/config" ] && cat "/run/config" >> "${FUTURE_ROOT}/opt/openslx/config" # if booting with splash, suppress kernel output in stage32 if [ $SPLASH -eq 1 ]; then diff --git a/core/rootfs/rootfs-stage31/data/inc/setup_stage4 b/core/rootfs/rootfs-stage31/data/inc/setup_stage4 index 585627c2..a00117f2 100644 --- a/core/rootfs/rootfs-stage31/data/inc/setup_stage4 +++ b/core/rootfs/rootfs-stage31/data/inc/setup_stage4 @@ -48,7 +48,6 @@ FUTURE_ROOT="/mnt" cp /etc/hostname /etc/hosts "${FUTURE_ROOT}/etc/" cp /etc/resolv.conf "${FUTURE_ROOT}/opt/openslx/" -[ -s "/run/config" ] && cat "/run/config" >> "${FUTURE_ROOT}/opt/openslx/config" # if booting with splash, suppress kernel output in stage32 if [ $SPLASH -eq 1 ]; then diff --git a/core/rootfs/rootfs-stage31/data/inc/udhcpc-trigger b/core/rootfs/rootfs-stage31/data/inc/udhcpc-trigger index 02987f21..7e7e65f2 100755 --- a/core/rootfs/rootfs-stage31/data/inc/udhcpc-trigger +++ b/core/rootfs/rootfs-stage31/data/inc/udhcpc-trigger @@ -62,13 +62,24 @@ if [ -z "$domain" ]; then fqdn=$(timeout -t 3 nslookup "$ip" | grep -E "^Address +[0-9]+: +$ip " | head -n 1 | awk '{print $4}') domain="${fqdn#*.}" fi +# Add domain to list of search domains if not in there yet +if [ -n "$domain" ] && [ -n "$search" ]; then + FOUND=no + for sd in $search; do + [ "x$sd" = "x$domain" ] && FOUND=yes + done + [ "$FOUND" = "no" ] && search="$domain $search" +elif [ -n "$domain" ]; then + search="$domain" +fi +# Write out if [ -n "$domain" ]; then echo "domain $domain" >> "/etc/resolv.conf" + echo "SLX_NET_DOMAIN='$domain'" >> /run/config fi if [ -n "$search" ]; then echo "search $search" >> "/etc/resolv.conf" -elif [ -n "$domain" ]; then - echo "search $domain" >> "/etc/resolv.conf" + echo "SLX_NET_SEARCH='$search'" >> /run/config fi diff --git a/core/rootfs/rootfs-stage31/data/init b/core/rootfs/rootfs-stage31/data/init index 44124e46..d191b06f 100755 --- a/core/rootfs/rootfs-stage31/data/init +++ b/core/rootfs/rootfs-stage31/data/init @@ -140,9 +140,6 @@ if [ ! -z "$SLX_DEMO_PASS" ]; then sed -i "s#^demo:[^:]*:#demo:$SLX_DEMO_PASS:#" "${FUTURE_ROOT}/etc/shadow" fi -# one last debug shell if activated -[ $DEBUG -ge 1 ] && drop_shell "Requested Debug Shell: before switch_root." - # Activate debug shell after switchroot? [ -n "$DEBUG_SHELL" ] && ln -s "../debug-shell.service" "${FUTURE_ROOT}/usr/lib/systemd/system/sysinit.target.wants/debug-shell.service" @@ -198,6 +195,21 @@ EOF ln -s "../exam.service" "${FUTURE_ROOT}/etc/systemd/system/sysinit.target.wants/exam.service" fi +# Merge freshly generated config to stage32 +if [ -s "/run/config" ]; then + line= + while read -r line || [ -n "$line" ]; do + [ "${line:0:1}" = '#' ] && continue + var="${line%%=*}" + [ "$var" = "$line" ] && continue + sed -i -r "s/^(${var}=)/#\\1/" "${FUTURE_ROOT}/opt/openslx/config" + done < "/run/config" + cat "/run/config" >> "${FUTURE_ROOT}/opt/openslx/config" +fi + +# one last debug shell if activated +[ $DEBUG -ge 1 ] && drop_shell "Requested Debug Shell: before switch_root." + # unmount filesystems for mnt in run tmp; do busybox umount -f -l "/$mnt" 2>/dev/null -- cgit v1.2.3-55-g7522