#! /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 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_fstab() {
echo "/dev/root / unionfs defaults 0 0" > /etc/fstab
echo "tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0" >> /etc/fstab
mount /tmp
}
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"
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"
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