[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Adding flexibility to Debian Installer paths



Michael Kesper <mkesper@schokokeks.org> writes:

> Having to change all affected places after downloading the bootfiles can be error prone
> and should be avoidable, I think.

+1

I use this (most likely buggy and incomplete) script to unpack the
netboot.tar.gz into a release dependedent location:

#!/bin/sh
#
DEBUG=1
CLEAN=1
TFTP=/var/tftp

usage() {
    cat <<EOF
Usage: $0 /tmp/netboot.tar.gz

EOF
    exit 0
}

clean() {
    [ -n "$DIR" -a -n "$CLEAN" ] && [ "$CLEAN" -ge 1 ] && rm -rf "$DIR" && info "Cleaned up '$DIR'"
}

err() {
    echo "ERR: $*" >&2
    clean
    exit 1
}

dbg() {
    [ -n "$DEBUG" ] && [ "$DEBUG" -ge 1 ] && echo "DBG: $*" >&2
}

info() {
    echo "INFO: $*" >&2
}

TGZ=$1
[ -n "$TGZ" ] && [ -r "$TGZ" ] || usage

DIR=`mktemp --directory --tmpdir di2tftp-XXX`
[ -n "$DIR" ] && cd $DIR || err "Temp dir creation failed"

dbg "Using tempdir '$DIR'"
tar zxf "$TGZ"

DIST=`sed -ne 's/)$//' -e 's/^Debian version:.*(//p' version.info`
BUILD=`sed -ne 's/^Installer build: *//p' version.info`
ARCH=`ls debian-installer`
SYSLINUX="/usr/lib/syslinux/modules/bios"

[ -n "$DIST" ] && [ -n "$BUILD" ] || err "Unable to parse 'version.info'"
REL="$DIST-$BUILD"
[ -n "$ARCH" ] || err "Unable to figure out arch"
info "Installing DI release '$REL' for '$ARCH'"

[ -w "$TFTP" ] || err "Cannot write to '$TFTP'"

# bail out if already installed
[ -r "$TFTP/debian-installer/$REL.$ARCH" ] && err "Already installed"

# remove shared binaries
rm "$DIR/debian-installer/$ARCH/bootnetx64.efi" "$DIR/debian-installer/$ARCH/grubx64.efi" "$DIR/debian-installer/$ARCH/pxelinux.0"
rm -rf "$DIR/debian-installer/$ARCH/grub/x86_64-efi"

# replace modules with symlinks, syncronizing with shared pxelinux.0 installation
find "$DIR/debian-installer/$REL.$ARCH" -name *.c32 -execdir ln -sfn "$SYSLINUX/{}" {} \;

# fixup paths in config files
for f in `grep -lR /$ARCH/ "$DIR/debian-installer/$ARCH"`; do
    sed -i -e "s,/$ARCH/,/$REL.$ARCH/,g" "$f"
done

# move everything into place
mv "$DIR/debian-installer/$ARCH" "$TFTP/debian-installer/$REL.$ARCH" && info "Sucessful installation completed!"
clean

# leave this for manual fixup:
cat <<EOF

These steps are necessary to use the newly installed version by default:

# For UEFI hosts:
cd $TFTP/debian-installer/amd64/grub
ln -sfn ../../$REL.$ARCH/grub/grub.cfg

# For PXE hosts:
cd $TFTP/pxelinux.cfg
ln -sfn ../debian-installer/$REL.$ARCH/pxelinux.cfg/default

EOF



This way I can keep a number of different installer versions, and easily
switch between them by changing only the /pxelinux.cfg/default or
/debian-installer/ARCH/grub/grub.cfg symlinks.

So I have something like this:

bjorn@canardo:~$ ls -l /var/tftp/debian-installer
total 92
drwxrwxr-x 3 root  adm   4096 Jul  5 21:56 amd64
drwxr-xr-x 5 bjorn users 4096 Jul  5 21:58 buster-20190702.amd64
drwxr-xr-x 4 bjorn users 4096 Sep  3  2016 jessie-20141002.amd64
drwxr-xr-x 4 bjorn users 4096 Oct  7  2014 jessie-20141002.i386
drwxr-xr-x 5 bjorn users 4096 Sep  3  2016 jessie-20150422+deb8u4.amd64
drwxr-xr-x 5 bjorn users 4096 Dec  4  2016 jessie-20150422+deb8u4+b1.amd64
drwxr-xr-x 5 bjorn users 4096 Dec  2  2017 jessie-20150422+deb8u4+b4.amd64
drwxr-xr-x 5 root  adm   4096 Mar  8  2011 lenny-20090123lenny3.amd64
drwxr-xr-x 4 bjorn adm   4096 Mar  8  2011 lenny-20090123lenny6.i386
drwxr-xr-x 4 bjorn adm   4096 Mar  8  2011 squeeze-20100211.i386
drwxrwxr-x 5 bjorn adm   4096 May 16  2011 squeeze-20110106.amd64
drwxr-xr-x 5 bjorn users 4096 Sep  3  2016 stretch-20160630.amd64
drwxr-xr-x 5 bjorn users 4096 Nov 16  2016 stretch-20161031.amd64
drwxr-xr-x 5 bjorn users 4096 Nov 16  2016 stretch-20161115.amd64
drwxr-xr-x 5 bjorn users 4096 Dec  2  2017 stretch-20170615+deb9u2.amd64
drwxr-xr-x 5 bjorn users 4096 Feb 28 19:10 stretch-20170615+deb9u5+b2.amd64
drwxr-xr-x 5 bjorn users 4096 Aug  8 15:31 stretch-20170615+deb9u6.amd64
drwxr-xr-x 4 bjorn users 4096 Feb 28  2013 wheezy-20130211.i386
drwxrwxr-x 4 bjorn users 4096 Apr 20  2013 wheezy-20130415.amd64

bjorn@canardo:~$ ls -l /var/tftp/pxelinux.cfg
total 32
lrwxrwxrwx 1 root  root   62 May  5  2010 01-00-aa-00-00-bb-bb -> ../debian-installer/squeeze-20100211.i386/pxelinux.cfg/default
lrwxrwxrwx 1 root  root   51 Feb 24  2009 01-00-aa-00-00-be-aa -> ../debian-installer/etch.amd64/pxelinux.cfg/default
lrwxrwxrwx 1 root  root   66 May  5  2010 01-00-aa-00-ff-00-03 -> ../debian-installer/lenny-20090123lenny6.i386/boot-screens/txt.cfg
lrwxrwxrwx 1 bjorn users  61 Feb 28  2013 01-00-aa-00-ff-00-fe -> ../debian-installer/wheezy-20130211.i386/pxelinux.cfg/default
lrwxrwxrwx 1 bjorn users  70 Aug  8 15:33 01-52-54-00-ff-05-00 -> ../debian-installer/stretch-20170615+deb9u6.amd64/pxelinux.cfg/default
lrwxrwxrwx 1 root  root   61 Aug 22 12:19 C0A8036 -> ../debian-installer/buster-20190702.amd64/pxelinux.cfg/serial
lrwxrwxrwx 1 bjorn users  62 Jul  5 21:00 default -> ../debian-installer/buster-20190702.amd64/pxelinux.cfg/default
lrwxrwxrwx 1 root  root   33 May 28  2010 xxxx01-00-1d-60-67-de-25 -> ../floppy-images/bios-upgrade.cfg
-rw-r--r-- 1 root  root  184 Aug  3  2010 xxxx01-00-21-86-a3-25-7d
lrwxrwxrwx 1 root  root   62 Feb 24  2009 xxxx01-00-aa-00-00-be-ef -> ../debian-installer/etch.i386/pxelinux.cfg.serial-9600/default


bjorn@canardo:~$ ls -l /var/tftp/debian-installer/amd64/grub/grub.cfg
lrwxrwxrwx 1 bjorn users 41 Jul  5 21:00 /var/tftp/debian-installer/amd64/grub/grub.cfg -> ../../buster-20190702.amd64/grub/grub.cfg


It would have been nice if the installer package could use a similar
scheme, with unique file names for everything but the top level
configuration symlinks (and possibly syslinux/grub binaries?).  I
believe this cahnge can be made without breaking any existing PXE server
config.

I manage with my buggy shell hacks, but shared solutions to common
problems are always better :-)


Bjørn


Reply to: