summaryrefslogtreecommitdiffstats
path: root/src/initramfs/distro-specs
diff options
context:
space:
mode:
Diffstat (limited to 'src/initramfs/distro-specs')
-rw-r--r--src/initramfs/distro-specs/debian/functions-4.014
-rw-r--r--src/initramfs/distro-specs/debian/functions-default209
-rw-r--r--src/initramfs/distro-specs/scilin/functions-4.715
-rw-r--r--src/initramfs/distro-specs/scilin/functions-5.342
-rw-r--r--src/initramfs/distro-specs/scilin/functions-5.442
-rw-r--r--src/initramfs/distro-specs/scilin/functions-5.542
-rw-r--r--src/initramfs/distro-specs/scilin/functions-default315
-rw-r--r--src/initramfs/distro-specs/suse/functions-10.282
-rw-r--r--src/initramfs/distro-specs/suse/functions-10.326
-rw-r--r--src/initramfs/distro-specs/suse/functions-11.190
-rw-r--r--src/initramfs/distro-specs/suse/functions-11.295
-rw-r--r--src/initramfs/distro-specs/suse/functions-11.397
-rw-r--r--src/initramfs/distro-specs/suse/functions-default608
-rw-r--r--src/initramfs/distro-specs/ubuntu/functions-10.0416
-rw-r--r--src/initramfs/distro-specs/ubuntu/functions-8.04296
-rw-r--r--src/initramfs/distro-specs/ubuntu/functions-8.10296
-rw-r--r--src/initramfs/distro-specs/ubuntu/functions-9.04293
-rw-r--r--src/initramfs/distro-specs/ubuntu/functions-9.1016
-rw-r--r--src/initramfs/distro-specs/ubuntu/functions-default286
19 files changed, 2880 insertions, 0 deletions
diff --git a/src/initramfs/distro-specs/debian/functions-4.0 b/src/initramfs/distro-specs/debian/functions-4.0
new file mode 100644
index 00000000..97be5342
--- /dev/null
+++ b/src/initramfs/distro-specs/debian/functions-4.0
@@ -0,0 +1,14 @@
+# Copyright (c) 2007 - 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# Configuration script for Debian Edge (4.1) to setup linux stateless clients
+# (executed within initial ramfs)
+
+# nothing changed yet from default
diff --git a/src/initramfs/distro-specs/debian/functions-default b/src/initramfs/distro-specs/debian/functions-default
new file mode 100644
index 00000000..15639a2d
--- /dev/null
+++ b/src/initramfs/distro-specs/debian/functions-default
@@ -0,0 +1,209 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2007..2010 - 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# Configuration script for general Debian distributions to setup linux
+# stateless clients (included within initial ramfs)
+
+# distro specific configuration variables used in the setup functions
+# (formerly done via config-*, these variables are disputable ...)
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw part
+# of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present anyhow
+D_BINDMPTS="tmp root home"
+D_DIRINBINDMNT="/var/run /var/log /var/tmp /var/lib/gdm /etc/X11"
+D_RODIRSINRW="etc/gconf etc/X11/xkb /var/lib/texmf /var/cache/fontconfig \
+/var/lib/dpkg"
+D_DIRINDXS="/var/X11R6/compose-cache \
+/var/run/sysconfig/tmp /var/adm /var/lib/rpm /var/lib/nobody \
+/var/lib/pam_devperm /var/lib/bluetooth \
+/var/lib/texmf /var/lib/nfs/sm \
+/var/lib/misc /var/lib/acpi /var/spool/cron \
+/var/lock/subsys/sysconfig"
+
+# empty functions are defined at the beginning of /etc/functions
+
+# distro specific stuff to initialize
+preinit () {
+:
+}
+
+# distro specific function called from servconfig script
+config_distro () {
+ # clean the runlevel directories which will be populated by the stage3 setup
+ for dir in rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rcS.d ; do
+ rm -rf /mnt/etc/${dir}/*
+ done
+ # add the halt link to the 0 and 6 runlevel directories
+ ln -sf ../init.d/halt /mnt/etc/rc0.d/S90halt
+ ln -sf ../init.d/reboot /mnt/etc/rc6.d/S90reboot
+
+ # remove annoying udev rule set for changing eth interface
+ # fixme: not that simple, see ticket 187
+ #rm /mnt/etc/udev/rules.d/*persistent-net.rules >/dev/null 2>&1
+
+ # set default runlevel
+ sed -e "s/.*initdefault/id:3:initdefault/" -i /mnt/etc/inittab
+
+ # create needed auxiliary directories in (/mnt)/var,/etc,...
+ testmkd /mnt/var/run/screens root:utmp 0755
+
+ # add the slx specific path (/var/opt/openslx/bin) to the PATH variable
+ echo -e "# stuff generated by $0 (out of InitRamFS written $date)\n\
+export PATH=\"\$PATH:/var/opt/openslx/bin\"" >>/mnt/etc/profile
+
+ # check for inittab file
+ #test -f /mnt/etc/inittab || error "$df_erritab"
+}
+
+# initial (boot time) runlevel scripts
+initial_boot () {
+ local count=10
+ # boot.slx is a special runlevel script generated within initialramfs which
+ # should be executed before the normal runlevel scripts. Proper shutdown is
+ # not needed!?
+ for i in mountkernfs.sh mountvirtfs boot.slx udev procps.sh bootlogd \
+ $D_SPLASHY keymap.sh hwclock.sh sudo dbus-1; do
+ count=$(($count + 1))
+ [ $DEBUGLEVEL -ge 2 ] && echo "boot-runlevelscript $i"
+ ln -sf /etc/init.d/$i /mnt/etc/rcS.d/S${count}$i
+ done
+}
+
+# linking runlevel scripts
+rllinker () {
+ local script="$1"
+ local start="$2"
+ local stop="$3"
+ # empty runlevel links - decision on running certain services is passed via
+ # configuration or enabled through plugins
+ for i in rc2.d/K$stop$script rc3.d/K$stop$script \
+ rc2.d/S$start$script rc3.d/S$start$script ; do
+ if ! [ -f /mnt/etc/init.d/$script ]; then
+ echo "Target `pwd`../$script does not exist. Skipping links"
+ break
+ else
+ ln -sf ../init.d/$script /mnt/etc/$i
+ echo "Linked $script"
+ fi
+ done
+}
+
+# make a runlevel script
+d_mkrlscript () {
+ local switch=$1
+ local name=$2
+ local info=$3
+ case "$1" in
+ init)
+ echo -e "#!/bin/sh\n# skeleton of /etc/init.d/$name created \
+by $0\n# after you applied changes to the creation scripts you have to \
+rerun\n# the mkdxsinitrd script to get them applied\n\
+. /lib/lsb/init-functions\ncase \"\$1\" in\n start)\n\
+\tlog_begin_msg \"${info}\"" >>/mnt/etc/init.d/${name}
+ chmod u+x /mnt/etc/init.d/${name}
+ ;;
+ entry)
+ echo -e "\t${info}" >>/mnt/etc/init.d/${name}
+ ;;
+ close)
+ echo -e "\tlog_end_msg \$?\n\t;;\n stop)\n\tlog_end_msg \$?\n\t;;\
+ \nesac\nexit 0" >>/mnt/etc/init.d/${name}
+ ;;
+ esac
+}
+
+# group of functions for the normal runlevels - first parameter is start
+# second stop
+# function for ntp configuration
+config_ntp () {
+ if [ -f /mnt/etc/init.d/ntp -a "x$start_ntp" != "xno" ] ; then
+ echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \
+ >>/mnt/etc/passwd
+ testmkd /mnt/var/lib/ntp/var/run/ntp
+ rllinker "ntp" "07" "14"
+ fi
+}
+
+# function for atd
+config_atd () {
+ if [ "x$start_atd" = "xyes" ]; then
+ # fixme!! needed? Fix permissions
+ #testmkd /mnt/var/spool/cron/atjobs daemon:daemon
+ #testmkd /mnt/var/spool/cron/atspool daemon:daemon
+ rllinker "atd" "89" "01"
+fi
+}
+
+# function for configuration of cron services
+config_cron () {
+ if [ "x$start_cron" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/cron ] ; then
+ rllinker "cron" "89" "01"
+ testmkd /mnt/var/spool/cron/crontabs root:crontab
+ echo -e "# /etc/crontab - file generated by $0:\n\
+#\t$date\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin\
+\nMAILTO=\n-*/15 * * * *\troot\ttest -x /usr/lib/cron/run-crons && \
+/usr/lib/cron/run-crons >/dev/null 2>&1\n" >/mnt/etc/crontab
+ else
+ error "$df_errcron" nonfatal
+ fi
+ fi
+}
+
+# syslog service
+config_syslog () {
+ if [ "x$start_syslog" != "xno" ] ; then
+ : # fixme: handled by plugin in the future!
+ fi
+}
+
+# secure shell service
+config_sshd () {
+ if [ "x$start_sshd" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/ssh ] ; then
+ rllinker "ssh" "20" "02"
+ fi
+ fi
+}
+
+# snmp agent for remote monitoring
+config_snmp () {
+ if [ "x$start_snmp" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/snmpd ] ; then
+ rllinker "snmpd" "30" "03"
+ testmkd /mnt/var/lib/net-snmp >/dev/null 2>&1
+ fi
+ # fixme!!
+ # write service monitor depending on services started
+ fi
+}
+
+# localization like consolefont and language
+dlocale () {
+ # console font setting program not available in Debian 4!?
+ d_mkrlscript entry boot.slx "#setfont ${CONSOLE_FONT} >${LOGFILE} 2>&1"
+ # fixme!! check for proper operation
+ # sed -e "s,LANGUAGE=.*,LANGUAGE=\"${LANG}\" # set within initramfs," \
+ # -e "s,LANG=.*,LANG=\"${LANG}\" # set within initramfs," \
+ # -i /mnt/etc/environment
+ sed -e "s,LANG=.*,LANG=\"${LANG}\," # set within initramfs," \
+ -i /mnt/etc/default/locale
+}
+
+# configure hal, dbus, resmgr and services like that
+config_dreshal () {
+ if [ "x$start_dreshal" = "xyes" ]; then
+ :
+ fi
+}
+
diff --git a/src/initramfs/distro-specs/scilin/functions-4.7 b/src/initramfs/distro-specs/scilin/functions-4.7
new file mode 100644
index 00000000..e3ffe443
--- /dev/null
+++ b/src/initramfs/distro-specs/scilin/functions-4.7
@@ -0,0 +1,15 @@
+# Copyright (c) 2009 - RZ Uni Freiburg
+#
+# 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# Configuration script for Scientific Linux (4.7) to setup linux stateless
+# clients (executed within initial ramfs)
+
+# nothing changed yet from default
+
diff --git a/src/initramfs/distro-specs/scilin/functions-5.3 b/src/initramfs/distro-specs/scilin/functions-5.3
new file mode 100644
index 00000000..1548ab9a
--- /dev/null
+++ b/src/initramfs/distro-specs/scilin/functions-5.3
@@ -0,0 +1,42 @@
+# Copyright (c) 2009 - RZ Uni Freiburg
+#
+# 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# Configuration script for Scientific Linux (5.1) to setup linux stateless
+# clients (executed within initial ramfs)
+
+# initial (boot time) runlevel scripts
+initial_boot () {
+# delete all classical disk base rootfs stuff from rc.sysinit
+sed -e "6i# Script modified by $0 during stage3 bootup." \
+ -e "/relabel_se/,/^}/d" \
+ -e "/# Start up swap/,/# Set up bin/d" \
+ -e "/^remount_needed/,/^fi$/d" -e "/^# Clean out/,/in_sysinit/d" \
+ -e "/# Mount all o/,/# Start the g/d" \
+ -e "/# Boot time/,/# let's/d" -i /mnt/etc/rc.d/rc.sysinit
+# delete all classical disk base rootfs stuff from halt
+sed -e "7i# Modified by $0 during stage3 bootup." \
+ -e "/# Save mixer/,/Saving random/d" -e "/quotaoff/,/^# Now halt/d" \
+ -i /mnt/etc/init.d/halt
+# boot.slx is a special runlevel script generated within initialramfs which
+# should be executed before the normal runlevel scripts.
+echo -e "# Run OpenSLX init runlevel script\n/etc/init.d/boot.slx" \
+ >>/mnt/etc/rc.d/rc.sysinit
+# switch off SElinux enforcing
+sed -e "1i# Configuration modified by $0 during stage3 bootup." \
+ -e "s/SELINUX=.*/SELINUX=permissive/" -i /mnt/etc/selinux/config
+# switch off display manager start via inittab
+sed -e "s/x:5:re.*/# line deleted in stage3, re-enable via desktop plugin/" \
+ -i /mnt/etc/inittab
+# link halt and reboot scripts
+ln -s ../init.d/killall /mnt/etc/rc.d/rc0.d/S00killall
+ln -s ../init.d/halt /mnt/etc/rc.d/rc0.d/S01halt
+ln -s ../init.d/killall /mnt/etc/rc.d/rc6.d/S00killall
+ln -s ../init.d/halt /mnt/etc/rc.d/rc6.d/S01reboot
+}
diff --git a/src/initramfs/distro-specs/scilin/functions-5.4 b/src/initramfs/distro-specs/scilin/functions-5.4
new file mode 100644
index 00000000..1548ab9a
--- /dev/null
+++ b/src/initramfs/distro-specs/scilin/functions-5.4
@@ -0,0 +1,42 @@
+# Copyright (c) 2009 - RZ Uni Freiburg
+#
+# 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# Configuration script for Scientific Linux (5.1) to setup linux stateless
+# clients (executed within initial ramfs)
+
+# initial (boot time) runlevel scripts
+initial_boot () {
+# delete all classical disk base rootfs stuff from rc.sysinit
+sed -e "6i# Script modified by $0 during stage3 bootup." \
+ -e "/relabel_se/,/^}/d" \
+ -e "/# Start up swap/,/# Set up bin/d" \
+ -e "/^remount_needed/,/^fi$/d" -e "/^# Clean out/,/in_sysinit/d" \
+ -e "/# Mount all o/,/# Start the g/d" \
+ -e "/# Boot time/,/# let's/d" -i /mnt/etc/rc.d/rc.sysinit
+# delete all classical disk base rootfs stuff from halt
+sed -e "7i# Modified by $0 during stage3 bootup." \
+ -e "/# Save mixer/,/Saving random/d" -e "/quotaoff/,/^# Now halt/d" \
+ -i /mnt/etc/init.d/halt
+# boot.slx is a special runlevel script generated within initialramfs which
+# should be executed before the normal runlevel scripts.
+echo -e "# Run OpenSLX init runlevel script\n/etc/init.d/boot.slx" \
+ >>/mnt/etc/rc.d/rc.sysinit
+# switch off SElinux enforcing
+sed -e "1i# Configuration modified by $0 during stage3 bootup." \
+ -e "s/SELINUX=.*/SELINUX=permissive/" -i /mnt/etc/selinux/config
+# switch off display manager start via inittab
+sed -e "s/x:5:re.*/# line deleted in stage3, re-enable via desktop plugin/" \
+ -i /mnt/etc/inittab
+# link halt and reboot scripts
+ln -s ../init.d/killall /mnt/etc/rc.d/rc0.d/S00killall
+ln -s ../init.d/halt /mnt/etc/rc.d/rc0.d/S01halt
+ln -s ../init.d/killall /mnt/etc/rc.d/rc6.d/S00killall
+ln -s ../init.d/halt /mnt/etc/rc.d/rc6.d/S01reboot
+}
diff --git a/src/initramfs/distro-specs/scilin/functions-5.5 b/src/initramfs/distro-specs/scilin/functions-5.5
new file mode 100644
index 00000000..1548ab9a
--- /dev/null
+++ b/src/initramfs/distro-specs/scilin/functions-5.5
@@ -0,0 +1,42 @@
+# Copyright (c) 2009 - RZ Uni Freiburg
+#
+# 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# Configuration script for Scientific Linux (5.1) to setup linux stateless
+# clients (executed within initial ramfs)
+
+# initial (boot time) runlevel scripts
+initial_boot () {
+# delete all classical disk base rootfs stuff from rc.sysinit
+sed -e "6i# Script modified by $0 during stage3 bootup." \
+ -e "/relabel_se/,/^}/d" \
+ -e "/# Start up swap/,/# Set up bin/d" \
+ -e "/^remount_needed/,/^fi$/d" -e "/^# Clean out/,/in_sysinit/d" \
+ -e "/# Mount all o/,/# Start the g/d" \
+ -e "/# Boot time/,/# let's/d" -i /mnt/etc/rc.d/rc.sysinit
+# delete all classical disk base rootfs stuff from halt
+sed -e "7i# Modified by $0 during stage3 bootup." \
+ -e "/# Save mixer/,/Saving random/d" -e "/quotaoff/,/^# Now halt/d" \
+ -i /mnt/etc/init.d/halt
+# boot.slx is a special runlevel script generated within initialramfs which
+# should be executed before the normal runlevel scripts.
+echo -e "# Run OpenSLX init runlevel script\n/etc/init.d/boot.slx" \
+ >>/mnt/etc/rc.d/rc.sysinit
+# switch off SElinux enforcing
+sed -e "1i# Configuration modified by $0 during stage3 bootup." \
+ -e "s/SELINUX=.*/SELINUX=permissive/" -i /mnt/etc/selinux/config
+# switch off display manager start via inittab
+sed -e "s/x:5:re.*/# line deleted in stage3, re-enable via desktop plugin/" \
+ -i /mnt/etc/inittab
+# link halt and reboot scripts
+ln -s ../init.d/killall /mnt/etc/rc.d/rc0.d/S00killall
+ln -s ../init.d/halt /mnt/etc/rc.d/rc0.d/S01halt
+ln -s ../init.d/killall /mnt/etc/rc.d/rc6.d/S00killall
+ln -s ../init.d/halt /mnt/etc/rc.d/rc6.d/S01reboot
+}
diff --git a/src/initramfs/distro-specs/scilin/functions-default b/src/initramfs/distro-specs/scilin/functions-default
new file mode 100644
index 00000000..f9bb0f0e
--- /dev/null
+++ b/src/initramfs/distro-specs/scilin/functions-default
@@ -0,0 +1,315 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# configuration script for general Scientific Linux to configure linux
+# stateless clients (included by init, hwautocfg, servconfig within Initial-
+# RamFS after inclusion of the main functions file). This file is the main
+# base for the several RedHat based Scientific Linux versions.
+
+# settings of central variables
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw
+# part of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present
+# anyhow
+D_BINDMPTS="tmp root media home"
+D_DIRINBINDMNT="/var/run /var/log /var/tmp"
+D_RODIRSINRW="/etc/bootsplash /etc/gconf /var/adm /var/lib/texmf /var/lib/rpm \
+/var/cache/fontconfig"
+D_DIRINDXS="/var/lib/rpm /var/lib/nobody /var/lib/alternatives/ /var/db/nscd \
+/var/lib/bluetooth /var/lib/scrollkeeper /var/lib/nfs/sm /var/lib/nfs/sm.bak \
+/var/lib/misc /var/spool/cron"
+
+# empty functions are defined at the beginning of /etc/functions
+
+# distro specific function called from servconfig script
+config_distro () {
+ # clean the runlevel directories which will be populated by the stage3 setup
+ for dir in rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d ; do
+ rm -rf /mnt/etc/${dir}/*
+ done
+ # set some system/environment information
+ echo -e "SLX VERSION = $SLXVERSION\nINITRAMFS GENERATION DATE = $date" \
+ >>/mnt/etc/redhat-release
+ # simple bash configuration for root
+ echo -e "# Generated in OpenSLX stage3\n. /etc/bashrc" >/mnt/root/.profile
+ # enable sysrq
+ sed -e "1i# Configuration modified by $0 during stage3 bootup." \
+ -e "s/kernel.sysrq =.*/kernel.sysrq = 1/" -i /mnt/etc/sysctl.conf
+ # set some networking stuff if needed
+ [ -e /mnt/etc/sysconfig/network ] && \
+ sed -e "s/HOSTNAME=.*/HOSTNAME=$host_name/" \
+ -e "s/GATEWAY=.*/GATEWAY=$gateway/" -i /mnt/etc/sysconfig/network
+ # check for inittab file
+ #test -f /mnt/etc/inittab || error "$df_erritab"
+}
+
+# initial (boot time) runlevel scripts
+initial_boot () {
+# delete all classical disk base rootfs stuff from rc.sysinit
+sed -e "6i# Script modified by $0 during stage3 bootup." \
+ -e "/# Initialize ha/,/success/d" -e "/^ROOTFSTYPE/,/Remounting root/d" \
+ -e "/# Check f/,/Mounting l/d" -e "/^# Configure mach/,/-f \/fastboot/d" \
+ -e "s,/sbin/start_udev$,/etc/init.d/udevd," -i /mnt/etc/rc.d/rc.sysinit
+# write a custom udev script (to be checked!!)
+echo -e "#!/bin/sh\n# Simple udev starter script created as a replacement \
+during OpenSLX stage3\n# bootup." >/mnt/etc/init.d/udevd
+echo -e ". /etc/init.d/functions\nSTRING=\$\"Starting udev: \" \
+\necho -n \"\$STRING \"\n/sbin/udevstart </dev/null >/dev/null 2>&1 \
+\n[ \$? -eq 0 ] && success \$\"\$STRING\" || failure \$\"\$STRING\" \
+\nexit 0" >>/mnt/etc/init.d/udevd
+chmod u+x /mnt/etc/init.d/udevd
+# delete all classical disk base rootfs stuff from halt
+sed -e "7i# Modified by $0 during stage3 bootup." \
+ -e "/# Save mixer/,/Saving random/d" -e "/quotaoff/,/^# Now halt/d" \
+ -i /mnt/etc/init.d/halt
+# boot.slx is a special runlevel script generated within initialramfs which
+# should be executed before the normal runlevel scripts.
+echo -e "# Run OpenSLX init runlevel script\n/etc/init.d/boot.slx" \
+ >>/mnt/etc/rc.d/rc.sysinit
+# switch off SElinux enforcing
+sed -e "1i# Configuration modified by $0 during stage3 bootup." \
+ -e "s/SELINUX=.*/SELINUX=permissive/" -i /mnt/etc/selinux/config
+# link halt and reboot scripts
+ln -s ../init.d/killall /mnt/etc/rc.d/rc0.d/S00killall
+ln -s ../init.d/halt /mnt/etc/rc.d/rc0.d/S01halt
+ln -s ../init.d/killall /mnt/etc/rc.d/rc6.d/S00killall
+ln -s ../init.d/halt /mnt/etc/rc.d/rc6.d/S01reboot
+}
+
+# linking runlevel scripts
+rllinker () {
+local script="$1"
+if [ $2 -lt 10 ] ; then
+ local start="0$2"; else local start="$2"
+fi
+if [ $3 -lt 10 ] ; then
+ local stop="0$3"; else local stop="$3"
+fi
+# empty runlevel links - decision on running certain services is passed via
+# configuration
+for i in rc3.d/K$stop$script rc5.d/K$stop$script \
+ rc3.d/S$start$script rc5.d/S$start$script ; do
+ ln -sf ../init.d/$script /mnt/etc/$i
+done
+}
+
+# group of functions for the normal runlevels - first parameter is start
+# second stop
+# function for ntp configuration
+config_ntp () {
+if [ -e /mnt/etc/init.d/ntpd ] ; then
+ if ! strinfile "ntp:" /mnt/etc/passwd ; then
+ echo -e "ntp:x:38:38:NTP daemon:/var/lib/ntp:/sbin/nologin" \
+ >>/mnt/etc/passwd
+ echo -e "ntp:!:13099:0:99999:7:::" >>/mnt/etc/shadow
+ fi
+ testmkd /mnt/var/lib/ntp ntp:ntp
+ if [ "x$start_ntp" = "xyes" ] ; then
+ rllinker "ntpd" 7 14
+ fi
+fi
+}
+# function for atd
+config_atd () {
+if [ "x$start_atd" = "xyes" ]; then
+ rllinker "atd" 14 4
+fi
+}
+# function for configuration of cron services
+config_cron () {
+if [ "x$start_cron" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/cron ] ; then
+ rllinker "cron" 18 2
+ testmkd /mnt/var/spool/anacron
+ echo -e "# /etc/crontab - file generated by $0:\n\
+" >/mnt/etc/crontab
+ else
+ error "$df_errcron" nonfatal
+ fi
+fi
+}
+# name service caching daemon (useful in most cases)
+config_nscd () {
+ if [ -f /mnt/etc/init.d/nscd ] ; then
+ testmkd /mnt/var/db/nscd
+ rllinker "nscd" 20 5
+ fi
+}
+# secure shell service
+config_sshd () {
+if [ "x$start_sshd" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/sshd ] ; then
+ testmkd /mnt/var/empty/sshd/dev
+ if ! strinfile "sshd:" /mnt/etc/passwd ; then
+ echo -e "sshd:x:74:74::/var/empty/sshd:/sbin/nologin" \
+ >>/mnt/etc/passwd
+ echo -e "sshd:!:13099:0:99999:7:::" >>/mnt/etc/shadow
+ fi
+ rllinker "sshd" 25 10
+ else
+ error "$df_errsshd" nonfatal
+ fi
+fi
+}
+# snmp agent for remote monitoring
+config_snmp () {
+if [ "x$start_snmp" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/snmpd ] ; then
+ rllinker "snmpd" 24 2
+ testmkd /mnt/var/lib/net-snmp
+ fi
+ # fixme!!
+ # write service monitor depending on services started
+ fi
+}
+# configure print server (lpd or cups)
+config_printer () {
+if [ "x${start_printdaemon}" != "x" ] && \
+ [ "x${start_printdaemon}" != "xno" ]; then
+ case ${start_printdaemon} in
+ yes|cups*|CUPS*)
+ rllinker "cups" 25 1
+ testmkd /mnt/var/spool/cups/tmp root:sys
+ ;;
+ lp*|LP*|PLP*)
+ rllinker "lpd" 25 1
+ testmkd /mnt/var/spool/lpd
+ ;;
+ *)
+ #logwrite "Do not know print-server $start_printdaemon; \
+ #specify 'cups' or 'lpd'."
+ ;;
+ esac
+fi
+# configure cups printer client, avoid to overwrite admin provided printer
+# configuration file
+if [ "x$lpr_servers" != "x" ] && [ ! -e /rootfs/etc/cups/client.conf ] ; then
+ echo -e "# /etc/cups/client.conf - file generated by\n#\t$0:\n\
+#\t$date\n#\nServerName\t$lpr_servers" >/mnt/etc/cups/client.conf
+fi
+}
+# configure bluetooth services
+config_bt () {
+if [ -e /mnt/etc/sysconfig/bluetooth ] ; then
+ sed -e "1i# /etc/sysconfig/bluetooth - file modified by $0" \
+ -e "s,HID2HCI_ENABLE.*,HID2HCI_ENABLE=true," \
+ -i /mnt/etc/sysconfig/bluetooth
+else
+ : # no bluetooth components installed
+fi
+}
+# set up localization like keytable and consolefont
+dlocale () {
+echo -e "\t# entries added by $0: $date" >> /mnt/etc/init.d/boot.slx
+sed -e "s,KEYTABLE=.*,KEYTABLE=\"${KEYTABLE}\"," \
+ -i /mnt/etc/sysconfig/keyboard
+#echo -e "\tsetfont ${CONSOLE_FONT} >${LOGFILE} 2>&1\n" \
+# >>/mnt/etc/init.d/boot.slx
+}
+# acpi and powersave daemons, required e.g. to shutdown the machine via
+# power button, no need for early start
+config_acpi () {
+rllinker acpid 01 22
+}
+# configure dbus (inter application communication for kde and gnome), hal
+# (hardware abstraction layer - used e.g. by powersaved) and resmgr
+# (resource manager - the user gets permissions to devices when loggin on)
+# runlevel script for haldaemon is now haldaemon instead of hal
+config_dreshal () {
+local start=4
+local stop=18
+if [ "x$start_dreshal" = "xyes" ]; then
+ testmkd /mnt/var/run/dbus
+ if [ -f /mnt/etc/init.d/messagebus ] ; then
+ testmkd /mnt/var/lib/dbus
+ strinfile "dbus:" /mnt/etc/passwd || \
+ echo "dbus:x:81:81:System Message Bus:/var/run/dbus:/sbin/nologin" \
+ >> /mnt/etc/passwd
+ strinfile "dbus:" /mnt/etc/group || echo "dbus:!:81:" >> /mnt/etc/group
+ rllinker "messagebus" $start $stop
+ fi
+ if [ -f /mnt/etc/init.d/haldaemon ] ; then
+ testmkd /mnt/var/lib/hal
+ strinfile "haldaemon:" /mnt/etc/passwd || \
+ echo "haldaemon:x:68:68:User for haldaemon:/var/run/hal:/sbin/nologin" \
+ >> /mnt/etc/passwd
+ strinfile "haldaemon:" /mnt/etc/group || \
+ echo "haldaemon:!:103:" >> /mnt/etc/group
+ start=$(($start + 1))
+ stop=$(($stop - 1))
+ rllinker "haldaemon" $start $stop
+ fi
+fi
+}
+# configure automounter (fixme: to be moved into plugin)
+config_automount () {
+if [ -e /mnt/etc/sysconfig/autofs ] ; then
+ testmkd /mnt/var/lock/subsys
+ sed -e "1i# /etc/sysconfig/autofs - file modified by\n#\t$0:\n#" \
+ -e "s,DAEMONOPTIONS.*,DAEMONOPTIONS=\"--timeout 3\"," \
+ -i /mnt/etc/sysconfig/autofs
+ rllinker "autofs" 18 4
+else
+ error "$df_erramt" nonfatal
+fi
+}
+# start name service caching daemon
+config_nscd () {
+if [ -e /mnt/etc/init.d/nscd ] ; then
+ testmkd /mnt/var/run/nscd
+ rllinker "nscd" 16 16
+else
+ error "$df_errnsc" nonfatal
+fi
+}
+# start portmapper (needed at least for nfs and nis services)
+config_portmap () {
+ rllinker "portmap" 2 20
+}
+# start NIS (mostly deprecated)
+config_nis () {
+if [ -f /mnt/etc/init.d/ypbind ] ; then
+ rllinker "ypbind" 6 16
+ config_portmap
+ testmkd /mnt/var/yp/nicknames
+else
+ error "$df_erryp" nonfatal
+fi
+}
+# initialize runlevel skript to be executed during system startup
+# (before most of the normal boot init scripts)
+# this script should operate like a normal runlevel script
+d_mkrlscript () {
+local switch="$1"
+local name="$2"
+local info="$3"
+case "$1" in
+ init)
+ echo -e "#!/bin/sh\n# skeleton of /etc/init.d/${name} created \
+by $0\n# after you applied changes to the creation scripts you have to \
+rerun\n# the mkdxsinitrd script to get them applied\n\
+. /etc/rc.d/init.d/functions\n#. /etc/sysconfig/logfile\ncase \
+\"\$1\" in\n start)\n\techo -n \"$info\"" >>/mnt/etc/init.d/${name}
+ chmod u+x /mnt/etc/init.d/${name}
+ ;;
+ entry)
+ echo -e "\t${info}" >>/mnt/etc/init.d/${name}
+ ;;
+ close)
+ echo -e "\t;;\n stop)\n\t;;\nesac" \
+ >>/mnt/etc/init.d/${name}
+ ;;
+esac
+}
+
+
diff --git a/src/initramfs/distro-specs/suse/functions-10.2 b/src/initramfs/distro-specs/suse/functions-10.2
new file mode 100644
index 00000000..39a9d31c
--- /dev/null
+++ b/src/initramfs/distro-specs/suse/functions-10.2
@@ -0,0 +1,82 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2006..2008 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# configuration script for OpenSuSE 10.2 to configure linux stateless clients
+# (included by init, hwautocfg, servconfig within InitialRamFS after
+# inclusion of the main functions file). This file is the main base for the
+# several SuSE distro versions
+
+# settings of central variables (formerly done via config-*, these variables
+# are disputable ...)
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw
+# part of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present
+# anyhow
+
+D_RODIRSINRW="/etc/opt/gnome/gconf /etc/X11/xkb /var/adm /var/lib/texmf \
+/var/lib/rpm /var/cache/fontconfig"
+
+# configure dbus (inter application communication for kde and gnome), hal
+# (hardware abstraction layer - used e.g. by powersaved) and resmgr
+# (resource manager - the user gets permissions to devices when loggin on)
+# runlevel script for haldaemon is now haldaemon instead of hal
+config_dreshal () {
+local start=5
+local stop=18
+if [ "x$start_dreshal" = "xyes" ]; then
+ for dir in /var/run/dbus /var/run/resmgr/classes /var/run/hal \
+ /var/cache/hald /var/lib/PolicyKit /var/lib/misc ; do
+ testmkd /mnt/$dir
+ done
+ if [ -f /mnt/etc/init.d/dbus ] ; then
+ strinfile "messagebus:" /mnt/etc/passwd || \
+ echo "messagebus:x:100:101:User for D-BUS:/var/run/dbus:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "messagebus:" /mnt/etc/group || \
+ echo "messagebus:!:101:" >> /mnt/etc/group
+ # set permissions with userid
+ testmkd /mnt/var/run/dbus messagebus:messagebus
+ rllinker "dbus" $start $stop
+ fi
+ if [ -f /mnt/etc/init.d/resmgr ] ; then
+ start=$(($start + 1))
+ stop=$(($stop - 1))
+ rllinker "resmgr" $start $stop
+ fi
+ if [ -f /mnt/etc/init.d/haldaemon ] ; then
+ strinfile "haldaemon:" /mnt/etc/passwd || \
+ echo "haldaemon:x:105:103:User for haldaemon:/var/run/hal:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "haldaemon:" /mnt/etc/group || \
+ echo "haldaemon:!:103:" >> /mnt/etc/group
+ echo -n "" > /mnt/var/lib/PolicyKit/reload
+ # set permissions with userid
+ d_mkrlscript entry boot.slx "chown haldaemon:haldaemon /var/run/hal\
+ /var/cache/hald 2>/dev/null"
+ start=$(($start + 1))
+ stop=$(($stop - 1))
+ rllinker "haldaemon" $start $stop
+ fi
+ if [ -f /mnt/etc/init.d/policykitd ] ; then
+ strinfile "polkituser:" /mnt/etc/passwd || \
+ echo "polkituser:x:104:106:PolicyKit:/var/run/PolicyKit:/bin/false" \
+ >> /mnt/etc/passwd
+ testmkd /mnt/var/run/polkit polkit:polkit
+ start=$(($start + 10))
+ stop=$(($stop - 1))
+ rllinker "policykitd" $start $stop
+ echo -n > /mnt/var/lib/misc/PolicyKit.reload
+ chmod a+x /mnt/var/lib/misc/PolicyKit.reload
+ fi
+fi
+}
diff --git a/src/initramfs/distro-specs/suse/functions-10.3 b/src/initramfs/distro-specs/suse/functions-10.3
new file mode 100644
index 00000000..3f9516c3
--- /dev/null
+++ b/src/initramfs/distro-specs/suse/functions-10.3
@@ -0,0 +1,26 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2006..2008 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# configuration script for OpenSuSE 10.3 to configure linux stateless clients
+# (included by init, hwautocfg, servconfig within InitialRamFS after
+# inclusion of the main functions file). This file is the main base for the
+# several SuSE distro versions
+
+# settings of central variables (formerly done via config-*, these variables
+# are disputable ...)
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw
+# part of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present
+# anyhow
+
+# no changes from functions-default by now
diff --git a/src/initramfs/distro-specs/suse/functions-11.1 b/src/initramfs/distro-specs/suse/functions-11.1
new file mode 100644
index 00000000..d350fa9c
--- /dev/null
+++ b/src/initramfs/distro-specs/suse/functions-11.1
@@ -0,0 +1,90 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2006..2009 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# configuration script for OpenSuSE 11.1 to configure linux stateless clients
+# (included by init, hwautocfg, servconfig within InitialRamFS after
+# inclusion of the main functions file). This file is the main base for the
+# several SuSE distro versions
+
+# settings of central variables (formerly done via config-*, these variables
+# are disputable ...)
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw
+# part of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present
+# anyhow
+
+# start portmapper (needed at least for nfs and nis services)
+config_portmap () {
+ # portmap is provided via rpcbind in suse 11.1
+ testmkd /mnt/var/lib/rpcbind
+ rllinker "rpcbind" 4 5
+}
+# acpi and powersave daemons, required e.g. to shutdown the machine via
+# power button, no need for early start
+config_acpi () {
+rllinker acpid 22 12
+# dbus is required to run acpid and powersaved
+start_dreshal="yes"
+}
+# configure dbus (inter application communication for kde and gnome), hal
+# (hardware abstraction layer - used e.g. by powersaved)
+config_dreshal () {
+local start=1
+local stop=10
+if [ "x$start_dreshal" = "xyes" ]; then
+ testmkd /mnt/var/lib/misc
+ testmkd /mnt/var/run/PolicyKit polkituser:polkituser
+ testmkd /mnt/var/lib/PolicyKit polkituser:polkituser
+ testmkd /mnt/var/run/dbus/at_console/pool
+
+ sed -i /mnt/etc/PolicyKit/PolicyKit.conf \
+ -e "s/\(<\/config>\)/ @@new@@\n\1/" \
+ -e "s/@@new@@/<match action=\"@@action@@\">\n@@return@@\n <\/match>/" \
+ -e "s/@@action@@/org.freedesktop.hal.storage.mount-removable/" \
+ -e "s/@@return@@/ <return result=\"yes\"\/>/"
+
+ if [ -f /mnt/etc/init.d/dbus ] ; then
+ strinfile "messagebus:" /mnt/etc/passwd || \
+ echo "messagebus:x:102:103:User for D-BUS:/var/run/dbus:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "messagebus:" /mnt/etc/group || \
+ echo "messagebus:!:103:" >> /mnt/etc/group
+ # create directories and set permissions with user and group id
+ testmkd /mnt/var/run/dbus messagebus:messagebus
+ testmkd /mnt/var/lib/dbus
+
+ rm -rf /mnt/etc/dbus-1/system.d/*etwork*anager.conf \
+ /mnt/etc/dbus-1/system.d/nm-* \
+ /mnt/etc/dbus-1/event.d/*NetworkManager*
+
+ rllinker "dbus" $start $stop
+ fi
+ if [ -f /mnt/etc/init.d/haldaemon ] ; then
+ strinfile "haldaemon:" /mnt/etc/passwd || \
+ echo "haldaemon:x:106:107:User for haldaemon:/var/run/hal:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "haldaemon:" /mnt/etc/group || \
+ echo "haldaemon:!:107:" >> /mnt/etc/group
+ echo -n "" > /mnt/var/lib/misc/PolicyKit.reload
+ chmod a+x /mnt/var/lib/misc/PolicyKit.reload
+ # create directories and set permissions with user and group id
+ for dir in /var/run/hald /var/run/hald/hald-local \
+ /var/run/hald/hald-runner /var/cache/hald; do
+ testmkd /mnt/${dir} haldaemon:haldaemon
+ done
+ start=$(($start + 1))
+ stop=$(($stop - 1))
+ rllinker "haldaemon" $start $stop
+ fi
+fi
+}
diff --git a/src/initramfs/distro-specs/suse/functions-11.2 b/src/initramfs/distro-specs/suse/functions-11.2
new file mode 100644
index 00000000..ae8008b9
--- /dev/null
+++ b/src/initramfs/distro-specs/suse/functions-11.2
@@ -0,0 +1,95 @@
+# Copyright (c) 2010 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# configuration script for OpenSuSE 11.2 to configure linux stateless clients
+# (included by init, hwautocfg, servconfig within InitialRamFS after
+# inclusion of the main functions file). This file is the main base for the
+# several SuSE distro versions
+
+# settings of central variables (formerly done via config-*, these variables
+# are disputable ...)
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw
+# part of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present
+# anyhow
+
+# start portmapper (needed at least for nfs and nis services)
+config_portmap () {
+# portmap is provided via rpcbind in suse 11.1,2
+testmkd /mnt/var/lib/rpcbind
+rllinker "rpcbind" 4 5
+}
+# acpi and powersave daemons, required e.g. to shutdown the machine via
+# power button, no need for early start
+config_acpi () {
+rllinker acpid 22 12
+# dbus is required to run acpid and powersaved
+start_dreshal="yes"
+}
+# configure dbus (inter application communication for kde and gnome), hal
+# (hardware abstraction layer - used e.g. by powersaved)
+config_dreshal () {
+local start=1
+local stop=10
+if [ "x$start_dreshal" = "xyes" ]; then
+ for dir in /var/lib/misc /var/run/ConsoleKit \
+ "/var/run/PolicyKit polkituser:polkituser" \
+ "/var/lib/PolicyKit polkituser:polkituser" \
+ "/var/run/dbus/at_console/pool"; do
+ testmkd /mnt${dir}
+ done
+ # enable access to removable devices
+ sed -i /mnt/etc/PolicyKit/PolicyKit.conf \
+ -e "s/\(<\/config>\)/ @@new@@\n\1/" \
+ -e "s/@@new@@/<match action=\"@@action@@\">\n@@return@@\n <\/match>/" \
+ -e "s/@@action@@/org.freedesktop.hal.storage.mount-removable/" \
+ -e "s/@@return@@/ <return result=\"yes\"\/>/"
+
+ if [ -f /mnt/etc/init.d/dbus ] ; then
+ strinfile "messagebus:" /mnt/etc/passwd || \
+ echo "messagebus:x:102:103:User for D-BUS:/var/run/dbus:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "messagebus:" /mnt/etc/group || \
+ echo "messagebus:!:103:" >> /mnt/etc/group
+ # create directories and set permissions with user and group id
+ testmkd /mnt/var/run/dbus messagebus:messagebus
+ testmkd /mnt/var/lib/dbus
+ # console-kit-daemon is often not started properly (why ever)
+ sed -i /mnt/etc/init.d/dbus \
+ -e '/start_daemon -f $DBUS_D/a\
+\ \ \ \ \ \ \ \ start_daemon -f /usr/sbin/console-kit-daemon'
+
+ rm -rf /mnt/etc/dbus-1/system.d/*etwork*anager.conf \
+ /mnt/etc/dbus-1/system.d/nm-* \
+ /mnt/etc/dbus-1/event.d/*NetworkManager*
+
+ rllinker "dbus" $start $stop
+ fi
+ if [ -f /mnt/etc/init.d/haldaemon ] ; then
+ strinfile "haldaemon:" /mnt/etc/passwd || \
+ echo "haldaemon:x:106:107:User for haldaemon:/var/run/hal:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "haldaemon:" /mnt/etc/group || \
+ echo "haldaemon:!:107:" >> /mnt/etc/group
+ echo -n "" >/mnt/var/lib/misc/PolicyKit.reload
+ chmod a+x /mnt/var/lib/misc/PolicyKit.reload
+ # create directories and set permissions with user and group id
+ for dir in /var/run/hald /var/run/hald/hald-local \
+ /var/run/hald/hald-runner /var/cache/hald; do
+ testmkd /mnt/${dir} haldaemon:haldaemon
+ done
+ start=$(($start + 1))
+ stop=$(($stop - 1))
+ rllinker "haldaemon" $start $stop
+ fi
+fi
+}
diff --git a/src/initramfs/distro-specs/suse/functions-11.3 b/src/initramfs/distro-specs/suse/functions-11.3
new file mode 100644
index 00000000..4eac33a0
--- /dev/null
+++ b/src/initramfs/distro-specs/suse/functions-11.3
@@ -0,0 +1,97 @@
+# Copyright (c) 2010 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# configuration script for OpenSuSE 11.2 to configure linux stateless clients
+# (included by init, hwautocfg, servconfig within InitialRamFS after
+# inclusion of the main functions file). This file is the main base for the
+# several SuSE distro versions
+
+# settings of central variables (formerly done via config-*, these variables
+# are disputable ...)
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw
+# part of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present
+# anyhow
+#
+# TODO: id. copy of functions-11.2 to be adapted to 11.3
+
+# start portmapper (needed at least for nfs and nis services)
+config_portmap () {
+# portmap is provided via rpcbind in suse 11.1,2,3
+testmkd /mnt/var/lib/rpcbind
+rllinker "rpcbind" 4 5
+}
+# acpi and powersave daemons, required e.g. to shutdown the machine via
+# power button, no need for early start
+config_acpi () {
+rllinker acpid 22 12
+# dbus is required to run acpid and powersaved
+start_dreshal="yes"
+}
+# configure dbus (inter application communication for kde and gnome), hal
+# (hardware abstraction layer - used e.g. by powersaved)
+config_dreshal () {
+local start=1
+local stop=10
+if [ "x$start_dreshal" = "xyes" ]; then
+ for dir in /var/lib/misc /var/run/ConsoleKit \
+ "/var/run/PolicyKit polkituser:polkituser" \
+ "/var/lib/PolicyKit polkituser:polkituser" \
+ "/var/run/dbus/at_console/pool"; do
+ testmkd /mnt${dir}
+ done
+ # enable access to removable devices
+ sed -i /mnt/etc/PolicyKit/PolicyKit.conf \
+ -e "s/\(<\/config>\)/ @@new@@\n\1/" \
+ -e "s/@@new@@/<match action=\"@@action@@\">\n@@return@@\n <\/match>/" \
+ -e "s/@@action@@/org.freedesktop.hal.storage.mount-removable/" \
+ -e "s/@@return@@/ <return result=\"yes\"\/>/"
+
+ if [ -f /mnt/etc/init.d/dbus ] ; then
+ strinfile "messagebus:" /mnt/etc/passwd || \
+ echo "messagebus:x:102:103:User for D-BUS:/var/run/dbus:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "messagebus:" /mnt/etc/group || \
+ echo "messagebus:!:103:" >> /mnt/etc/group
+ # create directories and set permissions with user and group id
+ testmkd /mnt/var/run/dbus messagebus:messagebus
+ testmkd /mnt/var/lib/dbus
+ # console-kit-daemon is often not started properly (why ever)
+ sed -i /mnt/etc/init.d/dbus \
+ -e '/start_daemon -f $DBUS_D/a\
+\ \ \ \ \ \ \ \ start_daemon -f /usr/sbin/console-kit-daemon'
+
+ rm -rf /mnt/etc/dbus-1/system.d/*etwork*anager.conf \
+ /mnt/etc/dbus-1/system.d/nm-* \
+ /mnt/etc/dbus-1/event.d/*NetworkManager*
+
+ rllinker "dbus" $start $stop
+ fi
+ if [ -f /mnt/etc/init.d/haldaemon ] ; then
+ strinfile "haldaemon:" /mnt/etc/passwd || \
+ echo "haldaemon:x:106:107:User for haldaemon:/var/run/hal:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "haldaemon:" /mnt/etc/group || \
+ echo "haldaemon:!:107:" >> /mnt/etc/group
+ echo -n "" >/mnt/var/lib/misc/PolicyKit.reload
+ chmod a+x /mnt/var/lib/misc/PolicyKit.reload
+ # create directories and set permissions with user and group id
+ for dir in /var/run/hald /var/run/hald/hald-local \
+ /var/run/hald/hald-runner /var/cache/hald; do
+ testmkd /mnt/${dir} haldaemon:haldaemon
+ done
+ start=$(($start + 1))
+ stop=$(($stop - 1))
+ rllinker "haldaemon" $start $stop
+ fi
+fi
+}
diff --git a/src/initramfs/distro-specs/suse/functions-default b/src/initramfs/distro-specs/suse/functions-default
new file mode 100644
index 00000000..14bb5ff0
--- /dev/null
+++ b/src/initramfs/distro-specs/suse/functions-default
@@ -0,0 +1,608 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# configuration script for general SuSE to configure linux stateless clients
+# (included by init, hwautocfg, servconfig within InitialRamFS after
+# inclusion of the main functions file). This file is the main base for the
+# several SuSE distro versions
+
+# settings of central variables (formerly done via config-*, these variables
+# are disputable ...)
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw
+# part of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present
+# anyhow
+D_BINDMPTS="tmp root media home"
+D_DIRINBINDMNT="/var/run /var/log /var/tmp"
+D_RODIRSINRW="/etc/bootsplash /etc/gconf /etc/X11/xkb /var/adm /var/lib/texmf \
+/var/lib/rpm /var/cache/fontconfig"
+D_DIRINDXS="/var/X11R6/compose-cache /var/run/sysconfig/tmp /var/adm \
+/var/lib/rpm /var/lib/nobody /var/lib/pam_devperm /var/lib/bluetooth \
+/var/lib/texmf /var/lib/nfs/sm /var/lib/nfs/sm.bak /var/lib/misc \
+/var/lib/acpi /var/spool/cron /var/lock/subsys/sysconfig"
+
+# empty functions are defined at the beginning of /etc/functions
+
+# distro specific function called from servconfig script
+config_distro () {
+# clean the runlevel directories which will be populated by the stage3 setup
+for dir in rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d boot.d ; do
+ rm -rf /mnt/etc/init.d/${dir}/*
+done
+
+# link the additional key setup (notbook special keys)
+grep -q -E "otebook" /etc/hwinfo.bios && \
+ [ -e /mnt/etc/init.d/hotkey-setup ] && rllinker "hotkey-setup" 25 25
+# no need to run start scripts in parallel
+# enable magic sysrequest for the clients
+sed -e "1i# /etc/sysconfig/sysctl - modified by $0 version $version" \
+ -e "s,ENABLE_SYSRQ=.*,ENABLE_SYSRQ=\"yes\"," \
+ -i /mnt/etc/sysconfig/sysctl
+# add slx specific path /var/opt/openslx/bin ...
+echo -e "# stuff generated by $0 (out of InitRamFS written $date)\n\
+PATH=\"\$PATH:/var/opt/openslx/bin\"\n\
+test \"\$UID\" -ge 100 && PATH=\"\$PATH:.\"\n\
+QTDIR=/usr/lib/qt3\nexport QTDIR\nno_proxy='localhost'\n\
+export no_proxy" >/mnt/etc/SuSEconfig/profile
+echo -e "SLX VERSION = $SLXVERSION\nINITRAMFS GENERATION DATE = $date" \
+ >>/mnt/etc/SuSE-release
+
+# remove annoying udev rule set for changing eth interface and rtc symlink
+rm /mnt/etc/udev/rules.d/*persistent-net.rules \
+ /mnt/etc/udev/rules.d/*net_persistent_names.rules >/dev/null 2>&1
+sed '/SYMLINK+="rtc"/d' -i \
+ /mnt/etc/udev/rules.d/50-udev-default.rules >/dev/null 2>&1
+
+# create a stateless specific halt script
+echo -e '#!/bin/sh\n# script generated in InitRamFS (SLX stage3)
+. /etc/rc.status\n
+trap "echo" SIGINT SIGSEGV SIGQUIT SIGTERM\nset +e\n\n
+case "$0" in\n\t*halt)
+\t message="The system will be halted immediately."
+\t command="halt -p"\n\t ;;\n\t*reboot)\n
+\t message="Please stand by while rebooting the system..."
+\t command="reboot"\n\t ;;\nesac\n
+rc_reset\ntest -e /etc/init.d/halt.local && {
+\techo Running /etc/init.d/halt.local\n\t/bin/sh /etc/init.d/halt.local
+\trc_status -v1 -r\n}
+echo $message\nexec $command -d -f' >/mnt/etc/init.d/halt
+# add the halt link to the 0 and 6 runlevel directories
+ln -sf ../halt /mnt/etc/init.d/rc0.d/S20halt
+ln -sf ../halt /mnt/etc/init.d/rc6.d/S20reboot
+
+echo "LOGFILE=${LOGFILE}" >/mnt/etc/sysconfig/logfile
+# fixme: rather ugly to write that boot script this way
+echo '
+#!/bin/sh
+# SuSE specific initial boot file modified for the use with OpenSLX clients
+#
+###########################################################################
+
+# Before we do anything else, try at first to activate SELinux support
+test -d /selinux && mount -n -t selinuxfs none /selinux &>/dev/null
+
+# Configuration and coloring of the boot messages
+. /etc/rc.status
+. /etc/sysconfig/boot
+. /etc/sysconfig/logfile
+
+# Avoid be interrupted by child or keyboard
+trap "echo" SIGINT SIGSEGV SIGQUIT
+set +e
+
+# reasonable start values for bootsplash progress
+export progress=0
+export sscripts=45
+export kscripts=45
+
+echo -n "System Boot Control: "
+echo "Running $0"
+
+###########################################################################
+#
+
+# some important (un)mounts
+rc_reset
+echo -n "Mounting /proc, /sys and /dev/pts filesystems"
+# file /etc/fstab in some scenarios not available
+mount -t proc proc /proc &>/dev/null
+rc_status -v -r
+
+echo -n "Mounting /dev/pts"
+mount -t devpts -o mode=0620,gid=5 devpts /dev/pts
+rc_status -v -r
+if [ -d /sys ] ; then
+ while read a b c ; do
+ case "$b" in
+ sysfs)
+ echo -n "Mounting /sys filesystem"
+ echo -e "sysfs\t\t/sys\t\tsysfs\t\trw\t\t 0 0\n" \
+ >>/etc/fstab
+ mount -t sysfs sysfs /sys
+ rc_status -v -r
+ break
+ ;;
+ esac
+ done < /proc/filesystems
+fi
+
+# Start blogd, requires /proc and /dev/pts.
+# Export the real device in variable REDIRECT.
+test -x /sbin/blogd -a -n "$REDIRECT" && /sbin/blogd $REDIRECT
+if test -z "$REDIRECT" ; then
+ if (echo -n > /dev/tty) 2>/dev/null ; then
+ REDIRECT=/dev/tty
+ else
+ REDIRECT=/dev/console
+ fi
+fi
+
+###########################################################################
+#
+# Save old terminal settings and set -nl to avoid staircase
+# effect, do not lock scrolling, and avoid break characters.
+otty=$(stty -g)
+if test "$FLOW_CONTROL" = "yes" ; then
+ stty -nl ixon ignbrk -brkint
+else
+ stty -nl -ixon ignbrk -brkint
+fi
+
+###########################################################################
+#
+# Common used variables
+bootrc=/etc/init.d/boot.d
+rex="[0-9][0-9]"
+failed=""
+skipped=""
+callord=""
+
+#
+# Initialize boosplash progressbar variables
+#
+. /etc/rc.splash B
+splashtrigger "rlchange B"
+
+###########################################################################
+#
+# Do we stop/start script in parallel?
+startpar=$(type -p startpar)
+test "$RUN_PARALLEL" = "yes" || startpar=""
+
+# Start bootup client scripts.
+if test -d ${bootrc}/ ; then
+ for i in ${bootrc}/S*; do
+ test -f $i || continue
+
+ B=${i##*/}
+ script=${B#*S$rex}
+ B=${B%$script}
+
+ rc_splash "$script start"
+
+ if test -z "$startpar" ; then
+ blogger "$script start"
+
+ if test -x "$i" ; then
+ $i start
+ else
+ echo Running $i
+ /bin/sh $i b
+ rc_status -v1 -r
+ fi
+ status=$?
+ echo -en "$rc_reset"
+
+ case $status in
+ [1-4]) failed="${failed:+$failed }$script" ;;
+ [56]) skipped="${skipped:+$skipped }$script" ;;
+ [07]|*) ;;
+ esac
+
+ blogger "$script start exits with status $status"
+ else
+ # Parallel boot only for valid scripts
+ test -x $i || continue
+
+ # Current vector
+ eval cur=\${$B}
+ test -n "$cur" || callord="${callord:+$callord }$B"
+
+ # Remember scripts
+ eval $B="\${cur:+$i }\${cur:-$i}"
+ fi
+ done
+fi
+
+###########################################################################
+#
+# Call the scripts in correct order
+if test -n "$startpar" ; then
+ declare -i s
+ for p in $callord ; do
+ vect=$p
+ eval p=(\${$p})
+
+ blogger "run boot scripts (${p[@]##*S$rex})"
+ if test ${#p[@]} -eq 1 ; then
+ ${p} start
+ status=($?)
+ else
+ status=($($startpar -t 30 -T 3 -a start ${p[@]}))
+ fi
+ echo -en "$rc_reset"
+ blogger "exit status of (${p[@]##*S$rex}) is (${status[@]})"
+
+ s=0
+ for script in ${p[@]##*S$rex} ; do
+ case "${status[$s]}" in
+ [1-4]) failed="${failed:+$failed }$script" ;;
+ [56]) skipped="${skipped:+$skipped }$script" ;;
+ 0|*) ;;
+ esac
+ : $((s++))
+ done
+ done
+fi
+
+###########################################################################
+#
+# Be verbose and print stats
+echo -n "System Boot Control: "
+echo -e "The system has been ${stat}${extd}set up${norm}"
+if test -n "$failed" ; then
+ n=$((${#failed} + 7))
+ echo -n "Failed features: "
+ test $n -lt 47 && echo -en "\033[${COLUMNS}C\033[${n}D"
+ echo -e "${warn}${failed}${norm}"
+fi
+if test -n "$skipped" ; then
+ n=$((${#skipped} + 7))
+ echo -n "Skipped features: "
+ test $n -lt 47 && echo -en "\033[${COLUMNS}C\033[${n}D"
+ echo -e "${attn}${skipped}${norm}"
+fi
+
+###########################################################################
+#
+# Check for boot cycle detection
+test -s /lib/bootcycle/stats && . /lib/bootcycle/stats
+
+# Restore old terminal settings
+stty $otty
+
+###########################################################################
+#
+# Let zic set timezone - if present (from boot.ldconfig).
+if test -n "$TIMEZONE" -a -x /usr/sbin/zic ; then
+ echo -n Setting up timezone data
+ /usr/sbin/zic -l $TIMEZONE
+ rc_status -v -r
+fi
+
+###########################################################################
+#
+# start user defined bootup script.
+if test -f /etc/init.d/boot.local ; then
+ ECHO_RETURN=$rc_done_up
+ echo "Running /etc/init.d/boot.local"
+ /bin/sh /etc/init.d/boot.local || rc_failed
+ rc_status -v1; rc_reset
+ rc_splash "boot.local start"
+fi
+
+rc_reset
+exit 0' >/mnt/etc/init.d/boot
+## end of initial stage4 boot script
+
+# enable execution of all important start scripts
+# running stuff in parallel seems to be rather useless and generates some
+# difficult to solve problems. If you want to try nevertheless enable the
+# following line and disable the latter one (switching off that feature)
+sed -e "s,RUN_PARALLEL=.*,RUN_PARALLEL=\"no\"," \
+ -i /mnt/etc/sysconfig/boot
+# if YaST2 should be runnable (without much effect anyway) on the client
+testmkd /mnt/var/log/YaST2
+# for screen sessions
+testmkd /mnt/var/run/uscreens 4777
+# set special SuSE HOSTNAME file
+echo "$host_name" > /mnt/etc/HOSTNAME
+# produce proper output formatting (of "done", "failed", ...)
+sed -e '/^test $LINES/ {
+i\
+# Script modified here by \$0 during stage3 bootup\
+LINECOL=$(stty size); LINES=${LINECOL% *}; COLUMNS=${LINECOL#* }
+}' -e "/^if test -z \"\$LINES/,/fi$/d" -i /mnt/etc/rc.status
+# check for inittab file
+test -f /mnt/etc/inittab || error "$df_erritab"
+}
+
+# initial (boot time) runlevel scripts
+initial_boot () {
+local scripts=$*
+local count=10
+# boot.slx is a special runlevel script generated within initialramfs which
+# should be executed before the normal runlevel scripts. Proper shutdown is
+# not needed!?
+for i in boot.udev boot.proc boot.klog boot.loadmodules boot.slx boot.clock \
+boot.sysctl boot.ipconfig boot.swap $D_SPLASHY kbd; do
+ count=$(($count + 1))
+ [ $DEBUGLEVEL -ge 2 ] && echo "boot-runlevelscript $i"
+ ln -sf /etc/init.d/$i /mnt/etc/init.d/boot.d/S${count}$i
+done
+}
+
+# linking runlevel scripts
+rllinker () {
+local script="$1"
+if [ $2 -lt 10 ] ; then
+ local start="0$2"; else local start="$2"
+fi
+if [ $3 -lt 10 ] ; then
+ local stop="0$3"; else local stop="$3"
+fi
+# empty runlevel links - decision on running certain services is
+# passed via configuration
+for i in rc3.d/K$stop$script rc5.d/K$stop$script \
+ rc3.d/S$start$script rc5.d/S$start$script ; do
+ ln -sf ../$script /mnt/etc/init.d/$i
+done
+}
+
+# group of functions for the normal runlevels - first parameter is start
+# second stop
+# function for ntp configuration
+config_ntp () {
+if [ -e /mnt/etc/init.d/ntp ] ; then
+ if ! strinfile "ntp:" /mnt/etc/passwd ; then
+ echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \
+ >>/mnt/etc/passwd
+ echo -e "ntp:!:13099:0:99999:7:::" >>/mnt/etc/shadow
+ fi
+ testmkd /mnt/var/lib/ntp/var/run/ntp
+ if [ "x$start_ntp" = "xyes" ] ; then
+ rllinker "ntp" 7 14
+ fi
+fi
+}
+# function for atd
+config_atd () {
+if [ "x$start_atd" = "xyes" ]; then
+ rllinker "atd" 14 4
+fi
+}
+# function for configuration of cron services
+config_cron () {
+if [ "x$start_cron" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/cron ] ; then
+ rllinker "cron" 18 2
+ testmkd /mnt/var/spool/cron/lastrun
+ testmkd /mnt/var/spool/cron/tabs
+ echo -e "# /etc/crontab - file generated by $0:\n\
+#\t$date\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin\
+\nMAILTO=\n-*/15 * * * *\troot\ttest -x /usr/lib/cron/run-crons && \
+/usr/lib/cron/run-crons >/dev/null 2>&1" >/mnt/etc/crontab
+ else
+ error "$df_errcron" nonfatal
+ fi
+fi
+}
+# name service caching daemon (useful in most cases)
+config_nscd () {
+ if [ -f /mnt/etc/init.d/nscd ] ; then
+ rllinker "nscd" 20 5
+ fi
+}
+# secure shell service
+config_sshd () {
+if [ "x$start_sshd" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/sshd ] ; then
+ testmkd /mnt/var/run/sshd
+ testmkd /mnt/var/lib/empty
+ if ! strinfile "sshd:" /mnt/etc/passwd ; then
+ echo -e "sshd:x:117:65534::/var/run/sshd:/usr/sbin/nologin" \
+ >>/mnt/etc/passwd
+ echo -e "sshd:!:13099:0:99999:7:::" >>/mnt/etc/shadow
+ fi
+ # set permissions with userid
+ #d_mkrlscript entry boot.slx "chown sshd:nogroup /var/run/sshd \
+ # /var/lib/empty 2>/dev/null"
+ rllinker "sshd" 25 10
+ else
+ error "$df_errsshd" nonfatal
+ fi
+fi
+}
+# snmp agent for remote monitoring
+config_snmp () {
+if [ "x$start_snmp" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/snmpd ] ; then
+ rllinker "snmpd" 24 2
+ testmkd /mnt/var/lib/net-snmp
+ fi
+ # fixme!!
+ # write service monitor depending on services started
+ fi
+}
+# configure print server (lpd or cups)
+config_printer () {
+if [ "x${start_printdaemon}" != "x" ] && \
+ [ "x${start_printdaemon}" != "xno" ]; then
+ case ${start_printdaemon} in
+ yes|cups*|CUPS*)
+ rllinker "cups" 25 1
+ testmkd /mnt/var/spool/cups/tmp
+ #chown -R lp:lp /var/spool/cups
+ ;;
+ lp*|LP*|PLP*)
+ rllinker "lpd" 25 1
+ testmkd /mnt/var/spool/lpd
+ #chown -R lp:lp /var/spool/lpd
+ ;;
+ *)
+ #logwrite "Do not know print-server $start_printdaemon; \
+ #specify 'cups' or 'lpd'."
+ ;;
+ esac
+fi
+# configure cups printer client, avoid to overwrite admin provided printer
+# configuration file
+if [ "x$lpr_servers" != "x" ] && [ ! -e /rootfs/etc/cups/client.conf ] ; then
+ echo -e "# /etc/cups/client.conf - file generated by\n#\t$0:\n\
+#\t$date\n#\nServerName\t$lpr_servers" >/mnt/etc/cups/client.conf
+fi
+}
+# configure bluetooth services
+config_bt () {
+if [ -e /mnt/etc/sysconfig/bluetooth ] ; then
+ sed -e "1i# /etc/sysconfig/bluetooth - file modified by $0" \
+ -e "s,START_SERVICES.*,START_SERVICES=\"yes\"," \
+ -i /mnt/etc/sysconfig/bluetooth
+else
+ : # no bluetooth components installed
+fi
+}
+# set up localization like keytable and consolefont
+dlocale () {
+d_mkrlscript entry boot.slx "# entries added by $0: $date"
+sed -e "s,KEYTABLE=.*,KEYTABLE=\"${KEYTABLE}\"," \
+ -i /mnt/etc/sysconfig/keyboard
+d_mkrlscript entry boot.slx "#loadkeys ${KEYTABLE} >${LOGFILE} 2>&1"
+d_mkrlscript entry boot.slx "#setfont ${CONSOLE_FONT} >${LOGFILE} 2>&1"
+sed -e "s,RC_LANG=.*,RC_LANG=\"${LANG}\" # added in initrd," \
+ -i /mnt/etc/sysconfig/language
+}
+# acpi and powersave daemons, required e.g. to shutdown the machine via
+# power button, no need for early start
+config_acpi () {
+rllinker acpid 22 12
+rllinker powersaved 23 11
+# dbus is required to run acpid and powersaved
+start_dreshal="yes"
+}
+# configure dbus (inter application communication for kde and gnome), hal
+# (hardware abstraction layer - used e.g. by powersaved) and resmgr
+# (resource manager - the user gets permissions to devices when loggin on)
+# runlevel script for haldaemon is now haldaemon instead of hal
+config_dreshal () {
+local start=0
+local stop=18
+if [ "x$start_dreshal" = "xyes" ]; then
+ for dir in /var/run/resmgr/classes /var/lib/PolicyKit; do
+ testmkd /mnt/$dir
+ done
+ if [ -f /mnt/etc/init.d/dbus ] ; then
+ strinfile "messagebus:" /mnt/etc/passwd || \
+ echo "messagebus:x:100:101:User for D-BUS:/var/run/dbus:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "messagebus:" /mnt/etc/group || \
+ echo "messagebus:!:101:" >> /mnt/etc/group
+ # create directories and set permissions with user and group id
+ testmkd /mnt/var/run/dbus messagebus:messagebus
+ rllinker "dbus" $start $stop
+ fi
+ if [ -f /mnt/etc/init.d/consolekit ] ; then
+ strinfile "polkituser:" /mnt/etc/passwd || \
+ echo "polkituser:x:104:106:PolicyKit:/var/run/PolicyKit:/bin/false" \
+ >> /mnt/etc/passwd
+ start=$(($start + 1))
+ stop=$(($stop - 1))
+ rllinker "consolekit" $start $stop
+ echo -n > /mnt/var/lib/misc/PolicyKit.reload
+ chmod a+x /mnt/var/lib/misc/PolicyKit.reload
+ fi
+ if [ -f /mnt/etc/init.d/resmgr ] ; then
+ start=$(($start + 1))
+ stop=$(($stop - 1))
+ rllinker "resmgr" $start $stop
+ fi
+ if [ -f /mnt/etc/init.d/haldaemon ] ; then
+ strinfile "haldaemon:" /mnt/etc/passwd || \
+ echo "haldaemon:x:105:103:User for haldaemon:/var/run/hal:/bin/false" \
+ >> /mnt/etc/passwd
+ strinfile "haldaemon:" /mnt/etc/group || \
+ echo "haldaemon:!:103:" >> /mnt/etc/group
+ echo -n "" > /mnt/var/lib/PolicyKit.reload
+ # create directories and set permissions with user and group id
+ testmkd /mnt/var/run/hal haldaemon:haldaemon
+ testmkd /mnt/var/cache/hald haldaemon:haldaemon
+ start=$(($start + 1))
+ stop=$(($stop - 1))
+ rllinker "haldaemon" $start $stop
+ fi
+fi
+}
+# configure automounter (fixme: to be moved into plugin)
+config_automount () {
+if [ -e /mnt/etc/sysconfig/autofs ] ; then
+ testmkd /mnt/var/lock/subsys
+ sed -e "1i# /etc/sysconfig/autofs - file modified by\n#\t$0:\n#" \
+ -e "s,AUTOFS_OPTIONS.*,AUTOFS_OPTIONS=\"--timeout 3\"," \
+ -i /mnt/etc/sysconfig/autofs
+ rllinker "autofs" 18 4
+ # might be needed for autofs via NFS (start specific nfs related services)
+ # echo 'NFS_START_SERVICES="no"' >>/mnt/etc/sysconfig/nfs
+else
+ error "$df_erramt" nonfatal
+fi
+}
+# start name service caching daemon
+config_nscd () {
+if [ -e /mnt/etc/init.d/nscd ] ; then
+ testmkd /mnt/var/run/nscd
+ rllinker "nscd" 16 16
+else
+ error "$df_errnsc" nonfatal
+fi
+}
+# start portmapper (needed at least for nfs and nis services)
+config_portmap () {
+ rllinker "portmap" 2 20
+}
+# start NIS (mostly deprecated)
+config_nis () {
+if [ -f /mnt/etc/init.d/ypbind ] ; then
+ rllinker "ypbind" 6 16
+ config_portmap
+ testmkd /mnt/var/yp/nicknames
+else
+ error "$df_erryp" nonfatal
+fi
+}
+# initialize runlevel skript to be executed during system startup
+# (before most of the normal boot init scripts)
+# this script should operate like a normal runlevel script
+d_mkrlscript () {
+local switch="$1"
+local name="$2"
+local info="$3"
+case "$1" in
+ init)
+ echo -e "#!/bin/sh\n# skeleton of /etc/init.d/${name} created \
+by $0\n# after you applied changes to the creation scripts you have to \
+rerun\n# the mkdxsinitrd script to get them applied\n\
+. /etc/rc.status\n. /etc/sysconfig/logfile\nrc_reset\ncase \
+\"\$1\" in\n start)\n\techo -n \"$info\"" >>/mnt/etc/init.d/${name}
+ chmod u+x /mnt/etc/init.d/${name}
+ ;;
+ entry)
+ echo -e "\t${info}" >>/mnt/etc/init.d/${name}
+ ;;
+ close)
+ echo -e "\trc_status -v\n\t;;\n stop)\n\t;;\nesac\nrc_exit" \
+ >>/mnt/etc/init.d/${name}
+ ;;
+esac
+}
+
+
diff --git a/src/initramfs/distro-specs/ubuntu/functions-10.04 b/src/initramfs/distro-specs/ubuntu/functions-10.04
new file mode 100644
index 00000000..7f73c4ca
--- /dev/null
+++ b/src/initramfs/distro-specs/ubuntu/functions-10.04
@@ -0,0 +1,16 @@
+# Copyright (c) 2010 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# Configuration script for Ubuntu 10.04 configure OpenSLX Linux stateless
+# clients (merged in stage2 with ubuntu/functions-default - and loaded within
+# initial ramfs - stage3) It may overwrite settings from the default config
+# file (/etc/functions)
+
+# no changes from default (as this is default at the moment)
diff --git a/src/initramfs/distro-specs/ubuntu/functions-8.04 b/src/initramfs/distro-specs/ubuntu/functions-8.04
new file mode 100644
index 00000000..3b93e86d
--- /dev/null
+++ b/src/initramfs/distro-specs/ubuntu/functions-8.04
@@ -0,0 +1,296 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# Configuration script for Ubuntu 8.04 configure OpenSLX linux stateless
+# clients (merged in stage2 with ubuntu/functions-default - and loaded within
+# initial ramfs - stage3) It may overwrite settings from the default config
+# file (/etc/functions)
+
+# distro specific configuration variables used in the setup functions
+# (formerly done via config-*, these variables are disputable ...)
+# D_ETCEXCL - list of files, wildcards to be excluded from /etc when using
+# bind mounts
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw part
+# of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present anyhow
+#D_ETCEXCL="etc/gconf/*\n*.old\n*-\netc/autoinstall\nlogrotate*\nbootloader\n\
+#*~\npptp.d\nisdn\nyouservers\nhardware/hwcfg*\n\
+#X11/xdm/pixmaps\ndhclient.script"
+D_BINDMPTS="tmp root home media"
+D_DIRINBINDMNT="/var/run /var/log /var/tmp /var/lib/gdm"
+D_RODIRSINRW="/etc/X11/xkb /var/lib/gconf /var/lib/dpkg /var/lib/aspell \
+/var/lib/pango /var/lib/defoma /var/cache/fontconfig /var/lib/dkms"
+#D_RWDIRSINRO="/var/lib/gdm"
+D_DIRINDXS="/var/X11R6/compose-cache /var/run/sysconfig/tmp /var/adm \
+/var/lib/nobody /var/lib/pam_devperm /var/lib/bluetooth /var/lib/texmf \
+/var/lib/nfs/sm /var/lib/misc /var/lib/acpi /var/spool/cron /var/lib/alsa \
+/var/lock/subsys/sysconfig"
+
+# empty functions are defined at the beginning of /etc/functions
+
+# distro specific stuff to initialize
+preinit () {
+ # load unix module to provide sockets (is compiled into kernel on
+ # the live CDs!?)
+ modprobe ${MODPRV} unix 2>/dev/null || error "$df_errumod" nonfatal
+ modprobe ${MODPRV} vesafb 2>/dev/null || error "$df_errumod" nonfatal
+ modprobe ${MODPRV} fbcon 2>/dev/null || error "$df_errumod" nonfatal
+}
+
+# distro specific function called from servconfig script
+config_distro () {
+ # clean the runlevel directories which will be populated by the stage3 setup
+ for dir in rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rcS.d ; do
+ rm -rf /mnt/etc/${dir}/*
+ done
+ # add the halt link to the 0 and 6 runlevel directories
+ ln -sf ../init.d/halt /mnt/etc/rc0.d/S90halt
+ ln -sf ../init.d/reboot /mnt/etc/rc6.d/S90reboot
+
+ # remove annoying udev rule set for changing eth interface
+ rm /mnt/etc/udev/rules.d/*persistent-net.rules >/dev/null 2>&1
+
+ # inittab is obsolete with the change to upstart in ubuntu 7.10, but to
+ # prevent missunderstandings with the blank inittab created by openslx init
+ # we'll write a comment..
+ echo "# inittab is obsolete with the change to upstart from ubuntu 7.10" \
+ > /mnt/etc/inittab
+
+ # fix getty bug (console login on tty1 is started too early)
+ [ -f /mnt/etc/event.d/tty1 ] && \
+ sed -i "s/start on runlevel 2/start on stopped rc2/" /mnt/etc/event.d/tty1
+
+ # for screen sessions
+ testmkd /mnt/var/run/screen root:utmp 0775
+
+ # no additional /dev/shm mount needed as it is always used
+ sed -e "/Mount a tmpfs on/,/domount tmpfs /d" \
+ -i /mnt/etc/init.d/mountdevsubfs.sh
+
+ # clean up the udev script as much is handled already in stage3
+ sed -e "3i# Script modified during SLX stage3 bootup (config_distro)" \
+ -e "/# This next bit can/a\ /sbin/udevadm trigger" \
+ -e "/# We need the uevent/,/# It's all over/d" \
+ -e "/# Log things that/,/kill \$UDEV/d" -i /mnt/etc/init.d/udev
+
+ # clean the mountall.sh script as only swap activation needed
+ sed -e "3i# Script modified during SLX stage3 bootup (config_distro)" \
+ -e "/pre_mountall/,/post_mountall/d" \
+ -i /mnt/etc/init.d/mountall.sh
+
+ # add the slx specific path (/var/opt/openslx/bin) to the PATH variable
+ echo -e "# stuff generated by $0 (out of InitRamFS written $date)\n\
+export PATH=\"\$PATH:/var/opt/openslx/bin\"" >>/mnt/etc/profile
+
+ # check for inittab file (might fail for new style init -> upstart)
+ #test -f /mnt/etc/inittab || test -d /mnt/etc/event.d || \
+ # error "$df_erritab"
+}
+
+# initial (boot time) runlevel scripts
+initial_boot () {
+local count=10
+# boot.slx is a special runlevel script generated within initialramfs which
+# should be executed before the normal runlevel scripts. Proper shutdown is
+# not needed!?
+for i in mountkernfs.sh mountall.sh mountdevsubfs.sh keyboard-setup procps \
+bootlogd hwclock.sh sudo console-setup udev boot.slx $D_SPLASHY; do
+ count=$(($count + 1))
+ [ $DEBUGLEVEL -ge 2 ] && echo "boot-runlevelscript $i"
+ ln -sf /etc/init.d/$i /mnt/etc/rcS.d/S${count}$i
+done
+}
+
+# linking runlevel scripts
+rllinker () {
+local script="$1"
+if [ $2 -lt 10 ] ; then
+ local start="0$2"; else local start="$2"
+fi
+if [ $3 -lt 10 ] ; then
+ local stop="0$3"; else local stop="$3"
+fi
+# empty runlevel links - decision on running certain services is
+# passed via configuration
+for i in rc2.d/K$stop$script rc3.d/K$stop$script \
+ rc2.d/S$start$script rc3.d/S$start$script ; do
+ if ! [ -f /mnt/etc/init.d/$script ]; then
+ echo "Target `pwd`../$script does not exist. Skipping links"
+ break
+ else
+ ln -sf ../init.d/$script /mnt/etc/$i
+ [ "$DEBUGLEVEL" == 5 ] && echo "Linked $script"
+ fi
+done
+}
+
+# group of functions for the normal runlevels - first parameter is start
+# second stop
+
+# configure udev
+config_udev () {
+ [ -c /dev/pktcdvd ] && { rm -rf /dev/pktcdvd; mkdir /dev/pktcdvd; }
+ if [ -f /mnt/etc/init.d/udev-finish ] ; then
+ rllinker "udev-finish" 24 2
+ fi
+}
+
+# function for ntp configuration
+config_ntp () {
+if [ -f /mnt/etc/init.d/ntp -a "x$start_ntp" != "xno" ] ; then
+ echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \
+ >>/mnt/etc/passwd
+ testmkd /mnt/var/lib/ntp/var/run/ntp
+ rllinker "ntp" 7 14
+fi
+}
+# function for atd
+config_atd () {
+if [ "x$start_atd" = "xyes" ]; then
+ # testmkd /mnt/var/spool/atjobs
+ # testmkd /mnt/var/spool/atspool
+ # chown 1:1 /mnt/var/spool/atjobs /mnt/var/spool/atspool
+ rllinker "atd" 14 4
+fi
+}
+# function for configuration of cron services (fixme: to be moved to a plugin?)
+config_cron () {
+if [ "x$start_cron" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/cron ] ; then
+ rllinker "cron" 18 2
+ # fixme! check for proper permissions!
+ testmkd /mnt/var/spool/crontabs
+ echo -e "# /etc/crontab - file generated by $0:\n\
+#\t$date\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin\
+\nMAILTO=\n-*/15 * * * *\troot\ttest -x /usr/lib/cron/run-crons && \
+/usr/lib/cron/run-crons >/dev/null 2>&1\n" >/mnt/etc/crontab
+ else
+ error "$df_errcron" nonfatal
+ fi
+fi
+}
+# secure shell service
+config_sshd () {
+if [ "x$start_sshd" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/ssh ] ; then
+ #testmkd /mnt/var/run/sshd
+ rllinker "ssh" 12 10
+ else
+ error "$df_errsshd" nonfatal
+ fi
+fi
+}
+# snmp agent for remote monitoring
+config_snmp () {
+if [ "x$start_snmp" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/snmpd ] ; then
+ rllinker "snmpd" 24 2
+ testmkd /mnt/var/lib/net-snmp
+ fi
+ # fixme!!
+ # write service monitor depending on services started
+ fi
+}
+# acpi and powersave
+config_acpi () {
+ rllinker "acpid" 8 16
+ #Commented out since battery checking is only useful for Notebooks
+ #rllinker "acpi-support" 99 2
+}
+# configure hal, dbus, policykitd and services like that
+config_dreshal () {
+if [ "x$start_dreshal" = "xyes" ]; then
+ testmkd /mnt/var/lib/dbus
+ testmkd /mnt/var/lib/misc
+ testmkd /mnt/var/cache/hald
+ touch /mnt/var/lib/misc/PolicyKit.reload
+ chown root:polkituser /mnt/var/lib/misc/PolicyKit.reload
+ rm -rf /mnt/etc/dbus-1/system.d/*etwork*anager.conf \
+ /mnt/etc/dbus-1/system.d/nm-* \
+ /mnt/etc/dbus-1/event.d/*NetworkManager*
+ sed -i /mnt/etc/PolicyKit/PolicyKit.conf \
+ -e "s/\(<\/config>\)/ @@new@@\n\1/" \
+ -e "s/@@new@@/<match action=\"@@action@@\">\n@@return@@\n <\/match>/" \
+ -e "s/@@action@@/org.freedesktop.hal.storage.mount-removable/" \
+ -e "s/@@return@@/ <return result=\"yes\"\/>/"
+ sed -i /mnt/etc/dbus-1/system.d/hal.conf \
+ -e "s/^\([^d]*\)deny\(.*Volume.*\)/\1allow\2/"
+ rllinker "dbus" 2 20
+ rllinker "hal" 3 18
+ if [ ! -e /mnt/etc/init.d/policykit ] ; then
+ testmkd /mnt/var/lib/PolicyKit root:polkituser 1770
+ testmkd /mnt/var/lib/PolicyKit-public root:polkituser
+ else
+ rllinker "policykit" 18 10
+ fi
+fi
+}
+
+# initialize boot.slx - skript to be executed during early system startup
+# (before most of the normal boot init scripts)
+# this script should operate like a normal runlevel script (fixme!!)
+d_mkrlscript () {
+local switch="$1"
+local name="$2"
+local info="$3"
+case "$switch" in
+ init)
+ echo -e "#!/bin/sh\n# skeleton of /etc/init.d/$name written \
+from $0\n# after you applied changes to the creation scripts you have to \
+rerun\n# the mkdxsinitrd script to get them applied\n\n\
+. /lib/lsb/init-functions\n" >/mnt/etc/init.d/$name
+ echo -e "\n\ncase \"\$1\" in\n start)\n\tlog_begin_msg \"$info\"" \
+ >>/mnt/etc/init.d/$name
+ chmod u+x /mnt/etc/init.d/$name
+ ;;
+ entry)
+ echo -e "\t${info}" >>/mnt/etc/init.d/${name}
+ ;;
+ close)
+ echo -e "\tlog_end_msg 0\n\t;;\n stop)\n\t;;\nesac\nexit 0" \
+ >>/mnt/etc/init.d/$name
+ ;;
+esac
+}
+# configure automounter
+config_automount () {
+if [ -f /mnt/etc/init.d/autofs ] ; then
+ testmkd /mnt/var/lock/subsys
+ sed -e "1i# /etc/default/autofs - file modified by\n#\t$0:\n#" \
+ -e "s,TIMEOUT.*,TIMEOUT=60," -i /mnt/etc/default/autofs
+ config_portmap
+ rllinker "autofs" 12 4
+ rllinker "nfs-common" 11 5
+fi
+}
+# start portmapper (needed at least for nfsN and nis services)
+config_portmap () {
+ rllinker "portmap" 2 20
+}
+# start NIS (fixme - does the service is really named ypbind??)
+config_nis () {
+ if [ -f /mnt/etc/init.d/ypbind ] ; then
+ rllinker "ypbind" 6 16
+ config_portmap
+ testmkd /mnt/var/yp/nicknames
+ else
+ error "$df_erryp" nonfatal
+ fi
+}
+# name service caching daemon (useful in most cases)
+config_nscd () {
+ if [ -f /mnt/etc/init.d/nscd ] ; then
+ testmkd /mnt/var/cache/nscd
+ rllinker "nscd" 20 5
+ fi
+}
diff --git a/src/initramfs/distro-specs/ubuntu/functions-8.10 b/src/initramfs/distro-specs/ubuntu/functions-8.10
new file mode 100644
index 00000000..8a3469e7
--- /dev/null
+++ b/src/initramfs/distro-specs/ubuntu/functions-8.10
@@ -0,0 +1,296 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# Configuration script for Ubuntu 8.10 configure OpenSLX Linux stateless
+# clients (merged in stage2 with ubuntu/functions-default - and loaded within
+# initial ramfs - stage3) It may overwrite settings from the default config
+# file (/etc/functions)
+
+# distro specific configuration variables used in the setup functions
+# (formerly done via config-*, these variables are disputable ...)
+# D_ETCEXCL - list of files, wildcards to be excluded from /etc when using
+# bind mounts
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw part
+# of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present anyhow
+#D_ETCEXCL="etc/gconf/*\n*.old\n*-\netc/autoinstall\nlogrotate*\nbootloader\n\
+#*~\npptp.d\nisdn\nyouservers\nhardware/hwcfg*\n\
+#X11/xdm/pixmaps\ndhclient.script"
+D_BINDMPTS="tmp root home media"
+D_DIRINBINDMNT="/var/run /var/log /var/tmp /var/lib/gdm"
+D_RODIRSINRW="/etc/X11/xkb /var/lib/gconf /var/lib/dpkg /var/lib/aspell \
+/var/lib/pango /var/lib/defoma /var/cache/fontconfig /var/lib/dkms"
+#D_RWDIRSINRO="/var/lib/gdm"
+D_DIRINDXS="/var/X11R6/compose-cache /var/run/sysconfig/tmp /var/adm \
+/var/lib/nobody /var/lib/pam_devperm /var/lib/bluetooth /var/lib/texmf \
+/var/lib/nfs/sm /var/lib/misc /var/lib/acpi /var/spool/cron /var/lib/alsa \
+/var/lock/subsys/sysconfig"
+
+# empty functions are defined at the beginning of /etc/functions
+
+# distro specific stuff to initialize
+preinit () {
+ # load unix module to provide sockets (is compiled into kernel on
+ # the live CDs!?)
+ modprobe ${MODPRV} unix 2>/dev/null || error "$df_errumod" nonfatal
+ modprobe ${MODPRV} vesafb 2>/dev/null || error "$df_errumod" nonfatal
+ modprobe ${MODPRV} fbcon 2>/dev/null || error "$df_errumod" nonfatal
+}
+
+# distro specific function called from servconfig script
+config_distro () {
+ # clean the runlevel directories which will be populated by the stage3 setup
+ for dir in rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rcS.d ; do
+ rm -rf /mnt/etc/${dir}/*
+ done
+ # add the halt link to the 0 and 6 runlevel directories
+ ln -sf ../init.d/halt /mnt/etc/rc0.d/S90halt
+ ln -sf ../init.d/reboot /mnt/etc/rc6.d/S90reboot
+
+ # remove annoying udev rule set for changing eth interface
+ rm /mnt/etc/udev/rules.d/*persistent-net.rules >/dev/null 2>&1
+
+ # inittab is obsolete with the change to upstart in ubuntu 7.10, but to
+ # prevent missunderstandings with the blank inittab created by openslx init
+ # we'll write a comment..
+ echo "# inittab is obsolete with the change to upstart from ubuntu 7.10" \
+ > /mnt/etc/inittab
+
+ # fix getty bug (console login on tty1 is started too early)
+ [ -f /mnt/etc/event.d/tty1 ] && \
+ sed -i "s/start on runlevel 2/start on stopped rc2/" /mnt/etc/event.d/tty1
+
+ # for screen sessions
+ testmkd /mnt/var/run/screen root:utmp 0775
+
+ # no additional /dev/shm mount needed as it is always used
+ sed -e "/Mount a tmpfs on/,/domount tmpfs /d" \
+ -i /mnt/etc/init.d/mountdevsubfs.sh
+
+ # clean up the udev script as much is handled already in stage3
+ sed -e "3i# Script modified during SLX stage3 bootup (config_distro)" \
+ -e "/# This next bit can/a\ /sbin/udevadm trigger" \
+ -e "/# We need the uevent/,/# It's all over/d" \
+ -e "/# Log things that/,/kill \$UDEV/d" -i /mnt/etc/init.d/udev
+
+ # clean the mountall.sh script as only swap activation needed
+ sed -e "3i# Script modified during SLX stage3 bootup (config_distro)" \
+ -e "/pre_mountall/,/post_mountall/d" \
+ -i /mnt/etc/init.d/mountall.sh
+
+ # add the slx specific path (/var/opt/openslx/bin) to the PATH variable
+ echo -e "# stuff generated by $0 (out of InitRamFS written $date)\n\
+export PATH=\"\$PATH:/var/opt/openslx/bin\"" >>/mnt/etc/profile
+
+ # check for inittab file (might fail for new style init -> upstart)
+ #test -f /mnt/etc/inittab || test -d /mnt/etc/event.d || \
+ # error "$df_erritab"
+}
+
+# initial (boot time) runlevel scripts
+initial_boot () {
+local count=10
+# boot.slx is a special runlevel script generated within initialramfs which
+# should be executed before the normal runlevel scripts. Proper shutdown is
+# not needed!?
+for i in mountkernfs.sh mountall.sh mountdevsubfs.sh keyboard-setup procps \
+bootlogd hwclock.sh sudo console-setup udev boot.slx $D_SPLASHY; do
+ count=$(($count + 1))
+ [ $DEBUGLEVEL -ge 2 ] && echo "boot-runlevelscript $i"
+ ln -sf /etc/init.d/$i /mnt/etc/rcS.d/S${count}$i
+done
+}
+
+# linking runlevel scripts
+rllinker () {
+local script="$1"
+if [ $2 -lt 10 ] ; then
+ local start="0$2"; else local start="$2"
+fi
+if [ $3 -lt 10 ] ; then
+ local stop="0$3"; else local stop="$3"
+fi
+# empty runlevel links - decision on running certain services is
+# passed via configuration
+for i in rc2.d/K$stop$script rc3.d/K$stop$script \
+ rc2.d/S$start$script rc3.d/S$start$script ; do
+ if ! [ -f /mnt/etc/init.d/$script ]; then
+ echo "Target `pwd`../$script does not exist. Skipping links"
+ break
+ else
+ ln -sf ../init.d/$script /mnt/etc/$i
+ [ "$DEBUGLEVEL" == 5 ] && echo "Linked $script"
+ fi
+done
+}
+
+# group of functions for the normal runlevels - first parameter is start
+# second stop
+
+# configure udev
+config_udev () {
+ [ -c /dev/pktcdvd ] && { rm -rf /dev/pktcdvd; mkdir /dev/pktcdvd; }
+ if [ -f /mnt/etc/init.d/udev-finish ] ; then
+ rllinker "udev-finish" 24 2
+ fi
+}
+
+# function for ntp configuration
+config_ntp () {
+if [ -f /mnt/etc/init.d/ntp -a "x$start_ntp" != "xno" ] ; then
+ echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \
+ >>/mnt/etc/passwd
+ testmkd /mnt/var/lib/ntp/var/run/ntp
+ rllinker "ntp" 7 14
+fi
+}
+# function for atd
+config_atd () {
+if [ "x$start_atd" = "xyes" ]; then
+ # testmkd /mnt/var/spool/atjobs
+ # testmkd /mnt/var/spool/atspool
+ # chown 1:1 /mnt/var/spool/atjobs /mnt/var/spool/atspool
+ rllinker "atd" 14 4
+fi
+}
+# function for configuration of cron services (fixme: to be moved to a plugin?)
+config_cron () {
+if [ "x$start_cron" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/cron ] ; then
+ rllinker "cron" 18 2
+ # fixme! check for proper permissions!
+ testmkd /mnt/var/spool/crontabs
+ echo -e "# /etc/crontab - file generated by $0:\n\
+#\t$date\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin\
+\nMAILTO=\n-*/15 * * * *\troot\ttest -x /usr/lib/cron/run-crons && \
+/usr/lib/cron/run-crons >/dev/null 2>&1\n" >/mnt/etc/crontab
+ else
+ error "$df_errcron" nonfatal
+ fi
+fi
+}
+# secure shell service
+config_sshd () {
+if [ "x$start_sshd" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/ssh ] ; then
+ #testmkd /mnt/var/run/sshd
+ rllinker "ssh" 12 10
+ else
+ error "$df_errsshd" nonfatal
+ fi
+fi
+}
+# snmp agent for remote monitoring
+config_snmp () {
+if [ "x$start_snmp" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/snmpd ] ; then
+ rllinker "snmpd" 24 2
+ testmkd /mnt/var/lib/net-snmp
+ fi
+ # fixme!!
+ # write service monitor depending on services started
+ fi
+}
+# acpi and powersave
+config_acpi () {
+ rllinker "acpid" 8 16
+ #Commented out since battery checking is only useful for Notebooks
+ #rllinker "acpi-support" 99 2
+}
+# configure hal, dbus, policykitd and services like that
+config_dreshal () {
+if [ "x$start_dreshal" = "xyes" ]; then
+ testmkd /mnt/var/lib/dbus
+ testmkd /mnt/var/lib/misc
+ testmkd /mnt/var/cache/hald
+ touch /mnt/var/lib/misc/PolicyKit.reload
+ chown root:polkituser /mnt/var/lib/misc/PolicyKit.reload
+ rm -rf /mnt/etc/dbus-1/system.d/*etwork*anager.conf \
+ /mnt/etc/dbus-1/system.d/nm-* \
+ /mnt/etc/dbus-1/event.d/*NetworkManager*
+ sed -i /mnt/etc/PolicyKit/PolicyKit.conf \
+ -e "s/\(<\/config>\)/ @@new@@\n\1/" \
+ -e "s/@@new@@/<match action=\"@@action@@\">\n@@return@@\n <\/match>/" \
+ -e "s/@@action@@/org.freedesktop.hal.storage.mount-removable/" \
+ -e "s/@@return@@/ <return result=\"yes\"\/>/"
+ sed -i /mnt/etc/dbus-1/system.d/hal.conf \
+ -e "s/^\([^d]*\)deny\(.*Volume.*\)/\1allow\2/"
+ rllinker "dbus" 2 20
+ rllinker "hal" 3 18
+ if [ ! -e /mnt/etc/init.d/policykit ] ; then
+ testmkd /mnt/var/lib/PolicyKit root:polkituser 1770
+ testmkd /mnt/var/lib/PolicyKit-public root:polkituser
+ else
+ rllinker "policykit" 18 10
+ fi
+fi
+}
+
+# initialize boot.slx - skript to be executed during early system startup
+# (before most of the normal boot init scripts)
+# this script should operate like a normal runlevel script (fixme!!)
+d_mkrlscript () {
+local switch="$1"
+local name="$2"
+local info="$3"
+case "$switch" in
+ init)
+ echo -e "#!/bin/sh\n# skeleton of /etc/init.d/$name written \
+from $0\n# after you applied changes to the creation scripts you have to \
+rerun\n# the mkdxsinitrd script to get them applied\n\n\
+. /lib/lsb/init-functions\n" >/mnt/etc/init.d/$name
+ echo -e "\n\ncase \"\$1\" in\n start)\n\tlog_begin_msg \"$info\"" \
+ >>/mnt/etc/init.d/$name
+ chmod u+x /mnt/etc/init.d/$name
+ ;;
+ entry)
+ echo -e "\t${info}" >>/mnt/etc/init.d/${name}
+ ;;
+ close)
+ echo -e "\tlog_end_msg 0\n\t;;\n stop)\n\t;;\nesac\nexit 0" \
+ >>/mnt/etc/init.d/$name
+ ;;
+esac
+}
+# configure automounter
+config_automount () {
+if [ -f /mnt/etc/init.d/autofs ] ; then
+ testmkd /mnt/var/lock/subsys
+ sed -e "1i# /etc/default/autofs - file modified by\n#\t$0:\n#" \
+ -e "s,TIMEOUT.*,TIMEOUT=60," -i /mnt/etc/default/autofs
+ config_portmap
+ rllinker "autofs" 12 4
+ rllinker "nfs-common" 11 5
+fi
+}
+# start portmapper (needed at least for nfsN and nis services)
+config_portmap () {
+ rllinker "portmap" 2 20
+}
+# start NIS (fixme - does the service is really named ypbind??)
+config_nis () {
+ if [ -f /mnt/etc/init.d/ypbind ] ; then
+ rllinker "ypbind" 6 16
+ config_portmap
+ testmkd /mnt/var/yp/nicknames
+ else
+ error "$df_erryp" nonfatal
+ fi
+}
+# name service caching daemon (useful in most cases)
+config_nscd () {
+ if [ -f /mnt/etc/init.d/nscd ] ; then
+ testmkd /mnt/var/cache/nscd
+ rllinker "nscd" 20 5
+ fi
+}
diff --git a/src/initramfs/distro-specs/ubuntu/functions-9.04 b/src/initramfs/distro-specs/ubuntu/functions-9.04
new file mode 100644
index 00000000..09567aa5
--- /dev/null
+++ b/src/initramfs/distro-specs/ubuntu/functions-9.04
@@ -0,0 +1,293 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# Configuration script for Ubuntu 9.04 configure OpenSLX linux stateless
+# clients (merged in stage2 with ubuntu/functions-default - and loaded within
+# initial ramfs - stage3) It may overwrite settings from the default config
+# file (/etc/functions)
+
+# distro specific configuration variables used in the setup functions
+# (formerly done via config-*, these variables are disputable ...)
+# D_ETCEXCL - list of files, wildcards to be excluded from /etc when using
+# bind mounts
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw part
+# of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present anyhow
+#D_ETCEXCL="etc/gconf/*\n*.old\n*-\netc/autoinstall\nlogrotate*\nbootloader\n\
+#*~\npptp.d\nisdn\nyouservers\nhardware/hwcfg*\n\
+#X11/xdm/pixmaps\ndhclient.script"
+D_BINDMPTS="tmp root home media"
+D_DIRINBINDMNT="/var/run /var/log /var/tmp /var/lib/gdm"
+RODIRSINRW="/var/lib/gconf /var/lib/dpkg /var/lib/aspell /var/lib/mlocate \
+/var/lib/pango /var/lib/defoma /var/cache/fontconfig /var/lib/dkms"
+#D_RWDIRSINRO="/var/lib/gdm"
+D_DIRINDXS="/var/run/sysconfig/tmp /var/adm /var/lib/nobody /var/lib/pam \
+/var/lib/bluetooth /var/lib/texmf /var/lib/nfs/sm /var/lib/misc \
+/var/lib/acpi-support /var/spool/cron /var/lib/alsa /var/lock/subsys"
+
+# empty functions are defined at the beginning of /etc/functions
+
+# distro specific stuff to initialize
+preinit () {
+ # load unix module to provide sockets (is compiled into kernel on
+ # the live CDs!?)
+ modprobe ${MODPRV} fbcon 2>/dev/null || error "$df_errumod" nonfatal
+}
+
+# distro specific function called from servconfig script
+config_distro () {
+ # clean the runlevel directories which will be populated by the stage3 setup
+ for dir in rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rcS.d ; do
+ rm -rf /mnt/etc/${dir}/*
+ done
+ # add the halt link to the 0 and 6 runlevel directories
+ ln -sf ../init.d/halt /mnt/etc/rc0.d/S90halt
+ ln -sf ../init.d/reboot /mnt/etc/rc6.d/S90reboot
+
+ # remove annoying udev rule set for changing eth interface
+ rm /mnt/etc/udev/rules.d/*persistent-net.rules >/dev/null 2>&1
+
+ # inittab is obsolete with the change to upstart in ubuntu 7.10, but to
+ # prevent missunderstandings with the blank inittab created by openslx init
+ # we'll write a comment..
+ echo "# inittab is obsolete with the change to upstart from ubuntu 7.10" \
+ > /mnt/etc/inittab
+
+ # fix getty bug (console login on tty1 is started too early)
+ [ -f /mnt/etc/event.d/tty1 ] && \
+ sed -i "s/start on runlevel 2/start on stopped rc2/" /mnt/etc/event.d/tty1
+
+ # for screen sessions
+ testmkd /mnt/var/run/screen root:utmp 0775
+
+ # no additional /dev/shm mount needed as it is always used
+ sed -e "/Mount a tmpfs on/,/domount tmpfs /d" \
+ -i /mnt/etc/init.d/mountdevsubfs.sh
+
+ # clean up the udev script as much is handled already in stage3
+ sed -e "3i# Script modified during SLX stage3 bootup (config_distro)" \
+ -e "/# This next bit can/a\ /sbin/udevadm trigger" \
+ -e "/# We need the uevent/,/# It's all over/d" \
+ -e "/# Log things that/,/kill \$UDEV/d" -i /mnt/etc/init.d/udev
+
+ # clean the mountall.sh script as only swap activation needed
+ sed -e "3i# Script modified during SLX stage3 bootup (config_distro)" \
+ -e "/pre_mountall/,/post_mountall/d" \
+ -i /mnt/etc/init.d/mountall.sh
+
+ # add the slx specific path (/var/opt/openslx/bin) to the PATH variable
+ echo -e "# stuff generated by $0 (out of InitRamFS written $date)\n\
+export PATH=\"\$PATH:/var/opt/openslx/bin\"" >>/mnt/etc/profile
+
+ # check for inittab file (might fail for new style init -> upstart)
+ #test -f /mnt/etc/inittab || test -d /mnt/etc/event.d || \
+ # error "$df_erritab"
+}
+
+# initial (boot time) runlevel scripts
+initial_boot () {
+local count=10
+# boot.slx is a special runlevel script generated within initialramfs which
+# should be executed before the normal runlevel scripts. Proper shutdown is
+# not needed!?
+for i in mountkernfs.sh mountall.sh mountdevsubfs.sh keyboard-setup procps \
+bootlogd hwclock.sh sudo console-setup udev boot.slx $D_SPLASHY; do
+ count=$(($count + 1))
+ [ $DEBUGLEVEL -ge 2 ] && echo "boot-runlevelscript $i"
+ ln -sf /etc/init.d/$i /mnt/etc/rcS.d/S${count}$i
+done
+}
+
+# linking runlevel scripts
+rllinker () {
+local script="$1"
+if [ $2 -lt 10 ] ; then
+ local start="0$2"; else local start="$2"
+fi
+if [ $3 -lt 10 ] ; then
+ local stop="0$3"; else local stop="$3"
+fi
+# empty runlevel links - decision on running certain services is
+# passed via configuration
+for i in rc2.d/K$stop$script rc3.d/K$stop$script \
+ rc2.d/S$start$script rc3.d/S$start$script ; do
+ if ! [ -f /mnt/etc/init.d/$script ]; then
+ echo "Target `pwd`../$script does not exist. Skipping links"
+ break
+ else
+ ln -sf ../init.d/$script /mnt/etc/$i
+ [ "$DEBUGLEVEL" == 5 ] && echo "Linked $script"
+ fi
+done
+}
+
+# group of functions for the normal runlevels - first parameter is start
+# second stop
+
+# configure udev
+config_udev () {
+ [ -c /dev/pktcdvd ] && { rm -rf /dev/pktcdvd; mkdir /dev/pktcdvd; }
+ if [ -f /mnt/etc/init.d/udev-finish ] ; then
+ rllinker "udev-finish" 24 2
+ fi
+}
+
+# function for ntp configuration
+config_ntp () {
+if [ -f /mnt/etc/init.d/ntp -a "x$start_ntp" != "xno" ] ; then
+ echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \
+ >>/mnt/etc/passwd
+ testmkd /mnt/var/lib/ntp/var/run/ntp
+ rllinker "ntp" 7 14
+fi
+}
+# function for atd
+config_atd () {
+if [ "x$start_atd" = "xyes" ]; then
+ # testmkd /mnt/var/spool/atjobs
+ # testmkd /mnt/var/spool/atspool
+ # chown 1:1 /mnt/var/spool/atjobs /mnt/var/spool/atspool
+ rllinker "atd" 14 4
+fi
+}
+# function for configuration of cron services (fixme: to be moved to a plugin?)
+config_cron () {
+if [ "x$start_cron" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/cron ] ; then
+ rllinker "cron" 18 2
+ # fixme! check for proper permissions!
+ testmkd /mnt/var/spool/crontabs
+ echo -e "# /etc/crontab - file generated by $0:\n\
+#\t$date\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin\
+\nMAILTO=\n-*/15 * * * *\troot\ttest -x /usr/lib/cron/run-crons && \
+/usr/lib/cron/run-crons >/dev/null 2>&1\n" >/mnt/etc/crontab
+ else
+ error "$df_errcron" nonfatal
+ fi
+fi
+}
+# secure shell service
+config_sshd () {
+if [ "x$start_sshd" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/ssh ] ; then
+ #testmkd /mnt/var/run/sshd
+ rllinker "ssh" 12 10
+ else
+ error "$df_errsshd" nonfatal
+ fi
+fi
+}
+# snmp agent for remote monitoring
+config_snmp () {
+if [ "x$start_snmp" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.d/snmpd ] ; then
+ rllinker "snmpd" 24 2
+ testmkd /mnt/var/lib/net-snmp
+ fi
+ # fixme!!
+ # write service monitor depending on services started
+ fi
+}
+# acpi and powersave
+config_acpi () {
+ rllinker "acpid" 8 16
+ #Commented out since battery checking is only useful for Notebooks
+ #rllinker "acpi-support" 99 2
+}
+# configure hal, dbus, policykitd and services like that
+config_dreshal () {
+if [ "x$start_dreshal" = "xyes" ]; then
+ testmkd /mnt/var/lib/dbus
+ testmkd /mnt/var/lib/misc
+ testmkd /mnt/var/cache/hald
+ touch /mnt/var/lib/misc/PolicyKit.reload
+ chown root:polkituser /mnt/var/lib/misc/PolicyKit.reload
+ rm -rf /mnt/etc/dbus-1/system.d/*etwork*anager.conf \
+ /mnt/etc/dbus-1/system.d/nm-* \
+ /mnt/etc/dbus-1/event.d/*NetworkManager*
+ sed -i /mnt/etc/PolicyKit/PolicyKit.conf \
+ -e "s/\(<\/config>\)/ @@new@@\n\1/" \
+ -e "s/@@new@@/<match action=\"@@action@@\">\n@@return@@\n <\/match>/" \
+ -e "s/@@action@@/org.freedesktop.hal.storage.mount-removable/" \
+ -e "s/@@return@@/ <return result=\"yes\"\/>/"
+ sed -i /mnt/etc/dbus-1/system.d/hal.conf \
+ -e "s/^\([^d]*\)deny\(.*Volume.*\)/\1allow\2/"
+ rllinker "dbus" 2 20
+ rllinker "hal" 3 18
+ if [ ! -e /mnt/etc/init.d/policykit ] ; then
+ testmkd /mnt/var/lib/PolicyKit root:polkituser 1770
+ testmkd /mnt/var/lib/PolicyKit-public root:polkituser
+ else
+ rllinker "policykit" 18 10
+ fi
+fi
+}
+
+# initialize boot.slx - skript to be executed during early system startup
+# (before most of the normal boot init scripts)
+# this script should operate like a normal runlevel script (fixme!!)
+d_mkrlscript () {
+local switch="$1"
+local name="$2"
+local info="$3"
+case "$switch" in
+ init)
+ echo -e "#!/bin/sh\n# skeleton of /etc/init.d/$name written \
+from $0\n# after you applied changes to the creation scripts you have to \
+rerun\n# the mkdxsinitrd script to get them applied\n\n\
+. /lib/lsb/init-functions\n" >/mnt/etc/init.d/$name
+ echo -e "\n\ncase \"\$1\" in\n start)\n\tlog_begin_msg \"$info\"" \
+ >>/mnt/etc/init.d/$name
+ chmod u+x /mnt/etc/init.d/$name
+ ;;
+ entry)
+ echo -e "\t${info}" >>/mnt/etc/init.d/${name}
+ ;;
+ close)
+ echo -e "\tlog_end_msg 0\n\t;;\n stop)\n\t;;\nesac\nexit 0" \
+ >>/mnt/etc/init.d/$name
+ ;;
+esac
+}
+# configure automounter
+config_automount () {
+if [ -f /mnt/etc/init.d/autofs ] ; then
+ testmkd /mnt/var/lock/subsys
+ sed -e "1i# /etc/default/autofs - file modified by\n#\t$0:\n#" \
+ -e "s,TIMEOUT.*,TIMEOUT=60," -i /mnt/etc/default/autofs
+ config_portmap
+ rllinker "autofs" 12 4
+ rllinker "nfs-common" 11 5
+fi
+}
+# start portmapper (needed at least for nfsN and nis services)
+config_portmap () {
+ rllinker "portmap" 2 20
+}
+# start NIS (fixme - does the service is really named ypbind??)
+config_nis () {
+ if [ -f /mnt/etc/init.d/ypbind ] ; then
+ rllinker "ypbind" 6 16
+ config_portmap
+ testmkd /mnt/var/yp/nicknames
+ else
+ error "$df_erryp" nonfatal
+ fi
+}
+# name service caching daemon (useful in most cases)
+config_nscd () {
+ if [ -f /mnt/etc/init.d/nscd ] ; then
+ testmkd /mnt/var/cache/nscd
+ rllinker "nscd" 20 5
+ fi
+}
diff --git a/src/initramfs/distro-specs/ubuntu/functions-9.10 b/src/initramfs/distro-specs/ubuntu/functions-9.10
new file mode 100644
index 00000000..28d1dba3
--- /dev/null
+++ b/src/initramfs/distro-specs/ubuntu/functions-9.10
@@ -0,0 +1,16 @@
+# Copyright (c) 2009 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# Configuration script for Ubuntu 9.10 configure OpenSLX Linux stateless
+# clients (merged in stage2 with ubuntu/functions-default - and loaded within
+# initial ramfs - stage3) It may overwrite settings from the default config
+# file (/etc/functions)
+
+# no changes from default
diff --git a/src/initramfs/distro-specs/ubuntu/functions-default b/src/initramfs/distro-specs/ubuntu/functions-default
new file mode 100644
index 00000000..1fdbf6bb
--- /dev/null
+++ b/src/initramfs/distro-specs/ubuntu/functions-default
@@ -0,0 +1,286 @@
+# Copyright (c) 2003..2006 - RZ Uni Freiburg
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found under http://openslx.org
+#
+# Configuration script for general Ubuntu to configure OpenSLX Linux
+# stateless clients (executed within initial ramdisk after genconfig)
+
+# distro specific configuration variables used in the setup functions
+# (formerly done via config-*, these variables are disputable ...)
+# D_ETCEXCL - list of files, wildcards to be excluded from /etc when using
+# bind mounts
+# D_DIRINBINDMNT - lists of directories to be created in bind mounted rw part
+# of the client filesystem
+# D_RODIRSINRW - ReadOnly Directories in RW part of filesystem to save on
+# TempFS usage
+# D_DIRINDXS - directories in client filesystem which should be present anyhow
+D_BINDMPTS="tmp root home media"
+D_DIRINBINDMNT="/var/run /var/log /var/tmp /var/lib/gdm"
+D_RODIRSINRW="/etc/X11/xkb /var/lib/gconf /var/lib/dpkg /var/lib/aspell \
+/var/lib/pango /var/lib/defoma /var/cache/fontconfig /var/lib/dkms"
+D_DIRINDXS="/var/run/sysconfig/tmp /var/lib/nobody /var/lib/misc /var/lib/pam \
+/var/lib/bluetooth /var/lib/texmf /var/lib/nfs/sm /var/lib/acpi_support \
+/var/spool/cron /var/lib/alsa"
+
+# distro specific stuff to initialize
+postinit () {
+ if [ $DEBUGLEVEL -gt 3 ]; then
+ export DEBUG_UPSTART=" -v --debug"
+ fi
+}
+
+# distro specific function called from servconfig script
+config_distro () {
+ # runlevel system changed significantly compared to pre 9.10 sys-v-init
+ # clean up nevertheless
+ for dir in rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rcS.d ; do
+ rm -rf /mnt/etc/${dir}/*
+ done
+ # remove unneeded init scripts (stuff handled in stage3 which would
+ # interface with already existing setup)
+ # copy all event scripts to a special directory
+ testmkd /mnt/etc/init.inactive
+ echo -e "# This directory was created in OpenSLX stage3 and contains all \
+disabled\n# upstart scripts. They are moved by servconfig to init if this is \
+required." >/mnt/etc/init.inactive/README
+ mv /mnt/etc/init/* /mnt/etc/init.inactive
+ # remove plymouth component from *dm.conf (not needed with splashy)
+ sed "/# Check kernel c/,/done/d" -i /mnt/etc/init.inactive/*dm.conf
+ # copy initial upstart scripts back
+ for file in alsa-mixer-save control-alt-delete console-setup dbus \
+ dmesg hwclock hwclock-save irqbalance module-init-tools \
+ mountall mounted* networking procps rc* tty* udev* \
+ upstart-udev-bridge ; do
+ mv /mnt/etc/init.inactive/${file}.conf /mnt/etc/init >/dev/null 2>&1
+ done
+
+ # remove annoying udev rule set for changing eth interface and cd/dvds
+ rm /mnt/etc/udev/rules.d/*persistent*.rules >/dev/null 2>&1
+
+ # for screen sessions
+ testmkd /mnt/var/run/screen root:utmp 0777
+
+ # apt stuff
+ testmkd /mnt/var/cache/apt/archives/partial
+
+ # add the slx specific path (/var/opt/openslx/bin) to the PATH variable
+ echo -e "# stuff generated by $0 (out of InitRamFS written $date)\n\
+export PATH=\"\$PATH:/var/opt/openslx/bin\"" >>/mnt/etc/profile
+}
+
+# initial boot looks different since ubuntu upstart
+initial_boot () {
+ :
+}
+
+# runlevel linker - mostly deprecated in the old form because of new upstart
+# mechanism (with backward compatibility)
+rllinker () {
+local script="$1"
+# activating the new way, check if a appropriate script is available, else
+# try the traditional approach
+
+if [ -e /mnt/etc/init.inactive/${script}.conf -o -e /mnt/etc/init/${script}.conf ]; then
+ # we have upstart scripts
+ if [ -e /mnt/etc/init.inactive/${script}.conf ] ; then
+ mv /mnt/etc/init.inactive/${script}.conf /mnt/etc/init
+ fi
+elif [ -e /mnt/etc/init.d/${script} ]; then
+ # we old rc scripts
+ if [ -e /mnt/etc/init.d/${script} -a -n "$1" -a -n "$2" ] ; then
+ if [ $2 -lt 10 ] ; then
+ local start="0$2"; else local start="$2"
+ fi
+ if [ $3 -lt 10 ] ; then
+ local stop="0$3"; else local stop="$3"
+ fi
+ for i in rc2.d/K$stop$script rc3.d/K$stop$script \
+ rc2.d/S$start$script rc3.d/S$start$script ; do
+ ln -sf ../init.d/$script /mnt/etc/$i
+ [ "$DEBUGLEVEL" == 5 ] && echo "Linked $script"
+ done
+ fi
+else
+ error "Script: ${script} does not exist. Skipping setup of startscipts/events.." nonfatal
+fi
+
+}
+
+# set up localization like keytable, console
+dlocale () {
+# fixme -- use keytable setup script here
+# echo -e "\t# entries added by $0: $date" >> /mnt/etc/init.d/boot.slx
+sed -e "1i# File modified during SLX stage3 bootup (config_distro)" \
+ -e "s/LANG.*/LANG=\"${LANG}\"/" -i /mnt/etc/default/locale
+}
+
+# function for ntp configuration
+config_ntp () {
+if [ -f /mnt/etc/init.d/ntp -a "x$start_ntp" != "xno" ] ; then
+ echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \
+ >>/mnt/etc/passwd
+ testmkd /mnt/var/lib/ntp/var/run/ntp
+
+fi
+}
+# function for atd
+config_atd () {
+if [ "x$start_atd" = "xyes" ]; then
+ # testmkd /mnt/var/spool/atjobs
+ # testmkd /mnt/var/spool/atspool
+ # chown 1:1 /mnt/var/spool/atjobs /mnt/var/spool/atspool
+ if [ -f /mnt/etc/init.inactive/atd ] ; then
+ mv /mnt/etc/init.inactive/atd /mnt/etc/init
+ else
+ error "$df_erratd" nonfatal
+ fi
+fi
+}
+# function for configuration of cron services (fixme: to be moved to a plugin?)
+config_cron () {
+if [ "x$start_cron" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.inactive/anacron ] ; then
+ mv /mnt/etc/init.inactive/anacron /mnt/etc/init
+ # fixme! check for proper permissions!
+ testmkd /mnt/var/spool/crontabs
+ echo -e "# /etc/crontab - file generated by $0:\n\
+#\t$date\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin\
+\nMAILTO=\n-*/15 * * * *\troot\ttest -x /usr/lib/cron/run-crons && \
+/usr/lib/cron/run-crons >/dev/null 2>&1\n" >/mnt/etc/crontab
+ else
+ error "$df_errcron" nonfatal
+ fi
+fi
+}
+# secure shell service
+config_sshd () {
+if [ "x$start_sshd" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.inactive/ssh.conf ] ; then
+ testmkd /mnt/var/run/sshd
+ mv /mnt/etc/init.inactive/ssh.conf /mnt/etc/init
+ else
+ error "$df_errsshd" nonfatal
+ fi
+fi
+}
+# snmp agent for remote monitoring (upstart functionality unchecked)
+config_snmp () {
+if [ "x$start_snmp" = "xyes" ] ; then
+ if [ -f /mnt/etc/init.inactive/snmpd.conf ] ; then
+ testmkd /mnt/var/lib/net-snmp
+ mv /mnt/etc/init.inactive/snmpd.conf /mnt/etc/init
+ else
+ # fixme!!
+ # write service monitor depending on services started
+ :
+ fi
+fi
+}
+# acpi and powersave
+config_acpi () {
+ if [ -f /mnt/etc/init.inactive/acpid.conf ] ; then
+ mv /mnt/etc/init.inactive/acpid.conf /mnt/etc/init
+ else
+ # fixme!!
+ # write service monitor depending on services started
+ :
+ fi
+}
+# configure hal, dbus, policykitd and services like that
+config_dreshal () {
+if [ "x$start_dreshal" = "xyes" ]; then
+ testmkd /mnt/var/lib/dbus
+ testmkd /mnt/var/lib/misc
+ testmkd /mnt/var/cache/hald
+ rm -rf /mnt/etc/dbus-1/system.d/*etwork*anager.conf \
+ /mnt/etc/dbus-1/system.d/nm-* \
+ /mnt/etc/dbus-1/event.d/*NetworkManager*
+ sed -i /mnt/etc/dbus-1/system.d/hal.conf \
+ -e "s/^\([^d]*\)deny\(.*Volume.*\)/\1allow\2/"
+ for dir in 10-vendor.d 20-org.d 30-site.d 50-local.d 90-mandatory.d ; do
+ testmkd /mnt/var/lib/polkit-1/localauthority/${dir}
+ done
+fi
+}
+
+# initialize boot.slx - skript to be executed during early system startup
+# (before most of the normal boot init scripts)
+# this script should operate like a normal runlevel script (fixme!!)
+d_mkrlscript () {
+local switch="$1"
+local name="$2"
+local info="$3"
+# ToDo: needs to be adapted to upstart mechanism
+case "$switch" in
+ init)
+ echo -e "#!/bin/sh\n# skeleton of /etc/init.d/$name written \
+from $0\n# after you applied changes to the creation scripts you have to \
+rerun\n# the mkdxsinitrd script to get them applied\n\n\
+. /lib/lsb/init-functions\n" >/mnt/etc/init.d/$name
+ echo -e "\n\ncase \"\$1\" in\n start)\n\tlog_begin_msg \"$info\"" \
+ >>/mnt/etc/init.d/$name
+ chmod u+x /mnt/etc/init.d/$name
+ ;;
+ entry)
+ echo -e "\t${info}" >>/mnt/etc/init.d/${name}
+ ;;
+ close)
+ echo -e "\tlog_end_msg 0\n\t;;\n stop)\n\t;;\nesac\nexit 0" \
+ >>/mnt/etc/init.d/$name
+ ;;
+esac
+}
+# configure automounter (unchecked)
+config_automount () {
+if [ -f /mnt/etc/init.inactive/autofs.conf ] ; then
+ mv /mnt/etc/init.inactive/autofs.conf /mnt/etc/init
+ testmkd /mnt/var/lock/subsys
+ sed -e "1i# /etc/default/autofs - file modified by\n#\t$0:\n#" \
+ -e "s,TIMEOUT.*,TIMEOUT=60," -i /mnt/etc/default/autofs
+ config_portmap
+ config_nfs
+fi
+}
+# start portmapper (needed at least for nfsN and nis services)
+config_portmap () {
+if [ -f /mnt/etc/init.inactive/portmap.conf ]; then
+ mv /mnt/etc/init.inactive/portmap.conf /mnt/etc/init
+ mv /mnt/etc/init.inactive/statd.conf /mnt/etc/init
+else
+ error "$df_errpmap" nonfatal
+fi
+}
+# mostly unused yet (needs to be properly integrated)
+config_nfs () {
+ [ -e /mnt/etc/init.inactive/gssd.conf ] && \
+ mv /mnt/etc/init.inactive/gssd.conf /mnt/etc/init
+ [ -e /mnt/etc/init.inactive/rpc_pipefs.conf ] && \
+ mv /mnt/etc/init.inactive/rpc_pipefs.conf /mnt/etc/init
+ [ -e /mnt/etc/init.inactive/idmapd.conf ] && \
+ mv /mnt/etc/init.inactive/idmapd.conf /mnt/etc/init
+}
+
+# start NIS (unchecked!! fixme - does the service is really named ypbind??)
+config_nis () {
+ if [ -f /mnt/etc/init.inactive/ypbind.conf ] ; then
+ mv /mnt/etc/init.inactive/ypbind.conf /mnt/etc/init
+ config_portmap
+ testmkd /mnt/var/yp/nicknames
+ else
+ error "$df_erryp" nonfatal
+ fi
+}
+# name service caching daemon (really existing!?)
+config_nscd () {
+ #if [ -f /mnt/etc/init.inactive/nscd.conf ] ; then
+ # testmkd /mnt/var/cache/nscd
+ #fi
+ :
+}