summaryrefslogtreecommitdiffstats
path: root/source/installer/sources
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2018-06-06 22:19:01 +0000
committer Eric Hameleers <alien@slackware.com>2018-06-07 08:58:09 +0200
commit6e00c56127b4fa2328e596ac18647fb7f27b674d (patch)
treed9cb5f96f79880fb29e1875aa169336346d94989 /source/installer/sources
parentec4fd2d70a99a651f8498ce4c1ca8b38b9583c39 (diff)
downloadcurrent-6e00c56127b4fa2328e596ac18647fb7f27b674d.tar.gz
current-6e00c56127b4fa2328e596ac18647fb7f27b674d.tar.xz
Wed Jun 6 22:19:01 UTC 201820180606221901
a/bash-4.4.023-x86_64-1.txz: Upgraded. a/kernel-firmware-20180604_1fa9ce3-noarch-1.txz: Upgraded. a/kernel-generic-4.14.48-x86_64-1.txz: Upgraded. a/kernel-huge-4.14.48-x86_64-1.txz: Upgraded. a/kernel-modules-4.14.48-x86_64-1.txz: Upgraded. ap/cups-2.2.8-x86_64-1.txz: Upgraded. ap/ghostscript-fonts-std-8.11-noarch-3.txz: Rebuilt. Rebuilt this and many other font packages or packages with build scripts that call mkfontdir or mkfontscale to suppress any error messages caused by collisions if another package installation is writing files to the same font directories when those utilities are run. In that case, the other package will also be running mkfontdir/mkfontscale after the files are installed, so any issues will be cleaned up then. Last one out turn off the lights, so to speak. ap/sqlite-3.24.0-x86_64-1.txz: Upgraded. ap/terminus-font-4.40-noarch-3.txz: Rebuilt. d/kernel-headers-4.14.48-x86-1.txz: Upgraded. d/rust-1.26.2-x86_64-1.txz: Upgraded. k/kernel-source-4.14.48-noarch-1.txz: Upgraded. l/elfutils-0.171-x86_64-1.txz: Upgraded. l/harfbuzz-1.7.7-x86_64-1.txz: Upgraded. l/mozilla-nss-3.37.3-x86_64-1.txz: Upgraded. l/readline-7.0.005-x86_64-1.txz: Upgraded. x/dejavu-fonts-ttf-2.37-noarch-4.txz: Rebuilt. x/font-adobe-100dpi-1.0.3-noarch-3.txz: Rebuilt. x/font-adobe-75dpi-1.0.3-noarch-3.txz: Rebuilt. x/font-adobe-utopia-100dpi-1.0.4-noarch-3.txz: Rebuilt. x/font-adobe-utopia-75dpi-1.0.4-noarch-3.txz: Rebuilt. x/font-adobe-utopia-type1-1.0.4-noarch-3.txz: Rebuilt. x/font-arabic-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-bh-100dpi-1.0.3-noarch-3.txz: Rebuilt. x/font-bh-75dpi-1.0.3-noarch-3.txz: Rebuilt. x/font-bh-lucidatypewriter-100dpi-1.0.3-noarch-3.txz: Rebuilt. x/font-bh-lucidatypewriter-75dpi-1.0.3-noarch-3.txz: Rebuilt. x/font-bh-ttf-1.0.3-noarch-3.txz: Rebuilt. x/font-bh-type1-1.0.3-noarch-3.txz: Rebuilt. x/font-bitstream-100dpi-1.0.3-noarch-3.txz: Rebuilt. x/font-bitstream-75dpi-1.0.3-noarch-3.txz: Rebuilt. x/font-bitstream-speedo-1.0.2-noarch-3.txz: Rebuilt. x/font-bitstream-type1-1.0.3-noarch-3.txz: Rebuilt. x/font-cronyx-cyrillic-1.0.3-noarch-3.txz: Rebuilt. x/font-cursor-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-daewoo-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-dec-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-ibm-type1-1.0.3-noarch-3.txz: Rebuilt. x/font-isas-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-jis-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-micro-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-misc-cyrillic-1.0.3-noarch-3.txz: Rebuilt. x/font-misc-ethiopic-1.0.3-noarch-3.txz: Rebuilt. x/font-misc-meltho-1.0.3-noarch-3.txz: Rebuilt. x/font-misc-misc-1.1.2-noarch-3.txz: Rebuilt. x/font-mutt-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-schumacher-misc-1.1.2-noarch-3.txz: Rebuilt. x/font-screen-cyrillic-1.0.4-noarch-3.txz: Rebuilt. x/font-sony-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-sun-misc-1.0.3-noarch-3.txz: Rebuilt. x/font-winitzki-cyrillic-1.0.3-noarch-3.txz: Rebuilt. x/font-xfree86-type1-1.0.4-noarch-3.txz: Rebuilt. x/liberation-fonts-ttf-2.00.1-noarch-3.txz: Rebuilt. x/libinput-1.11.0-x86_64-1.txz: Upgraded. x/sazanami-fonts-ttf-20040629-noarch-3.txz: Rebuilt. x/sinhala_lklug-font-ttf-20060929-noarch-3.txz: Rebuilt. x/tibmachuni-font-ttf-1.901b-noarch-3.txz: Rebuilt. x/ttf-indic-fonts-0.5.14-noarch-3.txz: Rebuilt. x/ttf-tlwg-0.6.4-noarch-3.txz: Rebuilt. x/urw-core35-fonts-otf-20170801_91edd6e_git-noarch-2.txz: Rebuilt. x/wqy-zenhei-font-ttf-0.8.38_1-noarch-6.txz: Rebuilt. xap/mozilla-firefox-60.0.2-x86_64-1.txz: Upgraded. This release contains security fixes and improvements. For more information, see: https://www.mozilla.org/security/known-vulnerabilities/firefox.html (* Security fix *) xap/x3270-3.3.12ga7-x86_64-5.txz: Rebuilt. isolinux/initrd.img: Rebuilt. kernels/*: Upgraded. usb-and-pxe-installers/usbboot.img: Rebuilt.
Diffstat (limited to 'source/installer/sources')
-rwxr-xr-xsource/installer/sources/initrd/bin/bash2
l---------source/installer/sources/initrd/bin/compress1
l---------source/installer/sources/initrd/bin/egrep1
l---------source/installer/sources/initrd/bin/fgrep1
-rwxr-xr-xsource/installer/sources/initrd/bin/filesize6
l---------source/installer/sources/initrd/bin/grep1
-rwxr-xr-xsource/installer/sources/initrd/bin/network41
-rwxr-xr-xsource/installer/sources/initrd/bin/pcmcia29
-rwxr-xr-xsource/installer/sources/initrd/bin/zcat56
l---------source/installer/sources/initrd/boot1
l---------source/installer/sources/initrd/cdrom1
-rwxr-xr-xsource/installer/sources/initrd/dev/makedevs.sh260
-rwxr-xr-xsource/installer/sources/initrd/dev/mknodes.sh416
-rw-r--r--source/installer/sources/initrd/etc/DIR_COLORS166
-rw-r--r--source/installer/sources/initrd/etc/HOSTNAME1
-rwxr-xr-xsource/installer/sources/initrd/etc/dhcpc/dhcpcd.exe-sample49
-rw-r--r--source/installer/sources/initrd/etc/disk27
-rw-r--r--source/installer/sources/initrd/etc/dnsmasq.conf0
-rw-r--r--source/installer/sources/initrd/etc/fstab3
-rw-r--r--source/installer/sources/initrd/etc/group44
-rw-r--r--source/installer/sources/initrd/etc/host.conf2
-rw-r--r--source/installer/sources/initrd/etc/hosts21
-rw-r--r--source/installer/sources/initrd/etc/inittab40
-rw-r--r--source/installer/sources/initrd/etc/installer1
-rw-r--r--source/installer/sources/initrd/etc/issue25
-rw-r--r--source/installer/sources/initrd/etc/keymaps.tarbin0 -> 573440 bytes
-rw-r--r--source/installer/sources/initrd/etc/ld.so.cachebin0 -> 4468 bytes
-rw-r--r--source/installer/sources/initrd/etc/ld.so.conf2
-rw-r--r--source/installer/sources/initrd/etc/localtimebin0 -> 118 bytes
-rw-r--r--source/installer/sources/initrd/etc/login.defs68
-rw-r--r--source/installer/sources/initrd/etc/lvm/lvm.conf411
-rw-r--r--source/installer/sources/initrd/etc/mdev.conf0
-rw-r--r--source/installer/sources/initrd/etc/mke2fs.conf44
-rw-r--r--source/installer/sources/initrd/etc/motd0
-rw-r--r--source/installer/sources/initrd/etc/mtab0
-rw-r--r--source/installer/sources/initrd/etc/mtools.conf64
-rw-r--r--source/installer/sources/initrd/etc/networks10
-rw-r--r--source/installer/sources/initrd/etc/nsswitch.conf42
-rw-r--r--source/installer/sources/initrd/etc/passwd21
-rw-r--r--source/installer/sources/initrd/etc/pcmcia/config.opts71
-rw-r--r--source/installer/sources/initrd/etc/profile35
-rwxr-xr-xsource/installer/sources/initrd/etc/profile.d/coreutils-dircolors.sh55
-rwxr-xr-xsource/installer/sources/initrd/etc/profile.d/glibc.sh8
-rw-r--r--source/installer/sources/initrd/etc/protocols146
-rwxr-xr-xsource/installer/sources/initrd/etc/rc.d/rc.S250
-rwxr-xr-xsource/installer/sources/initrd/etc/rc.d/rc.dropbear58
-rwxr-xr-xsource/installer/sources/initrd/etc/rc.d/rc.font45
-rwxr-xr-xsource/installer/sources/initrd/etc/rc.d/rc.ieee139448
-rwxr-xr-xsource/installer/sources/initrd/etc/rc.d/rc.inet128
-rwxr-xr-xsource/installer/sources/initrd/etc/rc.d/rc.pcmcia65
-rwxr-xr-xsource/installer/sources/initrd/etc/rc.d/rc.udev133
-rwxr-xr-xsource/installer/sources/initrd/etc/rc.d/rc.usb71
-rw-r--r--source/installer/sources/initrd/etc/scsi_id.config17
-rw-r--r--source/installer/sources/initrd/etc/securetty20
-rw-r--r--source/installer/sources/initrd/etc/shadow17
-rw-r--r--source/installer/sources/initrd/etc/shells2
-rw-r--r--source/installer/sources/initrd/etc/syslog.conf4
-rw-r--r--source/installer/sources/initrd/etc/termcap238
l---------source/installer/sources/initrd/init1
-rw-r--r--source/installer/sources/initrd/mnt/README5
l---------source/installer/sources/initrd/nfs1
l---------source/installer/sources/initrd/root/README1
-rwxr-xr-xsource/installer/sources/initrd/sbin/brc19
-rwxr-xr-xsource/installer/sources/initrd/sbin/cfdisk5
-rwxr-xr-xsource/installer/sources/initrd/sbin/fakedate4
-rwxr-xr-xsource/installer/sources/initrd/sbin/fdisk5
-rwxr-xr-xsource/installer/sources/initrd/sbin/fixdate4
-rwxr-xr-xsource/installer/sources/initrd/sbin/probe438
-rwxr-xr-xsource/installer/sources/initrd/sbin/rescan-scsi-bus755
-rw-r--r--source/installer/sources/initrd/scripts/network.sh155
-rw-r--r--source/installer/sources/initrd/tag/README5
-rwxr-xr-xsource/installer/sources/initrd/usr/bin/logger6
l---------source/installer/sources/initrd/usr/bin/man1
l---------source/installer/sources/initrd/usr/bin/zcat1
-rw-r--r--source/installer/sources/initrd/usr/lib/setup/FDhelp256
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/INCISO31
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/INSCD270
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/INSNFS121
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/INSSMB120
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/INSURL241
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/INSUSB107
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/INSdir73
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/INShd146
-rw-r--r--source/installer/sources/initrd/usr/lib/setup/PROMPThelp83
-rw-r--r--source/installer/sources/initrd/usr/lib/setup/PXEhelp108
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTDOS214
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTEFI94
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTPKG148
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTPXEHELP2
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTconfig138
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTfdHELP2
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTfull24
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTkernel102
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTkeymap220
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTmaketag154
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTmedia47
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTnet360
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTnopart1
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTpartitions524
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTpasswd30
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTpxe315
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTpxemedia95
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTswap122
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/migrate.sh31
-rw-r--r--source/installer/sources/initrd/usr/lib/setup/nopartHELP34
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/pxesetup120
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/setup443
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/slackinstall254
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/unmigrate.sh13
l---------source/installer/sources/initrd/usr/lib/terminfo1
l---------source/installer/sources/initrd/usr/man/cat11
l---------source/installer/sources/initrd/usr/man/cat31
l---------source/installer/sources/initrd/usr/man/cat51
l---------source/installer/sources/initrd/usr/man/cat81
l---------source/installer/sources/initrd/var/adm1
-rw-r--r--source/installer/sources/initrd/var/lib/tftpboot/pxelinux.0bin0 -> 11816 bytes
-rw-r--r--source/installer/sources/initrd/var/lib/tftpboot/pxelinux.cfg/default0
-rw-r--r--source/installer/sources/initrd/var/lib/tftpboot/slackpxe.cfg3
l---------source/installer/sources/initrd/var/log/packages1
l---------source/installer/sources/initrd/var/log/scripts1
l---------source/installer/sources/initrd/var/log/setup/tmp1
-rw-r--r--source/installer/sources/initrd/var/log/wtmp0
122 files changed, 9609 insertions, 0 deletions
diff --git a/source/installer/sources/initrd/bin/bash b/source/installer/sources/initrd/bin/bash
new file mode 100755
index 000000000..f659f3699
--- /dev/null
+++ b/source/installer/sources/initrd/bin/bash
@@ -0,0 +1,2 @@
+#!/bin/ash
+exec /bin/ash $*
diff --git a/source/installer/sources/initrd/bin/compress b/source/installer/sources/initrd/bin/compress
new file mode 120000
index 000000000..8483eff1e
--- /dev/null
+++ b/source/installer/sources/initrd/bin/compress
@@ -0,0 +1 @@
+/usr/bin/compress \ No newline at end of file
diff --git a/source/installer/sources/initrd/bin/egrep b/source/installer/sources/initrd/bin/egrep
new file mode 120000
index 000000000..c45b35b77
--- /dev/null
+++ b/source/installer/sources/initrd/bin/egrep
@@ -0,0 +1 @@
+grep.bin \ No newline at end of file
diff --git a/source/installer/sources/initrd/bin/fgrep b/source/installer/sources/initrd/bin/fgrep
new file mode 120000
index 000000000..c45b35b77
--- /dev/null
+++ b/source/installer/sources/initrd/bin/fgrep
@@ -0,0 +1 @@
+grep.bin \ No newline at end of file
diff --git a/source/installer/sources/initrd/bin/filesize b/source/installer/sources/initrd/bin/filesize
new file mode 100755
index 000000000..4c537edad
--- /dev/null
+++ b/source/installer/sources/initrd/bin/filesize
@@ -0,0 +1,6 @@
+#!/bin/sh
+#
+# Print the size of a file, in bytes.
+#
+SIZE=`ls -l -d -G $1 | cut -b23-32`
+echo -n $SIZE
diff --git a/source/installer/sources/initrd/bin/grep b/source/installer/sources/initrd/bin/grep
new file mode 120000
index 000000000..c45b35b77
--- /dev/null
+++ b/source/installer/sources/initrd/bin/grep
@@ -0,0 +1 @@
+grep.bin \ No newline at end of file
diff --git a/source/installer/sources/initrd/bin/network b/source/installer/sources/initrd/bin/network
new file mode 100755
index 000000000..59637dd02
--- /dev/null
+++ b/source/installer/sources/initrd/bin/network
@@ -0,0 +1,41 @@
+#!/bin/sh
+# This script configures support for ethernet cards needed during
+# installation for an NFS install.
+#
+# Normally this automatically loads an image from the ISO, and if
+# it cannot be found tries to load a floppy disk.
+#
+# You may also give a path to the network.dsk image, like this:
+# network /some/exact/path/network.dsk
+#
+
+TMP=/var/log/setup/tmp
+mkdir -p $TMP/dhcpc
+
+echo
+echo "Network support for NFS install, 2006-09-20 volkerdi@slackware.com"
+echo "Network support for FTP/HTTP install, 26-Jan-2008 alien@slackware.com"
+echo
+
+# Now, let's call the network.sh script to actually do most of the work:
+
+if [ -r /scripts/network.sh ]; then
+ sh /scripts/network.sh
+fi
+
+# If we can get information from a local DHCP server, we store that for later:
+if ! grep -wq nodhcp /proc/cmdline ; then
+ for EDEV in $(cat /proc/net/dev | grep ':' | sed -e "s/^ *//" | cut -f1 -d: | grep -v lo) ; do
+ if grep -q `echo ${EDEV}: | cut -f 1 -d :`: /proc/net/wireless ; then
+ continue # skip wireless interfaces
+ fi
+ /sbin/dhcpcd -t 10 -T $EDEV 1>$TMP/dhcpc/dhcpcd-${EDEV}.info 2>/dev/null &
+ done
+fi
+
+echo
+echo "The next step in your installation may be partitioning your hard drive"
+echo "(if you're installing to a Linux partition) with 'fdisk' or 'cfdisk'"
+echo "(the menu-driven version of fdisk). If you already have a partition"
+echo "prepared for Linux, run 'setup' to start the installer program."
+echo
diff --git a/source/installer/sources/initrd/bin/pcmcia b/source/installer/sources/initrd/bin/pcmcia
new file mode 100755
index 000000000..b77503deb
--- /dev/null
+++ b/source/installer/sources/initrd/bin/pcmcia
@@ -0,0 +1,29 @@
+#!/bin/sh
+# This script configures support for PCMCIA and/or Cardbus cards needed during
+# installation, such as a CD-ROM drive or an ethernet card used for an NFS
+# install.
+
+echo
+echo "PCMCIA/Cardbus support script, 2003-02-18 volkerdi@slackware.com"
+echo " 2007-05-09 alien@slackware.com"
+echo
+
+# OK, here goes nothing:
+/etc/rc.d/rc.pcmcia start
+
+echo
+echo
+echo "The PCMCIA/Cardbus subsystem is now installed. Please make sure that"
+echo "all of the cards you'll need for the installation are in the machine."
+echo "If you still need to insert any PCMCIA/Cardbus cards, do that now. Once"
+echo "the drive stops (indicating that all needed modules have been"
+echo -n "loaded), then press [enter] to continue."
+read inputjunk
+echo
+
+echo
+echo "The next step in your installation may be partitioning your hard drive"
+echo "(if you're installing to a Linux partition) with 'fdisk' or 'cfdisk'"
+echo "(the menu-driven version of fdisk). If you already have a partition"
+echo "prepared for Linux, run 'setup' to start the installer program."
+echo
diff --git a/source/installer/sources/initrd/bin/zcat b/source/installer/sources/initrd/bin/zcat
new file mode 100755
index 000000000..569b15391
--- /dev/null
+++ b/source/installer/sources/initrd/bin/zcat
@@ -0,0 +1,56 @@
+#!/bin/sh
+# Uncompress files to standard output.
+
+# Copyright (C) 2007 Free Software Foundation
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+bindir='/bin'
+case $1 in
+--__bindir) bindir=${2?}; shift; shift;;
+esac
+PATH=$bindir:$PATH
+
+version="zcat (gzip) 1.4
+Copyright (C) 2007, 2009-2010 Free Software Foundation, Inc.
+This is free software. You may redistribute copies of it under the terms of
+the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by Paul Eggert."
+
+usage="Usage: $0 [OPTION]... [FILE]...
+Uncompress FILEs to standard output.
+
+ -f, --force force; read compressed data even from a terminal
+ -l, --list list compressed file contents
+ -q, --quiet suppress all warnings
+ -r, --recursive operate recursively on directories
+ -S, --suffix=SUF use suffix SUF on compressed files
+ -t, --test test compressed file integrity
+ -v, --verbose verbose mode
+ --help display this help and exit
+ --version display version information and exit
+
+With no FILE, or when FILE is -, read standard input.
+
+Report bugs to <bug-gzip@gnu.org>."
+
+case $1 in
+--help) exec echo "$usage";;
+--version) exec echo "$version";;
+esac
+
+exec gzip -cd "$@"
diff --git a/source/installer/sources/initrd/boot b/source/installer/sources/initrd/boot
new file mode 120000
index 000000000..cfecd6eb4
--- /dev/null
+++ b/source/installer/sources/initrd/boot
@@ -0,0 +1 @@
+/mnt/boot \ No newline at end of file
diff --git a/source/installer/sources/initrd/cdrom b/source/installer/sources/initrd/cdrom
new file mode 120000
index 000000000..3f165753a
--- /dev/null
+++ b/source/installer/sources/initrd/cdrom
@@ -0,0 +1 @@
+/var/log/mount \ No newline at end of file
diff --git a/source/installer/sources/initrd/dev/makedevs.sh b/source/installer/sources/initrd/dev/makedevs.sh
new file mode 100755
index 000000000..8ecdb756e
--- /dev/null
+++ b/source/installer/sources/initrd/dev/makedevs.sh
@@ -0,0 +1,260 @@
+#!/bin/sh
+# This script makes /dev entries for hard drives listed in /proc/partitions.
+# Written by Patrick Volkerding, licensed under the GPL (any version).
+# Copyright 2001, 2002 Slackware Linux, Inc., Concord, CA
+
+# Many thanks to Vincent Rivellino for contributing the patches to support
+# Mylex and Compaq RAID controllers.
+
+# Devfs enabled kernels don't use the old familiar device names in
+# /proc/partitions, so we need to be able to figure them out on the
+# basis of only the major/minor numbers. This will require some
+# maintainance for a while, but we expect to require devfs soon enough,
+# and that will help generalize the installation to new types of
+# devices without requiring fixes from us.
+
+# Also, we're not yet ready to install with devfs _mounted_, so don't
+# try that. :)
+
+# Main loop:
+# First, determine if we are using old or new device names. The old format
+# will never contain a '/' (Well, some RAID controllers could have them,
+# but luckily we can handle those in the same way)
+
+# Make a device:
+makedev() {
+ if [ ! -b $1 ]; then
+ mknod $1 b $2 $3
+ chown root.disk $1
+ chmod 640 $1
+ fi
+}
+
+# Make ide device
+# makeide major minor hd1 hd2 (2 base devs for major)
+make_ide() {
+ # Handle base devices:
+ if [ "$2" = "0" ]; then
+ makedev /dev/$3 $1 $2
+ return 0
+ elif [ "$2" = "64" ]; then
+ makedev /dev/$4 $1 $2
+ return 0
+ fi
+ # Must be a partition:
+ if [ "`expr $2 / 64`" = "0" ]; then
+ DEV=$3
+ NUM=$2
+ else
+ DEV=$4
+ NUM=`expr $2 - 64`
+ fi
+ makedev /dev/$DEV$NUM $1 $2
+}
+
+# Make SCSI device
+make_scsi() {
+ # find drive # 0 - 15
+ DRV=`expr $1 / 16`
+ NUM=`expr $1 % 16`
+ if [ "$NUM" = "0" ]; then
+ NUM=""
+ fi
+ if [ "$DRV" = "0" ]; then
+ makedev /dev/sda$NUM 8 $1
+ elif [ "$DRV" = "1" ]; then
+ makedev /dev/sdb$NUM 8 $1
+ elif [ "$DRV" = "2" ]; then
+ makedev /dev/sdc$NUM 8 $1
+ elif [ "$DRV" = "3" ]; then
+ makedev /dev/sdd$NUM 8 $1
+ elif [ "$DRV" = "4" ]; then
+ makedev /dev/sde$NUM 8 $1
+ elif [ "$DRV" = "5" ]; then
+ makedev /dev/sdf$NUM 8 $1
+ elif [ "$DRV" = "6" ]; then
+ makedev /dev/sdg$NUM 8 $1
+ elif [ "$DRV" = "7" ]; then
+ makedev /dev/sdh$NUM 8 $1
+ elif [ "$DRV" = "8" ]; then
+ makedev /dev/sdi$NUM 8 $1
+ elif [ "$DRV" = "9" ]; then
+ makedev /dev/sdj$NUM 8 $1
+ elif [ "$DRV" = "10" ]; then
+ makedev /dev/sdk$NUM 8 $1
+ elif [ "$DRV" = "11" ]; then
+ makedev /dev/sdl$NUM 8 $1
+ elif [ "$DRV" = "12" ]; then
+ makedev /dev/sdm$NUM 8 $1
+ elif [ "$DRV" = "13" ]; then
+ makedev /dev/sdn$NUM 8 $1
+ elif [ "$DRV" = "14" ]; then
+ makedev /dev/sdo$NUM 8 $1
+ elif [ "$DRV" = "15" ]; then
+ makedev /dev/sdp$NUM 8 $1
+ fi
+}
+
+# Make Mylex RAID device
+make_rd() {
+ if [ ! -d /dev/rd ]; then
+ mkdir /dev/rd
+ fi
+ # find drive
+ DRV=`expr $3 / 8`
+ NUM="p`expr $3 % 8`"
+ if [ "$NUM" = "p0" ]; then
+ NUM=""
+ fi
+ makedev /dev/rd/c$1d$DRV$NUM $2 $3
+}
+
+# Make Cpq SMART/2 RAID device
+make_ida() {
+ if [ ! -d /dev/ida ]; then
+ mkdir /dev/ida
+ fi
+ # find drive
+ DRV=`expr $3 / 16`
+ NUM="p`expr $3 % 16`"
+ if [ "$NUM" = "p0" ]; then
+ NUM=""
+ fi
+ makedev /dev/ida/c$1d$DRV$NUM $2 $3
+}
+
+# Make Compaq Next Generation RAID device
+make_cciss() {
+ if [ ! -d /dev/cciss ]; then
+ mkdir /dev/cciss
+ fi
+ # find drive
+ DRV=`expr $3 / 16`
+ NUM="p`expr $3 % 16`"
+ if [ "$NUM" = "p0" ]; then
+ NUM=""
+ fi
+ makedev /dev/cciss/c$1d$DRV$NUM $2 $3
+}
+
+# Make ATA RAID device
+make_ataraid() {
+ if [ ! -d /dev/ataraid ]; then
+ mkdir /dev/ataraid
+ fi
+ # find drive
+ DRV=`expr $2 / 16`
+ NUM=`expr $2 % 16`
+ if [ "$NUM" = "0" ]; then
+ makedev /dev/ataraid/d$DRV $1 $2
+ else
+ makedev /dev/ataraid/d${DRV}p$NUM $1 $2
+ fi
+}
+
+
+# Make AMI HyperRAID device:
+make_amiraid() {
+ if [ ! -d /dev/amiraid ]; then
+ mkdir /dev/amiraid
+ fi
+ # find drive
+ DRV=`expr $2 / 16`
+ NUM=`expr $2 % 16`
+ if [ "$NUM" = "0" ]; then
+ makedev /dev/amiraid/ar$DRV $1 $2
+ else
+ makedev /dev/amiraid/ar${DRV}p$NUM $1 $2
+ fi
+}
+
+if cat /proc/partitions | grep / 1> /dev/null 2> /dev/null ; then # new
+ cat /proc/partitions | grep / | while read line ; do
+ SMASHED_LINE=$line
+ MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
+ MINOR=`echo $SMASHED_LINE | cut -f 2 -d ' '`
+ if [ "$MAJOR" = "3" ]; then
+ make_ide $MAJOR $MINOR hda hdb
+ elif [ "$MAJOR" = "8" ]; then
+ make_scsi $MINOR
+ elif [ "$MAJOR" = "22" ]; then
+ make_ide $MAJOR $MINOR hdc hdd
+ elif [ "$MAJOR" = "33" ]; then
+ make_ide $MAJOR $MINOR hde hdf
+ elif [ "$MAJOR" = "34" ]; then
+ make_ide $MAJOR $MINOR hdg hdh
+ elif [ "$MAJOR" = "48" ]; then
+ make_rd 0 $MAJOR $MINOR
+ elif [ "$MAJOR" = "49" ]; then
+ make_rd 1 $MAJOR $MINOR
+ elif [ "$MAJOR" = "50" ]; then
+ make_rd 2 $MAJOR $MINOR
+ elif [ "$MAJOR" = "51" ]; then
+ make_rd 3 $MAJOR $MINOR
+ elif [ "$MAJOR" = "52" ]; then
+ make_rd 4 $MAJOR $MINOR
+ elif [ "$MAJOR" = "53" ]; then
+ make_rd 5 $MAJOR $MINOR
+ elif [ "$MAJOR" = "54" ]; then
+ make_rd 6 $MAJOR $MINOR
+ elif [ "$MAJOR" = "55" ]; then
+ make_rd 7 $MAJOR $MINOR
+ elif [ "$MAJOR" = "56" ]; then
+ make_ide $MAJOR $MINOR hdi hdj
+ elif [ "$MAJOR" = "57" ]; then
+ make_ide $MAJOR $MINOR hdk hdl
+ elif [ "$MAJOR" = "72" ]; then
+ make_ida 0 $MAJOR $MINOR
+ elif [ "$MAJOR" = "73" ]; then
+ make_ida 1 $MAJOR $MINOR
+ elif [ "$MAJOR" = "74" ]; then
+ make_ida 2 $MAJOR $MINOR
+ elif [ "$MAJOR" = "75" ]; then
+ make_ida 3 $MAJOR $MINOR
+ elif [ "$MAJOR" = "76" ]; then
+ make_ida 4 $MAJOR $MINOR
+ elif [ "$MAJOR" = "77" ]; then
+ make_ida 5 $MAJOR $MINOR
+ elif [ "$MAJOR" = "78" ]; then
+ make_ida 6 $MAJOR $MINOR
+ elif [ "$MAJOR" = "79" ]; then
+ make_ida 7 $MAJOR $MINOR
+ elif [ "$MAJOR" = "88" ]; then
+ make_ide $MAJOR $MINOR hdm hdn
+ elif [ "$MAJOR" = "89" ]; then
+ make_ide $MAJOR $MINOR hdo hdp
+ elif [ "$MAJOR" = "90" ]; then
+ make_ide $MAJOR $MINOR hdq hdr
+ elif [ "$MAJOR" = "91" ]; then
+ make_ide $MAJOR $MINOR hds hdt
+ elif [ "$MAJOR" = "101" ]; then
+ make_amiraid $MAJOR $MINOR
+ elif [ "$MAJOR" = "104" ]; then
+ make_cciss 0 $MAJOR $MINOR
+ elif [ "$MAJOR" = "105" ]; then
+ make_cciss 1 $MAJOR $MINOR
+ elif [ "$MAJOR" = "106" ]; then
+ make_cciss 2 $MAJOR $MINOR
+ elif [ "$MAJOR" = "107" ]; then
+ make_cciss 3 $MAJOR $MINOR
+ elif [ "$MAJOR" = "108" ]; then
+ make_cciss 4 $MAJOR $MINOR
+ elif [ "$MAJOR" = "109" ]; then
+ make_cciss 5 $MAJOR $MINOR
+ elif [ "$MAJOR" = "110" ]; then
+ make_cciss 6 $MAJOR $MINOR
+ elif [ "$MAJOR" = "111" ]; then
+ make_cciss 7 $MAJOR $MINOR
+ elif [ "$MAJOR" = "114" ]; then
+ make_ataraid $MAJOR $MINOR
+ fi
+ done
+else # old format
+ cat /proc/partitions | grep d | while read line ; do
+ SMASHED_LINE=$line
+ MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
+ MINOR=`echo $SMASHED_LINE | cut -f 2 -d ' '`
+ DEVNAME=`echo $SMASHED_LINE | cut -f 4 -d ' '`
+ makedev /dev/$DEVNAME $MAJOR $MINOR
+ done
+fi
diff --git a/source/installer/sources/initrd/dev/mknodes.sh b/source/installer/sources/initrd/dev/mknodes.sh
new file mode 100755
index 000000000..005e7bd5f
--- /dev/null
+++ b/source/installer/sources/initrd/dev/mknodes.sh
@@ -0,0 +1,416 @@
+# Run this script in the root of the skeleton tree
+# to re-create the required device nodes
+mkdir -p dev
+mknod -m 600 dev/tty3 c 4 3
+mkdir -p dev
+mknod -m 660 dev/hdj b 56 64
+mkdir -p dev
+mknod -m 660 dev/hdt b 91 64
+mkdir -p dev
+mknod -m 660 dev/md15 b 9 15
+mkdir -p dev
+mknod -m 640 dev/sr4 b 11 4
+mkdir -p dev
+mknod -m 644 dev/ptyp2 c 2 2
+mkdir -p dev
+mknod -m 640 dev/cdu535 b 24 0
+mkdir -p dev
+mknod -m 600 dev/tcp c 18 3
+mkdir -p dev
+mknod -m 644 dev/psaux c 10 1
+mkdir -p dev
+mknod -m 640 dev/sjcd b 18 0
+mkdir -p dev
+mknod -m 644 dev/tty9 c 4 9
+mkdir -p dev
+mknod -m 640 dev/fd1h1200 b 2 9
+mkdir -p dev
+mknod -m 600 dev/sgb c 21 1
+mkdir -p dev
+mknod -m 640 dev/rmt16 c 12 8
+mkdir -p dev
+mknod -m 640 dev/ttyS0 c 4 64
+mkdir -p dev
+mknod -m 660 dev/hdn b 88 64
+mkdir -p dev
+mknod -m 640 dev/fd0h1200 b 2 8
+mkdir -p dev
+mknod -m 600 dev/ip c 18 1
+mkdir -p dev
+mknod -m 640 dev/fd1h1440 b 2 41
+mkdir -p dev
+mknod -m 700 dev/tty1 c 4 1
+mkdir -p dev
+mknod -m 640 dev/tape-reset c 12 255
+mkdir -p dev
+mknod -m 640 dev/eda1 b 36 1
+mkdir -p dev
+mknod -m 640 dev/cm206cd b 32 0
+mkdir -p dev
+mknod -m 660 dev/parport3 c 99 3
+mkdir -p dev
+mknod -m 640 dev/sr1 b 11 1
+mkdir -p dev
+mknod -m 660 dev/hdo b 89 0
+mkdir -p dev
+mknod -m 640 dev/tape-d c 12 136
+mkdir -p dev
+mknod -m 660 dev/hdq b 90 0
+mkdir -p dev
+mknod -m 640 dev/st1 c 9 1
+mkdir -p dev
+mknod -m 640 dev/optcd0 b 17 0
+mkdir -p dev
+mknod -m 640 dev/sr3 b 11 3
+mkdir -p dev
+mknod -m 640 dev/cua0 c 5 64
+mkdir -p dev
+mknod -m 644 dev/urandom c 1 9
+mkdir -p dev
+mknod -m 644 dev/tty c 5 0
+mkdir -p dev
+mknod -m 640 dev/fd0 b 2 0
+mkdir -p dev
+mknod -m 640 dev/eda b 36 0
+mkdir -p dev
+mknod -m 640 dev/eda5 b 36 5
+mkdir -p dev
+mknod -m 660 dev/md2 b 9 2
+mkdir -p dev
+mknod -m 600 dev/tty2 c 4 2
+mkdir -p dev
+mknod -m 644 dev/ptyp4 c 2 4
+mkdir -p dev
+mknod -m 600 dev/console c 5 1
+mkdir -p dev
+mknod -m 660 dev/md1 b 9 1
+mkdir -p dev
+mknod -m 640 dev/par0 c 6 0
+mkdir -p dev
+mknod -m 644 dev/tty7 c 4 7
+mkdir -p dev
+mknod -m 644 dev/random c 1 8
+mkdir -p dev
+mknod -m 640 dev/par2 c 6 2
+mkdir -p dev
+mknod -m 640 dev/lmscd b 24 0
+mkdir -p dev
+mknod -m 640 dev/sr0 b 11 0
+mkdir -p dev
+mknod -m 640 dev/eda8 b 36 8
+mkdir -p dev
+mknod -m 660 dev/hdh b 34 64
+mkdir -p dev
+mknod -m 640 dev/sbpcd0 b 25 0
+mkdir -p dev
+mknod -m 660 dev/hdm b 88 0
+mkdir -p dev
+mknod -m 640 dev/pf2 b 47 2
+mkdir -p dev
+mknod -m 640 dev/cua2 c 5 66
+mkdir -p dev
+mknod -m 600 dev/sga c 21 0
+mkdir -p dev
+mknod -m 640 dev/pda5 b 45 5
+mkdir -p dev
+mknod -m 640 dev/ttyS2 c 4 66
+mkdir -p dev
+mknod -m 640 dev/mcdx1 b 20 1
+mkdir -p dev
+mknod -m 644 dev/ttyp4 c 3 4
+mkdir -p dev
+mknod -m 640 dev/kmem c 1 2
+mkdir -p dev
+mknod -m 640 dev/eda2 b 36 2
+mkdir -p dev
+mknod -m 644 dev/ttyp8 c 3 8
+mkdir -p dev
+mknod -m 600 dev/icmp c 18 2
+mkdir -p dev
+mknod -m 640 dev/scd4 b 11 4
+mkdir -p dev
+mknod -m 660 dev/md13 b 9 13
+mkdir -p dev
+mknod -m 640 dev/sbpcd1 b 25 1
+mkdir -p dev
+mknod -m 640 dev/pcd0 b 46 0
+mkdir -p dev
+mknod -m 640 dev/rmt8 c 12 6
+mkdir -p dev
+mknod -m 660 dev/hdc b 22 0
+mkdir -p dev
+mknod -m 644 dev/logibm c 10 0
+mkdir -p dev
+mknod -m 640 dev/scd1 b 11 1
+mkdir -p dev
+mknod -m 660 dev/md10 b 9 10
+mkdir -p dev
+mknod -m 660 dev/hds b 91 0
+mkdir -p dev
+mknod -m 660 dev/hdl b 57 64
+mkdir -p dev
+mknod -m 644 dev/socksys c 30 0
+mkdir -p dev
+mknod -m 600 dev/tty6 c 4 6
+mkdir -p dev
+mknod -m 660 dev/loop1 b 7 1
+mkdir -p dev
+mknod -m 640 dev/bpcd b 41 0
+mkdir -p dev
+mknod -m 660 dev/md3 b 9 3
+mkdir -p dev
+mknod -m 640 dev/scd0 b 11 0
+mkdir -p dev
+mknod -m 644 dev/ptyp3 c 2 3
+mkdir -p dev
+mknod -m 640 dev/pf0 b 47 0
+mkdir -p dev
+mknod -m 640 dev/gscd0 b 16 0
+mkdir -p dev
+mknod -m 640 dev/fd0h1440 b 2 40
+mkdir -p dev
+mknod -m 660 dev/hdi b 56 0
+mkdir -p dev
+mknod -m 640 dev/cua4 c 5 68
+mkdir -p dev
+mknod -m 660 dev/md12 b 9 12
+mkdir -p dev
+mknod -m 660 dev/md8 b 9 8
+mkdir -p dev
+mknod -m 640 dev/scd2 b 11 2
+mkdir -p dev
+mknod -m 640 dev/mcdx0 b 20 0
+mkdir -p dev
+mknod -m 640 dev/sbpcd b 25 0
+mkdir -p dev
+mknod -m 660 dev/md5 b 9 5
+mkdir -p dev
+mknod -m 600 dev/sgd c 21 3
+mkdir -p dev
+mknod -m 644 dev/atibm c 10 3
+mkdir -p dev
+mknod -m 644 dev/ptyp6 c 2 6
+mkdir -p dev
+mknod -m 644 dev/null c 1 3
+mkdir -p dev
+mknod -m 600 dev/udp c 18 4
+mkdir -p dev
+mknod -m 660 dev/md9 b 9 9
+mkdir -p dev
+mknod -m 660 dev/fd0u1680 b 2 44
+mkdir -p dev
+mknod -m 640 dev/port c 1 4
+mkdir -p dev
+mknod -m 640 dev/rft0 c 27 0
+mkdir -p dev
+mknod -m 640 dev/st0 c 9 0
+mkdir -p dev
+mknod -m 640 dev/ram1 b 1 1
+mkdir -p dev/input
+mknod -m 644 dev/input/mice c 13 63
+mkdir -p dev/input
+mknod -m 660 dev/input/keyboard c 10 150
+mkdir -p dev/input
+mknod -m 644 dev/input/event0 c 13 64
+mkdir -p dev/input
+mknod -m 660 dev/input/mouse c 10 149
+mkdir -p dev/input
+mknod -m 644 dev/input/js0 c 13 0
+mkdir -p dev/input
+mknod -m 644 dev/input/mouse0 c 13 32
+mkdir -p dev
+mknod -m 640 dev/eda6 b 36 6
+mkdir -p dev
+mknod -m 640 dev/pcd3 b 46 3
+mkdir -p dev
+mknod -m 640 dev/pf3 b 47 3
+mkdir -p dev
+mknod -m 640 dev/pcd2 b 46 2
+mkdir -p dev
+mknod -m 640 dev/cua1 c 5 65
+mkdir -p dev
+mknod -m 644 dev/zero c 1 5
+mkdir -p dev
+mknod -m 660 dev/parport2 c 99 2
+mkdir -p dev
+mknod -m 644 dev/inportbm c 10 2
+mkdir -p dev
+mknod -m 644 dev/tty8 c 4 8
+mkdir -p dev
+mknod -m 640 dev/sonycd b 15 0
+mkdir -p dev
+mknod -m 600 dev/arp c 16 1
+mkdir -p dev
+mknod -m 600 dev/sgf c 21 5
+mkdir -p dev
+mknod -m 644 dev/full c 1 7
+mkdir -p dev
+mknod -m 600 dev/sge c 21 4
+mkdir -p dev
+mknod -m 644 dev/ptyp7 c 2 7
+mkdir -p dev
+mknod -m 660 dev/loop3 b 7 3
+mkdir -p dev
+mknod -m 640 dev/cua3 c 5 67
+mkdir -p dev
+mknod -m 644 dev/ptyp0 c 2 0
+mkdir -p dev
+mknod -m 600 dev/socket c 16 0
+mkdir -p dev
+mknod -m 640 dev/par1 c 6 1
+mkdir -p dev
+mknod -m 640 dev/nst0 c 9 128
+mkdir -p dev
+mknod -m 640 dev/pcd1 b 46 1
+mkdir -p dev
+mknod -m 700 dev/ttyp1 c 3 1
+mkdir -p dev
+mknod -m 600 dev/tty4 c 4 4
+mkdir -p dev
+mknod -m 640 dev/eda7 b 36 7
+mkdir -p dev
+mknod -m 660 dev/parport1 c 99 1
+mkdir -p dev
+mknod -m 600 dev/ttyp3 c 3 3
+mkdir -p dev
+mknod -m 640 dev/nrft0 c 27 4
+mkdir -p dev
+mknod -m 640 dev/ttyS4 c 4 68
+mkdir -p dev
+mknod -m 640 dev/ram0 b 1 0
+mkdir -p dev
+mknod -m 640 dev/nst1 c 9 129
+mkdir -p dev
+mknod -m 644 dev/audio c 14 4
+mkdir -p dev
+mknod -m 644 dev/ptyp8 c 2 8
+mkdir -p dev
+mknod -m 660 dev/loop4 b 7 4
+mkdir -p dev
+mknod -m 600 dev/tty5 c 4 5
+mkdir -p dev
+mknod -m 660 dev/md6 b 9 6
+mkdir -p dev
+mknod -m 640 dev/scd3 b 11 3
+mkdir -p dev
+mknod -m 640 dev/pda b 45 0
+mkdir -p dev
+mknod -m 644 dev/ptyp1 c 2 1
+mkdir -p dev
+mknod -m 640 dev/fd1u1440 b 2 29
+mkdir -p dev
+mknod -m 640 dev/eda4 b 36 4
+mkdir -p dev
+mknod -m 600 dev/sgc c 21 2
+mkdir -p dev
+mknod -m 640 dev/pda3 b 45 3
+mkdir -p dev
+mknod -m 660 dev/hdf b 33 64
+mkdir -p dev
+mknod -m 640 dev/ttyS1 c 4 65
+mkdir -p dev
+mknod -m 640 dev/pda6 b 45 6
+mkdir -p dev
+mknod -m 660 dev/md7 b 9 7
+mkdir -p dev
+mknod -m 640 dev/lp0 c 6 0
+mkdir -p dev
+mknod -m 640 dev/eda9 b 36 9
+mkdir -p dev
+mknod -m 660 dev/hde b 33 0
+mkdir -p dev
+mknod -m 660 dev/md4 b 9 4
+mkdir -p dev
+mknod -m 640 dev/mem c 1 1
+mkdir -p dev
+mknod -m 640 dev/fd1 b 2 1
+mkdir -p dev
+mknod -m 644 dev/ttyp7 c 3 7
+mkdir -p dev
+mknod -m 700 dev/ttyp2 c 3 2
+mkdir -p dev
+mknod -m 660 dev/hdg b 34 0
+mkdir -p dev
+mknod -m 660 dev/hdk b 57 0
+mkdir -p dev
+mknod -m 644 dev/spx c 30 1
+mkdir -p dev
+mknod -m 660 dev/md14 b 9 14
+mkdir -p dev
+mknod -m 600 dev/sgg c 21 6
+mkdir -p dev
+mknod -m 660 dev/hda b 3 0
+mkdir -p dev
+mknod -m 640 dev/mcd b 23 0
+mkdir -p dev
+mknod -m 640 dev/pda4 b 45 4
+mkdir -p dev/inet
+mknod -m 644 dev/inet/tcp c 30 36
+mkdir -p dev/inet
+mknod -m 644 dev/inet/ip c 30 32
+mkdir -p dev/inet
+mknod -m 644 dev/inet/icmp c 30 33
+mkdir -p dev/inet
+mknod -m 644 dev/inet/egp c 30 37
+mkdir -p dev/inet
+mknod -m 644 dev/inet/idp c 30 40
+mkdir -p dev/inet
+mknod -m 644 dev/inet/udp c 30 39
+mkdir -p dev/inet
+mknod -m 644 dev/inet/pup c 30 38
+mkdir -p dev/inet
+mknod -m 644 dev/inet/rawip c 30 41
+mkdir -p dev/inet
+mknod -m 644 dev/inet/ggp c 30 34
+mkdir -p dev/inet
+mknod -m 644 dev/inet/ipip c 30 35
+mkdir -p dev
+mknod -m 644 dev/ptyp5 c 2 5
+mkdir -p dev
+mknod -m 660 dev/hdb b 3 64
+mkdir -p dev
+mknod -m 660 dev/hdr b 90 64
+mkdir -p dev
+mknod -m 660 dev/hdd b 22 64
+mkdir -p dev
+mknod -m 640 dev/pda1 b 45 1
+mkdir -p dev
+mknod -m 640 dev/fd0u1440 b 2 28
+mkdir -p dev
+mknod -m 640 dev/eda3 b 36 3
+mkdir -p dev
+mknod -m 660 dev/fd0u1722 b 2 60
+mkdir -p dev
+mknod -m 600 dev/unix c 17 0
+mkdir -p dev
+mknod -m 640 dev/pf1 b 47 1
+mkdir -p dev
+mknod -m 640 dev/sr2 b 11 2
+mkdir -p dev
+mknod -m 660 dev/md0 b 9 0
+mkdir -p dev
+mknod -m 640 dev/aztcd b 29 0
+mkdir -p dev
+mknod -m 640 dev/pda2 b 45 2
+mkdir -p dev
+mknod -m 660 dev/parport0 c 99 0
+mkdir -p dev
+mknod -m 660 dev/loop0 b 7 0
+mkdir -p dev
+mknod -m 660 dev/md11 b 9 11
+mkdir -p dev
+mknod -m 640 dev/ttyS3 c 4 67
+mkdir -p dev
+mknod -m 644 dev/ttyp6 c 3 6
+mkdir -p dev
+mknod -m 600 dev/sgh c 21 7
+mkdir -p dev
+mknod -m 644 dev/audio1 c 14 20
+mkdir -p dev
+mknod -m 660 dev/hdp b 89 64
+mkdir -p dev
+mknod -m 644 dev/ttyp0 c 3 0
+mkdir -p dev
+mknod -m 600 dev/tty0 c 4 0
+mkdir -p dev
+mknod -m 644 dev/ttyp5 c 3 5
diff --git a/source/installer/sources/initrd/etc/DIR_COLORS b/source/installer/sources/initrd/etc/DIR_COLORS
new file mode 100644
index 000000000..13a21dfc0
--- /dev/null
+++ b/source/installer/sources/initrd/etc/DIR_COLORS
@@ -0,0 +1,166 @@
+# Configuration file for dircolors, a utility to help you set the
+# LS_COLORS environment variable used by GNU ls with the --color option.
+
+# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
+# slackware version of dircolors) are recognized but ignored.
+# (see the scripts in /etc/profile.d/coreutils-dircolors.* to change default
+# options in the Slackware aliases)
+
+# Below, there should be one TERM entry for each termtype that is colorizable
+TERM linux
+TERM linux-c
+TERM mach-color
+TERM console
+TERM con132x25
+TERM con132x30
+TERM con132x43
+TERM con132x60
+TERM con80x25
+TERM con80x28
+TERM con80x30
+TERM con80x43
+TERM con80x50
+TERM con80x60
+TERM cygwin
+TERM dtterm
+TERM putty
+TERM xterm
+TERM xterm-color
+TERM xterm-debian
+TERM rxvt
+TERM screen
+TERM screen-bce
+TERM screen-w
+TERM vt100
+TERM Eterm
+
+# Below are the color init strings for the basic file types. A color init
+# string consists of one or more of the following numeric codes:
+# Attribute codes:
+# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
+# Text color codes:
+# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
+# Background color codes:
+# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
+NORMAL 00 # global default, although everything should be something.
+FILE 00 # normal file
+DIR 01;34 # directory
+LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
+ # numerical value, the color is as for the file pointed to.)
+FIFO 40;33 # pipe
+SOCK 01;35 # socket
+DOOR 01;35 # door
+BLK 40;33;01 # block device driver
+CHR 40;33;01 # character device driver
+ORPHAN 40;31;01 # symlink to nonexistent file
+SETUID 37;41 # file that is setuid (u+s)
+SETGID 30;43 # file that is setgid (g+s)
+STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
+OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
+STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
+EXEC 01;32 # This is for files with execute permission:
+
+# List any file extensions like '.gz' or '.tar' that you would like ls
+# to colorize below. Put the extension, a space, and the color init string.
+# (and any comments you want to add after a '#')
+
+# DOS-style executables (bright green)
+.bat 01;32
+.BAT 01;32
+.btm 01;32
+.BTM 01;32
+.cmd 01;32
+.CMD 01;32
+.com 01;32
+.COM 01;32
+.dll 01;32
+.DLL 01;32
+.exe 01;32
+.EXE 01;32
+
+# archives or compressed (bright red)
+.arj 01;31
+.bz2 01;31
+.deb 01;31
+.gz 01;31
+.lzh 01;31
+.rar 01;31
+.RAR 01;31
+.rpm 01;31
+.tar 01;31
+.taz 01;31
+.tb2 01;31
+.tbz2 01;31
+.tbz 01;31
+.tgz 01;31
+.tz2 01;31
+.z 01;31
+.Z 01;31
+.zip 01;31
+.ZIP 01;31
+.zoo 01;31
+
+# multimedia (video/image/sound) file formats
+.asf 01;35
+.ASF 01;35
+.avi 01;35
+.AVI 01;35
+.bmp 01;35
+.BMP 01;35
+.flac 01;35
+.FLAC 01;35
+.gif 01;35
+.GIF 01;35
+.jpg 01;35
+.JPG 01;35
+.jpeg 01;35
+.JPEG 01;35
+.m2a 01;35
+.M2A 01;35
+.m2v 01;35
+.M2V 01;35
+.m4a 01;35
+.M4A 01;35
+.m4p 01;35
+.M4P 01;35
+.m4v 01;35
+.M4V 01;35
+.mov 01;35
+.MOV 01;35
+.mp3 01;35
+.MP3 01;35
+.mpc 01;35
+.MPC 01;35
+.mpeg 01;35
+.MPEG 01;35
+.mpg 01;35
+.MPG 01;35
+.ogg 01;35
+.OGG 01;35
+.pbm 01;35
+.pgm 01;35
+.png 01;35
+.PNG 01;35
+.ppm 01;35
+.ram 01;35
+.RAM 01;35
+.rm 01;35
+.RM 01;35
+.tga 01;35
+.TGA 01;35
+.tif 01;35
+.TIF 01;35
+.tiff 01;35
+.TIFF 01;35
+.wav 01;35
+.WAV 01;35
+.wma 01;35
+.WMA 01;35
+.wmv 01;35
+.WMV 01;35
+.xbm 01;35
+.xcf 01;35
+.xpm 01;35
+.xwd 01;35
+.XWD 01;35
+
diff --git a/source/installer/sources/initrd/etc/HOSTNAME b/source/installer/sources/initrd/etc/HOSTNAME
new file mode 100644
index 000000000..23169fd62
--- /dev/null
+++ b/source/installer/sources/initrd/etc/HOSTNAME
@@ -0,0 +1 @@
+slackware.example.net
diff --git a/source/installer/sources/initrd/etc/dhcpc/dhcpcd.exe-sample b/source/installer/sources/initrd/etc/dhcpc/dhcpcd.exe-sample
new file mode 100755
index 000000000..f49cffdd0
--- /dev/null
+++ b/source/installer/sources/initrd/etc/dhcpc/dhcpcd.exe-sample
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# This is a sample /etc/dhcpc/dhcpcd.exe script.
+# /etc/dhcpc/dhcpcd.exe 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 "/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;
+# $2 = "new" if interface has been configured with new IP address;
+# $3 (optional) = "-d" debug flag passed if dhcpcd daemon has been
+# invoked with "-d" flag
+#
+# Sanity checks
+
+if [ $# -lt 2 ]; then
+ logger -s -p local0.err -t dhcpcd.exe "wrong usage"
+ exit 1
+fi
+
+hostinfo="$1"
+state="$2"
+debug="$3"
+
+# Reading HostInfo file for configuration parameters
+. "${hostinfo}"
+
+case "${state}" in
+ up)
+ logger -s -p local0.info -t dhcpcd.exe \
+ "interface ${INTERFACE} has been configured with old IP=${IPADDR}"
+ # Put your code here for when the interface has been brought up with an
+ # old IP address here
+ ;;
+
+ new)
+ logger -s -p local0.info -t dhcpcd.exe \
+ "interface ${INTERFACE} has been configured with new IP=${IPADDR}"
+ # Put your code here for when the interface has been brought up with a
+ # new IP address
+ ;;
+
+ down) logger -s -p local0.info -t dhcpcd.exe \
+ "interface ${INTERFACE} has been brought down"
+ # Put your code here for the when the interface has been shut down
+ ;;
+esac
+exit 0
diff --git a/source/installer/sources/initrd/etc/disk2 b/source/installer/sources/initrd/etc/disk2
new file mode 100644
index 000000000..6a80aac22
--- /dev/null
+++ b/source/installer/sources/initrd/etc/disk2
@@ -0,0 +1,7 @@
+Hi there. :-)
+
+This file is used to determine if the second install "disk"
+is already loaded or not... if it's not found in /etc, then
+the boot scripts will ask you to insert the second install
+floppy.
+
diff --git a/source/installer/sources/initrd/etc/dnsmasq.conf b/source/installer/sources/initrd/etc/dnsmasq.conf
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/source/installer/sources/initrd/etc/dnsmasq.conf
diff --git a/source/installer/sources/initrd/etc/fstab b/source/installer/sources/initrd/etc/fstab
new file mode 100644
index 000000000..0fdb74a70
--- /dev/null
+++ b/source/installer/sources/initrd/etc/fstab
@@ -0,0 +1,3 @@
+devpts /dev/pts devpts gid=5,mode=620 0 0
+proc /proc proc defaults 0 0
+tmpfs /dev/shm tmpfs defaults 0 0
diff --git a/source/installer/sources/initrd/etc/group b/source/installer/sources/initrd/etc/group
new file mode 100644
index 000000000..8e9154a19
--- /dev/null
+++ b/source/installer/sources/initrd/etc/group
@@ -0,0 +1,44 @@
+root:x:0:root
+bin:x:1:root,bin
+daemon:x:2:root,bin,daemon
+sys:x:3:root,bin,adm
+adm:x:4:root,adm,daemon
+tty:x:5:
+disk:x:6:root,adm
+lp:x:7:lp
+mem:x:8:
+kmem:x:9:
+wheel:x:10:root
+floppy:x:11:root
+mail:x:12:mail
+news:x:13:news
+uucp:x:14:uucp
+man:x:15:
+dialout:x:16:uucp
+audio:x:17:root
+video:x:18:root
+cdrom:x:19:root
+games:x:20:
+slocate:x:21:
+utmp:x:22:
+smmsp:x:25:smmsp
+tape:x:26:root
+mysql:x:27:
+rpc:x:32:
+sshd:x:33:sshd
+gdm:x:42:
+shadow:x:43:
+ftp:x:50:
+oprofile:x:51:
+apache:x:80:
+messagebus:x:81:
+haldaemon:x:82:
+plugdev:x:83:root
+power:x:84:
+netdev:x:86:
+pop:x:90:pop
+scanner:x:93:
+nobody:x:98:nobody
+nogroup:x:99:
+users:x:100:
+console:x:101:
diff --git a/source/installer/sources/initrd/etc/host.conf b/source/installer/sources/initrd/etc/host.conf
new file mode 100644
index 000000000..a659e913a
--- /dev/null
+++ b/source/installer/sources/initrd/etc/host.conf
@@ -0,0 +1,2 @@
+order hosts, bind
+multi on
diff --git a/source/installer/sources/initrd/etc/hosts b/source/installer/sources/initrd/etc/hosts
new file mode 100644
index 000000000..bc4ad4f13
--- /dev/null
+++ b/source/installer/sources/initrd/etc/hosts
@@ -0,0 +1,21 @@
+#
+# hosts This file describes a number of hostname-to-address
+# mappings for the TCP/IP subsystem. It is mostly
+# used at boot time, when no name servers are running.
+# On small systems, this file can be used instead of a
+# "named" name server. Just add the names, addresses
+# and any aliases to this file...
+#
+# By the way, Arnt Gulbrandsen <agulbra@nvg.unit.no> says that 127.0.0.1
+# should NEVER be named with the name of the machine. It causes problems
+# for some (stupid) programs, irc and reputedly talk. :^)
+#
+
+# For loopbacking.
+127.0.0.1 localhost
+# This next entry is technically wrong, but good enough to get TCP/IP apps
+# to quit complaining that they can't verify the hostname on a loopback-only
+# Linux box.
+127.0.0.1 slackware.example.net slackware
+
+# End of hosts.
diff --git a/source/installer/sources/initrd/etc/inittab b/source/installer/sources/initrd/etc/inittab
new file mode 100644
index 000000000..2695f00e0
--- /dev/null
+++ b/source/installer/sources/initrd/etc/inittab
@@ -0,0 +1,40 @@
+# /etc/inittab
+# Boot-time system configuration/initialization script.
+# This is run first except when booting in single-user mode.
+::sysinit:/etc/rc.d/rc.S
+
+# Login /bin/sh invocations on selected ttys.
+#
+# Start a shell on the console
+::respawn:-/bin/sh
+# Start an "askfirst" shell on tty2 and tty3
+tty2::askfirst:-/bin/sh
+tty3::askfirst:-/bin/sh
+
+# /sbin/getty invocations for selected ttys.
+#
+#tty1::respawn:/sbin/getty 38400 tty1
+#tty2::respawn:/sbin/getty 38400 tty2
+
+# Example of how to put a getty on a serial line (for a terminal)
+#
+#ttyS0::respawn:/sbin/getty -L ttyS0 9600 vt100
+#ttyS1::respawn:/sbin/getty -L ttyS1 9600 vt100
+#
+# Example how to put a getty on a modem line.
+#ttyS2::respawn:/sbin/getty -x0 -s 57600 ttyS2
+
+# Reboot when ctrl-alt-del keys are pressed.
+::ctrlaltdel:/sbin/reboot
+#::ctrlaltdel:/sbin/brc
+
+# Stuff to do before halting or rebooting.
+# Hopefully it does these things in order, so that we can fake the
+# system date one last time before umounting:
+::shutdown:/bin/sh /sbin/fakedate
+::shutdown:/sbin/swapoff -a >/dev/null 2>&1
+::shutdown:/bin/umount -a -r >/dev/null 2>&1
+::shutdown:/sbin/vgchange -an --ignorelockingfailure >/dev/null 2>&1
+# Otherwise SSH logins are left lingering:
+::shutdown:/bin/killall dropbear > /dev/null 2>&1
+::shutdown:/bin/sh /sbin/fixdate
diff --git a/source/installer/sources/initrd/etc/installer b/source/installer/sources/initrd/etc/installer
new file mode 100644
index 000000000..e2af85b91
--- /dev/null
+++ b/source/installer/sources/initrd/etc/installer
@@ -0,0 +1 @@
+If /etc/installer exists, it's a cue to scripts that we're on the installer.
diff --git a/source/installer/sources/initrd/etc/issue b/source/installer/sources/initrd/etc/issue
new file mode 100644
index 000000000..8b2ac3360
--- /dev/null
+++ b/source/installer/sources/initrd/etc/issue
@@ -0,0 +1,25 @@
+
+
+
+
+Welcome to the Slackware Linux installation disk! (version 12.2)
+
+###### IMPORTANT! READ THE INFORMATION BELOW CAREFULLY. ######
+
+- You will need one or more partitions of type 'Linux' prepared. It is also
+ recommended that you create a swap partition (type 'Linux swap') prior
+ to installation. For more information, run 'setup' and read the help file.
+
+- If you're having problems that you think might be related to low memory, you
+ can try activating a swap partition before you run setup. After making a
+ swap partition (type 82) with cfdisk or fdisk, activate it like this:
+ mkswap /dev/<partition> ; swapon /dev/<partition>
+
+- Once you have prepared the disk partitions for Linux, type 'setup' to begin
+ the installation process.
+
+- If you do not have a color monitor, type: TERM=vt100
+ before you start 'setup'.
+
+You may now login as 'root'.
+
diff --git a/source/installer/sources/initrd/etc/keymaps.tar b/source/installer/sources/initrd/etc/keymaps.tar
new file mode 100644
index 000000000..2ae6004b7
--- /dev/null
+++ b/source/installer/sources/initrd/etc/keymaps.tar
Binary files differ
diff --git a/source/installer/sources/initrd/etc/ld.so.cache b/source/installer/sources/initrd/etc/ld.so.cache
new file mode 100644
index 000000000..ea1fb85b3
--- /dev/null
+++ b/source/installer/sources/initrd/etc/ld.so.cache
Binary files differ
diff --git a/source/installer/sources/initrd/etc/ld.so.conf b/source/installer/sources/initrd/etc/ld.so.conf
new file mode 100644
index 000000000..61b171c81
--- /dev/null
+++ b/source/installer/sources/initrd/etc/ld.so.conf
@@ -0,0 +1,2 @@
+/lib
+/usr/lib
diff --git a/source/installer/sources/initrd/etc/localtime b/source/installer/sources/initrd/etc/localtime
new file mode 100644
index 000000000..5583f5b0c
--- /dev/null
+++ b/source/installer/sources/initrd/etc/localtime
Binary files differ
diff --git a/source/installer/sources/initrd/etc/login.defs b/source/installer/sources/initrd/etc/login.defs
new file mode 100644
index 000000000..bcbdb2f0f
--- /dev/null
+++ b/source/installer/sources/initrd/etc/login.defs
@@ -0,0 +1,68 @@
+#
+# /etc/login.defs - Configuration control definitions for the login package.
+#
+# $Id: login.defs.linux,v 1.10 1999/03/07 19:14:33 marekm Exp $
+FAIL_DELAY 3
+DIALUPS_CHECK_ENAB yes
+FAILLOG_ENAB yes
+LOG_UNKFAIL_ENAB no
+LOG_OK_LOGINS no
+LASTLOG_ENAB yes
+MAIL_CHECK_ENAB no
+OBSCURE_CHECKS_ENAB yes
+PORTTIME_CHECKS_ENAB yes
+QUOTAS_ENAB yes
+SYSLOG_SU_ENAB yes
+SYSLOG_SG_ENAB yes
+CONSOLE /etc/securetty
+#CONSOLE console:tty01:tty02:tty03:tty04
+#SULOG_FILE /var/log/sulog
+MOTD_FILE /etc/motd
+#MOTD_FILE /etc/motd:/usr/lib/news/news-motd
+#ISSUE_FILE /etc/issue
+#TTYTYPE_FILE /etc/ttytype
+FTMP_FILE /var/log/btmp
+NOLOGINS_FILE /etc/nologin
+SU_NAME su
+#QMAIL_DIR Maildir
+MAIL_DIR /var/spool/mail
+#MAIL_FILE .mail
+HUSHLOGIN_FILE .hushlogin
+#HUSHLOGIN_FILE /etc/hushlogins
+NOLOGIN_STR NOLOGIN
+#ENV_TZ TZ=CST6CDT
+#ENV_TZ /etc/tzname
+ENV_HZ HZ=100
+#ENV_HZ HZ=1024
+ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/bin
+ENV_PATH PATH=/usr/local/bin:/bin:/usr/bin
+TTYGROUP tty
+TTYPERM 0620
+ERASECHAR 0177
+KILLCHAR 025
+UMASK 022
+#ULIMIT 2097152
+PASS_MAX_DAYS 99999
+PASS_MIN_DAYS 0
+PASS_MIN_LEN 5
+PASS_WARN_AGE 7
+SU_WHEEL_ONLY no
+#CRACKLIB_DICTPATH /var/cache/cracklib/cracklib_dict
+UID_MIN 1000
+UID_MAX 60000
+GID_MIN 100
+GID_MAX 60000
+LOGIN_RETRIES 5
+LOGIN_TIMEOUT 60
+PASS_CHANGE_TRIES 5
+PASS_ALWAYS_WARN yes
+#PASS_MAX_LEN 8
+CHFN_AUTH yes
+CHFN_RESTRICT frwh
+#LOGIN_STRING "%s's Password: "
+MD5_CRYPT_ENAB yes
+#CONSOLE_GROUPS floppy:audio:cdrom
+DEFAULT_HOME yes
+ENVIRON_FILE /etc/environment
+#USERDEL_CMD /usr/sbin/userdel_local
+#NO_PASSWORD_CONSOLE tty1:tty2:tty3:tty4:tty5:tty6
diff --git a/source/installer/sources/initrd/etc/lvm/lvm.conf b/source/installer/sources/initrd/etc/lvm/lvm.conf
new file mode 100644
index 000000000..16cefb2f1
--- /dev/null
+++ b/source/installer/sources/initrd/etc/lvm/lvm.conf
@@ -0,0 +1,411 @@
+# This is an example configuration file for the LVM2 system.
+# It contains the default settings that would be used if there was no
+# /etc/lvm/lvm.conf file.
+#
+# Refer to 'man lvm.conf' for further information including the file layout.
+#
+# To put this file in a different directory and override /etc/lvm set
+# the environment variable LVM_SYSTEM_DIR before running the tools.
+
+
+# This section allows you to configure which block devices should
+# be used by the LVM system.
+devices {
+
+ # Where do you want your volume groups to appear ?
+ dir = "/dev"
+
+ # An array of directories that contain the device nodes you wish
+ # to use with LVM2.
+ scan = [ "/dev" ]
+
+ # If several entries in the scanned directories correspond to the
+ # same block device and the tools need to display a name for device,
+ # all the pathnames are matched against each item in the following
+ # list of regular expressions in turn and the first match is used.
+ preferred_names = [ ]
+
+ # Try to avoid using undescriptive /dev/dm-N names, if present.
+ # preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" ]
+
+ # A filter that tells LVM2 to only use a restricted set of devices.
+ # The filter consists of an array of regular expressions. These
+ # expressions can be delimited by a character of your choice, and
+ # prefixed with either an 'a' (for accept) or 'r' (for reject).
+ # The first expression found to match a device name determines if
+ # the device will be accepted or rejected (ignored). Devices that
+ # don't match any patterns are accepted.
+
+ # Be careful if there there are symbolic links or multiple filesystem
+ # entries for the same device as each name is checked separately against
+ # the list of patterns. The effect is that if any name matches any 'a'
+ # pattern, the device is accepted; otherwise if any name matches any 'r'
+ # pattern it is rejected; otherwise it is accepted.
+
+ # Don't have more than one filter line active at once: only one gets used.
+
+ # Run vgscan after you change this parameter to ensure that
+ # the cache file gets regenerated (see below).
+ # If it doesn't do what you expect, check the output of 'vgscan -vvvv'.
+
+
+ # By default we accept every block device:
+ filter = [ "a/.*/" ]
+
+ # Exclude the cdrom drive
+ # filter = [ "r|/dev/cdrom|" ]
+
+ # When testing I like to work with just loopback devices:
+ # filter = [ "a/loop/", "r/.*/" ]
+
+ # Or maybe all loops and ide drives except hdc:
+ # filter =[ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ]
+
+ # Use anchors if you want to be really specific
+ # filter = [ "a|^/dev/hda8$|", "r/.*/" ]
+
+ # The results of the filtering are cached on disk to avoid
+ # rescanning dud devices (which can take a very long time).
+ # By default this cache is stored in the /etc/lvm/cache directory
+ # in a file called '.cache'.
+ # It is safe to delete the contents: the tools regenerate it.
+ # (The old setting 'cache' is still respected if neither of
+ # these new ones is present.)
+ cache_dir = "/etc/lvm/cache"
+ cache_file_prefix = ""
+
+ # You can turn off writing this cache file by setting this to 0.
+ write_cache_state = 1
+
+ # Advanced settings.
+
+ # List of pairs of additional acceptable block device types found
+ # in /proc/devices with maximum (non-zero) number of partitions.
+ # types = [ "fd", 16 ]
+
+ # If sysfs is mounted (2.6 kernels) restrict device scanning to
+ # the block devices it believes are valid.
+ # 1 enables; 0 disables.
+ sysfs_scan = 1
+
+ # By default, LVM2 will ignore devices used as components of
+ # software RAID (md) devices by looking for md superblocks.
+ # 1 enables; 0 disables.
+ md_component_detection = 1
+
+ # By default, if a PV is placed directly upon an md device, LVM2
+ # will align its data blocks with the the chunk_size exposed in sysfs.
+ # 1 enables; 0 disables.
+ md_chunk_alignment = 1
+
+ # If, while scanning the system for PVs, LVM2 encounters a device-mapper
+ # device that has its I/O suspended, it waits for it to become accessible.
+ # Set this to 1 to skip such devices. This should only be needed
+ # in recovery situations.
+ ignore_suspended_devices = 0
+}
+
+# This section that allows you to configure the nature of the
+# information that LVM2 reports.
+log {
+
+ # Controls the messages sent to stdout or stderr.
+ # There are three levels of verbosity, 3 being the most verbose.
+ verbose = 0
+
+ # Should we send log messages through syslog?
+ # 1 is yes; 0 is no.
+ syslog = 1
+
+ # Should we log error and debug messages to a file?
+ # By default there is no log file.
+ #file = "/var/log/lvm2.log"
+
+ # Should we overwrite the log file each time the program is run?
+ # By default we append.
+ overwrite = 0
+
+ # What level of log messages should we send to the log file and/or syslog?
+ # There are 6 syslog-like log levels currently in use - 2 to 7 inclusive.
+ # 7 is the most verbose (LOG_DEBUG).
+ level = 0
+
+ # Format of output messages
+ # Whether or not (1 or 0) to indent messages according to their severity
+ indent = 1
+
+ # Whether or not (1 or 0) to display the command name on each line output
+ command_names = 0
+
+ # A prefix to use before the message text (but after the command name,
+ # if selected). Default is two spaces, so you can see/grep the severity
+ # of each message.
+ prefix = " "
+
+ # To make the messages look similar to the original LVM tools use:
+ # indent = 0
+ # command_names = 1
+ # prefix = " -- "
+
+ # Set this if you want log messages during activation.
+ # Don't use this in low memory situations (can deadlock).
+ # activation = 0
+}
+
+# Configuration of metadata backups and archiving. In LVM2 when we
+# talk about a 'backup' we mean making a copy of the metadata for the
+# *current* system. The 'archive' contains old metadata configurations.
+# Backups are stored in a human readeable text format.
+backup {
+
+ # Should we maintain a backup of the current metadata configuration ?
+ # Use 1 for Yes; 0 for No.
+ # Think very hard before turning this off!
+ backup = 1
+
+ # Where shall we keep it ?
+ # Remember to back up this directory regularly!
+ backup_dir = "/etc/lvm/backup"
+
+ # Should we maintain an archive of old metadata configurations.
+ # Use 1 for Yes; 0 for No.
+ # On by default. Think very hard before turning this off.
+ archive = 1
+
+ # Where should archived files go ?
+ # Remember to back up this directory regularly!
+ archive_dir = "/etc/lvm/archive"
+
+ # What is the minimum number of archive files you wish to keep ?
+ retain_min = 10
+
+ # What is the minimum time you wish to keep an archive file for ?
+ retain_days = 30
+}
+
+# Settings for the running LVM2 in shell (readline) mode.
+shell {
+
+ # Number of lines of history to store in ~/.lvm_history
+ history_size = 100
+}
+
+
+# Miscellaneous global LVM2 settings
+global {
+
+ # The file creation mask for any files and directories created.
+ # Interpreted as octal if the first digit is zero.
+ umask = 077
+
+ # Allow other users to read the files
+ #umask = 022
+
+ # Enabling test mode means that no changes to the on disk metadata
+ # will be made. Equivalent to having the -t option on every
+ # command. Defaults to off.
+ test = 0
+
+ # Default value for --units argument
+ units = "h"
+
+ # Whether or not to communicate with the kernel device-mapper.
+ # Set to 0 if you want to use the tools to manipulate LVM metadata
+ # without activating any logical volumes.
+ # If the device-mapper kernel driver is not present in your kernel
+ # setting this to 0 should suppress the error messages.
+ activation = 1
+
+ # If we can't communicate with device-mapper, should we try running
+ # the LVM1 tools?
+ # This option only applies to 2.4 kernels and is provided to help you
+ # switch between device-mapper kernels and LVM1 kernels.
+ # The LVM1 tools need to be installed with .lvm1 suffices
+ # e.g. vgscan.lvm1 and they will stop working after you start using
+ # the new lvm2 on-disk metadata format.
+ # The default value is set when the tools are built.
+ # fallback_to_lvm1 = 0
+
+ # The default metadata format that commands should use - "lvm1" or "lvm2".
+ # The command line override is -M1 or -M2.
+ # Defaults to "lvm1" if compiled in, else "lvm2".
+ # format = "lvm1"
+
+ # Location of proc filesystem
+ proc = "/proc"
+
+ # Type of locking to use. Defaults to local file-based locking (1).
+ # Turn locking off by setting to 0 (dangerous: risks metadata corruption
+ # if LVM2 commands get run concurrently).
+ # Type 2 uses the external shared library locking_library.
+ # Type 3 uses built-in clustered locking.
+ locking_type = 1
+
+ # If using external locking (type 2) and initialisation fails,
+ # with this set to 1 an attempt will be made to use the built-in
+ # clustered locking.
+ # If you are using a customised locking_library you should set this to 0.
+ fallback_to_clustered_locking = 1
+
+ # If an attempt to initialise type 2 or type 3 locking failed, perhaps
+ # because cluster components such as clvmd are not running, with this set
+ # to 1 an attempt will be made to use local file-based locking (type 1).
+ # If this succeeds, only commands against local volume groups will proceed.
+ # Volume Groups marked as clustered will be ignored.
+ fallback_to_local_locking = 1
+
+ # Local non-LV directory that holds file-based locks while commands are
+ # in progress. A directory like /tmp that may get wiped on reboot is OK.
+ locking_dir = "/var/lock/lvm"
+
+ # Other entries can go here to allow you to load shared libraries
+ # e.g. if support for LVM1 metadata was compiled as a shared library use
+ # format_libraries = "liblvm2format1.so"
+ # Full pathnames can be given.
+
+ # Search this directory first for shared libraries.
+ # library_dir = "/lib"
+
+ # The external locking library to load if locking_type is set to 2.
+ # locking_library = "liblvm2clusterlock.so"
+}
+
+activation {
+ # How to fill in missing stripes if activating an incomplete volume.
+ # Using "error" will make inaccessible parts of the device return
+ # I/O errors on access. You can instead use a device path, in which
+ # case, that device will be used to in place of missing stripes.
+ # But note that using anything other than "error" with mirrored
+ # or snapshotted volumes is likely to result in data corruption.
+ missing_stripe_filler = "error"
+
+ # How much stack (in KB) to reserve for use while devices suspended
+ reserved_stack = 256
+
+ # How much memory (in KB) to reserve for use while devices suspended
+ reserved_memory = 8192
+
+ # Nice value used while devices suspended
+ process_priority = -18
+
+ # If volume_list is defined, each LV is only activated if there is a
+ # match against the list.
+ # "vgname" and "vgname/lvname" are matched exactly.
+ # "@tag" matches any tag set in the LV or VG.
+ # "@*" matches if any tag defined on the host is also set in the LV or VG
+ #
+ # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
+
+ # Size (in KB) of each copy operation when mirroring
+ mirror_region_size = 512
+
+ # Setting to use when there is no readahead value stored in the metadata.
+ #
+ # "none" - Disable readahead.
+ # "auto" - Use default value chosen by kernel.
+ readahead = "auto"
+
+ # 'mirror_image_fault_policy' and 'mirror_log_fault_policy' define
+ # how a device failure affecting a mirror is handled.
+ # A mirror is composed of mirror images (copies) and a log.
+ # A disk log ensures that a mirror does not need to be re-synced
+ # (all copies made the same) every time a machine reboots or crashes.
+ #
+ # In the event of a failure, the specified policy will be used to
+ # determine what happens:
+ #
+ # "remove" - Simply remove the faulty device and run without it. If
+ # the log device fails, the mirror would convert to using
+ # an in-memory log. This means the mirror will not
+ # remember its sync status across crashes/reboots and
+ # the entire mirror will be re-synced. If a
+ # mirror image fails, the mirror will convert to a
+ # non-mirrored device if there is only one remaining good
+ # copy.
+ #
+ # "allocate" - Remove the faulty device and try to allocate space on
+ # a new device to be a replacement for the failed device.
+ # Using this policy for the log is fast and maintains the
+ # ability to remember sync state through crashes/reboots.
+ # Using this policy for a mirror device is slow, as it
+ # requires the mirror to resynchronize the devices, but it
+ # will preserve the mirror characteristic of the device.
+ # This policy acts like "remove" if no suitable device and
+ # space can be allocated for the replacement.
+ # Currently this is not implemented properly and behaves
+ # similarly to:
+ #
+ # "allocate_anywhere" - Operates like "allocate", but it does not
+ # require that the new space being allocated be on a
+ # device is not part of the mirror. For a log device
+ # failure, this could mean that the log is allocated on
+ # the same device as a mirror device. For a mirror
+ # device, this could mean that the mirror device is
+ # allocated on the same device as another mirror device.
+ # This policy would not be wise for mirror devices
+ # because it would break the redundant nature of the
+ # mirror. This policy acts like "remove" if no suitable
+ # device and space can be allocated for the replacement.
+
+ mirror_log_fault_policy = "allocate"
+ mirror_device_fault_policy = "remove"
+}
+
+
+####################
+# Advanced section #
+####################
+
+# Metadata settings
+#
+# metadata {
+ # Default number of copies of metadata to hold on each PV. 0, 1 or 2.
+ # You might want to override it from the command line with 0
+ # when running pvcreate on new PVs which are to be added to large VGs.
+
+ # pvmetadatacopies = 1
+
+ # Approximate default size of on-disk metadata areas in sectors.
+ # You should increase this if you have large volume groups or
+ # you want to retain a large on-disk history of your metadata changes.
+
+ # pvmetadatasize = 255
+
+ # List of directories holding live copies of text format metadata.
+ # These directories must not be on logical volumes!
+ # It's possible to use LVM2 with a couple of directories here,
+ # preferably on different (non-LV) filesystems, and with no other
+ # on-disk metadata (pvmetadatacopies = 0). Or this can be in
+ # addition to on-disk metadata areas.
+ # The feature was originally added to simplify testing and is not
+ # supported under low memory situations - the machine could lock up.
+ #
+ # Never edit any files in these directories by hand unless you
+ # you are absolutely sure you know what you are doing! Use
+ # the supplied toolset to make changes (e.g. vgcfgrestore).
+
+ # dirs = [ "/etc/lvm/metadata", "/mnt/disk2/lvm/metadata2" ]
+#}
+
+# Event daemon
+#
+# dmeventd {
+ # mirror_library is the library used when monitoring a mirror device.
+ #
+ # "libdevmapper-event-lvm2mirror.so" attempts to recover from
+ # failures. It removes failed devices from a volume group and
+ # reconfigures a mirror as necessary. If no mirror library is
+ # provided, mirrors are not monitored through dmeventd.
+
+ # mirror_library = "libdevmapper-event-lvm2mirror.so"
+
+ # snapshot_library is the library used when monitoring a snapshot device.
+ #
+ # "libdevmapper-event-lvm2snapshot.so" monitors the filling of
+ # snapshots and emits a warning through syslog, when the use of
+ # snapshot exceedes 80%. The warning is repeated when 85%, 90% and
+ # 95% of the snapshot are filled.
+
+ # snapshot_library = "libdevmapper-event-lvm2snapshot.so"
+#}
+
diff --git a/source/installer/sources/initrd/etc/mdev.conf b/source/installer/sources/initrd/etc/mdev.conf
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/source/installer/sources/initrd/etc/mdev.conf
diff --git a/source/installer/sources/initrd/etc/mke2fs.conf b/source/installer/sources/initrd/etc/mke2fs.conf
new file mode 100644
index 000000000..3795b1ed6
--- /dev/null
+++ b/source/installer/sources/initrd/etc/mke2fs.conf
@@ -0,0 +1,44 @@
+[defaults]
+ base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
+ blocksize = 4096
+ inode_size = 256
+ inode_ratio = 16384
+
+[fs_types]
+ ext3 = {
+ features = has_journal
+ }
+ ext4 = {
+ features = has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
+ inode_size = 256
+ }
+ ext4dev = {
+ features = has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
+ inode_size = 256
+ options = test_fs=1
+ }
+ small = {
+ blocksize = 1024
+ inode_size = 128
+ inode_ratio = 4096
+ }
+ floppy = {
+ blocksize = 1024
+ inode_size = 128
+ inode_ratio = 8192
+ }
+ news = {
+ inode_ratio = 4096
+ }
+ largefile = {
+ inode_ratio = 1048576
+ blocksize = -1
+ }
+ largefile4 = {
+ inode_ratio = 4194304
+ blocksize = -1
+ }
+ hurd = {
+ blocksize = 4096
+ inode_size = 128
+ }
diff --git a/source/installer/sources/initrd/etc/motd b/source/installer/sources/initrd/etc/motd
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/source/installer/sources/initrd/etc/motd
diff --git a/source/installer/sources/initrd/etc/mtab b/source/installer/sources/initrd/etc/mtab
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/source/installer/sources/initrd/etc/mtab
diff --git a/source/installer/sources/initrd/etc/mtools.conf b/source/installer/sources/initrd/etc/mtools.conf
new file mode 100644
index 000000000..b528c01d6
--- /dev/null
+++ b/source/installer/sources/initrd/etc/mtools.conf
@@ -0,0 +1,64 @@
+# Example mtools.conf files. Uncomment the lines which correspond to
+# your architecture and comment out the "SAMPLE FILE" line below
+#SAMPLE FILE
+
+# # Linux floppy drives
+drive a: file="/dev/fd0" exclusive
+drive b: file="/dev/fd1" exclusive
+
+# # First SCSI hard disk partition
+# drive c: file="/dev/sda1"
+
+# # First IDE hard disk partition
+# drive c: file="/dev/hda1"
+
+# # dosemu floppy image
+# drive m: file="/var/lib/dosemu/diskimage"
+
+# # dosemu hdimage
+# drive n: file="/var/lib/dosemu/diskimage" offset=3840
+
+# # Atari ramdisk image
+# drive o: file="/tmp/atari_rd" offset=136
+
+# # ZIP disk for Solaris:
+# Drive X is ZIP-100 at target 5
+# drive X: file="/dev/rdsk/c0t5d0s2" partition=4 scsi=1 nodelay
+
+# # ZIP disk for SunOS:
+# # Zip drive is at target 5, which default kernel calls tape st1 !!
+# drive Y: file="/dev/rsd5c" partition=4 scsi=1 nodelay
+
+# # autoselect zip drive/floppy on HP-UX 9/10
+# drive a: file="/dev/rdsk/c201d5" exclusive partition=4
+# drive a: file="/dev/rdsk/c201d5s0" exclusive partition=4
+# drive a: file="/dev/rfloppy/c201d0s0" exclusive
+
+# A/UX target 5 on 1st scsi bus jaz or zip
+# drive X: file="/dev/rdsk/c105d0s31" partition=4
+
+
+# Some examples for BeOS.
+# floppy drive. hardcoded in devices.c, so no real need to define it here
+#drive a: file="/dev/floppy_disk" exclusive
+# ZIP drive on SCSI ID 6
+#drive z: file="/dev/scsi_disk_060" offset=16384 fat_bits=16
+
+# SCO Unix 3.2v4
+# # Floppy disk drives
+#
+# drive a: file="/dev/install" exclusive
+# drive b: file="/dev/install1" exclusive
+#
+# # SCSI hard disk partitions
+#
+# drive c: file="/dev/dsk/0sC"
+# drive d: file="/dev/dsk/0sD"
+# drive e: file="/dev/dsk/0sE"
+# drive f: file="/dev/dsk/0sF"
+# drive g: file="/dev/dsk/0sG"
+# drive h: file="/dev/dsk/0sH"
+
+# # uncomment the following line to display all file names in lower
+# # case by default
+# mtools_lower_case=1
diff --git a/source/installer/sources/initrd/etc/networks b/source/installer/sources/initrd/etc/networks
new file mode 100644
index 000000000..50d5162ee
--- /dev/null
+++ b/source/installer/sources/initrd/etc/networks
@@ -0,0 +1,10 @@
+#
+# networks This file describes a number of netname-to-address
+# mappings for the TCP/IP subsystem. It is mostly
+# used at boot time, when no name servers are running.
+#
+
+loopback 127.0.0.0
+localnet 127.0.0.0
+
+# End of networks.
diff --git a/source/installer/sources/initrd/etc/nsswitch.conf b/source/installer/sources/initrd/etc/nsswitch.conf
new file mode 100644
index 000000000..b21796bba
--- /dev/null
+++ b/source/installer/sources/initrd/etc/nsswitch.conf
@@ -0,0 +1,42 @@
+#
+# /etc/nsswitch.conf
+#
+# An example Name Service Switch config file. This file should be
+# sorted with the most-used services at the beginning.
+#
+# The entry '[NOTFOUND=return]' means that the search for an
+# entry should stop if the search in the previous entry turned
+# up nothing. Note that if the search failed due to some other reason
+# (like no NIS server responding) then the search continues with the
+# next entry.
+#
+# Legal entries are:
+#
+# nisplus or nis+ Use NIS+ (NIS version 3)
+# nis or yp Use NIS (NIS version 2), also called YP
+# dns Use DNS (Domain Name Service)
+# files Use the local files
+# [NOTFOUND=return] Stop searching if not found so far
+#
+
+passwd: files
+shadow: files
+group: files
+
+hosts: files dns
+
+services: [NOTFOUND=return] files
+networks: [NOTFOUND=return] files
+protocols: [NOTFOUND=return] files
+rpc: [NOTFOUND=return] files
+ethers: [NOTFOUND=return] files
+netmasks: [NOTFOUND=return] files
+bootparams: [NOTFOUND=return] files
+
+netgroup:
+
+publickey:
+
+automount: files
+aliases: files
+
diff --git a/source/installer/sources/initrd/etc/passwd b/source/installer/sources/initrd/etc/passwd
new file mode 100644
index 000000000..d89e1ba5f
--- /dev/null
+++ b/source/installer/sources/initrd/etc/passwd
@@ -0,0 +1,21 @@
+root:x:0:0::/root:/bin/bash
+bin:x:1:1:bin:/bin:
+daemon:x:2:2:daemon:/sbin:
+adm:x:3:4:adm:/var/log:
+lp:x:4:7:lp:/var/spool/lpd:
+sync:x:5:0:sync:/sbin:/bin/sync
+shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
+halt:x:7:0:halt:/sbin:/sbin/halt
+mail:x:8:12:mail:/:
+news:x:9:13:news:/usr/lib/news:
+uucp:x:10:14:uucp:/var/spool/uucppublic:
+operator:x:11:0:operator:/root:/bin/bash
+games:x:12:100:games:/usr/games:
+ftp:x:14:50::/home/ftp:
+smmsp:x:25:25:smmsp:/var/spool/clientmqueue:
+mysql:x:27:27:MySQL:/var/lib/mysql:/bin/bash
+rpc:x:32:32:RPC portmap user:/:/bin/false
+sshd:x:33:33:sshd:/:
+gdm:x:42:42:GDM:/var/state/gdm:/bin/bash
+pop:x:90:90:POP:/:
+nobody:x:99:99:nobody:/:
diff --git a/source/installer/sources/initrd/etc/pcmcia/config.opts b/source/installer/sources/initrd/etc/pcmcia/config.opts
new file mode 100644
index 000000000..5b8d5faf3
--- /dev/null
+++ b/source/installer/sources/initrd/etc/pcmcia/config.opts
@@ -0,0 +1,71 @@
+#
+# Local PCMCIA Configuration File
+#
+#----------------------------------------------------------------------
+#
+# System resources available for PCMCIA cards
+#
+# NOTE: these settings have no effect on resources assigned to a
+# CardBus bridge device itself; this file only affects resources
+# assigned to cards. Also, interrupt settings here will only affect
+# ISA bus interrupts assigned to 16-bit cards. PCI interrupts
+# generally can't be reconfigured.
+#
+# With the kernel PCMCIA subsystem, these settings also have no effect
+# at all on resources used for 32-bit CardBus cards. Those are set by
+# the PCI hotplug subsystem.
+#
+
+# These are the official ports to use from pcmcia-cs:
+#include port 0x100-0x4ff, port 0x800-0x8ff, port 0xc00-0xcff
+# However, ports 0x810-0x81f hurt on some DELL machines and
+# ports 0x3b0-0x3df hurt on some FSC machines, so we use this port
+# list instead:
+include port 0x100-0x3af, port 0x3e0-0x4ff, port 0xc00-0xcff
+
+include memory 0xc0000-0xfffff
+include memory 0xa0000000-0xa0ffffff, memory 0x60000000-0x60ffffff
+
+# High port numbers do not always work...
+# include port 0x1000-0x17ff
+
+# Extra port range for IBM Token Ring
+include port 0xa00-0xaff
+
+# Resources we should not use, even if they appear to be available
+
+# First built-in serial port
+exclude irq 4
+# Second built-in serial port
+#exclude irq 3
+# First built-in parallel port
+exclude irq 7
+
+#----------------------------------------------------------------------
+
+# Examples of options for loadable modules
+
+# To fix sluggish network with IBM ethernet adapter...
+#module "pcnet_cs" opts "mem_speed=600"
+
+# Options for IBM Token Ring adapters
+#module "ibmtr_cs" opts "mmiobase=0xd0000 srambase=0xd4000"
+
+# Options for Raylink/WebGear driver: uncomment only one line...
+# These are the default settings for use with the WebGear Windows driver:
+#module "ray_cs" opts "essid=NETWORK_NAME hop_dwell=128 beacon_period=256 translate=0"
+# Generic ad-hoc network
+#module "ray_cs" opts "essid=ADHOC_ESSID hop_dwell=128 beacon_period=256 translate=1"
+# Infrastructure network for older cards
+#module "ray_cs" opts "net_type=1 essid=ESSID1"
+# Infrastructure network for WebGear
+#module "ray_cs" opts "net_type=1 essid=ESSID1 translate=1 hop_dwell=128 beacon_period=256"
+
+# Options for WaveLAN/IEEE driver (AccessPoint mode)...
+#module "wvlan_cs" opts "station_name=MY_PC"
+# Options for WaveLAN/IEEE driver (ad-hoc mode)...
+#module "wvlan_cs" opts "port_type=3 channel=1 station_name=MY_PC"
+
+# Options for Xircom Netwave driver...
+#module "netwave_cs" opts "domain=0x100 scramble_key=0x0"
+
diff --git a/source/installer/sources/initrd/etc/profile b/source/installer/sources/initrd/etc/profile
new file mode 100644
index 000000000..c728b165b
--- /dev/null
+++ b/source/installer/sources/initrd/etc/profile
@@ -0,0 +1,35 @@
+# commands common to all logins
+PATH="$PATH:/bin:/sbin:/usr/bin:/usr/lib/setup"
+PATH="$PATH:/mnt/usr/local/bin:/mnt/usr/bin:/mnt/bin"
+PATH="$PATH:/mnt/usr/local/sbin:/mnt/usr/sbin:/mnt/sbin"
+PATH="$PATH:/mnt/linux/usr/local/bin:/mnt/linux/usr/bin:/mnt/linux/bin"
+PATH="$PATH:/mnt/linux/usr/local/sbin:/mnt/linux/usr/sbin:/mnt/linux/sbin"
+
+# 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=[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
+ export TERM=vt100
+else
+ export TERM=linux
+fi
+HOME=/root
+LESS=-MM
+
+# Set command line prompt:
+PS1='\u@\h:\w# '
+PS2='> '
+
+ignoreeof=10
+export HOME PATH DISPLAY LESS TERM PS1 PS2 ignoreeof
+umask 022
+
+# Append any additional sh scripts found in /etc/profile.d/:
+for profile_script in /etc/profile.d/*.sh ; do
+ if [ -x $profile_script ]; then
+ . $profile_script
+ fi
+done
+unset profile_script
+
diff --git a/source/installer/sources/initrd/etc/profile.d/coreutils-dircolors.sh b/source/installer/sources/initrd/etc/profile.d/coreutils-dircolors.sh
new file mode 100755
index 000000000..57670d6ef
--- /dev/null
+++ b/source/installer/sources/initrd/etc/profile.d/coreutils-dircolors.sh
@@ -0,0 +1,55 @@
+# Slackware color ls profile script for /bin/sh-like shells.
+
+# Set up LS_OPTIONS environment variable.
+# This contains extra command line options to use with ls.
+# The default ones are:
+# -F = show '/' for dirs, '*' for executables, etc.
+# -T 0 = don't trust tab spacing when formatting ls output.
+# -b = better support for special characters
+OPTIONS="-F -b -T 0"
+
+# COLOR needs one of these arguments:
+# 'auto' colorizes output to ttys, but not pipes.
+# 'always' adds color characters to all output.
+# 'never' shuts colorization off.
+COLOR=auto
+
+# This section shouldn't require any user adjustment since it is
+# simply setting the LS_OPTIONS variable using the information
+# already given above:
+LS_OPTIONS=" $OPTIONS --color=$COLOR ";
+export LS_OPTIONS;
+unset COLOR
+unset OPTIONS
+
+# Set up aliases to use color ls by default. A few additional
+# aliases like 'dir', 'vdir', etc, are some ancient artifacts
+# from 1992 or so... possibly they should be disabled, but maybe
+# someone out there is actually using them? :-)
+# Assume shell aliases are supported. Ash is going to freak out
+# when it sees zsh syntax anyway, so whatever.
+alias ls='/bin/ls $LS_OPTIONS';
+alias dir='/bin/ls $LS_OPTIONS --format=vertical';
+alias vdir='/bin/ls $LS_OPTIONS --format=long';
+alias d=dir;
+alias v=vdir;
+
+# Just for fun, here are the old sh/ash style shell functions.
+# this script isn't currently working with ash (and makes some noisy
+# error messages), but perhaps these will still be of use to
+# someone...
+#ls () { /bin/ls $LS_OPTIONS "$@" ; };
+#dir () { /bin/ls $LS_OPTIONS --format=vertical "$@" ; };
+#vdir () { /bin/ls $LS_OPTIONS --format=long "$@" ; };
+#d () { dir "$@" ; };
+#v () { vdir "$@" ; };
+
+# Set up the LS_COLORS environment:
+if [ -f $HOME/.dir_colors ]; then
+ eval `/bin/dircolors -b $HOME/.dir_colors`
+elif [ -f /etc/DIR_COLORS ]; then
+ eval `/bin/dircolors -b /etc/DIR_COLORS`
+else
+ eval `/bin/dircolors -b`
+fi
+
diff --git a/source/installer/sources/initrd/etc/profile.d/glibc.sh b/source/installer/sources/initrd/etc/profile.d/glibc.sh
new file mode 100755
index 000000000..979f4879e
--- /dev/null
+++ b/source/installer/sources/initrd/etc/profile.d/glibc.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+# Set more relaxed (glibc-2.3.5 like) malloc() checking.
+#
+# This relaxes the default paranoia level so that it reports
+# bugs, but does not kill the questionable process. You can
+# get away with running broken programs with this setting,
+# but at a possible performance and security cost.
+#export MALLOC_CHECK_=1
diff --git a/source/installer/sources/initrd/etc/protocols b/source/installer/sources/initrd/etc/protocols
new file mode 100644
index 000000000..db3254c97
--- /dev/null
+++ b/source/installer/sources/initrd/etc/protocols
@@ -0,0 +1,146 @@
+#
+# Internet protocols
+#
+# $FreeBSD: src/etc/protocols,v 1.16 2002/02/10 08:19:58 dd Exp $
+# from: @(#)protocols 5.1 (Berkeley) 4/17/89
+#
+# See also http://www.iana.org/assignments/protocol-numbers
+#
+ip 0 IP # internet protocol, pseudo protocol number
+#hopopt 0 HOPOPT # hop-by-hop options for ipv6
+icmp 1 ICMP # internet control message protocol
+igmp 2 IGMP # internet group management protocol
+ggp 3 GGP # gateway-gateway protocol
+ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
+st2 5 ST2 # ST2 datagram mode (RFC 1819)
+tcp 6 TCP # transmission control protocol
+cbt 7 CBT # CBT, Tony Ballardie <A.Ballardie@cs.ucl.ac.uk>
+egp 8 EGP # exterior gateway protocol
+igp 9 IGP # any private interior gateway (Cisco: for IGRP)
+bbn-rcc 10 BBN-RCC-MON # BBN RCC Monitoring
+nvp 11 NVP-II # Network Voice Protocol
+pup 12 PUP # PARC universal packet protocol
+argus 13 ARGUS # ARGUS
+emcon 14 EMCON # EMCON
+xnet 15 XNET # Cross Net Debugger
+chaos 16 CHAOS # Chaos
+udp 17 UDP # user datagram protocol
+mux 18 MUX # Multiplexing protocol
+dcn 19 DCN-MEAS # DCN Measurement Subsystems
+hmp 20 HMP # host monitoring protocol
+prm 21 PRM # packet radio measurement protocol
+xns-idp 22 XNS-IDP # Xerox NS IDP
+trunk-1 23 TRUNK-1 # Trunk-1
+trunk-2 24 TRUNK-2 # Trunk-2
+leaf-1 25 LEAF-1 # Leaf-1
+leaf-2 26 LEAF-2 # Leaf-2
+rdp 27 RDP # "reliable datagram" protocol
+irtp 28 IRTP # Internet Reliable Transaction Protocol
+iso-tp4 29 ISO-TP4 # ISO Transport Protocol Class 4
+netblt 30 NETBLT # Bulk Data Transfer Protocol
+mfe-nsp 31 MFE-NSP # MFE Network Services Protocol
+merit-inp 32 MERIT-INP # MERIT Internodal Protocol
+sep 33 SEP # Sequential Exchange Protocol
+3pc 34 3PC # Third Party Connect Protocol
+idpr 35 IDPR # Inter-Domain Policy Routing Protocol
+xtp 36 XTP # Xpress Tranfer Protocol
+ddp 37 DDP # Datagram Delivery Protocol
+idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport Proto
+tp++ 39 TP++ # TP++ Transport Protocol
+il 40 IL # IL Transport Protocol
+ipv6 41 IPV6 # ipv6
+sdrp 42 SDRP # Source Demand Routing Protocol
+ipv6-route 43 IPV6-ROUTE # routing header for ipv6
+ipv6-frag 44 IPV6-FRAG # fragment header for ipv6
+idrp 45 IDRP # Inter-Domain Routing Protocol
+rsvp 46 RSVP # Resource ReSerVation Protocol
+gre 47 GRE # Generic Routing Encapsulation
+mhrp 48 MHRP # Mobile Host Routing Protocol
+bna 49 BNA # BNA
+esp 50 ESP # encapsulating security payload
+ah 51 AH # authentication header
+i-nlsp 52 I-NLSP # Integrated Net Layer Security TUBA
+swipe 53 SWIPE # IP with Encryption
+narp 54 NARP # NBMA Address Resolution Protocol
+mobile 55 MOBILE # IP Mobility
+tlsp 56 TLSP # Transport Layer Security Protocol
+skip 57 SKIP # SKIP
+ipv6-icmp 58 IPV6-ICMP # ICMP for IPv6
+ipv6-nonxt 59 IPV6-NONXT # no next header for ipv6
+ipv6-opts 60 IPV6-OPTS # destination options for ipv6
+# 61 # any host internal protocol
+cftp 62 CFTP # CFTP
+# 63 # any local network
+sat-expak 64 SAT-EXPAK # SATNET and Backroom EXPAK
+kryptolan 65 KRYPTOLAN # Kryptolan
+rvd 66 RVD # MIT Remote Virtual Disk Protocol
+ippc 67 IPPC # Internet Pluribus Packet Core
+# 68 # any distributed file system
+sat-mon 69 SAT-MON # SATNET Monitoring
+visa 70 VISA # VISA Protocol
+ipcv 71 IPCV # Internet Packet Core Utility
+cpnx 72 CPNX # Computer Protocol Network Executive
+cphb 73 CPHB # Computer Protocol Heart Beat
+wsn 74 WSN # Wang Span Network
+pvp 75 PVP # Packet Video Protocol
+br-sat-mon 76 BR-SAT-MON # Backroom SATNET Monitoring
+sun-nd 77 SUN-ND # SUN ND PROTOCOL-Temporary
+wb-mon 78 WB-MON # WIDEBAND Monitoring
+wb-expak 79 WB-EXPAK # WIDEBAND EXPAK
+iso-ip 80 ISO-IP # ISO Internet Protocol
+vmtp 81 VMTP # Versatile Message Transport
+secure-vmtp 82 SECURE-VMTP # SECURE-VMTP
+vines 83 VINES # VINES
+ttp 84 TTP # TTP
+nsfnet-igp 85 NSFNET-IGP # NSFNET-IGP
+dgp 86 DGP # Dissimilar Gateway Protocol
+tcf 87 TCF # TCF
+eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco)
+ospf 89 OSPFIGP # Open Shortest Path First IGP
+sprite-rpc 90 Sprite-RPC # Sprite RPC Protocol
+larp 91 LARP # Locus Address Resolution Protocol
+mtp 92 MTP # Multicast Transport Protocol
+ax.25 93 AX.25 # AX.25 Frames
+ipip 94 IPIP # Yet Another IP encapsulation
+micp 95 MICP # Mobile Internetworking Control Pro.
+scc-sp 96 SCC-SP # Semaphore Communications Sec. Pro.
+etherip 97 ETHERIP # Ethernet-within-IP Encapsulation
+encap 98 ENCAP # Yet Another IP encapsulation
+# 99 # any private encryption scheme
+gmtp 100 GMTP # GMTP
+ifmp 101 IFMP # Ipsilon Flow Management Protocol
+pnni 102 PNNI # PNNI over IP
+pim 103 PIM # Protocol Independent Multicast
+aris 104 ARIS # ARIS
+scps 105 SCPS # SCPS
+qnx 106 QNX # QNX
+a/n 107 A/N # Active Networks
+ipcomp 108 IPComp # IP Payload Compression Protocol
+snp 109 SNP # Sitara Networks Protocol
+compaq-peer 110 Compaq-Peer # Compaq Peer Protocol
+ipx-in-ip 111 IPX-in-IP # IPX in IP
+vrrp 112 VRRP # Virtual Router Redundancy Protocol
+pgm 113 PGM # PGM Reliable Transport Protocol
+# 114 # any 0-hop protocol
+l2tp 115 L2TP # Layer Two Tunneling Protocol
+ddx 116 DDX # D-II Data Exchange
+iatp 117 IATP # Interactive Agent Transfer Protocol
+st 118 ST # Schedule Transfer
+srp 119 SRP # SpectraLink Radio Protocol
+uti 120 UTI # UTI
+smp 121 SMP # Simple Message Protocol
+sm 122 SM # SM
+ptp 123 PTP # Performance Transparency Protocol
+isis 124 ISIS # ISIS over IPv4
+fire 125 FIRE
+crtp 126 CRTP # Combat Radio Transport Protocol
+crudp 127 CRUDP # Combat Radio User Datagram
+sscopmce 128 SSCOPMCE
+iplt 129 IPLT
+sps 130 SPS # Secure Packet Shield
+pipe 131 PIPE # Private IP Encapsulation within IP
+sctp 132 SCTP # Stream Control Transmission Protocol
+fc 133 FC # Fibre Channel
+# 134-254 # Unassigned
+divert 254 DIVERT # Divert pseudo-protocol [non IANA]
+# 255 # Reserved
diff --git a/source/installer/sources/initrd/etc/rc.d/rc.S b/source/installer/sources/initrd/etc/rc.d/rc.S
new file mode 100755
index 000000000..38317b4df
--- /dev/null
+++ b/source/installer/sources/initrd/etc/rc.d/rc.S
@@ -0,0 +1,250 @@
+#!/bin/sh
+# rc.S: Basic system initialization.
+
+# Any /etc/mtab that exists here is old, so we start with a new one:
+/bin/rm -f /etc/mtab{,~,.tmp} && /bin/touch /etc/mtab
+
+# Add (fake) entry for / to /etc/mtab:
+/sbin/mount -f -w /dev/initramfs / -t tmpfs 1> /dev/null
+
+# Mount /proc:
+/sbin/mount -v proc /proc -t proc 1> /dev/null
+
+# Mount sysfs next:
+/sbin/mount -v sysfs /sys -t sysfs 1> /dev/null
+
+# Activate swap:
+/sbin/swapon -a 1> /dev/null
+
+if [ -x /sbin/ldconfig ]; then
+ /sbin/ldconfig 1> /dev/null
+fi
+
+## Detect serial console from kernel command line:
+#if cat /proc/cmdline | grep console=ttyS 1> /dev/null 2> /dev/null ; then
+# SERIAL_CONSOLE="true"
+#fi
+
+# System logger (mostly to eat annoying messages):
+/sbin/syslogd 2> /dev/null
+sleep 1
+/sbin/klogd -c 3 1> /dev/null
+
+# Try to load the loop module:
+modprobe loop 1> /dev/null 2> /dev/null
+
+# Run udev:
+if ! grep -wq noudev /proc/cmdline ; then
+ /bin/bash /etc/rc.d/rc.udev start
+
+ # Re-assemble RAID volumes:
+ /sbin/mdadm -E -s > /etc/mdadm.conf
+ /sbin/mdadm -S -s
+ /sbin/mdadm -A -s
+ # This seems to make the kernel see partitions more reliably:
+ fdisk -l /dev/md* 1> /dev/null 2> /dev/null
+else
+ # Run our old detection routines:
+
+ # Look for USB keyboard or storage:
+ /etc/rc.d/rc.usb start
+ sleep 3
+
+ # Look for IEEE1394 devices:
+ if grep 1394 /proc/pci 1> /dev/null 2> /dev/null ; then
+ /etc/rc.d/rc.ieee1394 start
+ #sleep 3
+ fi
+
+ # Load additional install floppies:
+ for NEWDISK in 2 ; do
+ if [ ! -r /etc/disk${NEWDISK} ]; then
+ while [ 0 ]; do
+ echo
+ echo -n "Insert install.${NEWDISK} floppy disk to be loaded into RAM disk and press ENTER"
+ read readfoo;
+ if [ "$readfoo" = "Q" -o "$readfoo" = "q" ]; then
+ break;
+ fi
+ echo -n "Loading install.${NEWDISK} floppy into RAM disk... "
+ ( cd / ; cat /dev/fd0 | zcat 2> /dev/null | tar xf - )
+ if [ -r /etc/disk${NEWDISK} ]; then
+ echo "done."
+ echo
+ break;
+ else
+ echo "Error. (reload or enter Q)"
+ echo
+ continue;
+ fi
+ done
+ fi
+ done
+
+ ### PROBABLY USELESS WITHOUT SOME TIMED DELAY ABOVE
+ ## Start USB again (in case we missed a USB keyboard)
+ #/etc/rc.d/rc.usb start
+
+ # Make detected partitions:
+ /dev/makedevs.sh
+
+ ## Not needed with CONFIG_SCSI_MULTI_LUN=y
+ #unset SCAN
+ ## Now we should rescan the "SCSI" bus to look for new USB or firewire devices
+ ## that look like SCSI devices:
+ #if [ -r /proc/bus/usb/devices ]; then
+ # if cat /proc/bus/usb/devices | grep -w usb-storage 1> /dev/null 2> /dev/null ; then
+ # SCAN="true"
+ # fi
+ #fi
+ #if [ -r /proc/bus/ieee1394/devices ]; then
+ # if cat /proc/bus/ieee1394/devices | grep -w SBP2 1> /dev/null 2> /dev/null ; then
+ # SCAN="true"
+ # fi
+ #fi
+ #if [ "$SCAN" = "true" ]; then
+ # if ! cat /proc/cmdline | grep -q noscanluns 2> /dev/null ; then
+ # echo "Detected new USB/IEEE1394 storage devices... scanning all LUNs."
+ # echo "(to skip, give a 'noscanluns' kernel option at boot)"
+ # #sleep 5
+ # sh /sbin/rescan-scsi-bus -l
+ # #sleep 1
+ # fi
+ #fi
+ #unset SCAN
+
+ # Re-assemble RAID volumes:
+ /sbin/mdadm -E -s > /etc/mdadm.conf
+ /sbin/mdadm -S -s
+ /sbin/mdadm -A -s
+ # This seems to make the kernel see partitions more reliably:
+ fdisk -l /dev/md* 1> /dev/null 2> /dev/null
+
+ # Check /proc/partitions again:
+ /dev/makedevs.sh
+
+ # Create LVM nodes:
+ /dev/devmap_mknod.sh
+
+fi # End Run udev:
+
+# Here's the situation. Because of the practice of keeping the local
+# time (rather than UTC) in the system's clock, at any given time half
+# of the people doing an install will be creating files that upon
+# reboot will appear to have been created in the future.
+#
+# There are a lot of things that aren't happy when that happens. The
+# one that screams the most loudly is e2fsck, and we don't want to
+# anger that! Sometimes it even proceeds to check the partitions just
+# to be sure the user is fully punished.
+#
+# But, there's a simple solution. If we set the (temporary) Linux clock
+# to yesterday (-24h), then there's no way that could occur. Everything
+# on the system will be in the past (but not too far in the past).
+# Since files will quickly be put into use and given the correct after
+# reboot, this really shouldn't have a negative impact. Plus, it affects
+# only newly created files during installation -- any file shipped in a
+# package will have an accurate time of creation. (for its timezone ;-)
+#
+# Update: We have to use 2 days ago, or chroot()+timezone offset might
+# still be in the future... <sigh>
+#
+touch /.today
+/bin/sh /sbin/fakedate
+
+if [ -x /etc/rc.d/rc.inet1 ]; then
+ /bin/sh /etc/rc.d/rc.inet1
+fi
+
+# pcmciautils is installing rc.pcmcia as chmod 644, so we'll change that.
+# It won't be run at boot time, but it'll make it easy for the pcmcia script
+# or to run it from the command line.
+chmod 755 /etc/rc.d/rc.pcmcia
+
+# Scan for existing LVM partitions:
+# We will run 'vgscan -ay' in the setup to prevent a 10 second sleep;
+vgscan --mknodes 2> /tmp/foo
+cat /tmp/foo | uniq
+rm -f /tmp/foo
+
+if [ -x /etc/rc.d/rc.font ]; then
+ /bin/sh /etc/rc.d/rc.font
+fi
+
+# Don't automatically blank the screen, or it will go black during the install
+# process when stray keystrokes might be dangerous:
+/bin/setterm -blank 0
+
+echo > /etc/motd
+echo "`/bin/uname -a | /bin/cut -d\ -f1,3`." >> /etc/motd
+echo >> /etc/motd
+cat << EOF >> /etc/motd
+If you're upgrading an existing Slackware system, you might want to
+remove old packages before you run 'setup' to install the new ones. If
+you don't, your system will still work but there might be some old files
+left laying around on your drive.
+
+Just mount your Linux partitions under /mnt and type 'pkgtool'. If you
+don't know how to mount your partitions, type 'pkgtool' and it will tell
+you how it's done.
+
+To partition your hard drive(s), use 'cfdisk' or 'fdisk'.
+To start the main installation (after partitioning), type 'setup'.
+
+EOF
+
+# Dropbear seems to handle the $PATH correctly now...
+#echo > /etc/motd.net
+#echo "First command to run is 'source /etc/profile'." >> /etc/motd.net
+#echo "This will setup the PATH for you." >> /etc/motd.net
+#echo >> /etc/motd.net
+
+# If possible, figure out what kernel we just booted with:
+unset SLACK_KERNEL
+for ARG in `cat /proc/cmdline` ; do
+ if [ "`echo $ARG | cut -f 1 -d =`" = "SLACK_KERNEL" ]; then
+ IMAGE="`echo $ARG | cut -f 2 -d =`"
+ SLACK_KERNEL=$IMAGE
+ fi
+done
+export SLACK_KERNEL
+
+. /etc/profile
+
+clear
+if ! cat /proc/cmdline | grep -q 'kbd=' 2> /dev/null ; then
+ echo
+ echo
+ echo "<OPTION TO LOAD SUPPORT FOR NON-US KEYBOARD>"
+ echo
+ echo "If you are not using a US keyboard, you may now load a different"
+ echo "keyboard map. To select a different keyboard map, please enter 1"
+ echo "now. To continue using the US map, just hit enter."
+ echo
+ echo -n "Enter 1 to select a keyboard map: "
+ read ONE
+ if [ "$ONE" = "1" ]; then
+ /usr/lib/setup/SeTkeymap
+ fi
+else
+ for ARG in `cat /proc/cmdline` ; do
+ if [ "`echo $ARG | cut -f1 -d=`" = "kbd" ]; then
+ BMAP="`echo $ARG | cut -f2 -d=`.bmap"
+ fi
+ done
+ tar xzOf /etc/keymaps.tar.gz $BMAP | loadkmap
+ unset BMAP
+fi
+clear
+
+# Provision for unattended network configuration:
+/usr/lib/setup/SeTnet boot
+# Start dropbear ssh server (only if a configured interface is present):
+/etc/rc.d/rc.dropbear start
+
+# Fake login: (fooled ya! ;^)
+
+cat /etc/issue
+echo -n "slackware login: "
+read BOGUS_LOGIN
+cat /etc/motd
diff --git a/source/installer/sources/initrd/etc/rc.d/rc.dropbear b/source/installer/sources/initrd/etc/rc.d/rc.dropbear
new file mode 100755
index 000000000..a9ed47fd5
--- /dev/null
+++ b/source/installer/sources/initrd/etc/rc.d/rc.dropbear
@@ -0,0 +1,58 @@
+#!/bin/sh
+# Start/stop/restart the dropbear secure shell server:
+
+# Terminate the script now if we have no interface with an IP address:
+if ! `ip -f inet -o addr show | grep -v " lo " 1>/dev/null 2>/dev/null` ; then
+ exit 1
+fi
+
+dropbear_start() {
+ # Create host keys if needed.
+ if [ ! -f /etc/dropbear/dropbear_rsa_host_key ]; then
+ /bin/dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
+ fi
+ if [ ! -f /etc/dropbear/dropbear_dss_host_key ]; then
+ /bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
+ fi
+ touch /var/log/lastlog # The file is missing in the installer
+ /sbin/dropbear 2>> /var/log/dropbear.log
+}
+
+dropbear_stop() {
+ killall dropbear
+}
+
+dropbear_restart() {
+ if [ -r /var/run/dropbear.pid ]; then
+ echo "WARNING: killing listener process only. To kill every dropbear process, you "
+ echo " must use 'rc.dropbear stop'. 'rc.dropbear restart' kills only the "
+ echo " parent dropbear to allow an admin logged in through dropbear to use "
+ echo " 'rc.dropbear restart' without being cut off. If dropbear has been "
+ echo " upgraded, new connections will now use the new version, which should "
+ echo " be a safe enough approach."
+ kill `cat /var/run/dropbear.pid`
+ else
+ echo "WARNING: There does not appear to be a parent instance of dropbear running."
+ echo " If you really want to kill all running instances of dropbear "
+ echo " (including any sessions currently in use), run "
+ echo " '/etc/rc.d/rc.dropbear stop' instead."
+ exit 1
+ fi
+ sleep 1
+ dropbear_start
+}
+
+case "$1" in
+'start')
+ dropbear_start
+ ;;
+'stop')
+ dropbear_stop
+ ;;
+'restart')
+ dropbear_restart
+ ;;
+*)
+ echo "usage $0 start|stop|restart"
+esac
+
diff --git a/source/installer/sources/initrd/etc/rc.d/rc.font b/source/installer/sources/initrd/etc/rc.d/rc.font
new file mode 100755
index 000000000..69e69baaa
--- /dev/null
+++ b/source/installer/sources/initrd/etc/rc.d/rc.font
@@ -0,0 +1,45 @@
+#!/bin/sh
+# Load terminus font. This is either to resize the terminal to be close to default,
+# or to simply load a better looking font for the installer.
+
+# In case udev has not yet prepared the tty devices, create them:
+create_tty() {
+ if [ ! -r /dev/tty1 ]; then
+ mknod /dev/tty1 c 4 1
+ chown root:tty /dev/tty1
+ chmod 620 /dev/tty1
+ fi
+ if [ ! -r /dev/tty2 ]; then
+ mknod /dev/tty2 c 4 2
+ chown root:tty /dev/tty2
+ chmod 620 /dev/tty2
+ fi
+ if [ ! -r /dev/tty3 ]; then
+ mknod /dev/tty3 c 4 3
+ chown root:tty /dev/tty3
+ chmod 620 /dev/tty3
+ fi
+ if [ ! -r /dev/tty4 ]; then
+ mknod /dev/tty4 c 4 4
+ chown root:tty /dev/tty4
+ chmod 620 /dev/tty4
+ fi
+}
+
+if ! grep -wq nofont /proc/cmdline ; then
+ if [ ! "$(cat /proc/fb)" = "" ] ; then
+ if [ -r /usr/share/kbd/consolefonts/ter-120b.psf.gz ]; then
+ create_tty
+ for tty in /dev/tty{1,2,3,4} ; do
+ setfont -C $tty /usr/share/kbd/consolefonts/ter-120b.psf.gz
+ done
+ fi
+ else
+ if [ -r /usr/share/kbd/consolefonts/ter-c14v.psf.gz ]; then
+ create_tty
+ for tty in /dev/tty{1,2,3,4} ; do
+ setfont -C $tty /usr/share/kbd/consolefonts/ter-c14v.psf.gz
+ done
+ fi
+ fi
+fi
diff --git a/source/installer/sources/initrd/etc/rc.d/rc.ieee1394 b/source/installer/sources/initrd/etc/rc.d/rc.ieee1394
new file mode 100755
index 000000000..2701229dc
--- /dev/null
+++ b/source/installer/sources/initrd/etc/rc.d/rc.ieee1394
@@ -0,0 +1,48 @@
+#!/bin/sh
+# rc.ieee1394: search for IEEE1394 (firewire) devices needed for installation.
+
+# This is a function to unload the IEEE1394 (firewire) modules:
+ieee1394_stop() {
+ modprobe -r sbp2 ohci1394
+ modprobe -r ieee1394
+}
+
+# This is a function to attempt to enable a IEEE1394 storage device.
+# If this causes problems for you, use "noieee1394" as a kernel
+# command line option at boot time.
+ieee1394_start() {
+ # If noieee1394 was given at boot, skip.
+ if ! cat /proc/cmdline | grep noieee1394 1> /dev/null 2> /dev/null ; then
+ # If there aren't even any modules for this kernel, skip.
+ if [ -d /lib/modules/`uname -r` ]; then
+ # If ieee1394 is already loaded, skip.
+ if ! grep ieee1394 /proc/modules 1> /dev/null 2> /dev/null ; then
+ echo "Probing for IEEE1394 (Firewire) controllers."
+ echo "(to skip, give a 'noieee1394' kernel option at boot)"
+ #sleep 5
+ modprobe -q ieee1394 >/dev/null 2>&1
+ # Try to load hub module:
+ modprobe -q ohci1394 >/dev/null 2>&1
+ # Attempt to load storage support.
+ modprobe -q sbp2 >/dev/null 2>&1
+ fi
+ fi
+ fi
+}
+
+case "$1" in
+'start')
+ ieee1394_start
+ ;;
+'stop')
+ ieee1394_stop
+ ;;
+'restart')
+ ieee1394_stop
+ sleep 5
+ ieee1394_start
+ ;;
+*)
+ echo "usage $0 start|stop|restart"
+esac
+
diff --git a/source/installer/sources/initrd/etc/rc.d/rc.inet1 b/source/installer/sources/initrd/etc/rc.d/rc.inet1
new file mode 100755
index 000000000..370de0061
--- /dev/null
+++ b/source/installer/sources/initrd/etc/rc.d/rc.inet1
@@ -0,0 +1,28 @@
+#! /bin/sh
+#
+# rc.inet1 This shell script boots up the base INET system.
+#
+# Version: @(#)/etc/rc.d/rc.inet1 1.01 05/27/93
+#
+
+TMP=/var/log/setup/tmp
+mkdir -p $TMP/dhcpc
+
+HOSTNAME=`cat /etc/HOSTNAME`
+/bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .`
+
+# Attach the loopback device.
+/sbin/ifconfig lo 127.0.0.1
+/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
+
+# In case we use udev -
+# Try to get information from a local DHCP server and store that for later:
+if ! grep -wq nodhcp /proc/cmdline ; then
+ for EDEV in $(cat /proc/net/dev | grep ':' | sed -e "s/^ *//" | cut -f1 -d: | grep -v lo) ; do
+ if grep -q $(echo ${EDEV}: | cut -f 1 -d :): /proc/net/wireless ; then
+ continue # skip wireless interfaces
+ fi
+ /sbin/dhcpcd -t 35 -L -T $EDEV 1>/etc/dhcpc/dhcpcd-${EDEV}.info 2>/dev/null &
+ done
+fi
+
diff --git a/source/installer/sources/initrd/etc/rc.d/rc.pcmcia b/source/installer/sources/initrd/etc/rc.d/rc.pcmcia
new file mode 100755
index 000000000..1f21be84e
--- /dev/null
+++ b/source/installer/sources/initrd/etc/rc.d/rc.pcmcia
@@ -0,0 +1,65 @@
+#!/bin/sh
+#
+# rc.pcmcia: Script to initialize PCMCIA subsystem.
+# Based in an example found in cardmgr-to-pcmciautils.txt
+# and in Slackware rc.pcmcia found in pcmcia-cs package.
+#
+
+# Set this to the driver to use, one of:
+# probe, yenta_socket, i82365, i82092, pd6729, tcic, etc.
+#
+DRIVER=probe
+DRIVER_OPTS=
+
+case "$1" in
+ start)
+ echo "Starting PCMCIA services:"
+ fgrep -q pcmcia /proc/devices
+ if [ $? -ne 0 ] ; then
+ if [ "$DRIVER" = "probe" ]; then
+ echo " <Probing for PCIC: edit /etc/rc.d/rc.pcmcia>"
+ for DRV in yenta_socket i82365 tcic ; do
+ /sbin/modprobe $DRV > /dev/null 2>&1
+ /sbin/pccardctl status | grep -q Socket && break
+ /sbin/modprobe -r $DRV > /dev/null 2>&1
+ done
+ else
+ echo " <Loading PCIC: $DRIVER>"
+ /sbin/modprobe $DRIVER $DRIVER_OPTS > /dev/null 2>&1
+ fi
+ /sbin/modprobe pcmcia > /dev/null 2>&1 # just in case it's not auto-loaded
+ else
+ echo " <PCIC already loaded>"
+ fi
+ ;;
+
+ stop)
+ echo -n "Shutting down PCMCIA services: "
+ echo -n "cards "
+ /sbin/pccardctl eject
+ MODULES=`/sbin/lsmod | grep "pcmcia " | awk '{print $4}' | tr , ' '`
+ for i in $MODULES ; do
+ echo -n "$i "
+ /sbin/modprobe -r $i > /dev/null 2>&1
+ done
+ echo -n "pcmcia "
+ /sbin/modprobe -r pcmcia > /dev/null 2>&1
+ if [ "$DRIVER" = "probe" ]; then
+ for DRV in yenta_socket i82365 tcic ; do
+ grep -qw $DRV /proc/modules && modprobe -r $DRV && \
+ echo -n "$DRV " && break
+ done
+ else
+ /sbin/modprobe -r $DRIVER > /dev/null 2>&1
+ fi
+ echo -n "rsrc_nonstatic "
+ /sbin/modprobe -r rsrc_nonstatic > /dev/null 2>&1
+ echo "pcmcia_core"
+ /sbin/modprobe -r pcmcia_core > /dev/null 2>&1
+ ;;
+
+ restart)
+ $0 stop
+ $0 start
+ ;;
+esac
diff --git a/source/installer/sources/initrd/etc/rc.d/rc.udev b/source/installer/sources/initrd/etc/rc.d/rc.udev
new file mode 100755
index 000000000..8c238b0dd
--- /dev/null
+++ b/source/installer/sources/initrd/etc/rc.d/rc.udev
@@ -0,0 +1,133 @@
+#!/bin/sh
+# This is a script to initialize udev, which populates the /dev
+# directory with device nodes, scans for devices, loads the
+# appropriate kernel modules, and configures the devices.
+
+PATH="/sbin:/bin"
+OPT=""
+
+. /etc/udev/udev.conf
+
+# remove trailing slash from udev_root
+UDEV_ROOT=$(echo "${udev_root}" |sed 's/\/*$//')
+
+case "$1" in
+ start)
+ # Sanity check #1, udev requires that the kernel support tmpfs:
+ if ! grep -wq tmpfs /proc/filesystems ; then
+ echo "Sorry, but you need tmpfs support in the kernel to use udev."
+ echo
+ echo "FATAL: Refusing to run /etc/rc.d/rc.udev."
+ exit 1
+ fi
+
+ # Sanity check #2, make sure that a 2.6.x kernel is new enough:
+ if [ "$(uname -r | cut -f 1,2 -d .)" = "2.6" ]; then
+ if [ "$(uname -r | cut -f 3 -d . | sed 's/[^[:digit:]].*//')" -lt "15" ]; then
+ echo "Sorry, but you need a 2.6.15+ kernel to use udev."
+ echo "Your kernel version is only $(uname -r)."
+ echo
+ echo "FATAL: Refusing to run /etc/rc.d/rc.udev."
+ exit 1
+ fi
+ fi
+
+ # Sanity check #3, make sure the udev package was not removed. If udevd
+ # is not there, this will also shut off this script to prevent further
+ # problems:
+ if [ ! -x /sbin/udevd ]; then
+ chmod 644 /etc/rc.d/rc.udev
+ echo "No udevd daemon found."
+ echo "Turning off udev: chmod 644 /etc/rc.d/rc.udev"
+ echo "FATAL: Refusing to run /etc/rc.d/rc.udev."
+ exit 1
+ fi
+
+ # Disable hotplug helper since udevd listens to netlink:
+ if [ -e /proc/sys/kernel/hotplug ]; then
+ echo "" > /proc/sys/kernel/hotplug
+ fi
+
+ # if udevd is already running, rc.udev start will try to re-run
+ # failed events. Else, it will start udevd.
+ if ps axc | grep -q udevd ; then
+ OPT="--type=failed $OPT"
+ ( cd ${UDEV_ROOT}/.udev
+ for TMPFILE in tmp-rules-*.rules ; do
+ mv $TMPFILE /etc/udev/rules.d/${TMPFILE/tmp-rules--/} 2>/dev/null
+ done
+ )
+ else
+ # Mount tmpfs on $UDEV_ROOT:
+ if ! grep -E -q "^[^[:space:]]+ $UDEV_ROOT tmpfs" /proc/mounts; then
+ # umount shm if needed
+ if grep -E -q "^[^[:space:]]+ $UDEV_ROOT/shm tmpfs" /proc/mounts; then
+ umount -l $UDEV_ROOT/shm
+ fi
+
+ # Umount pts if needed, we will remount it later:
+ if grep -E -q "^[^[:space:]]+ $UDEV_ROOT/pts devpts" /proc/mounts; then
+ umount -l $UDEV_ROOT/pts
+ fi
+
+ # Mount tmpfs on $UDEV_ROOT:
+ # the -n is because we don't want $UDEV_ROOT umounted when
+ # someone (rc.[06]) calls umount -a
+ mount -n -o mode=0755 -t tmpfs tmpfs $UDEV_ROOT
+
+ # Remount pts:
+ mkdir $UDEV_ROOT/pts 2> /dev/null
+ mount -n -o mode=0620,gid=5 -t devpts devpts $UDEV_ROOT/pts
+ fi
+
+ # Add the static nodes to $UDEV_ROOT:
+ cp --preserve=all --recursive --remove-destination /lib/udev/devices/* $UDEV_ROOT
+
+ # Start udevd:
+ echo "Starting udevd: /sbin/udevd --daemon"
+ /sbin/udevd --daemon
+
+ # Create rootdev rules
+ DEVICENUMBER=$( /bin/stat -c %d / )
+ MAJORNUMBER=$(($DEVICENUMBER / 256))
+ MINORNUMBER=$(($DEVICENUMBER % 256))
+
+ echo 'ACTION=="add|change", SUBSYSTEM=="block", ENV{MAJOR}=="'$MAJORNUMBER'", ENV{MINOR}=="'$MINORNUMBER'", SYMLINK+="root"' > /dev/.udev/rules.d/61-dev-root-link.rules
+
+ fi
+
+ echo "Triggering udev events: /sbin/udevadm trigger $OPT"
+ # Call udevtrigger and udevsettle to do the device configuration:
+ /sbin/udevadm trigger $OPT && /sbin/udevadm settle --timeout=120
+
+ ;;
+ stop)
+ echo "Stopping udevd"
+ if [ -e /proc/sys/kernel/hotplug ]; then
+ echo /sbin/hotplug > /proc/sys/kernel/hotplug
+ fi
+ killall udevd
+ ;;
+ restart)
+ echo "Restarting udevd"
+ killall udevd
+ sleep 5
+ udevd --daemon
+ ;;
+ reload)
+ echo "Reloading udev rules"
+ udevadm control --reload-rules
+ cp --preserve=all --recursive --update /lib/udev/devices/* $UDEV_ROOT
+ ;;
+ force-reload)
+ echo "Updating all available device nodes in $UDEV_ROOT"
+ udevadm control --reload-rules
+ rm -rf $UDEV_ROOT/.udev $UDEV_ROOT/disk
+ cp --preserve=all --recursive --update /lib/udev/devices/* $UDEV_ROOT
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|restart|reload|force-reload}"
+ exit 1
+ ;;
+esac
diff --git a/source/installer/sources/initrd/etc/rc.d/rc.usb b/source/installer/sources/initrd/etc/rc.d/rc.usb
new file mode 100755
index 000000000..0c40b5b46
--- /dev/null
+++ b/source/installer/sources/initrd/etc/rc.d/rc.usb
@@ -0,0 +1,71 @@
+#!/bin/sh
+# rc.usb: search for USB devices needed for installation.
+
+# This is a function to unload the USB modules:
+usb_stop() {
+ modprobe -r usb-storage keybdev mousedev usbmouse hid usbkbd \
+ input uhci usb-uhci usb-ohci uhci-hcd ohci-hcd ehci-hcd 2> /dev/null
+ umount usbfs 2> /dev/null
+ modprobe -r usbcore 2> /dev/null
+}
+
+# This is a function to attempt to enable a USB keyboard,
+# mouse, and storage (CD or hard drive).
+# If this causes problems for you, use "nousb" as a kernel
+# command line option at boot time.
+usb_start() {
+ # If nousb was given at boot, skip.
+ if ! cat /proc/cmdline | grep nousb 1> /dev/null 2> /dev/null ; then
+ # If there aren't even any modules for this kernel, skip.
+ if [ -d /lib/modules/`uname -r` ]; then
+ # If usbcore is already loaded, skip.
+ if ! grep usbcore /proc/modules 1> /dev/null 2> /dev/null ; then
+ echo "Probing for USB controllers."
+ echo "(to skip, give a 'nousb' kernel option at boot)"
+ #sleep 5
+ modprobe -q usbcore >/dev/null 2>&1
+ # Try to mount usbfs:
+ if [ -d /proc/bus/usb -a ! -f /proc/bus/usb/devices ]; then
+ mount -t usbfs usbfs /proc/bus/usb
+ fi
+ # Try to load all the hub modules:
+ modprobe -q ehci-hcd >/dev/null 2>&1
+ modprobe -q ohci-hcd >/dev/null 2>&1
+ modprobe -q uhci-hcd >/dev/null 2>&1
+ modprobe -q usb-ohci >/dev/null 2>&1
+ # NOTE: this prefers "uhci"; you may prefer "usb-uhci".
+ #modprobe -q usb-uhci >/dev/null 2>&1 || modprobe -q uhci >/dev/null 2>&1
+ modprobe -q uhci >/dev/null 2>&1 || modprobe -q usb-uhci >/dev/null 2>&1
+ # Load input core:
+ modprobe -q input >/dev/null 2>&1
+ # Load USB keyboard:
+ modprobe -q usbkbd >/dev/null 2>&1
+ # Load Human Interface Device (HID) USB module:
+ modprobe -q hid >/dev/null 2>&1
+ # Load mouse (just in case (TM)) and keyboard USB input modules:
+ modprobe -q mousedev >/dev/null 2>&1
+ modprobe -q keybdev >/dev/null 2>&1
+ # Attempt to load storage support. Some funny USB ports (non-0 LUN) might not work
+ # so well, but most are well-behaved.
+ modprobe -q usb-storage >/dev/null 2>&1
+ fi
+ fi
+ fi
+}
+
+case "$1" in
+'start')
+ usb_start
+ ;;
+'stop')
+ usb_stop
+ ;;
+'restart')
+ usb_stop
+ sleep 5
+ usb_start
+ ;;
+*)
+ echo "usage $0 start|stop|restart"
+esac
+
diff --git a/source/installer/sources/initrd/etc/scsi_id.config b/source/installer/sources/initrd/etc/scsi_id.config
new file mode 100644
index 000000000..d2a10a5f7
--- /dev/null
+++ b/source/installer/sources/initrd/etc/scsi_id.config
@@ -0,0 +1,17 @@
+#
+# scsi_id configuration
+#
+# lower or upper case has no effect on the left side. Quotes (") are
+# required for spaces in values. Model is the same as the SCSI
+# INQUIRY product identification field. Per the SCSI INQUIRY, the vendor
+# is limited to 8 bytes, model to 16 bytes.
+#
+# The first matching line found is used. Short matches match longer ones,
+# if you do not want such a match space fill the extra bytes. If no model
+# is specified, only the vendor string need match.
+#
+# options=<any scsi_id command line options>
+# vendor=string[,model=string],options=<per-device scsi_id options>
+
+# some libata drives require vpd page 0x80
+vendor="ATA",options=-p 0x80
diff --git a/source/installer/sources/initrd/etc/securetty b/source/installer/sources/initrd/etc/securetty
new file mode 100644
index 000000000..e4b461401
--- /dev/null
+++ b/source/installer/sources/initrd/etc/securetty
@@ -0,0 +1,20 @@
+# This file defines which devices root can log in on.
+
+# These are the ttys on the physical console:
+console
+tty1
+tty2
+tty3
+tty4
+tty5
+tty6
+
+# These are remote ttys, and uncommenting them might be less than fully secure:
+ttyS0
+ttyS1
+ttyS2
+ttyS3
+#ttyp0
+#ttyp1
+#ttyp2
+#ttyp3
diff --git a/source/installer/sources/initrd/etc/shadow b/source/installer/sources/initrd/etc/shadow
new file mode 100644
index 000000000..577b5d0f5
--- /dev/null
+++ b/source/installer/sources/initrd/etc/shadow
@@ -0,0 +1,17 @@
+root:joFWnPF2bJhPc:9797:0:::::
+halt:*:9797:0:::::
+operator:*:9797:0:::::
+shutdown:*:9797:0:::::
+sync:*:9797:0:::::
+bin:*:9797:0:::::
+ftp:*:9797:0:::::
+daemon:*:9797:0:::::
+adm:*:9797:0:::::
+lp:*:9797:0:::::
+mail:*:9797:0:::::
+news:*:9797:0:::::
+uucp:*:9797:0:::::
+man:*:9797:0:::::
+games:*:9797:0:::::
+guest:*:9797:0:::::
+nobody:*:9797:0:::::
diff --git a/source/installer/sources/initrd/etc/shells b/source/installer/sources/initrd/etc/shells
new file mode 100644
index 000000000..de0249b3b
--- /dev/null
+++ b/source/installer/sources/initrd/etc/shells
@@ -0,0 +1,2 @@
+/bin/sh
+/bin/bash
diff --git a/source/installer/sources/initrd/etc/syslog.conf b/source/installer/sources/initrd/etc/syslog.conf
new file mode 100644
index 000000000..055ab1c27
--- /dev/null
+++ b/source/installer/sources/initrd/etc/syslog.conf
@@ -0,0 +1,4 @@
+# Write any informational messages on virtual console 4:
+*.=info;*.=notice /dev/tty4
+*.=debug /dev/tty4
+*.warn;*.err /dev/tty4
diff --git a/source/installer/sources/initrd/etc/termcap b/source/installer/sources/initrd/etc/termcap
new file mode 100644
index 000000000..6fcd14ade
--- /dev/null
+++ b/source/installer/sources/initrd/etc/termcap
@@ -0,0 +1,238 @@
+# [Slackware note: If you're looking for a big, full-featured termcap,
+# use /etc/termcap-BSD instead ]
+#
+# From: miquels@drinkel.ow.org (Miquel van Smoorenburg)
+#
+# Okay guys, here is a shorter termcap that does have most
+# capabilities and is ncurses compatible. If it works for you
+# I'd like to hear about it.
+#
+# Some entries in termcap 2.0.7 are too long and your programs
+# may complain "tgetent: warning: termcap entry too long". Here is
+# a smaller termcap. But it may not cover as many terminals as the one
+# in termcap 2.0.7. You can install it as /etc/termcap.
+#
+# termcap Termcap entries for the VT family.
+# All termcap entries have been freed of the 'ks' and
+# 'ke' entries, that put the keypad into applications
+# mode. This is a generally misused entry, not ment
+# for the vt100 "applications" mode. Now cursor and
+# function keys will work in all programs.
+#
+# Also, there is a "generic" vt entry with common
+# entries for all terminals, on which all other entries
+# are built.
+#
+# Version: @(#) vt-termcap 1.37 12-Mar-1996 MvS
+#
+
+# Generic VT entry.
+vg|vt-generic|Generic VT entries:\
+ :bs:mi:ms:pt:xn:xo:it#8:\
+ :RA=\E[?7l:SA=\E?7h:\
+ :bl=^G:cr=^M:ta=^I:\
+ :cm=\E[%i%d;%dH:\
+ :le=^H:up=\E[A:do=\E[B:nd=\E[C:\
+ :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:DO=\E[%dB:\
+ :ho=\E[H:cl=\E[H\E[2J:ce=\E[K:cb=\E[1K:cd=\E[J:sf=\ED:sr=\EM:\
+ :ct=\E[3g:st=\EH:\
+ :cs=\E[%i%d;%dr:sc=\E7:rc=\E8:\
+ :ei=\E[4l:ic=\E[@:IC=\E[%d@:al=\E[L:AL=\E[%dL:\
+ :dc=\E[P:DC=\E[%dP:dl=\E[M:DL=\E[%dM:\
+ :so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\
+ :mb=\E[5m:mh=\E[2m:md=\E[1m:mr=\E[7m:me=\E[m:\
+ :sc=\E7:rc=\E8:kb=\177:\
+ :ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:
+
+## Linux console. One should really set TERM=linux instead of TERM=console.
+#lx|linux|console|con80x25|LINUX System Console:\
+# :co#80:li#25:am:\
+# :is=\E[m\E[?1l\E>\E[10m:\
+# :rs=\E[m\E[?1l\E>\E[10m:\
+# :ch=\E[%i%dG:cv=\E[%i%dd:\
+# :eA=\E)0:as=^N:ae=^O:ac=aaffggjjkkllmmnnooqqssttuuvvwwxx:\
+# :ve=\E[?25h:vi=\E[?25l:\
+# :se=\E[27m:ue=\E[24m:mh=\E[2m:\
+# :ks=:ke=:\
+# :kh=\E[1~:kH=\E[4~:kI=\E[2~:kD=\E[3~:kP=\E[5~:kN=\E[6~:\
+# :k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:\
+# :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:\
+# :F1=\E[23~:F2=\E[24~:\
+# :tc=vt-generic:
+
+# Slackware 3.1 linux termcap entry (Sat Apr 27 23:03:58 CDT 1996):
+lx|linux|console|con80x25|LINUX System Console:\
+ :do=^J:co#80:li#25:cl=\E[H\E[J:sf=\ED:sb=\EM:\
+ :le=^H:bs:am:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\
+ :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[27m:us=\E[36m:ue=\E[m:\
+ :md=\E[1m:mr=\E[7m:mb=\E[5m:me=\E[m:is=\E[1;25r\E[25;1H:\
+ :ll=\E[1;25r\E[25;1H:al=\E[L:dc=\E[P:dl=\E[M:\
+ :it#8:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:kb=^H:ti=\E[r\E[H:\
+ :ho=\E[H:kP=\E[5~:kN=\E[6~:kH=\E[4~:kh=\E[1~:kD=\E[3~:kI=\E[2~:\
+ :k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:k6=\E[17~:\
+ :k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:K1=\E[1~:K2=\E[5~:\
+ :K4=\E[4~:K5=\E[6~:\
+ :pt:sr=\EM:vt#3:xn:km:bl=^G:vi=\E[?25l:ve=\E[?25h:vs=\E[?25h:\
+ :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:\
+ :r1=\Ec:r2=\Ec:r3=\Ec:
+
+# Some other, commonly used linux console entries.
+lx|con80x28:co#80:li#28:tc=linux:
+lx|con80x43:co#80:li#43:tc=linux:
+lx|con80x50:co#80:li#50:tc=linux:
+lx|con100x37:co#100:li#37:tc=linux:
+lx|con100x40:co#100:li#40:tc=linux:
+lx|con132x43:co#132:li#43:tc=linux:
+
+# vt102 - vt100 + insert line etc. VT102 does not have insert character.
+v2|vt102|DEC vt102 compatible:\
+ :co#80:li#24:\
+ :ic@:IC@:\
+ :is=\E[m\E[?1l\E>:\
+ :rs=\E[m\E[?1l\E>:\
+ :eA=\E)0:as=^N:ae=^O:ac=aaffggjjkkllmmnnooqqssttuuvvwwxx:\
+ :ks=:ke=:\
+ :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
+ :tc=vt-generic:
+
+# vt100 - really vt102 without insert line, insert char etc.
+vt|vt100|DEC vt100 compatible:\
+ :im@:mi@:al@:dl@:ic@:dc@:AL@:DL@:IC@:DC@:\
+ :tc=vt102:
+
+# Standard vt320 (based on my own digital vt320)
+v3|vt320|DEC vt320:\
+ :co#80:li#24:hs:es:\
+ :is=\E[m\E[2$~\E[?1l\E>:\
+ :rs=\E[m\E[?1l\E>:\
+ :ve=\E[?25h:vi=\E[?25l:\
+ :se=\E[27m:ue=\E[24m:mh=\E[2m:\
+ :eA=\E)0:as=^N:ae=^O:ac=aaffggjjkkllmmnnooqqssttuuvvwwxx:\
+ :ts=\E[1$}\E[1;%i%dH:fs=\E[0$}:ds=\E[1$}\r\E[m\E[K\E[0$}:\
+ :ks=:ke=:\
+ :kI=\E[2~:kD=\E[3~:kP=\E[5~:kN=\E[6~:\
+ :@4=\E[29~:@0=\E[1~:*6=\E[4~:\
+ :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[16~\
+ :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:\
+ :F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:F5=\E[28~:\
+ :F6=\E[29~:F7=\E[31~:F8=\E[32~:\
+ :tc=vt-generic:
+
+v8|vt320-8|DEC vt320 in 8-bit mode:\
+ :kI=\2332~:kD=\2333~:kP=\2335~:kN=\2336~:\
+ :@4=\23329~:@0=\2331~:*6=\2334~:\
+ :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\23316~\
+ :k6=\23317~:k7=\23318~:k8=\23319~:k9=\23320~:k0=\23321~:\
+ :F1=\23323~:F2=\23324~:F3=\23325~:F4=\23326~:F5=\23328~:\
+ :F6=\23329~:F7=\23331~:F8=\23332~:\
+ :ku=\233A:kd=\233B:kr=\233C:kl=\233D:\
+ :tc=vt320:
+
+# Entry for minicom so it uses the PC (IBM) character set.
+# If this doesn't work for kernels between 1.1.18 and 1.1.80,
+# change \E(U -> \E[11m (enter ANSI mode)
+# and \E(B -> \E[10m (leave ANSI mode)
+mc|minicom|ansi-mc|termcap entry for minicom on the console:\
+ :is=\E[m\E>\E(U:\
+ :rs=\E[m\E>\E(B:\
+ :as@:ae@:eA@:ac@:\
+ :bl=\E(B\007\E(U:\
+ :vb=\E(B\007\E(U:\
+ :tc=linux:
+
+# Entry for an xterm. Insert mode has been disabled.
+vs|xterm|xterm-color|vs100|xterm terminal emulator (X Window System):\
+ :am:bs:mi@:km:co#80:li#55:\
+ :im@:ei@:\
+ :ct=\E[3k:ue=\E[m:\
+ :is=\E[m\E[?1l\E>:\
+ :rs=\E[m\E[?1l\E>:\
+ :eA=\E)0:as=^N:ae=^O:ac=aaffggjjkkllmmnnooqqssttuuvvwwxx:\
+ :kI=\E[2~:kD=\177:kP=\E[5~:kN=\E[6~:\
+ :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\
+ :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:\
+ :F1=\E[23~:F2=\E[24~:\
+ :kh=\E[H:kH=\EOw:\
+ :ks=:ke=:\
+ :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:\
+ :tc=vt-generic:
+
+# Some other entries for the same xterm.
+v2|xterms|vs100s|xterm small window:\
+ :co#80:li#24:tc=xterm:
+vb|xterm-bold|xterm with bold instead of underline:\
+ :us=\E[1m:tc=xterm:
+vi|xterm-ins|xterm with insert mode:\
+ :mi:im=\E[4h:ei=\E[4l:tc=xterm:
+
+Eterm|Eterm Terminal Emulator (X11 Window System):\
+ :am:bw:eo:km:mi:ms:xn:xo:\
+ :co#80:it#8:li#24:lm#0:pa#64:Co#8:AF=\E[3%dm:AB=\E[4%dm:op=\E[39m\E[49m:\
+ :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+ :K1=\E[7~:K2=\EOu:K3=\E[5~:K4=\E[8~:K5=\E[6~:LE=\E[%dD:\
+ :RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:bl=^G:cd=\E[J:\
+ :ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:\
+ :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=\E[B:\
+ :ec=\E[%dX:ei=\E[4l:ho=\E[H:i1=\E[?47l\E>\E[?1l:ic=\E[@:\
+ :im=\E[4h:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l:\
+ :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\
+ :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:kD=\E[3~:\
+ :kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=^H:kd=\E[B:ke=:kh=\E[7~:\
+ :kl=\E[D:kr=\E[C:ks=:ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:\
+ :me=\E[m\017:mr=\E[7m:nd=\E[C:rc=\E8:\
+ :sc=\E7:se=\E[27m:sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+ :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:ue=\E[24m:up=\E[A:\
+ :us=\E[4m:vb=\E[?5h\E[?5l:ve=\E[?25h:vi=\E[?25l:\
+ :ac=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:
+
+# DOS terminal emulator such as Telix or TeleMate.
+# This probably also works for the SCO console, though it's incomplete.
+an|ansi|ansi-bbs|ANSI terminals (emulators):\
+ :co#80:li#24:am:\
+ :is=:rs=\Ec:kb=^H:\
+ :as=\E[m:ae=:eA=:\
+ :ac=0\333+\257,\256.\031-\030a\261f\370g\361j\331k\277l\332m\300n\305q\304t\264u\303v\301w\302x\263~\025:\
+ :kD=\177:kH=\E[Y:kN=\E[U:kP=\E[V:kh=\E[H:\
+ :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:\
+ :k6=\EOU:k7=\EOV:k8=\EOW:k9=\EOX:k0=\EOY:\
+ :tc=vt-generic:
+
+# This seems to be an entry for other x86 based unices.
+at|at386-m|386AT-M|386at-m|at/386 console:\
+ :am:bw:eo:xt:co#80:li#25:\
+ :ae=\E[10m:as=\E[12m:\
+ :is=\E[0;10;38m:\
+ :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:\
+ :k6=\EOU:k7=\EOV:k8=\EOW:k9=\EOX:\
+ :kh=\E[H:us=\E[4m:vb=^G:nl=\E[B:kb=^H:\
+ :tc=vt-generic:
+
+# Yeah - Minix still lives :)
+ma|minix|minix-am|minix-vcam|MINIX 1.5 Virtual Console:\
+ :am:bs:co#80:li#25:km:ms:\
+ :is=\E[0m\EPlinewrap.on\E\\:\
+ :rs=\Ec\EPlinewrap.on\E\\:\
+ :as=:ae=:eA=:\
+ :ac=0\333+\257,\256.\031-\030a\261f\370g\361j\331k\277l\332m\300n\305q\304t\264u\303v\301w\302x\263~\025:\
+ :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:\
+ :k6=\EOU:k7=\EOV:k8=\EOW:k9=\EOX:k0=\EOY:\
+ :kD=\177:kH=\E[Y:kN=\E[U:kP=\E[V:kh=\E[H:kb=^H:\
+ :ve=\EPcursor.on\E\\:vi=\EPcursor.off\E\\:\
+ :tc=vt-generic:
+
+# Some obligatory historic entries.
+sa|network|ethernet|arpanet:co#80:os:am:
+su|dumb|un|unknown:co#80:os:am:
+sd|du|dialup:co#80:os:am:
+t7|37|tty37|model 37 teletype:\
+ :cr=^M:do=^J:nl=^J:bl=^G:le=^H:bs:hc:hu=\E8:hd=\E9:up=\E7:os:
+
+# Yes, there really are people that login from a Sun Console.
+mu|sun|Sun Microsystems Workstation console:\
+ :am:bs:km:mi:ms:pt:\
+ :li#34:co#80:cl=^L:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\
+ :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:\
+ :kd=\E[B:kl=\E[D:ku=\E[A:kr=\E[C:kh=\E[H:\
+ :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
+ :al=\E[L:dl=\E[M:im=:ei=:ic=\E[@:dc=\E[P:\
+ :rs=\E[s:
diff --git a/source/installer/sources/initrd/init b/source/installer/sources/initrd/init
new file mode 120000
index 000000000..ebb2a55dd
--- /dev/null
+++ b/source/installer/sources/initrd/init
@@ -0,0 +1 @@
+sbin/init \ No newline at end of file
diff --git a/source/installer/sources/initrd/mnt/README b/source/installer/sources/initrd/mnt/README
new file mode 100644
index 000000000..ac27d0cea
--- /dev/null
+++ b/source/installer/sources/initrd/mnt/README
@@ -0,0 +1,5 @@
+
+...don't go mounting your source partition(s) here. This directory is used
+by 'setup' to mount your target partition(s). If you need to mount something,
+make your own directory.
+
diff --git a/source/installer/sources/initrd/nfs b/source/installer/sources/initrd/nfs
new file mode 120000
index 000000000..3f165753a
--- /dev/null
+++ b/source/installer/sources/initrd/nfs
@@ -0,0 +1 @@
+/var/log/mount \ No newline at end of file
diff --git a/source/installer/sources/initrd/root/README b/source/installer/sources/initrd/root/README
new file mode 120000
index 000000000..e138796b4
--- /dev/null
+++ b/source/installer/sources/initrd/root/README
@@ -0,0 +1 @@
+/etc/motd \ No newline at end of file
diff --git a/source/installer/sources/initrd/sbin/brc b/source/installer/sources/initrd/sbin/brc
new file mode 100755
index 000000000..683f471bf
--- /dev/null
+++ b/source/installer/sources/initrd/sbin/brc
@@ -0,0 +1,19 @@
+#!/bin/sh
+#
+# /sbin/brc (whatever that means ;)
+# This script gets run just before the system is down.
+#
+cat << EOF
+
+
+The system is rebooting NOW!
+
+Syncing disks...
+EOF
+/bin/sync
+echo
+echo "Unmounting file systems... "
+/bin/umount -a 1> /dev/null 2> /dev/null
+echo
+sleep 2
+/sbin/reboot -f
diff --git a/source/installer/sources/initrd/sbin/cfdisk b/source/installer/sources/initrd/sbin/cfdisk
new file mode 100755
index 000000000..582a1414b
--- /dev/null
+++ b/source/installer/sources/initrd/sbin/cfdisk
@@ -0,0 +1,5 @@
+#!/bin/sh
+cfdisk.bin $*
+if [ -x /dev/makedevs.sh ]; then
+ /dev/makedevs.sh
+fi
diff --git a/source/installer/sources/initrd/sbin/fakedate b/source/installer/sources/initrd/sbin/fakedate
new file mode 100755
index 000000000..e89d438dc
--- /dev/null
+++ b/source/installer/sources/initrd/sbin/fakedate
@@ -0,0 +1,4 @@
+if [ -r /.today ]; then
+ date -s yesterday 1> /dev/null 2> /dev/null
+ rm -f /.today
+fi
diff --git a/source/installer/sources/initrd/sbin/fdisk b/source/installer/sources/initrd/sbin/fdisk
new file mode 100755
index 000000000..7b0c2693f
--- /dev/null
+++ b/source/installer/sources/initrd/sbin/fdisk
@@ -0,0 +1,5 @@
+#!/bin/sh
+fdisk.bin $*
+if [ -x /dev/makedevs.sh ]; then
+ /dev/makedevs.sh
+fi
diff --git a/source/installer/sources/initrd/sbin/fixdate b/source/installer/sources/initrd/sbin/fixdate
new file mode 100755
index 000000000..096349909
--- /dev/null
+++ b/source/installer/sources/initrd/sbin/fixdate
@@ -0,0 +1,4 @@
+if [ ! -r /.today ]; then
+ date -s tomorrow 1> /dev/null 2> /dev/null
+ touch /.today
+fi
diff --git a/source/installer/sources/initrd/sbin/probe b/source/installer/sources/initrd/sbin/probe
new file mode 100755
index 000000000..eca6db9dd
--- /dev/null
+++ b/source/installer/sources/initrd/sbin/probe
@@ -0,0 +1,438 @@
+#!/bin/sh
+# This is 'probe', a wrapper for using fdisk to gather drive info for
+# the Slackware setup scripts. I hate to bounce this much garbage through
+# a tmpdir, but it looks like large variables can make ash crash...
+
+# Many thanks to Vincent Rivellino for contributing the patches to support
+# Mylex and Compaq RAID controllers.
+
+# Regularize output that will be parsed:
+unset LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY \
+ LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT \
+ LC_IDENTIFICATION LC_ALL
+LANG=C
+export LANG
+
+TMP=/var/log/setup/tmp
+
+# Use cached results if they exist and /proc/partitions has not changed:
+if [ -r $TMP/SeTpartition.md5 -a -r $TMP/SeTfdisk ]; then
+ if [ "$(cat $TMP/SeTpartition.md5)" = "$(md5sum /proc/partitions)" ]; then
+ cat $TMP/SeTfdisk
+ exit 0
+ fi
+fi
+
+# First run, or /proc/partitions has changed.
+# Make a checksum for later comparison:
+md5sum /proc/partitions > $TMP/SeTpartition.md5
+
+# Wipe any previously existing results:
+rm -f $TMP/SeTfdisk
+
+# listide major minor hd1 hd2 (2 base devs for major)
+list_ide() {
+ if [ "$2" = "0" ]; then
+ fdisk -l /dev/$3 >> $TMP/SeTfdisk
+ elif [ "$2" = "64" ]; then
+ fdisk -l /dev/$4 >> $TMP/SeTfdisk
+ fi
+}
+
+list_scsi() {
+ # find drive # 0 - 15
+ DRV=`expr $1 / 16`
+ NUM=`expr $1 % 16`
+ if [ ! "$NUM" = "0" ]; then
+ return
+ fi
+ if [ "$DRV" = "0" ]; then
+ fdisk -l /dev/sda >> $TMP/SeTfdisk
+ elif [ "$DRV" = "1" ]; then
+ fdisk -l /dev/sdb >> $TMP/SeTfdisk
+ elif [ "$DRV" = "2" ]; then
+ fdisk -l /dev/sdc >> $TMP/SeTfdisk
+ elif [ "$DRV" = "3" ]; then
+ fdisk -l /dev/sdd >> $TMP/SeTfdisk
+ elif [ "$DRV" = "4" ]; then
+ fdisk -l /dev/sde >> $TMP/SeTfdisk
+ elif [ "$DRV" = "5" ]; then
+ fdisk -l /dev/sdf >> $TMP/SeTfdisk
+ elif [ "$DRV" = "6" ]; then
+ fdisk -l /dev/sdg >> $TMP/SeTfdisk
+ elif [ "$DRV" = "7" ]; then
+ fdisk -l /dev/sdh >> $TMP/SeTfdisk
+ elif [ "$DRV" = "8" ]; then
+ fdisk -l /dev/sdi >> $TMP/SeTfdisk
+ elif [ "$DRV" = "9" ]; then
+ fdisk -l /dev/sdj >> $TMP/SeTfdisk
+ elif [ "$DRV" = "10" ]; then
+ fdisk -l /dev/sdk >> $TMP/SeTfdisk
+ elif [ "$DRV" = "11" ]; then
+ fdisk -l /dev/sdl >> $TMP/SeTfdisk
+ elif [ "$DRV" = "12" ]; then
+ fdisk -l /dev/sdm >> $TMP/SeTfdisk
+ elif [ "$DRV" = "13" ]; then
+ fdisk -l /dev/sdn >> $TMP/SeTfdisk
+ elif [ "$DRV" = "14" ]; then
+ fdisk -l /dev/sdo >> $TMP/SeTfdisk
+ elif [ "$DRV" = "15" ]; then
+ fdisk -l /dev/sdp >> $TMP/SeTfdisk
+ fi
+}
+
+# List Mylex RAID device
+list_rd() {
+ # find drive
+ DRV=`expr $2 / 8`
+ NUM=`expr $2 % 8`
+ if [ ! "$NUM" = "0" ]; then
+ return
+ fi
+ fdisk -l /dev/rd/c$1d$DRV >> $TMP/SeTfdisk
+ #output_gpt_partitions /dev/rd/c$1d$DRV >> $TMP/SeTfdisk
+}
+
+# List Cpq SMART/2 RAID device
+list_ida() {
+ # find drive
+ DRV=`expr $2 / 16`
+ NUM=`expr $2 % 16`
+ if [ ! "$NUM" = "0" ]; then
+ return
+ fi
+ fdisk -l /dev/ida/c$1d$DRV >> $TMP/SeTfdisk
+ #output_gpt_partitions /dev/ida/c$1d$DRV >> $TMP/SeTfdisk
+}
+
+list_cciss() {
+ # find drive
+ DRV=`expr $2 / 16`
+ NUM=`expr $2 % 16`
+ if [ ! "$NUM" = "0" ]; then
+ return
+ fi
+ fdisk -l /dev/cciss/c$1d$DRV >> $TMP/SeTfdisk
+ #output_gpt_partitions /dev/cciss/c$1d$DRV >> $TMP/SeTfdisk
+}
+
+list_ataraid() {
+ # find drive
+ DRV=`expr $2 / 16`
+ NUM=`expr $2 % 16`
+ if [ "$NUM" = "0" ]; then
+ fdisk -l /dev/ataraid/d$DRV >> $TMP/SeTfdisk
+ #output_gpt_partitions /dev/ataraid/d$DRV >> $TMP/SeTfdisk
+ else
+ return
+ fi
+}
+
+list_amiraid() {
+ # find drive
+ DRV=`expr $2 / 16`
+ NUM=`expr $2 % 16`
+ if [ "$NUM" = "0" ]; then
+ fdisk -l /dev/amiraid/ar$DRV >> $TMP/SeTfdisk
+ #output_gpt_partitions /dev/amiraid/ar$DRV >> $TMP/SeTfdisk
+ else
+ return
+ fi
+}
+
+list_mmc() {
+ # find drive
+ DRV=`expr $2 / 8`
+ NUM=`expr $2 % 8`
+ if [ "$NUM" = "0" ]; then
+ fdisk -l /dev/mmcblk$DRV >> $TMP/SeTfdisk
+ #output_gpt_partitions /dev/mmcblk$DRV >> $TMP/SeTfdisk
+ else
+ return
+ fi
+}
+
+list_nvme() {
+ fdisk -l | grep $1 >> $TMP/SeTfdisk 2> /dev/null
+}
+
+is_swap() {
+ HEADER=$(dd if="$1" bs=1 skip=4086 count=10 2>/dev/null | strings)
+ if [ "$HEADER" = "SWAPSPACE2" -o "$HEADER" = "SWAP_SPACE" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+list_md() {
+ if ( is_swap "/dev/$2" ); then TYPE="Linux swap"; else TYPE="Linux"; fi
+ echo "/dev/$2 1 2 $1 kk $TYPE" >> $TMP/SeTfdisk
+}
+
+list_lvm() {
+ lvscan 2>/dev/null | grep "ACTIVE" | while read line ; do
+ SMASHED_LINE=$line
+ if [ "$SMASHED_LINE" = "" ]; then
+ break;
+ fi
+ DEV=`echo $SMASHED_LINE | cut -f2 -d"'"`
+ SIZE=`lvdisplay $DEV -C --units k --noheadings --separator : | cut -f4 -d':' | sed -e 's/^\([0-9]*\)[^0-9].*/\1/'`
+ TYPE="Linux"
+ if ( is_swap "$DEV" ); then TYPE="Linux swap"; fi
+ echo "$DEV 0 0 $SIZE lv $TYPE" >> $TMP/SeTfdisk
+ done
+}
+
+# List any volumes created by cryptsetup
+list_crypt() {
+ for i in $(ls /dev/mapper/); do
+ if cryptsetup status $i 2>/dev/null | grep "is active" 1>/dev/null ; then
+ DEV=$(cryptsetup status $i 2>/dev/null | grep "is active" | cut -f1 -d' ')
+ SIZE=$(fdisk -s $(cryptsetup status $i 2>/dev/null | grep "device:" | cut -f2 -d: | tr -d ' '))
+ echo "$DEV 0 0 $SIZE lc Linux" >> $TMP/SeTfdisk
+ fi
+ done
+}
+
+# List virtual partitions
+list_virt() {
+ fdisk -l /dev/$1 >> $TMP/SeTfdisk
+ #output_gpt_partitions /dev/$1 >> $TMP/SeTfdisk
+}
+
+output_gpt_partitions() {
+# First, make sure the device is GPT:
+if fdisk -l $1 2> /dev/null | grep -wq -e "GPT" -e "Disklabel type: gpt" ; then
+ unset output
+ # In the case of some RAID device like Mylex we will need to delimit the
+ # partition number. We will set a partition delimiter variable P set
+ # either to an empty string (default) or the needed delimiter.
+ TESTRAID="$(echo $1 | cut -f 2 -d /)"
+ case "$TESTRAID" in
+ 'amiraid' )
+ P="p"
+ ;;
+ 'ataraid' )
+ P="p"
+ ;;
+ 'cciss' )
+ P="p"
+ ;;
+ 'ida' )
+ P="p"
+ ;;
+ 'rd' )
+ P="p"
+ ;;
+ *)
+ P=""
+ ;;
+ esac
+ gdisk -l $1 | tr -d '*' | while read parse ; do
+ if [ ! -z $output ]; then
+ line=$parse
+ if [ ! "$(echo $line | cut -b1)" = "" ]; then
+ gptpartition=${1}${P}$(echo $line | cut -f 1 -d ' ')
+ gpttype="$(echo $line | cut -f 6 -d ' ')"
+ if [ "$gpttype" = "8200" ]; then
+ fdisktype="Linux swap"
+ elif [ "$gpttype" = "0700" ]; then
+ if dd if=$gptpartition bs=1K count=1 2> /dev/null | grep -wq NTFS ; then
+ fdisktype="HPFS/NTFS"
+ elif dd if=$gptpartition bs=1K count=1 2> /dev/null | grep -wq EXFAT ; then
+ fdisktype="exFAT"
+ else
+ fdisktype="W95 FAT32"
+ fi
+ elif [ "$gpttype" = "AF00" ]; then
+ fdisktype="HFS+"
+ elif [ "$gpttype" = "EF00" ]; then
+ fdisktype="EFI System Partition"
+ elif [ "$gpttype" = "8300" ]; then
+ fdisktype=Linux
+ else
+ fdisktype="Unknown hex code $gpttype"
+ fi
+ sectorsize="$(gdisk -l $1 | tr -d '*' | grep "Logical sector size" | cut -f 2 -d : | cut -f 2 -d ' ')"
+ gptstart="$(expr $(echo $line | cut -f 2 -d ' ') \* $sectorsize / 1024)"
+ gptend="$(expr $(echo $line | cut -f 3 -d ' ') \* $sectorsize / 1024)"
+ gptsize="$(expr $gptend - $gptstart)"
+ echo $gptpartition $gptstart $gptend $gptsize $gpttype $fdisktype
+ fi
+ fi
+ if echo $parse | grep -q "^Number" ; then
+ output=true
+ fi
+ done
+fi
+}
+
+list_scsi_gpt() {
+ # find drive # 0 - 15
+ DRV=`expr $1 / 16`
+ NUM=`expr $1 % 16`
+ if [ ! "$NUM" = "0" ]; then
+ return
+ fi
+ if [ "$DRV" = "0" ]; then
+ output_gpt_partitions /dev/sda
+ elif [ "$DRV" = "1" ]; then
+ output_gpt_partitions /dev/sdb
+ elif [ "$DRV" = "2" ]; then
+ output_gpt_partitions /dev/sdc
+ elif [ "$DRV" = "3" ]; then
+ output_gpt_partitions /dev/sdd
+ elif [ "$DRV" = "4" ]; then
+ output_gpt_partitions /dev/sde
+ elif [ "$DRV" = "5" ]; then
+ output_gpt_partitions /dev/sdf
+ elif [ "$DRV" = "6" ]; then
+ output_gpt_partitions /dev/sdg
+ elif [ "$DRV" = "7" ]; then
+ output_gpt_partitions /dev/sdh
+ elif [ "$DRV" = "8" ]; then
+ output_gpt_partitions /dev/sdi
+ elif [ "$DRV" = "9" ]; then
+ output_gpt_partitions /dev/sdj
+ elif [ "$DRV" = "10" ]; then
+ output_gpt_partitions /dev/sdk
+ elif [ "$DRV" = "11" ]; then
+ output_gpt_partitions /dev/sdl
+ elif [ "$DRV" = "12" ]; then
+ output_gpt_partitions /dev/sdm
+ elif [ "$DRV" = "13" ]; then
+ output_gpt_partitions /dev/sdn
+ elif [ "$DRV" = "14" ]; then
+ output_gpt_partitions /dev/sdo
+ elif [ "$DRV" = "15" ]; then
+ output_gpt_partitions /dev/sdp
+ fi
+}
+
+# List the LVM volumes:
+list_lvm
+
+# List CRYPT volumes:
+list_crypt
+
+## This is obsolete, since fdisk handles GPT now.
+## List GPT partitions:
+#cat /proc/partitions | while read line ; do
+# SMASHED_LINE=$line
+# MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
+# MINOR=`echo $SMASHED_LINE | cut -f 2 -d ' '`
+# if [ "$MAJOR" = "8" ]; then
+# list_scsi_gpt $MINOR
+# fi
+#done
+
+# Other partitions:
+if cat /proc/partitions | grep -E '/|[0-9]' 1>/dev/null 2>/dev/null ; then # new
+ cat /proc/partitions | grep -E '/|[0-9]' | while read line ; do
+ SMASHED_LINE=$line
+ MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
+ MINOR=`echo $SMASHED_LINE | cut -f 2 -d ' '`
+ DEVNAME=`echo $SMASHED_LINE | cut -f 4 -d ' '`
+ if [ "$MAJOR" = "3" ]; then
+ list_ide $MAJOR $MINOR hda hdb
+ elif [ "$MAJOR" = "8" ]; then
+ list_scsi $MINOR
+ elif [ "$MAJOR" = "9" ]; then
+ list_md `echo $SMASHED_LINE | cut -f 3 -d ' ' | tr -d '/'` \
+ `echo $SMASHED_LINE | cut -f 4 -d ' '`
+ elif [ "$MAJOR" = "22" ]; then
+ list_ide $MAJOR $MINOR hdc hdd
+ elif [ "$MAJOR" = "33" ]; then
+ list_ide $MAJOR $MINOR hde hdf
+ elif [ "$MAJOR" = "34" ]; then
+ list_ide $MAJOR $MINOR hdg hdh
+ elif [ "$MAJOR" = "48" ]; then
+ list_rd 0 $MINOR
+ elif [ "$MAJOR" = "49" ]; then
+ list_rd 1 $MINOR
+ elif [ "$MAJOR" = "50" ]; then
+ list_rd 2 $MINOR
+ elif [ "$MAJOR" = "51" ]; then
+ list_rd 3 $MINOR
+ elif [ "$MAJOR" = "52" ]; then
+ list_rd 4 $MINOR
+ elif [ "$MAJOR" = "53" ]; then
+ list_rd 5 $MINOR
+ elif [ "$MAJOR" = "54" ]; then
+ list_rd 6 $MINOR
+ elif [ "$MAJOR" = "55" ]; then
+ list_rd 7 $MINOR
+ elif [ "$MAJOR" = "56" ]; then
+ list_ide $MAJOR $MINOR hdi hdj
+ elif [ "$MAJOR" = "57" ]; then
+ list_ide $MAJOR $MINOR hdk hdl
+ elif [ "$MAJOR" = "72" ]; then
+ list_ida 0 $MINOR
+ elif [ "$MAJOR" = "73" ]; then
+ list_ida 1 $MINOR
+ elif [ "$MAJOR" = "74" ]; then
+ list_ida 2 $MINOR
+ elif [ "$MAJOR" = "75" ]; then
+ list_ida 3 $MINOR
+ elif [ "$MAJOR" = "76" ]; then
+ list_ida 4 $MINOR
+ elif [ "$MAJOR" = "77" ]; then
+ list_ida 5 $MINOR
+ elif [ "$MAJOR" = "78" ]; then
+ list_ida 6 $MINOR
+ elif [ "$MAJOR" = "79" ]; then
+ list_ida 7 $MINOR
+ elif [ "$MAJOR" = "80" ]; then
+ list_ide $MAJOR $MINOR hdm hdn
+ elif [ "$MAJOR" = "89" ]; then
+ list_ide $MAJOR $MINOR hdo hdp
+ elif [ "$MAJOR" = "90" ]; then
+ list_ide $MAJOR $MINOR hdq hdr
+ elif [ "$MAJOR" = "91" ]; then
+ list_ide $MAJOR $MINOR hds hdt
+ elif [ "$MAJOR" = "101" ]; then
+ list_amiraid $MAJOR $MINOR
+ elif [ "$MAJOR" = "104" \
+ -o "$MAJOR" = "105" \
+ -o "$MAJOR" = "106" \
+ -o "$MAJOR" = "107" \
+ -o "$MAJOR" = "108" \
+ -o "$MAJOR" = "109" \
+ -o "$MAJOR" = "110" \
+ -o "$MAJOR" = "111" ]; then
+ list_cciss $(( $MAJOR - 104 )) $MINOR
+ elif [ "$MAJOR" = "114" ]; then
+ list_ataraid $MAJOR $MINOR
+ elif [ "$MAJOR" = "179" ]; then
+ list_mmc $MAJOR $MINOR
+ elif [ "$MAJOR" = "259" ]; then
+ if echo $line | grep -q p; then
+ list_nvme $DEVNAME
+ fi
+ elif [ $(expr $DEVNAME : 'x\?vd[^0-9]*$') -ne 0 ]; then
+ # The virtio devices have no set major dev number, so we have to search
+ # by name. Matches full drive names for KVM/lguest (vda) and Xen (xvda).
+ list_virt $DEVNAME
+ fi
+ done
+else # old format and no RAID:
+ if cat /proc/partitions | grep md 1> /dev/null 2> /dev/null ; then
+ cat /proc/partitions | grep md | while read line ; do
+ SMASHED_LINE=$line
+ MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
+ if [ "$MAJOR" = "9" ]; then
+ list_md `echo $SMASHED_LINE | cut -f 3 -d ' ' | tr -d '/'` \
+ `echo $SMASHED_LINE | cut -f 4 -d ' '`
+ fi
+ done
+ fi
+ fdisk -l 2> /dev/null >> $TMP/SeTfdisk
+fi
+
+# Change the names to be the same as what the old fdisk used:
+sed -i -e "s/Linux filesystem/Linux/g" $TMP/SeTfdisk
+sed -i -e "s/EFI System/EFI System Partition/g" $TMP/SeTfdisk
+sed -i -e "s,EFI (FAT-12/16/32),EFI System Partition,g" $TMP/SeTfdisk
+
+cat $TMP/SeTfdisk
diff --git a/source/installer/sources/initrd/sbin/rescan-scsi-bus b/source/installer/sources/initrd/sbin/rescan-scsi-bus
new file mode 100755
index 000000000..0bfca50d1
--- /dev/null
+++ b/source/installer/sources/initrd/sbin/rescan-scsi-bus
@@ -0,0 +1,755 @@
+#!/bin/bash
+# Skript to rescan SCSI bus, using the
+# scsi add-single-device mechanism
+# (c) 1998--2010 Kurt Garloff <kurt@garloff.de>, GNU GPL v2 or v3
+# (c) 2006--2008 Hannes Reinecke, GNU GPL v2 or later
+# $Id: rescan-scsi-bus.sh,v 1.56 2012/01/14 22:23:53 garloff Exp $
+
+SCAN_WILD_CARD=4294967295
+
+setcolor ()
+{
+ red="\e[0;31m"
+ green="\e[0;32m"
+ yellow="\e[0;33m"
+ bold="\e[0;1m"
+ norm="\e[0;0m"
+}
+
+unsetcolor ()
+{
+ red=""; green=""
+ yellow=""; norm=""
+}
+
+# Output some text and return cursor to previous position
+# (only works for simple strings)
+# Stores length of string in LN and returns it
+print_and_scroll_back ()
+{
+ STRG="$1"
+ LN=${#STRG}
+ BK=""
+ declare -i cntr=0
+ while test $cntr -lt $LN; do BK="$BK\e[D"; let cntr+=1; done
+ echo -en "$STRG$BK"
+ return $LN
+}
+
+# Overwrite a text of length $1 (fallback to $LN) with whitespace
+white_out ()
+{
+ BK=""; WH=""
+ if test -n "$1"; then LN=$1; fi
+ declare -i cntr=0
+ while test $cntr -lt $LN; do BK="$BK\e[D"; WH="$WH "; let cntr+=1; done
+ echo -en "$WH$BK"
+}
+
+# Return hosts. sysfs must be mounted
+findhosts_26 ()
+{
+ hosts=`find /sys/class/scsi_host/host* -maxdepth 4 -type d -o -type l 2> /dev/null | awk -F'/' '{print $5}' | sed -e 's~host~~' | sort -nu`
+ scsi_host_data=`echo "$hosts" | sed -e 's~^~/sys/class/scsi_host/host~'`
+ for hostdir in $scsi_host_data; do
+ hostno=${hostdir#/sys/class/scsi_host/host}
+ if [ -f $hostdir/isp_name ] ; then
+ hostname="qla2xxx"
+ elif [ -f $hostdir/lpfc_drvr_version ] ; then
+ hostname="lpfc"
+ else
+ hostname=`cat $hostdir/proc_name`
+ fi
+ #hosts="$hosts $hostno"
+ echo "Host adapter $hostno ($hostname) found."
+ done
+ if [ -z "$hosts" ] ; then
+ echo "No SCSI host adapters found in sysfs"
+ exit 1;
+ fi
+ # Not necessary just use double quotes around variable to preserve new lines
+ #hosts=`echo $hosts | tr ' ' '\n'`
+}
+
+# Return hosts. /proc/scsi/HOSTADAPTER/? must exist
+findhosts ()
+{
+ hosts=
+ for driverdir in /proc/scsi/*; do
+ driver=${driverdir#/proc/scsi/}
+ if test $driver = scsi -o $driver = sg -o $driver = dummy -o $driver = device_info; then continue; fi
+ for hostdir in $driverdir/*; do
+ name=${hostdir#/proc/scsi/*/}
+ if test $name = add_map -o $name = map -o $name = mod_parm; then continue; fi
+ num=$name
+ driverinfo=$driver
+ if test -r $hostdir/status; then
+ num=$(printf '%d\n' `sed -n 's/SCSI host number://p' $hostdir/status`)
+ driverinfo="$driver:$name"
+ fi
+ hosts="$hosts $num"
+ echo "Host adapter $num ($driverinfo) found."
+ done
+ done
+}
+
+printtype ()
+{
+ local type=$1
+
+ case "$type" in
+ 0) echo "Direct-Access " ;;
+ 1) echo "Sequential-Access" ;;
+ 2) echo "Printer " ;;
+ 3) echo "Processor " ;;
+ 4) echo "WORM " ;;
+ 5) echo "CD-ROM " ;;
+ 6) echo "Scanner " ;;
+ 7) echo "Optical Device " ;;
+ 8) echo "Medium Changer " ;;
+ 9) echo "Communications " ;;
+ 10) echo "Unknown " ;;
+ 11) echo "Unknown " ;;
+ 12) echo "RAID " ;;
+ 13) echo "Enclosure " ;;
+ 14) echo "Direct-Access-RBC" ;;
+ *) echo "Unknown " ;;
+ esac
+}
+
+print02i()
+{
+ if [ "$1" = "*" ] ; then
+ echo "00"
+ else
+ printf "%02i" "$1"
+ fi
+}
+
+# Get /proc/scsi/scsi info for device $host:$channel:$id:$lun
+# Optional parameter: Number of lines after first (default = 2),
+# result in SCSISTR, return code 1 means empty.
+procscsiscsi ()
+{
+ if test -z "$1"; then LN=2; else LN=$1; fi
+ CHANNEL=`print02i "$channel"`
+ ID=`print02i "$id"`
+ LUN=`print02i "$lun"`
+ if [ -d /sys/class/scsi_device ]; then
+ SCSIPATH="/sys/class/scsi_device/${host}:${channel}:${id}:${lun}"
+ if [ -d "$SCSIPATH" ] ; then
+ SCSISTR="Host: scsi${host} Channel: $CHANNEL Id: $ID Lun: $LUN"
+ if [ "$LN" -gt 0 ] ; then
+ IVEND=$(cat ${SCSIPATH}/device/vendor)
+ IPROD=$(cat ${SCSIPATH}/device/model)
+ IPREV=$(cat ${SCSIPATH}/device/rev)
+ SCSIDEV=$(printf ' Vendor: %-08s Model: %-16s Rev: %-4s' "$IVEND" "$IPROD" "$IPREV")
+ SCSISTR="$SCSISTR
+$SCSIDEV"
+ fi
+ if [ "$LN" -gt 1 ] ; then
+ ILVL=$(cat ${SCSIPATH}/device/scsi_level)
+ type=$(cat ${SCSIPATH}/device/type)
+ ITYPE=$(printtype $type)
+ SCSITMP=$(printf ' Type: %-16s ANSI SCSI revision: %02d' "$ITYPE" "$((ILVL - 1))")
+ SCSISTR="$SCSISTR
+$SCSITMP"
+ fi
+ else
+ return 1
+ fi
+ else
+ grepstr="scsi$host Channel: $CHANNEL Id: $ID Lun: $LUN"
+ SCSISTR=`cat /proc/scsi/scsi | grep -A$LN -e"$grepstr"`
+ fi
+ if test -z "$SCSISTR"; then return 1; else return 0; fi
+}
+
+# Find sg device with 2.6 sysfs support
+sgdevice26 ()
+{
+ if test -e /sys/class/scsi_device/$host\:$channel\:$id\:$lun/device/generic; then
+ SGDEV=`readlink /sys/class/scsi_device/$host\:$channel\:$id\:$lun/device/generic`
+ SGDEV=`basename $SGDEV`
+ else
+ for SGDEV in /sys/class/scsi_generic/sg*; do
+ DEV=`readlink $SGDEV/device`
+ if test "${DEV##*/}" = "$host:$channel:$id:$lun"; then
+ SGDEV=`basename $SGDEV`; return
+ fi
+ done
+ SGDEV=""
+ fi
+}
+
+# Find sg device with 2.4 report-devs extensions
+sgdevice24 ()
+{
+ if procscsiscsi 3; then
+ SGDEV=`echo "$SCSISTR" | grep 'Attached drivers:' | sed 's/^ *Attached drivers: \(sg[0-9]*\).*/\1/'`
+ fi
+}
+
+# Find sg device that belongs to SCSI device $host $channel $id $lun
+# and return in SGDEV
+sgdevice ()
+{
+ SGDEV=
+ if test -d /sys/class/scsi_device; then
+ sgdevice26
+ else
+ DRV=`grep 'Attached drivers:' /proc/scsi/scsi 2>/dev/null`
+ repdevstat=$((1-$?))
+ if [ $repdevstat = 0 ]; then
+ echo "scsi report-devs 1" >/proc/scsi/scsi
+ DRV=`grep 'Attached drivers:' /proc/scsi/scsi 2>/dev/null`
+ if [ $? = 1 ]; then return; fi
+ fi
+ if ! `echo $DRV | grep 'drivers: sg' >/dev/null`; then
+ modprobe sg
+ fi
+ sgdevice24
+ if [ $repdevstat = 0 ]; then
+ echo "scsi report-devs 0" >/proc/scsi/scsi
+ fi
+ fi
+}
+
+# Test if SCSI device is still responding to commands
+testonline ()
+{
+ : testonline
+ RC=0
+ if test ! -x /usr/bin/sg_turs; then return 0; fi
+ sgdevice
+ if test -z "$SGDEV"; then return 0; fi
+ sg_turs /dev/$SGDEV >/dev/null 2>&1
+ RC=$?
+ # Handle in progress of becoming ready and unit attention -- wait at max 11s
+ declare -i ctr=0
+ if test $RC = 2 -o $RC = 6; then
+ RMB=`sg_inq /dev/$SGDEV | grep 'RMB=' | sed 's/^.*RMB=\(.\).*$/\1/'`
+ print_and_scroll_back "$host:$channel:$id:$lun $SGDEV ($RMB) "
+ fi
+ while test $RC = 2 -o $RC = 6 && test $ctr -le 8; do
+ if test $RC = 2 -a "$RMB" != "1"; then echo -n "."; let $LN+=1; sleep 1
+ else usleep 20000; fi
+ let ctr+=1
+ sg_turs /dev/$SGDEV >/dev/null 2>&1
+ RC=$?
+ done
+ if test $ctr != 0; then white_out; fi
+ # echo -e "\e[A\e[A\e[A${yellow}Test existence of $SGDEV = $RC ${norm} \n\n\n"
+ if test $RC = 1; then return $RC; fi
+ # Reset RC (might be !=0 for passive paths)
+ RC=0
+ # OK, device online, compare INQUIRY string
+ INQ=`sg_inq $sg_len_arg /dev/$SGDEV 2>/dev/null`
+ IVEND=`echo "$INQ" | grep 'Vendor identification:' | sed 's/^[^:]*: \(.*\)$/\1/'`
+ IPROD=`echo "$INQ" | grep 'Product identification:' | sed 's/^[^:]*: \(.*\)$/\1/'`
+ IPREV=`echo "$INQ" | grep 'Product revision level:' | sed 's/^[^:]*: \(.*\)$/\1/'`
+ STR=`printf " Vendor: %-08s Model: %-16s Rev: %-4s" "$IVEND" "$IPROD" "$IPREV"`
+ IPTYPE=`echo "$INQ" | sed -n 's/.* Device_type=\([0-9]*\) .*/\1/p'`
+ IPQUAL=`echo "$INQ" | sed -n 's/ *PQual=\([0-9]*\) Device.*/\1/p'`
+ if [ "$IPQUAL" != 0 ] ; then
+ echo -e "\e[A\e[A\e[A\e[A${red}$SGDEV changed: ${bold}LU not available (PQual $IPQUAL)${norm} \n\n\n"
+ return 2
+ fi
+
+ TYPE=$(printtype $IPTYPE)
+ procscsiscsi
+ TMPSTR=`echo "$SCSISTR" | grep 'Vendor:'`
+ if [ "$TMPSTR" != "$STR" ]; then
+ echo -e "\e[A\e[A\e[A\e[A${red}$SGDEV changed: ${bold}\nfrom:${SCSISTR#* } \nto: $STR ${norm} \n\n\n"
+ return 1
+ fi
+ TMPSTR=`echo "$SCSISTR" | sed -n 's/.*Type: *\(.*\) *ANSI.*/\1/p'`
+ if [ $TMPSTR != $TYPE ] ; then
+ echo -e "\e[A\e[A\e[A\e[A${red}$SGDEV changed: ${bold}\nfrom:${TMPSTR} \nto: $TYPE ${norm} \n\n\n"
+ return 1
+ fi
+ return $RC
+}
+
+# Test if SCSI device $host $channen $id $lun exists
+# Outputs description from /proc/scsi/scsi (unless arg passed)
+# Returns SCSISTR (empty if no dev)
+testexist ()
+{
+ : testexist
+ SCSISTR=
+ if procscsiscsi && test -z "$1"; then
+ echo "$SCSISTR" | head -n1
+ echo "$SCSISTR" | tail -n2 | pr -o4 -l1
+ fi
+}
+
+# Returns the list of existing channels per host
+chanlist ()
+{
+ local hcil
+ local cil
+ local chan
+ local tmpchan
+
+ for dev in /sys/class/scsi_device/${host}:* ; do
+ [ -d $dev ] || continue;
+ hcil=${dev##*/}
+ cil=${hcil#*:}
+ chan=${cil%%:*}
+ for tmpchan in $channelsearch ; do
+ if test "$chan" -eq $tmpchan ; then
+ chan=
+ fi
+ done
+ if test -n "$chan" ; then
+ channelsearch="$channelsearch $chan"
+ fi
+ done
+ if test -z "$channelsearch"; then channelsearch="0"; fi
+}
+
+# Returns the list of existing targets per host
+idlist ()
+{
+ local hcil
+ local cil
+ local il
+ local target
+ local tmpid
+
+ for dev in /sys/class/scsi_device/${host}:${channel}:* ; do
+ [ -d $dev ] || continue;
+ hcil=${dev##*/}
+ cil=${hcil#*:}
+ il=${cil#*:}
+ target=${il%%:*}
+ for tmpid in $idsearch ; do
+ if test "$target" -eq $tmpid ; then
+ target=
+ break
+ fi
+ done
+ if test -n "$target" ; then
+ idsearch="$idsearch $target"
+ fi
+ done
+}
+
+# Returns the list of existing LUNs from device $host $channel $id $lun
+# and returns list to stdout
+getluns()
+{
+ sgdevice
+ if test -z "$SGDEV"; then return 1; fi
+ if test ! -x /usr/bin/sg_luns; then echo 0; return 1; fi
+ LLUN=`sg_luns /dev/$SGDEV 2>/dev/null | sed -n 's/ \(.*\)/\1/p'`
+ if test $? != 0; then echo 0; return 1; fi
+ #echo "$LLUN" | sed -n 's/.*lun=\(.*\)/\1/p'
+ for lun in $LLUN ; do
+ # Swap LUN number
+ l0=$(printf '%u' 0x$lun)
+ l1=$(( ($l0 >> 48) & 0xffff ))
+ l2=$(( ($l0 >> 32) & 0xffff ))
+ l3=$(( ($l0 >> 16) & 0xffff ))
+ l4=$(( $l0 & 0xffff ))
+ l0=$(( ( ( ($l4 * 0xffff) + $l3 ) * 0xffff + $l2 ) * 0xffff + $l1 ))
+ printf "%u\n" $l0
+ done
+ return 0
+}
+
+# Wait for udev to settle (create device nodes etc.)
+udevadm_settle()
+{
+ if test -x /sbin/udevadm; then
+ print_and_scroll_back " Calling udevadm settle (can take a while) "
+ /sbin/udevadm settle
+ white_out
+ elif test -x /sbin/udevsettle; then
+ print_and_scroll_back " Calling udevsettle (can take a while) "
+ /sbin/udevsettle
+ white_out
+ else
+ usleep 20000
+ fi
+}
+
+# Perform scan on a single lun $host $channel $id $lun
+dolunscan()
+{
+ SCSISTR=
+ devnr="$host $channel $id $lun"
+ echo -e " Scanning for device $devnr ... "
+ printf "${yellow}OLD: $norm"
+ testexist
+ # Special case: lun 0 just got added (for reportlunscan),
+ # so make sure we correctly treat it as new
+ if test "$lun" = "0" -a "$1"; then
+ SCSISTR=""
+ printf "\r\e[A\e[A\e[A"
+ fi
+ : f $remove s $SCSISTR
+ if test "$remove" -a "$SCSISTR"; then
+ # Device exists: Test whether it's still online
+ # (testonline returns 1 if it's gone or has changed)
+ testonline
+ RC=$?
+ if test $RC != 0 -o ! -z "$forceremove"; then
+ echo -en "\r\e[A\e[A\e[A${red}REM: "
+ echo "$SCSISTR" | head -n1
+ echo -e "${norm}\e[B\e[B"
+ if test -e /sys/class/scsi_device/${host}:${channel}:${id}:${lun}/device; then
+ echo 1 > /sys/class/scsi_device/${host}:${channel}:${id}:${lun}/device/delete
+ # FIXME: Can we skip udevadm settle for removal?
+ #udevadm_settle
+ usleep 20000
+ else
+ echo "scsi remove-single-device $devnr" > /proc/scsi/scsi
+ if test $RC -eq 1 -o $lun -eq 0 ; then
+ # Try readding, should fail if device is gone
+ echo "scsi add-single-device $devnr" > /proc/scsi/scsi
+ fi
+ fi
+ fi
+ if test $RC = 0 -o "$forcerescan" ; then
+ if test -e /sys/class/scsi_device/${host}:${channel}:${id}:${lun}/device; then
+ echo 1 > /sys/class/scsi_device/${host}:${channel}:${id}:${lun}/device/rescan
+ udevadm_settle
+ fi
+ fi
+ printf "\r\e[A\e[A\e[A${yellow}OLD: $norm"
+ testexist
+ if test -z "$SCSISTR"; then
+ printf "\r${red}DEL: $norm\r\n\n"
+ let rmvd+=1;
+ return 1
+ fi
+ fi
+ if test -z "$SCSISTR"; then
+ # Device does not exist, try to add
+ printf "\r${green}NEW: $norm"
+ if test -e /sys/class/scsi_host/host${host}/scan; then
+ echo "$channel $id $lun" > /sys/class/scsi_host/host${host}/scan 2> /dev/null
+ udevadm_settle
+ else
+ echo "scsi add-single-device $devnr" > /proc/scsi/scsi
+ fi
+ testexist
+ if test -z "$SCSISTR"; then
+ # Device not present
+ printf "\r\e[A";
+ # Optimization: if lun==0, stop here (only if in non-remove mode)
+ if test $lun = 0 -a -z "$remove" -a $optscan = 1; then
+ break;
+ fi
+ else
+ let found+=1;
+ fi
+ fi
+}
+
+# Perform report lun scan on $host $channel $id using REPORT_LUNS
+doreportlun()
+{
+ lun=0
+ SCSISTR=
+ devnr="$host $channel $id $lun"
+ echo -en " Scanning for device $devnr ...\r"
+ lun0added=
+ #printf "${yellow}OLD: $norm"
+ # Phase one: If LUN0 does not exist, try to add
+ testexist -q
+ if test -z "$SCSISTR"; then
+ # Device does not exist, try to add
+ #printf "\r${green}NEW: $norm"
+ if test -e /sys/class/scsi_host/host${host}/scan; then
+ echo "$channel $id $lun" > /sys/class/scsi_host/host${host}/scan 2> /dev/null
+ udevadm_settle
+ else
+ echo "scsi add-single-device $devnr" > /proc/scsi/scsi
+ fi
+ testexist -q
+ if test -n "$SCSISTR"; then
+ lun0added=1
+ #testonline
+ else
+ # Device not present
+ # return
+ # Find alternative LUN to send getluns to
+ for dev in /sys/class/scsi_device/${host}:${channel}:${id}:*; do
+ [ -d "$dev" ] || continue
+ lun=${dev##*:}
+ break
+ done
+ fi
+ fi
+ targetluns=`getluns`
+ REPLUNSTAT=$?
+ lunremove=
+ #echo "getluns reports " $targetluns
+ olddev=`find /sys/class/scsi_device/ -name $host:$channel:$id:* 2>/dev/null`
+ oldluns=`echo "$olddev" | awk -F'/' '{print $5}' | awk -F':' '{print $4}'`
+ oldtargets="$targetluns"
+ # OK -- if we don't have a LUN to send a REPORT_LUNS to, we could
+ # fall back to wildcard scanning. Same thing if the device does not
+ # support REPORT_LUNS
+ # TODO: We might be better off to ALWAYS use wildcard scanning if
+ # it works
+ if test "$REPLUNSTAT" = "1"; then
+ if test -e /sys/class/scsi_host/host${host}/scan; then
+ echo "$channel $id -" > /sys/class/scsi_host/host${host}/scan 2> /dev/null
+ udevadm_settle
+ else
+ echo "scsi add-single-device $host $channel $id $SCAN_WILD_CARD" > /proc/scsi/scsi
+ fi
+ targetluns=`find /sys/class/scsi_device/ -name $host:$channel:$id:* 2>/dev/null | awk -F'/' '{print $5}' | awk -F':' '{print $4}' | sort -n`
+ let found+=`echo "$targetluns" | wc -l`
+ let found-=`echo "$olddev" | wc -l`
+ fi
+ if test -z "$targetluns"; then targetluns="$oldtargets"; fi
+ # Check existing luns
+ for dev in $olddev; do
+ [ -d "$dev" ] || continue
+ lun=${dev##*:}
+ newsearch=
+ inlist=
+ # OK, is existing $lun (still) in reported list
+ for tmplun in $targetluns; do
+ if test $tmplun -eq $lun ; then
+ inlist=1
+ dolunscan $lun0added
+ else
+ newsearch="$newsearch $tmplun"
+ fi
+ done
+ # OK, we have now done a lunscan on $lun and
+ # $newsearch is the old $targetluns without $lun
+ if [ -z "$inlist" ]; then
+ # Stale lun
+ lunremove="$lunremove $lun"
+ fi
+ # $lun removed from $lunsearch (echo for whitespace cleanup)
+ targetluns=`echo $newsearch`
+ done
+ # Add new ones and check stale ones
+ for lun in $targetluns $lunremove; do
+ dolunscan $lun0added
+ done
+}
+
+# Perform search (scan $host)
+dosearch ()
+{
+ if test -z "$channelsearch" ; then
+ chanlist
+ fi
+ for channel in $channelsearch; do
+ if test -z "$idsearch" ; then
+ idlist
+ fi
+ for id in $idsearch; do
+ if test -z "$lunsearch" ; then
+ doreportlun
+ else
+ for lun in $lunsearch; do
+ dolunscan
+ done
+ fi
+ done
+ done
+}
+
+expandlist ()
+{
+ list=$1
+ result=""
+ first=${list%%,*}
+ rest=${list#*,}
+ while test ! -z "$first"; do
+ beg=${first%%-*};
+ if test "$beg" = "$first"; then
+ result="$result $beg";
+ else
+ end=${first#*-}
+ result="$result `seq $beg $end`"
+ fi
+ test "$rest" = "$first" && rest=""
+ first=${rest%%,*}
+ rest=${rest#*,}
+ done
+ echo $result
+}
+
+# main
+if test @$1 = @--help -o @$1 = @-h -o @$1 = @-?; then
+ echo "Usage: rescan-scsi-bus.sh [options] [host [host ...]]"
+ echo "Options:"
+ echo " -l activates scanning for LUNs 0--7 [default: 0]"
+ echo " -L NUM activates scanning for LUNs 0--NUM [default: 0]"
+ echo " -w scan for target device IDs 0--15 [default: 0--7]"
+ echo " -c enables scanning of channels 0 1 [default: 0 / all detected ones]"
+ echo " -r enables removing of devices [default: disabled]"
+ echo " -i issue a FibreChannel LIP reset [default: disabled]"
+ echo "--remove: same as -r"
+ echo "--issue-lip: same as -i"
+ echo "--forcerescan: Rescan existing devices"
+ echo "--forceremove: Remove and readd every device (DANGEROUS)"
+ echo "--nooptscan: don't stop looking for LUNs is 0 is not found"
+ echo "--color: use coloured prefixes OLD/NEW/DEL"
+ echo "--hosts=LIST: Scan only host(s) in LIST"
+ echo "--channels=LIST: Scan only channel(s) in LIST"
+ echo "--ids=LIST: Scan only target ID(s) in LIST"
+ echo "--luns=LIST: Scan only lun(s) in LIST"
+ echo "--sync/nosync: Issue a sync / no sync [default: sync if remove]"
+ echo "--attachpq3: Tell kernel to attach sg to LUN 0 that reports PQ=3"
+ echo "--reportlun2: Tell kernel to try REPORT_LUN even on SCSI2 devices"
+ echo "--largelun: Tell kernel to support LUNs > 7 even on SCSI2 devs"
+ echo "--sparselun: Tell kernel to support sparse LUN numbering"
+ echo " Host numbers may thus be specified either directly on cmd line (deprecated) or"
+ echo " or with the --hosts=LIST parameter (recommended)."
+ echo "LIST: A[-B][,C[-D]]... is a comma separated list of single values and ranges"
+ echo " (No spaces allowed.)"
+ exit 0
+fi
+
+if test ! -d /sys/class/scsi_host/ -a ! -d /proc/scsi/; then
+ echo "Error: SCSI subsystem not active"
+ exit 1
+fi
+
+# Make sure sg is there
+modprobe sg >/dev/null 2>&1
+
+if test -x /usr/bin/sg_inq; then
+ sg_version=$(sg_inq -V 2>&1 | cut -d " " -f 3)
+ sg_version=${sg_version##0.}
+ #echo "\"$sg_version\""
+ #if [ -z "$sg_version" -o "$sg_version" -lt 70 ] ; then
+ #sg_len_arg="-36"
+ #else
+ sg_len_arg="--len=36"
+ #fi
+else
+ echo "WARN: /usr/bin/sg_inq not present -- please install sg3_utils"
+ echo " or rescan-scsi-bus.sh might not fully work."
+fi
+
+# defaults
+unsetcolor
+lunsearch=
+opt_idsearch=`seq 0 7`
+opt_channelsearch=
+remove=
+forceremove=
+optscan=1
+sync=1
+declare -i scan_flags=0
+if test -d /sys/class/scsi_host; then
+ findhosts_26
+else
+ findhosts
+fi
+
+# Scan options
+opt="$1"
+while test ! -z "$opt" -a -z "${opt##-*}"; do
+ opt=${opt#-}
+ case "$opt" in
+ l) lunsearch=`seq 0 7` ;;
+ L) lunsearch=`seq 0 $2`; shift ;;
+ w) opt_idsearch=`seq 0 15` ;;
+ c) opt_channelsearch="0 1" ;;
+ r) remove=1 ;;
+ i) lipreset=1 ;;
+ -remove) remove=1 ;;
+ -forcerescan) remove=1; forcerescan=1 ;;
+ -forceremove) remove=1; forceremove=1 ;;
+ -hosts=*) arg=${opt#-hosts=}; hosts=`expandlist $arg` ;;
+ -channels=*) arg=${opt#-channels=};opt_channelsearch=`expandlist $arg` ;;
+ -ids=*) arg=${opt#-ids=}; opt_idsearch=`expandlist $arg` ;;
+ -luns=*) arg=${opt#-luns=}; lunsearch=`expandlist $arg` ;;
+ -color) setcolor ;;
+ -nooptscan) optscan=0 ;;
+ -issue-lip) lipreset=1 ;;
+ -sync) sync=2 ;;
+ -nosync) sync=0 ;;
+ -attachpq3) scan_flags=$(($scan_flags|0x1000000)) ;;
+ -reportlun2) scan_flags=$(($scan_flags|0x20000)) ;;
+ -largelun) scan_flags=$(($scan_flags|0x200)) ;;
+ -sparselun) scan_flags=$((scan_flags|0x40)) ;;
+ *) echo "Unknown option -$opt !" ;;
+ esac
+ shift
+ opt="$1"
+done
+
+# Hosts given ?
+if test "@$1" != "@"; then
+ hosts=$*
+fi
+
+if [ -d /sys/class/scsi_host -a ! -w /sys/class/scsi_host ]; then
+ echo "You need to run scsi-rescan-bus.sh as root"
+ exit 2
+fi
+if test "$sync" = 1 -a "$remove" = 1; then sync=2; fi
+if test "$sync" = 2; then echo "Syncing file systems"; sync; fi
+if test -w /sys/module/scsi_mod/parameters/default_dev_flags -a $scan_flags != 0; then
+ OLD_SCANFLAGS=`cat /sys/module/scsi_mod/parameters/default_dev_flags`
+ NEW_SCANFLAGS=$(($OLD_SCANFLAGS|$scan_flags))
+ if test "$OLD_SCANFLAGS" != "$NEW_SCANFLAGS"; then
+ echo -n "Temporarily setting kernel scanning flags from "
+ printf "0x%08x to 0x%08x\n" $OLD_SCANFLAGS $NEW_SCANFLAGS
+ echo $NEW_SCANFLAGS > /sys/module/scsi_mod/parameters/default_dev_flags
+ else
+ unset OLD_SCANFLAGS
+ fi
+fi
+echo "Scanning SCSI subsystem for new devices"
+test -z "$remove" || echo " and remove devices that have disappeared"
+declare -i found=0
+declare -i rmvd=0
+for host in $hosts; do
+ echo -n "Scanning host $host "
+ if test -e /sys/class/fc_host/host$host ; then
+ # It's pointless to do a target scan on FC
+ if test -n "$lipreset" ; then
+ echo 1 > /sys/class/fc_host/host$host/issue_lip 2> /dev/null;
+ udevadm_settle
+ fi
+ # We used to always trigger a rescan for FC to update channels and targets
+ # Commented out -- as discussed with Hannes we should rely
+ # on the main loop doing the scan, no need to do it here.
+ #echo "- - -" > /sys/class/scsi_host/host$host/scan 2> /dev/null;
+ #udevadm_settle
+ channelsearch=
+ idsearch=
+ else
+ channelsearch=$opt_channelsearch
+ idsearch=$opt_idsearch
+ fi
+ [ -n "$channelsearch" ] && echo -n "channels $channelsearch "
+ echo -n "for "
+ if [ -n "$idsearch" ] ; then
+ echo -n " SCSI target IDs " $idsearch
+ else
+ echo -n " all SCSI target IDs"
+ fi
+ if [ -n "$lunsearch" ] ; then
+ echo ", LUNs " $lunsearch
+ else
+ echo ", all LUNs"
+ fi
+ dosearch
+done
+if test -n "$OLD_SCANFLAGS"; then
+ echo $OLD_SCANFLAGS > /sys/module/scsi_mod/parameters/default_dev_flags
+fi
+echo "$found new device(s) found. "
+echo "$rmvd device(s) removed. "
+
+# Local Variables:
+# sh-basic-offset: 2
+# End:
+
diff --git a/source/installer/sources/initrd/scripts/network.sh b/source/installer/sources/initrd/scripts/network.sh
new file mode 100644
index 000000000..499251c44
--- /dev/null
+++ b/source/installer/sources/initrd/scripts/network.sh
@@ -0,0 +1,155 @@
+#!/bin/sh
+
+# Remove extra whitespace
+crunch() {
+ while read line ; do
+ echo $line
+ done
+}
+
+echo
+echo "******* Welcome to the network supplemental disk! *******"
+echo
+
+# main loop:
+while [ 0 ]; do
+
+echo "-- Press [enter] to automatically probe for all network cards, or switch"
+echo " to a different console and use 'modprobe' to load the modules manually."
+echo "-- To skip probing some modules (in case of hangs), enter them after an S:"
+echo " S eepro100 ne2k-pci"
+echo "-- To probe only certain modules, enter them after a P like this:"
+echo " P 3c503 3c505 3c507"
+echo "-- To get a list of network modules, enter an L."
+echo "-- To skip the automatic probe entirely, enter a Q now."
+echo
+
+# Clear "card found" flag:
+rm -f /cardfound
+
+echo -n "network> "
+read INPUT;
+echo
+
+if [ "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "L" \
+ -o "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "l" ]; then
+ echo "Available network modules:"
+ for file in /lib/modules/`uname -r`/kernel/drivers/net/* /lib/modules/`uname -r`/kernel/arch/i386/kernel/* /lib/modules/`uname -r`/kernel/drivers/pnp/* ; do
+ if [ -r $file ]; then
+ OUTPUT=`basename $file .gz`
+ OUTPUT=`basename $OUTPUT .o`
+ echo -n "$OUTPUT "
+ fi
+ done
+ echo
+ echo
+ continue
+fi
+
+if [ ! "$INPUT" = "q" -a ! "$INPUT" = "Q" \
+ -a ! "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "P" \
+ -a ! "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "p" ]; then
+ echo "Probing for PCI/EISA network cards:"
+ for card in \
+ 3c59x acenic de4x5 dgrs eepro100 e1000 e1000e e100 epic100 hp100 ne2k-pci olympic pcnet32 rcpci 8139too 8139cp tulip via-rhine r8169 atl1e sktr yellowfin tg3 dl2k ns83820 \
+ ; do
+ SKIP=""
+ if [ "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "S" \
+ -o "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "s" ]; then
+ for nogood in `echo $INPUT | crunch | cut -f 2- -d ' '` ; do
+ if [ "$card" = "$nogood" ]; then
+ SKIP=$card
+ fi
+ done
+ fi
+ if [ "$SKIP" = "" ]; then
+ echo "Probing for card using the $card module..."
+ modprobe $card 2> /dev/null
+ grep -q eth0 /proc/net/dev
+ if [ $? = 0 ]; then
+ echo
+ echo "SUCCESS: found card using $card protocol -- modules loaded."
+ echo "$card" > /cardfound
+ echo
+ break
+ else
+ modprobe -r $card 2> /dev/null
+ fi
+ else
+ echo "Skipping module $card..."
+ fi
+ done
+ echo
+ if [ ! -r /cardfound ]; then
+ # Don't probe for com20020... it loads on any machine with or without the card.
+ echo "Probing for MCA, ISA, and other PCI network cards:"
+ # removed because it needs an irq parameter: arlan
+ # tainted, no autoprobe: (arcnet) com90io com90xx
+ for card in depca ibmtr 3c501 3c503 3c505 3c507 3c509 3c515 ac3200 \
+ acenic at1700 cosa cs89x0 de4x5 de600 \
+ de620 e2100 eepro eexpress es3210 eth16i ewrk3 fmv18x forcedeth hostess_sv11 \
+ hp-plus hp lne390 ne3210 ni5010 ni52 ni65 sb1000 sealevel smc-ultra \
+ sis900 smc-ultra32 smc9194 wd ; do
+ SKIP=""
+ if [ "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "S" \
+ -o "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "s" ]; then
+ for nogood in `echo $INPUT | crunch | cut -f 2- -d ' '` ; do
+ if [ "$card" = "$nogood" ]; then
+ SKIP=$card
+ fi
+ done
+ fi
+ if [ "$SKIP" = "" ]; then
+ echo "Probing for card using the $card module..."
+ modprobe $card 2> /dev/null
+ grep -q eth0 /proc/net/dev
+ if [ $? = 0 ]; then
+ echo
+ echo "SUCCESS: found card using $card protocol -- modules loaded."
+ echo "$card" > /cardfound
+ echo
+ break
+ else
+ modprobe -r $card 2> /dev/null
+ fi
+ else
+ echo "Skipping module $card..."
+ fi
+ done
+ echo
+ fi
+ if [ ! -r /cardfound ]; then
+ echo "Sorry, but no network card was detected. Some cards (like non-PCI"
+ echo "NE2000s) must be supplied with the I/O address to use. If you have"
+ echo "an NE2000, you can switch to another console (Alt-F2), log in, and"
+ echo "load it with a command like this:"
+ echo
+ echo " modprobe ne io=0x360"
+ echo
+ fi
+elif [ "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "P" \
+ -o "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "p" ]; then
+ echo "Probing for a custom list of modules:"
+ for card in `echo $INPUT | crunch | cut -f 2- -d ' '` ; do
+ echo "Probing for card using the $card module..."
+ modprobe $card 2> /dev/null
+ grep -q eth0 /proc/net/dev
+ if [ $? = 0 ]; then
+ echo
+ echo "SUCCESS: found card using $card protocol -- modules loaded."
+ echo "$card" > /cardfound
+ echo
+ break
+ else
+ modprobe -r $card 2> /dev/null
+ fi
+ done
+ echo
+else
+ echo "Skipping automatic module probe."
+ echo
+fi
+
+# end main loop
+break
+done
diff --git a/source/installer/sources/initrd/tag/README b/source/installer/sources/initrd/tag/README
new file mode 100644
index 000000000..39bf68cbf
--- /dev/null
+++ b/source/installer/sources/initrd/tag/README
@@ -0,0 +1,5 @@
+This used to be a place to make custom tagfiles, but now it's just here as a
+"non-standard directory" so that we have a good way to probe if we're running
+off the rootdisk and not an installed system. We need to know this within
+pkgtool when it's started up at a prompt so we know to emit some mounting
+instructions.
diff --git a/source/installer/sources/initrd/usr/bin/logger b/source/installer/sources/initrd/usr/bin/logger
new file mode 100755
index 000000000..5aa972663
--- /dev/null
+++ b/source/installer/sources/initrd/usr/bin/logger
@@ -0,0 +1,6 @@
+#!/bin/bash
+# os-prober fails if it can't call /usr/bin/logger, which we don't have on
+# the installer since we don't keep logs there. Instead we'll just call
+# /bin/true as a workaround.
+
+/bin/true
diff --git a/source/installer/sources/initrd/usr/bin/man b/source/installer/sources/initrd/usr/bin/man
new file mode 120000
index 000000000..7cfe33a2f
--- /dev/null
+++ b/source/installer/sources/initrd/usr/bin/man
@@ -0,0 +1 @@
+../../bin/man \ No newline at end of file
diff --git a/source/installer/sources/initrd/usr/bin/zcat b/source/installer/sources/initrd/usr/bin/zcat
new file mode 120000
index 000000000..b40211eb5
--- /dev/null
+++ b/source/installer/sources/initrd/usr/bin/zcat
@@ -0,0 +1 @@
+../../bin/zcat \ No newline at end of file
diff --git a/source/installer/sources/initrd/usr/lib/setup/FDhelp b/source/installer/sources/initrd/usr/lib/setup/FDhelp
new file mode 100644
index 000000000..1c06d34e1
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/FDhelp
@@ -0,0 +1,256 @@
+
+Slackware Linux Help
+____________________
+
+First, a little help on help. Whenever you encounter a text
+viewer like this during the installation, you can move around
+with these commands:
+
+PGDN/SPACE - Move down one page
+PGUP/'b' - Move up one page
+ENTER/DOWN/'j' - Move down one line
+UP/'k' - Move up one line
+LEFT/'h' - Scroll left
+RIGHT/'l' - Scroll right
+'0' - Move to beginning of line
+HOME/'g' - Move to beginning of file
+END/'G' - Move to end of file
+'/' - Forward search
+'?' - Backward search
+'n' - Repeat last search (forward)
+
+Also, you're running a real multitasking operating system now, so
+you're not confined to the installation program. You can log into
+other consoles and look around at any time without disturbing the
+installation process. To do this, you need to learn the commands
+that control the Linux console. You'll use these commands all the
+time when you're logged into Linux.
+
+"Virtual" consoles and scrollback:
+
+Right now, the screen you're looking at is probably VIRTUAL CONSOLE
+NUMBER ONE, (or /dev/tty1 in Linux-speak). There are usually
+several virtual consoles available. When you log into the install
+disk, there are four consoles. To switch among them, use Alt-F1,
+Alt-F2, Alt-F3, or Alt-F4 to select which of the four consoles you
+wish to use. While you're using a console, you get a small amount
+of text scrollback buffer. To scroll the console back, hold down
+the right shift key and hit PageUp. To scroll the console forward,
+hit PageDown while holding the right shift key down. This can be
+especially useful for reading the boot messages, which can go by
+too fast to read otherwise.
+
+On the install disk, the first three consoles are login consoles.
+The fourth console is used to show informational messages during
+installation, such as disk formatting status, kernel messages, and
+so on.
+
+A useful trick is to log into the second virtual console during the
+installation. Then you can use commands such as 'df' to check how
+full your hard drive is getting. Also, once the Slackware CD-ROM
+has been mounted on /cdrom, most of the commands in the disc's live
+filesystem will be usable.
+
+
+PARTITIONING YOUR DRIVE (MBR SYSTEMS)
+
+If you have a newer machine that uses GPT (all UEFI machines do),
+or you wish to use GPT, skip to the section below on GPT PARTITIONING.
+
+Now lets take a look at how you progress through a typical Linux
+installation with the Slackware distribution. First, you'll have
+to make sure your hard drive has been partitioned to accept Linux.
+The setup program does not do this for you.
+
+You will need at least one type Linux partition, and optionally a
+swap partition. In my opinion, (if you have a fair amount of drive
+space) it's easiest to manage a system that's partitioned along these
+lines (ignoring any Windows or other partitions for the purposes
+of this illustration):
+
+ [ 8 gig or more for / ]
+ [ whatever space users need for /home ]
+ [ swap space (match the size of your RAM) ]
+
+Some people like a separate partition for /usr/local, but I find that
+I usually regret dividing my free space when I don't have to... the
+partition I want to add to is always full that way. :^) Besides, when
+the time comes for an operating system upgrade you can always back up
+/usr/local regardless of whether it occupies its own partition. In
+fact, having a separate /home partition is also optional. Probably the
+simplest way to approach things initially is with just a single root
+Linux partition, and a swap partition of about 1-2 gigabytes.
+
+The amount of drive space you'll want to give Linux depends on what
+software you plan to install, and how much space you have to spare.
+My primary Linux partition is 23 gigabytes. If you've got that
+kind of room to spare, it will make it easier to compile and try out
+large pieces of software, or to work with large files such as might be
+used in desktop publishing or CD-ROM mastering applications.
+
+The entire Slackware system (everything - all the X servers, Emacs,
+the works) will use about 8 gigabytes of hard drive space,
+so 10 - 15 gigs is sufficient for a complete installation.
+
+In the past, I've actually done development work on a single /
+partition of 110 MB. (Of course, that was back in the days of Linux
+version 0.99p11 or so...) Still, with careful selection you can still
+squeeze a small Linux system onto a system, but this is not recommended
+for beginners. It's more useful when utilizing Slackware as a base for
+an embedded system. Most people should be going a full installation.
+It's faster and easier, and less error-prone.
+
+Partitioning is done with a partitioning tool such as fdisk. There are
+two versions of Linux fdisk available now. 'fdisk' is the standard
+version, and 'cfdisk' is a friendlier full screen version. Most
+people will probably want to use 'cfdisk' now, unless they're used
+to the older version (like me). Either one will get the job done.
+
+Make sure you use Linux fdisk to tag partitions as type 83 (Linux, the
+default) or type 82 (Linux swap) so the Slackware setup program will
+recognize them. Use the 't' command for that, and 'w' to write out the
+changes.
+
+If you prefer an easy to use graphical partitioning tool, you can make
+all your Linux partitions directly from Linux 'cfdisk'. Or you can
+make them with the older 'fdisk' using the 'n' command to create a
+partition and the 'w' command to write out the changes when you're done.
+
+By default, 'fdisk' and 'cfdisk' will partition the first hard drive in
+your machine, which is /dev/sda. To partition other drives, you'll
+have to specify the drive to partition when you start 'cfdisk'. For
+example, to partition the second IDE drive:
+
+ # cfdisk /dev/sdb
+
+
+SWAP SPACE
+
+If your machine doesn't have much memory, you might have already
+learned how to activate a swap partition just to make it this far.
+Normally you won't need to format or activate your swap space by
+hand, but if you're installing on a machine with low memory you will
+need to format and activate a swap partition to be able to install.
+Once you've made the partition with fdisk, you need to use 'mkswap'
+on it, and then activate it with 'swapon'. Checking the partition
+table with 'fdisk -l', we see these lines:
+
+ Device Boot Start End Blocks Id System
+/dev/sda8 16650 16898 2000061 82 Linux swap
+
+So, the command to format would be:
+
+ # mkswap /dev/sda8
+ # sync
+
+And to activate it:
+
+ # swapon /dev/sda8
+
+
+GPT PARTITIONING
+
+If you have a Windows partition that you'd like to keep and need to make
+free space for Linux, boot the machine into Windows. Move the mouse into
+the upper right corner, and select the search function (magnifying glass
+icon). Enter diskmgmt.msc to start up the Disk Management tool. The disk
+partitions will be displayed as a bar chart at the bottom of the window.
+Mouse over the main Windows partition (probably the largest NTFS partition)
+and right click to bring up a menu. Select "Shrink Volume..." from this
+menu. Shrink the partition to make enough free space for Slackware's root,
+swap, and other partitions.
+
+NOTE: Rather than creating true free space, this resizing operation may
+leave the extra space in the form of a generic (but allocated) partition.
+Take note of the size of the "free space". When it comes time to partition
+on Linux, you may need to delete this partition to make actual free space
+before you can install.
+
+If you are installing to a machine that has Windows installed, then you'll
+already have an EFI System Partition (this is used to store boot files on
+machines that use UEFI). To check this, you can use gdisk. We'll assume
+that you'll be installing to /dev/sda. If you'll be installing to some other
+device, use that in the command below.
+
+gdisk -l /dev/sda
+
+If you see a partition with Code EF00 listed, then you are good to go.
+If not, you will need to make one. To do that, use cgdisk:
+
+cgdisk /dev/sda
+
+Select the free space from the menu using the up/down keys, and then select
+"New" to make a new partition. Hit ENTER to accept the first sector. Then
+enter 100M as the partition size. Give the new partition a hex code of EF00.
+You make give the partition a name (such as "EFI System Partition"), or just
+hit ENTER to use no name. A name is not required.
+
+At this point, you've got a GPT disk with an EFI System partition (with or
+without Windows). The next step is to make the partitions for Linux. If
+you're not already in cgdisk, start that up with "cgdisk /dev/sda" (or
+whatever your install device is). Start by making a swap partition. A
+good rule of thumb is to make the swap partition equal to the amount of RAM
+in your machine. So, select the free space again, and then "New". Again,
+hit ENTER to accept the default first sector for the new partition. Then,
+enter an appropriate size, such as 2G. Enter the hex code for Linux swap,
+which is 8200. Give the partition a name if you like.
+
+Make your root Linux partition (optionally if you leave some space you can make
+any additional Linux partitions that you'll need). Select the free space, and
+"New". Accept the default first sector by hitting ENTER. To make the
+partition use the rest of the disk space, just hit ENTER again when asked for
+a size. Or, you may choose a smaller size if you're planning to make more
+Linux partitions. Hit ENTER to accept the default hex code, which is for a
+Linux filesystem. Name the partition (if you like), or hit ENTER again.
+
+If you have any more free space and partitions to make, now is the time to
+make them.
+
+When you're done, select "Write" to write the partition table changes to the
+disk (verify by typing "yes" when prompted), hit a key to continue, and then
+select "Quit" to leave cgdisk.
+
+
+RUNNING THE SETUP PROGRAM
+
+Setup has quite a few options, which can be slightly confusing the
+first time you look at the menu. It's not really that hard, though.
+You just need to start at the top of the screen and work towards
+the bottom through the menu options. When I install, I usually do
+these options in order:
+
+ADDSWAP (set up my swapspace)
+TARGET (set up my Linux/Windows partitions and /etc/fstab)
+SOURCE (select the source location for the Slackware Linux
+ packages)
+SELECT (pick the package categories to install)
+INSTALL (install the software, generally with "full")
+CONFIGURE (configure the newly installed system)
+
+Note that after I select the SWAP option, setup will allow me to
+run through all of the other options without ever returning to the
+main menu.
+
+I hope that these options will be mostly self-explanatory. Just read
+the screen carefully as you install and you should do just fine.
+
+
+REMAPPING YOUR KEYBOARD:
+
+KEYMAP: This option lets you remap your keyboard to one of the many
+international maps provided with Linux. If you are using a US
+keyboard, you can skip this option.
+
+
+...WHEN YOU'RE DONE:
+
+
+EXIT: This leaves Slackware Linux setup.
+
+
+Have fun installing and running Linux!
+
+---
+Patrick Volkerding
+volkerdi@slackware.com
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/INCISO b/source/installer/sources/initrd/usr/lib/setup/INCISO
new file mode 100755
index 000000000..e34076c0d
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/INCISO
@@ -0,0 +1,31 @@
+# Determine if there is an ISO image to loop-mount:
+check_iso_image () {
+ local IDIR=$1
+ local MNTDIR=$2
+ [ ! -d $IDIR ] && return 1
+ [ -z "$MNTDIR" ] && MNTDIR=/var/log/mount
+
+ IISO=$(ls --indicator-style=none "$IDIR"/slackwar*-install-dvd.iso 2>/dev/null |tail -1)
+
+ if [ -n "$IISO" ]; then
+ cat << EOF > $TMP/tempmsg
+
+An ISO image of Slackware's install DVD was found.
+Do you want me to mount the ISO image and use this as the package source?
+
+EOF
+ dialog --title "USE ISO IMAGE" --yesno "`cat $TMP/tempmsg`" 9 65
+ RET=$?
+ if [ ! $RET = 0 ]; then
+ rm -f $TMP/tempmsg
+ return 1
+ fi
+
+ rm -f $TMP/tempmsg
+ umount -f $MNTDIR 2>/dev/null
+ mkdir -p $MNTDIR
+ mount -o loop,ro $IISO $MNTDIR
+ else
+ return 1
+ fi
+}
diff --git a/source/installer/sources/initrd/usr/lib/setup/INSCD b/source/installer/sources/initrd/usr/lib/setup/INSCD
new file mode 100755
index 000000000..42610aa18
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/INSCD
@@ -0,0 +1,270 @@
+#!/bin/sh
+# FIXME: UDF fs support?
+RDIR=/dev/tty4
+NDIR=/dev/null
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+T_PX="`cat $TMP/SeTT_PX`"
+rm -f $TMP/SeTmount $TMP/SeTDS $TMP/SeTCDdev $TMP/reply
+
+dialog --title "SCANNING FOR CD or DVD DRIVE" --menu \
+"Make sure the Slackware disc is in your CD/DVD drive, \
+and then press ENTER to begin the scanning process. \
+Or, if you'd rather specify the device name manually \
+(experts only), choose that option below." \
+11 72 2 \
+"auto" "Scan for the CD or DVD drive (recommended)" \
+"manual" "Manually specify CD or DVD by device name" \
+2> $TMP/reply
+if [ ! -r $TMP/reply ]; then
+ # cancel or esc
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit
+fi
+
+if [ "`cat $TMP/reply`" = "manual" ]; then
+ dialog --title "MANUAL CD/DVD DEVICE SELECTION" --menu \
+ "Please select your CD/DVD device from the list below. \
+If you don't see your device listed, choose 'custom'. \
+This will let you type in any device name. (and if necessary, \
+will create the device)" \
+ 18 70 9 \
+ "custom" "Type in the CD or DVD device to use" \
+ "/dev/sr0" "First CD/DVD drive" \
+ "/dev/sr1" "Second CD/DVD drive" \
+ "/dev/sr2" "Third CD/DVD drive" \
+ "/dev/sr3" "Fourth CD/DVD drive" \
+ "/dev/hdb" "CD/DVD slave on first IDE bus" \
+ "/dev/hda" "CD/DVD master on first IDE bus (unlikely)" \
+ "/dev/hdc" "CD/DVD master on second IDE bus" \
+ "/dev/hdd" "CD/DVD slave on second IDE bus" \
+ "/dev/hde" "CD/DVD master on third IDE bus" \
+ "/dev/hdf" "CD/DVD slave on third IDE bus" \
+ "/dev/hdg" "CD/DVD master on fourth IDE bus" \
+ "/dev/hdh" "CD/DVD slave on fourth IDE bus" \
+ "/dev/pcd0" "First parallel port ATAPI CD" \
+ "/dev/pcd1" "Second parallel port ATAPI CD" \
+ "/dev/pcd2" "Third parallel port ATAPI CD" \
+ "/dev/pcd3" "Fourth parallel port ATAPI CD" \
+ "/dev/aztcd" "Non-IDE Aztech CD/DVD" \
+ "/dev/cdu535" "Sony CDU-535 CD/DVD" \
+ "/dev/gscd" "Non-IDE GoldStar CD/DVD" \
+ "/dev/sonycd" "Sony CDU-31a CD/DVD" \
+ "/dev/optcd" "Optics Storage CD/DVD" \
+ "/dev/sjcd" "Sanyo non-IDE CD/DVD" \
+ "/dev/mcdx0" "Non-IDE Mitsumi drive 1" \
+ "/dev/mcdx1" "Non-IDE Mitsumi drive 2" \
+ "/dev/sbpcd" "Old non-IDE SoundBlaster CD/DVD" \
+ "/dev/cm205cd" "Philips LMS CM-205 CD/DVD" \
+ "/dev/cm206cd" "Philips LMS CM-206 CD/DVD" \
+ "/dev/mcd" "Old non-IDE Mitsumi CD/DVD" \
+ 2> $TMP/reply
+ if [ ! -r $TMP/reply ]; then
+ # cancel or esc
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit
+ fi
+ REPLY="`cat $TMP/reply`"
+ if [ "$REPLY" = "custom" ]; then
+ dialog --title "ENTER CD/DVD DEVICE MANUALLY" --inputbox \
+"Please enter the name of the CD/DVD device (such as /dev/hdc) that \
+you wish to use to mount the Slackware CD/DVD:" \
+9 70 2> $TMP/reply
+ if [ ! -r $TMP/reply ]; then
+ # cancel or esc
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit
+ fi
+ DRIVE_FOUND="`cat $TMP/reply`"
+ if [ ! -r $DRIVE_FOUND ]; then # no such device
+ rm -f $TMP/majorminor
+ dialog --title "MKNOD CD/DVD DEVICE" --inputbox \
+ "There doesn't seem to be a device by the name of $DRIVE_FOUND in the \
+/dev directory, so we will have to create it using the major and minor \
+numbers for the device. If you're using a bootdisk with a custom CD/DVD \
+driver on it, you should be able to find these numbers in the \
+documentation. Also, see the 'devices.txt' file that comes with the \
+Linux kernel source. If you don't know the numbers, you'll have to hit \
+Esc to abort. Enter the major and minor numbers for the new device, \
+separated by one space:" \
+ 15 72 2> $TMP/majorminor
+ if [ ! -r $TMP/majorminor ]; then
+ # cancel or esc
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit
+ fi
+ MAJOR="`cat $TMP/majorminor`"
+ dialog --title "MAKING DEVICE IN /dev" --infobox \
+ "mknod $DRIVE_FOUND b $MAJOR" 3 40
+ mknod $DRIVE_FOUND b $MAJOR 2> $RDIR
+ sleep 1
+ if [ ! -r $DRIVE_FOUND ]; then
+ dialog --title "MKNOD FAILED" --msgbox \
+ "Sorry, but the mknod command failed to make the device. You'll need to \
+go back and try selecting your source media again. Press ENTER to abort \
+the source media selection process." 8 60
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit
+ fi
+ fi
+ else
+ DRIVE_FOUND=$REPLY
+ fi
+fi
+
+# Search for SCSI/PATA/SATA CD/DVD drives:
+if [ "$DRIVE_FOUND" = "" ]; then
+ dialog --title "SCANNING" --infobox "Scanning for a \
+CD/DVD drive containing a Slackware disc..." 4 50
+ sleep 1
+ for device in \
+ /dev/sr0 /dev/sr1 /dev/sr2 /dev/sr3 \
+ ; do
+ mount -o ro -t iso9660 $device /var/log/mount 1> $RDIR 2> $RDIR
+ if [ $? = 0 ]; then
+ DRIVE_FOUND=$device
+ umount /var/log/mount
+ break
+ fi
+ done
+fi
+
+# Search the old IDE interfaces:
+if [ "$DRIVE_FOUND" = "" ]; then
+ dialog --title "SCANNING" --infobox "Scanning for an IDE \
+CD/DVD drive containing a Slackware disc..." 4 56
+ sleep 1
+ for device in \
+ /dev/hdd /dev/hdc /dev/hdb /dev/hda \
+ /dev/hde /dev/hdf /dev/hdg /dev/hdh \
+ /dev/hdi /dev/hdj /dev/hdk /dev/hdl \
+ /dev/hdm /dev/hdn /dev/hdo /dev/hdp \
+ ; do
+ mount -o ro -t iso9660 $device /var/log/mount 1> $RDIR 2> $RDIR
+ if [ $? = 0 ]; then
+ DRIVE_FOUND=$device
+ umount /var/log/mount
+ break
+ fi
+ done
+fi
+
+# Search for parallel port ATAPI CD/DVD drives:
+if [ "$DRIVE_FOUND" = "" ]; then
+ dialog --title "SCANNING" --infobox "Scanning for a parallel port \
+ATAPI CD/DVD drive containing a Slackware disc..." 4 52
+ sleep 1
+ for device in \
+ /dev/pcd0 /dev/pcd1 /dev/pcd2 /dev/pcd3 \
+ ; do
+ mount -o ro -t iso9660 $device /var/log/mount 1> $RDIR 2> $RDIR
+ if [ $? = 0 ]; then
+ DRIVE_FOUND=$device
+ umount /var/log/mount
+ break
+ fi
+ done
+fi
+
+# Still not found? OK, we will search for CD/DVD drives on old, pre-ATAPI
+# proprietary interfaces. There aren't too many of these still around, and
+# the scan won't actually work unless a bootdisk that supports the drive is
+# used, and any necessary parameters have been passed to the kernel.
+if [ "$DRIVE_FOUND" = "" ]; then
+ dialog --title "SCANNING" --msgbox "No IDE/SCSI drive, so we will try \
+scanning for CD drives on \
+old proprietary interfaces, such as SoundBlaster pre-IDE CD drives, \
+Sony CDU-31a, Sony 535, old Mitsumi pre-IDE, old Optics, etc. For this \
+scan to work at all, you'll need to be using a bootdisk that supports \
+your CD drive. Please press ENTER to begin this last-chance scan \
+for old, obsolete hardware." 11 60
+ for device in \
+ /dev/sonycd /dev/gscd /dev/optcd /dev/sjcd /dev/mcdx0 /dev/mcdx1 \
+ /dev/cdu535 /dev/sbpcd /dev/aztcd /dev/cm205cd /dev/cm206cd \
+ /dev/bpcd /dev/mcd \
+ ; do
+ mount -o ro -t iso9660 $device /var/log/mount 1> $RDIR 2> $RDIR
+ if [ $? = 0 ]; then
+ DRIVE_FOUND=$device
+ umount /var/log/mount
+ break
+ fi
+ done
+fi
+
+if [ "$DRIVE_FOUND" = "" ]; then
+ dialog --title "CD/DVD DRIVE NOT FOUND" --msgbox \
+ "A CD/DVD drive could not be found on any of the devices that were \
+scanned. Possible reasons include using a bootdisk or kernel that \
+doesn't support your drive, failing to pass parameters needed by some \
+drives to the kernel, not having the Slackware disc in your CD/DVD \
+drive, or using a drive connected to a Plug and Play soundcard (in this \
+case, connecting the drive directly to the IDE interface often helps). \
+Please make sure you are using the correct bootdisk for your hardware, \
+consult the BOOTING file for possible information on \
+forcing the detection of your drive, and then reattempt installation. \
+If all else fails, see FAQ.TXT for information about copying \
+parts of this CD to your DOS partition and installing it from there.\n\
+\n\
+You will now be returned to the main menu. If you want to try looking \
+for the CD again, you may skip directly to the SOURCE menu selection." \
+ 0 0
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit
+fi
+
+while [ 0 ]; do # time to try to mount the CD/DVD device:
+ mount -o ro -t iso9660 $DRIVE_FOUND /var/log/mount 1> $RDIR 2> $RDIR
+ if [ $? = 0 ]; then # mounted successfully
+ dialog --title "CD/DVD DRIVE FOUND" --sleep 1 --infobox \
+ "A Slackware disc was found in device $DRIVE_FOUND." 3 52
+ break
+ else # failed to mount
+ dialog --title "MOUNT ERROR" --menu "There was an error \
+attempting to mount the CD/DVD on $DRIVE_FOUND. \
+Maybe the device name is incorrect, the disc is not in the \
+drive, or the kernel you are using does not support the \
+device. (possibly an incorrect bootdisk) \
+What would you like to do now?" \
+ 13 70 3 \
+ "1" "Abort CD installation" \
+ "2" "Attempt to mount the CD/DVD device again" \
+ "3" "Ignore the error and continue" 2> $TMP/errordo
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit;
+ fi
+ DOWHAT="`cat $TMP/errordo`"
+ rm -f $TMP/errordo
+ if [ $DOWHAT = 1 ]; then
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev
+ exit
+ elif [ $DOWHAT = 2 ]; then
+ dialog --title "ATTEMPTING TO MOUNT CD/DVD on $DRIVE_FOUND" \
+ --infobox "Attempting to mount your CD/DVD again with the \
+following command: mount -o ro -t iso9660 $DRIVE_FOUND \
+/var/log/mount" 4 69
+ umount /var/log/mount 1> $NDIR 2> $NDIR
+ sleep 1
+ elif [ $DOWHAT = 3 ]; then
+ # Ignore error, really bad plan but whatever
+ break
+ fi
+ fi
+done
+# since we should have mounted successfully, let's refresh
+# the link for /dev/cdrom on the target partition:
+if [ ! -d $T_PX/dev ]; then
+ mkdir $T_PX/dev
+ chown root.root $T_PX/dev
+ chmod 755 $T_PX/dev
+fi
+( cd $T_PX/dev ; ln -sf $DRIVE_FOUND cdrom )
+
+# Pass information about the source directory to the next install stage:
+echo "/var/log/mount/slackware" > $TMP/SeTDS
+echo "-source_mounted" > $TMP/SeTmount
+echo "$DRIVE_FOUND" > $TMP/SeTCDdev
+echo "/dev/null" > $TMP/SeTsource
diff --git a/source/installer/sources/initrd/usr/lib/setup/INSNFS b/source/installer/sources/initrd/usr/lib/setup/INSNFS
new file mode 100755
index 000000000..a353daa48
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/INSNFS
@@ -0,0 +1,121 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+# Include function to check for Slackware ISO images:
+. /usr/lib/setup/INCISO
+if [ -f $TMP/Punattended ]; then
+ eval $(grep "^NFS_SERVER=" $TMP/Punattended)
+ eval $(grep "^NFS_ROOT=" $TMP/Punattended)
+fi
+
+while [ 0 ]; do
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTsource $TMP/nfsout
+ UPNRUN=`cat $TMP/SeTupnrun 2> /dev/null`
+
+ if [ "$REMOTE_IPADDR" = "" ]; then REMOTE_IPADDR=${NFS_SERVER}; fi
+ if [ "$REMOTE_PATH" = "" ]; then REMOTE_PATH=${NFS_ROOT}; fi
+
+ cat << EOF > $TMP/tempmsg
+
+Good! We're all set on the local end, but now we need to know
+where to find the software packages to install. First, we need
+the IP address of the machine where the Slackware sources are
+stored.
+
+EOF
+ if [ "$UPNRUN" = "0" ]; then
+ cat << EOF >> $TMP/tempmsg
+Since you're already running on the network, you should be able
+to use the hostname instead of an IP address if you wish.
+
+EOF
+ fi
+ echo "What is the IP address of your NFS server? " >> $TMP/tempmsg
+ dialog --title "ENTER IP ADDRESS OF NFS SERVER" --inputbox \
+ "`cat $TMP/tempmsg`" 14 70 $REMOTE_IPADDR 2> $TMP/remote
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/remote
+ exit
+ fi
+ REMOTE_IPADDR="`cat $TMP/remote`"
+ rm $TMP/remote
+
+ cat << EOF > $TMP/tempmsg
+
+ There must be a directory on the server with the Slackware
+ packages and files arranged in a tree like the FTP site.
+
+ The installation script needs to know the name of the
+ directory on your server that contains the series'
+ subdirectories. For example, if your A series is found at
+ /slack/slackware/a, then you would respond: /slack/slackware
+
+ What is the Slackware source directory?
+EOF
+ dialog --title "SELECT SOURCE DIRECTORY" --inputbox "`cat $TMP/tempmsg`" 18 \
+ 65 $REMOTE_PATH 2> $TMP/slacksrc
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/slacksrc
+ exit
+ fi
+ REMOTE_PATH="`cat $TMP/slacksrc`"
+ rm $TMP/slacksrc
+ cat << EOF > $TMP/tempmsg
+
+In the next screen you should watch for NFS mount errors.
+If you see errors and you don't see your NFS server listed,
+then try setting up NFS again.
+
+EOF
+ dialog --title "NFS MOUNT INFORMATION" --msgbox "`cat $TMP/tempmsg`" 10 65
+ rm -f $TMP/tempmsg
+ touch $TMP/nfsout
+ if [ ! "$UPNRUN" = "0" ]; then
+ if [ -x /etc/rc.d/rc.rpc ]; then
+ echo "Starting RPC services..." >> $TMP/nfsout
+ /etc/rc.d/rc.rpc restart >> $TMP/nfsout 2>&1
+ fi
+ fi
+ echo "Mounting $REMOTE_PATH:" >> $TMP/nfsout
+ echo "mount -r -t nfs -o vers=3 $REMOTE_IPADDR:$REMOTE_PATH /var/log/mount" >> $TMP/nfsout
+ mount -r -t nfs -o vers=3 $REMOTE_IPADDR:$REMOTE_PATH /var/log/mount
+ if [ ! $? = 0 ]; then
+ echo "Didn't work." >> $TMP/nfsout
+ echo "Maybe you should check that the directory name is correct?" >> $TMP/nfsout
+ DEFANSW="yes"
+ else
+ DEFANSW="no"
+ fi
+ echo "" >> $TMP/nfsout
+ echo "Current NFS mounts:" >> $TMP/nfsout
+ mount -t nfs >> $TMP/nfsout 2>&1
+ echo "" >> $TMP/nfsout
+
+ echo "Do you need to try setting up NFS again?" >> $TMP/nfsout
+ echo "" >> $TMP/nfsout
+ if [ "$DEFANSW" = "no" ]; then
+ dialog --title "NFS MOUNT RESULT" \
+ --defaultno --yesno "`cat $TMP/nfsout`" 21 70
+ RET=$?
+ else
+ dialog --title "NFS MOUNT RESULT" --yesno "`cat $TMP/nfsout`" 21 70
+ RET=$?
+ fi
+ rm -f $TMP/nfsout
+ if [ $RET = 1 ]; then
+ # OK with the NFS mount.
+ # First, check if a Slackware ISO image is present in /var/log/mount
+ if check_iso_image /var/log/mount /var/log/mntiso ; then
+ echo "/var/log/mntiso/slackware" > $TMP/SeTDS
+ elif [ -r /var/log/mount/slackware/PACKAGES.TXT ]; then
+ echo "/var/log/mount/slackware" > $TMP/SeTDS
+ else
+ echo "/var/log/mount" > $TMP/SeTDS
+ fi
+ echo "-source_mounted" > $TMP/SeTmount
+ echo "/dev/null" > $TMP/SeTsource
+ break
+ fi
+done
diff --git a/source/installer/sources/initrd/usr/lib/setup/INSSMB b/source/installer/sources/initrd/usr/lib/setup/INSSMB
new file mode 100755
index 000000000..ae4aac887
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/INSSMB
@@ -0,0 +1,120 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+if [ -f $TMP/Punattended ]; then
+ eval $(grep "^SMB_SERVER=" $TMP/Punattended)
+ eval $(grep "^SMB_ROOT=" $TMP/Punattended)
+fi
+
+if [ "$REMOTE_SHARE" = "" ]; then REMOTE_SHARE=${SMB_SERVER}; fi
+if [ "$REMOTE_PATH" = "" ]; then REMOTE_PATH=${SMB_ROOT}; fi
+
+# Load the cifs module:
+modprobe cifs 2>/dev/null
+
+while [ 0 ]; do
+ rm -f $TMP/SeTDS $TMP/SeTmount
+ UPNRUN=`cat $TMP/SeTupnrun`
+
+ cat << EOF > $TMP/tempmsg
+
+Good! We're all set on the local end, but now we need to know
+where to find the software packages to install. First, we need
+the share address of the Samba server where the Slackware sources
+are stored.
+Example share address: //192.168.0.1/public
+
+EOF
+ if [ "$UPNRUN" = "0" ]; then
+ cat << EOF >> $TMP/tempmsg
+Since you're already running on the network, you should be able
+to use the hostname instead of an IP address if you wish.
+
+EOF
+ fi
+ echo "What is the share address of your Samba server? " >> $TMP/tempmsg
+ dialog --title "ENTER SHARE ADDRESS OF SAMBA SERVER" --inputbox \
+ "`cat $TMP/tempmsg`" 15 70 $REMOTE_SHARE 2> $TMP/remote
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/remote
+ exit
+ fi
+ REMOTE_SHARE="`cat $TMP/remote`"
+ rm $TMP/remote
+
+ cat << EOF > $TMP/tempmsg
+
+ There must be a directory on the server with the Slackware
+ packages and files arranged in a tree like the FTP site.
+
+ The installation script needs to know the name of the
+ directory below your Samba share that contains the series
+ subdirectories. For example, if your A series is found at
+ /slack/slackware/a, then you would respond: /slack/slackware
+
+ What is the Slackware source directory?
+EOF
+ dialog --title "SELECT SOURCE DIRECTORY" --inputbox "`cat $TMP/tempmsg`" \
+ 17 70 $REMOTE_PATH 2> $TMP/slacksrc
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/slacksrc
+ exit
+ fi
+ REMOTE_PATH="`cat $TMP/slacksrc`"
+ rm $TMP/slacksrc
+
+ echo "You should see no mount errors:" > $TMP/mntout
+ echo "Mounting $REMOTE_SHARE ..." >> $TMP/mntout
+ mount -t cifs -o ro,guest,sec=none $REMOTE_SHARE /var/log/mount \
+ >> $TMP/mntout 2>&1
+ RET=$?
+ if [ $RET != 0 ]; then
+ echo "Mount failed." >> $TMP/mntout
+ umount -f -t cifs /var/log/mount 1>/dev/null 2>&1
+ DEFANSW="yes"
+ else
+ echo "Mounted Samba share(s):" >> $TMP/mntout
+ mount -t cifs >> $TMP/mntout 2>/dev/null
+ echo "" >> $TMP/mntout
+ if [ -f /var/log/mount/$REMOTE_PATH/a/tagfile \
+ -o -f /var/log/mount/$REMOTE_PATH/slackware/a/tagfile ];
+ then
+ echo "A Slackware package tree was found! Ready to continue." >> $TMP/mntout
+ DEFANSW="no"
+ else
+ echo "No Slackware package tree found at the indicated path!" >> $TMP/mntout
+ DEFANSW="yes"
+ fi
+ fi
+ echo "" >> $TMP/mntout
+ echo "Do you want to try setting up Samba again?" >> $TMP/mntout
+ echo "" >> $TMP/mntout
+ if [ "$DEFANSW" = "no" ]; then
+ dialog --title "MOUNT RESULT" \
+ --defaultno --yesno "`cat $TMP/mntout`" 17 70
+ RET=$?
+ else
+ dialog --title "MOUNT RESULT" \
+ --yesno "`cat $TMP/mntout`" 12 68
+ RET=$?
+ fi
+ if [ $RET = 1 ]; then
+ rm -f $TMP/mntout
+ break
+ fi
+ rm -f $TMP/mntout
+ #if [ "$UPNRUN" = "1" ]; then
+ # route del $LOCAL_NETWORK
+ # ifconfig $ENET_DEVICE down
+ #fi
+done
+
+if [ -f /var/log/mount/$REMOTE_PATH/a/tagfile ]; then
+ echo "/var/log/mount/$REMOTE_PATH" > $TMP/SeTDS
+else
+ echo "/var/log/mount/${REMOTE_PATH}/slackware" > $TMP/SeTDS
+fi
+echo "-source_mounted" > $TMP/SeTmount
+echo "/dev/null" > $TMP/SeTsource
diff --git a/source/installer/sources/initrd/usr/lib/setup/INSURL b/source/installer/sources/initrd/usr/lib/setup/INSURL
new file mode 100755
index 000000000..4423406bc
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/INSURL
@@ -0,0 +1,241 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+if [ -f $TMP/Punattended ]; then
+ eval $(grep "^REMOTE_URL=" $TMP/Punattended)
+ eval $(grep "^REMOTE_PATH=" $TMP/Punattended)
+fi
+
+# Return a package name that has been stripped of the dirname portion
+# and any of the valid extensions (only):
+pkgbase() {
+ PKGEXT=$(echo $1 | rev | cut -f 1 -d . | rev)
+ case $PKGEXT in
+ 'tgz' )
+ PKGRETURN=$(basename $1 .tgz)
+ ;;
+ 'tbz' )
+ PKGRETURN=$(basename $1 .tbz)
+ ;;
+ 'tlz' )
+ PKGRETURN=$(basename $1 .tlz)
+ ;;
+ 'txz' )
+ PKGRETURN=$(basename $1 .txz)
+ ;;
+ *)
+ PKGRETURN=$(basename $1)
+ ;;
+ esac
+ echo $PKGRETURN
+}
+
+package_name() {
+ STRING=$(pkgbase $1)
+ # Check for old style package name with one segment:
+ if [ "$(echo $STRING | cut -f 1 -d -)" = "$(echo $STRING | cut -f 2 -d -)" ]; then
+ echo $STRING
+ else # has more than one dash delimited segment
+ # Count number of segments:
+ INDEX=1
+ while [ ! "$(echo $STRING | cut -f $INDEX -d -)" = "" ]; do
+ INDEX=$(expr $INDEX + 1)
+ done
+ INDEX=$(expr $INDEX - 1) # don't include the null value
+ # If we don't have four segments, return the old-style (or out of spec) package name:
+ if [ "$INDEX" = "2" -o "$INDEX" = "3" ]; then
+ echo $STRING
+ else # we have four or more segments, so we'll consider this a new-style name:
+ NAME=$(expr $INDEX - 3)
+ NAME="$(echo $STRING | cut -f 1-$NAME -d -)"
+ echo $NAME
+ fi
+ fi
+}
+
+while [ 0 ]; do
+ rm -f $TMP/SeTDS $TMP/SeTmount
+ UPNRUN=$(cat $TMP/SeTupnrun)
+
+ cat << EOF > $TMP/tempmsg
+
+Good! We're all set on the local end, but now we need to know
+where to find the software packages to install. First, we need
+the URL of the ftp or http server where the Slackware sources
+are stored.
+URL examples are: 'ftp://192.168.0.1' ; 'http://172.16.10.31'
+
+EOF
+ if [ "$UPNRUN" = "0" ]; then
+ cat << EOF >> $TMP/tempmsg
+Since you're already running on the network, you should be able
+to use the hostname instead of an IP address if you wish.
+
+EOF
+ fi
+ echo "What is the URL of your FTP/HTTP server? " >> $TMP/tempmsg
+ dialog --title "ENTER URL OF FTP/HTTP SERVER" --inputbox \
+ "$(cat $TMP/tempmsg)" 15 70 $REMOTE_URL 2> $TMP/remote
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/remote
+ exit
+ fi
+ REMOTE_URL="$(cat $TMP/remote)"
+ rm $TMP/remote
+
+ cat << EOF > $TMP/tempmsg
+
+ There must be a directory on the server with the Slackware
+ packages and files arranged in a tree like the FTP site.
+
+ The installation script needs to know the name of the
+ directory on your server that contains the series
+ subdirectories. For example, if your A series is found at
+ /slack/slackware/a, then you would respond: /slack/slackware
+
+ What is the Slackware source directory?
+EOF
+ dialog --title "SELECT SOURCE DIRECTORY" --inputbox "$(cat $TMP/tempmsg)" \
+ 17 65 $REMOTE_PATH 2> $TMP/slacksrc
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/slacksrc
+ exit
+ fi
+ REMOTE_PATH="$(cat $TMP/slacksrc)"
+ rm $TMP/slacksrc
+
+ cat << EOF > $TMP/tempmsg
+
+In the next screen you should watch for possible errors.
+
+First, we'll download the PACKAGES.TXT from the parent of the
+directory that you entered before (which should be the root
+of the remote Slackware tree). If that succeeds, then we use
+PACKAGES.TXT to reconstruct a local cache of the package tree
+(should take a minute or less on an average system).
+After that, we're all set to go!
+
+Downloading PACKAGES.TXT at the Slackware root starts
+after you press OK.
+That file is several hundreds of KB in size so it may
+take some time to get here...
+
+EOF
+ dialog --title "DOWNLOAD INFORMATION" --msgbox "$(cat $TMP/tempmsg)" 20 70
+ rm -f $TMP/tempmsg
+
+ REMOTE_ROOT=$(dirname $REMOTE_PATH)
+ mkdir -p $TMP/treecache 2>/dev/null
+ chmod 700 $TMP/treecache
+ rm -rf $TMP/treecache/* 2>/dev/null
+ ln -sf $TMP/treecache /var/log/mount/
+ cd /var/log/mount/treecache
+ echo "Downloading PACKAGES.TXT ..." >> $TMP/wgetout
+ echo "URL: $REMOTE_URL$REMOTE_ROOT" > $TMP/wgetout
+ wget -q $REMOTE_URL$REMOTE_ROOT/PACKAGES.TXT > /dev/null 2>&1
+ RET=$?
+ if [ $RET != 0 ]; then
+ echo "> Download failed. Going to try one directory lower." >> $TMP/wgetout
+ REMOTE_ROOT=$REMOTE_PATH
+ echo "URL: $REMOTE_URL$REMOTE_ROOT" >> $TMP/wgetout
+ wget -q $REMOTE_URL$REMOTE_ROOT/PACKAGES.TXT > /dev/null 2>&1
+ RET=$?
+ [ $RET != 0 ] && echo "> Download failed again." >> $TMP/wgetout
+ fi
+ echo "" >> $TMP/wgetout
+
+ if [ -r /var/log/mount/treecache/PACKAGES.TXT ]; then
+ if head /var/log/mount/treecache/PACKAGES.TXT | grep -q "PACKAGES.TXT" ; then
+ echo "A Slackware 'PACKAGES.TXT' is available. Ready to continue!" >> $TMP/wgetout
+ DEFANSW="no"
+ fi
+ else
+ echo "No file 'PACKAGES.TXT' was found. Wrong URL?" >> $TMP/wgetout
+ DEFANSW="yes"
+ fi
+ echo "" >> $TMP/wgetout
+ echo "Do you want to try setting up FTP/HTTP again?" >> $TMP/wgetout
+ echo "" >> $TMP/wgetout
+ if [ "$DEFANSW" = "no" ]; then
+ dialog --title "DOWNLOAD RESULT" \
+ --defaultno --yesno "$(cat $TMP/wgetout)" 12 68
+ RET=$?
+ else
+ dialog --title "DOWNLOAD RESULT" \
+ --yesno "$(cat $TMP/wgetout)" 12 68
+ RET=$?
+ fi
+ if [ $RET = 1 ]; then
+ rm -f $TMP/wgetout
+ break
+ fi
+ rm -f $TMP/wgetout
+ #if [ "$UPNRUN" = "1" ]; then
+ # route del $LOCAL_NETWORK
+ # ifconfig $ENET_DEVICE down
+ #fi
+done
+
+if [ -r /var/log/mount/treecache/PACKAGES.TXT ]; then
+ echo "/var/log/mount/treecache/slackware" > $TMP/SeTDS
+ echo "-source_mounted" > $TMP/SeTmount
+ echo "/dev/null" > $TMP/SeTsource
+ echo "${REMOTE_URL},${REMOTE_ROOT}" > $TMP/SeTremotesvr
+
+ dialog --title "INITIALIZING PACKAGE TREE" --infobox \
+ "\nSetting up local cache for the FTP/HTTP server's package tree ..." 5 72
+
+ mkdir slackware isolinux 2>/dev/null
+ wget -q -P ./isolinux $REMOTE_URL$REMOTE_ROOT/isolinux/setpkg
+
+ # Create a local package tree with zero-byte package placeholders:
+ TOTALP=$(grep "PACKAGE NAME:" PACKAGES.TXT | wc -l)
+ (
+ NUMPKG=0
+ GAUGE=0
+ grep "PACKAGE " PACKAGES.TXT | while read REPLY ; do
+ case "$REPLY" in
+ "PACKAGE NAME:"*)
+ TEMP=$(echo $REPLY | cut -d: -f2)
+ PKGNAME=$(echo $TEMP)
+ PKGBASE=$(pkgbase $PKGNAME)
+ PKGSHRT=$(package_name $PKGNAME)
+ let NUMPKG=NUMPKG+1
+ if [ $(( ((100 * $NUMPKG)/$TOTALP)/5 )) -gt $(( $GAUGE/5 )) ]; then
+ GAUGE=$(( (100 * $NUMPKG)/$TOTALP ))
+ echo "$GAUGE"
+ fi
+ ;;
+ "PACKAGE LOCATION:"*)
+ TEMP=$(echo $REPLY | cut -d: -f2)
+ PKGDIR=$(echo $TEMP)
+ mkdir -p $PKGDIR
+ touch ${PKGDIR}/${PKGNAME}
+ ;;
+ "PACKAGE SIZE (compressed):"*)
+ TEMP=$(echo $REPLY | cut -d: -f2)
+ PKGSIZE=$(echo $TEMP)
+ echo "$PKGSIZE" 1> ${PKGDIR}/${PKGBASE}.size
+ ;;
+ *)
+ ;;
+ esac
+ done \
+ ) | dialog --title "INITIALIZING PACKAGE TREE" --gauge \
+ "\nProcessing ${TOTALP} Slackware packages..." 8 65
+
+ # Make sure we can select stuff from the package series:
+ dialog --title "INITIALIZING PACKAGE TREE" --infobox \
+ "\nRetrieving tagfile information for the package tree ..." 5 65
+
+ for series in $(ls -1 slackware) ; do
+ wget -q -P ./slackware/$series $REMOTE_URL$REMOTE_ROOT/slackware/$series/tagfile
+ wget -q -P ./slackware/$series $REMOTE_URL$REMOTE_ROOT/slackware/$series/maketag.ez
+ wget -q -P ./slackware/$series $REMOTE_URL$REMOTE_ROOT/slackware/$series/maketag
+ done
+else
+ dialog --title "REMOTE SERVER CONFIGURATION" --msgbox \
+ "\nFailed to configure for installation from remote server." 5 65
+fi
diff --git a/source/installer/sources/initrd/usr/lib/setup/INSUSB b/source/installer/sources/initrd/usr/lib/setup/INSUSB
new file mode 100755
index 000000000..04723159c
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/INSUSB
@@ -0,0 +1,107 @@
+#!/bin/sh
+RDIR=/dev/tty4
+NDIR=/dev/null
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+T_PX="`cat $TMP/SeTT_PX`"
+rm -f $TMP/SeTmount $TMP/SeTDS $TMP/SeTCDdev $TMP/reply
+
+dialog --title "SCANNING FOR USB STICK" --msgbox \
+"Make sure the USB stick containing the Slackware package directory \
+is inserted into a USB port, and then press ENTER to begin the scanning process." \
+7 66 \
+2> $TMP/reply
+if [ ! -r $TMP/reply ]; then
+ # cancel or esc
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit
+fi
+
+dialog --infobox "\nScanning for USB stick..." 5 30
+
+# Run "rescan-scsi-bus -l" to get an up to date overview of devices:
+/sbin/rescan-scsi-bus -l 1>$RDIR 2>$RDIR
+
+# Generate a list of removable devices:
+REMOVABLE_DEVICES=""
+for BDEV in $(ls --indicator-style none /sys/block | grep -E -v "loop|ram|^dm-|^sr|^md"); do
+ if [ -r /sys/block/$BDEV/removable -a "$(cat /sys/block/$BDEV/removable)" == "1" ]; then
+ REMOVEABLE_DEVICES="$REMOVEABLE_DEVICES $BDEV"
+ fi
+done
+
+if [ "$REMOVEABLE_DEVICES" = "" ]; then
+ dialog --title "NO REMOVABLE USB DEVICES FOUND" --msgbox \
+"Sorry, but no removable USB devices could be found. Exiting back to the top menu." \
+6 55
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit
+fi
+
+# Make a mount location for the USB source:
+mkdir -p /usb-stick
+# Try to unmount it, just in case something strange is going on:
+umount /usb-stick 1> /dev/null 2> /dev/null
+
+# First, we will look for partitions on the USB stick. Not knowing whether the stick is
+# partitioned with MBR or GPT partitions (or indeed at all), we'll test for partitions
+# 1 through 4. Probably very few people will try to use a stick with the Slackware
+# packages in a directory on partition 5 or higher. If they do, it won't work. Sorry.
+unset DRIVE_FOUND INSTALL_PATH
+for DEVICE in $REMOVEABLE_DEVICES ; do
+ for PARTITION in 1 2 3 4 ; do
+ mount /dev/$DEVICE$PARTITION /usb-stick 1> /dev/null 2> /dev/null
+ if [ -d /usb-stick/slackware/a ]; then
+ DRIVE_FOUND="/dev/$DEVICE$PARTITION"
+ INSTALL_PATH="/usb-stick/slackware"
+ break
+ fi
+ if [ -d /usb-stick/slackware*-*/slackware/a ]; then
+ DRIVE_FOUND="/dev/$DEVICE$PARTITION"
+ INSTALL_PATH=$(echo /usb-stick/slackware*-*/slackware)
+ break
+ fi
+ umount /usb-stick 1> /dev/null 2> /dev/null
+ done
+done
+
+# Next, we will try mounting the devices as unpartitioned if nothing has been found yet:
+if [ "$DRIVE_FOUND" = "" ]; then
+ for DEVICE in $REMOVEABLE_DEVICES ; do
+ mount /dev/$DEVICE /usb-stick 1> /dev/null 2> /dev/null
+ if [ -d /usb-stick/slackware/a ]; then
+ DRIVE_FOUND="/dev/$DEVICE"
+ INSTALL_PATH="/usb-stick/slackware"
+ break
+ fi
+ if [ -d /usb-stick/slackware*-*/slackware/a ]; then
+ DRIVE_FOUND="/dev/$DEVICE$PARTITION"
+ INSTALL_PATH=$(echo /usb-stick/slackware*-*/slackware)
+ break
+ fi
+ done
+fi
+
+if [ "$DRIVE_FOUND" = "" ]; then
+ dialog --title "NO SLACKWARE DIRECTORY FOUND" --msgbox \
+"Sorry, but a Slackware directory could not be found on any USB devices. \
+Exiting back to the top menu." \
+6 55
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
+ exit
+fi
+
+# Success! Report back to the console:
+
+dialog --title "USB PACKAGE SOURCE FOUND" --sleep 1 --infobox \
+"A Slackware package directory was found on device $DRIVE_FOUND." 3 66
+
+# At this point, the stick has been found and is mounted on /usb-stick.
+# All that remains is to tell the installer about it, and we're done here.
+
+echo $INSTALL_PATH > $TMP/SeTDS
+echo "-source_mounted" > $TMP/SeTmount
+echo "/dev/null" > $TMP/SeTsource
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/INSdir b/source/installer/sources/initrd/usr/lib/setup/INSdir
new file mode 100755
index 000000000..cc9b1711a
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/INSdir
@@ -0,0 +1,73 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+T_PX="`cat $TMP/SeTT_PX`"
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+# Include function to check for Slackware ISO images:
+. /usr/lib/setup/INCISO
+while [ 0 ]; do
+rm -f $TMP/SeTDS $TMP/SeTmount
+# OK, at this point /var/log/mount should not have anything mounted on it,
+# but we will umount just in case.
+umount /var/log/mount 2> /dev/null
+# Anything mounted on /var/log/mount now is a fatal error:
+if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then
+ echo "Can't umount /var/log/mount. Reboot machine and run setup again."
+ exit
+fi
+# If the mount table is corrupt, the above might not do it, so we will
+# try to detect Linux and FAT32 partitions that have slipped by:
+if [ -d /var/log/mount/lost+found -o -d /var/log/mount/recycled \
+ -o -r /var/log/mount/io.sys ]; then
+ echo "Mount table corrupt. Reboot machine and run setup again."
+ exit
+fi
+cat << EOF > $TMP/tempmsg
+
+OK, we will install from a directory within the current
+filesystem. If you have mounted this directory yourself,
+you should not use ${T_PX} or /var/log/mount as mount points,
+since Setup might need to use these directories. You may
+install from any part of the current directory structure,
+no matter what the media is (including NFS). You will need
+to type in the name of the directory containing the
+subdirectories for each source disk.
+
+Which directory would you like to install from?
+EOF
+dialog --title "INSTALL FROM THE CURRENT FILESYSTEM" \
+ --inputbox "`cat $TMP/tempmsg`" 19 67 2> $TMP/sourcedir
+if [ ! $? = 0 ]; then
+ rm -f $TMP/sourcedir $TMP/tempmsg
+ exit
+fi
+SOURCEDIR="`cat $TMP/sourcedir`"
+rm -f $TMP/sourcedir $TMP/tempmsg
+mkdir -p /var/log/mount
+# First, check if a Slackware ISO image is present in $SOURCEDIR
+if check_iso_image $SOURCEDIR ; then
+ echo "/var/log/mount/slackware" > $TMP/SeTDS
+else
+ rm -f /var/log/mount 2> /dev/null
+ rmdir /var/log/mount 2> /dev/null
+ ln -sf $SOURCEDIR /var/log/mount
+ echo "/var/log/mount" > $TMP/SeTDS
+fi
+echo "-source_mounted" > $TMP/SeTmount
+echo "/dev/null" > $TMP/SeTsource
+if [ ! -d $SOURCEDIR ]; then
+ cat << EOF > $TMP/tempmsg
+
+Sorry - the directory you specified is not valid. Please
+check the directory and try again.
+
+(Directory given: $SOURCEDIR)
+
+EOF
+ dialog --title "INVALID DIRECTORY ENTERED" --msgbox "`cat $TMP/tempmsg`" 10 65
+ rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTsource $TMP/sourcedir $TMP/tempmsg
+else
+ exit
+fi
+done;
diff --git a/source/installer/sources/initrd/usr/lib/setup/INShd b/source/installer/sources/initrd/usr/lib/setup/INShd
new file mode 100755
index 000000000..ce30cb2f6
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/INShd
@@ -0,0 +1,146 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+# Include function to check for Slackware ISO images:
+. /usr/lib/setup/INCISO
+while [ 0 ]; do
+rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTsource
+# OK, at this point /var/log/mount should not have anything mounted on it,
+# but we will umount just in case.
+umount /var/log/mount 2> /dev/null
+# Anything mounted on /var/log/mount now is a fatal error:
+if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then
+ echo "Can't umount /var/log/mount. Reboot machine and run setup again."
+ exit
+fi
+# If the mount table is corrupt, the above might not do it, so we will
+# try to detect Linux and FAT32 partitions that have slipped by:
+if [ -d /var/log/mount/lost+found -o -d /var/log/mount/recycled \
+ -o -r /var/log/mount/io.sys ]; then
+ echo "Mount table corrupt. Reboot machine and run setup again."
+ exit
+fi
+
+while [ 0 ]; do
+ cat << EOF > $TMP/tempmsg
+In order to install directly from the hard disk you must have a
+partition (such as /dev/sda1, /dev/sdb5, etc) with the Slackware
+distribution's slackware/ directory like you'd find it on the FTP
+site. It can be in another directory. For example, if the
+distribution is in /stuff/slackware/, then you have to have
+directories named /stuff/slackware/a, /stuff/slackware/ap, and so
+on each containing the files that would be in that directory on
+the FTP site. You may install from FAT or Linux partitions.
+
+Please enter the partition (such as /dev/sda1) where the Slackware
+sources can be found, or [enter] to see a partition list:
+EOF
+ dialog --title "INSTALLING FROM HARD DISK" --inputbox \
+"`cat $TMP/tempmsg`" 18 70 2> $TMP/source.part
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/source.part $TMP/tempmsg
+ exit
+ fi
+ rm -f $TMP/tempmsg
+ SLACK_DEVICE="`cat $TMP/source.part`"
+ rm -f $TMP/source.part
+ if [ "$SLACK_DEVICE" = "" ]; then
+ dialog --title "PARTITION LIST" --no-collapse --msgbox "`probe -l | grep -v cylind | grep dev | sort 2> /dev/null`" 22 75
+ continue;
+ fi
+ break;
+done
+
+dialog --title "SELECT SOURCE DIRECTORY" --inputbox \
+"Now we need to know the full path on this partition to the\n\
+slackware/ directory where the directories containing\n\
+installation files and packages to be installed are kept.\n\
+For example, if you downloaded Slackware into the /stuff\n\
+directory on your hard drive (so that you have the\n\
+directories /stuff/slackware/a, /stuff/slackware/ap, and so on\n\
+each containing the files that would be in that directory on\n\
+the FTP site), then the full path to enter here would be:\n\
+\n\
+ /stuff/slackware\n\
+\n\
+What directory are the Slackware sources in?" \
+19 65 2> $TMP/source.dir
+if [ ! $? = 0 ]; then
+ rm -f $TMP/source.dir
+ exit
+fi
+SLACK_SOURCE_LOCATION="`cat $TMP/source.dir`"
+rm -f $TMP/source.dir
+if mount | grep $SLACK_DEVICE 1> /dev/null 2> /dev/null ; then
+ # This partition is already mounted, so we will have to
+ # tweak things funny.
+ rm -f /var/log/mount 2> /dev/null
+ rmdir /var/log/mount 2> /dev/null
+ PREFIX="`mount | grep $SLACK_DEVICE | cut -f 3 -d ' '`"
+ ln -sf $PREFIX /var/log/mount
+else
+ SUCCESS=false
+ for type in ext4 ext3 ext2 vfat reiserfs hpfs msdos ; do
+ mount -r -t $type $SLACK_DEVICE /var/log/mount 1> /dev/null 2> /dev/null
+ if [ $? = 0 ]; then # mounted successfully
+ SUCCESS=true
+ break;
+ fi
+ done
+ if [ ! $SUCCESS = true ]; then # there was a mount error
+ cat << EOF > $TMP/tempmsg
+There was a problem mounting your partition. Would you like to:
+
+EOF
+ dialog --title "MOUNT ERROR" --menu "`cat $TMP/tempmsg`" 10 68 2 \
+"Restart" "Start over" \
+"Ignore " "Ignore the error and continue" 2> $TMP/dowhat
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/dowhat
+ exit
+ fi
+ DOWHAT="`cat $TMP/dowhat`"
+ rm -f $TMP/dowhat
+ if [ "$DOWHAT" = "Restart" ]; then
+ umount /var/log/mount 2> /dev/null
+ continue;
+ fi
+ echo
+ fi # mount error
+fi
+
+# First, check if a Slackware ISO image is present in $SLACK_SOURCE_LOCATION
+if check_iso_image /var/log/mount/$SLACK_SOURCE_LOCATION /var/log/mntiso ; then
+ echo "/var/log/mntiso/slackware" > $TMP/SeTDS
+ echo "-source_mounted" > $TMP/SeTmount
+ echo "/dev/null" > $TMP/SeTsource
+ exit
+elif [ -f /var/log/mount/$SLACK_SOURCE_LOCATION/slackware/PACKAGES.TXT ]; then
+ echo "/var/log/mount/$SLACK_SOURCE_LOCATION/slackware" > $TMP/SeTDS
+ echo "-source_mounted" > $TMP/SeTmount
+ echo "/dev/null" > $TMP/SeTsource
+ exit
+elif [ -d /var/log/mount/$SLACK_SOURCE_LOCATION ]; then
+ echo "/var/log/mount/$SLACK_SOURCE_LOCATION" > $TMP/SeTDS
+ echo "-source_mounted" > $TMP/SeTmount
+ echo "/dev/null" > $TMP/SeTsource
+ exit
+else
+ cat << EOF > $TMP/tempmsg
+
+Sorry, but the directory $SLACK_SOURCE_LOCATION does not exist
+on partition $SLACK_DEVICE.
+
+Would you like to try again?
+EOF
+ dialog --title "SOURCE DIRECTORY NOT FOUND" --yesno "`cat $TMP/tempmsg`" 10 70
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg
+ exit
+ fi
+ rm -r $TMP/tempmsg
+fi
+
+done
diff --git a/source/installer/sources/initrd/usr/lib/setup/PROMPThelp b/source/installer/sources/initrd/usr/lib/setup/PROMPThelp
new file mode 100644
index 000000000..1bc7b15fe
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/PROMPThelp
@@ -0,0 +1,83 @@
+PROMPT MODE HELP
+
+Software packages are about to be transfered onto your
+hard drive. Several options exist for selecting which
+packages you wish to install.
+
+If you select "full", the install program will just go
+ahead and install everything from the disk sets
+you have selected. If you've got enough disk space, this
+should work fine. You'll have some packages you don't
+need on your hard drive, though, like fairly large X
+servers for display hardware you don't own. Not a problem,
+if you run short of space, go into /var/log/packages and
+read any or all of the files with 'less' to see what
+packages you have installed, and remove any unnecessary
+ones using 'removepkg'.
+
+For people who know what they want to install and would
+like to select the packages from menus instead of
+individually, there are two menu installation modes:
+"menu" and "expert".
+
+"menu" mode puts up a menu at the start of each series of
+packages, from which you can install systems such as
+the GNU C/C++ compiler, or the Linux source code. It's
+easy to use, and makes installation go much faster than
+"newbie" mode.
+
+"expert" mode is similar, but allows the toggling of every
+individual package. This offers the greatest control over
+what gets installed on the machine, but can be tricky for
+beginners.
+
+The so-called "newbie" mode will follow a defaults file in
+the first directory of each series you install that will
+install some required package automatically, while prompting
+you about the rest of them, one by one. This mode of
+installation _really_ is no longer recommended. There are
+so many packages now that the time added to the installation
+is quite significant, and the chance of accidentally leaving
+out an important package is high. If you haven't installed
+Slackware before, the best thing to do is make sure you have
+plenty of space and go for a "full" installation.
+
+About the "tagfile" files:
+
+The package installation defaults are user definable - you
+may set any package to be added or skipped automatically by
+editing your choices into a file called TAGFILE that will be
+found on the first disk of each series. The tagfile contains
+all the instructions needed to completely automate your
+installation.
+
+NOTE: Software may be added to your system after the
+initial installation. Just type 'setup' to add software
+to your system. Another script, 'pkgtool', may be used to
+add software packages from the current directory, or to
+cleanly remove packages that you want uninstalled. Also,
+command line utilities (installpkg, removepkg, makepkg,
+etc) are available, and (once learned) more efficient to
+use. These are what I use for package management.
+
+If you use tagfiles, you might want to use a custom
+tagfile that you have created yourself instead of the
+default ones that come with Slackware (the ones named
+'tagfile'). For instance, I use custom tagfiles called
+'tagfile.pat' that you might see on your disks. :^) You
+make a custom tagfile by copying the 'tagfile' on the
+first disk of a series to a file named 'tagfile.???'
+where .??? is a custom extension of your choosing. (I use
+'.pat') Once you've done this, you can edit the defaults
+any way you like. (but be careful about changing stuff
+that was installed by default)
+
+To use a custom tagfile, just choose "custom" on the
+prompt mode menu, and enter your custom extension. Any
+tagfiles with this extension will then be used for the
+duration of the installation. If at any point a tagfile
+with that extension cannot be found, the default tagfile
+will be used instead.
+
+-- End of prompt mode help text
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/PXEhelp b/source/installer/sources/initrd/usr/lib/setup/PXEhelp
new file mode 100644
index 000000000..99c2ad938
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/PXEhelp
@@ -0,0 +1,108 @@
+
+Slackware PXE Server Help
+_________________________
+
+First, a little help on help. Whenever you encounter a text
+viewer like this during the installation, you can move around
+with these commands:
+
+PGDN/SPACE - Move down one page
+PGUP/'b' - Move up one page
+ENTER/DOWN/'j' - Move down one line
+UP/'k' - Move up one line
+LEFT/'h' - Scroll left
+RIGHT/'l' - Scroll right
+'0' - Move to beginning of line
+HOME/'g' - Move to beginning of file
+END/'G' - Move to end of file
+'/' - Forward search
+'?' - Backward search
+'n' - Repeat last search (forward)
+
+Also, you're running a real multitasking operating system now, so
+you're not confined to the installation program. You can log into
+other consoles and look around at any time without disturbing the
+installation process. To do this, you need to learn the commands
+that control the Linux console. You'll use these commands all the
+time when you're logged into Linux.
+
+"Virtual" consoles and scrollback:
+
+Right now, the screen you're looking at is probably VIRTUAL CONSOLE
+NUMBER ONE, (or /dev/tty1 in Linux-speak). There are usually
+several virtual consoles available. When you log into the install
+disk, there are four consoles. To switch among them, use Alt-F1,
+Alt-F2, Alt-F3, or Alt-F4 to select which of the four consoles you
+wish to use. While you're using a console, you get a small amount
+of text scrollback buffer. To scroll the console back, hold down
+the right shift key and hit PageUp. To scroll the console forward,
+hit PageDown while holding the right shift key down. This can be
+especially useful for reading the boot messages, which can go by
+too fast to read otherwise.
+
+
+RUNNING THE PXESETUP PROGRAM
+
+
+The pxesetup main menu is kept as easy as possible, because only a
+limited configuration is needed.
+
+
+NETWORK (configure the network device and optional DHCP server)
+SOURCE (select the source location for the Slackware Linux
+ packages)
+ACTIVATE (start the PXE server)
+
+
+In the NETWORK configuration stage, you configure an IP address for
+your network card. If you have already a DHCP server in your local
+network, the pxesetup program will offer you the choice of using the
+DHCP server to configure your network device fully automatic, but
+there is always the option to enter an IP address manually. If no
+DHCP server has been detected running inside your local network,
+then pxesetup will start its own DHCP server (we need one). You will
+get the chance to define the IP address range which that internal
+DHCP server uses. You should check the lower and upper IP addresses
+carefully and verify that none of your local network's computers,
+including your local gateway, use an IP address in that DHCP range.
+If you spot a conflict, you can adjust these lower and upper bounds.
+Press 'Accept' once you are satisfied.
+
+In the SOURCE configuration stage, you determine where you have
+your local Slackware copy. This should be a complete directory
+tree including the packages, the kernels and the isolinux directory.
+The package sources are not needed and can be omitted from the medium
+if you are using a bootable USB stick for instance. The choices
+for SOURCE location are: a DVD medium, a local disk partition or
+a pre-mounted directory. These are the standard setup dialogs you
+will certainly know from installing Slackware. Be sure to enter the
+full directory path to (and including) the directory which contains
+the 'a', 'ap', 'd', ..., 'y' subdirectiries. You know the drill.
+
+
+When you are done configuring NETWORK and SOURCE, it is time to
+ACTIVATE your PXE server. The screen will show a live view of the
+server's connection log for client boot requests. This goes on
+until you press 'Exit' which will drop you back into the main menu
+after killing the PXE service. Selecting ACTIVATE will restart the
+PXE service. Computers who boot from your PXE server will see the
+usual Slackware installation routine. When it comes to selecting the
+SOURCE, these computers have one choice, and is the entry "Install
+from FTP/HTTP server". The PXE server offers Slackware packages to
+willing computers using its own internal HTTP server. The default
+values that you will see for the URL and the PATH input fields are
+being supplied by the PXE server and should not be changed.
+
+
+...WHEN YOU'RE DONE:
+
+
+EXIT: This leaves Slackware PXE Server setup.
+
+
+Have fun running this PXE server!
+
+---
+Eric Hameleers
+alien@slackware.com
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTDOS b/source/installer/sources/initrd/usr/lib/setup/SeTDOS
new file mode 100755
index 000000000..4f9d10577
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTDOS
@@ -0,0 +1,214 @@
+#!/bin/sh
+# SeTpartition user-friendly rewrite Fri Dec 15 13:17:40 CST 1995 pjv
+# More updates for Slackware 3.5: Wed Apr 29 22:43:28 CDT 1998
+# Updated for Slackware 7.x (new fdisk tags) Fri Sep 10 13:17:18 CDT 1999
+TMP=/var/log/setup/tmp
+T_PX="`cat $TMP/SeTT_PX`"
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+REDIR=/dev/tty4
+NDIR=/dev/null
+rm -f $TMP/SeTDOS
+touch $TMP/SeTDOS
+
+crunch () { # remove extra whitespace
+ read STRING;
+ echo $STRING
+}
+
+# get_part_size( dev ) - Return the size in K, M, G, T, or P of the named partition.
+get_part_size() {
+ numfmt --to=iec $(blockdev --getsize64 $1)
+}
+
+ntfs_security() {
+ rm -f $TMP/ntfs_security
+ dialog --backtitle "Setting permissions on NTFS partition $DOS_PART" \
+ --title "SET SECURITY FOR NTFS PARTITION $DOS_PART" \
+ --default-item "fmask=177,dmask=077" \
+ --menu "Because users could go snooping through (or destroy, depending on \
+the settings) your Windows partition, you should choose how much access would you \
+like your non-root users to have to partition $DOS_PART. The access level can \
+range from no access at all, to read-only for everyone, to read-write access \
+for every user on the machine. A reasonable default (read-write for root only) \
+is chosen, but you may set this any way that you like." \
+16 77 4 \
+"fmask=177,dmask=077" "Root has read/write access, users have no access (ntfs-3g)" \
+"fmask=333,dmask=222" "Everyone has read only access (built-in kernel ntfs driver)" \
+"fmask=133,dmask=022" "Everyone has read access, but only root can write (ntfs-3g)" \
+"fmask=111,dmask=000" "All users can read/write to any file (ntfs-3g)" \
+2> $TMP/ntfs_security
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/ntfs_security $TMP/mount-point $TMP/SeTDOS
+ echo 1
+ fi
+}
+
+fat_security() {
+ rm -f $TMP/fat_security
+ dialog --backtitle "Setting permissions on FAT partition $DOS_PART" \
+ --title "SET SECURITY FOR FAT PARTITION $DOS_PART" \
+ --default-item "fmask=177,dmask=077" \
+ --menu "Because users could go snooping through (or destroy, depending on \
+the settings) your Windows partition, you should choose how much access would you \
+like your non-root users to have to partition $DOS_PART. The access level can \
+range from no access at all, to read-only for everyone, to read-write access \
+for every user on the machine. A reasonable default (read-write for root only) \
+is chosen, but you may set this any way that you like." \
+18 77 4 \
+"fmask=177,dmask=077" "Root has read/write access, users have no access" \
+"fmask=333,dmask=222" "Everyone has read only access" \
+"fmask=133,dmask=022" "Everyone has read access, but only root can write" \
+"fmask=111,dmask=000" "All users can read/write to any file" \
+2> $TMP/fat_security
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/fat_security $TMP/mount-point $TMP/SeTDOS
+ echo 1
+ fi
+}
+
+# Since the USB installers (both usbboot.img and the ones created using
+# usbimg2disk.sh) present bogus FAT/NTFS partitions, we need a way to
+# filter these from the partition scan. To do this, we'll set a variable
+# $BANHAMMER that contains the name of the device the stick was found on.
+# First, we'll set that to contain some random nonsense that will never
+# be an actual device since reverse grepping for "" won't work.
+BANHAMMER="0xFE11C1A"
+# Look for the usbboot.img stick:
+if [ -L /dev/disk/by-label/USBSLACK ]; then
+ BANHAMMER="$(readlink -f /dev/disk/by-label/USBSLACK)"
+fi
+# Look for the usbimg2disk.sh stick:
+if [ -L /dev/disk/by-label/USBSLACKINS ]; then
+ BANHAMMER="$(readlink -f /dev/disk/by-label/USBSLACKINS | cut -b 1-8)"
+fi
+# Suggested new GPT partition type: Microsoft basic data
+# More research needed... could be FAT32, NTFS, or EXFAT
+DOSLIST="$(probe -l 2> /dev/null | grep -E "DOS|Win(95 F|98 F)|HPFS|W95 F|FAT(12|16)" | grep -Ev "Ext('d|end)" | grep -v "$BANHAMMER" | sort)"
+if [ "$DOSLIST" = "" ]; then # no FAT or NTFS partitions
+ exit
+fi
+dialog --backtitle "Setting up non-Linux partitions." \
+--title "FAT or NTFS PARTITIONS DETECTED" \
+--yesno "Partitions of type FAT or NTFS (commonly used by DOS and \
+Windows) have been found on your \
+system. Would you like to add these partitions to your /etc/fstab \
+so that these partitions are visible from Linux?" \
+8 70
+if [ ! $? = 0 ]; then
+ exit
+fi
+while [ 0 ]; do # main partition selection loop
+ rm -f $TMP/SeTSKIP
+ echo "true" > $TMP/SeTSKIP
+ cat << EOF > $TMP/tempscript
+dialog --backtitle "Selecting non-Linux partitions." \\
+--title "SELECT PARTITION TO ADD TO /etc/fstab" \\
+--ok-label Select --cancel-label Continue \\
+--menu "In order to make these partitions visible from Linux, we \\
+need to add them to your /etc/fstab. Please pick a partition to \\
+add to /etc/fstab, or select '---' to continue with the installation \\
+process." \\
+15 70 5 \\
+EOF
+ echo "$DOSLIST" | while read PARTITION ; do
+ NAME=`echo $PARTITION | crunch | cut -f 1 -d ' '`
+ SIZE=`get_part_size $NAME`
+ if echo $PARTITION | grep Win9 1> $NDIR 2> $NDIR ; then
+ TYPE="FAT32"
+ elif echo $PARTITION | grep "W95 F" 1> $NDIR 2> $NDIR ; then
+ TYPE="FAT32"
+ elif echo $PARTITION | grep NTFS 1> $NDIR 2> $NDIR ; then
+ TYPE="NTFS"
+ elif echo $PARTITION | grep FAT 1> $NDIR 2> $NDIR ; then
+ TYPE="FAT16"
+ fi
+ if cat $TMP/SeTDOS | grep $NAME 1> $NDIR 2> $NDIR ; then
+ ON=`cat $TMP/SeTDOS | grep $NAME | crunch | cut -f 2 -d ' '`
+ echo "\"(IN USE)\" \"$NAME on $ON $TYPE ${SIZE}\" \\" >> $TMP/tempscript
+ else
+ echo "\"$NAME\" \"$TYPE ${SIZE}\" \\" >> $TMP/tempscript
+ echo "false" > $TMP/SeTSKIP
+ fi
+ done
+ echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
+ echo "2> $TMP/return" >> $TMP/tempscript
+ if [ "`cat $TMP/SeTSKIP`" = "true" ]; then
+ break
+ fi
+ . $TMP/tempscript
+ if [ ! $? = 0 ]; then
+ rm $TMP/tempscript
+ exit 255 # user abort
+ fi
+ DOS_PART="`cat $TMP/return`"
+ rm -f $TMP/tempscript
+ if [ "$DOS_PART" = "---" ]; then
+ break
+ elif [ "$DOS_PART" = "(IN USE)" ]; then
+ continue
+ fi
+ if echo "$DOSLIST" | grep -w $DOS_PART | grep NTFS 1> $NDIR 2> $NDIR ; then
+ ntfs_security
+ FS_UMASK="$(cat $TMP/ntfs_security)"
+ if [ "$FS_UMASK" = "1" ]; then
+ exit 1
+ else
+ if [ "$FS_UMASK" = "fmask=333,dmask=222" ]; then
+ FS_TYPE=ntfs
+ else
+ FS_TYPE=ntfs-3g
+ fi
+ fi
+ else
+ FS_TYPE=vfat
+ fat_security
+ FS_UMASK="$(cat $TMP/fat_security)"
+ fi
+ dialog --backtitle "Selecting a location to mount $DOS_PART." \
+ --title "PICK MOUNT POINT FOR $DOS_PART" \
+ --inputbox "Now this partition must be mounted somewhere in your \
+ directory tree. Please enter the directory under which \
+ you would like to put it. For instance, you might want to \
+ enter /fat-c or /fat-d or something similar. \
+ NOTE: This \
+ partition won't actually be mounted until you reboot. \
+ Where would you like to mount $DOS_PART?" \
+ 13 65 2> $TMP/mount-point
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/mount-point $TMP/SeTDOS
+ exit
+ fi
+ NEW_DIR="`cat $TMP/mount-point`"
+ rm -f $TMP/mount-point
+ # If this was left blank or is '/', drop back to the first menu and start over.
+ if [ "$NEW_DIR" = "" -o "$NEW_DIR" = "/" ]; then
+ continue
+ fi
+ if [ ! "`echo $NEW_DIR | cut -b1`" = "/" ]; then
+ NEW_DIR="/$NEW_DIR"
+ fi
+ mkdir -p ${T_PX}$NEW_DIR
+ chmod 755 ${T_PX}$NEW_DIR
+ if echo "$DOSLIST" | grep $DOS_PART | grep NTFS 1> $NDIR 2> $NDIR ; then
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$DOS_PART" "$NEW_DIR" "$FS_TYPE" "$FS_UMASK" "1" "0" >> $TMP/SeTDOS
+ else
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$DOS_PART" "$NEW_DIR" "$FS_TYPE" "$FS_UMASK" "1" "0" >> $TMP/SeTDOS
+ fi
+done # partition adding loop
+rm -f $TMP/SeTSKIP
+cat << EOF > $TMP/tempmsg
+
+Adding this information to your /etc/fstab:
+
+EOF
+cat $TMP/SeTDOS >> $TMP/tempmsg
+dialog --backtitle "Finished setting up non-Linux partitions." \
+--title "DONE ADDING FAT or NTFS PARTITIONS" \
+--exit-label OK \
+--textbox $TMP/tempmsg 15 72
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTEFI b/source/installer/sources/initrd/usr/lib/setup/SeTEFI
new file mode 100755
index 000000000..35ac5f9fa
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTEFI
@@ -0,0 +1,94 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+T_PX="`cat $TMP/SeTT_PX`"
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+rm -f $TMP/SeTefipartitions
+touch $TMP/SeTefipartitions
+
+# Scan for EFI partitions:
+# We accept at most 10 NVMe controllers, each controlling at most 4 SSDs
+for drive in sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl sdm sdn sdo sdp \
+ mmcblk0 mmcblk1 mmcblk2 mmcblk3 mmcblk4 mmcblk5 mmcblk6 mmcblk7 mmcblk8 mmcblk9 \
+ nvme0n1 nvme1n1 nvme2n1 nvme3n1 nvme4n1 nvme5n1 nvme6n1 nvme7n1 nvme8n1 nvme9n1 \
+ nvme0n2 nvme1n2 nvme2n2 nvme3n2 nvme4n2 nvme5n2 nvme6n2 nvme7n2 nvme8n2 nvme9n2 \
+ nvme0n3 nvme1n3 nvme2n3 nvme3n3 nvme4n3 nvme5n3 nvme6n3 nvme7n3 nvme8n3 nvme9n3 \
+ nvme0n4 nvme1n4 nvme2n4 nvme3n4 nvme4n4 nvme5n4 nvme6n4 nvme7n4 nvme8n4 nvme9n4 ; do
+ gdisk -l /dev/$drive 2> /dev/null | grep -w EF00 | while read efisp ; do
+ p=""
+ echo $drive| grep -q nvme && p="p"
+ echo /dev/$drive$p$(expr $(echo "$efisp" | cut -b 1-4)) >> $TMP/SeTefipartitions
+ done
+done
+
+if [ "$(cat $TMP/SeTefipartitions)" = "" ]; then # No EFI partitions
+ rm -f $TMP/SeTefipartitions
+ exit
+fi
+
+# Initially, we will just take the first EFI partition found, which
+# will probably be on /dev/sda:
+PREFERRED_EFI_PARTITION="$(cat $TMP/SeTefipartitions | head -n 1)"
+
+# But we will also test to see if there is an EFI partition on the same
+# device as the root partition, and if so, prefer that:
+if [ -r $TMP/SeTrootdev ]; then
+ if grep -q "$(cat $TMP/SeTrootdev | cut -b 1-8)" $TMP/SeTefipartitions ; then
+ PREFERRED_EFI_PARTITION="$(grep "$(cat $TMP/SeTrootdev | cut -b 1-8)" $TMP/SeTefipartitions | head -n 1)"
+ fi
+fi
+
+# This file is no longer needed:
+rm -f $TMP/SeTefipartitions
+
+# See if EFI partition is formatted. If not, offer to format it:
+EFITMPMOUNT=$(mktemp -d)
+if ! mount $PREFERRED_EFI_PARTITION $EFITMPMOUNT 1> /dev/null 2> /dev/null ; then
+ # It didn't mount, so it must not be formatted:
+ dialog --title "FORMAT EFI PARTITION ${PREFERRED_EFI_PARTITION}?" \
+ --yesno "An EFI System Partition was found on ${PREFERRED_EFI_PARTITION}, \
+but it has not yet been formatted. Would you like to format this partition?" \
+7 56
+ if [ ! $? = 0 ]; then
+ exit
+ fi
+ # Format the partition with FAT32, 2 sectors per cluster (needed for the
+ # minimum supported EFI partition size of 100MB):
+ dialog --title "FORMATTING EFI PARTITION ${PREFERRED_EFI_PARTITION}" --infobox \
+ "Formatting EFI System Partition ${PREFERRED_EFI_PARTITION} as FAT32." 3 60
+ mkfs.vfat -F 32 -s 2 ${PREFERRED_EFI_PARTITION} 1> /dev/null 2> /dev/null
+ sleep 1
+ mount ${PREFERRED_EFI_PARTITION} $EFITMPMOUNT 1> /dev/null 2> /dev/null
+fi
+if [ ! -d $EFITMPMOUNT/EFI -a ! -d $EFITMPMOUNT/efi ]; then
+ mkdir $EFITMPMOUNT/EFI 1> /dev/null 2> /dev/null
+fi
+umount $PREFERRED_EFI_PARTITION 1> /dev/null 2> /dev/null
+rmdir $EFITMPMOUNT
+
+# Mount the partition on ${T_PX}/boot/efi:
+if [ ! -d ${T_PX}/boot/efi ]; then
+ mkdir -p ${T_PX}/boot/efi
+fi
+mount ${PREFERRED_EFI_PARTITION} ${T_PX}/boot/efi 1> /dev/null 2> /dev/null
+
+# Add the EFI System Partition to /etc/fstab:
+printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$PREFERRED_EFI_PARTITION" "/boot/efi" "vfat" "defaults" "1" "0" > $TMP/SeTEFI
+cat << EOF > $TMP/tempmsg
+
+Adding this information to your /etc/fstab:
+
+EOF
+cat $TMP/SeTEFI >> $TMP/tempmsg
+dialog --backtitle "Finished setting up EFI System Partition." \
+--title "EFI SYSTEM PARTITION RECOGNIZED" \
+--exit-label OK \
+--textbox $TMP/tempmsg 10 72
+
+# Piggyback this fstab addition on the other native partitions in SeTnative:
+cat $TMP/SeTEFI >> $TMP/SeTnative
+rm -f $TMP/SeTEFI $TMP/tempmsg
+
+# Done.
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTPKG b/source/installer/sources/initrd/usr/lib/setup/SeTPKG
new file mode 100755
index 000000000..22ad2d9d3
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTPKG
@@ -0,0 +1,148 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+T_PX="`cat $TMP/SeTT_PX`"
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+# If the distribution source is already known, we can avoid listing
+# stuff that isn't there.
+if [ ! -r $TMP/SeTT_PX -o ! -r $TMP/SeTDS ]; then
+ unset T_PX
+ unset DS
+else
+ T_PX="`cat $TMP/SeTT_PX`"
+ DS="`cat $TMP/SeTDS`"
+fi
+# In /usr/lib/setup/slackinstall, $TMP/series is a directory.
+# Depending on how you use the 'setup' script, you can end up going
+# round in circles due to this script using 'series' as a text file but
+# not being able delete it due to an rm -f. Now we use rm -rf.
+# It's a toss up between accidentally wiping the series selection
+# (it only takes a few seconds to re-select the stuff) and getting
+# confused.
+rm -rf $TMP/SeTSERIES $TMP/tmpscript $TMP/series
+
+cat << EOF > $TMP/tmpscript
+dialog --backtitle "Selecting software to install." \\
+--title "PACKAGE SERIES SELECTION" --item-help --output-separator "#" --checklist \\
+"Now it's time to select which general categories of software \\
+to install on your system. \\
+Use the spacebar to select or unselect the software you wish to \\
+install. \\
+You can use the up and down arrows to see all the possible choices. \\
+Recommended choices have been preselected. \\
+Press the ENTER key when you are finished." \\
+20 75 9 \\
+"A" "Base Linux system" on "The A (base) series contains the kernel and main system utilities." \\
+EOF
+
+if [ -d $DS/ap -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"AP" "Various Applications that do not need X" on "The AP series is a collection of useful applications." \\
+EOF
+fi
+
+if [ -d $DS/d -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"D" "Program Development (C, C++, Lisp, Perl, etc.)" on "The D series contains compilers, debuggers, and other programming tools." \\
+EOF
+fi
+
+if [ -d $DS/e -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"E" "GNU Emacs" on "The E series contains the GNU Emacs advanced real-time display editor." \\
+EOF
+fi
+
+if [ -d $DS/f -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"F" "FAQ lists, HOWTO documentation" on "The F series contains essential documentation for Linux system administrators." \\
+EOF
+fi
+
+if [ -d $DS/gnome -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"GNOME" "The GNOME desktop for X" on "The GNOME series contains the GNOME desktop environment and related libraries." \\
+EOF
+fi
+
+if [ -d $DS/k -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"K" "Linux kernel source" on "The K series contains the source code for the Linux kernel." \\
+EOF
+fi
+
+if [ -d $DS/kde -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"KDE" "Qt and the K Desktop Environment for X" on "The KDE series contains the K Desktop Environment and related libraries." \\
+EOF
+fi
+
+if [ -d $DS/kdei -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"KDEI" "International language support for KDE" off "The KDEI series provides support for languages other than US English in KDE." \\
+EOF
+fi
+
+if [ -d $DS/l -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"L" "System Libraries (some needed by both KDE and GNOME)" "on" "The L series contains libraries needed by GNOME, KDE, and other programs." \\
+EOF
+fi
+
+if [ -d $DS/n -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"N" "Networking (TCP/IP, UUCP, Mail, News)" on "The N series contains network related clients and servers." \\
+EOF
+fi
+
+if [ -d $DS/t -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"T" "TeX typesetting software" on "TeX is a typesetting system often used for mathematics and technical papers." \\
+EOF
+fi
+
+if [ -d $DS/tcl -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"TCL" "Tcl/Tk script languages" on "The TCL series contains the Tcl/Tk/TclX languages and programs that use them." \\
+EOF
+fi
+
+if [ -d $DS/x -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"X" "X Window System" on "This series contains X, the windowing system used by Linux." \\
+EOF
+fi
+
+if [ -d $DS/xap -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"XAP" "X Applications" on "The XAP series is a collection of applications for X." \\
+EOF
+fi
+
+if [ -d $DS/xfce -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"XFCE" "The Xfce Desktop Environment for X" on "Xfce is a fast and lightweight GTK+ based desktop environment for X." \\
+EOF
+fi
+
+if [ -d $DS/y -o "$DS" = "" ]; then
+cat << EOF >> $TMP/tmpscript
+"Y" "Games" on "The Y series is a collection of classic BSD text-based games." \\
+EOF
+fi
+
+cat << EOF >> $TMP/tmpscript
+ 2> $TMP/series
+EOF
+. $TMP/tmpscript
+if [ ! $? = 0 ]; then
+ rm -rf $TMP/series $TMP/tmpscript
+ exit
+fi
+INSTSETS="`cat $TMP/series | tr -d " "`"
+INSTSETS="`echo $INSTSETS | tr "\042" "#" `"
+INSTSETS="`echo $INSTSETS | tr "," "#" `"
+INSTSETS="`echo $INSTSETS | tr -s "#" `"
+rm -rf $TMP/series $TMP/tmpscript
+echo "$INSTSETS" > $TMP/SeTSERIES
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTPXEHELP b/source/installer/sources/initrd/usr/lib/setup/SeTPXEHELP
new file mode 100755
index 000000000..a8f25c475
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTPXEHELP
@@ -0,0 +1,2 @@
+#!/bin/sh
+dialog --title "Slackware PXE Server Help" --exit-label OK --textbox "/usr/lib/setup/PXEhelp" 22 77
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTconfig b/source/installer/sources/initrd/usr/lib/setup/SeTconfig
new file mode 100755
index 000000000..6731019bb
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTconfig
@@ -0,0 +1,138 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+T_PX="`cat $TMP/SeTT_PX`"
+ROOT_DEVICE="`cat $TMP/SeTrootdev`"
+if [ ! -d $T_PX/bin -a ! -d $T_PX/etc ]; then # if there no Linux here, exit
+ exit
+fi
+
+# Check for disk full error:
+. /usr/lib/setup/SeTfull
+
+# These next lines are intended to clean up any permissions
+# problems that could be caused by a bad package. We don't
+# intend to make any bad packages here, but it never hurts
+# to be safe. :^)
+( cd $T_PX ; chmod 755 ./ )
+( cd $T_PX ; chmod 755 ./var )
+if [ -d $T_PX/usr/src/linux ]; then
+ chmod 755 $T_PX/usr/src/linux
+fi
+if [ ! -d $T_PX/proc ]; then
+ mkdir $T_PX/proc
+ chown root.root $T_PX/proc
+fi
+if [ ! -d $T_PX/sys ]; then
+ mkdir $T_PX/sys
+ chown root.root $T_PX/sys
+fi
+chmod 1777 $T_PX/tmp
+if [ ! -d $T_PX/var/spool/mail ]; then
+ mkdir -p $T_PX/var/spool/mail
+ chmod 755 $T_PX/var/spool
+ chown root.mail $T_PX/var/spool/mail
+ chmod 1777 $T_PX/var/spool/mail
+fi
+
+# Some of the install scripts need /proc and /sys.
+# Some disks will need /dev with module loaded devices.
+if [ ! "$T_PX" = "/" ]; then
+ mount --bind /proc $T_PX/proc 1> /dev/null 2> /dev/null
+ mount --bind /sys $T_PX/sys 1> /dev/null 2> /dev/null
+ mount --bind /dev $T_PX/dev 1> /dev/null 2> /dev/null
+fi
+# These will be left connected rather than unmounting them to
+# make it easier to set up LVM/LUKS.
+
+# Load keyboard map (if any) when booting
+if [ -r $TMP/SeTkeymap ]; then
+ MAPNAME="`cat $TMP/SeTkeymap`"
+ echo "#!/bin/sh" > $T_PX/etc/rc.d/rc.keymap
+ echo "# Load the keyboard map. More maps are in /usr/share/kbd/keymaps." \
+ >> $T_PX/etc/rc.d/rc.keymap
+ echo "if [ -x /usr/bin/loadkeys ]; then" >> $T_PX/etc/rc.d/rc.keymap
+ echo " /usr/bin/loadkeys $MAPNAME" >> $T_PX/etc/rc.d/rc.keymap
+ echo "fi" >> $T_PX/etc/rc.d/rc.keymap
+ chmod 755 $T_PX/etc/rc.d/rc.keymap
+fi
+
+# Only ask if we want to skip configuring if we suspect the user should
+# skip the step:
+if [ -r $T_PX/etc/fstab ]; then
+ dialog --title "CONFIGURE THE SYSTEM" --yesno "Now we can configure your \
+Linux system. If this is a new installation, you MUST configure it now or it \
+will not boot correctly. However, if you are just adding software to an \
+existing system, you can back out to the main menu and skip this step. \
+However (important exception) if you've installed a new kernel image, it's \
+important to reconfigure your system so that you can install LILO (the Linux \
+loader) or create a bootdisk using the new kernel. You want to CONFIGURE \
+your system, right?" 0 0
+ if [ ! $? = 0 ]; then
+ exit
+ fi
+else
+ dialog --title "DONE INSTALLING PACKAGES" --infobox \
+"Preparing to configure your new Linux system..." 3 54
+ sleep 1
+fi
+
+# Post installation and setup scripts added by packages.
+if [ -d $T_PX/var/log/setup ]; then
+ # Prepare for LVM in a newly installed system
+ if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then # Available in local root
+ if [ ! -r $T_PX/etc/lvmtab -a ! -d $T_PX/etc/lvm/backup ]; then
+ #mount --bind /proc $T_PX/proc
+ #mount --bind /sys $T_PX/sys
+ chroot $T_PX /sbin/vgscan --mknodes --ignorelockingfailure 1> /dev/null 2> /dev/null
+ # First run does not always catch LVM on a LUKS partition:
+ chroot $T_PX /sbin/vgscan --mknodes --ignorelockingfailure 1> /dev/null 2> /dev/null
+ fi
+ fi
+ for INSTALL_SCRIPTS in $T_PX/var/log/setup/setup.* ; do
+ SCRIPT=`basename $INSTALL_SCRIPTS`
+ # Here, we call each script in /var/log/setup. Two arguments are provided:
+ # 1 -- the target prefix (normally /, but ${T_PX} from the bootdisk)
+ # 2 -- the name of the root device.
+ ( cd $T_PX
+ if [ -x var/log/setup/$SCRIPT ]; then
+ ./var/log/setup/$SCRIPT $T_PX $ROOT_DEVICE
+ fi
+ )
+ if echo $SCRIPT | grep onlyonce 1> /dev/null 2> /dev/null; then # only run after first install
+ if [ ! -d $T_PX/var/log/setup/install ]; then
+ mkdir $T_PX/var/log/setup/install
+ fi
+ mv $INSTALL_SCRIPTS $T_PX/var/log/setup/install
+ fi
+ done
+fi
+
+# Figure out how to set the /dev/cdrom and/or /dev/dvd symlinks. Everything seems to
+# report itself as a DVD-ROM, so don't blame me. Without asking what's what, all we can
+# do here is guess. It's a better guess than before, though, as now it takes ide-scsi
+# into account. This won't really matter these days (2018), as everything uses udev to
+# create /dev, and it makes links like this...
+if dmesg | grep "ATAPI CD" 1> /dev/null 2> /dev/null ; then
+ dmesg | grep "ATAPI CD" | while read device ; do
+ shortdev=`echo $device | cut -f 1 -d :`
+ if grep -w "$shortdev=ide-scsi" $T_PX/etc/lilo.conf 1> /dev/null 2> /dev/null ; then
+ shortdev=sr0
+ fi
+ ( cd $T_PX/dev
+ rm -f cdrom dvd
+ ln -sf /dev/$shortdev cdrom
+ ln -sf /dev/$shortdev dvd
+ )
+ # Rather than keep overwriting the devices, quit keeping only links to the first
+ # device found. "Real" users will use the actual devices instead of silly links
+ # anyway. ;-)
+ break;
+ done
+fi
+
+# Set root password:
+/usr/lib/setup/SeTpasswd
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTfdHELP b/source/installer/sources/initrd/usr/lib/setup/SeTfdHELP
new file mode 100755
index 000000000..d2e68b305
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTfdHELP
@@ -0,0 +1,2 @@
+#!/bin/sh
+dialog --title "Slackware Setup Help" --exit-label OK --textbox "/usr/lib/setup/FDhelp" 22 77
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTfull b/source/installer/sources/initrd/usr/lib/setup/SeTfull
new file mode 100755
index 000000000..bd32f3194
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTfull
@@ -0,0 +1,24 @@
+#!/bin/sh
+if [ "$TMP" = "" ]; then
+ TMP=/var/log/setup/tmp
+fi
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+# Test writing a 256K file and assume if it returns an error
+# that it means the drive filled up
+dd if=/dev/zero of=$TMP/SeTtestfull bs=1024 count=256 1> /dev/null 2> /dev/null
+FULLERR=$?
+rm -f $TMP/SeTtestfull
+if [ ! "$FULLERR" = "0" ]; then
+ dialog --title "ERROR: TARGET PARTITION FULL" --msgbox "Setup has \
+detected that one or more of your target partitions has become full. \
+I'm sorry, but you will have to try installing again onto a partition \
+or partitions with more free space. You could also try selecting \
+fewer packages to \
+install. Since there is no longer any space for setup to make its \
+temporary files, this is an unrecoverable error. Press control-alt-delete \
+to reboot and try again. Before doing that, you might want to switch to \
+another console (Alt-F2) and use df (disk free utility) to see if you \
+can get an idea of how to avoid this the next time around." 14 65
+fi
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTkernel b/source/installer/sources/initrd/usr/lib/setup/SeTkernel
new file mode 100755
index 000000000..6aa3091b1
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTkernel
@@ -0,0 +1,102 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+T_PX="`cat $TMP/SeTT_PX`"
+
+# First, determine our slackware kernel name:
+for ELEMENT in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ; do
+ if $(cat /proc/cmdline | cut -f $ELEMENT -d ' ' | grep -q SLACK_KERNEL) ; then
+ SLACK_KERNEL=$(cat /proc/cmdline | cut -f $ELEMENT -d ' ' | cut -f 2 -d =)
+ fi
+done
+unset ELEMENT
+
+# Next, find the kernel's release version:
+VERSION=$(uname -r | tr - _)
+
+# If someone tries to install kernels from a CD that doesn't contain any,
+# we'll give them one chance to find a disc that does.
+swapdisks() {
+ if [ -r ${T_PX}/var/log/setup/tmp/SeTCDdev ]; then
+ CDDEVICE=$(cat ${T_PX}/var/log/setup/tmp/SeTCDdev)
+ elif [ -r /tmp/SeTCDdev ]; then
+ CDDEVICE=$(cat /tmp/SeTCDdev)
+ else
+ return 1
+ fi
+ umount $CDDEVICE 1> /dev/null 2> /dev/null
+ eject -s $CDDEVICE
+ dialog --title "REINSERT KERNEL DISC" --msgbox \
+"Please reinsert the Slackware disc containing the collection \
+of Linux kernels. Usually this is disc number one (the disc \
+that you boot from). Once you've inserted the disc, hit ENTER \
+to continue." \
+8 61
+ mount $CDDEVICE /var/log/mount 1> /dev/null 2> /dev/null
+ if [ ! $? = 0 ]; then
+ sleep 1
+ mount $CDDEVICE /var/log/mount 1> /dev/null 2> /dev/null
+ if [ ! $? = 0 ]; then
+ sleep 11
+ mount $CDDEVICE /var/log/mount 1> /dev/null 2> /dev/null
+ fi
+ fi
+}
+
+( cd boot
+ if [ "$SLACK_KERNEL" = "generic.s" ]; then
+ if [ -r vmlinuz-generic-$VERSION ]; then
+ ln -sf vmlinuz-generic-$VERSION vmlinuz
+ ln -sf config-generic-$VERSION config
+ ln -sf System.map-huge-$VERSION System.map
+ fi
+ elif [ "$SLACK_KERNEL" = "huge.s" ]; then
+ if [ -r vmlinuz-huge-$VERSION ]; then
+ ln -sf vmlinuz-huge-$VERSION vmlinuz
+ ln -sf config-huge-$VERSION config
+ ln -sf System.map-huge-$VERSION System.map
+ fi
+ elif [ "$SLACK_KERNEL" = "hugesmp.s" ]; then
+ if [ -r vmlinuz-huge-smp-$VERSION ]; then
+ ln -sf vmlinuz-huge-smp-$VERSION vmlinuz
+ ln -sf config-huge-smp-$VERSION config
+ ln -sf System.map-huge-smp-$VERSION System.map
+ fi
+ elif [ "$SLACK_KERNEL" = "gensmp.s" ]; then
+ if [ -r vmlinuz-generic-smp-$VERSION ]; then
+ ln -sf vmlinuz-generic-smp-$VERSION vmlinuz
+ ln -sf config-generic-smp-$VERSION config
+ ln -sf System.map-generic-smp-$VERSION System.map
+ fi
+ elif [ "$SLACK_KERNEL" = "speakup.s" ]; then
+ # This assumes symlinks /nfs and /cdrom both pointing to /var/log/mount:
+ if $(mount | grep -q "type nfs") ; then
+ PLINK=nfs
+ else
+ PLINK=cdrom
+ fi
+ if [ $PLINK = cdrom -a ! -d /$PLINK/kernels ]; then
+ swapdisks
+ fi
+ if [ ! -d /$PLINK/kernels ]; then
+ dialog --title "ERROR ATTEMPTING TO INSTALL KERNEL" --msgbox "Sorry, but the directory /$PLINK/kernels \
+was not found. You may need to install the requested kernel $SLACK_KERNEL manually \
+and then install LILO \
+before your system will be able to boot correctly." \
+0 0
+ else
+ rm -f $T_PX/boot/vmlinuz $T_PX/boot/config $T_PX/boot/System.map
+ cp -a /$PLINK/kernels/$SLACK_KERNEL/bzImage $T_PX/boot/vmlinuz-$SLACK_KERNEL-$VERSION
+ cp -a /$PLINK/kernels/$SLACK_KERNEL/config $T_PX/boot/config-$SLACK_KERNEL-$VERSION
+ cp -a /$PLINK/kernels/$SLACK_KERNEL/System.map.gz $T_PX/boot
+ ( cd $T_PX/boot
+ gzip -d System.map.gz
+ mv System.map System.map-$SLACK_KERNEL-$VERSION
+ ln -sf vmlinuz-$SLACK_KERNEL-$VERSION vmlinuz
+ ln -sf config-$SLACK_KERNEL-$VERSION config
+ ln -sf System.map-$SLACK_KERNEL-$VERSION System.map
+ )
+ fi
+ fi
+)
+
+# and after all that hard work
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTkeymap b/source/installer/sources/initrd/usr/lib/setup/SeTkeymap
new file mode 100755
index 000000000..e8ac96396
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTkeymap
@@ -0,0 +1,220 @@
+#!/bin/sh
+# Copyright 1993, 1999, 2002 Patrick Volkerding, Moorhead, MN.
+# Copyright 2009 Patrick J. Volkerding, Sebeka, MN, USA
+# Use and redistribution covered by the same terms as the "setup" script.
+TMP=/var/log/setup/tmp
+RDIR=/dev/tty4
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+while [ 0 ]; do
+dialog --title "KEYBOARD MAP SELECTION" --menu "You may select one \
+of the following keyboard maps. If you do not select a keyboard \
+map, 'us.map' (the US keyboard map) is the default. Use the UP/DOWN \
+arrow keys and PageUp/PageDown to scroll \
+through the whole list of choices." \
+22 55 11 \
+"qwerty/us.map" "" \
+"qwerty/uk.map" "" \
+"azerty/azerty.map" "" \
+"azerty/be-latin1.map" "" \
+"azerty/fr-latin0.map" "" \
+"azerty/fr-latin1.map" "" \
+"azerty/fr-latin9.map" "" \
+"azerty/fr-old.map" "" \
+"azerty/fr-pc.map" "" \
+"azerty/fr.map" "" \
+"azerty/wangbe.map" "" \
+"azerty/wangbe2.map" "" \
+"colemak/en-latin9.map" "" \
+"dvorak/ANSI-dvorak.map" "" \
+"dvorak/dvorak-fr.map" "" \
+"dvorak/dvorak-l.map" "" \
+"dvorak/dvorak-r.map" "" \
+"dvorak/dvorak.map" "" \
+"dvorak/no-dvorak.map" "" \
+"fgGIod/tr_f-latin5.map" "" \
+"fgGIod/trf-fgGIod.map" "" \
+"olpc/es-olpc.map" "" \
+"olpc/pt-olpc.map" "" \
+"qwerty/bashkir.map" "" \
+"qwerty/bg-cp1251.map" "" \
+"qwerty/bg-cp855.map" "" \
+"qwerty/bg_bds-cp1251.map" "" \
+"qwerty/bg_bds-utf8.map" "" \
+"qwerty/bg_pho-cp1251.map" "" \
+"qwerty/bg_pho-utf8.map" "" \
+"qwerty/br-abnt.map" "" \
+"qwerty/br-abnt2.map" "" \
+"qwerty/br-latin1-abnt2.map" "" \
+"qwerty/br-latin1-us.map" "" \
+"qwerty/by-cp1251.map" "" \
+"qwerty/by.map" "" \
+"qwerty/bywin-cp1251.map" "" \
+"qwerty/cf.map" "" \
+"qwerty/cz-cp1250.map" "" \
+"qwerty/cz-lat2-prog.map" "" \
+"qwerty/cz-lat2.map" "" \
+"qwerty/cz-qwerty.map" "" \
+"qwerty/defkeymap.map" "" \
+"qwerty/defkeymap_V1.0.map" "" \
+"qwerty/dk-latin1.map" "" \
+"qwerty/dk.map" "" \
+"qwerty/emacs.map" "" \
+"qwerty/emacs2.map" "" \
+"qwerty/es-cp850.map" "" \
+"qwerty/es.map" "" \
+"qwerty/et-nodeadkeys.map" "" \
+"qwerty/et.map" "" \
+"qwerty/fi-latin1.map" "" \
+"qwerty/fi-latin9.map" "" \
+"qwerty/fi-old.map" "" \
+"qwerty/fi.map" "" \
+"qwerty/gr-pc.map" "" \
+"qwerty/gr.map" "" \
+"qwerty/hu101.map" "" \
+"qwerty/il-heb.map" "" \
+"qwerty/il-phonetic.map" "" \
+"qwerty/il.map" "" \
+"qwerty/is-latin1-us.map" "" \
+"qwerty/is-latin1.map" "" \
+"qwerty/it-ibm.map" "" \
+"qwerty/it.map" "" \
+"qwerty/it2.map" "" \
+"qwerty/jp106.map" "" \
+"qwerty/kazakh.map" "" \
+"qwerty/ky_alt_sh-UTF-8.map" "" \
+"qwerty/kyrgyz.map" "" \
+"qwerty/la-latin1.map" "" \
+"qwerty/lt.baltic.map" "" \
+"qwerty/lt.l4.map" "" \
+"qwerty/lt.map" "" \
+"qwerty/mk-cp1251.map" "" \
+"qwerty/mk-utf.map" "" \
+"qwerty/mk.map" "" \
+"qwerty/mk0.map" "" \
+"qwerty/nl.map" "" \
+"qwerty/nl2.map" "" \
+"qwerty/no-latin1.map" "" \
+"qwerty/no.map" "" \
+"qwerty/pc110.map" "" \
+"qwerty/pl.map" "" \
+"qwerty/pl1.map" "" \
+"qwerty/pl2.map" "" \
+"qwerty/pl3.map" "" \
+"qwerty/pl4.map" "" \
+"qwerty/pt-latin1.map" "" \
+"qwerty/pt-latin9.map" "" \
+"qwerty/pt.map" "" \
+"qwerty/ro.map" "" \
+"qwerty/ro_std.map" "" \
+"qwerty/ru-cp1251.map" "" \
+"qwerty/ru-ms.map" "" \
+"qwerty/ru-yawerty.map" "" \
+"qwerty/ru.map" "" \
+"qwerty/ru1.map" "" \
+"qwerty/ru2.map" "" \
+"qwerty/ru3.map" "" \
+"qwerty/ru4.map" "" \
+"qwerty/ru_win.map" "" \
+"qwerty/ruwin_alt-CP1251.map" "" \
+"qwerty/ruwin_alt-KOI8-R.map" "" \
+"qwerty/ruwin_alt-UTF-8.map" "" \
+"qwerty/ruwin_cplk-CP1251.map" "" \
+"qwerty/ruwin_cplk-KOI8-R.map" "" \
+"qwerty/ruwin_cplk-UTF-8.map" "" \
+"qwerty/ruwin_ct_sh-CP1251.map" "" \
+"qwerty/ruwin_ct_sh-KOI8-R.map" "" \
+"qwerty/ruwin_ct_sh-UTF-8.map" "" \
+"qwerty/ruwin_ctrl-CP1251.map" "" \
+"qwerty/ruwin_ctrl-KOI8-R.map" "" \
+"qwerty/ruwin_ctrl-UTF-8.map" "" \
+"qwerty/se-fi-ir209.map" "" \
+"qwerty/se-fi-lat6.map" "" \
+"qwerty/se-ir209.map" "" \
+"qwerty/se-lat6.map" "" \
+"qwerty/se-latin1.map" "" \
+"qwerty/sk-prog-qwerty.map" "" \
+"qwerty/sk-qwerty.map" "" \
+"qwerty/speakup-jfw.map" "" \
+"qwerty/speakupmap.map" "" \
+"qwerty/sr-cy.map" "" \
+"qwerty/sv-latin1.map" "" \
+"qwerty/tj_alt-UTF8.map" "" \
+"qwerty/tr_q-latin5.map" "" \
+"qwerty/tralt.map" "" \
+"qwerty/trf.map" "" \
+"qwerty/trq.map" "" \
+"qwerty/ttwin_alt-UTF-8.map" "" \
+"qwerty/ttwin_cplk-UTF-8.map" "" \
+"qwerty/ttwin_ct_sh-UTF-8.map" "" \
+"qwerty/ttwin_ctrl-UTF-8.map" "" \
+"qwerty/ua-cp1251.map" "" \
+"qwerty/ua-utf-ws.map" "" \
+"qwerty/ua-utf.map" "" \
+"qwerty/ua-ws.map" "" \
+"qwerty/ua.map" "" \
+"qwerty/uk.map" "" \
+"qwerty/us-acentos.map" "" \
+"qwerty/us.map" "" \
+"qwertz/croat.map" "" \
+"qwertz/cz-us-qwertz.map" "" \
+"qwertz/cz.map" "" \
+"qwertz/de-latin1-nodeadkeys.map" "" \
+"qwertz/de-latin1.map" "" \
+"qwertz/de-mobii.map" "" \
+"qwertz/de.map" "" \
+"qwertz/de_CH-latin1.map" "" \
+"qwertz/de_alt_UTF-8.map" "" \
+"qwertz/fr_CH-latin1.map" "" \
+"qwertz/fr_CH.map" "" \
+"qwertz/hu.map" "" \
+"qwertz/sg-latin1-lk450.map" "" \
+"qwertz/sg-latin1.map" "" \
+"qwertz/sg.map" "" \
+"qwertz/sk-prog-qwertz.map" "" \
+"qwertz/sk-qwertz.map" "" \
+"qwertz/slovene.map" "" \
+ 2> $TMP/SeTkeymap
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/SeTkeymap
+ exit
+ fi
+ MAPNAME="`cat $TMP/SeTkeymap`"
+ MAPNAME="`basename $MAPNAME`"
+ echo $MAPNAME > $TMP/SeTkeymap
+ BMAP="`basename $MAPNAME .map`.bmap"
+ tar xzOf /etc/keymaps.tar.gz $BMAP > /dev/null && tar xzOf /etc/keymaps.tar.gz $BMAP | loadkmap
+
+ while [ 0 ]; do
+ # Match the dialog colors a little while doing the keyboard test:
+ setterm -background cyan -foreground black -blank 0
+ clear
+ cat << EOF
+
+
+ OK, the new map is now installed. You may now test it by typing
+ anything you want. To quit testing the keyboard, enter 1 on a
+ line by itself to accept the map and go on, or 2 on a line by
+ itself to reject the current keyboard map and select a new one.
+
+EOF
+ echo -n " "
+ read REPLY
+ if [ "$REPLY" = "1" -o "$REPLY" = "2" ]; then
+ break;
+ fi
+ done
+ setterm -background black -foreground white -blank 0
+ if [ "$REPLY" = "1" ]; then
+ # Make a persistent (P) copy so starting setup won't erase it:
+ cp $TMP/SeTkeymap $TMP/Pkeymap
+ break;
+ else
+ rm -f $TMP/$MAPNAME
+ rm -f $TMP/SeTkeymap $TMP/Pkeymap
+ # Clear bad selection:
+ tar xzOf /etc/keymaps.tar.gz us.bmap > /dev/null && tar xzOf /etc/keymaps.tar.gz us.bmap | loadkmap
+ continue;
+ fi
+done
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTmaketag b/source/installer/sources/initrd/usr/lib/setup/SeTmaketag
new file mode 100755
index 000000000..18fba3af7
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTmaketag
@@ -0,0 +1,154 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+MOUNT=/tag
+mkdir -p $MOUNT
+dialog --title "CREATE CUSTOM TAGFILES" --yesno "Tagfiles are special files \
+found on the first disk of a series that can determine which packages are \
+installed and which are skipped. Deciding which files to install in advance \
+can speed up the installation process greatly. If you have not installed \
+Slackware Linux before, you should probably try installing using the \
+default tagfiles before you try making custom ones, because you won't see much \
+information about the package contents when creating your tagfiles. This \
+process assumes you already know which packages you want to install. \
+If you're not sure, back out now and just use the default tagfiles when \
+you install. \
+Do you want to create custom tagfiles?" 17 65
+if [ ! $? = 0 ]; then
+ exit
+fi
+dialog --title "ENTER CUSTOM TAGFILE EXTENSION" --inputbox "Now you must \
+enter a custom file extension. This will be used as the last part of the \
+filename for your new custom tagfiles. For example, I use '.pat' for my \
+custom extension, and my custom tagfiles on the first disk of each series \
+have the filename 'tagfile.pat'. Use any extension you like except .tgz or \
+.tar. The extension must consist of a period followed by exactly 3 \
+letters." 14 65 2> $TMP/SeTtagmake
+if [ ! $? = 0 -o ! "`cat $TMP/SeTtagmake | cut -b1`" = "." -o "`cat $TMP/SeTtagmake`" = "" ]; then
+ rm -f $TMP/SeTtagmake
+ exit
+fi
+TAGEXT="`cat $TMP/SeTtagmake`"
+dialog --title "USE EXPERT MENUS?" --menu "If you like, you may select your \
+packages from expert menus. Where the normal menu shows a choice like 'C \
+compiler system', the expert menus show you 'C libs', 'C compiler', 'C \
+include files', etc -- each individual package. Obviously, you should \
+know what you're doing if you use the expert menus since it's possible \
+to skip packages that are crucial to the functioning of a subsystem." \
+15 65 2 \
+"normal" "Use normal menus that select groups of packages" \
+"expert" "Use expert menus with a switch for each package" 2> $TMP/SeTreturn
+if [ ! $? = 0 ]; then
+ rm -f $TMP/SeTreturn
+ exit
+fi
+MENU="`cat $TMP/SeTreturn`"
+rm -f $TMP/SeTreturn
+if [ "$MENU" = "normal" ]; then
+ MAKETAG="maketag.ez"
+else
+ MAKETAG="maketag"
+fi
+while [ 0 ]; do
+ dialog --title "CUSTOMIZE A DISK SERIES" --menu "You may now \
+create a custom tagfile on the first disk of a disk series (make \
+sure it's not write protected!), or in the directory for such a \
+disk if you are installing from your hard drive. Select one of the \
+choices below." 13 65 3 \
+"/dev/fd0" "Create a custom tagfile on floppy drive 1" \
+"/dev/fd1" "Create a custom tagfile on floppy drive 2" \
+"Directory" "Create a tagfile in a disk's directory" 2> $TMP/SeTreturn
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/SeTreturn
+ break
+ fi
+ CHOICE="`cat $TMP/SeTreturn`"
+ rm -f $TMP/SeTreturn
+ if [ "$CHOICE" = "/dev/fd0" -o "$CHOICE" = "/dev/fd1" ]; then
+ dialog --title "INSERT DISK IN DRIVE $CHOICE" --msgbox "Please insert the first disk of \
+a disk series you would like to make a custom tagfile for and press \
+ENTER. Be sure this disk is not write protected." 7 60
+ if [ ! $? = 0 ]; then
+ continue
+ fi
+ mount $CHOICE $MOUNT -t msdos
+ if [ ! $? = 0 ]; then
+ dialog --title "MOUNT FAILURE" --msgbox "Sorry, the disk could not be \
+mounted in drive $CHOICE as type msdos." 6 60
+ umount $MOUNT 2> /dev/null
+ continue
+ fi
+ if [ -r $MOUNT/$MAKETAG -o $MOUNT/maketag ]; then
+ if [ -r $MOUNT/$MAKETAG ]; then
+ sh $MOUNT/$MAKETAG
+ else
+ sh $MOUNT/maketag
+ fi
+ else # no tagfile create script!
+ dialog --title "NO TAGFILE SCRIPT" --msgbox "Sorry, but a custom tagfile \
+cannot be created for this disk because it does not have a 'maketag' script. \
+The maketag script was introduced in Slackware 1.1.2, and provides the menu \
+of packages to select from. Currently there is no way to just look at the \
+disks and 'wing it', but maybe there will be eventually. You'll have to edit \
+the tagfile on this disk manually." 11 65
+ umount $MOUNT
+ continue
+ fi
+ if [ ! -r $TMP/SeTnewtag ]; then
+ umount $MOUNT
+ continue
+ fi
+ cp $TMP/SeTnewtag $MOUNT/tagfile$TAGEXT
+ if [ $? = 0 ]; then
+ dialog --title "TAGFILE CREATED" --msgbox "Your custom \
+tagfile has been successfully created with the extension: \
+$TAGEXT" 8 40
+ else
+ dialog --title "COPY ERROR" --msgbox "Your custom tagfile could \
+not be copied to the disk. Please check to see if the disk is write \
+protected, or full, and then try again." 9 40
+ fi
+ umount $MOUNT
+ fi
+ if [ "$CHOICE" = "Directory" ]; then
+ dialog --title "CHOOSE DIRECTORY" --inputbox "Now you must enter the \
+directory for the first disk of the series for which you would like to \
+make a custom tagfile. This directory must be mounted somewhere under \
+the current filesystem." 11 65 2> $TMP/SeTreturn
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/SeTreturn
+ continue
+ fi
+ DIR="`cat $TMP/SeTreturn`"
+ rm -f $TMP/SeTreturn
+ if [ ! -r $DIR/maketag -a ! -r $DIR/$MAKETAG ]; then
+ dialog --title "NO TAGFILE SCRIPT" --msgbox "Sorry, but a custom tagfile \
+cannot be created for this disk series because the directory you gave does \
+not have a 'maketag' script. \
+The maketag script was introduced in Slackware 1.1.2, and provides the menu \
+of packages to select from. Currently there is no way to just look at the \
+packages and 'wing it', but maybe there will be eventually. You'll have to \
+edit the tagfile in this directory manually." 11 65
+ continue
+ fi
+ if [ -r $DIR/$MAKETAG ]; then
+ sh $DIR/$MAKETAG
+ else
+ sh $DIR/maketag
+ fi
+ if [ ! -r $TMP/SeTnewtag ]; then
+ continue
+ fi
+ cp $TMP/SeTnewtag $DIR/tagfile$TAGEXT
+ if [ $? = 0 ]; then
+ dialog --title "TAGFILE CREATED" --msgbox "Your custom \
+tagfile has been successfully created with the extension: \
+$TAGEXT" 8 40
+ else
+ dialog --msgbox "I don't know what just happened, but something \
+screwed up." 6 40
+ fi
+ fi
+done
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTmedia b/source/installer/sources/initrd/usr/lib/setup/SeTmedia
new file mode 100755
index 000000000..65e05f4db
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTmedia
@@ -0,0 +1,47 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+
+dialog --backtitle "Select Slackware installation source." \
+--title "SOURCE MEDIA SELECTION" --menu \
+"Please select the media from which to install Slackware Linux:" \
+14 70 7 \
+"1" "Install from a Slackware CD or DVD" \
+"2" "Install from a Slackware USB stick" \
+"3" "Install from a hard drive partition" \
+"4" "Install from NFS (Network File System)" \
+"5" "Install from FTP/HTTP server" \
+"6" "Install from Samba share" \
+"7" "Install from a pre-mounted directory" \
+2> $TMP/media
+if [ ! $? = 0 ]; then
+ rm $TMP/media
+ exit
+fi
+
+SOURCE_MEDIA="`cat $TMP/media`"
+rm -f $TMP/media
+if [ "$SOURCE_MEDIA" = "1" ]; then
+ INSCD
+elif [ "$SOURCE_MEDIA" = "2" ]; then
+ INSUSB
+elif [ "$SOURCE_MEDIA" = "3" ]; then
+ INShd
+elif [ "$SOURCE_MEDIA" = "4" ]; then
+ SeTnet
+ INSNFS
+elif [ "$SOURCE_MEDIA" = "5" ]; then
+ SeTnet
+ INSURL
+elif [ "$SOURCE_MEDIA" = "6" ]; then
+ SeTnet
+ INSSMB
+elif [ "$SOURCE_MEDIA" = "7" ]; then
+ INSdir
+fi
+
+# Sorry, this goes the way of the dinosaur...
+#"5" "Install from floppy disks (A and N series only)"
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTnet b/source/installer/sources/initrd/usr/lib/setup/SeTnet
new file mode 100755
index 000000000..0caefa64e
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTnet
@@ -0,0 +1,360 @@
+#!/bin/sh
+# This script will be called with the single argument of "boot" during the
+# system startup, to allow for unattended network configuration.
+# For this to work, all required information must be passed on the commandline.
+# Two parameters, 'kbd=' and 'nic=' must be used to supply this information.
+# kbd=<keyboard_layout>
+# nic=<driver>:<interface>:<dhcp|static>[:ipaddr:netmask[:gateway]]
+
+TMP=/var/log/setup/tmp
+T_PX="$(cat $TMP/SeTT_PX 2> /dev/null)"
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+
+# Terminate the script now if we have an interface with an IP address:
+# Running the script is not needed anymore in that case.
+if `ip -f inet -o addr show | grep -v " lo " 1>/dev/null 2>/dev/null` ; then
+ exit 0
+fi
+
+# Function to convert the netmask from CIDR format to dot notation.
+cidr_cvt() {
+ inform=$1
+ if [ $inform -ge 32 ]; then outform='255.255.255.255'
+ elif [ $inform -ge 31 ]; then outform='255.255.255.254'
+ elif [ $inform -ge 30 ]; then outform='255.255.255.252'
+ elif [ $inform -ge 29 ]; then outform='255.255.255.248'
+ elif [ $inform -ge 28 ]; then outform='255.255.255.240'
+ elif [ $inform -ge 27 ]; then outform='255.255.255.224'
+ elif [ $inform -ge 26 ]; then outform='255.255.255.192'
+ elif [ $inform -ge 25 ]; then outform='255.255.255.128'
+ elif [ $inform -ge 24 ]; then outform='255.255.255.0'
+ elif [ $inform -ge 23 ]; then outform='255.255.254.0'
+ elif [ $inform -ge 22 ]; then outform='255.255.252.0'
+ elif [ $inform -ge 21 ]; then outform='255.255.248.0'
+ elif [ $inform -ge 20 ]; then outform='255.255.240.0'
+ elif [ $inform -ge 19 ]; then outform='255.255.224.0'
+ elif [ $inform -ge 18 ]; then outform='255.255.192.0'
+ elif [ $inform -ge 17 ]; then outform='255.255.128.0'
+ elif [ $inform -ge 16 ]; then outform='255.255.0.0'
+ elif [ $inform -ge 15 ]; then outform='255.254.0.0'
+ elif [ $inform -ge 14 ]; then outform='255.252.0.0'
+ elif [ $inform -ge 13 ]; then outform='255.248.0.0'
+ elif [ $inform -ge 12 ]; then outform='255.240.0.0'
+ elif [ $inform -ge 11 ]; then outform='255.224.0.0'
+ elif [ $inform -ge 10 ]; then outform='255.192.0.0'
+ elif [ $inform -ge 9 ]; then outform='255.128.0.0'
+ elif [ $inform -ge 8 ]; then outform='255.0.0.0'
+ elif [ $inform -ge 7 ]; then outform='254.0.0.0'
+ elif [ $inform -ge 6 ]; then outform='252.0.0.0'
+ elif [ $inform -ge 5 ]; then outform='248.0.0.0'
+ elif [ $inform -ge 4 ]; then outform='240.0.0.0'
+ elif [ $inform -ge 3 ]; then outform='224.0.0.0'
+ elif [ $inform -ge 2 ]; then outform='192.0.0.0'
+ elif [ $inform -ge 1 ]; then outform='128.0.0.0'
+ elif [ $inform -ge 0 ]; then outform='0.0.0.0'
+ fi
+ echo $outform
+}
+
+# First, sane defaults:
+INTERFACE=""
+ENET_MODE="ask"
+# Does the commandline have NIC information for us?
+# Format is 'nic=driver:interface:<dhcp|static>:ip:mask:gw'
+for CMDELEM in $(cat /proc/cmdline) ; do
+ if $(echo $CMDELEM | grep -q "^nic=") ; then
+ DRIVER=$(echo $CMDELEM | cut -f2 -d=)
+ INTERFACE=$(echo $DRIVER | cut -f2 -d:)
+ ENET_MODE=$(echo $DRIVER | cut -f3 -d:)
+ if [ "$ENET_MODE" = "static" ]; then
+ IPADDR=$(echo $DRIVER | cut -f4 -d:)
+ NETMASK=$(echo $DRIVER | cut -f5 -d:)
+ # We allow for CIDR notation of the netmask (0 < NETMASK < 25):
+ if [ "$(echo $NETMASK | tr -cd '\.')" != "..." ]; then
+ NETMASK=$(cidr_cvt $NETMASK)
+ fi
+ GATEWAY=$(echo $DRIVER | cut -f6 -d:)
+ fi
+ DRIVER=$(echo $DRIVER | cut -f1 -d:)
+ break
+ fi
+done
+
+# If the script has an argument of 'boot' then we require all information for
+# unattended network setup or else we silently exit.
+if [ "$1" = "boot" ]; then
+ if [ "x$DRIVER" = "x" -o "x$INTERFACE" = "x" -o "$ENET_MODE" = "ask" ]; then
+ exit 2
+ elif [ "$ENET_MODE" = "static" ] && [ "x$IPADDR" = "x" -o "x$NETMASK" = "x" ]; then
+ exit 2
+ fi
+fi
+
+# If the cmdline provided the name of a driver, load it;
+# Alternatively check if the user ran "network" before running "setup";
+# We need an interface:
+if [ `cat /proc/net/dev | grep ':' | sed -e "s/^ *//" | cut -f1 -d: | grep -v lo | wc -l` = 0 ]; then
+ if [ "x${DRIVER}" != "x" ]; then
+ # This takes silent care of 'DRIVER=auto' as well...
+ modprobe ${DRIVER} 1>/dev/null 2>/dev/null
+ else
+ while [ 0 ]; do
+ cat << EOF > $TMP/tempmsg
+
+You will now get a chance to probe your network interfaces.
+
+EOF
+ dialog --title "PROBING NETWORK DEVICES" --msgbox "`cat $TMP/tempmsg`" 7 68
+ clear
+ rm -f $TMP/tempmsg
+ /bin/network --installer
+ read -p "Press any key..." JUNK
+ sleep 5 # Give dhcpcd a change to probe
+ unset JUNK
+ cat << EOF > $TMP/tempmsg
+
+Are you OK with the network interface which was detected?
+If not, select 'No' to get back to the network probe program.
+You can try to load another driver explicitly,
+by using "P <driver_name>".
+
+If you are satisfied, select 'Yes' to continue with network configuration.
+EOF
+ dialog --title "PROBING NETWORK DEVICES" --yesno "`cat $TMP/tempmsg`" 12 68
+ if [ $? = 0 ]; then
+ rm -f $TMP/tempmsg
+ break
+ fi
+ clear
+ done
+ fi
+fi
+
+# If we obtained information from a DHCP server, use it:
+if [ "x$INTERFACE" = "x" -o "$INTERFACE" = "auto" ]; then
+ # the cmdline did not provide a nic or it's "auto" to let dhcpcd find out:
+ if [ "$INTERFACE" = "auto" ]; then
+ # hope that 3 seconds is enough for dhcpcd;
+ # if not then you had better specify the INTERFACE in the nic= parameter...
+ dialog --title "INITIALIZING NETWORK" --infobox \
+ "\nWaiting a few seconds for DHCP polling to settle ..." 5 56
+ sleep 3
+ fi
+ clear
+ for I_I in \
+ $(cat /proc/net/dev | grep ':' | sed -e "s/^ *//" | cut -f1 -d: | grep -v lo) ;
+ do
+ if [ -s /etc/dhcpc/dhcpcd-${I_I}.info ]; then
+ INTERFACE="${I_I}"
+ break
+ fi
+ done
+ unset I_I
+ if [ "$INTERFACE" = "auto" ]; then # failed to find a configured interface
+ INTERFACE=""
+ fi
+fi
+
+while [ 0 ]; do
+ T_PX="$(cat $TMP/SeTT_PX 2> /dev/null)"
+ UPNRUN=1
+ if [ "$T_PX" = "/" ]; then
+ cat << EOF > $TMP/tempmsg
+
+You're running off the hard drive filesystem. Is this machine
+currently running on the network you plan to install from? If
+so, we won't try to reconfigure your ethernet card.
+
+Are you up-and-running on the network?
+EOF
+ dialog --title "NETWORK CONFIGURATION" --yesno "`cat $TMP/tempmsg`" 12 68
+ UPNRUN=$?
+ clear
+ fi
+ if [ $UPNRUN = 1 ]; then
+ ENET_DEVICE=${INTERFACE:-"eth0"}
+ if [ "x$INTERFACE" != "x" ]; then # interface specified via cmdline or dhcpcd
+ if [ "$ENET_MODE" = "ask" ]; then
+ # Offer to install using DHCP:
+ cat << EOF > $TMP/tempmsg
+
+I can configure your network interface $ENET_DEVICE
+fully automatically using DHCP.
+If you want this, please select 'yes'.
+
+If you select 'no' instead, then you will be able to assign
+the IP address, netmask and gateway manually.
+
+EOF
+ dialog --title "DHCP CONFIGURATION" --yesno "`cat $TMP/tempmsg`" 12 65
+ if [ $? -eq 0 ]; then
+ rm -f $TMP/tempmsg
+ echo $ENET_DEVICE > $TMP/SeTdhcp
+ else
+ rm -f $TMP/SeTdhcp
+ fi
+ elif [ "$ENET_MODE" = "dhcp" ]; then # Don't ask, just use DHCP
+ echo $ENET_DEVICE > $TMP/SeTdhcp
+ fi
+ fi # End non-empty INTERFACE
+ clear
+
+ if [ ! -r $TMP/SeTdhcp ]; then
+ # No DHCP configured, so use static IP.
+ # If we have all the values ready, don't ask any.
+ # Only if the script runs with the "boot" parameter will we silently accept
+ # an empty gateway address (if we came this far, we will have IP/netmask):
+ if [ "$1" = "boot" -a "x$GATEWAY" = "x" ]; then
+ HAVE_GATEWAY=1
+ GATEWAY="unspec"
+ else
+ HAVE_GATEWAY=0
+ fi
+ if [ "x$IPADDR" = "x" -o "x$NETMASK" = "x" -o "x$GATEWAY" = "x" ]; then
+ cat << EOF > $TMP/tempmsg
+
+You will need to enter the IP address you wish to
+assign to this machine. Example: 111.112.113.114
+
+What is your IP address?
+EOF
+ if [ "$LOCAL_IPADDR" = "" ]; then # assign default
+ LOCAL_IPADDR=${IPADDR}
+ fi
+ dialog --title "ASSIGN IP ADDRESS" --inputbox "`cat $TMP/tempmsg`" 12 \
+ 65 $LOCAL_IPADDR 2> $TMP/local
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/local
+ exit
+ fi
+ LOCAL_IPADDR="`cat $TMP/local`"
+ rm -f $TMP/local
+ clear
+ cat << EOF > $TMP/tempmsg
+
+Now we need to know your netmask.
+Typically this will be 255.255.255.0
+but this can be different depending on
+your local setup.
+
+What is your netmask?
+EOF
+ if [ "$LOCAL_NETMASK" = "" ]; then # assign default
+ LOCAL_NETMASK=${NETMASK:-255.255.255.0}
+ fi
+ dialog --title "ASSIGN NETMASK" --inputbox "`cat $TMP/tempmsg`" 14 \
+ 65 $LOCAL_NETMASK 2> $TMP/mask
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/mask
+ exit
+ fi
+ clear
+ LOCAL_NETMASK="`cat $TMP/mask`"
+ rm $TMP/mask
+ dialog --yesno "Do you have a gateway?" 5 30
+ HAVE_GATEWAY=$?
+ clear
+ if [ "$HAVE_GATEWAY" = "0" ]; then
+ if [ "$LOCAL_GATEWAY" = "" ]; then
+ if [ "$GATEWAY" = "" ]; then
+ LOCAL_GATEWAY="`echo $LOCAL_IPADDR | cut -f1-3 -d '.'`."
+ else
+ LOCAL_GATEWAY=${GATEWAY}
+ fi
+ fi
+ dialog --title "ASSIGN GATEWAY ADDRESS" --inputbox \
+ "\nWhat is the IP address for your gateway?" 9 65 \
+ $LOCAL_GATEWAY 2> $TMP/gw
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tempmsg $TMP/gw
+ exit
+ fi
+ LOCAL_GATEWAY="`cat $TMP/gw`"
+ rm -f $TMP/gw
+ fi
+ clear
+ else
+ # Non-interactive run, so we use the values set on the commandline:
+ LOCAL_IPADDR=${IPADDR}
+ LOCAL_NETMASK=${NETMASK}
+ LOCAL_GATEWAY=${GATEWAY}
+ fi # end questions asked
+ fi # end static ip
+
+ if [ "$ENET_MODE" = "ask" -a ! -r $TMP/SeTdhcp ]; then
+ cat << EOF > $TMP/tempmsg
+
+This is the proposed network configuration for $ENET_DEVICE -
+If this is OK, then select 'Yes'.
+If this is not OK and you want to configure again, select 'No'.
+
+* IP Address: $LOCAL_IPADDR
+* Netmask: $LOCAL_NETMASK
+EOF
+ if [ "$HAVE_GATEWAY" = 0 ]; then
+ echo "* Gateway: $LOCAL_GATEWAY" >> $TMP/tempmsg
+ fi
+ echo "" >> $TMP/tempmsg
+ dialog --no-collapse --title "NETWORK CONFIGURATION" --yesno "`cat $TMP/tempmsg`" 14 68
+ if [ $? -eq 1 ]; then
+ continue # New round of questions
+ fi
+ fi # end ask approval for ip config
+
+ #echo "Configuring ethernet card..."
+ dialog --title "INITIALIZING NETWORK" --infobox \
+ "\nConfiguring your network interface $ENET_DEVICE ..." 5 56
+ if [ -r $TMP/SeTdhcp ]; then
+ dhcpcd -k $ENET_DEVICE 1>/dev/null 2>&1 # Or else the '-T' will be used next:
+ sleep 3
+ dhcpcd -L $ENET_DEVICE
+ else
+ dhcpcd -k $ENET_DEVICE 1>/dev/null 2>&1 # We don't need it now
+ # Broadcast and network are derived from IP and netmask:
+ LOCAL_BROADCAST=`ipmask $LOCAL_NETMASK $LOCAL_IPADDR | cut -f 1 -d ' '`
+ LOCAL_NETWORK=`ipmask $LOCAL_NETMASK $LOCAL_IPADDR | cut -f 2 -d ' '`
+ ifconfig $ENET_DEVICE $LOCAL_IPADDR netmask $LOCAL_NETMASK broadcast $LOCAL_BROADCAST
+ if [ "$HAVE_GATEWAY" = "0" ]; then
+ #echo "Configuring your gateway..."
+ route add default gw $LOCAL_GATEWAY metric 1
+ fi
+ echo $LOCAL_IPADDR > $TMP/SeTIP
+ echo $LOCAL_NETMASK > $TMP/SeTnetmask
+ echo $LOCAL_GATEWAY > $TMP/SeTgateway
+ fi
+ fi # ! UPNRUN
+ clear
+ break
+
+done
+echo $UPNRUN > $TMP/SeTupnrun
+
+# Basic initialisation completed. Let's see what the commandline has for us:
+# If we know of a remote configuration file, get it now:
+# Provide comma-separated values (protocol,remoteserver[:portnumber],configfile)
+# like this example: 'cf=tftp,192.168.0.22,/slackware-12.1/configs/t43.cfg'
+for CMDELEM in $(cat /proc/cmdline) ; do
+ if $(echo $CMDELEM | grep -q "^cf=") ; then
+ CONFIGFILE=$(echo $CMDELEM | cut -f2 -d=)
+ PROTO=$(echo $CONFIGFILE | cut -f1 -d,)
+ DLSERVER=$(echo $CONFIGFILE | cut -f2 -d,)
+ CONFIGFILE=$(echo $CONFIGFILE | cut -f3 -d,)
+ dialog --title "FETCHING CONFIGURATION" --infobox \
+ "\nAttempting to fetch a remote configuration file using $PROTO ..." 54 56
+ fi
+done
+
+if [ -n "$CONFIGFILE" ]; then
+ if [ "$PROTO" = "tftp" ]; then
+ tftp -g -r $CONFIGFILE -l $TMP/Punattended $DLSERVER 1>/dev/null 2>&1
+ elif [ "$PROTO" = "ftp" -o "$PROTO" = "http" ]; then
+ wget -q -P $TMP -O Punattended ${PROTO}://${DLSERVER}${CONFIGFILE}
+ fi
+fi
+
+# Clear the screen, since it looks pretty messy due to some fun with the termcap
+# over a serial console.
+clear
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTnopart b/source/installer/sources/initrd/usr/lib/setup/SeTnopart
new file mode 100755
index 000000000..1ac2cb0f7
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTnopart
@@ -0,0 +1 @@
+dialog --title "ERROR: No Linux Native Partitions" --exit-label OK --textbox "/usr/lib/setup/nopartHELP" 22 74
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTpartitions b/source/installer/sources/initrd/usr/lib/setup/SeTpartitions
new file mode 100755
index 000000000..34819701f
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTpartitions
@@ -0,0 +1,524 @@
+#!/bin/sh
+# SeTpartition user-friendly rewrite Fri Dec 15 13:17:40 CST 1995 pjv
+# Rewrite to support filesystem plugins <david@slackware.com>, 07-May-2001
+# Don't use plugins, make it work, pjv, 18-May-2001.
+# Generalize tempscript creation and support JFS and XFS. pjv, 30-Mar-2002
+
+TMP=/var/log/setup/tmp
+NDIR=/dev/null
+REDIR=/dev/tty4
+T_PX="`cat $TMP/SeTT_PX`"
+
+# FUNCTIONS
+
+# crunch() - remove extra whitespace
+crunch () {
+ read STRING;
+ echo $STRING
+}
+
+# make_btrfs( dev ) - Create a new btrfs filesystem on the named dev.
+# Parameters: dev Device node to format.
+make_btrfs() {
+ # get the size of the named partition
+ SIZE=`get_part_size $1`
+ # output a nice status message
+ dialog --title "FORMATTING" \
+ --backtitle "Formatting $1 with filesystem btrfs." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: btrfs " 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ mkfs.btrfs -f -d single -m single $1 1> $REDIR 2> $REDIR
+}
+
+# make_ext2( dev, check ) - Create a new ext2 filesystem on the named
+# device.
+# Parameters: dev Device node to format.
+# check Perform fs check (y or n)
+make_ext2() {
+ # get the size of the named partition
+ SIZE=`get_part_size $1`
+ # output a nice status message
+ dialog --title "FORMATTING" \
+ --backtitle "Formatting $1 with filesystem ext2." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: ext2" 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ if [ "$2" = "y" ]; then
+ mkfs.ext2 -F -F -c $1 1> $REDIR 2> $REDIR
+ else
+ mkfs.ext2 -F -F $1 1> $REDIR 2> $REDIR
+ fi
+}
+
+# make_ext3( dev, check ) - Create a new ext3 filesystem on the named
+# device.
+# Parameters: dev Device node to format.
+# check Perform fs check (y or n)
+make_ext3() {
+ # get the size of the named partition
+ SIZE=`get_part_size $1`
+ # output a nice status message
+ dialog --title "FORMATTING" \
+ --backtitle "Formatting $1 with filesystem ext3." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: ext3" 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ if [ "$2" = "y" ]; then
+ mkfs.ext3 -F -F -c $1 1> $REDIR 2> $REDIR
+ else
+ mkfs.ext3 -F -F $1 1> $REDIR 2> $REDIR
+ fi
+}
+
+# make_ext4( dev, check ) - Create a new ext4 filesystem on the named
+# device.
+# Parameters: dev Device node to format.
+# check Perform fs check (y or n)
+make_ext4() {
+ # get the size of the named partition
+ SIZE=`get_part_size $1`
+ # output a nice status message
+ dialog --title "FORMATTING" \
+ --backtitle "Formatting $1 with filesystem ext4." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: ext4" 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ if [ "$2" = "y" ]; then
+ mkfs.ext4 -F -F -c $1 1> $REDIR 2> $REDIR
+ else
+ mkfs.ext4 -F -F $1 1> $REDIR 2> $REDIR
+ fi
+}
+
+# make_jfs( dev, check ) - Create a new jfs filesystem on the named
+# device.
+# Parameters: dev Device node to format.
+# check Perform fs check (y or n)
+make_jfs() {
+ # get the size of the named partition
+ SIZE=`get_part_size $1`
+ # output a nice status message
+ dialog --title "FORMATTING" \
+ --backtitle "Formatting $1 with filesystem jfs." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: jfs" 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ if [ "$2" = "y" ]; then
+ mkfs.jfs -c -q $1 1> $REDIR 2> $REDIR
+ else
+ mkfs.jfs -q $1 1> $REDIR 2> $REDIR
+ fi
+}
+
+# make_reiserfs( dev ) - Create a new reiserfs filesystem on the named dev.
+# Parameters: dev Device node to format.
+make_reiserfs() {
+ # get the size of the named partition
+ SIZE=`get_part_size $1`
+ # output a nice status message
+ dialog --title "FORMATTING" \
+ --backtitle "Formatting $1 with filesystem reiserfs." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: reiserfs " 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ echo "y" | mkreiserfs $1 1> $REDIR 2> $REDIR
+}
+
+# make_xfs( dev ) - Create a new xfs filesystem on the named dev
+# Parameters: dev Device node to format.
+make_xfs() {
+ # get the size of the named partition
+ SIZE=`get_part_size $1`
+ # output a nice status message
+ dialog --title "FORMATTING" \
+ --backtitle "Formatting $1 with filesystem xfs." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: xfs " 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ mkfs.xfs -f $1 1> $REDIR 2> $REDIR
+}
+
+# gen_part_list() - Prints out a partition listing for the system into the
+gen_part_list() {
+ export COUNT=0
+ cat $TMP/SeTplist | while [ 0 ]; do
+ read PARTITION;
+ if [ "$PARTITION" = "" ]; then
+ break;
+ fi
+ # Variables, variables, variables
+ NAME=`echo $PARTITION | crunch | cut -f 1 -d ' '`
+ ALTNAME=""
+ DEVICE=`echo "$PARTITION" | tr -d "*" | crunch | cut -f 1 -d ' '`
+ SIZE=`get_part_size $DEVICE`
+ # See if this partition is in use already
+ if grep "$DEVICE " $TMP/SeTnative 1> $NDIR; then # it's been used
+ ON=`grep "$DEVICE " $TMP/SeTnative | crunch | cut -f 2 -d ' '`
+ ALTNAME="$DEVICE on $ON Linux ${SIZE}"
+ fi
+ # Add a menu item
+ if [ "$ALTNAME" = "" ]; then
+ echo "\"$NAME\" \"Linux ${SIZE}\" \\" >> $TMP/tempscript
+ echo "false" > $TMP/SeTSKIP # this flag is used for non-root parts
+ else
+ echo "\"(IN USE)\" \"$ALTNAME\" \\" >> $TMP/tempscript
+ fi
+ done
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "2> $TMP/return" >> $TMP/tempscript
+}
+
+# ask_format( dev ) - Asks the user if he/she wants to format the named device
+ask_format() {
+ dialog --backtitle "Do you want to format Linux partition ${1}?" \
+ --title "FORMAT PARTITION $1" --menu "If this partition has \
+not been formatted, you should format it. NOTE: This will erase all data on \
+it. Would you like \
+to format this partition?" 12 70 3 \
+ "Format" "Quick format with no bad block checking" \
+ "Check" "Slow format that checks for bad blocks" \
+ "No" "No, do not format this partition" 2> $TMP/return
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/return
+ exit
+ fi
+}
+
+# ask_fs( dev ) - Asks the user the type of filesystem to use for the named
+# device. Answer in $TMP/return
+ask_fs() {
+ unset BTRFS EXT2 EXT3 JFS REISERFS XFS
+ if grep -wq ext2 /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ EXT2="Ext2 is the traditional Linux file system and is fast and stable. "
+ fi
+ if grep -wq ext3 /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ EXT3="Ext3 is the journaling version of the Ext2 filesystem. "
+ DEFAULT=ext3
+ fi
+ if grep -wq ext4 /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ EXT4="Ext4 is the successor to the ext3 filesystem. "
+ DEFAULT=ext4
+ fi
+ if grep -wq reiserfs /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ REISERFS="ReiserFS is a journaling filesystem that stores all files and filenames in a balanced tree structure. "
+ fi
+ if grep -wq btrfs /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ BTRFS="Btrfs is a B-tree copy-on-write filesystem. "
+ fi
+ # These last two will only be present if the user asked for a special kernel.
+ # They should probably be the default in that case.
+ if grep -wq jfs /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ JFS="JFS is IBM's Journaled Filesystem, currently used in IBM enterprise servers. "
+ fi
+ if grep -wq xfs /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ XFS="XFS is SGI's journaling filesystem that originated on IRIX. "
+ fi
+ cat << EOF > $TMP/tempscript
+dialog --title "SELECT FILESYSTEM FOR $1" \\
+--backtitle "Partition $1 will be formatted." \\
+--default-item $DEFAULT --menu \\
+"Please select the type of filesystem to use for the specified \\
+device. Here are descriptions of the available filesystems: $EXT2 $EXT3 $EXT4 $JFS $REISERFS $XFS" \\
+0 0 0 \\
+EOF
+ if [ ! "$EXT2" = "" ]; then
+ echo "\"ext2\" \"Standard Linux Ext2 Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$EXT3" = "" ]; then
+ echo "\"ext3\" \"Ext3 Journaling Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$EXT4" = "" ]; then
+ echo "\"ext4\" \"Ext4 Journaling Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$JFS" = "" ]; then
+ echo "\"jfs\" \"IBM's Journaled Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$REISERFS" = "" ]; then
+ echo "\"reiserfs\" \"ReiserFS Journaling Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$BTRFS" = "" ]; then
+ echo "\"btrfs\" \"Btrfs Copy-on-Write B-tree Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$XFS" = "" ]; then
+ echo "\"xfs\" \"SGI's Journaling Filesystem\" \\" >> $TMP/tempscript
+ fi
+ echo "2> $TMP/return" >> $TMP/tempscript
+ . $TMP/tempscript
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/return
+ exit
+ fi
+}
+
+# get_part_size( dev ) - Return the size in K, M, G, T, or P of the named partition.
+get_part_size() {
+ numfmt --to=iec $(blockdev --getsize64 $1)
+}
+
+# MAIN
+
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+
+if [ ! -r $TMP/SeTplist ]; then
+ # Give warning?
+ exit
+fi
+
+cat /dev/null >> $TMP/SeTnative
+
+cat << EOF > $TMP/tempscript
+dialog --backtitle "Setting up root Linux partition." \\
+--title "Select Linux installation partition:" --ok-label Select --cancel-label Continue --menu \\
+"Please select a partition from the following list to use for your \\
+root (/) Linux partition." 13 70 5 \\
+EOF
+gen_part_list
+
+. $TMP/tempscript
+if [ ! $? = 0 ]; then
+ rm $TMP/tempscript
+ exit 255 # user abort
+fi
+
+ROOT_DEVICE="`cat $TMP/return`"
+rm $TMP/tempscript
+if [ "$ROOT_DEVICE" = "---" ]; then
+ exit 255
+fi
+
+# format root partition?
+ask_format $ROOT_DEVICE
+DOFORMAT="`cat $TMP/return`"
+rm -f $TMP/return
+if [ ! "$DOFORMAT" = "No" ]; then
+ ask_fs $ROOT_DEVICE
+ ROOT_SYS_TYPE="`cat $TMP/return`"
+ rm -f $TMP/return
+ # create the filesystem
+ if [ "$ROOT_SYS_TYPE" = "ext2" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext2 $ROOT_DEVICE "y"
+ else
+ make_ext2 $ROOT_DEVICE "n"
+ fi
+ elif [ "$ROOT_SYS_TYPE" = "ext3" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext3 $ROOT_DEVICE "y"
+ else
+ make_ext3 $ROOT_DEVICE "n"
+ fi
+ elif [ "$ROOT_SYS_TYPE" = "ext4" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext4 $ROOT_DEVICE "y"
+ else
+ make_ext4 $ROOT_DEVICE "n"
+ fi
+ elif [ "$ROOT_SYS_TYPE" = "reiserfs" ]; then
+ make_reiserfs $ROOT_DEVICE
+ elif [ "$ROOT_SYS_TYPE" = "btrfs" ]; then
+ make_btrfs $ROOT_DEVICE
+ elif [ "$ROOT_SYS_TYPE" = "jfs" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_jfs $ROOT_DEVICE "y"
+ else
+ make_jfs $ROOT_DEVICE "n"
+ fi
+ elif [ "$ROOT_SYS_TYPE" = "xfs" ]; then
+ make_xfs $ROOT_DEVICE
+ fi
+fi # DOFORMAT?
+
+# Sync before identifying and mounting the root device:
+sync
+
+# Determine the filesystem type using blkid:
+ROOT_SYS_TYPE=$(blkid -s TYPE $ROOT_DEVICE | cut -f 2 -d = | tr -d \")
+
+# Mount the root filesystem:
+mount $ROOT_DEVICE $T_PX -t $ROOT_SYS_TYPE 1> $REDIR 2> $REDIR
+
+#echo "$ROOT_DEVICE / $ROOT_SYS_TYPE defaults 1 1" > $TMP/SeTnative
+printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$ROOT_DEVICE" "/" "$ROOT_SYS_TYPE" "defaults" "1" "1" > $TMP/SeTnative
+echo $ROOT_DEVICE > $TMP/SeTrootdev
+
+# done mounting the target root partition
+
+# More than one Linux partition
+if [ ! "`cat $TMP/SeTplist | sed -n '2 p'`" = "" ]; then
+ while [ 0 ]; do # next partition loop
+ # OK, we will set this flag, and if we find an unused partition, we
+ # change it. If it doesn't get switched, we skip the next menu.
+ rm -f $TMP/SeTSKIP
+ echo "true" > $TMP/SeTSKIP
+
+ cat << EOF > $TMP/tempscript
+ dialog --backtitle "Setting up other Linux partitions." \\
+--title "Select other Linux partitions for /etc/fstab" \\
+--ok-label Select --cancel-label Continue \\
+--menu "You seem to have more than one partition tagged as type Linux. \\
+You may use these to distribute your Linux system across more than \\
+one partition. Currently, you have $ROOT_DEVICE mounted as your / partition. \\
+You might want to mount directories such as /home or /usr/local \\
+on separate partitions. You should not try to mount /etc, /sbin, or /bin on \\
+their own partitions since they contain utilities needed to bring the system \\
+up and mount partitions. Also, do not reuse a partition that you've already \\
+entered before. Please select one of the Linux partitions listed below, or \\
+if you're done, hit <Continue>." 20 70 4 \\
+EOF
+ gen_part_list
+
+ if [ "`cat $TMP/SeTSKIP`" = "true" ]; then
+ break;
+ fi
+ rm -rf $TMP/return
+
+ . $TMP/tempscript
+ if [ ! $? = 0 ]; then
+ break;
+ fi
+
+ NEXT_PARTITION=`cat $TMP/return`
+ if [ "$NEXT_PARTITION" = "---" ]; then
+ break;
+ elif [ "$NEXT_PARTITION" = "(IN USE)" ]; then
+ continue;
+ fi
+
+ # We now have the next partition, ask the user what to do with it:
+ ask_format $NEXT_PARTITION
+
+ DOFORMAT="`cat $TMP/return`"
+ rm -f $TMP/return
+
+ BACKT="Partition $NEXT_PARTITION will not be reformatted."
+ if [ ! "$DOFORMAT" = "No" ]; then
+ ask_fs $NEXT_PARTITION
+ NEXT_SYS_TYPE="`cat $TMP/return`"
+ rm -f $TMP/return
+ BACKT="Partition $NEXT_PARTITION will be formatted with $NEXT_SYS_TYPE."
+ # create the filesystem
+ if [ "$NEXT_SYS_TYPE" = "ext2" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext2 $NEXT_PARTITION "y"
+ else
+ make_ext2 $NEXT_PARTITION "n"
+ fi
+ elif [ "$NEXT_SYS_TYPE" = "ext3" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext3 $NEXT_PARTITION "y"
+ else
+ make_ext3 $NEXT_PARTITION "n"
+ fi
+ elif [ "$NEXT_SYS_TYPE" = "ext4" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext4 $NEXT_PARTITION "y"
+ else
+ make_ext4 $NEXT_PARTITION "n"
+ fi
+ elif [ "$NEXT_SYS_TYPE" = "reiserfs" ]; then
+ make_reiserfs $NEXT_PARTITION
+ elif [ "$NEXT_SYS_TYPE" = "btrfs" ]; then
+ make_btrfs $NEXT_PARTITION
+ elif [ "$NEXT_SYS_TYPE" = "jfs" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_jfs $NEXT_PARTITION "y"
+ else
+ make_jfs $NEXT_PARTITION "n"
+ fi
+ elif [ "$NEXT_SYS_TYPE" = "xfs" ]; then
+ make_xfs $NEXT_PARTITION
+ fi
+ fi # DOFORMAT?
+
+ # Now ask the user where to mount this new filesystem:
+ dialog --backtitle "$BACKT" --title \
+"SELECT MOUNT POINT FOR $NEXT_PARTITION" --inputbox \
+"OK, now you need to specify where you want the new partition mounted. \
+For example, if you want to put it under /usr/local, then respond: /usr/local\n\
+Where would you like to mount $NEXT_PARTITION?" 11 59 2> $TMP/return
+ if [ ! $? = 0 ]; then
+ continue
+ fi
+
+ MTPT=`cat $TMP/return`
+ if [ "$MTPT" = "" ]; then # abort if blank
+ continue
+ fi
+ if [ "`echo "$MTPT" | cut -b1`" = " " ]; then # bail if 1st char is space
+ continue
+ fi
+ if [ ! "`echo "$MTPT" | cut -b1`" = "/" ]; then # add / to start of path
+ MTPT="/$MTPT"
+ fi
+ rm $TMP/return
+
+ # Sync before identifying and mounting the partition:
+ sync
+
+ # Create the mount point if it does not exist:
+ if [ ! -d ${T_PX}/$MTPT ]; then
+ mkdir -p ${T_PX}/$MTPT
+ fi
+
+ # Determine the filesystem type using blkid:
+ NEXT_SYS_TYPE=$(blkid -s TYPE $NEXT_PARTITION | cut -f 2 -d = | tr -d \")
+
+ # Mount the partition:
+ mount $NEXT_PARTITION ${T_PX}/$MTPT -t $NEXT_SYS_TYPE 1> $REDIR 2> $REDIR
+
+ #echo "$NEXT_PARTITION $MTPT $NEXT_SYS_TYPE defaults 1 1" >> $TMP/SeTnative
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$NEXT_PARTITION" "$MTPT" "$NEXT_SYS_TYPE" "defaults" "1" "2" >> $TMP/SeTnative
+ done # next partition loop
+fi # more than one Linux partition
+
+# Done, report to the user:
+cat << EOF > $TMP/tempmsg
+
+Adding this information to your /etc/fstab:
+
+EOF
+cat $TMP/SeTnative >> $TMP/tempmsg
+dialog --backtitle "Finished setting up Linux partitions." \
+--title "DONE ADDING LINUX PARTITIONS TO /etc/fstab" \
+--exit-label OK \
+--textbox $TMP/tempmsg 15 72
+
+## More obsolete code from the floppy disk era:
+## Now, move our /tmp storage onto the target partition if possible:
+#/usr/lib/setup/migrate.sh
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTpasswd b/source/installer/sources/initrd/usr/lib/setup/SeTpasswd
new file mode 100755
index 000000000..967ffd2ed
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTpasswd
@@ -0,0 +1,30 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+T_PX="`cat $TMP/SeTT_PX`"
+while [ "`cat $T_PX/etc/shadow | grep 'root:' | cut -f 2 -d :`" = "" ]; do
+ # There is no root password
+ dialog --title "WARNING: NO ROOT PASSWORD DETECTED" --yesno "There is \
+currently no password set on the system administrator account (root). \
+It is recommended that you set one now so that it is active the first \
+time the machine is rebooted. This is especially important if you're \
+using a network enabled kernel and the machine is on an Internet \
+connected LAN. Would you like to set a root password?" 10 68
+ if [ $? = 0 ] ; then
+ echo
+ echo
+ echo
+ chroot $T_PX /usr/bin/passwd root
+ echo
+ echo -n "Press [enter] to continue:"
+ read junk;
+ echo
+ # Here we drop through, and if there's still no password the menu
+ # runs again.
+ else
+ # Don't set a password:
+ break;
+ fi
+done
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTpxe b/source/installer/sources/initrd/usr/lib/setup/SeTpxe
new file mode 100755
index 000000000..55c8a83bf
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTpxe
@@ -0,0 +1,315 @@
+#!/bin/sh
+#
+# Copyright 2011 Eric Hameleers, Eindhoven, NL
+# Copyright 2011 Patrick 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.
+#
+# Bug reports, suggestions, etc for pxesetup: alien@slackware.com
+#
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+
+# Function to convert the netmask from CIDR format to dot notation.
+cidr_cvt() {
+ inform=$1
+ if [ $inform -ge 32 ]; then outform='255.255.255.255'
+ elif [ $inform -ge 31 ]; then outform='255.255.255.254'
+ elif [ $inform -ge 30 ]; then outform='255.255.255.252'
+ elif [ $inform -ge 29 ]; then outform='255.255.255.248'
+ elif [ $inform -ge 28 ]; then outform='255.255.255.240'
+ elif [ $inform -ge 27 ]; then outform='255.255.255.224'
+ elif [ $inform -ge 26 ]; then outform='255.255.255.192'
+ elif [ $inform -ge 25 ]; then outform='255.255.255.128'
+ elif [ $inform -ge 24 ]; then outform='255.255.255.0'
+ elif [ $inform -ge 23 ]; then outform='255.255.254.0'
+ elif [ $inform -ge 22 ]; then outform='255.255.252.0'
+ elif [ $inform -ge 21 ]; then outform='255.255.248.0'
+ elif [ $inform -ge 20 ]; then outform='255.255.240.0'
+ elif [ $inform -ge 19 ]; then outform='255.255.224.0'
+ elif [ $inform -ge 18 ]; then outform='255.255.192.0'
+ elif [ $inform -ge 17 ]; then outform='255.255.128.0'
+ elif [ $inform -ge 16 ]; then outform='255.255.0.0'
+ elif [ $inform -ge 15 ]; then outform='255.254.0.0'
+ elif [ $inform -ge 14 ]; then outform='255.252.0.0'
+ elif [ $inform -ge 13 ]; then outform='255.248.0.0'
+ elif [ $inform -ge 12 ]; then outform='255.240.0.0'
+ elif [ $inform -ge 11 ]; then outform='255.224.0.0'
+ elif [ $inform -ge 10 ]; then outform='255.192.0.0'
+ elif [ $inform -ge 9 ]; then outform='255.128.0.0'
+ elif [ $inform -ge 8 ]; then outform='255.0.0.0'
+ elif [ $inform -ge 7 ]; then outform='254.0.0.0'
+ elif [ $inform -ge 6 ]; then outform='252.0.0.0'
+ elif [ $inform -ge 5 ]; then outform='248.0.0.0'
+ elif [ $inform -ge 4 ]; then outform='240.0.0.0'
+ elif [ $inform -ge 3 ]; then outform='224.0.0.0'
+ elif [ $inform -ge 2 ]; then outform='192.0.0.0'
+ elif [ $inform -ge 1 ]; then outform='128.0.0.0'
+ elif [ $inform -ge 0 ]; then outform='0.0.0.0'
+ fi
+ echo $outform
+}
+
+# IP Address to integer conversion and back:
+ip_to_int() {
+ IFS=.
+ set -f
+ set -- $1
+ echo $(($1 << 24 | $2 << 16 | $3 << 8 | $4))
+}
+int_to_ip() {
+ echo $(($1>>24)).$(($1>>16&0xff)).$(($1>>8&0xff)).$(($1&0xff))
+}
+
+# PXE configuration file:
+echo "" > $TMP/SeTpxe
+
+# Find out what interface we are using.
+# Does the commandline have NIC information for us?
+# Format is 'nic=driver:interface:<dhcp|static>:ip:mask:gw'
+unset INTERFACE
+for CMDELEM in $(cat /proc/cmdline) ; do
+ if $(echo $CMDELEM | grep -q "^nic=") ; then
+ INTERFACE=$(echo $DRIVER | cut -f2 -d:)
+ fi
+done
+if [ "x$INTERFACE" = "x" ]; then # the cmdline did not provide a nic
+ INTERFACE=$(ip -f inet -o addr show |tr -s ' ' |grep -v " lo " |cut -f2 -d' ' |head -1)
+fi
+if [ "x$INTERFACE" = "x" ]; then # no network was configured at all?!?
+ cat <<EOF > $TMP/tempmsg
+
+Apparently you forgot to configure a network interface? \n\
+A PXE Server needs a configured network interface to work.\n\
+Please try again!
+
+EOF
+ dialog --title "UNCONFIGURED NETWORK DEVICE" --msgbox "$(cat $TMP/tempmsg)" 9 68
+ rm -f $TMP/tempmsg
+ exit 1
+fi
+
+# If there is a DHCP server on the network, we should not activate one now:
+if [ -r $TMP/Pdhcp ]; then
+ DHCP="no"
+elif [ -s /etc/dhcpc/dhcpcd-${INTERFACE}.info ]; then
+ DHCP="no"
+else
+ # Assume nothing... we will ask the user for confirmation later!
+ DHCP="yes"
+fi
+
+# Start the interactive part:
+dialog --backtitle "Slackware PXE Server." \
+ --title "WELCOME TO PXE CONFIGURATION" --msgbox "\
+We will be asking you a few questions now.\n\
+The answers will be used to start a PXE service on this computer \
+which does not interfere with other services in your network.\
+\n\
+The only assumption is, that there is NO PXE service running \
+on your local network at this moment.
+\n\
+If in doubt, leave the defaults." 0 0
+
+if [ "$DHCP" = "yes" ]; then
+ # Be extra safe. Do not start a DHCP server if the user denies it:
+ dialog --title "ENABLE DHCP SERVER" --yesno " \
+No active DHCP server was found on your local network. \
+The Slackware PXE server needs a working DHCP server.\n\
+Do you want this computer to start its own DHCP server \
+(you can control what IP addresses are used by the DHCP server)?\n\
+Say 'YES' if you are certain your network has no DHCP server." 9 68
+ if [ $? = 0 ]; then
+ DHCP="yes"
+ else
+ DHCP="no"
+ fi
+fi
+
+# Assemble the network parameters:
+LOCAL_IPADDR=$(ip -f inet -o addr show |tr -s ' ' |grep -v " lo " |head -1 |cut -f4 -d' ' |cut -f1 -d/)
+LOCAL_NETMASK=$(ip -f inet -o addr show |tr -s ' ' |grep -v " lo " |head -1 |cut -f4 -d' ' |cut -f2 -d/)
+LOCAL_GATEWAY=$(ip -f inet -o route show default |tr -s ' ' |cut -f3 -d' ')
+LOCAL_NETMASK=$(cidr_cvt $LOCAL_NETMASK)
+LOCAL_BROADCAST=$(ipmask $LOCAL_NETMASK $LOCAL_IPADDR |cut -f 1 -d ' ')
+LOCAL_NETWORK=$(ipmask $LOCAL_NETMASK $LOCAL_IPADDR |cut -f 2 -d ' ')
+
+if [ "$DHCP" = "yes" ]; then
+ # Find out a suitable IP address range for the DHCP server. Involves magic:
+ I_LOCAL_IPADDR=$(ip_to_int "$LOCAL_IPADDR")
+ I_LOCAL_NETMASK=$(ip_to_int "$LOCAL_NETMASK")
+ I_MINLEASE_IP=$(( ($I_LOCAL_IPADDR & $I_LOCAL_NETMASK) + 1 ))
+ I_MAXLEASE_IP=$(( ($I_LOCAL_IPADDR | ${I_LOCAL_NETMASK}^0xffffffff) - 1 ))
+ if [ $(($I_MAXLEASE_IP - $I_LOCAL_IPADDR)) -ge 10 ]; then
+ # Use ten IP addresses in the top of the address range:
+ I_MINLEASE_IP=$(($I_MAXLEASE_IP - 9))
+ elif [ $(($I_LOCAL_IPADDR - $I_MINLEASE_IP)) -ge 10 ]; then
+ # Use ten IP addresses in the bottom of the address range:
+ I_MAXLEASE_IP=$(($I_MINLEASE_IP + 9))
+ else
+ # Small range, use what we can get:
+ I_MINLEASE_IP=$(($I_LOCAL_IPADDR + 1))
+ fi
+
+ MINLEASE_IP=$(int_to_ip "$I_MINLEASE_IP")
+ MAXLEASE_IP=$(int_to_ip "$I_MAXLEASE_IP")
+
+ while [ 0 ]; do
+ ( dialog --stdout --backtitle "Slackware PXE Server." \
+ --title "DHCP SERVER CONFIGURATION" \
+ --cancel-label Restart \
+ --form "\
+The PXE Service is going to run on $INTERFACE with these values \
+(the defaults should be OK). \n\
+You can change the range of IP addresses used by the DHCP server, if \
+IP addresses in the proposed range are used by computers in your LAN. \
+For instance, your default gateway if you have one. \n\
+\n\
+Also note that we will not validate any changes you make:" \
+ 18 68 0 \
+ "IP Address:" 1 1 "$LOCAL_IPADDR" 1 30 0 0 \
+ "Netmask:" 2 1 "$LOCAL_NETMASK" 2 30 0 0 \
+ "Gateway:" 3 1 "$LOCAL_GATEWAY" 3 30 0 0 \
+ "Lowest DHCP Client Address:" 4 1 "$MINLEASE_IP" 4 30 15 0 \
+ "Highest DHCP Client Address:" 5 1 "$MAXLEASE_IP" 5 30 15 0 \
+ ) > $TMP/tempopts
+
+ if [ $? = 0 ]; then
+ # Remember... busybox ash is no good with arrays :/
+ local i=0
+ rm $TMP/tempkeys
+ cat $TMP/tempopts | while read VALUE ; do
+ if [ $i = 0 ]; then echo "MINLEASE_IP=\"$VALUE\"" >> $TMP/tempkeys
+ elif [ $i = 1 ]; then echo "MAXLEASE_IP=\"$VALUE\"" >> $TMP/tempkeys
+ fi
+ i=$(expr $i + 1)
+ done
+ eval $(cat $TMP/tempkeys)
+ rm $TMP/tempopts
+ break
+ fi
+ done
+fi # [ "$DHCP" = "yes" ]
+
+echo "DHCP=${DHCP}" >> $TMP/SeTpxe
+echo "LOCAL_IPADDR=${LOCAL_IPADDR}" >> $TMP/SeTpxe
+echo "LOCAL_NETMASK=${LOCAL_NETMASK}" >> $TMP/SeTpxe
+echo "LOCAL_GATEWAY=${LOCAL_GATEWAY}" >> $TMP/SeTpxe
+echo "LOCAL_BROADCAST=${LOCAL_BROADCAST}" >> $TMP/SeTpxe
+echo "LOCAL_NETWORK=${LOCAL_NETWORK}" >> $TMP/SeTpxe
+echo "MINLEASE_IP=${MINLEASE_IP}" >> $TMP/SeTpxe
+echo "MAXLEASE_IP=${MAXLEASE_IP}" >> $TMP/SeTpxe
+
+# Write out a suitable dnsmasq configuration:
+cat <<EOF > /etc/dnsmasq.conf
+# We do not need dnsmasq to function as a DNS server:
+port=0
+
+# Write the pid file:
+pid-file=/var/run/dnsmasq.pid
+
+# Start a TFTP server:
+enable-tftp
+
+# Set the root directory for files available via FTP:
+tftp-root=/var/lib/tftpboot
+
+# The boot filename:
+dhcp-boot=/pxelinux.0
+
+# Disable re-use of the DHCP servername and filename fields as extra
+# option space. That's to avoid confusing some old or broken DHCP clients.
+dhcp-no-override
+
+# Log connections so that we can display them on the console:
+log-facility=/var/log/dnsmasq.log
+log-dhcp
+
+# Custom path for the leases file:
+dhcp-leasefile=$TMP/dnsmasq.leases
+
+# Craft a nice PXE menu:
+pxe-prompt="Press F8 for boot menu", 3
+
+# The known types are x86PC, PC98, IA64_EFI, Alpha, Arc_x86,
+# Intel_Lean_Client, IA32_EFI, BC_EFI, Xscale_EFI and X86-64_EFI
+pxe-service=X86PC, "Boot from network", /var/lib/tftpboot/pxelinux
+
+# A boot service type of 0 is special, and will abort the
+# net boot procedure and continue booting from local media.
+pxe-service=X86PC, "Boot from local hard disk", 0
+
+EOF
+
+if [ -n "$LOCAL_GATEWAY" ]; then
+ cat <<EOF >> /etc/dnsmasq.conf
+# Override the default route supplied by dnsmasq, which assumes the
+# router is the same machine as the one running dnsmasq.
+#dhcp-option=option:router,${LOCAL_GATEWAY}
+dhcp-option=3,${LOCAL_GATEWAY}
+
+EOF
+else
+ cat <<EOF >> /etc/dnsmasq.conf
+# Override the default route supplied by dnsmasq and send no default
+# route at all.
+dhcp-option=3
+
+EOF
+fi
+
+if [ "$DHCP" = "yes" ]; then
+ cat <<EOF >> /etc/dnsmasq.conf
+# dnsmasq functions as a normal DHCP server, providing IP leases.
+dhcp-range=${MINLEASE_IP},${MAXLEASE_IP},${LOCAL_NETMASK},1h
+
+EOF
+else
+ cat <<EOF >> /etc/dnsmasq.conf
+# There is an existing DHCP server on this LAN, so dnsmasq functions
+# as a proxy DHCP server providing boot information but no IP leases.
+# Any ip in the subnet will do, so you may just put your server NIC ip here.
+dhcp-range=${LOCAL_IPADDR},proxy
+
+EOF
+fi
+
+# Create the pxelinux configuration file:
+cat <<EOF > /var/lib/tftpboot/pxelinux.cfg/default
+default huge.s
+prompt 1
+timeout 1200
+display message.txt
+F1 message.txt
+F2 f2.txt
+label huge.s
+ kernel kernels/huge.s/bzImage
+ append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 SLACK_KERNEL=huge.s cf=tftp,${LOCAL_IPADDR},/slackpxe.cfg
+label speakup.s
+ kernel kernels/huge.s/bzImage
+ append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 SLACK_KERNEL=huge.s cf=tftp,${LOCAL_IPADDR},/slackpxe.cfg
+label memtest
+ kernel kernels/memtest/memtest
+EOF
+
+# Update the slackpxe.cfg file:
+sed -i -e "s,^REMOTE_URL=.*,REMOTE_URL=http://$LOCAL_IPADDR," /var/lib/tftpboot/slackpxe.cfg
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTpxemedia b/source/installer/sources/initrd/usr/lib/setup/SeTpxemedia
new file mode 100755
index 000000000..3e46fb593
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTpxemedia
@@ -0,0 +1,95 @@
+#!/bin/sh
+#
+# Copyright 2011 Eric Hameleers, Eindhoven, NL
+# Copyright 2011 Patrick 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.
+#
+# Bug reports, suggestions, etc for pxesetup: alien@slackware.com
+#
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+
+dialog --backtitle "Select Slackware installation source." \
+--title "SOURCE MEDIA SELECTION" --menu \
+"Please select the media which contains Slackware Linux:" \
+13 70 6 \
+"1" "Use a Slackware DVD" \
+"2" "Use a hard drive partition" \
+"3" "Use a pre-mounted directory" \
+2> $TMP/pxemedia
+if [ ! $? = 0 ]; then
+ rm $TMP/pxemedia
+ exit
+fi
+
+SOURCE_MEDIA="`cat $TMP/pxemedia`"
+rm -f $TMP/pxemedia
+if [ "$SOURCE_MEDIA" = "1" ]; then
+ INSCD
+elif [ "$SOURCE_MEDIA" = "2" ]; then
+ INShd
+elif [ "$SOURCE_MEDIA" = "3" ]; then
+ INSdir
+fi
+
+# Find out where the PXE boot files are on the medium.
+# Note: 'isolinux' will be used on the DVD and 'syslinux' on the USB stick.
+if [ -f $(readlink -f $(cat $TMP/SeTDS))/isolinux/initrd.img ]; then
+ SYSLINUXPATH="$(readlink -f $(cat $TMP/SeTDS))/isolinux"
+elif [ -f $(readlink -f $(cat $TMP/SeTDS))/../isolinux/initrd.img ]; then
+ SYSLINUXPATH="$(cd $(readlink -f $(cat $TMP/SeTDS))/../isolinux ; pwd)"
+elif [ -f $(readlink -f $(cat $TMP/SeTDS))/../syslinux/initrd.img ]; then
+ SYSLINUXPATH="$(cd $(readlink -f $(cat $TMP/SeTDS))/../syslinux ; pwd)"
+elif [ -f $(readlink -f $(cat $TMP/SeTDS))/../../syslinux/initrd.img ]; then
+ SYSLINUXPATH="$(cd $(readlink -f $(cat $TMP/SeTDS))/../../syslinux ; pwd)"
+else
+ SYSLINUXPATH=""
+fi
+
+if [ -d $(readlink -f $(cat $TMP/SeTDS))/../kernels ]; then
+ KERNELPATH="$(cd $(readlink -f $(cat $TMP/SeTDS))/../kernels ; pwd)"
+elif [ -d $(readlink -f $(cat $TMP/SeTDS))/../../kernels ]; then
+ KERNELPATH="$(cd $(readlink -f $(cat $TMP/SeTDS))/../../kernels ; pwd)"
+elif [ -d $(readlink -f $(cat $TMP/SeTDS))/../../syslinux/kernels ]; then
+ KERNELPATH="$(cd $(readlink -f $(cat $TMP/SeTDS))/../../syslinux/kernels ; pwd)"
+else
+ KERNELPATH=""
+fi
+
+# Found them... hopefully.
+if [ -n "$SYSLINUXPATH" -a -n "$KERNELPATH" ]; then
+ # Setup symlinks to initrd files and kernels for the PXE boot:
+ ( cd /var/lib/tftpboot
+ for FILE in $(find $SYSLINUXPATH -type f -maxdepth 1) ; do
+ ln -sf $FILE $(basename $FILE)
+ done
+ ln -sf $KERNELPATH kernels
+ ) 2>/dev/null
+ # Update the slackpxe.cfg file (need to strip off '/var/log/mount'):
+ sed -i -e "s,^REMOTE_PATH=.*,REMOTE_PATH=/$(cat $TMP/SeTDS | cut -d/ -f5-)," /var/lib/tftpboot/slackpxe.cfg
+else
+ dialog --title "FTP/HTTP DOWNLOAD FAILURE" --msgbox "\
+Could not find the kernel and/or initial ramdisk files. \n\
+These are required for booting the client computer.\n\
+Please try to setup the SOURCE location correctly." 7 68
+fi
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTswap b/source/installer/sources/initrd/usr/lib/setup/SeTswap
new file mode 100755
index 000000000..f9eb52fc8
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTswap
@@ -0,0 +1,122 @@
+#!/bin/sh
+
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+REDIR=/dev/tty4
+NDIR=/dev/null
+
+crunch() {
+ read STRING;
+ echo $STRING;
+}
+
+# get_part_size( dev ) - Return the size in K, M, G, T, or P of the named partition.
+get_part_size() {
+ numfmt --to=iec $(blockdev --getsize64 $1)
+}
+
+rm -f $TMP/SeTswap $TMP/SeTswapskip $TMP/SeTuseswap $TMP/tmpscript
+
+SWAPLIST="`probe -l 2> /dev/null | grep "Linux swap" | cut -f 1 -d ' ' | sort 2> $NDIR`"
+
+if [ "$SWAPLIST" = "" ]; then
+ dialog --title "NO SWAP SPACE DETECTED" --yesno "You have not created \
+a swap partition with Linux fdisk. \
+Do you want to continue installing without one? " 6 60
+ if [ "$?" = "1" ]; then
+ dialog --title "ABORTING INSTALLATION" --msgbox "Create a swap partition with Linux fdisk, and then try this again." \
+6 40
+ else
+ touch $TMP/SeTswapskip
+ fi
+ exit
+else # there is at least one swap partition:
+ # Build the swap partition selection menu:
+ cat << EOF > $TMP/tmpscript
+dialog --backtitle "Setting up swap partitions." \\
+--title "SWAP SPACE DETECTED" --checklist \\
+"Slackware Setup has detected one or more swap partitions \\
+on your system. These partitions have been \\
+preselected to be set up as swap space. If there are any \\
+swap partitions that you \\
+do not wish to use with this installation, please unselect \\
+them with the up and down arrows and spacebar. If you wish \\
+to use all of them (this is recommended), simply hit \\
+the ENTER key." \\
+0 0 0 \\
+EOF
+ for swappartition in $SWAPLIST ; do
+ PARTSIZE=$(get_part_size $swappartition)
+ cat << EOF >> $TMP/tmpscript
+"$swappartition" "Linux swap partition, ${PARTSIZE}" on \\
+EOF
+ done
+ cat << EOF >> $TMP/tmpscript
+ 2> $TMP/SeTuseswap
+EOF
+ . $TMP/tmpscript
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/tmpscript $TMP/SeTswap $TMP/SeTuseswap
+ touch $TMP/SeTswapskip
+ fi
+
+ if [ -r $TMP/SeTuseswap ]; then
+ # Remove extra quotes from SeTuseswap, if any:
+ cat $TMP/SeTuseswap | tr -d \" > $TMP/SeTfoo
+ mv $TMP/SeTfoo $TMP/SeTuseswap
+
+ # Were any swap partitions asked for?
+ if [ "$(cat $TMP/SeTuseswap)" = "" -a ! -r $TMP/SeTswapskip ]; then
+ rm -f $TMP/tmpscript $TMP/SeTswap $TMP/SeTuseswap
+ touch $TMP/SeTswapskip
+ fi
+ fi
+
+ if [ ! -r $TMP/SeTswapskip ]; then
+ dialog --backtitle "Setting up swap partitions." \
+ --title "CHECK SWAP PARTITIONS FOR BAD BLOCKS?" --defaultno --yesno \
+"Slackware Setup will now prepare your system's swap space. \
+When formatting swap partitions with mkswap you may also check \
+them for bad blocks. This is not the default since nearly all \
+modern hard drives check themselves for bad blocks anyway. \
+Would you like to check for bad blocks while running mkswap?" \
+10 60
+ if [ $? = 0 ]; then
+ CHECKBAD=yes
+ else
+ CHECKBAD=no
+ fi
+
+ # Run mkswap on swap partitions, unless they are already in use:
+ for swappartition in $(cat $TMP/SeTuseswap) ; do
+ if ! grep -w $swappartition /proc/swaps 1> $REDIR 2> $REDIR ; then
+ if [ "$CHECKBAD" = "no" ]; then
+ mkswap -v1 $swappartition 1> $REDIR 2> $REDIR
+ else
+ mkswap -c -v1 $swappartition 1> $REDIR 2> $REDIR
+ fi
+ echo "Activating swap partition ${swappartition}:"
+ echo "swapon ${swappartition}"
+ swapon $swappartition 1> $REDIR 2> $REDIR
+ fi
+ done
+
+ # This is so people don't ask what that output was that flashed
+ # by on the screen. ;-)
+ sleep 1
+
+ # Add the swap partitions to the file that will go into /etc/fstab:
+ for swappartition in $(cat $TMP/SeTuseswap) ; do
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$swappartition" "swap" "swap" "defaults" "0" "0" >> $TMP/SeTswap
+ done
+
+ echo "Your swapspace has been configured. This information will" > $TMP/swapmsg
+ echo "be added to your /etc/fstab:" >> $TMP/swapmsg
+ echo >> $TMP/swapmsg
+ cat $TMP/SeTswap >> $TMP/swapmsg
+ dialog --title "SWAP SPACE CONFIGURED" --exit-label OK --textbox $TMP/swapmsg 10 72
+ rm $TMP/swapmsg
+ fi
+fi
diff --git a/source/installer/sources/initrd/usr/lib/setup/migrate.sh b/source/installer/sources/initrd/usr/lib/setup/migrate.sh
new file mode 100755
index 000000000..8c1de44ae
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/migrate.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+TMP=/var/log/setup/tmp
+T_PX="`cat $TMP/SeTT_PX`"
+#
+# Like, the space is *really* getting tight on these install disks!
+# Can you believe it? Anyway, we can avoid many problems by migrating
+# the $TMP directory onto the install partition ASAP. So, this script
+# is run right after the TARGET partition is configured and mounted
+# under ${T_PX}.
+#
+
+TMPLINK="`LC_ALL=C /bin/ls -l /var/log/setup/tmp | tr -s ' ' | cut -f 11 -d ' '`"
+if [ -L /var/log/setup/tmp -a "$TMPLINK" = "/tmp" ]; then
+ if mount | grep " on ${T_PX} " 1> /dev/null 2> /dev/null ; then # ${T_PX} mounted
+ TYPE="`mount | grep " on ${T_PX} " | cut -f 5 -d ' '`"
+ if [ "$TYPE" = "umsdos" ]; then
+ LINKDIR=${T_PX}/linux/var/log/setup/tmp
+ else
+ LINKDIR=${T_PX}/var/log/setup/tmp
+ fi
+ if [ ! -d $LINKDIR ]; then
+ mkdir -p $LINKDIR
+ chmod 700 $LINKDIR
+ fi
+ ( cd /var/log/setup
+ rm tmp
+ ln -sf $LINKDIR tmp )
+ rm -f $LINKDIR/SeT*
+ mv /tmp/SeT* $LINKDIR
+ fi
+fi
diff --git a/source/installer/sources/initrd/usr/lib/setup/nopartHELP b/source/installer/sources/initrd/usr/lib/setup/nopartHELP
new file mode 100644
index 000000000..5214a0e76
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/nopartHELP
@@ -0,0 +1,34 @@
+
+You have not yet designated any disk partitions as type Linux.
+
+If you are planning to use OS/2 Boot Manager, make your Linux
+partitions with OS/2 fdisk (or Partition Magic, which also
+includes Boot Manager), format them, reboot this disk, and then
+use Linux fdisk to tag the partitions as type 83 (Linux).
+
+Linux fdisk will select a default device when called without
+arguments, and from there it is menu driven. If you don't want
+to partition the default device, then call fdisk with the device
+you want as the argument, like this:
+
+fdisk /dev/hdb
+
+or this:
+
+fdisk /dev/sda
+
+If you are not using the OS/2 Boot Manager, then you may use Linux
+fdisk to create partitions for Linux. Other than the exception for
+the OS/2 Boot Manager, you are usually better off creating
+partitions for a given OS using a partitioning tool native to that
+OS. In other words, you probably shouldn't try to make your DOS or
+other non-Linux partitions with the Linux fdisk.
+
+"cfdisk" is an equally good version of Linux fdisk that is more
+graphical and menu driven. Many people prefer to use "cfdisk".
+
+Please make one or more partitions for Linux, and try setup again.
+If you haven't already, you might want to also make a swap partition
+while you're in fdisk. 64 megabytes would be a minimum starting size
+for a single user system. Linux swap is tagged as type 82.
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/pxesetup b/source/installer/sources/initrd/usr/lib/setup/pxesetup
new file mode 100755
index 000000000..fb7831a39
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/pxesetup
@@ -0,0 +1,120 @@
+#!/bin/sh
+#
+# Copyright 2011 Eric Hameleers, Eindhoven, NL
+# Copyright 2011 Patrick 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.
+#
+# Bug reports, suggestions, etc for pxesetup: alien@slackware.com
+#
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+rm -f $TMP/SeT*
+# If a keymap was set up, restore that data:
+if [ -r $TMP/Pkeymap ]; then
+ cp $TMP/Pkeymap $TMP/SeTkeymap
+fi
+echo "on" > $TMP/SeTcolor # turn on color menus
+PATH="$PATH:/usr/lib/setup"
+export PATH;
+export COLOR=on
+# Before probing, activate any LVM partitions that may exist from
+# before the boot - perhaps the Slackware tree is on a local partition:
+vgchange -ay 1> /dev/null 2> /dev/null
+if probe -l 2> /dev/null | grep -E 'Linux$' 1> /dev/null 2> /dev/null ; then
+ probe -l 2> /dev/null | grep -E 'Linux$' | sort 1> $TMP/SeTplist 2> /dev/null
+fi
+
+while [ 0 ]; do
+
+ dialog --title "Slackware PXE Setup (version 13.37)" \
+--menu \
+"Welcome to Slackware PXE Setup.\n\
+Select an option below using the UP/DOWN keys and SPACE or ENTER.\n\
+Alternate keys may also be used: '+', '-', and TAB." 18 72 9 \
+"HELP" "Read the Slackware PXE Setup HELP file" \
+"NETWORK" "Configure your network parameters" \
+"SOURCE" "Select source media" \
+"ACTIVATE" "Activate the Slackware PXE Server" \
+"EXIT" "Exit Slackware PXE Setup" 2> $TMP/hdset
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/hdset $TMP/SeT*
+ exit
+ fi
+ MAINSELECT="`cat $TMP/hdset`"
+ rm $TMP/hdset
+
+ # Start checking what to do. Some modules may reset MAINSELECT to run the
+ # next item in line.
+
+ if [ "$MAINSELECT" = "HELP" ]; then
+ SeTPXEHELP
+ fi
+
+ if [ "$MAINSELECT" = "NETWORK" ]; then
+ SeTnet
+ SeTpxe
+ if [ -r $TMP/SeTpxe ]; then
+ MAINSELECT="SOURCE"
+ fi
+ fi
+
+ if [ "$MAINSELECT" = "SOURCE" ]; then
+ SeTpxemedia
+ if [ -r $TMP/SeTsource ]; then
+ MAINSELECT="ACTIVATE"
+ fi
+ fi
+
+ if [ "$MAINSELECT" = "ACTIVATE" ]; then
+ if [ ! -r $TMP/SeTpxe -o ! -r $TMP/SeTsource ]; then
+ dialog --title "CANNOT START PXE SERVER YET" --msgbox "\
+\n\
+Before you can start the PXE Server, complete the following tasks:\n\
+\n\
+1. Set up your computer's network parameters.\n\
+2. Select your source media.\n\
+\n\
+Press ENTER to return to the main menu." 14 68
+ continue
+ fi
+ # Time to start the BOOTP/TFTP/HTTP servers:
+ dnsmasq -C /etc/dnsmasq.conf
+ httpd -h /var/log/mount
+
+ dialog --backtitle "Slackware PXE Server." \
+ --title "PXE Client activity log" \
+ --ok-label "EXIT" \
+ --tailbox /var/log/dnsmasq.log 18 68
+
+ # Time to kill the BOOTP/TFTP/HTTP servers:
+ kill -TERM $(cat /var/run/dnsmasq.pid)
+ killall -TERM httpd
+ fi
+
+ if [ "$MAINSELECT" = "EXIT" ]; then
+ break
+ fi
+
+done # end of main loop
+
+# end slackware PXE setup script
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/setup b/source/installer/sources/initrd/usr/lib/setup/setup
new file mode 100755
index 000000000..f30064a0f
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/setup
@@ -0,0 +1,443 @@
+#!/bin/sh
+#
+# Copyright 1993, 1994, 1999 Patrick Volkerding, Moorhead, Minnesota USA
+# Copyright 2001, 2003, 2004 Slackware Linux, Inc., Concord, CA
+# Copyright 2006, 2007, 2018 Patrick 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.
+#
+# As always, bug reports, suggestions, etc: volkerdi@slackware.com
+#
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+# Wipe the probe md5sum to force rescanning partitions if setup is restarted:
+rm -f $TMP/SeTpartition.md5
+## FLOPPY? Comment out this obsolete code. We ain't gonna need it.
+## Use /tmp on floppy for now:
+#/usr/lib/setup/unmigrate.sh
+rm -f $TMP/SeT*
+# If a keymap was set up, restore that data:
+if [ -r $TMP/Pkeymap ]; then
+ cp $TMP/Pkeymap $TMP/SeTkeymap
+fi
+echo "on" > $TMP/SeTcolor # turn on color menus
+PATH="$PATH:/usr/lib/setup"
+export PATH;
+export COLOR=on
+dialog --backtitle "Slackware Linux Setup" --infobox "\n
+Scanning your system for partition information...\n
+\n" 5 55
+# In case the machine is full of fast SSDs:
+sleep 1
+# Before probing, activate any LVM partitions
+# that may exist from before the boot:
+vgchange -ay 1> /dev/null 2> /dev/null
+if probe -l 2> /dev/null | grep -E 'Linux$' 1> /dev/null 2> /dev/null ; then
+ probe -l 2> /dev/null | grep -E 'Linux$' | sort 1> $TMP/SeTplist 2> /dev/null
+else
+ dialog --title "NO LINUX PARTITIONS DETECTED" \
+ --msgbox "There don't seem to be any partitions on this machine of type \
+Linux. You'll need to make at least one of these to install Linux. \
+To do this, you'll need to leave 'setup', and make the partitions using \
+'cfdisk' (MBR partitions) or 'cgdisk' (GPT partitions). For more \
+information, read the 'setup' help file from the next menu." 10 64
+fi
+if [ -d /sys/firmware/efi ]; then
+ if ! probe -l 2> /dev/null | grep "EFI System Partition" 1> /dev/null 2> /dev/null ; then
+ dialog --title "NO EFI SYSTEM PARTITION DETECTED" \
+ --msgbox "This machine appears to be using EFI/UEFI, but no EFI System \
+Partition was found. You'll need to make an EFI System Partition in order \
+to boot from the hard drive. To do this, leave 'setup', and \
+use 'cgdisk' to make a 100MB partition of type EF00. For more information, \
+read the 'setup' help file from the next menu." 10 64
+ fi
+fi
+T_PX="/mnt"
+echo "$T_PX" > $TMP/SeTT_PX
+ROOT_DEVICE="`mount | grep "on / " | cut -f 1 -d ' '`"
+echo "$ROOT_DEVICE" > $TMP/SeTrootdev
+if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then # clear source
+ umount /var/log/mount # location
+fi
+# Anything mounted on /var/log/mount now is a fatal error:
+if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then
+ echo "Can't umount /var/log/mount. Reboot machine and run setup again."
+ exit
+fi
+# If the mount table is corrupt, the above might not do it, so we will
+# try to detect Linux and FAT32 partitions that have slipped by:
+if [ -d /var/log/mount/lost+found -o -d /var/log/mount/recycled \
+ -o -r /var/log/mount/io.sys ]; then
+ echo "Mount table corrupt. Reboot machine and run setup again."
+ exit
+fi
+rm -f /var/log/mount 2> /dev/null
+rmdir /var/log/mount 2> /dev/null
+mkdir /var/log/mount 2> /dev/null
+
+while [ 0 ]; do
+
+ dialog --title "Slackware Linux Setup (version 12.2)" \
+--menu \
+"Welcome to Slackware Linux Setup.\n\
+Select an option below using the UP/DOWN keys and SPACE or ENTER.\n\
+Alternate keys may also be used: '+', '-', and TAB." 18 72 9 \
+"HELP" "Read the Slackware Setup HELP file" \
+"KEYMAP" "Remap your keyboard if you're not using a US one" \
+"ADDSWAP" "Set up your swap partition(s)" \
+"TARGET" "Set up your target partitions" \
+"SOURCE" "Select source media" \
+"SELECT" "Select categories of software to install" \
+"INSTALL" "Install selected software" \
+"CONFIGURE" "Reconfigure your Linux system" \
+"EXIT" "Exit Slackware Linux Setup" 2> $TMP/hdset
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/hdset $TMP/SeT*
+ exit
+ fi
+ MAINSELECT="`cat $TMP/hdset`"
+ rm $TMP/hdset
+
+ # Start checking what to do. Some modules may reset MAINSELECT to run the
+ # next item in line.
+
+ if [ "$MAINSELECT" = "HELP" ]; then
+ SeTfdHELP
+ fi
+
+ if [ "$MAINSELECT" = "KEYMAP" ]; then
+ SeTkeymap
+ if [ -r $TMP/SeTkeymap ]; then
+ MAINSELECT="ADDSWAP"
+ fi
+ fi
+
+ if [ "$MAINSELECT" = "MAKE TAGS" ]; then
+ SeTmaketag
+ fi
+
+ if [ "$MAINSELECT" = "ADDSWAP" ]; then
+ SeTswap
+ if [ -r $TMP/SeTswap ]; then
+ MAINSELECT="TARGET"
+ elif [ -r $TMP/SeTswapskip ]; then
+ # Go ahead to TARGET without swap space:
+ MAINSELECT="TARGET"
+ fi
+ fi
+
+ if [ "$MAINSELECT" = "TARGET" ]; then
+ SeTpartitions
+ SeTEFI
+ SeTDOS
+ if [ -r $TMP/SeTnative ]; then
+ MAINSELECT="SOURCE"
+ fi
+ fi
+
+ if [ "$MAINSELECT" = "SOURCE" ]; then
+ SeTmedia
+ if [ -r $TMP/SeTsource ]; then
+ MAINSELECT="SELECT"
+ fi
+ fi
+
+ if [ "$MAINSELECT" = "SELECT" ]; then
+ if [ -r /var/log/mount/isolinux/setpkg ]; then
+ sh /var/log/mount/isolinux/setpkg
+ else
+ SeTPKG
+ fi
+ if [ -r $TMP/SeTSERIES ]; then
+ MAINSELECT="INSTALL"
+ fi
+ fi
+
+ if [ "$MAINSELECT" = "INSTALL" ]; then
+ if [ ! -r $TMP/SeTSERIES -o ! -r $TMP/SeTsource -o ! -r $TMP/SeTnative ]; then
+ dialog --title "CANNOT INSTALL SOFTWARE YET" --msgbox "\
+\n\
+Before you can install software, complete the following tasks:\n\
+\n\
+1. Select your source media.\n\
+2. Set up your target Linux partition(s).\n\
+3. Select which software categories to install.\n\
+\n\
+You may also optionally remap your keyboard and set up your\n\
+swap partition(s). \n\
+\n\
+Press ENTER to return to the main menu." 16 68
+ continue
+ fi
+ SERIES="`cat $TMP/SeTSERIES`"
+ SOURCE_DEVICE="`cat $TMP/SeTsource`"
+ IGNORE_TAGFILES=""
+ while [ 0 ]; do
+ dialog --title "SELECT PROMPTING MODE" --default-item "terse" --menu \
+ "Now you must select the type of prompts you'd like to see during the \
+installation process. If you have the drive space, the 'full' option \
+is quick, easy, and by far the most foolproof choice. The 'newbie' \
+mode provides the most information but is much more time-consuming \
+(presenting the packages one by one) than the menu-based choices. \
+Otherwise, you can pick packages from menus \
+using 'expert' or 'menu' mode. Which type of prompting would you like \
+to use?" \
+ 20 76 7 \
+ "full" "Install everything (9+ GB of software, RECOMMENDED!)" \
+ "terse" "Like 'full', but display one line per package during install" \
+ "menu" "Choose individual packages from interactive menus" \
+ "expert" "This is actually the same as the \"menu\" option" \
+ "newbie" "Use verbose prompting (the X series takes one year)" \
+ "custom" "Use custom tagfiles in the package directories" \
+ "tagpath" "Use tagfiles in the subdirectories of a custom path" \
+ "help" "Read the prompt mode help file" 2> $TMP/SeTpmode
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/SeTpmode
+ exit
+ fi
+ MODE="`cat $TMP/SeTpmode`"
+ rm -f $TMP/SeTtagext
+ if [ "$MODE" = "help" ]; then
+ dialog --title "PROMPT MODE HELP" --exit-label OK --textbox "/usr/lib/setup/PROMPThelp" 19 65
+ fi
+ if [ "$MODE" = "tagpath" ]; then
+ dialog --title "PROVIDE A CUSTOM PATH TO YOUR TAGFILES" --inputbox \
+ "If you're installing from CD or DVD, it's impossible to edit the \
+tagfiles that are in the package directories. In this case, you might \
+want to provide a path to your custom tagfiles. As an example, you \
+could create a /tagfiles directory and mount a floppy disk containing \
+the tagfiles on that directory. Then you'd enter '/tagfiles' at the \
+prompt below. The setup program will look for your tagfile in \
+SUBDIRECTORIES of the path you provide, such as /tagfiles/a, \
+/tagfiles/ap, /tagfiles/d, and so on. You only need to provide a \
+subdirectory and tagfile for the first disk of each series to be \
+installed. If a custom tagfile is not found at the path you provide, \
+setup will revert to the default tagfiles. Please enter the path to your \
+custom tagfiles:" \
+ 19 71 2> $TMP/SeTtagpath
+ if [ ! $? = 0 ]; then
+ continue
+ fi
+ if [ -r $TMP/SeTtagpath ]; then
+ if [ "`cat $TMP/SeTtagpath`" = "" ]; then
+ rm -f $TMP/SeTtagpath
+ elif [ ! -d "$(cat $TMP/SeTtagpath)" ]; then
+ dialog --title "NOT A VALID DIRECTORY" --msgbox \
+"Sorry, but the $(cat $TMP/SeTtagpath) directory could not be located. \
+Press ENTER to go back to the SELECT PROMPTING MODE menu." \
+7 65
+ rm -f $TMP/SeTtagpath
+ continue
+ fi
+ fi
+ break;
+ fi
+ if [ "$MODE" = "newbie" ]; then
+ dialog --infobox "'newbie' prompt mode selected. Using default tagfiles \
+and verbose package prompting." 4 50
+ break;
+ fi
+ if [ "$MODE" = "custom" ]; then
+ dialog --title "ENTER CUSTOM EXTENSION" --inputbox "Now, enter the custom \
+extension you have used for your tagfiles. This must be a valid MS-DOS format \
+file extension consisting of a period followed by three characters. For \
+example, I use '.pat'. You might see my tagfiles on your disks. :^)" \
+12 60 2> $TMP/SeTtagext
+ if [ ! $? = 0 ]; then
+ continue
+ fi
+ if [ -r $TMP/SeTtagext ]; then
+ if [ "`cat $TMP/SeTtagext`" = "" ]; then
+ rm -f $TMP/SeTtagext
+ fi
+ fi
+ dialog --infobox "'custom' prompt mode selected. Using prompting defaults \
+found in custom tagfiles." 4 50
+ break;
+ fi
+ if [ "$MODE" = "full" ]; then
+ IGNORE_TAGFILES="-ignore_tagfiles"
+ dialog --infobox "Full installation mode. Installing all software \
+packages without prompting." 4 45
+ break;
+ fi
+ if [ "$MODE" = "terse" ]; then
+ setterm -background cyan -foreground black -blank 0
+ clear
+ IGNORE_TAGFILES="-ignore_tagfiles"
+ echo
+ echo
+ echo "Full (terse display) installation mode."
+ echo
+ echo "A one-line description will be displayed as each package is installed."
+ echo
+ break;
+ fi
+ if [ "$MODE" = "menu" ]; then
+ dialog --infobox "'menu' prompt mode selected. Using interactive menus \
+to choose subsystems of related packages." 4 60
+ break;
+ fi
+ if [ "$MODE" = "expert" ]; then
+ dialog --infobox "'expert' prompt mode selected. Using interactive menus \
+to choose packages individually." 4 60
+ break;
+ fi
+ done
+ export MAKETAG;
+ sleep 1
+ if [ -r $TMP/SeTCDdev ]; then # only try to remount media if it's a CD/DVD
+ slackinstall --device `cat $TMP/SeTCDdev` --promptmode $MODE --srcpath `cat $TMP/SeTDS` --mountpoint /var/log/mount --target $T_PX --series $SERIES
+ elif [ -r $TMP/SeTremotesvr ]; then
+ slackinstall --device noremount --promptmode $MODE --srcpath `cat $TMP/SeTDS` --mountpoint /var/log/mount --target $T_PX --series $SERIES --net `cat $TMP/SeTremotesvr`
+ else
+ slackinstall --device noremount --promptmode $MODE --srcpath `cat $TMP/SeTDS` --mountpoint /var/log/mount --target $T_PX --series $SERIES
+ fi
+ if [ $MODE = terse ]; then
+ # Let's pause a moment and then restore the terminal settings
+ sleep 1
+ setterm -background black -foreground white -blank 0
+ fi
+ MAINSELECT="CONFIGURE"
+ fi
+
+ if [ "$MAINSELECT" = "CONFIGURE" ]; then
+ SeTconfig
+ REPLACE_FSTAB=Y
+ if [ -r $TMP/SeTnative ]; then
+ if [ -r $T_PX/etc/fstab ]; then
+ dialog --title "REPLACE /etc/fstab?" --yesno "You already have an \
+/etc/fstab on your install partition. If you were just adding software, \
+you should probably keep your old /etc/fstab. If you've changed your \
+partitioning scheme, you should use the new /etc/fstab. Do you want \
+to replace your old /etc/fstab with the new one?" 10 58
+ if [ ! $? = 0 ]; then
+ REPLACE_FSTAB=N
+ fi
+ fi
+ if [ "$REPLACE_FSTAB" = "Y" ]; then
+ cat /dev/null > $T_PX/etc/fstab
+ if [ -r $TMP/SeTswap ]; then
+ cat $TMP/SeTswap > $T_PX/etc/fstab
+ fi
+ cat $TMP/SeTnative >> $T_PX/etc/fstab
+ if [ -r $TMP/SeTDOS ]; then
+ cat $TMP/SeTDOS >> $T_PX/etc/fstab
+ fi
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "#/dev/cdrom" "/mnt/cdrom" "auto" "noauto,owner,ro,comment=x-gvfs-show" "0" "0" >> $T_PX/etc/fstab
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "/dev/fd0" "/mnt/floppy" "auto" "noauto,owner" "0" "0" >> $T_PX/etc/fstab
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "devpts" "/dev/pts" "devpts" "gid=5,mode=620" "0" "0" >> $T_PX/etc/fstab
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "proc" "/proc" "proc" "defaults" "0" "0" >> $T_PX/etc/fstab
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "tmpfs" "/dev/shm" "tmpfs" "nosuid,nodev,noexec" "0" "0" >> $T_PX/etc/fstab
+ fi
+ dialog --title "SETUP COMPLETE" --msgbox "System configuration \
+and installation is complete. \
+\n\nYou may now reboot your system." 7 55
+ fi
+ fi
+
+ if [ "$MAINSELECT" = "EXIT" ]; then
+ break
+ fi
+
+done # end of main loop
+sync
+
+chmod 755 $T_PX
+if [ -d $T_PX/tmp ]; then
+ chmod 1777 $T_PX/tmp
+fi
+if mount | grep /var/log/mntiso 1> /dev/null 2> /dev/null ; then
+ umount -f /var/log/mntiso
+fi
+if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then
+ umount /var/log/mount
+fi
+# Anything mounted on /var/log/mount now is a fatal error:
+if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then
+ exit
+fi
+# If the mount table is corrupt, the above might not do it, so we will
+# try to detect Linux and FAT32 partitions that have slipped by:
+if [ -d /var/log/mount/lost+found -o -d /var/log/mount/recycled \
+ -o -r /var/log/mount/io.sys ]; then
+ exit
+fi
+rm -f /var/log/mount 2> /dev/null
+rmdir /var/log/mount 2> /dev/null
+mkdir /var/log/mount 2> /dev/null
+chmod 755 /var/log/mount
+
+# An fstab file is indicative of an OS installation, rather than
+# just loading the "setup" script and selecting "EXIT"
+if [ -f ${T_PX}/etc/fstab ]; then
+ # umount CD:
+ if [ -r $TMP/SeTCDdev ]; then
+ if mount | grep iso9660 > /dev/null 2> /dev/null ; then
+ umount `mount | grep iso9660 | cut -f 1 -d ' '`
+ fi
+ eject -s `cat $TMP/SeTCDdev`
+ # Tell the user to remove the disc, if one had previously been mounted
+ # (it should now be ejected):
+ dialog \
+ --clear \
+ --title "Slackware Linux Setup is complete" "$@" \
+ --msgbox "\nPlease remove the installation disc.\n" 7 40
+ fi
+ # Offer to reboot or drop to shell:
+ dialog \
+ --title "Slackware Linux Setup is complete" "$@" \
+ --yesno \
+ "\nWould you like to reboot your system?\n\n\n\
+If you choose \"No\", you will be dropped to a shell.\n" 11 50
+ retval=$?
+ if [ $retval = 1 ]; then
+ clear
+ echo
+ echo "You may now reboot your system once you are ready."
+ echo "You can issue the 'reboot' command; or if your system has"
+ echo "a keyboard attached, you can use the key combination: control+alt+delete"
+ echo
+ else
+ touch /reboot
+ fi
+fi
+
+# Fix the date:
+/sbin/fixdate
+
+# final cleanup
+rm -f $TMP/tagfile $TMP/SeT* $TMP/tar-error $TMP/PKGTOOL_REMOVED
+rm -f /var/log/mount/treecache
+rmdir /var/log/mntiso 2>/dev/null
+rm -rf $TMP/treecache
+rm -rf $TMP/pkgcache
+rmdir ${T_PX}/tmp/orbit-root 2> /dev/null
+
+# If the OS had been installed and the user elected to reboot:
+if [ -f /reboot ]; then
+ clear
+ echo "** Starting reboot **"
+ sleep 1
+ reboot
+fi
+
+# end slackware setup script
diff --git a/source/installer/sources/initrd/usr/lib/setup/slackinstall b/source/installer/sources/initrd/usr/lib/setup/slackinstall
new file mode 100755
index 000000000..1d16abdea
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/slackinstall
@@ -0,0 +1,254 @@
+#!/bin/sh
+# Copyright 2003 Slackware Linux, Inc., Concord, CA USA
+# Copyright 2009 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.
+#
+
+# globals
+
+TMP=/var/log/setup/tmp
+
+# functions
+
+get_pkg () {
+ # Download a package from a remote server.
+ # $1 == package series
+ # $2 == package base name
+ # $3 == additional options to the downloader (like, '-v')
+ # REMOTESVR points to the root of the slackware tree, and is composed of
+ # comma-separated values (protocol://remote_ipaddr[:portnumber],remote_root)
+ # like this example: 'ftp://192.168.0.22,/pub/slackware-12.1'
+ local REMOTE_URL=$(echo $REMOTESVR | cut -d, -f1)
+ local REMOTE_ROOT=$(echo $REMOTESVR | cut -d, -f2)
+ PKGBASE=$(basename $(basename $(basename $(basename $2 .tgz) .tbz) .tlz) .txz)
+ local PKGSIZE=`cat \`cat $TMP/SeTDS\`/${1}/${PKGBASE}.size`
+ # So Pat does not get a seizure ;-)
+ #dialog --title "FTP/HTTP DOWNLOAD ==> series '$1' <==" --infobox \
+ # "Downloading ${2} ($PKGSIZE) ..." 3 72
+ mkdir -p `cat $TMP/SeTDS`/${1}
+ cat /dev/null > `cat $TMP/SeTDS`/${1}/${2}
+ cat /dev/null > `cat $TMP/SeTDS`/${1}/${PKGBASE}.txt
+ wget $3 -c -P `cat $TMP/SeTDS`/${1} \
+ $REMOTE_URL$REMOTE_ROOT/slackware/${1}/${PKGBASE}.txt
+ wget $3 -c -P `cat $TMP/SeTDS`/${1} \
+ $REMOTE_URL$REMOTE_ROOT/slackware/${1}/${2}
+ if [ $? -ne 0 ]; then # One retry for aborted transfers
+ wget $3 -c -P `cat $TMP/SeTDS`/${1} \
+ $REMOTE_URL$REMOTE_ROOT/slackware/${1}/${2}
+ fi
+ if [ $? -ne 0 ]; then
+ dialog --title "FTP/HTTP DOWNLOAD FAILURE" --msgbox \
+ "Downloading ${2} FAILED." 5 72
+ fi
+}
+
+zap_pkg () {
+ # Cleanup a download from a remote server.
+ # $1 == package series
+ # $2 == package name
+ PKGBASE=$(basename $(basename $(basename $(basename $2 .tgz) .tbz) .tlz) .txz)
+ cat /dev/null > `cat $TMP/SeTDS`/${1}/${2} # zero the local file
+ rm -f `cat $TMP/SeTDS`/${1}/${PKGBASE}.txt # remove the description file
+}
+
+updatetagfiles() {
+ if [ $MODE = newbie -o $MODE = full -o $MODE = terse ]; then
+ cat $TMP/series/series.in | while read series ; do
+ if [ -r $SRCPATH/$series/tagfile ]; then
+ mkdir -p $TMP/tagfiles/$series
+ cp -a $SRCPATH/$1/tagfile $TMP/tagfiles/$series
+ fi
+ done
+ elif [ $MODE = tagpath ]; then
+ cp -a `cat $TMP/SeTtagpath`/* $TMP/tagfiles
+ elif [ $MODE = custom ]; then
+ mkdir -p $TMP/tagfiles/$series
+ cp -a $SRCPATH/$series/tagfile`cat $TMP/SeTtagext` $TMP/tagfiles/$series/tagfile
+ elif [ $MODE = menu -o $MODE = expert ]; then
+ cat $TMP/series/series.in | while read series ; do
+ if [ $MODE = menu ]; then
+ if [ -r $SRCPATH/$series/maketag.ez ]; then
+ sh $SRCPATH/$series/maketag.ez
+ fi
+ else
+ if [ -r $SRCPATH/$series/maketag ]; then
+ sh $SRCPATH/$series/maketag
+ fi
+ fi
+ if [ -r $TMP/SeTnewtag ]; then
+ mkdir -p $TMP/tagfiles/$series
+ mv $TMP/SeTnewtag $TMP/tagfiles/$series/tagfile
+ fi
+ done
+ fi
+}
+
+errorcode() {
+ if [ $1 = 99 ]; then
+ # User aborted installation
+ exit 1
+ else
+ dialog --timeout 600 --title "installpkg error #$1" --msgbox \
+"There was a fatal error attempting to install $2. The package may \
+be corrupt, the installation media may be bad, one of the target \
+drives may be full, or something else \
+has caused the package to be unable to be read without error. You \
+may hit enter to continue if you wish, but if this is an important \
+required package then your installation may not work as-is." 11 70
+ fi
+}
+
+installseries() {
+ if [ -d $SRCPATH/$1 ]; then
+ # First, make sure our tagfiles are in order:
+ if [ ! -r $TMP/tagfiles/$1/tagfile -a ! $MODE = full -a ! $MODE = terse ]; then
+ updatetagfiles $1
+ fi
+ # First, make sure there's at least one package:
+ if ! ls $SRCPATH/$series/*.t?z 1> /dev/null 2> /dev/null ; then
+ return 1
+ fi
+ if [ "$MODE" = "terse" ]; then
+ echo " >> Installing package series $(echo $1 | tr [a-z] [A-Z])"
+ else
+ dialog --infobox "
+Installing package series ==>$1<==
+" 5 45
+ fi
+ sleep 1
+ # Install the package series:
+ for package in $SRCPATH/$series/*.t?z ; do
+ if [ "$MODE" = "full" ]; then # install the package
+ [ "x$REMOTESVR" != "x" ] && get_pkg $series $(basename $package) '-q'
+ installpkg -root $ROOTDIR -infobox -priority ADD $package
+ ERROR=$?
+ elif [ "$MODE" = "terse" ]; then # install the package with terse description
+ [ "x$REMOTESVR" != "x" ] && get_pkg $series $(basename $package) '-q'
+ installpkg -root $ROOTDIR -terse -priority ADD $package
+ ERROR=$?
+ else
+ if [ "x$REMOTESVR" != "x" ]; then
+ grep "^$(echo $(basename $package) | rev | cut -f4- -d '-' | rev):" \
+ $TMP/tagfiles/$1/tagfile | grep -qw SKP \
+ || get_pkg $series $(basename $package) '-q'
+ fi
+ installpkg -root $ROOTDIR -menu -tagfile $TMP/tagfiles/$1/tagfile $package
+ ERROR=$?
+ fi
+ if [ ! $ERROR = 0 ]; then
+ errorcode $ERROR $package
+ fi
+ [ "x$REMOTESVR" != "x" ] && zap_pkg $series $(basename $package)
+ done
+ # A "README_SPLIT.TXT" file means the series continues on another CD:
+ if [ -r $SRCPATH/$series/README_SPLIT.TXT -o -r $SRCPATH/$series/readme_split.txt ] ; then
+ # Defer until later.
+ echo $1 >> $TMP/series/series.out
+ fi
+ else # requested, but not on media. defer until later.
+ echo $1 >> $TMP/series/series.out
+ fi
+}
+
+remount_disc() {
+ umount $DEVICE 2> /dev/null
+ eject -s $DEVICE 2> /dev/null
+ dialog --title "INSERT NEXT DISC" --menu "Please insert the next Slackware disc and \
+press ENTER to continue installing packages." \
+10 62 2 \
+ "Continue" "Install packages from the next disc" \
+ "Quit" "Quit installing packages and finish up" 2> $TMP/reply
+ if [ ! $? = 0 ]; then
+ REPLY="Quit"
+ else
+ REPLY="`cat $TMP/reply`"
+ fi
+ rm -f $TMP/reply
+ if [ "$REPLY" = "Quit" ]; then
+ errorcode 99
+ fi;
+ # Recently, mounting has become unreliable at this point.
+ # Not sure if it's udev, or what, but we have seen
+ # mount: /dev/sr0: unknown device
+ # We will attempt to mount several times to attempt to make
+ # this less likely to fail.
+ for attempt in 1 2 3 4 5 6 7 8 9 10 11 ; do
+ mount $DEVICE $MOUNTPOINT 2> /dev/null
+ if [ $? = 0 ]; then
+ break
+ fi
+ sleep 7
+ done
+ if [ "$MODE" = "terse" ]; then
+ setterm -background cyan -foreground black -blank 0
+ fi
+}
+
+# /* main */
+
+# Process command line:
+if [ $# -gt 0 ]; then # there are arguments to the command
+ while [ $# -gt 0 ]; do
+ case "$1" in
+ "--promptmode")
+ MODE=`echo $2` ; shift 2 ;;
+ "--srcpath")
+ SRCPATH=`echo $2` ; shift 2 ;;
+ "--mountpoint")
+ MOUNTPOINT=`echo $2` ; shift 2 ;;
+ "--target")
+ ROOTDIR=`echo $2` ; shift 2 ;;
+ "--device")
+ DEVICE=`echo $2` ; shift 2 ;;
+ "--series")
+ SERIES=`echo $2` ; shift 2 ;;
+ "--net")
+ REMOTESVR=`echo $2` ; shift 2 ;;
+ *)
+ echo "Unrecognized option $1" ; shift 1 ;;
+ esac
+ done
+else
+ exit 1;
+fi
+# Empty out temporary directories:
+rm -rf $TMP/series $TMP/tagfiles
+mkdir -p $TMP/series $TMP/tagfiles
+# Create initial list of series to install:
+for series in `echo $SERIES | tr "#" " "` ; do
+ echo $series | tr A-Z a-z >> $TMP/series/series.in
+done
+# Main loop:
+while [ -r $TMP/series/series.in ]; do
+ cat $TMP/series/series.in | while read series ; do
+ installseries $series;
+ done
+ rm -f $TMP/series/series.in
+ if [ -r $TMP/series/series.out ]; then
+ mv $TMP/series/series.out $TMP/series/series.in
+ if [ "$DEVICE" = "noremount" ]; then
+ # we've done all we can here
+ break
+ else # see if there's anything we need on the next disc
+ remount_disc
+ fi
+ fi
+done
+
diff --git a/source/installer/sources/initrd/usr/lib/setup/unmigrate.sh b/source/installer/sources/initrd/usr/lib/setup/unmigrate.sh
new file mode 100755
index 000000000..fa374bcd6
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/unmigrate.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# This resets the temporary directory to /tmp on the floppy in the
+# case where it's been changed during a previous 'setup' run. This
+# should be done before $TMP is cleared.
+#
+
+TMPLINK="`LC_ALL=C /bin/ls -l /var/log/setup/tmp | tr -s ' ' | cut -f 11 -d ' '`"
+if [ -L /var/log/setup/tmp -a ! "$TMPLINK" = "/tmp" ]; then
+ ( cd /var/log/setup
+ rm tmp
+ ln -sf /tmp tmp )
+fi
diff --git a/source/installer/sources/initrd/usr/lib/terminfo b/source/installer/sources/initrd/usr/lib/terminfo
new file mode 120000
index 000000000..32e6eb76c
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/terminfo
@@ -0,0 +1 @@
+../share/terminfo \ No newline at end of file
diff --git a/source/installer/sources/initrd/usr/man/cat1 b/source/installer/sources/initrd/usr/man/cat1
new file mode 120000
index 000000000..f9f965ccf
--- /dev/null
+++ b/source/installer/sources/initrd/usr/man/cat1
@@ -0,0 +1 @@
+man1 \ No newline at end of file
diff --git a/source/installer/sources/initrd/usr/man/cat3 b/source/installer/sources/initrd/usr/man/cat3
new file mode 120000
index 000000000..66d2fdabb
--- /dev/null
+++ b/source/installer/sources/initrd/usr/man/cat3
@@ -0,0 +1 @@
+man3 \ No newline at end of file
diff --git a/source/installer/sources/initrd/usr/man/cat5 b/source/installer/sources/initrd/usr/man/cat5
new file mode 120000
index 000000000..619c11e24
--- /dev/null
+++ b/source/installer/sources/initrd/usr/man/cat5
@@ -0,0 +1 @@
+man5 \ No newline at end of file
diff --git a/source/installer/sources/initrd/usr/man/cat8 b/source/installer/sources/initrd/usr/man/cat8
new file mode 120000
index 000000000..80f21f85e
--- /dev/null
+++ b/source/installer/sources/initrd/usr/man/cat8
@@ -0,0 +1 @@
+man8 \ No newline at end of file
diff --git a/source/installer/sources/initrd/var/adm b/source/installer/sources/initrd/var/adm
new file mode 120000
index 000000000..fbf828d63
--- /dev/null
+++ b/source/installer/sources/initrd/var/adm
@@ -0,0 +1 @@
+log \ No newline at end of file
diff --git a/source/installer/sources/initrd/var/lib/tftpboot/pxelinux.0 b/source/installer/sources/initrd/var/lib/tftpboot/pxelinux.0
new file mode 100644
index 000000000..c82f91a8a
--- /dev/null
+++ b/source/installer/sources/initrd/var/lib/tftpboot/pxelinux.0
Binary files differ
diff --git a/source/installer/sources/initrd/var/lib/tftpboot/pxelinux.cfg/default b/source/installer/sources/initrd/var/lib/tftpboot/pxelinux.cfg/default
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/source/installer/sources/initrd/var/lib/tftpboot/pxelinux.cfg/default
diff --git a/source/installer/sources/initrd/var/lib/tftpboot/slackpxe.cfg b/source/installer/sources/initrd/var/lib/tftpboot/slackpxe.cfg
new file mode 100644
index 000000000..47e285b56
--- /dev/null
+++ b/source/installer/sources/initrd/var/lib/tftpboot/slackpxe.cfg
@@ -0,0 +1,3 @@
+REMOTE_URL=@REMOTE_URL@
+REMOTE_PATH=@REMOTE_PATH@
+
diff --git a/source/installer/sources/initrd/var/log/packages b/source/installer/sources/initrd/var/log/packages
new file mode 120000
index 000000000..89c9c896c
--- /dev/null
+++ b/source/installer/sources/initrd/var/log/packages
@@ -0,0 +1 @@
+/mnt/var/log/packages \ No newline at end of file
diff --git a/source/installer/sources/initrd/var/log/scripts b/source/installer/sources/initrd/var/log/scripts
new file mode 120000
index 000000000..5fc539add
--- /dev/null
+++ b/source/installer/sources/initrd/var/log/scripts
@@ -0,0 +1 @@
+/mnt/var/log/scripts \ No newline at end of file
diff --git a/source/installer/sources/initrd/var/log/setup/tmp b/source/installer/sources/initrd/var/log/setup/tmp
new file mode 120000
index 000000000..cad230910
--- /dev/null
+++ b/source/installer/sources/initrd/var/log/setup/tmp
@@ -0,0 +1 @@
+/tmp \ No newline at end of file
diff --git a/source/installer/sources/initrd/var/log/wtmp b/source/installer/sources/initrd/var/log/wtmp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/source/installer/sources/initrd/var/log/wtmp