#! /bin/sh # # Author: Matt Zimmerman # ### BEGIN INIT INFO # Provides: suse-bind-mounts # Required-Start: # Required-Stop: # Default-Start: S 1 2 3 4 5 # Default-Stop: 0 6 # Short-Description: Script for LTSP client initialization # Description: ### END INIT INFO set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="LTSP client setup" NAME=ltsp-client-setup SCRIPTNAME=/etc/init.d/$NAME # Gracefully exit if the package has been removed. test -f /usr/lib/ltsp/ltsp_functions || exit 0 # Gracefully exit if ltsp_chroot file is not present #test -f /etc/ltsp_chroot || exit 0 . /lib/lsb/init-functions . /usr/lib/ltsp/ltsp_functions . /usr/lib/ltsp/ltsp_config test -f /etc/default/ltsp-client-setup && . /etc/default/ltsp-client-setup load_modules() { for module in $(env|grep ^MODULE_|sed -e s/^MODULE_[0-9]*\=//|sed -e s/\ /*/);do modprobe $(echo $module|tr "*" " ") done } #configure_console() { # if [ -n "$CONSOLE_KEYMAP" ]; then # ckbcomp -model pc105 "$CONSOLE_KEYMAP" | loadkeys # fi #} configure_swap() { if get_boolean "$USE_LOCAL_SWAP" ; then # Enable local swap partition if found on local disk for part in `sfdisk -l 2>/dev/null | awk '/ 82 / { print $1}'`; do swap_devices="$swap_devices $part" done fi if get_boolean "$NBD_SWAP" ; then SWAP_SERVER=${SWAP_SERVER:-"$SERVER"} NBD_PORT=${NBD_PORT:-"9572"} modprobe nbd /sbin/nbd-client $SWAP_SERVER $NBD_PORT /dev/nbd0 && swap_devices="$swap_devices /dev/nbd0" fi if get_boolean "$ENCRYPT_SWAP" ; then if [ -x /sbin/cryptsetup ]; then modprobe dm_crypt else echo "ERROR: ENCRYPT_SWAP=Y, but /sbin/cryptsetup not found. disabling swap." swap_devices="" fi fi num=0 for device in $swap_devices ; do swap="$device" if get_boolean "$ENCRYPT_SWAP" ; then if [ -x /sbin/cryptsetup ]; then cryptsetup -d /dev/urandom create swap$num $swap && swap="/dev/mapper/swap$num" num=$(($num+1)) fi fi mkswap $swap swapon $swap done } #configure_resolver() { # hostname=$(hostname) # if [ "(none)" = "$hostname" ] ; then # /etc/init.d/hostname.sh start # hostname="$(hostname)" # else # echo $hostname > /etc/hostname # fi # cat < /etc/hosts #127.0.0.1 localhost #127.0.0.2 $hostname #$SERVER server #EOF # if [ -f /etc/hosts.ltsp ]; then # cat /etc/hosts.ltsp >> /etc/hosts # fi # if [ -n "$DNS_SERVER" ] && [ -n "$SEARCH_DOMAIN" ]; then # cat < /etc/resolv.conf #search $SEARCH_DOMAIN #nameserver $DNS_SERVER #EOF # fi #} #configure_printer() { # for prn_dev in $(env | awk -F= '$1 ~ /^PRINTER_[0-9]_DEVICE/ { print $1 }'); do # prn_no=`echo $prn_dev | cut -f2 -d'_'` # /usr/lib/ltsp/start_printer $prn_no & # done #} #configure_syslog() { # cat < /etc/syslog.conf #*.* @${SYSLOG_HOST-$SERVER} #EOF #} configure_fstab() { echo "/dev/root / unionfs defaults 0 0" > /etc/fstab echo "tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0" >> /etc/fstab mount /tmp } # muzso: preseed() has been modified to only collect commands in a variable # and does not pipe them instantly to debconf-communicate # We do this at the end in one batch. #preseed() { # question="$1" # value="$2" # if [ -n "$value" ]; then # if [ -n "$debconf_commands" ]; then # debconf_commands="${debconf_commands}\n" # fi # debconf_commands="${debconf_commands}set $question $value" # debconf_commands="${debconf_commands}\nfset $question seen true" # fi #} #configure_x() { # if [ -z "$xserver_package" ]; then # # set default xserver # if [ -d /usr/lib/xorg ]; then # xserver_package="xserver-xorg" # elif [ -d /usr/share/doc/xserver-xfree86/ ]; then # xserver_package="xserver-xfree86" # else # echo "WARNING: no known xserver detected" # return # fi # fi # # set default configuration file # case $xserver_package in # xserver-xfree86) xserver_config="/etc/X11/XF86Config-4" ;; # xserver-xorg) xserver_config="/etc/X11/xorg.conf" ;; # esac # if [ -n "$XF86CONFIG_FILE" ]; then # # User has specified a custom config # cp "$XF86CONFIG_FILE" "$xserver_config" # else # # Autoconfigure # if [ -n "$(which xdebconfigurator)" ]; then # xdebconfigurator # fi # # Handle overrides of specific parameters # if [ -n "$XSERVER" ] && [ "$XSERVER" != "auto" ]; then # preseed $xserver_package/autodetect_video_card "false" # preseed $xserver_package/config/device/driver "$XSERVER" # fi # X_USE_SYNC_RANGES=${X_USE_SYNC_RANGES:-Y} # if [ -n "$X_HORZSYNC" ] && [ -n "$X_VERTREFRESH" ]; then # preseed $xserver_package/autodetect_monitor "false" # preseed $xserver_package/config/monitor/selection-method "Advanced" # preseed $xserver_package/config/monitor/vert-refresh "$X_VERTREFRESH" # preseed $xserver_package/config/monitor/horiz-sync "$X_HORZSYNC" # if [ Y = "$X_USE_SYNC_RANGES" ]; then # preseed $xserver_package/config/monitor/use_sync_ranges "true" # else # preseed $xserver_package/config/monitor/use_sync_ranges "false" # fi # fi # # # Color depth preseeding # if [ -n "$X_COLOR_DEPTH" ]; then # preseed $xserver_package/config/display/default_depth "$X_COLOR_DEPTH" # fi # # # set compatbility for X_VIDEORAM with ltsp 4.x # X_VIDEO_RAM=${X_VIDEO_RAM:-"$X_VIDEORAM"} # # # set video ram # if [ -n "$X_VIDEO_RAM" ]; then # preseed $xserver_package/config/device/video_ram "$X_VIDEO_RAM" # fi # # # Mouse preseeding options. Use inputattach if available # if [ -n "$X_MOUSE_DEVICE" ] && \ # [ -n "$X_MOUSE_PROTOCOL" ] && \ # type inputattach >/dev/null 2>/dev/null && \ # [ -n "$(echo $X_MOUSE_DEVICE | awk '/\/dev\/ttyS[0-9]/')" ]; then # inputattach --"$X_MOUSE_PROTOCOL" "$X_MOUSE_DEVICE" & # else # if [ -n "$X_MOUSE_DEVICE" ]; then # preseed $xserver_package/config/inputdevice/mouse/port "$X_MOUSE_DEVICE" # fi # if [ -n "$X_MOUSE_PROTOCOL" ]; then # preseed $xserver_package/config/inputdevice/mouse/protocol "$X_MOUSE_PROTOCOL" # fi # fi # if [ -n "$X_MOUSE_EMULATE3BTN" ]; then # preseed $xserver_package/config/inputdevice/mouse/emulate3buttons "$X_MOUSE_EMULATE3BTN" # fi # # X_MODE=$( echo "$X_MODE_0 $X_MODE_1 $X_MODE_2" | sed -r 's/ +/, /g;s/, *$//g') # if [ -n "$X_MODE" ]; then # preseed $xserver_package/config/display/modes "$X_MODE" # fi # # # This require fontserver preseeding to work (Debian bug # # #323262, fixed in xorg-x11 version 6.8.99.901.dfsg.1-1). # # Also done using code in screen.d/startx and screen.d/ldm until # # the xorg-x11 version make it into unstable and testing. # if [ Y = "${USE_XFS}" ] ; then # if [ -z "${XFS_SERVER}" ] ; then # XFS_SERVER="${SERVER}" # fi # preseed $xserver_package/config/fontpath/fontserver "tcp/${XFS_SERVER}:7100" # fi # # # Make sure xkb values only get preseeded if the variables are actually set # # (saves boottime to not call debconf-communicate on every empty value) # if [ -n "$XKBLAYOUT" ]; then # preseed $xserver_package/config/inputdevice/keyboard/layout "$XKBLAYOUT" # fi # if [ -n "$XKBMODEL" ]; then # preseed $xserver_package/config/inputdevice/keyboard/model "$XKBMODEL" # fi # if [ -n "$XKBRULES" ]; then # preseed $xserver_package/config/inputdevice/keyboard/rules "$XKBRULES" # fi # if [ -n "$XKBOPTIONS" ]; then # preseed $xserver_package/config/inputdevice/keyboard/options "$XKBOPTIONS" # fi # if [ -n "$XKBVARIANT" ]; then # preseed $xserver_package/config/inputdevice/keyboard/variant "$XKBVARIANT" # fi # # # muzso: saving "preseeded" values # if [ -n "$debconf_commands" ]; then # echo $debconf_commands | debconf-communicate $xserver_package # fi # # # Autoconfigure using dexconf when using xdebconfigurator, or X # # package postinst if not. Using dexconf directly might save # # some memory on the client. # if [ -n "$(which xdebconfigurator)" ] && # [ "$root_write_method" = "bind_mounts" ]; then # # Using dexconf instead of reconfigure to save memory ? # dexconf -o $xserver_config # else # dpkg-reconfigure -fnoninteractive -pcritical $xserver_package # fi # fi # } bind_mounts () { # set defaults test -z "$tmpfs_dir" && tmpfs_dir=/var/lib/ltsp-client-setup test -z "$rw_dirs" && rw_dirs="/var/cache/man /var/lib/xkb /var/lock /var/run /var/log /var/spool /var/tmp /tmp /var/lib/dbus" test -z "$copy_dirs" && copy_dirs="" test -z "$temp_copy_dirs" && temp_copy_dirs="/var/cache" test -z "$bindfiles" && bindfiles="/etc/X11/xorg.conf /etc/fstab /etc/mtab" mount -t tmpfs -o mode=0755 tmpfs $tmpfs_dir # preserve directory structure for d in $rw_dirs ; do if [ -d "$d" ]; then cd $tmpfs_dir tar --no-recursion -cpf - $(find $d -type d 2> /dev/null) 2> /dev/null | tar xpf - mount --bind $tmpfs_dir/$d $d else echo "WARNING: $d does not exist" fi done # copy contents into tmpfs for d in $copy_dirs $temp_copy_dirs; do if [ -d "$d" ]; then cd $tmpfs_dir tar -cpf - $d 2> /dev/null | tar xpf - mount --bind $tmpfs_dir/$d $d else echo "WARNING: $d does not exist" fi done # mount one file on top of another for f in $bindfiles ; do if [ -e "$f" ]; then mkdir -p "$(dirname $tmpfs_dir/$f)" cp $f $tmpfs_dir/$f mount --bind $tmpfs_dir/$f $f else echo "WARNING: $f does not exist" fi done } bind_unmounts() { for dir in $temp_copy_dirs; do umount $dir rm -rf $tmpfs_dir/${dir#/} done } run_rcfiles() { for rcfile in $(env | sort | awk -F= '$1 ~ /^RCFILE_/ { print $2 }'); do if [ -x "$rcfile" ]; then "$rcfile" $@ fi done } case "$1" in start) # log_begin_msg "Setting up LTSP client..." # type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true # if [ "$root_write_method" = "bind_mounts" ]; then bind_mounts # fi load_modules || true # configure_console || true # configure_resolver || true configure_swap || true configure_fstab || true # run_rcfiles || true # configure_x || true # configure_printer || true # if [ "$root_write_method" = "bind_mounts" ]; then # bind_unmounts # fi # log_end_msg 0 ;; stop) # echo -n "Stopping $DESC: $NAME" # d_stop # echo "." ;; restart|force-reload) # # If the "reload" option is implemented, move the "force-reload" # option to the "reload" entry above. If not, "force-reload" is # just the same as "restart". # echo -n "Restarting $DESC: $NAME" d_stop sleep 1 d_start echo "." ;; *) # echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0