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: