From eb1c6cff914b01732103065781e0ea0cfa225c4e Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Tue, 3 Apr 2018 13:03:13 +0200 Subject: Finalize first draft of desktop-autoloader. --- README.md | 2 -- VERSION | 1 + bin/desktop-autoloader | 45 +++++++++++++++++++++++ contrib/desktop-autoloader.cron | 6 ++++ contrib/desktop-autoloader.default | 11 ++++++ data/d-e-a-sleepandkill.desktop | 7 ---- data/desktop-autoloader.1 | 29 +++++++++++++++ data/sleep-and-kill.desktop | 7 ++++ debian/changelog | 2 +- debian/compat | 2 +- debian/control | 14 ++++---- debian/copyright | 8 ++--- debian/desktop-autoloader.cron | 1 + debian/desktop-autoloader.default | 1 + debian/desktop-autoloader.dirs | 1 + debian/desktop-autoloader.docs | 1 + debian/desktop-autoloader.install | 2 ++ debian/desktop-autoloader.manpages | 1 + debian/desktop-autoloader.postinst | 73 ++++++++++++++++++++++++++++++++++++++ debian/desktop-autoloader.postrm | 41 +++++++++++++++++++++ debian/docs | 1 - debian/install | 1 - debian/manpages | 1 - debian/source/format | 2 +- debian/watch | 3 -- 25 files changed, 234 insertions(+), 29 deletions(-) create mode 100644 VERSION create mode 100755 bin/desktop-autoloader create mode 100644 contrib/desktop-autoloader.cron create mode 100644 contrib/desktop-autoloader.default delete mode 100644 data/d-e-a-sleepandkill.desktop create mode 100644 data/desktop-autoloader.1 create mode 100644 data/sleep-and-kill.desktop create mode 120000 debian/desktop-autoloader.cron create mode 120000 debian/desktop-autoloader.default create mode 100644 debian/desktop-autoloader.dirs create mode 100644 debian/desktop-autoloader.docs create mode 100644 debian/desktop-autoloader.install create mode 100644 debian/desktop-autoloader.manpages create mode 100755 debian/desktop-autoloader.postinst create mode 100755 debian/desktop-autoloader.postrm delete mode 100644 debian/docs delete mode 100644 debian/install delete mode 100644 debian/manpages delete mode 100644 debian/watch diff --git a/README.md b/README.md index 1c931d4..0e6ce87 100644 --- a/README.md +++ b/README.md @@ -77,5 +77,3 @@ The currently supported (i.e., tested) desktop environments are: * MATE * XFCE - - diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..8a9ecc2 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.0.1 \ No newline at end of file diff --git a/bin/desktop-autoloader b/bin/desktop-autoloader new file mode 100755 index 0000000..0bd5713 --- /dev/null +++ b/bin/desktop-autoloader @@ -0,0 +1,45 @@ +#!/bin/bash + +# Copyright (C) 2011-2017 Klaus Ade Johnstad +# Copyright (C) 2017 Mike Gabriel + +# 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 2 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public +# License along with this package; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA + +AUTOLOAD_DISPLAY=":20" +DESKTOP_SESSION_MANAGER="x-session-manager" + +test -f /etc/default/desktop-autoloader && . /etc/default/desktop-autoloader + +### +### input sanitizing... +### +if ! echo "${AUTOLOAD_DISPLAY}" | grep -qE "^.*:[0-9]+(|\.[0-9]+)"; then + echo "Inappropriate setting for \$AUTOLOAD_DISPLAY variable: ${AUTOLOAD_DISPLAY}" + exit 1 +fi +if ! type -p "${DESKTOP_SESSION_MANAGER}" 1>/dev/null; then + echo "Cannot find session manager \$DESKTOP_SESSION_MANAGER: ${DESKTOP_SESSION_MANAGER}" + exit 1 +fi + +# launch an invisible X-Server +echo Xvfb "${AUTOLOAD_DISPLAY}" & + +# launch a session inside this Xserver +echo DISPLAY=${AUTOLOAD_DISPLAY} +echo dbus-run-session --exit-with-session "${DESKTOP_SESSION_MANAGER}" & diff --git a/contrib/desktop-autoloader.cron b/contrib/desktop-autoloader.cron new file mode 100644 index 0000000..87b8a22 --- /dev/null +++ b/contrib/desktop-autoloader.cron @@ -0,0 +1,6 @@ +# After a system has booted, check what time it is and pre-load the +# filesystem cache with a standardized desktop session + +SHELL=/bin/bash + +@reboot desktop-autoload [ $(date +%s) -lt $(date -d 07:30 +%s) ] && sleep 60 && desktop-autoload diff --git a/contrib/desktop-autoloader.default b/contrib/desktop-autoloader.default new file mode 100644 index 0000000..b31b421 --- /dev/null +++ b/contrib/desktop-autoloader.default @@ -0,0 +1,11 @@ +### Desktop Autoloader Defaults +# +# This file allows you to tweak the behaviour of the Desktop Autoloader +# tool. + +# The virtual display to be used for the autoloader session. +AUTOLOAD_DISPLAY=:20 + +# desktop environment to load (must be an available .desktop file under +# /usr/share/xsessions or (under Debian) x-session-manager. +DESKTOP_SESSION_MANAGER=x-session-manager diff --git a/data/d-e-a-sleepandkill.desktop b/data/d-e-a-sleepandkill.desktop deleted file mode 100644 index c366bd4..0000000 --- a/data/d-e-a-sleepandkill.desktop +++ /dev/null @@ -1,7 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=sleep-and-kill -Exec=/bin/sh -c "sleep 90; pkill -u desktop-session-autoloader" -Terminal=false -Type=Application -StartupNotify=false diff --git a/data/desktop-autoloader.1 b/data/desktop-autoloader.1 new file mode 100644 index 0000000..372fa99 --- /dev/null +++ b/data/desktop-autoloader.1 @@ -0,0 +1,29 @@ +.TH desktop-autoloader 1 +.SH NAME +desktop-autoloader \- Desktop Session Autoloader Launch Script +.SH SYNOPSIS +.B desktop-autoloader + +.SH DESCRIPTION +\fBdesktop-autoloader\fR is a tiny script that loads a virtual desktop session in Xvfb. +Its purpose is to fill the kernel's file system RAM cache with all necessary files +needed for running a real desktop session (of the same type). +.PP +The Desktop Session Autoloader is a nice-to-have tool on diskless clients +(aka LTSP Fat Clients). It accelerates the login of the +first-user-of-the-day tremendously. To take advantage of the pre-loaded +desktop session, make sure the diskless systems get launched via Wake-on-LAN +before 7:30am. +.PP +\fBdesktop-autoloader\fR should not be executed directly, it is executed via CRON. +It gets only executed when the system is booted before a certain time of day (so +it does not inflict performance breakdown on already running sessions. + +.SH OPTIONS +There are no options. + +.SH SEE ALSO +/etc/cron.d/desktop-autoloader + +.SH AUTHOR +This manual page was written by Mike Gabriel for the Debian Project. diff --git a/data/sleep-and-kill.desktop b/data/sleep-and-kill.desktop new file mode 100644 index 0000000..ab7e9ab --- /dev/null +++ b/data/sleep-and-kill.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=sleep-and-kill +Exec=/bin/sh -c "sleep 300; pkill -u desktop-autoloader" +Terminal=false +Type=Application +StartupNotify=false diff --git a/debian/changelog b/debian/changelog index 220959b..64bf16a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -desktop-session-autoloader (0.0.1-1) UNRELEASED; urgency=medium +desktop-autoloader (0.0.1) UNRELEASED; urgency=medium * Initial release. (Closes: #XXXXXX). diff --git a/debian/compat b/debian/compat index 9d60796..f599e28 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -11 \ No newline at end of file +10 diff --git a/debian/control b/debian/control index 6a9282b..3276142 100644 --- a/debian/control +++ b/debian/control @@ -1,4 +1,4 @@ -Source: desktop-session-autoloader +Source: desktop-autoloader Section: misc Priority: optional Maintainer: Debian Edu Packaging Team @@ -6,17 +6,17 @@ Uploaders: Mike Gabriel , Standards-Version: 4.1.3 Build-Depends: - debhelper (>= 11), + debhelper (>= 10), cdbs, -Vcs-Git: https://anonscm.debian.org/git/debian-edu/pkg-team/desktop-session-autoloader.git -Vcs-Browser: https://anonscm.debian.org/git/debian-edu/pkg-team/desktop-session-autoloader.git -Homepage: https://anonscm.debian.org/git/debian-edu/pkg-team/desktop-session-autoloader/README.md +Vcs-Git: https://anonscm.debian.org/git/debian-edu/pkg-team/desktop-autoloader.git +Vcs-Browser: https://anonscm.debian.org/git/debian-edu/pkg-team/desktop-autoloader.git +Homepage: https://anonscm.debian.org/git/debian-edu/pkg-team/desktop-autoloader/README.md -Package: desktop-session-autoloader +Package: desktop-autoloader Architecture: all Depends: ${misc:Depends}, -Suggests: + adduser, Description: Accelerate Diskless Workstation systems by pre-loading a dummy Desktop Session This package is for diskless Linux clients as you often find them in school class rooms running an LTSP based fat client environment. diff --git a/debian/copyright b/debian/copyright index 536862f..e8f199c 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,12 +1,12 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: desktop-session-autoloader +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: desktop-autoloader Upstream-Contact: Mike Gabriel Source: https://code.it-zukunft-schule.de Files: * Copyright: - 2011-2017, Klaus Ade Johnstad - 2017, Mike Gabriel + 2011-2018, Klaus Ade Johnstad + 2018, Mike Gabriel License: GPL-2+ License: GPL-2+ diff --git a/debian/desktop-autoloader.cron b/debian/desktop-autoloader.cron new file mode 120000 index 0000000..15916e7 --- /dev/null +++ b/debian/desktop-autoloader.cron @@ -0,0 +1 @@ +../contrib/desktop-autoloader.cron \ No newline at end of file diff --git a/debian/desktop-autoloader.default b/debian/desktop-autoloader.default new file mode 120000 index 0000000..c74bc31 --- /dev/null +++ b/debian/desktop-autoloader.default @@ -0,0 +1 @@ +../contrib/desktop-autoloader.default \ No newline at end of file diff --git a/debian/desktop-autoloader.dirs b/debian/desktop-autoloader.dirs new file mode 100644 index 0000000..aa26357 --- /dev/null +++ b/debian/desktop-autoloader.dirs @@ -0,0 +1 @@ +var/lib/desktop-autoloader/ diff --git a/debian/desktop-autoloader.docs b/debian/desktop-autoloader.docs new file mode 100644 index 0000000..b43bf86 --- /dev/null +++ b/debian/desktop-autoloader.docs @@ -0,0 +1 @@ +README.md diff --git a/debian/desktop-autoloader.install b/debian/desktop-autoloader.install new file mode 100644 index 0000000..01b2b2e --- /dev/null +++ b/debian/desktop-autoloader.install @@ -0,0 +1,2 @@ +bin/* usr/bin/ +data/sleep-and-kill.desktop etc/desktop-autoloader/.config/autostart/ diff --git a/debian/desktop-autoloader.manpages b/debian/desktop-autoloader.manpages new file mode 100644 index 0000000..382586c --- /dev/null +++ b/debian/desktop-autoloader.manpages @@ -0,0 +1 @@ +data/desktop-autoloader.1 diff --git a/debian/desktop-autoloader.postinst b/debian/desktop-autoloader.postinst new file mode 100755 index 0000000..6ec5a61 --- /dev/null +++ b/debian/desktop-autoloader.postinst @@ -0,0 +1,73 @@ +#!/bin/sh +# postinst script for desktop-autoloader +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +case "$1" in + configure) + + # setup desktop-autoloader user and group + if ! getent group desktop-autoloader >/dev/null; then + echo "Creating desktop-autoloader group." >&2 + addgroup --system desktop-autoloader + else + echo "Group desktop-autoloader already exists." >&2 + fi + if ! getent passwd desktop-autoloader >/dev/null; then + echo "Creating desktop-autoloader user." >&2 + adduser --system --no-create-home \ + --disabled-password --disabled-login \ + --shell /bin/true --group --home /var/lib/desktop-autoloader desktop-autoloader + else + echo "User desktop-autoloader already exists." >&2 + # make sure all settings are appropriate + if [ "`id -gn desktop-autoloader`" != "desktop-autoloader" ]; then + usermod --gid desktop-autoloader desktop-autoloader + test -d /var/lib/desktop-autoloader && \ + usermod --home /var/lib/desktop-autoloader desktop-autoloader || \ + usermod --move-home --home /var/lib/desktop-autoloader desktop-autoloader + fi + if [ "`ls -1d ~desktop-autoloader`" != "/var/lib/desktop-autoloader" ]; then + usermod --move-home --home /var/lib/desktop-autoloader desktop-autoloader + fi + # we leave user shell alone. we have never set this wrongly + # and we need to respect the administrator's choices + fi + + mkdir -p ~desktop-autoloader/.config/ + chown desktop-autoloader:desktop-autoloader ~desktop-autoloader/ -Rf + if [ ! -h ~desktop-autoloader/.config/autostart ]; then + rm -Rf ~desktop-autoloader/.config/autostart + fi + ln -s /etc/desktop-loader/.config/autostart ~desktop-autoloader/.config/autostart + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/desktop-autoloader.postrm b/debian/desktop-autoloader.postrm new file mode 100755 index 0000000..3ad8a23 --- /dev/null +++ b/debian/desktop-autoloader.postrm @@ -0,0 +1,41 @@ +#! /bin/sh +# postrm script for desktop-autoloader +# +# see: dh_installdeb(1) +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' overwrit>r> +# for details, see /usr/share/doc/packaging-manual/ + +set -e + +case "$1" in + purge) + getent passwd desktop-autoloader >/dev/null && deluser desktop-autoloader + getent group desktop-autoloader >/dev/null && delgroup desktop-autoloader + + rm -Rf /var/lib/desktop-autoloader + + ;; + + remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/docs b/debian/docs deleted file mode 100644 index b43bf86..0000000 --- a/debian/docs +++ /dev/null @@ -1 +0,0 @@ -README.md diff --git a/debian/install b/debian/install deleted file mode 100644 index 503fa1d..0000000 --- a/debian/install +++ /dev/null @@ -1 +0,0 @@ -#TODO \ No newline at end of file diff --git a/debian/manpages b/debian/manpages deleted file mode 100644 index 503fa1d..0000000 --- a/debian/manpages +++ /dev/null @@ -1 +0,0 @@ -#TODO \ No newline at end of file diff --git a/debian/source/format b/debian/source/format index 46ebe02..89ae9db 100644 --- a/debian/source/format +++ b/debian/source/format @@ -1 +1 @@ -3.0 (quilt) \ No newline at end of file +3.0 (native) diff --git a/debian/watch b/debian/watch deleted file mode 100644 index 2d34965..0000000 --- a/debian/watch +++ /dev/null @@ -1,3 +0,0 @@ -version=3 -http://code.it-zukunft-schule.de/cgit/desktop-session-autoloader/ \ - snapshot/desktop-session-autoloader-(\d\.\d\.\d)\.tar\.gz$ -- cgit v1.2.3