#!/bin/bash # Copyright (C) 2012 by Debian Edu project, http://wiki.debian.org/DebianEdu # Mike Gabriel # Internet Kiosk 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. # # Internet Kiosk 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 program; if not, write to the # Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. set -e if echo $0 | egrep "^./bin/.*$" >/dev/null; then ETCDIR="etc/" SHAREDIR="share/" elif echo $0 | egrep "^./ik_.*$" >/dev/null; then ETCDIR="../etc" SHAREDIR="../share/" else ETCDIR=/etc/internet-kiosk SHAREDIR="/usr/share/internet-kiosk/" fi source $ETCDIR/ik_settings IK_BASE="${IK_BASE:-/opt/internet-kiosk}" IK_CHROOT="${IK_CHROOT:-$IK_BASE/chroot}" IK_CONFIG="${IK_CONFIG:-$IK_BASE/etc}" IK_PRETTY_NAME="${IK_PRETTY_NAME:-Internet Kiosk}" IK_DISTRO_CODENAME="${IK_DISTRO_CODENAME:-wheezy}" IK_DEBMIRROR_URL="${IK_DEBMIRROR_URL:-'http://ftp.debian.org/debian'}" IK_EXTRA_DEBURL="${IK_EXTRA_DEBURL:-'deb http://packages.it-zukunft-schule.de $IK_DISTRO_CODENAME main'}" IK_MODULE_BLACKLIST="${IK_MODULE_BLACKLIST:-'pcspkr'}" test -e "$IK_CHROOT" && { echo "ERROR: Internet Kiosk Terminal chroot already exists at $IK_CHROOT." echo "Clear $IK_BASE/ and then run $(basename $0) again..." exit -1 } [ "x$USER" == "xroot" ] || { echo "ERROR: Internet Kiosk Diskless Terminal management scripts have to run" echo "as super-user root." exit -2 } echo "Hit to continue with the Internet Kiosk Terminal's chroot creation" echo "using the above parameters..." echo echo "Alternatively, hit STRG-C to cancel the operation now!!!" read export LANG=C mkdir -p $IK_CONFIG test -f $IK_CONFIG/ik_init || cp $SHAREDIR/ik_init $IK_CONFIG test -f $IK_CONFIG/ik_start || cp $SHAREDIR/ik_start $IK_CONFIG apt-get install debootstrap mkdir -p $IK_CHROOT # use a proxy server for APT (if any is configured) export http_proxy="$IK_HTTP_PROXY" export https_proxy="$IK_HTTPS_PROXY" export ftp_proxy="$IK_FTP_PROXY" debootstrap --arch i386 $IK_DISTRO_CODENAME $IK_CHROOT/ $IK_DEBMIRROR_URL cp /etc/resolv.conf $IK_CHROOT/etc/resolv.conf if [ "$IK_DISTRO_CODENAME" = "squeeze" ]; then echo "auto lo" >> $IK_CHROOT/etc/network/interfaces echo "iface lo inet loopback" >> $IK_CHROOT/etc/network/interfaces fi echo "localhost" > $IK_CHROOT/etc/hostname echo "127.0.0.1 localhost" >> $IK_CHROOT/etc/hosts cat > $IK_CHROOT/etc/fstab <> $IK_CHROOT/etc/fstab <> $IK_CHROOT/etc/fstab < $IK_CHROOT/ik_dte_install.sh < /sbin/start-stop-daemon echo '#' >> /sbin/start-stop-daemon echo '# Internet Kiosk Wrapper to avoid running daemons while performing maintenance.' >> /sbin/start-stop-daemon echo '#' >> /sbin/start-stop-daemon echo >> /sbin/start-stop-daemon echo 'if [ "\$IK_HANDLE_DAEMONS" != "false" ]; then >> /sbin/start-stop-daemon echo ' /sbin/start-stop-daemon.real "\$@"' >> /sbin/start-stop-daemon echo 'fi' >> /sbin/start-stop-daemon chmod +x /sbin/start-stop-daemon export IK_HANDLE_DAEMONS=false # tweak mtab diversion [ \$? -eq 0 ] && rm -f /etc/mtab [ \$? -eq 0 ] && ln -sf /proc/mounts /etc/mtab [ \$? -eq 0 ] && test -n "$IK_EXTRA_DEBURL" && echo "$IK_EXTRA_DEBURL" > /etc/apt/sources.list.d/itzks.list [ \$? -eq 0 ] && test -n "$IK_EXTRA_DEBURL" && apt-get update [ \$? -eq 0 ] && test -n "$IK_EXTRA_DEBURL" && apt-get install itzks-keyring -y --force-yes [ \$? -eq 0 ] && apt-get update [ \$? -eq 0 ] && apt-get install $IK_SHELL -y [ \$? -eq 0 ] && apt-get install syslinux locales -y [ \$? -eq 0 ] && dpkg-reconfigure locales [ \$? -eq 0 ] && apt-get install linux-image-486 -y [ \$? -eq 0 ] && mv /vmlinuz /vmlinuz.486 [ \$? -eq 0 ] && mv /initrd.img /initrd.img.486 [ \$? -eq 0 ] && mv /vmlinuz /vmlinuz.486.tmp [ \$? -eq 0 ] && LINK_TARGET=\$(readlink /vmlinuz.486.tmp | sed 's@/boot@boot@') && ln -s \$LINK_TARGET /vmlinuz.486 && rm -f /vmlinuz.486.tmp [ \$? -eq 0 ] && mv /initrd.img /initrd.img.486.tmp [ \$? -eq 0 ] && LINK_TARGET=\$(readlink /initrd.img.486.tmp | sed 's@/boot@boot@') && ln -s \$LINK_TARGET /initrd.img.486 && rm -f /initrd.img.486.tmp [ \$? -eq 0 ] && apt-get install internet-kiosk -y # blacklist kernel modules [ \$? -eq 0 ] && echo && echo "# modules blacklisted on Internet Kiosk Diskless Terminals..." >> /etc/modprobe.d/blacklist.conf [ \$? -eq 0 ] && for mod in $IK_MODULE_BLACKLIST; do echo "blacklist \$mod" >> /etc/modprobe.d/blacklist.conf; done # Pulsaudio must come afterwards [ \$? -eq 0 ] && apt-get install alsa-base pulseaudio -y [ \$? -eq 0 ] && sed -e 's/BOOT=local/BOOT=nfs/' -i /etc/initramfs-tools/initramfs.conf [ \$? -eq 0 ] && rm -f /etc/udev/rules.d/*-persistent-*.rules [ \$? -eq 0 ] && useradd internet-kiosk [ \$? -eq 0 ] && adduser internet-kiosk audio [ \$? -eq 0 ] && adduser internet-kiosk pulse [ \$? -eq 0 ] && adduser pulse audio [ \$? -eq 0 ] && update-initramfs -u -v [ \$? -eq 0 ] && passwd -l root # tweak plymouth [ \$? -eq 0 ] && test -e /etc/os-release && sed -e 's/PRETTY_NAME=.*/PRETTY_NAME=$IK_PRETTY_NAME/' -i /etc/os-release || echo "PRETTY_NAME=$IK_PRETTY_NAME" >> /etc/os-release [ \$? -eq 0 ] && test -e /etc/modprobe.d/i915-kms.conf && sed -s 's/modeset=1/modeset=0/' -i /etc/modprobe.d/i915-kms.conf [ \$? -eq 0 ] && test -e /etc/modprobe.d/radeon-kms.conf && sed -s 's/modeset=1/modeset=0/' -i /etc/modprobe.d/radeon-kms.conf EOF chmod u+x $IK_CHROOT/ik_dte_install.sh mkdir -p $IK_CHROOT/{proc,dev/pts,sys} mount -tproc proc $IK_CHROOT/proc || true mount -tsysfs sys $IK_CHROOT/sys || true mount -tdevpts devts $IK_CHROOT/dev/pts || true chroot $IK_CHROOT /ik_dte_install.sh for mountpoint in proc dev/pts sys; do while true; do cat /proc/mounts | grep $IK_CHROOT/$mountpoint >/dev/null && umount $IK_CHROOT/$mountpoint || break done done rm -f $IK_CHROOT/etc/udev/rules.d/*-persistent-*.rules ik_update echo "Internet Kiosk Diskless Terminal creation has finished successfully." echo