diff options
| author | Simon Rettberg | 2015-05-15 17:36:29 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2015-05-15 17:36:29 +0200 |
| commit | 9fff0a99fa0031c5b70a43b5eea93681ca0f70be (patch) | |
| tree | c9ec0dcd587b003d3be63905245e68f102397465 /remote | |
| parent | Compatibility improvements with ldadp and windows servers in mount scripts (diff) | |
| parent | [vbox] CAUTION: COMPATIBILITY BREAK to V3! virtualbox runs now, needs further (diff) | |
| download | tm-scripts-9fff0a99fa0031c5b70a43b5eea93681ca0f70be.tar.gz tm-scripts-9fff0a99fa0031c5b70a43b5eea93681ca0f70be.tar.xz tm-scripts-9fff0a99fa0031c5b70a43b5eea93681ca0f70be.zip | |
Merge branch 'master' of dnbd3:openslx-ng/tm-scripts
Diffstat (limited to 'remote')
29 files changed, 1362 insertions, 140 deletions
diff --git a/remote/modules/alsa/module.conf.opensuse b/remote/modules/alsa/module.conf.opensuse index 17651c29..a9ba1d50 100644 --- a/remote/modules/alsa/module.conf.opensuse +++ b/remote/modules/alsa/module.conf.opensuse @@ -3,3 +3,8 @@ REQUIRED_CONTENT_PACKAGES=" alsa libasound2 " +REQUIRED_INSTALLED_PACKAGES=" + alsa-utils + alsa + libasound2 +" diff --git a/remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf b/remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf new file mode 100644 index 00000000..3e78eb50 --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf @@ -0,0 +1,164 @@ +# +# General configuration +# +# start-default-seat = True to always start one seat if none are defined in the configuration +# greeter-user = User to run greeter as +# minimum-display-number = Minimum display number to use for X servers +# minimum-vt = First VT to run displays on +# lock-memory = True to prevent memory from being paged to disk +# user-authority-in-system-dir = True if session authority should be in the system location +# guest-account-script = Script to be run to setup guest account +# logind-check-graphical = True to on start seats that are marked as graphical by logind +# log-directory = Directory to log information to +# run-directory = Directory to put running state in +# cache-directory = Directory to cache to +# sessions-directory = Directory to find sessions +# remote-sessions-directory = Directory to find remote sessions +# greeters-directory = Directory to find greeters +# +[LightDM] +#start-default-seat=true +#greeter-user=lightdm +#minimum-display-number=0 +minimum-vt=1 +#lock-memory=true +#user-authority-in-system-dir=false +guest-account-script=/usr/local/bin/guest-account +#logind-check-graphical=false +#log-directory=/var/log/lightdm +run-directory=/run/lightdm +#cache-directory=/var/cache/lightdm +#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions +#remote-sessions-directory=/usr/share/lightdm/remote-sessions + +greeters-directory=/usr/local/share/xgreeters:/usr/share/lightdm/greeters:/usr/share/xgreeters + +# +# Seat defaults +# +# type = Seat type (xlocal, xremote) +# pam-service = PAM service to use for login +# pam-autologin-service = PAM service to use for autologin +# pam-greeter-service = PAM service to use for greeters +# xserver-command = X server command to run (can also contain arguments e.g. X -special-option) +# xserver-layout = Layout to pass to X server +# xserver-config = Config file to pass to X server +# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server +# xserver-share = True if the X server is shared for both greeter and session +# xserver-hostname = Hostname of X server (only for type=xremote) +# xserver-display-number = Display number of X server (only for type=xremote) +# xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true) +# xdmcp-port = XDMCP UDP/IP port to communicate on +# xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf) +# unity-compositor-command = Unity compositor command to run (can also contain arguments e.g. unity-system-compositor -special-option) +# unity-compositor-timeout = Number of seconds to wait for compositor to start +# greeter-session = example-greeter +# greeter-hide-users = True to hide the user list +# greeter-allow-guest = True if the greeter should show a guest login option +# greeter-show-manual-login = True if the greeter should offer a manual login option +# greeter-show-remote-login = True if the greeter should offer a remote login option +# user-session = Session to load for users +# allow-user-switching = True if allowed to switch users +# allow-guest = True if guest login is allowed +# guest-session = Session to load for guests (overrides user-session) +# session-wrapper = Wrapper script to run session with +# greeter-wrapper = Wrapper script to run greeter with +# guest-wrapper = Wrapper script to run guest sessions with +# display-setup-script = Script to run when starting a greeter session (runs as root) +# display-stopped-script = Script to run after stopping the display server (runs as root) +# greeter-setup-script = Script to run when starting a greeter (runs as root) +# session-setup-script = Script to run when starting a user session (runs as root) +# session-cleanup-script = Script to run when quitting a user session (runs as root) +# autologin-guest = True to log in as guest by default +# autologin-user = User to log in with by default (overrides autologin-guest) +# autologin-user-timeout = Number of seconds to wait before loading default user +# autologin-session = Session to load for automatic login (overrides user-session) +# autologin-in-background = True if autologin session should not be immediately activated +# exit-on-failure = True if the daemon should exit if this seat fails +# +[SeatDefaults] +#type=xlocal +#pam-service=lightdm +#pam-autologin-service=lightdm-autologin +#pam-greeter-service=lightdm-greeter +#xserver-command=X +#xserver-layout= +#xserver-config= +#xserver-allow-tcp=false +#xserver-share=true +#xserver-hostname= +#xserver-display-number= +#xdmcp-manager= +#xdmcp-port=177 +#xdmcp-key= +#unity-compositor-command=unity-system-compositor +#unity-compositor-timeout=60 + +greeter-session=netpoint + +greeter-hide-users=false +greeter-allow-guest=true +#greeter-show-manual-login=false +#greeter-show-remote-login=true +#user-session=default +#allow-user-switching=true +allow-guest=true + +guest-session=/usr/bin/icewm + +# Keine Ahnung session-wrapper=/etc/lightdm/Xsession + +#greeter-wrapper= +guest-wrapper=/usr/local/bin/guest-session +#display-setup-script= +#display-stopped-script= +#greeter-setup-script= +session-setup-script=/usr/local/bin/guest-setup +session-cleanup-script=/usr/local/bin/guest-cleanup +#autologin-guest=true +#autologin-user= +#autologin-user-timeout=0 +#autologin-in-background=false +#autologin-session=UNIMPLEMENTED +#exit-on-failure=false + +# +# Seat configuration +# +# Each seat must start with "Seat:". +# Uses settings from [SeatDefaults], any of these can be overriden by setting them in this section. +# +#[Seat:0] + +# +# XDMCP Server configuration +# +# enabled = True if XDMCP connections should be allowed +# port = UDP/IP port to listen for connections on +# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf) +# +# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn. Alternatively +# it can be a word and the first 7 characters are used as the key. +# +[XDMCPServer] +#enabled=false +#port=177 +#key= + +# +# VNC Server configuration +# +# enabled = True if VNC connections should be allowed +# command = Command to run Xvnc server with +# port = TCP/IP port to listen for connections on +# width = Width of display to use +# height = Height of display to use +# depth = Color depth of display to use +# +[VNCServer] +#enabled=false +#command=Xvnc +#port=5900 +#width=1024 +#height=768 +#depth=8 diff --git a/remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager b/remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager new file mode 100644 index 00000000..9a64a124 --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager @@ -0,0 +1,113 @@ +## Path: Desktop/Display manager +## Type: string(Xorg) +## Default: "Xorg" +# +DISPLAYMANAGER_XSERVER="Xorg" +## Path: Desktop/Display manager +## Description: settings to generate a proper displaymanager config + +## Type: string(kdm,xdm,gdm,wdm,entrance,console,lightdm,sddm) +## Default: "" +# +# Here you can set the default Display manager (kdm/xdm/gdm/wdm/entrance/console). +# all changes in this file require a restart of the displaymanager +# +# DISPLAYMANAGER="kdm" +DISPLAYMANAGER="lightdm" + +## Type: yesno +## Default: no +# +# Allow remote access (XDMCP) to your display manager (xdm/kdm/gdm). Please note +# that a modified kdm or xdm configuration, e.g. by KDE control center +# will not be changed. For gdm, values will be updated after change. +# XDMCP service should run only on trusted networks and you have to disable +# firewall for interfaces, where you want to provide this service. +# +DISPLAYMANAGER_REMOTE_ACCESS="no" + +## Type: yesno +## Default: no +# +# Allow remote access of the user root to your display manager. Note +# that root can never login if DISPLAYMANAGER_SHUTDOWN is "auto" and +# System/Security/Permissions/PERMISSION_SECURITY is "paranoid" +# +DISPLAYMANAGER_ROOT_LOGIN_REMOTE="no" + +## Type: yesno +## Default: yes +# +# Let the displaymanager start a local Xserver. +# Set to "no" for remote-access only. +# Set to "no" on architectures without any Xserver (e.g. s390/s390x). +# +DISPLAYMANAGER_STARTS_XSERVER="yes" + +## Type: yesno +## Default: no +# +# TCP port 6000 of Xserver. When set to "no" (default) Xserver is +# started with "-nolisten tcp". Only set this to "yes" if you really +# need to. Remote X service should run only on trusted networks and +# you have to disable firewall for interfaces, where you want to +# provide this service. Use ssh X11 port forwarding whenever possible. +# +DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN="no" + +## Type: string +## Default: +# +# Define the user whom should get logged in without request. If string +# is empty, display standard login dialog. +# +DISPLAYMANAGER_AUTOLOGIN="" + +## Type: yesno +## Default: no +# +# Allow all users to login without password, but ask for the user, if +# DISPLAYMANAGER_AUTOLOGIN is empty. +# +DISPLAYMANAGER_PASSWORD_LESS_LOGIN="no" + +## Type: yesno +## Default: no +# +# Display a combobox for Active Directory domains. +# +DISPLAYMANAGER_AD_INTEGRATION="no" + +## Type: list(root,all,none,auto) +## Default: auto +# +# Determine who will be able to shutdown or reboot the system in kdm. Valid +# values are: "root" (only root can shutdown), "all" (everybody can shutdown), +# "none" (nobody can shutdown from displaymanager), "auto" (follow +# System/Security/Permissions/PERMISSION_SECURITY to decide: "easy local" is +# equal to "all", everything else is equal to "root"). gdm respects the +# PolicyKit settings for ConsoleKit. Shutdown configuration can be done via +# the polkit-default-privs mechanism. +# +DISPLAYMANAGER_SHUTDOWN="auto" +## Path: Desktop/Display manager +## Description: settings to generate a proper displaymanager config +## Config: kdm + +## Type: string +## Default: +# +# Defines extra Server Arguments given to the kdm display manager when +# starting a local display. Useful to override e.g. the -dpi setting. +# +DISPLAYMANAGER_KDM_LOCALARGS="" + +## Type: yesno +## Default: yes +# +# Allow local access of the user root to your display manager. Note +# that root can never login if DISPLAYMANAGER_SHUTDOWN is "auto" and +# System/Security/Permissions/PERMISSION_SECURITY is "paranoid". +# This settings currently works only with KDM. +# +DISPLAYMANAGER_ROOT_LOGIN_LOCAL="yes" diff --git a/remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager b/remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager new file mode 100644 index 00000000..12120320 --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager @@ -0,0 +1,51 @@ +## Type: string +## Default: +## Path: Desktop +## Description: default mouse cursor theme +# +# Name of mouse cursor theme for X11. Possible themes can be found +# in /usr/share/icons/ +# +X_MOUSE_CURSOR="DMZ" +## Path: Desktop/Window manager +## Description: +## Type: string(gnome,kde4,kde,lxde,xfce,twm,icewm) +## Default: kde4 +## Config: profiles,kde,susewm +# +# Here you can set the default window manager (kde, fvwm, ...) +# changes here require at least a re-login +# DEFAULT_WM="kde-plasma" +DEFAULT_WM="xfce" + +## Type: yesno +## Default: yes +# +# install the SuSE extension for new users +# (theme and additional functions) +# +INSTALL_DESKTOP_EXTENSIONS="yes" +## Path: Desktop +## Description: prepare global sycoca database for faster first startup +## Type: list(yes,initial,no) +## Default: initial +# +# building a global sycoca database, which can be used at first user +# login in KDE +# +KDE_BUILD_GLOBAL_SYCOCA="initial" + +## Type: yesno +## Default: yes +# +# To disable IPv6 support within KDE. It might solve large timeouts due to +# broken servers which claim to have IPv6 support, but do not respond. +# +KDE_USE_IPV6="yes" + +## Type: yesno +## Default: yes +# +# IDN support can get disabled to avoid DNS phishing for example. +# +KDE_USE_IDN="yes" diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account new file mode 100644 index 00000000..3eed0efc --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account @@ -0,0 +1,3 @@ +#!/bin/sh + +echo "demo" diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup new file mode 100755 index 00000000..32179cec --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup @@ -0,0 +1,8 @@ +#!/bin/sh + +IPTABLES=$(/usr/bin/which iptables) + +"$IPTABLES" -F +"$IPTABLES" -P INPUT ACCEPT +"$IPTABLES" -P FORWARD ACCEPT +"$IPTABLES" -P OUTPUT ACCEPT diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-session b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-session new file mode 100755 index 00000000..2c22a68c --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-session @@ -0,0 +1,4 @@ +#!/bin/sh + +exec /usr/bin/icewm & +# exec /usr/bin/firefox diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup new file mode 100755 index 00000000..cb6791fc --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup @@ -0,0 +1,25 @@ +#!/bin/sh + +IPTABLES=$(/usr/bin/which iptables) + +# reset +"$IPTABLES" -F INPUT +"$IPTABLES" -F FORWARD +"$IPTABLES" -F OUTPUT + +if [ "x${USER}" = "xdemo" ]; then + # filter out the internetz + "$IPTABLES" -P INPUT DROP + "$IPTABLES" -P FORWARD DROP + "$IPTABLES" -P OUTPUT DROP + + # block internetz + "$IPTABLES" -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT + "$IPTABLES" -A OUTPUT -d 132.230.0.0/16 -j ACCEPT + "$IPTABLES" -A OUTPUT -d 10.0.0.0/8 -j ACCEPT +else + "$IPTABLES" -P INPUT ACCEPT + "$IPTABLES" -P FORWARD ACCEPT + "$IPTABLES" -P OUTPUT ACCEPT + +fi diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py b/remote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py new file mode 100755 index 00000000..635fb03f --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py @@ -0,0 +1,215 @@ +#!/usr/bin/python +# +# Author: Matt Fischer <matthew.fischer@canonical.com> +# Copyright (C) 2012 Canonical, Ltd +# +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. See http://www.gnu.org/copyleft/gpl.html the full text of the +# license. +# +# This code is based on the LightDM GTK Greeter which was written by: +# Robert Ancell <robert.ancell@canonical.com> + +# required packages: +# liblightdm-gobject-1-0 +# gir1.2-lightdm-1 +# python-gobject +# gir1.2-glib-2.0 +# gir1.2-gtk-3.0 + +from gi.repository import GObject +from gi.repository import GLib +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import GdkPixbuf +from gi.repository.GdkPixbuf import InterpType +from gi.repository import LightDM +import sys + +greeter = None + +main = None +split = None + +guest_box = None +guest_text = None +guest_button = None +guest_image = None + +login_box = None +login_text = None +user_box = None +user_text = None +user_username = None +pass_box = None +pass_text = None +pass_password = None + +prompt_box = None +prompt_label = None +prompt_entry = None +message_label = None + +# This Gtk signal is called when the user hits enter after entering a +# username/password or clicks the login button. Since we re-purposed +# the text entry box, we have 3 possible cases to handle here. +# 1) the user is already authenticated, if for example, they don't have +# a password set. +# 2) The username has been passed into LightDM and now we need to pass +# the password +# 3) The username has been entered, but not passed in. We pass it in +# and start the authentication process. +def login_cb(widget): + print >> sys.stderr, "login_cb" + if greeter.get_is_authenticated(): + print >> sys.stderr, "user is already authenticated, starting session" + #start_session() + elif greeter.get_in_authentication(): + print >> sys.stderr, "username was passed in already, send password to LightDM" + print >> sys.stderr, greeter.get_authentication_user() + greeter.respond(pass_password.get_text()) + else: + print >> sys.stderr, "Initial entry of username, send it to LightDM" + greeter.authenticate(user_username.get_text()) + +def guest_cb(widget): + print >> sys.stderr, "guest_cb" + if greeter.get_has_guest_account_hint(): + print >> sys.stderr, "Guest accounts supported" + greeter.authenticate_as_guest() + else: + print >> sys.stderr, "Guest accounts not supported" + + +# Gtk Signal Handlers +handlers = { + "login_cb": login_cb, + "guest_cb": guest_cb +} + +# The show_prompt callback is oddly named, but when you get this +# callback you are supposed to send the password to LightDM next. In +# our example, we re-purpose the prompt and ask the user for the +# password which is then sent the next time the user hits the Login +# button or presses enter. +def show_prompt_cb(greeter, text, promptType): + print >> sys.stderr, "Prompt type: " + str(promptType) + print >> sys.stderr, "Text: " + str(text) + # if this is a password prompt, we want to hide the characters + if promptType == LightDM.PromptType.SECRET: + pass_password.set_visibility(False) + else: + pass_password.set_visibility(True) + greeter.respond(pass_password.get_text()) + + +# If LightDM sends a message back to the greeter, for example, "Login +# failed" or "invalid password" we display it in our message box. +def show_message_cb(text, message_type): + print >> sys.stderr, "In show_message" + print >> sys.stderr, text + message_label.set_text(text) + message_label.show() + +# Callback for after we send LightDM the password, this method +# has to handle a successful login, in which case we start the session +# or a failed login, in which case we tell the user +def authentication_complete_cb(greeter): + if greeter.get_is_authenticated(): + # For our simple example we always start Unity-2d. The LightDM + # API has ways to query available sessions, please see the docs. + if not greeter.start_session_sync("xfce"): + print >> sys.stderr, "Failed to start session" + else: + print >> sys.stderr, "Login failed" + message_label.set_text("LOGIN FAILED") + message_label.show() + +if __name__ == '__main__': + print >> sys.stderr, "Starting up..." + main_loop = GObject.MainLoop () + builder = Gtk.Builder() + greeter = LightDM.Greeter() + styler = Gtk.CssProvider() + css = open('/usr/local/share/lightdm/netpoint.css', 'r') + + css_data = css.read() + css.close() + styler.load_from_data(css_data) + Gtk.StyleContext.add_provider_for_screen( + Gdk.Screen.get_default(), + styler, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + ) + + # connect signal handlers to LightDM + greeter.connect ("authentication-complete", authentication_complete_cb) + greeter.connect ("show-message", show_message_cb) + greeter.connect ("show-prompt", show_prompt_cb) + + # connect builder and widgets + # you probably really want to put your .UI file somewhere else + builder.add_from_file("/usr/local/share/lightdm/netpoint.glade") + + main = builder.get_object("main") + split = builder.get_object("split") + sep = builder.get_object("sep") + message_label = builder.get_object("message_label") + print >> sys.stderr, message_label + guest_box = builder.get_object("guest_box") + + guest_outer_box = builder.get_object("guest_outer_box") + guest_internal_box = builder.get_object("guest_internal_box") + guest_text = builder.get_object("guest_text") + guest_button = builder.get_object("guest_button") + guest_image = builder.get_object("guest_image") + login_image = builder.get_object("login_image") + #pixbuf = guest_image.get_pixbuf() + #pixbuf = pixbuf.scale_simple(pixbuf.get_width() * 0.7, pixbuf.get_height() * 0.7, InterpType.HYPER) + #guest_image.set_from_pixbuf(pixbuf) + #pixbuf = login_image.get_pixbuf() + #pixbuf = pixbuf.scale_simple(pixbuf.get_width() * 0.7, pixbuf.get_height() * 0.7, InterpType.HYPER) + #login_image.set_from_pixbuf(pixbuf) + + login_box = builder.get_object("login_box") + login_text = builder.get_object("login_text") + + user_box = builder.get_object("user_box") + user_text = builder.get_object("user_text") + user_username = builder.get_object("user_username") + + pass_box = builder.get_object("pass_box") + pass_text = builder.get_object("pass_text") + pass_password = builder.get_object("pass_password") + + # connect signals to Gtk UI + builder.connect_signals(handlers) + + # connect to greeter + greeter.connect_sync() + + message_label.hide() + + # setup the GUI + main.set_decorated(True) + main.get_root_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.ARROW)) + main.show() + guest_text.show() + guest_button.show() + login_text.show() + user_text.show() + user_username.grab_focus() + user_username.show() + pass_text.show() + pass_password.set_sensitive(True) + pass_password.set_visibility(False) + pass_password.show() + + # fullscreen it + main.resize(Gdk.Screen.width(), Gdk.Screen.height()) + + #print >> sys.stderr, guest_box.get_height() + #print >> sys.stderr, guest_box.get_width() + main_loop.run () diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.png b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.png Binary files differnew file mode 100644 index 00000000..f3b81c32 --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.png diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.png b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.png Binary files differnew file mode 100644 index 00000000..f6e4703d --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.png diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css new file mode 100644 index 00000000..7f1f80af --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css @@ -0,0 +1,16 @@ +#main { + background-color: white; +} +#sep { + -GtkWidget-wide-separators: 1; + -GtkWidget-separator-width: 5; + border-style: solid; + border-width: 2px; + color: grey; +} +#title { + border-top-style: solid; + border-bottom-style: double; + border-width: 3px; + border-color: grey; +} diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade new file mode 100644 index 00000000..e2e47416 --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade @@ -0,0 +1,365 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.18.3 --> +<interface> + <requires lib="gtk+" version="3.12"/> + <object class="GtkWindow" id="main"> + <property name="name">main</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="window_position">center-always</property> + <property name="default_width">800</property> + <property name="default_height">600</property> + <property name="decorated">False</property> + <property name="gravity">center</property> + <child> + <object class="GtkBox" id="box2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="name">title</property> + <property name="height_request">100</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Netpoint 0.1</property> + <attributes> + <attribute name="font-desc" value="Sans Bold 18"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkGrid" id="grid1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">False</property> + <property name="vexpand">True</property> + <child> + <object class="GtkSeparator" id="separator1"> + <property name="name">sep</property> + <property name="width_request">10</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="vexpand">True</property> + <property name="orientation">vertical</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkGrid" id="grid2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="vexpand">False</property> + <property name="row_homogeneous">True</property> + <child> + <object class="GtkBox" id="guest_box"> + <property name="name">guestbox</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">False</property> + <property name="vexpand">False</property> + <property name="orientation">vertical</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkBox" id="box4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="guest_text"> + <property name="height_request">100</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="valign">center</property> + <property name="vexpand">False</property> + <property name="label" translatable="yes">Uni-interner Browser</property> + <property name="justify">center</property> + <attributes> + <attribute name="font-desc" value="Sans Bold 14"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">center</property> + <property name="hexpand">False</property> + <property name="vexpand">False</property> + <property name="label" translatable="yes">Im Gastmodus können Sie nur auf universitätsinterne Webseiten zugreifen.</property> + <property name="justify">center</property> + <property name="wrap">True</property> + <property name="width_chars">0</property> + <property name="max_width_chars">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="guest_button"> + <property name="label" translatable="yes">Surfen als Gast</property> + <property name="use_action_appearance">False</property> + <property name="related_action"/> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="halign">center</property> + <property name="valign">center</property> + <signal name="clicked" handler="guest_cb" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkImage" id="guest_image"> + <property name="name">guest_image</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">10</property> + <property name="margin_right">10</property> + <property name="margin_top">10</property> + <property name="margin_bottom">10</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="pixbuf">ff-rz-smaller.png</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkGrid" id="grid4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="row_homogeneous">True</property> + <child> + <object class="GtkBox" id="box3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="orientation">vertical</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkBox" id="box5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="login_text"> + <property name="height_request">100</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="valign">center</property> + <property name="vexpand">False</property> + <property name="label" translatable="yes">Internet Browser</property> + <property name="justify">center</property> + <attributes> + <attribute name="font-desc" value="Sans Bold 14"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="login_info"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">start</property> + <property name="vexpand">False</property> + <property name="label" translatable="yes">Melden Sie sich mit Ihrem RZ-Konto, um auch im Internet zu surfen.</property> + <property name="justify">center</property> + <property name="wrap">True</property> + <property name="width_chars">0</property> + <property name="max_width_chars">30</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox" id="box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">center</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkGrid" id="grid3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="valign">center</property> + <property name="row_spacing">3</property> + <property name="column_spacing">3</property> + <child> + <object class="GtkEntry" id="pass_password"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="progress_pulse_step">0</property> + <signal name="activate" handler="login_cb" swapped="no"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="pass_text"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Passwort:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="user_text"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Username:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="user_username"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <signal name="activate" handler="login_cb" swapped="no"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="message_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" comments="This is a placeholder string and will be replaced with a message from PAM">[message]</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkImage" id="login_image"> + <property name="name">login_image</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">10</property> + <property name="margin_right">10</property> + <property name="margin_top">10</property> + <property name="margin_bottom">10</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="pixbuf">ff-google-smaller.png</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> +</interface> diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop b/remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop new file mode 100644 index 00000000..f03cf498 --- /dev/null +++ b/remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Netpoint Grita +Comment=Netpoint Grita +Exec=/usr/local/bin/netpoint.py +Type=Application diff --git a/remote/modules/netpoint-lightdm/module.build b/remote/modules/netpoint-lightdm/module.build new file mode 100644 index 00000000..0c891489 --- /dev/null +++ b/remote/modules/netpoint-lightdm/module.build @@ -0,0 +1,15 @@ +fetch_source() { + : +} + +build() { + COPYLIST="list_dpkg_output" + [ -e "$COPYLIST" ] && rm "$COPYLIST" + + list_packet_files >> "$COPYLIST" + tarcopy "$(cat "$COPYLIST" | sort -u)" "${MODULE_BUILD_DIR}" +} + +post_copy() { + : +} diff --git a/remote/modules/netpoint-lightdm/module.conf b/remote/modules/netpoint-lightdm/module.conf new file mode 100644 index 00000000..0cd03752 --- /dev/null +++ b/remote/modules/netpoint-lightdm/module.conf @@ -0,0 +1,3 @@ +REQUIRED_BINARIES="" +REQUIRED_LIBRARIES="" +REQUIRED_DIRECTORIES="" diff --git a/remote/modules/netpoint-lightdm/module.conf.opensuse.13.2 b/remote/modules/netpoint-lightdm/module.conf.opensuse.13.2 new file mode 100644 index 00000000..d62f9063 --- /dev/null +++ b/remote/modules/netpoint-lightdm/module.conf.opensuse.13.2 @@ -0,0 +1,36 @@ +REQUIRED_INSTALLED_PACKAGES=" + lightdm + lightdm-gtk-greeter + lightdm-gobject-devel + typelib-1_0-LightDM-1 + liblightdm-gobject-1-0 + python-gobject + icewm-lite + icewm-default + python-base + python-gobject2 +" + +REQUIRED_CONTENT_PACKAGES=" + lightdm + lightdm-gtk-greeter + lightdm-gobject-devel + typelib-1_0-LightDM-1 + liblightdm-gobject-1-0 + python-gobject + icewm-lite + icewm-default + python-base + python-gobject2 +" + +REQUIRED_BINARIES+=" + icewm + lightdm + python + lightdm-gtk-greeter +" + +REQUIRED_DIRECTORIES+=" + /usr/lib64/python2.7 +" diff --git a/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share b/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share index 85a3fcc0..670943f4 100644 --- a/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share +++ b/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share @@ -1,36 +1,41 @@ ################################################################### # -# This script is a part of the pam_script_auth script -# and is not stand-alone! +# This script is a part of the pam_script_auth script +# and is not stand-alone! # -# It will try to mount the common shares specified in the -# variables of the global slx config '/opt/openslx/config'. -# A primary and a secondary share may be given. Every share -# require following bundle of variables: +# It will try to mount the common shares specified in the +# variables of the global slx config '/opt/openslx/config'. +# An arbitrary number of shares may be given. Every share +# requires following bundle of variables: # # -# SLX_SHARE_[0-9]_AUTH_TYPE [guest|user|pam] -# SLX_SHARE_[0-9]_AUTH_USER <username> -# SLX_SHARE_[0-9]_AUTH_PASS <password> -# SLX_SHARE_[0-9]_PERM [ro|rw] -# SLX_SHARE_[0-9]_PATH <path_to_share> +# SLX_SHARE_<id>_AUTH_TYPE [guest|user|pam] +# SLX_SHARE_<id>_AUTH_USER <username> +# SLX_SHARE_<id>_AUTH_PASS <password> +# SLX_SHARE_<id>_PERM [ro|rw] +# SLX_SHARE_<id>_PATH <path_to_share> # -# Example: -# SLX_SHARE_0_PATH='//windows.server/sharename' -# SLX_SHARE_0_AUTH_TYPE='user' -# SLX_SHARE_0_AUTH_USER='shareuser' -# SLX_SHARE_0_AUTH_PASS='sharepass' -# SLX_SHARE_0_PERM='rw' +# Note: <id> is the identifier of the share. # -# Note: When AUTH_TYPE is set to 'pam' or 'guest', -# no need to specify AUTH_USER or AUTH_PASS. +# Example: +# SLX_SHARE_0_PATH='//windows.server/sharename' +# SLX_SHARE_0_AUTH_TYPE='user' +# SLX_SHARE_0_AUTH_USER='shareuser' +# SLX_SHARE_0_AUTH_PASS='sharepass' +# SLX_SHARE_0_PERM='rw' # +# Note: If AUTH_TYPE is set to 'pam' or 'guest', then +# there is no need to specify AUTH_USER or AUTH_PASS +# as it is obviously not needed. # -# usage: mount_share <auth_type> <auth_user> <auth_password> <permissions> <path> <share> +################################################################### +# +# Internal helper function to mount a share +# usage: mount_share <auth_type> <auth_user> <auth_password> <permissions> <path> <share_number> mount_share() { - # only want two arguments + # since we are (hopefully) the only one using this function, we know we need excatly 6 args [ $# -ne 6 ] && { slxlog "pam-share-args" "Wrong number of arguments given! Need 6, $# given."; return; } - + # lets check if we have our variables local SHARE_AUTH_TYPE="$1" local SHARE_AUTH_USER="$2" @@ -43,17 +48,12 @@ mount_share() { [ "x${SHARE_PERM}" != "xrw" ] && SHARE_PERM='ro' # all good: now we can mount depending on the type - # supports: cifs?/nfs? + # supports: cifs?/nfs? if [ "${SHARE_PATH:0:2}" = "//" ]; then # '//' prefixed, assume windows share # prepare common mount options for either authentication type MOUNT_OPTS="-t cifs -o nounix,uid=${USER_UID},gid=${USER_GID},forceuid,forcegid,nobrl,noacl,$SHARE_PERM" - # flag for failure - SIGNAL=$(mktemp) - rm -f -- "${SIGNAL}" - # output of command - MOUNT_OUTPUT=$(mktemp) # now construct the mount options depending on the type of the share. if [ "${SHARE_AUTH_TYPE}" = "guest" ]; then MOUNT_OPTS="${MOUNT_OPTS},guest,file_mode=0777,dir_mode=0777" @@ -73,40 +73,68 @@ mount_share() { slxlog "pam-share-auth" "Share${SHARE_NUM}: Auth type '${SHARE_AUTH_TYPE}' not supported." return; fi + else + # for now assume NFS-Share, start build options string with default options for all shares + MOUNT_OPTS="-t nfs -o async,nolock" + + # TODO: here we will have to evaluate options of NFS-shares - # we just mount it to the directory with the same name as the - # last directory in the path name of the share - # e.g. //windows.net/lehrpool -> ${COMMON_SHARE_MOUNT_POINT}/lehrpool - local TARGET_DIR="${COMMON_SHARE_MOUNT_POINT}/$(basename ${SHARE_PATH})" - # it exists, so let's create ${COMMON_SHARE_MOUNT_POINT}/lehrpool_${SHARE_NUM} - [ -d "${TARGET_DIR}" ] && TARGET_DIR="${TARGET_DIR}_${SHARE_NUM}" + # unless specified otherwise, mount the share read-only + [ "x${SHARE_PERM}" != "xrw" ] && SHARE_PERM='ro' + MOUNT_OPTS="${MOUNT_OPTS},${SHARE_PERM}" + fi - # at this point is TARGET_DIR pointing to the right directory. - mkdir -p "${TARGET_DIR}" || \ - { slxlog "pam-share-mkdirfail" "Share${SHARE_NUM}: Could not create directory '${TARGET_DIR}'. Skipping share."; return; } - # now try to mount it - ( mount ${MOUNT_OPTS} "${SHARE_PATH}" "${TARGET_DIR}" > "${MOUNT_OUTPUT}" 2>&1 || touch "${SIGNAL}" ) & - MOUNT_PID=$! - for COUNTER in 1 1 2 4; do - kill -0 "${MOUNT_PID}" 2>/dev/null || break - sleep "${COUNTER}" - done + ############################################################################ + # + # Following code is independent of the type of share. + # The variable MOUNT_OPTS should have been set correctly + # up to this point. + # + ############################################################################ - # check for failures - if [ -e "${SIGNAL}" ]; then - slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' failed. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}" - rm -f -- "${SIGNAL}" - elif kill -9 "${MOUNT_PID}" 2>/dev/null; then - slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' timed out. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}" - fi - ( sleep 2; rm -f -- "${MOUNT_OUTPUT}" ) & + # we just mount it to the directory with the same name as the + # last directory in the path name of the share + # e.g. //windows.net/lehrpool -> ${COMMON_SHARE_MOUNT_POINT}/lehrpool + local TARGET_DIR="${COMMON_SHARE_MOUNT_POINT}/$(basename ${SHARE_PATH})" + # it exists, so let's create ${COMMON_SHARE_MOUNT_POINT}/lehrpool_${SHARE_NUM} + [ -d "${TARGET_DIR}" ] && TARGET_DIR="${TARGET_DIR}_${SHARE_NUM}" + + # at this point is TARGET_DIR pointing to the right directory. + mkdir -p "${TARGET_DIR}" || \ + { slxlog "pam-share-mkdirfail" "Share${SHARE_NUM}: Could not create directory '${TARGET_DIR}'. Skipping share."; return; } - # always unset credentials - unset USER - unset PASSWD + # flag for failure + SIGNAL=$(mktemp) + rm -f -- "${SIGNAL}" + # output of command + MOUNT_OUTPUT=$(mktemp) + # now try to mount it + ( mount ${MOUNT_OPTS} "${SHARE_PATH}" "${TARGET_DIR}" > "${MOUNT_OUTPUT}" 2>&1 || touch "${SIGNAL}" ) & + MOUNT_PID=$! + for COUNTER in 1 1 2 4; do + kill -0 "${MOUNT_PID}" 2>/dev/null || break + sleep "${COUNTER}" + done + + # check for failures + if [ -e "${SIGNAL}" ]; then + slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' failed. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}" + rm -f -- "${SIGNAL}" + elif kill -9 "${MOUNT_PID}" 2>/dev/null; then + slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' timed out. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}" fi + ( sleep 2; rm -f -- "${MOUNT_OUTPUT}" ) & + + # always unset credentials + unset USER + unset PASSWD } +############################################################################ +# +# MAIN LOGIC OVER ALL SHARES +# +############################################################################ # at this point we need the slx config to do anything [ -e "/opt/openslx/config" ] || \ { slxlog "pam-share-noconfig" "File '/opt/openslx/config' not found."; return; } @@ -115,28 +143,40 @@ mount_share() { . /opt/openslx/config || \ { slxlog "pam-share-sourceconfig" "Could not source '/opt/openslx/config'."; return; } +# +# +# # Since many shares can be specified, we need to identify how many we have first. -# We just go over all SLX_SHARE_* variables and check for those ending in _PATH +# We just go over all SLX_SHARE_* variables and check for those ending in _PATH. +# So e.g. for SLX_SHARE_0_PATH=<path> the SHARE variable would be equal to 'SLX_SHARE_0_PATH' # For each of those, a share was specified and we will try to mount it. -for SHARE in ${!SLX_SHARE_*}; do - # skip if the variable doesn't end in _PATH - [[ "$SHARE" =~ .*_PATH$ ]] || continue - # first let's check if we have already mounted it, since we don't have to - # do anything is it already is. - if mount | grep -q "${SHARE}"; then - # already mounted, just skip. +for SHARE in $(grep -E '^SLX_SHARE_[0-9]+_PATH=.*$' /opt/openslx/config); do + # first let's check if we have already mounted it and skip if it is + # TODO: this should be good enough? stronger checks? + if mount | grep -q "$(echo ${SHARE} | awk -F '=' '{print $2}' | tr -d \'\")"; then + # already mounted, just skip + # this should not happen anyway, since the pam_script_auth script also exits + # if the temporary home user directory is already mounted... continue fi - # ok so we have a path in $SHARE, let's extract the number of the share + # ok so we have the full declaration command in $SHARE, + # let's extract the number of the share. # i.e. SLX_SHARE_0_PATH -> share number 0 - # first strip the leading SLX_SHARE_ - SHARE=${SHARE#SLX_SHARE_} + # first just cut everything after '=' + SHARE_ID="$(echo $SHARE | awk -F '=' '{print $1}')" + # now strip the leading SLX_SHARE_ + SHARE_ID=${SHARE_ID#SLX_SHARE_} # now remove the trailing _PATH - SHARE=${SHARE%_PATH} + SHARE_ID=${SHARE_ID%_PATH} # now it should be a number, TODO accept more than numbers? Doesn't really matter... # this check is mostly to be sure that the variable splitting worked as it should - [[ "$SHARE" =~ ^[0-9]+$ ]] || continue - eval mount_share \""\$SLX_SHARE_${SHARE}_AUTH_TYPE"\" \""\$SLX_SHARE_${SHARE}_AUTH_USER"\" \""\$SLX_SHARE_${SHARE}_AUTH_PASS"\" \""\$SLX_SHARE_${SHARE}_PERM"\" \""\$SLX_SHARE_${SHARE}_PATH"\" \""$SHARE"\" + # ugly cause we need to be ash compatible ... + if ! echo "${SHARE_ID}" | grep -q -E '^[0-9]+$'; then + continue + fi + + # now do try to mount the share using the helper function defined on the top of this script + eval mount_share \""\$SLX_SHARE_${SHARE_ID}_AUTH_TYPE"\" \""\$SLX_SHARE_${SHARE_ID}_AUTH_USER"\" \""\$SLX_SHARE_${SHARE_ID}_AUTH_PASS"\" \""\$SLX_SHARE_${SHARE_ID}_PERM"\" \""\$SLX_SHARE_${SHARE_ID}_PATH"\" \""$SHARE_ID"\" ## unset USER and PASSWD just in case mount_share returned due to an error. unset USER unset PASSWD diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth b/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth index 3474741d..623658d0 100755 --- a/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth +++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth @@ -121,7 +121,7 @@ chown "${USER_UID}:${USER_GID}" "${COMMON_SHARE_MOUNT_POINT}" || \ [ ! -e "${COMMON_SHARE_MOUNT_SCRIPT}" ] && exit 0 # we do! -COMMON_SHARE_MOUNT_POINT="${COMMON_SHARE_MOUNT_POINT}" PAM_USER="${PAM_USER}" PAM_AUTHTOK="${PAM_AUTHTOK}" USER_UID="${USER_UID}" USER_GID="${USER_GID}" /bin/bash "${COMMON_SHARE_MOUNT_SCRIPT}" || \ +COMMON_SHARE_MOUNT_POINT="${COMMON_SHARE_MOUNT_POINT}" PAM_USER="${PAM_USER}" PAM_AUTHTOK="${PAM_AUTHTOK}" USER_UID="${USER_UID}" USER_GID="${USER_GID}" /bin/ash "${COMMON_SHARE_MOUNT_SCRIPT}" || \ { slxlog "pam-global-sourceshare" "Could not source '${COMMON_SHARE_MOUNT_SCRIPT}'."; exit 1; } # Just try to delete the common share dir. If the mount was successful, it will not work 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 4fc2ce6a..9332e0a6 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 @@ -26,7 +26,7 @@ if [ -d "/opt/openslx/scripts/pam_script_ses_close.d" ]; then done fi -OPENSESSION=$(loginctl show-user "$PAM_USER" | grep "Sessions=" | cut -c 10-) +OPENSESSION=$(loginctl show-user "$PAM_USER" 2>/dev/null| grep "Sessions=" | cut -c 10-) SESSIONCOUNT=$(echo "$OPENSESSION" | wc -w) # When using su/sudo there is no session created, so count up by one if [ "x$PAM_SERVICE" = "xsu" -o "x$PAM_SERVICE" = "xsudo" ]; then @@ -55,7 +55,7 @@ if [ "$SESSIONCOUNT" -le "1" ]; then done # just to be sure we check if there's no other open session in the meantime - OPEN2=$(loginctl show-user "$PAM_USER" | grep "Sessions=" | cut -c 10-) + OPEN2=$(loginctl show-user "$PAM_USER" 2>/dev/null | grep "Sessions=" | cut -c 10-) if [ -z "$OPEN2" -o "x$OPENSESSION" = "x$OPEN2" ]; then diff --git a/remote/modules/sssd/module.build b/remote/modules/sssd/module.build index c6070455..041fd5bd 100644 --- a/remote/modules/sssd/module.build +++ b/remote/modules/sssd/module.build @@ -16,6 +16,12 @@ build() { mkdir -p "${MODULE_BUILD_DIR}/etc/systemd/system" sed "s,%PATH%,${SSSD_PATH},g" "${MODULE_DIR}/templates/sssd-systemd.service" > "${MODULE_BUILD_DIR}/etc/systemd/system/sssd.service" || perror "Could not fill sssd.service template" + # openSuse sssd does not start when /etc/sssd/sssd.conf is not root:root 600! + if [ "$SYS_DISTRIBUTION" == "opensuse" -a "$SYS_VERSION" == "13.2" ]; then + sed -i 's#ExecStart#ExecStartPre=/opt/openslx/bin/chmod 600 /etc/sssd/sssd.conf\nExecStart#g' \ + "${MODULE_BUILD_DIR}/etc/systemd/system/sssd.service" + fi + return 0 } diff --git a/remote/modules/systemd/module.build b/remote/modules/systemd/module.build index 6e1cf4c1..67e019af 100644 --- a/remote/modules/systemd/module.build +++ b/remote/modules/systemd/module.build @@ -99,5 +99,9 @@ post_copy() { 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 + # eg. systemd expects /bin/less: + if [ "$SYS_DISTRIBUTION" == "opensuse" -a "$SYS_VERSION" == "13.2" ]; then + ln -s /usr/bin/less "$TARGET_BUILD_DIR/bin/less" + fi } diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include index d1c77f02..48610aea 100644 --- a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include @@ -9,39 +9,49 @@ # # General information about OpenSLX can be found at http://openslx.org # ----------------------------------------------------------------------------- -# Include file (machine template) for run-virt.include of the OpenSLX virtual- -# box plugin +# Include file (general template) for run-virt.include of the virtualbox plugin + cat << EOF > "${machconfig}" <?xml version="1.0"?> -<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux"> +<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.14-linux"> <Machine uuid="{${machineuuid}}" name="${vm_name}" OSType="${vmostype}"> + <MediaRegistry> + <HardDisks> + <HardDisk uuid="{${diskuuid}}" location="${diskfile}" format="${imgfmt}" type="${imgtype}"/> + </HardDisks> + <FloppyImages/> + </MediaRegistry> +<!-- <ExtraData> - <ExtraDataItem name="GUI/AutoresizeGuest" value="on"/> - <ExtraDataItem name="GUI/Fullscreen" value="on"/> - <ExtraDataItem name="GUI/LastCloseAction" value="powerOff"/> - <ExtraDataItem name="GUI/MiniToolBarAutoHide" value="on"/> - <ExtraDataItem name="GUI/MiniToolBarAlignment" value="top"/> - <ExtraDataItem name="GUI/ShowMiniToolBar" value="yes"/> - <ExtraDataItem name="GUI/SaveMountedAtRuntime" value="yes"/> - <ExtraDataItem name="GUI/Seamless" value="off"/> + <ExtraDataItem name="GUI/LastGuestSizeHint" value="1024,768"/> + <ExtraDataItem name="GUI/LastNormalWindowPosition" value="2393,123,1024,809"/> </ExtraData> +--> <Hardware version="2"> - <CPU count="${cpu_cores}"> - <HardwareVirtEx enabled="${enablevt}" exclusive="true"/> + <CPU count="${cpu_cores}" hotplug="false"> + <HardwareVirtEx enabled="${enablevt}"/> <HardwareVirtExNestedPaging enabled="${npaging}"/> - <HardwareVirtExVPID enabled="false"/> + <HardwareVirtExVPID enabled="true"/> + <HardwareVirtExUX enabled="true"/> <PAE enabled="true"/> + <LongMode enabled="false"/> + <HardwareVirtExLargePages enabled="false"/> + <HardwareVirtForce enabled="false"/> </CPU> - <Memory RAMSize="${mem}"/> + <Memory RAMSize="${mem}" PageFusion="false"/> + <HID Pointing="USBTablet" Keyboard="PS2Keyboard"/> + <HPET enabled="false"/> + <Chipset type="ICH9"/> <Boot> <Order position="1" device="${boot}"/> <!-- HardDisk, DVD, Network, Floppy --> <Order position="2" device="None"/> <Order position="3" device="None"/> <Order position="4" device="None"/> </Boot> - <!-- check for xml configured enable3d parameter --> <Display VRAMSize="${vram}" monitorCount="1" accelerate3D="${enable3d}" accelerate2DVideo="${enable2d}"/> - <!-- authType="External", "Guest", "Null" --> + +<!-- <VideoCapture enabled="false" screens="18446744073709551615" horzRes="1024" vertRes="768" rate="512" fps="25"/> --> + <RemoteDisplay enabled="false" port="${vrdpport}" authType="Null" authTimeout="5000"/> <BIOS> <ACPI enabled="true"/> @@ -51,74 +61,131 @@ cat << EOF > "${machconfig}" <TimeOffset value="0"/> <PXEDebug enabled="false"/> </BIOS> - <USBController enabled="true" enabledEhci="true"/> +<!-- ehci ussw. noch prüfen! --> + <USB> + <Controllers> + <Controller name="OHCI" type="OHCI"/> + </Controllers> + <DeviceFilters/> + </USB> <Network> <Adapter slot="0" enabled="true" MACAddress="${macaddr}" cable="true" speed="0" type="${vb_network_card}"> - <${network_kind}/> + <${network_kind}/> </Adapter> <Adapter slot="1" enabled="false" MACAddress="${vdemacaddr}" cable="true" speed="0" type="${vb_network_card}"> - <GenericInterface driver="VDE"> + <GenericInterface driver="VDE"> <Properties name="network" value="/tmp/vde-switch"/> </GenericInterface> </Adapter> - <Adapter slot="2" enabled="false" MACAddress="080027A3A3CC" cable="true" speed="0" type="Am79C973"/> - <Adapter slot="3" enabled="false" MACAddress="0800277356CC" cable="true" speed="0" type="Am79C973"/> - <Adapter slot="4" enabled="false" MACAddress="080027CEA8CC" cable="true" speed="0" type="Am79C973"/> - <Adapter slot="5" enabled="false" MACAddress="0800271B8DCC" cable="true" speed="0" type="Am79C973"/> - <Adapter slot="6" enabled="false" MACAddress="08002771BBCC" cable="true" speed="0" type="Am79C973"/> - <Adapter slot="7" enabled="false" MACAddress="080027EB6ACC" cable="true" speed="0" type="Am79C973"/> + <Adapter slot="2" enabled="false" MACAddress="080027CB8CD8" cable="true" speed="0" type="82540EM" /> + <Adapter slot="3" enabled="false" MACAddress="080027424034" cable="true" speed="0" type="82540EM" /> + <Adapter slot="4" enabled="false" MACAddress="0800272CD0EA" cable="true" speed="0" type="82540EM" /> + <Adapter slot="5" enabled="false" MACAddress="080027ED7227" cable="true" speed="0" type="82540EM" /> + <Adapter slot="6" enabled="false" MACAddress="080027B77757" cable="true" speed="0" type="82540EM" /> + <Adapter slot="7" enabled="false" MACAddress="0800272267D8" cable="true" speed="0" type="82540EM" /> + <Adapter slot="8" enabled="false" MACAddress="080027573BF5" cable="true" speed="0" type="Am79C973" /> </Network> <UART> <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/> - <Port slot="1" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/> + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" hostMode="Disconnected"/> </UART> <LPT> - <Port slot="0" enabled="false" IOBase="0x378" IRQ="4"/> - <Port slot="1" enabled="false" IOBase="0x378" IRQ="4"/> + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> </LPT> +<!-- <AudioAdapter controller="${guestaudio}" driver="Pulse" enabled="true"/> --> + <AudioAdapter controller="${guestaudio}" driver="Alsa" enabled="${audio}"/> + <RTC localOrUTC="UTC"/> <!-- should be configured depending on the chosen operating system --> - <AudioAdapter controller="${guestaudio}" driver="Alsa" enabled="${audio}"/> <!-- OSS, Alsa, Pulse --> - <!-- should be configured depending on the chosen operating system --> - <SharedFolders> + $sharelist +<!-- <SharedFolders> <SharedFolder name="${sharename}" hostPath="${sharepath}" writable="true"/> - </SharedFolders> + <SharedFolder name="${homesharename}" hostPath="${homesharepath}" writable="true"/> + <SharedFolder name="${commonsharename}" hostPath="${commonsharepath}" writable="true"/> + </SharedFolders> --> +<!-- <Clipboard mode="Disabled"/> --> <Clipboard mode="Bidirectional"/> - <Guest memoryBalloonSize="0" statisticsUpdateInterval="0"/> - <!-- + <DragAndDrop mode="Disabled"/> + <IO> + <IoCache enabled="true" size="5"/> + <BandwidthGroups/> + </IO> + <HostPci> + <Devices/> + </HostPci> + <EmulatedUSB> + <CardReader enabled="false"/> + </EmulatedUSB> + <Guest memoryBalloonSize="0"/> <GuestProperties> - <GuestProperty name="/VirtualBox/HostGuest/SysprepExec" value="" timestamp="1268140071072799000" flags="TRANSIENT, RDONLYGUEST"/> - <GuestProperty name="/VirtualBox/HostGuest/SysprepArgs" value="" timestamp="1268140071072949000" flags="TRANSIENT, RDONLYGUEST"/> - <GuestProperty name="/VirtualBox/GuestInfo/OS/Product" value="Linux" timestamp="1268140267864540000" flags=""/> - <GuestProperty name="/VirtualBox/GuestInfo/OS/Release" value="4.1.2" timestamp="1268140267894449000" flags=""/> - <GuestProperty name="/VirtualBox/GuestInfo/OS/LoggedInUsersList" value="vbox" timestamp="1268164075149967000" flags=""/> +<!-- <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxControl.exe" value="4.3.26r98988" timestamp="1430324928738330000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxCredProv.dll" value="-" timestamp="1430324928808993000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxDisp.dll" value="4.3.26r98988" timestamp="1430324928752750000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxGINA.dll" value="-" timestamp="1430324928808417000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxGuest.sys" value="4.3.26r98988" timestamp="1430324928908144000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxHook.dll" value="4.3.26r98988" timestamp="1430324928750553000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxMMR.exe" value="-" timestamp="1430324928809525000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxMMRHook.dll" value="-" timestamp="1430324928809992000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxMRXNP.dll" value="4.3.26r98988" timestamp="1430324928777003000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxMouse.sys" value="4.3.26r98988" timestamp="1430324928909743000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGL.dll" value="4.3.26r98988" timestamp="1430324928901186000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLarrayspu.dll" value="4.3.26r98988" timestamp="1430324928823307000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLcrutil.dll" value="4.3.26r98988" timestamp="1430324928837623000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLerrorspu.dll" value="4.3.26r98988" timestamp="1430324928846343000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLfeedbackspu.dll" value="4.3.26r98988" timestamp="1430324928884750000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLpackspu.dll" value="4.3.26r98988" timestamp="1430324928865359000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLpassthroughspu.dll" value="4.3.26r98988" timestamp="1430324928872533000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxSF.sys" value="4.3.26r98988" timestamp="1430324928911340000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxService.exe" value="4.3.26r98988" timestamp="1430324928784233000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxTray.exe" value="4.3.26r98988" timestamp="1430324928807478000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxVideo.sys" value="4.3.26r98988" timestamp="1430324928913222000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/HostVerLastChecked" value="4.3.26" timestamp="1430324950071952000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/InstallDir" value="C:/Program Files/Oracle/VirtualBox_Guest_Additions" timestamp="1430324928718085000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Revision" value="98988" timestamp="1430324928712396000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/Version" value="4.3.26" timestamp="1430324928711533000" flags=""/> + <GuestProperty name="/VirtualBox/GuestAdd/VersionExt" value="4.3.26" timestamp="1430324928711988000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/Net/0/MAC" value="080027CAF695" timestamp="1430324954369734000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/Net/0/Status" value="Up" timestamp="1430324954369295000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/Net/0/V4/Broadcast" value="255.255.255.255" timestamp="1430324954368391000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/Net/0/V4/IP" value="10.0.2.15" timestamp="1430324954367074000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/Net/0/V4/Netmask" value="255.255.255.0" timestamp="1430324954368890000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/Net/Count" value="1" timestamp="1430324984558751000" flags=""/> +--> +<!-- + <GuestProperty name="/VirtualBox/GuestInfo/OS/LoggedInUsers" value="1" timestamp="1430324933845802000" flags="TRANSIENT, TRANSRESET"/> +--> + <GuestProperty name="/VirtualBox/GuestInfo/OS/LoggedInUsersList" value="student" timestamp="1430324933844717000" flags="TRANSIENT, TRANSRESET"/> +<!-- + <GuestProperty name="/VirtualBox/GuestInfo/OS/NoLoggedInUsers" value="false" timestamp="1430324933847595000" flags="TRANSIENT, TRANSRESET"/> +--> + <GuestProperty name="/VirtualBox/GuestInfo/OS/Product" value="Windows 7" timestamp="1430324928709396000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/OS/Release" value="6.1.7601" timestamp="1430324928710175000" flags=""/> +<!-- + <GuestProperty name="/VirtualBox/GuestInfo/OS/ServicePack" value="1" timestamp="1430324928711029000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/User/student@student-PC/UsageState" value="Idle" timestamp="1430324979531817000" flags="TRANSIENT, TRANSRESET"/> + <GuestProperty name="/VirtualBox/HostInfo/GUI/LanguageID" value="de_DE" timestamp="1430324985485377000" flags=""/> +--> </GuestProperties> - --> </Hardware> - <!-- should be configured depending on the chosen operating system --> <StorageControllers> - <StorageController name="IDE Controller" type="PIIX4" PortCount="2"> + <StorageController name="IDE" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> <AttachedDevice type="HardDisk" port="0" device="0"> - <Image uuid="{${imageuuid}}"/> + <Image uuid="${imageuuid}"/> </AttachedDevice> <!-- PLEASE DO NOT REMOVE THIS COMMENT (HD)!!! --> <AttachedDevice passthrough="false" type="DVD" port="0" device="1"> <HostDrive src="${cdrom_0}"/> +<!-- <Image uuid="{849a61c7-ad64-4594-b0c8-fbe17dc3d2a6}"/> --> </AttachedDevice> <!-- PLEASE DO NOT REMOVE THIS COMMENT (CD)!!! --> </StorageController> - <StorageController name="Floppy Controller" type="I82078" PortCount="1"> - <AttachedDevice type="Floppy" port="0" device="0"> - </AttachedDevice> - <AttachedDevice type="Floppy" port="0" device="1"> - <Image uuid="{288d5452-2dd3-44f2-bfc8-78e205a4fa87}"/> - </AttachedDevice> - </StorageController> - <!-- - <StorageController name="SCSI Controller" type="LsiLogic" PortCount="16"> - <AttachedDevice type="HardDisk" port="0" device="0"> - <Image uuid="{812c82bf-bd1a-4f59-a5b6-b54ae2f6c669}"/> - </AttachedDevice> + <StorageController name="Floppy Controller" type="I82078" PortCount="1"> + <AttachedDevice type="Floppy" port="0" device="0"> + </AttachedDevice> + <AttachedDevice type="Floppy" port="0" device="1"> + <Image uuid="{288d5452-2dd3-44f2-bfc8-78e205a4fa87}"/> + </AttachedDevice> </StorageController> - --> </StorageControllers> </Machine> </VirtualBox> EOF + diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include index 161fcf5a..ddf42f7c 100755 --- a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include @@ -25,7 +25,7 @@ confdir="/tmp/virt/${self}/${USER}/${VM_ID}" # dir for configs export VBOX_USER_HOME=${confdir} # instead of $HOME/.VirtualBox # define dirs and files which can be removed after exit, be carefull! RMDIRS="${snapshotdir} ${confdir} /tmp/virt/.vbox-${USER}-ipc" -rm -rf ${RMDIRS} 2>/dev/null +# rm -rf ${RMDIRS} 2>/dev/null machfolder="${confdir}/Machines" # use vm_shortname for dir and config names since vm_name can be very long machconfig="${machfolder}/${vm_shortname}/${vm_shortname}.xml" @@ -64,6 +64,9 @@ enablevt="false" # VT: Default: not enabled [ ${vtflag} -eq 0 ] && cpu_cores=1 # check for VT, if not available only 1 cpu supported [ ${vtflag} -eq 1 ] && enablevt="true" +# Setting some default variables +shfolders="TRUE" + # set some base configuration depending on the guest operating system case "${vmostype}" in win31*) @@ -74,6 +77,17 @@ case "${vmostype}" in vram="16" cpu_cores=1 enablevt="false" + shfolders="FALSE" + ;; + winnt*) + guestaudio="SB16" + vb_network_card="Am79C973" + vmostype="Windows31" + mem="32" + vram="16" + cpu_cores=1 + enablevt="false" + shfolders="FALSE" ;; win95*) vmostype="Windows95" @@ -83,6 +97,7 @@ case "${vmostype}" in vram="32" cpu_cores=1 enablevt="false" + shfolders="FALSE" ;; win98*) vmostype="Windows98" @@ -91,6 +106,7 @@ case "${vmostype}" in mem="256" vram="64" cpu_cores=1 + shfolders="FALSE" ;; winme*) vmostype="WindowsMe" @@ -99,6 +115,7 @@ case "${vmostype}" in mem="256" vram="64" cpu_cores=1 + shfolders="FALSE" ;; winxp*|windowsxp*) vmostype="WindowsXP" @@ -165,7 +182,8 @@ machineuuid="00000000-0000-0000-0000-${macaddr}" # machine UUID, MAC addr part o machineuuid=$(echo ${machineuuid} | tr "[A-Z]" "[a-z]") # cosmetical, since UUID in lower case # get UUID of VBox image, if not diskless [ ${diskless} -eq 0 ] && diskuuid=$(VBoxManage -q showvdiinfo ${diskfile} \ - | grep UUID | grep -v "Parent UUID" | awk '{print $2}') + | grep UUID | grep -v "Parent UUID" | awk '{print $2}' \ + | grep -v use ) # nec. for VBox >= 4 imgtype="Immutable" # make disk immutable snapshotuuid="34f617be-192a-46b3-a8ae-bce1029e093f" # snapshot UUID is static @@ -335,7 +353,18 @@ writelog "\tShared Folders '${sharename}':\t${sharepath}" ################################################################################ # create Virtualbox.xml -. ${VMCHOOSERVBOX}/virtualbox.include # create Virtualbox.xml + +# Shares given? +if [ "x$shfolders" != "xFALSE" ]; then + sharelist="<SharedFolders> + <SharedFolder name=\"${homesharename}\" hostPath=\"${homesharepath}\" writable=\"true\"/> + <SharedFolder name=\"${commonsharename}\" hostPath=\"${commonsharepath}\" writable=\"true\"/> + </SharedFolders>" +else + sharelist='' +fi + +source ${VMCHOOSERVBOX}/virtualbox.include # create Virtualbox.xml # remove snapshot disk when using rw images if [ "${imgtype}" != "Immutable" ]; then @@ -345,7 +374,7 @@ fi # TODO: add rawdisk if requested #"raw.vmdk" format="VMDK" type="Writethrough"/> -. ${VMCHOOSERVBOX}/machine.include # create machine.xml +source ${VMCHOOSERVBOX}/machine.include # create machine.xml # remove CD-ROM if not available if [ "${cdrom0}" != "TRUE" ]; then diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include index 477eebde..36c8ab80 100644 --- a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# Copyright (c) 2010..2013 - OpenSLX GmbH +# Copyright (c) 2010..2012 - OpenSLX GmbH # # This program/file is free software distributed under the GPL version 2. # See http://openslx.org/COPYING @@ -10,9 +10,9 @@ # General information about OpenSLX can be found at http://openslx.org # ----------------------------------------------------------------------------- # Include file (general template) for run-virt.include of the virtualbox plugin + cat << EOF > "${confdir}/VirtualBox.xml" -<?xml version="1.0"?> -<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux"> <!-- 1.12-linux --> +<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux"> <Global> <ExtraData> <ExtraDataItem name="GUI/Input/AutoCapture" value="true"/> diff --git a/remote/modules/vbox/module.conf b/remote/modules/vbox/module.conf index 60cea223..6d79a1e7 100644 --- a/remote/modules/vbox/module.conf +++ b/remote/modules/vbox/module.conf @@ -1,7 +1,7 @@ REQUIRED_VBOX_VERSION_MAJOR="4.3" -REQUIRED_VBOX_VERSION_MINOR="8" +REQUIRED_VBOX_VERSION_MINOR="26" REQUIRED_VBOX_VERSION="$REQUIRED_VBOX_VERSION_MAJOR.$REQUIRED_VBOX_VERSION_MINOR" -REQUIRED_VBOX_VERSIONCODE="92456" +REQUIRED_VBOX_VERSIONCODE="98988" REQUIRED_DIRECTORIES=" /etc diff --git a/remote/modules/vbox/module.conf.ubuntu.14 b/remote/modules/vbox/module.conf.ubuntu.14 index 5691459b..59ed5ca7 100644 --- a/remote/modules/vbox/module.conf.ubuntu.14 +++ b/remote/modules/vbox/module.conf.ubuntu.14 @@ -1,5 +1,5 @@ -REQUIRED_VBOX_OSCODE='Ubuntu~raring' # raring: 13.04, but also used here. Should be changed when - # version for 14.04 appears on virtualbox.org. +REQUIRED_VBOX_OSCODE='Ubuntu~raring' # raring: 13.04, but also used here. Has not be changed when + # version for 14.04 appeared on virtualbox.org. REQUIRED_VBOXBASEURL="http://download.virtualbox.org/virtualbox/${REQUIRED_VBOX_VERSION}/virtualbox-${REQUIRED_VBOX_VERSION_MAJOR}_${REQUIRED_VBOX_VERSION}-${REQUIRED_VBOX_VERSIONCODE}~${REQUIRED_VBOX_OSCODE}_${AMD64_I386}.deb" REQUIRED_VBOXEXTURL="http://download.virtualbox.org/virtualbox/${REQUIRED_VBOX_VERSION}/Oracle_VM_VirtualBox_Extension_Pack-${REQUIRED_VBOX_VERSION}-${REQUIRED_VBOX_VERSIONCODE}.vbox-extpack" diff --git a/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt index d41bf564..07f40e0f 100755 --- a/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt +++ b/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt @@ -531,6 +531,14 @@ cp "$xmlfile" "$VMCHOOSER_DIR/fd-loop/config.xml" xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' | grep -o -E '[0-9]+x[0-9]+' | head -n 1 > "$VMCHOOSER_DIR/fd-loop/hostres.txt" # Add our magic openslx binary that sets the correct guest resolution cp "$VMCHOOSER_DIR/data/openslx.exe" "$VMCHOOSER_DIR/fd-loop/" +cp "$VMCHOOSER_DIR/data/SHARELWS.BAT" "$VMCHOOSER_DIR/fd-loop/" +rm "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" +for SHARE in $(grep -o -E '^SLX_SHARE_.*_PATH' /opt/openslx/config); do + eval "echo -n \$${SHARE} | /opt/openslx/bin/tr '/' '\' " >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" + eval echo -n " \$${SHARE%PATH}AUTH_PASS /user:\$${SHARE%PATH}AUTH_USER" >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" + echo -e '\r\n' >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" +done + # Try to use dnbd3 to access the image unset vm_diskfile diff --git a/remote/modules/vmchooser2/data/opt/openslx/vmchooser/data/SHARELWS.BAT b/remote/modules/vmchooser2/data/opt/openslx/vmchooser/data/SHARELWS.BAT new file mode 100644 index 00000000..01838705 --- /dev/null +++ b/remote/modules/vmchooser2/data/opt/openslx/vmchooser/data/SHARELWS.BAT @@ -0,0 +1,40 @@ +@echo off + +setlocal EnableDelayedExpansion + +rem Kein sleep oder timeout bis Win7, also einen +rem haesslichen Hack (Zeitverz. ca. 5 sec) +rem Sinn der Verzoegerung: Mitunter (1/3) wird +rem sonst das erste Netzlaufwerk nicht eingehaengt + +@ping -n 5 localhost> nul + +rem Konfigdatei auslesen und erstmal in Feld: +set n=0 +for /f %%i in (b:\sharelw.cfg) do ( + set array[!n!]=%%i + set /A n+=1 +) + +rem Aufruf für net use erzeugen: +set "i=0" +for %%b in (K L M N O P Q R S T U V W X Y Z) do ( + if defined array[!i!] ( + call set aufruf[!i!]=%%b: %%array[!i!]%% + set /A "i+=1" + ) else ( + goto :Schleifenende + ) +) +:Schleifenende + +rem net use-Aufrufe +set "i=0" +:Ausdrucken +if defined aufruf[!i!] ( + call net use %%aufruf[!i!]%% + set /a "i+=1" + GOTO :Ausdrucken +) + +exit /B |
