From 9f751541bbc9b1295d8033e44e2a21c4eecffbc4 Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Thu, 30 Apr 2015 13:12:34 +0200 Subject: [PATCH] rootfsinstall: support for local-only forced installation and bind mounts before chroot --- src/rootfsinstall.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/rootfsinstall.sh b/src/rootfsinstall.sh index cc1dc56..466f401 100755 --- a/src/rootfsinstall.sh +++ b/src/rootfsinstall.sh @@ -27,6 +27,7 @@ function usage() { echo "-k kernel : extract and use specified kernel file from ROOTFS/boot/ for boot" echo "-k2 kernel : extract and use specified second kernel file from ROOTFS/boot/ for boot" echo "-i packages : install packages using package manager in chroot" + echo "-l : force local installation only; don't perform installation from network" echo "-p password : set given password for root user" echo "-r mode : set given default video mode where applicable (e.g. -r 1920x1080-32@60)" echo "-y : assume yes to all questions (script mode)" @@ -106,6 +107,7 @@ while [ "$1" ]; do INSTALLPACKAGES="$2" shift ;; + -l) LOCALONLY=1 ;; -p) [ "$2" ] || { echo "Error: -p option requires a password as argument; aborting." exit 1 @@ -264,7 +266,7 @@ mount $PARTITION2 $ROOTMP || { echo "ERROR: unable to mount partition $PARTITION2; aborting." exit 1 } -trap "[ "$ROOTMP" -a -e $ROOTMP ] && umount $ROOTMP && rmdir $ROOTMP;[ "$BOOTMP" -a -e $BOOTMP ] && umount $BOOTMP && rmdir $BOOTMP" 0 HUP INT QUIT ABRT KILL TERM +trap "[ "$ROOTMP" -a -e $ROOTMP ] && umount $ROOTMP/dev/pts $ROOTMP/dev $ROOTMP/proc $ROOTMP/sys $ROOTMP/run $ROOTMP && rmdir $ROOTMP;[ "$BOOTMP" -a -e $BOOTMP ] && umount $BOOTMP && rmdir $BOOTMP" 0 HUP INT QUIT ABRT KILL TERM if [ "$BOOTFSTYPE" ]; then mount $PARTITION1 $BOOTMP || { @@ -289,6 +291,9 @@ fi exit 1 } echo "DONE" + for b in dev dev/pts proc sys run; do + mount -o bind /$b $ROOTMP/$b + done if [ "$ADDITIONALARCHIVE" ]; then echo "Uncompressing $ADDITIONALARCHIVE..." @@ -319,7 +324,7 @@ if [ "$SETHOSTNAME" ]; then sed -i "s|\(127\.0\.0\.1\W*\)\(.*\)|\1 $SETHOSTNAME.localdomain $SETHOSTNAME localhost.localdomain localhost|" $ROOTMP/etc/hosts fi -if [ "$INSTALLPACKAGES" ]; then +if [ "$INSTALLPACKAGES" -a "$LOCALONLY" != "1" ]; then mv $ROOTMP/etc/resolv.conf $ROOTMP/etc/resolv.conf.rootfsinstall cp /etc/resolv.conf $ROOTMP/etc/resolv.conf chroot $ROOTMP bash -c /etc/profile.d/gpg-key-openmamba.sh @@ -358,11 +363,11 @@ _EOF elif [ "$TARGETDEVICE" = "rpi" ]; then # fetch and install firmware files if missing RPI_FIRMWARE_FILES="bootcode.bin fixup_x.dat start_x.elf \ - bcm2708-rpi-b.dtb bcm2708-rpi-b-plus.dtb bcm2709-rpi-2-b.dtb" + bcm2708-rpi-b.dtb cmdline.txt config.txt bcm2708-rpi-b-plus.dtb bcm2709-rpi-2-b.dtb" for f in $RPI_FIRMWARE_FILES; do if [ -e $ROOTMP/boot/$f ]; then cp $ROOTMP/boot/$f $BOOTMP/$f - else + elif [ "$f" != "cmdline.txt" -a "$f" != "config.txt" ]; then echo "ERROR: firmware file $f for rpi is missing in /boot directory; aborting." exit 1 fi @@ -375,6 +380,7 @@ elif [ "$TARGETDEVICE" = "rpi" ]; then cp $ROOTMP/boot/$USEKERNEL2 $KERNELDEST2 # cmdline.txt : parameters passed to the kernel on boot + [ ! -e $ROOTMP/boot/cmdline.txt ] && \ echo "\ dwc_otg.lpm_enable=0 \ root=/dev/mmcblk0p2 \ @@ -384,6 +390,7 @@ rootwait \ splash" > $BOOTMP/cmdline.txt # Create the kernel configuration file + [ ! -e $ROOTMP/boot/config.txt ] && \ echo "\ start_file=start_x.elf fixup_file=fixup_x.dat