From: Daniel Baumann Date: Sun, 23 Sep 2007 12:46:23 +0000 (+0200) Subject: Adding casper 1.63+debian-1. X-Git-Tag: debian/1.63+debian-1^0 X-Git-Url: http://git.grml.org/?p=live-boot-grml.git;a=commitdiff_plain;h=9a7f83110cfb153d853f5d074968a661121d4e07 Adding casper 1.63+debian-1. --- diff --git a/bin/casper-reconfigure b/bin/casper-reconfigure index 51f999b..628bff3 100755 --- a/bin/casper-reconfigure +++ b/bin/casper-reconfigure @@ -47,6 +47,6 @@ if [ -z "$version" ]; then exit 0 fi -runcommandinroot "$root" dpkg-reconfigure -fnoninteractive --no-reload "$package" +runcommandinroot "$root" dpkg-reconfigure -fnoninteractive --no-reload -phigh "$package" exit 0 diff --git a/casper-md5check/Makefile b/casper-md5check/Makefile index 193ac69..4e5408f 100644 --- a/casper-md5check/Makefile +++ b/casper-md5check/Makefile @@ -6,4 +6,4 @@ CFLAGS=$(getconf LFS_CFLAGS) -Wall -O2 casper-md5check: casper-md5check.c md5.c clean: - rm *.o casper-md5check + rm -f *.o casper-md5check diff --git a/casper.conf b/casper.conf index 6b16149..1596dff 100644 --- a/casper.conf +++ b/casper.conf @@ -1,9 +1,8 @@ -# This file should go in -# conf/conf.d/ +# This file should go in /etc/casper.conf # Supported variables are: # USERNAME, USERFULLNAME, HOST -export USERNAME="ubuntu" -export USERFULLNAME="Custom LiveCD user" -export HOST="ubuntu" +export USERNAME="casper" +export USERFULLNAME="Live session user" +export HOST="live" diff --git a/debian/changelog b/debian/changelog index be7286b..62a5d3a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,24 @@ +casper (1.63+debian-1) unstable; urgency=low + + [Marco Amadori] + * New upstream release. + * Fixed upstream changelog. + * Really fixed the user password issue, now really "debian". + * Reincluded casper-md5ckeck in debian/rules and 05mountpoints in + script/casper-bottom. + * Rewrote netboot support now will support all types of rootfs file images + (not only plain dirs) like cd/dvd one. + * Included a fix for USB by Davide Natalini + * Included support for plain directory as RO rootfs. + * Removed xfs support (not implemented in make-live, maybe useless). + + [Alex Owen] + * Added NFS netboot support (Closes: #380506). + * Fixed /etc/inittab editing (Closes: #380488). + * Do not try to eject cd if netbooted (Closes: #380502). + + -- Marco Amadori Sun, 30 Jul 2006 19:10:23 +0200 + casper (1.61+debian-2) unstable; urgency=low * Set password for user to 'debian'. diff --git a/debian/changelog.upstream b/debian/changelog.upstream index f979257..5385ac0 100644 --- a/debian/changelog.upstream +++ b/debian/changelog.upstream @@ -1,3 +1,32 @@ +casper (1.63) edgy; urgency=low + + [ Tollef Fog Heen ] + * Change "Live CD user" to "live session user" in the adduser script. + Malone #46882 + * Only disable l-r-m and anacron if they are installed. + * Make sure laptop-detect is installed before trying to call it. + * Do not install init script from the initramfs any more. It should + have rc.d links already in the squashfs. + * Minor build system fixes. + * Remove ubuntu-specific branding from the default casper. + * Install default configuration file and make it end up in the + initramfs. + terms. + * Add stacked file system support + + [ Marco Amadori ] + * Added possibility to set locale on chroot, not only at runtime. + * Updated 14locales to latest debian policy. + * Wait for persistent devices for 30 seconds, not 1500. + * Make sure that readahead-list is installed before chmod -x'ing it. + * Only copy devmapper relevant files if devmapper is installed. + * Get rid of CD references and replace with medium or other appropriate. + + [ Malcolm Gilles ] + * USB devices can have ID_PATH with pci-*-usb, too. + + -- Tollef Fog Heen Tue, 18 Jul 2006 10:20:51 +0200 + casper (1.61) edgy; urgency=low * Move PATH setting to top of casper script to avoid silliness where diff --git a/debian/control b/debian/control index 0012c86..171d184 100644 --- a/debian/control +++ b/debian/control @@ -1,5 +1,5 @@ Source: casper -Section: admin +Section: misc Priority: optional Maintainer: Marco Amadori Uploaders: Daniel Baumann diff --git a/debian/dirs b/debian/dirs index 276a2b3..bb225f1 100644 --- a/debian/dirs +++ b/debian/dirs @@ -1,3 +1,4 @@ +/etc /usr/lib/casper /usr/share/initramfs-tools/hooks /usr/share/initramfs-tools/scripts diff --git a/debian/init.d b/debian/init.d index 6d2d6d3..bed1b89 100644 --- a/debian/init.d +++ b/debian/init.d @@ -25,10 +25,10 @@ for path in $(which halt) $(which reboot) /etc/rc?.d /etc/default; do cache_path "$path" done -eject -p -m /cdrom >/dev/null 2>&1 +eject -p -m /live_media >/dev/null 2>&1 # XXX - i18n -echo -n "Please remove the disc, close the tray (if any) and press ENTER: " +echo -n "Please remove the disc (if any), close the tray (if any) and press ENTER: " if [ -x /sbin/usplash_write ]; then /sbin/usplash_write "TIMEOUT 0" /sbin/usplash_write "TEXT Please remove the disc, close the tray (if any)" diff --git a/debian/install b/debian/install index 3253fd7..2909dff 100644 --- a/debian/install +++ b/debian/install @@ -1,5 +1,4 @@ -bin/casper-preseed /usr/share/casper bin/casper-reconfigure /usr/share/casper -casper-md5check/casper-md5check /usr/lib/casper +bin/casper-preseed /usr/share/casper hooks /usr/share/initramfs-tools scripts /usr/share/initramfs-tools diff --git a/debian/patches/00list b/debian/patches/00list deleted file mode 100644 index 4997088..0000000 --- a/debian/patches/00list +++ /dev/null @@ -1 +0,0 @@ -01-conglomeration diff --git a/debian/patches/01-conglomeration.dpatch b/debian/patches/01-conglomeration.dpatch deleted file mode 100644 index 11c0f8c..0000000 --- a/debian/patches/01-conglomeration.dpatch +++ /dev/null @@ -1,593 +0,0 @@ -#!/bin/sh /usr/share/dpatch/dpatch-run -## 01-conglomeration.dpatch -## -## DP: Needs to be broken out. - -@DPATCH@ - -diff -Naur casper-1.61+debian.orig/bin/casper-reconfigure casper-1.61+debian/bin/casper-reconfigure ---- casper-1.61+debian.orig/bin/casper-reconfigure 2006-05-11 19:03:29.000000000 +0000 -+++ casper-1.61+debian/bin/casper-reconfigure 2006-07-19 18:54:36.000000000 +0000 -@@ -47,6 +47,6 @@ - exit 0 - fi - --runcommandinroot "$root" dpkg-reconfigure -fnoninteractive --no-reload "$package" -+runcommandinroot "$root" dpkg-reconfigure -fnoninteractive --no-reload -phigh "$package" - - exit 0 -diff -Naur casper-1.61+debian.orig/casper.conf casper-1.61+debian/casper.conf ---- casper-1.61+debian.orig/casper.conf 2006-05-02 12:16:55.000000000 +0000 -+++ casper-1.61+debian/casper.conf 2006-07-19 18:54:36.000000000 +0000 -@@ -3,7 +3,7 @@ - # Supported variables are: - # USERNAME, USERFULLNAME, HOST - --export USERNAME="ubuntu" --export USERFULLNAME="Custom LiveCD user" --export HOST="ubuntu" -+export USERNAME="debian" -+export USERFULLNAME="Debian Live user" -+export HOST="debian" - -diff -Naur casper-1.61+debian.orig/hooks/casper casper-1.61+debian/hooks/casper ---- casper-1.61+debian.orig/hooks/casper 2006-06-15 09:04:08.000000000 +0000 -+++ casper-1.61+debian/hooks/casper 2006-07-19 18:54:36.000000000 +0000 -@@ -18,10 +18,17 @@ - - . /usr/share/initramfs-tools/hook-functions - --# cloop is needed --manual_add_modules cloop -+ - manual_add_modules unionfs - -+# Needed for devmapper -+if [ -e /sbin/dmsetup ]; then -+ manual_add_modules cloop -+ copy_exec /sbin/blockdev /sbin -+ copy_exec /sbin/dmsetup /sbin -+ manual_add_modules dm-snapshot -+fi -+ - # We need losetup - copy_exec /sbin/losetup /sbin - -@@ -30,16 +37,25 @@ - copy_exec /usr/share/casper/casper-reconfigure /bin - copy_exec /usr/share/casper/casper-preseed /bin - --mkdir -p ${DESTDIR}/lib/udev --copy_exec /lib/udev/cdrom_id /lib/udev --copy_exec /lib/udev/vol_id /lib/udev --copy_exec /lib/udev/path_id /lib/udev -+# Ubuntu or Debian test -+if [ -x /sbin/udevplug ]; then -+ mkdir -p ${DESTDIR}/lib/udev -+ copy_exec /lib/udev/cdrom_id /lib/udev -+ copy_exec /lib/udev/vol_id /lib/udev -+ copy_exec /lib/udev/path_id /lib/udev -+else -+ copy_exec /sbin/udevtrigger /sbin -+fi -+ - copy_exec /usr/bin/udevinfo /bin - --# Needed for devmapper --copy_exec /sbin/blockdev /sbin --copy_exec /sbin/dmsetup /sbin --manual_add_modules dm-snapshot -+# cifs boot -+if [ -x /sbin/mount.cifs ]; then -+ copy_exec /sbin/mount.cifs /sbin -+ for x in cifs; do -+ manual_add_modules ${x} -+ done -+fi - - # squashfs - manual_add_modules squashfs -diff -Naur casper-1.61+debian.orig/scripts/casper casper-1.61+debian/scripts/casper ---- casper-1.61+debian.orig/scripts/casper 2006-07-17 10:53:28.000000000 +0000 -+++ casper-1.61+debian/scripts/casper 2006-07-19 18:54:36.000000000 +0000 -@@ -4,7 +4,9 @@ - - export PATH=/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin - --mountpoint=/cdrom -+mountpoint=/live_media -+root_persistence="casper-rw" -+home_persistence="home-rw" - - mkdir -p $mountpoint - -@@ -13,15 +15,15 @@ - overlay_method=devmapper - fi - --USERNAME=ubuntu --USERFULLNAME="Ubuntu LiveCD user" --HOST=ubuntu -+USERNAME=debian -+USERFULLNAME="Debian Live user" -+HOST=debian - - [ -f /etc/casper.conf ] && . /etc/casper.conf - - export USERNAME USERFULLNAME HOST - --casper_path() { -+casper_path() { # Fixme: uglyness - path=$1 - if [ -e "$path/casper/filesystem.cloop" ]; then - echo "$path/casper/filesystem.cloop" -@@ -29,6 +31,12 @@ - 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 - } -@@ -49,7 +57,7 @@ - *.cloop) - echo $(setup_loop "$1" "cloop" "/sys/block/cloop*") - ;; -- *.squashfs) -+ *.squashfs|*.ext2|*.xfs) - echo $(setup_loop "$1" "loop" "/sys/block/loop*") - ;; - *) -@@ -78,8 +86,12 @@ - local module=$2 - local pattern=$3 - -- modprobe -Qb "$module" -- udevplug -W -+ 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 -@@ -107,7 +119,7 @@ - backdev="$1" - rootmnt="$2" - -- modprobe -Qb dm-mod -+ modprobe -qb dm-mod - COW_DEVICE=/dev/ram1 - COW_NAME="casper-cow" - -@@ -143,82 +155,137 @@ - return 1 - } - --find_cow_device() { -- 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)" = "casper-rw" ]; 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 -+copy_to_ram() { -+ copyto="${mountpoint}_swap" - -- if [ -e "/cow-backing/casper-rw" ]; then -- echo $(setup_loop "/cow-backing/casper-rw" "loop" "/sys/block/loop*") -- return 0 -- else -- umount /cow-backing -- fi -- fi -- -- done -- done -- return 1 -+ 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 -+ 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 - -- if grep -q persistent /proc/cmdline; then -- i=0 -- # We love udev and the kernel! -- while [ "$i" -lt 300 ]; do -- cowdevice=$(find_cow_device) -- if [ -b "$cowdevice" ]; then -- mount -t $(get_fstype "$cowdevice") -o rw "$cowdevice" /cow || panic "Can not mount $cowdevice on /cow" -- break -- fi -- sleep 5 --# sleep 0.1 -- i=$(( $i + 1 )) -- done -- else -- mount -t tmpfs tmpfs /cow -- fi -+ mount ${cowdevice} -t ${cow_fstype} -o rw /cow || panic "Can not mount $cowdevice on /cow" - - mkdir -p /rofs -- 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" -- -+ 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" -+ 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 -+ if /lib/udev/path_id "${sysfs_path}" | grep -q "ID_PATH=(usb|pci-[^-]*-usb)"; then - return 0 - fi - return 1 - } - --find_cd() { -+find_live() { - mounted= - for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram); do - devname=$(sys2dev "${sysblock}") -@@ -283,18 +350,26 @@ - 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_cd) -+ live_image=$(find_live) - if [ "${live_image}" ]; then - break - fi - sleep 1 - done - if [ "$?" -gt 0 ]; then -- panic "Unable to find a CD-ROM containing a live file system" -+ 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 -diff -Naur casper-1.61+debian.orig/scripts/casper-bottom/01integrity_check casper-1.61+debian/scripts/casper-bottom/01integrity_check ---- casper-1.61+debian.orig/scripts/casper-bottom/01integrity_check 2006-04-21 14:08:09.000000000 +0000 -+++ casper-1.61+debian/scripts/casper-bottom/01integrity_check 2006-07-19 18:54:36.000000000 +0000 -@@ -15,4 +15,4 @@ - ;; - esac - --grep integrity-check /proc/cmdline && casper-md5check /cdrom /cdrom/md5sum.txt < /dev/tty8 -+grep integrity-check /proc/cmdline && casper-md5check /live_media /live_media/md5sum.txt < /dev/tty8 -diff -Naur casper-1.61+debian.orig/scripts/casper-bottom/10adduser casper-1.61+debian/scripts/casper-bottom/10adduser ---- casper-1.61+debian.orig/scripts/casper-bottom/10adduser 2006-05-11 11:35:21.000000000 +0000 -+++ casper-1.61+debian/scripts/casper-bottom/10adduser 2006-07-19 18:54:55.000000000 +0000 -@@ -22,13 +22,15 @@ - - chroot /root debconf-communicate -fnoninteractive casper > /dev/null < /dev/null -+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 <> /root/etc/sudoers --fi -- --# XXX - awful hack to stop xscreensaver locking the screen (#7150) --echo 'RUNNING_UNDER_GDM="yes"' >> /root/etc/environment -- --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 -+ 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 --done -+fi - - if [ -L /root/home/$USERNAME/Examples ]; then - chroot /root install -o $USERNAME -g $USERNAME -d /home/$USERNAME/Desktop/ -diff -Naur casper-1.61+debian.orig/scripts/casper-bottom/14locales casper-1.61+debian/scripts/casper-bottom/14locales ---- casper-1.61+debian.orig/scripts/casper-bottom/14locales 2006-05-16 10:45:27.000000000 +0000 -+++ casper-1.61+debian/scripts/casper-bottom/14locales 2006-07-19 18:54:36.000000000 +0000 -@@ -20,18 +20,33 @@ - - log_begin_msg "$DESCRIPTION" - --locale=en_US.UTF-8 -+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=} -- ;; -- esac -+ case $x in -+ debian-installer/locale=*) -+ locale=${x#debian-installer/locale=} -+ set_locale="true" -+ ;; -+ esac - done - --LANG=$(grep "^${locale}" /root/usr/share/i18n/SUPPORTED | grep UTF-8 |sed -e 's, .*,,' -e q) -+if [ -z "${locale}" ]; then -+ # Set a default one -+ locale=en_US.UTF-8 -+ set_locale="true" -+fi - --printf 'LANG="%s"\n' "${LANG}" >> /root/etc/environment --chroot /root /usr/sbin/locale-gen "${LANG}" -+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 -Naur casper-1.61+debian.orig/scripts/casper-bottom/15autologin casper-1.61+debian/scripts/casper-bottom/15autologin ---- casper-1.61+debian.orig/scripts/casper-bottom/15autologin 2006-05-11 10:06:07.000000000 +0000 -+++ casper-1.61+debian/scripts/casper-bottom/15autologin 2006-07-19 18:54:36.000000000 +0000 -@@ -27,6 +27,8 @@ - fi - - if chroot /root [ -f ${GDMCONF} ]; then -+ # true hack ! -- nohar -+ chroot /root cp /usr/share/gdm/defaults.conf /etc/gdm/gdm.conf - # Configure GDM autologin - chroot /root sed -i \ - -e "s/^AutomaticLoginEnable=.*\$/AutomaticLoginEnable=true/" \ -diff -Naur casper-1.61+debian.orig/scripts/casper-bottom/22gnome_panel_data casper-1.61+debian/scripts/casper-bottom/22gnome_panel_data ---- casper-1.61+debian.orig/scripts/casper-bottom/22gnome_panel_data 2006-05-11 10:05:55.000000000 +0000 -+++ casper-1.61+debian/scripts/casper-bottom/22gnome_panel_data 2006-07-19 18:54:36.000000000 +0000 -@@ -20,8 +20,10 @@ - - log_begin_msg "$DESCRIPTION" - --if chroot /root /bin/sh -c laptop-detect; then -- casper-reconfigure /root gnome-panel-data -+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="" -diff -Naur casper-1.61+debian.orig/scripts/casper-bottom/23networking casper-1.61+debian/scripts/casper-bottom/23networking ---- casper-1.61+debian.orig/scripts/casper-bottom/23networking 2006-05-11 10:05:11.000000000 +0000 -+++ casper-1.61+debian/scripts/casper-bottom/23networking 2006-07-19 18:54:36.000000000 +0000 -@@ -27,7 +27,11 @@ - - EOF - --udevplug -Bpci -Iclass="0x02*" -+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 -diff -Naur casper-1.61+debian.orig/scripts/casper-bottom/25configure_init casper-1.61+debian/scripts/casper-bottom/25configure_init ---- casper-1.61+debian.orig/scripts/casper-bottom/25configure_init 2006-06-15 09:08:14.000000000 +0000 -+++ casper-1.61+debian/scripts/casper-bottom/25configure_init 2006-07-19 18:54:36.000000000 +0000 -@@ -28,9 +28,11 @@ - - # This has the nice side effect of the cron.{daily,weekly,monthly} jobs in - # /etc/crontab remaining disabled, yet also not run by anacron --for f in /root/etc/rc?.d/S??anacron; do -- mv ${f} ${f%/*}/K00anacron --done -+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 -@@ -40,15 +42,8 @@ - - # Disable readahead since it doesn't play well with squashfs + unionfs - # use chmod instead of mv to not trigger unionfs bugs. --chmod -x /root/sbin/readahead-list -- --# Install shutdown script --cp -a /lib/casper/shutdown /root/etc/init.d/casper-shutdown --if [ -f /root/etc/rc0.d/S90halt ]; then -- ln -s ../init.d/casper-shutdown /root/etc/rc0.d/S89casper --fi --if [ -f /root/etc/rc6.d/S90reboot ]; then -- ln -s ../init.d/casper-shutdown /root/etc/rc6.d/S89casper -+if [ -e /root/sbin/readahead-list ]; then -+ chmod -x /root/sbin/readahead-list - fi - - log_end_msg -diff -Naur casper-1.61+debian.orig/scripts/casper-bottom/33disable_binary_drivers casper-1.61+debian/scripts/casper-bottom/33disable_binary_drivers ---- casper-1.61+debian.orig/scripts/casper-bottom/33disable_binary_drivers 2006-05-13 08:13:22.000000000 +0000 -+++ casper-1.61+debian/scripts/casper-bottom/33disable_binary_drivers 2006-07-19 18:54:36.000000000 +0000 -@@ -20,4 +20,6 @@ - - log_begin_msg "$DESCRIPTION" - --echo 'DISABLED_MODULES="fglrx nv"' >> /root/etc/default/linux-restricted-modules-common -+if [ -e /root/etc/default/linux-restricted-modules-common ]; then -+ echo 'DISABLED_MODULES="fglrx nv"' >> /root/etc/default/linux-restricted-modules-common -+fi diff --git a/debian/rules b/debian/rules index 53b9e33..c7fdbac 100755 --- a/debian/rules +++ b/debian/rules @@ -8,7 +8,7 @@ include /usr/share/dpatch/dpatch.make build: patch-stamp build-stamp build-stamp: dh_testdir - + # Building package $(MAKE) -C casper-md5check @@ -30,12 +30,15 @@ install: build dh_installdirs dh_install - # Installing lintian override - install -D -m 0644 debian/lintian debian/casper/usr/share/lintian/overrides/casper + # Install md5check + install -m 0755 casper-md5check/casper-md5check debian/casper/usr/lib/casper # Fixing permission chmod 0755 debian/casper/usr/share/initramfs-tools/scripts/casper + # Installing lintian override + install -D -m 0644 debian/lintian debian/casper/usr/share/lintian/overrides/casper + binary-indep: build install binary-arch: build install diff --git a/hooks/casper b/hooks/casper index 8779944..7229612 100755 --- a/hooks/casper +++ b/hooks/casper @@ -18,10 +18,17 @@ esac . /usr/share/initramfs-tools/hook-functions -# cloop is needed -manual_add_modules cloop + manual_add_modules unionfs +# Needed for devmapper +if [ -e /sbin/dmsetup ]; then + manual_add_modules cloop + copy_exec /sbin/blockdev /sbin + copy_exec /sbin/dmsetup /sbin + manual_add_modules dm-snapshot +fi + # We need losetup copy_exec /sbin/losetup /sbin @@ -30,16 +37,25 @@ mkdir -p ${DESTDIR}/lib/casper copy_exec /usr/share/casper/casper-reconfigure /bin copy_exec /usr/share/casper/casper-preseed /bin -mkdir -p ${DESTDIR}/lib/udev -copy_exec /lib/udev/cdrom_id /lib/udev -copy_exec /lib/udev/vol_id /lib/udev -copy_exec /lib/udev/path_id /lib/udev +# Ubuntu or Debian test +if [ -x /sbin/udevplug ]; then + mkdir -p ${DESTDIR}/lib/udev + copy_exec /lib/udev/cdrom_id /lib/udev + copy_exec /lib/udev/vol_id /lib/udev + copy_exec /lib/udev/path_id /lib/udev +else + copy_exec /sbin/udevtrigger /sbin +fi + copy_exec /usr/bin/udevinfo /bin -# Needed for devmapper -copy_exec /sbin/blockdev /sbin -copy_exec /sbin/dmsetup /sbin -manual_add_modules dm-snapshot +# cifs boot +if [ -x /sbin/mount.cifs ]; then + copy_exec /sbin/mount.cifs /sbin + for x in cifs; do + manual_add_modules ${x} + done +fi # squashfs manual_add_modules squashfs diff --git a/scripts/casper b/scripts/casper index 3d8c453..2375bb6 100644 --- a/scripts/casper +++ b/scripts/casper @@ -4,306 +4,466 @@ export PATH=/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin -mountpoint=/cdrom +mountpoint=/live_media -mkdir -p $mountpoint +# Will be mounted if found as copy on write instead of tmpfs +persistence_pattern="casper-rw" + +# Each file found with this pattern will be mounted directly in the +# mountpoint extracted from file name "${other_mounts_pattern}" +other_mounts_pattern="casper-mount-" +netboot="" + +#overlay_method=unionfs +#if [ "${DPKG_ARCH}" = "ia64" ] || [ "${DPKG_ARCH}" = "hppa" ] || [ "${DPKG_ARCH}" = "sparc" ]; then +# overlay_method=devmapper +#fi -overlay_method=unionfs -if [ "${DPKG_ARCH}" = "ia64" ] || [ "${DPKG_ARCH}" = "hppa" ] || [ "${DPKG_ARCH}" = "sparc" ]; then - overlay_method=devmapper -fi +USERNAME="casper" +USERFULLNAME="Live session user" +HOST="live" -USERNAME=ubuntu -USERFULLNAME="Ubuntu LiveCD user" -HOST=ubuntu +mkdir -p $mountpoint [ -f /etc/casper.conf ] && . /etc/casper.conf export USERNAME USERFULLNAME HOST -casper_path() { - 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 - fi - return 1 +is_casper_path() { + path=$1 + if [ -d "$path/casper" ]; then + if [ "$(echo $path/casper/*.cloop)" != "$path/casper/*.cloop" ] || + [ "$(echo $path/casper/*.squashfs)" != "$path/casper/*.squashfs" ] || + [ "$(echo $path/casper/*.ext2)" != "$path/casper/*.ext2" ] || + [ "$(echo $path/casper/*.dir)" != "$path/casper/*.dir" ]; then + return 0 + fi + 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} + 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*") + *.cloop) + echo $(setup_loop "$1" "cloop" "/sys/block/cloop*") + ;; + *.squashfs|*.ext2) + echo $(setup_loop "$1" "loop" "/sys/block/loop*") + ;; + *.dir) + echo "directory" + ;; + *) + panic "Unrecognized casper filesystem: $1" ;; - *.squashfs) - 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 +match_files_in_dir() { + # Does any files match pattern $1 ? + + local pattern="$1" + if [ "$(echo $pattern)" != "$pattern" ]; then + return 0 + fi + return 1 +} + +mount_images_in_directory() { + directory="$1" + rootmnt="$2" + if match_files_in_dir "$directory/casper/*.cloop"; then + # Let's hope there's just one matching *.cloop... FIXME + setup_devmapper $(get_backing_device "$directory/casper/*.cloop") "$rootmnt" + elif match_files_in_dir "$directory/casper/*.squashfs" || + match_files_in_dir "$directory/casper/*.ext2" || + match_files_in_dir "$directory/casper/*.dir"; then + setup_unionfs "$directory/casper" "$rootmnt" + else + : + fi } sys2dev() { - sysdev=${1#/sys} - echo "/dev/$(udevinfo -q name -p ${sysdev} 2>/dev/null|| echo ${sysdev##*/})" + 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" - udevplug -W - - 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" + 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 + #FIXME# one use of this function expects "unknown" another does not! + # which is it??? + 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" + backdev="$1" + rootmnt="$2" - modprobe -Qb dm-mod - COW_DEVICE=/dev/ram1 - COW_NAME="casper-cow" + 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 + 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 + 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 $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" + 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" + 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 + 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() { + copyform="$1" + copyto="${copyform}_swap" + + size=$(du -ks ${copyform} | 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 ${copyform}/* ${copyto} + umount ${copyform} + mount -r -o move ${copyto} ${copyform} + rmdir ${copyto} + [ "$quiet" != "y" ] && log_end_msg + fi } find_cow_device() { - 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)" = "casper-rw" ]; 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/casper-rw" ]; then - echo $(setup_loop "/cow-backing/casper-rw" "loop" "/sys/block/loop*") - return 0 - else - umount /cow-backing - fi - fi - - done - done - return 1 + 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() { + # Will mount a remote share and return the mountpoint + + modprobe -q nfs + # For DHCP + modprobe -q af_packet + + ipconfig ${DEVICE} /tmp/net-${DEVICE}.conf + if [ "x${NFSROOT}" = "xauto" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + fi + + #choose NFS or CIFS mount + if [ ${netboot} = "NFS" ] ; then + echo $(do_nfsmount) + else + echo $(do_cifsmount) + fi +} + +do_nfsmount() { + if [ "x${NFSOPTS}" = "x" ]; then + NFSOPTS="" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Mounting NFS with nfsmount -o nolock -o ro ${NFSOPTS} ${NFSROOT} ${mountpoint}" + while true ; do + nfsmount -o nolock -o ro ${NFSOPTS} "${NFSROOT}" "${mountpoint}" && break + sleep 1 + done + echo "${mountpoint}" + # FIXME: add error check + [ "$quiet" != "y" ] && log_end_msg +} + +do_cifsmount() { + NFSOPTS="-ouser=root,password=" + + [ "$quiet" != "y" ] && log_begin_msg "Mounting using mount.cifs with ${NFSROOT} ${mountpoint} ${NFSOPTS}" + mount.cifs "${NFSROOT}" "${mountpoint}" "${NFSOPTS}" && echo "${mountpoint}" + # FIXME: add error check + [ "$quiet" != "y" ] && log_end_msg } setup_unionfs() { - backdev="$1" + image_directory="$1" rootmnt="$2" - modprobe -Qb unionfs - mkdir -p /cow - - if grep -q persistent /proc/cmdline; then - i=0 - # We love udev and the kernel! - while [ "$i" -lt 300 ]; do - cowdevice=$(find_cow_device) - if [ -b "$cowdevice" ]; then - mount -t $(get_fstype "$cowdevice") -o rw "$cowdevice" /cow || panic "Can not mount $cowdevice on /cow" - break - fi - sleep 5 -# sleep 0.1 - i=$(( $i + 1 )) - done - else - mount -t tmpfs tmpfs /cow - fi - - mkdir -p /rofs - 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" - - 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" + image_type="$3" + + modprobe -qb unionfs + croot="" # Should really be /casper, but run-init doesn't handle + # mount-points in subdirectories at all + + # Let's just mount the read-only file systems first + rofsstring="" + rofslist="" + mkdir -p "${croot}" + for image_type in "ext2" "squashfs" "dir" ; do + for image in "${image_directory}"/*."${image_type}"; do + imagename=$(basename "${image}") + if [ -d "${image}" ]; then + # it is a plain directory: do nothing + rofslist="${image} ${rofslist}" + rofsstring="${image}=ro:${rofsstring}" + elif [ -f "${image}" ]; then + backdev=$(get_backing_device "$image") + fstype=$(get_fstype "${backdev}") + if [ "${fstype}" = "unknown" ]; then + panic "Unknown file system type on ${backdev} (${image})" + fi + mkdir -p "${croot}/${imagename}" + mount -t "${fstype}" -o ro "${backdev}" "${croot}/${imagename}" || panic "Can not mount $backdev ($image) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=ro:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}" + fi + done + done + rofsstring=${rofsstring%:} + + 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" + + mount -t unionfs -o dirs=/cow=rw:$rofsstring unionfs "$rootmnt" + + for d in ${rofslist}; do + mkdir -p "${rootmnt}/casper/${d}" + mount -o bind "${d}" "${rootmnt}/${d}" + case d in + *.dir) ;; # do nothing + *) umount "${d}" ;; + esac + done + + # Adding other custom mounts + 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 + + if grep -q show-cow /proc/cmdline; then + mkdir -p "$rootmnt/cow" + mount -o bind /cow "$rootmnt/cow" + fi } is_usb_device() { sysfs_path="${1#/sys}" - if /lib/udev/path_id "${sysfs_path}" | grep -q "ID_PATH=usb"; then + if /lib/udev/path_id "${sysfs_path}" | grep -Eq "ID_PATH=(usb|pci-[^-]*-usb)"; then return 0 fi return 1 } -find_cd() { +find_livefs() { 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 + 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 is_casper_path $mountpoint; then + echo $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 is_casper_path $mountpoint; then + echo $mountpoint + return + else + umount $mountpoint + fi + ;; + esac + done + elif [ "${fstype}" = "squashfs" || \ + "${fstype}" = "ext2" ]; then + + # This is an ugly hack situation, the block device has + # an 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 + 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_cd) - if [ "${live_image}" ]; then - break - fi - sleep 1 - done - if [ "$?" -gt 0 ]; then - panic "Unable to find a CD-ROM containing a live file system" - fi - - setup_cow "$overlay_method" "$(get_backing_device $live_image)" "$rootmnt" - - log_end_msg - - maybe_break casper-bottom - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-bottom" - - run_scripts /scripts/casper-bottom - [ "$quiet" != "y" ] && log_end_msg - - exec 1>&6 6>&- - exec 2>&7 7>&- - cp casper.log "${rootmnt}/var/log/" + 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 + + if grep -q netboot /proc/cmdline; then + netboot="CIFS" + for x in $(cat /proc/cmdline); do + case $x in + netboot=*) + netboot=${x#netboot=} + ;; + esac + done + livefs_root=$(do_netboot) + else + # Scan devices for the image + for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13; do + livefs_root=$(find_livefs) + if [ "${livefs_root}" ]; then + break + fi + sleep 1 + done + fi + + 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 "${livefs_root}" + fi + + mount_images_in_directory "$livefs_root" "$rootmnt" + + log_end_msg + + maybe_break casper-bottom + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-bottom" + + 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 index 637a1ff..8c8e153 100755 --- a/scripts/casper-bottom/01integrity_check +++ b/scripts/casper-bottom/01integrity_check @@ -15,4 +15,4 @@ prereqs) ;; esac -grep integrity-check /proc/cmdline && casper-md5check /cdrom /cdrom/md5sum.txt < /dev/tty8 +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 index ca8845a..33f265d 100755 --- a/scripts/casper-bottom/05mountpoints +++ b/scripts/casper-bottom/05mountpoints @@ -21,7 +21,7 @@ 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 +mkdir -p /root/live_media +mount -n -o move /live_media /root/live_media log_end_msg diff --git a/scripts/casper-bottom/10adduser b/scripts/casper-bottom/10adduser index a37d831..700f8c3 100755 --- a/scripts/casper-bottom/10adduser +++ b/scripts/casper-bottom/10adduser @@ -1,7 +1,7 @@ #!/bin/sh PREREQ="" -DESCRIPTION="Adding live CD user..." +DESCRIPTION="Adding live session user..." . /scripts/functions @@ -20,15 +20,18 @@ esac log_begin_msg "$DESCRIPTION" +# U6aMy0wojraho is just a blank password chroot /root debconf-communicate -fnoninteractive casper > /dev/null < /dev/null +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 <> /root/etc/sudoers -fi - -# XXX - awful hack to stop xscreensaver locking the screen (#7150) -echo 'RUNNING_UNDER_GDM="yes"' >> /root/etc/environment - -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 + 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 -done +fi if [ -L /root/home/$USERNAME/Examples ]; then chroot /root install -o $USERNAME -g $USERNAME -d /home/$USERNAME/Desktop/ diff --git a/scripts/casper-bottom/14locales b/scripts/casper-bottom/14locales index d9343cd..0d4e171 100755 --- a/scripts/casper-bottom/14locales +++ b/scripts/casper-bottom/14locales @@ -20,18 +20,33 @@ esac log_begin_msg "$DESCRIPTION" -locale=en_US.UTF-8 +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=} - ;; - esac + case $x in + debian-installer/locale=*) + locale=${x#debian-installer/locale=} + set_locale="true" + ;; + esac done -LANG=$(grep "^${locale}" /root/usr/share/i18n/SUPPORTED | grep UTF-8 |sed -e 's, .*,,' -e q) - -printf 'LANG="%s"\n' "${LANG}" >> /root/etc/environment -chroot /root /usr/sbin/locale-gen "${LANG}" +if [ -z "${locale}" ]; then + # Set a default one + locale=en_US.UTF-8 + set_locale="true" +fi + +if [ "${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 index 5f7797a..745e6ce 100755 --- a/scripts/casper-bottom/15autologin +++ b/scripts/casper-bottom/15autologin @@ -27,6 +27,8 @@ else fi if chroot /root [ -f ${GDMCONF} ]; then + # true hack ! -- nohar + chroot /root cp /usr/share/gdm/defaults.conf /etc/gdm/gdm.conf # Configure GDM autologin chroot /root sed -i \ -e "s/^AutomaticLoginEnable=.*\$/AutomaticLoginEnable=true/" \ diff --git a/scripts/casper-bottom/22gnome_panel_data b/scripts/casper-bottom/22gnome_panel_data index b232c27..e87c94f 100755 --- a/scripts/casper-bottom/22gnome_panel_data +++ b/scripts/casper-bottom/22gnome_panel_data @@ -20,8 +20,10 @@ esac log_begin_msg "$DESCRIPTION" -if chroot /root /bin/sh -c laptop-detect; then - casper-reconfigure /root gnome-panel-data +if [ -x /root/usr/sbin/laptop-detect ]; then + if chroot /root 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="" diff --git a/scripts/casper-bottom/23networking b/scripts/casper-bottom/23networking index 021aca9..7238773 100755 --- a/scripts/casper-bottom/23networking +++ b/scripts/casper-bottom/23networking @@ -27,7 +27,11 @@ iface lo inet loopback EOF -udevplug -Bpci -Iclass="0x02*" +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 diff --git a/scripts/casper-bottom/25configure_init b/scripts/casper-bottom/25configure_init index 12e6315..7c39478 100755 --- a/scripts/casper-bottom/25configure_init +++ b/scripts/casper-bottom/25configure_init @@ -23,14 +23,16 @@ 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 2>\&1|" /root/etc/inittab + sed -i -e "s|^\([^:]*:[^:]*:[^:]*\):.*getty.*\<\(tty[0-9].*\).*$|\1:/bin/login -f $USERNAME /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 -for f in /root/etc/rc?.d/S??anacron; do - mv ${f} ${f%/*}/K00anacron -done +if [ -x /root/etc/init.d/anacron ]; then + for f in /root/etc/rc?.d/S??anacron; do + mv ${f} ${f%/*}/K00anacron + done +fi # No point, really rm -f /root/etc/rc?.d/[SK]??postfix @@ -40,15 +42,8 @@ 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. -chmod -x /root/sbin/readahead-list - -# Install shutdown script -cp -a /lib/casper/shutdown /root/etc/init.d/casper-shutdown -if [ -f /root/etc/rc0.d/S90halt ]; then - ln -s ../init.d/casper-shutdown /root/etc/rc0.d/S89casper -fi -if [ -f /root/etc/rc6.d/S90reboot ]; then - ln -s ../init.d/casper-shutdown /root/etc/rc6.d/S89casper +if [ -e /root/sbin/readahead-list ]; then + chmod -x /root/sbin/readahead-list fi log_end_msg diff --git a/scripts/casper-bottom/33disable_binary_drivers b/scripts/casper-bottom/33disable_binary_drivers index 52bcbf4..6bc2279 100755 --- a/scripts/casper-bottom/33disable_binary_drivers +++ b/scripts/casper-bottom/33disable_binary_drivers @@ -20,4 +20,6 @@ esac log_begin_msg "$DESCRIPTION" -echo 'DISABLED_MODULES="fglrx nv"' >> /root/etc/default/linux-restricted-modules-common +if [ -e /root/etc/default/linux-restricted-modules-common ]; then + echo 'DISABLED_MODULES="fglrx nv"' >> /root/etc/default/linux-restricted-modules-common +fi diff --git a/ubiquity-hooks/30accessibility b/ubiquity-hooks/30accessibility deleted file mode 100755 index 4d871fd..0000000 --- a/ubiquity-hooks/30accessibility +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh - -. /usr/share/debconf/confmodule - -PREREQ="" -DESCRIPTION="Configuring accessibility options..." -USERNAME=$(db_get passwd/username) - -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