[Fedora-livecd-list] 7 commits - config/livecd-fedora-base-desktop.ks tools/livecd-iso-to-disk.sh
Jeremy Katz
katzj at fedoraproject.org
Fri Jun 6 01:49:39 UTC 2008
config/livecd-fedora-base-desktop.ks | 54 +++++++++++++++++++++-
tools/livecd-iso-to-disk.sh | 83 ++++++++++++++++++++++++++++++++---
2 files changed, 130 insertions(+), 7 deletions(-)
New commits:
commit 8fb9fe7a9a8017d1195c59e5a3cae27621a48c1e
Author: Jeremy Katz <katzj at redhat.com>
Date: Mon Jun 2 20:16:39 2008 -0400
Allow adding extra kernel args to the syslinux.cfg with --extra-kernel-args
Pass additional options to be appended to the kernel with --extra-kernel-args
so that you can script running livecd-iso-to-disk pointing to a persistent
/home more easily
diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index 8ef1194..7468cbb 100644
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -199,6 +199,10 @@ while [ $# -gt 2 ]; do
--reset-mbr|--resetmbr)
resetmbr=1
;;
+ --extra-kernel-args)
+ kernelargs=$2
+ shift
+ ;;
*)
usage
;;
@@ -332,6 +336,7 @@ cp $CDMNT/isolinux/* $USBMNT/$SYSLINUXPATH
echo "Updating boot config file"
# adjust label and fstype
sed -i -e "s/CDLABEL=[^ ]*/$USBLABEL/" -e "s/rootfstype=[^ ]*/rootfstype=$USBFS/" $USBMNT/$SYSLINUXPATH/isolinux.cfg
+if [ -n "$kernelargs" ]; then sed -i -e "s/liveimg/liveimg ${kernelargs}/" $USBMNT/$SYSLINUXPATH/isolinux.cfg ; fi
if [ -n "$overlaysizemb" ]; then
echo "Initializing persistent overlay file"
commit dbc2395d810db84efbbaca214034d0c115078ffc
Author: Jeremy Katz <katzj at redhat.com>
Date: Mon Jun 2 20:13:55 2008 -0400
And support specifying the persistent store by label or uuid
If you specify persistenthome=LABEL=foo you will get the device labeled
as "foo" mounted as /home rather than LiveOS/home.img. Similarly for UUID
diff --git a/config/livecd-fedora-base-desktop.ks b/config/livecd-fedora-base-desktop.ks
index 84e2de8..0bafe3b 100644
--- a/config/livecd-fedora-base-desktop.ks
+++ b/config/livecd-fedora-base-desktop.ks
@@ -101,10 +101,15 @@ if ! strstr "\`cat /proc/cmdline\`" noswap && [ -n "\$swaps" ] ; then
fi
mountPersistentHome() {
- # if we're not given a block device, then make it one
+ # support label/uuid
+ if [ "\${homedev##LABEL=}" != "\${homedev}" -o "\${homedev##UUID=}" != "\${homedev}" ]; then
+ homedev=\`/sbin/blkid -o device -t "\$homedev"\`
+ fi
+
+ # if we're given a file rather than a blockdev, loopback it
if [ ! -b "\$homedev" ]; then
loopdev=\`losetup -f\`
- if [ "\$\{homedev##/mnt/live\}" != "\$\{homedev\}" ]; then
+ if [ "\${homedev##/mnt/live}" != "\${homedev}" ]; then
action "Remounting live store r/w" mount -o remount,rw /mnt/live
fi
losetup \$loopdev \$homedev
commit 9ae29165b823621a5107b97025166b48854559fe
Author: Jeremy Katz <katzj at redhat.com>
Date: Mon Jun 2 20:11:18 2008 -0400
Support specifying the persistent /home
Specifying persistenthome=/path/to/device on the kernel command line will
now prefer using that as opposed to anything else for the persistent /home
diff --git a/config/livecd-fedora-base-desktop.ks b/config/livecd-fedora-base-desktop.ks
index b364803..84e2de8 100644
--- a/config/livecd-fedora-base-desktop.ks
+++ b/config/livecd-fedora-base-desktop.ks
@@ -94,29 +94,54 @@ fi
# enable swaps unless requested otherwise
swaps=\`blkid -t TYPE=swap -o device\`
-if ! strstr "\`cat /proc/cmdline\`" noswap -a [ -n "\$swaps" ] ; then
+if ! strstr "\`cat /proc/cmdline\`" noswap && [ -n "\$swaps" ] ; then
for s in \$swaps ; do
action "Enabling swap partition \$s" swapon \$s
done
fi
mountPersistentHome() {
- homeloop=\`losetup -f\`
- mount -o remount,rw /mnt/live
- losetup \$homeloop /mnt/live/LiveOS/home.img
- if [ "\$(/lib/udev/vol_id -t \$homeloop)" = "crypto_LUKS" ]; then
+ # if we're not given a block device, then make it one
+ if [ ! -b "\$homedev" ]; then
+ loopdev=\`losetup -f\`
+ if [ "\$\{homedev##/mnt/live\}" != "\$\{homedev\}" ]; then
+ action "Remounting live store r/w" mount -o remount,rw /mnt/live
+ fi
+ losetup \$loopdev \$homedev
+ homedev=\$loopdev
+ fi
+
+ # if it's encrypted, we need to unlock it
+ if [ "\$(/lib/udev/vol_id -t \$homedev)" = "crypto_LUKS" ]; then
echo
echo "Setting up encrypted /home device"
- cryptsetup luksOpen \$homeloop EncHome <&1
- homeloop=/dev/mapper/EncHome
+ cryptsetup luksOpen \$homedev EncHome <&1
+ homedev=/dev/mapper/EncHome
fi
- mount \$homeloop /home
+
+ # and finally do the mount
+ mount \$homedev /home
[ -x /sbin/restorecon ] && /sbin/restorecon /home
if [ -d /home/fedora ]; then USERADDARGS="-M" ; fi
}
+findPersistentHome() {
+ for arg in \`cat /proc/cmdline\` ; do
+ if [ "\${arg##persistenthome=}" != "\${arg}" ]; then
+ homedev=\${arg##persistenthome=}
+ return
+ fi
+ done
+}
+
+if strstr "\`cat /proc/cmdline\`" persistenthome= ; then
+ findPersistentHome
+elif [ -e /mnt/live/LiveOS/home.img ]; then
+ homedev=/mnt/live/LiveOS/home.img
+fi
+
# if we have a persistent /home, then we want to go ahead and mount it
-if ! strstr "\`cat /proc/cmdline\`" nopersisthome -a [ -e /mnt/live/LiveOS/home.img ] ; then
+if ! strstr "\`cat /proc/cmdline\`" nopersistenthome && [ -n "\$homedev" ] ; then
action "Mounting persistent /home" mountPersistentHome
fi
commit 881d186e0e8277839de5a1f160a4e4d87c9875df
Author: Jeremy Katz <katzj at redhat.com>
Date: Mon Jun 2 17:15:55 2008 -0400
Support not blowing away the persistent /home with livecd-iso-to-disk
By default, we shouldn't delete the persistent /home file. This adds
support for a --delete-home argument and also makes it so that you have to
be very clear that you want to delete to help avoid accidents from occurring
diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index 9bdcb0e..8ef1194 100644
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -22,7 +22,7 @@
export PATH=/sbin:/usr/sbin:$PATH
usage() {
- echo "$0 [--reset-mbr] [--noverify] [--overlay-size-mb <size>] [--home-size-mb <size> ] [ --unencrypted-home] <isopath> <usbstick device>"
+ echo "$0 [--reset-mbr] [--noverify] [--overlay-size-mb <size>] [--home-size-mb <size>] [--unencrypted-home] <isopath> <usbstick device>"
exit 1
}
@@ -173,6 +173,7 @@ if [ $(id -u) != 0 ]; then
fi
cryptedhome=1
+keephome=1
while [ $# -gt 2 ]; do
case $1 in
--overlay-size-mb)
@@ -189,6 +190,9 @@ while [ $# -gt 2 ]; do
--unencrypted-home)
cryptedhome=""
;;
+ --delete-home)
+ keephome=""
+ ;;
--noverify)
noverify=1
;;
@@ -250,7 +254,6 @@ if [ -n "$homesizemb" -a "$USBFS" = "vfat" ]; then
fi
fi
-
# FIXME: would be better if we had better mountpoints
CDMNT=$(mktemp -d /media/cdtmp.XXXXXX)
mount -o loop,ro "$ISO" $CDMNT || exitclean
@@ -259,6 +262,12 @@ mount $USBDEV $USBMNT || exitclean
trap exitclean SIGINT SIGTERM
+if [ -f "$USBMNT/LiveOS/home.img" -a -n "$keephome" -a -n "$homesizemb" ]; then
+ echo "ERROR: Requested keeping existing /home and specified a size for /home"
+ echo "Please either don't specify a size or specify --delete-home"
+ exitclean
+fi
+
# let's try to make sure there's enough room on the stick
if [ -d $CDMNT/LiveOS ]; then
check=$CDMNT/LiveOS
@@ -267,6 +276,8 @@ else
fi
if [ -d $USBMNT/LiveOS ]; then
tbd=$(du -s -B 1M $USBMNT/LiveOS | awk {'print $1;'})
+ [ -f $USBMNT/LiveOS/home.img ] && homesz=$(du -s -B 1M $USBMNT/LiveOS/home.img | awk {'print $1;'})
+ [ -n "$homesz" -a -n "$keephome" ] && tbd=$(($tbd - $homesz))
else
tbd=0
fi
@@ -283,8 +294,17 @@ if [ $(($overlaysizemb + $homesizemb + $livesize)) -gt $(($free + $tbd)) ]; then
fi
if [ -d $USBMNT/LiveOS ]; then
- echo "Already set up as live image. Deleting old in fifteen seconds..."
- sleep 15
+ echo "Already set up as live image."
+ if [ -z "$keephome" -a -e $USBMNT/LiveOS/home.img ]; then
+ echo "WARNING: Persistent /home will be deleted!!!"
+ echo "Press Enter to continue or ctrl-c to abort"
+ read
+ else
+ echo "Deleting old OS in fifteen seconds..."
+ sleep 15
+
+ [ -e "$USBMNT/LiveOS/home.img" -a -n "$keephome" ] && mv $USBMNT/LiveOS/home.img $USBMNT/home.img
+ fi
rm -rf $USBMNT/LiveOS
fi
@@ -292,6 +312,7 @@ fi
echo "Copying live image to USB stick"
if [ ! -d $USBMNT/$SYSLINUXPATH ]; then mkdir $USBMNT/$SYSLINUXPATH ; fi
if [ ! -d $USBMNT/LiveOS ]; then mkdir $USBMNT/LiveOS ; fi
+if [ -n "$keephome" -a -f "$USBMNT/home.img" ]; then mv $USBMNT/home.img $USBMNT/LiveOS/home.img ; fi
# cases without /LiveOS are legacy detection, remove for F10
if [ -f $CDMNT/LiveOS/squashfs.img ]; then
cp $CDMNT/LiveOS/squashfs.img $USBMNT/LiveOS/squashfs.img || exitclean
commit a8997895dc0dde65bf0e780570785e36688a6214
Author: Jeremy Katz <katzj at redhat.com>
Date: Mon Jun 2 17:13:30 2008 -0400
Make it more clear that we're mounting the persistent /home
Be a little bit more verbose in the initscript about what we're doing
diff --git a/config/livecd-fedora-base-desktop.ks b/config/livecd-fedora-base-desktop.ks
index c883c0d..b364803 100644
--- a/config/livecd-fedora-base-desktop.ks
+++ b/config/livecd-fedora-base-desktop.ks
@@ -100,22 +100,28 @@ if ! strstr "\`cat /proc/cmdline\`" noswap -a [ -n "\$swaps" ] ; then
done
fi
-# if we have a persistent /home, then we want to go ahead and mount it
-if ! strstr "\`cat /proc/cmdline\`" nopersisthome -a [ -e /mnt/live/LiveOS/home.img ] ; then
+mountPersistentHome() {
homeloop=\`losetup -f\`
mount -o remount,rw /mnt/live
losetup \$homeloop /mnt/live/LiveOS/home.img
if [ "\$(/lib/udev/vol_id -t \$homeloop)" = "crypto_LUKS" ]; then
+ echo
+ echo "Setting up encrypted /home device"
cryptsetup luksOpen \$homeloop EncHome <&1
homeloop=/dev/mapper/EncHome
fi
mount \$homeloop /home
[ -x /sbin/restorecon ] && /sbin/restorecon /home
if [ -d /home/fedora ]; then USERADDARGS="-M" ; fi
+}
+
+# if we have a persistent /home, then we want to go ahead and mount it
+if ! strstr "\`cat /proc/cmdline\`" nopersisthome -a [ -e /mnt/live/LiveOS/home.img ] ; then
+ action "Mounting persistent /home" mountPersistentHome
fi
# add fedora user with no passwd
-useradd \$USERADDARGS -c "Fedora Live" fedora
+action "Adding fedora user" useradd \$USERADDARGS -c "Fedora Live" fedora
passwd -d fedora > /dev/null
# turn off firstboot for livecd boots
commit aff8789c1b393475e65f799c82107b79864dc12e
Author: Jeremy Katz <katzj at redhat.com>
Date: Mon Jun 2 17:04:13 2008 -0400
Support a nopersisthome argument on the kernel command line
Passing 'nopersisthome' on the kernel command line will make it so that
we don't attempt to mount a /home
diff --git a/config/livecd-fedora-base-desktop.ks b/config/livecd-fedora-base-desktop.ks
index 5ab5560..c883c0d 100644
--- a/config/livecd-fedora-base-desktop.ks
+++ b/config/livecd-fedora-base-desktop.ks
@@ -101,7 +101,7 @@ if ! strstr "\`cat /proc/cmdline\`" noswap -a [ -n "\$swaps" ] ; then
fi
# if we have a persistent /home, then we want to go ahead and mount it
-if [ -e /mnt/live/LiveOS/home.img ]; then
+if ! strstr "\`cat /proc/cmdline\`" nopersisthome -a [ -e /mnt/live/LiveOS/home.img ] ; then
homeloop=\`losetup -f\`
mount -o remount,rw /mnt/live
losetup \$homeloop /mnt/live/LiveOS/home.img
commit 8b08198556821a5cd2a35904494a0bd31c053a14
Author: Jeremy Katz <katzj at redhat.com>
Date: Mon Jun 2 15:45:03 2008 -0400
Initial support for a persistent /home (#445218)
In addition to having a persistent overlay, it can be useful to just have
an encrypted /home. This provides the beginning of that support with
the creation of LiveOS/home.img in livecd-iso-to-disk.sh, which is
encrypted by default.
Future things still to do:
* Command line argument 'nopersisthome' should not mount the persistent /home
* Support for specifying something other than /mnt/live/LiveOS/home.img as the
source of the persistent /home
* Support not blowing away the home.img on later livecd-iso-to-disk runs
* Make the boot process a little bit more clear about what's going on
(eg, unlocking /dev/loop5 isn't all that obvious)
* How best to update the OS on the usb stick?
diff --git a/config/livecd-fedora-base-desktop.ks b/config/livecd-fedora-base-desktop.ks
index ebe9ac8..5ab5560 100644
--- a/config/livecd-fedora-base-desktop.ks
+++ b/config/livecd-fedora-base-desktop.ks
@@ -100,8 +100,22 @@ if ! strstr "\`cat /proc/cmdline\`" noswap -a [ -n "\$swaps" ] ; then
done
fi
+# if we have a persistent /home, then we want to go ahead and mount it
+if [ -e /mnt/live/LiveOS/home.img ]; then
+ homeloop=\`losetup -f\`
+ mount -o remount,rw /mnt/live
+ losetup \$homeloop /mnt/live/LiveOS/home.img
+ if [ "\$(/lib/udev/vol_id -t \$homeloop)" = "crypto_LUKS" ]; then
+ cryptsetup luksOpen \$homeloop EncHome <&1
+ homeloop=/dev/mapper/EncHome
+ fi
+ mount \$homeloop /home
+ [ -x /sbin/restorecon ] && /sbin/restorecon /home
+ if [ -d /home/fedora ]; then USERADDARGS="-M" ; fi
+fi
+
# add fedora user with no passwd
-useradd -c "Fedora Live" fedora
+useradd \$USERADDARGS -c "Fedora Live" fedora
passwd -d fedora > /dev/null
# turn off firstboot for livecd boots
diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index 3e1979b..9bdcb0e 100644
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -22,7 +22,7 @@
export PATH=/sbin:/usr/sbin:$PATH
usage() {
- echo "$0 [--reset-mbr] [--noverify] [--overlay-size-mb <size>] <isopath> <usbstick device>"
+ echo "$0 [--reset-mbr] [--noverify] [--overlay-size-mb <size>] [--home-size-mb <size> ] [ --unencrypted-home] <isopath> <usbstick device>"
exit 1
}
@@ -172,12 +172,23 @@ if [ $(id -u) != 0 ]; then
exit 1
fi
+cryptedhome=1
while [ $# -gt 2 ]; do
case $1 in
--overlay-size-mb)
overlaysizemb=$2
shift
;;
+ --home-size-mb)
+ homesizemb=$2
+ shift
+ ;;
+ --crypted-home)
+ cryptedhome=1
+ ;;
+ --unencrypted-home)
+ cryptedhome=""
+ ;;
--noverify)
noverify=1
;;
@@ -232,6 +243,14 @@ if [ -n "$overlaysizemb" -a "$USBFS" = "vfat" ]; then
fi
fi
+if [ -n "$homesizemb" -a "$USBFS" = "vfat" ]; then
+ if [ "$homesizemb" -gt 2047 ]; then
+ echo "Can't have a home overlay greater than 2048MB on VFAT"
+ exitclean
+ fi
+fi
+
+
# FIXME: would be better if we had better mountpoints
CDMNT=$(mktemp -d /media/cdtmp.XXXXXX)
mount -o loop,ro "$ISO" $CDMNT || exitclean
@@ -254,10 +273,11 @@ fi
livesize=$(du -s -B 1M $check | awk {'print $1;'})
free=$(df -B1M $USBDEV |tail -n 1 |awk {'print $4;'})
-if [ $(($overlaysizemb + $livesize)) -gt $(($free + $tbd)) ]; then
+if [ $(($overlaysizemb + $homesizemb + $livesize)) -gt $(($free + $tbd)) ]; then
echo "Unable to fit live image + overlay on available space on USB stick"
echo "Size of live image: $livesize"
- echo "Overlay size: $overlaysizemb"
+ [ -n "$overlaysizemb" ] && echo "Overlay size: $overlaysizemb"
+ [ -n "$homesizemb" ] && echo "Home overlay size: $homesizemb"
echo "Available space: $(($free + $tbd))"
exitclean
fi
@@ -307,6 +327,33 @@ if [ -n "$overlaysizemb" ]; then
$USBMNT/$SYSLINUXPATH/isolinux.cfg
fi
+if [ -n "$homesizemb" ]; then
+ echo "Initializing persistent /home"
+ HOMEFILE=home.img
+ if [ "$USBFS" = "vfat" ]; then
+ # vfat can't handle sparse files
+ dd if=/dev/zero of=$USBMNT/LiveOS/$HOMEFILE count=$homesizemb bs=1M
+ else
+ dd if=/dev/null of=$USBMNT/LiveOS/$HOMEFILE count=1 bs=1M seek=$homesizemb
+ fi
+ if [ -n "$cryptedhome" ]; then
+ loop=$(losetup -f)
+ losetup $loop $USBMNT/LiveOS/$HOMEFILE
+ echo "Encrypting persistent /home"
+ cryptsetup luksFormat -y -q $loop
+ echo "Please enter the password again to unlock the device"
+ cryptsetup luksOpen $loop EncHomeFoo
+ mke2fs -j /dev/mapper/EncHomeFoo
+ tune2fs -c0 -i0 -ouser_xattr,acl /dev/mapper/EncHomeFoo
+ cryptsetup luksClose EncHomeFoo
+ losetup -d $loop
+ else
+ echo "Formatting unencrypted /home"
+ mke2fs -F -j $USBMNT/LiveOS/$HOMEFILE
+ tune2fs -c0 -i0 -ouser_xattr,acl $USBMNT/LiveOS/$HOMEFILE
+ fi
+fi
+
echo "Installing boot loader"
if [ "$USBFS" = "vfat" -o "$USBFS" = "msdos" ]; then
# syslinux expects the config to be named syslinux.cfg
More information about the Fedora-livecd-list
mailing list