summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--INSTALL.usb14
-rw-r--r--README.md64
-rw-r--r--TODO32
-rw-r--r--data/issue25
-rw-r--r--data/issue.in27
-rw-r--r--data/splash.pngbin100743 -> 401199 bytes
-rw-r--r--dracut/adduser.sh4
-rw-r--r--dracut/getty-autologin.sh11
-rw-r--r--dracut/getty-serial.sh12
-rw-r--r--dracut/module-setup.sh2
-rw-r--r--dracut/services.sh17
-rw-r--r--extra/balder10.imgbin0 -> 1474560 bytes
-rw-r--r--extra/grub2.isobin0 -> 8196096 bytes
-rw-r--r--extra/ipxe.isobin0 -> 686080 bytes
-rw-r--r--extra/memtest86+-5.01.isobin0 -> 1839104 bytes
-rw-r--r--extra/mhdd32ver4.6.isobin0 -> 1533952 bytes
-rw-r--r--grub/grub_void.cfg.in14
-rw-r--r--hrmpf.packages503
-rw-r--r--isolinux/isolinux.cfg.in49
-rwxr-xr-xmkhrmpf.sh16
-rw-r--r--mklive.sh.in33
21 files changed, 741 insertions, 82 deletions
diff --git a/INSTALL.usb b/INSTALL.usb
new file mode 100644
index 0000000..c0627f9
--- /dev/null
+++ b/INSTALL.usb
@@ -0,0 +1,14 @@
+# Rough steps to install on USB with a FAT partition, from a booted ISO:
+
+We assume /dev/sda is the USB stick.
+
+	fdisk /dev/sda
+	# mark as bootable!
+	mkfs.vfat -n VOID_LIVE /dev/sda1
+	mount /dev/sda1 /mnt
+	rsync -avP -x /run/initramfs/live/ /mnt/
+	mv /mnt/boot/isolinux /mnt/boot/syslinux
+	mv /mnt/boot/syslinux/isolinux.cfg /mnt/boot/syslinux/syslinux.cfg
+	syslinux -d boot -i /dev/sda1
+	dd if=/usr/share/syslinux/mbr.bin of=/dev/sda conv=notrunc
+
diff --git a/README.md b/README.md
index aa22405..017efd0 100644
--- a/README.md
+++ b/README.md
@@ -1,42 +1,56 @@
-## The Void Linux image/live/rootfs maker and installer
+     _                    __ 
+    | |_  _ _ _ __  _ __ / _|
+    | ' \| '_| '  \| '_ \  _|
+    |_||_|_| |_|_|_| .__/_|
+                   |_|       
 
-This repository contains utilities for Void Linux:
-
- * installer (The Void Linux el-cheapo installer for x86)
- * mklive    (The Void Linux live image maker for x86)
-
- * mkimage   (The Void Linux image maker for ARM platforms)
- * mkrootfs  (The Void Linux rootfs maker for ARM platforms)
+Welcome to the hrmpf rescue system, built on Void Linux.
+This project is based on void-mklive.
 
 #### Dependencies
 
- * xbps>=0.45
- * qemu-user-static binaries (for mkrootfs)
+* xbps>=0.45
+* GNU bash
 
-#### Usage
+#### Features
 
-Type
+* Loads of console standard tools, with a focus on:
+   * system rescue
+   * maintainance
+   * diagnosis
+   * networking
+   * security
+   * ad-hoc setups
+   * tiny bits of entertainment if you have to wait for something
 
-    $ make
+* Missing software easily installable via XBPS.
 
-and then see the usage output:
+* Non-Linux extra images (only via ISOLINUX):
+   * memtest86+
+   * iPXE
+   * FreeDOS
+   * MHDD32 hard disk analysis
+   * Bare GRUB 2
 
-    $ ./mklive.sh -h
-    $ ./mkrootfs.sh -h
-    $ ./mkimage.sh -h
+* ISO image can be burned on CD or written raw on USB stick.
 
-#### Examples
+* Load to RAM option, also bootable as MEMDISK.
 
-Build a native live image with runit and keyboard set to 'fr':
+* A plain Bash as default shell without annoying fancy configuration.
 
-    # ./mklive.sh -k fr
+#### Minimum requirements
 
-Build an i686 (on x86\_64) live image with some additional packages:
+* x86-64/EM64T CPU
+* 160 MB RAM
+
+#### Usage
 
-    # ./mklive.sh -a i686 -p 'vim rtorrent'
+To build your own:
 
-Build an x86\_64 musl live image with packages stored in a local repository:
+    % make
+    % ./mkhrmpf.sh
+    % linux32 ./mkhrmpf.sh
 
-    # ./mklive.sh -a x86_64-musl -r /path/to/host/binpkgs
+Download pre-built images at
+<https://github.com/chneukirchen/hrmpf/releases>.
 
-See the usage output for more information :-)
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..ce75b71
--- /dev/null
+++ b/TODO
@@ -0,0 +1,32 @@
+- syslog to tty12
+- forensic mode (don't touch disks)
+- hrmpf96 (64+32 image, best in the same squashfs and switch_root into
+  bindmount)
+- artwork!
+- install to usb
+
+fdisk
+mkfs.vfat -n VOID_LIVE
+mount /dev/sda1 /mnt
+rsync -avP -x /run/initramfs/live/ /mnt/
+# or here: fatlabel /dev/sda1 VOID_LIVE
+sed -i /SAMPLE/d /etc/mtools.conf
+syslinux -d boot -i /dev/sda1
+mkdir /mnt/boot/syslinux
+mv /mnt/boot/isolinux /mnt/boot/syslinux
+mv /mnt/boot/syslinux/isolinux.cfg /mnt/boot/syslinux/syslinux.cfg
+dd if=/usr/lib/syslinux/bios/mbr.bin of=hrmpf.img conv=notrunc
+
+
+Possibly interesting packages found in grml not yet in void:
+
+bacula?
+blktrace? no kernel support
+buffer?
+centerim?
+chkrootkit?
+clonezilla?
+daemon? daemonize
+hwinfo?
+ipmitool?
+ipsec-tools?
diff --git a/data/issue b/data/issue
deleted file mode 100644
index 9117c72..0000000
--- a/data/issue
+++ /dev/null
@@ -1,25 +0,0 @@
-###############################################################################
-
-Welcome to the Void Linux Live system. Two users are available to log in:
-
-	- root:voidlinux
-	- anon:voidlinux
-
-The `anon` user additionally has `sudo(8)` permissions to run any command
-without a password.
-
-To start the installation please type:
-
-    # void-installer
-
-and follow the on-screen instructions. To install additional software make
-sure to configure your network interface and then use:
-
-	- xbps-install(8) to install/update packages
-	- xbps-query(8) to query for package info
-
-Thanks for using Void Linux.
-
-    http://www.voidlinux.eu
-
-###############################################################################
diff --git a/data/issue.in b/data/issue.in
new file mode 100644
index 0000000..c4afdc2
--- /dev/null
+++ b/data/issue.in
@@ -0,0 +1,27 @@
+ _                    __ 
+| |_  _ _ _ __  _ __ / _|
+| ' \\| '_| '  \\| '_ \\  _|
+|_||_|_| |_|_|_| .__/_|    @@VERSION@@
+               |_|       
+
+Welcome to the hrmpf rescue system, built on Void Linux.
+There are two accounts:
+
+	- root:voidlinux
+	- anon:voidlinux
+
+The `anon` user additionally has `sudo(8)` permissions to run any command
+without a password.
+
+You can also use this disk to install Void:
+
+    # void-installer
+
+and follow the on-screen instructions.  To install additional software make
+sure to configure your network interface and then use:
+
+	- xbps-install(8) to install/update packages
+	- xbps-query(8) to query for package info
+	- xbps-reconfigure -a to build ZFS modules
+
+Enjoy!
diff --git a/data/splash.png b/data/splash.png
index 639d2ef..bcc58b1 100644
--- a/data/splash.png
+++ b/data/splash.png
Binary files differdiff --git a/dracut/adduser.sh b/dracut/adduser.sh
index dbcbd35..e59fca1 100644
--- a/dracut/adduser.sh
+++ b/dracut/adduser.sh
@@ -4,7 +4,7 @@
 
 type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
 
-echo void-live > ${NEWROOT}/etc/hostname
+echo hrmpf > ${NEWROOT}/etc/hostname
 
 AUTOLOGIN=$(getarg live.autologin)
 USERNAME=$(getarg live.user)
@@ -54,3 +54,5 @@ fi
 if [ -n "$AUTOLOGIN" ]; then
         sed -i "s,GETTY_ARGS=\"--noclear\",GETTY_ARGS=\"--noclear -a $USERNAME\",g" ${NEWROOT}/etc/sv/agetty-tty1/run
 fi
+
+chroot ${NEWROOT} usermod -s /bin/bash root
diff --git a/dracut/getty-autologin.sh b/dracut/getty-autologin.sh
new file mode 100644
index 0000000..842c768
--- /dev/null
+++ b/dracut/getty-autologin.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+
+type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+
+USERNAME=$(getarg live.user)
+[ -z "$USERNAME" ] && USERNAME=anon
+
+printf '%s\n' '#!/bin/sh' "exec setsid agetty --noclear --autologin root 38400 tty1 linux" >${NEWROOT}/etc/sv/agetty-tty1/run
+printf '%s\n' '#!/bin/sh' "exec setsid agetty --autologin root --login-pause 38400 \${PWD##*-} linux" >${NEWROOT}/etc/sv/agetty-generic/run
diff --git a/dracut/getty-serial.sh b/dracut/getty-serial.sh
new file mode 100644
index 0000000..0b85af5
--- /dev/null
+++ b/dracut/getty-serial.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+
+type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+
+CONSOLE=$(getarg console)
+case "$CONSOLE" in
+*ttyS0*)
+        ln -s /etc/sv/agetty-ttyS0 ${NEWROOT}/etc/runit/runsvdir/default/
+        ;;
+esac
diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh
index df148f5..abdf7f8 100644
--- a/dracut/module-setup.sh
+++ b/dracut/module-setup.sh
@@ -25,6 +25,8 @@ install() {
 
     inst_hook pre-pivot 01 "$moddir/adduser.sh"
     inst_hook pre-pivot 02 "$moddir/display-manager-autologin.sh"
+    inst_hook pre-pivot 02 "$moddir/getty-autologin.sh"
+    inst_hook pre-pivot 02 "$moddir/getty-serial.sh"
     inst_hook pre-pivot 03 "$moddir/copy-initramfs.sh"
     inst_hook pre-pivot 04 "$moddir/locale.sh"
     inst_hook pre-pivot 05 "$moddir/services.sh"
diff --git a/dracut/services.sh b/dracut/services.sh
index 50461ff..33dda75 100644
--- a/dracut/services.sh
+++ b/dracut/services.sh
@@ -11,19 +11,6 @@ for f in ${SERVICES}; do
         ln -sf /etc/sv/$f $NEWROOT/etc/runit/runsvdir/default/
 done
 
-dhcpcd=1
-for f in connmand NetworkManager wicd; do
-    if [ -e $SERVICEDIR/$f ]; then
-        unset dhcpcd
-    fi
-done
-
-# Enable all services by default... with some exceptions.
-for f in $SERVICEDIR/*; do
-    _service=${f##*/}
-    case "${_service}" in
-        agetty-console|agetty-generic|agetty-serial|agetty-tty[SAU]*|sulogin|dhcpcd-*|iptables|ip6tables|wpa_supplicant|pulseaudio|lvmetad|dmeventd|mdadm) ;; # ignored
-        dhcpcd) [ -n "$dhcpcd" ] && ln -sf ${f##$NEWROOT} $NEWROOT/etc/runit/runsvdir/default/;;
-        *) ln -sf ${f##$NEWROOT} $NEWROOT/etc/runit/runsvdir/default/;;
-    esac
+for f in acpid dhcpcd gpm sshd udevd; do
+        ln -sf /etc/sv/$f $NEWROOT/etc/runit/runsvdir/default/
 done
diff --git a/extra/balder10.img b/extra/balder10.img
new file mode 100644
index 0000000..7f5a5fd
--- /dev/null
+++ b/extra/balder10.img
Binary files differdiff --git a/extra/grub2.iso b/extra/grub2.iso
new file mode 100644
index 0000000..7b127cb
--- /dev/null
+++ b/extra/grub2.iso
Binary files differdiff --git a/extra/ipxe.iso b/extra/ipxe.iso
new file mode 100644
index 0000000..b7c9910
--- /dev/null
+++ b/extra/ipxe.iso
Binary files differdiff --git a/extra/memtest86+-5.01.iso b/extra/memtest86+-5.01.iso
new file mode 100644
index 0000000..671bf06
--- /dev/null
+++ b/extra/memtest86+-5.01.iso
Binary files differdiff --git a/extra/mhdd32ver4.6.iso b/extra/mhdd32ver4.6.iso
new file mode 100644
index 0000000..c00250e
--- /dev/null
+++ b/extra/mhdd32ver4.6.iso
Binary files differdiff --git a/grub/grub_void.cfg.in b/grub/grub_void.cfg.in
index a2cda85..4a199c2 100644
--- a/grub/grub_void.cfg.in
+++ b/grub/grub_void.cfg.in
@@ -17,8 +17,8 @@ if loadfont "(${voidlive})/boot/grub/fonts/unicode.pf2" ; then
     insmod gfxterm
     set gfxmode="auto"
     
-    terminal_input console
-    terminal_output gfxterm
+    terminal_input console serial
+    terminal_output gfxterm serial
     
     insmod png
     background_image "(${voidlive})/boot/isolinux/@@SPLASHIMAGE@@"
@@ -43,4 +43,14 @@ if [ cpuid -l ]; then
 		locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ rd.live.ram
         initrd (${voidlive})/boot/initrd
     }
+    menuentry "@@BOOT_TITLE@@ @@KERNVER@@ (@@ARCH@@) (Serial)" {
+        set gfxpayload="keep"
+        linux (${voidlive})/boot/vmlinuz \
+		root=live:CDLABEL=VOID_LIVE ro init=/sbin/init \
+		rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 gpt add_efi_memmap \
+		vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ \
+		locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ \
+                console=tty0 console=ttyS0,115200n8
+        initrd (${voidlive})/boot/initrd
+    }
 fi
diff --git a/hrmpf.packages b/hrmpf.packages
new file mode 100644
index 0000000..c5e6865
--- /dev/null
+++ b/hrmpf.packages
@@ -0,0 +1,503 @@
+# diagnosis
+acpi
+atop
+blktrace
+bonnie++
+cpuburn
+dmidecode
+dstat
+extrace
+f3
+fatrace
+fio
+hdapsd
+hddtemp
+htop
+i2c-tools
+idle3-tools
+ioping
+ioprof
+iotop
+ipmitool
+lm_sensors
+lshw
+lsof
+ltrace
+mcelog
+msr-tools
+nethogs
+pciutils
+powertop
+read-edid
+smartmontools
+strace
+stress
+sysstat
+tiptop
+tpm-tools
+usbutils
+
+# networking
+aiccu
+arpwatch
+autossh
+bind-utils
+bmon
+bwm-ng
+bridge-utils
+ddclient
+dhcpcd
+ebtables
+ethtool
+fping
+grepcidr
+horst
+hostapd
+ifenslave
+iftop
+ifstatus
+inadyn
+inetutils-hostname
+inetutils-talk
+iodine
+ipcalc
+iperf
+iprange
+iproute2
+ipset
+iptables
+iptraf-ng
+iputils
+iw
+ldns
+lft
+liboping
+libressl-netcat
+miniupnpc
+miruo
+mosh
+msmtp
+mtr
+ndisc6
+net-snmp
+net-tools
+nfs-utils
+nftables
+ngrep
+nload
+nmon
+ntp
+openbsd-netcat
+openssh
+pchar
+polysh
+ppp
+pptpclient
+procmail
+radvd
+rfkill
+rpcbind
+s6-dns
+s6-networking
+shorewall
+shorewall6
+sipcalc
+slurm
+socat
+swaks
+tcpdump
+tcpflow
+tcptrack
+tlsdate
+tor
+traceroute
+vde2
+vpnc
+wavemon
+whois
+wireless_tools
+wol
+wpa_supplicant
+wvdial
+
+# general system tools
+aha
+alsa-lib
+alsa-utils
+ascii
+at
+attr
+bc
+beep
+buffer
+busybox
+byobu
+cdrtools
+cmark
+colordiff
+cpulimit
+cpupower
+crda
+cronie
+curl
+daemonize
+dateutils
+db
+debootstrap
+detox
+di
+dialog
+diffutils
+dos2unix
+dtach
+duff
+dvtm
+efmd
+entr
+execline
+faketime
+fbgrab
+fbset
+fdupes
+file
+findutils
+firejail
+fzy
+gawk
+gcal
+gpm
+grep
+hostmux
+icdiff
+inotify-tools
+irqbalance
+jo
+kbd
+kbd-data
+kexec-tools
+less
+linux-firmware
+logrotate
+lr
+lrzsz
+lxc
+mawk
+mbuffer
+mc
+metalog
+miller
+minised
+ministat
+mmv
+msrc_base
+multitail
+ncdu
+nocache
+nq
+numactl
+odo
+opendoas
+oue
+outils
+par
+parallel
+pax-utils
+perl
+pflask-git
+picocom
+pm-utils
+pmr
+progress
+pv
+python
+quota
+ranger
+rdfind
+reptyr
+rlwrap
+s6
+sample
+schedtool
+screen
+sispmctl
+snooze
+socklog-void
+sudo
+su-exec
+tab
+the_silver_searcher
+time
+tmux
+tree
+ttyrec
+util-linux
+wgetpaste
+which
+xe
+xjobs
+xmlstarlet
+xtools
+
+# filesystems & storage
+btrfs-progs
+cryptsetup
+dmraid
+dosfstools
+dumpet
+e2fsprogs
+exfat-utils
+ext4magic
+fuse
+fuse-exfat
+fuse-sshfs
+gptfdisk
+hdparm
+hfsprogs
+jfsutils
+kpartx
+lvm2
+mdadm
+mergerfs
+mhddfs
+mtools
+nbd
+ntfs-3g
+nwipe
+open-iscsi
+partclone
+parted
+s3cmd
+s3fs-fuse
+sdparm
+sg3_utils
+simple-mtpfs
+squashfs-tools
+sysfsutils
+tc-play
+tgt
+xfsdump
+xfsprogs
+zerofree
+
+# bootloader
+efibootmgr
+efivar
+grub
+grub-i386-efi
+grub-x86_64-efi
+gummiboot
+lilo
+ms-sys
+syslinux
+vboot-utils
+
+# archives
+bsdtar
+bzip2
+cabextract
+cksfv
+cpio
+dpkg
+gzip
+lbzip2
+lrzip
+lzip
+lzop
+p7zip
+par2cmdline
+pax
+pbzip2
+pigz
+pixz
+rpmextract
+sharutils
+tar
+unp
+unrar
+unzip
+xz
+zip
+zstd
+
+# security
+acme-client
+apg
+ccrypt
+dnsmap
+ent
+ettercap
+gnupg
+gnupg2
+hashcat
+haveged
+john
+keyutils
+kismet
+libressl
+minisign
+nmap
+p0f
+passwdqc
+pwgen
+reop
+rng-tools
+scrypt
+testssl.sh
+zmap
+
+# development
+autoconf
+automake
+binutils
+bison
+cpanminus
+cvs
+flex
+gcc
+gdb
+gettext
+git
+git-perl
+glibc-devel
+libtool
+m4
+make
+mercurial
+patch
+pkg-config
+rcs
+redo
+smake
+texinfo
+
+# rescue & forensics
+antiword
+biew
+binwalk
+bvi
+dcraw
+ddrescue
+dhex
+extundelete
+fbpdf
+fbv
+flashrom
+foremost
+hashdeep
+ht
+ired
+jhead
+mtree
+pev
+rhash
+rkhunter
+sleuthkit
+ssdeep
+testdisk
+tweak
+vbindiff
+
+# entertainment
+cmus
+cmus-flac
+cmus-libao
+cmus-mpc
+crawl
+ddate
+libao-sndio
+mpg123
+nethack
+sndio
+vitetris
+vorbis-tools
+
+# backup
+attic
+backupninja
+borg
+bup
+burp-client
+burp-server
+csync
+csync2
+dar
+duplicity
+mt-st
+obnam
+rdiff-backup
+rdumpfs
+rsnapshot
+rsync
+snapraid
+unison
+zbackup
+zpaq
+
+# shells
+dash
+es
+ksh
+mksh
+pdmenu
+posh
+rc
+tcsh
+zsh
+
+# text editors
+ed
+emacs
+ex-vi
+jupp
+mg
+nano
+neatvi
+nvi
+vim
+
+# clients
+edbrowse
+elinks
+ii
+inetutils-ftp
+inetutils-telnet
+irssi
+ldapvi
+lftp
+links
+lynx
+mcabber
+mpop
+mutt
+ncftp
+rtorrent
+s-nail
+sic
+tin
+tnftp
+trn
+w3m
+
+# servers
+dnsmasq
+fastd
+inetutils-inetd
+nginx
+nsd
+opensmtpd
+openvpn
+polipo
+privoxy
+rsyslog
+stunnel
+tftp-hpa
+tinyproxy
+unbound
+xinetd
+zerotier-one
+
+# office
+ledger
+sc
+sc-im
+when
diff --git a/isolinux/isolinux.cfg.in b/isolinux/isolinux.cfg.in
index 69de967..671b592 100644
--- a/isolinux/isolinux.cfg.in
+++ b/isolinux/isolinux.cfg.in
@@ -1,24 +1,21 @@
-UI vesamenu.c32
+SERIAL 0 115200
+UI menu.c32
 PROMPT 0
 TIMEOUT 100
 ONTIMEOUT linux
 
+MENU TITLE Welcome to the hrmpf rescue system, built on Void Linux
 MENU TABMSG Press ENTER to boot or TAB to edit a menu entry
 MENU AUTOBOOT BIOS default device boot in # second{,s}...
 MENU BACKGROUND @@SPLASHIMAGE@@
 MENU WIDTH 78
 MENU MARGIN 1
-MENU ROWS 4
+MENU ROWS 12
 MENU VSHIFT 2
-MENU TIMEOUTROW 8
-MENU TABMSGROW 2
-MENU CMDLINEROW 11
-MENU HELPMSGROW 16
-MENU HELPMSGENDROW 29
 
-MENU COLOR title        * #FF5255FF *
-MENU COLOR border       * #00000000 #00000000 none
-MENU COLOR sel          * #ffffffff #FF5255FF *
+#MENU COLOR title        * #FF5255FF *
+#MENU COLOR border       * #00000000 #00000000 none
+#MENU COLOR sel          * #ffffffff #FF5255FF *
 
 LABEL linux
 MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@
@@ -28,6 +25,38 @@ LABEL linuxram
 MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ (RAM)
 KERNEL /boot/vmlinuz
 APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ rd.live.ram
+LABEL linuxtext
+MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ (Text mode/Serial)
+KERNEL /boot/vmlinuz
+APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ modprobe.blacklist=bochs_drm nomodeset console=tty0 console=ttyS0,115200n8
+LABEL hdt
+MENU LABEL HDT (Hardware Detection Tool)
+KERNEL hdt.c32
+LABEL memtest86+
+MENU LABEL memtest86+ 5.01
+KERNEL memdisk
+INITRD /boot/memtest86+-5.01.iso
+APPEND iso
+LABEL mhdd32
+MENU LABEL MHDD32 v4.6 Hard Drive Analysis Tool
+KERNEL memdisk
+INITRD /boot/mhdd32ver4.6.iso
+APPEND iso
+LABEL ipxe
+MENU LABEL iPXE 1.0.0+
+KERNEL memdisk
+INITRD /boot/ipxe.iso
+APPEND iso
+LABEL balder
+MENU LABEL Balder10 FreeDOS
+KERNEL memdisk
+INITRD /boot/balder10.img
+APPEND raw
+LABEL grub
+MENU LABEL Bare GRUB 2
+KERNEL memdisk
+APPEND iso
+INITRD /boot/grub2.iso
 LABEL c
 MENU LABEL Boot first HD found by BIOS
 COM32 chain.c32
diff --git a/mkhrmpf.sh b/mkhrmpf.sh
new file mode 100755
index 0000000..68938e5
--- /dev/null
+++ b/mkhrmpf.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+./mklive.sh \
+	-T "hrmpf live/rescue system" \
+	-C "loglevel=6 printk.time=1 consoleblank=0 net.ifnames=0" \
+	-r http://repo.voidlinux.eu/current \
+	-r http://repo.voidlinux.eu/current/nonfree \
+	-S 1024 \
+	-B extra/balder10.img \
+	-B extra/mhdd32ver4.6.iso \
+	-B extra/ipxe.iso \
+	-B extra/memtest86+-5.01.iso \
+	-B extra/grub2.iso \
+	-p "$(grep '^[^#].' hrmpf.packages)" \
+	-A "gawk tnftp inetutils-hostname libressl-netcat dash vim-common" \
+	-U "spl zfs"
diff --git a/mklive.sh.in b/mklive.sh.in
index ed710f9..c387fa7 100644
--- a/mklive.sh.in
+++ b/mklive.sh.in
@@ -66,6 +66,7 @@ Usage: $PROGNAME [options]
 
 Options:
  -a <xbps-arch>     Set XBPS_ARCH (do not use it unless you know what it is)
+ -A "pkg pkgN"      Set xbps-alternatives for packages.
  -b <system-pkg>    Set an alternative base-system package (defaults to base-system).
  -r <repo-url>      Use this XBPS repository (may be specified multiple times).
  -c <cachedir>      Use this XBPS cache directory (/var/cache/xbps if unset).
@@ -76,11 +77,13 @@ Options:
  -S <freesize>      Allocate this free size (MB) for the rootfs.
  -o <file>          Output file name for the ISO image (auto if unset).
  -p "pkg pkgN ..."  Install additional packages into the ISO image.
+ -U "pkg pkgN ..."  Install additional unconfigured packages into the ISO image.
  -I <includedir>    Include directory structure under given path into rootfs
 
  -C "cmdline args"  Add additional kernel command line arguments.
  -T "title"         Modify the bootloader title.
  -K                 Do not remove builddir.
+ -B <file>          Add file to /boot
 
 The $PROGNAME script generates a live image of the Void Linux distribution.
 This ISO image can be written to a CD/DVD-ROM or any USB stick.
@@ -131,6 +134,17 @@ install_packages() {
     fi
     chroot $ROOTFS env -i xbps-reconfigure -a
 
+    xbps-query -r $ROOTFS -l >installed.pkgs
+    for a in $ALTERNATIVES; do
+        xbps-alternatives -r $ROOTFS -s $a
+    done
+    xbps-alternatives -r $ROOTFS -l >installed.alternatives
+
+    if [ "$UNCONF_PACKAGE_LIST" ]; then
+        XBPS_ARCH=$BASE_ARCH ${XBPS_INSTALL_CMD} -r $ROOTFS \
+            $XBPS_REPOSITORY $XBPS_CACHEDIR -y -U ${UNCONF_PACKAGE_LIST}
+    fi
+
     if [ -x installer.sh ]; then
         install -Dm755 installer.sh $ROOTFS/usr/sbin/void-installer
     else
@@ -159,6 +173,9 @@ generate_initramfs() {
 
     mv $ROOTFS/boot/initrd $BOOT_DIR
     cp $ROOTFS/boot/vmlinuz-$KERNELVERSION $BOOT_DIR/vmlinuz
+    if [ "$BOOT_FILES" ]; then
+        cp $BOOT_FILES $BOOT_DIR
+    fi
 }
 
 cleanup_rootfs() {
@@ -177,9 +194,14 @@ generate_isolinux_boot() {
     cp -f $SYSLINUX_DATADIR/isolinux.bin "$ISOLINUX_DIR"
     cp -f $SYSLINUX_DATADIR/ldlinux.c32 "$ISOLINUX_DIR"
     cp -f $SYSLINUX_DATADIR/libcom32.c32 "$ISOLINUX_DIR"
-    cp -f $SYSLINUX_DATADIR/vesamenu.c32 "$ISOLINUX_DIR"
+    cp -f $SYSLINUX_DATADIR/menu.c32 "$ISOLINUX_DIR"
+    cp -f $SYSLINUX_DATADIR/hdt.c32 "$ISOLINUX_DIR"
     cp -f $SYSLINUX_DATADIR/libutil.c32 "$ISOLINUX_DIR"
+    cp -f $SYSLINUX_DATADIR/libmenu.c32 "$ISOLINUX_DIR"
+    cp -f $SYSLINUX_DATADIR/libgpl.c32 "$ISOLINUX_DIR"
     cp -f $SYSLINUX_DATADIR/chain.c32 "$ISOLINUX_DIR"
+    cp -f $SYSLINUX_DATADIR/memdisk "$ISOLINUX_DIR"
+    cp -f /usr/share/hwdata/pci.ids "$ISOLINUX_DIR"
     cp -f isolinux/isolinux.cfg.in "$ISOLINUX_DIR"/isolinux.cfg
     cp -f ${SPLASH_IMAGE} "$ISOLINUX_DIR"
 
@@ -292,10 +314,12 @@ generate_iso_image() {
 #
 # main()
 #
-while getopts "a:b:r:c:C:T:Kk:l:i:I:s:S:o:p:h" opt; do
+while getopts "a:A:B:b:r:c:C:T:Kk:l:i:I:s:S:o:p:U:h" opt; do
     case $opt in
         a) BASE_ARCH="$OPTARG";;
+        A) ALTERNATIVES="$OPTARG";;
         b) BASE_SYSTEM_PKG="$OPTARG";;
+        B) BOOT_FILES="$BOOT_FILES $OPTARG";;
         r) XBPS_REPOSITORY="--repository=$OPTARG $XBPS_REPOSITORY";;
         c) XBPS_CACHEDIR="--cachedir=$OPTARG";;
         K) readonly KEEP_BUILDDIR=1;;
@@ -307,6 +331,7 @@ while getopts "a:b:r:c:C:T:Kk:l:i:I:s:S:o:p:h" opt; do
         S) ROOTFS_FREESIZE="$OPTARG";;
         o) OUTPUT_FILE="$OPTARG";;
         p) PACKAGE_LIST="$OPTARG";;
+        U) UNCONF_PACKAGE_LIST="$OPTARG";;
         C) BOOT_CMDLINE="$OPTARG";;
         T) BOOT_TITLE="$OPTARG";;
         h) usage;;
@@ -379,14 +404,14 @@ _linux_series=$(XBPS_ARCH=$BASE_ARCH $XBPS_QUERY_CMD -r $ROOTFS ${XBPS_REPOSITOR
 _kver=$(XBPS_ARCH=$BASE_ARCH $XBPS_QUERY_CMD -r $ROOTFS ${XBPS_REPOSITORY:=-R} -p pkgver ${_linux_series})
 KERNELVERSION=$($XBPS_UHELPER_CMD getpkgversion ${_kver})
 
-: ${OUTPUT_FILE="void-live-${BASE_ARCH}-${KERNELVERSION}-$(date +%Y%m%d).iso"}
+: ${OUTPUT_FILE="hrmpf-${BASE_ARCH}-${KERNELVERSION}-$(date +%Y%m%d).iso"}
 
 print_step "Installing software to generate the image: ${REQUIRED_PKGS} ..."
 install_prereqs
 
 mkdir -p "$ROOTFS"/etc
 [ -s data/motd ] && cp data/motd $ROOTFS/etc
-[ -s data/issue ] && cp data/issue $ROOTFS/etc
+[ -s data/issue.in ] && sed "s/@@VERSION@@/hrmpf-${BASE_ARCH}-${KERNELVERSION}-$(date +%Y%m%d)/" data/issue.in >$ROOTFS/etc/issue
 
 print_step "Installing void pkgs into the rootfs: ${PACKAGE_LIST} ..."
 install_packages