From f25ef87f66632adaeacb225fdfe962241cd7e91b Mon Sep 17 00:00:00 2001 From: tzim Date: Mon, 12 Jan 2015 16:32:41 +0000 Subject: [PATCH] =?UTF-8?q?modif=20du=20live=20pour=20persistence=20sur=20?= =?UTF-8?q?cl=C3=A9=20usb=20avec=20une=20seule=20partition=20fat32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- live-dmx/auto/config | 6 +- .../config/bootloaders/isolinux/advanced.cfg | 3 + live-dmx/config/bootloaders/isolinux/hdt.c32 | 1 + .../config/bootloaders/isolinux/install.cfg | 11 + .../config/bootloaders/isolinux/isolinux.bin | 1 + .../config/bootloaders/isolinux/isolinux.cfg | 4 + .../config/bootloaders/isolinux/ldlinux.c32 | 1 + .../config/bootloaders/isolinux/libcom32.c32 | 1 + .../config/bootloaders/isolinux/libutil.c32 | 1 + .../config/bootloaders/isolinux/live.cfg.in | 12 + live-dmx/config/bootloaders/isolinux/menu.cfg | 17 + .../config/bootloaders/isolinux/splash.png | Bin 0 -> 81228 bytes .../config/bootloaders/isolinux/stdmenu.cfg | 15 + .../config/bootloaders/isolinux/vesamenu.c32 | 1 + .../config/bootloaders/syslinux/advanced.cfg | 3 + live-dmx/config/bootloaders/syslinux/hdt.c32 | 1 + .../config/bootloaders/syslinux/install.cfg | 11 + .../config/bootloaders/syslinux/ldlinux.c32 | 1 + .../config/bootloaders/syslinux/libcom32.c32 | 1 + .../config/bootloaders/syslinux/libutil.c32 | 1 + .../config/bootloaders/syslinux/live.cfg.in | 12 + live-dmx/config/bootloaders/syslinux/menu.cfg | 17 + .../config/bootloaders/syslinux/splash.png | Bin 0 -> 81228 bytes .../config/bootloaders/syslinux/stdmenu.cfg | 15 + .../config/bootloaders/syslinux/syslinux.cfg | 4 + .../config/bootloaders/syslinux/vesamenu.c32 | 1 + live-dmx/config/hooks/persistence.binary | 3 + live-dmx/config/hooks/update-initramfs.chroot | 3 + .../config/includes.binary/persistence.xz | Bin 0 -> 34592 bytes .../lib/live/boot/9990-misc-helpers.sh | 1721 +++++++++++++++++ 30 files changed, 1865 insertions(+), 3 deletions(-) create mode 100644 live-dmx/config/bootloaders/isolinux/advanced.cfg create mode 120000 live-dmx/config/bootloaders/isolinux/hdt.c32 create mode 100644 live-dmx/config/bootloaders/isolinux/install.cfg create mode 120000 live-dmx/config/bootloaders/isolinux/isolinux.bin create mode 100644 live-dmx/config/bootloaders/isolinux/isolinux.cfg create mode 120000 live-dmx/config/bootloaders/isolinux/ldlinux.c32 create mode 120000 live-dmx/config/bootloaders/isolinux/libcom32.c32 create mode 120000 live-dmx/config/bootloaders/isolinux/libutil.c32 create mode 100644 live-dmx/config/bootloaders/isolinux/live.cfg.in create mode 100644 live-dmx/config/bootloaders/isolinux/menu.cfg create mode 100644 live-dmx/config/bootloaders/isolinux/splash.png create mode 100644 live-dmx/config/bootloaders/isolinux/stdmenu.cfg create mode 120000 live-dmx/config/bootloaders/isolinux/vesamenu.c32 create mode 100644 live-dmx/config/bootloaders/syslinux/advanced.cfg create mode 120000 live-dmx/config/bootloaders/syslinux/hdt.c32 create mode 100644 live-dmx/config/bootloaders/syslinux/install.cfg create mode 120000 live-dmx/config/bootloaders/syslinux/ldlinux.c32 create mode 120000 live-dmx/config/bootloaders/syslinux/libcom32.c32 create mode 120000 live-dmx/config/bootloaders/syslinux/libutil.c32 create mode 100644 live-dmx/config/bootloaders/syslinux/live.cfg.in create mode 100644 live-dmx/config/bootloaders/syslinux/menu.cfg create mode 100644 live-dmx/config/bootloaders/syslinux/splash.png create mode 100644 live-dmx/config/bootloaders/syslinux/stdmenu.cfg create mode 100644 live-dmx/config/bootloaders/syslinux/syslinux.cfg create mode 120000 live-dmx/config/bootloaders/syslinux/vesamenu.c32 create mode 100755 live-dmx/config/hooks/persistence.binary create mode 100755 live-dmx/config/hooks/update-initramfs.chroot create mode 100644 live-dmx/config/includes.binary/persistence.xz create mode 100755 live-dmx/config/includes.chroot/lib/live/boot/9990-misc-helpers.sh diff --git a/live-dmx/auto/config b/live-dmx/auto/config index fe6daec..b493a4e 100755 --- a/live-dmx/auto/config +++ b/live-dmx/auto/config @@ -3,9 +3,9 @@ set -e lb config noauto \ - --bootappend-live "persistence boot=live config locales=fr_FR.UTF-8 keyboard-layouts=fr" \ + --bootappend-live "persistence boot=live config locales=fr_FR.UTF-8 keyboard-layouts=fr basemountmode=rw,noatime,umask=000" \ --bootappend-install "locales=fr_FR.UTF-8" \ --archive-areas "main contrib non-free" \ --apt-recommends true \ - --architectures i386 \ - "${@}" + --architectures i386 -b hdd \ + "${@}"d diff --git a/live-dmx/config/bootloaders/isolinux/advanced.cfg b/live-dmx/config/bootloaders/isolinux/advanced.cfg new file mode 100644 index 0000000..c0b2f0e --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/advanced.cfg @@ -0,0 +1,3 @@ +label hdt + menu label ^Hardware Detection Tool (HDT) + com32 hdt.c32 diff --git a/live-dmx/config/bootloaders/isolinux/hdt.c32 b/live-dmx/config/bootloaders/isolinux/hdt.c32 new file mode 120000 index 0000000..e509295 --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/hdt.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/hdt.c32 \ No newline at end of file diff --git a/live-dmx/config/bootloaders/isolinux/install.cfg b/live-dmx/config/bootloaders/isolinux/install.cfg new file mode 100644 index 0000000..9177dd7 --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/install.cfg @@ -0,0 +1,11 @@ +label install + menu label ^Install + linux /install/vmlinuz + initrd /install/initrd.gz + append vga=788 @APPEND_INSTALL@ -- quiet + +label installgui + menu label ^Graphical install + linux /install/gtk/vmlinuz + initrd /install/gtk/initrd.gz + append video=vesa:ywrap,mtrr vga=788 @APPEND_INSTALL@ -- quiet diff --git a/live-dmx/config/bootloaders/isolinux/isolinux.bin b/live-dmx/config/bootloaders/isolinux/isolinux.bin new file mode 120000 index 0000000..0e3eb53 --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/isolinux.bin @@ -0,0 +1 @@ +/usr/lib/syslinux/isolinux.bin \ No newline at end of file diff --git a/live-dmx/config/bootloaders/isolinux/isolinux.cfg b/live-dmx/config/bootloaders/isolinux/isolinux.cfg new file mode 100644 index 0000000..178fe32 --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/isolinux.cfg @@ -0,0 +1,4 @@ +include menu.cfg +default vesamenu.c32 +prompt 0 +timeout 5 diff --git a/live-dmx/config/bootloaders/isolinux/ldlinux.c32 b/live-dmx/config/bootloaders/isolinux/ldlinux.c32 new file mode 120000 index 0000000..c937af6 --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/ldlinux.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/ldlinux.c32 \ No newline at end of file diff --git a/live-dmx/config/bootloaders/isolinux/libcom32.c32 b/live-dmx/config/bootloaders/isolinux/libcom32.c32 new file mode 120000 index 0000000..bca5e3c --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/libcom32.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/libcom32.c32 \ No newline at end of file diff --git a/live-dmx/config/bootloaders/isolinux/libutil.c32 b/live-dmx/config/bootloaders/isolinux/libutil.c32 new file mode 120000 index 0000000..351e12b --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/libutil.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/libutil.c32 \ No newline at end of file diff --git a/live-dmx/config/bootloaders/isolinux/live.cfg.in b/live-dmx/config/bootloaders/isolinux/live.cfg.in new file mode 100644 index 0000000..97ceb92 --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/live.cfg.in @@ -0,0 +1,12 @@ +label live-@FLAVOUR@ + menu label ^Live (@FLAVOUR@) + menu default + linux @LINUX@ + initrd @INITRD@ + append @APPEND_LIVE@ + +label live-@FLAVOUR@-failsafe + menu label ^Live (@FLAVOUR@ failsafe) + linux @LINUX@ + initrd @INITRD@ + append @APPEND_LIVE_FAILSAFE@ diff --git a/live-dmx/config/bootloaders/isolinux/menu.cfg b/live-dmx/config/bootloaders/isolinux/menu.cfg new file mode 100644 index 0000000..d2daa80 --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/menu.cfg @@ -0,0 +1,17 @@ +menu hshift 0 +menu width 82 + +menu title Boot menu +include stdmenu.cfg +include live.cfg +include install.cfg +menu begin advanced + menu title Advanced options + include stdmenu.cfg + label mainmenu + menu label ^Back.. + menu exit + include advanced.cfg +menu end + +menu clear diff --git a/live-dmx/config/bootloaders/isolinux/splash.png b/live-dmx/config/bootloaders/isolinux/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0f742930a569740bd4bd1c62b9049084788e5d GIT binary patch literal 81228 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 literal 0 HcmV?d00001 diff --git a/live-dmx/config/bootloaders/isolinux/stdmenu.cfg b/live-dmx/config/bootloaders/isolinux/stdmenu.cfg new file mode 100644 index 0000000..671b16f --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/stdmenu.cfg @@ -0,0 +1,15 @@ +menu background splash.png +menu color title * #FFFFFFFF * +menu color border * #00000000 #00000000 none +menu color sel * #ffffffff #76a1d0ff * +menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff * +menu color tabmsg * #ffffffff #00000000 * +menu color help 37;40 #ffdddd00 #00000000 none +menu vshift 12 +menu rows 10 +menu helpmsgrow 15 +# The command line must be at least one line from the bottom. +menu cmdlinerow 16 +menu timeoutrow 16 +menu tabmsgrow 18 +menu tabmsg Press ENTER to boot or TAB to edit a menu entry diff --git a/live-dmx/config/bootloaders/isolinux/vesamenu.c32 b/live-dmx/config/bootloaders/isolinux/vesamenu.c32 new file mode 120000 index 0000000..d06c444 --- /dev/null +++ b/live-dmx/config/bootloaders/isolinux/vesamenu.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/vesamenu.c32 \ No newline at end of file diff --git a/live-dmx/config/bootloaders/syslinux/advanced.cfg b/live-dmx/config/bootloaders/syslinux/advanced.cfg new file mode 100644 index 0000000..c0b2f0e --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/advanced.cfg @@ -0,0 +1,3 @@ +label hdt + menu label ^Hardware Detection Tool (HDT) + com32 hdt.c32 diff --git a/live-dmx/config/bootloaders/syslinux/hdt.c32 b/live-dmx/config/bootloaders/syslinux/hdt.c32 new file mode 120000 index 0000000..e509295 --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/hdt.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/hdt.c32 \ No newline at end of file diff --git a/live-dmx/config/bootloaders/syslinux/install.cfg b/live-dmx/config/bootloaders/syslinux/install.cfg new file mode 100644 index 0000000..9177dd7 --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/install.cfg @@ -0,0 +1,11 @@ +label install + menu label ^Install + linux /install/vmlinuz + initrd /install/initrd.gz + append vga=788 @APPEND_INSTALL@ -- quiet + +label installgui + menu label ^Graphical install + linux /install/gtk/vmlinuz + initrd /install/gtk/initrd.gz + append video=vesa:ywrap,mtrr vga=788 @APPEND_INSTALL@ -- quiet diff --git a/live-dmx/config/bootloaders/syslinux/ldlinux.c32 b/live-dmx/config/bootloaders/syslinux/ldlinux.c32 new file mode 120000 index 0000000..c937af6 --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/ldlinux.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/ldlinux.c32 \ No newline at end of file diff --git a/live-dmx/config/bootloaders/syslinux/libcom32.c32 b/live-dmx/config/bootloaders/syslinux/libcom32.c32 new file mode 120000 index 0000000..bca5e3c --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/libcom32.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/libcom32.c32 \ No newline at end of file diff --git a/live-dmx/config/bootloaders/syslinux/libutil.c32 b/live-dmx/config/bootloaders/syslinux/libutil.c32 new file mode 120000 index 0000000..351e12b --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/libutil.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/libutil.c32 \ No newline at end of file diff --git a/live-dmx/config/bootloaders/syslinux/live.cfg.in b/live-dmx/config/bootloaders/syslinux/live.cfg.in new file mode 100644 index 0000000..97ceb92 --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/live.cfg.in @@ -0,0 +1,12 @@ +label live-@FLAVOUR@ + menu label ^Live (@FLAVOUR@) + menu default + linux @LINUX@ + initrd @INITRD@ + append @APPEND_LIVE@ + +label live-@FLAVOUR@-failsafe + menu label ^Live (@FLAVOUR@ failsafe) + linux @LINUX@ + initrd @INITRD@ + append @APPEND_LIVE_FAILSAFE@ diff --git a/live-dmx/config/bootloaders/syslinux/menu.cfg b/live-dmx/config/bootloaders/syslinux/menu.cfg new file mode 100644 index 0000000..9368260 --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/menu.cfg @@ -0,0 +1,17 @@ +menu hshift 0 +menu width 82 + +menu title Boot menu +include stdmenu.cfg +include live.cfg +include install.cfg +menu begin advanced + menu title ^Advanced options + include stdmenu.cfg + label mainmenu + menu label ^Back.. + menu exit + include advanced.cfg +menu end + +menu clear diff --git a/live-dmx/config/bootloaders/syslinux/splash.png b/live-dmx/config/bootloaders/syslinux/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0f742930a569740bd4bd1c62b9049084788e5d GIT binary patch literal 81228 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 literal 0 HcmV?d00001 diff --git a/live-dmx/config/bootloaders/syslinux/stdmenu.cfg b/live-dmx/config/bootloaders/syslinux/stdmenu.cfg new file mode 100644 index 0000000..671b16f --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/stdmenu.cfg @@ -0,0 +1,15 @@ +menu background splash.png +menu color title * #FFFFFFFF * +menu color border * #00000000 #00000000 none +menu color sel * #ffffffff #76a1d0ff * +menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff * +menu color tabmsg * #ffffffff #00000000 * +menu color help 37;40 #ffdddd00 #00000000 none +menu vshift 12 +menu rows 10 +menu helpmsgrow 15 +# The command line must be at least one line from the bottom. +menu cmdlinerow 16 +menu timeoutrow 16 +menu tabmsgrow 18 +menu tabmsg Press ENTER to boot or TAB to edit a menu entry diff --git a/live-dmx/config/bootloaders/syslinux/syslinux.cfg b/live-dmx/config/bootloaders/syslinux/syslinux.cfg new file mode 100644 index 0000000..178fe32 --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/syslinux.cfg @@ -0,0 +1,4 @@ +include menu.cfg +default vesamenu.c32 +prompt 0 +timeout 5 diff --git a/live-dmx/config/bootloaders/syslinux/vesamenu.c32 b/live-dmx/config/bootloaders/syslinux/vesamenu.c32 new file mode 120000 index 0000000..d06c444 --- /dev/null +++ b/live-dmx/config/bootloaders/syslinux/vesamenu.c32 @@ -0,0 +1 @@ +/usr/lib/syslinux/vesamenu.c32 \ No newline at end of file diff --git a/live-dmx/config/hooks/persistence.binary b/live-dmx/config/hooks/persistence.binary new file mode 100755 index 0000000..6956036 --- /dev/null +++ b/live-dmx/config/hooks/persistence.binary @@ -0,0 +1,3 @@ +#!/bin/sh + +unxz binary/persistence.xz diff --git a/live-dmx/config/hooks/update-initramfs.chroot b/live-dmx/config/hooks/update-initramfs.chroot new file mode 100755 index 0000000..3bd0cfd --- /dev/null +++ b/live-dmx/config/hooks/update-initramfs.chroot @@ -0,0 +1,3 @@ +#!/bin/sh + +update-initramfs -u -k all diff --git a/live-dmx/config/includes.binary/persistence.xz b/live-dmx/config/includes.binary/persistence.xz new file mode 100644 index 0000000000000000000000000000000000000000..821cd80fec7b4187a230a5e722c1904c76a9717f GIT binary patch literal 34592 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 literal 0 HcmV?d00001 diff --git a/live-dmx/config/includes.chroot/lib/live/boot/9990-misc-helpers.sh b/live-dmx/config/includes.chroot/lib/live/boot/9990-misc-helpers.sh new file mode 100755 index 0000000..0174c22 --- /dev/null +++ b/live-dmx/config/includes.chroot/lib/live/boot/9990-misc-helpers.sh @@ -0,0 +1,1721 @@ +#!/bin/sh + +#set -e + +# PATCH + #################################################### +# +# This file has patched code added where marked "# PATCH +" +# This allows custom mount options for the live-media partition +# A persistence file on the live-media partition may then be used +# No original code is modified nor removed +# +# Original file: /lib/live/boot/9990-misc-helpers.sh +# Version: live-boot_4.0~a7-1 +# +# David Hare, February 2013 +# +# Using custom mount options: +# +# Example cmdline append for (root only) RW access: +# " basemountmode=rw,noatime" (no quotes) +# +# RW access for users (vfat only): +# " basemountmode=rw,noatime,umask=000" (no quotes) +# +# Then we can write to the device that contains the live-media +# and use the same partition for a persistent loopback file +# +# If "basemountmode" is not specified at all: +# the original script code runs unmodified (device is mounted "ro,noatime") + +custom_mountmode=$(cat /proc/cmdline|grep -o "basemountmode=.*"|sed 's/ .*//'|sed 's/basemountmode=//') + +if [ -n "${custom_mountmode}" ]; then +echo "Custom mount options were selected" +echo "The live-media device will be mounted ${custom_mountmode}" +fi + +# PATCH END ################################################## + +is_live_path () +{ + DIRECTORY="${1}" + + if [ -d "${DIRECTORY}"/"${LIVE_MEDIA_PATH}" ] + then + for FILESYSTEM in squashfs ext2 ext3 ext4 xfs dir jffs2 + do + if [ "$(echo ${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM})" != "${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM}" ] + then + return 0 + fi + done + fi + + return 1 +} + +matches_uuid () +{ + if [ "${IGNORE_UUID}" ] || [ ! -e /conf/uuid.conf ] + then + return 0 + fi + + path="${1}" + uuid="$(cat /conf/uuid.conf)" + + for try_uuid_file in "${path}/.disk/live-uuid"* + do + [ -e "${try_uuid_file}" ] || continue + + try_uuid="$(cat "${try_uuid_file}")" + + if [ "${uuid}" = "${try_uuid}" ] + then + return 0 + fi + done + + return 1 +} + +get_backing_device () +{ + case "${1}" in + *.squashfs|*.ext2|*.ext3|*.ext4|*.jffs2) + echo $(setup_loop "${1}" "loop" "/sys/block/loop*" '0' "${LIVE_MEDIA_ENCRYPTION}" "${2}") + ;; + + *.dir) + echo "directory" + ;; + + *) + panic "Unrecognized live filesystem: ${1}" + ;; + esac +} + +match_files_in_dir () +{ + # Does any files match pattern ${1} ? + local pattern + pattern="${1}" + + if [ "$(echo ${pattern})" != "${pattern}" ] + then + return 0 + fi + + return 1 +} + +mount_images_in_directory () +{ + directory="${1}" + rootmnt="${2}" + mac="${3}" + + if match_files_in_dir "${directory}/${LIVE_MEDIA_PATH}/*.squashfs" || + match_files_in_dir "${directory}/${LIVE_MEDIA_PATH}/*.ext2" || + match_files_in_dir "${directory}/${LIVE_MEDIA_PATH}/*.ext3" || + match_files_in_dir "${directory}/${LIVE_MEDIA_PATH}/*.ext4" || + match_files_in_dir "${directory}/${LIVE_MEDIA_PATH}/*.jffs2" || + match_files_in_dir "${directory}/${LIVE_MEDIA_PATH}/*.dir" + then + [ -n "${mac}" ] && adddirectory="${directory}/${LIVE_MEDIA_PATH}/${mac}" + setup_unionfs "${directory}/${LIVE_MEDIA_PATH}" "${rootmnt}" "${adddirectory}" + else + panic "No supported filesystem images found at /${LIVE_MEDIA_PATH}." + fi +} + +is_nice_device () +{ + sysfs_path="${1#/sys}" + + if /sbin/udevadm test-builtin path_id "${sysfs_path}" | egrep -q "ID_PATH=(usb|pci-[^-]*-(ide|sas|scsi|usb|virtio)|platform-sata_mv|platform-orion-ehci|platform-mmc|platform-mxsdhci)" + then + return 0 + elif echo "${sysfs_path}" | grep -q '^/block/vd[a-z]$' + then + return 0 + elif echo ${sysfs_path} | grep -q "^/block/dm-" + then + return 0 + elif echo ${sysfs_path} | grep -q "^/block/mtdblock" + then + return 0 + fi + + return 1 +} + +check_dev () +{ + sysdev="${1}" + devname="${2}" + skip_uuid_check="${3}" + + # support for fromiso=.../isofrom=.... + if [ -n "$FROMISO" ] + then + ISO_DEVICE=$(dirname $FROMISO) + if ! [ -b $ISO_DEVICE ] + then + # to support unusual device names like /dev/cciss/c0d0p1 + # as well we have to identify the block device name, let's + # do that for up to 15 levels + i=15 + while [ -n "$ISO_DEVICE" ] && [ "$i" -gt 0 ] + do + ISO_DEVICE=$(dirname ${ISO_DEVICE}) + [ -b "$ISO_DEVICE" ] && break + i=$(($i -1)) + done + fi + + if [ "$ISO_DEVICE" = "/" ] + then + echo "Warning: device for bootoption fromiso= ($FROMISO) not found.">>/boot.log + else + fs_type=$(get_fstype "${ISO_DEVICE}") + if is_supported_fs ${fs_type} + then + mkdir /live/fromiso + mount -t $fs_type "$ISO_DEVICE" /live/fromiso + +# PATCH + #################################################### + +# if "custom_mountmode" was set, remount /live/fromiso + +if [ -n "${custom_mountmode}" ]; then + + if echo ${custom_mountmode}|grep -q "umask" && [ "$fstype" != "vfat" ]; then + custom_mountopts=$(echo ${custom_mountmode}|sed 's/,umask.*//') + else + custom_mountopts=$custom_mountmode + fi + +umount /live/fromiso +mount -t ${fstype} -o ${custom_mountopts} "$ISO_DEVICE" /live/fromiso + +fi + +# PATCH end ################################################## + + ISO_NAME="$(echo $FROMISO | sed "s|$ISO_DEVICE||")" + loopdevname=$(setup_loop "/live/fromiso/${ISO_NAME}" "loop" "/sys/block/loop*" "" '') + devname="${loopdevname}" + else + echo "Warning: unable to mount $ISO_DEVICE." >>/boot.log + fi + fi + fi + + if [ -z "${devname}" ] + then + devname=$(sys2dev "${sysdev}") + fi + + if [ -d "${devname}" ] + then + mount -o bind "${devname}" $mountpoint || continue + + if is_live_path $mountpoint + then + echo $mountpoint + return 0 + else + umount $mountpoint + fi + fi + + IFS="," + for device in ${devname} + do + case "$device" in + *mapper*) + # Adding lvm support + if [ -x /scripts/local-top/lvm2 ] + then + ROOT="$device" resume="" /scripts/local-top/lvm2 + fi + ;; + + /dev/md*) + # Adding raid support + if [ -x /scripts/local-top/mdadm ] + then + cp /conf/conf.d/md /conf/conf.d/md.orig + echo "MD_DEVS=$device " >> /conf/conf.d/md + /scripts/local-top/mdadm + mv /conf/conf.d/md.orig /conf/conf.d/md + fi + ;; + esac + done + unset IFS + + [ -n "$device" ] && devname="$device" + + [ -e "$devname" ] || continue + + if [ -n "${LIVE_MEDIA_OFFSET}" ] + then + loopdevname=$(setup_loop "${devname}" "loop" "/sys/block/loop*" "${LIVE_MEDIA_OFFSET}" '') + devname="${loopdevname}" + fi + + fstype=$(get_fstype "${devname}") + + if is_supported_fs ${fstype} + then + devuid=$(blkid -o value -s UUID "$devname") + [ -n "$devuid" ] && grep -qs "\<$devuid\>" $tried && continue + + mount -t ${fstype} -o ro,noatime "${devname}" ${mountpoint} || continue + +# PATCH + #################################################### + +# If "custom_mountmode" was set, remount the live-media device +# but only if is_live_path (we might be "findiso") + +if is_live_path ${mountpoint} && [ -n "${custom_mountmode}" ]; then + + if echo ${custom_mountmode}|grep -q "umask" && [ "$fstype" != "vfat" ]; then + + # mount will puke if "umask=000" is used on non-vfat + custom_mountopts=$(echo ${custom_mountmode}|sed 's/,umask.*//') + else + custom_mountopts=$custom_mountmode + fi + +umount ${mountpoint} +mount -t ${fstype} -o ${custom_mountopts} "${devname}" ${mountpoint} || continue + +fi + +# PATCH end ################################################## + + [ -n "$devuid" ] && echo "$devuid" >> $tried + + if [ -n "${FINDISO}" ] + then + if [ -f ${mountpoint}/${FINDISO} ] + then + umount ${mountpoint} + mkdir -p /live/findiso + mount -t ${fstype} -o ro,noatime "${devname}" /live/findiso + +# PATCH + #################################################### + +# If "custom_mountmode" was set, remount /live/findiso + +if [ -n "${custom_mountmode}" ]; then + + if echo ${custom_mountmode}|grep -q "umask" && [ "$fstype" != "vfat" ]; then + custom_mountopts=$(echo ${custom_mountmode}|sed 's/,umask.*//') + else + custom_mountopts=$custom_mountmode + fi + +umount /live/findiso +mount -t ${fstype} -o ${custom_mountopts} "${devname}" /live/findiso || continue + +fi + +# PATCH end ################################################## + + loopdevname=$(setup_loop "/live/findiso/${FINDISO}" "loop" "/sys/block/loop*" 0 "") + devname="${loopdevname}" + mount -t iso9660 -o ro,noatime "${devname}" ${mountpoint} + else + umount ${mountpoint} + fi + fi + + if is_live_path ${mountpoint} && \ + ([ "${skip_uuid_check}" ] || matches_uuid ${mountpoint}) + then + echo ${mountpoint} + return 0 + else + umount ${mountpoint} 2>/dev/null + fi + fi + + if [ -n "${LIVE_MEDIA_OFFSET}" ] + then + losetup -d "${loopdevname}" + fi + + return 1 +} + +find_livefs () +{ + timeout="${1}" + + # don't start autodetection before timeout has expired + if [ -n "${LIVE_MEDIA_TIMEOUT}" ] + then + if [ "${timeout}" -lt "${LIVE_MEDIA_TIMEOUT}" ] + then + return 1 + fi + fi + + # first look at the one specified in the command line + case "${LIVE_MEDIA}" in + removable-usb) + for sysblock in $(removable_usb_dev "sys") + do + for dev in $(subdevices "${sysblock}") + do + if check_dev "${dev}" + then + return 0 + fi + done + done + return 1 + ;; + + removable) + for sysblock in $(removable_dev "sys") + do + for dev in $(subdevices "${sysblock}") + do + if check_dev "${dev}" + then + return 0 + fi + done + done + return 1 + ;; + + *) + if [ ! -z "${LIVE_MEDIA}" ] + then + if check_dev "null" "${LIVE_MEDIA}" "skip_uuid_check" + then + return 0 + fi + fi + ;; + esac + + # or do the scan of block devices + # prefer removable devices over non-removable devices, so scan them first + devices_to_scan="$(removable_dev 'sys') $(non_removable_dev 'sys')" + + for sysblock in $devices_to_scan + do + devname=$(sys2dev "${sysblock}") + [ -e "$devname" ] || continue + fstype=$(get_fstype "${devname}") + + if /lib/udev/cdrom_id ${devname} > /dev/null + then + if check_dev "null" "${devname}" + then + return 0 + fi + elif is_nice_device "${sysblock}" + then + for dev in $(subdevices "${sysblock}") + do + if check_dev "${dev}" + then + return 0 + fi + done + elif [ "${fstype}" = "squashfs" -o \ + "${fstype}" = "btrfs" -o \ + "${fstype}" = "ext2" -o \ + "${fstype}" = "ext3" -o \ + "${fstype}" = "ext4" -o \ + "${fstype}" = "jffs2" ] + then + # This is an ugly hack situation, the block device has + # an image directly on it. It's hopefully + # live-boot, so take it and run with it. + ln -s "${devname}" "${devname}.${fstype}" + echo "${devname}.${fstype}" + return 0 + fi + done + + return 1 +} + +really_export () +{ + STRING="${1}" + VALUE="$(eval echo -n \${$STRING})" + + if [ -f /live.vars ] && grep -sq "export ${STRING}" /live.vars + then + sed -i -e 's/\('${STRING}'=\).*$/\1'${VALUE}'/' /live.vars + else + echo "export ${STRING}=\"${VALUE}\"" >> /live.vars + fi + + eval export "${STRING}"="${VALUE}" +} + +is_in_list_separator_helper () +{ + local sep element list + sep=${1} + shift + element=${1} + shift + list=${*} + echo ${list} | grep -qe "^\(.*${sep}\)\?${element}\(${sep}.*\)\?$" +} + +is_in_space_sep_list () +{ + local element + element=${1} + shift + is_in_list_separator_helper "[[:space:]]" "${element}" "${*}" +} + +is_in_comma_sep_list () +{ + local element + element=${1} + shift + is_in_list_separator_helper "," "${element}" "${*}" +} + +sys2dev () +{ + sysdev=${1#/sys} + echo "/dev/$($udevinfo -q name -p ${sysdev} 2>/dev/null|| echo ${sysdev##*/})" +} + +subdevices () +{ + sysblock=${1} + r="" + + for dev in "${sysblock}"/* "${sysblock}" + do + if [ -e "${dev}/dev" ] + then + r="${r} ${dev}" + fi + done + + echo ${r} +} + +storage_devices() +{ + black_listed_devices="${1}" + white_listed_devices="${2}" + + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "loop|ram|fd") + do + fulldevname=$(sys2dev "${sysblock}") + + if is_in_space_sep_list ${fulldevname} ${black_listed_devices} || \ + [ -n "${white_listed_devices}" ] && \ + ! is_in_space_sep_list ${fulldevname} ${white_listed_devices} + then + # skip this device entirely + continue + fi + + for dev in $(subdevices "${sysblock}") + do + devname=$(sys2dev "${dev}") + + if is_in_space_sep_list ${devname} ${black_listed_devices} + then + # skip this subdevice + continue + else + echo "${devname}" + fi + done + done +} + +is_supported_fs () +{ + fstype="${1}" + + # Validate input first + if [ -z "${fstype}" ] + then + return 1 + fi + + # Try to look if it is already supported by the kernel + if grep -q ${fstype} /proc/filesystems + then + return 0 + else + # Then try to add support for it the gentle way using the initramfs capabilities + modprobe ${fstype} + if grep -q ${fstype} /proc/filesystems + then + return 0 + # Then try the hard way if /root is already reachable + else + kmodule="/root/lib/modules/`uname -r`/${fstype}/${fstype}.ko" + if [ -e "${kmodule}" ] + then + insmod "${kmodule}" + if grep -q ${fstype} /proc/filesystems + then + return 0 + fi + fi + fi + fi + + return 1 +} + +get_fstype () +{ + /sbin/blkid -s TYPE -o value $1 2>/dev/null +} + +where_is_mounted () +{ + device=${1} + # return first found + grep -m1 "^${device} " /proc/mounts | cut -f2 -d ' ' +} + +trim_path () +{ + # remove all unnecessary /:s in the path, including last one (except + # if path is just "/") + echo ${1} | sed 's|//\+|/|g' | sed 's|^\(.*[^/]\)/$|\1|' +} + +what_is_mounted_on () +{ + local dir + dir="$(trim_path ${1})" + grep -m1 "^[^ ]\+ ${dir} " /proc/mounts | cut -d' ' -f1 +} + +chown_ref () +{ + local reference targets owner + reference="${1}" + shift + targets=${@} + owner=$(stat -c %u:%g "${reference}") + chown -h ${owner} ${targets} +} + +chmod_ref () +{ + local reference targets rights + reference="${1}" + shift + targets=${@} + rights=$(stat -c %a "${reference}") + chmod ${rights} ${targets} +} + +lastline () +{ + while read lines + do + line=${lines} + done + + echo "${line}" +} + +base_path () +{ + testpath="${1}" + mounts="$(awk '{print $2}' /proc/mounts)" + testpath="$(busybox realpath ${testpath})" + + while true + do + if echo "${mounts}" | grep -qs "^${testpath}" + then + set -- $(echo "${mounts}" | grep "^${testpath}" | lastline) + echo ${1} + break + else + testpath=$(dirname $testpath) + fi + done +} + +fs_size () +{ + # Returns used/free fs kbytes + 5% more + # You could pass a block device as ${1} or the mount point as ${2} + + dev="${1}" + mountp="${2}" + used="${3}" + + if [ -z "${mountp}" ] + then + mountp="$(where_is_mounted ${dev})" + + if [ -z "${mountp}" ] + then + mountp="/mnt/tmp_fs_size" + + mkdir -p "${mountp}" + mount -t $(get_fstype "${dev}") -o ro "${dev}" "${mountp}" || log_warning_msg "cannot mount -t $(get_fstype ${dev}) -o ro ${dev} ${mountp}" + + doumount=1 + fi + fi + + if [ "${used}" = "used" ] + then + size=$(du -ks ${mountp} | cut -f1) + size=$(expr ${size} + ${size} / 20 ) # FIXME: 5% more to be sure + else + # free space + size="$(df -kP | grep -s ${mountp} | awk '{print $4}')" + fi + + if [ -n "${doumount}" ] + then + umount "${mountp}" || log_warning_msg "cannot umount ${mountp}" + rmdir "${mountp}" + fi + + echo "${size}" +} + +load_keymap () +{ + # Load custom keymap + if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ] + then + loadkeys --quiet /etc/boottime.kmap.gz + fi +} + +setup_loop () +{ + local fspath module pattern offset encryption readonly + fspath=${1} + module=${2} + pattern=${3} + offset=${4} + encryption=${5} + readonly=${6} + + # the output of setup_loop is evaluated in other functions, + # modprobe leaks kernel options like "libata.dma=0" + # as "options libata dma=0" on stdout, causing serious + # problems therefor, so instead always avoid output to stdout + modprobe -q -b "${module}" 1>/dev/null + + udevadm settle + + for loopdev in ${pattern} + do + if [ "$(cat ${loopdev}/size)" -eq 0 ] + then + dev=$(sys2dev "${loopdev}") + options='' + + if [ -n "${readonly}" ] + then + if losetup --help 2>&1 | grep -q -- "-r\b" + then + options="${options} -r" + fi + fi + + if [ -n "${offset}" ] && [ 0 -lt "${offset}" ] + then + options="${options} -o ${offset}" + fi + + if [ -z "${encryption}" ] + then + losetup ${options} "${dev}" "${fspath}" + else + # Loop AES encryption + while true + do + load_keymap + + echo -n "Enter passphrase for root filesystem: " >&6 + read -s passphrase + echo "${passphrase}" > /tmp/passphrase + unset passphrase + exec 9&6 + read answer + + if [ "$(echo "${answer}" | cut -b1 | tr A-Z a-z)" = "n" ] + then + unset answer + break + fi + done + fi + + echo "${dev}" + return 0 + fi + done + + panic "No loop devices available" +} + +try_mount () +{ + dev="${1}" + mountp="${2}" + opts="${3}" + fstype="${4}" + + old_mountp="$(where_is_mounted ${dev})" + + if [ -n "${old_mountp}" ] + then + if [ "${opts}" != "ro" ] + then + mount -o remount,"${opts}" "${dev}" "${old_mountp}" || panic "Remounting ${dev} ${opts} on ${old_mountp} failed" + fi + + mount -o bind "${old_mountp}" "${mountp}" || panic "Cannot bind-mount ${old_mountp} on ${mountp}" + else + if [ -z "${fstype}" ] + then + fstype=$(get_fstype "${dev}") + fi + mount -t "${fstype}" -o "${opts}" "${dev}" "${mountp}" || \ + ( echo "SKIPPING: Cannot mount ${dev} on ${mountp}, fstype=${fstype}, options=${opts}" > boot.log && return 0 ) + fi +} + +# Try to mount $device to the place expected by live-boot. If $device +# is already mounted somewhere, move it to the expected place. If +# we're only probing $device (to check if it has custom persistence) +# $probe should be set, which suppresses warnings upon failure. On +# success, print the mount point for $device. +mount_persistence_media () +{ + local device probe backing old_backing fstype mount_opts + device=${1} + probe=${2} + + backing="/live/persistence/$(basename ${device})" + + mkdir -p "${backing}" + old_backing="$(where_is_mounted ${device})" + +# PATCH + #################################################### + +# (only if) "custom_mountmode" is set RW +# set ${backing} and stop if live-media device is already mounted + +if echo ${custom_mountmode}|grep -q rw; then + + if [ "${old_backing}" = "/live/findiso" ] || [ "${old_backing}" = "/live/fromiso" ] || [ "${old_backing}" = "/live/medium" ] + then + backing=${old_backing} + echo ${backing} + return 0 + fi +fi + +# PATCH END ################################################# + + if [ -z "${old_backing}" ] + then + fstype="$(get_fstype ${device})" + mount_opts="rw,noatime" + if [ -n "${PERSISTENCE_READONLY}" ] + then + mount_opts="ro,noatime" + fi + if mount -t "${fstype}" -o "${mount_opts}" "${device}" "${backing}" >/dev/null + then + echo ${backing} + return 0 + else + [ -z "${probe}" ] && log_warning_msg "Failed to mount persistence media ${device}" + rmdir "${backing}" + return 1 + fi + elif [ "${backing}" != "${old_backing}" ] + then + if mount --move ${old_backing} ${backing} >/dev/null + then + echo ${backing} + return 0 + else + [ -z "${probe}" ] && log_warning_msg "Failed to move persistence media ${device}" + rmdir "${backing}" + return 1 + fi + else + # This means that $device has already been mounted on + # the place expected by live-boot, so we're done. + echo ${backing} + return 0 + fi +} + +close_persistence_media () +{ + local device backing + device=${1} + backing="$(where_is_mounted ${device})" + + if [ -d "${backing}" ] + then + umount "${backing}" >/dev/null 2>&1 + rmdir "${backing}" >/dev/null 2>&1 + fi + + if is_active_luks_mapping ${device} + then + /sbin/cryptsetup luksClose ${device} + fi +} + +open_luks_device () +{ + dev="${1}" + name="$(basename ${dev})" + opts="--key-file=-" + if [ -n "${PERSISTENCE_READONLY}" ] + then + opts="${opts} --readonly" + fi + + if /sbin/cryptsetup status "${name}" >/dev/null 2>&1 + then + re="^[[:space:]]*device:[[:space:]]*\([^[:space:]]*\)$" + opened_dev=$(cryptsetup status ${name} 2>/dev/null | grep "${re}" | sed "s|${re}|\1|") + if [ "${opened_dev}" = "${dev}" ] + then + luks_device="/dev/mapper/${name}" + echo ${luks_device} + return 0 + else + log_warning_msg "Cannot open luks device ${dev} since ${opened_dev} already is opened with its name" + return 1 + fi + fi + + load_keymap + + while true + do + /lib/cryptsetup/askpass "Enter passphrase for ${dev}: " | \ + /sbin/cryptsetup -T 1 luksOpen ${dev} ${name} ${opts} + + if [ 0 -eq ${?} ] + then + luks_device="/dev/mapper/${name}" + echo ${luks_device} + return 0 + fi + + echo >&6 + echo -n "There was an error decrypting ${dev} ... Retry? [Y/n] " >&6 + read answer + + if [ "$(echo "${answer}" | cut -b1 | tr A-Z a-z)" = "n" ] + then + return 2 + fi + done +} + +get_gpt_name () +{ + local dev + dev="${1}" + /sbin/blkid -s PART_ENTRY_NAME -p -o value ${dev} 2>/dev/null +} + +is_gpt_device () +{ + local dev + dev="${1}" + [ "$(/sbin/blkid -s PART_ENTRY_SCHEME -p -o value ${dev} 2>/dev/null)" = "gpt" ] +} + +probe_for_gpt_name () +{ + local overlays dev gpt_dev gpt_name + overlays="${1}" + dev="${2}" + + gpt_dev="${dev}" + if is_active_luks_mapping ${dev} + then + # if $dev is an opened luks device, we need to check + # GPT stuff on the backing device + gpt_dev=$(get_luks_backing_device "${dev}") + fi + + if ! is_gpt_device ${gpt_dev} + then + return + fi + + gpt_name=$(get_gpt_name ${gpt_dev}) + for label in ${overlays} + do + if [ "${gpt_name}" = "${label}" ] + then + echo "${label}=${dev}" + fi + done +} + +probe_for_fs_label () +{ + local overlays dev + overlays="${1}" + dev="${2}" + + for label in ${overlays} + do + if [ "$(/sbin/blkid -s LABEL -o value $dev 2>/dev/null)" = "${label}" ] + then + echo "${label}=${dev}" + fi + done +} + +probe_for_file_name () +{ + local overlays dev ret backing + overlays="${1}" + dev="${2}" + + ret="" + backing="$(mount_persistence_media ${dev} probe)" + if [ -z "${backing}" ] + then + return + fi + + for label in ${overlays} + do + path=${backing}/${PERSISTENCE_PATH}${label} + if [ -f "${path}" ] + then + local loopdev + loopdev=$(setup_loop "${path}" "loop" "/sys/block/loop*") + ret="${ret} ${label}=${loopdev}" + fi + done + + if [ -n "${ret}" ] + then + echo ${ret} + else + # unmount and remove mountpoint + umount ${backing} > /dev/null 2>&1 || true + rmdir ${backing} > /dev/null 2>&1 || true + fi +} + +find_persistence_media () +{ + # Scans devices for overlays, and returns a whitespace + # separated list of how to use them. Only overlays with a partition + # label or file name in ${overlays} are returned. + # + # When scanning a LUKS device, the user will be asked to enter the + # passphrase; on failure to enter it, or if no persistence partitions + # or files were found, the LUKS device is closed. + # + # For all other cases (overlay partition and overlay file) the + # return value is "${label}=${device}", where ${device} a device that + # can mount the content. In the case of an overlay file, the device + # containing the file will remain mounted as a side-effect. + # + # No devices in ${black_listed_devices} will be scanned, and if + # ${white_list_devices} is non-empty, only devices in it will be + # scanned. + + local overlays white_listed_devices ret black_listed_devices + overlays="${1}" + white_listed_devices="${2}" + ret="" + + black_listed_devices="$(what_is_mounted_on /live/medium)" + +# PATCH + #################################################### + +# Not to do with custom_mountmode: +# Fix for live-media partition getting remounted on /live/persistence/ when using luks persistence file +# Add these to the black_listed_devices + +black_listed_devices="$(what_is_mounted_on /live/medium) $(what_is_mounted_on /live/fromiso) $(what_is_mounted_on /live/findiso)" + +# If custom_mountmode is active, reset the blacklist.. A persistence file might be there + +if echo ${custom_mountmode}|grep -q rw; then +black_listed_devices="" +fi + +# PATCH END ################################################## + + for dev in $(storage_devices "${black_listed_devices}" "${white_listed_devices}") + do + local result luks_device + result="" + + luks_device="" + # Check if it's a luks device; we'll have to open the device + # in order to probe any filesystem it contains, like we do + # below. activate_custom_mounts() also depends on that any luks + # device already has been opened. + if is_in_comma_sep_list luks ${PERSISTENCE_ENCRYPTION} && is_luks_partition ${dev} + then + if luks_device=$(open_luks_device "${dev}") + then + dev="${luks_device}" + else + # skip $dev since we failed/chose not to open it + continue + fi + elif ! is_in_comma_sep_list none ${PERSISTENCE_ENCRYPTION} + then + # skip $dev since we don't allow unencrypted storage + continue + fi + + # Probe for matching GPT partition names or filesystem labels + if is_in_comma_sep_list filesystem ${PERSISTENCE_STORAGE} + then + result=$(probe_for_gpt_name "${overlays}" ${dev}) + if [ -n "${result}" ] + then + ret="${ret} ${result}" + continue + fi + + result=$(probe_for_fs_label "${overlays}" ${dev}) + if [ -n "${result}" ] + then + ret="${ret} ${result}" + continue + fi + fi + + # Probe for files with matching name on mounted partition + if is_in_comma_sep_list file ${PERSISTENCE_STORAGE} + then + result=$(probe_for_file_name "${overlays}" ${dev}) + if [ -n "${result}" ] + then + +# PATCH + ################################################### + +# Fix for luks persistence file (Peter Schaefer) + + local loopdevice + loopdevice=${result##*=} + if is_in_comma_sep_list luks ${PERSISTENCE_ENCRYPTION} && is_luks_partition ${loopdevice} + then + local luksfile + luksfile="" + if luksfile=$(open_luks_device "${loopdevice}") + then + result=${result%%=*} + result="${result}=${luksfile}" + else + losetup -d $loopdevice + result="" + fi + fi + +# PATCH END ################################################## + + ret="${ret} ${result}" + continue + fi + fi + + # Close luks device if it isn't used + if [ -z "${result}" ] && [ -n "${luks_device}" ] && is_active_luks_mapping "${luks_device}" + then + /sbin/cryptsetup luksClose "${luks_device}" + fi + done + + if [ -n "${ret}" ] + then + echo ${ret} + fi +} + +get_mac () +{ + mac="" + + for adaptor in /sys/class/net/* + do + status="$(cat ${adaptor}/iflink)" + + if [ "${status}" -eq 2 ] + then + mac="$(cat ${adaptor}/address)" + mac="$(echo ${mac} | sed 's/:/-/g' | tr '[a-z]' '[A-Z]')" + fi + done + + echo ${mac} +} + +is_luks_partition () +{ + device="${1}" + /sbin/cryptsetup isLuks "${device}" 1>/dev/null 2>&1 +} + +is_active_luks_mapping () +{ + device="${1}" + /sbin/cryptsetup status "${device}" 1>/dev/null 2>&1 +} + +get_luks_backing_device () +{ + device=${1} + cryptsetup status ${device} 2> /dev/null | \ + awk '{if ($1 == "device:") print $2}' +} + +removable_dev () +{ + output_format="${1}" + want_usb="${2}" + ret= + + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)") + do + dev_ok= + if [ "$(cat ${sysblock}/removable)" = "1" ] + then + if [ -z "${want_usb}" ] + then + dev_ok="true" + else + if readlink ${sysblock} | grep -q usb + then + dev_ok="true" + fi + fi + fi + + if [ "${dev_ok}" = "true" ] + then + case "${output_format}" in + sys) + ret="${ret} ${sysblock}" + ;; + *) + devname=$(sys2dev "${sysblock}") + ret="${ret} ${devname}" + ;; + esac + fi + done + + echo "${ret}" +} + +removable_usb_dev () +{ + output_format="${1}" + + removable_dev "${output_format}" "want_usb" +} + +non_removable_dev () +{ + output_format="${1}" + ret= + + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)") + do + if [ "$(cat ${sysblock}/removable)" = "0" ] + then + case "${output_format}" in + sys) + ret="${ret} ${sysblock}" + ;; + *) + devname=$(sys2dev "${sysblock}") + ret="${ret} ${devname}" + ;; + esac + fi + done + + echo "${ret}" +} + +link_files () +{ + # create source's directory structure in dest, and recursively + # create symlinks in dest to to all files in source. if mask + # is non-empty, remove mask from all source paths when + # creating links (will be necessary if we change root, which + # live-boot normally does (into $rootmnt)). + local src_dir dest_dir src_mask + + # remove multiple /:s and ensure ending on / + src_dir="$(trim_path ${1})/" + dest_dir="$(trim_path ${2})/" + src_mask="${3}" + + # This check can only trigger on the inital, non-recursive call since + # we create the destination before recursive calls + if [ ! -d "${dest_dir}" ] + then + log_warning_msg "Must link_files into a directory" + return + fi + + find "${src_dir}" -mindepth 1 -maxdepth 1 | \ + while read src + do + local dest final_src + dest="${dest_dir}$(basename "${src}")" + if [ -d "${src}" ] + then + if [ -z "$(ls -A "${src}")" ] + then + continue + fi + if [ ! -d "${dest}" ] + then + mkdir -p "${dest}" + chown_ref "${src}" "${dest}" + chmod_ref "${src}" "${dest}" + fi + link_files "${src}" "${dest}" "${src_mask}" + else + final_src=${src} + if [ -n "${src_mask}" ] + then + final_src="$(echo ${final_src} | sed "s|^${src_mask}||")" + fi + rm -rf "${dest}" 2> /dev/null + ln -s "${final_src}" "${dest}" + chown_ref "${src}" "${dest}" + fi + done +} + +do_union () +{ + local unionmountpoint unionrw unionro + unionmountpoint="${1}" # directory where the union is mounted + shift + unionrw="${1}" # branch where the union changes are stored + shift + unionro="${*}" # space separated list of read-only branches (optional) + + case "${UNIONTYPE}" in + aufs) + rw_opt="rw" + ro_opt="rr+wh" + noxino_opt="noxino" + ;; + + unionfs-fuse) + rw_opt="RW" + ro_opt="RO" + ;; + + *) + rw_opt="rw" + ro_opt="ro" + ;; + esac + + case "${UNIONTYPE}" in + unionfs-fuse) + unionmountopts="-o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid" + unionmountopts="${unionmountopts} ${unionrw}=${rw_opt}" + if [ -n "${unionro}" ] + then + for rofs in ${unionro} + do + unionmountopts="${unionmountopts}:${rofs}=${ro_opt}" + done + fi + ( sysctl -w fs.file-max=391524 ; ulimit -HSn 16384 + unionfs-fuse ${unionmountopts} "${unionmountpoint}" ) && \ + ( mkdir -p /run/sendsigs.omit.d + pidof unionfs-fuse >> /run/sendsigs.omit.d/unionfs-fuse || true ) + ;; + + overlayfs) + # XXX: can multiple unionro be used? (overlayfs only handles two dirs, but perhaps they can be chained?) + # XXX: and can unionro be optional? i.e. can overlayfs skip lowerdir? + if echo ${unionro} | grep -q " " + then + panic "Multiple lower filesystems are currently not supported with overlayfs (unionro = ${unionro})." + elif [ -z "${unionro}" ] + then + panic "Overlayfs needs at least one lower filesystem (read-only branch)." + fi + unionmountopts="-o noatime,lowerdir=${unionro},upperdir=${unionrw}" + mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}" + ;; + + *) + unionmountopts="-o noatime,${noxino_opt},dirs=${unionrw}=${rw_opt}" + if [ -n "${unionro}" ] + then + for rofs in ${unionro} + do + unionmountopts="${unionmountopts}:${rofs}=${ro_opt}" + done + fi + mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}" + ;; + esac +} + +get_custom_mounts () +{ + # Side-effect: leaves $devices with persistence.conf mounted in /live/persistence + # Side-effect: prints info to file $custom_mounts + + local custom_mounts devices bindings links + custom_mounts=${1} + shift + devices=${@} + + bindings="/tmp/bindings.list" + links="/tmp/links.list" + rm -rf ${bindings} ${links} 2> /dev/null + + for device in ${devices} + do + if [ ! -b "${device}" ] + then + continue + fi + + local device_name backing include_list + device_name="$(basename ${device})" + backing=$(mount_persistence_media ${device}) + if [ -z "${backing}" ] + then + continue + fi + + if [ -r "${backing}/${persistence_list}" ] + then + include_list="${backing}/${persistence_list}" + elif [ -r "${backing}/${old_persistence_list}" ] + then + include_list="${backing}/${old_persistence_list}" + else + continue + fi + + if [ -n "${DEBUG}" ] && [ -e "${include_list}" ] + then + cp ${include_list} /live/persistence/${persistence_list}.${device_name} + fi + + while read dir options # < ${include_list} + do + if echo ${dir} | grep -qe "^[[:space:]]*\(#.*\)\?$" + then + # skipping empty or commented lines + continue + fi + + if trim_path ${dir} | grep -q -e "^[^/]" -e "^/lib" -e "^/lib/live\(/.*\)\?$" -e "^/\(.*/\)\?\.\.\?\(/.*\)\?$" + then + log_warning_msg "Skipping unsafe custom mount ${dir}: must be an absolute path containing neither the \".\" nor \"..\" special dirs, and cannot be \"/lib\", or \"/lib/live\" or any of its sub-directories." + continue + fi + + local opt_source opt_link source full_source full_dest + opt_source="" + opt_link="" + for opt in $(echo ${options} | tr ',' ' '); + do + case "${opt}" in + source=*) + opt_source=${opt#source=} + ;; + link) + opt_link="true" + ;; + union|bind) + ;; + *) + log_warning_msg "Skipping custom mount with unkown option: ${opt}" + continue 2 + ;; + esac + done + + source="${dir}" + if [ -n "${opt_source}" ] + then + if echo ${opt_source} | grep -q -e "^/" -e "^\(.*/\)\?\.\.\?\(/.*\)\?$" && [ "${opt_source}" != "." ] + then + log_warning_msg "Skipping unsafe custom mount with option source=${opt_source}: must be either \".\" (the media root) or a relative path w.r.t. the media root that contains neither comas, nor the special \".\" and \"..\" path components" + continue + else + source="${opt_source}" + fi + fi + + full_source="$(trim_path ${backing}/${source})" + full_dest="$(trim_path ${rootmnt}/${dir})" + if [ -n "${opt_link}" ] + then + echo "${device} ${full_source} ${full_dest} ${options}" >> ${links} + else + echo "${device} ${full_source} ${full_dest} ${options}" >> ${bindings} + fi + done < ${include_list} + done + + # We sort the list according to destination so we're sure that + # we won't hide a previous mount. We also ignore duplicate + # destinations in a more or less arbitrary way. + [ -e "${bindings}" ] && sort -k3 -sbu ${bindings} >> ${custom_mounts} && rm ${bindings} + + # After all mounts are considered we add symlinks so they + # won't be hidden by some mount. + [ -e "${links}" ] && cat ${links} >> ${custom_mounts} && rm ${links} + + # We need to make sure that no two custom mounts have the same sources + # or are nested; if that is the case, too much weird stuff can happen. + local prev_source prev_dest + prev_source="impossible source" # first iteration must not match + prev_dest="" + # This sort will ensure that a source /a comes right before a source + # /a/b so we only need to look at the previous source + sort -k2 -b ${custom_mounts} | + while read device source dest options + do + if echo ${source} | grep -qe "^${prev_source}\(/.*\)\?$" + then + panic "Two persistence mounts have the same or nested sources: ${source} on ${dest}, and ${prev_source} on ${prev_dest}" + fi + prev_source=${source} + prev_dest=${dest} + done +} + +activate_custom_mounts () +{ + local custom_mounts used_devices + custom_mounts="${1}" # the ouput from get_custom_mounts() + used_devices="" + + while read device source dest options # < ${custom_mounts} + do + local opt_bind opt_link opt_union + opt_bind="true" + opt_link="" + opt_union="" + for opt in $(echo ${options} | tr ',' ' '); + do + case "${opt}" in + bind) + opt_bind="true" + unset opt_link opt_union + ;; + link) + opt_link="true" + unset opt_bind opt_union + ;; + union) + opt_union="true" + unset opt_bind opt_link + ;; + esac + done + + if [ -n "$(what_is_mounted_on "${dest}")" ] + then + if [ "${dest}" = "${rootmnt}" ] + then + umount "${dest}" + else + log_warning_msg "Skipping custom mount ${dest}: $(what_is_mounted_on "${dest}") is already mounted there" + continue + fi + fi + + if [ ! -d "${dest}" ] + then + # create the destination and delete existing files in + # its path that are in the way + path="/" + for dir in $(echo ${dest} | sed -e 's|/\+| |g') + do + path=$(trim_path ${path}/${dir}) + if [ -f ${path} ] + then + rm -f ${path} + fi + if [ ! -e ${path} ] + then + mkdir -p ${path} + if echo ${path} | grep -qe "^${rootmnt}/*home/[^/]\+" + then + # if ${dest} is in /home try fixing proper ownership by assuming that the intended user is the first, which is usually the case + # FIXME: this should really be handled by live-config since we don't know for sure which uid a certain user has until then + chown 1000:1000 ${path} + fi + fi + done + fi + + # if ${source} doesn't exist on our persistence media + # we bootstrap it with $dest from the live filesystem. + # this both makes sense and is critical if we're + # dealing with /etc or other system dir. + if [ ! -d "${source}" ] + then + if [ -n "${PERSISTENCE_READONLY}" ] + then + continue + elif [ -n "${opt_union}" ] || [ -n "${opt_link}" ] + then + # unions and don't need to be bootstrapped + # link dirs can't be bootstrapped in a sensible way + mkdir -p "${source}" + chown_ref "${dest}" "${source}" + chmod_ref "${dest}" "${source}" + elif [ -n "${opt_bind}" ] + then + # ensure that $dest is not copied *into* $source + mkdir -p "$(dirname ${source})" + cp -a "${dest}" "${source}" + fi + fi + + # XXX: If CONFIG_AUFS_ROBR is added to the Debian kernel we can + # ignore the loop below and set rootfs_dest_backing=$dest + local rootfs_dest_backing + rootfs_dest_backing="" + if [ -n "${opt_link}"] + then + for d in /live/rootfs/* + do + if [ -n "${rootmnt}" ] + then + fs="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")" + else + fs="${d}/${dest}" + fi + if [ -d "${fs}" ] + then + rootfs_dest_backing="${rootfs_dest_backing} ${fs}" + fi + done + fi + + local cow_dir links_source + if [ -n "${opt_link}" ] && [ -z "${PERSISTENCE_READONLY}" ] + then + link_files ${source} ${dest} ${rootmnt} + elif [ -n "${opt_link}" ] && [ -n "${PERSISTENCE_READONLY}" ] + then + mkdir -p ${rootmnt}/lib/live/mount/persistence + links_source=$(mktemp -d ${rootmnt}/lib/live/mount/persistence/links-source-XXXXXX) + chown_ref ${source} ${links_source} + chmod_ref ${source} ${links_source} + # We put the cow dir in the below strange place to + # make it absolutely certain that the link source + # has its own directory and isn't nested with some + # other custom mount (if so that mount's files would + # be linked, causing breakage. + cow_dir="/live/overlay/lib/live/mount/persistence/$(basename ${links_source})" + mkdir -p ${cow_dir} + chown_ref "${source}" "${cow_dir}" + chmod_ref "${source}" "${cow_dir}" + do_union ${links_source} ${cow_dir} ${source} ${rootfs_dest_backing} + link_files ${links_source} ${dest} ${rootmnt} + elif [ -n "${opt_union}" ] && [ -z "${PERSISTENCE_READONLY}" ] + then + do_union ${dest} ${source} ${rootfs_dest_backing} + elif [ -n "${opt_bind}" ] && [ -z "${PERSISTENCE_READONLY}" ] + then + mount --bind "${source}" "${dest}" + elif [ -n "${opt_bind}" -o -n "${opt_union}" ] && [ -n "${PERSISTENCE_READONLY}" ] + then + # bind-mount and union mount are handled the same + # in read-only mode, but note that rootfs_dest_backing + # is non-empty (and necessary) only for unions + cow_dir="/live/overlay/${dest}" + if [ -e "${cow_dir}" ] && [ -z "${opt_link}" ] + then + # If an earlier custom mount has files here + # it will "block" the current mount's files + # which is undesirable + rm -rf "${cow_dir}" + fi + mkdir -p ${cow_dir} + chown_ref "${source}" "${cow_dir}" + chmod_ref "${source}" "${cow_dir}" + do_union ${dest} ${cow_dir} ${source} ${rootfs_dest_backing} + fi + + PERSISTENCE_IS_ON="1" + export PERSISTENCE_IS_ON + + if echo ${used_devices} | grep -qve "^\(.* \)\?${device}\( .*\)\?$" + then + used_devices="${used_devices} ${device}" + fi + done < ${custom_mounts} + + echo ${used_devices} +} + +is_mountpoint () +{ + directory="$1" + + [ $(stat -fc%d:%D "${directory}") != $(stat -fc%d:%D "${directory}/..") ] +}