From e10d936b05d91bd35f4bddc12b125195a99e44e0 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 5 Jun 2013 16:58:12 +0200 Subject: Fix Network setup when using bridge Unify coding style --- .../rootfs/rootfs-stage31/data/bin/setup_network | 41 +++++----- remote/rootfs/rootfs-stage31/data/init | 8 +- .../data/etc/openslx/udhcpc.openslx.script | 90 --------------------- .../rootfs-stage32/data/opt/openslx/bin/dhcp++ | 12 +-- .../data/opt/openslx/bin/udhcpc.openslx.script | 92 ++++++++++++++++++++++ 5 files changed, 123 insertions(+), 120 deletions(-) delete mode 100755 remote/rootfs/rootfs-stage32/data/etc/openslx/udhcpc.openslx.script create mode 100755 remote/rootfs/rootfs-stage32/data/opt/openslx/bin/udhcpc.openslx.script (limited to 'remote') diff --git a/remote/rootfs/rootfs-stage31/data/bin/setup_network b/remote/rootfs/rootfs-stage31/data/bin/setup_network index 2578de4c..f9ff1bd1 100755 --- a/remote/rootfs/rootfs-stage31/data/bin/setup_network +++ b/remote/rootfs/rootfs-stage31/data/bin/setup_network @@ -10,17 +10,17 @@ ip link set dev lo up 2>/dev/null ip addr add 127.0.0.1/8 dev lo 2>/dev/null echo "Setting up bridge" -local bridge=br0 -local brnwif=eth0 -local nwifmac=${MAC} +BRIDGE="br0" +BRNWIF="eth0" +NWIFMAC="${MAC}" # bridge 0 already defined or some other problem -brctl addbr ${bridge} -brctl stp ${bridge} 0 -brctl setfd ${bridge} 0.000000000001 -ip link set addr ${nwifmac} ${bridge} -ip link set dev ${brnwif} up -brctl addif ${bridge} ${brnwif} +brctl addbr "$BRIDGE" +brctl stp "$BRIDGE" 0 +brctl setfd "$BRIDGE" 0.000000000001 +ip link set addr "$NWIFMAC" "$BRIDGE" +ip link set dev "$BRNWIF" up +brctl addif "$BRIDGE" "$BRNWIF" # analyze ip information from the kernel command line and put parts # of it into several variables @@ -32,20 +32,19 @@ if [ -n "$IPINFO" ] ; then done; echo $val|sed "s/:.*//"; } - clientip=$(getip 1) - serverip=$(getip 2) - gateway=$(getip 3) - subnet_mask=$(getip 4) - broadcast_address=$(ipcalc -s -b $clientip $subnet_mask|sed s/.*=//) - [ -z "$broadcast_address" ] && broadcast_address=255.255.255.255 + CLIENTIP="$(getip 1)" + SERVERIP="$(getip 2)" + GATEWAY="$(getip 3)" + SUBNET_MASK="$(getip 4)" + BROADCAST_ADDRESS="$(ipcalc -s -b "$CLIENTIP" "$SUBNET_MASK" | sed s/.*=//)" + [ -z "$BROADCAST_ADDRESS" ] && BROADCAST_ADDRESS="255.255.255.255" # we might have an idea of the dns server via preboot - dns_srv=$(getip 5) - [ -n "$dns_srv" ] && echo nameserver $dns_srv >/etc/resolv.conf; + DNS_SERVER="$(getip 5)" # set static ip address - ip addr add $clientip/$(ipcalc -s -p $clientip $subnet_mask|sed s/.*=//) \ - broadcast $broadcast_address dev $bridge - ip link set dev ${bridge} up - ip route add default via $gateway + ip addr add "$CLIENTIP/$(ipcalc -s -p "$CLIENTIP" "$SUBNET_MASK" | sed "s/.*=//")" \ + broadcast "$BROADCAST_ADDRESS" dev "$BRIDGE" + ip link set dev "$BRIDGE" up + ip route add default via "$GATEWAY" dev "$BRIDGE" else NOIPYET="yes" fi diff --git a/remote/rootfs/rootfs-stage31/data/init b/remote/rootfs/rootfs-stage31/data/init index 06be8376..06610542 100755 --- a/remote/rootfs/rootfs-stage31/data/init +++ b/remote/rootfs/rootfs-stage31/data/init @@ -107,10 +107,10 @@ echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="'$MAC'", A # create ip config cat >> /mnt/opt/openslx/config < $IP_CONF - echo "subnet=$subnet" >> $IP_CONF - echo "broadcast=$broadcast" >> $IP_CONF - echo "gateway=$router" >> $IP_CONF - - # Update resolver configuration file - R="" - if [ -n "$domain" ]; then - R="domain $domain -" - else - R="domain lp.ruf.uni-freiburg.de -search lp.ruf.uni-freiburg.de -" - fi - count=1; - for i in $dns; do - echo "$0: Adding DNS $i" - R="${R}nameserver $i -" - count=$((count+1)); - done - - if [ -x /sbin/resolvconf ]; then - echo -n "$R" | resolvconf -a "${interface}.udhcpc" - else - echo -n "$R" > "$RESOLV_CONF" - fi - - # TODO i.e. event trigger - [ "x$(grep -ci mount /proc/cmdline)" != "x0" ] && systemctl start nfs-mount.service - # Always mount virtlib directory - systemctl start var-lib-virt.service - # Write to openslx-config - echo "# Config written by openslx-dhcp-script" >> /opt/openslx/config - echo "SLX_DNS='$dns'" >> /opt/openslx/config - echo "SLX_HOSTNAME='$(hostname)'" >> /opt/openslx/config - - ;; - - deconfig) - - ;; - - leasefail) - echo "$0: Lease failed: $message" - ;; - - nak) - echo "$0: Received a NAK: $message" - ;; - - *) - echo "$0: Unknown udhcpc command: $1"; - exit 1; - ;; -esac diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/dhcp++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/dhcp++ index f3d7d4c2..bda8e7e2 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/dhcp++ +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/dhcp++ @@ -1,10 +1,12 @@ #!/bin/bash -export PATH=$PATH:/opt/openslx/bin:/opt/openslx/sbin:/opt/openslx/usr/bin:/opt/openslx/usr/sbin +export PATH="$PATH:/opt/openslx/bin:/opt/openslx/sbin:/opt/openslx/usr/bin:/opt/openslx/usr/sbin" -NET_IF=$1 -NET_IP=$(ip addr show dev ${NET_IF} | grep "inet " | awk -F " " '{print $2}' | awk -F "/" '{print $1}') +NET_IF="$1" +NET_IP="$(ip addr show dev "${NET_IF}" | grep "inet " | awk -F " " '{print $2}' | awk -F "/" '{print $1}')" UDHCPC_OPTS="" -[ ! -z "$NET_IP" ] && UDHCPC_OPTS=" -r $NET_IP " -/opt/openslx/sbin/udhcpc $UDHCPC_OPTS -O domain -O nissrv -O nisdomain -O wpad -t 8 -s /etc/openslx/udhcpc.openslx.script -i $NET_IF +[ ! -z "$NET_IP" ] && UDHCPC_OPTS=" -r '$NET_IP' " +echo "udhcp++: running on $NET_IF with additional params $UDHCPC_OPTS" >> "/tmp/udhcpclog" +/opt/openslx/sbin/udhcpc $UDHCPC_OPTS -O domain -O nissrv -O nisdomain -O wpad -t 8 -s /opt/openslx/bin/udhcpc.openslx.script -i "$NET_IF" + diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/udhcpc.openslx.script b/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/udhcpc.openslx.script new file mode 100755 index 00000000..83877adb --- /dev/null +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/udhcpc.openslx.script @@ -0,0 +1,92 @@ +#!/bin/bash +# ----------------------------------------------------------------------------- +# +# Copyright (c) 2011 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your suggestions, praise, or complaints to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org/ +# ----------------------------------------------------------------------------- +# +# Mini-Linux Toolkit +# +# ----------------------------------------------------------------------------- + + +RESOLV_CONF="/etc/resolv.conf" +IP_CONF="/tmp/udhcpc_ip_config" + +export PATH=$PATH:/opt/openslx/sbin:/opt/openslx/bin + +echo "$interface -> $ip" >> "/tmp/udhcpclog" + +case $1 in + bound|renew) + + [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" + [ -n "$subnet" ] && NETMASK="netmask $subnet" + + ip addr add $ip/$(ipcalc -s -p $ip $subnet|sed s/.*=//) dev $interface + ip route add default via $router + + echo "ip=$ip" > $IP_CONF + echo "subnet=$subnet" >> $IP_CONF + echo "broadcast=$broadcast" >> $IP_CONF + echo "gateway=$router" >> $IP_CONF + + # Update resolver configuration file + R="" + if [ -n "$domain" ]; then + R="domain $domain +" + else + R="domain lp.ruf.uni-freiburg.de +search lp.ruf.uni-freiburg.de +" + fi + count=1; + for i in $dns; do + echo "$0: Adding DNS $i" + R="${R}nameserver $i +" + count=$((count+1)); + done + + if [ -x /sbin/resolvconf ]; then + echo -n "$R" | resolvconf -a "${interface}.udhcpc" + else + echo -n "$R" > "$RESOLV_CONF" + fi + + # TODO i.e. event trigger + [ "x$(grep -ci mount /proc/cmdline)" != "x0" ] && systemctl start nfs-mount.service + # Always mount virtlib directory + systemctl start var-lib-virt.service + # Write to openslx-config + echo "# Config written by openslx-dhcp-script" >> /opt/openslx/config + echo "SLX_DNS='$dns'" >> /opt/openslx/config + echo "SLX_HOSTNAME='$(hostname)'" >> /opt/openslx/config + + ;; + + deconfig) + + ;; + + leasefail) + echo "$0: Lease failed: $message" + ;; + + nak) + echo "$0: Received a NAK: $message" + ;; + + *) + echo "$0: Unknown udhcpc command: $1"; + exit 1; + ;; +esac -- cgit v1.2.3-55-g7522 From adc9af647b7403f884294ef1277629ee73afc7e7 Mon Sep 17 00:00:00 2001 From: Michael Neves Date: Wed, 5 Jun 2013 18:09:41 +0200 Subject: add iptables modules, vmware udhcpd works now --- remote/modules/vmplayer/data/etc/openslx/vmware/vmware-env | 3 ++- remote/rootfs/rootfs-stage32/rootfs-stage32.conf | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'remote') diff --git a/remote/modules/vmplayer/data/etc/openslx/vmware/vmware-env b/remote/modules/vmplayer/data/etc/openslx/vmware/vmware-env index f1f52040..d35e7635 100755 --- a/remote/modules/vmplayer/data/etc/openslx/vmware/vmware-env +++ b/remote/modules/vmplayer/data/etc/openslx/vmware/vmware-env @@ -27,7 +27,7 @@ vm_dhcpd() { [ -n "${wpad}" ] && wpad_config="option wpad ${wpad}" # configuring dhcpd stub for virtual networks - cat > ${VMWARE_CONF_DIR}/udhcpd.conf << EOF +cat > ${VMWARE_CONF_DIR}/udhcpd.conf << EOF # general udhcpd configuration file for virtual machines written by $0 # start and end of the IP lease block @@ -235,6 +235,7 @@ vmblock () { case "$1" in start) #start: defines start function for initscript + vm_dhcpd setup_network # adapt_tmpfs # hack to access the first serial/parallel port diff --git a/remote/rootfs/rootfs-stage32/rootfs-stage32.conf b/remote/rootfs/rootfs-stage32/rootfs-stage32.conf index c8d47639..27421166 100644 --- a/remote/rootfs/rootfs-stage32/rootfs-stage32.conf +++ b/remote/rootfs/rootfs-stage32/rootfs-stage32.conf @@ -49,7 +49,7 @@ REQUIRED_LIBRARIES=" libcap libtinfo libresolv libau" -REQUIRED_DIRECTORIES="" +REQUIRED_DIRECTORIES="/lib/xtables" REQUIRED_FILES=" /etc/environment /etc/issue /etc/inputrc -- cgit v1.2.3-55-g7522 From d8f50c155f281be06cfa3e38269c01f4086db95e Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 5 Jun 2013 18:41:10 +0200 Subject: [setup_network] Rename vars [setup_network] Change MAC of eth0 after building bridge [init] Optional message can be passed to drop_shell [kernel] Disable IP autoconfig --- data/kernel.wanted.config | 1 + remote/rootfs/rootfs-stage31/data/bin/setup_network | 21 ++++++++++++--------- remote/rootfs/rootfs-stage31/data/init | 20 ++++++++++++-------- .../data/opt/openslx/bin/udhcpc.openslx.script | 2 +- .../rootfs-stage32/rootfs-stage32.conf.zypper | 1 + 5 files changed, 27 insertions(+), 18 deletions(-) (limited to 'remote') diff --git a/data/kernel.wanted.config b/data/kernel.wanted.config index 80367038..31f602b5 100644 --- a/data/kernel.wanted.config +++ b/data/kernel.wanted.config @@ -230,3 +230,4 @@ CONFIG_VXGE=y CONFIG_WINBOND_840=y CONFIG_XFS_FS=y CONFIG_ZNET=y +CONFIG_IP_PNP=n diff --git a/remote/rootfs/rootfs-stage31/data/bin/setup_network b/remote/rootfs/rootfs-stage31/data/bin/setup_network index f9ff1bd1..57872244 100755 --- a/remote/rootfs/rootfs-stage31/data/bin/setup_network +++ b/remote/rootfs/rootfs-stage31/data/bin/setup_network @@ -11,16 +11,19 @@ ip addr add 127.0.0.1/8 dev lo 2>/dev/null echo "Setting up bridge" BRIDGE="br0" -BRNWIF="eth0" -NWIFMAC="${MAC}" +SLAVE="eth0" +BRIDGEMAC="$MAC" -# bridge 0 already defined or some other problem -brctl addbr "$BRIDGE" +# Flip mac address of original interface - this var is not local so init sees the changes too +MAC="$(echo "$MAC" | awk -F ':' '{printf $1 ":" $2 ":" $5 ":" $3 ":" $6 ":" $4}')" +ip link set addr "$MAC" "$SLAVE" + +brctl addbr "$BRIDGE" || drop_shell "Could not create bridge $BRIDGE" brctl stp "$BRIDGE" 0 brctl setfd "$BRIDGE" 0.000000000001 -ip link set addr "$NWIFMAC" "$BRIDGE" -ip link set dev "$BRNWIF" up -brctl addif "$BRIDGE" "$BRNWIF" +ip link set addr "$BRIDGEMAC" "$BRIDGE" || drop_shell "Could not set mac of $BRIDGE" +ip link set dev "$SLAVE" up +brctl addif "$BRIDGE" "$SLAVE" || drop_shell "Could not add $SLAVE to $BRIDGE" # analyze ip information from the kernel command line and put parts # of it into several variables @@ -41,10 +44,10 @@ if [ -n "$IPINFO" ] ; then # we might have an idea of the dns server via preboot DNS_SERVER="$(getip 5)" # set static ip address - ip addr add "$CLIENTIP/$(ipcalc -s -p "$CLIENTIP" "$SUBNET_MASK" | sed "s/.*=//")" \ - broadcast "$BROADCAST_ADDRESS" dev "$BRIDGE" + ip addr add "$CLIENTIP/$(ipcalc -s -p "$CLIENTIP" "$SUBNET_MASK" | sed "s/.*=//")" broadcast "$BROADCAST_ADDRESS" dev "$BRIDGE" ip link set dev "$BRIDGE" up ip route add default via "$GATEWAY" dev "$BRIDGE" else NOIPYET="yes" fi + diff --git a/remote/rootfs/rootfs-stage31/data/init b/remote/rootfs/rootfs-stage31/data/init index 06610542..ee90cf15 100755 --- a/remote/rootfs/rootfs-stage31/data/init +++ b/remote/rootfs/rootfs-stage31/data/init @@ -14,6 +14,7 @@ # debug shell drop_shell() { + [ $# -gt 0 ] && echo $@ echo "Dropping debug shell. CTRL + D will continue booting." setsid sh -c 'exec sh /dev/tty1 2>&1' } @@ -85,24 +86,27 @@ echo "Setup networking..." # Source script so the variables are still available if [ -n "$NFS" ]; then # mount stage32 per NFS if activated echo "Mounting stage 3.2 as NFS..." - mount -t nfs -o ro,async,nolock ${NFSSERVER}:${NFSPATH} /rorootfs || { echo "Problem mounting NFS-Directory from ${NFSSERVER}:${NFSPATH}."; drop_shell; } + mount -t nfs -o ro,async,nolock ${NFSSERVER}:${NFSPATH} /rorootfs || drop_shell "Problem mounting NFS-Directory from ${NFSSERVER}:${NFSPATH}." else # or per squashfs else echo "Mounting stage 3.2 as SquashFS..." - mount -t squashfs /mnt/*.sqfs /rorootfs || { echo "Problem mounting Squashfs."; drop_shell; } + mount -t squashfs /mnt/*.sqfs /rorootfs || drop_shell "Problem mounting Squashfs." fi -[ $DEBUG -ge 1 ] && drop_shell +[ $DEBUG -ge 1 ] && drop_shell "Requested Debug Shell." echo "Building aufs..." mv /mnt/modprobing /dev/shm/uniontmp #mount -t overlayfs -o lowerdir=/rorootfs,upperdir=/dev/shm/uniontmp overlayfs /mnt -mount -n -t aufs -o br:/dev/shm/uniontmp:/rorootfs=ro none /mnt || { echo "Problem building aufs."; drop_shell; } +mount -n -t aufs -o br:/dev/shm/uniontmp:/rorootfs=ro none /mnt || drop_shell "Problem building aufs." mkdir -p /mnt/uniontmp /mnt/tmp -mount -n --move /dev/shm/uniontmp /mnt/uniontmp || { echo "Problem moving uniontmp."; drop_shell; } +mount -n --move /dev/shm/uniontmp /mnt/uniontmp || drop_shell "Problem moving uniontmp." # create udev rule for nic we booted from -echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="'$MAC'", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"' > "/mnt/etc/udev/rules.d/70-net-boot-nic-name.rules" +cat > "/mnt/etc/udev/rules.d/70-net-boot-nic-name.rules" <> /mnt/opt/openslx/config < $ip" >> "/tmp/udhcpclog" +echo "$interface [$1] $ip" >> "/tmp/udhcpclog" case $1 in bound|renew) diff --git a/remote/rootfs/rootfs-stage32/rootfs-stage32.conf.zypper b/remote/rootfs/rootfs-stage32/rootfs-stage32.conf.zypper index 4d44e2d6..af6f2546 100644 --- a/remote/rootfs/rootfs-stage32/rootfs-stage32.conf.zypper +++ b/remote/rootfs/rootfs-stage32/rootfs-stage32.conf.zypper @@ -1,6 +1,7 @@ REQUIRED_MODULES=" kernel" REQUIRED_INSTALLED_PACKAGES="nfs-client xfsprogs squashfs timezone" REQUIRED_CONTENT_PACKAGES="timezone" +REQUIRED_DIRECTORIES="/usr/lib/xtables" REQUIRED_LIBRARIES=" libcap libcidn libcom_err -- cgit v1.2.3-55-g7522