summaryrefslogtreecommitdiffstats
path: root/remote
diff options
context:
space:
mode:
authorJonathan Bauer2013-08-22 13:43:19 +0200
committerJonathan Bauer2013-08-22 13:43:19 +0200
commitd45015d422fe39de6c634b89405efef7e861d07a (patch)
tree45f9b0536900e0e4c742d38ea923975048432839 /remote
parentfix /etc/functions.inc sourcing (diff)
parent[rootfs-stage31] Make download timeouts shorter, properly use drop_shell in t... (diff)
downloadtm-scripts-d45015d422fe39de6c634b89405efef7e861d07a.tar.gz
tm-scripts-d45015d422fe39de6c634b89405efef7e861d07a.tar.xz
tm-scripts-d45015d422fe39de6c634b89405efef7e861d07a.zip
Merge branch 'master' of git.openslx.org:openslx-ng/tm-scripts
Diffstat (limited to 'remote')
-rw-r--r--remote/modules/dnbd3/data/etc/systemd/system/setup-dnbd3.service12
l---------remote/modules/dnbd3/data/etc/systemd/system/sysinit.target.wants/setup-dnbd3.service1
-rwxr-xr-xremote/modules/dnbd3/data/opt/openslx/scripts/systemd-setup_dnbd39
-rw-r--r--remote/modules/dnbd3/dnbd3.build2
-rw-r--r--remote/modules/dnbd3/dnbd3.conf2
-rw-r--r--remote/modules/kdm/data/etc/tmpfiles.d/kdm.conf2
-rw-r--r--remote/modules/kdm/kdm.build1
-rw-r--r--remote/modules/pam/data/etc/tmpfiles.d/pipefs.conf2
-rw-r--r--remote/modules/pam/pam.build15
-rw-r--r--remote/modules/plymouth/data/etc/tmpfiles.d/plymouth.conf2
-rw-r--r--remote/modules/plymouth/plymouth.conf3
-rw-r--r--remote/modules/sshd/data/etc/tmpfiles.d/sshd.conf2
-rw-r--r--remote/modules/sshd/sshd.build1
-rw-r--r--remote/modules/systemd/data/etc/systemd/system/network-interface@.service3
-rwxr-xr-xremote/modules/vmchooser/data/opt/openslx/scripts/systemd-vmchooser_env6
-rwxr-xr-xremote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt46
-rwxr-xr-xremote/modules/vmplayer/data/addon-init5
-rwxr-xr-xremote/modules/vmplayer/data/opt/openslx/etc/vmware/run-virt.include19
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/bin/setup_network2
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/bin/setup_stage326
-rw-r--r--remote/rootfs/rootfs-stage31/data/etc/functions.inc (renamed from remote/rootfs/rootfs-stage31/data/etc/functions)49
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/init4
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/run-lock.conf2
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/openslx-create_issue2
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions136
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons27
-rw-r--r--remote/rootfs/rootfs-stage32/rootfs-stage32.build3
-rwxr-xr-xremote/setup_target10
28 files changed, 239 insertions, 135 deletions
diff --git a/remote/modules/dnbd3/data/etc/systemd/system/setup-dnbd3.service b/remote/modules/dnbd3/data/etc/systemd/system/setup-dnbd3.service
new file mode 100644
index 00000000..97f6703d
--- /dev/null
+++ b/remote/modules/dnbd3/data/etc/systemd/system/setup-dnbd3.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Setup dnbd3 kernel module and user space daemon
+After=sysinit.target
+Before=shutdown.target
+DefaultDependencies=no
+
+[Service]
+Type=service
+ExecStart=/opt/openslx/scripts/systemd-setup_dnbd3
+ExecStop=/opt/openslx/bin/dnbd3-client --kill
+ExecStopPost=/bin/rm /var/run/dnbd3.socket
+Restart=on-abort
diff --git a/remote/modules/dnbd3/data/etc/systemd/system/sysinit.target.wants/setup-dnbd3.service b/remote/modules/dnbd3/data/etc/systemd/system/sysinit.target.wants/setup-dnbd3.service
new file mode 120000
index 00000000..05dd4ac2
--- /dev/null
+++ b/remote/modules/dnbd3/data/etc/systemd/system/sysinit.target.wants/setup-dnbd3.service
@@ -0,0 +1 @@
+../setup-dnbd3.service \ No newline at end of file
diff --git a/remote/modules/dnbd3/data/opt/openslx/scripts/systemd-setup_dnbd3 b/remote/modules/dnbd3/data/opt/openslx/scripts/systemd-setup_dnbd3
new file mode 100755
index 00000000..9c76bfa6
--- /dev/null
+++ b/remote/modules/dnbd3/data/opt/openslx/scripts/systemd-setup_dnbd3
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+insmod /lib/modules/dnbd3/dnbd3.ko
+[ -e "/dev/dnbd0" ] || exit 1
+for i in 0 1 2 3 4 5 6 7; do
+ echo 8192 > "/sys/block/dnbd${i}/queue/nr_requests"
+done
+exec -- dnbd3-client --daemon
+
diff --git a/remote/modules/dnbd3/dnbd3.build b/remote/modules/dnbd3/dnbd3.build
index 5dd2769f..e285788b 100644
--- a/remote/modules/dnbd3/dnbd3.build
+++ b/remote/modules/dnbd3/dnbd3.build
@@ -32,6 +32,8 @@ build() {
cd "$MODULE_BUILD_DIR/opt/openslx/bin" || perror "Could not cd to build dir for client binary"
cmake "$MODULE_DIR/src/dnbd3" || perror "Could not cmake"
make dnbd3-client || perror "Could not make dnbd3-client"
+ chown root:root "dnbd3-client"
+ chmod +xs "dnbd3-client"
cd "$MODULE_DIR"
}
diff --git a/remote/modules/dnbd3/dnbd3.conf b/remote/modules/dnbd3/dnbd3.conf
index c1a3eb2e..31c411d0 100644
--- a/remote/modules/dnbd3/dnbd3.conf
+++ b/remote/modules/dnbd3/dnbd3.conf
@@ -2,7 +2,7 @@
#REQUIRED_CONTENT_PACKAGES="libgconf-2-4 fontconfig-config"
REQUIRED_MODULES="kernel"
REQUIRED_GIT="git://git.openslx.org/dnbd3.git"
-REQUIRED_COMMIT="37868b9e5f7c26c61a928a61b7cc705eedb7e5a6"
+REQUIRED_COMMIT="89a7af0ceb1cdc13f7d3a4ffac54f32576e1138d"
REQUIRED_BINARIES="
dnbd3-client
"
diff --git a/remote/modules/kdm/data/etc/tmpfiles.d/kdm.conf b/remote/modules/kdm/data/etc/tmpfiles.d/kdm.conf
new file mode 100644
index 00000000..64f02ed3
--- /dev/null
+++ b/remote/modules/kdm/data/etc/tmpfiles.d/kdm.conf
@@ -0,0 +1,2 @@
+D /var/run/kdm 0755 root root
+
diff --git a/remote/modules/kdm/kdm.build b/remote/modules/kdm/kdm.build
index b5d1be08..feac30cb 100644
--- a/remote/modules/kdm/kdm.build
+++ b/remote/modules/kdm/kdm.build
@@ -16,7 +16,6 @@ build () {
post_copy() {
#create static kdm folders in stage3.2
mkdir -p "${TARGET_BUILD_DIR}/var/lib/kdm"
- mkdir -p "${TARGET_BUILD_DIR}/var/run/kdm"
# link kdm config as opensuse wants in in another place
ln -s "/etc/kde4" "$TARGET_BUILD_DIR/usr/share/kde4/config"
diff --git a/remote/modules/pam/data/etc/tmpfiles.d/pipefs.conf b/remote/modules/pam/data/etc/tmpfiles.d/pipefs.conf
new file mode 100644
index 00000000..7c422623
--- /dev/null
+++ b/remote/modules/pam/data/etc/tmpfiles.d/pipefs.conf
@@ -0,0 +1,2 @@
+D /var/run/rpc_pipefs 0755 root root
+
diff --git a/remote/modules/pam/pam.build b/remote/modules/pam/pam.build
index 063c0065..34319ce8 100644
--- a/remote/modules/pam/pam.build
+++ b/remote/modules/pam/pam.build
@@ -23,18 +23,5 @@ build() {
}
post_copy() {
- if [ ! -d "${TARGET_BUILD_DIR}/run/rpc_pipefs" ]; then
- mkdir -p "${TARGET_BUILD_DIR}/run/rpc_pipefs" || pwarning "Could not mkdir ${TARGET_BUILD_DIR}/run/rpc_pipefs"
- fi
-
- # find libnfsidmap run-time library directory
- #local COPYLIST="$MODULE_BUILD_DIR/list_packet_files"
- #local SEARCH=$(grep "/libsnfsidmap/" "$COPYLIST" | head -1)
- #[ -z "$SEARCH" ] && perror "Hä"
- #SEARCH=$(dirname "$SEARCH")
- #if [ -d "${SEARCH}" ]; then
- # tarcopy "${SEARCH}" "${TARGET_BUILD_DIR}" || pinfo "Something went wrong copying $SEARCH"
- #fi
-
-
+ :
}
diff --git a/remote/modules/plymouth/data/etc/tmpfiles.d/plymouth.conf b/remote/modules/plymouth/data/etc/tmpfiles.d/plymouth.conf
new file mode 100644
index 00000000..211c61f6
--- /dev/null
+++ b/remote/modules/plymouth/data/etc/tmpfiles.d/plymouth.conf
@@ -0,0 +1,2 @@
+D /var/run/plymouth 0755 root root
+
diff --git a/remote/modules/plymouth/plymouth.conf b/remote/modules/plymouth/plymouth.conf
index 26e123e4..ec6f8571 100644
--- a/remote/modules/plymouth/plymouth.conf
+++ b/remote/modules/plymouth/plymouth.conf
@@ -9,5 +9,6 @@ REQUIRED_DIRECTORIES="
/etc
/lib
/sbin
- /var
+ /var/lib
+ /var/spool
"
diff --git a/remote/modules/sshd/data/etc/tmpfiles.d/sshd.conf b/remote/modules/sshd/data/etc/tmpfiles.d/sshd.conf
new file mode 100644
index 00000000..d4aa9a67
--- /dev/null
+++ b/remote/modules/sshd/data/etc/tmpfiles.d/sshd.conf
@@ -0,0 +1,2 @@
+D /var/run/sshd 0755 root root
+
diff --git a/remote/modules/sshd/sshd.build b/remote/modules/sshd/sshd.build
index 89dcd386..ebf42c12 100644
--- a/remote/modules/sshd/sshd.build
+++ b/remote/modules/sshd/sshd.build
@@ -14,7 +14,6 @@ build() {
}
post_copy() {
- mkdir -p "${TARGET_BUILD_DIR}/var/run/sshd" # ubuntu
mkdir -p "${TARGET_BUILD_DIR}/var/lib/empty" # suse
chmod go-rwx "${TARGET_BUILD_DIR}/etc/ssh/"* # no space, " before *
diff --git a/remote/modules/systemd/data/etc/systemd/system/network-interface@.service b/remote/modules/systemd/data/etc/systemd/system/network-interface@.service
index 13a30bbc..77bbd287 100644
--- a/remote/modules/systemd/data/etc/systemd/system/network-interface@.service
+++ b/remote/modules/systemd/data/etc/systemd/system/network-interface@.service
@@ -5,4 +5,5 @@ Before=udhcpc@%i.service
[Service]
Type=simple
-ExecStart=/opt/openslx/bin/ip link set dev %I up
+ExecStart=/opt/openslx/sbin/ip link set dev %I up
+
diff --git a/remote/modules/vmchooser/data/opt/openslx/scripts/systemd-vmchooser_env b/remote/modules/vmchooser/data/opt/openslx/scripts/systemd-vmchooser_env
index 50eace20..4119ad9c 100755
--- a/remote/modules/vmchooser/data/opt/openslx/scripts/systemd-vmchooser_env
+++ b/remote/modules/vmchooser/data/opt/openslx/scripts/systemd-vmchooser_env
@@ -91,7 +91,11 @@ if grep -q ^flags.*\\\<vmx\\\> /proc/cpuinfo; then
fi
# write mac
-echo "hostmacaddr=${SLX_PXE_MAC}" >> ${VMCHOOSER_CONF_DIR}/virtualization.conf
+if [ -n "$SLX_PXE_MAC" ]; then
+ echo "hostmacaddr=${SLX_PXE_MAC}" >> ${VMCHOOSER_CONF_DIR}/virtualization.conf
+else ## Fallback:
+ echo "hostmacaddr=$(ip a | grep ether | grep -o -E -i '([0-9a-f]{2}:){5}[0-9a-f]{2}' | head -n 1)" >> ${VMCHOOSER_CONF_DIR}/virtualization.conf
+fi
# ip addr
echo "hostip=${SLX_PXE_CLIENT_IP}" >> ${VMCHOOSER_CONF_DIR}/virtualization.conf
# hostname
diff --git a/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt
index 979db35a..f6e4e491 100755
--- a/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt
+++ b/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt
@@ -23,11 +23,11 @@
################################################################################
# include general configuration from vmchooser
-[ -f /opt/openslx/etc/vmchooser/vmchooser.conf ] && \
-. /opt/openslx/etc/vmchooser/vmchooser.conf
+[ -f /opt/openslx/etc/vmchooser/vmchooser.conf ] && . /opt/openslx/etc/vmchooser/vmchooser.conf
# load general virtualization information
-[ -f /opt/openslx/etc/vmchooser/virtualization.conf ] && \
-. /opt/openslx/etc/vmchooser/virtualization.conf
+[ -f /opt/openslx/etc/vmchooser/virtualization.conf ] && . /opt/openslx/etc/vmchooser/virtualization.conf
+# Load general openslx config
+[ -f /opt/openslx/config ] && . /opt/openslx/config
################################################################################
### Functions used throughout the script
@@ -359,8 +359,9 @@ hostmem="$[ $totalmem - $mem ]"
# last two bytes are taken from the bridge of the host
# define one MAC per guest
macguestpart="00:50:56:${VM_ID}"
-machostpart=$(echo ${hostmacaddr} | awk -F ":" '{print $(NF-1)":"$NF}')
+machostpart=$(echo "${hostmacaddr}" | awk -F ":" '{print $(NF-1)":"$NF}')
macaddr=$(echo "${macguestpart}:${machostpart}" | tr "[a-z]" "[A-Z]")
+macaddrsuffix=$(echo "${VM_ID}:${machostpart}" | tr "[a-z]" "[A-Z]")
# Virtual fd/cd/dvd and drive devices, floppy b: for configuration
# if $floppy_0 from run-virt.include set then fdtest="TRUE"
@@ -432,6 +433,32 @@ cp "$xmlfile" "/opt/openslx/etc/vmchooser/fd-loop/config.xml"
# Add another file with resolution information
xrandr | grep -o -E 'current\s*[0-9]+\s*x\s*[0-9]+' | cut -c 8- | sed -r 's/(\s|\t|\n)//g' | head -n 1 > "/opt/openslx/etc/vmchooser/fd-loop/hostres.txt"
+# Try to use dnbd3 to access the image
+unset vm_diskfile
+unset vm_revision
+unset dnbd3
+if [ -n "$SLX_DNBD3_SERVERS" ]; then
+ if [ -e "/dev/dnbd0" -a -e "/var/run/dnbd3.socket" ]; then
+ for SRV in $SLX_DNBD3_SERVERS; do
+ dnbd3=$(dnbd3-client -h "$SRV" -i "${vmpath#/mnt/vmstore/}" -r 0)
+ RET=$?
+ if [ "$RET" = "0" ]; then
+ vm_diskfile="$dnbd3"
+ vm_revision=$(cat "/sys/block/${dnbd3#/dev/}/net/rid")
+ writelog "DNBD3: $vm_diskfile on $dnbd3 with rid $vm_revision"
+ break
+ fi
+ done
+ [ -z "$vm_diskfile" ] && writelog "No working dnbd3 server found :-("
+ else
+ writelog "Won't use dnbd3 as it's not loaded, or the daemon is not running..."
+ fi
+else
+ writelog "Won't use dnbd3 as no servers are given in config"
+fi
+[ -z "$vm_diskfile" ] && vm_diskfile="$vmpath"
+writelog "Used diskfile: $vm_diskfile"
+
# Get all virtual machine specific stuff from the respective include file
if [ -e /opt/openslx/etc/"${xmlvirt}"/run-virt.include ] ; then
self="${xmlvirt}"
@@ -463,6 +490,15 @@ if [ -e /opt/openslx/etc/"${xmlvirt}"/run-virt.include ] ; then
if [ -n "${POSTRUN}" ]; then
eval ${POSTRUN} >/dev/null 2>&1
fi
+
+ # Disconnect dnbd3 device
+ if [ -n "$dnbd3" ]; then
+ for timeout in 1 1 2; do
+ dnbd3-client -c "$dnbd3" && break
+ writelog "dnbd3 still busy...."
+ sleep "$timeout"
+ done
+ fi
cleanexit 0
else
diff --git a/remote/modules/vmplayer/data/addon-init b/remote/modules/vmplayer/data/addon-init
new file mode 100755
index 00000000..01acb3b4
--- /dev/null
+++ b/remote/modules/vmplayer/data/addon-init
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+systemctl daemon-reload
+systemctl start vmware
+
diff --git a/remote/modules/vmplayer/data/opt/openslx/etc/vmware/run-virt.include b/remote/modules/vmplayer/data/opt/openslx/etc/vmware/run-virt.include
index 084828ff..b755133f 100755
--- a/remote/modules/vmplayer/data/opt/openslx/etc/vmware/run-virt.include
+++ b/remote/modules/vmplayer/data/opt/openslx/etc/vmware/run-virt.include
@@ -229,7 +229,7 @@ MemTrimRate = "-1"
# ide-disks
ide0:0.present = "$ide"
-ide0:0.fileName = "$diskfile"
+ide0:0.fileName = "$vm_diskfile"
## Edited for persistent mode.
ide0:0.mode = "independent-${diskmode}"
##
@@ -245,7 +245,7 @@ ide1:1.deviceType = "cdrom-raw"
# scsi-disks
scsi0.present = "$scsi"
scsi0:0.present = "$scsi"
-scsi0:0.fileName = "$diskfile"
+scsi0:0.fileName = "$vm_diskfile"
scsi0.virtualDev = "$hddrv"
## Edited for persistent mode.
scsi0:0.mode = "independent-${diskmode}"$stateFileConfiguration
@@ -270,7 +270,7 @@ $network_virtualDev
ethernet0.connectionType = "$network_kind"
#ethernet1.connectionType = "custom"
#ethernet1.vnet = "/dev/vmnet2"
-ethernet0.address = "00:50:56:$VM_ID:$machostpart"
+ethernet0.address = "00:50:56:$macaddrsuffix"
ethernet0.wakeOnPcktRcv = "FALSE"
# sound
@@ -627,11 +627,14 @@ writelog ""
################################################################################
# configure and start samba service to provide user's home directory
-if [ -f /usr/sbin/smbd ] ; then
- sudo /opt/openslx/bin/sed -i /etc/vmware/smb.conf -e "s,USER,$USER,"
- sudo /usr/sbin/nmbd -s /etc/vmware/smb.conf
- sudo /usr/sbin/smbd -s /etc/vmware/smb.conf
-fi
+#if [ -f /usr/sbin/smbd ] ; then
+# sudo /opt/openslx/bin/sed -i /etc/vmware/smb.conf -e "s,USER,$USER,"
+# sudo /usr/sbin/nmbd -s /etc/vmware/smb.conf
+# sudo /usr/sbin/smbd -s /etc/vmware/smb.conf
+#fi
+
+# For debugging
+cp "$conffile" "/tmp/vmware-last-config"
# using the modified version of the wrapper script
VIRTCMD="/opt/openslx/bin/vmplayer"
diff --git a/remote/rootfs/rootfs-stage31/data/bin/setup_network b/remote/rootfs/rootfs-stage31/data/bin/setup_network
index 8e070bdf..b504a92b 100755
--- a/remote/rootfs/rootfs-stage31/data/bin/setup_network
+++ b/remote/rootfs/rootfs-stage31/data/bin/setup_network
@@ -26,7 +26,7 @@ IP_OUT=$(ip a | grep -B 1 "/ether" | sed -r '/^--$/d;$!N;s#^[0-9]+: ([a-z0-9\.:]
for LINE in $IP_OUT; do
IFACE=$(echo "$LINE" | awk -F '==' '{printf $1}')
- IFMAC=$(echo "$LINE" | awk -F '==' '{printf $2}' | tr '[a-z]' '[A-Z]')
+ IFMAC=$(echo "$LINE" | awk -F '==' '{printf $2}' | tr '[A-Z]' '[a-z]') # udev requires mac addesses to be lowercase (a-f), see http://www.debianhelp.co.uk/udev.htm
echo "${IFACE} = ${IFMAC}"
if [ "x$IFMAC" == "x$MAC" ]; then
diff --git a/remote/rootfs/rootfs-stage31/data/bin/setup_stage32 b/remote/rootfs/rootfs-stage31/data/bin/setup_stage32
index 151617bc..cf20fbf5 100755
--- a/remote/rootfs/rootfs-stage31/data/bin/setup_stage32
+++ b/remote/rootfs/rootfs-stage31/data/bin/setup_stage32
@@ -34,7 +34,7 @@ STAGE32_TARGET_PATH="/stage32.sqfs"
STAGE32_MOUNT_POINT="/rorootfs"
# try to download it
-download "${SLX_BASE_PATH}/stage32.sqfs" "$STAGE32_TARGET_PATH" || return 1
+download "${SLX_BASE_PATH}/stage32.sqfs" "$STAGE32_TARGET_PATH" || drop_shell "Could not download stage32!"
# try to mount it at STAGE32_MOUNT_POINT
echo "Mounting stage 3.2 as SquashFS..."
@@ -45,3 +45,7 @@ mount -n -t aufs -o "br:${FUTURE_ROOT}:${STAGE32_MOUNT_POINT}=ro" none /mnt || d
mkdir -p /mnt/opt/openslx/uniontmp /mnt/tmp
mount -n --move "$FUTURE_ROOT" /mnt/opt/openslx/uniontmp || drop_shell "Problem moving uniontmp."
FUTURE_ROOT="/mnt"
+
+# "Delete" addon hook-script in aufs view
+touch "/mnt/opt/openslx/uniontmp/.wh.addon-init"
+
diff --git a/remote/rootfs/rootfs-stage31/data/etc/functions b/remote/rootfs/rootfs-stage31/data/etc/functions.inc
index 37bb7d89..ce510aac 100644
--- a/remote/rootfs/rootfs-stage31/data/etc/functions
+++ b/remote/rootfs/rootfs-stage31/data/etc/functions.inc
@@ -11,9 +11,9 @@
# drop_shell "This is your error message."
#
drop_shell() {
- [ $# -gt 0 ] && echo $@
- echo "CTRL + D will continue booting."
- setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
+ [ $# -gt 0 ] && echo $@
+ echo "CTRL + D will continue booting."
+ setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
}
#########################################################################
@@ -28,7 +28,7 @@ read_from_cmdline(){
local OPTION="$1"
local VALUE=""
-
+
VALUE="$(grep -o -E "${OPTION}=\S+" /proc/cmdline | cut -c $((${#OPTION}+2))-)"
if [ -z "$VALUE" ]; then
echo "Error - '${OPTION}=' not found in command line, or empty"
@@ -40,7 +40,7 @@ read_from_cmdline(){
#########################################################################
#
-# Helper function to download given FILE_URL from servers in 'slxsrv'
+# Helper function to download given FILE_URL from servers in 'slxsrv'
# as given through the kernel command line. File will be saved under TARGET_PATH
#
# Usage:
@@ -53,8 +53,8 @@ read_from_cmdline(){
# FILE_URL can have subpath, e.g. "ubuntu-13.04-x64/config"
#
download() {
- [ $# -ne 2 ] && echo "Error - 'download' requires 2 arguments, $# given." && return 1
-
+ [ $# -ne 2 ] && echo "Error - 'download' requires 2 arguments, $# given." && return 1
+
if [ -e "${FUTURE_ROOT}/opt/openslx/config" ]; then
. "${FUTURE_ROOT}/opt/openslx/config" || echo "Error - could not source '${FUTURE_ROOT}/opt/openslx/config'"
else
@@ -62,29 +62,30 @@ download() {
SLX_KCL_SERVERS="$(read_from_cmdline "slxsrv" | tr ',' ' ')"
echo "SLX_KCL_SERVERS='$SLX_KCL_SERVERS'" >> "${FUTURE_ROOT}/opt/openslx/config"
fi
-
- local FILE_URL="$1"
- local TARGET_PATH="$2"
-
- for TIMEOUT in 1 2 3 4 5; do
- for SERVER in $SLX_CONFIG_SERVERS $SLX_KCL_SERVERS; do
+
+ local FILE_URL="$1"
+ local TARGET_PATH="$2"
+
+ # Shuffle server list
+ local SERVERS=$(for SERVER in $SLX_CONFIG_SERVERS $SLX_KCL_SERVERS; do echo "$RANDOM $SERVER"; done | sort -u | sed -r 's/^[0-9]+ //')
+
+ for TIMEOUT in 1 1 4 4 10; do
+ for SERVER in $SERVERS; do
+ rm -f "$TARGET_PATH"
wget -T 5 -q -O "$TARGET_PATH" "http://${SERVER}/${FILE_URL}"
RET=$?
- if [ "x$RET" != "x0" ]; then
+ if [ "x$RET" != "x0" -o ! -e "$TARGET_PATH" ]; then
echo "Error - downloading 'http://$SERVER/$FILE_URL' via wget failed. Exit Code: $RET"
- echo "Trying again in $(($TIMEOUT * 500)) ms..."
- [ $TIMEOUT -eq 5 ] && drop_shell "Max timeouts reached. Dropping shell..."
- usleep $(($TIMEOUT * 500000))
+ usleep 50000 # 50ms
else
- [ "x$DEBUG" != "x" ] && echo "Successfully downloaded 'http://${SERVER}/$FILE_URL'."
+ echo "Successfully downloaded 'http://${SERVER}/$FILE_URL'."
return 0
fi
done
+ echo "Trying again in $(($TIMEOUT * 250)) ms..."
+ usleep $(($TIMEOUT * 250000))
done
-
- # check if it actually worked
- if [ ! -e $TARGET_PATH ]; then
- echo "Error - $TARGET_PATH does not exists. Downloading '$FILE_URL' from '$SERVER_LIST' failed."
- return 1
- fi
+ # Max retries reached, no success :-(
+ return 1
}
+
diff --git a/remote/rootfs/rootfs-stage31/data/init b/remote/rootfs/rootfs-stage31/data/init
index 7e05084d..a75caab0 100755
--- a/remote/rootfs/rootfs-stage31/data/init
+++ b/remote/rootfs/rootfs-stage31/data/init
@@ -64,7 +64,7 @@ for opts in ${KCL}; do
export NFSSERVER=${nfs%:/*}
;;
BOOTIF=*)
- export MAC="$( echo "$opts" | cut -b 11- | tr '-' ':' | tr '[a-z]' '[A-Z]' )" ;;
+ export MAC="$( echo "$opts" | cut -b 11- | tr '-' ':' | tr '[A-Z]' '[a-z]' )" ;; # make mac lowercase for udev (see setup_network)
esac
done
@@ -91,7 +91,7 @@ fi
# copy files needed for stage3.2 to FUTURE_ROOT
[ $DEBUG -ge 1 ] && echo "Copying busybox etc. to stage32..."
-tar -cp "/bin" "/sbin" "/usr/bin" "/usr/sbin" "/etc/functions" | tar -xp -C "${FUTURE_ROOT}/opt/openslx/"
+tar -cp "/bin" "/sbin" "/usr/bin" "/usr/sbin" "/etc/functions.inc" | tar -xp -C "${FUTURE_ROOT}/opt/openslx/"
#echo 'blacklist pcspkr' >> /mnt/etc/modprobe.d/blacklist.conf
# one last debug shell if activated
diff --git a/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/run-lock.conf b/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/run-lock.conf
new file mode 100644
index 00000000..ef610bdc
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/run-lock.conf
@@ -0,0 +1,2 @@
+D /run/lock 1777 root root
+
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/openslx-create_issue b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/openslx-create_issue
index c09162dc..8fbd5c8b 100755
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/openslx-create_issue
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/openslx-create_issue
@@ -1,4 +1,4 @@
-#/bin/sh
+#!/bin/sh
# Set greeting and add information on booted system
# Fixme (add version string and distro name)
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions
index f162ec3a..bc5ce9c1 100755
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions
@@ -17,38 +17,48 @@
# General formatter for the /tmp partition on a local harddisk
diskfm () {
-local target="$1"
-local fs
-local path
-for fs in xfs ext3 ext2 ; do
- unset available
- case $(cat /proc/filesystems) in
- *${fs}*) available=yes;;
- *) modprobe "${fs}" && available=yes;;
- esac
- if [ -n "${available}" ]; then
- unset found
- if which "mkfs.$fs" ; then
- found=yes
- case "mkfs.$fs" in
- mkfs.xfs)
- fopt="-f"
- mopt="-o noexec"
- ;;
- mkfs.ext2)
- fopt="-Fq"
- mopt="-o nocheck,noexec"
- ;;
- mkfs.reiserfs)
- fopt="-f"
- mopt="-o noexec"
- ;;
- esac
- mkfs.$fs ${fopt} "${target}"
- fi
- [ -n "$found" ] && break
- fi
-done
+ local target="$1"
+ local fs
+ local path
+ for fs in xfs ext3 ext2 ; do
+ unset available
+ case $(cat /proc/filesystems) in
+ *${fs}*) available=yes;;
+ *) modprobe "${fs}" && available=yes;;
+ esac
+ if [ -n "${available}" ]; then
+ unset found
+ if which "mkfs.$fs" ; then
+ found=yes
+ case "mkfs.$fs" in
+ mkfs.xfs)
+ fopt="-f"
+ mopt="-o noexec"
+ ;;
+ mkfs.ext2)
+ fopt="-Fq"
+ mopt="-o nocheck,noexec"
+ ;;
+ mkfs.reiserfs)
+ fopt="-f"
+ mopt="-o noexec"
+ ;;
+ esac
+ mkfs.$fs ${fopt} "${target}"
+ fi
+ [ -n "$found" ] && break
+ fi
+ done
+}
+
+function mount_temp () {
+ mkdir -p /tmptmp
+ mv /tmp/* /tmp/.* /tmptmp/ 2> /dev/null
+ mount $@ /tmp || return 1
+ chmod a+rwxt /tmp
+ mv /tmptmp/* /tmptmp/.* /tmp/
+ rmdir /tmptmp
+ return 0
}
# Check for local harddisks and appropriate partitions
@@ -66,46 +76,46 @@ for hdpartnr in $(sed -n -e "/ 82 /p" "/etc/disk.partition" | sed -e "s/[[:space
swapon "$hdpartnr"
done
-# We use special non assigned partition type (id44) for harddisk scratch
+# We use special non assigned partition type (id44) for harddisk scratch
# space, thus no normal filesystem will be incidentally deleted or
# corrupted
for hdpartnr in $(sed -n -e "/ 44 /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do
- # check for supported filesystem and formatter
- if diskfm "$hdpartnr"; then
- # echo "$hdpartnr is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready
- echo -e "$hdpartnr\t/tmp\t\tnoauto\t\tdefaults\t 0 0" >> "/etc/fstab"
- mkdir -p /tmptmp
- mv /tmp/* /tmp/.* /tmptmp/
- mount "$hdpartnr" /tmp
- chmod a+rwxt /tmp
- mv /tmptmp/* /tmptmp/.* /tmp/
- rmdir /tmptmp
- break
- else
- echo "formatting failed for some reason"
- fi # Made this non-forking, systemd should handle it - 2013-05-28
+ # check for supported filesystem and formatter
+ if diskfm "$hdpartnr"; then
+ # echo "$hdpartnr is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready
+ mount_temp "$hdpartnr" || continue
+ echo -e "$hdpartnr\t/tmp\t\tnoauto\t\tdefaults\t 0 0" >> "/etc/fstab"
+ break
+ else
+ echo "formatting failed for some reason"
+ fi # Made this non-forking, systemd should handle it - 2013-05-28
done
# Put detected linux partitions (83) into /etc/fstab with "noauto", special
# partition 45 (persistent scratch) to /var/scratch and 46 to /var/openslx
for partid in 83 45 46 ; do
- for hdpartnr in $(sed -n -e "/ ${partid} /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do
- mkdir -p "/media/${hdpartnr#/dev/*}"
- if [ "${partid}" -eq 83 ]; then
- echo -e "$hdpartnr\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab"
- elif [ "${partid}" -eq 45 ]; then
- #mount -t auto ${hdpartnr} /media/${hdpartnr#/dev/*}
- #ln -sf /media/${hdpartnr#/dev/*} /var/scratch
- echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab"
- elif [ "${partid}" -eq 46 ]; then
- # Mount a home directory to (/mnt)/var/home
- #mount -t auto ${hdpartnr} /mnt/media/${hdpartnr#/dev/*} \n\
- #test -d /mnt/media/${hdpartnr#/dev/*}/home && \
- # ln -sf /media/${hdpartnr#/dev/*} /var/home
- echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab"
- fi
- done
+ for hdpartnr in $(sed -n -e "/ ${partid} /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do
+ mkdir -p "/media/${hdpartnr#/dev/*}"
+ if [ "${partid}" -eq 83 ]; then
+ echo -e "$hdpartnr\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab"
+ elif [ "${partid}" -eq 45 ]; then
+ #mount -t auto ${hdpartnr} /media/${hdpartnr#/dev/*}
+ #ln -sf /media/${hdpartnr#/dev/*} /var/scratch
+ echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab"
+ elif [ "${partid}" -eq 46 ]; then
+ # Mount a home directory to (/mnt)/var/home
+ #mount -t auto ${hdpartnr} /mnt/media/${hdpartnr#/dev/*} \n\
+ #test -d /mnt/media/${hdpartnr#/dev/*}/home && \
+ # ln -sf /media/${hdpartnr#/dev/*} /var/home
+ echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab"
+ fi
+ done
done
mount -a
+# Make huge tmpfs if nothing could be mounted for /tmp
+if [ "$(mount | grep -c "on /tmp ")" = "0" ]; then
+ mount_temp -t tmpfs -o size=10G none
+fi
+
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons
index a3350424..a5dc9965 100755
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons
@@ -6,12 +6,14 @@
#
#
-. /opt/openslx/etc/functions
+. /opt/openslx/config || { echo "Could not source config!"; exit 23; }
+[ -z "${SLX_ADDONS}" ] && { echo "No addons configured. Nothing to do :-)."; exit 0; }
+
+. /opt/openslx/etc/functions.inc || { echo "functions.inc not found!"; exit 1337; }
+
export FUTURE_ROOT="/"
# read openslx config
-. /opt/openslx/config
-[ -z "${SLX_ADDONS}" ] && { echo "SLX_ADDONS is not set in /opt/openslx/config." && exit 1; }
if [ -z "${SLX_CONFIG_SERVERS}" ]; then
echo "SLX_CONFIG_SERVERS is not set in /opt/openslx/config. Will only try the base servers from the cmdline."
if [ -z "${SLX_KCL_SERVERS}" ]; then
@@ -23,20 +25,29 @@ fi
SLX_BASE_PATH=$(read_from_cmdline "slxbase")
SLX_BASE_MNT="/opt/openslx/mnt"
-SYS_TMP="/tmp"
+SYS_TMP="/tmp/addons"
+mkdir -p "$SYS_TMP" || { echo "Failed to create $SYS_TMP"; exit 1; }
for ADDON in ${SLX_ADDONS}; do
# download the addon from the given URL
- ADDON_TARGET_PATH="${SYS_TMP}/$(basename $(echo ${ADDON})).sqfs"
+ ADDON_TARGET_PATH="${SYS_TMP}/$(basename "$ADDON").sqfs"
download "${SLX_BASE_PATH}/${ADDON}.sqfs" "${ADDON_TARGET_PATH}"
# now mount it to $SLX_MNT/<addon-name>
- ADDON_MOUNT_POINT="${SLX_BASE_MNT}/$(basename $(echo ${ADDON})|awk -F "." '{print $1}')"
+ ADDON_MOUNT_POINT="${SLX_BASE_MNT}/$(basename "$ADDON")"
mkdir -p "$ADDON_MOUNT_POINT"
echo "Mounting ${ADDON_TARGET_PATH} to ${ADDON_MOUNT_POINT}"
- mount -t squashfs "$ADDON_TARGET_PATH" ${ADDON_MOUNT_POINT} || { echo "Failed to mount." && exit 1; }
+ mount -t squashfs "$ADDON_TARGET_PATH" "$ADDON_MOUNT_POINT" || { echo "Failed to mount." && exit 1; }
# now append it to /
echo "Appending ${ADDON_MOUNT_POINT} to /"
- mount -o remount,append:${ADDON_MOUNT_POINT}=ro / || { echo "Fail." && exit 1; }
+ mount -o "remount,append:${ADDON_MOUNT_POINT}=ro" / || { echo "Fail." && exit 1; }
+
+ # Run post-hook if available
+ if [ -x "$ADDON_MOUNT_POINT/addon-init" ]; then
+ echo "Running addon initialization script..."
+ "$ADDON_MOUNT_POINT/addon-init" || echo "Warning: Could not execute addon-init of $ADDON"
+ fi
done
+exit 0
+
diff --git a/remote/rootfs/rootfs-stage32/rootfs-stage32.build b/remote/rootfs/rootfs-stage32/rootfs-stage32.build
index f9749740..02f238de 100644
--- a/remote/rootfs/rootfs-stage32/rootfs-stage32.build
+++ b/remote/rootfs/rootfs-stage32/rootfs-stage32.build
@@ -65,7 +65,8 @@ post_copy() {
[ ! -e "$TARGET_BUILD_DIR/bin/mount" ] && ln -s /usr/bin/mount "$TARGET_BUILD_DIR/bin/mount"
# make basic directory structure
- mkdir -p "${TARGET_BUILD_DIR}"/{bin,dev,proc,lib,etc,mnt,sys,var/run,var/lock,var/log,run/lock,run/shm,opt/openslx/mnt}
+ mkdir -p "$TARGET_BUILD_DIR"/{bin,dev,proc,lib,etc,mnt,run,sys,var,opt/openslx/mnt}
+ ln -s -n -f -t "$TARGET_BUILD_DIR/var" "../run/lock" "../run"
# make openslx log directory
mkdir -p "${TARGET_BUILD_DIR}"/var/log/openslx
diff --git a/remote/setup_target b/remote/setup_target
index 60cf23b5..c19113df 100755
--- a/remote/setup_target
+++ b/remote/setup_target
@@ -65,19 +65,23 @@ initial_checks () {
case "$SYS_DISTRIBUTION" in
ubuntu|debian)
PACKET_MANAGER="apt"
+ PACKET_HANDLER="dpkg"
;;
opensuse)
PACKET_MANAGER="zypper"
+ PACKET_HANDLER="rpm"
;;
scientific)
PACKET_MANAGER="yum"
+ PACKET_HANDLER="rpm"
;;
*)
perror "Unknown Distribution: $SYS_DISTRIBUTION - Please specify its packet manager in remote/setup_target"
;;
esac
# Get version - we mangle this quite a bit. first make sure it has no spaces, then split version at period (.), underscore (_) and dash (-)
- local VERSION=$(lsb_release -rs | tolower | sed -r 's/\s//g;s/[\._]/ /g;s/-//g')
+ SYS_VERSION=$(lsb_release -rs | tolower)
+ local VERSION=$(echo $SYS_VERSION | sed -r 's/\s//g;s/[\._]/ /g;s/-//g')
local STRTMP=""
PRINT_SYS_VERSIONS="*.conf.$SYS_DISTRIBUTION"
SYS_VERSIONS="$SYS_DISTRIBUTION"
@@ -362,6 +366,10 @@ process_module() {
copy_static_data
pinfo "## Post copy"
post_copy
+ # Sanity checks
+ [ -e "$TARGET_BUILD_DIR/var/run" -a ! -L "$TARGET_BUILD_DIR/var/run" ] && perror "Messup datected: $TARGET_BUILD_DIR/var/run exists and is not a symlink!"
+ [ -e "$TARGET_BUILD_DIR/var/lock" -a ! -L "$TARGET_BUILD_DIR/var/lock" ] && perror "Messup datected: $TARGET_BUILD_DIR/var/lock exists and is not a symlink!"
+ [ -n "$(ls -A "$TARGET_BUILD_DIR/run")" ] && perror "Messup detected: $TARGET_BUILD_DIR/run is not empty. You cannot place static files there, use /etc/tmpfiles.d instead!"
# set MODULE_BUILD_SIZE
calc_size
pinfo "Module completed. Total size: ${MODULE_BUILD_SIZE}"