summaryrefslogtreecommitdiffstats
path: root/remote/rootfs
diff options
context:
space:
mode:
Diffstat (limited to 'remote/rootfs')
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/bin/activate-sysconfig67
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/init4
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/download-config.service2
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/load-gfx-driver.service2
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-tmp.service2
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service3
l---------remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/download-config.service1
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/bin/activate-sysconfig28
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/analyse-disk (renamed from remote/rootfs/rootfs-stage32/data/opt/openslx/bin/analyse-disk)0
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/dhcp++ (renamed from remote/rootfs/rootfs-stage32/data/opt/openslx/bin/dhcp++)3
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/load-gfx-driver (renamed from remote/rootfs/rootfs-stage32/data/opt/openslx/bin/load-gfx-driver)0
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/mountexport17
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/nettime22
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/udhcpc-openslx-script174
14 files changed, 287 insertions, 38 deletions
diff --git a/remote/rootfs/rootfs-stage31/data/bin/activate-sysconfig b/remote/rootfs/rootfs-stage31/data/bin/activate-sysconfig
new file mode 100755
index 00000000..bfda70e1
--- /dev/null
+++ b/remote/rootfs/rootfs-stage31/data/bin/activate-sysconfig
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+# first a few variables
+CONFIG="/mnt/opt/openslx/config"
+
+# parse kernel command line to determine the URL
+URL="$(grep -o -E "slxconfig=\S+" /proc/cmdline | cut -c 11-)"
+if [ -z "$URL" ]; then
+ echo "Error - 'slxconfig=' not found in command line, or empty"
+ exit 1
+fi
+
+#########################################################################
+#
+# Helper function to download given FILE_URL under TARGET_PATH
+#
+# Usage:
+# download $FILE_URL $TARGET_PATH
+#
+
+download() {
+ [ $# -ne 2 ] && echo "Error - 'download' requires 2 arguements, $# given." \
+ && exit 1
+
+ local FILE_URL="$1"
+ local TARGET_PATH="$2"
+
+ wget -T 5 -q -O "$TARGET_PATH" "$FILE_URL"
+ RET=$?
+ if [ "x$RET" != "x0" ]; then
+ echo "Error - downloading '$FILE_URL' via wget failed. Exit Code: $RET"
+ exit 1
+ else
+ echo "Successfully downloaded '$FILE_URL'."
+ fi
+
+ return 0
+}
+
+#########################################################################
+#
+#
+# This first part downloads the config containing environment variables
+#
+#
+
+[ -e "$CONFIG" ] && grep '^#_RCONFIG_TAG$' "$CONFIG" > /dev/null \
+ && echo "Config already fetched." && exit 0
+
+download "$URL" "$CONFIG-remote" || exit 1
+
+echo "# Config fetched from $URL" >> "$CONFIG"
+echo "#_RCONFIG_TAG" >> "$CONFIG"
+cat "${CONFIG}-remote" >> "$CONFIG"
+
+#########################################################################
+#
+#
+# This part downloads the config.tgz and unpacks it to $1
+#
+#
+
+[ -e "$CONFIG.tgz" ] && echo "config.tgz already downloaded." && exit 0
+download "$URL.tgz" "$CONFIG.tgz" || exit 1
+
+tar xf "$CONFIG.tgz" -C /mnt || { echo "Could not untar $CONFIG.tgz to /mnt"; exit 1; }
+exit 0
diff --git a/remote/rootfs/rootfs-stage31/data/init b/remote/rootfs/rootfs-stage31/data/init
index 6a718c46..4dc63bfa 100755
--- a/remote/rootfs/rootfs-stage31/data/init
+++ b/remote/rootfs/rootfs-stage31/data/init
@@ -106,10 +106,10 @@ mount -n --move /dev/shm/uniontmp /mnt/uniontmp || drop_shell "Problem moving un
[ $DEBUG -ge 2 ] && drop_shell "Requested Debug Shell: after aufs'ing."
# Download config if available
-/mnt/opt/openslx/bin/activate-sysconfig /mnt 2> /dev/null
+/bin/activate-sysconfig 2> /dev/null
if [ ! -e /mnt/opt/openslx/config ]; then
sleep 1
- /mnt/opt/openslx/bin/activate-sysconfig /mnt
+ /bin/activate-sysconfig
fi
if [ -e /mnt/opt/openslx/config ]; then
. /mnt/opt/openslx/config
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/download-config.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/download-config.service
index fca8ee5b..ef8fb438 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/download-config.service
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/download-config.service
@@ -5,4 +5,4 @@ DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=yes
-ExecStart=/opt/openslx/bin/activate-sysconfig
+ExecStart=/opt/openslx/scripts/activate-sysconfig
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/load-gfx-driver.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/load-gfx-driver.service
index bdf3258c..93641cee 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/load-gfx-driver.service
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/load-gfx-driver.service
@@ -5,5 +5,5 @@ DefaultDependencies=no
[Service]
Type=oneshot
-ExecStart=/opt/openslx/bin/load-gfx-driver
+ExecStart=/opt/openslx/scripts/load-gfx-driver
RemainAfterExit=yes
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-tmp.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-tmp.service
index 2a5fd63c..070e3e1f 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-tmp.service
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-tmp.service
@@ -6,5 +6,5 @@ DefaultDependencies=no
[Service]
Type=oneshot
-ExecStart=/opt/openslx/bin/analyse-disk
+ExecStart=/opt/openslx/scripts/analyse-disk
RemainAfterExit=yes
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service
index 4acfb046..69b1ba33 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service
@@ -7,5 +7,4 @@ ConditionPathExists=/run/udhcpc/network-ready
[Service]
Type=oneshot
RemainAfterExit=yes
-ExecStart=/opt/openslx/bin/nettime
-
+ExecStart=/opt/openslx/scripts/nettime
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/download-config.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/download-config.service
deleted file mode 120000
index a7d51e0b..00000000
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/download-config.service
+++ /dev/null
@@ -1 +0,0 @@
-../download-config.service \ No newline at end of file
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/activate-sysconfig b/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/activate-sysconfig
deleted file mode 100755
index dbe23b21..00000000
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/activate-sysconfig
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-
-if [ $# -gt 0 ]; then
- CONFIG="$1/opt/openslx/config"
-else
- CONFIG="/opt/openslx/config"
-fi
-
-[ -e "$CONFIG" ] && grep '^#_RCONFIG_TAG$' "$CONFIG" > /dev/null && echo "Config already fetched." && exit 0
-
-URL="$(grep -o -E "slxconfig=\S+" /proc/cmdline | cut -c 11-)"
-
-if [ -z "$URL" ]; then
- echo "Error - 'slxconfig=' not found in command line, or empty"
- exit 1
-fi
-
-wget -T 5 -q -O "${CONFIG}-remote" "$URL"
-RET=$?
-if [ "x$RET" != "x0" ]; then
- echo "Error - downloading '$URL' via wget failed. Exit Code: $RET"
- exit 1
-fi
-echo "# Config fetched from $URL" >> "$CONFIG"
-echo "#_RCONFIG_TAG" >> "$CONFIG"
-cat "${CONFIG}-remote" >> "$CONFIG"
-exit 0
-
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/analyse-disk b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/analyse-disk
index f162ec3a..f162ec3a 100755
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/analyse-disk
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/analyse-disk
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/dhcp++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/dhcp++
index 45984032..8a03ce98 100755
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/dhcp++
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/dhcp++
@@ -7,5 +7,4 @@ UDHCPC_OPTS=""
[ ! -z "$NET_IP" ] && UDHCPC_OPTS=" -r $NET_IP "
echo "udhcp++: running on $NET_IF with additional params $UDHCPC_OPTS" >> "/tmp/udhcpclog"
mkdir -p /run/udhcpc
-/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" -p "/run/udhcpc/udhcpc.$NET_IF.pid"
-
+/opt/openslx/sbin/udhcpc $UDHCPC_OPTS -O domain -O nissrv -O nisdomain -O wpad -t 8 -s /opt/openslx/scripts/udhcpc-openslx-script -i "$NET_IF" -p "/run/udhcpc/udhcpc.$NET_IF.pid"
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/load-gfx-driver b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/load-gfx-driver
index 04fbea6e..04fbea6e 100755
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/bin/load-gfx-driver
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/load-gfx-driver
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/mountexport b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/mountexport
new file mode 100755
index 00000000..64d5f485
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/mountexport
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+export PATH=$PATH:/opt/openslx/usr/sbin:/opt/openslx/usr/bin:/opt/openslx/sbin:/opt/openslx/bin
+
+if grep "Ubuntu 13.04" "/etc/issue" >/dev/null; then
+ EXPORT="132.230.8.113:/srv/ubuntu1304"
+elif grep "SUSE" "/etc/issue" >/dev/null; then
+ EXPORT="132.230.8.113:/srv/suse"
+else
+ echo "Could not determine System"
+ exit 1
+fi
+
+echo "Mounting ${EXPORT} to /opt/openslx/mnt"
+mount -t nfs -o ro,async,nolock,vers=3 "$EXPORT" /opt/openslx/mnt || { echo "Fail." && exit 1; }
+echo "Appending /opt/openslx/mnt to /"
+mount -o remount,append:/opt/openslx/mnt=ro / || { echo "Fail." && exit 1; }
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/nettime b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/nettime
new file mode 100755
index 00000000..3ca13931
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/nettime
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+. /opt/openslx/config || { echo "Could not source config!"; exit 1; }
+SLX_NTP_SERVER="$SLX_NTP_SERVER time.uni-freiburg.de 0.de.pool.ntp.org"
+for SERVER in $SLX_NTP_SERVER; do
+ if ntpdate -u -b "$SERVER"; then
+ echo "Successfully queried $SERVER for time."
+ if [ "x$SLX_BIOS_CLOCK" = "xlocal" ]; then
+ sleep 1
+ hwclock -l -w || echo "... but could not set BIOS clock to localtime"
+ elif [ "x$SLX_BIOS_CLOCK" = "xutc" ]; then
+ sleep 1
+ hwclock -u -w || echo "... but could not set BIOS clock to UTC"
+ fi
+ exit 0
+ fi
+ echo "Error querying $SERVER for current time"
+done
+
+echo "No more servers to try. No NTP server was reachable." >&2
+exit 1
+
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/udhcpc-openslx-script b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/udhcpc-openslx-script
new file mode 100755
index 00000000..1bbf6e80
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/udhcpc-openslx-script
@@ -0,0 +1,174 @@
+#!/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
+#
+# -----------------------------------------------------------------------------
+
+. /opt/openslx/config
+
+RESOLV_CONF="/etc/resolv.conf"
+THISFILE="/run/udhcpc/${interface}.resolv"
+
+echo "$interface [$1] $ip" >> "/tmp/udhcpclog"
+
+rebuild_resolv_conf () {
+ # Maybe make this smarter some time, if anyone is using client's that are on multiple networks at once etc...
+ # This is a little braindead but should work most of the time
+ sort -u /run/udhcpc/*.resolv > "$RESOLV_CONF"
+}
+
+escape_search() {
+ echo "$@" | sed -e 's/[]\/()$*.^|[]/\\&/g'
+}
+
+escape_replace() {
+ echo "$@" | sed -e 's/[\/&]/\\&/g'
+}
+
+case "$1" in
+ bound|renew)
+ ip addr add "$ip/$(ipcalc -s -p $ip $subnet|sed s/.*=//)" dev "$interface"
+ if [ -n "$router" ]; then
+ ip route add default via "$router"
+ fi
+
+ # Update resolver configuration file
+ CONF=""
+ if [ -n "$domain" ]; then
+ printf -v CONF "domain $domain\nsearch $domain\n"
+ elif [ -n "$SLX_NET_DOMAIN" ]; then
+ printf -v CONF "domain $SLX_NET_DOMAIN\nsearch $SLX_NET_DOMAIN\n"
+ fi
+ for i in $dns; do
+ echo "$0: Adding DNS $i"
+ printf -v CONF "${CONF}nameserver $i\n"
+ done
+
+ if [ -x /sbin/resolvconf ]; then
+ # Automatic handling :-)
+ echo -n "$CONF" | resolvconf -a "${interface}.udhcpc"
+ else
+ # Manual handling required :-(
+ mkdir -p "/run/udhcpc"
+ echo -n "$CONF" > "$THISFILE"
+ rebuild_resolv_conf
+ fi
+
+ # Things that should only happen for the main interface that was used for booting
+ if [ "$interface" == "br0" ]; then
+ #update ip
+ sed -i "s/^\(SLX_PXE_CLIENT_IP=\).*$/\1'$ip'/" /opt/openslx/config
+
+ #update hostname
+ dns_host=$(rdns "$ip")
+ if [ -z "$dns_host" ]; then
+ # fallback to what the dhcp told us
+ dns_host="$hostname"
+ fi
+ if [ -n "$dns_host" ]; then
+ echo "$dns_host" > "/proc/sys/kernel/hostname"
+ echo "$dns_host" > "/etc/hostname"
+ if grep '^SLX_HOSTNAME=' /opt/openslx/config 2>/dev/null; then
+ sed -i "s/^\(SLX_HOSTNAME=\).*$/\1'$dns_host'/" /opt/openslx/config
+ else
+ echo "# Config written by openslx-dhcp-script (1)" >> /opt/openslx/config
+ echo "SLX_HOSTNAME='$dns_host'" >> /opt/openslx/config
+ fi
+ fi
+ fi
+
+ # Hostname in /etc/hosts
+ touch /etc/hosts
+ if [ -n "$dns_host" ]; then
+ short="${dns_host%%.*}"
+ [ "x$short" = "x$dns_host" ] && short=""
+ sed -i -r "s/\s$(escape_search "$dns_host")(\s|$)/ /g" /etc/hosts
+ [ -n "$short" ] && sed -i -r "s/\s$(escape_search "$short")(\s|$)/ /g" /etc/hosts
+ if grep -q -E "^$ip\s" /etc/hosts; then
+ sed -i "s/^$(escape_search "$ip")\s/$(escape_replace "$ip $dns_host $short ")/g" /etc/hosts
+ else
+ echo "$ip $dns_host $short" >> /etc/hosts
+ fi
+ fi
+ if [ -n "$hostname" -a "x$hostname" != "x$dns_host" ]; then
+ short="${hostname%%.*}"
+ [ "x$short" = "x$hostname" ] && short=""
+ sed -i -r "s/\s$(escape_search "$hostname")(\s|$)/ /g" /etc/hosts
+ [ -n "$short" ] && sed -i -r "s/\s$(escape_search "$short")(\s|$)/ /g" /etc/hosts
+ if grep -q -E "^$ip\s" /etc/hosts; then
+ sed -i "s/^$(escape_search "$ip")\s/$(escape_replace "$ip $hostname $short ")/g" /etc/hosts
+ else
+ echo "$ip $hostname $short" >> /etc/hosts
+ fi
+ fi
+ sed -i -r '/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\s*$/d' /etc/hosts
+
+ # We consider the network setup to be complete if an interface is being configured that
+ # has a default route and some dns servers set.
+ if [ -n "$router" ] && [ -n "$dns" ] && [ ! -e "/run/udhcpc/network-ready" ]; then
+ touch "/run/udhcpc/network-ready"
+ # Write to openslx-config
+ echo "# Config written by openslx-dhcp-script (2)" >> /opt/openslx/config
+ echo "SLX_DNS='$dns'" >> /opt/openslx/config
+
+ # TODO: This mounts stage4. Current method is for testing purposes only.
+ # when going productive, this has to happen after user login, if the
+ # user selects a native linux session.
+ if [ "x$(grep -ci mount /proc/cmdline)" != "x0" ]; then
+ systemctl start nfs-mount.service &
+ fi
+ # Mark network target as reached
+ systemctl start network.target
+ fi
+
+ ;;
+
+ deconfig)
+ if [ $(grep -c "nfs=" /proc/cmdline) == 0 ]; then
+ echo 1 > "/proc/sys/net/ipv4/conf/$interface/promote_secondaries"
+ clientip=${ip%%:*}
+ ip addr del "$clientip/$(ipcalc -s -p $clientip $subnet|sed s/.*=//)" dev "$interface"
+ else
+ echo "NFS is active, not removing old ip adress. warning: lease may expire after a while."
+ fi
+
+ if [ -x /sbin/resolvconf ]; then
+ # Automatic handling :-)
+ resolvconf -d "${interface}.udhcpc"
+ else
+ # Manual handling required :-(
+ rm -f "$THISFILE"
+ rebuild_resolv_conf
+ fi
+
+ ;;
+
+ leasefail)
+ echo "$0: Lease failed: $message"
+
+ ;;
+
+ nak)
+ echo "$0: Received a NAK: $message"
+
+ ;;
+
+ *)
+ echo "$0: Unknown udhcpc command: $1";
+ exit 1;
+
+ ;;
+esac
+