rendered paste body#! /bin/sh## Author: Matt Zimmerman <mdz@ubuntu.com>#### 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 INFOset -ePATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binDESC="LTSP client setup"NAME=ltsp-client-setupSCRIPTNAME=/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_configtest -f /etc/default/ltsp-client-setup && . /etc/default/ltsp-client-setupload_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 <<EOF > /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 <<EOF > /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 <<EOF > /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 ;;esacexit 0