diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/casper | 213 | ||||
| -rwxr-xr-x | scripts/casper-bottom/01integrity_check | 2 | ||||
| -rwxr-xr-x | scripts/casper-bottom/10adduser | 29 | ||||
| -rwxr-xr-x | scripts/casper-bottom/14locales | 35 | ||||
| -rwxr-xr-x | scripts/casper-bottom/22gnome_panel_data | 6 | ||||
| -rwxr-xr-x | scripts/casper-bottom/23networking | 6 | ||||
| -rwxr-xr-x | scripts/casper-bottom/25configure_init | 19 | ||||
| -rwxr-xr-x | scripts/casper-bottom/33disable_binary_drivers | 4 |
8 files changed, 109 insertions, 205 deletions
diff --git a/scripts/casper b/scripts/casper index 2557595..3d8c453 100644 --- a/scripts/casper +++ b/scripts/casper @@ -2,9 +2,9 @@ # set -e -mountpoint=/live_media -root_persistence="casper-rw" -home_persistence="home-rw" +export PATH=/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +mountpoint=/cdrom mkdir -p $mountpoint @@ -13,15 +13,15 @@ if [ "${DPKG_ARCH}" = "ia64" ] || [ "${DPKG_ARCH}" = "hppa" ] || [ "${DPKG_ARCH} overlay_method=devmapper fi -USERNAME=debian -USERFULLNAME="Debian Live user" -HOST=debian +USERNAME=ubuntu +USERFULLNAME="Ubuntu LiveCD user" +HOST=ubuntu [ -f /etc/casper.conf ] && . /etc/casper.conf export USERNAME USERFULLNAME HOST -casper_path() { # Fixme: uglyness +casper_path() { path=$1 if [ -e "$path/casper/filesystem.cloop" ]; then echo "$path/casper/filesystem.cloop" @@ -29,12 +29,6 @@ casper_path() { # Fixme: uglyness 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 } @@ -55,7 +49,7 @@ get_backing_device() { *.cloop) echo $(setup_loop "$1" "cloop" "/sys/block/cloop*") ;; - *.squashfs|*.ext2|*.xfs) + *.squashfs) echo $(setup_loop "$1" "loop" "/sys/block/loop*") ;; *) @@ -84,12 +78,8 @@ setup_loop() { local module=$2 local pattern=$3 - modprobe -qb "$module" - if [ -x /sbin/udevplug ]; then - udevplug -W - else - udevtrigger - fi + modprobe -Qb "$module" + udevplug -W for loopdev in $pattern; do if [ "$(cat $loopdev/size)" -eq 0 ]; then @@ -117,7 +107,7 @@ setup_devmapper() { backdev="$1" rootmnt="$2" - modprobe -qb dm-mod + modprobe -Qb dm-mod COW_DEVICE=/dev/ram1 COW_NAME="casper-cow" @@ -153,126 +143,71 @@ where_is_mounted() { 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=" + 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 - [ "$quiet" != "y" ] && log_begin_msg "Mounting using mount.cifs with ${NFSROOT} ${rofsmnt} ${NFSOPTS}" - mount.cifs "${NFSROOT}" "${rofsmnt}" "${NFSOPTS}" - [ "$quiet" != "y" ] && log_end_msg + 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 } 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" + 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 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 - + 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" - - # 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 + 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" } is_usb_device() { @@ -283,7 +218,7 @@ is_usb_device() { return 1 } -find_live() { +find_cd() { mounted= for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram); do devname=$(sys2dev "${sysblock}") @@ -348,32 +283,24 @@ mountroot() { 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) + live_image=$(find_cd) if [ "${live_image}" ]; then break fi sleep 1 done if [ "$?" -gt 0 ]; then - panic "Unable to find a medium containing a live file system" + panic "Unable to find a CD-ROM 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 + run_scripts /scripts/casper-bottom [ "$quiet" != "y" ] && log_end_msg exec 1>&6 6>&- diff --git a/scripts/casper-bottom/01integrity_check b/scripts/casper-bottom/01integrity_check index 8c8e153..637a1ff 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 /live_media /live_media/md5sum.txt < /dev/tty8 +grep integrity-check /proc/cmdline && casper-md5check /cdrom /cdrom/md5sum.txt < /dev/tty8 diff --git a/scripts/casper-bottom/10adduser b/scripts/casper-bottom/10adduser index dc8aaa8..a37d831 100755 --- a/scripts/casper-bottom/10adduser +++ b/scripts/casper-bottom/10adduser @@ -28,9 +28,7 @@ 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 +chroot /root /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 @@ -42,22 +40,19 @@ 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 + 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 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 + fi +done + 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/ diff --git a/scripts/casper-bottom/14locales b/scripts/casper-bottom/14locales index 6d5b73c..d9343cd 100755 --- a/scripts/casper-bottom/14locales +++ b/scripts/casper-bottom/14locales @@ -20,33 +20,18 @@ 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 +locale=en_US.UTF-8 for x in $(cat /proc/cmdline); do - case $x in - debian-installer/locale=*) - locale=${x#debian-installer/locale=} - set_locale="true" - ;; - esac + case $x in + debian-installer/locale=*) + locale=${x#debian-installer/locale=} + ;; + 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 +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}" log_end_msg diff --git a/scripts/casper-bottom/22gnome_panel_data b/scripts/casper-bottom/22gnome_panel_data index 7bedd7a..b232c27 100755 --- a/scripts/casper-bottom/22gnome_panel_data +++ b/scripts/casper-bottom/22gnome_panel_data @@ -20,10 +20,8 @@ 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 +if chroot /root /bin/sh -c laptop-detect; then + casper-reconfigure /root gnome-panel-data 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 7238773..021aca9 100755 --- a/scripts/casper-bottom/23networking +++ b/scripts/casper-bottom/23networking @@ -27,11 +27,7 @@ iface lo inet loopback EOF -if [ -x /sbin/udevplug ]; then - udevplug -Bpci -Iclass="0x02*" -else - udevtrigger -fi +udevplug -Bpci -Iclass="0x02*" 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 0c5c43e..12e6315 100755 --- a/scripts/casper-bottom/25configure_init +++ b/scripts/casper-bottom/25configure_init @@ -28,11 +28,9 @@ 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 +for f in /root/etc/rc?.d/S??anacron; do + mv ${f} ${f%/*}/K00anacron +done # No point, really rm -f /root/etc/rc?.d/[SK]??postfix @@ -42,8 +40,15 @@ 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 +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 fi log_end_msg diff --git a/scripts/casper-bottom/33disable_binary_drivers b/scripts/casper-bottom/33disable_binary_drivers index 4e4fec3..52bcbf4 100755 --- a/scripts/casper-bottom/33disable_binary_drivers +++ b/scripts/casper-bottom/33disable_binary_drivers @@ -20,6 +20,4 @@ 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 +echo 'DISABLED_MODULES="fglrx nv"' >> /root/etc/default/linux-restricted-modules-common |
