diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/casper | 382 | ||||
| -rwxr-xr-x | scripts/casper-bottom/01integrity_check | 18 | ||||
| -rwxr-xr-x | scripts/casper-bottom/05mountpoints | 27 | ||||
| -rwxr-xr-x | scripts/casper-bottom/10adduser | 66 | ||||
| -rwxr-xr-x | scripts/casper-bottom/12fstab | 31 | ||||
| -rwxr-xr-x | scripts/casper-bottom/13swap | 44 | ||||
| -rwxr-xr-x | scripts/casper-bottom/14locales | 52 | ||||
| -rwxr-xr-x | scripts/casper-bottom/15autologin | 62 | ||||
| -rwxr-xr-x | scripts/casper-bottom/18hostname | 38 | ||||
| -rwxr-xr-x | scripts/casper-bottom/19keyboard | 35 | ||||
| -rwxr-xr-x | scripts/casper-bottom/20xconfig | 51 | ||||
| -rwxr-xr-x | scripts/casper-bottom/22gnome_panel_data | 34 | ||||
| -rwxr-xr-x | scripts/casper-bottom/22screensaver | 28 | ||||
| -rwxr-xr-x | scripts/casper-bottom/23etc_modules | 30 | ||||
| -rwxr-xr-x | scripts/casper-bottom/23networking | 55 | ||||
| -rwxr-xr-x | scripts/casper-bottom/24preseed | 43 | ||||
| -rwxr-xr-x | scripts/casper-bottom/25configure_init | 51 | ||||
| -rwxr-xr-x | scripts/casper-bottom/30accessibility | 81 | ||||
| -rwxr-xr-x | scripts/casper-bottom/31disable_update_notifier | 26 | ||||
| -rwxr-xr-x | scripts/casper-bottom/32disable_hibernation | 35 | ||||
| -rwxr-xr-x | scripts/casper-bottom/33disable_binary_drivers | 25 |
21 files changed, 1214 insertions, 0 deletions
diff --git a/scripts/casper b/scripts/casper new file mode 100644 index 0000000..2557595 --- /dev/null +++ b/scripts/casper @@ -0,0 +1,382 @@ +#!/bin/sh + +# set -e + +mountpoint=/live_media +root_persistence="casper-rw" +home_persistence="home-rw" + +mkdir -p $mountpoint + +overlay_method=unionfs +if [ "${DPKG_ARCH}" = "ia64" ] || [ "${DPKG_ARCH}" = "hppa" ] || [ "${DPKG_ARCH}" = "sparc" ]; then + overlay_method=devmapper +fi + +USERNAME=debian +USERFULLNAME="Debian Live user" +HOST=debian + +[ -f /etc/casper.conf ] && . /etc/casper.conf + +export USERNAME USERFULLNAME HOST + +casper_path() { # Fixme: uglyness + path=$1 + if [ -e "$path/casper/filesystem.cloop" ]; then + echo "$path/casper/filesystem.cloop" + return 0 + elif [ -e "$path/casper/filesystem.squashfs" ]; then + echo "$path/casper/filesystem.squashfs" + return 0 + elif [ -e "$path/casper/filesystem.ext2" ]; then + echo "$path/casper/filesystem.ext2" + return 0 + elif [ -e "$path/casper/filesystem.xfs" ]; then + echo "$path/casper/filesystem.xfs" + return 0 + fi + return 1 +} + +subdevices() { + sysblock=$1 + r="" + for dev in "${sysblock}" "${sysblock}"/*; do + if [ -e "${dev}/dev" ]; then + r="${r} ${dev}" + fi + done + echo ${r} +} + +get_backing_device() { + case "$1" in + *.cloop) + echo $(setup_loop "$1" "cloop" "/sys/block/cloop*") + ;; + *.squashfs|*.ext2|*.xfs) + echo $(setup_loop "$1" "loop" "/sys/block/loop*") + ;; + *) + panic "Unrecognized casper filesystem: $1" + ;; + esac +} + +setup_cow() { + case "$1" in + unionfs) + setup_unionfs "$2" "$rootmnt" + ;; + devmapper) + setup_devmapper "$2" "$rootmnt" + esac +} + +sys2dev() { + sysdev=${1#/sys} + echo "/dev/$(udevinfo -q name -p ${sysdev} 2>/dev/null|| echo ${sysdev##*/})" +} + +setup_loop() { + local fspath=$1 + local module=$2 + local pattern=$3 + + modprobe -qb "$module" + if [ -x /sbin/udevplug ]; then + udevplug -W + else + udevtrigger + fi + + for loopdev in $pattern; do + if [ "$(cat $loopdev/size)" -eq 0 ]; then + dev=$(sys2dev "${loopdev}") + losetup "$dev" "$fspath" + echo "$dev" + return 0 + fi + done + panic "No loop devices available" +} + +get_fstype() { + local FSTYPE + local FSSIZE + eval $(fstype < $1) + if [ "$FSTYPE" != "unknown" ]; then + echo $FSTYPE + return 0 + fi + /lib/udev/vol_id -t $1 2>/dev/null +} + +setup_devmapper() { + backdev="$1" + rootmnt="$2" + + modprobe -qb dm-mod + COW_DEVICE=/dev/ram1 + COW_NAME="casper-cow" + + BACKING_FILE_SIZE=$(blockdev --getsize "$backdev") + MAX_COW_SIZE=$(blockdev --getsize "$COW_DEVICE") + CHUNK_SIZE=8 # sectors + + if [ -z "$COW_SIZE" -o "$COW_SIZE" -gt "$MAX_COW_SIZE" ]; then + COW_SIZE=$MAX_COW_SIZE + fi + + echo "0 $COW_SIZE linear $COW_DEVICE 0" | dmsetup create $COW_NAME + + echo "0 $BACKING_FILE_SIZE snapshot $backdev /dev/mapper/$COW_NAME p $CHUNK_SIZE" | \ + dmsetup create casper-snapshot + if [ "$(get_fstype $backdev)" = "unknown" ]; then + panic "Unknown file system type on $backdev" + fi + mount -t $(get_fstype "$backdev") /dev/mapper/casper-snapshot $rootmnt || panic "Can not mount /dev/mapper/casper/snapshot on $rootmnt" + + mkdir -p "$rootmnt/rofs" + echo "0 $BACKING_FILE_SIZE linear $backdev 0" | dmsetup create casper-backing + mount -t $(get_fstype "$backdev") /dev/mapper/casper-backing "$rootmnt/rofs" +} + +where_is_mounted() { + device=$1 + if grep -q "^$device " /proc/mounts; then + grep "^$device " /proc/mounts | read d mountpoint rest + echo $mountpoint + return 0 + fi + return 1 +} + +copy_to_ram() { + copyto="${mountpoint}_swap" + + size=$(du -ks ${mountpoint} | cut -f1) + size=$(expr ${size} + ${size}/20 ) # Fixme: 5% more to be sure + needed_space=$(expr ${size} * 1024) + freespace=$( expr $(awk '/MemFree/{print $2}' /proc/meminfo) + $( cat /proc/meminfo | grep Cached | head -n 1 | awk '/Cached/{print $2}' - )) + + if [ ! ${freespace} -lt ${needed_space} ] ; then + [ "$quiet" != "y" ] && log_begin_msg "Not enough free memory to copy to ram" + [ "$quiet" != "y" ] && log_end_msg + return + else + [ "$quiet" != "y" ] && log_begin_msg "Copying live media to ram..." + mkdir "${copyto}" + mount -t tmpfs -o size=${size}k /dev/shm ${copyto} + cp -a ${mountpoint}/* ${copyto} + umount ${mountpoint} + mount -r -o move ${copyto} ${mountpoint} + rmdir ${copyto} + [ "$quiet" != "y" ] && log_end_msg + fi +} + +find_cow_device() { + pers_label="${1}" + cow_backing="/${pers_label}-backing" + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop); do + for dev in $(subdevices "${sysblock}"); do + devname=$(sys2dev "${dev}") + if [ "$(/lib/udev/vol_id -l $devname 2>/dev/null)" = "${pers_label}" ]; then + echo "$devname" + return + elif [ "$(get_fstype ${devname})" = "vfat" ]; then + mkdir -p "${cow_backing}" + if where_is_mounted ${devname} > /dev/null; then + mount -o remount,rw ${devname} $(where_is_mounted ${devname}) || panic "Remounting failed" + mount -o bind $(where_is_mounted ${devname}) ${cow_backing} || panic "Cannot bind-mount" + else + mount -t $(get_fstype "${devname}") -o rw "${devname}" ${cow_backing} || panic "Cannot mount $devname on /cow-backing" + fi + + if [ -e "${cow_backing}/${pers_label}" ]; then + echo $(setup_loop "${cow_backing}/${pers_label}" "loop" "/sys/block/loop*") + return 0 + else + umount ${cow_backing} + fi + fi + done + done +} + +do_netmount() { + rofsmnt="$1" + # adapted from NFS filesystem mounting + + modprobe -q cifs + # For DHCP + modprobe -q af_packet + + ipconfig ${DEVICE} /tmp/net-${DEVICE}.conf + if [ "x${NFSROOT}" = "xauto" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + fi + + NFSOPTS="-ouser=root,password=" + + [ "$quiet" != "y" ] && log_begin_msg "Mounting using mount.cifs with ${NFSROOT} ${rofsmnt} ${NFSOPTS}" + mount.cifs "${NFSROOT}" "${rofsmnt}" "${NFSOPTS}" + [ "$quiet" != "y" ] && log_end_msg +} + +setup_unionfs() { + backdev="$1" + rootmnt="$2" + modprobe -qb unionfs + mkdir -p /cow + cowdevice="tmpfs" + cow_fstype="tmpfs" + # Looking for "${root_persistence}" device or file + if grep -q persistent /proc/cmdline; then + cowprobe=$(find_cow_device "${root_persistence}") + if [ -b "${cowprobe}" ]; then + cowdevice=${cowprobe} + cow_fstype=$(get_fstype "${cowprobe}") + else + [ "$quiet" != "y" ] && log_begin_msg "Unable to find the persistent medium" + fi + fi + + mount ${cowdevice} -t ${cow_fstype} -o rw /cow || panic "Can not mount $cowdevice on /cow" + + mkdir -p /rofs + if grep -q netboot /proc/cmdline; then + do_netmount /rofs || panic "Can not mount netroot on /rofs" + else + if [ "$(get_fstype $backdev)" = "unknown" ]; then + panic "Unknown file system type on $backdev" + fi + mount -t $(get_fstype "$backdev") -o ro "$backdev" /rofs || panic "Can not mount $backdev on /rofs" + fi + + mount -t unionfs -o dirs=/cow=rw:/rofs=ro unionfs "$rootmnt" + if grep -q show-cow /proc/cmdline; then + mkdir -p "$rootmnt/cow" + mount -o bind /cow "$rootmnt/cow" + fi + mkdir -p "$rootmnt/rofs" + mount -o bind /rofs "$rootmnt/rofs" + + # Adding home persitence + if grep -q homepersistence /proc/cmdline; then + homecow=$(find_cow_device "${home_persistence}" ) + if [ -b "${homecow}" ]; then + mount ${homecow} -t $(get_fstype "${homecow}") -o rw "${rootmnt}/home" + else + [ "$quiet" != "y" ] && log_begin_msg "Unable to find the persistent home medium" + fi + fi +} + +is_usb_device() { + sysfs_path="${1#/sys}" + if /lib/udev/path_id "${sysfs_path}" | grep -q "ID_PATH=usb"; then + return 0 + fi + return 1 +} + +find_live() { + mounted= + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram); do + devname=$(sys2dev "${sysblock}") + fstype=$(get_fstype "${devname}") + if /lib/udev/cdrom_id ${devname} > /dev/null; then + mount -t ${fstype} -o ro "$devname" $mountpoint || continue + if casper_path $mountpoint; then + echo $(casper_path $mountpoint) + return + else + umount $mountpoint + fi + elif is_usb_device "$sysblock"; then + for dev in $(subdevices "${sysblock}"); do + devname=$(sys2dev "${dev}") + fstype=$(get_fstype "${devname}") + case ${fstype} in + vfat|iso9660|udf) + mount -t ${fstype} -o ro "${devname}" $mountpoint || continue + if casper_path $mountpoint; then + echo $(casper_path $mountpoint) + return + else + umount $mountpoint + fi + ;; + esac + done + elif [ "${fstype}" = "squashfs" ]; then + + # This is an ugly hack situation, the block device has + # a squashfs image directly on it. It's hopefully + # casper, so take it and run with it. + + ln -s "${devname}" "${devname}.${fstype}" + echo "${devname}.${fstype}" + return + fi + done +} + +set_usplash_timeout() { + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TIMEOUT 120" + fi +} + +mountroot() { + exec 6>&1 + exec 7>&2 + exec > casper.log + exec 2>&1 + + set_usplash_timeout + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-premount" + run_scripts /scripts/casper-premount + [ "$quiet" != "y" ] && log_end_msg + + # Needed here too because some things (*cough* udev *cough*) + # changes the timeout + + set_usplash_timeout + + for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13; do + live_image=$(find_live) + if [ "${live_image}" ]; then + break + fi + sleep 1 + done + if [ "$?" -gt 0 ]; then + panic "Unable to find a medium containing a live file system" + fi + + if grep -q toram /proc/cmdline; then + copy_to_ram + fi + + setup_cow "$overlay_method" "$(get_backing_device $live_image)" "$rootmnt" + + # show it on new rootfs + mkdir ${rootmnt}/${mountpoint} + mount -o bind ${mountpoint} ${rootmnt}/${mountpoint} + + log_end_msg + + maybe_break casper-bottom + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-bottom" + + PATH=/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:$PATH run_scripts /scripts/casper-bottom + [ "$quiet" != "y" ] && log_end_msg + + exec 1>&6 6>&- + exec 2>&7 7>&- + cp casper.log "${rootmnt}/var/log/" +} diff --git a/scripts/casper-bottom/01integrity_check b/scripts/casper-bottom/01integrity_check new file mode 100755 index 0000000..8c8e153 --- /dev/null +++ b/scripts/casper-bottom/01integrity_check @@ -0,0 +1,18 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +grep integrity-check /proc/cmdline && casper-md5check /live_media /live_media/md5sum.txt < /dev/tty8 diff --git a/scripts/casper-bottom/05mountpoints b/scripts/casper-bottom/05mountpoints new file mode 100755 index 0000000..ca8845a --- /dev/null +++ b/scripts/casper-bottom/05mountpoints @@ -0,0 +1,27 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Moving mount points..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +# Move to the new root filesystem so that programs there can get at it. +mkdir -p /root/cdrom +mount -n -o move /cdrom /root/cdrom + +log_end_msg diff --git a/scripts/casper-bottom/10adduser b/scripts/casper-bottom/10adduser new file mode 100755 index 0000000..dc8aaa8 --- /dev/null +++ b/scripts/casper-bottom/10adduser @@ -0,0 +1,66 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Adding live CD user..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +chroot /root debconf-communicate -fnoninteractive casper > /dev/null <<EOF +set passwd/root-password-crypted * +set passwd/user-password-crypted U6aMy0wojraho +set passwd/user-fullname $USERFULLNAME +set passwd/username $USERNAME +set passwd/user-uid 999 +EOF + +chroot /root /usr/bin/env -i HOME="/root" \ + TERM="${TERM}" PATH="/usr/sbin:/usr/bin:/sbin:/bin" \ + /usr/lib/user-setup/user-setup-apply > /dev/null + +# Clear out debconf database again to avoid confusing ubiquity later. +chroot /root debconf-communicate -fnoninteractive casper > /dev/null <<EOF +set passwd/root-password-crypted +set passwd/user-password-crypted +set passwd/user-fullname +set passwd/username +set passwd/user-uid +EOF + +if [ -f /root/etc/sudoers ]; then + if [ -x /sbin/udevplug ]; then + # FIXME: ugly hack, admin is not present in debian so we do here ubuntu stuff + # XXX - awful hack to stop xscreensaver locking the screen (#7150) + echo 'RUNNING_UNDER_GDM="yes"' >> /root/etc/environment + grep -q '^%admin' /root/etc/sudoers && sed -i -e '/^%admin/s/ALL$/NOPASSWD: ALL/' /root/etc/sudoers || echo '%admin ALL=(ALL) NOPASSWD: ALL' >> /root/etc/sudoers + for file in /usr/share/applications/ubiquity-gtkui.desktop /usr/share/applications/kde/ubiquity-kdeui.desktop; do + if [ -f "/root/$file" ]; then + chroot /root install -D -o $USERNAME -g $USERNAME $file /home/$USERNAME/Desktop/$(basename "$file") + break + fi + done + else # We are in debian :-) + echo "${USERNAME} ALL=(ALL) NOPASSWD: ALL" >> /root/etc/sudoers + fi +fi + +if [ -L /root/home/$USERNAME/Examples ]; then + chroot /root install -o $USERNAME -g $USERNAME -d /home/$USERNAME/Desktop/ + mv /root/home/$USERNAME/Examples /root/home/$USERNAME/Desktop/ +fi + +log_end_msg diff --git a/scripts/casper-bottom/12fstab b/scripts/casper-bottom/12fstab new file mode 100755 index 0000000..00e5c50 --- /dev/null +++ b/scripts/casper-bottom/12fstab @@ -0,0 +1,31 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Configuring fstab..." +FSTAB=/root/etc/fstab + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +cat > $FSTAB <<EOF +unionfs / unionfs rw 0 0 +tmpfs /tmp tmpfs nosuid,nodev 0 0 +EOF + +rm -f /root/etc/rcS.d/S10checkroot.sh + +log_end_msg diff --git a/scripts/casper-bottom/13swap b/scripts/casper-bottom/13swap new file mode 100755 index 0000000..44d73f3 --- /dev/null +++ b/scripts/casper-bottom/13swap @@ -0,0 +1,44 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Setting up swap..." +FSTAB=/root/etc/fstab + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +devices="" +for device in /dev/[hs]d[a-z][0-9]*; do + if ! [ -b "$device" ]; then + continue + fi + + magic=$(dd if="$device" bs=4086 skip=1 count=1 2>/dev/null | dd bs=10 count=1 2>/dev/null) || continue + + if [ "$magic" = "SWAPSPACE2" -o "$magic" = "SWAP-SPACE" ]; then +# log "Found $device" + devices="$devices $device" + fi +done + +for device in $devices; do + cat >> $FSTAB <<EOF +$device swap swap defaults 0 0 +EOF +done + +log_end_msg diff --git a/scripts/casper-bottom/14locales b/scripts/casper-bottom/14locales new file mode 100755 index 0000000..6d5b73c --- /dev/null +++ b/scripts/casper-bottom/14locales @@ -0,0 +1,52 @@ +#! /bin/sh + +PREREQ="" +DESCRIPTION="Setting up locales..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +if [ -e /root/etc/default/locale ]; then + grep_file=/root/etc/default/locale + locale=$(grep 'LANG=' ${grep_file} | sed s/'LANG='// | tr -d '"' ) +elif [ -e /root/etc/environment ]; then # Old locales policy + grep_file=/root/etc/environment +fi + +# commandline +for x in $(cat /proc/cmdline); do + case $x in + debian-installer/locale=*) + locale=${x#debian-installer/locale=} + set_locale="true" + ;; + esac +done + +if [ -z "${locale}" ]; then + # Set a default one + locale=en_US.UTF-8 + set_locale="true" +fi + +if [ ! -z "${set_locale}" ]; then + LANG=$(grep "^${locale}" /root/usr/share/i18n/SUPPORTED | grep UTF-8 |sed -e 's, .*,,' -e q) + printf 'LANG="%s"\n' "${LANG}" >> "${grep_file}" + chroot /root /usr/sbin/locale-gen "${LANG}" +fi + +log_end_msg diff --git a/scripts/casper-bottom/15autologin b/scripts/casper-bottom/15autologin new file mode 100755 index 0000000..5f7797a --- /dev/null +++ b/scripts/casper-bottom/15autologin @@ -0,0 +1,62 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Setting up automatic login..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +if chroot /root [ -f /etc/gdm/gdm-cdd.conf ]; then + GDMCONF=/etc/gdm/gdm-cdd.conf +else + GDMCONF=/etc/gdm/gdm.conf +fi + +if chroot /root [ -f ${GDMCONF} ]; then + # Configure GDM autologin + chroot /root sed -i \ + -e "s/^AutomaticLoginEnable=.*\$/AutomaticLoginEnable=true/" \ + -e "s/^AutomaticLogin=.*\$/AutomaticLogin=$USERNAME/" \ + -e "s/^TimedLoginEnable=.*\$/TimedLoginEnable=true/" \ + -e "s/^TimedLogin=.*\$/TimedLogin=$USERNAME/" \ + -e "s/^TimedLoginDelay=.*\$/TimedLoginDelay=10/" \ + ${GDMCONF} +fi + +if [ -f /root/etc/kde3/kdm/kdmrc ]; then + # Configure KDM autologin + sed -i -r \ + -e "s/^#?AutoLoginEnable=.*\$/AutoLoginEnable=true/" \ + -e "s/^#?AutoLoginUser=.*\$/AutoLoginUser=$USERNAME/" \ + -e "s/^#?AutoReLogin=.*\$/AutoReLogin=true/" \ + /root/etc/kde3/kdm/kdmrc +fi + +if chroot /root /usr/bin/which kpersonalizer >/dev/null; then + # Disable first-login wizard for KDE + if [ ! -f /root/etc/kde3/kpersonalizerrc ]; then + cat > /root/etc/kde3/kpersonalizerrc <<EOF +[General] +FirstLogin=false +EOF + else + echo "I'm not smart enough to disable kpersonalizer startup" >&2 + echo "Because kpersonalizerrc already exists" >&2 + fi +fi + +log_end_msg diff --git a/scripts/casper-bottom/18hostname b/scripts/casper-bottom/18hostname new file mode 100755 index 0000000..7ac5b00 --- /dev/null +++ b/scripts/casper-bottom/18hostname @@ -0,0 +1,38 @@ +#! /bin/sh + +PREREQ="" +DESCRIPTION="Setting hostname..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +echo "$HOST" > /root/etc/hostname +cat > /root/etc/hosts <<EOF +127.0.0.1 localhost +127.0.1.1 $HOST + +# The following lines are desirable for IPv6 capable hosts +::1 ip6-localhost ip6-loopback +fe00::0 ip6-localnet +ff00::0 ip6-mcastprefix +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters +ff02::3 ip6-allhosts + +EOF + +log_end_msg diff --git a/scripts/casper-bottom/19keyboard b/scripts/casper-bottom/19keyboard new file mode 100755 index 0000000..895a698 --- /dev/null +++ b/scripts/casper-bottom/19keyboard @@ -0,0 +1,35 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Setting up keyboard..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +kbd=us + +for x in $(cat /proc/cmdline); do + case $x in + kbd-chooser/method=*) + kbd=${x#kbd-chooser/method=} + ;; + esac +done + +chroot /root /usr/sbin/install-keymap $kbd +casper-preseed /root debian-installer/keymap "$kbd" +log_end_msg diff --git a/scripts/casper-bottom/20xconfig b/scripts/casper-bottom/20xconfig new file mode 100755 index 0000000..840200d --- /dev/null +++ b/scripts/casper-bottom/20xconfig @@ -0,0 +1,51 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Configuring X..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +if [ "$TERM_TYPE" = "serial" ]; then + # Don't bother trying to configure or start X on a serial console + rm -f /etc/rc?.d/S??[gxk]dm + exit 0 +fi + +locale=en_US.UTF-8 + +for x in $(cat /proc/cmdline); do + case $x in + debian-installer/locale=*) + locale=${x#debian-installer/locale=} + ;; + esac +done + +mount -n -o bind /sys /root/sys +mount -n -o bind /proc /root/proc + +chroot /root debconf-communicate -fnoninteractive casper > /dev/null <<EOF +set xserver-xorg/autodetect_keyboard true +fset xserver-xorg/autodetect_keyboard seen true +EOF + +DEBUG_XORG_PACKAGE=1 DEBUG_XORG_DEBCONF=1 LANG=$(grep "^${locale}" /root/usr/share/i18n/SUPPORTED | grep UTF-8 | sed -e 's, .*,,' -e q) casper-reconfigure /root xserver-xorg +umount /root/sys +umount /root/proc + +log_end_msg diff --git a/scripts/casper-bottom/22gnome_panel_data b/scripts/casper-bottom/22gnome_panel_data new file mode 100755 index 0000000..7bedd7a --- /dev/null +++ b/scripts/casper-bottom/22gnome_panel_data @@ -0,0 +1,34 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Configuring gnome-panel-data..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +if [ -x /root/usr/sbin/laptop-detect ]; then + if chroot /root /bin/sh -c /usr/sbin/laptop-detect; then + casper-reconfigure /root gnome-panel-data + fi +fi + +panel_version=$(chroot /root /usr/bin/dpkg-query -W --showformat='${Version}' gnome-panel-data 2>/dev/null) || panel_version="" +if [ -n "$panel_version" ]; then + chroot /root su $USERNAME -- gconftool-2 -s -t bool /apps/panel/global/disable_lock_screen true +fi + +log_end_msg diff --git a/scripts/casper-bottom/22screensaver b/scripts/casper-bottom/22screensaver new file mode 100755 index 0000000..2a98b1a --- /dev/null +++ b/scripts/casper-bottom/22screensaver @@ -0,0 +1,28 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Configuring screensaver..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +gnome_screensaver_version=$(chroot /root dpkg-query -W --showformat='${Version}' gnome-screensaver 2>/dev/null) || gnome_screensaver_version="" +if [ -n "$gnome_screensaver_version" ]; then + chroot /root su $USERNAME -- gconftool-2 -t bool -s /apps/gnome-screensaver/lock false +fi + +log_end_msg diff --git a/scripts/casper-bottom/23etc_modules b/scripts/casper-bottom/23etc_modules new file mode 100755 index 0000000..622d96e --- /dev/null +++ b/scripts/casper-bottom/23etc_modules @@ -0,0 +1,30 @@ +#! /bin/sh + +PREREQ="" +DESCRIPTION="Preconfiguring /etc/modules..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +case "$DPKG_ARCH" in +# load the right modules +powerpc|ppc64) + echo snd_powermac >> /root/etc/modules + ;; +esac + +log_end_msg diff --git a/scripts/casper-bottom/23networking b/scripts/casper-bottom/23networking new file mode 100755 index 0000000..7238773 --- /dev/null +++ b/scripts/casper-bottom/23networking @@ -0,0 +1,55 @@ +#! /bin/sh + +PREREQ="" +DESCRIPTION="Preconfiguring networking..." +IFFILE="/root/etc/network/interfaces" + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +cat > "$IFFILE" <<EOF +auto lo +iface lo inet loopback + +EOF + +if [ -x /sbin/udevplug ]; then + udevplug -Bpci -Iclass="0x02*" +else + udevtrigger +fi + +for interface in /sys/class/net/eth* /sys/class/net/ath* /sys/class/net/wlan*; do + [ -e $interface ] || continue + i="$(basename $interface)" + cat >> "$IFFILE" <<EOF +auto $i +iface $i inet dhcp + +EOF +done + +for i in eth0 eth1 eth2 ath0 wlan0; do + [ ! -e /sys/class/net/$i ] || continue + cat >> "$IFFILE" <<EOF +auto $i +iface $i inet dhcp + +EOF +done + +log_end_msg diff --git a/scripts/casper-bottom/24preseed b/scripts/casper-bottom/24preseed new file mode 100755 index 0000000..468ec2e --- /dev/null +++ b/scripts/casper-bottom/24preseed @@ -0,0 +1,43 @@ +#! /bin/sh + +PREREQ="" +DESCRIPTION="Loading preseed file..." + +. /scripts/functions + +prereqs () +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +location= +for x in $(cat /proc/cmdline); do + case $x in + preseed/file=*) + location="${x#preseed/file=}" + ;; + */*=*) + question="${x%%=*}" + value="${x#*=}" + casper-preseed /root "$question" "$value" + ;; + esac +done + +if [ "$location" ]; then + chroot /root debconf-set-selections < "/root$location" +fi + +log_end_msg + +exit 0 diff --git a/scripts/casper-bottom/25configure_init b/scripts/casper-bottom/25configure_init new file mode 100755 index 0000000..0c5c43e --- /dev/null +++ b/scripts/casper-bottom/25configure_init @@ -0,0 +1,51 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Setting up init..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +# Arrange for shells on virtual consoles, rather than login prompts + +if [ -n "$USERNAME" ]; then + sed -i -e "s|^\([^:]*:[^:]*:[^:]*\):.*getty.*\<\(tty[0-9]*\).*$|\1:/bin/login -f $USERNAME </dev/\2 >/dev/\2 2>\&1|" /root/etc/inittab +fi + +# This has the nice side effect of the cron.{daily,weekly,monthly} jobs in +# /etc/crontab remaining disabled, yet also not run by anacron +if [ -x /root/etc/init.d/anacron ]; then + for f in /root/etc/rc?.d/S??anacron; do + mv ${f} $(dirname ${f})/K00anacron + done +fi + +# No point, really +rm -f /root/etc/rc?.d/[SK]??postfix + +# Avoid clobbering the user's clock +rm -f /root/etc/rc?.d/K??hwclock.sh + +# Disable readahead since it doesn't play well with squashfs + unionfs +# use chmod instead of mv to not trigger unionfs bugs. +if [ -e /root/sbin/readahead-list ]; then + chmod -x /root/sbin/readahead-list +fi + +log_end_msg + +exit 0 diff --git a/scripts/casper-bottom/30accessibility b/scripts/casper-bottom/30accessibility new file mode 100755 index 0000000..c6015e1 --- /dev/null +++ b/scripts/casper-bottom/30accessibility @@ -0,0 +1,81 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Configuring accessibility options..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +gct() { + chroot /root su $USERNAME -- gconftool-2 "$@" +} + +for x in $(cat /proc/cmdline); do + case $x in + # Lesser Visual Impairment + access=v1) + gct -s -t string /desktop/gnome/interface/gtk_theme HighContrastLargePrint + gct -s -t string /desktop/gnome/interface/icon_theme HighContrast + gct -s -t string /desktop/gnome/interface/monospace_font_name "monospace 18" + gct -s -t string /desktop/gnome/interface/font_name "sans 18" + gct -s -t string /apps/metacity/general/theme Atlanta + gct -s -t string /desktop/gnome/background/picture_filename "" + gct -s -t string /desktop/gnome/background/picture_options none + gct "-s -t string /desktop/gnome/background/primary_color \#666666" + gct "-s -t string /desktop/gnome/background/secondary_color \#7F7F7F" + gct -s -t string /desktop/gnome/background/color_shading_type solid + gct -s -t int /desktop/gnome/peripherals/mouse/cursor_size 48 + gct -s -t string /desktop/gnome/peripherals/mouse/cursor_theme whiteglass + ;; + # Moderate Visual Impairment + access=v2) + gct -s -t bool /desktop/gnome/interface/accessibility true + gct -s -t list --list-type=string /desktop/gnome/accessibility/startup/exec_ats [gnopernicus] + gct -s -t bool /apps/gnopernicus/srcore/mag_active true + gct -s -t bool /apps/gnopernicus/srcore/sp_active false + ;; + # Blindness + access=v3) + gct -s -t bool /desktop/gnome/sound/enable_esd false + gct -s -t bool /desktop/gnome/interface/accessibility true + gct -s -t list --list-type=string /desktop/gnome/accessibility/startup/exec_ats [gnopernicus] + gct -s -t bool /apps/gnopernicus/srcore/sp_active true + gct -s -t bool /apps/gnopernicus/srcore/mag_active false + ;; + # Minor Motor Difficulties + access=m1) + gct -s -t bool /desktop/gnome/accessibility/keyboard/enable true + gct -s -t bool /desktop/gnome/accessibility/keyboard/mousekeys_enable true + gct -s -t bool /desktop/gnome/accessibility/keyboard/stickykeys_enable true + gct -s -t bool /desktop/gnome/accessibility/keyboard/stickykeys_modifier_beep true + gct -s -t bool /desktop/accessibility/gnome/keyboard/stickykeys_two_key_off false + gct -s -t bool /desktop/gnome/peripherals/keyboard/repeat true + gct -s -t int /desktop/gnome/peripherals/keyboard/delay 700 + gct -s -t int /desktop/gnome/peripherals/keyboard/rate 10 + ;; + # Motor Difficulties - pointing devices + access=m2) + gct -s -t bool /desktop/gnome/accessibility/keyboard/enable true + gct -s -t bool /desktop/gnome/accessibility/keyboard/stickykeys_enable true + gct -s -t bool /desktop/gnome/accessibility/keyboard/stickykeys_modifier_beep false + gct -s -t bool /desktop/accessibility/gnome/keyboard/stickykeys_two_key_off false + gct -s -t bool /desktop/gnome/interface/accessibility true + gct -s -t list --list-type=string /desktop/gnome/accessibility/startup/exec_ats gok + ;; + esac +done +log_end_msg diff --git a/scripts/casper-bottom/31disable_update_notifier b/scripts/casper-bottom/31disable_update_notifier new file mode 100755 index 0000000..082b818 --- /dev/null +++ b/scripts/casper-bottom/31disable_update_notifier @@ -0,0 +1,26 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Disabling update-notifier..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +rm -f /root/etc/xdg/autostart/update-notifier.desktop +rm -f /root/usr/share/autostart/adept_notifier_auto.desktop + +log_end_msg diff --git a/scripts/casper-bottom/32disable_hibernation b/scripts/casper-bottom/32disable_hibernation new file mode 100755 index 0000000..7b7d976 --- /dev/null +++ b/scripts/casper-bottom/32disable_hibernation @@ -0,0 +1,35 @@ +#!/bin/sh + +PREREQ="" +DESCRIPTION="Configuring power management..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + + +gpm_version=$(chroot /root /usr/bin/dpkg-query -W --showformat='${Version}' gnome-power-manager 2>/dev/null) || panel_version="" +if [ -n "$gpm_version" ]; then + casper-reconfigure /root gnome-power-manager + chroot /root su $USERNAME -- gconftool-2 -s -t bool /apps/gnome-power-manager/can_hibernate false +fi + +if [ -f /root/usr/share/kubuntu-default-settings/kde-profile/default/share/config/kcmlaptoprc ]; then + sed -i s/EnableHibernate=true/EnableHibernate=false/ \ + /root/usr/share/kubuntu-default-settings/kde-profile/default/share/config/kcmlaptoprc +fi + +log_end_msg diff --git a/scripts/casper-bottom/33disable_binary_drivers b/scripts/casper-bottom/33disable_binary_drivers new file mode 100755 index 0000000..4e4fec3 --- /dev/null +++ b/scripts/casper-bottom/33disable_binary_drivers @@ -0,0 +1,25 @@ +#! /bin/sh + +PREREQ="" +DESCRIPTION="Configuring some drivers..." + +. /scripts/functions + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +log_begin_msg "$DESCRIPTION" + +if [ -e /root/etc/default/linux-restricted-modules-common ]; then + echo 'DISABLED_MODULES="fglrx nv"' >> /root/etc/default/linux-restricted-modules-common +fi |
