diff options
Diffstat (limited to 'setup-bootable.in')
-rw-r--r-- | setup-bootable.in | 55 |
1 files changed, 37 insertions, 18 deletions
diff --git a/setup-bootable.in b/setup-bootable.in index 2df03e6..374a40c 100644 --- a/setup-bootable.in +++ b/setup-bootable.in @@ -174,7 +174,7 @@ parent_dev=$(find_disk_dev $dev) # check if this files exist and not in upgrade mode if [ -z "$upgrade" ] && [ -z "$force" ]; then for i in boot apks syslinux.cfg .alpine-release; do - [ -e "$destdir"/$i ] && die "$destdir/$i already exists. Aborting" + [ -e "$destdir"/$i ] && die "$destdir/$i already exists. Use -u to upgrade." done fi @@ -207,15 +207,17 @@ available_space=$(( $free_blocks / $blocks_per_mb )) vecho "Available space: $available_space MiB" if [ -n "$srcdir" ]; then - needed_space=$(cd "$srcdir" && du -m -s -c boot apks syslinux.cfg .alpine-release | awk '$2 == "total" {print $1}') + needed_space=$(cd "$srcdir" && du -m -s -c boot apks .alpine-release | awk '$2 == "total" {print $1}') vecho "Needed space: $needed_space MiB" [ $available_space -lt $needed_space ] \ && die "Not enough space on $destdir. Aborting." # copy the files to .new for i in boot apks syslinux.cfg .alpine-release; do - vecho "Copying $srcdir/$i to $destdir/.new/" - cp -a "$srcdir"/$i "$destdir"/.new/ + if [ -e "$srcdir"/$i ]; then + vecho "Copying $srcdir/$i to $destdir/.new/" + cp -a "$srcdir"/$i "$destdir"/.new/ + fi done elif [ -n "$srcurl" ]; then cd "$destdir"/.new @@ -224,6 +226,19 @@ elif [ -n "$srcurl" ]; then echo "" fi +# find where new syslinux.cfg is +for i in boot/syslinux/syslinux.cfg syslinux.cfg; do + if [ -e "$destdir"/.new/$i ]; then + syslinux_cfg=$i + vecho "Found $syslinux_cfg" + break + fi +done +# abort early in case unexpected trouble +if [ -z "$syslinux_cfg" ]; then + die "Could not find any syslinux.cfg on new iso?" +fi + # make sure files are really there before we replace existing vecho "Flushing cache..." sync @@ -231,18 +246,7 @@ sync vecho "Replacing existing files..." mkdir -p "$destdir"/.old || die "Failed to create $destdir/.old" -# do we want keep existing syslinux.cfg? -tomove="boot apks .alpine-release" -if [ -n "$force" ] || ! [ -e "$destdir"/syslinux.cfg ]; then - tomove="$tomove syslinux.cfg" - # update syslinux.cfg unless device is on usb bus - # this is so we can boot from CF's and harddisk - if ! on_usb_bus $parent_dev; then - vecho "Updating syslinux.cfg to use $dest" - sed -i -e "s/usbdisk/${dest##*/}/g" \ - "$destdir"/.new/syslinux.cfg - fi -fi +tomove="boot apks syslinux.cfg .alpine-release" # move current files to .old for i in $tomove; do @@ -251,14 +255,29 @@ for i in $tomove; do fi done +# keep any existing syslinux.cfg +if [ -e "$destdir"/.old/$syslinux_cfg ]; then + mv "$destdir"/.old/$syslinux_cfg "$destdir"/.new/$syslinux_cfg +elif [ -e "$destdir"/.old/syslinux.cfg ] \ + && [ -e "$destdir"/.new/boot/syslinux/syslinux.cfg ]; then + echo "Warning: moving syslinux.cfg to boot/syslinux/syslinux.cfg" >&2 + mv "$destdir"/.old/syslinux.cfg "$destdir"/.new/boot/syslinux + if [ -z "$syslinux" ]; then + echo " You might need run: syslinux $dest" >&2 + fi +fi + # move .new to current for i in $tomove; do - mv "$destdir"/.new/$i "$destdir"/ || die "Failed to move $destdir/.new/ to $destdir" + if [ -e "$destdir"/.new/$i ]; then + mv "$destdir"/.new/$i "$destdir"/ \ + || die "Failed to move $destdir/.new/ to $destdir" + fi done if [ -n "$replace_alpine_dev" -o -z "$upgrade" ] && [ -n "$UUID" ]; then sed -i -e "s/alpine_dev=[^ \t:]\+/alpine_dev=UUID=$UUID/" \ - "$destdir"/syslinux.cfg + "$destdir"/$syslinux_cfg fi # cleanup |