diff options
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 |
commit | 6e00c56127b4fa2328e596ac18647fb7f27b674d (patch) | |
tree | d9cb5f96f79880fb29e1875aa169336346d94989 /source/installer/sources/initrd/usr | |
parent | ec4fd2d70a99a651f8498ce4c1ca8b38b9583c39 (diff) | |
download | current-6e00c56127b4fa2328e596ac18647fb7f27b674d.tar.gz |
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/initrd/usr')
43 files changed, 5056 insertions, 0 deletions
diff --git a/source/installer/sources/initrd/usr/bin/logger b/source/installer/sources/initrd/usr/bin/logger new file mode 100755 index 00000000..5aa97266 --- /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 00000000..7cfe33a2 --- /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 00000000..b40211eb --- /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 00000000..1c06d34e --- /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 00000000..e34076c0 --- /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 00000000..42610aa1 --- /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 00000000..a353daa4 --- /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 00000000..ae4aac88 --- /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 00000000..4423406b --- /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 00000000..04723159 --- /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 00000000..cc9b1711 --- /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 00000000..ce30cb2f --- /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 00000000..1bc7b15f --- /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 00000000..99c2ad93 --- /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 00000000..4f9d1057 --- /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 00000000..35ac5f9f --- /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 00000000..22ad2d9d --- /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 00000000..a8f25c47 --- /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 00000000..6731019b --- /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 00000000..d2e68b30 --- /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 00000000..bd32f319 --- /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 00000000..6aa3091b --- /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 00000000..e8ac9639 --- /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 00000000..18fba3af --- /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 00000000..65e05f4d --- /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 00000000..0caefa64 --- /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 00000000..1ac2cb0f --- /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 00000000..34819701 --- /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 00000000..967ffd2e --- /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 00000000..55c8a83b --- /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 00000000..3e46fb59 --- /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 00000000..f9eb52fc --- /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 00000000..8c1de44a --- /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 00000000..5214a0e7 --- /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 00000000..fb7831a3 --- /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 00000000..f30064a0 --- /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 00000000..1d16abde --- /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 00000000..fa374bcd --- /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 00000000..32e6eb76 --- /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 00000000..f9f965cc --- /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 00000000..66d2fdab --- /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 00000000..619c11e2 --- /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 00000000..80f21f85 --- /dev/null +++ b/source/installer/sources/initrd/usr/man/cat8 @@ -0,0 +1 @@ +man8
\ No newline at end of file |