summaryrefslogtreecommitdiff
path: root/source/installer
diff options
context:
space:
mode:
authorPatrick J Volkerding <volkerdi@slackware.com>2018-05-28 19:12:29 +0000
committerEric Hameleers <alien@slackware.com>2018-05-31 23:39:35 +0200
commit646a5c1cbfd95873950a87b5f75d52073a967023 (patch)
treeb8b8d2ab3b0d432ea69ad1a64d1c789649d65020 /source/installer
parentd31c50870d0bee042ce660e445c9294a59a3a65b (diff)
downloadcurrent-646a5c1cbfd95873950a87b5f75d52073a967023.tar.gz
Mon May 28 19:12:29 UTC 201820180528191229
a/pkgtools-15.0-noarch-13.txz: Rebuilt. installpkg: default line length for --terselength is the number of columns. removepkg: added --terse mode. upgradepkg: default line length for --terselength is the number of columns. upgradepkg: accept -option in addition to --option. ap/vim-8.1.0026-x86_64-1.txz: Upgraded. d/bison-3.0.5-x86_64-1.txz: Upgraded. e/emacs-26.1-x86_64-1.txz: Upgraded. kde/kopete-4.14.3-x86_64-8.txz: Rebuilt. Recompiled against libidn-1.35. n/conntrack-tools-1.4.5-x86_64-1.txz: Upgraded. n/libnetfilter_conntrack-1.0.7-x86_64-1.txz: Upgraded. n/libnftnl-1.1.0-x86_64-1.txz: Upgraded. n/links-2.16-x86_64-2.txz: Rebuilt. Rebuilt to enable X driver for -g mode. n/lynx-2.8.9dev.19-x86_64-1.txz: Upgraded. n/nftables-0.8.5-x86_64-1.txz: Upgraded. n/p11-kit-0.23.11-x86_64-1.txz: Upgraded. n/ulogd-2.0.7-x86_64-1.txz: Upgraded. n/whois-5.3.1-x86_64-1.txz: Upgraded. xap/network-manager-applet-1.8.12-x86_64-1.txz: Upgraded. xap/vim-gvim-8.1.0026-x86_64-1.txz: Upgraded.
Diffstat (limited to 'source/installer')
-rw-r--r--source/installer/ChangeLog.txt647
-rw-r--r--source/installer/README136
-rwxr-xr-xsource/installer/build_installer.sh2179
-rw-r--r--source/installer/busybox-1.19.4.tar.bz2.sign18
-rw-r--r--source/installer/busybox.2.6.32.2.diff13
-rwxr-xr-xsource/installer/busybox.SlackBuild77
-rw-r--r--source/installer/busybox.fix.perms.64bit.platforms.diff44
-rw-r--r--source/installer/busybox.glibc217.diff10
-rw-r--r--source/installer/busybox.wget.P.diff31
-rw-r--r--source/installer/dhcpcd/config.h.diff17
-rw-r--r--source/installer/dhcpcd/dhcpcd.sh.diff17
-rwxr-xr-xsource/installer/installer.SlackBuild56
-rw-r--r--source/installer/module-blacklist118
-rw-r--r--source/installer/sources/busybox/busybox-1.28.3.tar.bz2.sign18
-rw-r--r--source/installer/sources/busybox/busybox-dot-config (renamed from source/installer/busybox-dot-config)1106
-rw-r--r--source/installer/sources/dropbear/doinst.sh (renamed from source/installer/dropbear/doinst.sh)0
-rwxr-xr-xsource/installer/sources/dropbear/dropbear.Slackbuild (renamed from source/installer/dropbear/dropbear.Slackbuild)0
-rw-r--r--source/installer/sources/dropbear/dropbear.glibc.crypt.diff (renamed from source/installer/dropbear/dropbear.glibc.crypt.diff)0
-rw-r--r--source/installer/sources/dropbear/dropbear.xauth.patch (renamed from source/installer/dropbear/dropbear.xauth.patch)0
-rw-r--r--source/installer/sources/dropbear/dropbear_dbclientpath.patch (renamed from source/installer/dropbear/dropbear_dbclientpath.patch)0
-rw-r--r--source/installer/sources/dropbear/dropbear_emptypass.patch (renamed from source/installer/dropbear/dropbear_emptypass.patch)0
-rw-r--r--source/installer/sources/dropbear/rc.dropbear.new (renamed from source/installer/dropbear/rc.dropbear.new)0
-rw-r--r--source/installer/sources/dropbear/slack-desc (renamed from source/installer/dropbear/slack-desc)6
-rwxr-xr-xsource/installer/sources/efi.i586/EFI/BOOT/elilo.conf25
-rwxr-xr-xsource/installer/sources/efi.i586/EFI/BOOT/message.txt16
-rwxr-xr-xsource/installer/sources/efi.x86_64/EFI/BOOT/elilo.conf15
-rwxr-xr-xsource/installer/sources/efi.x86_64/EFI/BOOT/message.txt16
-rw-r--r--source/installer/usbimg2disk.sh501
28 files changed, 4358 insertions, 708 deletions
diff --git a/source/installer/ChangeLog.txt b/source/installer/ChangeLog.txt
new file mode 100644
index 00000000..f20ea82c
--- /dev/null
+++ b/source/installer/ChangeLog.txt
@@ -0,0 +1,647 @@
+Sat Apr 28 20:04:23 UTC 2018
+ Reduce sleep times in the installer. You'll just have to read faster. ;-)
++--------------------------+
+Sat Apr 21 00:29:54 UTC 2018
+ Use busybox's dd after all... it wasn't the cause of the size display bug.
+ Don't try to migrate /tmp storage to the hard drive. We're not in the
+ floppy disk era any more and are unlikely to run out of space on a tmpfs.
++--------------------------+
+Wed Apr 18 04:06:45 UTC 2018
+ Update busybox to 1.28.3.
+ Add dd and mcookie to the installer.
+ Add a dialog when setup starts to tell the user that partition information
+ is being collected.
++--------------------------+
+Sat Mar 31 18:00:31 UTC 2018
+ sources/initrd/skeleton_initrd.tar.gz:
+ /sbin/probe: use md5sum of /proc/partitions to determine if previously
+ cached results should be returned.
++--------------------------+
+Thu Mar 22 09:51:59 UTC 2018
+ Fixes for ARM:
+ * Fix module loading from etc/rc.d/rc.S
+ * Update architecture quadlet for build target
++--------------------------+
+Thu Mar 1 21:56:38 UTC 2018
+ Put up "Scanning for USB stick..." dialog during the scan delay.
+ Make "terse" the pre-selected menu mode.
++--------------------------+
+Thu Mar 1 06:55:30 UTC 2018
+ /sbin/probe: Add -c option to use the cached previous results if possible.
+ Use cached probe where possible in /usr/lib/setup scripts.
+ In many places, remove double spaces from after sentences in accordance with
+ the Chicago Manual of Style recommendations.
++--------------------------+
+Mon Feb 19 22:30:33 UTC 2018
+ Add packages: lzip, lzlib, plzip.
++--------------------------+
+Tue Feb 13 06:43:38 UTC 2018
+ Put files in the same places that they would be on a real install, instead
+ of shoving everything into /bin. Remove busybox symlinks if we have a real
+ version to use instead.
+ Don't copy /bin/tar-[0-9]* to the installer. /bin/tar is good enough
+ (check it with --version ;-), and the pkgtools no longer use tar-1.13.
+ Don't sed the ldd shebang, no need now that we have a /usr/bin/bash symlink.
+ Make sure that /bin/sh points to bash, but don't mess with other shell links.
+ Copy /usr/bin/ddrescue from the package to the installer.
++--------------------------+
+Sun Feb 4 04:24:08 UTC 2018
+ Create /etc/default directory.
+ Include /etc/default/{nfs,rpc}
++--------------------------+
+Wed Nov 22 18:34:44 UTC 2017
+ Update to the newer elilo.x64 binary in sources/efi*
++--------------------------+
+Wed Nov 22 04:49:08 UTC 2017
+ SeTEFI: Don't use fdisk -l (unneccessary). Thanks to Didier Spaier.
+ SetEFI: Scan /dev/mmcblk[0-9]. Thanks to zerouno.
+ probe: Filter another possible EFI partition label.
++--------------------------+
+Sun Nov 12 22:08:51 UTC 2017
+ Include iproute2 and hostname packages (to get hostname and ip man pages).
++--------------------------+
+Mon Oct 2 17:35:19 UTC 2017
+ slackinstall: When doing a network install, don't download a package if the
+ tagfile is going to skip installing it. Thanks to ivandi.
++--------------------------+
+Sat Sep 30 21:06:10 UTC 2017
+ SeTnet attempts to cat $TMP/SeTT_PX at boot time, when it doesn't exist.
+ I just directed stderr from these attempts to /dev/null to get rid of the
+ error message, but perhaps there's a bug here that needs to be addressed?
+ SeTnet doesn't actually seem to use $T_PX for anything other than determining
+ if it's running on the installer or an installed system.
++--------------------------+
+Fri Jul 28 17:09:07 UTC 2017
+ Upgraded to busybox-1.27.1, and enabled damn near everything. Might as well,
+ since the size of e.g. kernel modules will dwarf the busybox binary anyway,
+ and any real utilities we use will be copied over the symlinks after busybox
+ is built.
+ Removed /usr/bin/man shell script -- use busybox man applet instead.
+ Create /usr/bin/man? -> cat? symlinks to make busybox man happy with the
+ preprocessed manpages.
++--------------------------+
+Mon Jul 17 18:47:36 UTC 2017
+ In busybox-dot-config, add support for findfs and volume ids.
++--------------------------+
+Fri Jul 7 18:53:31 UTC 2017
+ Dnsmasq has changed to using libidn2, so add the libidn2 library and the
+ libunistring library to the installer. Don't add libidn version 1 anymore,
+ as nothing else on the installer uses it.
++--------------------------+
+Tue May 9 20:22:15 UTC 2017
+ Replace hardcoded /mnt with ${T_PX} in many places.
+ Thanks to alienBOB.
++--------------------------+
+Tue May 9 18:43:55 UTC 2017
+ Use nosuid,nodev,noexec mount options for /dev/shm in installer-created
+ /etc/fstab.
++--------------------------+
+Thu May 4 21:31:35 UTC 2017
+ Patched SeTEFI and probe to fix NVMe support.
+ Thanks to Didier Spaier.
++--------------------------+
+Thu Feb 23 19:00:56 UTC 2017
+ sources/initrd/skeleton_initrd.tar.gz:
+ /sbin/probe, line 156: filter output through strings to avoid bash warning
+ about NUL bytes in input.
++--------------------------+
+Mon Jan 2 23:34:36 UTC 2017
+ build_installer: Use the 'bash' package rather than compiling it.
+ Removed some old ARM cruft.
+ Added some basic 'aarch64' (arm64) support.
++--------------------------+
+Sat Dec 24 00:53:47 UTC 2016
+ build_installer: Do not include libtermcap.
+ Also, I'd rather see this use the bash package than compile bash, just to
+ save a bit of compile time. There's currently no reason to be compiling
+ this, and the given reason is "in case we might need diet configure flags
+ sometime in the future". YAGNI.
++--------------------------+
+Tue Jul 12 17:25:10 UTC 2016
+ build_installer: Switched soft->hard float CFLAGS.
+ Removed trailing white space.
++--------------------------+
+Tue Jun 7 10:36:58 UTC 2016
+ build_installer: Added /etc/nfsmount.conf so that any default changes
+ made to the nfs-utils package exist within the installer.
+ Moved some of the file copying script around.
+ sources/initrd/skeleton_initrd.tar.gz:
+ Removed etc/nfsmount.conf, etc/dialogrc (was already copied by the
+ build_installer script).
+ MoZes.
++--------------------------+
+Fri May 27 19:45:28 UTC 2016
+ Forgot to make rc.dropbear executable, AAAAAARGH
++--------------------------+
+Wed May 25 23:08:19 UTC 2016
+ In rc.dropbear, don't tell it to use motd.net, which no longer exists.
++--------------------------+
+Fri May 20 17:10:54 UTC 2016
+ Include /sbin/e4crypt.
++--------------------------+
+Wed May 11 23:43:13 UTC 2016
+ In rc.S, comment out making motd.net telling the user to source /etc/profile.
+ Dropbear handles things properly without that now.
++--------------------------+
+Tue May 3 19:53:33 UTC 2016
+ Include md/dm-raid.ko module for LVM with internal RAID support.
++--------------------------+
+Sun Apr 24 00:27:03 UTC 2016
+ Patched busybox to fix newly created directory perms on 64-bit platforms.
++--------------------------+
+Sat Mar 19 21:27:44 UTC 2016
+ Increase "full install" size estimate to 9+ GB.
++--------------------------+
+Sat Mar 19 19:01:06 UTC 2016
+ Add libpci.so.* to the installer, since lspci needs that now.
++--------------------------+
+Sat Mar 5 18:12:03 UTC 2016
+ Use "mkfs.brtfs -f" in SeTpartitions. Thanks to Didier Spaier.
++--------------------------+
+Wed Mar 2 20:01:32 UTC 2016
+ Patch /sbin/probe (again) to hopefully fix NVMe devices on Dell laptops.
++--------------------------+
+Sat Feb 20 17:50:37 UTC 2016
+ Set empty password for root in /etc/shadow so that root can log in using
+ dropbear. Thanks to MoZes.
++--------------------------+
+Wed Feb 3 00:13:29 UTC 2016
+ Include all cpufreq modules.
+ Keep acpi/processor.ko, needed by acpi-cpufreq.
+ Use 'LANG=C fdisk -l' in SeTEFI.
++--------------------------+
+Wed Jan 13 19:15:03 UTC 2016
+ Fixed this line in /sbin/probe:
+ elif [ "$MAJOR" = "259" ]; then
++--------------------------+
+#NOT ACTUALLY MERGED SINCE IT DOESN'T WORK
+#Tue Jan 12 07:26:02 UTC 2016
+# Use tar to extract the kernel module directory version number from the
+# kernel-modules package. This is needed for a kernel such as 4.4 which
+# installs modules in /lib/modules/4.4.0/.
++--------------------------+
+Thu Dec 24 20:35:26 UTC 2015
+ Patched /sbin/probe for nvme partitions.
+ Thanks to Didier Spaier.
++--------------------------+
+Wed Dec 23 04:09:29 UTC 2015
+ Added kernel modules: block/nvme.ko, mmc/host/sdhci-acpi.ko.
++--------------------------+
+Mon Dec 21 08:40:29 UTC 2015
+Updates for auto NFS mounting:
+sources/initrd/skeleton_initrd.tar.gz:
+ usr/lib/setup/INSNFS: Use '/etc/rc.d/rc.rpc restart' rather than starting
+ rpcbind and rpc.statd directly.
+ etc/services: Removed. Now added by the build_installer.sh script.
+build_installer.sh:
+ Add /etc/rc.d/rc.rpc to the installer image and chmod +x.
+ Add /usr/sbin/sm-notify from nfs-utils package.
+ Copy /etc/services from the 'a/etc' package to ensure that it's always up to date.
+ Copy /etc/netconfig from the libtirpc package (required for rpc.statd/rpcbind).
+ MoZes.
++--------------------------+
+Tue Dec 15 21:04:25 UTC 2015
+ Remove portmap from package list, add libtirpc and rpcbind.
+ Patch INSNFS to run rpcbind instead of rpc.portmap.
++--------------------------+
+Tue Dec 1 22:28:10 UTC 2015
+ In /etc/motd, don't suggest gdisk and cgdisk for partitioning GPT, since
+ fdisk and cfdisk work just fine now. Also, remove instructions for starting
+ PCMCIA and Cardbus devices. I doubt many people are still using that.
++--------------------------+
+Wed Nov 25 05:17:36 UTC 2015
+ Add /dev/shm and /dev/pts to /etc/fstab.
++--------------------------+
+Wed Nov 25 02:34:25 UTC 2015
+ Change 32-bit x86 $ARCH to i586.
++--------------------------+
+Tue Nov 24 21:54:15 UTC 2015
+ Added /bin/numfmt to use for converting bytes into K, M, T, or even P.
+ Used in the installer itself and in pkgtools.
++--------------------------+
+Thu Nov 19 18:02:48 UTC 2015
+ Replace udev with eudev/libgudev.
++--------------------------+
+Wed Nov 18 23:25:57 UTC 2015
+ Also support T (although it's not like I wasn't already)
++--------------------------+
+Wed Nov 18 22:04:08 UTC 2015
+ Correct partition sizes, and use K, M, or G.
+ Use -F -F for all mkfs.ext* (shut up and do what I say mode)
++--------------------------+
+Sat Nov 14 18:54:26 UTC 2015
+ Add hwdata package to get pci.ids and usb.ids.
++--------------------------+
+Tue Nov 3 19:40:22 UTC 2015
+ Added libpcre.so.1, needed by the new grep.
++--------------------------+
+Thu Oct 29 19:42:58 GMT 2015
+ No longer build dhcpcd version 3, use the dhcpcd package from the 'n'
+ series.
+ Removed some superfluous white space. Still more to do ;-)
++--------------------------+
+Thu Aug 27 19:55:26 UTC 2015
+ Patched build-installer.sh to allow for non-numeric $VERSION in packages.
+ Thanks to MoZes.
++--------------------------+
+Thu Aug 6 23:42:10 UTC 2015
+ sed s/procps/procps-ng/g in build-installer.sh.
++--------------------------+
+Mon May 25 09:47:32 UTC 2015
+Merged fixes from MoZes:
+
+sources/initrd/skeleton_initrd.tar.gz:
+1) etc/profile:
+ The code to parse TERM= from /proc/cmdline only worked properly if TERM=
+ was at a particular position in the string.
+ This is for handling installations on ARM using the serial console and 'screen':
+--- etc/profile.orig 2013-12-03 09:04:26.000000000 +0000
++++ etc/profile 2015-05-25 09:44:02.078325859 +0100
+@@ -7,8 +7,8 @@
+
+ # Allow a user to set the default TERM entry by specifying TERM=<name>
+ # as a kernel command line parameter:
+-if cat /proc/cmdline | grep TERM= 1> /dev/null 2> /dev/null ; then
+- export $( sed -n -e "s/.*\(TERM=.*\ \).*/\1/p" < /proc/cmdline )
++if cat /proc/cmdline | grep "TERM=[a-zA-Z0-9]" 1> /dev/null 2> /dev/null ; then
++ export TERM=$( sed 's/.*TERM=\([^ ]*\).*/\1/' < /proc/cmdline )
+ elif cat /proc/cmdline | grep console=ttyS 1> /dev/null 2> /dev/null ; then
+
+2) etc/rc.d/rc.inet1
+10 seconds timeout is too little on the SheevaPlug and I've also seen a report
+on LQ about the same issue on x86_64 -- I suppose it depends on the network driver
+or the NIC itself.
+I needed at _least_ 30 seconds for the SheevaPlug to get an IP, and about 12 seconds
+for the Banana Pi.
+--- etc/rc.d/rc.inet1.orig 2011-04-15 13:48:22.000000000 +0100
++++ etc/rc.d/rc.inet1 2015-05-25 10:01:19.357259132 +0100
+@@ -22,7 +22,7 @@
+ if grep -q $(echo ${EDEV}: | cut -f 1 -d :): /proc/net/wireless ; then
+ continue # skip wireless interfaces
+ fi
+- /sbin/dhcpcd -t 10 -L -T $EDEV 1>/etc/dhcpc/dhcpcd-${EDEV}.info 2>/dev/null &
++ /sbin/dhcpcd -t 35 -L -T $EDEV 1>/etc/dhcpc/dhcpcd-${EDEV}.info 2>/dev/null &
+ done
+ fi
+
+/build_installer.sh: (ARM only):
+ Set the system clock from the RTC prior to fudging the date because on some
+ devices the system clock is not set when the RTC module loads.
++--------------------------+
+Mon May 4 04:13:36 UTC 2015
+In rc.S, move fakedate hack so that udev runs first.
++--------------------------+
+Wed Apr 29 18:56:54 UTC 2015
+Merged updates from MoZes:
+build_installer.sh: Enable setting the terminal window title even through
+'screen'.
+Fri Feb 20 19:18:22 UTC 2015
+Fetch libfdisk and libsmartcols from /lib, not /usr/lib.
+The location was changed since there are binaries outside of /usr
+that link to these.
++--------------------------+
+Fri Feb 20 01:19:54 UTC 2015
+Updated /sbin/probe to work with the new util-linux fdisk.
+Updated SeTEFI to work with the new util-linux fdisk.
++--------------------------+
+Fri Feb 13 22:27:44 UTC 2015
+Fix calls to setterm that reset the foreground/background to set the desired
+colors rather than use "default" since it appears the util-linux people broke
+that, too.
++--------------------------+
+Fri Feb 13 20:41:50 UTC 2015
+Updates to rc.S in the skeleton_initrd.tar.gz to fix issues with the new
+util-linux update. Also, use -F with mke2fs, otherwise it'll hang if the
+partition was previously formatted.
++--------------------------+
+Wed Feb 11 01:10:20 UTC 2015
+Add libsmartcols fom the new util-linux.
++--------------------------+
+Sun Feb 8 14:40:19 GMT 2015
+Merged updates from MoZes:
+build_installer.sh: Added rtl_nic to the list of firmwares to include.
+This firmware is added to the ARM 'a/kernel-firmware' package so will not be present
+on x86.
++--------------------------+
+Sun Nov 16 19:12:13 UTC 2014
+Applied fixes from MoZes:
+1) bash patch #12 is UTF8 so it was not caught by the grep, so anything past patch 11
+ was never applied. Fixed to match file types of 'ASCII' and 'text'.
+2) ARM does not have syslinux, so we don't want to exit the Installer build because of this.
+ Only try and move the syslinux-nomtools binary if we're running on an *86* platform.
++--------------------------+
+Tue Sep 9 03:31:31 UTC 2014
+Use syslinux-nomtools on the installer. Thanks to Didier Spaier.
++--------------------------+
+Wed Jul 23 22:08:21 UTC 2014
+Fix SeTDOS script to show the partition device properly when setting the
+security level. Thanks to luvr on LQ.
++--------------------------+
+Fri Apr 18 11:13:15 BST 2014
+All of these changes have been tested on ARM and x86.
+
+1. build_installer.sh
+
+ Include both versions of tar from the a/tar-*.t?z package:
+
+ Many users use the installer as a rescue system and tar-1.13 has issues with
+ files with long file names:
+ http://www.linuxquestions.org/questions/slackware-14/%5Bto-devs%5D-slackware-install-iso-tar-version-tooo-old-4175497116/
+
+ The pkgtools inside the installer call tar-1.13 directly. All other
+ scripts that call tar (font setting) work properly with tar-1.26.
+
+2. installer/sources/initrd/skeleton_initrd.tar.gz
+
+All of these changes are baked into the new version of the archive.
+
+Summary:-
+
+etc/inittab:
+ Upon shutdown of the installer, kill dropbear to prevent installations
+ performed over SSH from hanging until the SSH client times out.
+
+usr/lib/setup/setup:
+ Move from x86-centric man-at-keyboard method of finalising the
+ installation. Offer 'reboot' or 'shell' from a dialog prompt - helpful
+ for systems that were remotely installed.
+ Switch single line of text instruction to remove CD with a dialog box.
++--------------------------+
+Sat Feb 15 22:26:01 UTC 2014
+Merged updates from MoZes:
+build_installer.diff
+ Changelog:
+ Add 's' and 'x' termcaps so the installation looks pretty when
+ installed over serial console using 'screen' as a terminal emulator.
+ ARM: Switch the 'versatile' kernel name to 'armv7'.
+ Drop an ancient serial console bug fix.
+
+skeleton_initrd.tar.gz:
+ Modified etc/profile:
+ to allow user to set TERM= as a kernel paramater, so as to set $TERM up front.
+ The previous logic was that when console=ttyS was found, the TERM defaulted to vt100
+ which was unfortunate because the ARM devices are usually always booted from a serial
+ console with that kernel parameter, but are controlled from a fully functional
+ Linux terminal emulator.
+
+ Modified etc/rc.S
+ Move the keyboard selector to after the profile scripts have been executed, so
+ the user can set a useful TERM value that works properly with dialog.
+
+ Modified: usr/lib/setup/SeTnet
+ Added 'clear' after dialog finishes, to avoid a messy screen on the serial port
+ (for example, after eth0 is initialised with DHCP, drop bear starts and splatters
+ its key generation over the blue background, looking badly integrated).
++--------------------------+
+Fri Nov 1 01:02:38 UTC 2013
+Mute the LVM scan at the end of package installation.
++--------------------------+
+Sun Oct 27 21:53:15 UTC 2013
+Filter "partitions" found on a USB installer stick in SeTDOS so that
+they don't appear in the menu.
++--------------------------+
+Sun Oct 13 23:49:24 UTC 2013
+Rework /sbin/probe to use gdisk instead of parted, as parted does not
+display the partition type code. This allows detecting swap space
+without first running mkswap on it, and prevents unknown partition types
+from showing up as Linux partitions.
+Added SeTEFI script, which will set up an EFI System Partition.
+A partition found on the same device as the root Linux partition will be
+preferred, but otherwise any EFI partition found on /dev/sd{a,b,c...}
+will be used.
+Add /bin/pr, needed by rescan-scsi-bus.sh.
++--------------------------+
+Wed Sep 25 05:12:29 UTC 2013
+Add support for installing the packages from a USB stick.
+This will require changing usbimg2disk to not modify the initrd.
++--------------------------+
+Thu Sep 12 07:19:29 UTC 2013
+Add freq_table.ko if KMS is requested in the build.
++--------------------------+
+Sat Sep 7 21:08:24 UTC 2013
+Don't install pt_chown. It's been removed from glibc-2.18 as a possible
+security hole, and is patched out of the glibc-2.17 in -current.
++--------------------------+
+Thu Sep 5 22:23:36 UTC 2013
+Added os-prober package, since liloconfig is going to use that to find
+Windows partitions (avoiding the issue of a USB installer stick being
+detected as a Window installation).
++--------------------------+
+Fri Aug 16 20:25:48 UTC 2013
+Fixed SeTPKG to handle changed output from "dialog --checklist" that no
+longer includes quotes. Also handles the older versions of dialog.
++--------------------------+
+Mon Aug 12 20:50:58 UTC 2013
+Use /etc/dialogrc from the dialog package, since the syntax has changed.
++--------------------------+
+Tue Aug 6 01:46:50 UTC 2013
+Fixed a couple typos in PROMPThelp.
++--------------------------+
+Wed Jul 24 20:09:54 UTC 2013
+Added liblzo2, needed by mkfs.btrfs.
++--------------------------+
+Mon Jul 15 20:46:24 UTC 2013
+Stop removing 8021q module, which is needed to use VLANs.
++--------------------------+
+Sun Jul 7 06:48:25 UTC 2013
+Apply mancha's glibc crypt() patch to dropbear.
++--------------------------+
+Thu Jun 20 20:07:11 UTC 2013
+Add /etc/nfsmount.conf to default to use NFSv3.
++--------------------------+
+Mon Jun 10 18:49:44 UTC 2013
+Reset background color after a CD switch during installation.
++--------------------------+
+Fri Apr 19 05:43:00 UTC 2013
+In probe script (part of initrd skel), set LANG to C.
+This will avoid parsing issues if we ever i18n this thing...
++--------------------------+
+Wed Mar 27 03:37:00 UTC 2013
+By default, add nomodeset to the kernel command line.
+If modesetting is needed, boot with kms.s or kmssmp.s.
++--------------------------+
+Tue Mar 19 05:30:44 UTC 2013
+Added missing ehci-hcd module.
++--------------------------+
+Sat Mar 16 05:45:29 UTC 2013
+Modified usbboot.img to work with EFI as well.
+Don't build efiboot.img.
++--------------------------+
+Tue Mar 12 04:35:07 UTC 2013
+Keep GPU modules, needed for video on UEFI. (ADD_KMS=1)
+Support building an EFI boot image. (EFIBOOT=1)
+Keep USB host modules, as huge.s is no longer building those in.
+Added two Terminus fonts to the initrd.
+Added setfont to busybox (needed to load an appropriate sized Terminus
+font when KMS is used).
+Patched busybox to fix a compile issue with glibc-2.17.
++--------------------------+
+Wed Feb 20 18:53:11 UTC 2013
+Support not adding network card firmware. (Stuart Winter)
++--------------------------+
+Fri Sep 7 18:06:06 UTC 2012
+Updated /sbin/rescan-scsi-bus.
++--------------------------+
+Tue Sep 4 19:06:38 UTC 2012
+Added comment=x-gvfs-show to /etc/fstab's cdrom entry.
+Increased full install size in setup to 7.3+ GB.
++--------------------------+
+Thu Aug 23 17:25:09 UTC 2012
+Include sdhci.ko and sdhci-pci.ko.
++--------------------------+
+Mon Aug 13 20:01:09 UTC 2012
+Include the staging/hv modules.
+Bind mount /dev in SeTconfig.
+Support virtual devices such as /dev/vda and /dev/xvda in /sbin/probe.
++--------------------------+
+Thu Aug 9 02:36:37 UTC 2012
+Added support for MMC devices to /sbin/probe (needed for Raspberry Pi).
+Thanks to David Spencer.
++--------------------------+
+Sat Aug 4 21:05:51 UTC 2012
+Switch from gdisk to gptdisk, and add new cgdisk and fixparts tools.
+Copy /etc/modprobe.d/ and /lib/modprobe.d/ to the installer.
++--------------------------+
+Thu Jul 26 21:52:59 UTC 2012
+Use '-s' option with eject, otherwise it fails.
+Fixed a missing space that broke a SeTnet dialog:
+- "\nAttempting to fetch a remote configuration file using $PROTO ..."54 56
++ "\nAttempting to fetch a remote configuration file using $PROTO ..." 54 56
++--------------------------+
+Sun Jul 22 16:33:05 UTC 2012
+Added XFCE series in SeTPKG.
++--------------------------+
+Mon Jul 16 23:37:35 UTC 2012
+Add toplevel /run directory.
++--------------------------+
+Tue Jul 3 16:23:38 UTC 2012
+Allow nic=auto for headless installs.
+Fixed /sbin/probe for systems that mix HP RAID with regular hard drives.
++--------------------------+
+Tue Jul 3 03:11:40 UTC 2012
+Change location of usb.ids and pci.ids to /usr/share/hwdata.
++--------------------------+
+Mon Jul 2 04:01:09 UTC 2012
+Patched busybox to fix wget -P option.
+Thanks to Kirill Smirnoff.
++--------------------------+
+Thu Jun 28 16:42:39 UTC 2012
+Added installer-arm.diff from MoZes (identify ARM installer via dropbear)
++--------------------------+
+Thu Jun 28 16:04:57 UTC 2012
+Switch from module-init-tools to kmod.
+Added missing dosfsck (the dangling symlinks were there already :)
++--------------------------+
+Thu Apr 12 22:06:48 UTC 2012
+Fix missing bash on 32-bit by adding an i486) options section
+to build_installer.sh.
++--------------------------+
+Sat Apr 7 17:10:14 UTC 2012
+Use real GNU bash as the shell.
+Point /bin/sh -> /bin/bash
+Don't build a shell into busybox.
++--------------------------+
+Wed Mar 28 01:30:00 UTC 2012
+fixed placement of /lib{,64}/libz.so.*, danke MoZes
++--------------------------+
+Mon Mar 26 00:53:08 UTC 2012
+In SeTpartitions, use -d single -m single as it increases performance by
+about 15%, and Luigi Genoni says multiple metadata copies are useless when
+using a btrfs filesystem consisting of a single device or partition (which
+is all the installer currently supports).
++--------------------------+
+Sat Apr 23 18:17:21 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: Try to load loop device module.
+build_installer.sh: Try to load loop device module.
+ Copy loop.ko to the installer.
++--------------------------+
+Thu Apr 21 21:20:23 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: Fixed GPT on RAID controllers.
+ Slightly less trivial. ;-)
++--------------------------+
+Thu Apr 21 02:54:52 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: Added GPT support on RAID devices
+ in /sbin/probe. Thanks to Greg Chandler.
+ (This was trivial, really!)
++--------------------------+
+Sun Apr 17 19:25:03 UTC 2011
+build_installer.sh: ADD_MANPAGES to arm.
++--------------------------+
+Fri Apr 15 18:25:28 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: Merged updated skel from alienBOB
+ with PXE server changes.
++--------------------------+
+Tue Apr 12 19:21:47 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: applied skeleton_dhcpcd.diff.
++--------------------------+
+Tue Apr 12 00:19:24 UTC 2011
+Added busybox httpd applet with all options.
++--------------------------+
+Mon Apr 11 05:35:21 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: SetDOS, add umask modes for vfat
+ similar to ntfs.
++--------------------------+
+Sat Mar 26 18:58:48 UTC 2011
+build_installer.sh: Retain virtio kernel modules.
++--------------------------+
+Sat Mar 26 04:33:40 UTC 2011
+sources/busybox/busybox-1.18.4.tar.bz2: Upgraded.
++--------------------------+
+Fri Mar 25 04:01:51 UTC 2011
+build_installer.sh: Add fsck.*.
+ Adjusted kernel installation to handle /kernels/memtest/memtest
+sources/initrd/skeleton_initrd.tar.gz: rc.S, scan RAID better
++--------------------------+
+Sat Mar 19 01:40:10 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: Add terse installation mode that only
+ displays one line per package so that people's heads do not explode
++--------------------------+
+Fri Mar 18 04:44:04 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: Increase estimate of full install
+ size to "6.5+ GB"
++--------------------------+
+Tue Mar 8 05:13:38 UTC 2011
+build_installer.sh: Add a kludgy but working man page whitelist and get
+ man pages on the x86 and x86_64 installers for partitioning tools,
+ filesystem tools, network stuff, and a few other things.
+ Added partx, findmnt, lsblk, fsfreeze, fstrim, and swaplabel.
+ Don't wipe /usr/man.
+ Use bzip2 for man pages (wins compression tests on man page text here easily)
+ ln -sf /etc/motd /root/README
+sources/initrd/skeleton_initrd.tar.gz: Add /usr/man directory.
+ rc.S: chmod 755 /etc/rc.d/rc.pcmcia
++--------------------------+
+Fri Mar 4 03:29:09 UTC 2011
+build_installer.sh: Add btrfs-progs, gdisk, and gcc-g++ (for libstdc++).
+sources/initrd/skeleton_initrd.tar.gz: support btrfs.
++--------------------------+
+Fri Feb 25 20:36:22 UTC 2011
+build_installer.sh: Add ddrescue package.
++--------------------------+
+Fri Feb 25 05:44:11 UTC 2011
+build_installer.sh: Support ADD_MANPAGES option
+ to add preprocessed manpages.
+ Not enabled for now.
+ This would really need a blacklist and/or whitelist first.
+sources/initrd/skeleton_initrd.tar.gz: Replace broken zcat symlink
+ with the proper script.
+ Point /usr/bin/zcat at the zcat script.
+ Add a quick+dirty /usr/bin/man shell script to display man pages.
+sources/busybox/busybox-1.18.3.tar.bz2: Upgraded.
+sources/busybox/busybox-dot-config: Upgraded.
++--------------------------+
+Fri Feb 18 03:22:17 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: fdisk -l now shows HPFS/NTFS/exFAT, so
+ we need to check for NTFS before FAT in SeTDOS to avoid a false FAT detection.
++--------------------------+
+Wed Feb 16 07:45:13 UTC 2011
+build_installer.sh: util-linux-ng -> util-linux
++--------------------------+
+Tue Feb 15 23:04:25 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: Patched /sbin/probe to add support for
+ GPT partitions.
++--------------------------+
+Fri Jan 21 16:08:24 UTC 2011
+sources/initrd/skeleton_initrd.tar.gz: Remove /etc/modprobe.conf
+ (request from MoZes)
++--------------------------+
diff --git a/source/installer/README b/source/installer/README
new file mode 100644
index 00000000..863bdf77
--- /dev/null
+++ b/source/installer/README
@@ -0,0 +1,136 @@
+The build_installer.sh script
+=============================
+
+The 'build_installer.sh' script has the following characteristics:
+
+* It works for all Slackware ARCH'es (tested with i586 and x86_64)
+* It can be started from any directory, because resulting output files will
+ be written to the current directory. This means that the script directory
+ can be on a read-only filesystem.
+* It can update a pre-existing initrd.img file with kernel modules
+ for a new kernel in one single command
+* It can build a complete Slackware installer set (initrd.img , usbboot.img
+ and pxelinux.cfg_default files) from scratch
+* It can create a tarball containing a 'skeleton' for an initrd, which does
+ not contain any ARCH specific binary code; only the directory structure,
+ symlinks, configuration files and scripts. This skeleton can be used as a
+ base for creating a new initrd from scratch, in which case no previous
+ initrd.img file needs to be present to obtain the scripts etc from. The
+ skeleton file will be called 'skeleton_initrd.tar.gz' and will be written to
+ the current directory.
+
+Command line parameters and detailed usage
+==========================================
+
+Running "./build_installer.sh -h" shows this message:
+
+# ----------------------------------------------------------------------------#
+Usage: build_installer.sh <parameters>
+Parameters:
+ -h|--help Show this help
+ -c|--compressmods Compress the kernel modules inside the initrd.img
+ -m|--multiple Multiple initrd files (for SMP and non-SMP kernels)
+ -n|--netmods Add network modules to the initrd
+ -nc|--no-compressmods Do _not_ compress kernel modules
+ -nm|--no-multiple Do _not_ create multiple initrd files
+ -nn|--no-netmods Do _not_ add network modules to the initrd
+ -np|--no-pcmciamods Do _not_ add pcmcia modules to the initrd
+ -nr|--no-recompile Do _not_ recompile /re-add binaries
+ -nu|--no-usbboot Do _not_ create a USB boot image
+ -p|--pcmciamods Add pcmcia modules to the initrd
+ -q|--quiet Be (fairly) quiet during progress
+ -r|--recompile Recompile /re-add binaries (busybox,bash,dropbear as
+ well as any required bin/lib from Slackware packages)
+ -s|--skeleton Stop after creating a skeleton_initrd.tar.gz
+ (which only contains directories and scripts)
+ -u|--usbboot Create a USB boot image
+ -v|--verbose Be (very) verbose during progress
+ -I|--initrd <file> Specify location of the initrd.img file
+ -S|--slackroot <dir> Specify location of the Slackware directory tree
+
+Actions to be taken (ARCH=x86_64):
+* Be (very) verbose during progress
+* Recompile /re-add binaries
+* Add network modules to the initrd
+* Add pcmcia modules to the initrd
+* Compress all kernel modules
+* Do _not_ split the initrd
+* Create a USB boot image
+
+Use Slackware root:
+ /mnt/nfs/door/non-public/slackware-current
+Use initrd file:
+ /mnt/nfs/door/non-public/slackware-current/isolinux/initrd.img
+
+# Note: [1] If you want to build your own specific bash, busybox and dropbear #
+# instead of using the sources provided by the Slackware tree, #
+# you should have these sources ready below #
+# ./sources/{bash,busybox,dropbear} #
+# Delete the directory if you don't want to use it! #
+# [2] If you want to use your own _skeleton_ initrd (containing only #
+# the directory layout plus all the scripts) you just make it #
+# available as ./sources/initrd/skeleton_initrd.tar.gz #
+# #
+# The script will look for the directory 'sources' first in your #
+# working directory, and next in the script's directory (whatever is #
+# found in your working directory takes precedence). #
+# ----------------------------------------------------------------------------#
+
+
+The default actions performed by the script may be different for each ARCH -
+they are parametrized in the script and can be modified by adding commandline
+switches to the script's invocation. The examples below use explicit
+switches to make them are valid commands for all ARCHes.
+
+Examples of usage
+==================
+
+(1) Specify a different ARCH than the default, and point the script to a
+ non-default root directory of the Slackware tree:
+
+ # ARCH=i486 SLACKROOT=~ftp/pub/slackware-current ./build_installer.sh
+
+(2) Slackware gets a new kernel, and the initrd needs to be updated with
+ new modules:
+
+ # ./build_installer.sh -n -p -nr -u
+
+ This command adds updated net/pcmcia modules to the initrd.img (and removes
+ old modules of course), will not recompile any of the binary software inside
+ (notably bash, busybox and dropbear) and will create a USB boot image as
+ the final action. Output files are created in the current directory.
+
+(3) Strip Slackware's existing initrd.img until it's skeleton remains:
+
+ # ./build_installer.sh -s
+
+ This command takes the file '$SLACKROOT/isolinux/initrd.img' and writes
+ the resulting 'skeleton_initrd.tar.gz' to the current directory.
+ NOTE: If you ever need to create a skeleton tarball, be sure to use a 32bit
+ slackware tree's initrd.img file for this. That way, the pathname
+ 'slackware' will be present in the tarball, and the build_installer.sh
+ script will be able to translate that to an ARCH-specific directory
+ name like for instance "slackware64" for the x86_64 platform.
+ Even on x86_64 you can run this command:
+
+ # ARCH=i486 SLACKROOT=/stuff/slackware32 ./build_installer.sh -s
+
+ to use a 32bit initrd.img file as the source.
+
+(4) Create a new initrd.img file from scratch, using a pre-existing skeleton
+ initrd tarball, and my own busybox sources/patches (while using the sources
+ for bash and dropbear that are present in the slackware directory tree):
+
+ # mkdir -p ./sources/{busybox,initrd}
+ # cp /home/slackware64/installer/skeleton_initrd.tar.gz ./sources/initrd/
+ # cp -a my_busybox_stuff/* ./sources/busybox/
+ # ARCH=x86_64 ./build_installer.sh -c -n -p -u
+
+ This will build initrd.img from the ground up, compiling binaries for bash,
+ busybox and dropbear (used in the installer) from their sources and
+ extracting library/binary files from several of the Slackware packages
+ found in the slackware directory tree. Network and pcmcia kernel modules
+ will be added and compressed (cutting down the client's RAM requirements
+ with 9 MB during installation), and finally a USB bootable image named
+ 'usbboot.img' will be created.
+
diff --git a/source/installer/build_installer.sh b/source/installer/build_installer.sh
new file mode 100755
index 00000000..fd6e7dd7
--- /dev/null
+++ b/source/installer/build_installer.sh
@@ -0,0 +1,2179 @@
+#!/bin/bash
+set +o posix
+
+# $Id: build_installer.sh,v 1.129 2011/04/13 23:03:07 eha Exp eha $
+#
+# Copyright 2005-2018 Stuart Winter, Surrey, England, UK
+# Copyright 2008, 2009, 2010, 2011, 2017 Eric Hameleers, Eindhoven, Netherlands
+# Copyright 2011-2018 Patrick Volkerding, Sebeka, MN, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+################################################################################
+#
+# Script: build_installer.sh
+# Purpose: Build the Slackware installer from scratch (multiple architectures)
+# Author: Stuart Winter <mozes@slackware.com>
+# Eric Hameleers <alien@slackware.com>
+#
+################################################################################
+#
+# Notes: [1] If you want to use your own _skeleton_ initrd (containing only
+# the directory layout plus all the scripts) you just make it
+# available as ./sources/initrd/skeleton_initrd.tar.gz
+#
+# The script will look for the directory 'sources' first in your
+# working directory, and next in the script's directory (whatever is
+# found in your working directory takes precedence).
+#
+################################################################################
+
+# INSTALLERVERSION is the Slackware version the installer will advertize!
+INSTALLERVERSION=${INSTALLERVERSION:-"15.0"}
+PKGNAM=slackware-installer
+
+# Needed to find package names:
+shopt -s extglob
+
+# Automatically determine the architecture we're building on:
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) export ARCH=i586 ;;
+ arm*) export ARCH=arm ;;
+ # Unless $ARCH is already set, use uname -m for all other archs:
+ *) export ARCH=$( uname -m ) ;;
+ esac
+fi
+
+# Make sure that loopback support is loaded, if it is modular.
+# Use traditional Q+D methodology... i.e. shove a stick in it
+# Timmy, by the time anyone notices we'll be dead
+modprobe loop 1> /dev/null 2> /dev/null
+
+# Path to Slackware source tree:
+# (we need this to extract some packages - get libraries and stuff)
+SLACKROOT=${SLACKROOT:-/mnt/nfs/door/non-public/slackware-current}
+
+# Where do we look for other stuff this script requires?
+SRCDIR=$(cd $(dirname $0); pwd) # where the script looks for support
+CWD=$(pwd) # where the script writes files
+
+# A list of modules (just the names, no directory path) that should not
+# be included on the installer image. Typically this is a list of modules used
+# with the generic kernel that are not built by the huge kernel:
+MODBLACKLIST=$SRCDIR/module-blacklist
+
+# Temporary build locations:
+TMP=${TMP:-/tmp/build-$PKGNAM}
+PKG=$TMP/package-$PKGNAM
+
+# Firmware for wired network cards we need to add to the installer:
+NETFIRMWARE="3com acenic adaptec bnx tigon e100 sun kaweth tr_smctr cxgb3 rtl_nic"
+
+# Safe defaults:
+DUMPSKELETON=0 # set to '1' to just create a skeleton initrd tarball
+SHOWHELP=0 # Do not show help
+
+# Default actions for the script:
+case $ARCH in
+ arm*|aarch64)
+ ADD_NETMODS=1 # add network modules
+ ADD_PCMCIAMODS=1 # add pcmcia modules
+ ADD_MANPAGES=1
+ COMPRESS_MODS=0 # already compressed in a/kernel-modules.t?z package already
+ DISTRODIR=${DISTRODIR:-"slackware"} # below this you find a,ap,d,..,y
+ LIBDIRSUFFIX="" # the default
+ RECOMPILE=1 # recompile busybox/dropbear and add new binaries
+ SPLIT_INITRD=0 # Do not create separate initrd for each kernel
+ USBBOOT=0 # do not build the USB boot image
+ EFIBOOT=0 # do not build the EFI boot image
+ VERBOSE=1 # show a lot of additional output
+ # The firmware we include by default is only for x86, but
+ ADD_NETFIRMWARE=1 # we'll probably want to include some at some stage. For now supply -nf to this script.
+ ;;
+ x86_64)
+ ADD_NETMODS=1
+ ADD_PCMCIAMODS=1
+ ADD_MANPAGES=1
+ COMPRESS_MODS=1
+ ADD_KMS=1
+ DISTRODIR=${DISTRODIR:-"slackware64"} # below this you find a,ap,d,..,y
+ LIBDIRSUFFIX="64"
+ RECOMPILE=1
+ SPLIT_INITRD=0
+ USBBOOT=1
+ EFIBOOT=1
+ VERBOSE=1
+ ADD_NETFIRMWARE=1 # Include the network card firmware
+ ;;
+ i586)
+ ADD_NETMODS=1
+ ADD_PCMCIAMODS=1
+ ADD_MANPAGES=1
+ COMPRESS_MODS=1
+ ADD_KMS=1
+ DISTRODIR=${DISTRODIR:-"slackware"} # below this you find a,ap,d,..,y
+ LIBDIRSUFFIX=""
+ RECOMPILE=1
+ SPLIT_INITRD=0
+ USBBOOT=1
+ EFIBOOT=1
+ VERBOSE=1
+ ADD_NETFIRMWARE=1 # Include the network card firmware
+ ;;
+ *)
+ ADD_NETMODS=1 # add network modules
+ ADD_PCMCIAMODS=1 # add pcmcia modules
+ ADD_MANPAGES=1 # Add preprocessed manpages
+ DISTRODIR=${DISTRODIR:-"slackware"} # below this you find a,ap,d,..,y
+ COMPRESS_MODS=1 # compress kernel modules
+ LIBDIRSUFFIX="" # the default
+ RECOMPILE=0 # re-use binaries from existing initrd and packages
+ SPLIT_INITRD=0 # Do not create separate initrd for each kernel
+ USBBOOT=0 # do not build the USB boot image
+ EFIBOOT=0 # do not build the EFI boot image
+ VERBOSE=1 # show a lot of additional output
+ ADD_NETFIRMWARE=1 # Include the network card firmware
+ ;;
+esac
+
+# Define the CFLAGS for the known architectures:
+case $ARCH in
+ arm) SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
+ ARCHQUADLET="-gnueabihf" ;;
+ aarch64) SLKCFLAGS="-O2"
+ ARCHQUADLET="" ;;
+ i?86) SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ ARCHQUADLET="" ;;
+ s390*) SLKCFLAGS="-O2"
+ ARCHQUADLET="" ;;
+ x86_64) SLKCFLAGS="-O2 -fPIC"
+ ARCHQUADLET="" ;;
+esac
+
+# Here is where we take our kernel modules and dependency info from
+# (at least one of these must be available):
+case $ARCH in
+ arm*)
+ # What kernel directories are in this installer?
+ # This kernel is only here to allow us to build a generic ARM installer image from which
+ # the other architectures will be built. It doesn't matter which kernel this is, as it
+ # won't be used: post processing scripts unpack this image, generate a list of standard kernel
+ # modules; replace those modules with versions specific to the particular device and supplement
+ # the image with any additional requirements for that device.
+ KERNELS[0]=armv7
+ # The -extraversion (appended to the $KVER) for the KERNELS[*]:
+ KEXTRAV[0]="-armv7"
+ ;;
+ aarch64)
+ KERNELS[0]=aarch64
+ # The -extraversion (appended to the $KVER) for the KERNELS[*]:
+ KEXTRAV[0]="-aarch64"
+ ;;
+ i?86)
+ # What kernel directories are in this installer?
+ KERNELS[0]=huge.s
+ KERNELS[1]=hugesmp.s
+ # The -extraversion (appended to the $KVER) for the KERNELS[*]:
+ KEXTRAV[0]=""
+ KEXTRAV[1]="-smp"
+ ;;
+ x86_64)
+ # What kernel directories are in this installer?
+ KERNELS[0]=huge.s
+ # The -extraversion (appended to the $KVER) for the KERNELS[*]:
+ KEXTRAV[0]=""
+ ;;
+esac
+
+
+# Parse the commandline parameters:
+while [ ! -z "$1" ]; do
+ case $1 in
+ -c|--compressmods)
+ COMPRESS_MODS=1
+ shift
+ ;;
+ -h|--help)
+ SHOWHELP=1
+ shift
+ ;;
+ -m|--multiple)
+ SPLIT_INITRD=1
+ shift
+ ;;
+ -nf|--noaddnetfirmware)
+ ADD_NETFIRMWARE=0
+ shift
+ ;;
+ -mn|--manpages)
+ ADD_MANPAGES=1
+ shift
+ ;;
+ -n|--netmods)
+ ADD_NETMODS=1
+ shift
+ ;;
+ -nc|--no-compressmods)
+ COMPRESS_MODS=0
+ shift
+ ;;
+ -nn|--no-netmods)
+ ADD_NETMODS=0
+ shift
+ ;;
+ -np|--no-pcmciamods)
+ ADD_PCMCIAMODS=0
+ shift
+ ;;
+ -nr|--no-recompile)
+ RECOMPILE=0
+ shift
+ ;;
+ -nm|--no-multiple)
+ SPLIT_INITRD=0
+ shift
+ ;;
+ -nu|--no-usbboot)
+ USBBOOT=0
+ shift
+ ;;
+ -p|--pcmciamods)
+ ADD_PCMCIAMODS=1
+ shift
+ ;;
+ -q|--quiet)
+ VERBOSE=0
+ shift
+ ;;
+ -r|--recompile)
+ RECOMPILE=1
+ shift
+ ;;
+ -s|--skeleton)
+ DUMPSKELETON=1
+ shift
+ ;;
+ -u|--usbboot)
+ USBBOOT=1
+ shift
+ ;;
+ -v|--verbose)
+ VERBOSE=1
+ shift
+ ;;
+ -I|--initrd)
+ INITRDIMG="$(cd $(dirname $2); pwd)/$(basename $2)"
+ shift 2
+ ;;
+ -S|--slackroot)
+ SLACKROOT="$2"
+ shift 2
+ ;;
+ -*)
+ echo "Unsupported parameter '$1'!"
+ exit 1
+ ;;
+ *)# Do nothing
+ shift
+ ;;
+ esac
+done
+
+############### Some house keeping now that we have read the commandline #######
+
+# The location of the initrd.img file
+INITRDIMG=${INITRDIMG:-"$SLACKROOT/isolinux/initrd.img"}
+
+# Wildcard expression for the kernel-modules package:
+KERNELMODPKG=${KERNELMODPKG:-"${SLACKROOT}/${DISTRODIR}/a/kernel-modules-*.t?z"}
+# PCMCIA support tools:
+PCMCIAUTILS="${SLACKROOT}/${DISTRODIR}/a/pcmciautils-*.t?z"
+# Needed by pcmciautils:
+SYSFS="${SLACKROOT}/${DISTRODIR}/a/sysfsutils-*.t?z"
+
+# Wildcard expression for the kernel-firmware package:
+KERNELFW_PKG=${KERNELFW_PKG:-"${SLACKROOT}/${DISTRODIR}/a/kernel-firmware-*.t?z"}
+
+# If we only want help, do no pre-processing which may lead to error messages
+if [ $SHOWHELP -eq 0 ]; then
+
+ if [ "$($(which id) -u)" != "0" ]; then
+ echo "You need to be root to run $(basename $0)."
+ exit 1
+ fi
+
+ if [ ! -d $SLACKROOT ]; then
+ echo "*** I can't find the Slackware package tree $SLACKROOT!"
+ exit 1
+ fi
+
+ # Determine the kernel version:
+ #KVER=$( ls -1 ${KERNELMODPKG} | head -1 | sed -e "s#.*/kernel-modules-\([^-]*\)-.*.t[gblx]z#\1#")
+ KVER="$( ls -1 ${KERNELMODPKG} | head -1 | rev | cut -d- -f3 | rev | cut -d_ -f1 )"
+ if [ -z "$KVER" ]; then
+ echo "*** I can't determine the kernel version!"
+ exit 1
+ fi
+ echo "--- Detected kernel version: '$KVER' ---"
+
+ if [ $VERBOSE -eq 1 ]; then
+ VERBOSE1="v"
+ VERBOSE2="vv"
+ VERBOSE3="vvv"
+ VERBOSETXT="--verbose"
+ SILENTMAKE=""
+ else
+ VERBOSE1=""
+ VERBOSE2=""
+ VERBOSE3=""
+ VERBOSETXT=""
+ SILENTMAKE="-s"
+ fi
+fi
+
+############### Display help about command line parameters #####################
+
+basic_usage()
+{
+cat <<"EOH"
+# ----------------------------------------------------------------------------#
+$Id: build_installer.sh,v 1.129 2011/04/13 23:03:07 eha Exp eha $
+# ----------------------------------------------------------------------------#
+EOH
+
+cat <<EOT
+
+Usage: $(basename $0) <parameters>
+Parameters:
+ -h|--help Show this help
+ -c|--compressmods Compress the kernel modules inside the initrd.img
+ -m|--multiple Multiple initrd files (for SMP and non-SMP kernels)
+ -n|--netmods Add network modules to the initrd
+ -nc|--no-compressmods Do _not_ compress kernel modules
+ -nm|--no-multiple Do _not_ create multiple initrd files
+ -nn|--no-netmods Do _not_ add network modules to the initrd
+ -np|--no-pcmciamods Do _not_ add pcmcia modules to the initrd
+ -nr|--no-recompile Do _not_ recompile /re-add binaries
+ -nu|--no-usbboot Do _not_ create a USB boot image
+ -p|--pcmciamods Add pcmcia modules to the initrd
+ -q|--quiet Be (fairly) quiet during progress
+ -r|--recompile Recompile /re-add binaries (busybox,dropbear as
+ well as any required bin/lib from Slackware packages)
+ -s|--skeleton Stop after creating a skeleton_initrd.tar.gz
+ (which only contains directories and scripts)
+ -u|--usbboot Create a USB boot image
+ -v|--verbose Be (very) verbose during progress
+ -I|--initrd <file> Specify location of the initrd.img file
+ -S|--slackroot <dir> Specify location of the Slackware directory tree
+
+Actions to be taken (ARCH=$ARCH):
+EOT
+
+[ $VERBOSE -eq 1 ] && echo "* Be (very) verbose during progress" \
+ || echo "* Be (fairly) quiet during progress"
+[ $RECOMPILE -eq 1 ] && echo "* Recompile busybox/dropbear /re-add binaries" \
+ || echo "* Do _not_ recompile /re-add binaries"
+[ $ADD_NETMODS -eq 1 ] && echo "* Add network modules to the initrd" \
+ || echo "* Do _not_ add network modules to the initrd"
+[ $ADD_PCMCIAMODS -eq 1 ] && echo "* Add pcmcia modules to the initrd" \
+ || echo "* Do _not_ add pcmcia modules to the initrd"
+[ $COMPRESS_MODS -eq 1 ] && echo "* Compress all kernel modules" \
+ || echo "* Do _not_ compress kernel modules"
+[ $SPLIT_INITRD -eq 1 ] && echo "* Split initrd's for SMP and non-SMP kernels" \
+ || echo "* Do _not_ split the initrd"
+[ $USBBOOT -eq 1 ] && echo "* Create a USB boot image" \
+ || echo "* Do _not_ create a USB boot image"
+
+echo
+echo -e "Use Slackware root: \n $SLACKROOT"
+echo -e "Use initrd file: \n $INITRDIMG"
+
+cat <<EOT
+
+# Note: [1] If you want to build your own specific busybox and dropbear #
+# instead of using the sources provided by the Slackware tree, #
+# you should have these sources ready below #
+# ./sources/{busybox,dropbear} #
+# Delete the directory if you don't want to use it! #
+# [2] If you want to use your own _skeleton_ initrd (containing only #
+# the directory layout plus all the scripts) you just make it #
+# available as ./sources/initrd/skeleton_initrd.tar.gz #
+# #
+# The script will look for the directory 'sources' first in your #
+# working directory, and next in the script's directory (whatever is #
+# found in your working directory takes precedence). #
+# ----------------------------------------------------------------------------#
+
+EOT
+}
+
+############### Determine patch level required & apply the patch ################################
+
+# Functions:
+# Determine patch level required & apply the patch:
+function auto_apply_patch () {
+ patchfile=$1
+
+ echo
+ echo "***********************************************************"
+ echo "** Working on Patch: $patchfile"
+ echo "***********************************************************"
+ echo
+
+ # Decompress the patch if it's compressed with a known method:
+ FTYPE=$( file $patchfile )
+ case "$FTYPE" in
+ *xz*compressed*)
+ xz -dc $patchfile > $TMP/$(basename $patchfile).unpacked
+ patchfile=$TMP/$(basename $patchfile).unpacked ;;
+ *bzip2*compressed*)
+ bzcat -f $patchfile > $TMP/$(basename $patchfile).unpacked
+ patchfile=$TMP/$(basename $patchfile).unpacked ;;
+ *gzip*compressed*)
+ zcat -f $patchfile > $TMP/$(basename $patchfile).unpacked
+ patchfile=$TMP/$(basename $patchfile).unpacked ;;
+ esac
+
+ # By now the patch is decompressed or wasn't compressed originally.
+ #
+ # Most patches should not require more levels than this:
+ success=0
+ for (( pl=0 ; pl<=5 ; pl++ )) ; do
+ echo "Patch : $patchfile , trying patch level $pl"
+ patch -N --fuzz=20 -t --dry-run -l -p$pl < $patchfile > /dev/null 2>&1 && success=1 && break
+ done
+ if [ $success = 1 ]; then
+ echo "Patch: $patchfile will apply at level $pl"
+ patch -N --fuzz=20 --verbose -l -p$pl < $patchfile
+ return 0
+ else
+ echo "Patch: $patchfile failed to apply at levels 0-5"
+ return 1
+ fi
+}
+
+############### Unpack an existing initrd image ################################
+
+unpack_oldinitrd()
+{
+
+# This function is called when we are not re-building a new initrd from scratch
+# (but need to add modules for a new kernel version for instance):
+echo "--- Unpacking the old initrd ---"
+mkdir -p -m755 $PKG/$ARCH-installer-filesystem
+cd $PKG/$ARCH-installer-filesystem
+
+zcat -f${VERBOSE1} $INITRDIMG | cpio -di${VERBOSE1}
+
+# Wipe the Kernel modules:
+echo "--- Removing old kernel modules ---"
+rm -rf lib/modules/*
+}
+
+############### Create the Installer's filesystem #############################
+
+create_installer_fs()
+{
+# Make the directories required for the filesystem:
+echo "--- Creating basic filesystem layout ---"
+mkdir -p -m755 $PKG/$ARCH-installer-filesystem
+cd $PKG/$ARCH-installer-filesystem
+mkdir -p -m755 bin
+mkdir -p -m755 dev
+mkdir -p -m755 etc/rc.d
+mkdir -p -m755 etc/dropbear
+mkdir -p -m755 floppy
+mkdir -p -m755 lib/modules
+[ "$ARCH" = "x86_64" ] && mkdir -p -m755 lib64
+mkdir -p -m700 lost+found
+mkdir -p -m755 mnt
+mkdir -p -m755 proc
+mkdir -p -m755 root
+mkdir -p -m755 sbin
+mkdir -p -m755 sys
+mkdir -p -m755 tag
+mkdir -p -m1777 tmp
+mkdir -p -m755 usr/{bin,sbin,etc,lib/setup,libexec,share/tabset}
+mkdir -p -m755 usr/share/terminfo/{c,l,v,x,s}
+mkdir -p -m755 var/{mount,setup,run,lib}
+
+ln -sf /mnt/boot boot
+ln -sf /var/log/mount cdrom
+ln -sf /var/log/mount nfs
+
+( cd etc; touch mtab )
+( cd etc; touch mdev.conf )
+
+}
+
+############### Extract skeleton from Slackware installer image ################
+
+extract_skeleton_fs()
+{
+# Temporary extraction directory:
+echo "--- Extracting shell scripts from original initrd ---"
+rm -rf $TMP/extract-packages
+mkdir -p -m755 $TMP/extract-packages
+cd $TMP/extract-packages
+
+# Unpack the real i586/current Slackware initrd.img (or a custom one specified
+# with the '-I' parameter):
+zcat -f${VERBOSE1} $INITRDIMG | cpio -di${VERBOSE1}
+
+# Wipe the binaries and x86 specific stuff. This will leave us with
+# just the directories and shell scripts:
+echo "--- Removing unwanted binaries and libs ---"
+( find . -type f -print0 | xargs -0 file | egrep '(ELF.*)' | awk -F: '{print $1}' | xargs rm -f ) >/dev/null 2>&1
+( find . -name '*.a' -type f -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+# Wipe the Kernel modules:
+rm -rf lib/modules/*
+# Wipe firmware:
+rm -rf lib/firmware/*
+# Wipe udev stuff:
+rm -rf lib/udev etc/udev
+# Wipe the pci.ids:
+rm -f usr/share/hwdata/pci.ids*
+# Wipe any unneeded scripts that were installed from packages:
+rm -f bin/{ldd,zgrep} sbin/fsck.* sbin/{lvmdump,xfs_check}
+# Wipe ncurses stuff:
+( find usr/share/terminfo -type f -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+( find usr/share/tabset -type f -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+# Wipe dangling symlinks:
+( find -L ./bin -type l -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+( find -L ./usr/bin -type l -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+( find -L ./sbin -type l -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+( find -L ./lib -type l -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+( find -L ./lib${LIBDIRSUFFIX} -type l -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+( find -L ./usr/lib -type l -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+( find -L ./usr/lib${LIBDIRSUFFIX} -type l -print0 | xargs -0 rm -f ) > /dev/null 2>&1
+
+cd $PKG/$ARCH-installer-filesystem
+
+cp --remove-destination -fa${VERBOSE2} $TMP/extract-packages/. .
+rm -rf $TMP/extract-packages
+
+# Re-create essential symlinks
+ln -sf sbin/init init
+( cd bin; ln -sf grep.bin grep )
+( cd bin; ln -sf grep.bin egrep )
+( cd bin; ln -sf grep.bin fgrep )
+( cd bin; ln -sf gzip zcat )
+( cd bin; ln -sf /usr/bin/compress compress )
+( cd usr/bin; ln -sf ../../bin/gzip zcat )
+
+# Add RAID re-assembly commands to rc.S if missing:
+if ! grep -q mdadm etc/rc.d/rc.S ; then
+ sed -i -e '/# Check \/proc\/partitions again:/s%^%# Re-assemble RAID volumes:\n/sbin/mdadm -E -s > /etc/mdadm.conf\n/sbin/mdadm -A -s\n\n%m' etc/rc.d/rc.S
+ if [ $? -ne 0 ]; then
+ echo "*** Adding mdadm commands to /etc/rc.d/rc.S failed. ***"
+ fi
+fi
+
+}
+
+############### Zip up skeleton from Slackware installer image #################
+
+zipup_installer_skeleton()
+{
+cd $PKG/$ARCH-installer-filesystem
+echo "--- Zipping up a skeleton initrd in '$CWD' ---"
+tar -zc${VERBOSE1}f $CWD/skeleton_initrd.tar.gz .
+}
+
+############### Unpack skeleton of a Slackware installer image #################
+
+use_installer_source()
+{
+if [ ! -f $CWD/sources/initrd/skeleton_initrd.tar.gz ]; then
+ if [ ! -f $SRCDIR/sources/initrd/skeleton_initrd.tar.gz ]; then
+ echo "*** Could not find 'skeleton_initrd.tar.gz' in either:"
+ echo "*** '$CWD/sources/initrd/' or '$SRCDIR/sources/initrd/'"
+ return 1
+ else
+ SKELFILE="$SRCDIR/sources/initrd/skeleton_initrd.tar.gz"
+ fi
+else
+ SKELFILE="$CWD/sources/initrd/skeleton_initrd.tar.gz"
+fi
+echo "--- Using _your_ skeleton installer (not the initrd in the Slacktree) ---"
+echo "--- ($SKELFILE) ---"
+cd $PKG/$ARCH-installer-filesystem
+tar -zx${VERBOSE1}f $SKELFILE
+}
+
+############### Build busybox ##################################################
+
+build_busybox()
+{
+echo "--- Building a new busybox ---"
+# Extract source:
+cd $TMP
+if [ -d $CWD/sources/busybox ]; then
+ echo "--- Using _your_ busybox sources (not those in the Slacktree) ---"
+ BUSYBOXPATH=$CWD/sources/busybox
+elif [ -d $SRCDIR/sources/busybox ]; then
+ echo "--- Using _your_ busybox sources (not those in the Slacktree) ---"
+ BUSYBOXPATH=$SRCDIR/sources/busybox
+else
+ # Use the busybox sources from the real Slackware tree:
+ BUSYBOXPATH=$SLACKROOT/source/installer
+fi
+[ ! -d $BUSYBOXPATH ] && ( echo "No directory '$BUSYBOXPATH'" ; exit 1 )
+BUSYBOXPKG=$(ls -1 $BUSYBOXPATH/busybox-*.tar.bz2 | head -1)
+BUSYBOXCFG=$(ls -1 $BUSYBOXPATH/busybox?dot?config | head -1)
+BUSYBOXVER=$(echo $BUSYBOXPKG | sed -e "s#.*/busybox-\(.*\).tar.bz2#\1#")
+
+echo "--- Compiling BUSYBOX version '$BUSYBOXVER' ---"
+tar x${VERBOSE2}f $BUSYBOXPKG
+cd busybox-* || exit 1
+if $(ls $BUSYBOXPATH/busybox*.diff.gz 1>/dev/null 2>/dev/null) ; then
+ for DIFF in $(ls $BUSYBOXPATH/busybox*.diff.gz) ; do
+ zcat $DIFF | patch -p1 --verbose || exit 1
+ done
+fi
+chown -R root:root .
+
+# Copy config:
+# If we you rather like bash instead of busybox's ash, you'll need to adjust
+# the symlinks in /bin and stuff.
+install -m644 $BUSYBOXCFG .config
+
+# Build:
+make $SILENTMAKE $NUMJOBS CFLAGS="$SLKCFLAGS" || exit 1
+
+# Install into package framework:
+make $SILENTMAKE install || exit 1
+cd _install
+
+# Since Slackware 's installer uses the 'date' from coreutils, and 'zcat'
+# script from gzip, we delete the busybox symlinks:
+rm -f${VERBOSE1} bin/date bin/zcat
+
+# Likewise, we will remove the 'fdisk' applet which overwrites our shell script:
+rm -f${VERBOSE1} sbin/fdisk
+
+# And we want to use our own 'cp':
+rm -f${VERBOSE1} bin/cp
+
+cp --remove-destination -fa${VERBOSE2} * $PKG/$ARCH-installer-filesystem/
+
+}
+
+
+############### Build dropbear #################################################
+
+build_dropbear()
+{
+echo "--- Building a new dropbear ---"
+# Extract source:
+cd $TMP
+if [ -d $CWD/sources/dropbear ]; then
+ echo "--- Using _your_ dropbear sources (not those in the Slacktree) ---"
+ DROPBEARPATH=$CWD/sources/dropbear
+elif [ -d $SRCDIR/sources/dropbear ]; then
+ echo "--- Using _your_ dropbear sources (not those in the Slacktree) ---"
+ DROPBEARPATH=$SRCDIR/sources/dropbear
+else
+ # Use the dropbear sources from the Slackware tree.
+ DROPBEARPATH=$SLACKROOT/source/installer/dropbear
+fi
+[ ! -d $DROPBEARPATH ] && ( echo "No directory '$DROPBEARPATH'" ; exit 1 )
+DROPBEARPKG=$(ls -1 $DROPBEARPATH/dropbear-*.tar.bz2 | head -1)
+DROPBEARVER=$(echo $DROPBEARPKG | sed -e "s#.*/dropbear-\(.*\).tar.bz2#\1#")
+tar x${VERBOSE2}f $DROPBEARPKG
+
+echo "--- Compiling DROPBEAR version '$DROPBEARVER' ---"
+cd dropbear* || exit 1
+chown -R root:root .
+chmod -R u+w,go+r-w,a-s .
+
+# The programs we want to have as symlinks to dropbearmulti binary:
+PROGS="dropbear dbclient dropbearkey dropbearconvert scp ssh"
+
+# Patch to allow empty passwords (used in Slackware's installer):
+patch -p1 ${VERBOSETXT} < $DROPBEARPATH/dropbear_emptypass.patch || exit 1
+# Apply xauth path patch
+patch -p0 ${VERBOSETXT} < $DROPBEARPATH/dropbear.xauth.patch || exit 1
+# Change the path used for dbclient because our prefix is '/' not '/usr':
+patch -p1 ${VERBOSETXT} < $DROPBEARPATH/dropbear_dbclientpath.patch || exit 1
+# Patch for new glibc crypt() that may return NULL:
+patch -p1 < $DROPBEARPATH/dropbear.glibc.crypt.diff
+
+# Configure:
+CFLAGS="$SLKCFLAGS" \
+CXXFLAGS="$SLKCFLAGS" \
+./configure \
+ --prefix=/ \
+ --mandir=/usr/man \
+ --disable-syslog \
+ --disable-utmp \
+ --disable-utmpx \
+ --disable-wtmp \
+ --disable-wtmpx \
+ --disable-pututline \
+ --disable-pututxline \
+ --build=$ARCH-slackware-linux$ARCHQUADLET || exit 1
+
+# Build:
+make $SILENTMAKE $NUMJOBS PROGRAMS="$PROGS" MULTI="1" SCPPROGRESS="1" || exit 1
+
+# Install into installer's filesystem:
+make $SILENTMAKE DESTDIR=$PKG/$ARCH-installer-filesystem/ MULTI="1" install || exit 1
+
+# Link binaries to dropbearmulti since the 'make install' does not do that
+# if we build a multicall binary
+( cd $PKG/$ARCH-installer-filesystem/bin
+ ln -${VERBOSE1}fs ../bin/dropbearmulti ../sbin/dropbear
+ for i in $(echo $PROGS | sed -e 's/dropbear //') ; do
+ ln -${VERBOSE1}fs dropbearmulti $i
+ done
+)
+
+}
+
+############## Install binaries into installer filesystem ######################
+
+# You can generate file-> package list in slackware-current
+# cd slackware-current/${DISTRODIR}
+# find . -name '*.t?z' | while read name ; do echo "****** $name ******" ; tar tvvf $name ; done > /tmp/newfest
+#
+
+import_binaries()
+{
+# Change into the installer's filesystem:
+cd $PKG/$ARCH-installer-filesystem
+
+echo "--- Importing binaries from Slackware packages ---"
+
+# Temporary extraction directory:
+rm -rf $TMP/extract-packages
+mkdir -p -m755 $TMP/extract-packages
+
+# This list of packages (Slackware v13.0+):
+#
+# Some ports require binaries from additional packages not shipped
+# by Slackware/x86. Put the name of the binary into the relevant
+# string below, and it'll be copied into either the installer filesystem's
+# /sbin or /bin -- the installer does not have /usr/{sbin,bin}.
+#
+case $ARCH in
+ arm*) EXTRA_PKGS="a/u-boot-tools a/mtd-utils"
+ EXTRA_PKGS_BIN=""
+ EXTRA_PKGS_SBIN=""
+ EXTRA_PKGS_USRBIN="mkimage"
+ EXTRA_PKGS_USRSBIN="nand* flash_* flashcp sheeva* fw_setenv fw_printenv ubi*" ;;
+ *) EXTRA_PKGS=""
+ EXTRA_PKGS_BIN=""
+ EXTRA_PKGS_SBIN=""
+ EXTRA_PKGS_USRBIN=""
+ EXTRA_PKGS_USRSBIN="" ;;
+esac
+PKGLIST="${EXTRA_PKGS} \
+a/bash \
+a/btrfs-progs \
+a/coreutils \
+a/cryptsetup \
+a/dialog \
+a/dosfstools \
+a/e2fsprogs \
+a/etc \
+a/gptfdisk \
+a/grep \
+a/gzip \
+a/hdparm \
+a/hwdata \
+a/jfsutils \
+a/kmod \
+a/lvm2 \
+a/lzip \
+a/lzlib \
+a/mdadm \
+a/ncompress \
+a/openssl-solibs \
+a/os-prober \
+a/pciutils \
+a/plzip \
+a/pkgtools \
+a/procps-ng \
+a/reiserfsprogs \
+a/sed \
+a/shadow \
+a/sysfsutils \
+a/syslinux \
+a/tar \
+a/eudev \
+a/hostname \
+a/libgudev \
+a/usbutils \
+a/util-linux \
+a/xfsprogs \
+a/xz \
+ap/ddrescue \
+ap/dmidecode \
+ap/lsscsi \
+ap/terminus-font \
+d/gcc \
+d/gcc-g++ \
+l/glibc \
+l/libcap \
+l/libidn2 \
+l/libunistring \
+l/libusb \
+l/lzo \
+l/parted \
+l/pcre \
+l/popt \
+l/readline \
+l/zlib \
+n/dhcpcd \
+n/dnsmasq \
+n/iproute2 \
+n/libgcrypt \
+n/libgpg-error \
+n/libtirpc \
+n/net-tools \
+n/nfs-utils \
+n/ntp \
+n/rpcbind \
+n/samba"
+
+# Cruise through the required packages and extract them into
+# a temporary directory:
+for pkg in $PKGLIST ; do
+ if [ -s $SLACKROOT/${DISTRODIR}/$pkg-+([^-])-+([^-])-+([^-]).t[gblx]z ]; then
+ installpkg -root $TMP/extract-packages $SLACKROOT/${DISTRODIR}/$pkg-+([^-])-+([^-])-+([^-]).t[gblx]z | grep "Installing package " | cut -d'(' -f1
+ else
+ echo "*** Package: "$pkg" not found in ${SLACKROOT}/${DISTRODIR} ***"
+ fi
+done
+
+#
+# Deal with the installer's /bin:
+#
+cd $TMP/extract-packages/bin
+cp --remove-destination -fa${VERBOSE1} ${EXTRA_PKGS_BIN} \
+ bash \
+ comm \
+ cp \
+ cut \
+ date \
+ dialog \
+ dircolors \
+ findmnt \
+ gzip \
+ ipmask \
+ ls \
+ lsblk \
+ paste \
+ printf \
+ pr \
+ ps \
+ mknod \
+ mount \
+ numfmt \
+ sed \
+ seq \
+ sort \
+ tar \
+ umount \
+ xz \
+ zgrep \
+ $PKG/$ARCH-installer-filesystem/bin/
+$(readlink -s setterm 1>/dev/null) || \
+ cp --remove-destination -fa${VERBOSE1} setterm \
+ $PKG/$ARCH-installer-filesystem/bin/
+cp --remove-destination -fa${VERBOSE1} grep $PKG/$ARCH-installer-filesystem/bin/grep.bin
+cd $TMP/extract-packages/usr/bin
+cp --remove-destination -fa${VERBOSE1} ${EXTRA_PKGS_USRBIN} \
+ bash \
+ ddrescue \
+ ldd \
+ lzip \
+ plzip \
+ rev \
+ uuidgen \
+ syslinux-nomtools \
+ strings \
+ $PKG/$ARCH-installer-filesystem/usr/bin/
+# Use syslinux-nomtools to avoid needing mtools on the installer:
+if [[ $ARCH = *86* ]]; then
+ mv --verbose $PKG/$ARCH-installer-filesystem/usr/bin/syslinux-nomtools $PKG/$ARCH-installer-filesystem/usr/bin/syslinux || exit 1
+fi
+$(readlink -s setterm 1>/dev/null) || \
+ cp --remove-destination -fa${VERBOSE1} setterm \
+ $PKG/$ARCH-installer-filesystem/usr/bin/
+cp --remove-destination -fa${VERBOSE1} \
+ compress \
+ $PKG/$ARCH-installer-filesystem/usr/bin/
+
+# Make sure that /bin/sh points to bash:
+( cd $PKG/$ARCH-installer-filesystem/bin
+ ln -${VERBOSE1}fs bash sh
+)
+
+#
+# Deal with the installer's /sbin:
+#
+cd $TMP/extract-packages/sbin
+cp --remove-destination -fa${VERBOSE1} ${EXTRA_PKGS_SBIN} \
+ badblocks \
+ blkid \
+ btrfs* \
+ cgdisk \
+ cryptsetup \
+ debugfs \
+ dmsetup \
+ dosfsck \
+ dumpe2fs \
+ e2fsck \
+ fsck \
+ fsck.* \
+ filefrag \
+ fixparts \
+ hdparm \
+ insmod \
+ e2image \
+ e2label \
+ e4crypt \
+ gdisk \
+ fsfreeze \
+ fstrim \
+ jfs_fsck \
+ jfs_mkfs \
+ kmod \
+ logsave \
+ ldconfig \
+ lsmod \
+ lspci \
+ lvm \
+ lvmdump \
+ mount.nfs \
+ mkdosfs \
+ mke2fs \
+ mkreiserfs \
+ mkfs.* \
+ mklost+found \
+ mkswap \
+ modprobe \
+ mount \
+ mdadm \
+ rdev \
+ reiserfsck \
+ rmmod \
+ resize2fs \
+ rpcbind \
+ rpc.statd \
+ sfdisk \
+ sgdisk \
+ swaplabel \
+ tune2fs \
+ udev* \
+ umount \
+ xfs_repair \
+ $PKG/$ARCH-installer-filesystem/sbin/
+ # This had dmsetup* above, which unnecessarily copies dmsetup.static
+ # This had lvm* above, which unnecessarily copies lvm.static
+cp --remove-destination -fa${VERBOSE1} fdisk \
+ $PKG/$ARCH-installer-filesystem/sbin/fdisk.bin
+
+# Copy binaries from /usr/bin into the installer's /usr/bin/
+cd $TMP/extract-packages/usr/bin
+cp --remove-destination -fa${VERBOSE1} ${EXTRA_PKGS_USRBIN} \
+ chattr \
+ lsattr \
+ lsusb \
+ mcookie \
+ usb-devices \
+ $PKG/$ARCH-installer-filesystem/usr/bin/
+
+# Grab a couple of terminus fonts that we'll need to prevent
+# blindness from microscopic KMS terminal fonts:
+cd $TMP/extract-packages/usr/share/kbd/consolefonts
+mkdir -p $PKG/$ARCH-installer-filesystem/usr/share/kbd/consolefonts
+cp --remove-destination -fa${VERBOSE1} \
+ ter-c14v.psf.gz \
+ ter-120b.psf.gz \
+ $PKG/$ARCH-installer-filesystem/usr/share/kbd/consolefonts
+
+# Copy binaries from /usr/sbin into the installer's /usr/sbin/
+cd $TMP/extract-packages/usr/sbin
+cp --remove-destination -fa${VERBOSE1} ${EXTRA_PKGS_USRSBIN} \
+ chpasswd \
+ dnsmasq \
+ ntpdate \
+ parted \
+ partprobe \
+ partx \
+ dmidecode \
+ mount.cifs \
+ sm-notify \
+ umount.cifs \
+ $PKG/$ARCH-installer-filesystem/usr/sbin/
+
+# The installer has wrappers for cfdisk/fdisk which run /dev/makedevs.sh
+# if it is there. If it is not there, udev is running and will handle
+# creating or removing block devices in /dev as needed:
+cd $TMP/extract-packages/sbin
+cp --remove-destination -fa${VERBOSE1} \
+ cfdisk \
+ $PKG/$ARCH-installer-filesystem/sbin/cfdisk.bin
+
+# And for LVM, there are tonnes of symlinks:
+cd $TMP/extract-packages/sbin
+find . -type l -lname lvm -printf "%p\n" | xargs -i cp -fa${VERBOSE1} {} $PKG/$ARCH-installer-filesystem/sbin/
+# Fix lvmdump script:
+sed -i -e 's?/usr/bin/tr?tr?' $PKG/$ARCH-installer-filesystem/sbin/lvmdump
+# Grab the matching lvm.conf script:
+mkdir -p $PKG/$ARCH-installer-filesystem/etc/lvm
+cat $TMP/extract-packages/etc/lvm/lvm.conf \
+ > $PKG/$ARCH-installer-filesystem/etc/lvm/lvm.conf
+
+# Use a current group file (udev expects this)
+cat $TMP/extract-packages/etc/group > $PKG/$ARCH-installer-filesystem/etc/group
+
+## Copy udev related files over (do not clobber an existing blacklist):
+#if [ -f $PKG/$ARCH-installer-filesystem/etc/modprobe.d/blacklist ]; then
+# mv $PKG/$ARCH-installer-filesystem/etc/modprobe.d/blacklist{,.new}
+#fi
+# Copy udev related files over
+cp -a $TMP/extract-packages/etc/modprobe.d $PKG/$ARCH-installer-filesystem/etc/
+mkdir -p $PKG/$ARCH-installer-filesystem/lib
+cp -a $TMP/extract-packages/lib/modprobe.d $PKG/$ARCH-installer-filesystem/lib/
+cp -a $TMP/extract-packages/etc/{modprobe.conf,modprobe.d,scsi_id.config,udev} \
+ $PKG/$ARCH-installer-filesystem/etc/
+cp -a $TMP/extract-packages/etc/rc.d/rc.udev \
+ $PKG/$ARCH-installer-filesystem/etc/rc.d/
+#if [ -f $PKG/$ARCH-installer-filesystem/etc/modprobe.d/blacklist.new ]; then
+# mv $PKG/$ARCH-installer-filesystem/etc/modprobe.d/blacklist{.new,}
+#fi
+
+# Copy package tools:
+cd $TMP/extract-packages/sbin
+cp --remove-destination -fa${VERBOSE1} \
+ installpkg \
+ pkgtool \
+ removepkg \
+ $PKG/$ARCH-installer-filesystem/sbin/
+
+# Deal with /lib stuff from the packages:
+mkdir -p -m755 $PKG/$ARCH-installer-filesystem/lib
+mkdir -p -m755 $PKG/$ARCH-installer-filesystem/lib${LIBDIRSUFFIX}
+mkdir -p -m755 $PKG/$ARCH-installer-filesystem/usr/lib${LIBDIRSUFFIX}
+cp -fa${VERBOSE1} $TMP/extract-packages/lib/udev \
+ $PKG/$ARCH-installer-filesystem/lib/
+cd $TMP/extract-packages/lib${LIBDIRSUFFIX}
+cp -fa${VERBOSE1} \
+ e2initrd_helper \
+ libblkid*so* \
+ libcap*so* \
+ libcrypto*so* \
+ libcryptsetup*.so* \
+ libdevmapper*so* \
+ libfdisk.so* \
+ libgcc*so* \
+ libgcrypt*.so* \
+ libgpg-error*.so* \
+ libkmod*so* \
+ liblzma*so* \
+ libmount.so* \
+ libpcre.so* \
+ libpopt*.so* \
+ libsmartcols.so* \
+ libssl*so* \
+ libtirpc*so* \
+ libudev*so* \
+ libuuid*so* \
+ libvolume_id*so* \
+ libz*.so* \
+ $PKG/$ARCH-installer-filesystem/lib${LIBDIRSUFFIX}/
+
+# Deal with /usr/lib stuff from the packages:
+cd $TMP/extract-packages/usr/lib${LIBDIRSUFFIX}
+cp -fa${VERBOSE1} \
+ libgcc*.so* \
+ libhistory*.so* \
+ libidn2*.so* \
+ liblz.so* \
+ liblzo*.so* \
+ libparted*so* \
+ libreadline*.so* \
+ libstdc++*.so* \
+ libunistring*.so* \
+ libusb-1.0*.so* \
+ $PKG/$ARCH-installer-filesystem/usr/lib${LIBDIRSUFFIX}/
+
+# Stuff needed for os-prober:
+cd $TMP/extract-packages/usr/share
+cp -fa${VERBOSE1} \
+ os-prober \
+ $PKG/$ARCH-installer-filesystem/usr/share/
+cd $TMP/extract-packages/usr/lib${LIBDIRSUFFIX}
+cp -fa${VERBOSE1} \
+ os-probes \
+ os-prober \
+ linux-boot-probes \
+ $PKG/$ARCH-installer-filesystem/usr/lib${LIBDIRSUFFIX}/
+cd $TMP/extract-packages/usr/bin
+cp -fa${VERBOSE1} \
+ linux-boot-prober \
+ os-prober \
+ $PKG/$ARCH-installer-filesystem/usr/bin/
+
+# Copy dhcpcd pieces:
+cd $TMP/extract-packages/
+cp -fa${VERBOSE1} \
+ lib/dhcpcd \
+ $PKG/$ARCH-installer-filesystem/lib/
+cp -fa${VERBOSE1} \
+ usr/lib${LIBDIRSUFFIX}/dhcpcd \
+ $PKG/$ARCH-installer-filesystem/usr/lib${LIBDIRSUFFIX}/
+cp -fa${VERBOSE1} \
+ var/lib/dhcpcd \
+ $PKG/$ARCH-installer-filesystem/var/lib/
+cp -fa${VERBOSE1} \
+ etc/dhcpcd.conf \
+ $PKG/$ARCH-installer-filesystem/etc/
+cp -fa${VERBOSE1} \
+ sbin/dhcpcd \
+ $PKG/$ARCH-installer-filesystem/sbin/
+
+# Add pci.ids and usb.ids now that we have lspci and lsusb onboard:
+cd $TMP/extract-packages/usr/share/hwdata
+mkdir -p -m755 $PKG/$ARCH-installer-filesystem/usr/share/hwdata
+cp -fa${VERBOSE1} pci.ids usb.ids \
+ $PKG/$ARCH-installer-filesystem/usr/share/hwdata
+
+# Copy the rc script for rpcbind:
+cd $TMP/extract-packages/etc/rc.d
+cp -fa${VERBOSE1} \
+ rc.rpc \
+ $PKG/$ARCH-installer-filesystem/etc/rc.d/
+chmod 755 $PKG/$ARCH-installer-filesystem/etc/rc.d/rc.rpc
+mkdir -p $PKG/$ARCH-installer-filesystem/var/state/rpcbind
+
+# Copy /etc/default/{nfs,rpc}:
+cd $TMP/extract-packages/etc/default
+cp -fa${VERBOSE1} \
+ nfs rpc \
+ $PKG/$ARCH-installer-filesystem/etc/default
+
+# Remove busybox symlinks for things that we have a real version of:
+for prunedir in $PKG/$ARCH-installer-filesystem/usr/bin $PKG/$ARCH-installer-filesystem/usr/sbin ; do
+ cd $prunedir
+ for removefile in $(find . -type f -maxdepth 1) ; do
+ rm -f $PKG/$ARCH-installer-filesystem/bin/$(basename $removefile)
+ rm -f $PKG/$ARCH-installer-filesystem/sbin/$(basename $removefile)
+ done
+done
+if [ -r rm -f $PKG/$ARCH-installer-filesystem/sbin/lspci -a ! -L $PKG/$ARCH-installer-filesystem/sbin/lspci -a -L $PKG/$ARCH-installer-filesystem/bin/lspci ]; then
+ rm -f $PKG/$ARCH-installer-filesystem/bin/lspci
+fi
+
+# Update to latest versions of files within /etc/
+# /etc/ file Package Reason
+# ------------------------------------------------------------------------------------
+# netconfig : libtirpc : Required by libtirpc (for rpc.statd/rpcbind)
+# services : etc : Always use the latest version to avoid problems with NFS.
+# dialogrc : dialog : Dialog config
+# mke2fs.conf : e2fsprogs: Required for ext4
+# nfsmount.conf : nfs-utls : On ARM we set "vers=3" as the default which allows
+# easy NFS mounting within the installer.
+cd $TMP/extract-packages/etc/
+cp -fa${VERBOSE1} \
+ services \
+ netconfig \
+ nfsmount.conf \
+ dialogrc \
+ mke2fs.conf \
+ $PKG/$ARCH-installer-filesystem/etc/
+
+# For ARM:
+# Copy the configuration file for fw_(printenv/saveenv) utility.
+# This allows people to more easily fix up a duff u-boot config
+# from the installer because the config file contains some of the memory offsets
+# for the most popular devices
+[ -s $TMP/extract-packages/etc/fw_env.config* ] \
+ && install -${VERBOSE1}pm644 $TMP/extract-packages/etc/fw_env.config* \
+ $PKG/$ARCH-installer-filesystem/etc/fw_env.config
+
+# If man pages have been requested, copy the groff sources to process later
+# For now, these will be English only (sorry)
+if [ $ADD_MANPAGES -eq 1 ]; then
+ if [ -d $TMP/extract-packages/usr/man ]; then
+ mkdir -p $PKG/$ARCH-installer-filesystem/usr/man/
+ cd $TMP/extract-packages/usr/man
+ cp --remove-destination -fa${VERBOSE1} man* \
+ $PKG/$ARCH-installer-filesystem/usr/man/
+ fi
+ # In case the real man package has been installed (unlikely)
+ if [ -f $TMP/extract-packages/lib${LIBDIRSUFFIX}/man.conf ]; then
+ cp -a $TMP/extract-packages/lib${LIBDIRSUFFIX}/man.conf $PKG/$ARCH-installer-filesystem/usr/lib${LIBDIRSUFFIX}
+ fi
+fi
+
+}
+
+############### Install libraries into installer's filesystem ##################
+
+# We install the library packages and copy only the parts that we need.
+#
+# Rather than automate the process, for some packages we need to specifically
+# select individual library names.
+# In case you wonder why we don't copy these libraries during the extraction
+# in the code above, it's because this way we don't need to keep up to date with
+# any new library names or versions - we either take everything or be very
+# specific -- this is particularly relevant for glibc.
+
+import_libraries()
+{
+rm -rf $TMP/extract-packages
+mkdir -p $TMP/extract-packages
+
+# Change into the installer's filesystem:
+cd $PKG/$ARCH-installer-filesystem
+
+echo "--- Importing libraries from Slackware packages ---"
+
+# a/e2fsprogs:
+installpkg -root $TMP/extract-packages $SLACKROOT/${DISTRODIR}/a/e2fsprogs-*.t[gblx]z | grep "Installing package " | cut -d'(' -f1
+cp -fa${VERBOSE1} $TMP/extract-packages/lib${LIBDIRSUFFIX}/*so* \
+ lib${LIBDIRSUFFIX}/
+rm -rf $TMP/extract-packages
+
+# a/glibc-solibs:
+mkdir -p $TMP/extract-packages
+installpkg -root $TMP/extract-packages $SLACKROOT/${DISTRODIR}/a/glibc-solibs-*.t[gblx]z | grep "Installing package " | cut -d'(' -f1
+cp -fa${VERBOSE1} /lib${LIBDIRSUFFIX}/ld-linux*so* lib${LIBDIRSUFFIX}/
+cp -fa${VERBOSE1} $TMP/extract-packages/lib${LIBDIRSUFFIX}/*so* \
+ lib${LIBDIRSUFFIX}/
+# pt_chown has been removed from glibc as a possible security hole:
+#cp --remove-destination -fa${VERBOSE1} $TMP/extract-packages/usr/libexec/pt_chown usr/libexec
+rm -rf $TMP/extract-packages
+
+# l/ncurses:
+mkdir -p $TMP/extract-packages
+installpkg -root $TMP/extract-packages $SLACKROOT/${DISTRODIR}/l/ncurses-*.t[gblx]z | grep "Installing package " | cut -d'(' -f1
+cp -fa${VERBOSE1} $TMP/extract-packages/lib${LIBDIRSUFFIX}/*so* \
+ lib${LIBDIRSUFFIX}/
+cp -fa${VERBOSE1} $TMP/extract-packages/usr/share/terminfo/{c,l,v,s,x} usr/share/terminfo/
+# Remove any terminal entries that are broken due to them being symlinks into directories that we haven't included:
+find usr/share/terminfo/ -xtype l -print0 | xargs -0 rm -f
+cp -fa${VERBOSE1} $TMP/extract-packages/usr/share/tabset/* usr/share/tabset/
+rm -rf $TMP/extract-packages
+# Remove dangling symlinks (pointing into directories we did not copy):
+( cd usr/share/terminfo
+ for file in $(find . -type l) ; do
+ if [ "$(readlink -e $file)" = "" ]; then
+ rm -f${VERSOSE1} $file
+ fi
+ done
+)
+
+# a/acl:
+mkdir -p $TMP/extract-packages
+installpkg -root $TMP/extract-packages $SLACKROOT/${DISTRODIR}/a/acl-*.t[gblx]z | grep "Installing package " | cut -d'(' -f1
+cp -fa${VERBOSE1} $TMP/extract-packages/lib${LIBDIRSUFFIX}/*so* \
+ lib${LIBDIRSUFFIX}/
+rm -rf $TMP/extract-packages
+
+# a/attr:
+mkdir -p $TMP/extract-packages
+installpkg -root $TMP/extract-packages $SLACKROOT/${DISTRODIR}/a/attr-*.t[gblx]z | grep "Installing package " | cut -d'(' -f1
+cp -fa${VERBOSE1} $TMP/extract-packages/lib${LIBDIRSUFFIX}/*so* \
+ lib${LIBDIRSUFFIX}/
+rm -rf $TMP/extract-packages
+
+# a/pciutils:
+mkdir -p $TMP/extract-packages
+installpkg -root $TMP/extract-packages $SLACKROOT/${DISTRODIR}/a/pciutils-*.t[gblx]z | grep "Installing package " | cut -d'(' -f1
+cp -fa${VERBOSE1} $TMP/extract-packages/lib${LIBDIRSUFFIX}/*so* \
+ lib${LIBDIRSUFFIX}/
+rm -rf $TMP/extract-packages
+
+# a/procps-ng:
+mkdir -p $TMP/extract-packages
+installpkg -root $TMP/extract-packages $SLACKROOT/${DISTRODIR}/a/procps-ng-*.t[gblx]z | grep "Installing package " | cut -d'(' -f1
+cp -fa${VERBOSE1} $TMP/extract-packages/lib${LIBDIRSUFFIX}/*so* \
+ lib${LIBDIRSUFFIX}/
+rm -rf $TMP/extract-packages
+
+# a/gpm:
+#mkdir -p $TMP/extract-packages
+#installpkg -root $TMP/extract-packages $SLACKROOT/${DISTRODIR}/a/gpm-*.t[gblx]z | grep "Installing package " | cut -d'(' -f1
+#cp -fa${VERBOSE1} $TMP/extract-packages/lib${LIBDIRSUFFIX}/*so* \
+# lib${LIBDIRSUFFIX}/
+#rm -rf $TMP/extract-packages
+
+}
+
+############### Install Kernel modules into installer's filesystem #############
+#
+#
+############### Add the network modules ########################################
+
+add_netmods()
+{
+
+echo "--- Adding network modules ---"
+cd $PKG/$ARCH-installer-filesystem
+
+# Clear out remaining cruft:
+rm -rf ./lib/modules.incoming
+
+# Temporary extraction directory:
+rm -rf $TMP/extract-packages
+mkdir -p -m755 $TMP/extract-packages
+
+# Unpack the kernel modules (all kernels defined for this $ARCH):
+for ind in $(seq 0 $((${#KERNELS[*]} -1)) ); do
+ tar -C $TMP/extract-packages -x${VERBOSE1}f $(ls -1 ${KERNELMODPKG} | grep "${KVER}$(echo ${KEXTRAV[$ind]}| tr - _)-" ) lib
+done
+mv -f${VERBOSE1} $TMP/extract-packages/lib/modules ./lib/modules.incoming
+
+# Start removing unwanted modules to keep the resulting image small:
+echo "--- Removing unneeded kernel modules ---"
+for ind in $(seq 0 $((${#KERNELS[*]} -1)) ); do
+ kv=${KEXTRAV[$ind]}
+ [ ! -d ./lib/modules.incoming/$KVER$kv ] && continue
+ (
+ echo "--- Processing kernel version '$KVER$kv' ---"
+ cd ./lib/modules.incoming/$KVER$kv
+ cd kernel/
+ # Remove blacklisted modules:
+ cat $MODBLACKLIST | while read modname ; do
+ find . -name $modname -exec rm -f "{}" \;
+ done
+ mv -f fs{,.orig} && \
+ ( mkdir -m755 fs
+ # If the architecture has a mostly modular kernel, then
+ # the filesystem modules may need to be included within the installer:
+ case $ARCH in
+ arm*)
+ cp -a fs.orig/{udf*,isofs*,cifs*,ext*,fat*,fscache,jfs*,lockd,nfs,nfs_common,jbd*,nls,reiserfs,xfs,binfmt*,mbcache*,exportfs*} fs/
+ ;;
+ *86*)
+ cp -a fs.orig/{cifs*,fscache,lockd,nfs,nfs_common} fs/
+ ;;
+ *)
+ cp -a fs.orig/cifs* fs/
+ ;;
+ esac
+ rm -rf fs.orig )
+ rm -rf${VERBOSE1} sound arch
+
+ cd net/
+ # Architectures with a more modular kernel will want to keep supporting
+ # modules for 'nfs' et al:
+ case $ARCH in
+ arm*)
+ ;;
+ *86*)
+ ;;
+ *)
+ rm -rf${VERBOSE1} sunrpc
+ ;;
+ esac
+ mv -f ipv4{,.orig} && ( mkdir -m755 ipv4 ; cp -a ipv4.orig/inet* ipv4/ ; rm -rf ipv4.orig )
+ mv -f ipv6{,.orig} && ( mkdir -m755 ipv6 ; cp -a ipv6.orig/ipv6* ipv6/ ; rm -rf ipv6.orig )
+ rm -rf${VERBOSE1} 9p appletalk atm ax25 bluetooth bridge dccp decnet ieee80211 ipx irda key mac80211 netfilter netrom rds rfkill rose rxrpc sched sctp tipc wanrouter wimax wireless
+ cd ..
+
+ cd drivers/
+ # Architectures with a more modular kernel will want to keep 'ide' 'scsi'
+ # and other core device drivers:
+ case $ARCH in
+ arm*)
+ ;;
+ *)
+ mv scsi scsi.orig
+ mv md md.orig
+ rm -rf${VERBOSE1} cdrom ide md scsi
+ mkdir scsi
+ mv scsi.orig/hv_storvsc.ko scsi
+ rm -rf${VERBOSE1} scsi.orig
+ mkdir md
+ mv md.orig/dm-raid.ko md
+ rm -rf${VERBOSE1} md.orig
+ ;;
+ esac
+ # Save loop.ko, nvme.ko, and virtio_blk.ko, but remove other block drivers:
+ mv block block.orig
+ mkdir block
+ mv block.orig/nvme.ko block
+ mv block.orig/loop.ko block
+ mv block.orig/virtio_blk.ko block
+ rm -rf${VERBOSE1} block.orig
+ # Done with block directory
+ # Save the Hyper-V modules in staging, but toss the rest:
+ mv staging staging.orig
+ mv staging.orig/hv staging
+ rm -rf${VERBOSE1} staging.orig
+ rm -rf${VERBOSE1} ata atm bluetooth clocksource connector crypto dma idle infiniband input isdn kvm leds media memstick message mfd misc pci power rtc serial telephony uwb w1 watchdog
+
+ if [ "$ADD_KMS" = "1" ]; then
+ # Keep video.ko and button.ko, needed by some gpu drivers.
+ # Also keep processor.ko, needed by acpi-cpufreq.
+ mv acpi acpi.orig
+ mkdir acpi
+ mv acpi.orig/{button,processor,video}.ko acpi
+ rm -rf${VERBOSE1} acpi.orig
+
+ # Keep AGP modules:
+ mv char/agp agp.orig
+ rm -rf${VERBOSE1} char
+ mkdir char
+ mv agp.orig char/agp
+
+ # Keep hwmon.ko:
+ mkdir hwmon.orig
+ mv hwmon/hwmon.ko hwmon.orig
+ rm -rf${VERBOSE1} hwmon
+ mv hwmon.orig hwmon
+
+ # Keep platform/x86/mxm-wmi.ko and platform/x86/wmi.ko
+ mkdir x86.orig
+ mv platform/x86/mxm-wmi.ko platform/x86/wmi.ko x86.orig
+ rm -rf${VERBOSE1} platform
+ mkdir platform
+ mv x86.orig platform/x86
+
+ # Keep thermal/thermal_sys.ko:
+ mv thermal thermal.orig
+ mkdir thermal
+ mv thermal.orig/thermal_sys.ko thermal
+ rm -rf${VERBOSE1} thermal.orig
+
+ # Keep some video drivers:
+ mv video video.orig
+ mkdir video
+ mv video.orig/{sis,syscopyarea.ko,sysfillrect.ko,sysimgblt.ko} video
+ rm -rf${VERBOSE1} video.orig
+ else
+ rm -rf${VERBOSE1} acpi char cpufreq hwmon platform thermal video
+ fi
+
+ # Needed to install on MMC:
+ mv mmc/host mmc/host.orig
+ mkdir mmc/host
+ mv mmc/host.orig/sdhci.ko mmc/host
+ mv mmc/host.orig/sdhci-acpi.ko mmc/host
+ mv mmc/host.orig/sdhci-pci.ko mmc/host
+ rm -rf${VERBOSE1} mmc/host.orig
+
+ cd usb/
+ rm -rf${VERBOSE1} atm host/hwa-hc.ko host/whci image serial wusbcore
+ cd ..
+
+ cd net/
+ rm -rf${VERBOSE1} appletalk arcnet bonding chelsio hamradio irda ixgb wimax wireless wan
+ cd ..
+
+ rm -f${VERBOSE1} ieee1394/pcilynx.ko
+ rm -f${VERBOSE1} net/pcmcia/com20020_cs.ko
+ rm -f${VERBOSE1} net/plip.ko
+ rm -f${VERBOSE1} net/usb/hso.ko
+ rm -f${VERBOSE1} usb/misc/uss720.ko
+ rm -f${VERBOSE1} gpio/wm831x-gpio.ko
+ #rm -f${VERBOSE1} clocksource/scx200_hrt.ko
+ )
+done
+
+# Move the remaining modules into place:
+mkdir -p -m755 ./lib/modules
+cp --remove-destination -fa${VERBOSE2} ./lib/modules.incoming/* ./lib/modules/
+
+# This can go now:
+rm -rf${VERBOSE1} ./lib/modules.incoming
+
+}
+
+
+############### Add the pcmcia modules #########################################
+
+add_pcmciamods()
+{
+
+echo "--- Adding pcmcia modules ---"
+cd $PKG/$ARCH-installer-filesystem
+
+# Clear out remaining cruft:
+rm -rf ./lib/modules.incoming
+
+# Temporary extraction directory:
+rm -rf $TMP/extract-packages
+mkdir -p -m755 $TMP/extract-packages
+
+# Unpack the kernel modules:
+for ind in $(seq 0 $((${#KERNELS[*]} -1)) ); do
+ kv=${KEXTRAV[$ind]}
+ tar -C $TMP/extract-packages -x${VERBOSE1}f $(ls -1 ${KERNELMODPKG} | grep "${KVER}$(echo $kv| tr - _)-" ) lib
+done
+mv -f${VERBOSE1} $TMP/extract-packages/lib/modules ./lib/modules.incoming
+
+# Compile the list with pcmcia modules and copy into place:
+for ind in $(seq 0 $((${#KERNELS[*]} -1)) ); do
+ kv=${KEXTRAV[$ind]}
+ mkdir -p $PKG/$ARCH-installer-filesystem/lib/modules/${KVER}$kv
+done
+for kmod in $( egrep "(/kernel/drivers/pcmcia/|/kernel/drivers/net/pcmcia/|/kernel/drivers/char/pcmcia/|/kernel/drivers/scsi/pcmcia/).*:" $PKG/$ARCH-installer-filesystem/lib/modules.incoming/$KVER${KEXTRAV[0]}/modules.dep | sed -e 's,:,,g ; s, ,\n,g' | sort | uniq | sed -e "s#^/lib/modules/$KVER${KEXTRAV[0]}##" ); do
+ for ind in $(seq 0 $((${#KERNELS[*]} -1)) ); do
+ kv=${KEXTRAV[$ind]}
+ mkdir -p $PKG/$ARCH-installer-filesystem/lib/modules/${KVER}$kv/$(dirname $kmod)
+ cp -a${VERBOSE1} $PKG/$ARCH-installer-filesystem/lib/modules.incoming/${KVER}$kv/$kmod $PKG/$ARCH-installer-filesystem/lib/modules/${KVER}$kv/$(dirname $kmod)/
+ done
+done
+
+# We can get rid of this now:
+rm -rf ./lib/modules.incoming
+
+# Install the necessary pcmcia support files from stock packages:
+echo "--- Adding support tools from Slackware packages: ---"
+rm -rf $TMP/extract-packages/*
+installpkg -root $TMP/extract-packages/ $PCMCIAUTILS | grep "Installing package " | cut -d'(' -f1
+rm -rf $TMP/extract-packages/{usr,var}
+cp -a $TMP/extract-packages/* $PKG/$ARCH-installer-filesystem/
+rm -rf $TMP/extract-packages/*
+installpkg -root $TMP/extract-packages/ $SYSFS | grep "Installing package " | cut -d'(' -f1
+rm -rf $TMP/extract-packages/usr/{doc,include} $TMP/extract-packages/var
+if [ ! $ADD_MANPAGES -eq 1 ]; then
+ rm -rf $TMP/extract-packages/usr/man/*
+fi
+cp -a $TMP/extract-packages/* $PKG/$ARCH-installer-filesystem/
+rm -rf $TMP/extract-packages/*
+
+}
+
+
+############### Compress kernel modules ########################################
+
+compress_modules()
+{
+ # If the module files should be compressed, do that now:
+ if [ $COMPRESS_MODS -eq 1 ]; then
+ echo "--- Compressing kernel modules ---"
+ cd $PKG/$ARCH-installer-filesystem
+ find ./lib/modules -type f -name "*.ko" -exec gzip -9f {} \;
+ for i in $(find ./lib/modules -type l -name "*.ko") ; do ln -s $( readlink $i).gz $i.gz ; rm $i ; done
+ cd - 1>/dev/null
+ fi
+
+}
+
+
+############### Add network card firmware #####################################
+
+add_netfirmware()
+{
+ # Some network cards use a firmware...
+ echo "--- Adding firmware for network cards ---"
+ cd $PKG/$ARCH-installer-filesystem
+
+ # Just to be safe:
+ mkdir -p -m755 ./lib/firmware
+
+ # Temporary extraction directory:
+ rm -rf $TMP/extract-packages
+ mkdir -p -m755 $TMP/extract-packages
+
+ # Unpack the kernel firmware:
+ tar -C $TMP/extract-packages -x${VERBOSE1}f $(ls -1 ${KERNELFW_PKG}) lib
+ for FMW in $NETFIRMWARE ; do
+ cp -fa${VERBOSE2} $TMP/extract-packages/lib/firmware/${FMW}* ./lib/firmware
+ done
+
+ # Clean up:
+ rm -rf $TMP/extract-packages/lib
+ cd - 1>/dev/null
+
+}
+
+
+############### Calculate module dependencies (showing errors) #################
+
+check_module_dependencies()
+{
+
+cd $PKG/$ARCH-installer-filesystem
+
+# Make sure you compile generic and huge kernels with the same options
+# (apart from the drivers that will be modularized/builtins) or else you
+# will see "unknown symbol" errors when the scripts resolves dependencies!
+# Unpack the System.map files we need for checking unresolved dependencies
+# (aka kernel modules we forgot to add):
+for ind in $(seq 0 $((${#KERNELS[*]} -1)) ); do
+ gunzip -cd ${SLACKROOT}/kernels/${KERNELS[$ind]}/System.map.gz \
+ > ./lib/modules/System.map.$KVER${KEXTRAV[$ind]}
+done
+
+echo "--- Calculating module dependencies ---"
+for ind in $(seq 0 $((${#KERNELS[*]} -1)) ); do
+ kv=${KEXTRAV[$ind]}
+ [ ! -d $PKG/$ARCH-installer-filesystem/lib/modules/$KVER${kv} ] && continue
+ rm -f $PKG/$ARCH-installer-filesystem/lib/modules/$KVER${kv}/modules.*
+ /sbin/depmod -a -e -b $PKG/$ARCH-installer-filesystem \
+ -F $PKG/$ARCH-installer-filesystem/lib/modules/System.map.$KVER$kv $KVER$kv
+done
+
+# We do not need these any longer:
+rm -f ./lib/modules/System.map.*
+}
+
+############### Architecture specific stuff ####################################
+
+arch_specifics()
+{
+cd $PKG/$ARCH-installer-filesystem
+
+echo "--- Running ARCH specific tasks ---"
+
+# First the tasks we want to apply to every architecture:
+
+# Set the Slackware version in the 'setup' script & /etc/issue
+# to the version specified in this installer build script:
+sed -i \
+ 's?Slackware Linux Setup (version.*)?Slackware Linux Setup (version '"$INSTALLERVERSION"')?' \
+ usr/lib/setup/setup
+sed -i 's?(version.*)?(version '"$INSTALLERVERSION"')?g' etc/issue
+
+# Then split out per supported architecture:
+
+case $ARCH in
+
+ arm*)
+ #
+ # ARM modifications:
+ #
+ cat << 'EOF' > root/qgo
+# This makes parallel Slackware installations over SSH far easier to identify.
+read -p "Host name (for window title): " winthostname
+# We include additional control characters to enable us to set the window title
+# even under GNU Screen:
+echo -ne "\033P\033]0; Slackware ARM Installer on $winthostname \007\033\\"
+ntpdate rolex.ripe.net && /bin/sh /sbin/fakedate && TERM=screen-256color setup
+EOF
+ chmod 755 root/qgo
+
+ # Don't need these - they take up space:
+ #
+ rm -f sbin/syslinux
+
+ # Apply ARM patches to the installer scripts:
+ #
+ # We don't need to set a Kernel for Slackware ARM yet, as the boot loader config is usually
+ # out of reach of the OS and needs to be configured independently.
+ install -${VERBOSE1}pm755 $SRCDIR/arm/installer-patches/setkernel usr/lib/setup/SeTkernel
+
+ # Load Kernel modules required for filesystems and so on.
+ sed -i '\?^#.*!/bin/? a\/etc/rc.d/rc.modules-arm' etc/rc.d/rc.S
+ install -${VERBOSE1}pm755 $SRCDIR/arm/rc.modules-arm etc/rc.d/
+
+ # Set the system clock from the hardware clock before fudging the date
+ # since on ARM the system clock is not automatically set on all devices.
+ sed -i '/^touch \/.today/ a/sbin/hwclock --hctosys' etc/rc.d/rc.S
+
+ # Log errors into /tmp on the root filesystem. This helps the development
+ # process -- sometimes the doinst.sh scripts bail out because of a missing
+ # dependency (or sometimes a package just needs a recompile).
+ patch ${VERBOSETXT} -p0 < $SRCDIR/arm/installer-patches/slackinstall-logerror.diff || exit 1
+
+ # On some ARM devices there is no RTC so it's best to disable the
+ # fsck checks on the filesystems.
+ install -${VERBOSE1}pm755 $SRCDIR/arm/armedslack-nofscheck usr/lib/setup/
+ patch ${VERBOSETXT} -p0 < $SRCDIR/arm/installer-patches/SeTpartitions-add-nofscheck.diff || exit 1
+
+ ;;
+
+ x86_64)
+ #
+ # x86_64 modifications:
+ #
+
+ # We may still need to fix-up 'slackware' directory paths to 'slackware64':
+ if ! grep -qr "slackware64" ./usr/lib/setup/ ; then
+ # Note, the order of fix-up is important:
+ sed -i \
+ -e "s#/slackware\([^-]\)#/slackware64\1#g" \
+ -e "s#slackware/#slackware64/#g" \
+ -e "s#slackware)#slackware64)#g" \
+ -e "s#slackware\$#slackware64#g" \
+ -e "s#mkdir slackware#mkdir slackware64#" \
+ $(grep -lr "slackware" ./usr/lib/setup)
+ fi
+ ;;
+
+esac
+
+}
+
+############### Create the new installer initrd ################################
+
+create_initrd()
+{
+cd $PKG/$ARCH-installer-filesystem/
+
+echo "--- Creating your new initrd.img ---"
+# Leave a note in the installer image to help us work out which build version
+# it is -- just aids with bug reports for now:
+cat <<"EOF" > .installer-version
+Version details:
+----------------
+Installer............: $Revision: 1.129 $ ($Date: 2011/04/13 23:03:07 $)
+EOF
+cat << EOF >> .installer-version
+For Slackware version: $INSTALLERVERSION
+Build date...........: $( date )
+
+Build details:
+--------------
+Installer arch.......: $ARCH
+Build host...........: $( uname -a )
+
+EOF
+
+if [ ! -f etc/ld.so.conf ]; then
+ cat <<EOF > etc/ld.so.conf
+/lib${LIBDIRSUFFIX}
+/usr/lib${LIBDIRSUFFIX}
+EOF
+fi
+ldconfig -r.
+
+# Find any remaining dangling symlinks.
+echo "--- Finding any dangling symlinks ---"
+echo " Expect to see:"
+echo " ./boot ./var/log/scripts ./var/log/packages"
+echo " ./var/adm/scripts ./var/adm/packages ./cdrom ./nfs"
+echo ""
+find -L . -type l
+echo "-------------------------------------"
+
+# Do we have to split the initrd (separate initrd for each kernel version)?
+if [ $SPLIT_INITRD -eq 1 ]; then
+ if [ $(ls -d --indicator-style=none ./lib/modules/${KVER}* | wc -l) -eq 2 ];
+ then
+ echo "--- Splitting into separate initrd's for $KVER ---"
+ local usek
+ for kv in $KVER $KVER-smp ; do
+ [ "$kv" = "$KVER" ] && usek="-smp" || usek=""
+ # Determine the size of the installer:
+ echo " Installer size (uncompressed): $( du -sh --exclude=$kv . )"
+ find . -path ./lib/modules/$kv -prune -o -print \
+ | cpio -o -H newc | gzip -9fv > $CWD/initrd${usek}.img
+ echo " New installer image for kernel $KVER$usek is ${CWD}/initrd${usek}.img"
+ done
+ cat $SLACKROOT/isolinux/isolinux.cfg | sed \
+ -e "/label huge.s/,/label hugesmp.s/s/initrd=initrd.img/initrd=initrd.img/" \
+ -e "/label hugesmp.s/,/label speakup.s/s/initrd=initrd.img/initrd=initrd-smp.img/" \
+ -e "/label speakup.s/,\$s/initrd=initrd.img/initrd=initrd.img/" \
+ > $CWD/isolinux.cfg
+ elif [ $(ls -d --indicator-style=none ./lib/modules/${KVER}* | wc -l) -gt 2 ];
+ then
+ echo "*** Initrd splitting only supported for a total of 2 kernel versions!"
+ SPLIT_INITRD=0
+ else
+ echo "*** Only one set of kernel modules present, no splitting performed!"
+ SPLIT_INITRD=0
+ fi
+fi
+
+if [ $SPLIT_INITRD -eq 0 ]; then
+ # Determine the size of the installer:
+ echo " Installer size (uncompressed): $( du -sh . )"
+ find . | cpio -o -H newc | gzip -9fv > $CWD/initrd.img
+ echo " New installer image is ${CWD}/initrd.img"
+ cp -a $SLACKROOT/isolinux/isolinux.cfg $CWD/
+fi
+
+echo
+echo "--- Suggested actions:"
+echo "[1] chroot $PKG/$ARCH-installer-filesystem"
+echo "[2] Test it"
+echo "[3] When done, mv -f $CWD/initrd.img $SLACKROOT/isolinux/initrd.img"
+echo
+}
+
+############### Create the USB boot image file #################################
+
+create_usbboot()
+{
+# Like initrd.img, the usbboot.img will be created in the current directory
+echo "--- Creating an image for the USB boot disk ---"
+
+# Calculate sizes:
+let USBIMG=$( LC_ALL=C du -ck ${CWD}/initrd*.img | grep total | cut -f1 )
+for KERN in ${SLACKROOT}/kernels/*.?/*zImage ; do
+ let USBIMG=USBIMG+$( LC_ALL=C du -sk $KERN | cut -f1 )
+done
+let USBIMG=USBIMG+777 # Add just that little extra...
+if [ $EFIBOOT -eq 1 ]; then
+ # A bit more extra space since elilo will be added...
+ let USBIMG=USBIMG+256
+fi
+
+# Generate a pxelinux.cfg/default file (used for usbboot.img too)
+cat ${CWD}/isolinux.cfg \
+ | sed -e "s#/kernels/#kernels/#" > ${CWD}/pxelinux.cfg_default
+
+# Create a DOS formatted image file
+if $(which mkfs.msdos 1>/dev/null 2>&1) ; then
+ MKDOS=mkfs.msdos
+else
+ MKDOS=mkdosfs
+fi
+${MKDOS} -n USBSLACK -F 16 -C ${CWD}/usbboot.img $USBIMG || exit 1
+[ $VERBOSE -eq 1 ] && file ${CWD}/usbboot.img
+
+# Copy all relevant files into the image.
+rm -rf ${CWD}/usbmount
+mkdir -p -m700 ${CWD}/usbmount
+mount -o loop,rw ${CWD}/usbboot.img ${CWD}/usbmount
+
+echo "--- Copying data to the USB boot disk image: ---"
+cp $SLACKROOT/isolinux/setpkg ${CWD}/usbmount/
+cp $SLACKROOT/isolinux/{f*.txt,message.txt} ${CWD}/usbmount/
+cp ${CWD}/initrd*.img ${CWD}/usbmount/
+cat ${CWD}/pxelinux.cfg_default |sed -e 's# kernels/# #g' -e 's#/.zImage##' \
+ -e 's#/memtest##' \
+ > ${CWD}/usbmount/syslinux.cfg
+
+# Add EFI support:
+if [ $EFIBOOT -eq 1 ]; then
+ cp -a ${SRCDIR}/sources/efi.${ARCH}/* ${CWD}/usbmount
+ # Make sure the Slackware and kernel version in message.txt are up to date:
+ cat ${SRCDIR}/sources/efi.${ARCH}/EFI/BOOT/message.txt | sed "s/version.*/version ${INSTALLERVERSION} \(Linux kernel $(uname -r | cut -f 1 -d -)\)\!/g" > ${CWD}/usbmount/EFI/BOOT/message.txt
+fi
+
+# Older syslinux can not cope with subdirectories - let's just be safe:
+echo "--- Making the usbboot image bootable: ---"
+(
+ cd $SLACKROOT/kernels/
+ for dir in `find -type d -name "*.?" -maxdepth 1` ; do
+ cp $dir/*zImage ${CWD}/usbmount/$dir
+ done
+ cp $SLACKROOT/kernels/memtest/memtest ${CWD}/usbmount/memtest
+)
+sync
+
+# Stamp the file with the syslinux bootloader:
+# > Do "vi ~/.mtoolsrc" to add "mtools_skip_check=1",
+# > if the next command gives an error:
+umount ${CWD}/usbmount
+syslinux -s ${CWD}/usbboot.img
+
+#Clean up:
+rm -rf ${CWD}/usbmount
+
+}
+
+############### Create the EFI boot image file #################################
+
+create_efiboot()
+{
+# Like initrd.img, the efiboot.img will be created in the current directory
+echo
+echo "--- Creating an image for the EFI boot disk ---"
+
+# Calculate sizes:
+let EFIIMG=$( LC_ALL=C du -ck ${CWD}/initrd*.img | grep total | cut -f1 )
+for KERN in ${SLACKROOT}/kernels/huge.s/*zImage ; do
+ let EFIIMG=EFIIMG+$( LC_ALL=C du -sk $KERN | cut -f1 )
+done
+let EFIIMG=EFIIMG+2222 # Add just that little extra...
+
+# Round this value down to the nearest 2048 bytes:
+let EFIIMG=EFIIMG\*1024
+let EFIIMG=EFIIMG/2048
+
+# Create the image:
+dd if=/dev/zero of=${CWD}/efiboot.img bs=2048 count=$EFIIMG
+sgdisk -N 1 -t 1:EF00 --change-name=1:EFISLACK ${CWD}/efiboot.img
+losetup -o 1048576 /dev/loop3 ${CWD}/efiboot.img
+mkdosfs -F 32 /dev/loop3
+rm -rf ${CWD}/efimount
+mkdir ${CWD}/efimount
+mount /dev/loop3 ${CWD}/efimount
+cp -a --verbose ${CWD}/sources/efi/* ${CWD}/efimount
+cp -a --verbose ${SLACKROOT}/kernels/huge.s/*zImage ${CWD}/efimount/EFI/BOOT/huge.s
+cp -a ${CWD}/initrd.img ${CWD}/efimount/EFI/BOOT/
+umount /dev/loop3
+losetup -d /dev/loop3
+
+# Clean up:
+rm -rf ${CWD}/efimount
+
+}
+
+############### Pre-process man pages ##########################################
+process_manpages()
+{
+# We have to preprocess these, since we aren't about to ship groff on here.
+if [ -d usr/man ]; then
+ echo "--- Pre-processing man pages ---"
+ ( cd usr/man
+ for manpagedir in $(find . -type d -name "man*") ; do
+ ( cd $manpagedir
+ for eachpage in $( find . -type f -maxdepth 1) ; do
+ echo -n "$eachpage "
+ # bzip2 is best for text (among gzip, bzip2, and xz tested)
+ /bin/gunzip -c "$eachpage" | /usr/bin/gtbl | /usr/bin/groff -mandoc -Tlatin1 | bzip2 -9c > "$(dirname $eachpage)/$(basename $eachpage .gz).bz2"
+ rm -f "$eachpage"
+ done
+ )
+ done
+ echo
+ )
+fi
+}
+# End pre-process man pages
+
+############### Copy man pages #################################################
+copy_manpages()
+{
+# We will only include the man pages that are copied here.
+if [ -d usr/man ]; then
+ echo "--- Copying desired man pages ---"
+ ( cd usr
+ mv man man.full
+ mkdir man
+ # List every man page to include in the loop below.
+ # Pages should be preprocessed text files compressed with bzip2.
+ # Note that they can be any cattable text file and need not be true
+ # man page format... perhaps handy for future documentation, or
+ # README_LVM, etc. ?
+ for manpage in \
+ man8/cfdisk.8.bz2 \
+ man8/fdisk.8.bz2 \
+ man8/gdisk.8.bz2 \
+ man8/partprobe.8.bz2 \
+ man8/parted.8.bz2 \
+ man8/partx.8.bz2 \
+ man8/sfdisk.8.bz2 \
+ man8/sgdisk.8.bz2 \
+ man8/mount.8.bz2 \
+ man1/lsattr.1.bz2 \
+ man1/chattr.1.bz2 \
+ man8/e2image.8.bz2 \
+ man8/badblocks.8.bz2 \
+ man8/fsck.8.bz2 \
+ man8/e2fsck.8.bz2 \
+ man8/mke2fs.8.bz2 \
+ man8/tune2fs.8.bz2 \
+ man5/mke2fs.conf.5.bz2 \
+ man5/e2fsck.conf.5.bz2 \
+ man8/btrfs.8.bz2 \
+ man8/mkfs.btrfs.8.bz2 \
+ man8/jfs_mkfs.8.bz2 \
+ man8/jfs_fsck.8.bz2 \
+ man8/pvdisplay.8.bz2 \
+ man8/vgchange.8.bz2 \
+ man8/pvck.8.bz2 \
+ man8/lvmsar.8.bz2 \
+ man8/lvresize.8.bz2 \
+ man8/lvrename.8.bz2 \
+ man8/vgs.8.bz2 \
+ man8/pvresize.8.bz2 \
+ man8/vgexport.8.bz2 \
+ man8/vgsplit.8.bz2 \
+ man8/pvcreate.8.bz2 \
+ man8/vgreduce.8.bz2 \
+ man8/vgck.8.bz2 \
+ man8/pvchange.8.bz2 \
+ man8/vgdisplay.8.bz2 \
+ man8/pvremove.8.bz2 \
+ man8/vgremove.8.bz2 \
+ man8/vgmerge.8.bz2 \
+ man8/vgextend.8.bz2 \
+ man8/lvchange.8.bz2 \
+ man8/vgcfgbackup.8.bz2 \
+ man8/lvreduce.8.bz2 \
+ man8/lvscan.8.bz2 \
+ man8/lvs.8.bz2 \
+ man8/dmsetup.8.bz2 \
+ man8/vgimport.8.bz2 \
+ man8/pvscan.8.bz2 \
+ man8/lvcreate.8.bz2 \
+ man8/vgrename.8.bz2 \
+ man8/lvdisplay.8.bz2 \
+ man8/vgimportclone.8.bz2 \
+ man8/lvextend.8.bz2 \
+ man8/lvremove.8.bz2 \
+ man8/vgcfgrestore.8.bz2 \
+ man8/lvmconf.8.bz2 \
+ man8/lvmdiskscan.8.bz2 \
+ man8/lvmdump.8.bz2 \
+ man8/vgcreate.8.bz2 \
+ man8/vgscan.8.bz2 \
+ man8/pvmove.8.bz2 \
+ man8/lvmchange.8.bz2 \
+ man8/vgmknodes.8.bz2 \
+ man8/fsadm.8.bz2 \
+ man8/vgconvert.8.bz2 \
+ man8/lvconvert.8.bz2 \
+ man8/lvm.8.bz2 \
+ man8/lvmsadc.8.bz2 \
+ man8/dmeventd.8.bz2 \
+ man8/pvs.8.bz2 \
+ man5/lvm.conf.5.bz2 \
+ man8/cryptsetup.8.bz2 \
+ man8/mdmon.8.bz2 \
+ man8/mdadm.8.bz2 \
+ man8/mkreiserfs.8.bz2 \
+ man8/mkfs.xfs.8.bz2 \
+ man8/installpkg.8.bz2 \
+ man8/removepkg.8.bz2 \
+ man8/pkgtool.8.bz2 \
+ man8/mkfs.minix.8.bz2 \
+ man8/mkdosfs.8.bz2 \
+ man8/fdformat.8.bz2 \
+ man1/grep.1.bz2 \
+ man1/wc.1.bz2 \
+ man1/chroot.1.bz2 \
+ man1/tar.1.bz2 \
+ man1/chmod.1.bz2 \
+ man1/ln.1.bz2 \
+ man1/chown.1.bz2 \
+ man1/sync.1.bz2 \
+ man1/du.1.bz2 \
+ man1/ddrescue.1.bz2 \
+ man1/dd.1.bz2 \
+ man8/ifconfig.8.bz2 \
+ man8/route.8.bz2 \
+ man1/hostname.1.bz2 \
+ man8/arp.8.bz2 \
+ man8/netstat.8.bz2 \
+ man8/ipmask.8.bz2 \
+ man8/rarp.8.bz2 \
+ man8/mii-tool.8.bz2 \
+ man8/nameif.8.bz2 \
+ man8/findmnt.8.bz2 \
+ man8/lsblk.8.bz2 \
+ man8/fsfreeze.8.bz2 \
+ man8/fstrim.8.bz2 \
+ man8/swaplabel.8.bz2 \
+ man8/ip.8.bz2 \
+ ; do
+ mkdir -p man/$(dirname $manpage)
+ cp -a man.full/$manpage man/$manpage
+ done
+ # Delete the pages that will not be included:
+ rm -rf man.full
+ # Create cat directories:
+ ( cd man
+ for mandir in man* ; do
+ ln -sf $mandir cat$(echo $mandir | cut -b4-)
+ done
+ )
+ )
+fi
+}
+# End copy man pages
+
+############### Time to call all our functions #################################
+
+############### Time to call all our functions #################################
+
+if [ $SHOWHELP -eq 1 ]; then
+ basic_usage
+ exit
+fi
+
+# Clean build environment:
+rm -rf $TMP $PKG
+mkdir -p $TMP $PKG
+rm -f $CWD/initrd*.img $CWD/usbboot.img
+rm -f $CWD/isolinux.cfg ${CWD}/pxelinux.cfg_default
+
+if [ $DUMPSKELETON -eq 1 ]; then
+ create_installer_fs
+ extract_skeleton_fs
+ zipup_installer_skeleton
+else
+ cat <<-EOT
+
+ ** Building software for: ARCH='$ARCH'
+ ** This host's specs: machine type='$(uname -m)'
+ ** processor='$(uname -p)'
+ ** hardware platform"='$(uname -i)'
+ ** Waiting 3 seconds or just press ENTER now :-)
+
+ EOT
+ read -p "..." -t 3
+ echo
+ # Are we re-compiling busybox/dropbear and populating with binaries?
+ if [ $RECOMPILE -eq 1 ]; then
+ create_installer_fs
+ if ! use_installer_source ; then
+ extract_skeleton_fs
+ fi
+ build_busybox || exit 1
+ build_dropbear || exit 1
+ import_binaries || exit 1
+ import_libraries || exit 1
+ arch_specifics
+ else
+ unpack_oldinitrd
+ fi
+
+ # Are we adding network modules?
+ if [ $ADD_NETMODS -eq 1 ]; then
+ add_netmods
+ fi
+
+ # Are we adding pcmcia modules?
+ if [ $ADD_PCMCIAMODS -eq 1 ]; then
+ add_pcmciamods
+ fi
+
+ if [ $ADD_NETMODS -eq 1 -o $ADD_PCMCIAMODS -eq 1 ]; then
+ # If we added modules, we also need to add network card firmware:
+ # but only if specified. The default list of firmware is useless on ARM SoC systems.
+ # The TrimSlice has a RealTek card which requires firmware, but currently the firmware
+ # is compiled into the Kernel. This will probably have to change later, but for now
+ # it'll suffice.
+ if [ $ADD_NETFIRMWARE -eq 1 ]; then
+ add_netfirmware
+ fi
+ # If we added modules, compress them (if requested):
+ compress_modules
+ # If we added modules, check for missing dependencies:
+ check_module_dependencies
+ fi
+
+ if [ $ADD_MANPAGES -eq 1 ]; then
+ process_manpages
+ copy_manpages
+ fi
+
+ # Finally, create the Slackware installer initrd
+ create_initrd
+
+ # If you wanted a USB boot image as well, here it is:
+ if [ $USBBOOT -eq 1 ]; then
+ create_usbboot
+ fi
+
+ ## Commented out. The usbboot.img handles EFI now.
+ ## If you wanted an EFI boot image as well, here it is:
+ #if [ $EFIBOOT -eq 1 ]; then
+ # create_efiboot || exit 1
+ #fi
+
+fi
+
diff --git a/source/installer/busybox-1.19.4.tar.bz2.sign b/source/installer/busybox-1.19.4.tar.bz2.sign
deleted file mode 100644
index 39615406..00000000
--- a/source/installer/busybox-1.19.4.tar.bz2.sign
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-busybox-1.19.4.tar.bz2 released Sat, 04 Feb 2012 20:36:04 +0100
-
-MD5: 9c0cae5a0379228e7b55e5b29528df8e busybox-1.19.4.tar.bz2
-SHA1: 5d7db83d8efbadc19c86ec236e673504bbf43517 busybox-1.19.4.tar.bz2
-
-To verify this signature, you can obtain my public key
-from http://busybox.net/~vda/vda_pubkey.gpg
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-iD8DBQFPLYisR7cMVazJllsRAlJcAJ9qzRJHdS3BTxltS8uXQjkY85kvnQCgxqD2
-UoFLhO99cgfJpTNM0/2S8PA=
-=+tRO
------END PGP SIGNATURE-----
diff --git a/source/installer/busybox.2.6.32.2.diff b/source/installer/busybox.2.6.32.2.diff
deleted file mode 100644
index 15757775..00000000
--- a/source/installer/busybox.2.6.32.2.diff
+++ /dev/null
@@ -1,13 +0,0 @@
---- ./miscutils/eject.c.orig 2009-12-12 15:13:28.000000000 -0600
-+++ ./miscutils/eject.c 2009-12-31 14:04:20.000000000 -0600
-@@ -13,6 +13,10 @@
- * Most of the dirty work blatantly ripped off from cat.c =)
- */
-
-+/* kludge for 2.6.32.2 /usr/include/scsi/scsi.h */
-+#include <stdint.h>
-+typedef uint8_t u8;
-+
- #include <sys/mount.h>
- #include "libbb.h"
- /* Must be after libbb.h: they need size_t */
diff --git a/source/installer/busybox.SlackBuild b/source/installer/busybox.SlackBuild
deleted file mode 100755
index bf99203a..00000000
--- a/source/installer/busybox.SlackBuild
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/sh
-# Copyright 2007, 2009, 2011, 2012, 2016 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-PKGNAM=busybox
-VERSION=${VERSION:-$(echo $PKGNAM-*.tar.bz2 | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-1}
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$( uname -m )" in
- i?86) export ARCH=i486 ;;
- arm*) export ARCH=arm ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) export ARCH=$( uname -m ) ;;
- esac
-fi
-
-CWD=$(pwd)
-if [ "$TMP" = "" ]; then
- TMP=/tmp
-fi
-
-cd $TMP
-rm -rf ${PKGNAM}-${VERSION}
-tar xvf $CWD/${PKGNAM}-$VERSION.tar.bz2 || exit 1
-cd ${PKGNAM}-$VERSION || exit 1
-
-zcat $CWD/busybox.2.6.32.2.diff.gz | patch -p1 || exit 1
-
-# Fix broken wget -P option:
-zcat $CWD/busybox.wget.P.diff.gz | patch -p1 --verbose || exit 1
-
-zcat $CWD/busybox.glibc217.diff.gz | patch -p1 --verbose || exit 1
-
-zcat $CWD/busybox.fix.perms.64bit.platforms.diff.gz | patch -p1 --verbose || exit 1
-
-# Make sure ownerships and permissions are sane:
-chown -R root:root .
-find . -perm 666 -exec chmod 644 {} \;
-find . -perm 664 -exec chmod 644 {} \;
-find . -perm 600 -exec chmod 644 {} \;
-find . -perm 444 -exec chmod 644 {} \;
-find . -perm 400 -exec chmod 644 {} \;
-find . -perm 440 -exec chmod 644 {} \;
-find . -perm 777 -exec chmod 755 {} \;
-find . -perm 775 -exec chmod 755 {} \;
-find . -perm 511 -exec chmod 755 {} \;
-find . -perm 711 -exec chmod 755 {} \;
-find . -perm 555 -exec chmod 755 {} \;
-
-# Configure:
-cat $CWD/busybox-dot-config > .config
-make oldconfig
-
-# Build and install:
-make -j4 || exit 1
-make install || exit 1
-
diff --git a/source/installer/busybox.fix.perms.64bit.platforms.diff b/source/installer/busybox.fix.perms.64bit.platforms.diff
deleted file mode 100644
index d8afd95e..00000000
--- a/source/installer/busybox.fix.perms.64bit.platforms.diff
+++ /dev/null
@@ -1,44 +0,0 @@
-From af36ba206f7cf0eef77a82af741766a2d03c51ad Mon Sep 17 00:00:00 2001
-From: Timo Teras <timo.teras@iki.fi>
-Date: Fri, 10 Feb 2012 09:55:24 +0200
-Subject: mkdir: fix permissions on 64-bit platforms
-
-sizeof(long) != sizeof(mode_t), this causes the compare in
-bb_make_directory of (long)-1 != (mode_t)-1 to fail and mess up
-the permissions of final directory by doing chmod((mode_t) -1).
-
-Signed-off-by: Timo Teras <timo.teras@iki.fi>
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- coreutils/mkdir.c | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c
-index a4429b1..b33b6bb 100644
---- a/coreutils/mkdir.c
-+++ b/coreutils/mkdir.c
-@@ -54,7 +54,7 @@ static const char mkdir_longopts[] ALIGN1 =
- int mkdir_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int mkdir_main(int argc UNUSED_PARAM, char **argv)
- {
-- mode_t mode = (mode_t)(-1);
-+ long mode = -1;
- int status = EXIT_SUCCESS;
- int flags = 0;
- unsigned opt;
-@@ -68,10 +68,11 @@ int mkdir_main(int argc UNUSED_PARAM, char **argv)
- #endif
- opt = getopt32(argv, "m:p" IF_SELINUX("Z:"), &smode IF_SELINUX(,&scontext));
- if (opt & 1) {
-- mode = 0777;
-- if (!bb_parse_mode(smode, &mode)) {
-+ mode_t mmode = 0777;
-+ if (!bb_parse_mode(smode, &mmode)) {
- bb_error_msg_and_die("invalid mode '%s'", smode);
- }
-+ mode = mmode;
- }
- if (opt & 2)
- flags |= FILEUTILS_RECUR;
---
-cgit v0.12
diff --git a/source/installer/busybox.glibc217.diff b/source/installer/busybox.glibc217.diff
deleted file mode 100644
index 94afe359..00000000
--- a/source/installer/busybox.glibc217.diff
+++ /dev/null
@@ -1,10 +0,0 @@
---- ./include/libbb.h.orig 2012-02-04 13:34:24.000000000 -0600
-+++ ./include/libbb.h 2013-03-11 23:30:28.537980546 -0500
-@@ -35,6 +35,7 @@
- #include <sys/poll.h>
- #include <sys/ioctl.h>
- #include <sys/mman.h>
-+#include <sys/resource.h>
- #include <sys/socket.h>
- #include <sys/stat.h>
- #include <sys/time.h>
diff --git a/source/installer/busybox.wget.P.diff b/source/installer/busybox.wget.P.diff
deleted file mode 100644
index 99219d46..00000000
--- a/source/installer/busybox.wget.P.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-From aacd44860129372e5d4ff1494664317f18cbb615 Mon Sep 17 00:00:00 2001
-From: Denys Vlasenko <vda.linux@googlemail.com>
-Date: Sun, 17 Jun 2012 18:21:30 +0000
-Subject: wget: fix wget-supports--P testsuite failure. Closes 4940
-
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
-diff --git a/networking/wget.c b/networking/wget.c
-index 5d58450..6d8f8a5 100644
---- a/networking/wget.c
-+++ b/networking/wget.c
-@@ -621,13 +621,11 @@ static void download_one_url(const char *url)
- if (G.fname_out[0] == '/' || !G.fname_out[0])
- G.fname_out = (char*)"index.html";
- /* -P DIR is considered only if there was no -O FILE */
-+ if (G.dir_prefix)
-+ G.fname_out = fname_out_alloc = concat_path_file(G.dir_prefix, G.fname_out);
- else {
-- if (G.dir_prefix)
-- G.fname_out = fname_out_alloc = concat_path_file(G.dir_prefix, G.fname_out);
-- else {
-- /* redirects may free target.path later, need to make a copy */
-- G.fname_out = fname_out_alloc = xstrdup(G.fname_out);
-- }
-+ /* redirects may free target.path later, need to make a copy */
-+ G.fname_out = fname_out_alloc = xstrdup(G.fname_out);
- }
- }
- #if ENABLE_FEATURE_WGET_STATUSBAR
---
-cgit v0.9.0.1-2-gef13
diff --git a/source/installer/dhcpcd/config.h.diff b/source/installer/dhcpcd/config.h.diff
deleted file mode 100644
index 7bdefb60..00000000
--- a/source/installer/dhcpcd/config.h.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -Nur dhcpcd-3.2.3.orig/config.h dhcpcd-3.2.3/config.h
---- dhcpcd-3.2.3.orig/config.h 2008-02-25 02:28:19.000000000 -0600
-+++ dhcpcd-3.2.3/config.h 2009-03-06 14:55:01.998436374 -0600
-@@ -71,10 +71,10 @@
-
- #define OPENNTPFILE ETCDIR "/ntpd.conf"
-
--#define DEFAULT_SCRIPT ETCDIR "/" PACKAGE ".sh"
-+#define DEFAULT_SCRIPT INFODIR "/" PACKAGE ".sh"
-
--#define STATEDIR "/var"
--#define PIDFILE STATEDIR "/run/" PACKAGE "-%s.pid"
-+#define STATEDIR INFODIR
-+#define PIDFILE INFODIR "/" PACKAGE "-%s.pid"
-
- #ifndef INFODIR
- # define INFODIR "/var/lib/dhcpcd"
diff --git a/source/installer/dhcpcd/dhcpcd.sh.diff b/source/installer/dhcpcd/dhcpcd.sh.diff
deleted file mode 100644
index 290665a9..00000000
--- a/source/installer/dhcpcd/dhcpcd.sh.diff
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/dhcpcd.sh 2009-03-06 19:22:41.247171672 -0600
-+++ b/dhcpcd.sh 2009-03-06 19:24:19.186014526 -0600
-@@ -1,10 +1,10 @@
- #!/bin/sh
- #
--# This is a sample /etc/dhcpcd.sh script.
--# /etc/dhcpcd.sh script is executed by dhcpcd daemon
-+# This is a sample /etc/dhcpc/dhcpcd.sh script.
-+# /etc/dhcpc/dhcpcd.sh script is executed by dhcpcd daemon
- # any time it configures or shuts down interface.
--# The following parameters are passed to dhcpcd.exe script:
--# $1 = HostInfoFilePath, e.g "/var/lib/dhcpcd/dhcpcd-eth0.info"
-+# The following parameters are passed to the dhcpcd.sh script:
-+# $1 = HostInfoFilePath, e.g "/etc/dhcpc/dhcpcd-eth0.info"
- # $2 = "up" if interface has been configured with the same
- # IP address as before reboot;
- # $2 = "down" if interface has been shut down;
diff --git a/source/installer/installer.SlackBuild b/source/installer/installer.SlackBuild
new file mode 100755
index 00000000..955dcdb0
--- /dev/null
+++ b/source/installer/installer.SlackBuild
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+# Copyright 2018 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+INSTALLERVERSION=${INSTALLERVERSION:-"15.0"}
+TMP=${TMP:-/tmp}
+
+# Automatically determine the architecture we're building on:
+if [ -z "$ARCH" ]; then
+ case "$(uname -m)" in
+ i?86) ARCH=i586
+ SLACKROOT=${SLACKROOT:-/root/slackware-current}
+ OUTPUT=${OUTPUT:-$TMP/output-ia32-$(basename $(uname -r) -smp)}
+ ;;
+ x86_64) ARCH=x86_64
+ SLACKROOT=${SLACKROOT:-/root/slackware64-current}
+ OUTPUT=${OUTPUT:-$TMP/output-x86_64-$(uname -r)}
+ ;;
+ arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl
+ SLACKROOT=${SLACKROOT:-/root/slackware-current}
+ OUTPUT=${OUTPUT:-$TMP/output-arm-$(uname -r)}
+ ;;
+ # Unless $ARCH is already set, use uname -m for all other archs:
+ *) ARCH=$(uname -m)
+ SLACKROOT=${SLACKROOT:-/root/slackware-current}
+ OUTPUT=${OUTPUT:-$TMP/output-$(uname -m)-$(uname -r)}
+ ;;
+ esac
+ export ARCH
+fi
+
+NUMJOBS=${NUMJOBS:-" -j7 "}
+
+mkdir -p $OUTPUT
+cd $OUTPUT ; ARCH=${ARCH} INSTALLERVERSION=${INSTALLERVERSION} NUMJOBS=${NUMJOBS} SLACKROOT=${SLACKROOT} sh ${CWD}/build_installer.sh -r -c
+
diff --git a/source/installer/module-blacklist b/source/installer/module-blacklist
new file mode 100644
index 00000000..1e74a60d
--- /dev/null
+++ b/source/installer/module-blacklist
@@ -0,0 +1,118 @@
+svcrdma.ko
+xprtrdma.ko
+3w-9xxx.ko
+3w-xxxx.ko
+BusLogic.ko
+DAC960.ko
+a100u2w.ko
+aacraid.ko
+advansys.ko
+aha152x.ko
+aha1542.ko
+aic79xx.ko
+aic7xxx.ko
+aic7xxx_old.ko
+arcmsr.ko
+atp870u.ko
+c67x00.ko
+cciss.ko
+configfs.ko
+cpqarray.ko
+crc-itu-t.ko
+crc16.ko
+dc395x.ko
+dm-snapshot.ko
+dmx3191d.ko
+dtc.ko
+eata.ko
+ext2.ko
+ext3.ko
+ext4.ko
+fat.ko
+fdomain.ko
+gdth.ko
+gfs2.ko
+hid-a4tech.ko
+hid-chicony.ko
+hid-cypress.ko
+hid-dell.ko
+hid-dummy.ko
+hid-gyration.ko
+hid-monterey.ko
+hid-petalynx.ko
+hid-pl.ko
+hid-samsung.ko
+hid-sony.ko
+hid-sunplus.ko
+hptiop.ko
+i2c-dev.ko
+i2o_block.ko
+i2o_bus.ko
+i2o_core.ko
+i2o_proc.ko
+i2o_scsi.ko
+ide-gd_mod.ko
+in2000.ko
+initio.ko
+ipr.ko
+ips.ko
+isofs.ko
+isp116x-hcd.ko
+isp1760.ko
+jbd.ko
+jbd2.ko
+jfs.ko
+libsas.ko
+libsrp.ko
+lpfc.ko
+mbcache.ko
+megaraid.ko
+megaraid_mbox.ko
+megaraid_mm.ko
+megaraid_sas.ko
+mptbase.ko
+mptfc.ko
+mptsas.ko
+mptscsih.ko
+mptspi.ko
+msdos.ko
+mvsas.ko
+nls_cp437.ko
+nls_iso8859-1.ko
+nls_utf8.ko
+nsp32.ko
+ohci1394.ko
+dv1394.ko
+video1394.ko
+pata_marvell.ko
+pcilynx.ko
+qla1280.ko
+qla2xxx.ko
+qla4xxx.ko
+qlogicfas.ko
+qlogicfas408.ko
+raid_class.ko
+reiserfs.ko
+scsi_dh.ko
+scsi_dh_alua.ko
+scsi_dh_emc.ko
+scsi_dh_hp_sw.ko
+scsi_dh_rdac.ko
+scsi_transport_fc.ko
+scsi_transport_iscsi.ko
+scsi_transport_sas.ko
+scsi_transport_spi.ko
+scsi_transport_srp.ko
+sl811-hcd.ko
+st.ko
+stex.ko
+sx8.ko
+sym53c416.ko
+sym53c8xx.ko
+t128.ko
+tmscsim.ko
+udf.ko
+ultrastor.ko
+vfat.ko
+wd7000.ko
+xfs.ko
diff --git a/source/installer/sources/busybox/busybox-1.28.3.tar.bz2.sign b/source/installer/sources/busybox/busybox-1.28.3.tar.bz2.sign
new file mode 100644
index 00000000..66956cd7
--- /dev/null
+++ b/source/installer/sources/busybox/busybox-1.28.3.tar.bz2.sign
@@ -0,0 +1,18 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+busybox-1.28.3.tar.bz2 released Tue, 03 Apr 2018 22:08:41 +0200
+
+MD5: 82e5ad09ae4a07c266fc179492b51757 busybox-1.28.3.tar.bz2
+SHA1: 64b47e83dccc5db7fe4ca596b28c9b901a136fe3 busybox-1.28.3.tar.bz2
+
+To verify this signature, you can obtain my public key
+from http://busybox.net/~vda/vda_pubkey.gpg
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1
+
+iEYEARECAAYFAlrD30sACgkQR7cMVazJllvYtQCdHpdnl0zwlnpGRwxFcLtHcqst
+DukAn2aKJdCh2jELGH52korVaSh+E9fE
+=FojI
+-----END PGP SIGNATURE-----
diff --git a/source/installer/busybox-dot-config b/source/installer/sources/busybox/busybox-dot-config
index eef8ea26..995a2355 100644
--- a/source/installer/busybox-dot-config
+++ b/source/installer/sources/busybox/busybox-dot-config
@@ -1,55 +1,40 @@
#
# Automatically generated make config: don't edit
-# Busybox version: 1.19.4
-# Sat Apr 7 11:51:30 2012
+# Busybox version: 1.28.3
+# Tue Apr 17 23:06:01 2018
#
CONFIG_HAVE_DOT_CONFIG=y
#
-# Busybox Settings
-#
-
-#
-# General Configuration
+# Settings
#
CONFIG_DESKTOP=y
# CONFIG_EXTRA_COMPAT is not set
+# CONFIG_FEDORA_COMPAT is not set
CONFIG_INCLUDE_SUSv2=y
-# CONFIG_USE_PORTABLE_CODE is not set
-CONFIG_PLATFORM_LINUX=y
-CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
-# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
-# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_LONG_OPTS=y
CONFIG_SHOW_USAGE=y
CONFIG_FEATURE_VERBOSE_USAGE=y
CONFIG_FEATURE_COMPRESS_USAGE=y
-CONFIG_FEATURE_INSTALLER=y
-CONFIG_INSTALL_NO_USR=y
-CONFIG_LOCALE_SUPPORT=y
-CONFIG_UNICODE_SUPPORT=y
-# CONFIG_UNICODE_USING_LOCALE is not set
-# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
-CONFIG_SUBST_WCHAR=63
-CONFIG_LAST_SUPPORTED_WCHAR=767
-# CONFIG_UNICODE_COMBINING_WCHARS is not set
-# CONFIG_UNICODE_WIDE_WCHARS is not set
-# CONFIG_UNICODE_BIDI_SUPPORT is not set
-# CONFIG_UNICODE_NEUTRAL_TABLE is not set
-# CONFIG_UNICODE_PRESERVE_BROKEN is not set
-CONFIG_LONG_OPTS=y
+CONFIG_LFS=y
+# CONFIG_PAM is not set
CONFIG_FEATURE_DEVPTS=y
-# CONFIG_FEATURE_CLEAN_UP is not set
CONFIG_FEATURE_UTMP=y
CONFIG_FEATURE_WTMP=y
CONFIG_FEATURE_PIDFILE=y
+CONFIG_PID_FILE_PATH="/var/run"
+CONFIG_BUSYBOX=y
+CONFIG_FEATURE_INSTALLER=y
+CONFIG_INSTALL_NO_USR=y
CONFIG_FEATURE_SUID=y
CONFIG_FEATURE_SUID_CONFIG=y
CONFIG_FEATURE_SUID_CONFIG_QUIET=y
-# CONFIG_SELINUX is not set
# CONFIG_FEATURE_PREFER_APPLETS is not set
CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_CLEAN_UP is not set
CONFIG_FEATURE_SYSLOG=y
-# CONFIG_FEATURE_HAVE_RPC is not set
+CONFIG_PLATFORM_LINUX=y
#
# Build Options
@@ -58,21 +43,15 @@ CONFIG_FEATURE_SYSLOG=y
# CONFIG_PIE is not set
# CONFIG_NOMMU is not set
# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set
# CONFIG_FEATURE_INDIVIDUAL is not set
# CONFIG_FEATURE_SHARED_BUSYBOX is not set
-CONFIG_LFS=y
CONFIG_CROSS_COMPILER_PREFIX=""
+CONFIG_SYSROOT=""
CONFIG_EXTRA_CFLAGS=""
-
-#
-# Debugging Options
-#
-# CONFIG_DEBUG is not set
-# CONFIG_DEBUG_PESSIMIZE is not set
-# CONFIG_WERROR is not set
-CONFIG_NO_DEBUG_LIB=y
-# CONFIG_DMALLOC is not set
-# CONFIG_EFENCE is not set
+CONFIG_EXTRA_LDFLAGS=""
+CONFIG_EXTRA_LDLIBS=""
+# CONFIG_USE_PORTABLE_CODE is not set
#
# Installation Options ("make install" behavior)
@@ -87,27 +66,55 @@ CONFIG_INSTALL_APPLET_SYMLINKS=y
CONFIG_PREFIX="./_install"
#
-# Busybox Library Tuning
+# Debugging Options
#
-# CONFIG_FEATURE_SYSTEMD is not set
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_DEBUG_SANITIZE is not set
+# CONFIG_UNIT_TEST is not set
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+
+#
+# Library Tuning
+#
+# CONFIG_FEATURE_USE_BSS_TAIL is not set
CONFIG_FEATURE_RTMINMAX=y
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_MD5_SMALL=1
+CONFIG_SHA3_SMALL=1
# CONFIG_FEATURE_FAST_TOP is not set
# CONFIG_FEATURE_ETC_NETWORKS is not set
-CONFIG_FEATURE_USE_TERMIOS=y
CONFIG_FEATURE_EDITING=y
CONFIG_FEATURE_EDITING_MAX_LEN=1024
CONFIG_FEATURE_EDITING_VI=y
CONFIG_FEATURE_EDITING_HISTORY=64
# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
+# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
# CONFIG_FEATURE_REVERSE_SEARCH is not set
CONFIG_FEATURE_TAB_COMPLETION=y
# CONFIG_FEATURE_USERNAME_COMPLETION is not set
CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
+CONFIG_LOCALE_SUPPORT=y
+CONFIG_UNICODE_SUPPORT=y
+# CONFIG_UNICODE_USING_LOCALE is not set
+# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
+CONFIG_SUBST_WCHAR=63
+CONFIG_LAST_SUPPORTED_WCHAR=767
+# CONFIG_UNICODE_COMBINING_WCHARS is not set
+# CONFIG_UNICODE_WIDE_WCHARS is not set
+# CONFIG_UNICODE_BIDI_SUPPORT is not set
+# CONFIG_UNICODE_NEUTRAL_TABLE is not set
+# CONFIG_UNICODE_PRESERVE_BROKEN is not set
CONFIG_FEATURE_NON_POSIX_CP=y
CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
+CONFIG_FEATURE_USE_SENDFILE=y
CONFIG_FEATURE_COPYBUF_KB=4
CONFIG_FEATURE_SKIP_ROOTFS=y
CONFIG_MONOTONIC_SYSCALL=y
@@ -121,85 +128,89 @@ CONFIG_IOCTL_HEX2STR_ERROR=y
#
# Archival Utilities
#
-# CONFIG_FEATURE_SEAMLESS_XZ is not set
-# CONFIG_FEATURE_SEAMLESS_LZMA is not set
+CONFIG_FEATURE_SEAMLESS_XZ=y
+CONFIG_FEATURE_SEAMLESS_LZMA=y
CONFIG_FEATURE_SEAMLESS_BZ2=y
CONFIG_FEATURE_SEAMLESS_GZ=y
CONFIG_FEATURE_SEAMLESS_Z=y
CONFIG_AR=y
CONFIG_FEATURE_AR_LONG_FILENAMES=y
# CONFIG_FEATURE_AR_CREATE is not set
+CONFIG_UNCOMPRESS=y
+CONFIG_GUNZIP=y
+CONFIG_ZCAT=y
+CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y
CONFIG_BUNZIP2=y
+CONFIG_BZCAT=y
+CONFIG_UNLZMA=y
+CONFIG_LZCAT=y
+CONFIG_LZMA=y
+CONFIG_UNXZ=y
+CONFIG_XZCAT=y
+CONFIG_XZ=y
CONFIG_BZIP2=y
+CONFIG_FEATURE_BZIP2_DECOMPRESS=y
CONFIG_CPIO=y
CONFIG_FEATURE_CPIO_O=y
-# CONFIG_FEATURE_CPIO_P is not set
+CONFIG_FEATURE_CPIO_P=y
# CONFIG_DPKG is not set
-# CONFIG_DPKG_DEB is not set
-# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
-# CONFIG_GUNZIP is not set
-# CONFIG_GZIP is not set
-# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
+CONFIG_DPKG_DEB=y
+CONFIG_GZIP=y
+CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
+CONFIG_GZIP_FAST=0
+# CONFIG_FEATURE_GZIP_LEVELS is not set
+CONFIG_FEATURE_GZIP_DECOMPRESS=y
# CONFIG_LZOP is not set
+# CONFIG_UNLZOP is not set
+# CONFIG_LZOPCAT is not set
# CONFIG_LZOP_COMPR_HIGH is not set
-# CONFIG_RPM2CPIO is not set
-# CONFIG_RPM is not set
-# CONFIG_TAR is not set
-# CONFIG_FEATURE_TAR_CREATE is not set
-# CONFIG_FEATURE_TAR_AUTODETECT is not set
-# CONFIG_FEATURE_TAR_FROM is not set
-# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
-# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
-# CONFIG_FEATURE_TAR_GNU_EXTENSIONS is not set
-# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
-# CONFIG_FEATURE_TAR_TO_COMMAND is not set
-# CONFIG_FEATURE_TAR_UNAME_GNAME is not set
-# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set
+CONFIG_RPM=y
+CONFIG_RPM2CPIO=y
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_AUTODETECT=y
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
+CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+CONFIG_FEATURE_TAR_TO_COMMAND=y
+CONFIG_FEATURE_TAR_UNAME_GNAME=y
+CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
# CONFIG_FEATURE_TAR_SELINUX is not set
-# CONFIG_UNCOMPRESS is not set
-# CONFIG_UNLZMA is not set
+CONFIG_UNZIP=y
+CONFIG_FEATURE_UNZIP_CDF=y
+CONFIG_FEATURE_UNZIP_BZIP2=y
+CONFIG_FEATURE_UNZIP_LZMA=y
+CONFIG_FEATURE_UNZIP_XZ=y
# CONFIG_FEATURE_LZMA_FAST is not set
-# CONFIG_LZMA is not set
-# CONFIG_UNXZ is not set
-# CONFIG_XZ is not set
-# CONFIG_UNZIP is not set
#
# Coreutils
#
CONFIG_BASENAME=y
CONFIG_CAT=y
-# CONFIG_DATE is not set
-# CONFIG_FEATURE_DATE_ISOFMT is not set
-# CONFIG_FEATURE_DATE_NANO is not set
-# CONFIG_FEATURE_DATE_COMPAT is not set
-CONFIG_ID=y
-CONFIG_GROUPS=y
-CONFIG_TEST=y
-CONFIG_FEATURE_TEST_64=y
-CONFIG_TOUCH=y
-CONFIG_TR=y
-CONFIG_FEATURE_TR_CLASSES=y
-CONFIG_FEATURE_TR_EQUIV=y
-CONFIG_BASE64=y
-CONFIG_WHO=y
-CONFIG_USERS=y
-CONFIG_CAL=y
-CONFIG_CATV=y
+CONFIG_FEATURE_CATN=y
+CONFIG_FEATURE_CATV=y
CONFIG_CHGRP=y
CONFIG_CHMOD=y
CONFIG_CHOWN=y
CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
CONFIG_CHROOT=y
CONFIG_CKSUM=y
-# CONFIG_COMM is not set
-# CONFIG_CP is not set
-# CONFIG_FEATURE_CP_LONG_OPTIONS is not set
-# CONFIG_CUT is not set
+CONFIG_COMM=y
+CONFIG_CP=y
+CONFIG_FEATURE_CP_LONG_OPTIONS=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+CONFIG_FEATURE_DATE_ISOFMT=y
+CONFIG_FEATURE_DATE_NANO=y
+CONFIG_FEATURE_DATE_COMPAT=y
CONFIG_DD=y
CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
CONFIG_FEATURE_DD_IBS_OBS=y
+CONFIG_FEATURE_DD_STATUS=y
CONFIG_DF=y
CONFIG_FEATURE_DF_FANCY=y
CONFIG_DIRNAME=y
@@ -210,41 +221,56 @@ CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
CONFIG_ECHO=y
CONFIG_FEATURE_FANCY_ECHO=y
CONFIG_ENV=y
-CONFIG_FEATURE_ENV_LONG_OPTIONS=y
-# CONFIG_EXPAND is not set
-# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
+CONFIG_EXPAND=y
+CONFIG_UNEXPAND=y
CONFIG_EXPR=y
CONFIG_EXPR_MATH_SUPPORT_64=y
+CONFIG_FACTOR=y
CONFIG_FALSE=y
-# CONFIG_FOLD is not set
+CONFIG_FOLD=y
CONFIG_FSYNC=y
CONFIG_HEAD=y
CONFIG_FEATURE_FANCY_HEAD=y
-# CONFIG_HOSTID is not set
+CONFIG_HOSTID=y
+CONFIG_ID=y
+CONFIG_GROUPS=y
CONFIG_INSTALL=y
CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
+CONFIG_LINK=y
CONFIG_LN=y
CONFIG_LOGNAME=y
-# CONFIG_LS is not set
-# CONFIG_FEATURE_LS_FILETYPES is not set
-# CONFIG_FEATURE_LS_FOLLOWLINKS is not set
-# CONFIG_FEATURE_LS_RECURSIVE is not set
-# CONFIG_FEATURE_LS_SORTFILES is not set
-# CONFIG_FEATURE_LS_TIMESTAMPS is not set
-# CONFIG_FEATURE_LS_USERNAME is not set
-# CONFIG_FEATURE_LS_COLOR is not set
-# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_WIDTH=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
CONFIG_MD5SUM=y
+CONFIG_SHA1SUM=y
+CONFIG_SHA256SUM=y
+CONFIG_SHA512SUM=y
+CONFIG_SHA3SUM=y
+
+#
+# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
CONFIG_MKDIR=y
-CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
CONFIG_MKFIFO=y
-# CONFIG_MKNOD is not set
+CONFIG_MKNOD=y
+CONFIG_MKTEMP=y
CONFIG_MV=y
-CONFIG_FEATURE_MV_LONG_OPTIONS=y
CONFIG_NICE=y
-# CONFIG_NOHUP is not set
-# CONFIG_OD is not set
-# CONFIG_PRINTENV is not set
+CONFIG_NL=y
+CONFIG_NOHUP=y
+CONFIG_NPROC=y
+CONFIG_OD=y
+CONFIG_PASTE=y
+CONFIG_PRINTENV=y
CONFIG_PRINTF=y
CONFIG_PWD=y
CONFIG_READLINK=y
@@ -252,51 +278,68 @@ CONFIG_FEATURE_READLINK_FOLLOW=y
CONFIG_REALPATH=y
CONFIG_RM=y
CONFIG_RMDIR=y
-# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
-# CONFIG_SEQ is not set
-# CONFIG_SHA1SUM is not set
-# CONFIG_SHA256SUM is not set
-# CONFIG_SHA512SUM is not set
+CONFIG_SEQ=y
+CONFIG_SHRED=y
+CONFIG_SHUF=y
CONFIG_SLEEP=y
CONFIG_FEATURE_FANCY_SLEEP=y
-# CONFIG_FEATURE_FLOAT_SLEEP is not set
-# CONFIG_SORT is not set
-# CONFIG_FEATURE_SORT_BIG is not set
-# CONFIG_SPLIT is not set
-# CONFIG_FEATURE_SPLIT_FANCY is not set
+CONFIG_FEATURE_FLOAT_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+CONFIG_SPLIT=y
+CONFIG_FEATURE_SPLIT_FANCY=y
CONFIG_STAT=y
CONFIG_FEATURE_STAT_FORMAT=y
+CONFIG_FEATURE_STAT_FILESYSTEM=y
CONFIG_STTY=y
CONFIG_SUM=y
CONFIG_SYNC=y
-# CONFIG_TAC is not set
+CONFIG_FEATURE_SYNC_FANCY=y
+CONFIG_TAC=y
CONFIG_TAIL=y
CONFIG_FEATURE_FANCY_TAIL=y
-# CONFIG_TEE is not set
-# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+CONFIG_TEST=y
+CONFIG_TEST1=y
+CONFIG_TEST2=y
+CONFIG_FEATURE_TEST_64=y
+CONFIG_TIMEOUT=y
+CONFIG_TOUCH=y
+CONFIG_FEATURE_TOUCH_NODEREF=y
+CONFIG_FEATURE_TOUCH_SUSV3=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+CONFIG_FEATURE_TR_EQUIV=y
CONFIG_TRUE=y
+CONFIG_TRUNCATE=y
CONFIG_TTY=y
CONFIG_UNAME=y
-# CONFIG_UNEXPAND is not set
-# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
+CONFIG_UNAME_OSNAME="GNU/Linux"
+CONFIG_BB_ARCH=y
CONFIG_UNIQ=y
-# CONFIG_USLEEP is not set
-# CONFIG_UUDECODE is not set
-# CONFIG_UUENCODE is not set
+CONFIG_UNLINK=y
+CONFIG_USLEEP=y
+CONFIG_UUDECODE=y
+CONFIG_BASE64=y
+CONFIG_UUENCODE=y
CONFIG_WC=y
CONFIG_FEATURE_WC_LARGE=y
+CONFIG_WHO=y
+CONFIG_W=y
+CONFIG_USERS=y
CONFIG_WHOAMI=y
CONFIG_YES=y
#
-# Common options for cp and mv
+# Common options
#
-# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+CONFIG_FEATURE_VERBOSE=y
#
-# Common options for ls, more and telnet
+# Common options for cp and mv
#
-CONFIG_FEATURE_AUTOWIDTH=y
+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
#
# Common options for df, du, ls
@@ -304,57 +347,68 @@ CONFIG_FEATURE_AUTOWIDTH=y
CONFIG_FEATURE_HUMAN_READABLE=y
#
-# Common options for md5sum, sha1sum, sha256sum, sha512sum
-#
-CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
-
-#
# Console Utilities
#
CONFIG_CHVT=y
-CONFIG_FGCONSOLE=y
CONFIG_CLEAR=y
-# CONFIG_DEALLOCVT is not set
+CONFIG_DEALLOCVT=y
CONFIG_DUMPKMAP=y
+CONFIG_FGCONSOLE=y
CONFIG_KBD_MODE=y
CONFIG_LOADFONT=y
+CONFIG_SETFONT=y
+CONFIG_FEATURE_SETFONT_TEXTUAL_MAP=y
+CONFIG_DEFAULT_SETFONT_DIR="/usr/share/kbd/consolefonts"
+
+#
+# Common options for loadfont and setfont
+#
+CONFIG_FEATURE_LOADFONT_PSF2=y
+CONFIG_FEATURE_LOADFONT_RAW=y
CONFIG_LOADKMAP=y
-# CONFIG_OPENVT is not set
+CONFIG_OPENVT=y
CONFIG_RESET=y
CONFIG_RESIZE=y
CONFIG_FEATURE_RESIZE_PRINT=y
CONFIG_SETCONSOLE=y
CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS=y
-# CONFIG_SETFONT is not set
-# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
-CONFIG_DEFAULT_SETFONT_DIR=""
CONFIG_SETKEYCODES=y
CONFIG_SETLOGCONS=y
CONFIG_SHOWKEY=y
#
-# Common options for loadfont and setfont
+# Debian Utilities
#
-CONFIG_FEATURE_LOADFONT_PSF2=y
-CONFIG_FEATURE_LOADFONT_RAW=y
+CONFIG_PIPE_PROGRESS=y
+CONFIG_RUN_PARTS=y
+CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
+CONFIG_FEATURE_RUN_PARTS_FANCY=y
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_WHICH=y
#
-# Debian Utilities
+# klibc-utils
#
-CONFIG_MKTEMP=y
-# CONFIG_PIPE_PROGRESS is not set
-# CONFIG_RUN_PARTS is not set
-# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
-# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
-# CONFIG_START_STOP_DAEMON is not set
-# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set
-# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
-CONFIG_WHICH=y
+# CONFIG_MINIPS is not set
+# CONFIG_NUKE is not set
+# CONFIG_RESUME is not set
+# CONFIG_RUN_INIT is not set
#
# Editors
#
-# CONFIG_PATCH is not set
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_LIBM=y
+CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y
+CONFIG_CMP=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
+CONFIG_FEATURE_DIFF_DIR=y
+CONFIG_ED=y
+CONFIG_PATCH=y
+CONFIG_SED=y
CONFIG_VI=y
CONFIG_FEATURE_VI_MAX_LEN=1024
CONFIG_FEATURE_VI_8BIT=y
@@ -369,16 +423,10 @@ CONFIG_FEATURE_VI_SETOPTS=y
CONFIG_FEATURE_VI_SET=y
CONFIG_FEATURE_VI_WIN_RESIZE=y
CONFIG_FEATURE_VI_ASK_TERMINAL=y
-CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
-CONFIG_AWK=y
-CONFIG_FEATURE_AWK_LIBM=y
-# CONFIG_CMP is not set
-CONFIG_DIFF=y
-CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
-CONFIG_FEATURE_DIFF_DIR=y
-# CONFIG_ED is not set
-# CONFIG_SED is not set
-# CONFIG_FEATURE_ALLOW_EXEC is not set
+CONFIG_FEATURE_VI_UNDO=y
+CONFIG_FEATURE_VI_UNDO_QUEUE=y
+CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256
+CONFIG_FEATURE_ALLOW_EXEC=y
#
# Finding Utilities
@@ -394,6 +442,7 @@ CONFIG_FEATURE_FIND_MAXDEPTH=y
CONFIG_FEATURE_FIND_NEWER=y
CONFIG_FEATURE_FIND_INUM=y
CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_EXEC_PLUS=y
CONFIG_FEATURE_FIND_USER=y
CONFIG_FEATURE_FIND_GROUP=y
CONFIG_FEATURE_FIND_NOT=y
@@ -401,20 +450,23 @@ CONFIG_FEATURE_FIND_DEPTH=y
CONFIG_FEATURE_FIND_PAREN=y
CONFIG_FEATURE_FIND_SIZE=y
CONFIG_FEATURE_FIND_PRUNE=y
-# CONFIG_FEATURE_FIND_DELETE is not set
+CONFIG_FEATURE_FIND_DELETE=y
CONFIG_FEATURE_FIND_PATH=y
CONFIG_FEATURE_FIND_REGEX=y
# CONFIG_FEATURE_FIND_CONTEXT is not set
CONFIG_FEATURE_FIND_LINKS=y
-# CONFIG_GREP is not set
-# CONFIG_FEATURE_GREP_EGREP_ALIAS is not set
-# CONFIG_FEATURE_GREP_FGREP_ALIAS is not set
-# CONFIG_FEATURE_GREP_CONTEXT is not set
+CONFIG_GREP=y
+CONFIG_EGREP=y
+CONFIG_FGREP=y
+CONFIG_FEATURE_GREP_CONTEXT=y
CONFIG_XARGS=y
CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y
+CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y
+CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y
#
# Init Utilities
@@ -423,304 +475,344 @@ CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
CONFIG_HALT=y
+CONFIG_POWEROFF=y
+CONFIG_REBOOT=y
# CONFIG_FEATURE_CALL_TELINIT is not set
CONFIG_TELINIT_PATH=""
CONFIG_INIT=y
+CONFIG_LINUXRC=y
CONFIG_FEATURE_USE_INITTAB=y
CONFIG_FEATURE_KILL_REMOVED=y
CONFIG_FEATURE_KILL_DELAY=10
CONFIG_FEATURE_INIT_SCTTY=y
CONFIG_FEATURE_INIT_SYSLOG=y
-CONFIG_FEATURE_EXTRA_QUIET=y
+CONFIG_FEATURE_INIT_QUIET=y
# CONFIG_FEATURE_INIT_COREDUMPS is not set
-# CONFIG_FEATURE_INITRD is not set
CONFIG_INIT_TERMINAL_TYPE="linux"
-CONFIG_MESG=y
-CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
+CONFIG_FEATURE_INIT_MODIFY_CMDLINE=y
#
# Login/Password Management Utilities
#
-CONFIG_ADD_SHELL=y
-CONFIG_REMOVE_SHELL=y
CONFIG_FEATURE_SHADOWPASSWDS=y
# CONFIG_USE_BB_PWD_GRP is not set
# CONFIG_USE_BB_SHADOW is not set
CONFIG_USE_BB_CRYPT=y
-# CONFIG_USE_BB_CRYPT_SHA is not set
+CONFIG_USE_BB_CRYPT_SHA=y
+CONFIG_ADD_SHELL=y
+CONFIG_REMOVE_SHELL=y
+CONFIG_ADDGROUP=y
+CONFIG_FEATURE_ADDUSER_TO_GROUP=y
CONFIG_ADDUSER=y
-# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
CONFIG_FEATURE_CHECK_NAMES=y
+CONFIG_LAST_ID=60000
CONFIG_FIRST_SYSTEM_ID=100
CONFIG_LAST_SYSTEM_ID=9999
-CONFIG_ADDGROUP=y
-CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS=y
-CONFIG_FEATURE_ADDUSER_TO_GROUP=y
+CONFIG_CHPASSWD=y
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="sha256"
+CONFIG_CRYPTPW=y
+CONFIG_MKPASSWD=y
CONFIG_DELUSER=y
CONFIG_DELGROUP=y
CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
-# CONFIG_GETTY is not set
-# CONFIG_LOGIN is not set
-# CONFIG_PAM is not set
-# CONFIG_LOGIN_SCRIPTS is not set
-# CONFIG_FEATURE_NOLOGIN is not set
-# CONFIG_FEATURE_SECURETTY is not set
+CONFIG_GETTY=y
+CONFIG_LOGIN=y
+CONFIG_LOGIN_SESSION_AS_CHILD=y
+CONFIG_LOGIN_SCRIPTS=y
+CONFIG_FEATURE_NOLOGIN=y
+CONFIG_FEATURE_SECURETTY=y
CONFIG_PASSWD=y
CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
-# CONFIG_CRYPTPW is not set
-# CONFIG_CHPASSWD is not set
CONFIG_SU=y
CONFIG_FEATURE_SU_SYSLOG=y
CONFIG_FEATURE_SU_CHECKS_SHELLS=y
-# CONFIG_SULOGIN is not set
-# CONFIG_VLOCK is not set
+# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set
+CONFIG_SULOGIN=y
+CONFIG_VLOCK=y
#
# Linux Ext2 FS Progs
#
-# CONFIG_CHATTR is not set
-# CONFIG_FSCK is not set
-# CONFIG_LSATTR is not set
-# CONFIG_TUNE2FS is not set
+CONFIG_CHATTR=y
+CONFIG_FSCK=y
+CONFIG_LSATTR=y
+CONFIG_TUNE2FS=y
#
# Linux Module Utilities
#
-CONFIG_MODINFO=y
# CONFIG_MODPROBE_SMALL is not set
-# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
-# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
-# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+CONFIG_DEPMOD=y
+CONFIG_INSMOD=y
+CONFIG_LSMOD=y
+CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
+CONFIG_MODINFO=y
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
+CONFIG_RMMOD=y
#
# Options common to multiple modutils
#
+CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS=y
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
# CONFIG_FEATURE_2_4_MODULES is not set
-# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
CONFIG_DEFAULT_MODULES_DIR=""
CONFIG_DEFAULT_DEPMOD_FILE=""
#
# Linux System Utilities
#
+CONFIG_ACPID=y
+CONFIG_FEATURE_ACPID_COMPAT=y
+CONFIG_BLKDISCARD=y
+CONFIG_BLKID=y
+CONFIG_FEATURE_BLKID_TYPE=y
CONFIG_BLOCKDEV=y
-# CONFIG_REV is not set
-# CONFIG_ACPID is not set
-# CONFIG_FEATURE_ACPID_COMPAT is not set
-# CONFIG_BLKID is not set
-# CONFIG_FEATURE_BLKID_TYPE is not set
+CONFIG_CAL=y
+CONFIG_CHRT=y
CONFIG_DMESG=y
CONFIG_FEATURE_DMESG_PRETTY=y
+CONFIG_EJECT=y
+CONFIG_FEATURE_EJECT_SCSI=y
+CONFIG_FALLOCATE=y
+CONFIG_FATATTR=y
CONFIG_FBSET=y
CONFIG_FEATURE_FBSET_FANCY=y
CONFIG_FEATURE_FBSET_READMODE=y
-CONFIG_FDFLUSH=y
CONFIG_FDFORMAT=y
-# CONFIG_FDISK is not set
+CONFIG_FDISK=y
# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
-# CONFIG_FEATURE_FDISK_WRITABLE is not set
+CONFIG_FEATURE_FDISK_WRITABLE=y
# CONFIG_FEATURE_AIX_LABEL is not set
# CONFIG_FEATURE_SGI_LABEL is not set
# CONFIG_FEATURE_SUN_LABEL is not set
# CONFIG_FEATURE_OSF_LABEL is not set
-# CONFIG_FEATURE_GPT_LABEL is not set
-# CONFIG_FEATURE_FDISK_ADVANCED is not set
-# CONFIG_FINDFS is not set
-# CONFIG_FLOCK is not set
-# CONFIG_FREERAMDISK is not set
+CONFIG_FEATURE_GPT_LABEL=y
+CONFIG_FEATURE_FDISK_ADVANCED=y
+CONFIG_FINDFS=y
+CONFIG_FLOCK=y
+CONFIG_FDFLUSH=y
+CONFIG_FREERAMDISK=y
# CONFIG_FSCK_MINIX is not set
-# CONFIG_MKFS_EXT2 is not set
-# CONFIG_MKFS_MINIX is not set
-# CONFIG_FEATURE_MINIX2 is not set
-# CONFIG_MKFS_REISER is not set
-# CONFIG_MKFS_VFAT is not set
-# CONFIG_GETOPT is not set
-# CONFIG_FEATURE_GETOPT_LONG is not set
+CONFIG_FSFREEZE=y
+CONFIG_FSTRIM=y
+CONFIG_GETOPT=y
+CONFIG_FEATURE_GETOPT_LONG=y
CONFIG_HEXDUMP=y
-# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
+CONFIG_FEATURE_HEXDUMP_REVERSE=y
# CONFIG_HD is not set
+CONFIG_XXD=y
CONFIG_HWCLOCK=y
-CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
-# CONFIG_IPCRM is not set
-# CONFIG_IPCS is not set
+CONFIG_IONICE=y
+CONFIG_IPCRM=y
+CONFIG_IPCS=y
+CONFIG_LAST=y
+CONFIG_FEATURE_LAST_FANCY=y
CONFIG_LOSETUP=y
-# CONFIG_LSPCI is not set
-# CONFIG_LSUSB is not set
-# CONFIG_MDEV is not set
-# CONFIG_FEATURE_MDEV_CONF is not set
-# CONFIG_FEATURE_MDEV_RENAME is not set
-# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
-# CONFIG_FEATURE_MDEV_EXEC is not set
-# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
-# CONFIG_MKSWAP is not set
-# CONFIG_FEATURE_MKSWAP_UUID is not set
+CONFIG_LSPCI=y
+CONFIG_LSUSB=y
+CONFIG_MDEV=y
+CONFIG_FEATURE_MDEV_CONF=y
+CONFIG_FEATURE_MDEV_RENAME=y
+CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
+CONFIG_FEATURE_MDEV_EXEC=y
+CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
+CONFIG_MESG=y
+CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
+CONFIG_MKE2FS=y
+CONFIG_MKFS_EXT2=y
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+CONFIG_MKFS_REISER=y
+CONFIG_MKDOSFS=y
+CONFIG_MKFS_VFAT=y
+CONFIG_MKSWAP=y
+CONFIG_FEATURE_MKSWAP_UUID=y
CONFIG_MORE=y
-# CONFIG_MOUNT is not set
-# CONFIG_FEATURE_MOUNT_FAKE is not set
-# CONFIG_FEATURE_MOUNT_VERBOSE is not set
-# CONFIG_FEATURE_MOUNT_HELPERS is not set
-# CONFIG_FEATURE_MOUNT_LABEL is not set
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_FAKE=y
+CONFIG_FEATURE_MOUNT_VERBOSE=y
+CONFIG_FEATURE_MOUNT_HELPERS=y
+CONFIG_FEATURE_MOUNT_LABEL=y
# CONFIG_FEATURE_MOUNT_NFS is not set
-# CONFIG_FEATURE_MOUNT_CIFS is not set
-# CONFIG_FEATURE_MOUNT_FLAGS is not set
-# CONFIG_FEATURE_MOUNT_FSTAB is not set
+CONFIG_FEATURE_MOUNT_CIFS=y
+CONFIG_FEATURE_MOUNT_FLAGS=y
+CONFIG_FEATURE_MOUNT_FSTAB=y
+CONFIG_FEATURE_MOUNT_OTHERTAB=y
+CONFIG_MOUNTPOINT=y
+CONFIG_NSENTER=y
CONFIG_PIVOT_ROOT=y
CONFIG_RDATE=y
CONFIG_RDEV=y
# CONFIG_READPROFILE is not set
-# CONFIG_RTCWAKE is not set
-# CONFIG_SCRIPT is not set
-# CONFIG_SCRIPTREPLAY is not set
-# CONFIG_SETARCH is not set
-CONFIG_SWAPONOFF=y
+CONFIG_RENICE=y
+CONFIG_REV=y
+CONFIG_RTCWAKE=y
+CONFIG_SCRIPT=y
+CONFIG_SCRIPTREPLAY=y
+CONFIG_SETARCH=y
+CONFIG_LINUX32=y
+CONFIG_LINUX64=y
+CONFIG_SETPRIV=y
+CONFIG_FEATURE_SETPRIV_DUMP=y
+CONFIG_FEATURE_SETPRIV_CAPABILITIES=y
+CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES=y
+CONFIG_SETSID=y
+CONFIG_SWAPON=y
+CONFIG_FEATURE_SWAPON_DISCARD=y
CONFIG_FEATURE_SWAPON_PRI=y
+CONFIG_SWAPOFF=y
+CONFIG_FEATURE_SWAPONOFF_LABEL=y
CONFIG_SWITCH_ROOT=y
-# CONFIG_UMOUNT is not set
-# CONFIG_FEATURE_UMOUNT_ALL is not set
-# CONFIG_FEATURE_MOUNT_LOOP is not set
-# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
+CONFIG_TASKSET=y
+CONFIG_FEATURE_TASKSET_FANCY=y
+CONFIG_UEVENT=y
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_UMOUNT_ALL=y
+CONFIG_UNSHARE=y
+CONFIG_WALL=y
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
# CONFIG_FEATURE_MTAB_SUPPORT is not set
-# CONFIG_VOLUMEID is not set
-# CONFIG_FEATURE_VOLUMEID_EXT is not set
-# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
-# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
-# CONFIG_FEATURE_VOLUMEID_FAT is not set
-# CONFIG_FEATURE_VOLUMEID_HFS is not set
-# CONFIG_FEATURE_VOLUMEID_JFS is not set
-# CONFIG_FEATURE_VOLUMEID_XFS is not set
-# CONFIG_FEATURE_VOLUMEID_NTFS is not set
-# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
-# CONFIG_FEATURE_VOLUMEID_UDF is not set
-# CONFIG_FEATURE_VOLUMEID_LUKS is not set
-# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
-# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
-# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
-# CONFIG_FEATURE_VOLUMEID_SYSV is not set
-# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
-# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+CONFIG_VOLUMEID=y
+
+#
+# Filesystem/Volume identification
+#
+CONFIG_FEATURE_VOLUMEID_BCACHE=y
+CONFIG_FEATURE_VOLUMEID_BTRFS=y
+CONFIG_FEATURE_VOLUMEID_CRAMFS=y
+CONFIG_FEATURE_VOLUMEID_EXFAT=y
+CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_F2FS=y
+CONFIG_FEATURE_VOLUMEID_FAT=y
+CONFIG_FEATURE_VOLUMEID_HFS=y
+CONFIG_FEATURE_VOLUMEID_ISO9660=y
+CONFIG_FEATURE_VOLUMEID_JFS=y
+CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
+CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
+CONFIG_FEATURE_VOLUMEID_LUKS=y
+CONFIG_FEATURE_VOLUMEID_MINIX=y
+CONFIG_FEATURE_VOLUMEID_NILFS=y
+CONFIG_FEATURE_VOLUMEID_NTFS=y
+CONFIG_FEATURE_VOLUMEID_OCFS2=y
+CONFIG_FEATURE_VOLUMEID_REISERFS=y
+CONFIG_FEATURE_VOLUMEID_ROMFS=y
+CONFIG_FEATURE_VOLUMEID_SQUASHFS=y
+CONFIG_FEATURE_VOLUMEID_SYSV=y
+CONFIG_FEATURE_VOLUMEID_UBIFS=y
+CONFIG_FEATURE_VOLUMEID_UDF=y
+CONFIG_FEATURE_VOLUMEID_XFS=y
#
# Miscellaneous Utilities
#
-# CONFIG_CONSPY is not set
+# CONFIG_ADJTIMEX is not set
+CONFIG_BBCONFIG=y
+CONFIG_FEATURE_COMPRESS_BBCONFIG=y
+CONFIG_BEEP=y
+CONFIG_FEATURE_BEEP_FREQ=4000
+CONFIG_FEATURE_BEEP_LENGTH_MS=30
+CONFIG_CHAT=y
+CONFIG_FEATURE_CHAT_NOFAIL=y
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
+CONFIG_FEATURE_CHAT_IMPLICIT_CR=y
+CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y
+CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
+CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
+CONFIG_FEATURE_CHAT_CLR_ABORT=y
+CONFIG_CONSPY=y
+CONFIG_CROND=y
+CONFIG_FEATURE_CROND_D=y
+CONFIG_FEATURE_CROND_CALL_SENDMAIL=y
+CONFIG_FEATURE_CROND_SPECIAL_TIMES=y
+CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
+CONFIG_CRONTAB=y
+CONFIG_DC=y
+CONFIG_FEATURE_DC_LIBM=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+CONFIG_DEVMEM=y
+CONFIG_FBSPLASH=y
+CONFIG_FLASH_ERASEALL=y
+CONFIG_FLASH_LOCK=y
+CONFIG_FLASH_UNLOCK=y
+CONFIG_FLASHCP=y
+CONFIG_HDPARM=y
+CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
+CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y
+CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y
+CONFIG_HEXEDIT=y
+CONFIG_I2CGET=y
+CONFIG_I2CSET=y
+CONFIG_I2CDUMP=y
+CONFIG_I2CDETECT=y
+CONFIG_INOTIFYD=y
CONFIG_LESS=y
CONFIG_FEATURE_LESS_MAXLINES=9999999
CONFIG_FEATURE_LESS_BRACKETS=y
CONFIG_FEATURE_LESS_FLAGS=y
+CONFIG_FEATURE_LESS_TRUNCATE=y
CONFIG_FEATURE_LESS_MARKS=y
CONFIG_FEATURE_LESS_REGEXP=y
# CONFIG_FEATURE_LESS_WINCH is not set
# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set
# CONFIG_FEATURE_LESS_DASHCMD is not set
# CONFIG_FEATURE_LESS_LINENUMS is not set
-# CONFIG_NANDWRITE is not set
-# CONFIG_NANDDUMP is not set
-CONFIG_SETSERIAL=y
-# CONFIG_UBIATTACH is not set
-# CONFIG_UBIDETACH is not set
-CONFIG_UBIMKVOL=y
-CONFIG_UBIRMVOL=y
-CONFIG_UBIRSVOL=y
-CONFIG_UBIUPDATEVOL=y
-# CONFIG_ADJTIMEX is not set
-CONFIG_BBCONFIG=y
-CONFIG_FEATURE_COMPRESS_BBCONFIG=y
-# CONFIG_BEEP is not set
-CONFIG_FEATURE_BEEP_FREQ=0
-CONFIG_FEATURE_BEEP_LENGTH_MS=0
-# CONFIG_CHAT is not set
-# CONFIG_FEATURE_CHAT_NOFAIL is not set
-# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
-# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
-# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
-# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
-# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
-# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
-# CONFIG_CHRT is not set
-# CONFIG_CROND is not set
-# CONFIG_FEATURE_CROND_D is not set
-# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
-CONFIG_FEATURE_CROND_DIR=""
-# CONFIG_CRONTAB is not set
-# CONFIG_DC is not set
-# CONFIG_FEATURE_DC_LIBM is not set
-# CONFIG_DEVFSD is not set
-# CONFIG_DEVFSD_MODLOAD is not set
-# CONFIG_DEVFSD_FG_NP is not set
-# CONFIG_DEVFSD_VERBOSE is not set
-# CONFIG_FEATURE_DEVFS is not set
-# CONFIG_DEVMEM is not set
-CONFIG_EJECT=y
-CONFIG_FEATURE_EJECT_SCSI=y
-# CONFIG_FBSPLASH is not set
-# CONFIG_FLASHCP is not set
-# CONFIG_FLASH_LOCK is not set
-# CONFIG_FLASH_UNLOCK is not set
-# CONFIG_FLASH_ERASEALL is not set
-CONFIG_IONICE=y
-# CONFIG_INOTIFYD is not set
-# CONFIG_LAST is not set
-# CONFIG_FEATURE_LAST_SMALL is not set
-# CONFIG_FEATURE_LAST_FANCY is not set
-# CONFIG_HDPARM is not set
-# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
-# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
-# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
-# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
-# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
-# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
-# CONFIG_MAKEDEVS is not set
+CONFIG_LSSCSI=y
+CONFIG_MAKEDEVS=y
# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
-# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
-# CONFIG_MAN is not set
-# CONFIG_MICROCOM is not set
-# CONFIG_MOUNTPOINT is not set
+CONFIG_FEATURE_MAKEDEVS_TABLE=y
+CONFIG_MAN=y
+CONFIG_MICROCOM=y
CONFIG_MT=y
+CONFIG_NANDWRITE=y
+CONFIG_NANDDUMP=y
+CONFIG_PARTPROBE=y
CONFIG_RAIDAUTORUN=y
-# CONFIG_READAHEAD is not set
-# CONFIG_RFKILL is not set
+CONFIG_READAHEAD=y
+CONFIG_RFKILL=y
CONFIG_RUNLEVEL=y
-# CONFIG_RX is not set
-# CONFIG_SETSID is not set
-# CONFIG_STRINGS is not set
-# CONFIG_TASKSET is not set
-# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_RX=y
+CONFIG_SETFATTR=y
+CONFIG_SETSERIAL=y
+CONFIG_STRINGS=y
CONFIG_TIME=y
-CONFIG_TIMEOUT=y
CONFIG_TTYSIZE=y
-# CONFIG_VOLNAME is not set
-CONFIG_WALL=y
-# CONFIG_WATCHDOG is not set
+CONFIG_UBIATTACH=y
+CONFIG_UBIDETACH=y
+CONFIG_UBIMKVOL=y
+CONFIG_UBIRMVOL=y
+CONFIG_UBIRSVOL=y
+CONFIG_UBIUPDATEVOL=y
+CONFIG_UBIRENAME=y
+CONFIG_VOLNAME=y
+CONFIG_WATCHDOG=y
#
# Networking Utilities
#
-CONFIG_NAMEIF=y
-# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
-CONFIG_NBDCLIENT=y
-CONFIG_NC=y
-CONFIG_NC_SERVER=y
-CONFIG_NC_EXTRA=y
-# CONFIG_NC_110_COMPAT is not set
-CONFIG_PING=y
-CONFIG_PING6=y
-CONFIG_FEATURE_FANCY_PING=y
-CONFIG_WHOIS=y
CONFIG_FEATURE_IPV6=y
# CONFIG_FEATURE_UNIX_LOCAL is not set
CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
@@ -730,19 +822,19 @@ CONFIG_ARPING=y
CONFIG_BRCTL=y
# CONFIG_FEATURE_BRCTL_FANCY is not set
# CONFIG_FEATURE_BRCTL_SHOW is not set
-# CONFIG_DNSD is not set
+CONFIG_DNSD=y
CONFIG_ETHER_WAKE=y
-# CONFIG_FAKEIDENTD is not set
-# CONFIG_FTPD is not set
-# CONFIG_FEATURE_FTP_WRITE is not set
-# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
+CONFIG_FTPD=y
+CONFIG_FEATURE_FTPD_WRITE=y
+CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y
+CONFIG_FEATURE_FTPD_AUTHENTICATION=y
CONFIG_FTPGET=y
CONFIG_FTPPUT=y
CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y
CONFIG_HOSTNAME=y
+CONFIG_DNSDOMAINNAME=y
CONFIG_HTTPD=y
CONFIG_FEATURE_HTTPD_RANGES=y
-CONFIG_FEATURE_HTTPD_USE_SENDFILE=y
CONFIG_FEATURE_HTTPD_SETUID=y
CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
CONFIG_FEATURE_HTTPD_AUTH_MD5=y
@@ -760,57 +852,75 @@ CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
CONFIG_FEATURE_IFCONFIG_HW=y
CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
CONFIG_IFENSLAVE=y
-# CONFIG_IFPLUGD is not set
-CONFIG_IFUPDOWN=y
+CONFIG_IFPLUGD=y
+CONFIG_IFUP=y
+CONFIG_IFDOWN=y
CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
-# CONFIG_FEATURE_IFUPDOWN_IP is not set
-# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set
-CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IP=y
CONFIG_FEATURE_IFUPDOWN_IPV4=y
CONFIG_FEATURE_IFUPDOWN_IPV6=y
CONFIG_FEATURE_IFUPDOWN_MAPPING=y
CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y
-# CONFIG_INETD is not set
-# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
-# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
-# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
-# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
-# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
-# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_INETD=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y
+CONFIG_FEATURE_INETD_RPC=y
CONFIG_IP=y
+CONFIG_IPADDR=y
+CONFIG_IPLINK=y
+CONFIG_IPROUTE=y
+CONFIG_IPTUNNEL=y
+CONFIG_IPRULE=y
+CONFIG_IPNEIGH=y
CONFIG_FEATURE_IP_ADDRESS=y
CONFIG_FEATURE_IP_LINK=y
CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2"
CONFIG_FEATURE_IP_TUNNEL=y
CONFIG_FEATURE_IP_RULE=y
-CONFIG_FEATURE_IP_SHORT_FORMS=y
+CONFIG_FEATURE_IP_NEIGH=y
# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
-CONFIG_IPADDR=y
-CONFIG_IPLINK=y
-CONFIG_IPROUTE=y
-CONFIG_IPTUNNEL=y
-CONFIG_IPRULE=y
CONFIG_IPCALC=y
-CONFIG_FEATURE_IPCALC_FANCY=y
CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y
+CONFIG_FEATURE_IPCALC_FANCY=y
+CONFIG_FAKEIDENTD=y
+CONFIG_NAMEIF=y
+# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
+CONFIG_NBDCLIENT=y
+CONFIG_NC=y
+# CONFIG_NETCAT is not set
+CONFIG_NC_SERVER=y
+CONFIG_NC_EXTRA=y
+# CONFIG_NC_110_COMPAT is not set
CONFIG_NETSTAT=y
-# CONFIG_FEATURE_NETSTAT_WIDE is not set
+CONFIG_FEATURE_NETSTAT_WIDE=y
CONFIG_FEATURE_NETSTAT_PRG=y
CONFIG_NSLOOKUP=y
-# CONFIG_NTPD is not set
-# CONFIG_FEATURE_NTPD_SERVER is not set
+CONFIG_NTPD=y
+CONFIG_FEATURE_NTPD_SERVER=y
+CONFIG_FEATURE_NTPD_CONF=y
+CONFIG_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING=y
CONFIG_PSCAN=y
CONFIG_ROUTE=y
CONFIG_SLATTACH=y
+CONFIG_SSL_CLIENT=y
CONFIG_TCPSVD=y
+CONFIG_UDPSVD=y
CONFIG_TELNET=y
CONFIG_FEATURE_TELNET_TTYPE=y
CONFIG_FEATURE_TELNET_AUTOLOGIN=y
-# CONFIG_TELNETD is not set
-# CONFIG_FEATURE_TELNETD_STANDALONE is not set
-# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
+CONFIG_FEATURE_TELNET_WIDTH=y
+CONFIG_TELNETD=y
+CONFIG_FEATURE_TELNETD_STANDALONE=y
+CONFIG_FEATURE_TELNETD_INETD_WAIT=y
CONFIG_TFTP=y
-# CONFIG_TFTPD is not set
+CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
+CONFIG_TFTPD=y
#
# Common options for tftp/tftpd
@@ -818,38 +928,48 @@ CONFIG_TFTP=y
CONFIG_FEATURE_TFTP_GET=y
CONFIG_FEATURE_TFTP_PUT=y
CONFIG_FEATURE_TFTP_BLOCKSIZE=y
-CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
# CONFIG_TFTP_DEBUG is not set
+CONFIG_TLS=y
CONFIG_TRACEROUTE=y
CONFIG_TRACEROUTE6=y
# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
-# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
-# CONFIG_TUNCTL is not set
-# CONFIG_FEATURE_TUNCTL_UG is not set
-# CONFIG_UDHCPD is not set
-# CONFIG_DHCPRELAY is not set
-# CONFIG_DUMPLEASES is not set
-# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
-# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
-CONFIG_DHCPD_LEASES_FILE=""
-# CONFIG_UDHCPC is not set
-# CONFIG_FEATURE_UDHCPC_ARPING is not set
-# CONFIG_FEATURE_UDHCP_PORT is not set
-CONFIG_UDHCP_DEBUG=0
-# CONFIG_FEATURE_UDHCP_RFC3397 is not set
-# CONFIG_FEATURE_UDHCP_8021Q is not set
-CONFIG_UDHCPC_DEFAULT_SCRIPT=""
-CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0
-CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=""
-CONFIG_UDPSVD=y
+CONFIG_TUNCTL=y
+CONFIG_FEATURE_TUNCTL_UG=y
CONFIG_VCONFIG=y
CONFIG_WGET=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
CONFIG_FEATURE_WGET_STATUSBAR=y
CONFIG_FEATURE_WGET_AUTHENTICATION=y
-CONFIG_FEATURE_WGET_LONG_OPTIONS=y
CONFIG_FEATURE_WGET_TIMEOUT=y
+CONFIG_FEATURE_WGET_HTTPS=y
+CONFIG_FEATURE_WGET_OPENSSL=y
+CONFIG_WHOIS=y
CONFIG_ZCIP=y
+CONFIG_UDHCPD=y
+# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
+CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY=y
+CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases"
+CONFIG_DUMPLEASES=y
+CONFIG_DHCPRELAY=y
+CONFIG_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y
+CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+CONFIG_UDHCPC6=y
+CONFIG_FEATURE_UDHCPC6_RFC3646=y
+CONFIG_FEATURE_UDHCPC6_RFC4704=y
+CONFIG_FEATURE_UDHCPC6_RFC4833=y
+
+#
+# Common options for DHCP applets
+#
+# CONFIG_FEATURE_UDHCP_PORT is not set
+CONFIG_UDHCP_DEBUG=9
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+CONFIG_FEATURE_UDHCP_RFC3397=y
+CONFIG_FEATURE_UDHCP_8021Q=y
+CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=""
#
# Print Utilities
@@ -862,105 +982,114 @@ CONFIG_ZCIP=y
# Mail Utilities
#
# CONFIG_MAKEMIME is not set
-CONFIG_FEATURE_MIME_CHARSET=""
# CONFIG_POPMAILDIR is not set
# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
# CONFIG_REFORMIME is not set
# CONFIG_FEATURE_REFORMIME_COMPAT is not set
# CONFIG_SENDMAIL is not set
+CONFIG_FEATURE_MIME_CHARSET=""
#
# Process Utilities
#
-CONFIG_IOSTAT=y
-CONFIG_MPSTAT=y
-CONFIG_NMETER=y
-CONFIG_PMAP=y
-CONFIG_POWERTOP=y
-CONFIG_PSTREE=y
-CONFIG_PWDX=y
-# CONFIG_SMEMCAP is not set
-CONFIG_UPTIME=y
-CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y
CONFIG_FREE=y
CONFIG_FUSER=y
+CONFIG_IOSTAT=y
CONFIG_KILL=y
CONFIG_KILLALL=y
CONFIG_KILLALL5=y
+CONFIG_LSOF=y
+CONFIG_MPSTAT=y
+CONFIG_NMETER=y
CONFIG_PGREP=y
+CONFIG_PKILL=y
CONFIG_PIDOF=y
CONFIG_FEATURE_PIDOF_SINGLE=y
CONFIG_FEATURE_PIDOF_OMIT=y
-CONFIG_PKILL=y
+CONFIG_PMAP=y
+CONFIG_POWERTOP=y
+CONFIG_FEATURE_POWERTOP_INTERACTIVE=y
CONFIG_PS=y
-CONFIG_FEATURE_PS_WIDE=y
+# CONFIG_FEATURE_PS_WIDE is not set
+# CONFIG_FEATURE_PS_LONG is not set
CONFIG_FEATURE_PS_TIME=y
-# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
-CONFIG_RENICE=y
+CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
+CONFIG_PSTREE=y
+CONFIG_PWDX=y
+# CONFIG_SMEMCAP is not set
CONFIG_BB_SYSCTL=y
CONFIG_TOP=y
+CONFIG_FEATURE_TOP_INTERACTIVE=y
CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
-# CONFIG_FEATURE_TOP_SMP_CPU is not set
+CONFIG_FEATURE_TOP_SMP_CPU=y
CONFIG_FEATURE_TOP_DECIMALS=y
-# CONFIG_FEATURE_TOP_SMP_PROCESS is not set
+CONFIG_FEATURE_TOP_SMP_PROCESS=y
CONFIG_FEATURE_TOPMEM=y
-CONFIG_FEATURE_SHOW_THREADS=y
+CONFIG_UPTIME=y
+CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y
CONFIG_WATCH=y
+CONFIG_FEATURE_SHOW_THREADS=y
#
# Runit Utilities
#
+# CONFIG_CHPST is not set
+# CONFIG_SETUIDGID is not set
+# CONFIG_ENVUIDGID is not set
+# CONFIG_ENVDIR is not set
+# CONFIG_SOFTLIMIT is not set
# CONFIG_RUNSV is not set
# CONFIG_RUNSVDIR is not set
# CONFIG_FEATURE_RUNSVDIR_LOG is not set
# CONFIG_SV is not set
CONFIG_SV_DEFAULT_SERVICE_DIR=""
+# CONFIG_SVC is not set
# CONFIG_SVLOGD is not set
-# CONFIG_CHPST is not set
-# CONFIG_SETUIDGID is not set
-# CONFIG_ENVUIDGID is not set
-# CONFIG_ENVDIR is not set
-# CONFIG_SOFTLIMIT is not set
# CONFIG_CHCON is not set
-# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
# CONFIG_GETENFORCE is not set
# CONFIG_GETSEBOOL is not set
# CONFIG_LOAD_POLICY is not set
# CONFIG_MATCHPATHCON is not set
-# CONFIG_RESTORECON is not set
# CONFIG_RUNCON is not set
-# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
# CONFIG_SELINUXENABLED is not set
+# CONFIG_SESTATUS is not set
# CONFIG_SETENFORCE is not set
# CONFIG_SETFILES is not set
# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_RESTORECON is not set
# CONFIG_SETSEBOOL is not set
-# CONFIG_SESTATUS is not set
#
# Shells
#
-# CONFIG_ASH is not set
-# CONFIG_ASH_BASH_COMPAT is not set
-# CONFIG_ASH_IDLE_TIMEOUT is not set
-# CONFIG_ASH_JOB_CONTROL is not set
-# CONFIG_ASH_ALIAS is not set
-# CONFIG_ASH_GETOPTS is not set
-# CONFIG_ASH_BUILTIN_ECHO is not set
-# CONFIG_ASH_BUILTIN_PRINTF is not set
-# CONFIG_ASH_BUILTIN_TEST is not set
-# CONFIG_ASH_CMDCMD is not set
-# CONFIG_ASH_MAIL is not set
-# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set
-# CONFIG_ASH_RANDOM_SUPPORT is not set
-# CONFIG_ASH_EXPAND_PRMT is not set
+CONFIG_SH_IS_ASH=y
+# CONFIG_SH_IS_HUSH is not set
+# CONFIG_SH_IS_NONE is not set
+CONFIG_BASH_IS_ASH=y
+# CONFIG_BASH_IS_HUSH is not set
+# CONFIG_BASH_IS_NONE is not set
+CONFIG_ASH=y
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+CONFIG_ASH_INTERNAL_GLOB=y
+CONFIG_ASH_BASH_COMPAT=y
+CONFIG_ASH_JOB_CONTROL=y
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_RANDOM_SUPPORT=y
+CONFIG_ASH_EXPAND_PRMT=y
+CONFIG_ASH_IDLE_TIMEOUT=y
+CONFIG_ASH_MAIL=y
+CONFIG_ASH_ECHO=y
+CONFIG_ASH_PRINTF=y
+CONFIG_ASH_TEST=y
+CONFIG_ASH_HELP=y
+CONFIG_ASH_GETOPTS=y
+CONFIG_ASH_CMDCMD=y
CONFIG_CTTYHACK=y
# CONFIG_HUSH is not set
# CONFIG_HUSH_BASH_COMPAT is not set
# CONFIG_HUSH_BRACE_EXPANSION is not set
-# CONFIG_HUSH_HELP is not set
# CONFIG_HUSH_INTERACTIVE is not set
# CONFIG_HUSH_SAVEHISTORY is not set
# CONFIG_HUSH_JOB is not set
@@ -971,25 +1100,50 @@ CONFIG_CTTYHACK=y
# CONFIG_HUSH_FUNCTIONS is not set
# CONFIG_HUSH_LOCAL is not set
# CONFIG_HUSH_RANDOM_SUPPORT is not set
-# CONFIG_HUSH_EXPORT_N is not set
# CONFIG_HUSH_MODE_X is not set
-# CONFIG_MSH is not set
-# CONFIG_FEATURE_SH_IS_ASH is not set
-# CONFIG_FEATURE_SH_IS_HUSH is not set
-CONFIG_FEATURE_SH_IS_NONE=y
-# CONFIG_FEATURE_BASH_IS_ASH is not set
-# CONFIG_FEATURE_BASH_IS_HUSH is not set
-CONFIG_FEATURE_BASH_IS_NONE=y
-# CONFIG_SH_MATH_SUPPORT is not set
-# CONFIG_SH_MATH_SUPPORT_64 is not set
-# CONFIG_FEATURE_SH_EXTRA_QUIET is not set
+# CONFIG_HUSH_ECHO is not set
+# CONFIG_HUSH_PRINTF is not set
+# CONFIG_HUSH_TEST is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_EXPORT is not set
+# CONFIG_HUSH_EXPORT_N is not set
+# CONFIG_HUSH_READONLY is not set
+# CONFIG_HUSH_KILL is not set
+# CONFIG_HUSH_WAIT is not set
+# CONFIG_HUSH_TRAP is not set
+# CONFIG_HUSH_TYPE is not set
+# CONFIG_HUSH_TIMES is not set
+# CONFIG_HUSH_READ is not set
+# CONFIG_HUSH_SET is not set
+# CONFIG_HUSH_UNSET is not set
+# CONFIG_HUSH_ULIMIT is not set
+# CONFIG_HUSH_UMASK is not set
+# CONFIG_HUSH_GETOPTS is not set
+# CONFIG_HUSH_MEMLEAK is not set
+
+#
+# Options common to all shells
+#
+CONFIG_FEATURE_SH_MATH=y
+CONFIG_FEATURE_SH_MATH_64=y
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
# CONFIG_FEATURE_SH_STANDALONE is not set
# CONFIG_FEATURE_SH_NOFORK is not set
-# CONFIG_FEATURE_SH_HISTFILESIZE is not set
+# CONFIG_FEATURE_SH_READ_FRAC is not set
+CONFIG_FEATURE_SH_HISTFILESIZE=y
#
# System Logging Utilities
#
+CONFIG_KLOGD=y
+
+#
+# klogd should not be used together with syslog to kernel printk buffer
+#
+CONFIG_FEATURE_KLOGD_KLOGCTL=y
+CONFIG_LOGGER=y
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
CONFIG_SYSLOGD=y
CONFIG_FEATURE_ROTATE_LOGFILE=y
CONFIG_FEATURE_REMOTE_LOG=y
@@ -998,8 +1152,4 @@ CONFIG_FEATURE_SYSLOGD_CFG=y
CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
CONFIG_FEATURE_IPC_SYSLOG=y
CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
-CONFIG_LOGREAD=y
-CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
-CONFIG_KLOGD=y
-CONFIG_FEATURE_KLOGD_KLOGCTL=y
-# CONFIG_LOGGER is not set
+CONFIG_FEATURE_KMSG_SYSLOG=y
diff --git a/source/installer/dropbear/doinst.sh b/source/installer/sources/dropbear/doinst.sh
index af326c6a..af326c6a 100644
--- a/source/installer/dropbear/doinst.sh
+++ b/source/installer/sources/dropbear/doinst.sh
diff --git a/source/installer/dropbear/dropbear.Slackbuild b/source/installer/sources/dropbear/dropbear.Slackbuild
index 9cc78b3e..9cc78b3e 100755
--- a/source/installer/dropbear/dropbear.Slackbuild
+++ b/source/installer/sources/dropbear/dropbear.Slackbuild
diff --git a/source/installer/dropbear/dropbear.glibc.crypt.diff b/source/installer/sources/dropbear/dropbear.glibc.crypt.diff
index 3184210d..3184210d 100644
--- a/source/installer/dropbear/dropbear.glibc.crypt.diff
+++ b/source/installer/sources/dropbear/dropbear.glibc.crypt.diff
diff --git a/source/installer/dropbear/dropbear.xauth.patch b/source/installer/sources/dropbear/dropbear.xauth.patch
index e32f0c64..e32f0c64 100644
--- a/source/installer/dropbear/dropbear.xauth.patch
+++ b/source/installer/sources/dropbear/dropbear.xauth.patch
diff --git a/source/installer/dropbear/dropbear_dbclientpath.patch b/source/installer/sources/dropbear/dropbear_dbclientpath.patch
index 781349f8..781349f8 100644
--- a/source/installer/dropbear/dropbear_dbclientpath.patch
+++ b/source/installer/sources/dropbear/dropbear_dbclientpath.patch
diff --git a/source/installer/dropbear/dropbear_emptypass.patch b/source/installer/sources/dropbear/dropbear_emptypass.patch
index 25924008..25924008 100644
--- a/source/installer/dropbear/dropbear_emptypass.patch
+++ b/source/installer/sources/dropbear/dropbear_emptypass.patch
diff --git a/source/installer/dropbear/rc.dropbear.new b/source/installer/sources/dropbear/rc.dropbear.new
index 3a695b81..3a695b81 100644
--- a/source/installer/dropbear/rc.dropbear.new
+++ b/source/installer/sources/dropbear/rc.dropbear.new
diff --git a/source/installer/dropbear/slack-desc b/source/installer/sources/dropbear/slack-desc
index 94eeac05..ca261902 100644
--- a/source/installer/dropbear/slack-desc
+++ b/source/installer/sources/dropbear/slack-desc
@@ -1,8 +1,8 @@
# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
+# The "handy ruler" below makes it easier to edit a package description. Line
# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
diff --git a/source/installer/sources/efi.i586/EFI/BOOT/elilo.conf b/source/installer/sources/efi.i586/EFI/BOOT/elilo.conf
new file mode 100755
index 00000000..9168ee71
--- /dev/null
+++ b/source/installer/sources/efi.i586/EFI/BOOT/elilo.conf
@@ -0,0 +1,25 @@
+chooser=simple
+message=message.txt
+delay=300
+timeout=300
+#
+image=/hugesmp.s
+ label=hugesmp.s
+ initrd=/initrd.img
+ read-only
+ append="vga=normal load_ramdisk=1 prompt_ramdisk=0 ro printk.time=0 nomodeset SLACK_KERNEL=hugesmp.s"
+image=/huge.s
+ label=huge.s
+ initrd=/initrd.img
+ read-only
+ append="vga=normal load_ramdisk=1 prompt_ramdisk=0 ro printk.time=0 nomodeset SLACK_KERNEL=huge.s"
+image=/hugesmp.s
+ label=kmssmp.s
+ initrd=/initrd.img
+ read-only
+ append="vga=normal load_ramdisk=1 prompt_ramdisk=0 ro printk.time=0 SLACK_KERNEL=hugesmp.s"
+image=/huge.s
+ label=kms.s
+ initrd=/initrd.img
+ read-only
+ append="vga=normal load_ramdisk=1 prompt_ramdisk=0 ro printk.time=0 SLACK_KERNEL=huge.s"
diff --git a/source/installer/sources/efi.i586/EFI/BOOT/message.txt b/source/installer/sources/efi.i586/EFI/BOOT/message.txt
new file mode 100755
index 00000000..7fb5b03c
--- /dev/null
+++ b/source/installer/sources/efi.i586/EFI/BOOT/message.txt
@@ -0,0 +1,16 @@
+
+Welcome to Slackware version 14.2 (Linux kernel 4.1.13)!
+
+If you need to pass extra parameters to the kernel, enter them at the prompt
+below after the name of the kernel to boot (e.g., hugesmp.s).
+
+In a pinch, you can boot your system from here with a command like:
+
+boot: hugesmp.s root=/dev/sda1 rdinit= ro
+
+In the example above, /dev/sda1 is the / Linux partition.
+
+To enter extra parameters below, first press TAB to get a boot prompt.
+If you don't need to enter any parameters, hit ENTER to boot the default
+kernel "hugesmp.s" or wait 30 seconds for autoboot.
+
diff --git a/source/installer/sources/efi.x86_64/EFI/BOOT/elilo.conf b/source/installer/sources/efi.x86_64/EFI/BOOT/elilo.conf
new file mode 100755
index 00000000..1168c71f
--- /dev/null
+++ b/source/installer/sources/efi.x86_64/EFI/BOOT/elilo.conf
@@ -0,0 +1,15 @@
+chooser=simple
+message=message.txt
+delay=300
+timeout=300
+#
+image=/huge.s
+ label=huge.s
+ initrd=/initrd.img
+ read-only
+ append="vga=normal load_ramdisk=1 prompt_ramdisk=0 ro printk.time=0 nomodeset SLACK_KERNEL=huge.s"
+image=/huge.s
+ label=kms.s
+ initrd=/initrd.img
+ read-only
+ append="vga=normal load_ramdisk=1 prompt_ramdisk=0 ro printk.time=0 SLACK_KERNEL=huge.s"
diff --git a/source/installer/sources/efi.x86_64/EFI/BOOT/message.txt b/source/installer/sources/efi.x86_64/EFI/BOOT/message.txt
new file mode 100755
index 00000000..69e6b4de
--- /dev/null
+++ b/source/installer/sources/efi.x86_64/EFI/BOOT/message.txt
@@ -0,0 +1,16 @@
+
+Welcome to Slackware64 version 14.2 (Linux kernel 4.1.13)!
+
+If you need to pass extra parameters to the kernel, enter them at the prompt
+below after the name of the kernel to boot (e.g., huge.s).
+
+In a pinch, you can boot your system from here with a command like:
+
+boot: huge.s root=/dev/sda1 rdinit= ro
+
+In the example above, /dev/sda1 is the / Linux partition.
+
+To enter extra parameters below, first press TAB to get a boot prompt.
+If you don't need to enter any parameters, hit ENTER to boot the default
+kernel "huge.s" or wait 30 seconds for autoboot.
+
diff --git a/source/installer/usbimg2disk.sh b/source/installer/usbimg2disk.sh
new file mode 100644
index 00000000..df3f574f
--- /dev/null
+++ b/source/installer/usbimg2disk.sh
@@ -0,0 +1,501 @@
+#!/bin/bash
+# $Id: usbimg2disk.sh,v 1.23 2012/09/03 20:52:31 eha Exp eha $
+#
+# Copyright 2009, 2010, 2011, 2012 Eric Hameleers, Eindhoven, NL
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Paranoid as usual:
+set -e
+
+# Define some variables ahead of time, so that cleanup knows about them:
+MNTDIR1=""
+MNTDIR2=""
+MNTDIR3=""
+
+# Clean up in case of failure:
+cleanup() {
+ # Clean up by unmounting our loopmounts, deleting tempfiles:
+ echo "--- Cleaning up the staging area..."
+ sync
+ [ ! -z "${MNTDIR1}" ] && ( umount -f ${MNTDIR1} ; rmdir $MNTDIR1 )
+ [ ! -z "${MNTDIR2}" ] && ( umount -f ${MNTDIR2} ; rmdir $MNTDIR2 )
+ [ ! -z "${MNTDIR3}" ] && rm -rf ${MNTDIR3} || true
+}
+trap 'echo "*** $0 FAILED at line $LINENO ***"; cleanup; exit 1' ERR INT TERM
+
+showhelp() {
+ echo "# "
+ echo "# Purpose #1: to use the content of Slackware's usbboot.img and"
+ echo "# transform a standard USB thumb drive with a single vfat partition"
+ echo "# into a bootable medium containing the Slackware Linux installer."
+ echo "# "
+ echo "# Purpose #2: to use the contents of a Slackware directory tree"
+ echo "# and transform a standard USB thumb drive with"
+ echo "# a single vfat partition and 2GB of free space into"
+ echo "# a self-contained USB installation medium for Slackware Linux."
+ echo "# "
+ echo "# "
+ echo "# Your USB thumb drive may contain data!"
+ echo "# This data will *not* be overwritten, unless you have"
+ echo "# explicitly chosen to format the drive by using the '-f' parameter."
+ echo "# "
+ echo "# $(basename $0) accepts the following parameters:"
+ echo "# -h|--help This help"
+ echo "# -f|--format Format the USB drive before use"
+ echo "# -i|--infile <filename> Full path to the usbboot.img file"
+ echo "# -l|--logfile <filename> Optional logfile to catch fdisk output"
+ echo "# -o|--outdev <filename> The device name of your USB drive"
+ echo "# -s|--slackdir <dir> Use 'dir' as the root of Slackware tree"
+ echo "# -u|--unattended Do not ask any questions"
+ echo "# -L|--label <labelname> FAT label when formatting the USB drive"
+
+ echo "# "
+ echo "# Examples:"
+ echo "# "
+ echo "# $(basename $0) -i ~/download/usbboot.img -o /dev/sdX"
+ echo "# $(basename $0) -f -s /home/ftp/pub/slackware-13.0 -o /dev/sdX"
+ echo "# "
+ echo "# The second example shows how to create a fully functional Slackware"
+ echo "# installer on a USB stick (it needs a Slackware tree as the source)."
+ echo "# "
+}
+
+reformat() {
+ # Commands to re-create a functional USB stick with VFAT partition:
+ # two parameters:
+ # (1) the name of the USB device to be formatted:
+ # (2) FAT label to use when formatting the USB device:
+ local TOWIPE="$1"
+ local THELABEL="$2"
+
+ # Sanity checks:
+ if [ ! -b $TOWIPE ]; then
+ echo "*** Not a block device: '$TOWIPE' !"
+ exit 1
+ fi
+
+ # Wipe the MBR:
+ dd if=/dev/zero of=$TOWIPE bs=512 count=1
+
+ # Temporarily accept errors (so that we can examine them):
+ set +e
+
+ # create a FAT32 partition (type 'b')
+ /sbin/fdisk $TOWIPE <<EOF
+n
+p
+1
+
+
+t
+b
+w
+EOF
+
+ # Check if fdisk gave an error (like "error closing file").
+ # Some desktop environments auto-mount the partition on sight...:
+ if [ $? -ne 0 ]; then
+ echo "*** The fdisk command had an error."
+ echo "*** Some desktop environments (KDE, GNOME) may automatically mount"
+ echo "*** the new FAT partition on your USB drive, causing the fdisk error."
+ if [ $UNATTENDED -eq 0 ]; then
+ # if we are running interactively, allow to chicken out now:
+ echo "*** Perhaps you want to format the device '$TOWIPE' yourself first?"
+ read -p "*** Press ENTER to continue anyway or Ctrl-C to quit now: " JUNK
+ fi
+ fi
+
+ # Fail on errors again:
+ set -e
+
+ if mount | grep -q ${TOWIPE}1 ; then
+ echo "--- Un-mounting ${TOWIPE}1 because your desktop auto-mounted it..."
+ umount -f ${TOWIPE}1
+ fi
+
+ # We set the fat label to '$THELABEL' when formatting.
+ # It will enable the installer to mount the fat partition automatically
+ # and pre-fill the correct pathname for the "SOURCE" dialog.
+ # Format with a vfat filesystem:
+ /sbin/mkdosfs -F32 -n ${THELABEL} ${TOWIPE}1
+}
+
+makebootable() {
+ # Only parameter: the name of the USB device to be set bootable:
+ USBDRV="$1"
+
+ # Sanity checks:
+ if [ ! -b $USBDRV ]; then
+ echo "*** Not a block device: '$USBDRV' !"
+ exit 1
+ fi
+
+ # Set the bootable flag for the first partition:
+ /sbin/sfdisk -A $USBDRV 1
+}
+
+# Parse the commandline parameters:
+if [ -z "$1" ]; then
+ showhelp
+ exit 1
+fi
+while [ ! -z "$1" ]; do
+ case $1 in
+ -f|--format)
+ REFORMAT=1
+ shift
+ ;;
+ -h|--help)
+ showhelp
+ exit
+ ;;
+ -i|--infile)
+ USBIMG="$(cd $(dirname $2); pwd)/$(basename $2)"
+ shift 2
+ ;;
+ -l|--logfile)
+ LOGFILE="$(cd $(dirname $2); pwd)/$(basename $2)"
+ shift 2
+ ;;
+ -o|--outdev)
+ TARGET="$2"
+ TARGETPART="${TARGET}1"
+ shift 2
+ ;;
+ -s|--slackdir)
+ REPODIR="$2"
+ FULLINSTALLER="yes"
+ shift 2
+ ;;
+ -u|--unattended)
+ UNATTENDED=1
+ shift
+ ;;
+ -L|--label)
+ CUSTOMLABEL="$2"
+ shift 2
+ ;;
+ *)
+ echo "*** Unknown parameter '$1'!"
+ exit 1
+ ;;
+ esac
+done
+
+# Before we start:
+[ -x /bin/id ] && CMD_ID="/bin/id" || CMD_ID="/usr/bin/id"
+if [ "$($CMD_ID -u)" != "0" ]; then
+ echo "*** You need to be root to run $(basename $0)."
+ exit 1
+fi
+
+# Check existence of the package repository if that was passed as a parameter:
+if [ -n "$REPODIR" ]; then
+ if [ ! -d "$REPODIR" ]; then
+ echo "*** This is not a directory: '$REPODIR' !"
+ exit 1
+ else
+ # This also takes care of stripping a trailing '/', which is required
+ # for the rsync command to work as intended:
+ REPOSROOT="$(cd $(dirname $REPODIR); pwd)/$(basename $REPODIR)"
+ fi
+fi
+
+# Check FAT label:
+if [ -n "${CUSTOMLABEL}" ]; then
+ if [ "x$(echo "${CUSTOMLABEL}"| tr -d '[:alnum:]._-')" != "x" ]; then
+ echo "*** FAT label '${CUSTOMLABEL}' is not an acceptible name!"
+ exit 1
+ elif [ ${#CUSTOMLABEL} -gt 11 ]; then
+ echo "*** FAT label '${CUSTOMLABEL}' must be less than 12 characters!"
+ exit 1
+ else
+ FATLABEL="${CUSTOMLABEL}"
+ fi
+else
+ FATLABEL="USBSLACKINS"
+fi
+
+# Prepare the environment:
+MININSFREE=2200 # minimum in MB required for a Slackware tree
+UNATTENDED=${UNATTENDED:-0} # unattended means: never ask questions.
+REFORMAT=${REFORMAT:-0} # do not try to reformat by default
+LOGFILE=${LOGFILE:-/dev/null} # silence by default
+EXCLUDES=${EXCLUDES:-"--exclude=source \
+ --exclude=extra/aspell-word-lists \
+ --exclude=isolinux \
+ --exclude=usb-and-pxe-installers \
+ --exclude=pasture"} # not copied onto the stick
+
+# If we have been given a Slackware tree, we will create a full installer:
+if [ -n "$REPOSROOT" ]; then
+ if [ -d "$REPOSROOT" -a -f "$REPOSROOT/PACKAGES.TXT" ]; then
+ USBIMG=${USBIMG:-"$REPOSROOT/usb-and-pxe-installers/usbboot.img"}
+ PKGDIR=$(head -40 $REPOSROOT/PACKAGES.TXT | grep 'PACKAGE LOCATION: ' |head -1 |cut -f2 -d/)
+ if [ -z "$PKGDIR" ]; then
+ echo "*** Could not find the package subdirectory in '$REPOSROOT'!"
+ exit 1
+ fi
+ else
+ echo "*** Directory '$REPOSROOT' does not look like a Slackware tree!"
+ exit 1
+ fi
+fi
+
+# More sanity checks:
+if [ -z "$TARGET" -o -z "$USBIMG" ]; then
+ echo "*** You must specify both the names of usbboot.img and the USB device!"
+ exit 1
+fi
+
+if [ ! -f $USBIMG ]; then
+ echo "*** This is not a useable file: '$USBIMG' !"
+ exit 1
+fi
+
+if [ ! -b $TARGET ]; then
+ echo "*** Not a block device: '$TARGET' !"
+ exit 1
+elif [ $REFORMAT -eq 0 ]; then
+ if ! /sbin/blkid -t TYPE=vfat $TARGETPART 1>/dev/null 2>/dev/null ; then
+ echo "*** I fail to find a 'vfat' partition: '$TARGETPART' !"
+ echo "*** If you want to format the USB thumb drive, add the '-f' parameter"
+ exit 1
+ fi
+fi
+
+if mount | grep -q $TARGETPART ; then
+ echo "*** Please un-mount $TARGETPART first, then re-run this script!"
+ exit 1
+fi
+
+# Do not croak if we have a Slackware tree without sources:
+if [ ! $(readlink -f ${REPOSROOT}/extra/java ) ]; then
+ EXCLUDES="${EXCLUDES} --exclude=extra/java"
+fi
+
+# Check for prerequisites which may not always be installed:
+MISSBIN=0
+MBRBIN="/usr/lib/syslinux/mbr.bin"
+if [ ! -r $MBRBIN ]; then MBRBIN="/usr/share/syslinux/mbr.bin"; fi
+if [ ! -r $MBRBIN -o ! -x /usr/bin/syslinux ]; then
+ echo "*** This script requires that the 'syslinux' package is installed!"
+ MISSBIN=1
+fi
+if [ ! -x /usr/bin/mtools ]; then
+ echo "*** This script requires that the 'floppy' (mtools) package is installed!"
+ MISSBIN=1
+fi
+if [ ! -x /sbin/mkdosfs ]; then
+ echo "*** This script requires that the 'dosfstools' package is installed!"
+ MISSBIN=1
+fi
+if [ ! -x /bin/cpio ]; then
+ echo "*** This script requires that the 'cpio' package is installed!"
+ MISSBIN=1
+fi
+if [ $MISSBIN -eq 1 ]; then exit 1 ; fi
+
+# Show the USB device's information to the user:
+if [ $UNATTENDED -eq 0 ]; then
+ [ $REFORMAT -eq 1 ] && DOFRMT="format and " || DOFRMT=""
+
+ echo ""
+ echo "# We are going to ${DOFRMT}use this device - '$TARGET':"
+ echo "# Vendor : $(cat /sys/block/$(basename $TARGET)/device/vendor)"
+ echo "# Model : $(cat /sys/block/$(basename $TARGET)/device/model)"
+ echo "# Size : $(( $(cat /sys/block/$(basename $TARGET)/size) / 2048)) MB"
+ echo "# "
+ echo "# FDISK OUTPUT:"
+ /sbin/fdisk -l $TARGET | while read LINE ; do echo "# $LINE" ; done
+ echo ""
+
+ echo "*** ***"
+ echo "*** If this is the wrong drive, then press CONTROL-C now! ***"
+ echo "*** ***"
+
+ read -p "Or press ENTER to continue: " JUNK
+ # OK... the user was sure about the drive...
+fi
+
+# Initialize the logfile:
+cat /dev/null > $LOGFILE
+
+# If we need to format the USB drive, do it now:
+if [ $REFORMAT -eq 1 ]; then
+ echo "--- Formatting $TARGET with VFAT partition label '${FATLABEL}'..."
+ if [ $UNATTENDED -eq 0 ]; then
+ echo "--- Last chance! Press CTRL-C to abort!"
+ read -p "Or press ENTER to continue: " JUNK
+ fi
+ ( reformat $TARGET ${FATLABEL} ) 1>>$LOGFILE 2>&1
+else
+ # We do not format the drive, but apply a FAT label if required.
+
+ # Prepare for using mlabel to change the FAT label:
+ MTOOLSRCFILE=$(mktemp -p /tmp -t mtoolsrc.XXXXXX)
+ echo "drive s: file=\"$TARGETPART\"" > $MTOOLSRCFILE
+ echo "mtools_skip_check=1" >> $MTOOLSRCFILE
+
+ if [ -n "$CUSTOMLABEL" ]; then
+ # User gave us a FAT label to use, so we will force that upon the drive:
+ echo "--- Setting FAT partition label to '$FATLABEL'"
+ MTOOLSRC=$MTOOLSRCFILE mlabel s:${FATLABEL}
+ elif [ -n "$(/sbin/blkid -t TYPE=vfat -s LABEL -o export $TARGETPART)" ] ; then
+ # User did not care, but the USB stick has a FAT label that we will use:
+ eval $(/sbin/blkid -t TYPE=vfat -s LABEL -o export $TARGETPART)
+ FATLABEL=$LABEL
+ echo "--- Using current FAT partition label '$FATLABEL'"
+ unset LABEL
+ else
+ # No user-supplied label, nor a drive label present. We apply our default:
+ echo "--- Setting FAT partition label to '$FATLABEL'"
+ MTOOLSRC=$MTOOLSRCFILE mlabel s:${FATLABEL}
+ fi
+
+ # Cleanup:
+ rm -f $MTOOLSRCFILE
+fi
+
+# Create a temporary mount point for the image file:
+mkdir -p /mnt
+MNTDIR1=$(mktemp -d -p /mnt -t img.XXXXXX)
+if [ ! -d $MNTDIR1 ]; then
+ echo "*** Failed to create a temporary mount point for the image!"
+ exit 1
+else
+ chmod 711 $MNTDIR1
+fi
+
+# Create a temporary mount point for the USB thumb drive partition:
+MNTDIR2=$(mktemp -d -p /mnt -t usb.XXXXXX)
+if [ ! -d $MNTDIR2 ]; then
+ echo "*** Failed to create a temporary mount point for the usb thumb drive!"
+ exit 1
+else
+ chmod 711 $MNTDIR2
+fi
+
+# Create a temporary directory to extract the initrd if needed:
+MNTDIR3=$(mktemp -d -p /mnt -t initrd.XXXXXX)
+if [ ! -d $MNTDIR3 ]; then
+ echo "*** Failed to create a temporary directory to extract the initrd!"
+ exit 1
+else
+ chmod 711 $MNTDIR3
+fi
+
+# Mount the image file:
+mount -o loop,ro $USBIMG $MNTDIR1
+
+# Mount the vfat partition:
+mount -t vfat -o shortname=mixed $TARGETPART $MNTDIR2
+
+# Do we have space to create a full Slackware USB install medium?
+if [ "$FULLINSTALLER" = "yes" ]; then
+ if [ $(df --block=1MB $TARGETPART |grep "^$TARGETPART" |tr -s ' ' |cut -f4 -d' ') -le $MININSFREE ]; then
+ echo "*** The partition '$TARGETPART' does not have enough"
+ echo "*** free space (${MININSFREE} MB) to create a Slackware installation medium!"
+ cleanup
+ exit 1
+ fi
+fi
+
+# Check available space for a Slackware USB setup bootdisk:
+USBFREE=$(df -k $TARGETPART |grep "^$TARGETPART" |tr -s ' ' |cut -d' ' -f4)
+IMGSIZE=$(du -k $USBIMG |cut -f1)
+echo "--- Available free space on the the USB drive is $USBFREE KB"
+echo "--- Required free space for installer: $IMGSIZE KB"
+
+# Exit when the installer image's size does not fit in available space:
+if [ $IMGSIZE -gt $USBFREE ]; then
+ echo "*** The USB thumb drive does not have enough free space!"
+ # Cleanup and exit:
+ cleanup
+ exit 1
+fi
+
+if [ $UNATTENDED -eq 0 ]; then
+ # if we are running interactively, warn about overwriting files:
+ if [ -n "$REPOSROOT" ]; then
+ if [ -d $MNTDIR2/syslinux -o -d $MNTDIR2/$(basename $REPOSROOT) ]; then
+ echo "--- Your USB drive contains directories 'syslinux' and/or '$(basename $REPOSROOT)'"
+ echo "--- These will be overwritten. Press CTRL-C to abort now!"
+ read -p "Or press ENTER to continue: " JUNK
+ fi
+ else
+ if [ -d $MNTDIR2/syslinux ]; then
+ echo "--- Your USB drive contains directory 'syslinux'"
+ echo "--- This will be overwritten. Press CTRL-C to abort now!"
+ read -p "Or press ENTER to continue: " JUNK
+ fi
+ fi
+fi
+
+# Copy boot image files to the USB disk in its own subdirectory '/syslinux':
+echo "--- Copying boot files to the USB drive..."
+mkdir -p $MNTDIR2/syslinux
+cp -R $MNTDIR1/* $MNTDIR2/syslinux/
+rm -f $MNTDIR2/syslinux/ldlinux.sys
+
+# If we are creating a full Slackware installer, there is a lot more to do:
+if [ "$FULLINSTALLER" = "yes" ]; then
+ # Extract the Slackware initrd for modifications we have to do:
+ echo "--- Extracting Slackware initrd.img..."
+ ( cd ${MNTDIR3}/
+ gunzip -cd ${MNTDIR2}/syslinux/initrd.img | cpio -i -d -H newc --no-absolute-filenames
+ ) 2>>$LOGFILE
+
+ # Modify installer files so that installing from USB stick will be easier:
+ echo "--- Modifying installer files..."
+ ( cd ${MNTDIR3}/
+ # Try to automatically mount the installer partition:
+ mkdir usbinstall
+ echo "mount -t vfat -o ro,shortname=mixed \$(/sbin/blkid -t LABEL=$FATLABEL | cut -f1 -d:) /usbinstall 1>/dev/null 2>&1" >> etc/rc.d/rc.S
+ # Adapt the dialogs so that pressing [OK] will be all there is to it:
+ sed -i -e 's# --menu# --default-item 6 --menu#' usr/lib/setup/SeTmedia
+ sed -i -e "s# 2> \$TMP/sourcedir# /usbinstall/$(basename $REPOSROOT)/$PKGDIR 2> \$TMP/sourcedir#" usr/lib/setup/INSdir
+ FIXF=$(find usr/lib/setup -name SeTp*media)
+ sed -i -e 's# --menu# --default-item 3 --menu#' $FIXF
+ ) 2>>$LOGFILE
+
+ # Recreate the initrd:
+ echo "--- Gzipping the initrd image again:"
+ chmod 0755 ${MNTDIR3}
+ ( cd ${MNTDIR3}/
+ find . |cpio -o -H newc |gzip > ${MNTDIR2}/syslinux/initrd.img
+ ) 2>>$LOGFILE
+
+ # Copy Slackware package tree (no sources) to the USB disk -
+ # we already made sure that ${REPOSROOT} does not end with a '/'
+ echo "--- Copying Slackware package tree to the USB drive..."
+ rsync -rpthDL --delete $EXCLUDES $REPOSROOT $MNTDIR2/
+fi
+
+# Unmount/remove stuff:
+cleanup
+
+# Run syslinux and write a good MBR:
+echo "--- Making the USB drive '$TARGET' bootable..."
+( makebootable $TARGET ) 1>>$LOGFILE 2>&1
+/usr/bin/syslinux -s -d /syslinux $TARGETPART 1>>$LOGFILE 2>&1
+dd if=$MBRBIN of=$TARGET 1>>$LOGFILE 2>&1
+
+# THE END