summaryrefslogtreecommitdiffstats
path: root/remote
diff options
context:
space:
mode:
authorDirk2014-02-21 11:16:02 +0100
committerDirk2014-02-21 11:16:02 +0100
commit1e30627c5b00884054fae7210d036e34ebe4f181 (patch)
tree6d258c5a7a2279881706f38e37921dc4557a0b8d /remote
parentSetzen des Windows-Namens beim Booten aus Laufwerk B: (diff)
parent[nvidia_libs] Debug: Checkin für Joey:). (diff)
downloadtm-scripts-1e30627c5b00884054fae7210d036e34ebe4f181.tar.gz
tm-scripts-1e30627c5b00884054fae7210d036e34ebe4f181.tar.xz
tm-scripts-1e30627c5b00884054fae7210d036e34ebe4f181.zip
Merge branch 'master' of git.openslx.org:openslx-ng/tm-scripts
...
Diffstat (limited to 'remote')
-rw-r--r--remote/includes/distribution.inc1
-rw-r--r--remote/includes/kernel.inc22
-rw-r--r--remote/includes/versioncompare.inc63
-rw-r--r--remote/modules/beamergui/data/opt/openslx/vmchooser/sessionstart.d/99-kill_beamergui2
-rw-r--r--remote/modules/busybox/busybox.build4
-rw-r--r--remote/modules/busybox/busybox.conf2
-rw-r--r--remote/modules/busybox/fbsplash-center.patch83
-rw-r--r--remote/modules/busybox/openslx-busybox-config83
-rw-r--r--remote/modules/cups/cups.conf1
-rw-r--r--remote/modules/cups/cups.conf.opensuse2
-rw-r--r--remote/modules/cups/cups.conf.ubuntu2
-rw-r--r--remote/modules/cups/cups.conf.ubuntu.132
-rw-r--r--remote/modules/cups/cups.conf.ubuntu.13.102
l---------remote/modules/dhcpc-busybox/data/etc/systemd/system/dhcpc@.service1
l---------remote/modules/dhcpc-busybox/data/etc/systemd/system/sysinit.target.wants/udhcpc@br0.service1
-rw-r--r--remote/modules/dhcpc-busybox/data/etc/systemd/system/udhcpc@.service7
-rw-r--r--remote/modules/dhcpc-busybox/data/etc/tmpfiles.d/udhcpc.conf1
-rwxr-xr-xremote/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-udhcpc++2
-rwxr-xr-xremote/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx36
-rwxr-xr-xremote/modules/iptables-helper/data/opt/openslx/iptables/iptables-reloader-worker30
-rw-r--r--remote/modules/kdm/data/etc/systemd/system/kdm.service3
-rw-r--r--remote/modules/kdm/data/etc/tmpfiles.d/kdm.conf2
-rw-r--r--remote/modules/kernel/kernel.build83
-rw-r--r--remote/modules/kernel/kernel.conf.opensuse2
-rw-r--r--remote/modules/kernel/kernel.conf.ubuntu2
-rw-r--r--remote/modules/kernel/kernel.conf.ubuntu.13.042
-rw-r--r--remote/modules/nscd/data/etc/tmpfiles.d/nscd.conf2
-rw-r--r--remote/modules/nvidia_kernel/nvidia_kernel.build128
-rw-r--r--remote/modules/nvidia_kernel/nvidia_kernel.conf7
-rw-r--r--remote/modules/nvidia_libs/nvidia_libs.build121
-rw-r--r--remote/modules/nvidia_libs/nvidia_libs.conf29
-rw-r--r--remote/modules/nvidia_libs/nvidia_libs.conf.ubuntu10
-rw-r--r--remote/modules/pam/data/etc/tmpfiles.d/pipefs.conf2
-rwxr-xr-xremote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close2
-rw-r--r--remote/modules/pam/pam.build20
-rw-r--r--remote/modules/pam/pam.conf.opensuse.13.147
-rw-r--r--remote/modules/plymouth/data/etc/tmpfiles.d/plymouth.conf2
l---------remote/modules/printergui/data/etc/systemd/system/network.target.wants/printergui.service1
-rw-r--r--remote/modules/printergui/data/etc/systemd/system/printergui.service8
-rwxr-xr-xremote/modules/printergui/data/opt/openslx/scripts/systemd-printergui_preparation20
-rw-r--r--remote/modules/printergui/printergui.build17
-rw-r--r--remote/modules/printergui/printergui.conf2
-rwxr-xr-xremote/modules/redsocks/data/opt/openslx/scripts/systemd-setup_proxy9
-rw-r--r--remote/modules/smbclient/data/etc/tmpfiles.d/ensure-smbconf-exists.conf4
-rw-r--r--remote/modules/smbclient/smbclient.build20
-rw-r--r--remote/modules/smbclient/smbclient.conf10
-rw-r--r--remote/modules/smbclient/smbclient.conf.opensuse9
-rw-r--r--remote/modules/smbclient/smbclient.conf.ubuntu9
-rw-r--r--remote/modules/splash-openslx/README6
-rw-r--r--remote/modules/splash-openslx/data/etc/splash.ppmbin0 -> 520854 bytes
-rw-r--r--remote/modules/splash-openslx/splash-openslx.build13
-rw-r--r--remote/modules/splash-openslx/splash-openslx.conf1
-rw-r--r--remote/modules/sshd/data/etc/tmpfiles.d/sshd.conf2
-rw-r--r--remote/modules/swiss/data/etc/X11/xorg.conf.d/90-keytable.conf5
-rw-r--r--remote/modules/swiss/data/etc/default/locale1
-rw-r--r--remote/modules/swiss/data/etc/systemd/system/basic.target.wants/load-swiss-keymap.service10
-rw-r--r--remote/modules/swiss/data/etc/systemd/system/load-swiss-keymap.service10
-rw-r--r--remote/modules/swiss/data/opt/openslx/keymaps/compose.inc8
-rw-r--r--remote/modules/swiss/data/opt/openslx/keymaps/german_qwertz_compose_keyboard_translation.map967
-rw-r--r--remote/modules/swiss/data/opt/openslx/keymaps/german_qwertz_keyboard_translation.map809
-rw-r--r--remote/modules/swiss/data/opt/openslx/keymaps/linux-keys-bare.inc163
-rw-r--r--remote/modules/swiss/data/opt/openslx/keymaps/linux-with-alt-and-altgr.inc29
-rw-r--r--remote/modules/swiss/data/opt/openslx/keymaps/qwertz-layout.inc31
-rw-r--r--remote/modules/swiss/data/opt/openslx/keymaps/qwertz_de_CH-latin1.map16
-rw-r--r--remote/modules/swiss/data/opt/openslx/keymaps/qwertz_fr_CH-latin1.map86
-rwxr-xr-xremote/modules/swiss/data/opt/openslx/scripts/systemd-load_swiss_keymaps13
-rw-r--r--remote/modules/swiss/swiss.build55
-rw-r--r--remote/modules/swiss/swiss.conf5
-rw-r--r--remote/modules/swiss/swiss.conf.debian10
-rw-r--r--remote/modules/swiss/swiss.conf.opensuse14
-rw-r--r--remote/modules/swiss/swiss.conf.scientific8
-rw-r--r--remote/modules/swiss/swiss.conf.ubuntu17
-rw-r--r--remote/modules/systemd/data/etc/systemd/system/network-interface@.service4
l---------remote/modules/systemd/data/usr/lib/systemd/system/autovt@.service1
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/basic.target14
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/bluetooth.target11
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/console-getty.service32
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/console-shell.service32
l---------remote/modules/systemd/data/usr/lib/systemd/system/ctrl-alt-del.target1
l---------remote/modules/systemd/data/usr/lib/systemd/system/dbus-org.freedesktop.login1.service1
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/debug-shell.service33
l---------remote/modules/systemd/data/usr/lib/systemd/system/default.target1
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/dev-hugepages.mount19
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/dev-mqueue.mount19
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/emergency.service31
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/emergency.target13
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/final.target13
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/getty.target11
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/getty@.service49
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/graphical.target18
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/halt-local.service20
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/halt.target17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/hibernate.target13
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/hybrid-sleep.target13
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/kexec.target17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target17
l---------remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/getty.target1
l---------remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/systemd-logind.service1
l---------remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/systemd-user-sessions.service1
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/network-online.target11
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/network.target (renamed from remote/modules/systemd/data/etc/systemd/system/network.target)3
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/paths.target10
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/poweroff.target17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/printer.target11
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/proc-sys-fs-binfmt_misc.automount18
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/proc-sys-fs-binfmt_misc.mount17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/rc-local.service20
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/reboot.target17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/remote-fs.target3
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/serial-getty@.service36
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/shutdown.target12
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/sigpwr.target10
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/sleep.target13
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/smartcard.target11
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/sockets.target10
l---------remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-journald.socket1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-shutdownd.socket1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-udevd-control.socket1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-udevd-kernel.socket1
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/sound.target11
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/suspend.target13
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/swap.target10
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/sys-fs-fuse-connections.mount20
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/sys-kernel-config.mount20
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target14
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/dev-hugepages.mount1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/dev-mqueue.mount1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/proc-sys-fs-binfmt_misc.automount1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/sys-fs-fuse-connections.mount1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/sys-kernel-config.mount1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-binfmt.service1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-journald.service1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-modules-load.service1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-sysctl.service1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup-dev.service1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup.service1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-udev-trigger.service1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-udevd.service1
l---------remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-vconsole-setup.service1
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/syslog.socket40
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/system-update.target16
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-binfmt.service26
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-halt.service17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-hibernate.service17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-hybrid-sleep.service17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-journald.service26
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-journald.socket26
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-logind.service23
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-modules-load.service27
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-nspawn@.service18
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-poweroff.service17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-reboot.service17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-shutdownd.service15
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-shutdownd.socket18
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-suspend.service17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-sysctl.service26
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-tmpfiles-setup-dev.service17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-tmpfiles-setup.service23
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-udev-settle.service31
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-udev-trigger.service20
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd-control.socket19
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd-kernel.socket19
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd.service23
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-user-sessions.service17
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/systemd-vconsole-setup.service20
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/time-sync.target14
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/timers.target10
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/user@.service23
-rw-r--r--remote/modules/systemd/data/usr/lib/udev/rules.d/99-systemd.rules7
-rw-r--r--remote/modules/systemd/systemd.build24
-rw-r--r--remote/modules/systemd/systemd.conf128
-rwxr-xr-xremote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt21
-rw-r--r--remote/modules/vmware/data/etc/vmware-vix/bootstrap2
-rw-r--r--remote/modules/vmware/data/etc/vmware/bootstrap12
-rw-r--r--remote/modules/vmware/data/etc/vmware/config9
l---------remote/modules/vmware/data/etc/vmware/icu1
-rw-r--r--remote/modules/vmware/data/etc/vmware/locations3
-rw-r--r--remote/modules/vmware/data/etc/vmware/usbarb.rules4
-rw-r--r--remote/modules/vmware/patches/vmblock__3.0-3.9__1.0-100.0.patch11
-rw-r--r--remote/modules/vmware/patches/vmblock__3.10__1.0-100.0.patch34
-rw-r--r--remote/modules/vmware/patches/vmblock__3.11-9.9__1.0-100.0.patch123
-rw-r--r--remote/modules/vmware/templates/vmware/config24
-rw-r--r--remote/modules/vmware/vmware.build97
-rwxr-xr-xremote/modules/xorg/data/etc/X11/Xsession62
-rw-r--r--remote/modules/xorg/xorg.conf.opensuse.13.195
-rw-r--r--remote/rootfs/rootfs-stage31/data/etc/modprobe.d/vmwgfx-fbdev.conf5
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/inc/activate_sysconfig (renamed from remote/rootfs/rootfs-stage31/data/bin/activate_sysconfig)21
-rw-r--r--remote/rootfs/rootfs-stage31/data/inc/drm.functions71
-rw-r--r--remote/rootfs/rootfs-stage31/data/inc/functions (renamed from remote/rootfs/rootfs-stage31/data/etc/functions.inc)12
-rw-r--r--remote/rootfs/rootfs-stage31/data/inc/network.functions23
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/inc/setup_network (renamed from remote/rootfs/rootfs-stage31/data/bin/setup_network)48
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/inc/setup_network_retry33
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/inc/setup_stage32 (renamed from remote/rootfs/rootfs-stage31/data/bin/setup_stage32)23
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/inc/udhcpc-trigger92
-rwxr-xr-xremote/rootfs/rootfs-stage31/data/init88
-rw-r--r--remote/rootfs/rootfs-stage31/rootfs-stage31.build70
-rw-r--r--remote/rootfs/rootfs-stage31/rootfs-stage31.conf50
-rw-r--r--remote/rootfs/rootfs-stage31/templates/drm.cfg6
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/modprobe.d/50-mltk-blacklist.conf8
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/early-network-triggers.service13
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-stage4.service3
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-dns.target2
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-gateway.target3
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service1
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service5
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/stage4.target4
l---------remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/early-network-triggers.service1
l---------remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/zram-swap.service1
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/systemd/system/zram-swap.service10
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/network.conf1
-rw-r--r--remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/run-lock.conf2
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-early_network_triggers29
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-mount_stage43
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions28
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons4
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-zram_swap60
-rw-r--r--remote/rootfs/rootfs-stage32/rootfs-stage32.build3
-rwxr-xr-xremote/setup_target10
l---------remote/targets/stage31/plymouth1
l---------remote/targets/stage31/splash-openslx1
l---------remote/targets/stage32-bwlp/plymouth1
l---------remote/targets/stage32-bwlp/smbclient1
l---------remote/targets/stage32-lightdm/plymouth1
l---------remote/targets/stage32-opensuse/iptables-helper1
l---------remote/targets/stage32-opensuse/plymouth1
l---------remote/targets/stage32-scientific/plymouth1
l---------remote/targets/stage32/plymouth1
227 files changed, 5470 insertions, 455 deletions
diff --git a/remote/includes/distribution.inc b/remote/includes/distribution.inc
index 64190986..7a7be738 100644
--- a/remote/includes/distribution.inc
+++ b/remote/includes/distribution.inc
@@ -28,6 +28,7 @@ detect_distribution () {
esac
# Get version - we mangle this quite a bit. first make sure it has no spaces, then split version at period (.), underscore (_) and dash (-)
SYS_VERSION=$(lsb_release -rs | tolower)
+ SYS_CODENAME=$(lsb_release -c|cut -f 2) # Codename: eg. Ubuntu raring, openSuse: Dartmouth etc.
local VERSION=$(echo $SYS_VERSION | sed -r 's/\s//g;s/[\._]/ /g;s/-//g')
local STRTMP=""
PRINT_SYS_VERSIONS="*.conf.$SYS_DISTRIBUTION"
diff --git a/remote/includes/kernel.inc b/remote/includes/kernel.inc
index ae5791df..4eef36e5 100644
--- a/remote/includes/kernel.inc
+++ b/remote/includes/kernel.inc
@@ -13,13 +13,23 @@
# must be given as kernel/fs/nfs/nfs.ko
#
-# determine kernel version
-KERNEL_CURRENT_VERSION=$(uname -r)
-[ -z "$KERNEL_CURRENT_VERSION" ] && pwarning "Could not determine kernel version."
-
# set global KERNEL_TARGET_NAME
KERNEL_TARGET_NAME="kernel"
+get_kernel_version () {
+ # determine kernel version currently running on this machine
+ KERNEL_CURRENT_VERSION=$(uname -r)
+ [ -z "$KERNEL_CURRENT_VERSION" ] && pwarning "Could not determine kernel version."
+ # determine kernel version that will be running in the generated system
+ if [ -e "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" ]; then
+ SYS_UTS_RELEASE=$(grep 'UTS_RELEASE' "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" | awk -F '"' '{print $2}')
+ SYS_KERNEL=$(echo "$SYS_UTS_RELEASE" | grep -o -E '^[0-9\.]+')
+ else
+ SYS_UTS_RELEASE="(unknown-not-compiled-yet)"
+ SYS_KERNEL="$SYS_UTS_RELEASE"
+ fi
+}
+
check_kernel_build_dir() {
[ -d "${MODULES_DIR}/kernel/build" ] && KERNEL_BUILD_DIR="${MODULES_DIR}/kernel/build" \
|| perror "No build directory set for the kernel. Was is built?"
@@ -89,8 +99,8 @@ copy_kernel_modules() {
# generate modules map files
#
# first strip modules.order of all the modules we don't use
- cat "${KERNEL_MODULES_DIR}/modules.order" | grep -E $(echo ${REQUIRED_KERNEL_MODULES} | tr '\ ' '|') \
- >> "${TARGET_BUILD_DIR}/${KERNEL_MODULES_DIR}/modules.order"
+ cat "${KERNEL_MODULES_DIR}/modules.order" | grep -E "$(echo ${REQUIRED_KERNEL_MODULES} | tr '\ ' '|' | tr '_' '.' | tr '-' '.')" \
+ >> "${TARGET_BUILD_DIR}/${KERNEL_MODULES_DIR}/modules.order"
# copy list of builtin kernel modules
cp "${KERNEL_MODULES_DIR}/modules.builtin" "${TARGET_BUILD_DIR}/${KERNEL_MODULES_DIR}"
# with modules.order and modules.builtin, we can run depmod for the rest of the files
diff --git a/remote/includes/versioncompare.inc b/remote/includes/versioncompare.inc
new file mode 100644
index 00000000..75f59456
--- /dev/null
+++ b/remote/includes/versioncompare.inc
@@ -0,0 +1,63 @@
+
+# From http://stackoverflow.com/a/4025065/2043481
+# Returns 0 when equal, 1 when $1 > $2, 2 otherwise
+version_compare () {
+ if [[ "$1" == "$2" ]]; then
+ return 0
+ fi
+ local IFS=".-_"
+ local i ver1=($1) ver2=($2)
+ # fill empty fields in ver1 with zeros
+ for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do
+ ver1[i]=0
+ done
+ for ((i=0; i<${#ver1[@]}; i++)); do
+ if [[ -z "${ver2[i]}" ]]; then
+ # fill empty fields in ver2 with zeros
+ ver2[i]=0
+ fi
+ if ((10#${ver1[i]} > 10#${ver2[i]})); then
+ return 1
+ fi
+ if ((10#${ver1[i]} < 10#${ver2[i]})); then
+ return 2
+ fi
+ done
+ return 0
+}
+
+version_ge () {
+ version_compare "$1" "$2"
+ local RET=$?
+ [ "$RET" == "2" ] && return 1
+ return 0
+}
+
+version_le () {
+ version_compare "$1" "$2"
+ local RET=$?
+ [ "$RET" == "1" ] && return 1
+ return 0
+}
+
+version_gt () {
+ version_compare "$1" "$2"
+ local RET=$?
+ [ "$RET" == "1" ] && return 0
+ return 1
+}
+
+version_lt () {
+ version_compare "$1" "$2"
+ local RET=$?
+ [ "$RET" == "2" ] && return 0
+ return 1
+}
+
+version_eq () {
+ version_compare "$1" "$2"
+ return $?
+}
+
+version_eq "1.0" "1" && ! version_eq "1.0" "1.1" && version_ge "1.1" "1.0"
+
diff --git a/remote/modules/beamergui/data/opt/openslx/vmchooser/sessionstart.d/99-kill_beamergui b/remote/modules/beamergui/data/opt/openslx/vmchooser/sessionstart.d/99-kill_beamergui
index 012246ba..13d9c4ed 100644
--- a/remote/modules/beamergui/data/opt/openslx/vmchooser/sessionstart.d/99-kill_beamergui
+++ b/remote/modules/beamergui/data/opt/openslx/vmchooser/sessionstart.d/99-kill_beamergui
@@ -1,3 +1,3 @@
#!/bin/ash
killall beamergui
-
+true
diff --git a/remote/modules/busybox/busybox.build b/remote/modules/busybox/busybox.build
index adb3db86..727a334c 100644
--- a/remote/modules/busybox/busybox.build
+++ b/remote/modules/busybox/busybox.build
@@ -3,6 +3,10 @@ fetch_source() {
git clone "${REQUIRED_GIT}" src || perror "Could not clone busybox git"
cd src || perror "Could not cd to src"
git checkout "$REQUIRED_BRANCH" || perror "Could not checkout requested branch"
+ # Patch image centering if not patched yet
+ if ! grep -q "bcenter_image" "miscutils/fbsplash.c"; then
+ git apply "../fbsplash-center.patch" || perror "Could not apply busybox patch for fbsplash image centering"
+ fi
cd .. || perror "cd .. failed"
}
diff --git a/remote/modules/busybox/busybox.conf b/remote/modules/busybox/busybox.conf
index 9f4a5229..d2536ac9 100644
--- a/remote/modules/busybox/busybox.conf
+++ b/remote/modules/busybox/busybox.conf
@@ -1,5 +1,5 @@
REQUIRED_GIT="git://git.busybox.net/busybox"
-REQUIRED_BRANCH="1_21_0"
+REQUIRED_BRANCH="1_22_1"
REQUIRED_BINARIES="busybox"
REQUIRED_DIRECTORIES="
/bin
diff --git a/remote/modules/busybox/fbsplash-center.patch b/remote/modules/busybox/fbsplash-center.patch
new file mode 100644
index 00000000..7e54a183
--- /dev/null
+++ b/remote/modules/busybox/fbsplash-center.patch
@@ -0,0 +1,83 @@
+diff --git a/miscutils/fbsplash.c b/miscutils/fbsplash.c
+index 12a77b7..cae392c 100644
+--- a/miscutils/fbsplash.c
++++ b/miscutils/fbsplash.c
+@@ -9,6 +9,7 @@
+ * - put somewhere fbsplash.cfg file and an image in .ppm format.
+ * - run applet: $ setsid fbsplash [params] &
+ * -c: hide cursor
++ * -x: center image (if smaller than screen)
+ * -d /dev/fbN: framebuffer device (if not /dev/fb0)
+ * -s path_to_image_file (can be "-" for stdin)
+ * -i path_to_cfg_file
+@@ -22,10 +23,11 @@
+ */
+
+ //usage:#define fbsplash_trivial_usage
+-//usage: "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]"
++//usage: "-s IMGFILE [-c] [-x] [-d DEV] [-i INIFILE] [-f CMD]"
+ //usage:#define fbsplash_full_usage "\n\n"
+ //usage: " -s Image"
+ //usage: "\n -c Hide cursor"
++//usage: "\n -x Center image (if smaller than screen)"
+ //usage: "\n -d Framebuffer device (default /dev/fb0)"
+ //usage: "\n -i Config file (var=value):"
+ //usage: "\n BAR_LEFT,BAR_TOP,BAR_WIDTH,BAR_HEIGHT"
+@@ -54,6 +56,7 @@ struct globals {
+ unsigned red_shift;
+ unsigned green_shift;
+ unsigned blue_shift;
++ bool bcenter_image;
+ };
+ #define G (*ptr_to_globals)
+ #define INIT_G() do { \
+@@ -349,6 +352,8 @@ static void fb_drawimage(void)
+ char *read_ptr;
+ unsigned char *pixline;
+ unsigned i, j, width, height, line_size;
++ int xoffset = 0;
++ int yoffset = 0;
+
+ if (LONE_DASH(G.image_filename)) {
+ theme_file = stdin;
+@@ -396,6 +401,11 @@ static void fb_drawimage(void)
+ line_size = width*3;
+ pixline = xmalloc(line_size);
+
++ if (G.bcenter_image) {
++ xoffset = ((G.scr_var.xres - width) * G.bytes_per_pixel) / 2;
++ yoffset = (G.scr_var.yres - height) / 2;
++ }
++
+ if (width > G.scr_var.xres)
+ width = G.scr_var.xres;
+ if (height > G.scr_var.yres)
+@@ -407,7 +417,7 @@ static void fb_drawimage(void)
+ if (fread(pixline, 1, line_size, theme_file) != line_size)
+ bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
+ pixel = pixline;
+- src = G.addr + j * G.scr_fix.line_length;
++ src = G.addr + (j + yoffset) * G.scr_fix.line_length + xoffset;
+ for (i = 0; i < width; i++) {
+ unsigned thispix = fb_pixel_value(pixel[0], pixel[1], pixel[2]);
+ fb_write_pixel(src, thispix);
+@@ -463,6 +473,7 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
+ FILE *fp = fp; // for compiler
+ char *num_buf;
+ unsigned num;
++ unsigned optret;
+ bool bCursorOff;
+
+ INIT_G();
+@@ -471,8 +482,10 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
+ fb_device = "/dev/fb0";
+ cfg_filename = NULL;
+ fifo_filename = NULL;
+- bCursorOff = 1 & getopt32(argv, "cs:d:i:f:",
++ optret = getopt32(argv, "cxs:d:i:f:",
+ &G.image_filename, &fb_device, &cfg_filename, &fifo_filename);
++ bCursorOff = 1 & optret;
++ G.bcenter_image = 2 & optret;
+
+ // parse configuration file
+ if (cfg_filename)
diff --git a/remote/modules/busybox/openslx-busybox-config b/remote/modules/busybox/openslx-busybox-config
index 1dcae3db..2e2bc686 100644
--- a/remote/modules/busybox/openslx-busybox-config
+++ b/remote/modules/busybox/openslx-busybox-config
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Busybox version: 1.21.1
-# Wed Aug 14 17:04:02 2013
+# Busybox version: 1.22.1
+# Sat Feb 15 19:51:48 2014
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -135,7 +135,14 @@ CONFIG_FEATURE_SEAMLESS_Z=y
CONFIG_AR=y
# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
CONFIG_FEATURE_AR_CREATE=y
+# CONFIG_UNCOMPRESS is not set
+CONFIG_GUNZIP=y
CONFIG_BUNZIP2=y
+CONFIG_UNLZMA=y
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_LZMA=y
+CONFIG_UNXZ=y
+CONFIG_XZ=y
CONFIG_BZIP2=y
CONFIG_CPIO=y
# CONFIG_FEATURE_CPIO_O is not set
@@ -143,14 +150,13 @@ CONFIG_CPIO=y
# CONFIG_DPKG is not set
# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
-CONFIG_GUNZIP=y
CONFIG_GZIP=y
# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
CONFIG_GZIP_FAST=0
# CONFIG_LZOP is not set
# CONFIG_LZOP_COMPR_HIGH is not set
-CONFIG_RPM2CPIO=y
# CONFIG_RPM is not set
+CONFIG_RPM2CPIO=y
CONFIG_TAR=y
CONFIG_FEATURE_TAR_CREATE=y
CONFIG_FEATURE_TAR_AUTODETECT=y
@@ -163,12 +169,6 @@ CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
# CONFIG_FEATURE_TAR_UNAME_GNAME is not set
CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
# CONFIG_FEATURE_TAR_SELINUX is not set
-# CONFIG_UNCOMPRESS is not set
-CONFIG_UNLZMA=y
-# CONFIG_FEATURE_LZMA_FAST is not set
-CONFIG_LZMA=y
-CONFIG_UNXZ=y
-CONFIG_XZ=y
# CONFIG_UNZIP is not set
#
@@ -186,6 +186,7 @@ CONFIG_GROUPS=y
CONFIG_TEST=y
# CONFIG_FEATURE_TEST_64 is not set
CONFIG_TOUCH=y
+CONFIG_FEATURE_TOUCH_NODEREF=y
CONFIG_FEATURE_TOUCH_SUSV3=y
CONFIG_TR=y
# CONFIG_FEATURE_TR_CLASSES is not set
@@ -363,7 +364,16 @@ CONFIG_WHICH=y
#
# Editors
#
+CONFIG_AWK=y
+# CONFIG_FEATURE_AWK_LIBM is not set
+CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y
+# CONFIG_CMP is not set
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_ED is not set
# CONFIG_PATCH is not set
+CONFIG_SED=y
CONFIG_VI=y
CONFIG_FEATURE_VI_MAX_LEN=1024
CONFIG_FEATURE_VI_8BIT=y
@@ -378,14 +388,6 @@ CONFIG_FEATURE_VI_READONLY=y
CONFIG_FEATURE_VI_SET=y
CONFIG_FEATURE_VI_WIN_RESIZE=y
CONFIG_FEATURE_VI_ASK_TERMINAL=y
-CONFIG_AWK=y
-# CONFIG_FEATURE_AWK_LIBM is not set
-# CONFIG_CMP is not set
-CONFIG_DIFF=y
-CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
-CONFIG_FEATURE_DIFF_DIR=y
-# CONFIG_ED is not set
-CONFIG_SED=y
# CONFIG_FEATURE_ALLOW_EXEC is not set
#
@@ -461,9 +463,6 @@ CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
# CONFIG_FEATURE_CHECK_NAMES is not set
CONFIG_FIRST_SYSTEM_ID=100
CONFIG_LAST_SYSTEM_ID=999
-# group options for vbox module - next three lines original
-# these modifications will be reverted when vbox udev rules are set
-# therefore do not depend on addgroup!
CONFIG_ADDGROUP=y
CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS=y
CONFIG_FEATURE_ADDUSER_TO_GROUP=y
@@ -531,6 +530,7 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
# Linux System Utilities
#
CONFIG_BLOCKDEV=y
+# CONFIG_FSTRIM is not set
CONFIG_MDEV=y
CONFIG_FEATURE_MDEV_CONF=y
CONFIG_FEATURE_MDEV_RENAME=y
@@ -556,7 +556,7 @@ CONFIG_FEATURE_FDISK_WRITABLE=y
# CONFIG_FEATURE_SGI_LABEL is not set
# CONFIG_FEATURE_SUN_LABEL is not set
# CONFIG_FEATURE_OSF_LABEL is not set
-CONFIG_FEATURE_GPT_LABEL=y
+CONFIG_FEATURE_GPT_LABEL=y
# CONFIG_FEATURE_FDISK_ADVANCED is not set
# CONFIG_FINDFS is not set
CONFIG_FLOCK=y
@@ -617,43 +617,45 @@ CONFIG_VOLUMEID=y
#
# Filesystem/Volume identification
#
-CONFIG_FEATURE_VOLUMEID_EXT=y
CONFIG_FEATURE_VOLUMEID_BTRFS=y
-CONFIG_FEATURE_VOLUMEID_REISERFS=y
-CONFIG_FEATURE_VOLUMEID_FAT=y
+CONFIG_FEATURE_VOLUMEID_CRAMFS=y
CONFIG_FEATURE_VOLUMEID_EXFAT=y
+CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_F2FS=y
+CONFIG_FEATURE_VOLUMEID_FAT=y
CONFIG_FEATURE_VOLUMEID_HFS=y
+CONFIG_FEATURE_VOLUMEID_ISO9660=y
CONFIG_FEATURE_VOLUMEID_JFS=y
-CONFIG_FEATURE_VOLUMEID_XFS=y
+CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
+CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
+CONFIG_FEATURE_VOLUMEID_LUKS=y
CONFIG_FEATURE_VOLUMEID_NILFS=y
CONFIG_FEATURE_VOLUMEID_NTFS=y
-CONFIG_FEATURE_VOLUMEID_ISO9660=y
-CONFIG_FEATURE_VOLUMEID_UDF=y
-CONFIG_FEATURE_VOLUMEID_LUKS=y
-CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
-CONFIG_FEATURE_VOLUMEID_CRAMFS=y
+CONFIG_FEATURE_VOLUMEID_OCFS2=y
+CONFIG_FEATURE_VOLUMEID_REISERFS=y
CONFIG_FEATURE_VOLUMEID_ROMFS=y
# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set
CONFIG_FEATURE_VOLUMEID_SYSV=y
-CONFIG_FEATURE_VOLUMEID_OCFS2=y
-CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
+CONFIG_FEATURE_VOLUMEID_UDF=y
+CONFIG_FEATURE_VOLUMEID_XFS=y
#
# Miscellaneous Utilities
#
# CONFIG_CONSPY is not set
# CONFIG_LESS is not set
-CONFIG_FEATURE_LESS_MAXLINES=9999999
-CONFIG_FEATURE_LESS_BRACKETS=y
-CONFIG_FEATURE_LESS_FLAGS=y
+CONFIG_FEATURE_LESS_MAXLINES=0
+# CONFIG_FEATURE_LESS_BRACKETS is not set
+# CONFIG_FEATURE_LESS_FLAGS is not set
# CONFIG_FEATURE_LESS_MARKS is not set
# CONFIG_FEATURE_LESS_REGEXP is not set
-CONFIG_FEATURE_LESS_WINCH=y
-CONFIG_FEATURE_LESS_ASK_TERMINAL=y
+# CONFIG_FEATURE_LESS_WINCH is not set
+# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set
# CONFIG_FEATURE_LESS_DASHCMD is not set
# CONFIG_FEATURE_LESS_LINENUMS is not set
# CONFIG_NANDWRITE is not set
# CONFIG_NANDDUMP is not set
+# CONFIG_RFKILL is not set
CONFIG_SETSERIAL=y
# CONFIG_UBIATTACH is not set
# CONFIG_UBIDETACH is not set
@@ -661,6 +663,7 @@ CONFIG_UBIMKVOL=y
CONFIG_UBIRMVOL=y
CONFIG_UBIRSVOL=y
CONFIG_UBIUPDATEVOL=y
+# CONFIG_WALL is not set
# CONFIG_ADJTIMEX is not set
# CONFIG_BBCONFIG is not set
# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
@@ -717,7 +720,6 @@ CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y
# CONFIG_MT is not set
# CONFIG_RAIDAUTORUN is not set
CONFIG_READAHEAD=y
-# CONFIG_RFKILL is not set
# CONFIG_RUNLEVEL is not set
# CONFIG_RX is not set
CONFIG_SETSID=y
@@ -728,7 +730,6 @@ CONFIG_TIME=y
CONFIG_TIMEOUT=y
CONFIG_TTYSIZE=y
# CONFIG_VOLNAME is not set
-# CONFIG_WALL is not set
CONFIG_WATCHDOG=y
#
@@ -862,7 +863,7 @@ CONFIG_UDHCPC=y
CONFIG_FEATURE_UDHCPC_ARPING=y
# CONFIG_FEATURE_UDHCP_PORT is not set
CONFIG_UDHCP_DEBUG=0
-# CONFIG_FEATURE_UDHCP_RFC3397 is not set
+CONFIG_FEATURE_UDHCP_RFC3397=y
CONFIG_FEATURE_UDHCP_8021Q=y
CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
diff --git a/remote/modules/cups/cups.conf b/remote/modules/cups/cups.conf
index 8c30a08b..586e0d12 100644
--- a/remote/modules/cups/cups.conf
+++ b/remote/modules/cups/cups.conf
@@ -1,5 +1,6 @@
REQUIRED_BINARIES="
cupsd
+ foomatic-rip
"
REQUIRED_DIRECTORIES="
/usr/lib/cups/
diff --git a/remote/modules/cups/cups.conf.opensuse b/remote/modules/cups/cups.conf.opensuse
index 1ce46e5f..d13021ba 100644
--- a/remote/modules/cups/cups.conf.opensuse
+++ b/remote/modules/cups/cups.conf.opensuse
@@ -1,8 +1,10 @@
REQUIRED_INSTALLED_PACKAGES="
cups
cups-libs
+ foomatic-filters
"
REQUIRED_CONTENT_PACKAGES="
cups
cups-libs
+ foomatic-filters
"
diff --git a/remote/modules/cups/cups.conf.ubuntu b/remote/modules/cups/cups.conf.ubuntu
index da50d242..8ca1d1c6 100644
--- a/remote/modules/cups/cups.conf.ubuntu
+++ b/remote/modules/cups/cups.conf.ubuntu
@@ -1,8 +1,10 @@
REQUIRED_INSTALLED_PACKAGES="
cups
ghostscript-cups
+ foomatic-filters
"
REQUIRED_CONTENT_PACKAGES="
cups
ghostscript-cups
+ foomatic-filters
"
diff --git a/remote/modules/cups/cups.conf.ubuntu.13 b/remote/modules/cups/cups.conf.ubuntu.13
index ff5a23d7..53c8d62d 100644
--- a/remote/modules/cups/cups.conf.ubuntu.13
+++ b/remote/modules/cups/cups.conf.ubuntu.13
@@ -2,9 +2,11 @@ REQUIRED_INSTALLED_PACKAGES="
cups
cups-daemon
ghostscript-cups
+ foomatic-filters
"
REQUIRED_CONTENT_PACKAGES="
cups
cups-daemon
ghostscript-cups
+ foomatic-filters
"
diff --git a/remote/modules/cups/cups.conf.ubuntu.13.10 b/remote/modules/cups/cups.conf.ubuntu.13.10
index eaf19ce8..d3fa3b5d 100644
--- a/remote/modules/cups/cups.conf.ubuntu.13.10
+++ b/remote/modules/cups/cups.conf.ubuntu.13.10
@@ -2,9 +2,11 @@ REQUIRED_INSTALLED_PACKAGES="
cups
cups-daemon
cups-filters
+ foomatic-filters
"
REQUIRED_CONTENT_PACKAGES="
cups
cups-daemon
cups-filters
+ foomatic-filters
"
diff --git a/remote/modules/dhcpc-busybox/data/etc/systemd/system/dhcpc@.service b/remote/modules/dhcpc-busybox/data/etc/systemd/system/dhcpc@.service
new file mode 120000
index 00000000..a2e7487d
--- /dev/null
+++ b/remote/modules/dhcpc-busybox/data/etc/systemd/system/dhcpc@.service
@@ -0,0 +1 @@
+udhcpc@.service \ No newline at end of file
diff --git a/remote/modules/dhcpc-busybox/data/etc/systemd/system/sysinit.target.wants/udhcpc@br0.service b/remote/modules/dhcpc-busybox/data/etc/systemd/system/sysinit.target.wants/udhcpc@br0.service
deleted file mode 120000
index dff66b14..00000000
--- a/remote/modules/dhcpc-busybox/data/etc/systemd/system/sysinit.target.wants/udhcpc@br0.service
+++ /dev/null
@@ -1 +0,0 @@
-../udhcpc@.service \ No newline at end of file
diff --git a/remote/modules/dhcpc-busybox/data/etc/systemd/system/udhcpc@.service b/remote/modules/dhcpc-busybox/data/etc/systemd/system/udhcpc@.service
index 6547de5b..9226f00c 100644
--- a/remote/modules/dhcpc-busybox/data/etc/systemd/system/udhcpc@.service
+++ b/remote/modules/dhcpc-busybox/data/etc/systemd/system/udhcpc@.service
@@ -1,7 +1,6 @@
[Unit]
-Description=DHCP Client
-DefaultDependencies=no
-Before=sysinit.target
+Description=DHCP Client for %i
+After=systemd-tmpfiles-setup.service
[Service]
Type=forking
@@ -9,5 +8,3 @@ PIDFile=/run/udhcpc/udhcpc.%I.pid
ExecStart=/opt/openslx/scripts/systemd-udhcpc++ %I
ExecStopPost=/bin/rm /run/udhcpc/udhcpc.%I.pid
-[Install]
-WantedBy=multi-user.target
diff --git a/remote/modules/dhcpc-busybox/data/etc/tmpfiles.d/udhcpc.conf b/remote/modules/dhcpc-busybox/data/etc/tmpfiles.d/udhcpc.conf
new file mode 100644
index 00000000..2b8ede25
--- /dev/null
+++ b/remote/modules/dhcpc-busybox/data/etc/tmpfiles.d/udhcpc.conf
@@ -0,0 +1 @@
+d /run/udhcpc 0755 root root
diff --git a/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-udhcpc++ b/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-udhcpc++
index f3de82df..246b2567 100755
--- a/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-udhcpc++
+++ b/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-udhcpc++
@@ -7,5 +7,5 @@ UDHCPC_OPTS=""
[ ! -z "$NET_IP" ] && UDHCPC_OPTS=" -r $NET_IP"
echo "udhcp++: running on $NET_IF with additional params $UDHCPC_OPTS" >> "/tmp/udhcpclog"
mkdir -p /run/udhcpc || echo "Could not create '/run/udhcpc'."
-/opt/openslx/sbin/udhcpc $UDHCPC_OPTS -O domain -O nissrv -O nisdomain -O wpad -t 8 -s /opt/openslx/scripts/udhcpc-openslx -i "$NET_IF" -p "/run/udhcpc/udhcpc.$NET_IF.pid" || \
+/opt/openslx/sbin/udhcpc $UDHCPC_OPTS -O domain -O nissrv -O nisdomain -O wpad -O search -t 8 -s /opt/openslx/scripts/udhcpc-openslx -i "$NET_IF" -p "/run/udhcpc/udhcpc.$NET_IF.pid" || \
slxlog "udhcpc" "Could not run 'udhcpc${UDHCPC_OPTS}' on ${NET_IF}."
diff --git a/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx b/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx
index 93287af8..4edce5fc 100755
--- a/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx
+++ b/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx
@@ -20,12 +20,19 @@
. /opt/openslx/config
RESOLV_CONF="/etc/resolv.conf"
-THIS_RESOLV="/run/udhcpc/${interface}.resolv"
+THIS_RESOLV="/run/network/${interface}.resolv"
rebuild_resolv_conf () {
# Maybe make this smarter some time, if anyone is using client's that are on multiple networks at once etc...
# This is a little braindead but should work most of the time
- sort -u /run/udhcpc/*.resolv > "$RESOLV_CONF" 2> /dev/null
+ sort -u /run/network/*.resolv > "$RESOLV_CONF" 2> /dev/null
+
+ # add support for resolv.conf update scripts // see man(8) resolvconf
+ if [ -d /etc/resolvconf/update.d ]; then
+ for s in $(ls -1 /etc/resolvconf/update.d/*.sh); do
+ $s
+ done
+ fi
}
escape_search() {
@@ -58,7 +65,7 @@ fi
case "$1" in
bound|renew)
check_env "$1"
- mkdir -p "/run/udhcpc"
+ mkdir -p "/run/dhcpc"
# Set address on interface
ip addr add "$ip/$(ipcalc -s -p $ip $subnet|sed s/.*=//)" dev "$interface"
# Set default route, if given
@@ -69,9 +76,16 @@ case "$1" in
# Update resolver configuration file
CONF=""
if [ -n "$domain" ]; then
- printf -v CONF "domain $domain\nsearch $domain\n"
+ printf -v CONF "domain $domain\n"
+ elif [ -n "$SLX_NET_DOMAIN" ]; then
+ printf -v CONF "domain $SLX_NET_DOMAIN\n"
+ fi
+ if [ -n "$search" ]; then
+ printf -v CONF "search $search\n"
+ elif [ -n "$SLX_SEARCH_DOMAIN" ]; then
+ printf -v CONF "search $SLX_SEARCH_DOMAIN\n"
elif [ -n "$SLX_NET_DOMAIN" ]; then
- printf -v CONF "domain $SLX_NET_DOMAIN\nsearch $SLX_NET_DOMAIN\n"
+ printf -v CONF "search $SLX_NET_DOMAIN\n"
fi
for i in $dns; do
echo "$0: Adding DNS $i"
@@ -96,7 +110,7 @@ case "$1" in
sed -i "s/^\(SLX_PXE_CLIENT_IP=\).*$/\1'$ip'/" /opt/openslx/config
# Only if network is not ready yet
- if [ ! -e "/run/udhcpc/network-ready" ]; then
+ if [ ! -e "/run/network/network-ready" ]; then
# Update hostname
if [ -z "$dns_host" ]; then
# fallback to what the dhcp told us
@@ -130,7 +144,7 @@ case "$1" in
fi
# Update /etc/issue for proper spacing
/opt/openslx/scripts/openslx-create_issue
- touch "/run/udhcpc/network-ready"
+ touch "/run/network/network-ready"
# Mark network target as reached
systemctl start network.target &
fi # end "network not ready yet"
@@ -158,16 +172,16 @@ case "$1" in
sed -i -r '/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\s*$/d' /etc/hosts
# "dns ready" target
- if [ -n "$dns" ] && [ ! -e "/run/udhcpc/dns-ready" ]; then
- touch "/run/udhcpc/dns-ready"
+ if [ -n "$dns" ] && [ ! -e "/run/network/dns-ready" ]; then
+ touch "/run/network/dns-ready"
# Write to openslx-config
echo "# Config written by openslx-dhcp-script (2)" >> /opt/openslx/config
echo "SLX_DNS='$dns'" >> /opt/openslx/config
systemctl start network-dns.target &
fi
# "default route exists" target
- if [ -n "$router" ] && [ ! -e "/run/udhcpc/routing-ready" ]; then
- touch "/run/udhcpc/routing-ready"
+ if [ -n "$router" ] && [ ! -e "/run/network/gateway-ready" ]; then
+ touch "/run/network/gateway-ready"
# Write to openslx-config
echo "# Config written by openslx-dhcp-script (3)" >> /opt/openslx/config
echo "SLX_DNS='$dns'" >> /opt/openslx/config
diff --git a/remote/modules/iptables-helper/data/opt/openslx/iptables/iptables-reloader-worker b/remote/modules/iptables-helper/data/opt/openslx/iptables/iptables-reloader-worker
index 350f502c..3ca0a014 100755
--- a/remote/modules/iptables-helper/data/opt/openslx/iptables/iptables-reloader-worker
+++ b/remote/modules/iptables-helper/data/opt/openslx/iptables/iptables-reloader-worker
@@ -34,18 +34,27 @@ reload_rules () {
# Filter
for chain in INPUT FORWARD OUTPUT; do
iptables -t filter -P "$chain" ACCEPT
+ iptables -t filter -N "ipt-helper-$chain" 2>/dev/null
+ iptables -t filter -F "ipt-helper-$chain"
+ iptables -t filter -D "$chain" -j "ipt-helper-$chain" 2>/dev/null # make sure it's number one
+ iptables -t filter -I "$chain" 1 -j "ipt-helper-$chain"
done
- iptables -t filter -F
# NAT
for chain in INPUT OUTPUT PREROUTING POSTROUTING; do
iptables -t nat -P "$chain" ACCEPT
+ iptables -t nat -N "ipt-helper-$chain" 2>/dev/null
+ iptables -t nat -F "ipt-helper-$chain"
+ iptables -t nat -D "$chain" -j "ipt-helper-$chain" 2>/dev/null # make sure it's number one
+ iptables -t nat -I "$chain" 1 -j "ipt-helper-$chain"
done
- iptables -t nat -F
# Mangle
for chain in INPUT FORWARD OUTPUT PREROUTING POSTROUTING; do
iptables -t mangle -P "$chain" ACCEPT
+ iptables -t mangle -N "ipt-helper-$chain" 2>/dev/null
+ iptables -t mangle -F "ipt-helper-$chain"
+ iptables -t mangle -D "$chain" -j "ipt-helper-$chain" 2>/dev/null # make sure it's number one
+ iptables -t mangle -I "$chain" 1 -j "ipt-helper-$chain"
done
- iptables -t mangle -F
# Apply
local LOGFILE=$(mktemp)
@@ -58,6 +67,8 @@ reload_rules () {
mv "$file" "$DISABLED"
continue
fi
+ # patch chain names
+ sed -i -r 's/ (-A|--append|-I|--insert|-D|--delete) +(PREROUTING|INPUT|FORWARD|OUTPUT|POSTROUTING) / \1 ipt-helper-\2 /g' "$file"
if ! "$file" > "$LOGFILE" 2>&1; then
slxlog "firewall-script-apply" "The firewall script '$file' had nonzero exit code. Moving to disabled/" "$LOGFILE"
mkdir -p "$DISABLED"
@@ -65,6 +76,19 @@ reload_rules () {
fi
done
+ # Add default rule
+ for chain in INPUT FORWARD OUTPUT; do
+ iptables -t filter -A "ipt-helper-$chain" -j RETURN
+ done
+ # NAT
+ for chain in INPUT OUTPUT PREROUTING POSTROUTING; do
+ iptables -t nat -A "ipt-helper-$chain" -j RETURN
+ done
+ # Mangle
+ for chain in INPUT FORWARD OUTPUT PREROUTING POSTROUTING; do
+ iptables -t mangle -A "ipt-helper-$chain" -j RETURN
+ done
+
mv -f -- "${ALL_RULES}.new" "${ALL_RULES}"
echo "iptables rules successfully updated."
exit 0
diff --git a/remote/modules/kdm/data/etc/systemd/system/kdm.service b/remote/modules/kdm/data/etc/systemd/system/kdm.service
index 6a7810c8..93bc2dd8 100644
--- a/remote/modules/kdm/data/etc/systemd/system/kdm.service
+++ b/remote/modules/kdm/data/etc/systemd/system/kdm.service
@@ -1,8 +1,7 @@
[Unit]
Description=KDM Display Manager
Conflicts=getty@tty7.service
-Wants=plymouth-quit.service
-After=systemd-user-sessions.service getty@tty7.service plymouth-quit.service activate-nss-ldap.service
+After=systemd-user-sessions.service getty@tty7.service
[Service]
ExecStart=/usr/bin/kdm -nodaemon
diff --git a/remote/modules/kdm/data/etc/tmpfiles.d/kdm.conf b/remote/modules/kdm/data/etc/tmpfiles.d/kdm.conf
index 64f02ed3..9b726ba2 100644
--- a/remote/modules/kdm/data/etc/tmpfiles.d/kdm.conf
+++ b/remote/modules/kdm/data/etc/tmpfiles.d/kdm.conf
@@ -1,2 +1,2 @@
-D /var/run/kdm 0755 root root
+d /var/run/kdm 0755 root root
diff --git a/remote/modules/kernel/kernel.build b/remote/modules/kernel/kernel.build
index 197935f7..78832905 100644
--- a/remote/modules/kernel/kernel.build
+++ b/remote/modules/kernel/kernel.build
@@ -1,23 +1,7 @@
fetch_source() {
- # get the source according to the distro
- if [ "x$PACKET_MANAGER" == "xapt" ]; then
- pdebug "apt-ing kernel source"
- apt-get install -y dpkg-dev || perror "Installing dpkg-dev failed."
- apt-get source linux-image-${KERNEL_CURRENT_VERSION} || perror "Fetching kernel source failed."
- [ -z "$(ls -d linux-*/)" ] && perror "Source directory not found."
- [ ! -e ksrc ] && ln -s "$(ls -d linux-*/)" "ksrc"
- elif [ "x$PACKET_MANAGER" == "xzypper" ]; then
- pdebug "zypping kernel source"
- zypper --no-refresh install -y kernel-source || perror "Fetching kernel source failed."
-
- # find src directory
- local SOURCE_DIR=$(rpm -ql kernel-source |grep -E -o '^/.*src/linux-[^/]+/' |head -1)
- [ -z "${SOURCE_DIR}" ] && perror "Could not determine directory of kernel source..."
- ln -sf "${SOURCE_DIR}" ksrc
- else
- pdebug "Packet manager not determined!"
- fi
-
+ pdebug "getting kernel sources via git ...."
+ [ -d ./ksrc ] && rm -rf ./ksrc # slightly brutal ...
+ git clone --depth 1 ${REQUIRED_GIT} ksrc || perror "Could not clone kernel git."
# check for aufs
local RSL=$(find ksrc/ -type d -name aufs)
if [ -z "$RSL" ]; then
@@ -26,10 +10,8 @@ fetch_source() {
else
pinfo "aufs detected in kernel source :)"
fi
-
# remember the current kernel version
echo "${KERNEL_CURRENT_VERSION}" > ksrc/KVERSION
-
}
build() {
@@ -39,30 +21,32 @@ build() {
pinfo "Updating kernel config..."
update_config
cp "${TARGET_CONFIG_FILE}" ksrc/.config
-
# make kernel with the new config
cd ksrc || perror "Could not cd to ksrc, was the kernel source fetched properly?"
- pinfo "Preparing kernel for new config ('make oldconfig')"
+ pinfo "Preparing kernel for new config ('make oldconfig')."
if [ "x$MLTK_QUIET" = "x1" ]; then
- yes "" | make oldconfig || perror "make oldconfig failed"
+ yes "" | make oldconfig || perror "make oldconfig failed."
else
- make oldconfig || perror "make oldconfig failed"
+ make oldconfig || perror "make oldconfig failed."
fi
+ make prepare || perror "make prepare failed."
+ make scripts || perror "make scripts failed."
+
pinfo "Compiling kernel... (this will take some time)"
if gcc --version | grep "4\.7" && which distcc; then
pinfo "USING DISTCC"
- make CC="distcc gcc-4.7" -j16 || perror "make failed"
+ make CC="distcc gcc-4.7" -j16 || perror "make failed."
else
# explicitly state number of cores here, as MAKEFLAGS seems to be overridden
- make "-j$CPU_CORES" || perror "make failed"
+ make "-j$CPU_CORES" || perror "make failed."
fi
# install modules to build directory
pinfo "Installing kernel modules..."
if [ -d "${MODULE_BUILD_DIR}/lib/modules" ]; then
- rm -r "${MODULE_BUILD_DIR}/lib/modules" || pwarning "Could not clean old modules"
+ rm -r "${MODULE_BUILD_DIR}/lib/modules" || pwarning "Could not clean old modules."
fi
- make INSTALL_MOD_PATH="${MODULE_BUILD_DIR}" INSTALL_MOD_STRIP=1 modules_install || perror "make modules_install failed in ${MODULE_BUILD_DIR}"
+ make INSTALL_MOD_PATH="${MODULE_BUILD_DIR}" INSTALL_MOD_STRIP=1 modules_install || perror "make modules_install failed in ${MODULE_BUILD_DIR}."
cd - 2> /dev/null
# copy kernel to build
@@ -73,7 +57,7 @@ build() {
post_copy() {
mkdir -p "$TARGET_BUILD_DIR/../kernel"
- cp -a "$MODULE_BUILD_DIR/kernel" "$TARGET_BUILD_DIR/../kernel/kernel" || perror "could not copy kernel to remote build dir"
+ cp -a "$MODULE_BUILD_DIR/kernel" "$TARGET_BUILD_DIR/../kernel/kernel" || perror "could not copy kernel to remote build dir."
}
# helper function to update the current kernel config with our parameters
@@ -85,6 +69,7 @@ update_config() {
# check for our wanted config parameter
local OPENSLX_WANTED_CONFIG="${ROOT_DIR}/data/kernel.wanted.config"
+
[ -e "${OPENSLX_WANTED_CONFIG}" ] || perror "$OPENSLX_WANTED_CONFIG does not exist! Please add a list of wanted kernel config parameters."
# copy basic config file
@@ -113,33 +98,31 @@ update_config() {
patch_aufs() {
pinfo "Cloning aufs3 standalone git"
cd "$MODULE_DIR"
- if [ ! -d "aufs3-standalone/.git" ]; then
- rm -rf "aufs3-standalone"
- git clone "git://aufs.git.sourceforge.net/gitroot/aufs/aufs3-standalone.git" || perror "Cloning aufs3 failed."
- fi
+ [ -d "aufs3-standalone/.git" ] && rm -rf "aufs3-standalone" # if already there, kill it.
+ # git: --depth 1 won't work here due to later "checkout origin/branch"
+ git clone "git://aufs.git.sourceforge.net/gitroot/aufs/aufs3-standalone.git" || perror "Cloning aufs3 failed."
# get the needed version
[ ! -z ${KERNEL_CURRENT_VERSION} ] && local NEEDED_BRANCH=$(echo $KERNEL_CURRENT_VERSION | awk -F "." '{print $1"."$2}') \
|| perror "KERNEL_CURRENT_VERSION not set, this should not happen!"
pinfo "Getting branch origin/$NEEDED_BRANCH"
cd "$MODULE_DIR/aufs3-standalone" || perror "Could not CD to aufs3-standalone"
- git checkout "origin/aufs$NEEDED_BRANCH"
- pinfo "Starting to patch..."
+ git checkout "origin/aufs$NEEDED_BRANCH" || perror "Could not checkout needed branch."
+ pinfo "Starting to patch... $NEEDED_BRANCH"
tarcopy "Documentation fs" "$MODULE_DIR/ksrc"
- local AUFSH
- if [ ! -e "include/linux/aufs_type.h" ]; then
- [ ! -e "include/uapi/linux/aufs_type.h" ] && perror "No aufs_type.h in aufs3-git"
- AUFSH="include/uapi/linux/aufs_type.h"
- elif [ -e "include/uapi/linux/aufs_type.h" -a "$(stat -c %s "include/uapi/linux/aufs_type.h")" -gt "$(stat -c %s "include/linux/aufs_type.h")" ]; then
- AUFSH="include/uapi/linux/aufs_type.h"
- else
- AUFSH="include/linux/aufs_type.h"
- fi
- pinfo "Using $AUFSH"
- cp "$AUFSH" "$MODULE_DIR/ksrc/include/linux/" || perror "could not copy $AUFSH"
+
+ # Quick-and-dirty aufs_type.h copying:
+ [ -e "include/linux/aufs_type.h" ] && cp "include/linux/aufs_type.h" "$MODULE_DIR/ksrc/include/linux/"
+ [ -e "include/uapi/linux/aufs_type.h" ] && cp "include/uapi/linux/aufs_type.h" "$MODULE_DIR/ksrc/include/uapi/linux/"
+
cd "$MODULE_DIR/ksrc" || perror "Could not CD to kernel-source dir ksrc"
- patch -p1 < "$MODULE_DIR/aufs3-standalone/aufs3-kbuild.patch" || perror "aufs3-standalone/aufs3-kbuild.patch failed"
- patch -p1 < "$MODULE_DIR/aufs3-standalone/aufs3-base.patch" || perror "aufs3-standalone/aufs3-base.patch failed"
- #patch -p1 < "$MODULE_DIR/aufs3-standalone/aufs3-proc_map.patch" || perror "aufs3-standalone/aufs3-proc_map.patch failed"
+
+ patch -p1 < "$MODULE_DIR/aufs3-standalone/aufs3-kbuild.patch" || perror "aufs3-standalone/aufs3-kbuild.patch failed!"
+ patch -p1 < "$MODULE_DIR/aufs3-standalone/aufs3-base.patch" || perror "aufs3-standalone/aufs3-base.patch failed!"
+
+ # this following 'if' is a burning shame - caused as patching under eg. openSuse 13.1 is always unsuccessful due to hunk failing
+ if [ -f "$MODULE_DIR/aufs3-standalone/aufs3-mmap.patch" ]; then
+ patch -p1 < "$MODULE_DIR/aufs3-standalone/aufs3-mmap.patch" || pwarning "Problem patching aufs3-mmap.patch: hunks failed?"
+ fi
pinfo "Patched kernel source with aufs-${NEEDED_BRANCH}"
cd "$MODULE_DIR"
}
diff --git a/remote/modules/kernel/kernel.conf.opensuse b/remote/modules/kernel/kernel.conf.opensuse
new file mode 100644
index 00000000..a66564fe
--- /dev/null
+++ b/remote/modules/kernel/kernel.conf.opensuse
@@ -0,0 +1,2 @@
+REQUIRED_GIT_BRANCH="-b openSUSE-${SYS_VERSION}"
+REQUIRED_GIT="git://kernel.opensuse.org/kernel.git $REQUIRED_GIT_BRANCH"
diff --git a/remote/modules/kernel/kernel.conf.ubuntu b/remote/modules/kernel/kernel.conf.ubuntu
new file mode 100644
index 00000000..1c876d15
--- /dev/null
+++ b/remote/modules/kernel/kernel.conf.ubuntu
@@ -0,0 +1,2 @@
+REQUIRED_GIT_BRANCH="-b master"
+REQUIRED_GIT="git://kernel.ubuntu.com/ubuntu/ubuntu-${SYS_CODENAME}.git $REQUIRED_GIT_BRANCH"
diff --git a/remote/modules/kernel/kernel.conf.ubuntu.13.04 b/remote/modules/kernel/kernel.conf.ubuntu.13.04
new file mode 100644
index 00000000..e9192f01
--- /dev/null
+++ b/remote/modules/kernel/kernel.conf.ubuntu.13.04
@@ -0,0 +1,2 @@
+REQUIRED_GIT_BRANCH="-b master"
+REQUIRED_GIT="git://kernel.ubuntu.com/ubuntu-archive/ubuntu-${SYS_CODENAME}.git $REQUIRED_GIT_BRANCH"
diff --git a/remote/modules/nscd/data/etc/tmpfiles.d/nscd.conf b/remote/modules/nscd/data/etc/tmpfiles.d/nscd.conf
index 57c16660..ba48981d 100644
--- a/remote/modules/nscd/data/etc/tmpfiles.d/nscd.conf
+++ b/remote/modules/nscd/data/etc/tmpfiles.d/nscd.conf
@@ -1 +1 @@
-D /var/run/nscd 0755 root root
+d /var/run/nscd 0755 root root
diff --git a/remote/modules/nvidia_kernel/nvidia_kernel.build b/remote/modules/nvidia_kernel/nvidia_kernel.build
new file mode 100644
index 00000000..bf9c6ee6
--- /dev/null
+++ b/remote/modules/nvidia_kernel/nvidia_kernel.build
@@ -0,0 +1,128 @@
+fetch_source() {
+ mkdir -p src 2>/dev/null
+ cd src || perror "Could not change into src directory."
+ download "$REQUIRED_URL"
+}
+
+build() {
+ local KERNELSRCDIR="$MODULE_DIR/../kernel/ksrc" # kernel sources
+ local TEMPDIR="$MODULE_DIR/temp"
+ local ROOTLOWERDIR="/"
+ local ROOTUPPERDIR="$TEMPDIR/rootupper"
+ local ROOTBINDDIR="$TEMPDIR/rootbind"
+ local ROOTMOUNTDIR="$TEMPDIR/rootmount"
+ local BINDMOUNTS="/dev /proc /run /sys"
+ local NVIDIA="$MODULE_DIR/src/$REQUIRED_NVIDIA"
+ local NVIDIAEXTRACTDIR="$ROOTMOUNTDIR/NVIDIA"
+ local NVEXTRACTDIR="/NVIDIA" # This is relative to the chroot.
+
+ make_dirs () {
+ [ -d "$TEMPDIR" ] && rm -rf $TEMPDIR/*
+ mkdir -p "$TEMPDIR" || perror "Could not create base directory for mount directories $TEMPDIR."
+ for DIR in "$ROOTUPPERDIR" "$ROOTBINDDIR" "$ROOTMOUNTDIR"; do
+ mkdir -p "$DIR" || perror "Could not create directory for mount directory $DIR."
+ done
+ }
+
+ mount_dirs () {
+ pinfo "Executing bind- and overlay mounts ..."
+ mount -o bind "$ROOTLOWERDIR" "$ROOTBINDDIR" || perror "Could not mount (bind) $ROOTLOWERDIR to $ROOTBINDDIR."
+ mount -o remount,ro "$ROOTBINDDIR" || perror "Could not remount $ROOTBINDDIR ro read-only."
+ mount -t overlayfs overlayfs -o lowerdir="$ROOTBINDDIR",upperdir="$ROOTUPPERDIR" "$ROOTMOUNTDIR" \
+ || perror "Could not mount (overlayfs) $ROOTLOWERDIR, $ROOTUPPERDIR to $BINDDIR."
+ pinfo "Executing bind mounts ($BINDMOUNTS) for chroot root dir ..."
+ for MOUNT in $BINDMOUNTS; do
+ mount -o bind "$MOUNT" "$ROOTMOUNTDIR/$MOUNT" || perror "Could not mount (bind) $MOUNTS into chroot root dir."
+ done
+ }
+
+ # We inject a bashrc to be executed later within the chroot.
+ gen_bashrc () {
+ local COMMON_OPTIONS=' --no-nouveau-check --no-network --no-backup --no-rpms --no-runlevel-check --no-distro-scripts --no-cc-version-check --no-x-check --no-precompiled-interface --silent '
+
+ cat >"$ROOTMOUNTDIR/$HOME/.bashrc"<<-EOF
+ echo "chroot successful."
+ alias ll='ls -alF' # A little convenience for debugging purposes.
+ PS1='\[\e[1;33m\]chroot@\h:\w\$ \[\e[1;32m\]' # To recognize the chroot instantly when debugging (yellow on black).
+ cd "$NVEXTRACTDIR"
+ ./nvidia-installer $COMMON_OPTIONS --kernel-source-path /"$KERNELSRCDIR" # Do the work!
+ exit # Out-comment this for debugging: Then script stays in chroot.
+EOF
+ }
+
+ unpack_nvidia () {
+ [ -d "$NVIDIAEXTRACTDIR" ] && rm -rf "$NVIDIAEXTRACTDIR"
+ pinfo "Unpacking NVidia archive ($NVIDIA) ..."
+ sh "$NVIDIA" --extract-only --target "$NVIDIAEXTRACTDIR" || perror "Could not extract $NVIDIA to $NVIDIAEXTRACTDIR."
+ }
+
+ umount_dirs () {
+ # Let's tidy the place, or at least the mounts: Otherwise these would stack up, and we do not like that, don't we.
+ for MOUNT in $BINDMOUNTS; do
+ umount "$ROOTMOUNTDIR/$MOUNT" || pwarning "Could not unmount $ROOTMOUNTDIR/$MOUNT!"
+ done
+ umount "$ROOTMOUNTDIR" || pwarning "Could not unmount $ROOTMOUNTDIR!"
+ umount "$ROOTBINDDIR" || pwarning "Could not unmount $ROOTBINDDIR!"
+ }
+
+ strip_modules () {
+ strip -g "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/nvidia.ko" || \
+ pwarning "Could not strip kernel module $ROOTUPPERDIR/$NVEXTRACTDIR/kernel/nvidia.ko."
+ strip -g "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/uvm/nvidia-uvm.ko" || \
+ pwarning "Could not strip kernel module $ROOTUPPERDIR/$NVEXTRACTDIR/kernel/uvm/nvidia-uvm.ko."
+ }
+
+ copy_modules () {
+ local NVIDIA_MODULES="$MODULE_DIR/build/lib/modules/nvidia/"
+ mkdir -p "$NVIDIA_MODULES"
+ cp "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/nvidia.ko" "$NVIDIA_MODULES" || perror "Could not copy nvidia.ko!"
+ cp "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/uvm/nvidia-uvm.ko" "$NVIDIA_MODULES" || perror "Could not copy nvidia-uvm.ko!"
+ }
+
+ clean_temp () {
+ rm -rf "$TEMPDIR" || perror "Could not clean/delete temp directory $TEMPDIR."
+ }
+
+ # Main stuff
+ pinfo "Generating temporary directories ..."
+ make_dirs
+ pinfo "Mounting directories ..."
+ mount_dirs
+
+ pinfo "Injecting .bashrc into later chroot ..."
+ gen_bashrc
+
+ pinfo "Unpacking NVidia-Installer ..."
+ unpack_nvidia
+
+ pinfo "Ready to chroot - compiling may take some time."
+ pdebug "--- chroot ---------------------------------------------------------------------"
+ pdebug "- -"
+ pdebug "- Notice: This may take a while! -"
+ pdebug "- -"
+ pdebug "- Please keep note the Nvidia installer _will_ complain about -"
+ pdebug "- several warnings and errors. It will do this in any case. -"
+ pdebug "- -"
+ pdebug "- This does _not_ mean the kernel module compilation was unsuccessful! -"
+ pdebug "- -"
+ pdebug "--------------------------------------------------------------------------------"
+ chroot "$ROOTMOUNTDIR"
+ pinfo "chroot terminated."
+
+ pinfo "Unmount directories."
+ umount_dirs
+
+ pinfo "Stripping kernel modules."
+ strip_modules
+
+ pinfo "Copying kernel modules."
+ copy_modules
+
+ pinfo "Cleaning / deleting temp directories."
+ clean_temp
+}
+
+post_copy() {
+ :
+}
+
diff --git a/remote/modules/nvidia_kernel/nvidia_kernel.conf b/remote/modules/nvidia_kernel/nvidia_kernel.conf
new file mode 100644
index 00000000..34e66b99
--- /dev/null
+++ b/remote/modules/nvidia_kernel/nvidia_kernel.conf
@@ -0,0 +1,7 @@
+REQUIRED_VERSION="331.38"
+REQUIRED_NVIDIA="NVIDIA-Linux-x86_64-$REQUIRED_VERSION.run"
+REQUIRED_URL="http://download.nvidia.com/XFree86/Linux-x86_64/$REQUIRED_VERSION/$REQUIRED_NVIDIA"
+
+REQUIRED_DIRECTORIES="
+ /lib/modules/nvidia
+"
diff --git a/remote/modules/nvidia_libs/nvidia_libs.build b/remote/modules/nvidia_libs/nvidia_libs.build
new file mode 100644
index 00000000..9dd4c0e2
--- /dev/null
+++ b/remote/modules/nvidia_libs/nvidia_libs.build
@@ -0,0 +1,121 @@
+fetch_source() {
+ mkdir -p src 2>/dev/null
+ cd src || perror "Could not change into src directory."
+ download "$REQUIRED_URL"
+}
+
+build() {
+ local KERNELSRCDIR="$MODULE_DIR/../kernel/ksrc" # kernel sources
+ local TEMPDIR="$MODULE_DIR/temp"
+ local ROOTLOWERDIR="/"
+ local ROOTUPPERDIR="$MODULE_DIR/build"
+ local ROOTBINDDIR="$TEMPDIR/rootbind"
+ local ROOTMOUNTDIR="$TEMPDIR/rootmount"
+ local BINDMOUNTS="/dev /proc /run /sys"
+ local NVIDIA="$MODULE_DIR/src/$REQUIRED_NVIDIA"
+ local NVIDIAEXTRACTDIR="$ROOTMOUNTDIR/NVIDIA"
+ local NVEXTRACTDIR="/NVIDIA" # This is relative to the chroot.
+
+ make_dirs () {
+ [ -d "$TEMPDIR" ] && rm -rf "$TEMPDIR"
+ mkdir -p "$TEMPDIR" || perror "Could not create base directory for mount directories $TEMPDIR."
+ for DIR in "$ROOTBINDDIR" "$ROOTMOUNTDIR"; do
+ mkdir -p "$DIR" || perror "Could not create directory for mount directory $DIR."
+ done
+ }
+
+ mount_dirs () {
+ pinfo "Executing bind- and overlay mounts ..."
+ mount -o bind "$ROOTLOWERDIR" "$ROOTBINDDIR" || perror "Could not mount (bind) $ROOTLOWERDIR to $ROOTBINDDIR."
+ mount -o remount,ro "$ROOTBINDDIR" || perror "Could not remount $ROOTBINDDIR ro read-only."
+ mount -t overlayfs overlayfs -o lowerdir="$ROOTBINDDIR",upperdir="$ROOTUPPERDIR" "$ROOTMOUNTDIR" \
+ || perror "Could not mount (overlayfs) $ROOTLOWERDIR, $ROOTUPPERDIR to $BINDDIR."
+ pinfo "Executing bind mounts ($BINDMOUNTS) for chroot root dir ..."
+ for MOUNT in $BINDMOUNTS; do
+ mount -o bind "$MOUNT" "$ROOTMOUNTDIR/$MOUNT" || perror "Could not mount (bind) $MOUNTS into chroot root dir."
+ done
+ }
+
+ # We inject a bashrc to be executed later within the chroot.
+ gen_bashrc () {
+ local COMMON_OPTIONS=' --no-nouveau-check --no-network --no-backup --no-rpms --no-runlevel-check --no-distro-scripts --no-cc-version-check --no-x-check --no-precompiled-interface --silent '
+
+ cat >"$ROOTMOUNTDIR/$HOME/.bashrc"<<-EOF
+ echo "chroot successful."
+ alias ll='ls -alF' # A little convenience for debugging purposes.
+ PS1='\[\e[1;33m\]chroot@\h:\w\$ \[\e[1;32m\]' # To recognize the chroot instantly when debugging (yellow on black).
+ cd "$NVEXTRACTDIR"
+ ./nvidia-installer $COMMON_OPTIONS --no-kernel-module # Do the work!
+ exit # Out-comment this for debugging: Then script stays in chroot.
+EOF
+ }
+
+ unpack_nvidia () {
+ [ -d "$NVIDIAEXTRACTDIR" ] && rm -rf "$NVIDIAEXTRACTDIR"
+ pinfo "Unpacking NVidia archive ($NVIDIA) ..."
+ sh "$NVIDIA" --extract-only --target "$NVIDIAEXTRACTDIR" || perror "Could not extract $NVIDIA to $NVIDIAEXTRACTDIR."
+ }
+
+ umount_dirs () {
+ # Let's tidy the place, or at least the mounts: Otherwise these would stack up, and we do not like that, don't we.
+ for MOUNT in $BINDMOUNTS; do
+ umount "$ROOTMOUNTDIR/$MOUNT" || pwarning "Could not unmount $ROOTMOUNTDIR/$MOUNT!"
+ done
+ umount "$ROOTMOUNTDIR" || pwarning "Could not unmount $ROOTMOUNTDIR!"
+ umount "$ROOTBINDDIR" || pwarning "Could not unmount $ROOTBINDDIR!"
+ }
+
+ clean_whiteouts () {
+ # The case of these overlay whiteouts should be investigated instead of just killing them. But for now...
+ pdebug "Searching for overlayfs-whiteouts ..."
+ for WHITEOUT in $(find "$MODULE_DIR/build" -lname "(overlay-whiteout)"); do
+ pdebug "Whiteout found: $WHITEOUT"
+ rm -f "$WHITEOUT" || perror "Could not delete whiteout $WHITEOUT!"
+ done
+ }
+
+ clean_temp () {
+ rm -rf "$TEMPDIR" || perror "Could not clean/delete temp directory $TEMPDIR."
+ rm -rf "$ROOTUPPERDIR/NVIDIA"
+ }
+
+ # Main stuff
+ pinfo "Generating temporary directories ..."
+ make_dirs
+ pinfo "Mounting directories ..."
+ mount_dirs
+
+ pinfo "Injecting .bashrc into later chroot ..."
+ gen_bashrc
+
+ pinfo "Unpacking NVidia-Installer ..."
+ unpack_nvidia
+
+ pinfo "Ready to chroot - compiling may take some time."
+ pdebug "--- chroot ---------------------------------------------------------------------"
+ pdebug "- -"
+ pdebug "- Notice: This may take a while! -"
+ pdebug "- -"
+ pdebug "- Please keep note the Nvidia installer _will_ complain about -"
+ pdebug "- several warnings and errors. It will do this in any case. -"
+ pdebug "- -"
+ pdebug "- This does _not_ mean the library module compilation was unsuccessful! -"
+ pdebug "- -"
+ pdebug "--------------------------------------------------------------------------------"
+ chroot "$ROOTMOUNTDIR"
+ pinfo "chroot terminated."
+
+ pinfo "Unmount directories ..."
+ umount_dirs
+
+ pinfo "Cleaning whiteouts ..."
+ clean_whiteouts
+
+ pinfo "Cleaning / deleting temp directories."
+ clean_temp
+}
+
+post_copy() {
+ :
+}
+
diff --git a/remote/modules/nvidia_libs/nvidia_libs.conf b/remote/modules/nvidia_libs/nvidia_libs.conf
new file mode 100644
index 00000000..faec87ec
--- /dev/null
+++ b/remote/modules/nvidia_libs/nvidia_libs.conf
@@ -0,0 +1,29 @@
+REQUIRED_VERSION="331.38"
+REQUIRED_NVIDIA="NVIDIA-Linux-x86_64-$REQUIRED_VERSION.run"
+REQUIRED_URL="http://download.nvidia.com/XFree86/Linux-x86_64/$REQUIRED_VERSION/$REQUIRED_NVIDIA"
+
+#REQUIRED_FILES="
+# /etc/OpenCL/vendors/nvidia.icd
+# /usr/share/nvidia/nvidia-application-profiles-331.38-rc
+# /usr/share/applications/nvidia-settings.desktop
+#"
+
+#REQUIRED_DIRECTORIES="
+# /usr/bin
+# /usr/lib
+# /usr/lib/vdpau
+# /usr/lib/xorg
+# /usr/lib/xorg/modules
+# /usr/lib/xorg/modules/drivers
+# /usr/lib/xorg/modules/extensions
+# /usr/lib/tls
+# /usr/lib/x86_64-linux-gnu
+# /usr/lib/x86_64-linux-gnu/mesa
+# /usr/lib32
+# /usr/lib32/vdpau
+#
+#"
+
+REQUIRED_DIRECTORIES="
+ /
+"
diff --git a/remote/modules/nvidia_libs/nvidia_libs.conf.ubuntu b/remote/modules/nvidia_libs/nvidia_libs.conf.ubuntu
new file mode 100644
index 00000000..1eccb199
--- /dev/null
+++ b/remote/modules/nvidia_libs/nvidia_libs.conf.ubuntu
@@ -0,0 +1,10 @@
+# libvdpau: While nvidia delivers a linvdpau within it's driver package, nvidia
+# itself recommends using a distribution package if available. So, here we go.
+
+REQUIRED_CONTENT_PACKAGES="
+ libvdpau1
+"
+
+REQUIRED_INSTALLED_PACKAGES="
+ libvdpau1
+"
diff --git a/remote/modules/pam/data/etc/tmpfiles.d/pipefs.conf b/remote/modules/pam/data/etc/tmpfiles.d/pipefs.conf
index 7c422623..44e0924c 100644
--- a/remote/modules/pam/data/etc/tmpfiles.d/pipefs.conf
+++ b/remote/modules/pam/data/etc/tmpfiles.d/pipefs.conf
@@ -1,2 +1,2 @@
-D /var/run/rpc_pipefs 0755 root root
+d /var/run/rpc_pipefs 0755 root root
diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close
index 826e0a55..dc1db852 100755
--- a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close
+++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close
@@ -25,7 +25,7 @@ if [ "x$PAM_SERVICE" = "xsu" -o "x$PAM_SERVICE" = "xsudo" ]; then
SESSIONCOUNT=$(( $SESSIONCOUNT + 1 ))
fi
-if [ "$SESSIONCOUNT" = "1" ]; then
+if [ "$SESSIONCOUNT" -le "1" ]; then
# last session, close all ghost user processes
usleep 100000 2> /dev/null
diff --git a/remote/modules/pam/pam.build b/remote/modules/pam/pam.build
index 48baf8b9..15828fb8 100644
--- a/remote/modules/pam/pam.build
+++ b/remote/modules/pam/pam.build
@@ -1,6 +1,10 @@
fetch_source() {
# get pam-script source
download_untar "$REQUIRED_PAM_SCRIPT_URL" "src/"
+ if [[ "$SYS_DISTRIBUTION" == "opensuse" && "$SYS_VERSION" == "13.1" ]]; then
+ pinfo "Downloading $REQUIRED_NSS_LDAPD_URL ..."
+ download_untar "$REQUIRED_NSS_LDAPD_URL" "src/"
+ fi
}
build() {
@@ -18,10 +22,20 @@ build() {
cd "${MODULE_DIR}/src/pam-script-${REQUIRED_PAM_SCRIPT_VERSION}" || perror "Could not cd to ${MODULE_DIR}/src/pam-script-${REQUIRED_PAM_SCRIPT_VERSION}."
./configure --prefix=/ --sysconfdir=/etc/pam-script --libdir="$(dirname ${PAM_UNIX_LOCATION:1})" || perror "pam-script: ./configure failed."
make DESTDIR="${MODULE_BUILD_DIR}" install || perror "pam-script: make install to ${MODULE_BUILD_DIR} failed."
- # Build nslcd service file
- cd "$MODULE_BUILD_DIR"
- local NSLCD_PATH=$(which nslcd)
+ # openSuse 13.1 has no package nss-pam-ldapd. So, we compile it.
+ if [[ "$SYS_DISTRIBUTION" == "opensuse" && "$SYS_VERSION" == "13.1" ]]; then
+ cd "${MODULE_DIR}/src/$REQUIRED_NSS_LDAPD_VERSION"
+ pinfo "compiling pam-nss-ldapd for openSuse 13.1 ..."
+ ./configure || perror "openSuse 13.1 - pam-nss-ldapd: ./configure failed."
+ make DESTDIR="${MODULE_BUILD_DIR}" install || perror "openSuse 13.1 - pam-nss-ldapd: make install to ${MODULE_BUILD_DIR} failed."
+ cd "$MODULE_BUILD_DIR"
+ local NSLCD_PATH=$(find . -executable -name "nslcd") # Not in path, so we 'find' below MODULE_BUILD_DIR
+ else
+ cd "$MODULE_BUILD_DIR"
+ local NSLCD_PATH=$(which nslcd)
+ fi
[ -z "$NSLCD_PATH" ] && perror "Could not 'which nslcd'"
+ # Build nslcd service file
mkdir -p "etc/systemd/system"
sed "s,%PATH%,$NSLCD_PATH,g" "$MODULE_DIR/templates/nslcd-systemd.service" > "etc/systemd/system/nslcd.service" || perror "Could not fill nslcd.service template"
}
diff --git a/remote/modules/pam/pam.conf.opensuse.13.1 b/remote/modules/pam/pam.conf.opensuse.13.1
new file mode 100644
index 00000000..9fe1de17
--- /dev/null
+++ b/remote/modules/pam/pam.conf.opensuse.13.1
@@ -0,0 +1,47 @@
+REQUIRED_NSS_LDAPD_VERSION="nss-pam-ldapd-0.8.13"
+REQUIRED_NSS_LDAPD_URL="http://arthurdejong.org/nss-pam-ldapd/$REQUIRED_NSS_LDAPD_VERSION.tar.gz"
+
+REQUIRED_BINARIES+="
+ mkhomedir_helper
+"
+
+REQUIRED_INSTALLED_PACKAGES="
+ pam
+ pam_krb5
+ pam-devel
+ pam-modules
+ libopenssl-devel
+ openldap2-client
+ nfsidmap
+ nfs-client
+ glibc
+ pam-devel
+ openldap2-devel
+ krb5-devel
+"
+REQUIRED_CONTENT_PACKAGES="
+ pam
+ pam_krb5
+ pam-devel
+ pam-modules
+ nss-mdns
+ openldap2-client
+ nfsidmap
+ nfs-client
+ glibc
+"
+REQUIRED_LIBRARIES+="
+ libnss_compat
+ libnss_db
+ libnss_dns
+ libnss_files
+ libnss_nis
+"
+REQUIRED_DIRECTORIES+="
+ /$LIB64
+ /usr/$LIB64
+"
+REQUIRED_SYSTEM_FILES+="
+ /$LIB64/security
+"
+
diff --git a/remote/modules/plymouth/data/etc/tmpfiles.d/plymouth.conf b/remote/modules/plymouth/data/etc/tmpfiles.d/plymouth.conf
index 211c61f6..9dfffcbe 100644
--- a/remote/modules/plymouth/data/etc/tmpfiles.d/plymouth.conf
+++ b/remote/modules/plymouth/data/etc/tmpfiles.d/plymouth.conf
@@ -1,2 +1,2 @@
-D /var/run/plymouth 0755 root root
+d /var/run/plymouth 0755 root root
diff --git a/remote/modules/printergui/data/etc/systemd/system/network.target.wants/printergui.service b/remote/modules/printergui/data/etc/systemd/system/network.target.wants/printergui.service
new file mode 120000
index 00000000..40453c80
--- /dev/null
+++ b/remote/modules/printergui/data/etc/systemd/system/network.target.wants/printergui.service
@@ -0,0 +1 @@
+../printergui.service \ No newline at end of file
diff --git a/remote/modules/printergui/data/etc/systemd/system/printergui.service b/remote/modules/printergui/data/etc/systemd/system/printergui.service
new file mode 100644
index 00000000..8b00514c
--- /dev/null
+++ b/remote/modules/printergui/data/etc/systemd/system/printergui.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Printergui - bwLehrpool printing system
+Requires=network.target graphical.target
+After=network.target
+Before=cups.service
+
+[Service]
+ExecStart=/opt/openslx/scripts/systemd-printergui_preparation
diff --git a/remote/modules/printergui/data/opt/openslx/scripts/systemd-printergui_preparation b/remote/modules/printergui/data/opt/openslx/scripts/systemd-printergui_preparation
new file mode 100755
index 00000000..33a861e6
--- /dev/null
+++ b/remote/modules/printergui/data/opt/openslx/scripts/systemd-printergui_preparation
@@ -0,0 +1,20 @@
+#!/bin/ash
+
+ERR=0
+SRCDIR=/usr/lib/cups/backend
+DESTDIR=/opt/openslx/cups/backend
+PRINTPWGUI=/opt/openslx/cups/printpwgui
+
+if [ ! -d "$DESTDIR" ]; then
+ mkdir -p "$DESTDIR" || exit 1
+fi
+
+mv "$SRCDIR"/* "$DESTDIR"
+
+cd "$SRCDIR"
+for i in "$DESTDIR"/*; do
+ ln -sf "$PRINTPWGUI" $(basename "$i")
+done
+
+exit 0
+
diff --git a/remote/modules/printergui/printergui.build b/remote/modules/printergui/printergui.build
index 5803d8e8..2ee49154 100644
--- a/remote/modules/printergui/printergui.build
+++ b/remote/modules/printergui/printergui.build
@@ -2,19 +2,24 @@
fetch_source() {
git clone "${REQUIRED_GIT}" src
+ cd src
+ git checkout "$REQUIRED_COMMIT"
+ cd ..
}
build() {
local SRCDIR="${MODULE_DIR}/src/"
+ local DESTDIR="$MODULE_BUILD_DIR/opt/openslx/cups"
- mkdir -p "$MODULE_BUILD_DIR/opt/openslx/bin"
- cd "${MODULE_BUILD_DIR}/opt/openslx/bin" || perror "Could not cd!"
- pinfo "Running qmake"
- qmake "$SRCDIR/src/printergui.pro" -r -spec linux-g++ || perror "'qmake' failed (e.g. not installed)."
+ mkdir -p "$DESTDIR"
+ cd "$DESTDIR" || perror "Could not cd to $DESTDIR!"
+ pinfo "Running cmake"
+ cmake "$SRCDIR/" || perror "'cmake' failed (e.g. not installed)."
pinfo "Running make"
make || perror "'make' failed."
+ chmod 0700 "$DESTDIR/printpwgui" # So picky cupsd won't drop privileges to lp
}
post_copy() {
- mkdir -p "${TARGET_BUILD_DIR}/var/spool/STANDARD"
- chmod a+rwt "${TARGET_BUILD_DIR}/var/spool/STANDARD"
+ :
}
+
diff --git a/remote/modules/printergui/printergui.conf b/remote/modules/printergui/printergui.conf
index 26203a80..17203d3e 100644
--- a/remote/modules/printergui/printergui.conf
+++ b/remote/modules/printergui/printergui.conf
@@ -1,6 +1,8 @@
REQUIRED_GIT="git://git.openslx.org/openslx-ng/printergui.git"
+REQUIRED_COMMIT="HEAD"
REQUIRED_BINARIES="
printergui
+ printpwgui
"
REQUIRED_SYSTEM_FILES="
"
diff --git a/remote/modules/redsocks/data/opt/openslx/scripts/systemd-setup_proxy b/remote/modules/redsocks/data/opt/openslx/scripts/systemd-setup_proxy
index 94cb7688..adbaf827 100755
--- a/remote/modules/redsocks/data/opt/openslx/scripts/systemd-setup_proxy
+++ b/remote/modules/redsocks/data/opt/openslx/scripts/systemd-setup_proxy
@@ -33,7 +33,8 @@ cat > "/opt/openslx/iptables/rules.d/10-redoscks-proxy" <<HEREDOCBROWN
#!/bin/ash
. /opt/openslx/config
-iptables -t nat -N REDSOCKS
+iptables -t nat -N REDSOCKS 2>/dev/null
+iptables -t nat -F REDSOCKS
iptables -t nat -A REDSOCKS -d "\$SLX_PROXY_IP" -j RETURN
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
@@ -49,9 +50,9 @@ if [ -n "\$SLX_PROXY_BLACKLIST" ]; then
done
fi
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port 12345
-iptables -t nat -A PREROUTING -p tcp -j REDSOCKS
-iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
-iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
+iptables -t nat -A PREROUTING -i nat1 -p tcp -j REDSOCKS
+iptables -t nat -A OUTPUT -o br0 -p tcp -j REDSOCKS
+#iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
iptables -A INPUT -i br0 -p tcp --dport 12345 -j DROP
HEREDOCBROWN
chmod +x "/opt/openslx/iptables/rules.d/10-redoscks-proxy"
diff --git a/remote/modules/smbclient/data/etc/tmpfiles.d/ensure-smbconf-exists.conf b/remote/modules/smbclient/data/etc/tmpfiles.d/ensure-smbconf-exists.conf
new file mode 100644
index 00000000..f893eb71
--- /dev/null
+++ b/remote/modules/smbclient/data/etc/tmpfiles.d/ensure-smbconf-exists.conf
@@ -0,0 +1,4 @@
+# smbspool for some reason insists on reading this file, even if it is empty, otherwise it will bail out
+d /etc/samba 0755 root root -
+f /etc/samba/smb.conf 0644 root root -
+
diff --git a/remote/modules/smbclient/smbclient.build b/remote/modules/smbclient/smbclient.build
new file mode 100644
index 00000000..dc28dd26
--- /dev/null
+++ b/remote/modules/smbclient/smbclient.build
@@ -0,0 +1,20 @@
+fetch_source() {
+ :
+}
+
+build() {
+ COPYLIST="list_dpkg_output"
+ [ -e "$COPYLIST" ] && rm "$COPYLIST"
+
+ list_packet_files >> "$COPYLIST"
+ tarcopy "$(cat "$COPYLIST" | sort -u)" "${MODULE_BUILD_DIR}"
+
+ local BIN_LOCATION="$(which smbspool)"
+ if [ ! -z "${BIN_LOCATION}" -a -e "${BIN_LOCATION}" ]; then
+ ln -sf "${BIN_LOCATION}" "${MODULE_BUILD_DIR}/usr/lib/cups/backend/smb"
+ fi
+}
+
+post_copy() {
+ :
+}
diff --git a/remote/modules/smbclient/smbclient.conf b/remote/modules/smbclient/smbclient.conf
new file mode 100644
index 00000000..460c57b5
--- /dev/null
+++ b/remote/modules/smbclient/smbclient.conf
@@ -0,0 +1,10 @@
+REQUIRED_BINARIES="
+ smbspool
+ smbcacls
+ rpcclient
+ smbcquotas
+ smbget
+ smbclient
+ smbtree
+ smbtar
+"
diff --git a/remote/modules/smbclient/smbclient.conf.opensuse b/remote/modules/smbclient/smbclient.conf.opensuse
new file mode 100644
index 00000000..f524d100
--- /dev/null
+++ b/remote/modules/smbclient/smbclient.conf.opensuse
@@ -0,0 +1,9 @@
+REQUIRED_INSTALLED_PACKAGES="
+ samba-client
+"
+REQUIRED_CONTENT_PACKAGES="
+ samba-client
+"
+REQUIRED_FILES="
+ /usr/lib/cups/backend/smb
+"
diff --git a/remote/modules/smbclient/smbclient.conf.ubuntu b/remote/modules/smbclient/smbclient.conf.ubuntu
new file mode 100644
index 00000000..4b33f4bd
--- /dev/null
+++ b/remote/modules/smbclient/smbclient.conf.ubuntu
@@ -0,0 +1,9 @@
+REQUIRED_INSTALLED_PACKAGES="
+ smbclient
+"
+REQUIRED_CONTENT_PACKAGES="
+ smbclient
+"
+REQUIRED_FILES="
+ /usr/lib/cups/backend/smb
+"
diff --git a/remote/modules/splash-openslx/README b/remote/modules/splash-openslx/README
new file mode 100644
index 00000000..6e186aa2
--- /dev/null
+++ b/remote/modules/splash-openslx/README
@@ -0,0 +1,6 @@
+Howto:
+To display the splash screen, you need to add this
+module to your stage31 obviously, and also add
+vga=current quiet splash
+to your KCL. Feel free to copy this module
+and replace the splash.ppm with your own.
diff --git a/remote/modules/splash-openslx/data/etc/splash.ppm b/remote/modules/splash-openslx/data/etc/splash.ppm
new file mode 100644
index 00000000..cb1c5637
--- /dev/null
+++ b/remote/modules/splash-openslx/data/etc/splash.ppm
Binary files differ
diff --git a/remote/modules/splash-openslx/splash-openslx.build b/remote/modules/splash-openslx/splash-openslx.build
new file mode 100644
index 00000000..ccb7c4e1
--- /dev/null
+++ b/remote/modules/splash-openslx/splash-openslx.build
@@ -0,0 +1,13 @@
+
+fetch_source () {
+ :
+}
+
+build () {
+ :
+}
+
+post_copy() {
+ :
+}
+
diff --git a/remote/modules/splash-openslx/splash-openslx.conf b/remote/modules/splash-openslx/splash-openslx.conf
new file mode 100644
index 00000000..6778a258
--- /dev/null
+++ b/remote/modules/splash-openslx/splash-openslx.conf
@@ -0,0 +1 @@
+# (void)
diff --git a/remote/modules/sshd/data/etc/tmpfiles.d/sshd.conf b/remote/modules/sshd/data/etc/tmpfiles.d/sshd.conf
index d4aa9a67..77e6e459 100644
--- a/remote/modules/sshd/data/etc/tmpfiles.d/sshd.conf
+++ b/remote/modules/sshd/data/etc/tmpfiles.d/sshd.conf
@@ -1,2 +1,2 @@
-D /var/run/sshd 0755 root root
+d /var/run/sshd 0755 root root
diff --git a/remote/modules/swiss/data/etc/X11/xorg.conf.d/90-keytable.conf b/remote/modules/swiss/data/etc/X11/xorg.conf.d/90-keytable.conf
new file mode 100644
index 00000000..6a3e0fd3
--- /dev/null
+++ b/remote/modules/swiss/data/etc/X11/xorg.conf.d/90-keytable.conf
@@ -0,0 +1,5 @@
+Section "InputClass"
+ Identifier "LocalKeyboard"
+ MatchIsKeyboard "on"
+ Option "XkbLayout" "ch"
+EndSection
diff --git a/remote/modules/swiss/data/etc/default/locale b/remote/modules/swiss/data/etc/default/locale
new file mode 100644
index 00000000..b7569b66
--- /dev/null
+++ b/remote/modules/swiss/data/etc/default/locale
@@ -0,0 +1 @@
+LANG="ch_DE.UTF-8"
diff --git a/remote/modules/swiss/data/etc/systemd/system/basic.target.wants/load-swiss-keymap.service b/remote/modules/swiss/data/etc/systemd/system/basic.target.wants/load-swiss-keymap.service
new file mode 100644
index 00000000..0d46d95a
--- /dev/null
+++ b/remote/modules/swiss/data/etc/systemd/system/basic.target.wants/load-swiss-keymap.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Setup swiss keyboard layout
+DefaultDependencies=no
+After=sysinit.target
+Before=shutdown.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/opt/openslx/scripts/systemd-load_swiss_keymaps
diff --git a/remote/modules/swiss/data/etc/systemd/system/load-swiss-keymap.service b/remote/modules/swiss/data/etc/systemd/system/load-swiss-keymap.service
new file mode 100644
index 00000000..0d46d95a
--- /dev/null
+++ b/remote/modules/swiss/data/etc/systemd/system/load-swiss-keymap.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Setup swiss keyboard layout
+DefaultDependencies=no
+After=sysinit.target
+Before=shutdown.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/opt/openslx/scripts/systemd-load_swiss_keymaps
diff --git a/remote/modules/swiss/data/opt/openslx/keymaps/compose.inc b/remote/modules/swiss/data/opt/openslx/keymaps/compose.inc
new file mode 100644
index 00000000..c86d2dab
--- /dev/null
+++ b/remote/modules/swiss/data/opt/openslx/keymaps/compose.inc
@@ -0,0 +1,8 @@
+# We map the PrintScreen key (useless) and Alt+AltGr to the Compose key...
+# A really useful thing not found on normal keyboards. :/
+#
+# (c) 2001 Bernhard Rosenkränzer <bero@arklinux.org>
+
+keycode 99 = Compose # SysRq/PrintScrn
+keycode 100 = AltGr
+alt keycode 100 = Compose
diff --git a/remote/modules/swiss/data/opt/openslx/keymaps/german_qwertz_compose_keyboard_translation.map b/remote/modules/swiss/data/opt/openslx/keymaps/german_qwertz_compose_keyboard_translation.map
new file mode 100644
index 00000000..9d0c73d0
--- /dev/null
+++ b/remote/modules/swiss/data/opt/openslx/keymaps/german_qwertz_compose_keyboard_translation.map
@@ -0,0 +1,967 @@
+keymaps 0-2,4-6,8-10,12
+keycode 1 = Escape Escape
+ alt keycode 1 = Meta_Escape
+ shift alt keycode 1 = Meta_Escape
+keycode 2 = one exclam
+ alt keycode 2 = Meta_one
+ shift alt keycode 2 = Meta_exclam
+keycode 3 = two quotedbl twosuperior nul
+ alt keycode 3 = Meta_two
+ shift alt keycode 3 = Meta_quotedbl
+ control alt keycode 3 = Meta_nul
+keycode 4 = three section threesuperior Escape
+ alt keycode 4 = Meta_three
+ control alt keycode 4 = Meta_Escape
+keycode 5 = four dollar
+ alt keycode 5 = Meta_four
+ shift alt keycode 5 = Meta_dollar
+keycode 6 = five percent
+ alt keycode 6 = Meta_five
+ shift alt keycode 6 = Meta_percent
+keycode 7 = six ampersand
+ control keycode 7 = Control_asciicircum
+ alt keycode 7 = Meta_six
+ shift alt keycode 7 = Meta_ampersand
+keycode 8 = seven slash braceleft
+ alt keycode 8 = Meta_seven
+ shift alt keycode 8 = Meta_slash
+ altgr alt keycode 8 = Meta_braceleft
+keycode 9 = eight parenleft bracketleft
+ alt keycode 9 = Meta_eight
+ shift alt keycode 9 = Meta_parenleft
+ altgr alt keycode 9 = Meta_bracketleft
+keycode 10 = nine parenright bracketright
+ altgr control keycode 10 = Control_bracketright
+ alt keycode 10 = Meta_nine
+ shift alt keycode 10 = Meta_parenright
+ altgr alt keycode 10 = Meta_bracketright
+keycode 11 = zero equal braceright
+ alt keycode 11 = Meta_zero
+ shift alt keycode 11 = Meta_equal
+ altgr alt keycode 11 = Meta_braceright
+keycode 12 = ssharp question backslash
+ altgr control keycode 12 = Control_backslash
+ shift alt keycode 12 = Meta_question
+ altgr alt keycode 12 = Meta_backslash
+keycode 13 = apostrophe grave
+ alt keycode 13 = 0x08b4
+ shift alt keycode 13 = Meta_grave
+keycode 14 = Delete Delete
+ alt keycode 14 = Meta_Delete
+ shift alt keycode 14 = Meta_Delete
+keycode 15 = Tab Meta_Tab
+ alt keycode 15 = Meta_Tab
+keycode 16 = +q +Q at Control_q Control_q nul Meta_q Meta_Q Meta_at Meta_Control_q
+keycode 17 = w
+keycode 18 = +e +E currency Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_Control_e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = z
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+keycode 26 = +udiaeresis +Udiaeresis
+keycode 27 = plus asterisk asciitilde
+ alt keycode 27 = Meta_plus
+ shift alt keycode 27 = Meta_asterisk
+keycode 28 = Return
+ alt keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+keycode 39 = +odiaeresis +Odiaeresis
+keycode 40 = +adiaeresis +Adiaeresis
+keycode 41 = asciicircum degree Meta_asciicircum Control_asciicircum
+ control alt keycode 41 = Meta_Control_asciicircum
+keycode 42 = Shift
+keycode 43 = numbersign apostrophe
+ alt keycode 43 = Meta_numbersign
+ shift alt keycode 43 = Meta_apostrophe
+keycode 44 = y
+keycode 45 = x
+keycode 46 = +c +C cent Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_Control_c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = +m +M mu Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_Control_m
+keycode 51 = comma semicolon
+ alt keycode 51 = Meta_comma
+ shift alt keycode 51 = Meta_semicolon
+keycode 52 = period colon
+ alt keycode 52 = Meta_period
+ shift alt keycode 52 = Meta_colon
+keycode 53 = minus underscore Meta_minus
+ shift control keycode 53 = Control_underscore
+ alt keycode 53 = Meta_minus
+ shift alt keycode 53 = Meta_underscore
+keycode 54 = Shift
+keycode 55 = KP_Multiply
+ altgr keycode 55 = Hex_C
+keycode 56 = Alt
+keycode 57 = space space Meta_space nul
+ alt keycode 57 = Meta_space
+ shift alt keycode 57 = Meta_space
+ control alt keycode 57 = Meta_nul
+keycode 58 = Caps_Lock
+keycode 59 = F1 F13 Console_13 F25
+ alt keycode 59 = Console_1
+ control alt keycode 59 = Console_1
+keycode 60 = F2 F14 Console_14 F26
+ alt keycode 60 = Console_2
+ control alt keycode 60 = Console_2
+keycode 61 = F3 F15 Console_15 F27
+ alt keycode 61 = Console_3
+ control alt keycode 61 = Console_3
+keycode 62 = F4 F16 Console_16 F28
+ alt keycode 62 = Console_4
+ control alt keycode 62 = Console_4
+keycode 63 = F5 F17 Console_17 F29
+ alt keycode 63 = Console_5
+ control alt keycode 63 = Console_5
+keycode 64 = F6 F18 Console_18 F30
+ alt keycode 64 = Console_6
+ control alt keycode 64 = Console_6
+keycode 65 = F7 F19 Console_19 F31
+ alt keycode 65 = Console_7
+ control alt keycode 65 = Console_7
+keycode 66 = F8 F20 Console_20 F32
+ alt keycode 66 = Console_8
+ control alt keycode 66 = Console_8
+keycode 67 = F9 F21 Console_21 F33
+ alt keycode 67 = Console_9
+ control alt keycode 67 = Console_9
+keycode 68 = F10 F22 Console_22 F34
+ alt keycode 68 = Console_10
+ control alt keycode 68 = Console_10
+keycode 69 = Num_Lock
+ altgr keycode 69 = Hex_A
+keycode 70 = Scroll_Lock Show_Memory Show_Registers Show_State
+ alt keycode 70 = Scroll_Lock
+keycode 71 = KP_7
+ altgr keycode 71 = Hex_7
+ alt keycode 71 = Ascii_7
+keycode 72 = KP_8
+ altgr keycode 72 = Hex_8
+ alt keycode 72 = Ascii_8
+keycode 73 = KP_9
+ altgr keycode 73 = Hex_9
+ alt keycode 73 = Ascii_9
+keycode 74 = KP_Subtract
+ altgr keycode 74 = Hex_D
+keycode 75 = KP_4
+ altgr keycode 75 = Hex_4
+ alt keycode 75 = Ascii_4
+keycode 76 = KP_5
+ altgr keycode 76 = Hex_5
+ alt keycode 76 = Ascii_5
+keycode 77 = KP_6
+ altgr keycode 77 = Hex_6
+ alt keycode 77 = Ascii_6
+keycode 78 = KP_Add
+ altgr keycode 78 = Hex_E
+keycode 79 = KP_1
+ altgr keycode 79 = Hex_1
+ alt keycode 79 = Ascii_1
+keycode 80 = KP_2
+ altgr keycode 80 = Hex_2
+ alt keycode 80 = Ascii_2
+keycode 81 = KP_3
+ altgr keycode 81 = Hex_3
+ alt keycode 81 = Ascii_3
+keycode 82 = KP_0
+ altgr keycode 82 = Hex_0
+ alt keycode 82 = Ascii_0
+keycode 83 = KP_Comma
+ altgr control keycode 83 = Boot
+ control alt keycode 83 = Boot
+keycode 84 = Last_Console
+keycode 85 =
+keycode 86 = less greater bar
+ alt keycode 86 = Meta_less
+ shift alt keycode 86 = Meta_greater
+ altgr alt keycode 86 = Meta_bar
+keycode 87 = F11 F23 Console_23 F35
+ alt keycode 87 = Console_11
+ control alt keycode 87 = Console_11
+keycode 88 = F12 F24 Console_24 F36
+ alt keycode 88 = Console_12
+ control alt keycode 88 = Console_12
+keycode 89 =
+keycode 90 =
+keycode 91 =
+keycode 92 =
+keycode 93 =
+keycode 94 =
+keycode 95 =
+keycode 96 = KP_Enter
+ altgr keycode 96 = Hex_F
+keycode 97 = Control
+keycode 98 = KP_Divide
+ altgr keycode 98 = Hex_B
+keycode 99 = Compose
+ control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
+ control alt keycode 99 = Meta_Control_backslash
+keycode 100 = AltGr
+ alt keycode 100 = Compose
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+ alt keycode 103 = KeyboardSignal
+keycode 104 = Prior
+ shift keycode 104 = Scroll_Backward
+keycode 105 = Left
+ alt keycode 105 = Decr_Console
+keycode 106 = Right
+ alt keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+ shift keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Remove
+ altgr control keycode 111 = Boot
+ control alt keycode 111 = Boot
+keycode 112 = Macro
+ altgr control keycode 112 = VoidSymbol
+ shift alt keycode 112 = VoidSymbol
+ altgr alt keycode 112 = VoidSymbol
+keycode 113 = F13
+ altgr control keycode 113 = VoidSymbol
+ shift alt keycode 113 = VoidSymbol
+ altgr alt keycode 113 = VoidSymbol
+keycode 114 = F14
+ altgr control keycode 114 = VoidSymbol
+ shift alt keycode 114 = VoidSymbol
+ altgr alt keycode 114 = VoidSymbol
+keycode 115 = Help
+ altgr control keycode 115 = VoidSymbol
+ shift alt keycode 115 = VoidSymbol
+ altgr alt keycode 115 = VoidSymbol
+keycode 116 = Do
+ altgr control keycode 116 = VoidSymbol
+ shift alt keycode 116 = VoidSymbol
+ altgr alt keycode 116 = VoidSymbol
+keycode 117 = F17
+ altgr control keycode 117 = VoidSymbol
+ shift alt keycode 117 = VoidSymbol
+ altgr alt keycode 117 = VoidSymbol
+keycode 118 = KP_MinPlus
+ altgr control keycode 118 = VoidSymbol
+ shift alt keycode 118 = VoidSymbol
+ altgr alt keycode 118 = VoidSymbol
+keycode 119 = Pause
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+keycode 128 = nul
+ altgr control keycode 128 = VoidSymbol
+ shift alt keycode 128 = VoidSymbol
+ altgr alt keycode 128 = VoidSymbol
+keycode 129 = nul
+ altgr control keycode 129 = VoidSymbol
+ shift alt keycode 129 = VoidSymbol
+ altgr alt keycode 129 = VoidSymbol
+keycode 130 = nul
+ altgr control keycode 130 = VoidSymbol
+ shift alt keycode 130 = VoidSymbol
+ altgr alt keycode 130 = VoidSymbol
+keycode 131 = nul
+ altgr control keycode 131 = VoidSymbol
+ shift alt keycode 131 = VoidSymbol
+ altgr alt keycode 131 = VoidSymbol
+keycode 132 = nul
+ altgr control keycode 132 = VoidSymbol
+ shift alt keycode 132 = VoidSymbol
+ altgr alt keycode 132 = VoidSymbol
+keycode 133 = nul
+ altgr control keycode 133 = VoidSymbol
+ shift alt keycode 133 = VoidSymbol
+ altgr alt keycode 133 = VoidSymbol
+keycode 134 = nul
+ altgr control keycode 134 = VoidSymbol
+ shift alt keycode 134 = VoidSymbol
+ altgr alt keycode 134 = VoidSymbol
+keycode 135 = nul
+ altgr control keycode 135 = VoidSymbol
+ shift alt keycode 135 = VoidSymbol
+ altgr alt keycode 135 = VoidSymbol
+keycode 136 = nul
+ altgr control keycode 136 = VoidSymbol
+ shift alt keycode 136 = VoidSymbol
+ altgr alt keycode 136 = VoidSymbol
+keycode 137 = nul
+ altgr control keycode 137 = VoidSymbol
+ shift alt keycode 137 = VoidSymbol
+ altgr alt keycode 137 = VoidSymbol
+keycode 138 = nul
+ altgr control keycode 138 = VoidSymbol
+ shift alt keycode 138 = VoidSymbol
+ altgr alt keycode 138 = VoidSymbol
+keycode 139 = nul
+ altgr control keycode 139 = VoidSymbol
+ shift alt keycode 139 = VoidSymbol
+ altgr alt keycode 139 = VoidSymbol
+keycode 140 = nul
+ altgr control keycode 140 = VoidSymbol
+ shift alt keycode 140 = VoidSymbol
+ altgr alt keycode 140 = VoidSymbol
+keycode 141 = nul
+ altgr control keycode 141 = VoidSymbol
+ shift alt keycode 141 = VoidSymbol
+ altgr alt keycode 141 = VoidSymbol
+keycode 142 = nul
+ altgr control keycode 142 = VoidSymbol
+ shift alt keycode 142 = VoidSymbol
+ altgr alt keycode 142 = VoidSymbol
+keycode 143 = nul
+ altgr control keycode 143 = VoidSymbol
+ shift alt keycode 143 = VoidSymbol
+ altgr alt keycode 143 = VoidSymbol
+keycode 144 = nul
+ altgr control keycode 144 = VoidSymbol
+ shift alt keycode 144 = VoidSymbol
+ altgr alt keycode 144 = VoidSymbol
+keycode 145 = nul
+ altgr control keycode 145 = VoidSymbol
+ shift alt keycode 145 = VoidSymbol
+ altgr alt keycode 145 = VoidSymbol
+keycode 146 = nul
+ altgr control keycode 146 = VoidSymbol
+ shift alt keycode 146 = VoidSymbol
+ altgr alt keycode 146 = VoidSymbol
+keycode 147 = nul
+ altgr control keycode 147 = VoidSymbol
+ shift alt keycode 147 = VoidSymbol
+ altgr alt keycode 147 = VoidSymbol
+keycode 148 = nul
+ altgr control keycode 148 = VoidSymbol
+ shift alt keycode 148 = VoidSymbol
+ altgr alt keycode 148 = VoidSymbol
+keycode 149 = nul
+ altgr control keycode 149 = VoidSymbol
+ shift alt keycode 149 = VoidSymbol
+ altgr alt keycode 149 = VoidSymbol
+keycode 150 = nul
+ altgr control keycode 150 = VoidSymbol
+ shift alt keycode 150 = VoidSymbol
+ altgr alt keycode 150 = VoidSymbol
+keycode 151 = nul
+ altgr control keycode 151 = VoidSymbol
+ shift alt keycode 151 = VoidSymbol
+ altgr alt keycode 151 = VoidSymbol
+keycode 152 = nul
+ altgr control keycode 152 = VoidSymbol
+ shift alt keycode 152 = VoidSymbol
+ altgr alt keycode 152 = VoidSymbol
+keycode 153 = nul
+ altgr control keycode 153 = VoidSymbol
+ shift alt keycode 153 = VoidSymbol
+ altgr alt keycode 153 = VoidSymbol
+keycode 154 = nul
+ altgr control keycode 154 = VoidSymbol
+ shift alt keycode 154 = VoidSymbol
+ altgr alt keycode 154 = VoidSymbol
+keycode 155 = nul
+ altgr control keycode 155 = VoidSymbol
+ shift alt keycode 155 = VoidSymbol
+ altgr alt keycode 155 = VoidSymbol
+keycode 156 = nul
+ altgr control keycode 156 = VoidSymbol
+ shift alt keycode 156 = VoidSymbol
+ altgr alt keycode 156 = VoidSymbol
+keycode 157 = nul
+ altgr control keycode 157 = VoidSymbol
+ shift alt keycode 157 = VoidSymbol
+ altgr alt keycode 157 = VoidSymbol
+keycode 158 = nul
+ altgr control keycode 158 = VoidSymbol
+ shift alt keycode 158 = VoidSymbol
+ altgr alt keycode 158 = VoidSymbol
+keycode 159 = nul
+ altgr control keycode 159 = VoidSymbol
+ shift alt keycode 159 = VoidSymbol
+ altgr alt keycode 159 = VoidSymbol
+keycode 160 = nul
+ altgr control keycode 160 = VoidSymbol
+ shift alt keycode 160 = VoidSymbol
+ altgr alt keycode 160 = VoidSymbol
+keycode 161 = nul
+ altgr control keycode 161 = VoidSymbol
+ shift alt keycode 161 = VoidSymbol
+ altgr alt keycode 161 = VoidSymbol
+keycode 162 = nul
+ altgr control keycode 162 = VoidSymbol
+ shift alt keycode 162 = VoidSymbol
+ altgr alt keycode 162 = VoidSymbol
+keycode 163 = nul
+ altgr control keycode 163 = VoidSymbol
+ shift alt keycode 163 = VoidSymbol
+ altgr alt keycode 163 = VoidSymbol
+keycode 164 = nul
+ altgr control keycode 164 = VoidSymbol
+ shift alt keycode 164 = VoidSymbol
+ altgr alt keycode 164 = VoidSymbol
+keycode 165 = nul
+ altgr control keycode 165 = VoidSymbol
+ shift alt keycode 165 = VoidSymbol
+ altgr alt keycode 165 = VoidSymbol
+keycode 166 = nul
+ altgr control keycode 166 = VoidSymbol
+ shift alt keycode 166 = VoidSymbol
+ altgr alt keycode 166 = VoidSymbol
+keycode 167 = nul
+ altgr control keycode 167 = VoidSymbol
+ shift alt keycode 167 = VoidSymbol
+ altgr alt keycode 167 = VoidSymbol
+keycode 168 = nul
+ altgr control keycode 168 = VoidSymbol
+ shift alt keycode 168 = VoidSymbol
+ altgr alt keycode 168 = VoidSymbol
+keycode 169 = nul
+ altgr control keycode 169 = VoidSymbol
+ shift alt keycode 169 = VoidSymbol
+ altgr alt keycode 169 = VoidSymbol
+keycode 170 = nul
+ altgr control keycode 170 = VoidSymbol
+ shift alt keycode 170 = VoidSymbol
+ altgr alt keycode 170 = VoidSymbol
+keycode 171 = nul
+ altgr control keycode 171 = VoidSymbol
+ shift alt keycode 171 = VoidSymbol
+ altgr alt keycode 171 = VoidSymbol
+keycode 172 = nul
+ altgr control keycode 172 = VoidSymbol
+ shift alt keycode 172 = VoidSymbol
+ altgr alt keycode 172 = VoidSymbol
+keycode 173 = nul
+ altgr control keycode 173 = VoidSymbol
+ shift alt keycode 173 = VoidSymbol
+ altgr alt keycode 173 = VoidSymbol
+keycode 174 = nul
+ altgr control keycode 174 = VoidSymbol
+ shift alt keycode 174 = VoidSymbol
+ altgr alt keycode 174 = VoidSymbol
+keycode 175 = nul
+ altgr control keycode 175 = VoidSymbol
+ shift alt keycode 175 = VoidSymbol
+ altgr alt keycode 175 = VoidSymbol
+keycode 176 = nul
+ altgr control keycode 176 = VoidSymbol
+ shift alt keycode 176 = VoidSymbol
+ altgr alt keycode 176 = VoidSymbol
+keycode 177 = nul
+ altgr control keycode 177 = VoidSymbol
+ shift alt keycode 177 = VoidSymbol
+ altgr alt keycode 177 = VoidSymbol
+keycode 178 = nul
+ altgr control keycode 178 = VoidSymbol
+ shift alt keycode 178 = VoidSymbol
+ altgr alt keycode 178 = VoidSymbol
+keycode 179 = nul
+ altgr control keycode 179 = VoidSymbol
+ shift alt keycode 179 = VoidSymbol
+ altgr alt keycode 179 = VoidSymbol
+keycode 180 = nul
+ altgr control keycode 180 = VoidSymbol
+ shift alt keycode 180 = VoidSymbol
+ altgr alt keycode 180 = VoidSymbol
+keycode 181 = nul
+ altgr control keycode 181 = VoidSymbol
+ shift alt keycode 181 = VoidSymbol
+ altgr alt keycode 181 = VoidSymbol
+keycode 182 = nul
+ altgr control keycode 182 = VoidSymbol
+ shift alt keycode 182 = VoidSymbol
+ altgr alt keycode 182 = VoidSymbol
+keycode 183 = nul
+ altgr control keycode 183 = VoidSymbol
+ shift alt keycode 183 = VoidSymbol
+ altgr alt keycode 183 = VoidSymbol
+keycode 184 = nul
+ altgr control keycode 184 = VoidSymbol
+ shift alt keycode 184 = VoidSymbol
+ altgr alt keycode 184 = VoidSymbol
+keycode 185 = nul
+ altgr control keycode 185 = VoidSymbol
+ shift alt keycode 185 = VoidSymbol
+ altgr alt keycode 185 = VoidSymbol
+keycode 186 = nul
+ altgr control keycode 186 = VoidSymbol
+ shift alt keycode 186 = VoidSymbol
+ altgr alt keycode 186 = VoidSymbol
+keycode 187 = nul
+ altgr control keycode 187 = VoidSymbol
+ shift alt keycode 187 = VoidSymbol
+ altgr alt keycode 187 = VoidSymbol
+keycode 188 = nul
+ altgr control keycode 188 = VoidSymbol
+ shift alt keycode 188 = VoidSymbol
+ altgr alt keycode 188 = VoidSymbol
+keycode 189 = nul
+ altgr control keycode 189 = VoidSymbol
+ shift alt keycode 189 = VoidSymbol
+ altgr alt keycode 189 = VoidSymbol
+keycode 190 = nul
+ altgr control keycode 190 = VoidSymbol
+ shift alt keycode 190 = VoidSymbol
+ altgr alt keycode 190 = VoidSymbol
+keycode 191 = nul
+ altgr control keycode 191 = VoidSymbol
+ shift alt keycode 191 = VoidSymbol
+ altgr alt keycode 191 = VoidSymbol
+keycode 192 = nul
+ altgr control keycode 192 = VoidSymbol
+ shift alt keycode 192 = VoidSymbol
+ altgr alt keycode 192 = VoidSymbol
+keycode 193 = nul
+ altgr control keycode 193 = VoidSymbol
+ shift alt keycode 193 = VoidSymbol
+ altgr alt keycode 193 = VoidSymbol
+keycode 194 = nul
+ altgr control keycode 194 = VoidSymbol
+ shift alt keycode 194 = VoidSymbol
+ altgr alt keycode 194 = VoidSymbol
+keycode 195 = nul
+ altgr control keycode 195 = VoidSymbol
+ shift alt keycode 195 = VoidSymbol
+ altgr alt keycode 195 = VoidSymbol
+keycode 196 = nul
+ altgr control keycode 196 = VoidSymbol
+ shift alt keycode 196 = VoidSymbol
+ altgr alt keycode 196 = VoidSymbol
+keycode 197 = nul
+ altgr control keycode 197 = VoidSymbol
+ shift alt keycode 197 = VoidSymbol
+ altgr alt keycode 197 = VoidSymbol
+keycode 198 = nul
+ altgr control keycode 198 = VoidSymbol
+ shift alt keycode 198 = VoidSymbol
+ altgr alt keycode 198 = VoidSymbol
+keycode 199 = nul
+ altgr control keycode 199 = VoidSymbol
+ shift alt keycode 199 = VoidSymbol
+ altgr alt keycode 199 = VoidSymbol
+keycode 200 = nul
+ altgr control keycode 200 = VoidSymbol
+ shift alt keycode 200 = VoidSymbol
+ altgr alt keycode 200 = VoidSymbol
+keycode 201 = nul
+ altgr control keycode 201 = VoidSymbol
+ shift alt keycode 201 = VoidSymbol
+ altgr alt keycode 201 = VoidSymbol
+keycode 202 = nul
+ altgr control keycode 202 = VoidSymbol
+ shift alt keycode 202 = VoidSymbol
+ altgr alt keycode 202 = VoidSymbol
+keycode 203 = nul
+ altgr control keycode 203 = VoidSymbol
+ shift alt keycode 203 = VoidSymbol
+ altgr alt keycode 203 = VoidSymbol
+keycode 204 = nul
+ altgr control keycode 204 = VoidSymbol
+ shift alt keycode 204 = VoidSymbol
+ altgr alt keycode 204 = VoidSymbol
+keycode 205 = nul
+ altgr control keycode 205 = VoidSymbol
+ shift alt keycode 205 = VoidSymbol
+ altgr alt keycode 205 = VoidSymbol
+keycode 206 = nul
+ altgr control keycode 206 = VoidSymbol
+ shift alt keycode 206 = VoidSymbol
+ altgr alt keycode 206 = VoidSymbol
+keycode 207 = nul
+ altgr control keycode 207 = VoidSymbol
+ shift alt keycode 207 = VoidSymbol
+ altgr alt keycode 207 = VoidSymbol
+keycode 208 = nul
+ altgr control keycode 208 = VoidSymbol
+ shift alt keycode 208 = VoidSymbol
+ altgr alt keycode 208 = VoidSymbol
+keycode 209 = nul
+ altgr control keycode 209 = VoidSymbol
+ shift alt keycode 209 = VoidSymbol
+ altgr alt keycode 209 = VoidSymbol
+keycode 210 = nul
+ altgr control keycode 210 = VoidSymbol
+ shift alt keycode 210 = VoidSymbol
+ altgr alt keycode 210 = VoidSymbol
+keycode 211 = nul
+ altgr control keycode 211 = VoidSymbol
+ shift alt keycode 211 = VoidSymbol
+ altgr alt keycode 211 = VoidSymbol
+keycode 212 = nul
+ altgr control keycode 212 = VoidSymbol
+ shift alt keycode 212 = VoidSymbol
+ altgr alt keycode 212 = VoidSymbol
+keycode 213 = nul
+ altgr control keycode 213 = VoidSymbol
+ shift alt keycode 213 = VoidSymbol
+ altgr alt keycode 213 = VoidSymbol
+keycode 214 = nul
+ altgr control keycode 214 = VoidSymbol
+ shift alt keycode 214 = VoidSymbol
+ altgr alt keycode 214 = VoidSymbol
+keycode 215 = nul
+ altgr control keycode 215 = VoidSymbol
+ shift alt keycode 215 = VoidSymbol
+ altgr alt keycode 215 = VoidSymbol
+keycode 216 = nul
+ altgr control keycode 216 = VoidSymbol
+ shift alt keycode 216 = VoidSymbol
+ altgr alt keycode 216 = VoidSymbol
+keycode 217 = nul
+ altgr control keycode 217 = VoidSymbol
+ shift alt keycode 217 = VoidSymbol
+ altgr alt keycode 217 = VoidSymbol
+keycode 218 = nul
+ altgr control keycode 218 = VoidSymbol
+ shift alt keycode 218 = VoidSymbol
+ altgr alt keycode 218 = VoidSymbol
+keycode 219 = nul
+ altgr control keycode 219 = VoidSymbol
+ shift alt keycode 219 = VoidSymbol
+ altgr alt keycode 219 = VoidSymbol
+keycode 220 = nul
+ altgr control keycode 220 = VoidSymbol
+ shift alt keycode 220 = VoidSymbol
+ altgr alt keycode 220 = VoidSymbol
+keycode 221 = nul
+ altgr control keycode 221 = VoidSymbol
+ shift alt keycode 221 = VoidSymbol
+ altgr alt keycode 221 = VoidSymbol
+keycode 222 = nul
+ altgr control keycode 222 = VoidSymbol
+ shift alt keycode 222 = VoidSymbol
+ altgr alt keycode 222 = VoidSymbol
+keycode 223 = nul
+ altgr control keycode 223 = VoidSymbol
+ shift alt keycode 223 = VoidSymbol
+ altgr alt keycode 223 = VoidSymbol
+keycode 224 = nul
+ altgr control keycode 224 = VoidSymbol
+ shift alt keycode 224 = VoidSymbol
+ altgr alt keycode 224 = VoidSymbol
+keycode 225 = nul
+ altgr control keycode 225 = VoidSymbol
+ shift alt keycode 225 = VoidSymbol
+ altgr alt keycode 225 = VoidSymbol
+keycode 226 = nul
+ altgr control keycode 226 = VoidSymbol
+ shift alt keycode 226 = VoidSymbol
+ altgr alt keycode 226 = VoidSymbol
+keycode 227 = nul
+ altgr control keycode 227 = VoidSymbol
+ shift alt keycode 227 = VoidSymbol
+ altgr alt keycode 227 = VoidSymbol
+keycode 228 = nul
+ altgr control keycode 228 = VoidSymbol
+ shift alt keycode 228 = VoidSymbol
+ altgr alt keycode 228 = VoidSymbol
+keycode 229 = nul
+ altgr control keycode 229 = VoidSymbol
+ shift alt keycode 229 = VoidSymbol
+ altgr alt keycode 229 = VoidSymbol
+keycode 230 = nul
+ altgr control keycode 230 = VoidSymbol
+ shift alt keycode 230 = VoidSymbol
+ altgr alt keycode 230 = VoidSymbol
+keycode 231 = nul
+ altgr control keycode 231 = VoidSymbol
+ shift alt keycode 231 = VoidSymbol
+ altgr alt keycode 231 = VoidSymbol
+keycode 232 = nul
+ altgr control keycode 232 = VoidSymbol
+ shift alt keycode 232 = VoidSymbol
+ altgr alt keycode 232 = VoidSymbol
+keycode 233 = nul
+ altgr control keycode 233 = VoidSymbol
+ shift alt keycode 233 = VoidSymbol
+ altgr alt keycode 233 = VoidSymbol
+keycode 234 = nul
+ altgr control keycode 234 = VoidSymbol
+ shift alt keycode 234 = VoidSymbol
+ altgr alt keycode 234 = VoidSymbol
+keycode 235 = nul
+ altgr control keycode 235 = VoidSymbol
+ shift alt keycode 235 = VoidSymbol
+ altgr alt keycode 235 = VoidSymbol
+keycode 236 = nul
+ altgr control keycode 236 = VoidSymbol
+ shift alt keycode 236 = VoidSymbol
+ altgr alt keycode 236 = VoidSymbol
+keycode 237 = nul
+ altgr control keycode 237 = VoidSymbol
+ shift alt keycode 237 = VoidSymbol
+ altgr alt keycode 237 = VoidSymbol
+keycode 238 = nul
+ altgr control keycode 238 = VoidSymbol
+ shift alt keycode 238 = VoidSymbol
+ altgr alt keycode 238 = VoidSymbol
+keycode 239 = nul
+ altgr control keycode 239 = VoidSymbol
+ shift alt keycode 239 = VoidSymbol
+ altgr alt keycode 239 = VoidSymbol
+keycode 240 = nul
+ altgr control keycode 240 = VoidSymbol
+ shift alt keycode 240 = VoidSymbol
+ altgr alt keycode 240 = VoidSymbol
+keycode 241 = nul
+ altgr control keycode 241 = VoidSymbol
+ shift alt keycode 241 = VoidSymbol
+ altgr alt keycode 241 = VoidSymbol
+keycode 242 = nul
+ altgr control keycode 242 = VoidSymbol
+ shift alt keycode 242 = VoidSymbol
+ altgr alt keycode 242 = VoidSymbol
+keycode 243 = nul
+ altgr control keycode 243 = VoidSymbol
+ shift alt keycode 243 = VoidSymbol
+ altgr alt keycode 243 = VoidSymbol
+keycode 244 = nul
+ altgr control keycode 244 = VoidSymbol
+ shift alt keycode 244 = VoidSymbol
+ altgr alt keycode 244 = VoidSymbol
+keycode 245 = nul
+ altgr control keycode 245 = VoidSymbol
+ shift alt keycode 245 = VoidSymbol
+ altgr alt keycode 245 = VoidSymbol
+keycode 246 = nul
+ altgr control keycode 246 = VoidSymbol
+ shift alt keycode 246 = VoidSymbol
+ altgr alt keycode 246 = VoidSymbol
+keycode 247 = nul
+ altgr control keycode 247 = VoidSymbol
+ shift alt keycode 247 = VoidSymbol
+ altgr alt keycode 247 = VoidSymbol
+keycode 248 = nul
+ altgr control keycode 248 = VoidSymbol
+ shift alt keycode 248 = VoidSymbol
+ altgr alt keycode 248 = VoidSymbol
+keycode 249 = nul
+ altgr control keycode 249 = VoidSymbol
+ shift alt keycode 249 = VoidSymbol
+ altgr alt keycode 249 = VoidSymbol
+keycode 250 = nul
+ altgr control keycode 250 = VoidSymbol
+ shift alt keycode 250 = VoidSymbol
+ altgr alt keycode 250 = VoidSymbol
+keycode 251 = nul
+ altgr control keycode 251 = VoidSymbol
+ shift alt keycode 251 = VoidSymbol
+ altgr alt keycode 251 = VoidSymbol
+keycode 252 = nul
+ altgr control keycode 252 = VoidSymbol
+ shift alt keycode 252 = VoidSymbol
+ altgr alt keycode 252 = VoidSymbol
+keycode 253 = nul
+ altgr control keycode 253 = VoidSymbol
+ shift alt keycode 253 = VoidSymbol
+ altgr alt keycode 253 = VoidSymbol
+keycode 254 = nul
+ altgr control keycode 254 = VoidSymbol
+ shift alt keycode 254 = VoidSymbol
+ altgr alt keycode 254 = VoidSymbol
+keycode 255 = nul
+ altgr control keycode 255 = VoidSymbol
+ shift alt keycode 255 = VoidSymbol
+ altgr alt keycode 255 = VoidSymbol
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string Find = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string Select = "\033[4~"
+string Prior = "\033[5~"
+string Next = "\033[6~"
+string Macro = "\033[M"
+string Pause = "\033[P"
+compose '`' 'A' to U+00c0
+compose '`' 'a' to U+00e0
+compose '\'' 'A' to U+00c1
+compose '\'' 'a' to U+00e1
+compose '^' 'A' to U+00c2
+compose '^' 'a' to U+00e2
+compose '~' 'A' to U+00c3
+compose '~' 'a' to U+00e3
+compose '"' 'A' to U+00c4
+compose '"' 'a' to U+00e4
+compose '-' 'a' to U+00aa
+compose '-' 'A' to U+00aa
+compose 'O' 'A' to U+00c5
+compose 'o' 'a' to U+00e5
+compose '0' 'A' to U+00c5
+compose '0' 'a' to U+00e5
+compose 'A' 'A' to U+00c5
+compose 'a' 'a' to U+00e5
+compose '°' 'A' to U+00c5
+compose '°' 'a' to U+00e5
+compose 'A' 'E' to U+00c6
+compose 'a' 'e' to U+00e6
+compose ',' 'C' to U+00c7
+compose ',' 'c' to U+00e7
+compose '^' 'C' to U+00c7
+compose '^' 'c' to U+00e7
+compose '`' 'E' to U+00c8
+compose '`' 'e' to U+00e8
+compose '\'' 'E' to U+00c9
+compose '\'' 'e' to U+00e9
+compose '^' 'E' to U+00ca
+compose '^' 'e' to U+00ea
+compose '"' 'E' to U+00cb
+compose '"' 'e' to U+00eb
+compose '`' 'I' to U+00cc
+compose '`' 'i' to U+00ec
+compose '\'' 'I' to U+00cd
+compose '\'' 'i' to U+00ed
+compose '^' 'I' to U+00ce
+compose '^' 'i' to U+00ee
+compose '"' 'I' to U+00cf
+compose '"' 'i' to U+00ef
+compose '-' 'D' to U+00d0
+compose '-' 'd' to U+00f0
+compose '^' 'D' to U+00d0
+compose '^' 'd' to U+00f0
+compose '~' 'N' to U+00d1
+compose '~' 'n' to U+00f1
+compose '^' 'N' to U+00d1
+compose '^' 'n' to U+00f1
+compose '`' 'O' to U+00d2
+compose '`' 'o' to U+00f2
+compose '\'' 'O' to U+00d3
+compose '\'' 'o' to U+00f3
+compose '^' 'O' to U+00d4
+compose '^' 'o' to U+00f4
+compose '~' 'O' to U+00d5
+compose '~' 'o' to U+00f5
+compose '"' 'O' to U+00d6
+compose '"' 'o' to U+00f6
+compose '/' 'O' to U+00d8
+compose '/' 'o' to U+00f8
+compose '-' 'o' to U+00ba
+compose '-' 'O' to U+00ba
+compose '`' 'U' to U+00d9
+compose '`' 'u' to U+00f9
+compose '\'' 'U' to U+00da
+compose '\'' 'u' to U+00fa
+compose '^' 'U' to U+00db
+compose '^' 'u' to U+00fb
+compose '"' 'U' to U+00dc
+compose '"' 'u' to U+00fc
+compose '\'' 'Y' to U+00dd
+compose '\'' 'y' to U+00fd
+compose 'T' 'H' to U+00de
+compose 't' 'h' to U+00fe
+compose 's' 's' to U+00df
+compose '"' 'y' to U+00ff
+compose 's' 'z' to U+00df
+compose 'n' 'n' to U+00f1
+compose 'n' 'h' to U+00f1
+compose 'N' 'Y' to U+00d1
+compose 'N' 'N' to U+00d1
+compose 'N' 'H' to U+00d1
+compose 'N' 'y' to U+00d1
+compose 'N' 'n' to U+00d1
+compose 'N' 'h' to U+00d1
+compose '-' 'L' to U+00a3
+compose '<' '<' to U+00ab
+compose '>' '>' to U+00bb
+compose '?' '?' to U+00bf
+compose '^' '?' to U+00bf
+compose '!' '!' to U+00a1
+compose '^' '!' to U+00a1
+compose '^' '1' to U+00b9
+compose '^' '2' to U+00b2
+compose '^' '3' to U+00b3
+compose '+' '-' to U+00b1
+compose 'c' '=' to U+00a2
+compose 'c' '/' to U+00a2
+compose '/' 'c' to U+00a2
+compose '-' 'c' to U+00a2
+compose '-' 'C' to U+00a2
+compose '|' 'c' to U+00a2
+compose '|' 'C' to U+00a2
+compose 'L' '=' to U+00a3
+compose '-' 'L' to U+00a3
+compose '-' 'l' to U+00a3
+compose '^' '*' to U+00d7
+compose '^' 'x' to U+00d7
+compose 'x' 'x' to U+00d7
+compose '^' '.' to U+00b7
+compose '.' '.' to U+00b7
+compose '^' '/' to U+00f7
+compose '^' ':' to U+00f7
+compose '-' ':' to U+00f7
+compose ':' '-' to U+00f7
+compose 'Y' '=' to U+00a5
+compose '=' 'Y' to U+00a5
+compose '-' 'Y' to U+00a5
+compose '-' 'l' to U+00a5
+compose '(' 'c' to U+00a9
+compose '"' 'c' to U+00a9
+compose 'O' 'C' to U+00a9
+compose '(' 'C' to U+00a9
+compose 'C' ')' to U+00a9
+compose '-' 'a' to U+00aa
+compose '-' 'A' to U+00aa
+compose '-' 'o' to U+00ba
+compose '-' 'O' to U+00ba
+compose '(' 'r' to U+00ae
+compose '"' 'r' to U+00ae
+compose 'O' 'R' to U+00ae
+compose '(' 'R' to U+00ae
+compose 'R' ')' to U+00ae
+compose 'm' 'u' to U+00b5
+compose 'P' 'P' to U+00b6
+compose '1' '4' to U+00bc
+compose '1' '2' to U+00bd
+compose '3' '4' to U+00be
+compose 'e' '=' to U+00a4
+compose '-' 'e' to U+00a4
+compose '-' 'E' to U+00a4
+compose '=' 'E' to U+00a4
+compose 'v' 'S' to U+00a6
+compose '^' 'S' to U+00a6
+compose 'v' 's' to U+00a8
+compose '^' 's' to U+00a8
+compose 'v' 'Z' to U+00b4
+compose '^' 'Z' to U+00b4
+compose 'v' 'z' to U+00b8
+compose '^' 'z' to U+00b8
+compose 'O' 'E' to U+00bc
+compose 'O' 'e' to U+00bc
+compose 'o' 'e' to U+00bd
+compose '"' 'Y' to U+00be
+compose 'i' 'j' to U+00ff
+compose 'I' 'J' to U+00be
diff --git a/remote/modules/swiss/data/opt/openslx/keymaps/german_qwertz_keyboard_translation.map b/remote/modules/swiss/data/opt/openslx/keymaps/german_qwertz_keyboard_translation.map
new file mode 100644
index 00000000..d5069876
--- /dev/null
+++ b/remote/modules/swiss/data/opt/openslx/keymaps/german_qwertz_keyboard_translation.map
@@ -0,0 +1,809 @@
+keymaps 0-2,4-6,8-10,12
+keycode 1 = Escape Escape
+ alt keycode 1 = Meta_Escape
+ shift alt keycode 1 = Meta_Escape
+keycode 2 = one exclam
+ alt keycode 2 = Meta_one
+ shift alt keycode 2 = Meta_exclam
+keycode 3 = two quotedbl twosuperior nul
+ alt keycode 3 = Meta_two
+ shift alt keycode 3 = Meta_quotedbl
+ control alt keycode 3 = Meta_nul
+keycode 4 = three section threesuperior Escape
+ alt keycode 4 = Meta_three
+ control alt keycode 4 = Meta_Escape
+keycode 5 = four dollar
+ alt keycode 5 = Meta_four
+ shift alt keycode 5 = Meta_dollar
+keycode 6 = five percent
+ alt keycode 6 = Meta_five
+ shift alt keycode 6 = Meta_percent
+keycode 7 = six ampersand
+ control keycode 7 = Control_asciicircum
+ alt keycode 7 = Meta_six
+ shift alt keycode 7 = Meta_ampersand
+keycode 8 = seven slash braceleft
+ alt keycode 8 = Meta_seven
+ shift alt keycode 8 = Meta_slash
+ altgr alt keycode 8 = Meta_braceleft
+keycode 9 = eight parenleft bracketleft
+ alt keycode 9 = Meta_eight
+ shift alt keycode 9 = Meta_parenleft
+ altgr alt keycode 9 = Meta_bracketleft
+keycode 10 = nine parenright bracketright
+ altgr control keycode 10 = Control_bracketright
+ alt keycode 10 = Meta_nine
+ shift alt keycode 10 = Meta_parenright
+ altgr alt keycode 10 = Meta_bracketright
+keycode 11 = zero equal braceright
+ alt keycode 11 = Meta_zero
+ shift alt keycode 11 = Meta_equal
+ altgr alt keycode 11 = Meta_braceright
+keycode 12 = ssharp question backslash
+ altgr control keycode 12 = Control_backslash
+ shift alt keycode 12 = Meta_question
+ altgr alt keycode 12 = Meta_backslash
+keycode 13 = apostrophe grave
+ alt keycode 13 = 0x08b4
+ shift alt keycode 13 = Meta_grave
+keycode 14 = Delete Delete
+ alt keycode 14 = Meta_Delete
+ shift alt keycode 14 = Meta_Delete
+keycode 15 = Tab Meta_Tab
+ alt keycode 15 = Meta_Tab
+keycode 16 = +q +Q at Control_q Control_q nul Meta_q Meta_Q Meta_at Meta_Control_q
+keycode 17 = w
+keycode 18 = +e +E currency Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_Control_e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = z
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+keycode 26 = +udiaeresis +Udiaeresis
+keycode 27 = plus asterisk asciitilde
+ alt keycode 27 = Meta_plus
+ shift alt keycode 27 = Meta_asterisk
+keycode 28 = Return
+ alt keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+keycode 39 = +odiaeresis +Odiaeresis
+keycode 40 = +adiaeresis +Adiaeresis
+keycode 41 = asciicircum degree Meta_asciicircum Control_asciicircum
+ control alt keycode 41 = Meta_Control_asciicircum
+keycode 42 = Shift
+keycode 43 = numbersign apostrophe
+ alt keycode 43 = Meta_numbersign
+ shift alt keycode 43 = Meta_apostrophe
+keycode 44 = y
+keycode 45 = x
+keycode 46 = +c +C cent Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_Control_c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = +m +M mu Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_Control_m
+keycode 51 = comma semicolon
+ alt keycode 51 = Meta_comma
+ shift alt keycode 51 = Meta_semicolon
+keycode 52 = period colon
+ alt keycode 52 = Meta_period
+ shift alt keycode 52 = Meta_colon
+keycode 53 = minus underscore Meta_minus
+ shift control keycode 53 = Control_underscore
+ alt keycode 53 = Meta_minus
+ shift alt keycode 53 = Meta_underscore
+keycode 54 = Shift
+keycode 55 = KP_Multiply
+ altgr keycode 55 = Hex_C
+keycode 56 = Alt
+keycode 57 = space space Meta_space nul
+ alt keycode 57 = Meta_space
+ shift alt keycode 57 = Meta_space
+ control alt keycode 57 = Meta_nul
+keycode 58 = Caps_Lock
+keycode 59 = F1 F13 Console_13 F25
+ alt keycode 59 = Console_1
+ control alt keycode 59 = Console_1
+keycode 60 = F2 F14 Console_14 F26
+ alt keycode 60 = Console_2
+ control alt keycode 60 = Console_2
+keycode 61 = F3 F15 Console_15 F27
+ alt keycode 61 = Console_3
+ control alt keycode 61 = Console_3
+keycode 62 = F4 F16 Console_16 F28
+ alt keycode 62 = Console_4
+ control alt keycode 62 = Console_4
+keycode 63 = F5 F17 Console_17 F29
+ alt keycode 63 = Console_5
+ control alt keycode 63 = Console_5
+keycode 64 = F6 F18 Console_18 F30
+ alt keycode 64 = Console_6
+ control alt keycode 64 = Console_6
+keycode 65 = F7 F19 Console_19 F31
+ alt keycode 65 = Console_7
+ control alt keycode 65 = Console_7
+keycode 66 = F8 F20 Console_20 F32
+ alt keycode 66 = Console_8
+ control alt keycode 66 = Console_8
+keycode 67 = F9 F21 Console_21 F33
+ alt keycode 67 = Console_9
+ control alt keycode 67 = Console_9
+keycode 68 = F10 F22 Console_22 F34
+ alt keycode 68 = Console_10
+ control alt keycode 68 = Console_10
+keycode 69 = Num_Lock
+ altgr keycode 69 = Hex_A
+keycode 70 = Scroll_Lock Show_Memory Show_Registers Show_State
+ alt keycode 70 = Scroll_Lock
+keycode 71 = KP_7
+ altgr keycode 71 = Hex_7
+ alt keycode 71 = Ascii_7
+keycode 72 = KP_8
+ altgr keycode 72 = Hex_8
+ alt keycode 72 = Ascii_8
+keycode 73 = KP_9
+ altgr keycode 73 = Hex_9
+ alt keycode 73 = Ascii_9
+keycode 74 = KP_Subtract
+ altgr keycode 74 = Hex_D
+keycode 75 = KP_4
+ altgr keycode 75 = Hex_4
+ alt keycode 75 = Ascii_4
+keycode 76 = KP_5
+ altgr keycode 76 = Hex_5
+ alt keycode 76 = Ascii_5
+keycode 77 = KP_6
+ altgr keycode 77 = Hex_6
+ alt keycode 77 = Ascii_6
+keycode 78 = KP_Add
+ altgr keycode 78 = Hex_E
+keycode 79 = KP_1
+ altgr keycode 79 = Hex_1
+ alt keycode 79 = Ascii_1
+keycode 80 = KP_2
+ altgr keycode 80 = Hex_2
+ alt keycode 80 = Ascii_2
+keycode 81 = KP_3
+ altgr keycode 81 = Hex_3
+ alt keycode 81 = Ascii_3
+keycode 82 = KP_0
+ altgr keycode 82 = Hex_0
+ alt keycode 82 = Ascii_0
+keycode 83 = KP_Comma
+ altgr control keycode 83 = Boot
+ control alt keycode 83 = Boot
+keycode 84 = Last_Console
+keycode 85 =
+keycode 86 = less greater bar
+ alt keycode 86 = Meta_less
+ shift alt keycode 86 = Meta_greater
+ altgr alt keycode 86 = Meta_bar
+keycode 87 = F11 F23 Console_23 F35
+ alt keycode 87 = Console_11
+ control alt keycode 87 = Console_11
+keycode 88 = F12 F24 Console_24 F36
+ alt keycode 88 = Console_12
+ control alt keycode 88 = Console_12
+keycode 89 =
+keycode 90 =
+keycode 91 =
+keycode 92 =
+keycode 93 =
+keycode 94 =
+keycode 95 =
+keycode 96 = KP_Enter
+ altgr keycode 96 = Hex_F
+keycode 97 = Control
+keycode 98 = KP_Divide
+ altgr keycode 98 = Hex_B
+keycode 99 = Compose
+ control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
+ control alt keycode 99 = Meta_Control_backslash
+keycode 100 = AltGr
+ alt keycode 100 = Compose
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+ alt keycode 103 = KeyboardSignal
+keycode 104 = Prior
+ shift keycode 104 = Scroll_Backward
+keycode 105 = Left
+ alt keycode 105 = Decr_Console
+keycode 106 = Right
+ alt keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+ shift keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Remove
+ altgr control keycode 111 = Boot
+ control alt keycode 111 = Boot
+keycode 112 = Macro
+ altgr control keycode 112 = VoidSymbol
+ shift alt keycode 112 = VoidSymbol
+ altgr alt keycode 112 = VoidSymbol
+keycode 113 = F13
+ altgr control keycode 113 = VoidSymbol
+ shift alt keycode 113 = VoidSymbol
+ altgr alt keycode 113 = VoidSymbol
+keycode 114 = F14
+ altgr control keycode 114 = VoidSymbol
+ shift alt keycode 114 = VoidSymbol
+ altgr alt keycode 114 = VoidSymbol
+keycode 115 = Help
+ altgr control keycode 115 = VoidSymbol
+ shift alt keycode 115 = VoidSymbol
+ altgr alt keycode 115 = VoidSymbol
+keycode 116 = Do
+ altgr control keycode 116 = VoidSymbol
+ shift alt keycode 116 = VoidSymbol
+ altgr alt keycode 116 = VoidSymbol
+keycode 117 = F17
+ altgr control keycode 117 = VoidSymbol
+ shift alt keycode 117 = VoidSymbol
+ altgr alt keycode 117 = VoidSymbol
+keycode 118 = KP_MinPlus
+ altgr control keycode 118 = VoidSymbol
+ shift alt keycode 118 = VoidSymbol
+ altgr alt keycode 118 = VoidSymbol
+keycode 119 = Pause
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+keycode 128 = nul
+ altgr control keycode 128 = VoidSymbol
+ shift alt keycode 128 = VoidSymbol
+ altgr alt keycode 128 = VoidSymbol
+keycode 129 = nul
+ altgr control keycode 129 = VoidSymbol
+ shift alt keycode 129 = VoidSymbol
+ altgr alt keycode 129 = VoidSymbol
+keycode 130 = nul
+ altgr control keycode 130 = VoidSymbol
+ shift alt keycode 130 = VoidSymbol
+ altgr alt keycode 130 = VoidSymbol
+keycode 131 = nul
+ altgr control keycode 131 = VoidSymbol
+ shift alt keycode 131 = VoidSymbol
+ altgr alt keycode 131 = VoidSymbol
+keycode 132 = nul
+ altgr control keycode 132 = VoidSymbol
+ shift alt keycode 132 = VoidSymbol
+ altgr alt keycode 132 = VoidSymbol
+keycode 133 = nul
+ altgr control keycode 133 = VoidSymbol
+ shift alt keycode 133 = VoidSymbol
+ altgr alt keycode 133 = VoidSymbol
+keycode 134 = nul
+ altgr control keycode 134 = VoidSymbol
+ shift alt keycode 134 = VoidSymbol
+ altgr alt keycode 134 = VoidSymbol
+keycode 135 = nul
+ altgr control keycode 135 = VoidSymbol
+ shift alt keycode 135 = VoidSymbol
+ altgr alt keycode 135 = VoidSymbol
+keycode 136 = nul
+ altgr control keycode 136 = VoidSymbol
+ shift alt keycode 136 = VoidSymbol
+ altgr alt keycode 136 = VoidSymbol
+keycode 137 = nul
+ altgr control keycode 137 = VoidSymbol
+ shift alt keycode 137 = VoidSymbol
+ altgr alt keycode 137 = VoidSymbol
+keycode 138 = nul
+ altgr control keycode 138 = VoidSymbol
+ shift alt keycode 138 = VoidSymbol
+ altgr alt keycode 138 = VoidSymbol
+keycode 139 = nul
+ altgr control keycode 139 = VoidSymbol
+ shift alt keycode 139 = VoidSymbol
+ altgr alt keycode 139 = VoidSymbol
+keycode 140 = nul
+ altgr control keycode 140 = VoidSymbol
+ shift alt keycode 140 = VoidSymbol
+ altgr alt keycode 140 = VoidSymbol
+keycode 141 = nul
+ altgr control keycode 141 = VoidSymbol
+ shift alt keycode 141 = VoidSymbol
+ altgr alt keycode 141 = VoidSymbol
+keycode 142 = nul
+ altgr control keycode 142 = VoidSymbol
+ shift alt keycode 142 = VoidSymbol
+ altgr alt keycode 142 = VoidSymbol
+keycode 143 = nul
+ altgr control keycode 143 = VoidSymbol
+ shift alt keycode 143 = VoidSymbol
+ altgr alt keycode 143 = VoidSymbol
+keycode 144 = nul
+ altgr control keycode 144 = VoidSymbol
+ shift alt keycode 144 = VoidSymbol
+ altgr alt keycode 144 = VoidSymbol
+keycode 145 = nul
+ altgr control keycode 145 = VoidSymbol
+ shift alt keycode 145 = VoidSymbol
+ altgr alt keycode 145 = VoidSymbol
+keycode 146 = nul
+ altgr control keycode 146 = VoidSymbol
+ shift alt keycode 146 = VoidSymbol
+ altgr alt keycode 146 = VoidSymbol
+keycode 147 = nul
+ altgr control keycode 147 = VoidSymbol
+ shift alt keycode 147 = VoidSymbol
+ altgr alt keycode 147 = VoidSymbol
+keycode 148 = nul
+ altgr control keycode 148 = VoidSymbol
+ shift alt keycode 148 = VoidSymbol
+ altgr alt keycode 148 = VoidSymbol
+keycode 149 = nul
+ altgr control keycode 149 = VoidSymbol
+ shift alt keycode 149 = VoidSymbol
+ altgr alt keycode 149 = VoidSymbol
+keycode 150 = nul
+ altgr control keycode 150 = VoidSymbol
+ shift alt keycode 150 = VoidSymbol
+ altgr alt keycode 150 = VoidSymbol
+keycode 151 = nul
+ altgr control keycode 151 = VoidSymbol
+ shift alt keycode 151 = VoidSymbol
+ altgr alt keycode 151 = VoidSymbol
+keycode 152 = nul
+ altgr control keycode 152 = VoidSymbol
+ shift alt keycode 152 = VoidSymbol
+ altgr alt keycode 152 = VoidSymbol
+keycode 153 = nul
+ altgr control keycode 153 = VoidSymbol
+ shift alt keycode 153 = VoidSymbol
+ altgr alt keycode 153 = VoidSymbol
+keycode 154 = nul
+ altgr control keycode 154 = VoidSymbol
+ shift alt keycode 154 = VoidSymbol
+ altgr alt keycode 154 = VoidSymbol
+keycode 155 = nul
+ altgr control keycode 155 = VoidSymbol
+ shift alt keycode 155 = VoidSymbol
+ altgr alt keycode 155 = VoidSymbol
+keycode 156 = nul
+ altgr control keycode 156 = VoidSymbol
+ shift alt keycode 156 = VoidSymbol
+ altgr alt keycode 156 = VoidSymbol
+keycode 157 = nul
+ altgr control keycode 157 = VoidSymbol
+ shift alt keycode 157 = VoidSymbol
+ altgr alt keycode 157 = VoidSymbol
+keycode 158 = nul
+ altgr control keycode 158 = VoidSymbol
+ shift alt keycode 158 = VoidSymbol
+ altgr alt keycode 158 = VoidSymbol
+keycode 159 = nul
+ altgr control keycode 159 = VoidSymbol
+ shift alt keycode 159 = VoidSymbol
+ altgr alt keycode 159 = VoidSymbol
+keycode 160 = nul
+ altgr control keycode 160 = VoidSymbol
+ shift alt keycode 160 = VoidSymbol
+ altgr alt keycode 160 = VoidSymbol
+keycode 161 = nul
+ altgr control keycode 161 = VoidSymbol
+ shift alt keycode 161 = VoidSymbol
+ altgr alt keycode 161 = VoidSymbol
+keycode 162 = nul
+ altgr control keycode 162 = VoidSymbol
+ shift alt keycode 162 = VoidSymbol
+ altgr alt keycode 162 = VoidSymbol
+keycode 163 = nul
+ altgr control keycode 163 = VoidSymbol
+ shift alt keycode 163 = VoidSymbol
+ altgr alt keycode 163 = VoidSymbol
+keycode 164 = nul
+ altgr control keycode 164 = VoidSymbol
+ shift alt keycode 164 = VoidSymbol
+ altgr alt keycode 164 = VoidSymbol
+keycode 165 = nul
+ altgr control keycode 165 = VoidSymbol
+ shift alt keycode 165 = VoidSymbol
+ altgr alt keycode 165 = VoidSymbol
+keycode 166 = nul
+ altgr control keycode 166 = VoidSymbol
+ shift alt keycode 166 = VoidSymbol
+ altgr alt keycode 166 = VoidSymbol
+keycode 167 = nul
+ altgr control keycode 167 = VoidSymbol
+ shift alt keycode 167 = VoidSymbol
+ altgr alt keycode 167 = VoidSymbol
+keycode 168 = nul
+ altgr control keycode 168 = VoidSymbol
+ shift alt keycode 168 = VoidSymbol
+ altgr alt keycode 168 = VoidSymbol
+keycode 169 = nul
+ altgr control keycode 169 = VoidSymbol
+ shift alt keycode 169 = VoidSymbol
+ altgr alt keycode 169 = VoidSymbol
+keycode 170 = nul
+ altgr control keycode 170 = VoidSymbol
+ shift alt keycode 170 = VoidSymbol
+ altgr alt keycode 170 = VoidSymbol
+keycode 171 = nul
+ altgr control keycode 171 = VoidSymbol
+ shift alt keycode 171 = VoidSymbol
+ altgr alt keycode 171 = VoidSymbol
+keycode 172 = nul
+ altgr control keycode 172 = VoidSymbol
+ shift alt keycode 172 = VoidSymbol
+ altgr alt keycode 172 = VoidSymbol
+keycode 173 = nul
+ altgr control keycode 173 = VoidSymbol
+ shift alt keycode 173 = VoidSymbol
+ altgr alt keycode 173 = VoidSymbol
+keycode 174 = nul
+ altgr control keycode 174 = VoidSymbol
+ shift alt keycode 174 = VoidSymbol
+ altgr alt keycode 174 = VoidSymbol
+keycode 175 = nul
+ altgr control keycode 175 = VoidSymbol
+ shift alt keycode 175 = VoidSymbol
+ altgr alt keycode 175 = VoidSymbol
+keycode 176 = nul
+ altgr control keycode 176 = VoidSymbol
+ shift alt keycode 176 = VoidSymbol
+ altgr alt keycode 176 = VoidSymbol
+keycode 177 = nul
+ altgr control keycode 177 = VoidSymbol
+ shift alt keycode 177 = VoidSymbol
+ altgr alt keycode 177 = VoidSymbol
+keycode 178 = nul
+ altgr control keycode 178 = VoidSymbol
+ shift alt keycode 178 = VoidSymbol
+ altgr alt keycode 178 = VoidSymbol
+keycode 179 = nul
+ altgr control keycode 179 = VoidSymbol
+ shift alt keycode 179 = VoidSymbol
+ altgr alt keycode 179 = VoidSymbol
+keycode 180 = nul
+ altgr control keycode 180 = VoidSymbol
+ shift alt keycode 180 = VoidSymbol
+ altgr alt keycode 180 = VoidSymbol
+keycode 181 = nul
+ altgr control keycode 181 = VoidSymbol
+ shift alt keycode 181 = VoidSymbol
+ altgr alt keycode 181 = VoidSymbol
+keycode 182 = nul
+ altgr control keycode 182 = VoidSymbol
+ shift alt keycode 182 = VoidSymbol
+ altgr alt keycode 182 = VoidSymbol
+keycode 183 = nul
+ altgr control keycode 183 = VoidSymbol
+ shift alt keycode 183 = VoidSymbol
+ altgr alt keycode 183 = VoidSymbol
+keycode 184 = nul
+ altgr control keycode 184 = VoidSymbol
+ shift alt keycode 184 = VoidSymbol
+ altgr alt keycode 184 = VoidSymbol
+keycode 185 = nul
+ altgr control keycode 185 = VoidSymbol
+ shift alt keycode 185 = VoidSymbol
+ altgr alt keycode 185 = VoidSymbol
+keycode 186 = nul
+ altgr control keycode 186 = VoidSymbol
+ shift alt keycode 186 = VoidSymbol
+ altgr alt keycode 186 = VoidSymbol
+keycode 187 = nul
+ altgr control keycode 187 = VoidSymbol
+ shift alt keycode 187 = VoidSymbol
+ altgr alt keycode 187 = VoidSymbol
+keycode 188 = nul
+ altgr control keycode 188 = VoidSymbol
+ shift alt keycode 188 = VoidSymbol
+ altgr alt keycode 188 = VoidSymbol
+keycode 189 = nul
+ altgr control keycode 189 = VoidSymbol
+ shift alt keycode 189 = VoidSymbol
+ altgr alt keycode 189 = VoidSymbol
+keycode 190 = nul
+ altgr control keycode 190 = VoidSymbol
+ shift alt keycode 190 = VoidSymbol
+ altgr alt keycode 190 = VoidSymbol
+keycode 191 = nul
+ altgr control keycode 191 = VoidSymbol
+ shift alt keycode 191 = VoidSymbol
+ altgr alt keycode 191 = VoidSymbol
+keycode 192 = nul
+ altgr control keycode 192 = VoidSymbol
+ shift alt keycode 192 = VoidSymbol
+ altgr alt keycode 192 = VoidSymbol
+keycode 193 = nul
+ altgr control keycode 193 = VoidSymbol
+ shift alt keycode 193 = VoidSymbol
+ altgr alt keycode 193 = VoidSymbol
+keycode 194 = nul
+ altgr control keycode 194 = VoidSymbol
+ shift alt keycode 194 = VoidSymbol
+ altgr alt keycode 194 = VoidSymbol
+keycode 195 = nul
+ altgr control keycode 195 = VoidSymbol
+ shift alt keycode 195 = VoidSymbol
+ altgr alt keycode 195 = VoidSymbol
+keycode 196 = nul
+ altgr control keycode 196 = VoidSymbol
+ shift alt keycode 196 = VoidSymbol
+ altgr alt keycode 196 = VoidSymbol
+keycode 197 = nul
+ altgr control keycode 197 = VoidSymbol
+ shift alt keycode 197 = VoidSymbol
+ altgr alt keycode 197 = VoidSymbol
+keycode 198 = nul
+ altgr control keycode 198 = VoidSymbol
+ shift alt keycode 198 = VoidSymbol
+ altgr alt keycode 198 = VoidSymbol
+keycode 199 = nul
+ altgr control keycode 199 = VoidSymbol
+ shift alt keycode 199 = VoidSymbol
+ altgr alt keycode 199 = VoidSymbol
+keycode 200 = nul
+ altgr control keycode 200 = VoidSymbol
+ shift alt keycode 200 = VoidSymbol
+ altgr alt keycode 200 = VoidSymbol
+keycode 201 = nul
+ altgr control keycode 201 = VoidSymbol
+ shift alt keycode 201 = VoidSymbol
+ altgr alt keycode 201 = VoidSymbol
+keycode 202 = nul
+ altgr control keycode 202 = VoidSymbol
+ shift alt keycode 202 = VoidSymbol
+ altgr alt keycode 202 = VoidSymbol
+keycode 203 = nul
+ altgr control keycode 203 = VoidSymbol
+ shift alt keycode 203 = VoidSymbol
+ altgr alt keycode 203 = VoidSymbol
+keycode 204 = nul
+ altgr control keycode 204 = VoidSymbol
+ shift alt keycode 204 = VoidSymbol
+ altgr alt keycode 204 = VoidSymbol
+keycode 205 = nul
+ altgr control keycode 205 = VoidSymbol
+ shift alt keycode 205 = VoidSymbol
+ altgr alt keycode 205 = VoidSymbol
+keycode 206 = nul
+ altgr control keycode 206 = VoidSymbol
+ shift alt keycode 206 = VoidSymbol
+ altgr alt keycode 206 = VoidSymbol
+keycode 207 = nul
+ altgr control keycode 207 = VoidSymbol
+ shift alt keycode 207 = VoidSymbol
+ altgr alt keycode 207 = VoidSymbol
+keycode 208 = nul
+ altgr control keycode 208 = VoidSymbol
+ shift alt keycode 208 = VoidSymbol
+ altgr alt keycode 208 = VoidSymbol
+keycode 209 = nul
+ altgr control keycode 209 = VoidSymbol
+ shift alt keycode 209 = VoidSymbol
+ altgr alt keycode 209 = VoidSymbol
+keycode 210 = nul
+ altgr control keycode 210 = VoidSymbol
+ shift alt keycode 210 = VoidSymbol
+ altgr alt keycode 210 = VoidSymbol
+keycode 211 = nul
+ altgr control keycode 211 = VoidSymbol
+ shift alt keycode 211 = VoidSymbol
+ altgr alt keycode 211 = VoidSymbol
+keycode 212 = nul
+ altgr control keycode 212 = VoidSymbol
+ shift alt keycode 212 = VoidSymbol
+ altgr alt keycode 212 = VoidSymbol
+keycode 213 = nul
+ altgr control keycode 213 = VoidSymbol
+ shift alt keycode 213 = VoidSymbol
+ altgr alt keycode 213 = VoidSymbol
+keycode 214 = nul
+ altgr control keycode 214 = VoidSymbol
+ shift alt keycode 214 = VoidSymbol
+ altgr alt keycode 214 = VoidSymbol
+keycode 215 = nul
+ altgr control keycode 215 = VoidSymbol
+ shift alt keycode 215 = VoidSymbol
+ altgr alt keycode 215 = VoidSymbol
+keycode 216 = nul
+ altgr control keycode 216 = VoidSymbol
+ shift alt keycode 216 = VoidSymbol
+ altgr alt keycode 216 = VoidSymbol
+keycode 217 = nul
+ altgr control keycode 217 = VoidSymbol
+ shift alt keycode 217 = VoidSymbol
+ altgr alt keycode 217 = VoidSymbol
+keycode 218 = nul
+ altgr control keycode 218 = VoidSymbol
+ shift alt keycode 218 = VoidSymbol
+ altgr alt keycode 218 = VoidSymbol
+keycode 219 = nul
+ altgr control keycode 219 = VoidSymbol
+ shift alt keycode 219 = VoidSymbol
+ altgr alt keycode 219 = VoidSymbol
+keycode 220 = nul
+ altgr control keycode 220 = VoidSymbol
+ shift alt keycode 220 = VoidSymbol
+ altgr alt keycode 220 = VoidSymbol
+keycode 221 = nul
+ altgr control keycode 221 = VoidSymbol
+ shift alt keycode 221 = VoidSymbol
+ altgr alt keycode 221 = VoidSymbol
+keycode 222 = nul
+ altgr control keycode 222 = VoidSymbol
+ shift alt keycode 222 = VoidSymbol
+ altgr alt keycode 222 = VoidSymbol
+keycode 223 = nul
+ altgr control keycode 223 = VoidSymbol
+ shift alt keycode 223 = VoidSymbol
+ altgr alt keycode 223 = VoidSymbol
+keycode 224 = nul
+ altgr control keycode 224 = VoidSymbol
+ shift alt keycode 224 = VoidSymbol
+ altgr alt keycode 224 = VoidSymbol
+keycode 225 = nul
+ altgr control keycode 225 = VoidSymbol
+ shift alt keycode 225 = VoidSymbol
+ altgr alt keycode 225 = VoidSymbol
+keycode 226 = nul
+ altgr control keycode 226 = VoidSymbol
+ shift alt keycode 226 = VoidSymbol
+ altgr alt keycode 226 = VoidSymbol
+keycode 227 = nul
+ altgr control keycode 227 = VoidSymbol
+ shift alt keycode 227 = VoidSymbol
+ altgr alt keycode 227 = VoidSymbol
+keycode 228 = nul
+ altgr control keycode 228 = VoidSymbol
+ shift alt keycode 228 = VoidSymbol
+ altgr alt keycode 228 = VoidSymbol
+keycode 229 = nul
+ altgr control keycode 229 = VoidSymbol
+ shift alt keycode 229 = VoidSymbol
+ altgr alt keycode 229 = VoidSymbol
+keycode 230 = nul
+ altgr control keycode 230 = VoidSymbol
+ shift alt keycode 230 = VoidSymbol
+ altgr alt keycode 230 = VoidSymbol
+keycode 231 = nul
+ altgr control keycode 231 = VoidSymbol
+ shift alt keycode 231 = VoidSymbol
+ altgr alt keycode 231 = VoidSymbol
+keycode 232 = nul
+ altgr control keycode 232 = VoidSymbol
+ shift alt keycode 232 = VoidSymbol
+ altgr alt keycode 232 = VoidSymbol
+keycode 233 = nul
+ altgr control keycode 233 = VoidSymbol
+ shift alt keycode 233 = VoidSymbol
+ altgr alt keycode 233 = VoidSymbol
+keycode 234 = nul
+ altgr control keycode 234 = VoidSymbol
+ shift alt keycode 234 = VoidSymbol
+ altgr alt keycode 234 = VoidSymbol
+keycode 235 = nul
+ altgr control keycode 235 = VoidSymbol
+ shift alt keycode 235 = VoidSymbol
+ altgr alt keycode 235 = VoidSymbol
+keycode 236 = nul
+ altgr control keycode 236 = VoidSymbol
+ shift alt keycode 236 = VoidSymbol
+ altgr alt keycode 236 = VoidSymbol
+keycode 237 = nul
+ altgr control keycode 237 = VoidSymbol
+ shift alt keycode 237 = VoidSymbol
+ altgr alt keycode 237 = VoidSymbol
+keycode 238 = nul
+ altgr control keycode 238 = VoidSymbol
+ shift alt keycode 238 = VoidSymbol
+ altgr alt keycode 238 = VoidSymbol
+keycode 239 = nul
+ altgr control keycode 239 = VoidSymbol
+ shift alt keycode 239 = VoidSymbol
+ altgr alt keycode 239 = VoidSymbol
+keycode 240 = nul
+ altgr control keycode 240 = VoidSymbol
+ shift alt keycode 240 = VoidSymbol
+ altgr alt keycode 240 = VoidSymbol
+keycode 241 = nul
+ altgr control keycode 241 = VoidSymbol
+ shift alt keycode 241 = VoidSymbol
+ altgr alt keycode 241 = VoidSymbol
+keycode 242 = nul
+ altgr control keycode 242 = VoidSymbol
+ shift alt keycode 242 = VoidSymbol
+ altgr alt keycode 242 = VoidSymbol
+keycode 243 = nul
+ altgr control keycode 243 = VoidSymbol
+ shift alt keycode 243 = VoidSymbol
+ altgr alt keycode 243 = VoidSymbol
+keycode 244 = nul
+ altgr control keycode 244 = VoidSymbol
+ shift alt keycode 244 = VoidSymbol
+ altgr alt keycode 244 = VoidSymbol
+keycode 245 = nul
+ altgr control keycode 245 = VoidSymbol
+ shift alt keycode 245 = VoidSymbol
+ altgr alt keycode 245 = VoidSymbol
+keycode 246 = nul
+ altgr control keycode 246 = VoidSymbol
+ shift alt keycode 246 = VoidSymbol
+ altgr alt keycode 246 = VoidSymbol
+keycode 247 = nul
+ altgr control keycode 247 = VoidSymbol
+ shift alt keycode 247 = VoidSymbol
+ altgr alt keycode 247 = VoidSymbol
+keycode 248 = nul
+ altgr control keycode 248 = VoidSymbol
+ shift alt keycode 248 = VoidSymbol
+ altgr alt keycode 248 = VoidSymbol
+keycode 249 = nul
+ altgr control keycode 249 = VoidSymbol
+ shift alt keycode 249 = VoidSymbol
+ altgr alt keycode 249 = VoidSymbol
+keycode 250 = nul
+ altgr control keycode 250 = VoidSymbol
+ shift alt keycode 250 = VoidSymbol
+ altgr alt keycode 250 = VoidSymbol
+keycode 251 = nul
+ altgr control keycode 251 = VoidSymbol
+ shift alt keycode 251 = VoidSymbol
+ altgr alt keycode 251 = VoidSymbol
+keycode 252 = nul
+ altgr control keycode 252 = VoidSymbol
+ shift alt keycode 252 = VoidSymbol
+ altgr alt keycode 252 = VoidSymbol
+keycode 253 = nul
+ altgr control keycode 253 = VoidSymbol
+ shift alt keycode 253 = VoidSymbol
+ altgr alt keycode 253 = VoidSymbol
+keycode 254 = nul
+ altgr control keycode 254 = VoidSymbol
+ shift alt keycode 254 = VoidSymbol
+ altgr alt keycode 254 = VoidSymbol
+keycode 255 = nul
+ altgr control keycode 255 = VoidSymbol
+ shift alt keycode 255 = VoidSymbol
+ altgr alt keycode 255 = VoidSymbol
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string Find = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string Select = "\033[4~"
+string Prior = "\033[5~"
+string Next = "\033[6~"
+string Macro = "\033[M"
+string Pause = "\033[P"
diff --git a/remote/modules/swiss/data/opt/openslx/keymaps/linux-keys-bare.inc b/remote/modules/swiss/data/opt/openslx/keymaps/linux-keys-bare.inc
new file mode 100644
index 00000000..64a4ee95
--- /dev/null
+++ b/remote/modules/swiss/data/opt/openslx/keymaps/linux-keys-bare.inc
@@ -0,0 +1,163 @@
+# Linux-specific (and language-independent) keys
+#
+# This file describes function keys, console switching keys,
+# keypad, cursor keys, and SysRq, ScrollLock, Pause
+#
+# It does not use the AltGr modifier, so that the user can opt
+# to have both Alt keys produce the same effect.
+# As a consequence, the Hex_* keys are missing, as are
+# control altgr keycode 83 = Boot
+# control altgr keycode 111 = Boot
+#
+# One culture-specific item that will be overridden in many keymaps
+# is the KP_Period: many countries have a KP_Comma instead.
+#
+# One user-preference item will be the function of the Delete key.
+#
+# Old keyboards have 10 function keys, and keymaps have
+# sometimes used shift+F1 = F11, and sometimes shift+F1 = F13.
+# Here we assume an enhanced keyboard (with 12 function keys).
+#
+plain keycode 59 = F1
+plain keycode 60 = F2
+plain keycode 61 = F3
+plain keycode 62 = F4
+plain keycode 63 = F5
+plain keycode 64 = F6
+plain keycode 65 = F7
+plain keycode 66 = F8
+plain keycode 67 = F9
+plain keycode 68 = F10
+plain keycode 87 = F11
+plain keycode 88 = F12
+shift keycode 59 = F13
+shift keycode 60 = F14
+shift keycode 61 = F15
+shift keycode 62 = F16
+shift keycode 63 = F17
+shift keycode 64 = F18
+shift keycode 65 = F19
+shift keycode 66 = F20
+shift keycode 67 = F21
+shift keycode 68 = F22
+shift keycode 87 = F23
+shift keycode 88 = F24
+control keycode 59 = F25
+control keycode 60 = F26
+control keycode 61 = F27
+control keycode 62 = F28
+control keycode 63 = F29
+control keycode 64 = F30
+control keycode 65 = F31
+control keycode 66 = F32
+control keycode 67 = F33
+control keycode 68 = F34
+control keycode 87 = F35
+control keycode 88 = F36
+#
+# The canonical assignment for F37-F48 uses
+# control shift keycode 59 = F37
+# etc. If you want that, load linux-keys-extd.inc
+#
+# Both Alt+Fn and Control+Alt+Fn switch to Console n
+# (in order to please Linux / dosemu / X).
+# Here Consoles 1..12. For 13..24 load linux-keys-extd.inc
+#
+alt keycode 59 = Console_1
+alt keycode 60 = Console_2
+alt keycode 61 = Console_3
+alt keycode 62 = Console_4
+alt keycode 63 = Console_5
+alt keycode 64 = Console_6
+alt keycode 65 = Console_7
+alt keycode 66 = Console_8
+alt keycode 67 = Console_9
+alt keycode 68 = Console_10
+alt keycode 87 = Console_11
+alt keycode 88 = Console_12
+control alt keycode 59 = Console_1
+control alt keycode 60 = Console_2
+control alt keycode 61 = Console_3
+control alt keycode 62 = Console_4
+control alt keycode 63 = Console_5
+control alt keycode 64 = Console_6
+control alt keycode 65 = Console_7
+control alt keycode 66 = Console_8
+control alt keycode 67 = Console_9
+control alt keycode 68 = Console_10
+control alt keycode 87 = Console_11
+control alt keycode 88 = Console_12
+
+#
+# Keypad keys
+#
+keycode 69 = Num_Lock
+keycode 98 = KP_Divide
+keycode 55 = KP_Multiply
+keycode 74 = KP_Subtract
+keycode 78 = KP_Add
+keycode 96 = KP_Enter
+#
+keycode 71 = KP_7
+keycode 72 = KP_8
+keycode 73 = KP_9
+keycode 75 = KP_4
+keycode 76 = KP_5
+keycode 77 = KP_6
+keycode 79 = KP_1
+keycode 80 = KP_2
+keycode 81 = KP_3
+keycode 82 = KP_0
+#
+keycode 83 = KP_Period # or KP_Comma
+control alt keycode 83 = Boot
+#
+alt keycode 71 = Ascii_7
+alt keycode 72 = Ascii_8
+alt keycode 73 = Ascii_9
+alt keycode 75 = Ascii_4
+alt keycode 76 = Ascii_5
+alt keycode 77 = Ascii_6
+alt keycode 79 = Ascii_1
+alt keycode 80 = Ascii_2
+alt keycode 81 = Ascii_3
+alt keycode 82 = Ascii_0
+#
+# The four cursor keys
+#
+keycode 103 = Up
+keycode 105 = Left
+keycode 106 = Right
+keycode 108 = Down
+alt keycode 103 = KeyboardSignal
+alt keycode 105 = Decr_Console
+alt keycode 106 = Incr_Console
+#
+# The six edit keys
+#
+keycode 110 = Insert
+keycode 102 = Home # Find
+keycode 104 = PageUp # Prior
+keycode 111 = Remove
+keycode 107 = End # Select
+keycode 109 = PageDown # Next
+shift keycode 104 = Scroll_Backward
+shift keycode 109 = Scroll_Forward
+control alt keycode 111 = Boot
+#
+# The three system keys
+#
+keycode 84 = Last_Console # Alt+SysRq/PrintScrn
+#keycode 99 = VoidSymbol # SysRq/PrintScrn
+keycode 99 = Compose # SysRq/PrintScrn
+alt keycode 99 = Control_backslash
+control keycode 99 = Control_backslash
+
+plain keycode 70 = Scroll_Lock
+shift keycode 70 = Show_Memory
+control keycode 70 = Show_State
+alt keycode 70 = Show_Registers
+
+keycode 101 = Break # Ctrl+Break/Pause
+keycode 119 = Pause # Break/Pause
+
diff --git a/remote/modules/swiss/data/opt/openslx/keymaps/linux-with-alt-and-altgr.inc b/remote/modules/swiss/data/opt/openslx/keymaps/linux-with-alt-and-altgr.inc
new file mode 100644
index 00000000..71a959e7
--- /dev/null
+++ b/remote/modules/swiss/data/opt/openslx/keymaps/linux-with-alt-and-altgr.inc
@@ -0,0 +1,29 @@
+include "linux-keys-bare"
+
+keycode 100 = AltGr
+alt keycode 100 = Compose
+
+altgr keycode 70 = Show_Registers
+alt keycode 70 = Scroll_Lock
+
+control altgr keycode 83 = Boot
+control altgr keycode 111 = Boot
+
+# Hex keypad keys (for giving a Unicode value in 4 hex digits)
+# Follow lt.map and assign Hex_A .. Hex_F to keypad border.
+altgr keycode 55 = Hex_C
+altgr keycode 69 = Hex_A
+altgr keycode 71 = Hex_7
+altgr keycode 72 = Hex_8
+altgr keycode 73 = Hex_9
+altgr keycode 74 = Hex_D
+altgr keycode 75 = Hex_4
+altgr keycode 76 = Hex_5
+altgr keycode 77 = Hex_6
+altgr keycode 78 = Hex_E
+altgr keycode 79 = Hex_1
+altgr keycode 80 = Hex_2
+altgr keycode 81 = Hex_3
+altgr keycode 82 = Hex_0
+altgr keycode 96 = Hex_F
+altgr keycode 98 = Hex_B
diff --git a/remote/modules/swiss/data/opt/openslx/keymaps/qwertz-layout.inc b/remote/modules/swiss/data/opt/openslx/keymaps/qwertz-layout.inc
new file mode 100644
index 00000000..07535dc7
--- /dev/null
+++ b/remote/modules/swiss/data/opt/openslx/keymaps/qwertz-layout.inc
@@ -0,0 +1,31 @@
+# qwertz-layout
+keycode 16 = q
+keycode 17 = w
+keycode 18 = e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = z
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+#
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+#
+keycode 44 = y
+keycode 45 = x
+keycode 46 = c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = m
+#
+include "compose"
diff --git a/remote/modules/swiss/data/opt/openslx/keymaps/qwertz_de_CH-latin1.map b/remote/modules/swiss/data/opt/openslx/keymaps/qwertz_de_CH-latin1.map
new file mode 100644
index 00000000..598dc449
--- /dev/null
+++ b/remote/modules/swiss/data/opt/openslx/keymaps/qwertz_de_CH-latin1.map
@@ -0,0 +1,16 @@
+# de_CH-latin1.map: Swiss German keymap
+# Due to Björn Jacke <bjacke@suse.de>
+
+include "qwertz_fr_CH-latin1.map"
+
+keycode 26 = udiaeresis egrave bracketleft
+ control keycode 26 = Escape
+ alt keycode 26 = Meta_bracketleft
+keycode 39 = odiaeresis eacute
+ alt keycode 39 = Meta_semicolon
+keycode 40 = adiaeresis agrave braceleft
+ control keycode 40 = Control_g
+ alt keycode 40 = Meta_apostrophe
+
+# corresponding keys in Swiss French have German umlauts and
+# French accented characters exchanged
diff --git a/remote/modules/swiss/data/opt/openslx/keymaps/qwertz_fr_CH-latin1.map b/remote/modules/swiss/data/opt/openslx/keymaps/qwertz_fr_CH-latin1.map
new file mode 100644
index 00000000..667464e8
--- /dev/null
+++ b/remote/modules/swiss/data/opt/openslx/keymaps/qwertz_fr_CH-latin1.map
@@ -0,0 +1,86 @@
+# This used to be sf-latin1.map
+# Renamed because too many Fins thought this was for them.
+keymaps 0-2,4-6,8,12
+include "qwertz-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode 1 = Escape Escape
+ alt keycode 1 = Meta_Escape
+keycode 2 = one plus bar
+ alt keycode 2 = Meta_one
+keycode 3 = two quotedbl at
+ control keycode 3 = nul
+ alt keycode 3 = Meta_two
+keycode 4 = three asterisk numbersign
+ control keycode 4 = Escape
+ alt keycode 4 = Meta_three
+keycode 5 = four ccedilla degree
+ control keycode 5 = Control_backslash
+ alt keycode 5 = Meta_four
+keycode 6 = five percent section
+ control keycode 6 = Control_bracketright
+ alt keycode 6 = Meta_five
+keycode 7 = six ampersand notsign
+ control keycode 7 = Control_asciicircum
+ alt keycode 7 = Meta_six
+keycode 8 = seven slash bar
+ control keycode 8 = Control_underscore
+ alt keycode 8 = Meta_seven
+keycode 9 = eight parenleft cent
+ control keycode 9 = Delete
+ alt keycode 9 = Meta_eight
+keycode 10 = nine parenright
+ alt keycode 10 = Meta_nine
+keycode 11 = zero equal
+ alt keycode 11 = Meta_zero
+keycode 12 = apostrophe question dead_acute
+ control keycode 12 = Control_underscore
+ alt keycode 12 = Meta_minus
+keycode 13 = dead_circumflex dead_grave dead_tilde
+ alt keycode 13 = Meta_equal
+keycode 14 = Delete Delete
+ alt keycode 14 = Meta_Delete
+keycode 15 = Tab Meta_Tab
+ alt keycode 15 = Meta_Tab
+keycode 26 = egrave udiaeresis bracketleft
+ control keycode 26 = Escape
+ alt keycode 26 = Meta_bracketleft
+keycode 27 = dead_diaeresis exclam bracketright
+ control keycode 27 = Control_bracketright
+ alt keycode 27 = Meta_bracketright
+keycode 28 = Return
+ alt keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 39 = eacute odiaeresis
+ alt keycode 39 = Meta_semicolon
+keycode 40 = agrave adiaeresis braceleft
+ control keycode 40 = Control_g
+ alt keycode 40 = Meta_apostrophe
+keycode 41 = section degree
+ control keycode 41 = nul
+ alt keycode 41 = Meta_grave
+keycode 42 = Shift
+keycode 43 = dollar sterling braceright
+ control keycode 43 = Control_backslash
+ alt keycode 43 = Meta_backslash
+keycode 51 = comma semicolon
+ alt keycode 51 = Meta_comma
+keycode 52 = period colon
+ alt keycode 52 = Meta_period
+keycode 53 = minus underscore
+ control keycode 53 = Delete
+ alt keycode 53 = Meta_slash
+ shift control keycode 53 = Control_underscore
+keycode 54 = Shift
+keycode 56 = Alt
+keycode 57 = space space
+ control keycode 57 = nul
+ alt keycode 57 = Meta_space
+keycode 58 = Caps_Lock
+keycode 86 = less greater backslash
+ alt keycode 86 = Meta_less
+keycode 97 = Control
+# adapted to X11 keymap
+altgr keycode 18 = currency
+#altgr keycode 46 = cent
diff --git a/remote/modules/swiss/data/opt/openslx/scripts/systemd-load_swiss_keymaps b/remote/modules/swiss/data/opt/openslx/scripts/systemd-load_swiss_keymaps
new file mode 100755
index 00000000..aadb7a8b
--- /dev/null
+++ b/remote/modules/swiss/data/opt/openslx/scripts/systemd-load_swiss_keymaps
@@ -0,0 +1,13 @@
+#!/bin/ash
+# Script serves as container script for a systemd-call due to the buggyness of several
+# loadkeys-implementations <= kbd (Linux keyboard tools) 1.15.3.
+# This bug can be detected through failure of the command pipe 'dumpkeys|loadkeys' yielding
+# the message "unknown keysym 'compose'.
+
+loadkeys /opt/openslx/keymaps/qwertz_de_CH-latin1.map # insert a keymap without compose lines
+ERR=$?
+
+# if at this point the second keymap insertion failed we pass the errorlevel to
+# systemd - we cannot do more at this point.
+exit $ERR
+
diff --git a/remote/modules/swiss/swiss.build b/remote/modules/swiss/swiss.build
new file mode 100644
index 00000000..1f016f6b
--- /dev/null
+++ b/remote/modules/swiss/swiss.build
@@ -0,0 +1,55 @@
+fetch_source() {
+ :
+}
+
+build() {
+ CH_LOCALES="de_CH.UTF-8 fr_CH.UTF-8 it_CH.UTF-8"
+
+ # Debian-like
+ if [ -e "/etc/locale.gen" ] && ! grep -q -E '^\s*de_CH\.UTF-8' "/etc/locale.gen"; then
+ pinfo "Generating locales..."
+ echo 'de_CH.UTF-8 UTF-8' >> "/etc/locale.gen"
+ echo 'fr_CH.UTF-8 UTF-8' >> "/etc/locale.gen"
+ echo 'it_CH.UTF-8 UTF-8' >> "/etc/locale.gen"
+ locale-gen || perror "Could not generate locales (debian style)"
+ fi
+
+ # Ubuntu's version
+ if [ -d "/var/lib/locales/supported.d" ] && [ ! -d /usr/lib/locale/de_CH.utf8 ]; then
+ pinfo "Generating locales..."
+ grep -q -E -r '^\s*de_CH\.UTF-8' "/var/lib/locales/supported.d" || echo 'de_CH.UTF-8 UTF-8' >> "/var/lib/locales/supported.d/openslx"
+ locale-gen --no-archive --purge "de_CH.UTF-8" || perror "Could not generate locales (ubuntu style)"
+ fi
+ if [ -d "/var/lib/locales/supported.d" ] && [ ! -d /usr/lib/locale/fr_CH.utf8 ]; then
+ pinfo "Generating locales..."
+ grep -q -E -r '^\s*fr_CH\.UTF-8' "/var/lib/locales/supported.d" || echo 'fr_CH.UTF-8 UTF-8' >> "/var/lib/locales/supported.d/openslx"
+ locale-gen --no-archive "fr_CH.UTF-8" || perror "Could not generate locales (ubuntu style)"
+ fi
+ if [ -d "/var/lib/locales/supported.d" ] && [ ! -d /usr/lib/locale/it_CH.utf8 ]; then
+ pinfo "Generating locales..."
+ grep -q -E -r '^\s*it_CH\.UTF-8' "/var/lib/locales/supported.d" || echo 'it_CH.UTF-8 UTF-8' >> "/var/lib/locales/supported.d/openslx"
+ locale-gen --no-archive "it_CH.UTF-8" || perror "Could not generate locales (ubuntu style)"
+ fi
+
+
+ # Put everything we build or get from the system in build dir
+ local FILELIST="$MODULE_DIR/list_copy_build"
+ rm -f "$FILELIST"
+
+ # Copy required directories from source system to build dir
+ for FILE in ${REQUIRED_DIRECTORIES}; do
+ [ ! -d "${FILE}" ] && perror "Missing required directory $FILE"
+ echo ${FILE} >> "${FILELIST}"
+ done
+
+ # Done collecting file and directory names, copy everything
+ tarcopy "$(sort -u "$FILELIST")" "$MODULE_BUILD_DIR"
+
+}
+
+post_copy() {
+ for i in LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION; do
+ add_env $i de_CH.UTF-8 || perror "$i: add_env function failed."
+ done
+}
+
diff --git a/remote/modules/swiss/swiss.conf b/remote/modules/swiss/swiss.conf
new file mode 100644
index 00000000..e2f82123
--- /dev/null
+++ b/remote/modules/swiss/swiss.conf
@@ -0,0 +1,5 @@
+REQUIRED_BINARIES=""
+REQUIRED_FILES=""
+REQUIRED_DIRECTORIES="
+ /usr/share/X11
+"
diff --git a/remote/modules/swiss/swiss.conf.debian b/remote/modules/swiss/swiss.conf.debian
new file mode 100644
index 00000000..a43faea2
--- /dev/null
+++ b/remote/modules/swiss/swiss.conf.debian
@@ -0,0 +1,10 @@
+REQUIRED_INSTALLED_PACKAGES="
+ libX11-data
+"
+REQUIRED_CONTENT_PACKAGES="
+ libX11-data
+"
+REQUIRED_DIRECTORIES+="
+ /usr/lib/locale
+"
+
diff --git a/remote/modules/swiss/swiss.conf.opensuse b/remote/modules/swiss/swiss.conf.opensuse
new file mode 100644
index 00000000..1311ac97
--- /dev/null
+++ b/remote/modules/swiss/swiss.conf.opensuse
@@ -0,0 +1,14 @@
+REQUIRED_INSTALLED_PACKAGES="
+ libX11-data
+ glibc-locale
+"
+REQUIRED_CONTENT_PACKAGES="
+ libX11-data
+"
+REQUIRED_DIRECTORIES+="
+ /usr/lib/locale/de_DE.utf8
+ /usr/lib/locale/de_CH.utf8
+"
+REQUIRED_BINARIES=""
+REQUIRED_FILES=""
+
diff --git a/remote/modules/swiss/swiss.conf.scientific b/remote/modules/swiss/swiss.conf.scientific
new file mode 100644
index 00000000..88ac0d27
--- /dev/null
+++ b/remote/modules/swiss/swiss.conf.scientific
@@ -0,0 +1,8 @@
+REQUIRED_INSTALLED_PACKAGES="
+ libX11-data
+ glibc-common
+"
+REQUIRED_CONTENT_PACKAGES="
+ libX11-data"
+REQUIRED_BINARIES=""
+REQUIRED_FILES=""
diff --git a/remote/modules/swiss/swiss.conf.ubuntu b/remote/modules/swiss/swiss.conf.ubuntu
new file mode 100644
index 00000000..69694914
--- /dev/null
+++ b/remote/modules/swiss/swiss.conf.ubuntu
@@ -0,0 +1,17 @@
+REQUIRED_INSTALLED_PACKAGES="
+ libx11-data
+ language-pack-de
+ language-pack-fr
+ language-pack-it
+ language-pack-en
+"
+REQUIRED_CONTENT_PACKAGES="
+ libx11-data
+"
+REQUIRED_DIRECTORIES+="
+ /usr/lib/locale/C.UTF-8
+ /usr/lib/locale/de_CH.utf8
+ /usr/lib/locale/fr_CH.utf8
+ /usr/lib/locale/it_CH.utf8
+"
+
diff --git a/remote/modules/systemd/data/etc/systemd/system/network-interface@.service b/remote/modules/systemd/data/etc/systemd/system/network-interface@.service
index 73cc6239..ea9cc56e 100644
--- a/remote/modules/systemd/data/etc/systemd/system/network-interface@.service
+++ b/remote/modules/systemd/data/etc/systemd/system/network-interface@.service
@@ -1,7 +1,7 @@
[Unit]
Description=Brings interface %i up
-Wants=udhcpc@%i.service
-Before=udhcpc@%i.service
+Wants=dhcpc@%i.service
+Before=dhcpc@%i.service
[Service]
Type=simple
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/autovt@.service b/remote/modules/systemd/data/usr/lib/systemd/system/autovt@.service
new file mode 120000
index 00000000..fe40e8fd
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/autovt@.service
@@ -0,0 +1 @@
+getty@.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/basic.target b/remote/modules/systemd/data/usr/lib/systemd/system/basic.target
new file mode 100644
index 00000000..6b9cfe4c
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/basic.target
@@ -0,0 +1,14 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Basic System
+Documentation=man:systemd.special(7)
+Requires=sysinit.target
+Wants=sockets.target timers.target paths.target
+After=sysinit.target sockets.target timers.target paths.target
+RefuseManualStart=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/bluetooth.target b/remote/modules/systemd/data/usr/lib/systemd/system/bluetooth.target
new file mode 100644
index 00000000..dd4ae14c
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/bluetooth.target
@@ -0,0 +1,11 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Bluetooth
+Documentation=man:systemd.special(7)
+StopWhenUnneeded=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/console-getty.service b/remote/modules/systemd/data/usr/lib/systemd/system/console-getty.service
new file mode 100644
index 00000000..74a220e2
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/console-getty.service
@@ -0,0 +1,32 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Console Getty
+Documentation=man:agetty(8)
+After=systemd-user-sessions.service plymouth-quit-wait.service
+After=rc-local.service
+Before=getty.target
+
+[Service]
+ExecStart=-/sbin/agetty --noclear -s console 115200,38400,9600
+Type=idle
+Restart=always
+RestartSec=0
+UtmpIdentifier=cons
+TTYPath=/dev/console
+TTYReset=yes
+TTYVHangup=yes
+KillMode=process
+IgnoreSIGPIPE=no
+
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
+# terminates cleanly.
+KillSignal=SIGHUP
+
+[Install]
+WantedBy=getty.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/console-shell.service b/remote/modules/systemd/data/usr/lib/systemd/system/console-shell.service
new file mode 100644
index 00000000..c1548299
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/console-shell.service
@@ -0,0 +1,32 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Console Shell
+Documentation=man:sulogin(8)
+After=systemd-user-sessions.service plymouth-quit-wait.service
+After=rc-local.service
+Before=getty.target
+
+[Service]
+Environment=HOME=/root
+WorkingDirectory=/root
+ExecStart=-/sbin/sulogin
+ExecStopPost=-/usr/bin/systemctl poweroff
+Type=idle
+StandardInput=tty-force
+StandardOutput=inherit
+StandardError=inherit
+KillMode=process
+IgnoreSIGPIPE=no
+
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
+# terminates cleanly.
+KillSignal=SIGHUP
+
+[Install]
+WantedBy=getty.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/ctrl-alt-del.target b/remote/modules/systemd/data/usr/lib/systemd/system/ctrl-alt-del.target
new file mode 120000
index 00000000..f2fde431
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/ctrl-alt-del.target
@@ -0,0 +1 @@
+reboot.target \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/dbus-org.freedesktop.login1.service b/remote/modules/systemd/data/usr/lib/systemd/system/dbus-org.freedesktop.login1.service
new file mode 120000
index 00000000..d87318cc
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/dbus-org.freedesktop.login1.service
@@ -0,0 +1 @@
+systemd-logind.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/debug-shell.service b/remote/modules/systemd/data/usr/lib/systemd/system/debug-shell.service
new file mode 100644
index 00000000..1942c987
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/debug-shell.service
@@ -0,0 +1,33 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Early root shell on /dev/tty9 FOR DEBUGGING ONLY
+Documentation=man:sushell(8)
+DefaultDependencies=no
+IgnoreOnIsolate=yes
+
+[Service]
+Environment=TERM=linux
+ExecStart=/sbin/sushell
+Restart=always
+RestartSec=0
+StandardInput=tty
+TTYPath=/dev/tty9
+TTYReset=yes
+TTYVHangup=yes
+KillMode=process
+IgnoreSIGPIPE=no
+# bash ignores SIGTERM
+KillSignal=SIGHUP
+
+# Unset locale for the console getty since the console has problems
+# displaying some internationalized messages.
+Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
+
+[Install]
+WantedBy=sysinit.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/default.target b/remote/modules/systemd/data/usr/lib/systemd/system/default.target
new file mode 120000
index 00000000..a0aae86a
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/default.target
@@ -0,0 +1 @@
+graphical.target \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/dev-hugepages.mount b/remote/modules/systemd/data/usr/lib/systemd/system/dev-hugepages.mount
new file mode 100644
index 00000000..d711faed
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/dev-hugepages.mount
@@ -0,0 +1,19 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Huge Pages File System
+Documentation=https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+DefaultDependencies=no
+Before=sysinit.target
+ConditionPathExists=/sys/kernel/mm/hugepages
+
+[Mount]
+What=hugetlbfs
+Where=/dev/hugepages
+Type=hugetlbfs
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/dev-mqueue.mount b/remote/modules/systemd/data/usr/lib/systemd/system/dev-mqueue.mount
new file mode 100644
index 00000000..5c11ca7d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/dev-mqueue.mount
@@ -0,0 +1,19 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=POSIX Message Queue File System
+Documentation=man:mq_overview(7)
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+DefaultDependencies=no
+Before=sysinit.target
+ConditionPathExists=/proc/sys/fs/mqueue
+
+[Mount]
+What=mqueue
+Where=/dev/mqueue
+Type=mqueue
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/emergency.service b/remote/modules/systemd/data/usr/lib/systemd/system/emergency.service
new file mode 100644
index 00000000..72fcff2d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/emergency.service
@@ -0,0 +1,31 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Emergency Shell
+Documentation=man:sulogin(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+Before=shutdown.target
+
+[Service]
+Environment=HOME=/root
+WorkingDirectory=/root
+ExecStartPre=-/bin/plymouth quit
+ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\\nto boot into default mode.'
+ExecStart=-/sbin/sulogin
+ExecStopPost=/usr/bin/systemctl --fail --no-block default
+Type=idle
+StandardInput=tty-force
+StandardOutput=inherit
+StandardError=inherit
+KillMode=process
+IgnoreSIGPIPE=no
+
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
+# terminates cleanly.
+KillSignal=SIGHUP
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/emergency.target b/remote/modules/systemd/data/usr/lib/systemd/system/emergency.target
new file mode 100644
index 00000000..0760d66f
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/emergency.target
@@ -0,0 +1,13 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Emergency Mode
+Documentation=man:systemd.special(7)
+Requires=emergency.service
+After=emergency.service
+AllowIsolate=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/final.target b/remote/modules/systemd/data/usr/lib/systemd/system/final.target
new file mode 100644
index 00000000..c7cf18e0
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/final.target
@@ -0,0 +1,13 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Final Step
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+RefuseManualStart=yes
+After=shutdown.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/getty.target b/remote/modules/systemd/data/usr/lib/systemd/system/getty.target
new file mode 100644
index 00000000..c33d4465
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/getty.target
@@ -0,0 +1,11 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Login Prompts
+Documentation=man:systemd.special(7) man:systemd-getty-generator(8)
+Documentation=http://0pointer.de/blog/projects/serial-console.html
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/getty@.service b/remote/modules/systemd/data/usr/lib/systemd/system/getty@.service
new file mode 100644
index 00000000..7e218d11
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/getty@.service
@@ -0,0 +1,49 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Getty on %I
+Documentation=man:agetty(8) man:systemd-getty-generator(8)
+Documentation=http://0pointer.de/blog/projects/serial-console.html
+After=systemd-user-sessions.service plymouth-quit-wait.service
+After=rc-local.service
+
+# If additional gettys are spawned during boot then we should make
+# sure that this is synchronized before getty.target, even though
+# getty.target didn't actually pull it in.
+Before=getty.target
+IgnoreOnIsolate=yes
+
+# On systems without virtual consoles, don't start any getty. (Note
+# that serial gettys are covered by serial-getty@.service, not this
+# unit
+ConditionPathExists=/dev/tty0
+
+[Service]
+# the VT is cleared by TTYVTDisallocate
+ExecStart=-/sbin/agetty --noclear %I 38400 linux
+Type=idle
+Restart=always
+RestartSec=0
+UtmpIdentifier=%I
+TTYPath=/dev/%I
+TTYReset=yes
+TTYVHangup=yes
+TTYVTDisallocate=no
+KillMode=process
+IgnoreSIGPIPE=no
+
+# Unset locale for the console getty since the console has problems
+# displaying some internationalized messages.
+Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
+
+# Some login implementations ignore SIGTERM, so we send SIGHUP
+# instead, to ensure that login terminates cleanly.
+KillSignal=SIGHUP
+
+[Install]
+Alias=getty.target.wants/getty@tty1.service
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/graphical.target b/remote/modules/systemd/data/usr/lib/systemd/system/graphical.target
new file mode 100644
index 00000000..65f2521d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/graphical.target
@@ -0,0 +1,18 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Graphical Interface
+Documentation=man:systemd.special(7)
+Requires=multi-user.target
+After=multi-user.target
+Conflicts=rescue.target
+Wants=display-manager.service
+AllowIsolate=yes
+
+[Install]
+Alias=default.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/halt-local.service b/remote/modules/systemd/data/usr/lib/systemd/system/halt-local.service
new file mode 100644
index 00000000..e6243eeb
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/halt-local.service
@@ -0,0 +1,20 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=/usr/sbin/halt.local Compatibility
+ConditionFileIsExecutable=/usr/sbin/halt.local
+DefaultDependencies=no
+After=shutdown.target
+Before=final.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/halt.local
+TimeoutSec=0
+StandardOutput=tty
+RemainAfterExit=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/halt.target b/remote/modules/systemd/data/usr/lib/systemd/system/halt.target
new file mode 100644
index 00000000..a21d984b
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/halt.target
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Halt
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+Requires=systemd-halt.service
+After=systemd-halt.service
+AllowIsolate=yes
+
+[Install]
+Alias=ctrl-alt-del.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/hibernate.target b/remote/modules/systemd/data/usr/lib/systemd/system/hibernate.target
new file mode 100644
index 00000000..143eb592
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/hibernate.target
@@ -0,0 +1,13 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Hibernate
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+BindsTo=systemd-hibernate.service
+After=systemd-hibernate.service
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/hybrid-sleep.target b/remote/modules/systemd/data/usr/lib/systemd/system/hybrid-sleep.target
new file mode 100644
index 00000000..d2d34092
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/hybrid-sleep.target
@@ -0,0 +1,13 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Hybrid Suspend+Hibernate
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+BindsTo=systemd-hybrid-sleep.service
+After=systemd-hybrid-sleep.service
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/kexec.target b/remote/modules/systemd/data/usr/lib/systemd/system/kexec.target
new file mode 100644
index 00000000..90795d0c
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/kexec.target
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Reboot via kexec
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+Requires=systemd-kexec.service
+After=systemd-kexec.service
+AllowIsolate=yes
+
+[Install]
+Alias=ctrl-alt-del.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target b/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target
new file mode 100644
index 00000000..998e0460
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Multi-User System
+Documentation=man:systemd.special(7)
+Requires=basic.target
+Conflicts=rescue.service rescue.target
+After=basic.target rescue.service rescue.target
+AllowIsolate=yes
+
+[Install]
+Alias=default.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/getty.target b/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/getty.target
new file mode 120000
index 00000000..bdba1fe4
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/getty.target
@@ -0,0 +1 @@
+../getty.target \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/systemd-logind.service b/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/systemd-logind.service
new file mode 120000
index 00000000..270a900e
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/systemd-logind.service
@@ -0,0 +1 @@
+../systemd-logind.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/systemd-user-sessions.service b/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/systemd-user-sessions.service
new file mode 120000
index 00000000..f878b529
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/multi-user.target.wants/systemd-user-sessions.service
@@ -0,0 +1 @@
+../systemd-user-sessions.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/network-online.target b/remote/modules/systemd/data/usr/lib/systemd/system/network-online.target
new file mode 100644
index 00000000..a40c44c9
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/network-online.target
@@ -0,0 +1,11 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Network is Online
+Documentation=man:systemd.special(7)
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
diff --git a/remote/modules/systemd/data/etc/systemd/system/network.target b/remote/modules/systemd/data/usr/lib/systemd/system/network.target
index 0bc2a410..4186c088 100644
--- a/remote/modules/systemd/data/etc/systemd/system/network.target
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/network.target
@@ -9,5 +9,6 @@
Description=Network
Documentation=man:systemd.special(7)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
-ConditionPathExists=/run/udhcpc/network-ready
+DefaultDependencies=no
+ConditionPathExists=/run/network/network-ready
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/paths.target b/remote/modules/systemd/data/usr/lib/systemd/system/paths.target
new file mode 100644
index 00000000..25c7fd03
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/paths.target
@@ -0,0 +1,10 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Paths
+Documentation=man:systemd.special(7)
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/poweroff.target b/remote/modules/systemd/data/usr/lib/systemd/system/poweroff.target
new file mode 100644
index 00000000..71871033
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/poweroff.target
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Power-Off
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+Requires=systemd-poweroff.service
+After=systemd-poweroff.service
+AllowIsolate=yes
+
+[Install]
+Alias=ctrl-alt-del.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/printer.target b/remote/modules/systemd/data/usr/lib/systemd/system/printer.target
new file mode 100644
index 00000000..a6b86caa
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/printer.target
@@ -0,0 +1,11 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Printer
+Documentation=man:systemd.special(7)
+StopWhenUnneeded=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/proc-sys-fs-binfmt_misc.automount b/remote/modules/systemd/data/usr/lib/systemd/system/proc-sys-fs-binfmt_misc.automount
new file mode 100644
index 00000000..6be38937
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/proc-sys-fs-binfmt_misc.automount
@@ -0,0 +1,18 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Arbitrary Executable File Formats File System Automount Point
+Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+DefaultDependencies=no
+Before=sysinit.target
+ConditionPathExists=/proc/sys/fs/binfmt_misc/
+ConditionPathIsReadWrite=/proc/sys/
+
+[Automount]
+Where=/proc/sys/fs/binfmt_misc
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/proc-sys-fs-binfmt_misc.mount b/remote/modules/systemd/data/usr/lib/systemd/system/proc-sys-fs-binfmt_misc.mount
new file mode 100644
index 00000000..8c7c3863
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/proc-sys-fs-binfmt_misc.mount
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Arbitrary Executable File Formats File System
+Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+DefaultDependencies=no
+
+[Mount]
+What=binfmt_misc
+Where=/proc/sys/fs/binfmt_misc
+Type=binfmt_misc
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/rc-local.service b/remote/modules/systemd/data/usr/lib/systemd/system/rc-local.service
new file mode 100644
index 00000000..cb9c1ba2
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/rc-local.service
@@ -0,0 +1,20 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+# This unit gets pulled automatically into multi-user.target by
+# systemd-rc-local-generator if /etc/rc.local is executable.
+[Unit]
+Description=/etc/rc.local Compatibility
+ConditionFileIsExecutable=/etc/rc.local
+After=network.target
+
+[Service]
+Type=forking
+ExecStart=/etc/rc.local start
+TimeoutSec=0
+RemainAfterExit=yes
+SysVStartPriority=99
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/reboot.target b/remote/modules/systemd/data/usr/lib/systemd/system/reboot.target
new file mode 100644
index 00000000..dec8f567
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/reboot.target
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Reboot
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+Requires=systemd-reboot.service
+After=systemd-reboot.service
+AllowIsolate=yes
+
+[Install]
+Alias=ctrl-alt-del.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/remote-fs.target b/remote/modules/systemd/data/usr/lib/systemd/system/remote-fs.target
new file mode 100644
index 00000000..0821987d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/remote-fs.target
@@ -0,0 +1,3 @@
+[Unit]
+Description=Remote File Systems Impostor
+
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/serial-getty@.service b/remote/modules/systemd/data/usr/lib/systemd/system/serial-getty@.service
new file mode 100644
index 00000000..5f289500
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/serial-getty@.service
@@ -0,0 +1,36 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Serial Getty on %I
+Documentation=man:agetty(8) man:systemd-getty-generator(8)
+Documentation=http://0pointer.de/blog/projects/serial-console.html
+BindsTo=dev-%i.device
+After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service
+After=rc-local.service
+
+# If additional gettys are spawned during boot then we should make
+# sure that this is synchronized before getty.target, even though
+# getty.target didn't actually pull it in.
+Before=getty.target
+IgnoreOnIsolate=yes
+
+[Service]
+ExecStart=-/sbin/agetty -s %I 115200,38400,9600 vt102
+Type=idle
+Restart=always
+RestartSec=0
+UtmpIdentifier=%I
+TTYPath=/dev/%I
+TTYReset=yes
+TTYVHangup=yes
+KillMode=process
+IgnoreSIGPIPE=no
+
+# Some login implementations ignore SIGTERM, so we send SIGHUP
+# instead, to ensure that login terminates cleanly.
+KillSignal=SIGHUP
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/shutdown.target b/remote/modules/systemd/data/usr/lib/systemd/system/shutdown.target
new file mode 100644
index 00000000..73e302b8
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/shutdown.target
@@ -0,0 +1,12 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Shutdown
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+RefuseManualStart=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sigpwr.target b/remote/modules/systemd/data/usr/lib/systemd/system/sigpwr.target
new file mode 100644
index 00000000..a52e7cff
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sigpwr.target
@@ -0,0 +1,10 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Power Failure
+Documentation=man:systemd.special(7)
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sleep.target b/remote/modules/systemd/data/usr/lib/systemd/system/sleep.target
new file mode 100644
index 00000000..10c7c8d5
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sleep.target
@@ -0,0 +1,13 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Sleep
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+RefuseManualStart=yes
+StopWhenUnneeded=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/smartcard.target b/remote/modules/systemd/data/usr/lib/systemd/system/smartcard.target
new file mode 100644
index 00000000..5fefe847
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/smartcard.target
@@ -0,0 +1,11 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Smart Card
+Documentation=man:systemd.special(7)
+StopWhenUnneeded=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target
new file mode 100644
index 00000000..26ab065d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target
@@ -0,0 +1,10 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Sockets
+Documentation=man:systemd.special(7)
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-journald.socket b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-journald.socket
new file mode 120000
index 00000000..07ae46c4
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-journald.socket
@@ -0,0 +1 @@
+../systemd-journald.socket \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-shutdownd.socket b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-shutdownd.socket
new file mode 120000
index 00000000..aa23208d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-shutdownd.socket
@@ -0,0 +1 @@
+../systemd-shutdownd.socket \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-udevd-control.socket b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-udevd-control.socket
new file mode 120000
index 00000000..4bc0e548
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-udevd-control.socket
@@ -0,0 +1 @@
+../systemd-udevd-control.socket \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-udevd-kernel.socket b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-udevd-kernel.socket
new file mode 120000
index 00000000..fab7990a
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sockets.target.wants/systemd-udevd-kernel.socket
@@ -0,0 +1 @@
+../systemd-udevd-kernel.socket \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sound.target b/remote/modules/systemd/data/usr/lib/systemd/system/sound.target
new file mode 100644
index 00000000..6699adec
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sound.target
@@ -0,0 +1,11 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Sound Card
+Documentation=man:systemd.special(7)
+StopWhenUnneeded=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/suspend.target b/remote/modules/systemd/data/usr/lib/systemd/system/suspend.target
new file mode 100644
index 00000000..f50cb226
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/suspend.target
@@ -0,0 +1,13 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Suspend
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+BindsTo=systemd-suspend.service
+After=systemd-suspend.service
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/swap.target b/remote/modules/systemd/data/usr/lib/systemd/system/swap.target
new file mode 100644
index 00000000..23a7d0dc
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/swap.target
@@ -0,0 +1,10 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Swap
+Documentation=man:systemd.special(7)
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sys-fs-fuse-connections.mount b/remote/modules/systemd/data/usr/lib/systemd/system/sys-fs-fuse-connections.mount
new file mode 100644
index 00000000..ebd93e2c
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sys-fs-fuse-connections.mount
@@ -0,0 +1,20 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=FUSE Control File System
+Documentation=https://www.kernel.org/doc/Documentation/filesystems/fuse.txt
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+DefaultDependencies=no
+ConditionPathExists=/sys/fs/fuse/connections
+After=systemd-modules-load.service
+Before=sysinit.target
+
+[Mount]
+What=fusectl
+Where=/sys/fs/fuse/connections
+Type=fusectl
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sys-kernel-config.mount b/remote/modules/systemd/data/usr/lib/systemd/system/sys-kernel-config.mount
new file mode 100644
index 00000000..020101c0
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sys-kernel-config.mount
@@ -0,0 +1,20 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Configuration File System
+Documentation=https://www.kernel.org/doc/Documentation/filesystems/configfs/configfs.txt
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+DefaultDependencies=no
+ConditionPathExists=/sys/kernel/config
+After=systemd-modules-load.service
+Before=sysinit.target
+
+[Mount]
+What=configfs
+Where=/sys/kernel/config
+Type=configfs
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target
new file mode 100644
index 00000000..ec6fbefc
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target
@@ -0,0 +1,14 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=System Initialization
+Documentation=man:systemd.special(7)
+Conflicts=emergency.service emergency.target
+Wants= swap.target
+After= swap.target emergency.service emergency.target
+RefuseManualStart=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/dev-hugepages.mount b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/dev-hugepages.mount
new file mode 120000
index 00000000..6a26137b
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/dev-hugepages.mount
@@ -0,0 +1 @@
+../dev-hugepages.mount \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/dev-mqueue.mount b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/dev-mqueue.mount
new file mode 120000
index 00000000..f0b9fbf4
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/dev-mqueue.mount
@@ -0,0 +1 @@
+../dev-mqueue.mount \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/proc-sys-fs-binfmt_misc.automount b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/proc-sys-fs-binfmt_misc.automount
new file mode 120000
index 00000000..0b7f61f0
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/proc-sys-fs-binfmt_misc.automount
@@ -0,0 +1 @@
+../proc-sys-fs-binfmt_misc.automount \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/sys-fs-fuse-connections.mount b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/sys-fs-fuse-connections.mount
new file mode 120000
index 00000000..85d20a2d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/sys-fs-fuse-connections.mount
@@ -0,0 +1 @@
+../sys-fs-fuse-connections.mount \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/sys-kernel-config.mount b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/sys-kernel-config.mount
new file mode 120000
index 00000000..831a9479
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/sys-kernel-config.mount
@@ -0,0 +1 @@
+../sys-kernel-config.mount \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-binfmt.service b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-binfmt.service
new file mode 120000
index 00000000..07fbee12
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-binfmt.service
@@ -0,0 +1 @@
+../systemd-binfmt.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-journald.service b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-journald.service
new file mode 120000
index 00000000..e9057f7d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-journald.service
@@ -0,0 +1 @@
+../systemd-journald.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-modules-load.service b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-modules-load.service
new file mode 120000
index 00000000..79337696
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-modules-load.service
@@ -0,0 +1 @@
+../systemd-modules-load.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-sysctl.service b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-sysctl.service
new file mode 120000
index 00000000..fb5fbf0c
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-sysctl.service
@@ -0,0 +1 @@
+../systemd-sysctl.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup-dev.service b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup-dev.service
new file mode 120000
index 00000000..0a5032ac
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup-dev.service
@@ -0,0 +1 @@
+../systemd-tmpfiles-setup-dev.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup.service b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup.service
new file mode 120000
index 00000000..12744a3e
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup.service
@@ -0,0 +1 @@
+../systemd-tmpfiles-setup.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-udev-trigger.service b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-udev-trigger.service
new file mode 120000
index 00000000..ff2ab9b3
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-udev-trigger.service
@@ -0,0 +1 @@
+../systemd-udev-trigger.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-udevd.service b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-udevd.service
new file mode 120000
index 00000000..e64bac22
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-udevd.service
@@ -0,0 +1 @@
+../systemd-udevd.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-vconsole-setup.service b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-vconsole-setup.service
new file mode 120000
index 00000000..78347c39
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/sysinit.target.wants/systemd-vconsole-setup.service
@@ -0,0 +1 @@
+../systemd-vconsole-setup.service \ No newline at end of file
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/syslog.socket b/remote/modules/systemd/data/usr/lib/systemd/system/syslog.socket
new file mode 100644
index 00000000..e6e9cf85
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/syslog.socket
@@ -0,0 +1,40 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Syslog Socket
+Documentation=man:systemd.special(7)
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/syslog
+DefaultDependencies=no
+Before=sockets.target shutdown.target
+
+# Don't allow logging until the very end
+Conflicts=shutdown.target
+
+[Socket]
+ListenDatagram=/run/systemd/journal/syslog
+SocketMode=0666
+PassCredentials=yes
+PassSecurity=yes
+ReceiveBuffer=8M
+
+# The default syslog implementation should make syslog.service a
+# symlink to itself, so that this socket activates the right actual
+# syslog service.
+#
+# Examples:
+#
+# /etc/systemd/system/syslog.service -> /lib/systemd/system/rsyslog.service
+# /etc/systemd/system/syslog.service -> /lib/systemd/system/syslog-ng.service
+#
+# Best way to achieve that is by adding this to your unit file
+# (i.e. to rsyslog.service or syslog-ng.service):
+#
+# [Install]
+# Alias=syslog.service
+#
+# See http://www.freedesktop.org/wiki/Software/systemd/syslog for details.
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/system-update.target b/remote/modules/systemd/data/usr/lib/systemd/system/system-update.target
new file mode 100644
index 00000000..b6008c8f
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/system-update.target
@@ -0,0 +1,16 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=System Update
+Documentation=http://freedesktop.org/wiki/Software/systemd/SystemUpdates
+Documentation=man:systemd.special(7) man:systemd-system-update-generator(8)
+Requires=sysinit.target
+Conflicts=shutdown.target
+After=sysinit.target
+Before=shutdown.target
+AllowIsolate=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-binfmt.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-binfmt.service
new file mode 100644
index 00000000..897cf4e5
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-binfmt.service
@@ -0,0 +1,26 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Set Up Additional Binary Formats
+Documentation=man:systemd-binfmt.service(8) man:binfmt.d(5)
+Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt
+DefaultDependencies=no
+Conflicts=shutdown.target
+After= proc-sys-fs-binfmt_misc.automount
+Before=sysinit.target shutdown.target
+ConditionPathIsReadWrite=/proc/sys/
+ConditionDirectoryNotEmpty=|/lib/binfmt.d
+ConditionDirectoryNotEmpty=|/usr/lib/binfmt.d
+ConditionDirectoryNotEmpty=|/usr/local/lib/binfmt.d
+ConditionDirectoryNotEmpty=|/etc/binfmt.d
+ConditionDirectoryNotEmpty=|/run/binfmt.d
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/lib/systemd/systemd-binfmt
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-halt.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-halt.service
new file mode 100644
index 00000000..a13d67c6
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-halt.service
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Halt
+Documentation=man:systemd-halt.service(8)
+DefaultDependencies=no
+Requires=shutdown.target final.target
+After=shutdown.target final.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/systemctl --force halt
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-hibernate.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-hibernate.service
new file mode 100644
index 00000000..7f19e48f
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-hibernate.service
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Hibernate
+Documentation=man:systemd-suspend.service(8)
+DefaultDependencies=no
+Requires=sleep.target
+After=sleep.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/lib/systemd/systemd-sleep hibernate
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-hybrid-sleep.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-hybrid-sleep.service
new file mode 100644
index 00000000..7d627bfa
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-hybrid-sleep.service
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Hybrid Suspend+Hibernate
+Documentation=man:systemd-suspend.service(8)
+DefaultDependencies=no
+Requires=sleep.target
+After=sleep.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/lib/systemd/systemd-sleep hybrid-sleep
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-journald.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-journald.service
new file mode 100644
index 00000000..77b4bfe9
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-journald.service
@@ -0,0 +1,26 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Journal Service
+Documentation=man:systemd-journald.service(8) man:journald.conf(5)
+DefaultDependencies=no
+Requires=systemd-journald.socket
+After=systemd-journald.socket syslog.socket
+Before=sysinit.target
+
+[Service]
+ExecStart=/usr/lib/systemd/systemd-journald
+Restart=always
+RestartSec=0
+NotifyAccess=all
+StandardOutput=null
+CapabilityBoundingSet=CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_SYS_PTRACE CAP_SYSLOG CAP_AUDIT_CONTROL CAP_CHOWN CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID
+
+# Increase the default a bit in order to allow many simultaneous
+# services being run since we keep one fd open per service.
+LimitNOFILE=16384
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-journald.socket b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-journald.socket
new file mode 100644
index 00000000..4f0619d2
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-journald.socket
@@ -0,0 +1,26 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Journal Socket
+Documentation=man:systemd-journald.service(8) man:journald.conf(5)
+DefaultDependencies=no
+Before=sockets.target
+
+# Mount and swap units need this. If this socket unit is removed by an
+# isolate request the mount and and swap units would be removed too,
+# hence let's exclude this from isolate requests.
+IgnoreOnIsolate=yes
+
+[Socket]
+ListenStream=/run/systemd/journal/stdout
+ListenDatagram=/run/systemd/journal/socket
+ListenDatagram=/dev/log
+SocketMode=0666
+PassCredentials=yes
+PassSecurity=yes
+ReceiveBuffer=8M
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-logind.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-logind.service
new file mode 100644
index 00000000..71971e44
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-logind.service
@@ -0,0 +1,23 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Login Service
+Documentation=man:systemd-logind.service(8) man:logind.conf(5)
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/multiseat
+After=
+
+[Service]
+ExecStart=/usr/lib/systemd/systemd-logind
+Restart=always
+RestartSec=0
+BusName=org.freedesktop.login1
+CapabilityBoundingSet=CAP_AUDIT_CONTROL CAP_CHOWN CAP_KILL CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE CAP_FOWNER CAP_SYS_TTY_CONFIG
+
+# Increase the default a bit in order to allow many simultaneous
+# logins since we keep one fd open per session.
+LimitNOFILE=16384
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-modules-load.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-modules-load.service
new file mode 100644
index 00000000..3ff810f7
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-modules-load.service
@@ -0,0 +1,27 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Load Kernel Modules
+Documentation=man:systemd-modules-load.service(8) man:modules-load.d(5)
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=
+Before=sysinit.target shutdown.target
+ConditionCapability=CAP_SYS_MODULE
+ConditionDirectoryNotEmpty=|/lib/modules-load.d
+ConditionDirectoryNotEmpty=|/usr/lib/modules-load.d
+ConditionDirectoryNotEmpty=|/usr/local/lib/modules-load.d
+ConditionDirectoryNotEmpty=|/etc/modules-load.d
+ConditionDirectoryNotEmpty=|/run/modules-load.d
+ConditionKernelCommandLine=|modules-load
+ConditionKernelCommandLine=|rd.modules-load
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/lib/systemd/systemd-modules-load
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-nspawn@.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-nspawn@.service
new file mode 100644
index 00000000..f9f9aa65
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-nspawn@.service
@@ -0,0 +1,18 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Container %i
+Documentation=man:systemd-nspawn(1)
+
+[Service]
+ExecStart=/usr/bin/systemd-nspawn -bjD /var/lib/container/%i
+ControlGroup=%R/machine/%i.nspawn cpu:/
+Type=notify
+
+[Install]
+Also=multi-user.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-poweroff.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-poweroff.service
new file mode 100644
index 00000000..eede0eab
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-poweroff.service
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Power-Off
+Documentation=man:systemd-halt.service(8)
+DefaultDependencies=no
+Requires=shutdown.target final.target
+After=shutdown.target final.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/systemctl --force poweroff
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-reboot.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-reboot.service
new file mode 100644
index 00000000..b2d27c8e
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-reboot.service
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Reboot
+Documentation=man:systemd-halt.service(8)
+DefaultDependencies=no
+Requires=shutdown.target final.target
+After=shutdown.target final.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/systemctl --force reboot
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-shutdownd.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-shutdownd.service
new file mode 100644
index 00000000..38c663de
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-shutdownd.service
@@ -0,0 +1,15 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Delayed Shutdown Service
+Documentation=man:systemd-shutdownd.service(8)
+DefaultDependencies=no
+
+[Service]
+ExecStart=/usr/lib/systemd/systemd-shutdownd
+NotifyAccess=all
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-shutdownd.socket b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-shutdownd.socket
new file mode 100644
index 00000000..9421ce8a
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-shutdownd.socket
@@ -0,0 +1,18 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Delayed Shutdown Socket
+Documentation=man:systemd-shutdownd.service(8)
+DefaultDependencies=no
+Before=sockets.target
+
+[Socket]
+ListenDatagram=/run/systemd/shutdownd
+SocketMode=0600
+PassCredentials=yes
+PassSecurity=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-suspend.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-suspend.service
new file mode 100644
index 00000000..5d242edd
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-suspend.service
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Suspend
+Documentation=man:systemd-suspend.service(8)
+DefaultDependencies=no
+Requires=sleep.target
+After=sleep.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/lib/systemd/systemd-sleep suspend
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-sysctl.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-sysctl.service
new file mode 100644
index 00000000..46e2475e
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-sysctl.service
@@ -0,0 +1,26 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Apply Kernel Variables
+Documentation=man:systemd-sysctl.service(8) man:sysctl.d(5)
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=
+Before=sysinit.target shutdown.target
+ConditionPathIsReadWrite=/proc/sys/
+ConditionPathExists=|/etc/sysctl.conf
+ConditionDirectoryNotEmpty=|/lib/sysctl.d
+ConditionDirectoryNotEmpty=|/usr/lib/sysctl.d
+ConditionDirectoryNotEmpty=|/usr/local/lib/sysctl.d
+ConditionDirectoryNotEmpty=|/etc/sysctl.d
+ConditionDirectoryNotEmpty=|/run/sysctl.d
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/lib/systemd/systemd-sysctl
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-tmpfiles-setup-dev.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-tmpfiles-setup-dev.service
new file mode 100644
index 00000000..da1ee1f8
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-tmpfiles-setup-dev.service
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Create static device nodes in /dev
+Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
+DefaultDependencies=no
+Before=sysinit.target systemd-udevd.service
+ConditionCapability=CAP_MKNOD
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/systemd-tmpfiles --prefix=/dev --create
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-tmpfiles-setup.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-tmpfiles-setup.service
new file mode 100644
index 00000000..157a7451
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-tmpfiles-setup.service
@@ -0,0 +1,23 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Recreate Volatile Files and Directories
+Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
+DefaultDependencies=no
+Wants=
+After=
+Before=sysinit.target shutdown.target
+ConditionDirectoryNotEmpty=|/usr/lib/tmpfiles.d
+ConditionDirectoryNotEmpty=|/usr/local/lib/tmpfiles.d
+ConditionDirectoryNotEmpty=|/etc/tmpfiles.d
+ConditionDirectoryNotEmpty=|/run/tmpfiles.d
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/systemd-tmpfiles --create --remove
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udev-settle.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udev-settle.service
new file mode 100644
index 00000000..146c6499
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udev-settle.service
@@ -0,0 +1,31 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+# This service can dynamically be pulled-in by legacy services which
+# cannot reliably cope with dynamic device configurations, and wrongfully
+# expect a populated /dev during bootup.
+
+[Unit]
+Description=udev Wait for Complete Device Initialization
+Documentation=man:udev(7) man:systemd-udevd.service(8)
+DefaultDependencies=no
+Wants=systemd-udevd.service
+After=systemd-udev-trigger.service
+Before=sysinit.target
+ConditionCapability=CAP_MKNOD
+
+[Service]
+Type=oneshot
+TimeoutSec=180
+RemainAfterExit=yes
+# Don't ask...
+ExecStart=/opt/openslx/bin/usleep 100000
+ExecStart=/usr/bin/udevadm settle --timeout=3
+ExecStart=/opt/openslx/bin/usleep 20000
+ExecStart=/usr/bin/udevadm settle --timeout=3
+ExecStart=/opt/openslx/bin/usleep 20000
+ExecStart=/usr/bin/udevadm settle --timeout=3
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udev-trigger.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udev-trigger.service
new file mode 100644
index 00000000..6b19c75d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udev-trigger.service
@@ -0,0 +1,20 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=udev Coldplug all Devices
+Documentation=man:udev(7) man:systemd-udevd.service(8)
+DefaultDependencies=no
+Wants=systemd-udevd.service systemd-udev-settle.service
+After=systemd-udevd-kernel.socket systemd-udevd-control.socket
+Before=sysinit.target systemd-udev-settle.service
+ConditionCapability=CAP_MKNOD
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/udevadm trigger --type=subsystems --action=add ; /usr/bin/udevadm trigger --type=devices --action=add
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd-control.socket b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd-control.socket
new file mode 100644
index 00000000..ca17102d
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd-control.socket
@@ -0,0 +1,19 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=udev Control Socket
+Documentation=man:systemd-udevd.service(8) man:udev(7)
+DefaultDependencies=no
+Before=sockets.target
+ConditionCapability=CAP_MKNOD
+
+[Socket]
+Service=systemd-udevd.service
+ListenSequentialPacket=/run/udev/control
+SocketMode=0600
+PassCredentials=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd-kernel.socket b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd-kernel.socket
new file mode 100644
index 00000000..4b8a5b0f
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd-kernel.socket
@@ -0,0 +1,19 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=udev Kernel Socket
+Documentation=man:systemd-udevd.service(8) man:udev(7)
+DefaultDependencies=no
+Before=sockets.target
+ConditionCapability=CAP_MKNOD
+
+[Socket]
+Service=systemd-udevd.service
+ReceiveBuffer=134217728
+ListenNetlink=kobject-uevent 1
+PassCredentials=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd.service
new file mode 100644
index 00000000..2c33ce53
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-udevd.service
@@ -0,0 +1,23 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=udev Kernel Device Manager
+Documentation=man:systemd-udevd.service(8) man:udev(7)
+DefaultDependencies=no
+Wants=systemd-udevd-control.socket systemd-udevd-kernel.socket
+After=systemd-udevd-control.socket systemd-udevd-kernel.socket
+Before=sysinit.target
+ConditionCapability=CAP_MKNOD
+
+[Service]
+Type=notify
+OOMScoreAdjust=-1000
+Sockets=systemd-udevd-control.socket systemd-udevd-kernel.socket
+Restart=always
+RestartSec=0
+ExecStart=/usr/lib/systemd/systemd-udevd
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-user-sessions.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-user-sessions.service
new file mode 100644
index 00000000..9226e3ea
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-user-sessions.service
@@ -0,0 +1,17 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Permit User Sessions
+Documentation=man:systemd-user-sessions.service(8)
+After=
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/lib/systemd/systemd-user-sessions start
+ExecStop=/usr/lib/systemd/systemd-user-sessions stop
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/systemd-vconsole-setup.service b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-vconsole-setup.service
new file mode 100644
index 00000000..ce60c1bb
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/systemd-vconsole-setup.service
@@ -0,0 +1,20 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Setup Virtual Console
+Documentation=man:systemd-vconsole-setup.service(8) man:vconsole.conf(5)
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=
+Before=sysinit.target shutdown.target
+ConditionPathExists=/dev/tty0
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/lib/systemd/systemd-vconsole-setup
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/time-sync.target b/remote/modules/systemd/data/usr/lib/systemd/system/time-sync.target
new file mode 100644
index 00000000..54078069
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/time-sync.target
@@ -0,0 +1,14 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+# This exists mostly for compatibility with SysV/LSB units, and
+# implementations lacking socket/bus activation.
+
+[Unit]
+Description=System Time Synchronized
+Documentation=man:systemd.special(7)
+RefuseManualStart=yes
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/timers.target b/remote/modules/systemd/data/usr/lib/systemd/system/timers.target
new file mode 100644
index 00000000..07fda3d9
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/timers.target
@@ -0,0 +1,10 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Timers
+Documentation=man:systemd.special(7)
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/user@.service b/remote/modules/systemd/data/usr/lib/systemd/system/user@.service
new file mode 100644
index 00000000..876c28c9
--- /dev/null
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/user@.service
@@ -0,0 +1,23 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=User Manager for %u
+After=systemd-user-sessions.service
+
+[Service]
+User=%I
+PAMName=systemd-shared
+# in order to allow MEM_CG features to work, add "memory:/" here
+ControlGroup=%R/user/%U.user/shared cpu:/
+ControlGroupModify=yes
+Type=notify
+ExecStart=-/usr/lib/systemd/systemd --user
+Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%U/dbus/user_bus_socket
+
+[Install]
+Alias=user@%i.service
diff --git a/remote/modules/systemd/data/usr/lib/udev/rules.d/99-systemd.rules b/remote/modules/systemd/data/usr/lib/udev/rules.d/99-systemd.rules
index c148de7a..99cdf676 100644
--- a/remote/modules/systemd/data/usr/lib/udev/rules.d/99-systemd.rules
+++ b/remote/modules/systemd/data/usr/lib/udev/rules.d/99-systemd.rules
@@ -31,7 +31,9 @@ SUBSYSTEM=="block", KERNEL!="ram*|loop*", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_T
#
# http://git.kernel.org/?p=linux/hotplug/udev.git;a=blob;f=libudev/libudev-enumerate.c;h=da831449dcaf5e936a14409e8e68ab12d30a98e2;hb=HEAD#l742
-#SUBSYSTEM=="net", KERNEL=="eth*", TAG+="systemd", ENV{SYSTEMD_ALIAS}="/sys/subsystem/net/devices/$name", ENV{SYSTEMD_WANTS}="network-interface@$name.service"
+SUBSYSTEM=="net", KERNEL=="eth*", TAG=="openslxignore", GOTO="systemd_end"
+
+SUBSYSTEM=="net", KERNEL=="br0|eth*", TAG+="systemd", ENV{SYSTEMD_ALIAS}="/sys/subsystem/net/devices/$name", ENV{SYSTEMD_WANTS}="network-interface@$name.service"
SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_ALIAS}="/sys/subsystem/bluetooth/devices/%k"
SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_WANTS}="bluetooth.target"
@@ -43,8 +45,7 @@ SUBSYSTEM=="usb", KERNEL=="lp*", TAG+="systemd", ENV{SYSTEMD_WANTS}="printer.tar
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", TAG+="systemd", ENV{SYSTEMD_WANTS}="printer.target"
# Apply sysctl variables to network devices (and only to those) as they appear.
-
-#SUBSYSTEM=="net", KERNEL=="eth*", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name"
+SUBSYSTEM=="net", KERNEL=="eth*", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name"
# Asynchronously mount file systems implemented by these modules as
# soon as they are loaded.
diff --git a/remote/modules/systemd/systemd.build b/remote/modules/systemd/systemd.build
index 8ccb3cca..95576548 100644
--- a/remote/modules/systemd/systemd.build
+++ b/remote/modules/systemd/systemd.build
@@ -53,33 +53,15 @@ build () {
export LDFLAGS="$OLDLDFLAGS"
export CPPFLAGS="$OLDCPPFLAGS"
export PKG_CONFIG_PATH="$OLDPKG_CONFIG_PATH"
- LD_LIBRARY_PATH="$OLDLD_LIBRARY_PATH"
-
- # Delete unneeded services
- pinfo "Deleting unneeded services"
- local SERVICE=
- local OTHER=
- for SERVICE in $REQUIRED_DISABLED_SERVICES; do
- find "${MODULE_BUILD_DIR}" -name "$SERVICE" -exec rm -r {} \;
- for OTHER in $(grep -l -r "$SERVICE" "$MODULE_BUILD_DIR/usr/lib/systemd/system"); do
- sed -i -r "s#\s*$SERVICE\s*# #g" "$OTHER"
- done
- done
+ export LD_LIBRARY_PATH="$OLDLD_LIBRARY_PATH"
}
post_copy() {
- # dont clear systemd log at startup
- sed -i "s/TTYVTDisallocate=yes/TTYVTDisallocate=no/g" "${TARGET_BUILD_DIR}/usr/lib/systemd/system/getty@.service"
-
#old agetty version doesn't support --noclear option in getty service
- if [ "x$(dpkg -s util-linux | grep Version: | cut -d' ' -f2)" == "x2.19.1-2ubuntu3" ];
- then
- sed -i.bak "s/ExecStart=-\/sbin\/agetty --noclear %I 38400 linux/ExecStart=-\/sbin\/agetty %I 38400 linux/g" "${TARGET_BUILD_DIR}/usr/lib/systemd/system/getty@.service"
+ if [ "x$(dpkg -s util-linux | grep Version: | cut -d' ' -f2)" == "x2.19.1-2ubuntu3" ]; then
+ sed -i "s/ExecStart=-\/sbin\/agetty --noclear %I 38400 linux/ExecStart=-\/sbin\/agetty %I 38400 linux/g" "${TARGET_BUILD_DIR}/usr/lib/systemd/system/getty@.service"
fi
- # add nfs to modules-load list
- echo "nfs" > "${TARGET_BUILD_DIR}/etc/modules-load.d/nfs.conf"
-
# add pam_systemd.so to pam modules directory
if [ -e "${MODULE_BUILD_DIR}/usr/lib/security/pam_systemd.so" ]; then
cp "${MODULE_BUILD_DIR}/usr/lib/security/pam_systemd.so" "${TARGET_BUILD_DIR}/lib/security/"
diff --git a/remote/modules/systemd/systemd.conf b/remote/modules/systemd/systemd.conf
index 1a038647..4ca11365 100644
--- a/remote/modules/systemd/systemd.conf
+++ b/remote/modules/systemd/systemd.conf
@@ -2,88 +2,64 @@ REQUIRED_VERSION="systemd-204"
REQUIRED_URL="http://www.freedesktop.org/software/systemd/${REQUIRED_VERSION}.tar.xz"
REQUIRED_LIBKMOD_VERSION="kmod-14"
REQUIRED_LIBKMOD_URL="http://www.kernel.org/pub/linux/utils/kernel/kmod/${REQUIRED_LIBKMOD_VERSION}.tar.gz"
-REQUIRED_DISABLED_SERVICES="
- tmp.mount
- systemd-random-seed-save.service
- systemd-random-seed-load.service
- systemd-readahead-collect.service
- systemd-readahead-replay.service
- local-fs-pre.target
- local-fs.target
- local-fs.target.wants
- systemd-remount-fs.service
- remote-fs.target
- remote-fs-pre.target
- initrd-root-fs.target
- initrd-fs.target
- systemd-fsck-root.service
- systemd-fsck@.service
- sys-kernel-debug.mount
- nss-lookup.target
- nss-user-lookup.target
- systemd-initctl.service
- systemd-initctl.socket
- umount.target
-"
REQUIRED_BINARIES="
- journalctl
- loginctl
- systemctl
- systemd-analyze
- systemd-ask-password
- systemd-cat
- systemd-cgls
- systemd-cgtop
- systemd-delta
- systemd-detect-virt
- systemd-inhibit
- systemd-machine-id-setup
- systemd-notify
- systemd-nspawn
- systemd-stdio-bridge
- systemd-tmpfiles
- systemd-tty-ask-password-agent
- udevadm
- systemd
- systemd-ac-power
- systemd-binfmt
- systemd-cgroups-agent
- systemd-fsck
- systemd-initctl
- systemd-journald
- systemd-logind
- systemd-modules-load
- systemd-multi-seat-x
- systemd-random-seed
- systemd-readahead
- systemd-remount-fs
- systemd-reply-password
- systemd-shutdown
- systemd-shutdownd
- systemd-sleep
- systemd-sysctl
- systemd-timestamp
- systemd-udevd
- systemd-update-utmp
- systemd-user-sessions
- systemd-vconsole-setup
- systemd-fstab-generator
- systemd-getty-generator
- systemd-rc-local-generator
- systemd-system-update-generator
- accelerometer
- ata_id
- cdrom_id
- collect
- mtd_probe
- scsi_id
- v4l_id"
+ journalctl
+ loginctl
+ systemctl
+ systemd-analyze
+ systemd-ask-password
+ systemd-cat
+ systemd-cgls
+ systemd-cgtop
+ systemd-delta
+ systemd-detect-virt
+ systemd-inhibit
+ systemd-machine-id-setup
+ systemd-notify
+ systemd-nspawn
+ systemd-stdio-bridge
+ systemd-tmpfiles
+ systemd-tty-ask-password-agent
+ udevadm
+ systemd
+ systemd-ac-power
+ systemd-binfmt
+ systemd-cgroups-agent
+ systemd-fsck
+ systemd-initctl
+ systemd-journald
+ systemd-logind
+ systemd-modules-load
+ systemd-multi-seat-x
+ systemd-random-seed
+ systemd-readahead
+ systemd-remount-fs
+ systemd-reply-password
+ systemd-shutdown
+ systemd-shutdownd
+ systemd-sleep
+ systemd-sysctl
+ systemd-timestamp
+ systemd-udevd
+ systemd-update-utmp
+ systemd-user-sessions
+ systemd-vconsole-setup
+ systemd-fstab-generator
+ systemd-getty-generator
+ systemd-rc-local-generator
+ systemd-system-update-generator
+ accelerometer
+ ata_id
+ cdrom_id
+ collect
+ mtd_probe
+ scsi_id
+ v4l_id"
REQUIRED_DIRECTORIES="
/etc
/usr/include
/usr/share/dbus-1
/usr/share/polkit-1
/usr/lib/udev
- /usr/lib/systemd
/usr/lib/tmpfiles.d
"
diff --git a/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt
index f9ee1ae6..2cd92776 100755
--- a/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt
+++ b/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt
@@ -434,17 +434,28 @@ amixer -q sset Front "$VOL" unmute 2>/dev/null
amixer -q sset Speaker "$VOL" unmute 2>/dev/null # annoying built-in speaker
amixer -q sset 'Front Mic' "$VOL" unmute 2>/dev/null # to be checked if Mic is actually activated
amixer -q sset 'Rear Mic' "$VOL" unmute 2>/dev/null # =""=
+amixer -q -c pcsp sset Master "0%" mute 2>/dev/null # fix random static noise when starting vmplayer TODO: find out why?!
-# Start printer daemon
+# Start printer daemon
+QUEUE="STANDARD" # This has to match the queue you configured in your VM
USER="$(whoami)"
-SPOOLDIR="/var/spool"
-QUEUE="STANDARD"
+# Try using users tmpfs home first, as it gets wiped on logout
+if [ -n "${HOME}" ] && [ -w "${HOME}" ]; then
+ SPOOLDIR="${HOME}/.spool"
+ mkdir -p "${SPOOLDIR}/${QUEUE}"
+fi
+# If failed, try to fall back to /tmp
+if [ -z "${SPOOLDIR}" ] || [ ! -w "${SPOOLDIR}/${QUEUE}" ]; then
+ SPOOLDIR="/tmp/printergui/${USER}/"
+ rm -rf -- "${SPOOLDIR}"
+ mkdir -p "${SPOOLDIR}/${QUEUE}"
+fi
# Start the lpdaemon listening on the given port
-# FixMe: Solution for general printer redirection in other cases (iptables on outgoing port)
+# TODO: externalize with something like runtvirt.d (other parts might benefit from that too)
tcpsvd -E 192.168.101.1 5515 \
lpd "$SPOOLDIR" \
- sh -c "printergui $USER $SPOOLDIR/$QUEUE/\$DATAFILE" &
+ ash -c "/opt/openslx/cups/printergui '${USER}' \"${SPOOLDIR}/${QUEUE}/\$DATAFILE\"" &
# PID to kill the process
PID_LPD="$!"
diff --git a/remote/modules/vmware/data/etc/vmware-vix/bootstrap b/remote/modules/vmware/data/etc/vmware-vix/bootstrap
new file mode 100644
index 00000000..425074de
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware-vix/bootstrap
@@ -0,0 +1,2 @@
+BINDIR="/usr/bin"
+
diff --git a/remote/modules/vmware/data/etc/vmware/bootstrap b/remote/modules/vmware/data/etc/vmware/bootstrap
new file mode 100644
index 00000000..0cc4af90
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware/bootstrap
@@ -0,0 +1,12 @@
+PREFIX="/usr"
+BINDIR="/usr/bin"
+SBINDIR="/usr/sbin"
+LIBDIR="/usr/lib"
+DATADIR="/usr/share"
+SYSCONFDIR="/etc"
+DOCDIR="/usr/share/doc"
+MANDIR="/usr/share/man"
+INCLUDEDIR="/usr/include"
+INITDIR="/etc"
+INITSCRIPTDIR="/etc/init.d"
+
diff --git a/remote/modules/vmware/data/etc/vmware/config b/remote/modules/vmware/data/etc/vmware/config
deleted file mode 100644
index c76cc885..00000000
--- a/remote/modules/vmware/data/etc/vmware/config
+++ /dev/null
@@ -1,9 +0,0 @@
-.encoding = "UTF-8"
-prefvmx.minVmMemPct = "100"
-prefvmx.useRecommendedLockedMemSize = "TRUE"
-libdir = "/usr/lib/vmware"
-mks.ctlAltDel.ignore = "TRUE"
-mks.fullscreen.allowScreenSaver = "TRUE"
-fullScreenSwitch.onSeparateDesktop = "TRUE"
-msg.autoAnswer = "TRUE"
-
diff --git a/remote/modules/vmware/data/etc/vmware/icu b/remote/modules/vmware/data/etc/vmware/icu
new file mode 120000
index 00000000..d1ebea7d
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware/icu
@@ -0,0 +1 @@
+/usr/lib/vmware/icu \ No newline at end of file
diff --git a/remote/modules/vmware/data/etc/vmware/locations b/remote/modules/vmware/data/etc/vmware/locations
new file mode 100644
index 00000000..2d419546
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware/locations
@@ -0,0 +1,3 @@
+# Empty locations file to catch downgrade
+# to WS 6.0
+# OpenSLX: No idea what above means, but better have this file... ;-)
diff --git a/remote/modules/vmware/data/etc/vmware/usbarb.rules b/remote/modules/vmware/data/etc/vmware/usbarb.rules
new file mode 100644
index 00000000..ae107c7b
--- /dev/null
+++ b/remote/modules/vmware/data/etc/vmware/usbarb.rules
@@ -0,0 +1,4 @@
+{
+ "version": 1,
+ "rules": []
+}
diff --git a/remote/modules/vmware/patches/vmblock__3.0-3.9__1.0-100.0.patch b/remote/modules/vmware/patches/vmblock__3.0-3.9__1.0-100.0.patch
new file mode 100644
index 00000000..89b3a7c6
--- /dev/null
+++ b/remote/modules/vmware/patches/vmblock__3.0-3.9__1.0-100.0.patch
@@ -0,0 +1,11 @@
+--- a/linux/control.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/control.c 2014-02-14 15:54:59.895201379 +0100
+@@ -293,7 +293,7 @@
+
+ retval = i < 0 ? -EINVAL : blockOp(name, blocker);
+
+- putname(name);
++ __putname(name);
+
+ return retval;
+ }
diff --git a/remote/modules/vmware/patches/vmblock__3.10__1.0-100.0.patch b/remote/modules/vmware/patches/vmblock__3.10__1.0-100.0.patch
new file mode 100644
index 00000000..e54317f9
--- /dev/null
+++ b/remote/modules/vmware/patches/vmblock__3.10__1.0-100.0.patch
@@ -0,0 +1,34 @@
+--- a/linux/control.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/control.c 2014-02-14 16:20:18.667236035 +0100
+@@ -208,17 +208,18 @@
+ VMBlockSetProcEntryOwner(controlProcMountpoint);
+
+ /* Create /proc/fs/vmblock/dev */
+- controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
++ /* controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
+ VMBLOCK_CONTROL_MODE,
+- controlProcDirEntry);
+- if (!controlProcEntry) {
++ controlProcDirEntry);*/
++ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, VMBLOCK_CONTROL_MODE, controlProcDirEntry, &ControlFileOps);
++ if (controlProcEntry == NULL) {
+ Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
+ remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
+ remove_proc_entry(VMBLOCK_CONTROL_PROC_DIRNAME, NULL);
+ return -EINVAL;
+ }
+
+- controlProcEntry->proc_fops = &ControlFileOps;
++ /*controlProcEntry->proc_fops = &ControlFileOps;*/
+ return 0;
+ }
+
+@@ -293,7 +294,7 @@
+
+ retval = i < 0 ? -EINVAL : blockOp(name, blocker);
+
+- putname(name);
++ __putname(name);
+
+ return retval;
+ }
diff --git a/remote/modules/vmware/patches/vmblock__3.11-9.9__1.0-100.0.patch b/remote/modules/vmware/patches/vmblock__3.11-9.9__1.0-100.0.patch
new file mode 100644
index 00000000..dedb2646
--- /dev/null
+++ b/remote/modules/vmware/patches/vmblock__3.11-9.9__1.0-100.0.patch
@@ -0,0 +1,123 @@
+--- a/linux/control.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/control.c 2014-02-14 16:20:18.667236035 +0100
+@@ -208,17 +208,18 @@
+ VMBlockSetProcEntryOwner(controlProcMountpoint);
+
+ /* Create /proc/fs/vmblock/dev */
+- controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
++ /* controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
+ VMBLOCK_CONTROL_MODE,
+- controlProcDirEntry);
+- if (!controlProcEntry) {
++ controlProcDirEntry);*/
++ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, VMBLOCK_CONTROL_MODE, controlProcDirEntry, &ControlFileOps);
++ if (controlProcEntry == NULL) {
+ Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
+ remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
+ remove_proc_entry(VMBLOCK_CONTROL_PROC_DIRNAME, NULL);
+ return -EINVAL;
+ }
+
+- controlProcEntry->proc_fops = &ControlFileOps;
++ /*controlProcEntry->proc_fops = &ControlFileOps;*/
+ return 0;
+ }
+
+@@ -293,7 +294,7 @@
+
+ retval = i < 0 ? -EINVAL : blockOp(name, blocker);
+
+- putname(name);
++ __putname(name);
+
+ return retval;
+ }
+--- a/linux/file.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/file.c 2014-02-14 16:20:21.455236098 +0100
+@@ -38,46 +38,6 @@
+ typedef ino_t inode_num_t;
+ #endif
+
+-/* Specifically for our filldir_t callback */
+-typedef struct FilldirInfo {
+- filldir_t filldir;
+- void *dirent;
+-} FilldirInfo;
+-
+-
+-/*
+- *----------------------------------------------------------------------------
+- *
+- * Filldir --
+- *
+- * Callback function for readdir that we use in place of the one provided.
+- * This allows us to specify that each dentry is a symlink, but pass through
+- * everything else to the original filldir function.
+- *
+- * Results:
+- * Original filldir's return value.
+- *
+- * Side effects:
+- * Directory information gets copied to user's buffer.
+- *
+- *----------------------------------------------------------------------------
+- */
+-
+-static int
+-Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir
+- const char *name, // IN: Dirent name
+- int namelen, // IN: len of dirent's name
+- loff_t offset, // IN: Offset
+- inode_num_t ino, // IN: Inode number of dirent
+- unsigned int d_type) // IN: Type of file
+-{
+- FilldirInfo *info = buf;
+-
+- /* Specify DT_LNK regardless */
+- return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK);
+-}
+-
+-
+ /* File operations */
+
+ /*
+@@ -166,11 +126,10 @@
+
+ static int
+ FileOpReaddir(struct file *file, // IN
+- void *dirent, // IN
+- filldir_t filldir) // IN
++ struct dir_context *ctx) // IN
+ {
+ int ret;
+- FilldirInfo info;
++
+ struct file *actualFile;
+
+ if (!file) {
+@@ -184,12 +143,10 @@
+ return -EINVAL;
+ }
+
+- info.filldir = filldir;
+- info.dirent = dirent;
+-
+- actualFile->f_pos = file->f_pos;
+- ret = vfs_readdir(actualFile, Filldir, &info);
+- file->f_pos = actualFile->f_pos;
++ /* Ricky Wong Yung Fei:
++ * Manipulation of pos is now handled internally by iterate_dir().
++ */
++ ret = iterate_dir(actualFile, ctx);
+
+ return ret;
+ }
+@@ -237,7 +194,7 @@
+
+
+ struct file_operations RootFileOps = {
+- .readdir = FileOpReaddir,
++ .iterate = FileOpReaddir,
+ .open = FileOpOpen,
+ .release = FileOpRelease,
+ };
diff --git a/remote/modules/vmware/templates/vmware/config b/remote/modules/vmware/templates/vmware/config
new file mode 100644
index 00000000..d8420e0d
--- /dev/null
+++ b/remote/modules/vmware/templates/vmware/config
@@ -0,0 +1,24 @@
+.encoding = "UTF-8"
+installerDefaults.componentDownloadEnabled = "no"
+installerDefaults.dataCollectionEnabled = "no"
+installerDefaults.transferVersion = "1"
+installerDefaults.autoSoftwareUpdateEnabled = "no"
+NETWORKING = "yes"
+VMBLOCK_CONFED = "yes"
+VMCI_CONFED = "yes"
+VSOCK_CONFED = "yes"
+gksu.rootMethod = "sudo"
+MemTrimRate = "0"
+prefvmx.minVmMemPct = "100"
+prefvmx.useRecommendedLockedMemSize = "TRUE"
+libdir = "/usr/lib/vmware"
+mks.ctlAltDel.ignore = "TRUE"
+mks.fullscreen.allowScreenSaver = "TRUE"
+fullScreenSwitch.onSeparateDesktop = "TRUE"
+msg.autoAnswer = "TRUE"
+authd.fullpath = "/usr/sbin/vmware-authd"
+bindir = "/usr/bin"
+vix.config.version = "1"
+player.product.version = "%PLAYER_VERSION%"
+product.buildNumber = "%BUILD_NUMBER%"
+
diff --git a/remote/modules/vmware/vmware.build b/remote/modules/vmware/vmware.build
index 29b7491f..16ee4c77 100644
--- a/remote/modules/vmware/vmware.build
+++ b/remote/modules/vmware/vmware.build
@@ -27,6 +27,12 @@ fetch_source() {
build() {
local SRCDIR="./src/bundle"
[ ! -d "$SRCDIR" ] && perror "Extracted vmplayer bundle not found in $SRCDIR - please clean vmplayer module."
+ local PLAYER_MANIFEST="$MODULE_DIR/$SRCDIR/vmware-player-app/manifest.xml"
+ local WORKSTATION_MANIFEST="$MODULE_DIR/$SRCDIR/vmware-workstation/manifest.xml"
+ local BUILD_NUMBER=$(grep -o -E '<buildNumber>[0-9]*</buildNumber>' "$PLAYER_MANIFEST" | grep -o -E '[0-9]*')
+ local PLAYER_VERSION=$(grep -o -E '<version>[0-9\.]*</version>' "$PLAYER_MANIFEST" | grep -o -E '[0-9\.]*')
+ local WORKSTATION_VERSION=$(grep -o -E '<version>[0-9\.]*</version>' "$WORKSTATION_MANIFEST" 2>/dev/null | grep -o -E '[0-9\.]*')
+ local CORE_VERSION=$(grep -o -E '<coreVersion>[0-9\.]*</coreVersion>' "$PLAYER_MANIFEST" | grep -o -E '[0-9\.]*')
local TARGET="$MODULE_BUILD_DIR/usr/lib/vmware/"
mkdir -p "$TARGET"{lib,share,bin}
pinfo "Copying data to build dir"
@@ -60,6 +66,10 @@ build() {
sed -i 's#@@LIBCONF_DIR@@#/usr/lib/vmware/libconf#g' "$file"
done
+ # Copy vmware config template
+ mkdir -p "$MODULE_BUILD_DIR/etc/vmware"
+ sed "s#%PLAYER_VERSION%#$PLAYER_VERSION#g;s#%BUILD_NUMBER%#$BUILD_NUMBER#g" "$MODULE_DIR/templates/vmware/config" > "$MODULE_BUILD_DIR/etc/vmware/config"
+
# Compile kernel modules
pinfo "Compiling required kernel modules."
# build modules
@@ -72,7 +82,7 @@ post_copy() {
tarcopy "$(find /usr/lib/ /usr/lib64 -name gconv -type d)" "$TARGET_BUILD_DIR"
#Update Icon cache for vmplayer
gtk-update-icon-cache-3.0 "${TARGET_BUILD_DIR}/usr/share/icons/hicolor/" || pwarning "update-icon-cache-3.0 failed."
- #fix vmware-usbarbotrator bug
+ #fix vmware-usbarbitrator bug
date +'%Y.%m.%d' >"${TARGET_BUILD_DIR}/etc/arch-release"
copy_modules
}
@@ -83,15 +93,11 @@ build_modules() {
local VMWARE_MODCONFIG="$MODULE_DIR/$SRCDIR/vmware-vmx/bin/vmware-modconfig"
[ -e "$VMWARE_MODCONFIG" ] && chmod +x "$VMWARE_MODCONFIG" || perror "Could not find $VMWARE_MODCONFIG"
# link vmware-modconfig-console in the build dir
- local MANIFEST="$MODULE_DIR/$SRCDIR/vmware-vmx/manifest.xml"
- local BUILD_NUMBER="$(grep -o -E '<buildNumber>[0-9]*</buildNumber>' "$MANIFEST"|grep -o -E '[0-9]*')"
- local VERSION="$(grep -o -E '<version>[0-9\.]*</version>' "$MANIFEST"|grep -o -E '[0-9\.]*')"
- local CORE_VERSION="$(grep -o -E '<coreVersion>[0-9\.]*</coreVersion>' "$MANIFEST"|grep -o -E '[0-9\.]*')"
# /etc/vmware/config gen
- sed -i.bak1 '/^ETCDIR/d;/^VMISETCDIR/d;/bootstrap/d' "$VMWARE_MODCONFIG"
- sed -i.bak2 "s/libdir=.*/libdir=$(echo $MODULE_BUILD_DIR | escape_replace)\/usr\/lib\/vmware/g" "$VMWARE_MODCONFIG"
- sed -i.bak3 "s#set -e#set -e\nPREFIX=\"/usr\"\nBINDIR=\"/usr/bin\"\nSBINDIR=\"/usr/sbin\"\nLIBDIR=\"/usr/lib\"\nDATADIR=\"/usr/share\"\nSYSCONFDIR=\"/etc\"\nDOCDIR=\"/usr/share/doc\"\nMANDIR=\"/usr/share/man\"\nINCLUDEDIR=\"/usr/include\"\nINITDIR=\"/etc\"\nINITSCRIPTDIR=\"/etc/init.d\"\nVMWARE_INSTALLER=\"/usr/lib/vmware-installer/$CORE_VERSION\"\nVERSION=\"$CORE_VERSION\"\nVMISVERSION=\"$CORE_VERSION\"\nVMISPYVERSION=\"25\"#g" "$VMWARE_MODCONFIG"
+ sed -i '/^ETCDIR/d;/^VMISETCDIR/d;/bootstrap/d' "$VMWARE_MODCONFIG"
+ sed -i "s/libdir=.*/libdir=$(echo $MODULE_BUILD_DIR | escape_replace)\/usr\/lib\/vmware/g" "$VMWARE_MODCONFIG"
+ sed -i "s#set -e#set -e\nPREFIX=\"/usr\"\nBINDIR=\"/usr/bin\"\nSBINDIR=\"/usr/sbin\"\nLIBDIR=\"/usr/lib\"\nDATADIR=\"/usr/share\"\nSYSCONFDIR=\"/etc\"\nDOCDIR=\"/usr/share/doc\"\nMANDIR=\"/usr/share/man\"\nINCLUDEDIR=\"/usr/include\"\nINITDIR=\"/etc\"\nINITSCRIPTDIR=\"/etc/init.d\"\nVMWARE_INSTALLER=\"/usr/lib/vmware-installer/$CORE_VERSION\"\nVERSION=\"$CORE_VERSION\"\nVMISVERSION=\"$CORE_VERSION\"\nVMISPYVERSION=\"25\"#g" "$VMWARE_MODCONFIG"
[ -e "/etc/vmware/config" ] && cp "/etc/vmware/config" "/etc/vmware/config.mltk.bak"
@@ -113,41 +119,63 @@ authd.fullpath = "/usr/sbin/vmware-authd"
bindir = "/usr/bin"
vmware.fullpath = "/usr/bin/vmware"
vix.libdir = "/usr/lib/vmware-vix"
-vix.config.version = "1"
-player.product.version = "$VERSION"
+vix.config.version = "1"
+player.product.version = "$PLAYER_VERSION"
product.buildNumber = "$BUILD_NUMBER"
authd.client.port = "902"
authd.proxy.nfc = "vmware-hostd:ha-nfc"
authd.soapserver = "TRUE"
-product.version = "$VERSION"
-workstation.product.version = "$VERSION"
-product.name = "VMware Workstation"
+product.version = "$PLAYER_VERSION"
+workstation.product.version = "$WORKSTATION_VERSION"
+product.name = "VMware Player"
EOF
- mkdir -p "$MODULE_BUILD_DIR/usr/lib/vmware/modules"
+ mkdir -p "$MODULE_BUILD_DIR/usr/lib/vmware/modules"
ln -sf "$MODULE_DIR/$SRCDIR/vmware-vmx/extra/modules.xml" "$MODULE_BUILD_DIR/usr/lib/vmware/modules/"
ln -sf "$MODULE_DIR/$SRCDIR/vmware-vmx/lib/modules/source" "$MODULE_BUILD_DIR/usr/lib/vmware/modules/"
ln -sf "appLoader" "$MODULE_BUILD_DIR/usr/lib/vmware/bin/vmware-modconfig"
ln -sf "appLoader" "$MODULE_BUILD_DIR/usr/lib/vmware/bin/vmware-modconfig-console"
- [ ! -e "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" ] && perror "Could not find uts release!!!"
- local UTS_RELEASE="$(cat "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" | awk -F '"' '{print $2}')"
- pinfo "Patching vmblock.tar"
+ # See what we need to patch
cd "$MODULE_BUILD_DIR/usr/lib/vmware/modules/source" || perror "cd failed."
- tar xf "vmblock.tar" || perror "untar of vmblock.tar failed."
- for sourcefile in $(grep -l -r -E '\sputname' "vmblock-only/"); do
- sed -r -i 's/\sputname/__putname/g' "$sourcefile" || perror "sed of $sourcefile failed."
+ local KMOD SHORT PATCH MIN_KERN MAX_KERN
+ for KMOD in *.tar; do
+ SHORT="${KMOD%%.tar}"
+ [ -e ".${SHORT}.patched" ] && continue
+ for PATCH in $(find "${MODULE_DIR}/patches/" -name "${SHORT}__*__*.patch"); do
+ parse_patch_name "$PATCH"
+ [ -z "${MIN_KERN}" -o -z "${MAX_KERN}" ] && perror "Could not parse patch filename"
+ if version_lt "$SYS_KERNEL" "$MIN_KERN" || version_gt "$SYS_KERNEL" "$MAX_KERN"; then
+ pinfo "*NOT* applying $PATCH (min=$MIN_KERN max=$MAX_KERN cmp=$SYS_KERNEL)"
+ continue # Not suitable for our kernel
+ fi
+ pinfo "Applying $PATCH (min=$MIN_KERN max=$MAX_KERN cmp=$SYS_KERNEL)"
+ [ ! -d "${SHORT}-only" ] && tar xf "$KMOD"
+ [ ! -d "${SHORT}-only" ] && perror "untar of $KMOD failed."
+ cd "${SHORT}-only" || perror "Where is ${SHORT}-only?"
+ if ! patch -p1 < "$PATCH"; then
+ cd ..
+ rm -rf -- "${SHORT}-only"
+ perror "Applying $PATCH failed."
+ fi
+ cd ..
+ done
+ if [ -d "${SHORT}-only" ]; then
+ tar cf "$KMOD" "${SHORT}-only/" || perror "repacking of $KMOD failed."
+ rm -rf -- "${SHORT}-only"
+ touch ".${SHORT}.patched"
+ fi
done
- tar cf "vmblock.tar" "vmblock-only/" || perror "repacking of vmblock.tar failed."
- cd -
-
+ cd "$MODULE_DIR" || perror "wat."
+ #
+ # Then, compile
pinfo "KOMPILIERE VMWARE KERNEL MODULE"
for MOD in vsock vmblock vmmon vmnet vmci; do
pinfo "Kompiliere $MOD"
- [ -s "/lib/modules/$UTS_RELEASE/vmplayer/$MOD.ko" ] && unlink "/lib/modules/$UTS_RELEASE/vmplayer/$MOD.ko"
- "$VMWARE_MODCONFIG" --console --build-mod -k "$UTS_RELEASE" "$MOD" "$(which gcc)" "$MODULES_DIR/kernel/ksrc/include" "vmplayer" "$MOD"
- [ ! -s "/lib/modules/$UTS_RELEASE/vmplayer/$MOD.ko" ] && perror "Error compiling via $VMWARE_MODCONFIG"
- done
+ [ -s "/lib/modules/$SYS_UTS_RELEASE/vmplayer/$MOD.ko" ] && unlink "/lib/modules/$SYS_UTS_RELEASE/vmplayer/$MOD.ko"
+ "$VMWARE_MODCONFIG" --console --build-mod -k "$SYS_UTS_RELEASE" "$MOD" "$(which gcc)" "$MODULES_DIR/kernel/ksrc/include" "vmplayer" "$MOD"
+ [ ! -s "/lib/modules/$SYS_UTS_RELEASE/vmplayer/$MOD.ko" ] && perror "Error compiling via $VMWARE_MODCONFIG"
+ done
cd -
@@ -157,8 +185,19 @@ EOF
}
function copy_modules() {
- local UTS_RELEASE="$(cat "$MODULES_DIR/kernel/ksrc/include/generated/utsrelease.h" | awk -F '"' '{print $2}')"
mkdir -p "$TARGET_BUILD_DIR/lib/modules/vmware/"
- cp "/lib/modules/$UTS_RELEASE/vmplayer/"* "$TARGET_BUILD_DIR/lib/modules/vmware/" || perror "Could not cp vmware modules to target!"
+ cp "/lib/modules/$SYS_UTS_RELEASE/vmplayer/"* "$TARGET_BUILD_DIR/lib/modules/vmware/" || perror "Could not cp vmware modules to target!"
+}
+
+function parse_patch_name() {
+ [ $# -ne 1 ] && perror "parse_patch_name: Wrong parameter count."
+ local PATCH="$1"
+ MIN_KERN=$(echo "$PATCH" | sed -r 's/^[^_]+__([0-9\.]+)-[0-9\.]+__[^_]+\.patch$/\1/g')
+ [[ "$MIN_KERN" == /* ]] && MIN_KERN=$(echo "$PATCH" | sed -r 's/^[^_]+__([0-9\.]+)__[^_]+\.patch$/\1/g')
+ MAX_KERN=$(echo "$PATCH" | sed -r 's/^[^_]+__[0-9\.]+-([0-9\.]+)__[^_]+\.patch$/\1/g')
+ [[ "$MAX_KERN" == /* ]] && MAX_KERN=$(echo "$PATCH" | sed -r 's/^[^_]+__([0-9\.]+)__[^_]+\.patch$/\1/g')
+ [[ "$MIN_KERN" == /* ]] && MIN_KERN=
+ [[ "$MAX_KERN" == /* ]] && MAX_KERN=
+ # TODO: Parse min and max vmplayer/workstation version
}
diff --git a/remote/modules/xorg/data/etc/X11/Xsession b/remote/modules/xorg/data/etc/X11/Xsession
index 914dd2e8..b61b9c2f 100755
--- a/remote/modules/xorg/data/etc/X11/Xsession
+++ b/remote/modules/xorg/data/etc/X11/Xsession
@@ -7,8 +7,46 @@
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/usr/sbin:/opt/openslx/usr/bin:/opt/openslx/sbin:/opt/openslx/bin"
+PROGNAME=Xsession
-#Workaround to start Xsession. The original Xsession script includes error handling functionality and sources other scrips from the Xsession.d/ directory.
+message () {
+ # pretty-print messages of arbitrary length; use xmessage if it
+ # is available and $DISPLAY is set
+ MESSAGE="$PROGNAME: $*"
+ echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2
+ if [ -n "$DISPLAY" ] && which xmessage > /dev/null 2>&1; then
+ echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
+ fi
+}
+
+message_nonl () {
+ # pretty-print messages of arbitrary length (no trailing newline); use
+ # xmessage if it is available and $DISPLAY is set
+ MESSAGE="$PROGNAME: $*"
+ echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2;
+ if [ -n "$DISPLAY" ] && which xmessage > /dev/null 2>&1; then
+ echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
+ fi
+}
+
+errormsg () {
+ # exit script with error
+ message "$*"
+ exit 1
+}
+
+internal_errormsg () {
+ # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message
+ # One big call to message() for the sake of xmessage; if we had two then
+ # the user would have dismissed the error we want reported before seeing the
+ # request to report it.
+ errormsg "$*" \
+ "Please report the installed version of the \"x11-common\"" \
+ "package and the complete text of this error message to" \
+ "<debian-x@lists.debian.org>."
+}
+
+# Workaround to start Xsession. The original Xsession script includes error handling functionality and sources other scrips from the Xsession.d/ directory.
SESSIONDIR="/etc/X11/Xsession.d"
@@ -18,7 +56,10 @@ if [ -d "$SESSIONDIR" ]; then
done
fi
-#start selected session
+# Make sure we source the global profile - needed for ssh-agent, etc.
+[ -e "/etc/profile" ] && source "/etc/profile"
+
+# start selected session
case "$1" in
failsafe)
# Failsafe session was requested.
@@ -36,6 +77,21 @@ case "$1" in
"x-terminal-emulator not found; aborting."
fi
;;
+ default)
+ # Specific program was requested.
+ SESSION="default"
+ if [ -e $HOME/.dmrc ]; then
+ SESSION=$(cat $HOME/.dmrc|grep "Session"| cut -d "=" -f2)
+ fi
+ # somehow .dmrc is cleared when logging in the first time after boot
+ if [ -e $HOME/.dmrc.real ]; then
+ SESSION=$(cat $HOME/.dmrc.real|grep "Session"| cut -d "=" -f2)
+ fi
+ [ "x$SESSION" == "xdefault" ] && SESSION="gnome"
+ CMD=$(cat /opt/openslx/xsessions/$SESSION.desktop|grep "Exec"| cut -d "=" -f2-99|head -n1)
+ exec $CMD
+ ;;
+
*)
# Specific program was requested.
STARTUP_FULL_PATH=$(/opt/openslx/usr/bin/which "${1%% *}" || true)
@@ -51,4 +107,6 @@ case "$1" in
"\"$1\" not found; falling back to default session."
fi
;;
+
esac
+
diff --git a/remote/modules/xorg/xorg.conf.opensuse.13.1 b/remote/modules/xorg/xorg.conf.opensuse.13.1
new file mode 100644
index 00000000..6199ed15
--- /dev/null
+++ b/remote/modules/xorg/xorg.conf.opensuse.13.1
@@ -0,0 +1,95 @@
+# xkbutils, xkbprint, setxkbmap, xkbevd for 64-bit openSuse
+REQUIRED_INSTALLED_PACKAGES="
+ xorg-x11
+ xorg-x11
+ xorg-x11-server
+ xorg-x11-driver-input
+ xorg-x11-driver-video
+ xorg-x11-driver-video-nouveau
+ xf86-video-vmware
+ xf86-video-ati
+ xf86-video-nv
+ xf86-video-intel
+ xf86-video-i128
+ xf86-video-geode
+ xf86-video-vesa
+ xf86-video-fbdev
+ xf86-video-modesetting
+ xf86-input-vmmouse
+ xf86-input-wacom
+ xf86-input-evdev
+ xf86-input-joystick
+ xf86-input-keyboard
+ xf86-input-mouse
+ xf86-input-synaptics
+ xf86-input-void
+ xkeyboard-config
+ xkbcomp
+ dejavu-fonts
+ libxcb-glx0
+ kdm-branding-openSUSE
+ Mesa
+ xkbutils
+ xkbprint
+ setxkbmap
+ xkbevd
+ libpixman-1-0
+ xrandr
+ vaapi-intel-driver
+"
+REQUIRED_CONTENT_PACKAGES="
+ xorg-x11
+ xorg-x11-server
+ xorg-x11-driver-input
+ xorg-x11-driver-video
+ xorg-x11-driver-video-nouveau
+ xf86-video-vmware
+ xf86-video-ati
+ xf86-video-nv
+ xf86-video-intel
+ xf86-video-i128
+ xf86-video-geode
+ xf86-video-vesa
+ xf86-video-fbdev
+ xf86-video-modesetting
+ xf86-input-vmmouse
+ xf86-input-wacom
+ xf86-input-evdev
+ xf86-input-joystick
+ xf86-input-keyboard
+ xf86-input-mouse
+ xf86-input-synaptics
+ xf86-input-void
+ xkeyboard-config
+ xkbcomp
+ dejavu-fonts
+ libxcb-glx0
+ kdm-branding-openSUSE
+ Mesa
+ xkbutils
+ xkbprint
+ setxkbmap
+ xkbevd
+ libpixman-1-0
+ xrandr
+ vaapi-intel-driver
+"
+REQUIRED_LIBRARIES="
+ libI810XvMC
+ libxcb-glx
+ libIntelXvMC
+ i965_dri
+ vmwgfx_dri
+ i915_dri
+ i965_drv_video
+ libpixman-1
+"
+REQUIRED_DIRECTORIES+="
+ /usr/bin
+ /usr/lib/udev
+ /usr/$LIB64/xorg
+ /usr/share/fonts
+"
+REQUIRED_FILES="
+ /var/adm/fillup-templates/sysconfig.displaymanager-kdm
+"
diff --git a/remote/rootfs/rootfs-stage31/data/etc/modprobe.d/vmwgfx-fbdev.conf b/remote/rootfs/rootfs-stage31/data/etc/modprobe.d/vmwgfx-fbdev.conf
new file mode 100644
index 00000000..ebc4b49c
--- /dev/null
+++ b/remote/rootfs/rootfs-stage31/data/etc/modprobe.d/vmwgfx-fbdev.conf
@@ -0,0 +1,5 @@
+# when vmwgfx is loaded via modprobe in stage31, this conf file is read,
+# enables fbdev support for vmware so that
+# fb doesnt break when switching tty's in minilinux running inside vmware
+options vmwgfx enable_fbdev=1
+
diff --git a/remote/rootfs/rootfs-stage31/data/bin/activate_sysconfig b/remote/rootfs/rootfs-stage31/data/inc/activate_sysconfig
index 580b23ed..d5838f0b 100755
--- a/remote/rootfs/rootfs-stage31/data/bin/activate_sysconfig
+++ b/remote/rootfs/rootfs-stage31/data/inc/activate_sysconfig
@@ -37,7 +37,7 @@ fetch_config_files() {
#########################################################################
#
# This function updates the downloaded config with the IP information
-# received from /bin/setup_network
+# received from /inc/setup_network
update_sysconfig() {
# sanity checks
[ ! -e "${CONFIG}" ] && { echo "Cannot update. '$CONFIG' does not exist."; return 1; }
@@ -55,18 +55,21 @@ HEREEND
# setup hardware clock
. "${CONFIG}"
- if [ "x$SLX_BIOS_CLOCK" == "xlocal" ]; then
- hwclock -s -l
- elif [ "x$SLX_BIOS_CLOCK" == "xutc" ]; then
- hwclock -s -u
- fi
+ if [ "x$SLX_BIOS_CLOCK" == "xlocal" ]; then
+ hwclock -s -l
+ elif [ "x$SLX_BIOS_CLOCK" == "xutc" ]; then
+ hwclock -s -u
+ fi
- local TEMP_EXTRACT_DIR="/tmp/config.tgz.tmp"
+ local TEMP_EXTRACT_DIR="/tmp/config.tgz.tmp"
mkdir -p "${TEMP_EXTRACT_DIR}"
tar xf "${CONFIG}.tgz" -C "${TEMP_EXTRACT_DIR}" || { echo "Could not untar ${CONFIG}.tgz to ${TEMP_EXTRACT_DIR}"; return 1; }
chown -R 0:0 "${TEMP_EXTRACT_DIR}" 2>/dev/null
cd "${TEMP_EXTRACT_DIR}"
tar -cp * | tar -xp -C "${FUTURE_ROOT}"
+ cd /
+ rm -rf -- "${TEMP_EXTRACT_DIR}"
+ [ $DEBUG -eq 0 ] && rm -f -- "${CONFIG}.tgz"
}
@@ -76,5 +79,7 @@ HEREEND
#
fetch_sysconfig
-fetch_config_files
+fetch_config_files
update_sysconfig
+true
+
diff --git a/remote/rootfs/rootfs-stage31/data/inc/drm.functions b/remote/rootfs/rootfs-stage31/data/inc/drm.functions
new file mode 100644
index 00000000..666f22a9
--- /dev/null
+++ b/remote/rootfs/rootfs-stage31/data/inc/drm.functions
@@ -0,0 +1,71 @@
+
+# pass module name(s) relative path in /lib/modules with .ko extension, or special like @nvidia or @amd
+load_gfx () {
+ local MOD FILES OFFSET RETVAL
+ RETVAL=1 # default: failure
+ while [ $# -gt 0 ]; do
+ MOD=$(echo $1) # trim :)
+ shift
+ [ -z "$MOD" ] && continue
+ if [ "x${MOD}" != "x${MOD#@}" ]; then
+ # starts with '@' - special
+ OFFSET=$(( ${#MOD} + 2 ))
+ FILES=$( grep "^$MOD\s" "/drm.cfg" | cut -c ${OFFSET}- )
+ [ -z "$FILES" ] && drop_shell "Could not find entry for special $MOD"
+ if load_gfx $FILES; then
+ RETVAL=0
+ else
+ # loading special case failed, try fallback if found
+ MOD="${MOD}_fallback"
+ OFFSET=$(( ${#MOD} + 2 ))
+ FILES=$( grep "^$MOD\s" "/drm.cfg" | cut -c ${OFFSET}- )
+ [ -n "$FILES" ] && load_gfx $FILES && RETVAL=0
+ fi
+ else # regular module name or filename
+ if [ "x${MOD%.ko}" == "x${MOD}" ]; then
+ # regular module name
+ modprobe "$MOD" && RETVAL=0
+ else
+ # a .ko file
+ insmod "/lib/modules/$MOD" && RETVAL=0
+ fi
+ fi
+ done
+ return $RETVAL
+}
+
+setup_gfx () {
+ local KERN RETVAL CARD CARDS SUCCESS FILES DRM
+ # check which driver to load
+ CARDS=$(lspci | grep 'Class 03' | awk '{print $4}')
+ if [ -e "/drm.cfg" ] && [ -n "$CARDS" ]; then
+ SUCCESS="yes"
+ for CARD in $CARDS; do
+ # look up exact pci id of this card
+ echo Trying exact matching for drm drivers for $CARD
+ FILES=$(grep "^$CARD\s" "/drm.cfg" | cut -c 11-)
+ load_gfx $FILES && continue
+ # failed... try vendor id only
+ CARD=$(echo $CARD | cut -c 1-4)
+ echo Trying vendor matching for drm drivers for $CARD
+ FILES=$(grep "^$CARD\s" "/drm.cfg" | cut -c 6-)
+ load_gfx $FILES && continue
+ # everything failed for this card
+ echo Unknown PCI vendor id: $CARD
+ SUCCESS="no"
+ done
+ [ "x$SUCCESS" == "xyes" ] && return 0
+ fi
+ # braindead fallback
+ echo "At least one gfx card has no known drm drivers.... will load them all :/"
+ KERN=$(uname -r)
+ RETVAL=1
+ [ -z "$KERN" ] && KERN=$(ls '/lib/modules' | grep '\.' | tail -n 1)
+ for DRM in $(find "/lib/modules/$KERN/kernel/drivers/gpu/drm" -name "*.ko"); do
+ DRM="$(basename "$DRM")"
+ DRM="${DRM%.ko}"
+ modprobe "$DRM" && RETVAL=0
+ done
+ return $RETVAL
+}
+
diff --git a/remote/rootfs/rootfs-stage31/data/etc/functions.inc b/remote/rootfs/rootfs-stage31/data/inc/functions
index ce510aac..f07acc7d 100644
--- a/remote/rootfs/rootfs-stage31/data/etc/functions.inc
+++ b/remote/rootfs/rootfs-stage31/data/inc/functions
@@ -11,6 +11,10 @@
# drop_shell "This is your error message."
#
drop_shell() {
+ if [ -n "$MUTED_OUTPUT" ]; then
+ exec 1>&4 2>&5
+ reset
+ fi
[ $# -gt 0 ] && echo $@
echo "CTRL + D will continue booting."
setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
@@ -23,7 +27,7 @@ drop_shell() {
# Usage:
# read_from_cmdline OPTION
#
-read_from_cmdline(){
+read_from_cmdline() {
[ $# -ne 1 ] && echo "Error - 'read_from_cmdline' requires 1 argument, $# given." && exit 1
local OPTION="$1"
@@ -89,3 +93,9 @@ download() {
return 1
}
+# Add benchmark event to var, including uptime as prefix
+bench_event() {
+ bench_result="${bench_result}$(cut -f 1 -d ' ' "/proc/uptime") $@
+"
+}
+
diff --git a/remote/rootfs/rootfs-stage31/data/inc/network.functions b/remote/rootfs/rootfs-stage31/data/inc/network.functions
new file mode 100644
index 00000000..641f4f55
--- /dev/null
+++ b/remote/rootfs/rootfs-stage31/data/inc/network.functions
@@ -0,0 +1,23 @@
+wait_for_iface() {
+ local DEVICE=$1
+ local TIMEOUT=10
+ echo -n "Waiting for interface $DEVICE: "
+ # Some systems don't have operstate. Seems to be hardware dependent
+ [ ! -e "/sys/class/net/${DEVICE}/operstate" ] && usleep 10000
+ if [ -e "/sys/class/net/${DEVICE}/operstate" ]; then
+ while true; do
+ # check linkstate
+ [ "x$(cat "/sys/class/net/${DEVICE}/operstate")" == "xup" ] && break
+ TIMEOUT=$(( $TIMEOUT - 1 )) # don't wait forever, the pcnet iface of vmware will never be "up" although it's working
+ [ "$TIMEOUT" -le 0 ] && break
+ # else
+ echo -n "."
+ usleep 500000
+ done
+ else
+ # we really don't have a operstate .. then just wait a sec and hope for the best.
+ sleep 1
+ fi
+ echo ".$(cat "/sys/class/net/${DEVICE}/operstate" 2>/dev/null)"
+}
+true
diff --git a/remote/rootfs/rootfs-stage31/data/bin/setup_network b/remote/rootfs/rootfs-stage31/data/inc/setup_network
index 79ae0886..2ba02f84 100755
--- a/remote/rootfs/rootfs-stage31/data/bin/setup_network
+++ b/remote/rootfs/rootfs-stage31/data/inc/setup_network
@@ -5,6 +5,7 @@ echo "Setting up network..."
echo "Main MAC address is '$MAC'"
# setup network
+source /inc/network.functions
# set up loopback networking
echo "Setting up loopback"
@@ -35,17 +36,17 @@ for LINE in $IP_OUT; do
brctl setfd "$BRIDGE" 0.000000000001
ip link set addr "$IFMAC" "$BRIDGE" || drop_shell "Could not set mac of $BRIDGE"
ip link set dev "$IFACE" up
+ wait_for_iface "$IFACE"
brctl addif "$BRIDGE" "$IFACE" || drop_shell "Could not add $IFACE to $BRIDGE"
-
+
+ # save our variables for retry on fail
+ echo "IFACE=$IFACE" > /run/network.conf
+
# analyze ip information from the kernel command line and put parts
# of it into several variables
if [ -n "$IPINFO" ] ; then
getip () {
- local val="$IPINFO:"; i=$(($1 - 1));
- while [ $i -gt 0 ] ; do
- val=${val#*:} ; i=$(($i - 1));
- done;
- echo $val|sed "s/:.*//";
+ echo "${IPINFO}" | awk -F ':' "{print \$$1}"
}
CLIENTIP="$(getip 1)"
SERVERIP="$(getip 2)"
@@ -56,12 +57,14 @@ for LINE in $IP_OUT; do
# we might have an idea of the dns server via preboot
DNS_SERVER="$(getip 5)"
# set static ip address
- ip addr add "$CLIENTIP/$(ipcalc -s -p "$CLIENTIP" "$SUBNET_MASK" | sed "s/.*=//")" broadcast "$BROADCAST_ADDRESS" dev "$BRIDGE"
+ [ -n "$CLIENTIP" ] && ip addr add "$CLIENTIP/$(ipcalc -s -p "$CLIENTIP" "$SUBNET_MASK" | sed "s/.*=//")" broadcast "$BROADCAST_ADDRESS" dev "$BRIDGE"
ip link set dev "$BRIDGE" up
- ip route add default via "$GATEWAY" dev "$BRIDGE"
+ [ -n "$GATEWAY" ] && ip route add default via "$GATEWAY" dev "$BRIDGE"
else
NOIPYET="yes"
fi
+ # Ignore this device later on when systemd handles network interfaces (see hacked 99-systemd.rules in systemd data dir)
+ echo "SUBSYSTEM==\"net\", ACTION==\"add\", KERNEL==\"eth*\", ATTR{address}==\"$IFMAC\", TAG+=\"openslxignore\"" >> "${FUTURE_ROOT}/etc/udev/rules.d/01-ignore-boot-interface.rules"
fi
# youdev
echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$IFMAC\", ATTR{dev_id}==\"0x0\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"$IFACE\"" >> "${FUTURE_ROOT}/etc/udev/rules.d/70-net-boot-nic-name.rules"
@@ -69,17 +72,20 @@ for LINE in $IP_OUT; do
IFACE=""
done
-echo -n "Waiting for interface $BRIDGE: "
-# Some systems don't have operstate. Seems to be hardware dependent
-[ ! -e "/sys/class/net/${BRIDGE}/operstate" ] && sleep 2
-while true; do
- # still no operstate? assume up and hope for the best...
- [ ! -e "/sys/class/net/${BRIDGE}/operstate" ] && break
- # check linkstate
- [ "x$(cat "/sys/class/net/${BRIDGE}/operstate")" == "xup" ] && break
- # else
- echo -n "."
- usleep 500000
-done
-echo "."
+wait_for_iface "$BRIDGE"
+
+# udhcpc
+PARAM=
+if [ -n "$CLIENTIP" ]; then
+ PARAM="-r $CLIENTIP"
+fi
+echo -n "$CLIENTIP" > "/run/firstip"
+echo -n "$GATEWAY" > "/run/firstgw"
+
+# save our variables for retry on fail ff.
+echo "CLIENTIP=$CLIENTIP" >> /run/network.conf
+echo "GATEWAY=$GATEWAY" >> /run/network.conf
+echo "BRIDGE=$BRIDGE" >> /run/network.conf
+udhcpc $PARAM -O domain -O nissrv -O nisdomain -O wpad -O search -t 5 -T 2 -s "/inc/udhcpc-trigger" -f -n -q -i "$BRIDGE"
+# udhcpc return value will be return value of this script
diff --git a/remote/rootfs/rootfs-stage31/data/inc/setup_network_retry b/remote/rootfs/rootfs-stage31/data/inc/setup_network_retry
new file mode 100755
index 00000000..9239d0d7
--- /dev/null
+++ b/remote/rootfs/rootfs-stage31/data/inc/setup_network_retry
@@ -0,0 +1,33 @@
+#!/bin/ash
+
+source /inc/network.functions
+source /run/network.conf
+
+for i in 1 2 3 4 5 6 7 8; do
+ echo "<$i> Try to fix broken network"
+ echo -n "Take interface $IFACE down .. "
+
+ ip link set dev $IFACE down
+ usleep 1000
+
+ echo "and up again.."
+ ip link set dev $IFACE up
+ usleep 1000
+
+ wait_for_iface "$IFACE"
+
+ udhcpc $PARAM -O domain -O nissrv -O nisdomain -O wpad -O search -t 5 -T 2 -s "/inc/udhcpc-trigger" -f -n -q -i "$BRIDGE"
+
+ if [ $? -eq 0 ]; then
+ echo "Finally fixed IP config. Continue boot."
+ RET=0
+ break
+ else
+ RET=1
+ fi
+done
+
+[ $RET -gt 0 ] && echo "Something is really broken.. Please check your network cable and reset your computer."
+
+# create correct return value
+[ $RET -eq 0 ]
diff --git a/remote/rootfs/rootfs-stage31/data/bin/setup_stage32 b/remote/rootfs/rootfs-stage31/data/inc/setup_stage32
index 4e19fb3a..9bf30d25 100755
--- a/remote/rootfs/rootfs-stage31/data/bin/setup_stage32
+++ b/remote/rootfs/rootfs-stage31/data/inc/setup_stage32
@@ -3,7 +3,7 @@
# This script sets up the stage 3.2.
# - downloads/mounts stage32.sqfs
# - merge it with current rootfs through aufs
-# - will not download, if the "nfs=" is used in the
+# - will not download, if the "nfs=" is used in the
# kernel command line
#
#########################################################################
@@ -43,6 +43,27 @@ mkdir -p /mnt/opt/openslx/uniontmp /mnt/tmp
busybox mount -n --move "$FUTURE_ROOT" /mnt/opt/openslx/uniontmp || drop_shell "Problem moving uniontmp."
FUTURE_ROOT="/mnt"
+# Move network stuff
+cp /etc/hostname /etc/hosts /etc/resolv.conf "${FUTURE_ROOT}/etc/"
+[ -s "/run/config" ] && cat "/run/config" >> "${FUTURE_ROOT}/opt/openslx/config"
+
+# if booting with splash, suppress kernel output in stage32
+if [ $SPLASH -eq 1 ]; then
+ if grep -q -E "^ *kernel.printk" "${FUTURE_ROOT}/usr/lib/sysctl.d/50-default.conf"; then
+ sed -i 's/^ *kernel\.printk.*/kernel\.printk = 1 1 0 1/g' "${FUTURE_ROOT}/usr/lib/sysctl.d/50-default.conf"
+ else
+ echo "kernel.printk = 1 1 0 1" >> "${FUTURE_ROOT}/usr/lib/sysctl.d/50-default.conf"
+ fi
+fi
+
+# Kinda specific for virtualization environment: Autologin and run VM for benchmarks
+if [ -n "$SLX_BENCHMARK_VM" ]; then
+ # Enable KDM autologin for demo user
+ sed -i 's/^AutoLoginUser=.*//;s/^AutoLoginEnable=.*/AutoLoginEnable=true\nAutoLoginUser=demo/' "${FUTURE_ROOT}/etc/kde4/kdm/kdmrc"
+ # Running the VM automatically has to be taken care of by run-virt and vmchooser. SLX_BENCHMARK_VM should contain
+ # a numeric value for the index in vmchooser
+fi
+
# "Delete" addon hook-script in aufs view
touch "/mnt/opt/openslx/uniontmp/.wh.addon-init"
diff --git a/remote/rootfs/rootfs-stage31/data/inc/udhcpc-trigger b/remote/rootfs/rootfs-stage31/data/inc/udhcpc-trigger
new file mode 100755
index 00000000..d4249e29
--- /dev/null
+++ b/remote/rootfs/rootfs-stage31/data/inc/udhcpc-trigger
@@ -0,0 +1,92 @@
+#!/bin/ash
+
+exec >> /run/stdout
+exec 2>> /run/stderr
+set -x
+
+if [ "x$1" != "xbound" -a "x$1" != "xrenew" ] || [ "x$interface" != "xbr0" ] || [ -z "$ip" ]; then
+ exit 0
+fi
+
+# If we already got an IP from KCL, see if it differs, and remove first if so
+# We just try to prevent everything from breaking if the DHCP server doesn't
+# objey the renew request by the client and hands out a new address
+if [ -s "/run/firstip" ]; then
+ #...some address is already configured...
+ OLD=$(cat "/run/firstip")
+ if [ "x${OLD}" != "x${ip}" ]; then
+ #...it's a different one, reconfigure...
+ echo "..reconfiguring ${OLD} to ${ip}.."
+ # remove default route and let it be added again below, as it might get lost when changing the primary address on the interface
+ ip route del default 2>/dev/null
+ rm -f -- "/run/firstgw"
+ ip addr del "${OLD}" dev "${interface}" 2>/dev/null
+ ip addr add "${ip}/$(ipcalc -s -p "${ip}" "${subnet}" | sed s/.*=//)" dev "${interface}"
+ fi
+else
+ #...no address configured yet, just add...
+ echo "..adding ${ip}.."
+ ip addr add "${ip}/$(ipcalc -s -p "${ip}" "${subnet}" | sed s/.*=//)" dev "${interface}"
+fi
+echo -n "$ip" > "/run/firstip"
+
+# Same procedure for default gateway
+if [ -n "${router}" ]; then
+ if [ -s "/run/firstgw" ]; then
+ OLD=$(cat "/run/firstgw")
+ if [ "x${OLD}" != "x${router}" ]; then
+ echo "..reconfiguring default gw from ${OLD} to ${router}.."
+ ip route del default 2>/dev/null
+ ip route add default via "$router"
+ fi
+ else
+ ip route add default via "$router"
+ fi
+ echo -n "$router" > "/run/firstgw"
+fi
+
+rm -f -- "/etc/resolv.conf"
+
+# DNS/domain?
+if [ -n "$dns" ]; then
+ echo "..got DNS.."
+ echo "# From DHCP in stage 3.1" >> "/run/config"
+ echo "SLX_DNS='$dns'" >> "/run/config"
+fi
+for serv in $dns; do
+ echo "nameserver $serv" >> "/etc/resolv.conf"
+done
+if [ -z "$domain" ]; then
+ # try to get domain via reverse lookup if empty
+ echo "..trying to get domain via DNS, as DHCP didn't supply one.."
+ fqdn=$(nslookup "$ip" | grep -E "^Address +[0-9]+: +$ip " | head -n 1 | awk '{print $4}')
+ domain="${fqdn#*.}"
+fi
+if [ -n "$domain" ]; then
+ echo "domain $domain" >> "/etc/resolv.conf"
+fi
+if [ -n "$search" ]; then
+ echo "search $search" >> "/etc/resolv.conf"
+elif [ -n "$domain" ]; then
+ echo "search $domain" >> "/etc/resolv.conf"
+fi
+
+
+# Hostname
+if [ -z "$hostname" ]; then
+ # as with domain, if there's no hostname, try to get via DNS
+ echo "..trying to get hostname via DNS, as DHCP didn't supply one.."
+ [ -z "$fqdn" ] && fqdn=$(nslookup "$ip" | grep -E "^Address +[0-9]+: +$ip " | head -n 1 | awk '{print $4}')
+ hostname="${fqdn%%.*}"
+elif [ -n "$domain" ]; then
+ fqdn="${hostname}.${domain%% *}" # in case domain is a list
+fi
+if [ -n "$hostname" ]; then
+ [ -z "$fqdn" ] && fqdn="$hostname"
+ echo "..setting hostname $hostname (fqdn: $fqdn).."
+ echo "$fqdn" > "/proc/sys/kernel/hostname"
+ echo "$fqdn" > "/etc/hostname"
+ echo "$ip $fqdn $hostname" >> "/etc/hosts"
+ echo "SLX_HOSTNAME='$hostname'" >> "/run/config"
+fi
+
diff --git a/remote/rootfs/rootfs-stage31/data/init b/remote/rootfs/rootfs-stage31/data/init
index ae65d9da..368b3a64 100755
--- a/remote/rootfs/rootfs-stage31/data/init
+++ b/remote/rootfs/rootfs-stage31/data/init
@@ -16,12 +16,13 @@
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
# import common functions
-. /etc/functions.inc
+. "/inc/functions"
# mount the important standard directories
-busybox mount -n -t tmpfs -o 'mode=755' run "/run"
[ ! -f /proc/cpuinfo ] && busybox mount -n -t proc proc /proc
+bench_event "KERNEL" "Kernel initialized"
[ ! -d /sys/class ] && busybox mount -n -t sysfs sysfs /sys
+busybox mount -n -t tmpfs -o 'mode=755' run "/run"
# preparations for mounting stage3.2
FUTURE_ROOT="/dev/shm/uniontmp"
@@ -32,67 +33,71 @@ mkdir -p "$FUTURE_ROOT/opt/openslx"
# let kernel know that mdev is to be used for hotplug
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
-# read graphic and network adaptor configuration (without proprietary drivers yet)
-# TODO: must ugly hack ever... needs to be improved when we add prop drivers
-for DRM in /lib/modules/*/kernel/drivers/gpu/drm/*.ko /lib/modules/*/kernel/drivers/gpu/drm/*/*.ko; do
- DRM="$(basename "$DRM")"
- DRM="${DRM%.ko}"
- echo "Trying to load module $DRM"
- modprobe "$DRM"
-done
-
-# discover devices
-mdev -s
-
# read kernel command line for debugging switch
DEBUG=0
-read KCL < /proc/cmdline
-export KCL
+SPLASH=0
+read KCL < "/proc/cmdline"
for opts in ${KCL}; do
case "${opts}" in
debug=*)
DEBUG=${opts#debug=} ;;
ip=*)
# process IP info
- export IPINFO=${opts#ip=} ;;
+ IPINFO=${opts#ip=} ;;
nfs=*)
- export NFS=${opts#nfs=}
- export NFSPATH=${nfs#*:}
- export NFSSERVER=${nfs%:/*}
+ NFS=${opts#nfs=}
+ NFSPATH=${NFS#*:}
+ NFSSERVER=${NFS%:/*}
;;
BOOTIF=*)
- export MAC="$( echo "$opts" | cut -b 11- | tr '-' ':' | tr '[A-Z]' '[a-z]' )" ;; # make mac lowercase for udev (see setup_network)
+ MAC="$( echo "$opts" | cut -b 11- | tr '-' ':' | tr '[A-Z]' '[a-z]' )" ;; # make mac lowercase for udev (see setup_network)
+ splash*)
+ [ -e "/etc/splash.ppm" ] && SPLASH=1
esac
done
-# suppress kernel output if DEBUG is not set
-[ $DEBUG -ge 1 ] && echo "0" > /proc/sys/kernel/printk || echo "4 4 1 7" >/proc/sys/kernel/printk
+. "/inc/drm.functions"
+
+if [ "$SPLASH" -eq 1 ]; then
+ if setup_gfx; then
+ echo "1 1 0 1" > /proc/sys/kernel/printk
+ exec 4>&1 5>&2 > /dev/null 2>&1
+ MUTED_OUTPUT=1
+ setsid fbsplash -x -c -s /etc/splash.ppm
+ fi
+else
+ setup_gfx
+fi
+
-[ $DEBUG -ge 5 ] && drop_shell "Requested Debug Shell: before network."
+# discover devices
+mdev -s
+bench_event "MDEV" "mdev done"
-. "/bin/setup_network" || drop_shell "Error setting up network"
+# suppress kernel output if neither DEBUG nor SPLASH is set
+if [ $SPLASH -eq 0 ]; then
+ [ $DEBUG -ge 1 ] && echo "4 4 1 7" > /proc/sys/kernel/printk || echo "1 1 0 1" >/proc/sys/kernel/printk
+fi
-[ $DEBUG -ge 4 ] && drop_shell "Requested Debug Shell: after network/before configuring."
+[ $DEBUG -ge 4 ] && drop_shell "Requested Debug Shell: before network."
-. "/bin/activate_sysconfig" || drop_shell "Could not source /bin/activate_sysconfig"
+. "/inc/setup_network" || . "/inc/setup_network_retry" || drop_shell "Error setting up network"
+bench_event "NETWORK" "Network up and running"
[ $DEBUG -ge 3 ] && drop_shell "Requested Debug Shell: after network/before configuring."
-# start plymouth if activated
-#if [ $DEBUG -lt 1 ]; then
-# echo "Starting plymouth..."
-# # link the theming directory from the config to the current root
-# ln -sf "${FUTURE_ROOT}/usr/share" /usr/share
-# plymouthd --kernel-command-line="splash" --tty=/dev/tty7 && plymouth show-splash
-#fi
+. "/inc/activate_sysconfig" || drop_shell "Could not source /bin/activate_sysconfig"
+bench_event "CONFIG" "Downloaded config"
+# From here on, we have all the vars from /opt/openslx/config
[ $DEBUG -ge 2 ] && drop_shell "Requested Debug Shell: after configuration/before stage32."
-. "/bin/setup_stage32" || drop_shell "Problem setting up stage3.2"
+. "/inc/setup_stage32" || drop_shell "Problem setting up stage3.2"
+bench_event "STAGE32" "Downloaded stage 3.2"
# copy files needed for stage3.2 to FUTURE_ROOT
-[ $DEBUG -ge 1 ] && echo "Copying busybox etc. to stage32..."
-tar -cp "/bin" "/sbin" "/usr/bin" "/usr/sbin" "/etc/functions.inc" | tar -xp -C "${FUTURE_ROOT}/opt/openslx/"
+echo "Copying busybox etc. to stage32..."
+tar -cp "/bin" "/sbin" "/usr/bin" "/usr/sbin" "/inc/functions" | tar -xp -C "${FUTURE_ROOT}/opt/openslx/"
# set the SLX_ROOT_PASS if given in config
if [ ! -z "$SLX_ROOT_PASS" ]; then
@@ -102,17 +107,18 @@ fi
# one last debug shell if activated
[ $DEBUG -ge 1 ] && drop_shell "Requested Debug Shell: before switch_root."
-# tell plymouth about the immediate rootfs switch
-#[ $DEBUG -lt 1 ] && plymouth update-root-fs --new-root-dir=/mnt
+# need /proc for this ;)
+bench_event "PRESWITCH" "Switching to stage 3.2"
# unmount filesystems
for mnt in proc sys run ; do
- busybox umount -n "$mnt"
+ busybox umount -f -l "/$mnt" 2>/dev/null
done
echo "Switching root...."
+echo "$bench_result" > "${FUTURE_ROOT}/opt/openslx/.benchmark"
# Prepare environment (HOME is needed as a hack for nss_ldap with ssl and no caching)
-unset BOOT_IMAGE initrd KCL ip slxbase slxsrv IPINFO vga ip MAC BOOTIF
+unset BOOT_IMAGE initrd KCL ip slxbase slxsrv IPINFO vga ip MAC BOOTIF DEBUG OLDPWD MUTED_OUTPUT
export HOME=/
export init="/usr/lib/systemd/systemd"
export recovery=
diff --git a/remote/rootfs/rootfs-stage31/rootfs-stage31.build b/remote/rootfs/rootfs-stage31/rootfs-stage31.build
index b2b66459..3711e16d 100644
--- a/remote/rootfs/rootfs-stage31/rootfs-stage31.build
+++ b/remote/rootfs/rootfs-stage31/rootfs-stage31.build
@@ -4,6 +4,7 @@ fetch_source() {
}
build() {
+ local COPYLIST BIN_LOCATION DRM_MODULES FILE BIN MODNAME PCI_FILE ALIAS VENDOR DEVICE
COPYLIST="list_binaries_and_files"
[ -e "$COPYLIST" ] && rm -f "$COPYLIST"
for BIN in $REQUIRED_BINARIES; do
@@ -11,46 +12,63 @@ build() {
[ -z "$BIN_LOCATION" ] && perror "Cannot find $BIN"
get_link_chain "$BIN_LOCATION" >> "$COPYLIST"
done
- for FILE in $REQUIRED_FILES; do
- get_link_chain "$FILE" >> "$COPYLIST"
- done
+
+ mkdir -p "$MODULE_BUILD_DIR/lib"
+ find /lib /lib64 /usr/lib /usr/lib64 \( -name "libnss_dns*" -o -name "libresolv*" \) -exec cp -a {} "$MODULE_BUILD_DIR/lib/" \;
tarcopy "$(cat "$COPYLIST" | sort -u)" "$MODULE_BUILD_DIR"
+
+ # generate drm module loading database
+ pinfo "Generating PCI ID database for DRM drivers"
+ DRM_MODULES="$MODULES_DIR/kernel/build/lib/modules/$SYS_UTS_RELEASE/kernel/drivers/gpu/drm"
+ PCI_FILE="$MODULE_BUILD_DIR/drm.cfg"
+ [ -d "$DRM_MODULES" ] || perror "DRM dir not found at $DRM_MODULES"
+ cp "$MODULE_DIR/templates/drm.cfg" "$PCI_FILE" || perror "Could not copy drm.cfg from templates dir"
+ echo "# -- generated from kernel $SYS_UTS_RELEASE modules:" >> "$PCI_FILE"
+ for FILE in $(find "$DRM_MODULES" -name "*.ko"); do
+ MODNAME=$(basename "$FILE")
+ MODNAME=${MODNAME%.ko}
+ [ -z "$MODNAME" ] && perror "$FILE equals empty modname"
+ echo "# $MODNAME" >> "$PCI_FILE"
+ for ALIAS in $(modinfo "$FILE" | grep '^alias:' | grep -o 'pci:v.*' | tr '[A-F]' '[a-f]'); do
+ VENDOR=$(echo $ALIAS | cut -c 10-13)
+ if [ "x$(echo $ALIAS | cut -c 15)" == "x*" ]; then
+ # device wildcard
+ grep -q -i "^${VENDOR}\s" "$PCI_FILE" && continue
+ echo "${VENDOR} $MODNAME" >> "$PCI_FILE"
+ else
+ # specific device
+ DEVICE=$(echo $ALIAS | cut -c 19-22)
+ grep -q -i "^${VENDOR}:${DEVICE}\s" "$PCI_FILE" && continue
+ echo "${VENDOR}:${DEVICE} $MODNAME" >> "$PCI_FILE"
+ fi
+ done
+ done
}
post_copy() {
pinfo "Generating rootfs for Stage 3.1 ..."
- generate_rootfs
+ generate_rootfs
# copy kernel, modules and firmware
- copy_kernel_modules
- copy_firmware
+ copy_kernel_modules
+ copy_firmware
copy_kernel
-
- # when vmwgfx is loaded via modprobe in stage31, this conf file is read,
- # enables fbdev support for vmware so that
- # fb doesnt break when switching tty's in minilinux running inside vmware
- # TODO: Why isn't this a simple static file in this module's data dir?
- mkdir -p "$TARGET_BUILD_DIR/etc/modprobe.d"
- echo "options vmwgfx enable_fbdev=1" > "${TARGET_BUILD_DIR}"/etc/modprobe.d/vmwgfx-fbdev.conf
}
#
# helper functions to generate the base rootfs
#
generate_rootfs() {
- # create basic directory structure
- mkdir -p "${TARGET_BUILD_DIR}"/{bin,dev,proc,run,etc,mnt,sys} \
- || perror "Cannot create basic directory structure in '${TARGET_BUILD_DIR}'"
-
- # copy device files from running system
- cp -a /dev/{console,kmsg,mem,null,tty,tty0,tty1,tty9,urandom,zero} \
- "${TARGET_BUILD_DIR}"/dev || perror "Cannot copy devices from running system"
-
- # copy libc and ld-linux
- tarcopy "$(list_basic_libs)" "${TARGET_BUILD_DIR}"
-
- # copy required files
- tarcopy "${REQUIRED_FILES}" "${TARGET_BUILD_DIR}"
+ # create basic directory structure
+ mkdir -p "${TARGET_BUILD_DIR}"/{bin,dev,proc,run,etc,mnt,sys} \
+ || perror "Cannot create basic directory structure in '${TARGET_BUILD_DIR}'"
+
+ # copy device files from running system
+ cp -a /dev/{console,kmsg,mem,null,tty,tty0,tty1,tty9,urandom,zero} \
+ "${TARGET_BUILD_DIR}"/dev || perror "Cannot copy devices from running system"
+
+ # copy libc and ld-linux
+ tarcopy "$(list_basic_libs)" "${TARGET_BUILD_DIR}"
}
diff --git a/remote/rootfs/rootfs-stage31/rootfs-stage31.conf b/remote/rootfs/rootfs-stage31/rootfs-stage31.conf
index cd68e75f..4b638678 100644
--- a/remote/rootfs/rootfs-stage31/rootfs-stage31.conf
+++ b/remote/rootfs/rootfs-stage31/rootfs-stage31.conf
@@ -1,12 +1,15 @@
-REQUIRED_MODULES=" busybox
- kernel"
-REQUIRED_KERNEL_MODULES=" kernel/drivers/video/sis/sisfb.ko
+REQUIRED_MODULES="
+ busybox
+ kernel
+"
+REQUIRED_KERNEL_MODULES="
+ kernel/drivers/video/sis/sisfb.ko
kernel/drivers/video/via/viafb.ko
- kernel/drivers/acpi/video.ko
- kernel/drivers/ssb/ssb.ko
+ kernel/drivers/acpi/video.ko
+ kernel/drivers/ssb/ssb.ko
kernel/drivers/acpi/button.ko
- kernel/drivers/gpu/drm/drm*.ko
- kernel/drivers/gpu/drm/*/*.ko
+ kernel/drivers/gpu/drm/drm*.ko
+ kernel/drivers/gpu/drm/*/*.ko
kernel/drivers/hid/hid-generic.ko
kernel/drivers/i2c/algos/i2c-algo-bit.ko
kernel/drivers/i2c/i2c-core.ko
@@ -45,21 +48,32 @@ REQUIRED_KERNEL_MODULES=" kernel/drivers/video/sis/sisfb.ko
kernel/net/802/stp.ko
kernel/net/bridge/bridge.ko
kernel/ubuntu/aufs/aufs.ko
- kernel/fs/aufs/aufs.ko"
-REQUIRED_FIRMWARE=" 3com/
- e100/
- matrox/
- r128/
- radeon/
- RTL8192E/
- RTL8192SE/
- rtl_nic/
- tigon/"
+ kernel/fs/aufs/aufs.ko
+"
+REQUIRED_FIRMWARE="
+ 3com/
+ e100/
+ matrox/
+ r128/
+ radeon/
+ RTL8192E/
+ RTL8192SE/
+ rtl_nic/
+ tigon/
+"
REQUIRED_BINARIES="
grep
"
-REQUIRED_FILES="
+REQUIRED_LIBRARIES="
+ libnss_dns
+ libresolv
+"
+REQUIRED_SYSTEM_FILES="
/etc/protocols
/etc/services
/etc/localtime
"
+REQUIRED_FILES="
+ /drm.cfg
+"
+
diff --git a/remote/rootfs/rootfs-stage31/templates/drm.cfg b/remote/rootfs/rootfs-stage31/templates/drm.cfg
new file mode 100644
index 00000000..f0a9db0c
--- /dev/null
+++ b/remote/rootfs/rootfs-stage31/templates/drm.cfg
@@ -0,0 +1,6 @@
+# nvidia
+10de:0193 @nvidia
+# aliases
+@nvidia nvidia/nvidia.ko nvidia/nvidia-uvm.ko
+@nvidia_fallback nouveau
+
diff --git a/remote/rootfs/rootfs-stage32/data/etc/modprobe.d/50-mltk-blacklist.conf b/remote/rootfs/rootfs-stage32/data/etc/modprobe.d/50-mltk-blacklist.conf
index 7a01777c..00be09ca 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/modprobe.d/50-mltk-blacklist.conf
+++ b/remote/rootfs/rootfs-stage32/data/etc/modprobe.d/50-mltk-blacklist.conf
@@ -2,4 +2,10 @@
# Intel corporation 82Q35 Express MEI controller spams syslog under
# some 3.0 kernels
-# blacklist mei
+blacklist mei
+
+# pcspeaker device driver
+blacklist pcspkr
+
+# Strange device driver for alsa via pcspeaker
+blacklist snd-pcsp
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/early-network-triggers.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/early-network-triggers.service
new file mode 100644
index 00000000..2c5d7769
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/early-network-triggers.service
@@ -0,0 +1,13 @@
+# This will trigger network.target etc. at an early point,
+# if network setup happened in stage31 (dhcp...)
+[Unit]
+Description=Trigger network targets early
+DefaultDependencies=no
+Wants=systemd-tmpfiles-setup.service
+Before=sysinit.target
+After=systemd-tmpfiles-setup.service
+
+[Service]
+Type=oneshot
+ExecStart=/opt/openslx/scripts/systemd-early_network_triggers
+RemainAfterExit=yes
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-stage4.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-stage4.service
index 15725f8f..7f8b54a8 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-stage4.service
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/mount-stage4.service
@@ -1,8 +1,9 @@
[Unit]
Description=Mount Openslx Stage 4
DefaultDependencies=no
-Wants=setup-dnbd3.service
+Wants=setup-dnbd3.service stage4.target
After=setup-dnbd3.service
+Before=stage4.target
[Service]
Type=oneshot
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-dns.target b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-dns.target
index c0b7793b..bc12cd1b 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-dns.target
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-dns.target
@@ -1,4 +1,4 @@
[Unit]
-
Description=DNS Server available
+ConditionPathExists=/run/network/dns-ready
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-gateway.target b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-gateway.target
index cfeb719c..770eb697 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-gateway.target
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/network-gateway.target
@@ -1,3 +1,4 @@
[Unit]
-
Description=Default route configured
+ConditionPathExists=/run/network/gateway-ready
+
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service
index a48375d0..ebaa9afb 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/ntpdate.service
@@ -2,7 +2,6 @@
Description=Update date from local time server
After=network.target
Requires=network.target
-ConditionPathExists=/run/udhcpc/network-ready
[Service]
Type=oneshot
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service
index df075922..ee965219 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service
@@ -1,9 +1,8 @@
[Unit]
Description=Setup local disk partitions (tmp, swap)
DefaultDependencies=no
-Before=sysinit.target
-After=systemd-udev-trigger.service
-Wants=sysinit.target
+Before=basic.target
+After=systemd-udev-settle.service
[Service]
Type=oneshot
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/stage4.target b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/stage4.target
index 465a324c..2b829854 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/stage4.target
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/stage4.target
@@ -1,3 +1,5 @@
[Unit]
-
+Wants=mount-stage4.service
+After=mount-stage4.service
Description=OpenSLX Stage 4
+RefuseManualStart=yes
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/early-network-triggers.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/early-network-triggers.service
new file mode 120000
index 00000000..8aec0a6d
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/early-network-triggers.service
@@ -0,0 +1 @@
+../early-network-triggers.service \ No newline at end of file
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/zram-swap.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/zram-swap.service
new file mode 120000
index 00000000..c1754b11
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/sysinit.target.wants/zram-swap.service
@@ -0,0 +1 @@
+../zram-swap.service \ No newline at end of file
diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/zram-swap.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/zram-swap.service
new file mode 100644
index 00000000..a458b380
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/zram-swap.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Setup zram swap partitions
+DefaultDependencies=no
+Wants=swap.target
+Before=swap.target
+
+[Service]
+Type=oneshot
+ExecStart=/opt/openslx/scripts/systemd-zram_swap
+RemainAfterExit=yes
diff --git a/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/network.conf b/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/network.conf
new file mode 100644
index 00000000..346ecf7e
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/network.conf
@@ -0,0 +1 @@
+d /run/network 0755 root root
diff --git a/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/run-lock.conf b/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/run-lock.conf
index ef610bdc..a20cf5ce 100644
--- a/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/run-lock.conf
+++ b/remote/rootfs/rootfs-stage32/data/etc/tmpfiles.d/run-lock.conf
@@ -1,2 +1,2 @@
-D /run/lock 1777 root root
+d /run/lock 1777 root root
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-early_network_triggers b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-early_network_triggers
new file mode 100755
index 00000000..990fdb44
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-early_network_triggers
@@ -0,0 +1,29 @@
+#!/bin/ash
+
+# This script will trigger several network targets if
+# applicable at an early point.
+# This happens if dhcp/network setup was successful in stage31
+
+# Main interface
+BRIDGE="br0"
+
+if [ ! -e "/sys/class/net/${BRIDGE}/operstate" -o "x$(cat "/sys/class/net/${BRIDGE}/operstate")" == "xup" ] && [ -e "/opt/openslx/uniontmp/etc/hostname" -o -e "/opt/openslx/uniontmp/etc/resolv.conf" ]; then
+ echo "Triggering network.target"
+ touch "/run/network/network-ready"
+ systemctl start network.target &
+fi
+
+if [ -s "/etc/resolv.conf" ] && grep -q "^nameserver" "/etc/resolv.conf"; then
+ echo "Triggering network-dns.target"
+ touch "/run/network/dns-ready"
+ systemctl start network-dns.target &
+fi
+
+if route -n | grep -q -E '^0\.0\.0\.0.*U.*G'; then
+ echo "Triggering network-gateway.target"
+ touch "/run/network/gateway-ready"
+ systemctl start network-gateway.target &
+fi
+
+exit 0
+
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-mount_stage4 b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-mount_stage4
index d0a3bc29..1b7935c7 100755
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-mount_stage4
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-mount_stage4
@@ -60,8 +60,5 @@ fi
# dbus reload needed eg. for gnome etc. and perhaps other service files which stage4 needs:
systemctl reload dbus.service
-# tell systemd that stage4 was reached.
-systemctl start stage4.target &
-
exit 0
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions
index 362e8f14..ca7317d4 100755
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions
@@ -37,7 +37,7 @@ diskfm () {
found=yes
case "mkfs.$fs" in
mkfs.xfs)
- fopt="-f"
+ fopt="-f -b size=4k -s size=4k -l size=512b" # fastest formatting possible :)
mopt="-o noexec"
;;
mkfs.ext2)
@@ -109,7 +109,7 @@ cat "/etc/disk.partition"
HAVE_SWAP=no
for hdpartnr in $(sed -n -e "/ 82 /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do
echo -e "$hdpartnr\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab"
- swapon "$hdpartnr" -p 10 && HAVE_SWAP=yes
+ swapon "$hdpartnr" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that)
done
# We use special non assigned partition type (id44) for harddisk scratch
@@ -167,27 +167,5 @@ if [ "$HAVE_SWAP" = "no" ]; then
slxlog "partition-swap" "Have no (formatted) swap partition, using zram swap only!" "/etc/disk.partition"
fi
-# Add zram swap
-[ "$(uname -r)" == "3.8.13.8-openslx" ] && exit 0
-CPUS=$(grep -c -E "^processor.*[0-9]+$" /proc/cpuinfo)
-if [ -z "$CPUS" ]; then
- echo "ERROR: Could not determine CPU core count"
-else
- [ "$CPUS" -gt "16" ] && CPUS=16 # zram can only handle up to 32 devices, the system can apparently even just handle 29 swap partitions, so use a reasonable upper limit
- if ! modprobe zram "num_devices=$CPUS"; then
- echo "ERROR: Could not load zram module"
- else
- TOTAL=$(grep ^MemTotal /proc/meminfo | awk '{print $2}')
- USE=$(( $TOTAL / ( 2 * $CPUS ) ))
- echo "Have $CPUS cores, $TOTAL kb mem, use $USE kb zram swap per core"
- USE=$(( $USE * 1024 ))
- DEV=0
- while [ "$DEV" -lt "$CPUS" ]; do
- echo "$USE" > "/sys/block/zram${DEV}/disksize"
- mkswap "/dev/zram${DEV}"
- swapon "/dev/zram${DEV}" -p 1000
- DEV=$(( $DEV + 1 ))
- done
- fi
-fi
+exit 0
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons
index f1253602..5bed4c7f 100755
--- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons
@@ -20,7 +20,7 @@
[ -z "${SLX_ADDONS}" ] && { echo "No addons configured. Nothing to do :-)."; exit 0; }
# source functions.inc for the download function
-. /opt/openslx/etc/functions.inc || { echo "functions.inc not found!"; exit 1337; }
+. /opt/openslx/inc/functions || { echo "/opt/openslx/inc/functions not found!"; exit 1337; }
# quick fix for the missing FUTURE_ROOT needed by /opt/openslx/etc/functions.inc
export FUTURE_ROOT="/"
@@ -75,7 +75,7 @@ if [ $# -eq 1 ]; then
# now append it to /
echo "Appending ${ADDON_MOUNT_POINT} to /"
- if ! mount -o "remount,append:${ADDON_MOUNT_POINT}=ro" / ; then
+ if ! mount -o "remount,ins:2:${ADDON_MOUNT_POINT}=ro" / ; then # ins:2 makes sure the addon is after tmpfs and stage32, but before stage4
slxlog --echo "Failed to append ${ADDON_MOUNT_POINT} to the aufs. Cleaning up..."
umount -l ${ADDON_MOUNT_POINT} || echo "Could not unmount ${ADDON_MOUNT_POINT}!"
exit 1
diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-zram_swap b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-zram_swap
new file mode 100755
index 00000000..f8bd5682
--- /dev/null
+++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-zram_swap
@@ -0,0 +1,60 @@
+#!/bin/ash
+# Copyright (c) 2013 - 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 under http://openslx.org
+#
+# Local hard disk autodetection script for OpenSLX linux stateless clients,
+# detecting swap and special partitions
+
+#############################################################################
+
+
+# Add zram swap
+# Some older ubuntu kernels had a problem here, see https://bugs.launchpad.net/ubuntu/+source/linux-lts-raring/+bug/1217189
+# So make sure you're up to date
+
+make_swap () {
+ [ $# -ne 2 ] && echo "make_swap: Wrong parameter count $#" && exit 1
+ local USE="$1"
+ local DEV="$2"
+ echo "$USE" > "/sys/block/zram${DEV}/disksize"
+ mkswap "/dev/zram${DEV}"
+ swapon "/dev/zram${DEV}" -p 1000 # high priority (in case we have hdd swap 0x82, prefer zram)
+}
+
+CPUS=$(grep -c -E "^processor.*[0-9]+$" "/proc/cpuinfo")
+if [ -z "$CPUS" ]; then
+ echo "ERROR: Could not determine CPU core count"
+ exit 1
+fi
+
+[ "$CPUS" -gt "16" ] && CPUS=16 # zram can only handle up to 32 devices, the system can apparently even just handle 29 swap partitions, so use a reasonable upper limit
+if ! modprobe zram "num_devices=$CPUS"; then
+ echo "ERROR: Could not load zram module"
+ exit 1
+fi
+
+TOTAL=$(grep ^MemTotal /proc/meminfo | awk '{print $2}')
+USE=$(( $TOTAL / ( 2 * $CPUS ) ))
+echo "Have $CPUS cores, $TOTAL kb mem, use $USE kb zram swap per core"
+USE=$(( $USE * 1024 ))
+DEV=0
+while [ "$DEV" -lt "$CPUS" ]; do
+ make_swap "$USE" "$DEV" &
+ LAST=$!
+ DEV=$(( $DEV + 1 ))
+done
+
+# Wait, so we don't trigger swap.target too early
+while kill -0 "$LAST"; do
+ usleep 100000
+done
+
+exit 0
+
diff --git a/remote/rootfs/rootfs-stage32/rootfs-stage32.build b/remote/rootfs/rootfs-stage32/rootfs-stage32.build
index a751b8f4..bd6d3106 100644
--- a/remote/rootfs/rootfs-stage32/rootfs-stage32.build
+++ b/remote/rootfs/rootfs-stage32/rootfs-stage32.build
@@ -123,7 +123,8 @@ post_copy() {
if [ ! -s "$TARGET_BUILD_DIR/etc/distro.png" ]; then
local DIST=$(lsb_release -si)
if [ -n "$DIST" ]; then
- wget -O "$TARGET_BUILD_DIR/etc/distro.png" "http://132.230.8.113/distro_logo.php?distro=$DIST"
+ [ -z "$CFG_DISTLOGO_URL" ] && CFG_DISTLOGO_URL='http://mltk-services.ruf.uni-freiburg.de/distro_logo.php?distro='
+ wget -O "$TARGET_BUILD_DIR/etc/distro.png" "${CFG_DISTLOGO_URL}${DIST}"
if [ ! -s "$TARGET_BUILD_DIR/etc/distro.png" ]; then
rm -f "$TARGET_BUILD_DIR/etc/distro.png"
pwarning "Could not download distro-logo"
diff --git a/remote/setup_target b/remote/setup_target
index 11a8ffbb..4b026a6d 100755
--- a/remote/setup_target
+++ b/remote/setup_target
@@ -54,11 +54,13 @@
MODE_DIR="${ROOT_DIR}/remote"
MODULES_DIR="${MODE_DIR}/modules"
EXPORT_DIR="/export/build"
+[ -z "$REMOTE_EXPORT_DIR" ] || EXPORT_DIR=$REMOTE_EXPORT_DIR
# Keep track of processed modules so we don't
# build a module multiple times when following dependencies
PROCESSED_MODULES=""
initial_checks () {
+ get_kernel_version
detect_distribution
}
@@ -120,7 +122,7 @@ read_build () {
export_builds() {
[ ! -d "${MODE_DIR}/builds" ] && perror "No ${MODE_DIR}/builds, nothing to export."
- if mount|grep -q tm-scripts/remote/builds; then
+ if mount|grep -q ${MODE_DIR}/builds; then
pwarning "${MODE_DIR}/builds already exported! Ignoring..."
return 1;
fi
@@ -389,6 +391,8 @@ process_module() {
pdebug "## Installing dependencies"
cd "${MODULE_DIR}" || perror "cd to '${MODULE_DIR}' failed."
install_dependencies
+ # update kernel version variables before running a module, as the last one might have been the kernel...
+ get_kernel_version
# Fetch source code
if [ ! -e "$SOURCE_FLAG" ]; then
pinfo "## Fetching source"
@@ -523,8 +527,8 @@ clean_kernel_module() {
[ "x$USER_INPUT" == "xy" ] && CLEAN=1
fi
- pinfo "Cleaning kernel module (including sources and compiled stuff)."
if [[ $CLEAN == 1 ]]; then
+ pinfo "Cleaning kernel module (including sources and compiled stuff)."
cd "${TARGET_DIR}/kernel" || perror "Could not cd to ${TARGET_DIR}/kernel"
if [ -e build ]; then
rm -rf build || perror "Could not delete ${TARGET_DIR}/kernel/build"
@@ -548,10 +552,10 @@ clean_kernel_module() {
if [ -L ksrc ]; then
unlink ksrc || perror "Could not unlink ${TARGET_DIR}/kernel/ksrc."
fi
+ pinfo "Done cleaning kernel."
else
pinfo "Not confirmed, not cleaning kernel module."
fi
- pinfo "Done cleaning kernel."
}
# Recursively strip binaries and libraries in the given directory
diff --git a/remote/targets/stage31/plymouth b/remote/targets/stage31/plymouth
deleted file mode 120000
index 66a16832..00000000
--- a/remote/targets/stage31/plymouth
+++ /dev/null
@@ -1 +0,0 @@
-../../modules/plymouth \ No newline at end of file
diff --git a/remote/targets/stage31/splash-openslx b/remote/targets/stage31/splash-openslx
new file mode 120000
index 00000000..ca44930e
--- /dev/null
+++ b/remote/targets/stage31/splash-openslx
@@ -0,0 +1 @@
+../../modules/splash-openslx \ No newline at end of file
diff --git a/remote/targets/stage32-bwlp/plymouth b/remote/targets/stage32-bwlp/plymouth
deleted file mode 120000
index 66a16832..00000000
--- a/remote/targets/stage32-bwlp/plymouth
+++ /dev/null
@@ -1 +0,0 @@
-../../modules/plymouth \ No newline at end of file
diff --git a/remote/targets/stage32-bwlp/smbclient b/remote/targets/stage32-bwlp/smbclient
new file mode 120000
index 00000000..df5f6eb4
--- /dev/null
+++ b/remote/targets/stage32-bwlp/smbclient
@@ -0,0 +1 @@
+../../modules/smbclient/ \ No newline at end of file
diff --git a/remote/targets/stage32-lightdm/plymouth b/remote/targets/stage32-lightdm/plymouth
deleted file mode 120000
index 66a16832..00000000
--- a/remote/targets/stage32-lightdm/plymouth
+++ /dev/null
@@ -1 +0,0 @@
-../../modules/plymouth \ No newline at end of file
diff --git a/remote/targets/stage32-opensuse/iptables-helper b/remote/targets/stage32-opensuse/iptables-helper
new file mode 120000
index 00000000..e449282d
--- /dev/null
+++ b/remote/targets/stage32-opensuse/iptables-helper
@@ -0,0 +1 @@
+../../modules/iptables-helper \ No newline at end of file
diff --git a/remote/targets/stage32-opensuse/plymouth b/remote/targets/stage32-opensuse/plymouth
deleted file mode 120000
index 66a16832..00000000
--- a/remote/targets/stage32-opensuse/plymouth
+++ /dev/null
@@ -1 +0,0 @@
-../../modules/plymouth \ No newline at end of file
diff --git a/remote/targets/stage32-scientific/plymouth b/remote/targets/stage32-scientific/plymouth
deleted file mode 120000
index 66a16832..00000000
--- a/remote/targets/stage32-scientific/plymouth
+++ /dev/null
@@ -1 +0,0 @@
-../../modules/plymouth \ No newline at end of file
diff --git a/remote/targets/stage32/plymouth b/remote/targets/stage32/plymouth
deleted file mode 120000
index 66a16832..00000000
--- a/remote/targets/stage32/plymouth
+++ /dev/null
@@ -1 +0,0 @@
-../../modules/plymouth \ No newline at end of file