summaryrefslogtreecommitdiffstats
path: root/source/a/pkgtools
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2009-08-26 10:00:38 -0500
committer Eric Hameleers <alien@slackware.com>2018-05-31 22:41:17 +0200
commit5a12e7c134274dba706667107d10d231517d3e05 (patch)
tree55718d5acb710fde798d9f38d0bbaf594ed4b296 /source/a/pkgtools
downloadcurrent-5a12e7c134274dba706667107d10d231517d3e05.tar.gz
current-5a12e7c134274dba706667107d10d231517d3e05.tar.xz
Slackware 13.0slackware-13.0
Wed Aug 26 10:00:38 CDT 2009 Slackware 13.0 x86_64 is released as stable! Thanks to everyone who helped make this release possible -- see the RELEASE_NOTES for the credits. The ISOs are off to the replicator. This time it will be a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. We're taking pre-orders now at store.slackware.com. Please consider picking up a copy to help support the project. Once again, thanks to the entire Slackware community for all the help testing and fixing things and offering suggestions during this development cycle. As always, have fun and enjoy! -P.
Diffstat (limited to 'source/a/pkgtools')
-rw-r--r--source/a/pkgtools/manpages/explodepkg.841
-rw-r--r--source/a/pkgtools/manpages/installpkg.891
-rw-r--r--source/a/pkgtools/manpages/makepkg.8135
-rw-r--r--source/a/pkgtools/manpages/pkgtool.895
-rw-r--r--source/a/pkgtools/manpages/removepkg.8108
-rw-r--r--source/a/pkgtools/manpages/setup.8-deprecated120
-rw-r--r--source/a/pkgtools/manpages/upgradepkg.898
-rw-r--r--source/a/pkgtools/obsolete-scripts/README5
-rw-r--r--source/a/pkgtools/obsolete-scripts/setup.90.modem-device44
-rwxr-xr-xsource/a/pkgtools/pkgtools.SlackBuild78
-rw-r--r--source/a/pkgtools/scripts/explodepkg97
-rw-r--r--source/a/pkgtools/scripts/installpkg568
-rw-r--r--source/a/pkgtools/scripts/makebootdisk444
-rw-r--r--source/a/pkgtools/scripts/makepkg347
-rw-r--r--source/a/pkgtools/scripts/pkgtool754
-rw-r--r--source/a/pkgtools/scripts/removepkg430
-rw-r--r--source/a/pkgtools/scripts/setup.70.install-kernel5
-rw-r--r--source/a/pkgtools/scripts/setup.80.make-bootdisk175
-rw-r--r--source/a/pkgtools/scripts/setup.htmlview33
-rw-r--r--source/a/pkgtools/scripts/setup.services287
-rw-r--r--source/a/pkgtools/scripts/upgradepkg387
-rw-r--r--source/a/pkgtools/slack-desc19
22 files changed, 4361 insertions, 0 deletions
diff --git a/source/a/pkgtools/manpages/explodepkg.8 b/source/a/pkgtools/manpages/explodepkg.8
new file mode 100644
index 000000000..3e11fddc8
--- /dev/null
+++ b/source/a/pkgtools/manpages/explodepkg.8
@@ -0,0 +1,41 @@
+.\" -*- nroff -*-
+.ds g \" empty
+.ds G \" empty
+.\" Like TP, but if specified indent is more than half
+.\" the current line-length - indent, use the default indent.
+.de Tp
+.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
+.el .TP "\\$1"
+..
+.TH EXPLODEPKG 8 "21 May 1994" "Slackware Version 2.0.0"
+.SH NAME
+explodepkg \- Extract the contents of a tar+compression package (such as a Slackware
+software package) in the current directory.
+.SH SYNOPSIS
+.B explodepkg
+.BI package
+.BI [
+.BI package2,
+.BI package3,
+.BI ...
+.BI ]
+.SH DESCRIPTION
+.B explodepkg
+uncompresses and untars Slackware *.tgz (or .tbz, .tlz, .txz) packages (or any archive
+that was created by
+compressing a tarfile with one of the supported compression utilities) in the current directory. It is not usually
+used to install packages, since it doesn't execute the installation scripts
+in ./install or ./var/log/setup. The primary use for
+.B explodepkg
+is in package maintenance - exploding a package in a subdirectory, making fixes
+to it or upgrading the software, and then building the updated package with
+.B makepkg.
+.SH AUTHOR
+Patrick J. Volkerding <volkerdi@slackware.com>
+.SH "SEE ALSO"
+.BR tar(1),
+.BR gzip(1),
+.BR installpkg(8),
+.BR makepkg(8),
+.BR pkgtool(8),
+.BR upgradepkg(8)
diff --git a/source/a/pkgtools/manpages/installpkg.8 b/source/a/pkgtools/manpages/installpkg.8
new file mode 100644
index 000000000..2d77f10e7
--- /dev/null
+++ b/source/a/pkgtools/manpages/installpkg.8
@@ -0,0 +1,91 @@
+.\" -*- nroff -*-
+.ds g \" empty
+.ds G \" empty
+.\" Like TP, but if specified indent is more than half
+.\" the current line-length - indent, use the default indent.
+.de Tp
+.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
+.el .TP "\\$1"
+..
+.TH INSTALLPKG 8 "22 Nov 2001" "Slackware Version 8.1.0"
+.SH NAME
+installpkg \- install Slackware packages.
+.SH SYNOPSIS
+.B installpkg
+[
+.B \--warn
+]
+[
+.B \--md5sum
+]
+[
+.B \--root /otherroot
+]
+[
+.B \--infobox
+]
+[
+.B \--menu
+]
+[
+.B \--ask
+]
+[
+.B \--priority ADD|REC|OPT|SKP
+]
+[
+.B \--tagfile /somedir/tagfile
+]
+.BI packagename
+[
+.B packagename2 ...
+]
+.SH DESCRIPTION
+.B installpkg
+installs single or multiple *.tgz (or .tbz, .tlz, .txz) binary packages designed
+for use with the Slackware Linux distribution onto your system.
+.SH OPTIONS
+.TP
+.B \--warn packagename
+Generate a report to the standard output about which files and directories
+would be removed or overwritten if you install the package, but do not
+actually install it.
+.TP
+.B \--md5sum packagename
+Record the package md5sum in the metadata written in /var/log/packages.
+.TP
+.B \--root /otherroot
+Install using a location other than / (the default) as the root of the
+filesystem to install on. In the example given, use /otherroot instead. Setting
+the ROOT environment variable does the same thing.
+.TP
+.B \--infobox
+Use /bin/dialog to display an informational dialog as the package is installed.
+Primarily used when installpkg is called from other scripts.
+.TP
+.B \--menu
+Use /bin/dialog to display a menu asking the user if they would like to install the
+package(s) or not. Generally used when installpkg is called from other scripts.
+.TP
+.B \--ask
+Used with -menu mode. When selected, always ask if a package should be
+installed regardless of what the package's priority is.
+.TP
+.B \--priority ADD|REC|OPT|SKP
+When installing with the \-menu option, package priority levels (found in the file
+"tagfile" in the package directory) are used to automatically install (ADD) or
+skip (SKP) a package, or to suggest recommended (REC) or optional (OPT) to the user
+if a menu is displayed. If a priority is set on the command line, it will override
+the values set in the tagfile for the entire package list.
+.TP
+.B \--tagfile /somedir/tagfile
+Specify a different file to use for package priorities (in this example, /somedir/tagfile
+will be used). The default is "tagfile" in the package's directory.
+.SH AUTHOR
+Patrick J. Volkerding <volkerdi@slackware.com>
+.SH "SEE ALSO"
+.BR makepkg(8),
+.BR removepkg(8),
+.BR explodepkg(8),
+.BR pkgtool(8),
+.BR upgradepkg(8)
diff --git a/source/a/pkgtools/manpages/makepkg.8 b/source/a/pkgtools/manpages/makepkg.8
new file mode 100644
index 000000000..b280ce51f
--- /dev/null
+++ b/source/a/pkgtools/manpages/makepkg.8
@@ -0,0 +1,135 @@
+.\" -*- nroff -*-
+.ds g \" empty
+.ds G \" empty
+.\" Like TP, but if specified indent is more than half
+.\" the current line-length - indent, use the default indent.
+.de Tp
+.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
+.el .TP "\\$1"
+..
+.TH MAKEPKG 8 "21 May 1994" "Slackware Version 2.0.0"
+.SH NAME
+makepkg \- make Slackware packages.
+.SH SYNOPSIS
+.B makepkg
+[
+.B -l, --linkadd y|n
+]
+[
+.B -c, --chown y|n
+]
+.BI packagename
+.SH DESCRIPTION
+.B makepkg
+creates a new Slackware compatible package.
+The package is constructed using the contents of the current directory and
+all subdirectories. If symbolic links exist, they will be converted to script
+code to recreate them when the package is installed. This code will be
+appended to the primary installation script
+.B ( install/doinst.sh )
+, or, if that script does not exist it will be created with those contents.
+The package will be written out to the file
+.BI packagename
+which should be the full name, including the extension. This is usually .tgz,
+but .tbz, .tlz, and .txz are also accepted. The proper compression utility
+(gzip, bzip2, lzma, or xz) needs to be installed on the machine.
+.SH OPTIONS
+.TP
+.B \-l, --linkadd y|n
+If y, add any symbolic links found to the install script (doinst.sh) and
+delete them. This is the recommended action. If this option is not used,
+makepkg will prompt if symbolic links are found.
+.TP
+.B \-p, --prepend
+If this option is given, then any symbolic links added to doinst.sh will be
+prepended to the existing script. This is useful for packages that contain
+shared libraries that need to be linked first because programs will use them
+later in the doinst.sh script.
+.TP
+.B \-c, --chown y|n
+If y, makepkg will reset all directory permissions to 755 and ownership to root:root.
+In general, you should have the permissions and ownerships worked out yourself, so
+relying on setting this option to y is somewhat sloppy. It is not the default. If an
+option is not provided, makepkg will prompt.
+.SH INSTALLATION SCRIPTS
+There are 3 types of installation scripts supported in the Slackware package
+system.
+.TP
+The first is the
+.B primary
+installation script. This is found in the subdirectory
+.B ./install
+and must have the name
+.B doinst.sh
+in order to be recognized. This ( and other install scripts ) should be written
+using the basic Bourne shell syntax recognized by the
+.B ash
+shell, since this is the shell that will be used to execute the script when
+installing from a Slackware install floppy. This is a common trap - beware of
+using
+.B bash
+syntax extensions, because the script will work fine when installed from the
+hard drive, but will bomb out when installed from floppy. If the package is
+for personal use, this isn't a problem. Be careful, though, if you plan to
+share your package with other users. The
+.B primary installation script
+is executed immediately after the package is installed with
+.B installpkg, pkgtool,
+or
+.B setup.
+.TP
+The second type of script is the
+.B configuration
+script. This is found in the subdirectory
+.B ./var/log/setup
+and must have a name that starts with
+.B setup.
+in order to be recongnized. An example is the timezone script:
+.B /var/log/setup/setup.timeconfig.
+These scripts are executed during the
+.B CONFIGURE
+phase of
+.B setup,
+and are re-executed each time the user runs the
+.B CONFIGURE
+option from
+.B setup
+from then on.
+Typically, the user will go through this phase of setup following the
+installation of all the packages. Anything that needs to be interactive
+should go in one of these scripts to avoid halting the package installation
+process during
+.B setup.
+.TP
+The third type of script is the
+.B onlyonce
+script. Like the name suggests, these are executed only once after the package
+is installed, in contrast to the standard
+.B configuration
+script. These scripts are also found in the
+.B ./var/log/setup
+directory and must have a name that starts with
+.B setup.,
+but in addition the name must contain the string
+.B onlyonce.
+An example might be a script with the name
+.B /var/log/setup/setup.onlyonce.testscript
+.SH PACKAGE FORMAT
+.B makepkg
+uses GNU tar plus GNU gzip to create its packages. A simple way to
+extract the contents of a package (without executing the installation
+scripts, of course) is to use a command like this:
+.TP
+explodepkg package.tgz
+.TP
+Or, something like this:
+.TP
+gzip -dc package.tgz | tar xvvf -
+.SH AUTHOR
+Patrick J. Volkerding <volkerdi@slackware.com>
+.SH "SEE ALSO"
+.BR installpkg(8),
+.BR explodepkg(8),
+.BR removepkg(8),
+.BR pkgtool(8),
+.BR upgradepkg(8)
diff --git a/source/a/pkgtools/manpages/pkgtool.8 b/source/a/pkgtools/manpages/pkgtool.8
new file mode 100644
index 000000000..56e392176
--- /dev/null
+++ b/source/a/pkgtools/manpages/pkgtool.8
@@ -0,0 +1,95 @@
+.\" -*- nroff -*-
+.ds g \" empty
+.ds G \" empty
+.\" Like TP, but if specified indent is more than half
+.\" the current line-length - indent, use the default indent.
+.de Tp
+.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
+.el .TP "\\$1"
+..
+.TH PKGTOOL 8 "24 Nov 1995" "Slackware Version 3.1.0"
+.SH NAME
+pkgtool \- software package maintenance tool.
+.SH SYNOPSIS
+.B pkgtool
+.LP
+.B pkgtool
+[
+.B --sets #a#b#c#
+]
+[
+.B --source_mounted
+]
+[
+.B --ignore_tagfiles
+]
+[
+.B --tagfile tagfile
+]
+[
+.B --source_dir directory
+]
+[
+.B --target_dir directory
+]
+[
+.B --source_device device
+]
+.SH DESCRIPTION
+.B pkgtool
+is a menu-driven package maintenance tool provided with the Slackware Linux
+distribution. It allows the user to install, remove, or view
+software packages through an interactive
+system. Pkgtool can also be used to re-run the menu-driven scripts normally
+executed at the end of a Slackware installation. This is useful for doing
+basic reconfiguration (like changing the mouse type).
+.SH OPTIONS
+Most users will not want to use any options when running
+.B pkgtool.
+These are generally used only when
+.B pkgtool
+is run during the initial system installation.
+Feel free to try them, but be careful.
+.TP
+.B \--sets #A#B#C#
+Install the disk sets A, B, C. Seperate the disk set names by '#' symbols.
+.TP
+.B \--source_mounted
+When this flag is present,
+.B pkgtool
+will not attempt to unmount and remount the source device with each disk.
+.TP
+.B \--ignore_tagfiles
+When this flag is present,
+.B pkgtool
+will install every package encountered no matter what the tagfiles say.
+.TP
+.B \--tagfile tagfile
+This flag is used to specify from the command line which tagfile should be
+used for the installation.
+.TP
+.B \--source_dir directory
+Used when installing multiple packages from disk sets. This is the directory
+in which the subdirectories for each disk are found. This isn't used when
+installing from floppy.
+.TP
+.B \--target_dir directory
+The directory where the target root directory is located. This is '/' when
+installing on the hard drive, or typically '/mnt' when installing from an
+install disk.
+.TP
+.B \--source_device device
+The source device to install from. This is not used if you've provided the
+.B \--source_mounted
+flag. It's usually used when installing from floppy, as in:
+ \--source_device /dev/fd0u1440
+or
+ \--source_device /dev/fd1h1200.
+.SH AUTHOR
+Patrick J. Volkerding <volkerdi@slackware.com>
+.SH "SEE ALSO"
+.BR makepkg(8),
+.BR explodepkg(8),
+.BR installpkg(8),
+.BR removepkg(8),
+.BR upgradepkg(8)
diff --git a/source/a/pkgtools/manpages/removepkg.8 b/source/a/pkgtools/manpages/removepkg.8
new file mode 100644
index 000000000..3bd8bf7a7
--- /dev/null
+++ b/source/a/pkgtools/manpages/removepkg.8
@@ -0,0 +1,108 @@
+.\" -*- nroff -*-
+.ds g \" empty
+.ds G \" empty
+.\" Like TP, but if specified indent is more than half
+.\" the current line-length - indent, use the default indent.
+.de Tp
+.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
+.el .TP "\\$1"
+..
+.TH REMOVEPKG 8 "23 Nov 2001" "Slackware Version 8.1.0"
+.SH NAME
+removepkg \- remove Slackware packages.
+.SH SYNOPSIS
+.B removepkg
+.BI packagename
+.LP
+[
+.B ROOT=/mnt
+]
+.B removepkg
+[
+.B \-copy
+]
+[
+.B \-keep
+]
+[
+.B \-preserve
+]
+[
+.B \-warn
+]
+.BI packagename
+.SH DESCRIPTION
+.B removepkg
+removes a previously installed Slackware package, while writing a progress
+report to the standard output. A package may be specified either by the
+full package name (as you'd see listed in /var/log/packages/), or by the
+base package name. For example, the package foo-1.0-i486-1.tgz may be removed
+with any of the following commands:
+
+removepkg foo-1.0-i486-1.tgz (also recognized: .tbz, .tlz, .txz)
+
+removepkg foo-1.0-i486-1
+
+removepkg foo.tgz
+
+removepkg foo
+
+When deleting files,
+.B removepkg
+will analyze the contents of the other packages installed on your system, and
+will only delete the files that are unique to the package being removed.
+Similarly, the installation scripts for all the other packages will be
+considered when deciding whether or not to delete symbolic links from the
+package.
+.LP
+Removing a package (as well as installing one) can be a dangerous undertaking.
+For this reason, there is the
+.B \-warn
+option available. When you use this,
+.B removepkg
+will not actually remove any files or links, but will output a detailed report
+of what it would do if you actually did remove the package. It's suggested that
+you do this (and maybe pipe the output to
+.B less
+) before removing packages to make sure you've backed up anything that might
+be important.
+.LP
+When removing a package, it's original file index will be moved from
+/var/log/packages to /var/log/removed_packages. Likewise, it's installation
+script will be moved from /var/log/scripts to /var/log/removed_scripts.
+.SH OPTIONS
+.TP
+.B \-warn packagename
+Generate a report to the standard output about which files and directories
+would be removed, but does not actually remove the package.
+.TP
+.B \-preserve packagename
+If specified, the complete package subtree is reconstructed in
+/var/log/setup/tmp/preserved_packages/packagename.
+.TP
+.B \-copy packagename
+Construct a copy of the package under /var/log/setup/tmp/preserved_packages/packagename,
+but don't remove it. (same effect as \-warn \-preserve)
+.TP
+.B \-keep
+Save the intermediate files created by removepkg (delete_list,
+required_files, uniq_list, del_link_list, required_links,
+required_list). Mostly useful for debugging purposes.
+.SH " "
+It's possible to remove a package from a filesystem
+other than / by supplying
+.B removepkg
+with a
+.B ROOT
+environment variable:
+.TP
+.B ROOT=/mnt removepkg package
+
+.SH AUTHORS
+Patrick J. Volkerding <volkerdi@slackware.com>,
+with enhancements by Christian Franke <c.franke@acm.org>
+.SH "SEE ALSO"
+.BR installpkg(8),
+.BR makepkg(8),
+.BR pkgtool(8),
+.BR upgradepkg(8)
diff --git a/source/a/pkgtools/manpages/setup.8-deprecated b/source/a/pkgtools/manpages/setup.8-deprecated
new file mode 100644
index 000000000..533974222
--- /dev/null
+++ b/source/a/pkgtools/manpages/setup.8-deprecated
@@ -0,0 +1,120 @@
+.\" -*- nroff -*-
+.ds g \" empty
+.ds G \" empty
+.\" Like TP, but if specified indent is more than half
+.\" the current line-length - indent, use the default indent.
+.de Tp
+.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
+.el .TP "\\$1"
+..
+.TH SETUP 8 "21 May 1994" "Slackware Version 2.0.0"
+.SH NAME
+setup \- Slackware system setup tool.
+.SH SYNOPSIS
+.B setup
+.LP
+.SH DESCRIPTION
+.B setup
+is the system installation and setup tool provided with the Slackware Linux
+distribution.
+.LP
+.B setup
+is usually used to install software packages from your hard drive, a CD,
+NFS, or floppy disks. It is also a frontend for
+.B pkgtool
+and many configuration scripts that come with various packages, such as the
+scripts which allow you to install LILO, configure your timezone, set your
+keyboard fonts, make bootdisks, and many other tasks.
+.SH OPTIONS
+.TP
+.B HELP
+Read the
+.B setup
+help file.
+.TP
+.B KEYMAP
+Change your keyboard map to one of many international and specialized keymaps
+available.
+.B NOTE:
+This change will not become permanent unless you go through the
+.B CONFIGURE option.
+.TP
+.B MAKE TAGS
+This allows you to write out custom tagfiles. A
+.B tagfile
+is a list of package names followed by one of these tags:
+.B ADD
+(required),
+.B SKP
+(skip),
+.B REC
+(recommended) or,
+.B OPT
+(optional). These allow you to completely automate your software installation.
+You can either put these files on the first disk of each disk series
+(optionally using a custom 3 character extension), or in a custom location
+altogether, such as on a floppy disk in ./a1, ./ap1, ./d1, ..., directories.
+The format of a line in a
+.B tagfile
+is like this:
+.LP
+package:
+.B TAG
+.TP
+.B SOURCE
+Select your source media, such as hard disk, NFS, CD, or floppy. You should
+select installation from a directory if your CD or NFS directory has already
+been mounted, as it probably is if you're using
+.B setup
+on your hard drive.
+.TP
+.B TARGET
+Select your target directory. For testing purposes, you may install the
+packages to a directory other than '/'. Don't expect them to run from there,
+though.
+.TP
+.B DISK SETS
+Select the disk sets you want to install. You can also install custom disk
+sets by tagging the
+.B CUS
+selection. The disk sets must be Slackware-like: they require the diskxxx?
+index on each disk, such as diskxyz1 for the first disk of the XYZ series.
+On the last disk there must be a file called
+.B install.end
+to signal the end of the disk series.
+.TP
+.B INSTALL
+Once you've gone through
+.B SOURCE
+and
+.B DISK SETS
+( and possibly
+.B TARGET
+), then you select this choice to go on with the software installation. You'll
+be asked what type of tagfiles you want to use and then
+.B pkgtool
+will be called to install the software.
+.TP
+.B CONFIGURE
+This option runs through several scripts that configure various aspects of your
+Linux system. These might include LILO installation, timezone configuration,
+and other things.
+.TP
+.B PKGTOOL
+This option calls the
+.B pkgtool(8)
+utility for you.
+.TP
+.B EXIT
+Exit the
+.B setup
+program.
+.SH AUTHOR
+Patrick J. Volkerding <volkerdi@slackware.com>
+.SH "SEE ALSO"
+.BR makepkg(8),
+.BR installpkg(8),
+.BR explodepkg(8),
+.BR removepkg(8),
+.BR pkgtool(8),
+.BR upgradepkg(8)
diff --git a/source/a/pkgtools/manpages/upgradepkg.8 b/source/a/pkgtools/manpages/upgradepkg.8
new file mode 100644
index 000000000..8ca7811ba
--- /dev/null
+++ b/source/a/pkgtools/manpages/upgradepkg.8
@@ -0,0 +1,98 @@
+.\" -*- nroff -*-
+.ds g \" empty
+.ds G \" empty
+.\" Like TP, but if specified indent is more than half
+.\" the current line-length - indent, use the default indent.
+.de Tp
+.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
+.el .TP "\\$1"
+..
+.TH UPGRADEPKG 8 "31 May 2002" "Slackware Version 8.1.0"
+.SH NAME
+upgradepkg \- upgrade Slackware packages.
+.SH SYNOPSIS
+.B upgradepkg
+[
+.B --dry-run
+]
+[
+.B --install-new
+]
+[
+.B --reinstall
+]
+[
+.B --verbose
+]
+.BI newpackagename
+.BI [ newpackagename2 ]
+.LP
+.B upgradepkg
+[
+.B --dry-run
+]
+[
+.B --install-new
+]
+[
+.B --reinstall
+]
+[
+.B --verbose
+]
+.BI oldpackagename%newpackagename
+.BI [ old2%new2 ]
+.SH DESCRIPTION
+.B upgradepkg
+upgrades a Slackware package from an older version to a
+newer one. It does this by
+.B INSTALLING
+the new package onto the system, and then
+.B REMOVING
+any files from the old package that aren't in the new package.
+If the old and new packages have the same name, a single argument is all that
+is required. If the packages have different names, supply the name of the
+old package followed by a percent symbol (%), then the name of the new package.
+Do not add any extra whitespace between pairs of old/new package names.
+
+If upgradepkg finds more than one installed package matching the old package's
+name, it will remove them all.
+.TP
+To upgrade in a directory other than / (such as /mnt):
+.TP
+ROOT=/mnt upgradepkg package.tgz (or .tbz, .tlz, .txz)
+.SH OPTIONS
+.TP
+.B \--dry-run
+Output a report about which packages would be installed or upgraded
+but don't actually perform the upgrades.
+.TP
+.B \--install-new
+Normally upgradepkg only upgrades packages that are already installed on the system, and
+will skip any packages that do not already have a version installed.
+If
+.B --install-new
+is specified, the behavior is modified to install new packages in addition to upgrading
+existing ones.
+.TP
+.B \--reinstall
+Upgradepkg usually skips packages if the exact same package
+(matching name, version, arch, and build number) is already installed on the system.
+Use the --reinstall option if you want to upgrade all packages even if the same
+version is already installed.
+.TP
+.B \--verbose
+Show all the gory details of the upgrade.
+.SH BUGS
+Before upgrading a package, save any configuration files (such as in /etc)
+that you wish to keep. Sometimes these will be preserved, but it depends on
+the package structure. If you want to force new versions of the config files
+to be installed, remove the old ones manually prior to running upgradepkg.
+.SH AUTHOR
+Patrick J. Volkerding <volkerdi@slackware.com>
+.SH "SEE ALSO"
+.BR makepkg(8),
+.BR installpkg(8),
+.BR removepkg(8),
+.BR explodepkg(8),
+.BR pkgtool(8)
diff --git a/source/a/pkgtools/obsolete-scripts/README b/source/a/pkgtools/obsolete-scripts/README
new file mode 100644
index 000000000..3e0060de1
--- /dev/null
+++ b/source/a/pkgtools/obsolete-scripts/README
@@ -0,0 +1,5 @@
+This directory contains retired installation scripts.
+
+setup.90.modem-device is obsolete since udev will overwrite any
+existing devices or links in /dev.
+
diff --git a/source/a/pkgtools/obsolete-scripts/setup.90.modem-device b/source/a/pkgtools/obsolete-scripts/setup.90.modem-device
new file mode 100644
index 000000000..a1c5993af
--- /dev/null
+++ b/source/a/pkgtools/obsolete-scripts/setup.90.modem-device
@@ -0,0 +1,44 @@
+#!/bin/sh
+#BLURB="Select modem device"
+TMP=/var/log/setup/tmp
+T_PX="$1"
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+
+dialog --title "MODEM CONFIGURATION" --menu "This part of the configuration \
+process will create a /dev/modem link pointing to the callout device (ttyS0, \
+ttyS1, ttyS2, ttyS3) representing your default modem. You \
+can change this link \
+later if you move your modem to a different port. If your modem is a PCI card, \
+it will probably use /dev/ttyS4 or higher. \
+Please select the callout \
+device which you would like to use for your modem:" 22 68 9 \
+"no modem" "do not set a /dev/modem link" \
+"/dev/ttyS0" "(COM1: under DOS)" \
+"/dev/ttyS1" "(COM2: under DOS)" \
+"/dev/ttyS2" "(COM3: under DOS)" \
+"/dev/ttyS3" "(COM4: under DOS)" \
+"/dev/ttyS4" "PCI modem" \
+"/dev/ttyS5" "PCI modem" \
+"/dev/ttyS6" "PCI modem" \
+"/dev/ttyS7" "PCI modem" \
+"/dev/ttyS8" "PCI modem" \
+"/dev/ttyS9" "PCI modem" \
+"/dev/ttyS10" "PCI modem" \
+"/dev/ttyS11" "PCI modem" \
+"/dev/ttyS12" "PCI modem" \
+"/dev/ttyS13" "PCI modem" \
+"/dev/ttyS14" "PCI modem" \
+"/dev/ttyS15" "PCI modem" \
+2> $TMP/callout
+
+if [ $? = 0 ]; then
+ MODEM_DEVICE="`cat $TMP/callout`"
+ if [ ! "$MODEM_DEVICE" = "no modem" ]; then
+ MODEM_DEVICE=`basename $MODEM_DEVICE`
+ ( cd $T_PX/dev ; ln -sf $MODEM_DEVICE modem )
+ fi
+fi
+rm -f $TMP/callout
+
diff --git a/source/a/pkgtools/pkgtools.SlackBuild b/source/a/pkgtools/pkgtools.SlackBuild
new file mode 100755
index 000000000..da70e19f0
--- /dev/null
+++ b/source/a/pkgtools/pkgtools.SlackBuild
@@ -0,0 +1,78 @@
+#!/bin/sh
+# Copyright 2005, 2006, 2007, 2008, 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.
+
+# Set initial variables:
+CWD=`pwd`
+if [ "$TMP" = "" ]; then
+ TMP=/tmp
+fi
+PKG=$TMP/package-pkgtools
+
+# *** UPDATE THESE WITH EACH BUILD:
+VERSION=13.0
+ARCH=${ARCH:-noarch}
+BUILD=3
+
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP # location to build the source
+fi
+rm -rf $PKG
+mkdir -p $PKG
+
+# Install Slackware script manpages:
+( cd $CWD/manpages
+ mkdir -p $PKG/usr/man/man8
+ for page in explodepkg.8 installpkg.8 makepkg.8 upgradepkg.8 pkgtool.8 \
+ removepkg.8 ; do
+ cat $page | gzip -9c > $PKG/usr/man/man8/$page.gz
+ done
+)
+
+# Install Slackware scripts:
+( cd $CWD/scripts
+ # Install the core Slackware package tools:
+ mkdir -p $PKG/sbin
+ for file in explodepkg installpkg makebootdisk makepkg pkgtool removepkg upgradepkg ; do
+ cp -a $CWD/scripts/$file $PKG/sbin
+ done
+ chown root:root $PKG/sbin/*
+ chmod 755 $PKG/sbin/*
+ # These scripts are used during the installation:
+ mkdir -p $PKG/var/log/setup/tmp
+ chmod 700 $PKG/var/log/setup/tmp
+ for file in setup.* ; do
+ cp -a $file $PKG/var/log/setup
+ done
+ chown root:root $PKG/var/log/setup/setup.*
+ chmod 755 $PKG/var/log/setup/setup.*
+)
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+# Build the package:
+cd $PKG
+makepkg -l y -c n $TMP/pkgtools-$VERSION-$ARCH-$BUILD.tgz
+
+echo
+echo "HEY -- did you remember to update the version numbers in the setup scripts?"
+echo
+
diff --git a/source/a/pkgtools/scripts/explodepkg b/source/a/pkgtools/scripts/explodepkg
new file mode 100644
index 000000000..a113b085d
--- /dev/null
+++ b/source/a/pkgtools/scripts/explodepkg
@@ -0,0 +1,97 @@
+#!/bin/sh
+# Copyright 1994, 1998, 2000 Patrick Volkerding, Concord, CA, USA
+# Copyright 2001, 2003 Slackware Linux, Inc., Concord, CA, USA
+# Copyright 2007, 2009 Patrick Volkerding, Sebeka, MN, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+TAR=tar-1.13
+$TAR --help 1> /dev/null 2> /dev/null
+if [ ! $? = 0 ]; then
+ TAR=tar
+fi
+if [ ! "`LC_MESSAGES=C $TAR --version`" = "tar (GNU tar) 1.13
+
+Copyright (C) 1988, 92,93,94,95,96,97,98, 1999 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Written by John Gilmore and Jay Fenlason." ]; then
+ echo "WARNING: pkgtools are unstable with tar > 1.13."
+ echo " You should provide a \"tar-1.13\" in your \$PATH."
+ sleep 5
+fi
+
+if [ $# = 0 ]; then
+ cat << EOF
+Usage: explodepkg package_name [package_name2, ...]
+
+Explodes a Slackware compatible software package
+(or any tar+{gzip,bzip2,lzma,xz archive) in the current directory.
+Equivalent to (for each package listed):
+
+ ( umask 000 ; cat package_name | COMPRESSOR -dc | tar xzvf package_name )
+
+Note: This should only be used for debugging or examining packages, not for
+installing them. It doesn't execute installation scripts or update the package
+indexes in /var/log/packages and /var/log/scripts.
+
+EOF
+fi
+
+# Main loop:
+for PKG in $* ; do
+ echo "Exploding package $PKG in current directory:"
+ # Determine extension:
+ packageext="$( echo $PKG | rev | cut -f 1 -d . | rev)"
+ # Determine compression utility:
+ case $packageext in
+ 'tgz' )
+ packagecompression=gzip
+ ;;
+ 'gz' )
+ packagecompression=gzip
+ ;;
+ 'tbz' )
+ packagecompression=bzip2
+ ;;
+ 'bz2' )
+ packagecompression=bzip2
+ ;;
+ 'tlz' )
+ packagecompression=lzma
+ ;;
+ 'lzma' )
+ packagecompression=lzma
+ ;;
+ 'txz' )
+ packagecompression=xz
+ ;;
+ 'xz' )
+ packagecompression=xz
+ ;;
+ esac
+ ( umask 000 ; cat $PKG | $packagecompression -dc | $TAR xvf - 2> /dev/null )
+ if [ -r install/doinst.sh ]; then
+ echo
+ echo "An installation script was detected in ./install/doinst.sh, but"
+ echo "was not executed."
+ fi
+done
+
diff --git a/source/a/pkgtools/scripts/installpkg b/source/a/pkgtools/scripts/installpkg
new file mode 100644
index 000000000..31bb0b717
--- /dev/null
+++ b/source/a/pkgtools/scripts/installpkg
@@ -0,0 +1,568 @@
+#!/bin/sh
+# Copyright 1994, 1998, 2000 Patrick Volkerding, Concord, CA, USA
+# Copyright 2001, 2003 Slackware Linux, Inc., Concord, CA, USA
+# Copyright 2007, 2009 Patrick Volkerding, Sebeka, MN, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Sat Apr 25 21:18:53 UTC 2009
+# Converted to use new pkgbase() function to remove pathname and
+# valid package extensions.
+#
+# Sat Apr 4 22:58:06 CDT 2009
+# Support additional compression formats if the supporting utilities exist:
+# .tbz - bzip2
+# .tlz - lzma
+# .txz - xz (also LZMA)
+# And of course, .tgz (gzip) is not going anywhere. :-) <volkerdi>
+# Add command switches to determine the uncompressed package size even if
+# that will slow things down, and to add the package's md5sum to the
+# metadata stored in /var/log/packages/.
+#
+# Fri Dec 21 17:21:35 CST 2007
+# Added a patch from Johnny Morano to work around package removal issues
+# caused by packages that do not comply with FHS combined with a grep
+# regex error in installpkg. Any package with a single-letter top-
+# level directory could not be removed.
+#
+# Shortened some of the top-line dialog output to avoid overflowing the
+# textbox (needed as some of the packages, especially in X, have very
+# long base package names now). <pjv>
+#
+# Sun Nov 26 12:38:25 CST 1995
+# Added patch from Glenn Moloney <glenn@physics.unimelb.edu.au> to allow
+# packages to be installed to directories other than /.
+#
+# Wed Mar 18 15:15:51 CST 1998
+# Changed $TMP directory to /var/log/setup/tmp, and chmod'ed it 700 to close
+# some security holes.
+
+# 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
+}
+
+# If installpkg encounters a problem, it will return a non-zero error code.
+# If it finds more than one problem (i.e. with a list of packages) you'll only
+# hear about the most recent one. :)
+# 1 = tar returned error code
+# 2 = corrupt compression envelope
+# 3 = does not end in .tgz
+# 4 = no such file
+# 5 = external compression utility missing
+# 99 = user abort from menu mode
+EXITSTATUS=0
+
+# Do not store md5sums by default:
+MD5SUM=0
+
+# So that we know what to expect...
+umask 022
+TAR=tar-1.13
+$TAR --help 1> /dev/null 2> /dev/null
+if [ ! $? = 0 ]; then
+ TAR=tar
+fi
+if [ ! "$(LC_MESSAGES=C $TAR --version)" = "tar (GNU tar) 1.13
+
+Copyright (C) 1988, 92,93,94,95,96,97,98, 1999 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Written by John Gilmore and Jay Fenlason." ]; then
+ echo "WARNING: pkgtools are unstable with tar > 1.13."
+ echo " You should provide a \"tar-1.13\" in your \$PATH."
+ sleep 5
+fi
+
+usage() {
+ cat << EOF
+Usage: installpkg [options] <package_filename>
+
+Installpkg is used to install a .t{gz,bz,lz,xz} package like this:
+ installpkg slackware-package-1.0.0-i486-1.tgz (or .tbz, .tlz, .txz)
+
+options: --warn (warn if files will be overwritten, but do not install)
+ --root /mnt (install someplace else, like /mnt)
+ --infobox (use dialog to draw an info box)
+ --menu (confirm package installation with a menu, unless
+ the priority is [required] or ADD)
+ --ask (used with menu mode: always ask if a package should be
+ installed regardless of what the package's priority is)
+ --priority ADD|REC|OPT|SKP (provide a priority for the entire
+ package list to use instead of the priority in the
+ tagfile)
+ --tagfile /somedir/tagfile (specify a different file to use
+ for package priorities. The default is "tagfile" in
+ the package's directory)
+ --md5sum (record the package's md5sum in the metadata file)
+
+EOF
+}
+
+# Eliminate whitespace function:
+crunch() {
+ while read FOO ; do
+ echo $FOO
+ done
+}
+
+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
+ # cruft for later ;)
+ #VER=$(expr $INDEX - 2)
+ #VER="$(echo $STRING | cut -f $VER -d -)"
+ #ARCH=$(expr $INDEX - 1)
+ #ARCH="$(echo $STRING | cut -f $ARCH -d -)"
+ #BUILD="$(echo $STRING | cut -f $INDEX -d -)"
+ fi
+ fi
+}
+
+# Parse options:
+MODE=install # standard text-mode
+while [ 0 ]; do
+ if [ "$1" = "-warn" -o "$1" = "--warn" ]; then
+ MODE=warn
+ shift 1
+ elif [ "$1" = "-md5sum" -o "$1" = "--md5sum" ]; then
+ MD5SUM=1
+ shift 1
+ elif [ "$1" = "-infobox" -o "$1" = "--infobox" ]; then
+ MODE=infobox
+ shift 1
+ elif [ "$1" = "-menu" -o "$1" = "--menu" ]; then
+ MODE=menu
+ shift 1
+ elif [ "$1" = "-ask" -o "$1" = "--ask" ]; then
+ ALWAYSASK="yes"
+ shift 1
+ elif [ "$1" = "-tagfile" -o "$1" = "--tagfile" ]; then
+ if [ -r "$2" ]; then
+ USERTAGFILE="$2"
+ elif [ -r "$(pwd)/$2" ]; then
+ USERTAGFILE="$(pwd)/$2"
+ else
+ usage
+ exit
+ fi
+ shift 2
+ elif [ "$1" = "-priority" -o "$1" = "--priority" ]; then
+ if [ "$2" = "" ]; then
+ usage
+ exit
+ fi
+ USERPRIORITY="$2"
+ shift 2
+ elif [ "$1" = "-root" -o "$1" = "--root" ]; then
+ if [ "$2" = "" ]; then
+ usage
+ exit
+ fi
+ ROOT="$2"
+ shift 2
+ else
+ break
+ fi
+done
+
+# Set the prefix for the package database directories (packages, scripts).
+ADM_DIR="$ROOT/var/log"
+# If the directories don't exist, "initialize" the package database:
+for PKGDBDIR in packages removed_packages removed_scripts scripts setup ; do
+ if [ ! -d $ADM_DIR/$PKGDBDIR ]; then
+ rm -rf $ADM_DIR/$PKGDBDIR # make sure it's not a symlink or something stupid
+ mkdir -p $ADM_DIR/$PKGDBDIR
+ chmod 755 $ADM_DIR/$PKGDBDIR
+ fi
+done
+
+# Make sure there's a proper temp directory:
+TMP=$ADM_DIR/setup/tmp
+# If the $TMP directory doesn't exist, create it:
+if [ ! -d $TMP ]; then
+ rm -rf $TMP # make sure it's not a symlink or something stupid
+ mkdir -p $TMP
+ chmod 700 $TMP # no need to leave it open
+fi
+
+# usage(), exit if called with no arguments:
+if [ $# = 0 ]; then
+ usage;
+ exit
+fi
+
+# If -warn mode was requested, produce the output and then exit:
+if [ "$MODE" = "warn" ]; then
+ while [ -f "$1" ]; do
+ echo "#### Scanning the contents of $1..."
+ mkdir -p $TMP/scan$$
+ # Determine extension:
+ packageext="$( echo $1 | rev | cut -f 1 -d . | rev)"
+ # Determine compressor utility:
+ case $packageext in
+ 'tgz' )
+ packagecompression=gzip
+ ;;
+ 'tbz' )
+ packagecompression=bzip2
+ ;;
+ 'tlz' )
+ packagecompression=lzma
+ ;;
+ 'txz' )
+ packagecompression=xz
+ ;;
+ esac
+ ( cd $TMP/scan$$ ; $packagecompression -dc | $TAR xf - install ) < $1 2> /dev/null
+ if [ -r $TMP/scan$$/install/doinst.sh ]; then
+ if cat $TMP/scan$$/install/doinst.sh | grep ' rm -rf ' 1>/dev/null 2>/dev/null ; then
+ cat $TMP/scan$$/install/doinst.sh | grep ' rm -rf ' > $TMP/scan$$/install/delete
+ echo "The following locations will be completely WIPED OUT to allow symbolic"
+ echo "links to be made. (We're talking 'rm -rf') These locations may be files,"
+ echo "or entire directories. Be sure you've backed up anything at these"
+ echo "locations that you want to save before you install this package:"
+ cat $TMP/scan$$/install/delete | cut -f 3,7 -d ' ' | tr ' ' '/'
+ fi
+ if [ -d $TMP/scan$$ ]; then
+ ( cd $TMP/scan$$ ; rm -rf install ) 2> /dev/null
+ ( cd $TMP ; rmdir scan$$ ) 2> /dev/null
+ fi
+ fi
+ echo "The following files will be overwritten when installing this package."
+ echo "Be sure they aren't important before you install this package:"
+ ( $packagecompression -dc | $TAR tvvf - ) < $1 | grep -v 'drwx'
+ echo
+ shift 1
+ done
+ exit
+fi
+
+# Main loop:
+for package in $* ; do
+
+ # Simple package integrity check:
+ if [ ! -f $package ]; then
+ EXITSTATUS=4
+ if [ "$MODE" = "install" ]; then
+ echo "Cannot install $package: file not found"
+ fi
+ continue;
+ fi
+
+ # "shortname" isn't really THAT short...
+ # it's just the full name without ".t{gz,bz,lz,xz}"
+ shortname="$(pkgbase $package)"
+ packagedir="$(dirname $package)"
+ # This is the base package name, used for grepping tagfiles and descriptions:
+ packagebase="$(package_name $shortname)"
+
+ # Reject package if it does not end in '.t{gz,bz,lz,xz}':
+ if [ "$shortname" = "$(basename $package)" ]; then
+ EXITSTATUS=3
+ if [ "$MODE" = "install" ]; then
+ echo "Cannot install $package: file does not end in .tgz, .tbz, .tlz, or .txz"
+ fi
+ continue;
+ fi
+
+ # Determine extension:
+ packageext="$(echo $package | rev | cut -f 1 -d . | rev)"
+
+ # Determine compressor utility:
+ case $packageext in
+ 'tgz' )
+ packagecompression=gzip
+ ;;
+ 'tbz' )
+ packagecompression=bzip2
+ ;;
+ 'tlz' )
+ packagecompression=lzma
+ ;;
+ 'txz' )
+ packagecompression=xz
+ ;;
+ esac
+
+ # Test presence of external compression utility:
+ if ! $packagecompression --help 1> /dev/null 2> /dev/null ; then
+ EXITSTATUS=5
+ if [ "$MODE" = "install" ]; then
+ echo "Cannot install $package: external compression utility $packagecompression missing"
+ fi
+ continue;
+ fi
+
+ # Determine package's priority:
+ unset PRIORITY
+ if [ "$USERTAGFILE" = "" ]; then
+ TAGFILE="$packagedir/tagfile"
+ else
+ TAGFILE="$USERTAGFILE"
+ fi
+ if [ ! -r "$TAGFILE" ]; then
+ TAGFILE=/dev/null
+ fi
+ if grep "^$packagebase:" "$TAGFILE" | grep ADD > /dev/null 2> /dev/null ; then
+ PRIORITY="ADD"
+ elif grep "^$packagebase:" "$TAGFILE" | grep REC > /dev/null 2> /dev/null ; then
+ PRIORITY="REC"
+ elif grep "^$packagebase:" "$TAGFILE" | grep OPT > /dev/null 2> /dev/null ; then
+ PRIORITY="OPT"
+ elif grep "^$packagebase:" "$TAGFILE" | grep SKP > /dev/null 2> /dev/null ; then
+ PRIORITY="SKP"
+ fi
+ if [ "$PRIORITY" = "ADD" ]; then
+ PMSG="[ADD]"
+ elif [ "$PRIORITY" = "REC" ]; then
+ PMSG="[REC]"
+ elif [ "$PRIORITY" = "OPT" ]; then
+ PMSG="[OPT]"
+ elif [ "$PRIORITY" = "SKP" ]; then
+ PMSG="[SKP]"
+ else
+ PMSG=""
+ fi
+
+ # If a tagfile wants this package to be skipped, do that now before
+ # wasting any more CPU on it:
+ if [ "$PRIORITY" = "SKP" -a ! "$ALWAYSASK" = "yes" ]; then
+ continue # next package
+ fi
+
+ # Figure out some package information, like the compressed and uncompressed
+ # sizes, and where to find the package description:
+ COMPRESSED="$(du -s $package | cut -f 1)K"
+ DESCRIPTION=""
+ # First check for .txt file next to the package, since this is faster:
+ if grep "^$packagebase:" "$packagedir/$shortname.txt" 1> /dev/null 2> /dev/null ; then
+ DESCRIPTION="$packagedir/$shortname.txt"
+ elif grep "^$shortname:" "$packagedir/$shortname.txt" 1> /dev/null 2> /dev/null ; then
+ DESCRIPTION="$packagedir/$shortname.txt"
+ fi
+
+ # Test tarball integrity and get uncompressed package size:
+ if [ "$MODE" = "install" ]; then
+ echo "Verifying package $(basename $package)."
+ fi
+ cat $package | $packagecompression -dc | dd 2> $TMP/tmpsize$$ | $TAR tf - 1> $TMP/tmplist$$ 2> /dev/null
+ TARERROR=$?
+ if [ ! "$TARERROR" = "0" ]; then
+ EXITSTATUS=1 # tar file corrupt
+ if [ "$MODE" = "install" ]; then
+ echo "Unable to install $package: tar archive is corrupt (tar returned error code $TARERROR)"
+ fi
+ rm -f $TMP/tmplist$$ $TMP/tmpsize$$
+ continue
+ fi
+ UNCOMPRESSED="$(expr $(cat $TMP/tmpsize$$ | head -n 1 | cut -f 1 -d +) / 2)K"
+ rm -f $TMP/tmpsize$$
+
+ # If we still don't have a package description, look inside the package.
+ # This requires a costly untar.
+ if [ "$DESCRIPTION" = "" ]; then
+ mkdir -p $TMP/scan$$
+ ( cd $TMP/scan$$ ; $packagecompression -dc | $TAR xf - install ) < $package 2> /dev/null
+ if grep "^$packagebase:" "$TMP/scan$$/install/slack-desc" 1> /dev/null 2> /dev/null ; then
+ DESCRIPTION="$TMP/scan$$/install/slack-desc"
+ elif grep "^$shortname:" "$TMP/scan$$/install/slack-desc" 1> /dev/null 2> /dev/null ; then
+ DESCRIPTION="$TMP/scan$$/install/slack-desc"
+ fi
+ fi
+
+ if [ "$DESCRIPTION" = "" ]; then
+ #echo "WARNING NO SLACK-DESC"
+ DESCRIPTION="/dev/null"
+ fi
+
+ # Gather package infomation into a temporary file:
+ cat $DESCRIPTION | grep "^$packagebase:" | cut -f 2- -d : | cut -b2- 1> $TMP/tmpmsg$$ 2> /dev/null
+ if [ "$shortname" != "$packagebase" ]; then
+ cat $DESCRIPTION | grep "^$shortname:" | cut -f 2- -d : | cut -b2- 1>> $TMP/tmpmsg$$ 2> /dev/null
+ fi
+ # Adjust the length here. This allows a slack-desc to be any size up to 13 lines instead of fixed at 11.
+ LENGTH=$(cat $TMP/tmpmsg$$ | wc -l)
+ while [ $LENGTH -lt 12 ]; do
+ echo >> $TMP/tmpmsg$$
+ LENGTH=$(expr $LENGTH + 1)
+ done
+ echo "Size: Compressed: ${COMPRESSED}, uncompressed: ${UNCOMPRESSED}." >> $TMP/tmpmsg$$
+ # For recent versions of dialog it is necessary to add \n to the end of each line
+ # or it will remove repeating spaces and mess up our careful formatting:
+ cat << EOF > $TMP/controlns$$
+\n
+\n
+\n
+\n
+\n
+\n
+\n
+\n
+\n
+\n
+\n
+\n
+\n
+EOF
+ paste -d "" $TMP/tmpmsg$$ $TMP/controlns$$ > $TMP/pasted$$
+ rm -f $TMP/controlns$$
+ mv $TMP/pasted$$ $TMP/tmpmsg$$
+ # Emit information to the console:
+ if [ "$MODE" = "install" ]; then
+ if [ "$PMSG" = "" ]; then
+ echo "Installing package $(basename $package):"
+ else
+ echo "Installing package $(basename $package) $PMSG:"
+ fi
+ echo "PACKAGE DESCRIPTION:"
+ cat $DESCRIPTION | grep "^$packagebase:" | uniq | sed "s/^$packagebase:/#/g"
+ if [ "$shortname" != "$packagebase" ]; then
+ cat $DESCRIPTION | grep "^$shortname:" | uniq | sed "s/^$shortname:/#/g"
+ fi
+ elif [ "$MODE" = "infobox" ]; then # install infobox package
+ dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg$$)" 0 0
+ elif [ "$MODE" = "menu" -a "$PRIORITY" = "ADD" -a ! "$ALWAYSASK" = "yes" ]; then # ADD overrides menu mode unless -ask was used
+ dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg$$)" 0 0
+ elif [ "$MODE" = "menu" -a "$USERPRIORITY" = "ADD" ]; then # install no matter what $PRIORITY
+ dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg$$)" 0 0
+ else # we must need a full menu:
+ dialog --title "Package Name: $shortname $PMSG" --menu "$(cat $TMP/tmpmsg$$)" 0 0 3 \
+ "Yes" "Install package $shortname" \
+ "No" "Do not install package $shortname" \
+ "Quit" "Abort software installation completely" 2> $TMP/reply$$
+ if [ ! $? = 0 ]; then
+ echo "No" > $TMP/reply$$
+ fi
+ REPLY="$(cat $TMP/reply$$)"
+ rm -f $TMP/reply$$ $TMP/tmpmsg$$
+ if [ "$REPLY" = "Quit" ]; then
+ exit 99 # EXIT STATUS 99 = ABORT!
+ elif [ "$REPLY" = "No" ]; then
+ continue # skip the package
+ fi
+ fi
+
+ # Make sure there are no symbolic links sitting in the way of
+ # incoming package files:
+ cat $TMP/tmplist$$ | grep -v "/$" | while read file ; do
+ if [ -L "$ROOT/$file" ]; then
+ rm -f "$ROOT/$file"
+ fi
+ done
+ rm -f $TMP/tmplist$$
+
+ # Write the package file database entry and install the package:
+ echo "PACKAGE NAME: $shortname" > $ADM_DIR/packages/$shortname
+ echo "COMPRESSED PACKAGE SIZE: $COMPRESSED" >> $ADM_DIR/packages/$shortname
+ echo "UNCOMPRESSED PACKAGE SIZE: $UNCOMPRESSED" >> $ADM_DIR/packages/$shortname
+ echo "PACKAGE LOCATION: $package" >> $ADM_DIR/packages/$shortname
+ # Record the md5sum if that's a selected option:
+ if [ $MD5SUM = 1 ]; then
+ echo "PACKAGE MD5SUM: $(md5sum $package | cut -f 1 -d ' ')" >> $ADM_DIR/packages/$shortname
+ fi
+ echo "PACKAGE DESCRIPTION:" >> $ADM_DIR/packages/$shortname
+ cat $DESCRIPTION | grep "^$packagebase:" >> $ADM_DIR/packages/$shortname 2> /dev/null
+ if [ "$shortname" != "$packagebase" ]; then
+ cat $DESCRIPTION | grep "^$shortname:" >> $ADM_DIR/packages/$shortname 2> /dev/null
+ fi
+ echo "FILE LIST:" >> $ADM_DIR/packages/$shortname
+ ( cd $ROOT/ ; $packagecompression -dc | $TAR -xlUpvf - ) < $package >> $TMP/$shortname 2> /dev/null
+ if [ "$(cat $TMP/$shortname | grep '^\./' | wc -l | tr -d ' ')" = "1" ]; then
+ # Good. We have a package that meets the Slackware spec.
+ cat $TMP/$shortname >> $ADM_DIR/packages/$shortname
+ else
+ # Some dumb bunny built a package with something other than makepkg. Bad!
+ # Oh well. Bound to happen. Par for the course. Fix it and move on...
+ echo "WARNING: Package has not been created with 'makepkg'"
+ echo './' >> $ADM_DIR/packages/$shortname
+ cat $TMP/$shortname >> $ADM_DIR/packages/$shortname
+ fi
+ rm -f $TMP/$shortname
+
+ # It's a good idea to make sure those newly installed libraries
+ # are properly activated for use:
+ if [ -x /sbin/ldconfig ]; then
+ /sbin/ldconfig
+ fi
+
+ if [ -f $ROOT/install/doinst.sh ]; then
+ if [ "$MODE" = "install" ]; then
+ echo "Executing install script for $(basename $package)."
+ fi
+ ( cd $ROOT/ ; sh install/doinst.sh -install; )
+ fi
+ # Clean up the mess...
+ if [ -d $ROOT/install ]; then
+ if [ -r $ROOT/install/doinst.sh ]; then
+ cp $ROOT/install/doinst.sh $ADM_DIR/scripts/$shortname
+ chmod 755 $ADM_DIR/scripts/$shortname
+ fi
+ # /install/doinst.sh and /install/slack-* are reserved locations for the package system.
+ ( cd $ROOT/install ; rm -f doinst.sh slack-* 1> /dev/null 2>&1 )
+ rmdir $ROOT/install 1> /dev/null 2>&1
+ fi
+ # If we used a scan directory, get rid of it:
+ if [ -d "$TMP/scan$$" ]; then
+ rm -rf "$TMP/scan$$"
+ fi
+ rm -f $TMP/tmpmsg$$ $TMP/reply$$
+ if [ "$MODE" = "install" ]; then
+ echo "Package $(basename $package) installed."
+ echo
+ fi
+done
+
+exit $EXITSTATUS
diff --git a/source/a/pkgtools/scripts/makebootdisk b/source/a/pkgtools/scripts/makebootdisk
new file mode 100644
index 000000000..86b843a8b
--- /dev/null
+++ b/source/a/pkgtools/scripts/makebootdisk
@@ -0,0 +1,444 @@
+#!/bin/sh
+# Copyright 1995, 1998, 2002, 2005 Patrick Volkerding, Moorhead, 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.
+#
+
+if [ ! "$UID" = "0" ]; then
+ echo "You need to be root to run this script."
+ exit 1
+fi
+
+# Was a kernel specified on the command line?
+if [ -r "$1" ]; then
+ KERNEL=$1
+ KMSG="Using kernel $KERNEL"
+else
+ KMSG="No kernel selected yet"
+fi
+
+# Make sure there's a proper temp directory:
+TMP=/var/log/setup/tmp
+# If the $TMP directory doesn't exist, create it:
+if [ ! -d $TMP ]; then
+ rm -rf $TMP # make sure it's not a symlink or something stupid
+ mkdir -p $TMP
+ chmod 700 $TMP # no need to leave it open
+fi
+
+ROOT_DEVICE="`mount | grep ' on / ' | cut -f 1 -d ' '`"
+
+if mount | grep ' on / ' | grep umsdos 1> /dev/null 2> /dev/null ; then
+ MOUNT="read-write"
+else
+ MOUNT="read-only"
+fi
+
+make_root_device() {
+# Make a device:
+makedev() {
+ if [ ! -b $1 ]; then
+ mknod $1 b $2 $3
+ chown root.disk $1
+ chmod 640 $1
+ fi
+}
+
+# Make ide device
+# make ide major minor hd1 hd2 (2 base devs for major)
+make_ide() {
+ # Handle base devices:
+ if [ "$2" = "0" ]; then
+ makedev $TMP/lilo/dev/$3 $1 $2
+ return 0
+ elif [ "$2" = "64" ]; then
+ makedev $TMP/lilo/dev/$4 $1 $2
+ return 0
+ fi
+ # Must be a partition:
+ if [ "`expr $2 / 64`" = "0" ]; then
+ DEV=$3
+ NUM=$2
+ else
+ DEV=$4
+ NUM=`expr $2 - 64`
+ fi
+ makedev $TMP/lilo/dev/$DEV$NUM $1 $2
+}
+
+# Make SCSI device
+make_scsi() {
+ # find drive # 0 - 15
+ DRV=`expr $1 / 16`
+ NUM=`expr $1 % 16`
+ if [ "$NUM" = "0" ]; then
+ NUM=""
+ fi
+ if [ "$DRV" = "0" ]; then
+ makedev $TMP/lilo/dev/sda$NUM 8 $1
+ elif [ "$DRV" = "1" ]; then
+ makedev $TMP/lilo/dev/sdb$NUM 8 $1
+ elif [ "$DRV" = "2" ]; then
+ makedev $TMP/lilo/dev/sdc$NUM 8 $1
+ elif [ "$DRV" = "3" ]; then
+ makedev $TMP/lilo/dev/sdd$NUM 8 $1
+ elif [ "$DRV" = "4" ]; then
+ makedev $TMP/lilo/dev/sde$NUM 8 $1
+ elif [ "$DRV" = "5" ]; then
+ makedev $TMP/lilo/dev/sdf$NUM 8 $1
+ elif [ "$DRV" = "6" ]; then
+ makedev $TMP/lilo/dev/sdg$NUM 8 $1
+ elif [ "$DRV" = "7" ]; then
+ makedev $TMP/lilo/dev/sdh$NUM 8 $1
+ elif [ "$DRV" = "8" ]; then
+ makedev $TMP/lilo/dev/sdi$NUM 8 $1
+ elif [ "$DRV" = "9" ]; then
+ makedev $TMP/lilo/dev/sdj$NUM 8 $1
+ elif [ "$DRV" = "10" ]; then
+ makedev $TMP/lilo/dev/sdk$NUM 8 $1
+ elif [ "$DRV" = "11" ]; then
+ makedev $TMP/lilo/dev/sdl$NUM 8 $1
+ elif [ "$DRV" = "12" ]; then
+ makedev $TMP/lilo/dev/sdm$NUM 8 $1
+ elif [ "$DRV" = "13" ]; then
+ makedev $TMP/lilo/dev/sdn$NUM 8 $1
+ elif [ "$DRV" = "14" ]; then
+ makedev $TMP/lilo/dev/sdo$NUM 8 $1
+ elif [ "$DRV" = "15" ]; then
+ makedev $TMP/lilo/dev/sdp$NUM 8 $1
+ fi
+}
+
+if cat /proc/partitions | grep / 1> /dev/null 2> /dev/null ; then # new
+ cat /proc/partitions | grep / | while read line ; do
+ SMASHED_LINE=$line
+ MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
+ MINOR=`echo $SMASHED_LINE | cut -f 2 -d ' '`
+ if [ "$MAJOR" = "3" ]; then
+ make_ide $MAJOR $MINOR hda hdb
+ elif [ "$MAJOR" = "8" ]; then
+ make_scsi $MINOR
+ elif [ "$MAJOR" = "22" ]; then
+ make_ide $MAJOR $MINOR hdc hdd
+ elif [ "$MAJOR" = "33" ]; then
+ make_ide $MAJOR $MINOR hde hdf
+ elif [ "$MAJOR" = "34" ]; then
+ make_ide $MAJOR $MINOR hdg hdh
+ elif [ "$MAJOR" = "56" ]; then
+ make_ide $MAJOR $MINOR hdi hdj
+ fi
+ done
+else # old format
+ cat /proc/partitions | grep d | while read line ; do
+ SMASHED_LINE=$line
+ MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
+ MINOR=`echo $SMASHED_LINE | cut -f 2 -d ' '`
+ DEVNAME=`echo $SMASHED_LINE | cut -f 4 -d ' '`
+ makedev $TMP/lilo/dev/$DEVNAME $MAJOR $MINOR
+ done
+fi
+}
+
+choose_kernel() {
+while [ 0 ]; do # input loop
+cat << EOF > $TMP/tmpmsg
+
+Some possible paths to kernels are these:
+
+/boot/vmlinuz
+/usr/src/linux/arch/i386/boot/bzImage
+/usr/src/linux/arch/i386/boot/zImage
+/vmlinuz
+
+Put the path to the kernel you want to use in the box below.
+
+EOF
+
+ dialog --title "CHOOSE KERNEL" --inputbox "`cat $TMP/tmpmsg`" \
+ 16 72 "/boot/vmlinuz" 2> $TMP/return
+ if [ ! $? = 0 ]; then
+ exit
+ fi
+
+ KERNEL="`cat $TMP/return`"
+
+ if [ ! -r "$KERNEL" ]; then
+ dialog --title "NOT FOUND!" --msgbox "$KERNEL" 5 60
+ continue
+ fi
+ KMSG="Using kernel $KERNEL"
+break
+done
+}
+
+format_disk() {
+ # If anyone still uses 1.2 MB, you'll have to uncomment this.
+ # It's no longer a default option.
+ #FDEV=/dev/fd0h1200
+ #FDEV=/dev/fd0u1400
+ FDEV=/dev/fd0u1680
+ if [ "$FDEV" = "/dev/fd0u1680" ]; then
+ dialog --title "Formatting /dev/fd0u1680" --infobox \
+ "Formatting /dev/fd0, 1.68 megabytes." 3 42
+ elif [ "$FDEV" = "/dev/fd0u1400" ]; then
+ dialog --title "Formatting /dev/fd0u1440" --infobox \
+ "Formatting /dev/fd0, 1.44 megabytes." 3 42
+ elif [ "$FDEV" = "/dev/fd0h1200" ]; then
+ dialog --title "Formatting /dev/fd0h1200" --infobox \
+ "Formatting /dev/fd0, 1.2 megabytes." 3 42
+ fi
+ fdformat $FDEV 1> /dev/null 2> /dev/null
+ if [ ! $? = 0 ]; then
+ dialog --title "ERROR: FLOPPY FORMAT FAILED" --msgbox "The attempt to format the floppy \
+disk in /dev/fd0 has failed, probably due to bad media. Please try again with a \
+different disk. If that doesn't work, perhaps the drive needs cleaning." 0 0
+ return 1
+ fi
+}
+
+DEFAULT_ITEM="syslinux"
+
+while [ 0 ]; do # menu loop
+ dialog --title "MAKE BOOT FLOPPY FROM KERNEL" \
+--default-item $DEFAULT_ITEM \
+--backtitle "$KMSG" --menu "This menu allows you to make a SYSLINUX bootdisk \
+from a compiled kernel. The SYSLINUX bootloader has the advantage of \
+using a FAT filesystem making it easy to replace the kernel later. \
+Which option would you like?" 12 67 2 \
+"syslinux" "Make a SYSLINUX bootdisk" \
+"exit" "Exit this program" 2> $TMP/return
+ if [ ! $? = 0 ]; then
+ break;
+ fi
+ REPLY=`cat $TMP/return`
+ rm -f $TMP/return
+ if [ "$REPLY" = "simple" ]; then # make simple bootdisk
+ if [ "$KERNEL" = "" ]; then
+ choose_kernel
+ fi
+ kernel_size=`du -Lk $KERNEL | cut -f1`
+ if [ "$kernel_size" -gt "1023" ]; then
+cat << EOF > $TMP/tmpmsg
+
+The kernel $KERNEL is $kernel_size K (which is
+more than 1023 Kb in size), so it probably won't
+boot standalone on the floppy. Use the 'syslinux'
+method instead.
+
+EOF
+ dialog --title "KERNEL TOO BIG!" --msgbox "`cat $TMP/tmpmsg`" 10 60
+ continue
+ fi
+ dialog --title "BOOT DISK CREATION" --backtitle "$KMSG" --yesno \
+"\n\
+Now put a formatted floppy in your boot drive. \n\
+This will be made into your Linux boot disk. Use this to\n\
+boot Linux until LILO has been configured to boot from\n\
+the hard drive.\n\n\
+Any data on the target disk will be destroyed.\n\n\
+YES creates the disk, NO aborts.\n" 14 62
+ if [ $? = 0 ]; then
+ format_disk
+ dialog --title "CREATING DISK" --infobox "Creating boot disk from $KERNEL..." 5 72
+ dd if=$KERNEL of=/dev/fd0 2> /dev/null
+ rdev /dev/fd0 $ROOT_DEVICE
+ rdev -v /dev/fd0 -1
+ if [ "$MOUNT" = "read-only" ]; then
+ rdev -R /dev/fd0 1
+ else
+ rdev -R /dev/fd0 0
+ fi
+ fi
+ elif [ "$REPLY" = "syslinux" ]; then # make syslinux bootdisk
+ DEFAULT_ITEM="exit"
+ if [ "$KERNEL" = "" ]; then
+ choose_kernel
+ fi
+ dialog --title "CREATING SYSLINUX BOOTDISK IN /dev/fd0" --backtitle "$KMSG" --yesno "Now put a \
+floppy in your boot drive. This will be made into a SYSLINUX \
+bootdisk that you can use to start your Linux system. Any data on the \
+target disk will be destroyed. YES creates the disk, NO aborts." 8 62
+ if [ $? = 0 ]; then # make the disk
+ format_disk
+ if [ ! $? = 0 ]; then
+ continue
+ fi
+ dialog --title "CREATING BOOT FLOPPY" --infobox "Creating SYSLINUX bootdisk for \
+$ROOT_DEVICE in /dev/fd0." 3 64
+ mkdosfs -F 12 /dev/fd0u1680 1680 1> /dev/null 2> /dev/null
+ if [ ! -d $TMP/bootdisk ]; then
+ mkdir $TMP/bootdisk
+ fi
+ mount -t vfat /dev/fd0 $TMP/bootdisk 1> /dev/null 2> /dev/null
+ cp $KERNEL $TMP/bootdisk/vmlinuz
+ ## This avoids a syslinux-1.72 bug, and doesn't seem to hurt anything:
+ #dd if=/dev/zero bs=1k count=1 >> $TMP/bootdisk/vmlinuz 2> /dev/null
+ if [ ! "$?" = "0" ]; then
+ dialog --title "ERROR COPYING KERNEL TO FLOPPY" \
+ --msgbox "Sorry, but there was an error copying the kernel to the \
+floppy disk. Possibly the kernel is too large to fit the disk. \
+This program will now exit." 0 0
+ umount /dev/fd0
+ rm -rf $TMP/bootdisk
+ exit 1
+ fi
+ cat << EOF > $TMP/bootdisk/message.txt
+
+Welcome to the 09Slackware07 Linux custom bootdisk!
+
+By default, this disk boots a root Linux partition on $ROOT_DEVICE when you
+hit ENTER. If you'd like to boot some other partition, use a command like
+this on the prompt below:
+
+ mount root=/dev/sda1 ro
+
+Where "/dev/sda1" is the partition you want to boot, and "ro" specifies that
+the partition should be initially mounted as read-only. If you wish to mount
+the partition read-write, use "rw" instead. To set the video console mode,
+use the vga= parameter (press F1 to see a table). You may also add any other
+kernel parameters you might need depending on your hardware, and which
+drivers are included in your kernel.
+
+EOF
+ cat << EOF > $TMP/bootdisk/syslinux.cfg
+default vmlinuz ramdisk_size=7000 root=$ROOT_DEVICE vga=normal ro
+prompt 1
+timeout 6000
+display message.txt
+F1 f1.txt
+F2 message.txt
+#F3 f3.txt
+#F4 f4.txt
+#F5 f5.txt
+#F6 f6.txt
+#F7 f7.txt
+label mount
+ kernel vmlinuz
+ append ramdisk_size=7000 root=$ROOT_DEVICE vga=normal ro
+label ramdisk
+ kernel vmlinuz
+ append vmlinuz ramdisk_size=7000 root=/dev/fd0u1440 vga=normal rw
+EOF
+ cat << EOF > $TMP/bootdisk/f1.txt
+ STANDARD MODES:
+ To make the kernel prompt for standard video modes use: vga=ask
+
+ FRAMEBUFFER MODES:
+ To get the kernel to start in VESA framebuffer mode, you need to pass it
+ a vga= init string on the "boot:" prompt. Here's a table:
+
+ Colors 640x480 800x600 1024x768 1280x1024 1600x1200
+ --------+---------------------------------------------
+ 256 | 769 771 773 775 796
+ 32,768 | 784 787 790 793 797
+ 65,536 | 785 788 791 794 798
+ 16.8M | 786 789 792 795 799
+
+ ...such as this for 1024x768x64k:
+ vga=791
+
+ F2 returns to the previous page.
+
+EOF
+ umount /dev/fd0
+ syslinux-nomtools -s /dev/fd0
+ rm -r $TMP/bootdisk
+ fi
+ elif [ "$REPLY" = "lilo" ]; then # make lilo bootdisk
+ DEFAULT_ITEM="exit"
+ if [ ! -x "`type -path lilo`" ]; then
+cat << EOF > $TMP/tmpmsg
+
+You don't have 'lilo' installed on the system.
+I guess you didn't install the lilo package.
+
+EOF
+ dialog --title "LILO NOT FOUND" --msgbox "`cat $TMP/tmpmsg`" 8 60
+ continue
+ fi
+ if [ "$KERNEL" = "" ]; then
+ choose_kernel
+ fi
+ dialog --title "CREATING LILO BOOTDISK IN /dev/fd0" --backtitle "$KMSG" --yesno "Now put a \
+floppy in your boot drive. This will be made into a LILO \
+bootdisk that you can use to start your Linux system. Any data on the \
+target disk will be destroyed. YES creates the disk, NO aborts." 8 62
+ if [ $? = 0 ]; then # make the disk
+ format_disk
+ DEV=/dev/fd0u1680
+ mknod_fd="-m 0640 $TMP/lilo$DEV b 2 44"
+ dialog --infobox "Creating LILO bootdisk from $KERNEL for $ROOT_DEVICE..." 4 60
+ mke2fs -q -m 0 -i 4096 $DEV 1> /dev/null 2> /dev/null || exit 1
+ if [ ! -d $TMP/lilo ]; then
+ mkdir -p $TMP/lilo
+ fi
+ mount -t ext2 $DEV $TMP/lilo 1> /dev/null || exit 1
+ rmdir $TMP/lilo/lost+found
+ cp $KERNEL $TMP/lilo/vmlinuz || exit 1
+ mkdir $TMP/lilo/dev
+ make_root_device
+ mknod -m 0640 $TMP/lilo/dev/fd0 b 2 0
+ mknod -m 0640 $TMP/lilo/dev/fd1 b 2 1
+ mknod $mknod_fd
+ mknod -m 0666 $TMP/lilo/dev/null c 1 3
+ mkdir $TMP/lilo/etc
+ cat << EOF > $TMP/lilo/etc/lilo.conf
+boot = $DEV
+message=/boot/message
+backup=/dev/null
+prompt
+image = /vmlinuz
+ label = mount
+ ramdisk = 0
+ root = $ROOT_DEVICE
+ vga = normal
+ $MOUNT
+EOF
+ mkdir $TMP/lilo/boot
+ cp -a /boot/chain.b $TMP/lilo/boot
+ if [ -f /boot/boot-text.b ]; then
+ cp -a /boot/boot-text.b $TMP/lilo/boot/boot.b
+ else
+ cp -a /boot/boot.b $TMP/lilo/boot
+ fi
+ cat << EOF > $TMP/lilo/boot/message
+
+Welcome to the Slackware Linux custom LILO bootdisk!
+
+By default, this disk boots a root Linux partition on $ROOT_DEVICE when
+you hit ENTER. If you'd like to boot some other partition, use a command
+like this on the LILO prompt below:
+
+ mount root=/dev/sda1 ro
+
+Where "/dev/sda1" is the partition you want to boot, and "ro" specifies that
+the partition should be initially mounted as read-only. If you which to mount
+the partition read-write, use "rw" instead. You may also add any other kernel
+parameters you might need depending on your hardware, and which drivers are
+included in your kernel.
+
+EOF
+ lilo -r $TMP/lilo > /dev/null
+ umount $TMP/lilo
+ rm -rf $TMP/lilo
+ fi
+ elif [ "$REPLY" = "exit" ]; then
+ break;
+ fi
+done
diff --git a/source/a/pkgtools/scripts/makepkg b/source/a/pkgtools/scripts/makepkg
new file mode 100644
index 000000000..e6805476a
--- /dev/null
+++ b/source/a/pkgtools/scripts/makepkg
@@ -0,0 +1,347 @@
+#!/bin/sh
+# Copyright 1994, 1998, 2008 Patrick Volkerding, Moorhead, Minnesota USA
+# 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.
+#
+# Sun Apr 5 21:23:26 CDT 2009
+# Support .tgz, .tbz, .tlz, and .txz packages. <volkerdi>
+#
+# Wed Mar 18 15:32:33 CST 1998
+# Patched to avoid possible symlink attacks in /tmp.
+
+CWD=$(pwd)
+
+TAR=tar-1.13
+umask 022
+$TAR --help 1> /dev/null 2> /dev/null
+if [ ! $? = 0 ]; then
+ TAR=tar
+fi
+if [ ! "$(LC_MESSAGES=C $TAR --version)" = "tar (GNU tar) 1.13
+
+Copyright (C) 1988, 92,93,94,95,96,97,98, 1999 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Written by John Gilmore and Jay Fenlason." ]; then
+ echo "WARNING: pkgtools are unstable with tar > 1.13."
+ echo " You should provide a \"tar-1.13\" in your \$PATH."
+ sleep 5
+fi
+
+make_install_script() {
+ COUNT=1
+ LINE="$(sed -n "$COUNT p" $1)"
+ while [ ! "$LINE" = "" ]; do
+ LINKGOESIN="$(echo "$LINE" | cut -f 1 -d " ")"
+ LINKGOESIN="$(dirname $LINKGOESIN)"
+ LINKNAMEIS="$(echo "$LINE" | cut -f 1 -d ' ')"
+ LINKNAMEIS="$(basename "$LINKNAMEIS")"
+ LINKPOINTSTO="$(echo "$LINE" | cut -f 3 -d ' ')"
+ echo "( cd $LINKGOESIN ; rm -rf $LINKNAMEIS )"
+ echo "( cd $LINKGOESIN ; ln -sf $LINKPOINTSTO $LINKNAMEIS )"
+ COUNT=$(expr $COUNT + 1)
+ LINE="$(sed -n "$COUNT p" $1)"
+ done
+}
+
+usage() {
+ cat << EOF
+
+Usage: makepkg package_name.tgz
+ (or: package_name.tbz, package_name.tlz, package_name.txz)
+
+Makes a Slackware compatible package containing the contents of the current
+and all subdirectories. If symbolic links exist, they will be removed and
+an installation script will be made to recreate them later. This script will
+be called "install/doinst.sh". You may add any of your own ash-compatible
+shell scripts to this file and rebuild the package if you wish.
+
+options: -l, --linkadd y|n (moves symlinks into doinst.sh: recommended)
+ -p, --prepend (prepend rather than append symlinks to an existing
+ doinst.sh. Useful to link libraries needed by
+ programs in the doinst.sh script)
+ -c, --chown y|n (resets all permissions to root:root 755
+ - not generally recommended)
+
+If these options are not set, makepkg will prompt as appropriate.
+EOF
+}
+
+TMP=/tmp # This can be a hole, but I'm going to be careful about file
+ # creation in there, so don't panic. :^)
+
+# Parse options
+while [ 0 ]; do
+ if [ "$1" = "--linkadd" -o "$1" = "-l" ]; then
+ if [ "$2" = "y" ]; then
+ LINKADD=y
+ elif [ "$2" = "n" ]; then
+ LINKADD=n
+ else
+ usage
+ exit 2
+ fi
+ shift 2
+ elif [ "$1" = "--chown" -o "$1" = "-c" ]; then
+ if [ "$2" = "y" ]; then
+ CHOWN=y
+ elif [ "$2" = "n" ]; then
+ CHOWN=n
+ else
+ usage
+ exit 2
+ fi
+ shift 2
+ elif [ "$1" = "-p" -o "$1" = "--prepend" ]; then
+ PREPEND=y
+ shift 1
+ elif [ "$1" = "-h" -o "$1" = "-H" -o "$1" = "--help" -o $# = 0 ]; then
+ usage
+ exit 0
+ else
+ break
+ fi
+done
+
+PACKAGE_NAME="$1"
+TARGET_NAME="$(dirname $PACKAGE_NAME)"
+PACKAGE_NAME="$(basename $PACKAGE_NAME)"
+
+# Identify package extension:
+if [ ! "$(basename $PACKAGE_NAME .tgz)" = "$PACKAGE_NAME" ]; then
+ EXTENSION="tgz"
+elif [ ! "$(basename $PACKAGE_NAME .tar.gz)" = "$PACKAGE_NAME" ]; then
+ # .tar.compression is also supported, although the resulting "packages" will
+ # not be installable by installpkg without the correct 3 letter extension
+ # instead.
+ EXTENSION="tar.gz"
+elif [ ! "$(basename $PACKAGE_NAME .tbz)" = "$PACKAGE_NAME" ]; then
+ EXTENSION="tbz"
+elif [ ! "$(basename $PACKAGE_NAME .tar.bz2)" = "$PACKAGE_NAME" ]; then
+ EXTENSION="tar.bz2"
+elif [ ! "$(basename $PACKAGE_NAME .tlz)" = "$PACKAGE_NAME" ]; then
+ EXTENSION="tlz"
+elif [ ! "$(basename $PACKAGE_NAME .tar.lzma)" = "$PACKAGE_NAME" ]; then
+ EXTENSION="tar.lzma"
+elif [ ! "$(basename $PACKAGE_NAME .txz)" = "$PACKAGE_NAME" ]; then
+ EXTENSION="txz"
+elif [ ! "$(basename $PACKAGE_NAME .tar.xz)" = "$PACKAGE_NAME" ]; then
+ EXTENSION="tar.xz"
+else
+ EXTENSION="$(echo $PACKAGE_NAME | rev | cut -f 1 -d . | rev)"
+ echo "ERROR: Package extension .$EXTENSION is not supported."
+ exit 1
+fi
+
+TAR_NAME="$(basename $PACKAGE_NAME .$EXTENSION)"
+
+# Sanity check -- we can't make the package in the current directory:
+if [ "$CWD" = "$TARGET_NAME" -o "." = "$TARGET_NAME" ]; then
+ echo "ERROR: Can't make output package in current directory."
+ exit 2
+fi
+
+# Make sure external compression utility is available:
+case $EXTENSION in
+'tgz' | 'tar.gz' )
+ if ! which gzip 1> /dev/null 2> /dev/null ; then
+ echo "ERROR: gzip compression utility not found in \$PATH."
+ exit 3
+ fi
+ ;;
+'tbz' | 'tar.bz2' )
+ if ! which bzip2 1> /dev/null 2> /dev/null ; then
+ echo "ERROR: bzip2 compression utility not found in \$PATH."
+ exit 3
+ fi
+ ;;
+'tlz' | 'tar.lzma' )
+ if ! which lzma 1> /dev/null 2> /dev/null ; then
+ echo "ERROR: lzma compression utility not found in \$PATH."
+ exit 3
+ fi
+ ;;
+'txz' | 'tar.xz' )
+ if ! which xz 1> /dev/null 2> /dev/null ; then
+ echo "ERROR: xz compression utility not found in \$PATH."
+ exit 3
+ fi
+ ;;
+esac
+
+echo
+echo "Slackware package maker, version 3.14159."
+echo
+echo "Searching for symbolic links:"
+# Get rid of possible pre-existing trouble:
+INST=$(mktemp $TMP/makepkg.XXXXXX)
+# This requires the ls from coreutils-5.0 (or newer):
+find . -type l -exec ls -l --time-style=long-iso {} \; | while read foo ; do echo $foo ; done | cut -f 8- -d ' ' | cut -b3- | tee $INST
+if [ ! "$(cat $INST)" = "" ]; then
+ echo
+ echo "Making symbolic link creation script:"
+ make_install_script $INST | tee doinst.sh
+fi
+echo
+if [ ! "$(cat $INST)" = "" ]; then
+ if [ -r install/doinst.sh ]; then
+ echo "Unless your existing installation script already contains the code"
+ echo "to create these links, you should append these lines to your existing"
+ echo "install script. Now's your chance. :^)"
+ echo
+ echo "Would you like to add this stuff to the existing install script and"
+ echo -n "remove the symbolic links ([y]es, [n]o)? "
+ else
+ echo "It is recommended that you make these lines your new installation script."
+ echo
+ echo "Would you like to make this stuff the install script for this package"
+ echo -n "and remove the symbolic links ([y]es, [n]o)? "
+ fi
+ if [ ! "$LINKADD" ]; then
+ read LINKADD;
+ echo
+ else
+ echo $LINKADD
+ echo
+ fi
+ if [ "$LINKADD" = "y" ]; then
+ if [ -r install/doinst.sh ]; then
+ UPDATE="t"
+ if [ "$PREPEND" = "y" ]; then
+ touch install/doinst.sh
+ mv install/doinst.sh install/doinst.sh.shipped
+ cat doinst.sh > install/doinst.sh
+ echo "" >> install/doinst.sh
+ cat install/doinst.sh.shipped >> install/doinst.sh
+ rm -f install/doinst.sh.shipped
+ else
+ cat doinst.sh >> install/doinst.sh
+ fi
+ else
+ mkdir -p install
+ cat doinst.sh > install/doinst.sh
+ fi
+ echo
+ echo "Removing symbolic links:"
+ find . -type l -exec rm -v {} \;
+ echo
+ if [ "$UPDATE" = "t" ]; then
+ if [ "$PREPEND" = "y" ]; then
+ echo "Updating your ./install/doinst.sh (prepending symlinks)..."
+ else
+ echo "Updating your ./install/doinst.sh..."
+ fi
+ else
+ echo "Creating your new ./install/doinst.sh..."
+ fi
+ fi
+else
+ echo "No symbolic links were found, so we won't make an installation script."
+ echo "You can make your own later in ./install/doinst.sh and rebuild the"
+ echo "package if you like."
+fi
+rm -f doinst.sh $INST
+echo
+echo "This next step is optional - you can set the directories in your package"
+echo "to some sane permissions. If any of the directories in your package have"
+echo "special permissions, then DO NOT reset them here!"
+echo
+echo "Would you like to reset all directory permissions to 755 (drwxr-xr-x) and"
+echo -n "directory ownerships to root.root ([y]es, [n]o)? "
+if [ ! "$CHOWN" ]; then
+ read CHOWN;
+ echo
+else
+ echo $CHOWN
+ echo
+fi
+if [ "$CHOWN" = "y" ]; then
+ find . -type d -exec chmod -v 755 {} \;
+ find . -type d -exec chown -v root.root {} \;
+fi
+
+echo "Creating Slackware package: ${TARGET_NAME}/${TAR_NAME}.${EXTENSION}"
+echo
+rm -f ${TARGET_NAME}/${TAR_NAME}.${EXTENSION}
+case $EXTENSION in
+'tgz' | 'tar.gz' )
+ $TAR cvf - . | gzip -9c > ${TARGET_NAME}/${TAR_NAME}.${EXTENSION}
+ ERRCODE=$?
+ if [ ! $? = 0 ]; then
+ echo "ERROR: gzip returned error code $? -- makepkg failed."
+ fi
+ ;;
+'tbz' | 'tar.bz2' )
+ $TAR cvf - . | bzip2 -9c > ${TARGET_NAME}/${TAR_NAME}.${EXTENSION}
+ ERRCODE=$?
+ if [ ! $ERRCODE = 0 ]; then
+ echo "ERROR: bzip2 returned error code $ERRCODE -- makepkg failed."
+ fi
+ ;;
+'tlz' | 'tar.lzma' )
+ $TAR cvf - . | lzma -c > ${TARGET_NAME}/${TAR_NAME}.${EXTENSION}
+ ERRCODE=$?
+ if [ ! $ERRCODE = 0 ]; then
+ echo "ERROR: lzma returned error code $ERRCODE -- makepkg failed."
+ fi
+ ;;
+'txz' | 'tar.xz' )
+ $TAR cvf - . | xz -c > ${TARGET_NAME}/${TAR_NAME}.${EXTENSION}
+ ERRCODE=$?
+ if [ ! $ERRCODE = 0 ]; then
+ echo "ERROR: xz returned error code $ERRCODE -- makepkg failed."
+ fi
+ ;;
+esac
+
+# Warn of zero-length files:
+find . -type f -size 0c | while read file ; do
+ echo "WARNING: zero length file $(echo $file | cut -b3-)"
+done
+
+# Warn of corrupt or empty gzip files:
+find . -type f -name '*.gz' | while read file ; do
+ if ! gzip -t $file 1> /dev/null 2> /dev/null ; then
+ echo "WARNING: gzip test failed on $(echo $file | cut -b3-)"
+ else
+ if [ "$(gzip -l $file | tail -n 1 | tr -s ' ' | cut -f 3 -d ' ')" -eq 0 ]; then
+ echo "WARNING: $(echo $file | cut -b3-) is an empty gzipped file"
+ fi
+ fi
+done
+
+# Some more handy warnings:
+if [ -d usr/share/man ]; then
+ echo "WARNING: /usr/share/man (with possibly not gzipped man pages) detected"
+fi
+
+if [ -d usr/share/info ]; then
+ echo "WARNING: /usr/share/info (with possibly not gzipped info pages) detected"
+fi
+
+if find . | grep site_perl 1> /dev/null ; then
+ echo "WARNING: site_perl directory detected (this is fine for a local package build)"
+fi
+
+echo
+echo "Slackware package ${TARGET_NAME}/${TAR_NAME}.${EXTENSION} created."
+echo
diff --git a/source/a/pkgtools/scripts/pkgtool b/source/a/pkgtools/scripts/pkgtool
new file mode 100644
index 000000000..6191e36e7
--- /dev/null
+++ b/source/a/pkgtools/scripts/pkgtool
@@ -0,0 +1,754 @@
+#!/bin/sh
+#
+# Copyright 1993, 1994, 1995, 1996, 1997,
+# 1998, 1999 Patrick Volkerding, Moorhead, MN USA
+# Copyright 2001, 2004 Slackware Linux, Inc., Concord, CA USA
+# All rights reserved.
+# Copyright 2007, 2009 Patrick Volkerding, Sebeka, MN, USA
+#
+# 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.
+#
+
+# Sat Apr 25 21:18:53 UTC 2009
+# Converted to use new pkgbase() function to remove pathname and
+# valid package extensions.
+#
+# Wed Oct 31 16:28:46 CDT 2007
+# * Thanks to Gabriele Inghirami for a patch allowing this script to work
+# with much larger numbers of installed packages.
+# Wed, 27 Apr 1994 00:06:50 -0700 (PDT)
+# * Optimization by David Hinds.
+# Sun Oct 24 23:11:40 BST 2004
+# * Further optimisations by Jim Hawkins <jawkins@armedslack.org>
+# - dramatically improved the speed of the "View" option
+# Thu Nov 04 12:19:56 BST 2004
+# * More optimisations by Jim Hawkins
+# - improved "Remove" speed in a similar manner to "View"
+# Wed Jan 12 16:53:48 GMT 2005
+# * Fixed quoting bug thanks to Lasse Collin
+# Wed Jan 26 23:06:22 GMT 2005
+# * Fix for non-standard package descriptions by Jim Hawkins
+
+# 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
+}
+
+SOURCE_DIR=/var/log/mount
+ASK="tagfiles"
+if [ -L /bin/chmod -a -L /bin/chown ]; then # probably on the bootdisk using busybox
+ TARGET_DIR=/mnt
+ TMP=/mnt/var/log/setup/tmp
+ if mount | grep "on /mnt" 1> /dev/null 2>&1 ; then # good
+ true
+ else # bad
+ echo
+ echo
+ echo "You can't run pkgtool from the rootdisk until you've mounted your Linux"
+ echo "partitions beneath /mnt. Here are some examples of this:"
+ echo
+ echo "If your root partition is /dev/hda1, and is using ext2fs, you would type:"
+ echo "mount /dev/hda1 /mnt -t ext2"
+ echo
+ echo "Then, supposing your /usr partition is /dev/hda2, you must do this:"
+ echo "mount /dev/hda2 /mnt/usr -t ext2"
+ echo
+ echo "Please mount your Linux partitions and then run pkgtool again."
+ echo
+ exit
+ fi
+else
+ TARGET_DIR=/
+ TMP=/var/log/setup/tmp
+fi
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+ chmod 700 $TMP
+ fi
+ADM_DIR=$TARGET_DIR/var/log
+LOG=$TMP/PKGTOOL.REMOVED
+
+# remove whitespace
+crunch() {
+ while read FOO ; do
+ echo $FOO
+ done
+}
+
+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
+ # cruft for later ;)
+ #VER=$(expr $INDEX - 2)
+ #VER="$(echo $STRING | cut -f $VER -d -)"
+ #ARCH=$(expr $INDEX - 1)
+ #ARCH="$(echo $STRING | cut -f $ARCH -d -)"
+ #BUILD="$(echo $STRING | cut -f $INDEX -d -)"
+ fi
+ fi
+}
+
+remove_packages() {
+ for pkg_name in $(cat $TMP/return | tr -d "\042")
+ do
+ if [ -r $ADM_DIR/packages/$pkg_name ]; then
+ dialog --title "PACKAGE REMOVAL IN PROGRESS" --cr-wrap --infobox \
+"\nRemoving package $pkg_name.\n\
+\n\
+Since each file must be checked \
+against the contents of every other installed package to avoid wiping out \
+areas of overlap, this process can take quite some time. If you'd like to \
+watch the progress, flip over to another virtual console and type:\n\
+\n\
+tail -f $TMP/PKGTOOL.REMOVED\n" 13 60
+ export ROOT=$TARGET_DIR
+ removepkg $pkg_name >> $LOG 2> /dev/null
+ else
+ echo "No such package: $pkg_name. Can't remove." >> $LOG
+ fi
+ done
+}
+
+create_list_of_installed_packages()
+{
+ FILES=$(ls $ADM_DIR/packages)
+ if [ -n "$FILES" ]; then
+ cd $ADM_DIR/packages
+ { grep '^PACKAGE DESCRIPTION:$' -Z -H -m1 -A1 $FILES; echo; } \
+ | sed -n 'h;n;/\x00/{h;n;};x;s/ */ /g;s/ $//;s/[\"`$]/\\&/g
+ s/\(.*\)\x00\([^:]*:\)\? *\(.*\)/ "\1" "\3" "View information about package \1" \\/;p' > $TMP/list_of_installed_packages \
+
+ fi
+}
+
+ create_list_of_files_to_remove ()
+{
+FILES=$(ls $ADM_DIR/packages)
+ if [ -n "$FILES" ]; then
+ cd $ADM_DIR/packages
+ { grep '^PACKAGE DESCRIPTION:$' -Z -H -m1 -A1 $FILES; echo; } \
+ | sed -n 'h;n;/\x00/{h;n;};x;s/ */ /g;s/ $//;s/[\"`$]/\\&/g
+ s/\(.*\)\x00\([^:]*:\)\? *\(.*\)/ "\1" "\3" off "Select\/Unselect removing package \1" \\/;p' > $TMP/temporary_list \
+
+ fi
+}
+
+# Here, we read the list of arguments passed to the pkgtool script.
+if [ $# -gt 0 ]; then # there are arguments to the command
+ while [ $# -gt 0 ]; do
+ case "$1" in
+ -sets | --sets)
+ DISK_SETS=$(echo $2 | tr "[A-Z]" "[a-z]") ; shift 2 ;;
+ -source_mounted | --source-mounted)
+ SOURCE_MOUNTED="always" ; shift 1 ;;
+ -ignore_tagfiles | --ignore-tagfiles)
+ ASK="never" ; shift 1 ;;
+ -tagfile | --tagfile)
+ USETAG=$2 ; shift 2 ;;
+ -source_dir | --source_dir)
+ SOURCE_DIR=$2 ; shift 2 ;;
+ -target_dir | --target_dir)
+ TARGET_DIR=$2
+ ADM_DIR=$TARGET_DIR/var/log
+ shift 2 ;;
+ -source_device | --source_device)
+ SOURCE_DEVICE=$2 ; shift 2 ;;
+ esac
+ done
+else # there were no arguments, so we'll get the needed information from the
+ # user and then go on.
+ CMD_START="true"
+ rm -f $TMP/SeT*
+ while [ 0 ]; do
+ dialog --title "Slackware Package Tool (pkgtool version 13.0)" \
+--menu "\nWelcome to the Slackware package tool.\n\
+\nWhich option would you like?\n" 17 75 7 \
+"Current" "Install packages from the current directory" \
+"Other" "Install packages from some other directory" \
+"Floppy" "Install packages from floppy disks" \
+"Remove" "Remove packages that are currently installed" \
+"View" "View the list of files contained in a package" \
+"Setup" "Choose Slackware installation scripts to run again" \
+"Exit" "Exit Pkgtool" 2> $TMP/reply
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/reply
+ dialog --clear
+ exit
+ fi
+ REPLY="$(cat $TMP/reply)"
+ rm -f $TMP/reply
+ if [ "$REPLY" = "Exit" ]; then
+ dialog --clear
+ exit
+ fi
+ if [ "$REPLY" = "Setup" ]; then
+ echo 'dialog --title "SELECT SYSTEM SETUP SCRIPTS" --item-help --checklist \
+ "Please use the spacebar to select the setup scripts to run. Hit enter when you \
+are done selecting to run the scripts." 17 70 9 \' > $TMP/setupscr
+ for script in $ADM_DIR/setup/setup.* ; do
+ BLURB=$(grep '#BLURB' $script | cut -b8-)
+ if [ "$BLURB" = "" ]; then
+ BLURB="\"\""
+ fi
+ echo " \"$(basename $script | cut -f2- -d .)\" $BLURB \"no\" $BLURB \\" >> $TMP/setupscr
+ done
+ echo "2> $TMP/return" >> $TMP/setupscr
+ . $TMP/setupscr
+ if [ ! "$(cat $TMP/return)" = "" ]; then
+ # Run each script:
+ for script in $(cat $TMP/return) ; do
+ scrpath=$ADM_DIR/setup/setup.$(echo $script | tr -d \")
+ rootdevice="$(mount | head -n 1 | cut -f 1 -d ' ')"
+ ( COLOR=on ; cd $TARGET_DIR ; . $scrpath / $rootdevice )
+ done
+ fi
+ rm -f $TMP/return $TMP/setupscr
+ continue
+ fi # end Setup
+
+ if [ "$REPLY" = "View" ]; then
+create_list_of_installed_packages
+ DEFITEM=""
+ export DEFITEM
+ #dialog --title "SCANNING" --infobox "Please wait while \
+#Pkgtool scans your system to determine which packages you have \
+#installed and prepares a list for you." 0 0
+ (
+ echo 'dialog $DEFITEM --item-help --menu "Please select the package you wish to view." 17 68 10 \
+ --file $TMP/list_of_installed_packages \'
+ echo "2> $TMP/return"
+ ) > $TMP/viewscr
+ while [ 0 ]; do
+ . $TMP/viewscr
+ if [ ! "$(cat $TMP/return)" = "" ]; then
+ DEFITEM="--default-item $(cat $TMP/return)"
+ dialog --title "CONTENTS OF PACKAGE: $(cat $TMP/return)" --no-shadow --textbox "$ADM_DIR/packages/$(cat $TMP/return)" \
+ 0 0 2> /dev/null
+ else
+ break
+ fi
+ done
+ rm -f $TMP/return $TMP/viewscr $TMP/tmpmsg $TMP/list_of_installed_packages
+ # This will clean up after most defective packages:
+ chmod 755 /
+ chmod 1777 /tmp
+ continue
+ fi
+
+ if [ "$REPLY" = "Remove" ]; then
+ #dialog --title "SCANNING" --infobox "Please wait while Pkgtool scans \
+#your system to determine which packages you have installed and prepares \
+#a list for you." 0 0
+ # end section
+ (
+create_list_of_files_to_remove #call the function to create a list of installed packages
+ cat << EOF
+dialog --title "SELECT PACKAGES TO REMOVE" --item-help --checklist \
+"Please select the \
+packages you wish to Remove. Use the \
+spacebar to select packages to delete, and the UP/DOWN arrow keys to \
+scroll up and down through the entire list." 20 75 11 \
+--file $TMP/temporary_list \\
+EOF
+ echo "2> $TMP/return"
+ ) > $TMP/rmscript
+ if [ -L $LOG -o -r $LOG ]; then
+ rm -f $LOG
+ fi
+ cat /dev/null > $LOG
+ chmod 600 $LOG
+ chmod 700 $TMP/rmscript
+ export ADM_DIR;
+ $TMP/rmscript
+ remove_packages
+ if [ "$(cat $TMP/PKGTOOL.REMOVED)" = "" ]; then
+ rm -f $TMP/PKGTOOL.REMOVED
+ dialog --title "NO PACKAGES REMOVED" --msgbox "Hit OK to return \
+to the main menu." 5 40
+ else
+ dialog --title "PACKAGE REMOVAL COMPLETE" --msgbox "The packages have \
+been removed. A complete log of the files that were removed has been created \
+in $TMP: PKGTOOL.REMOVED." 0 0
+ fi
+ rm -f $TMP/rmscript $TMP/return $TMP/tmpmsg $TMP/SeT* $TMP/temporary_list
+ chmod 755 /
+ chmod 1777 /tmp
+# No, return to the main menu:
+# exit
+ elif [ "$REPLY" = "Floppy" ]; then
+ dialog --title "SELECT FLOPPY DRIVE" --menu "Which floppy drive would \
+you like to install from?" \
+11 70 4 \
+"/dev/fd0u1440" "1.44 MB first floppy drive" \
+"/dev/fd1u1440" "1.44 MB second floppy drive" \
+"/dev/fd0h1200" "1.2 MB first floppy drive" \
+"/dev/fd1h1200" "1.2 MB second floppy drive" 2> $TMP/wdrive
+ if [ $? = 1 ]; then
+ dialog --clear
+ exit
+ fi
+ SOURCE_DEVICE="$(cat $TMP/wdrive)"
+ rm -f $TMP/wdrive
+ cat << EOF > $TMP/tmpmsg
+
+Enter the names of any disk sets you would like to install.
+Separate the sets with a space, like this: a b oi x
+
+To install packages from one disk, hit [enter] without typing
+anything.
+
+EOF
+ dialog --title "SOFTWARE SELECTION" --inputbox "$(cat $TMP/tmpmsg)" 13 70 2> $TMP/sets
+ DISK_SETS="$(cat $TMP/sets)"
+ rm -f $TMP/sets
+ if [ "$DISK_SETS" = "" ]; then
+ DISK_SETS="disk"
+ else
+ DISK_SETS=$(echo $DISK_SETS | sed 's/ /#/g')
+ DISK_SETS="#$DISK_SETS"
+ fi
+ break;
+ elif [ "$REPLY" = "Other" ]; then
+ dialog --title "SELECT SOURCE DIRECTORY" --inputbox "Please enter the name of the directory that you wish to \
+install packages from:" 10 50 2> $TMP/pkgdir
+ if [ $? = 1 ]; then
+ rm -f $TMP/pkgdir $TMP/SeT*
+ dialog --clear
+ exit
+ fi
+ SOURCE_DIR="$(cat $TMP/pkgdir)"
+ SOURCE_MOUNTED="always"
+ DISK_SETS="disk"
+ chmod 755 $TARGET_DIR
+ chmod 1777 $TARGET_DIR/tmp
+ rm -f $TMP/pkgdir
+ if [ ! -d $SOURCE_DIR ]; then
+ dialog --title "DIRECTORY NOT FOUND" --msgbox "The directory you want to \
+install from ($SOURCE_DIR) \
+does not seem to exist. Please check the directory and then try again." \
+10 50
+ dialog --clear
+ exit
+ fi
+ break;
+ else # installing from current directory
+ SOURCE_MOUNTED="always"
+ SOURCE_DIR="$PWD"
+ DISK_SETS="disk"
+ chmod 755 $TARGET_DIR
+ chmod 1777 $TARGET_DIR/tmp
+ break;
+ fi
+ done
+fi
+if [ "$DISK_SETS" = "disk" ]; then
+ ASK="always"
+fi
+
+mount_the_source() {
+ # is the source supposed to be mounted already?
+ if [ "$SOURCE_MOUNTED" = "always" ]; then
+ # The source should already be mounted, so we test it
+ if [ ! -d $SOURCE_DIR ]; then # the directory is missing
+ cat << EOF > $TMP/tmpmsg
+
+Your source device cannot be accessed properly.
+
+Please be sure that it is mounted on $SOURCE_DIR,
+and that the Slackware disks are found in subdirectories
+of $SOURCE_DIR like specified.
+
+EOF
+ dialog --title "MOUNT ERROR" --msgbox "$(cat $TMP/tmpmsg)" 11 67
+ rm -f $TMP/tmpmsg
+ exit 1;
+ fi
+ return 0;
+ fi
+ dialog --title "INSERT DISK" --menu "Please insert disk $1 and \
+press ENTER to continue." \
+11 50 3 \
+"Continue" "Continue with the installation" \
+"Skip" "Skip the current disk series" \
+"Quit" "Abort the installation process" 2> $TMP/reply
+ if [ ! $? = 0 ]; then
+ REPLY="Quit"
+ else
+ REPLY="$(cat $TMP/reply)"
+ fi
+ rm -f $TMP/reply
+ if [ "$REPLY" = "Skip" ]; then
+ return 1;
+ fi
+ if [ "$REPLY" = "Quit" ]; then
+ dialog --title "ABORTING" --msgbox "Aborting software installation." 5 50
+ chmod 755 $TARGET_DIR
+ chmod 1777 $TARGET_DIR/tmp
+ exit 1;
+ fi;
+ # Old line:
+ # mount -r -t msdos $SOURCE_DEVICE $SOURCE_DIR
+ # New ones: (thanks to Andy Schwierskott!)
+ go_on=y
+ not_successfull_mounted=1
+ while [ "$go_on" = y -a "$not_successfull_mounted" = 1 ]; do
+ mount -r -t msdos $SOURCE_DEVICE $SOURCE_DIR
+ not_successfull_mounted=$?
+ if [ "$not_successfull_mounted" = 1 ]; then
+ mount_answer=x
+ while [ "$mount_answer" != "y" -a "$mount_answer" != "q" ] ; do
+ dialog --title "MOUNT PROBLEM" --menu "Media was not successfully \
+mounted! Do you want to \
+retry, or quit?" 10 60 2 \
+"Yes" "Try to mount the disk again" \
+"No" "No, abort." 2> $TMP/mntans
+ mount_answer="$(cat $TMP/mntans)"
+ rm -f $TMP/mntans
+ if [ "$mount_answer" = "Yes" ]; then
+ mount_answer="y"
+ else
+ mount_answer="q"
+ fi
+ done
+ go_on=$mount_answer
+ fi
+ done
+ test $not_successfull_mounted = 0
+}
+
+umount_the_source() {
+ if [ ! "$SOURCE_MOUNTED" = "always" ]; then
+ umount $SOURCE_DEVICE 1> /dev/null 2>&1
+ fi;
+}
+
+install_disk() {
+ mount_the_source $1
+ if [ $? = 1 ]; then
+ umount_the_source;
+ return 1;
+ fi
+ CURRENT_DISK_NAME="$1"
+ PACKAGE_DIR=$SOURCE_DIR
+ if [ "$SOURCE_MOUNTED" = "always" -a ! "$DISK_SETS" = "disk" ]; then
+ PACKAGE_DIR=$PACKAGE_DIR/$1
+ fi
+
+ # If this directory is missing or contains no *.t?z files, bail.
+ if [ ! -d $PACKAGE_DIR ]; then
+ return 1
+ fi
+ if ! ls $PACKAGE_DIR/*.t?z 1> /dev/null 2> /dev/null ; then
+ return 1
+ fi
+
+ #
+ # look for tagfile for this series and copy into $TMP/tagfile
+ #
+ touch $TMP/tagfile
+ if [ ! "$DISK_SETS" = "disk" ]; then
+ if [ -r $TMP/SeTtagext ]; then
+ if [ -r $PACKAGE_DIR/tagfile$(cat $TMP/SeTtagext) ]; then
+ cat $PACKAGE_DIR/tagfile$(cat $TMP/SeTtagext) >> $TMP/tagfile
+ else
+ if [ -r $PACKAGE_DIR/tagfile ]; then
+ cat $PACKAGE_DIR/tagfile >> $TMP/tagfile
+ fi
+ fi
+
+ #
+ # Do we need to follow a custom path to the tagfiles?
+ #
+ elif [ -r $TMP/SeTtagpath ]; then
+ custom_path=$(cat $TMP/SeTtagpath)
+ short_path=$(basename $PACKAGE_DIR)
+
+ # If tagfile exists at the specified custom path, copy it over.
+ if [ -r $custom_path/$short_path/tagfile ]; then
+ cat $custom_path/$short_path/tagfile >> $TMP/tagfile
+
+ else # well, I guess we'll use the default one then.
+ if [ -r $PACKAGE_DIR/tagfile ]; then
+ cat $PACKAGE_DIR/tagfile >> $TMP/tagfile
+ fi
+ fi
+ #
+ # We seem to be testing for this too often... maybe this code should
+ # be optimized a little...
+ #
+ elif [ -r $PACKAGE_DIR/tagfile ]; then
+ cat $PACKAGE_DIR/tagfile >> $TMP/tagfile
+ fi
+
+ #
+ # Execute menus if in QUICK mode:
+ #
+ if [ -r $TMP/SeTQUICK -a -r $PACKAGE_DIR/maketag ]; then
+ if [ ! "$MAKETAG" = "" -a -r $PACKAGE_DIR/$MAKETAG ]; then # use alternate maketag
+ sh $PACKAGE_DIR/$MAKETAG
+ else
+ sh $PACKAGE_DIR/maketag
+ fi
+ if [ -r $TMP/SeTnewtag ]; then
+ mv $TMP/SeTnewtag $TMP/tagfile
+ fi
+ fi
+
+ #
+ # Protect tagfile from hacker attack:
+ #
+ if [ -r $TMP/tagfile ]; then
+ chmod 600 $TMP/tagfile
+ fi
+
+ fi # ! "$DISK_SETS" = "disk"
+
+ # It's possible that the tagfile was specified on the command line. If that's
+ # the case, then we'll just override whatever we figured out up above.
+ if [ ! "$USETAG" = "" ]; then
+ cat $USETAG > $TMP/tagfile
+ fi
+
+ # If there's a catalog file present, use it to check for missing files.
+ # If not, forget about that and install whatever's there.
+ if [ "$1" = "single_disk" -o -r $PACKAGE_DIR/disk$1 -o -r $PACKAGE_DIR/package-list.txt ]; then
+ if [ -r $PACKAGE_DIR/package-list.txt ]; then
+ CATALOG_FILE=$PACKAGE_DIR/package-list.txt
+ else
+ CATALOG_FILE=$(basename $PACKAGE_DIR/disk*);
+ fi
+ if [ -r $PACKAGE_DIR/$CATALOG_FILE -a ! -d $PACKAGE_DIR/$CATALOG_FILE ]; then
+ if grep CONTENTS: $PACKAGE_DIR/$CATALOG_FILE 1> /dev/null 2>&1 ; then
+ # First we check for missing packages...
+ for PKGTEST in $(grep "^CONTENTS:" $PACKAGE_DIR/$CATALOG_FILE | cut -f2- -d : 2> /dev/null) ; do
+ # This is not a perfect test. (say emacs is missing but emacs-nox is not)
+ if ls $PACKAGE_DIR/$PKGTEST*.t?z 1> /dev/null 2> /dev/null ; then # found something like it
+ true
+ else
+ cat << EOF > $TMP/tmpmsg
+
+WARNING!!!
+
+While looking through your index file ($CATALOG_FILE),
+I noticed that you might be missing a package:
+
+$PKGTEST-\*-\*-\*.t?z
+
+that is supposed to be on this disk (disk $1). You may go
+on with the installation if you wish, but if this is a
+crucial file I'm making no promises that your machine will
+boot.
+
+EOF
+ dialog --title "FILE MISSING FROM YOUR DISK" --msgbox \
+"$(cat $TMP/tmpmsg)" 17 67
+ fi
+ done # checking for missing packages
+ # Now we test for extra packages:
+ ALLOWED="$(grep CONTENTS: $PACKAGE_DIR/$CATALOG_FILE | cut -b10- 2> /dev/null)"
+ for PACKAGE_FILENAME in $PACKAGE_DIR/*.t?z; do
+ BASE=$(pkgbase $PACKAGE_FILENAME)
+ BASE="$(package_name $BASE)"
+ if echo $ALLOWED | grep $BASE 1> /dev/null 2>&1 ; then
+ true
+ else
+ cat << EOF > $TMP/tmpmsg
+
+WARNING!!!
+
+While looking through your index file ($CATALOG_FILE),
+I noticed that you have this extra package:
+
+($BASE.t?z)
+
+that I don't recognize. Please be sure this package is
+really supposed to be here, and is not left over from an
+old version of Slackware. Sometimes this can happen at the
+archive sites.
+
+EOF
+ dialog --title "EXTRA FILE FOUND ON YOUR DISK" \
+--msgbox "$(cat $TMP/tmpmsg)" 17 67
+ rm -f $TMP/tmpmsg
+ fi
+ done
+ fi
+ fi
+ fi # check for missing/extra packages
+
+ # Install the packages:
+ for PACKAGE_FILENAME in $PACKAGE_DIR/*.t?z; do
+ if [ "$PACKAGE_FILENAME" = "$PACKAGE_DIR/*.t?z" ]; then
+ continue;
+ fi
+ if [ "$ASK" = "never" ]; then # install the package
+ installpkg -root $TARGET_DIR -infobox -tagfile $TMP/tagfile $PACKAGE_FILENAME
+ ERROR=$?
+ elif [ "$ASK" = "tagfiles" ]; then
+ installpkg -root $TARGET_DIR -menu -tagfile $TMP/tagfile $PACKAGE_FILENAME
+ ERROR=$?
+ else # ASK should be = always here, and that's how we'll treat it
+ installpkg -root $TARGET_DIR -menu -ask -tagfile $TMP/tagfile $PACKAGE_FILENAME
+ ERROR=$?
+ fi
+ # Check for abort:
+ if [ "$ERROR" = "99" ]; then
+ umount_the_source;
+ chmod 755 $TARGET_DIR
+ chmod 1777 $TARGET_DIR/tmp
+ exit 1;
+ fi
+ done
+ OUTTAHERE="false"
+ if [ -r $PACKAGE_DIR/install.end ]; then
+ OUTTAHERE="true"
+ fi
+ umount_the_source;
+ if [ "$OUTTAHERE" = "true" ]; then
+ return 1;
+ fi
+}
+
+install_disk_set() { # accepts one argument: the series name in lowercase.
+ SERIES_NAME=$1
+ CURRENT_DISK_NUMBER="1";
+ while [ 0 ]; do
+ # Don't start numbering the directories until 2:
+ if [ $CURRENT_DISK_NUMBER = 1 ]; then
+ DISKTOINSTALL=$SERIES_NAME
+ else
+ DISKTOINSTALL=$SERIES_NAME$CURRENT_DISK_NUMBER
+ fi
+ install_disk $DISKTOINSTALL
+ if [ ! $? = 0 ]; then # install.end was found, or the user chose
+ # to quit installing packages.
+ return 0;
+ fi
+ CURRENT_DISK_NUMBER=$(expr $CURRENT_DISK_NUMBER + 1)
+ done;
+}
+
+# /* main() */ ;)
+if [ "$DISK_SETS" = "disk" ]; then
+ install_disk single_disk;
+ ASK="always"
+else
+ touch $TMP/tagfile
+ chmod 600 $TMP/tagfile
+ if echo $DISK_SETS | grep "#a#" 1> /dev/null 2>&1; then
+ A_IS_NEEDED="true"
+ else
+ A_IS_NEEDED="false"
+ fi
+ while [ 0 ];
+ do
+ while [ 0 ]; # strip leading '#'s
+ do
+ if [ "$(echo $DISK_SETS | cut -b1)" = "#" ]; then
+ DISK_SETS="$(echo $DISK_SETS | cut -b2-)"
+ else
+ break;
+ fi
+ done
+ if [ "$A_IS_NEEDED" = "true" ]; then
+ cat << EOF > $TMP/tmpmsg
+
+--- Installing package series ==>a<==
+
+EOF
+ dialog --infobox "$(cat $TMP/tmpmsg)" 5 45
+ sleep 1
+ rm -f $TMP/tmpmsg
+ install_disk_set a;
+ A_IS_NEEDED="false"
+ fi
+ count="1"
+ if [ "$(echo $DISK_SETS | cut -b$count)" = "" ]; then
+ break; # we be done here :^)
+ else
+ count="2"
+ while [ 0 ]; do
+ if [ "$(echo $DISK_SETS | cut -b$count)" = "" -o "$(echo $DISK_SETS | cut -b$count)" = "#" ]; then
+ count="$(expr $count - 1)"
+ break;
+ else
+ count="$(expr $count + 1)"
+ fi
+ done
+ fi
+ diskset="$(echo $DISK_SETS | cut -b1-$count)"
+ count="$(expr $count + 1)"
+ DISK_SETS="$(echo $DISK_SETS | cut -b$count-)"
+ if [ "$diskset" = "a" ]; then
+ continue; # we expect this to be done elsewhere
+ fi
+ cat << EOF > $TMP/tmpmsg
+
+Installing package series ==>$diskset<==
+
+EOF
+ dialog --infobox "$(cat $TMP/tmpmsg)" 5 45
+ sleep 1
+ rm -f $TMP/tmpmsg
+ install_disk_set $diskset;
+ done
+fi
+
+if [ "$DISK_SETS" = "disk" -o "$CMD_START" = "true" ]; then
+ if [ -r $TMP/tagfile ]; then
+ rm $TMP/tagfile
+ fi
+ dialog --clear
+fi
+chmod 755 $TARGET_DIR $TARGET_DIR/var $TARGET_DIR/usr
+chmod 1777 $TARGET_DIR/tmp
diff --git a/source/a/pkgtools/scripts/removepkg b/source/a/pkgtools/scripts/removepkg
new file mode 100644
index 000000000..8b5a911dd
--- /dev/null
+++ b/source/a/pkgtools/scripts/removepkg
@@ -0,0 +1,430 @@
+#!/bin/sh
+# Slackware remove package script
+#
+# Sat Apr 25 21:18:53 UTC 2009 (12.34567890b)
+# Converted to use new pkgbase() function to remove pathname and
+# valid package extensions.
+#
+# Revision 12.34567890 Sun Apr 5 20:59:32 CDT 2009 <volkerdi>
+# - Support packages with the extensions: .tgz, .tbz, .tlz, .txz
+#
+# Revision 1.9 Wed Oct 31 14:04:28 CDT 2007 volkerding
+# - Fix problem removing packages with a large number of fields.
+# Thanks to Niki Kovacs for noticing this, and to Piter Punk
+# for the patch.
+# - Use LC_ALL=C locale, which is much faster with "sort".
+# Thanks to Tsomi.
+# - Don't try to remove any package that starts with '-'. This
+# is not a proper package name (usually a typo), and results
+# in the package database being broken. Thanks to Jef Oliver.
+# - Patched cat_except() to allow the last Slackware package on
+# a partition to be removed (using ROOT=, of course)
+# Thanks to Selkfoster for the patch, and to everyone else who
+# proposed solutions before. This issue really wasn't given
+# the highest priority before, but I figured while I'm in here...
+#
+# Revision 1.8 Thu Nov 22 14:00:13 PST 2001 volkerding Rel $
+# - Move $TMP underneath $ROOT
+# - Understand the idea of a base package name, so that packages
+# can be removed with any of these notations:
+# removepkg foo-1.0-i386-1.tgz
+# removepkg foo-1.0-i386-1
+# removepkg foo.tgz
+# removepkg foo
+#
+# Revision 1.7 2001/03/30 12:36:28 volkerding
+# - Strip extra ".tgz" from input names.
+#
+# Revision 1.6 1999/03/25 18:26:41 volkerding
+# - Use external $ROOT variable, like installpkg.
+#
+# Revision 1.5.1 1998/03/18 15:37:28 volkerding
+# - Since removepkg is always run by root, the temp directory has been
+# moved from /tmp to a private directory to avoid symlink attacks from
+# malicious users.
+#
+# Revision 1.5 1997/06/26 12:09:53 franke
+# - Fixed old bug in TRIGGER regex setting
+# - -preserve/-copy options now preserve non-unique files
+# and empty directories also
+#
+# Revision 1.4 1997/06/09 13:21:36 franke
+# - Package file preserve (-preserve, -copy) added.
+# - Don't execute "rm -rf" lines from doinst.sh, removing links explicit.
+# - Warning on no longer existing files added.
+# - Warning on files changed after package installation added.
+# - Intermediate file preserve (-keep) added.
+# - Check for required files/links now done on a combined list.
+# - Write access to /var/log/{packages,scripts} no longer necessary for -warn.
+#
+# Revision 1.3 1997/06/08 13:03:05 franke
+# Merged with revision 1.1.1.1
+#
+# Revision 1.2 1996/06/01 20:04:26 franke
+# Delete empty directories & formated manual pages added
+#
+# Revision 1.1.1.1 1995/12/18 21:20:42 volkerding
+# Original Version from Slackware 3.1
+#
+# Revision 1.1 1995/06/05 22:49:11 volkerding
+# Original Version from Slackware 3.0
+#
+
+# Copyright 1994, 1995, 1998 Patrick Volkerding, Moorhead, Minnesota USA
+# Copyright 2001, 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.
+#
+
+# 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
+}
+
+# This makes "sort" run much faster:
+export LC_ALL=C
+
+# Make sure there's a proper temp directory:
+TMP=$ROOT/var/log/setup/tmp
+# If the $TMP directory doesn't exist, create it:
+if [ ! -d $TMP ]; then
+ rm -rf $TMP # make sure it's not a symlink or something stupid
+ mkdir -p $TMP
+ chmod 700 $TMP # no need to leave it open
+fi
+ADM_DIR=$ROOT/var/log
+PRES_DIR=$TMP/preserved_packages
+
+# This simple cat_except() should be used on the installer,
+# since the busybox "find" can't handle the complex find
+# syntax:
+#cat_except() {
+# ( cd "$1" && cat $(ls * | sed "/^$2\$/d"))
+#}
+
+# This version of cat_except() allows the last package to be
+# removed when ROOT= is used:
+cat_except() {
+ ( cd "$1" && \
+ if [ $(find . -type f -maxdepth 1 | wc -l) -ne 1 ]; then
+ cat $(find . -type f -maxdepth 1 | grep -v "$2")
+ fi
+ )
+}
+
+extract_links() {
+ sed -n 's,^( *cd \([^ ;][^ ;]*\) *; *rm -rf \([^ )][^ )]*\) *) *$,\1/\2,p'
+}
+
+preserve_file() {
+ if [ "$PRESERVE" = "true" ]; then
+ F="$(basename "$1")"
+ D="$(dirname "$1")"
+ if [ ! -d "$PRES_DIR/$PKGNAME/$D" ]; then
+ mkdir -p "$PRES_DIR/$PKGNAME/$D" || return 1
+ fi
+ cp -p "$ROOT/$D/$F" "$PRES_DIR/$PKGNAME/$D" || return 1
+ fi
+ return 0
+}
+
+preserve_dir() {
+ if [ "$PRESERVE" = "true" ]; then
+ if [ ! -d "$PRES_DIR/$PKGNAME/$1" ]; then
+ mkdir -p "$PRES_DIR/$PKGNAME/$1" || return 1
+ fi
+ fi
+ return 0
+}
+
+keep_files() {
+ while read FILE ; do
+ if [ ! -d "$ROOT/$FILE" ]; then
+ if [ -r "$ROOT/$FILE" ]; then
+ echo " --> $ROOT/$FILE was found in another package. Skipping."
+ preserve_file "$FILE"
+ else
+ if [ "$(echo $FILE | cut -b1-8)" != "install/" ]; then
+ echo "WARNING: Nonexistent $ROOT/$FILE was found in another package. Skipping."
+ fi
+ fi
+ else
+ preserve_dir "$FILE"
+ fi
+ done
+}
+
+keep_links() {
+ while read LINK ; do
+ if [ -L "$ROOT/$LINK" ]; then
+ echo " --> $ROOT/$LINK (symlink) was found in another package. Skipping."
+ else
+ echo "WARNING: Nonexistent $ROOT/$LINK (symlink) was found in another package. Skipping."
+ fi
+ done
+}
+
+delete_files() {
+ while read FILE ; do
+ if [ ! -d "$ROOT/$FILE" ]; then
+ if [ -r "$ROOT/$FILE" ]; then
+ if [ "$ROOT/$FILE" -nt "$ADM_DIR/packages/$PKGNAME" ]; then
+ echo "WARNING: $ROOT/$FILE changed after package installation."
+ fi
+ if [ ! "$WARN" = "true" ]; then
+ echo " --> Deleting $ROOT/$FILE"
+ preserve_file "$FILE" && rm -f "$ROOT/$FILE"
+ else
+ echo " --> $ROOT/$FILE would be deleted"
+ preserve_file "$FILE"
+ fi
+ else
+ echo " --> $ROOT/$FILE no longer exists. Skipping."
+ fi
+ else
+ preserve_dir "$FILE"
+ fi
+ done
+}
+
+delete_links() {
+ while read LINK ; do
+ if [ -L "$ROOT/$LINK" ]; then
+ if [ ! "$WARN" = "true" ]; then
+ echo " --> Deleting symlink $ROOT/$LINK"
+ rm -f $ROOT/$LINK
+ else
+ echo " --> $ROOT/$LINK (symlink) would be deleted"
+ fi
+ else
+ echo " --> $ROOT/$LINK (symlink) no longer exists. Skipping."
+ fi
+ done
+}
+
+delete_dirs() {
+ sort -r | \
+ while read DIR ; do
+ if [ -d "$ROOT/$DIR" ]; then
+ if [ ! "$WARN" = "true" ]; then
+ if [ $(ls -a "$ROOT/$DIR" | wc -l) -eq 2 ]; then
+ echo " --> Deleting empty directory $ROOT/$DIR"
+ rmdir "$ROOT/$DIR"
+ else
+ echo "WARNING: Unique directory $ROOT/$DIR contains new files"
+ fi
+ else
+ echo " --> $ROOT/$DIR (dir) would be deleted if empty"
+ fi
+ fi
+ done
+}
+
+delete_cats() {
+ sed -n 's,/man\(./[^/]*$\),/cat\1,p' | \
+ while read FILE ; do
+ if [ -f "$ROOT/$FILE" ]; then
+ if [ ! "$WARN" = "true" ]; then
+ echo " --> Deleting $ROOT/$FILE (fmt man page)"
+ rm -f $ROOT/$FILE
+ else
+ echo " --> $ROOT/$FILE (fmt man page) would be deleted"
+ fi
+ fi
+ done
+}
+
+package_name() {
+ STRING=$(pkgbase $1)
+ # If we don't do this, commands run later will take the '-' to be an option
+ # and will destroy the package database. Packages should not contain spaces
+ # in them. Normally this type of problem results from a command line typo.
+ if [ "$(echo $STRING | cut -b 1)" = "-" ]; then
+ STRING="malformed-package-name-detected"
+ fi
+ # 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
+ # cruft for later ;)
+ #VER=$(expr $INDEX - 2)
+ #VER="$(echo $STRING | cut -f $VER -d -)"
+ #ARCH=$(expr $INDEX - 1)
+ #ARCH="$(echo $STRING | cut -f $ARCH -d -)"
+ #BUILD="$(echo $STRING | cut -f $INDEX -d -)"
+ fi
+ fi
+}
+
+# Conversion to 'comm' utility by Mark Wisdom.
+# is pretty nifty! :^)
+remove_packages() {
+ for PKGLIST in $*
+ do
+ PKGNAME=$(pkgbase $PKGLIST)
+ echo
+ # If we don't have a package match here, then we will attempt to find
+ # a package using the long name format (name-version-arch-build) for
+ # which the base package name was given. On a properly-managed machine,
+ # there should only be one package installed with a given basename, but
+ # we don't enforce this policy. If there's more than one, only one will
+ # be removed. If you want to remove them all, you'll need to run
+ # removepkg again until it removes all the same-named packages.
+ if [ ! -e $ADM_DIR/packages/$PKGNAME ]; then
+ SHORT="$(package_name $PKGNAME)"
+ for long_package in $ADM_DIR/packages/${PKGNAME}* ; do
+ if [ "$SHORT" = "$(package_name $long_package)" ]; then
+ PKGNAME="$(basename $long_package)"
+ fi
+ done
+ fi
+
+ if [ ! -e $ADM_DIR/packages/$PKGNAME ]; then
+ long_package=$(ls -1 $ADM_DIR/packages/${PKGNAME}* | grep -m 1 "${PKGNAME}-[^-]*-[^-]*-[^-]*$")
+ if [ -e "$long_package" ]; then
+ PKGNAME=$(basename $long_package)
+ fi
+ fi
+
+ if [ -r $ADM_DIR/packages/$PKGNAME ]; then
+ if [ ! "$WARN" = true ]; then
+ echo "Removing package $ADM_DIR/packages/$PKGNAME..."
+ fi
+ if fgrep "./" $ADM_DIR/packages/$PKGNAME 1> /dev/null 2>&1; then
+ TRIGGER="^\.\/"
+ else
+ TRIGGER="FILE LIST:"
+ fi
+ if [ ! "$WARN" = true ]; then
+ echo "Removing files:"
+ fi
+ sed -n "/$TRIGGER/,/^$/p" < $ADM_DIR/packages/$PKGNAME | \
+ fgrep -v "FILE LIST:" | sort -u > $TMP/delete_list$$
+ # Pat's new-new && improved pre-removal routine.
+ cat_except $ADM_DIR/packages $PKGNAME | sort -u > $TMP/required_list$$
+ if [ -r $ADM_DIR/scripts/$PKGNAME ]; then
+ extract_links < $ADM_DIR/scripts/$PKGNAME | sort -u > $TMP/del_link_list$$
+ cat_except $ADM_DIR/scripts $PKGNAME | extract_links | \
+ sort -u > $TMP/required_links$$
+ mv $TMP/required_list$$ $TMP/required_files$$
+ sort -u $TMP/required_links$$ $TMP/required_files$$ > $TMP/required_list$$
+ comm -12 $TMP/del_link_list$$ $TMP/required_list$$ | keep_links
+ comm -23 $TMP/del_link_list$$ $TMP/required_list$$ | delete_links
+ else
+ cat $ADM_DIR/scripts/* | extract_links | \
+ sort -u > $TMP/required_links$$
+ mv $TMP/required_list$$ $TMP/required_files$$
+ sort -u $TMP/required_links$$ $TMP/required_files$$ >$TMP/required_list$$
+ fi
+ comm -12 $TMP/delete_list$$ $TMP/required_list$$ | keep_files
+ comm -23 $TMP/delete_list$$ $TMP/required_list$$ > $TMP/uniq_list$$
+ delete_files < $TMP/uniq_list$$
+ delete_dirs < $TMP/uniq_list$$
+ delete_cats < $TMP/uniq_list$$
+ if [ ! "$KEEP" = "true" ]; then
+ rm -f $TMP/delete_list$$ $TMP/required_files$$ $TMP/uniq_list$$
+ rm -f $TMP/del_link_list$$ $TMP/required_links$$ $TMP/required_list$$
+ fi
+ if [ "$PRESERVE" = "true" ]; then
+ if [ -r $ADM_DIR/scripts/$PKGNAME ]; then
+ if [ ! -d "$PRES_DIR/$PKGNAME/install" ]; then
+ mkdir -p "$PRES_DIR/$PKGNAME/install"
+ fi
+ cp -p $ADM_DIR/scripts/$PKGNAME $PRES_DIR/$PKGNAME/install/doinst.sh
+ fi
+ fi
+ if [ ! "$WARN" = "true" ]; then
+ for DIR in $ADM_DIR/removed_packages $ADM_DIR/removed_scripts ; do
+ if [ ! -d $DIR ] ; then mkdir -p $DIR ; chmod 755 $DIR ; fi
+ done
+ mv $ADM_DIR/packages/$PKGNAME $ADM_DIR/removed_packages
+ if [ -r $ADM_DIR/scripts/$PKGNAME ]; then
+ mv $ADM_DIR/scripts/$PKGNAME $ADM_DIR/removed_scripts
+ fi
+ fi
+ else
+ echo "No such package: $ADM_DIR/packages/$PKGNAME. Can't remove."
+ fi
+ done
+}
+
+if [ "$#" = "0" ]; then
+ echo "Usage: $(basename $0) [-copy] [-keep] [-preserve] [-warn] packagename ..."; exit 1
+fi
+
+while : ; do
+ case "$1" in
+ -copy | --copy) WARN=true; PRESERVE=true; shift;;
+ -keep | --keep) KEEP=true; shift;;
+ -preserve | --preserve) PRESERVE=true; shift;;
+ -warn | --warn) WARN=true; shift;;
+ -* | --*) echo "Usage: $(basename $0) [-copy] [-keep] [-preserve] [-warn] packagename ..."; exit 1;;
+ *) break
+ esac
+done
+
+if [ "$WARN" = "true" ]; then
+ echo "Only warning... not actually removing any files."
+ if [ "$PRESERVE" = "true" ]; then
+ echo "Package contents is copied to $PRES_DIR."
+ fi
+ echo "Here's what would be removed (and left behind) if you"
+ echo "removed the package(s):"
+ echo
+else
+ if [ "$PRESERVE" = "true" ]; then
+ echo "Package contents is copied to $PRES_DIR."
+ fi
+fi
+
+remove_packages $*
+
diff --git a/source/a/pkgtools/scripts/setup.70.install-kernel b/source/a/pkgtools/scripts/setup.70.install-kernel
new file mode 100644
index 000000000..8edf64779
--- /dev/null
+++ b/source/a/pkgtools/scripts/setup.70.install-kernel
@@ -0,0 +1,5 @@
+# Install the bootdisk or CD-ROM's Linux kernel:
+#BLURB="Install a Linux kernel from a bootdisk"
+if [ -x /usr/lib/setup/SeTkernel ]; then
+ . /usr/lib/setup/SeTkernel
+fi
diff --git a/source/a/pkgtools/scripts/setup.80.make-bootdisk b/source/a/pkgtools/scripts/setup.80.make-bootdisk
new file mode 100644
index 000000000..d9b4012f2
--- /dev/null
+++ b/source/a/pkgtools/scripts/setup.80.make-bootdisk
@@ -0,0 +1,175 @@
+#!/bin/sh
+#BLURB="Create a USB Linux boot stick"
+RDIR=/dev/tty4
+NDIR=/dev/null
+TMP=/var/log/setup/tmp
+
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+T_PX="$1"
+ROOT_DEVICE="$2"
+
+while [ 0 ]; do # the bootdisk menu loop
+ # Run "rescan-scsi-bus -l" to get an up to date overview of devices:
+ /sbin/rescan-scsi-bus -l 1>$RDIR 2>$RDIR
+ # Get a list of removable block devices before the USB stick is inserted:
+ echo "" > $TMP/remov_prior
+ for BDEV in $(ls --indicator-style none /sys/block | egrep -v "loop|ram"); do
+ [ -r /sys/block/$BDEV/removable -a "$(cat /sys/block/$BDEV/removable)" == "1" ] \
+ && echo $BDEV >> $TMP/remov_prior
+ done
+ dialog --title "MAKE USB FLASH BOOT" --default-item "Skip" --menu \
+"If your computer supports booting from a USB device, it is recommended that you make \
+a USB boot stick for your system at this time. It will boot your computer straight \
+into the root filesystem on $ROOT_DEVICE. \n\
+\n\
+Please insert a USB flash memory stick and then press ENTER to create a boot stick. \n\
+\n\
+WARNING! The existing contents of the USB stick will be erased. \n\
+ " 18 70 2 \
+ "Create" "Make a USB Linux boot stick" \
+ "Skip" "Skip making a USB boot stick" \
+ 2> $TMP/return
+ REPLY=`cat $TMP/return`
+ rm -f $TMP/return
+ if [ "$REPLY" = "Create" ]; then
+ # Run "rescan-scsi-bus -l" to discover our USB stick if needed:
+ /sbin/rescan-scsi-bus -l 1>$RDIR 2>$RDIR
+ # Get a list of removable block devices after the USB stick is inserted:
+ echo "" > $TMP/remov_after
+ for BDEV in $(ls --indicator-style none /sys/block | egrep -v "loop|ram"); do
+ [ -r /sys/block/$BDEV/removable -a "$(cat /sys/block/$BDEV/removable)" == "1" ] \
+ && echo $BDEV >> $TMP/remov_after
+ done
+ ADDED=$(diff -u $TMP/remov_prior $TMP/remov_after | sed -n 's/^\+//p' | grep -v '^+')
+ REMVD=$(diff -u $TMP/remov_prior $TMP/remov_after | sed -n 's/^\+//p' | grep -v '^+')
+ if [ -n "$ADDED" ] ; then STICK=$ADDED ; else STICK="" ; fi
+ rm $TMP/remov_prior $TMP/remov_after
+ if [ ! -n "$STICK" ]; then
+ dialog --title "NO NEW DEVICE DETECTED" --ok-label Restart --msgbox \
+"No new USB device was detected.
+If you had already inserted your USB stick, please remove it now. \
+Then select 'Restart'." 7 70
+ continue
+ else
+ VENDOR="Vendor : $(cat /sys/block/$STICK/device/vendor)"
+ MODEL="Model : $(cat /sys/block/$STICK/device/model)"
+ SIZE="Size : $(( $(cat /sys/block/$STICK/size) / 2048)) MB"
+ dialog --title "NEW DEVICE DETECTED" --yesno \
+"A new USB device '/dev/$STICK' was detected with specifications:
+
+-- $VENDOR
+-- $MODEL
+-- $SIZE
+
+If this is the USB stick to use, select 'Yes',
+otherwise select 'No'." 12 70
+ if [ $? -eq 1 ]; then
+ continue
+ fi
+ fi
+
+ dialog --title "CREATING USB BOOT STICK" --infobox "Creating SYSLINUX bootdisk for \
+$ROOT_DEVICE on /dev/$STICK." 3 64
+ # Determine max size of the filesystem (in KB) we want to create:
+ USBSIZE=$(( $(cat /sys/block/$STICK/size) / 2048))
+ if [ $USBSIZE -lt 512 ]; then DOSSIZE=$(($USBSIZE*1024))
+ else DOSSIZE=$((512*1024))
+ fi
+ # Hack from Pat. If we're wasting a whole stick, who cares if the partition is
+ # extra-small, as long as the kernel fits? Also, FAT12 is the least problematic.
+ DOSSIZE=15861
+ if [ -x /sbin/mkdosfs ]; then
+ /sbin/mkdosfs -I -n USBSLACK -F 12 /dev/$STICK $DOSSIZE 1> /dev/null 2> /dev/null
+ else
+ chroot $T_PX /sbin/mkdosfs -I -n USBSLACK -F 12 /dev/$STICK $DOSSIZE 1> /dev/null 2> /dev/null
+ fi
+ if [ ! -d $TMP/bootdisk ]; then
+ mkdir $TMP/bootdisk
+ fi
+ mount -t vfat /dev/$STICK $TMP/bootdisk 1> /dev/null 2> /dev/null
+ if [ -r $T_PX/vmlinuz ]; then
+ cp $T_PX/vmlinuz $TMP/bootdisk/vmlinuz
+ elif [ -r $T_PX/boot/vmlinuz ]; then
+ cp $T_PX/boot/vmlinuz $TMP/bootdisk/vmlinuz
+ fi
+ # We don't need the isolinux bootloader with syslinux do we?
+ #cp $T_PX/usr/share/syslinux/isolinux.bin $TMP/bootdisk/
+ cat << EOF > $TMP/bootdisk/message.txt
+
+Welcome to the 09Slackware07 Linux custom USB boot stick!
+
+By default, this stick boots a root Linux partition on $ROOT_DEVICE when you
+hit ENTER. If you'd like to boot some other partition, use a command like
+this on the prompt below:
+
+ mount root=/dev/sda1 ro
+
+Where "/dev/sda1" is the partition you want to boot, and "ro" specifies that
+the partition should be initially mounted as read-only. If you wish to mount
+the partition read-write, use "rw" instead. To set the video console mode,
+use the vga= parameter (press F1 to see a table). You may also add any other
+kernel parameters you might need depending on your hardware, and which
+drivers are included in your kernel.
+
+EOF
+ cat << EOF > $TMP/bootdisk/syslinux.cfg
+default vmlinuz root=$ROOT_DEVICE vga=normal ro
+prompt 1
+timeout 6000
+display message.txt
+F1 f1.txt
+F2 message.txt
+#F3 f3.txt
+#F4 f4.txt
+#F5 f5.txt
+#F6 f6.txt
+#F7 f7.txt
+label mount
+ kernel vmlinuz
+ append root=$ROOT_DEVICE vga=normal ro
+EOF
+ cat << EOF > $TMP/bootdisk/f1.txt
+ STANDARD MODES:
+ To make the kernel prompt for standard video modes use: vga=ask
+
+ FRAMEBUFFER MODES:
+ To get the kernel to start in VESA framebuffer mode, you need to pass it
+ a vga= init string on the "boot:" prompt. Here's a table:
+
+ Colors 640x480 800x600 1024x768 1280x1024 1600x1200
+ --------+---------------------------------------------
+ 256 | 769 771 773 775 796
+ 32,768 | 784 787 790 793 797
+ 65,536 | 785 788 791 794 798
+ 16.8M | 786 789 792 795 799
+
+ ...such as this for 1024x768x64k:
+ vga=791
+
+ F2 returns to the previous page.
+
+EOF
+ umount /dev/$STICK
+ rm -r $TMP/bootdisk
+ # Make the device bootable:
+ syslinux -s /dev/$STICK 1> /dev/null 2> /dev/null
+ dialog --title "USB BOOT STICK CREATED" --ok-label Continue --cancel-label Create --menu \
+"The USB boot stick has been successfully created in /dev/$STICK. If you would like to \
+create an additional boot stick, please select 'Create' and we'll go back and make another \
+one, otherwise select 'Continue' to continue configuring your system." 12 70 2 \
+ "Continue" "Continue the configuration (done making boot sticks)" \
+ "Create" "Make a spare Linux boot stick in /dev/$STICK" \
+ 2> $TMP/return
+ REPLY=`cat $TMP/return`
+ rm -f $TMP/return
+ if [ "$REPLY" = "Create" ]; then
+ continue
+ else
+ break
+ fi
+ else # ! Create
+ break
+ fi
+done
diff --git a/source/a/pkgtools/scripts/setup.htmlview b/source/a/pkgtools/scripts/setup.htmlview
new file mode 100644
index 000000000..2fd9930a7
--- /dev/null
+++ b/source/a/pkgtools/scripts/setup.htmlview
@@ -0,0 +1,33 @@
+#!/bin/sh
+#BLURB="Set a default browser link."
+# Sorry, this is not a full menu, and may not ever be.
+# It is trivial to find the htmllink symbolic link and
+# point it at the browser that you like. Besides,
+# this is not a Linux standard that could be locating
+# in any official document. It seems to have been
+# started without any consultation with other
+# distributions by <take a wild guess>, and now things
+# expect it to be there.
+#
+#
+# Note 1. Listing a browser doesn't mean we ship it.
+# Note 2. Complaints about our preferences or missing
+# browsers in the list will be considered.
+# Yell at Pat about it. ;-)
+
+# There must be no link, or we assume the admin set it and
+# do nothing. Can you tell this Q+D script was written for
+# the initial installation?
+
+for browser in firefox seamonkey konqueror galeon epiphany links lynx ; do
+ if [ ! -e usr/bin/htmlview -a -x usr/bin/$browser ]; then
+ cat << EOF > usr/bin/htmlview
+#!/bin/sh
+exec $browser "\$@"
+EOF
+ fi
+done
+if [ -e usr/bin/htmlview ]; then
+ chmod 755 usr/bin/htmlview
+fi
+
diff --git a/source/a/pkgtools/scripts/setup.services b/source/a/pkgtools/scripts/setup.services
new file mode 100644
index 000000000..aee2599fd
--- /dev/null
+++ b/source/a/pkgtools/scripts/setup.services
@@ -0,0 +1,287 @@
+#!/bin/sh
+#BLURB="Select/deselect system daemons (services)"
+TMP=/var/log/setup/tmp
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+T_PX="$1"
+cd $T_PX
+rm -f $TMP/tmpscript
+
+cat << EOF > $TMP/tmpscript
+dialog --title "CONFIRM STARTUP SERVICES TO RUN" --item-help --checklist \\
+"The selected services will be started at boot time. If you \\
+don't need them, you may unselect them to turn them off (which may improve \\
+overall system security). You may also choose to start services that are \\
+not run by default, but be aware that more services means less security. \\
+Use the spacebar to select or unselect the services you wish to run. \\
+Recommended choices have been preselected. \\
+Press the ENTER key when you are finished." \\
+20 75 7 \\
+EOF
+
+if [ -r etc/rc.d/rc.atalk ]; then
+ if [ -x etc/rc.d/rc.atalk ]; then
+ RC_ATALK=on
+ else
+ RC_ATALK=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.atalk" "Netatalk Appletalk file/print server" $RC_ATALK "The Netatalk server is a file and print server for Macintosh networks." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.bind ]; then
+ if [ -x etc/rc.d/rc.bind ]; then
+ RC_BIND=on
+ else
+ RC_BIND=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.bind" "BIND (Domain Name System) server" $RC_BIND "BIND (Berkeley Internet Name Domain) is a Domain Name System (DNS) server." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.cups ]; then
+ if [ -x etc/rc.d/rc.cups ]; then
+ RC_CUPS=on
+ else
+ RC_CUPS=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.cups" "CUPS print server" $RC_CUPS "The Common UNIX Printing system (print spooler choice #1)." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.dnsmasq ]; then
+ if [ -x etc/rc.d/rc.dnsmasq ]; then
+ RC_DNSMASQ=on
+ else
+ RC_DNSMASQ=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.dnsmasq" "dnsmasq DHCP/DNS server" $RC_DNSMASQ "dnsmasq provides DNS and DHCP service to a LAN." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.fuse ]; then
+ if [ -x etc/rc.d/rc.fuse ]; then
+ RC_FUSE=on
+ else
+ RC_FUSE=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.fuse" "Filesystem in Userspace library" $RC_FUSE "FUSE is an interface to allow userspace programs to use filesystems." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.hald ]; then
+ if [ -x etc/rc.d/rc.hald ]; then
+ RC_HALD=on
+ else
+ RC_HALD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.hald" "Hardware Abstraction Layer" $RC_HALD "HAL makes access to CD/DVD drives and USB devices easier." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.hplip ]; then
+ if [ -x etc/rc.d/rc.hplip ]; then
+ RC_HPLIP=on
+ else
+ RC_HPLIP=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.hplip" "HP printer/scanner daemons" $RC_HPLIP "Programs used to run printers and scanners from Hewlett Packard." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.httpd ]; then
+ if [ -x etc/rc.d/rc.httpd ]; then
+ RC_HTTPD=on
+ else
+ RC_HTTPD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.httpd" "The Apache web server" $RC_HTTPD "Apache, the most widely used web server on the net." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.inetd ]; then
+ if [ -x etc/rc.d/rc.inetd ]; then
+ RC_INETD=on
+ else
+ RC_INETD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.inetd" "The BSD Inetd daemon" $RC_INETD "Inetd daemon (this allows: time, ftp, comsat, talk, finger, and auth)." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.ip_forward ]; then
+ if [ -x etc/rc.d/rc.ip_forward ]; then
+ RC_IP_FORWARD=on
+ else
+ RC_IP_FORWARD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.ip_forward" "Activate IP packet forwarding" $RC_IP_FORWARD "Packet forwarding allows your Linux machine to act as a router." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.lprng ]; then
+ if [ -x etc/rc.d/rc.lprng ]; then
+ RC_LPRNG=on
+ else
+ RC_LPRNG=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.lprng" "LPRng print server" $RC_LPRNG "The LPRng printing system (print spooler choice #2)." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.messagebus ]; then
+ if [ -x etc/rc.d/rc.messagebus ]; then
+ RC_MESSAGEBUS=on
+ else
+ RC_MESSAGEBUS=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.messagebus" "D-Bus system message bus" $RC_MESSAGEBUS "Used for communication by HAL and other programs." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.mysqld ]; then
+ if [ -x etc/rc.d/rc.mysqld ]; then
+ RC_MYSQLD=on
+ else
+ RC_MYSQLD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.mysqld" "The MySQL database server" $RC_MYSQLD "MySQL, an SQL-based relational database daemon." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.ntpd ]; then
+ if [ -x etc/rc.d/rc.ntpd ]; then
+ RC_NTPD=on
+ else
+ RC_NTPD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.ntpd" "The network time server" $RC_NTPD "NTP synchronizes your time to/from other NTP servers." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.pcmcia ]; then
+ if [ -x etc/rc.d/rc.pcmcia ]; then
+ RC_PCMCIA=on
+ else
+ RC_PCMCIA=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.pcmcia" "PCMCIA/Cardbus card services" $RC_PCMCIA "This supports PCMCIA or Cardbus cards used with laptops." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.rpc ]; then
+ if [ -x etc/rc.d/rc.rpc ]; then
+ RC_RPC=on
+ else
+ RC_RPC=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.rpc" "RPC (NFS) daemons" $RC_RPC "Needed to serve or mount NFS (Network File System) partitions." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.samba ]; then
+ if [ -x etc/rc.d/rc.samba ]; then
+ RC_SAMBA=on
+ else
+ RC_SAMBA=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.samba" "The Samba file/print server" $RC_SAMBA "Samba is a file and print server for Windows networks." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.saslauthd ]; then
+ if [ -x etc/rc.d/rc.saslauthd ]; then
+ RC_SASLAUTHD=on
+ else
+ RC_SASLAUTHD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.saslauthd" "The SASL authentication server" $RC_SASLAUTHD "SASL is an authentication method often used by mail servers." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.sendmail ]; then
+ if [ -x etc/rc.d/rc.sendmail ]; then
+ RC_SENDMAIL=on
+ else
+ RC_SENDMAIL=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.sendmail" "The Sendmail mail server" $RC_SENDMAIL "The Sendmail server allows your machine to send and receive mail." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.snmpd ]; then
+ if [ -x etc/rc.d/rc.snmpd ]; then
+ RC_SNMPD=on
+ else
+ RC_SNMPD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.snmpd" "Net-SNMP daemon" $RC_SNMPD "SNMP daemon that receives and logs SNMP TRAP and INFORM messages." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.syslog ]; then
+ if [ -x etc/rc.d/rc.syslog ]; then
+ RC_SYSLOGD=on
+ else
+ RC_SYSLOGD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.syslog" "The Linux system logging utilities" $RC_SYSLOGD "The syslogd and klogd daemons log important messages under /var/log." \\
+EOF
+fi
+
+if [ -r etc/rc.d/rc.sshd ]; then
+ if [ -x etc/rc.d/rc.sshd ]; then
+ RC_SSHD=on
+ else
+ RC_SSHD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.sshd" "The SSHD (secure shell) daemon" $RC_SSHD "SSHD allows secure encrypted logins to your machine." \\
+EOF
+fi
+
+cat << EOF >> $TMP/tmpscript
+ 2> $TMP/reply
+EOF
+
+. $TMP/tmpscript
+
+if [ ! $? = 0 ]; then
+ rm -f $TMP/reply $TMP/tmpscript
+ exit
+fi
+
+for service in rc.atalk rc.bind rc.cups rc.dnsmasq rc.fuse rc.hald rc.hplip rc.httpd rc.inetd rc.ip_forward rc.lprng rc.messagebus rc.mysqld rc.ntpd rc.pcmcia rc.rpc rc.samba rc.saslauthd rc.snmpd rc.sendmail rc.syslog rc.sshd ; do
+ if [ -f etc/rc.d/$service ]; then
+ if grep -w $service $TMP/reply 1> /dev/null ; then
+ chmod 755 etc/rc.d/$service
+ else
+ chmod 644 etc/rc.d/$service
+ fi
+ fi
+done
+
+rm -f $TMP/reply $TMP/tmpscript
+
diff --git a/source/a/pkgtools/scripts/upgradepkg b/source/a/pkgtools/scripts/upgradepkg
new file mode 100644
index 000000000..cc3250dae
--- /dev/null
+++ b/source/a/pkgtools/scripts/upgradepkg
@@ -0,0 +1,387 @@
+#!/bin/sh
+# Copyright 1999 Patrick Volkerding, Moorhead, Minnesota, USA
+# Copyright 2001, 2002, 2003 Slackware Linux, Inc., Concord, California, 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.
+#
+# Modified to handle either old 8.3 or new package-version-arch-build.tgz
+# packages, Sat Nov 17 14:25:58 PST 2001 volkerdi
+#
+# Rewritten to clean out _all_ old packages of a given basename, not just
+# the first one found, Thu Apr 4 01:01:05 PST 2002 volkerdi
+#
+# Added --install-new and --reinstall, Fri May 31 14:11:14 PDT 2002 volkerdi
+# Added --dry-run, Sat Apr 26 18:13:29 PDT 2003
+#
+# Sat Apr 25 21:18:53 UTC 2009
+# Support new compression types and package extensions.
+# Converted to use new pkgbase() function to remove pathname and
+# valid package extensions.
+
+# 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
+}
+
+usage() {
+ cat << EOF
+
+Usage: upgradepkg newpackage [newpackage2 ... ]
+ upgradepkg oldpackage%newpackage [oldpackage2%newpackage2 ... ]
+
+Upgradepkg upgrades a Slackware package (.tgz, .tbz, .tlz, .txz) from an
+older version to a newer one. It does this by INSTALLING the new package
+onto the system, and then REMOVING any files from the old package that
+aren't in the new package. If the old and new packages have the same
+name, a single argument is all that is required. If the packages have
+different names, supply the name of the old package followed by a percent
+symbol (%), then the name of the new package. Do not add any extra
+whitespace between pairs of old/new package names.
+
+Before upgrading a package, save any configuration files (such as in /etc)
+that you wish to keep. Sometimes these will be preserved, but it depends
+on the package. If you want to force new versions of the config files
+to be installed, remove the old ones manually prior to running upgradepkg.
+
+To upgrade in a directory other than / (such as /mnt):
+
+ ROOT=/mnt upgradepkg package.tgz (or .tbz, .tlz, .txz)
+
+EOF
+}
+
+# Make sure there's a proper temp directory:
+TMP=$ROOT/var/log/setup/tmp
+# If the $TMP directory doesn't exist, create it:
+if [ ! -d $TMP ]; then
+ rm -rf $TMP # make sure it's not a symlink or something stupid
+ mkdir $TMP
+ chmod 700 $TMP # no need to leave it open
+fi
+
+# This script expects an 022 umask:
+umask 022
+
+# $ROOT defined?
+if [ -d "$ROOT" ]; then
+ export ROOT
+fi
+
+# --help or no args?
+if [ "$1" = "" -o "$1" = "--help" -o "$1" = "-?" ]; then
+ usage;
+ exit 1;
+fi
+
+# Arg processing loop. These must come before any packages are listed.
+while [ 0 ]; do
+ if [ "$1" = "--no-paranoia" ]; then
+ # Enable --no-paranoia mode. This is so not-recommended that we're
+ # not even going to document it. ;) If a file used to be directly
+ # managed and now is moved into place, using --no-paranoia will cause
+ # it to improperly disappear. It does slightly speed things up, though.
+ # Don't use it.
+ NOT_PARANOID="true"
+ shift 1
+ elif [ "$1" = "--install-new" ]; then
+ # Install packages that do not already have an installed version.
+ # The usual default is to skip them.
+ INSTALL_NEW="yes"
+ shift 1
+ elif [ "$1" = "--reinstall" ]; then
+ # Reinstall packages even if the installed one is the same version.
+ REINSTALL="true"
+ shift 1
+ elif [ "$1" = "--verbose" -o "$1" = "-v" ]; then
+ # We're adding a --verbose mode that doesn't filter removepkg as much
+ VERBOSE="verbose"
+ shift 1
+ elif [ "$1" = "--dry-run" ]; then
+ # Output a report about which packages would be installed or upgraded
+ # but don't actually perform the upgrades.
+ DRY_RUN="true"
+ shift 1
+ else # no more args
+ break;
+ fi
+done # processing args
+
+# Here's a function to figure out the package name from one of those
+# new long filenames. We'll need this to double check the name of the
+# old package.
+
+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
+ # cruft for later ;)
+ #VER=$(expr $INDEX - 2)
+ #VER="$(echo $STRING | cut -f $VER -d -)"
+ #ARCH=$(expr $INDEX - 1)
+ #ARCH="$(echo $STRING | cut -f $ARCH -d -)"
+ #BUILD="$(echo $STRING | cut -f $INDEX -d -)"
+ fi
+ fi
+}
+
+ERRCODE=0
+
+# Main processing loop:
+while [ ! "$1" = "" ]; do
+
+# Simple package integrity check:
+if [ ! -f $(echo $1 | cut -f 2 -d '%') ]; then
+ ERRCODE=4
+ echo "Cannot install $1: file not found"
+ shift 1
+ continue;
+fi
+
+# Figure out the names of the old and new packages:
+OLD=$(echo $1 | cut -f 1 -d '%')
+NEW=$(echo $1 | cut -f 2 -d '%')
+INCOMINGDIR=$(dirname $NEW)
+# These are the package names with the extension:
+NNAME=$(basename $NEW)
+ONAME=$(basename $OLD)
+# These are the package names without the extension:
+OLD=$(pkgbase $OLD)
+NEW=$(pkgbase $NEW)
+
+# Make sure the extension is valid:
+if [ "$NNAME" = "$NEW" ]; then
+ # We won't throw an ERRCODE for this, but the package is skipped:
+ echo "Cannot install $1: invalid package extension"
+ shift 1
+ continue;
+fi
+
+# Check and fix the old package name:
+SHORT="$(package_name $OLD)"
+if [ ! -r $ROOT/var/log/packages/$OLD ]; then
+ if ls $ROOT/var/log/packages/$SHORT* 1> /dev/null 2> /dev/null ; then
+ for installed_package in $ROOT/var/log/packages/$SHORT* ; do
+ if [ "$(package_name $installed_package)" = "$SHORT" ]; then # found one
+ OLD="$(basename $installed_package)"
+ break
+ fi
+ done
+ fi
+fi
+
+# Test to see if both the old and new packages are where we expect them
+# to be -- skip to the next package (or package pair) if anything's wrong:
+
+if [ ! -r $ROOT/var/log/packages/$OLD ]; then
+ if [ ! "$INSTALL_NEW" = "yes" ]; then
+ if [ "$DRY_RUN" = "true" ]; then
+ echo "$OLD would not be upgraded (no installed package named $SHORT)."
+ else
+ echo
+ echo "Error: there is no installed package named $OLD."
+ echo " (looking for $ROOT/var/log/packages/$OLD)"
+ echo
+ fi
+ ERRCODE=1
+ else # --install-new was given, so install the new package:
+ if [ "$DRY_RUN" = "true" ]; then
+ echo "$NEW would be installed (new package)."
+ else
+ cat << EOF
+
++==============================================================================
+| Installing new package $INCOMINGDIR/$NNAME
++==============================================================================
+
+EOF
+ installpkg $INCOMINGDIR/$NNAME
+ fi
+ fi
+ shift 1
+ continue;
+elif [ ! -r "$INCOMINGDIR/$NNAME" ]; then
+ if [ "$DRY_RUN" = "true" ]; then
+ echo "$NEW incoming package not found (command line)."
+ else
+ echo
+ echo "Error: incoming package $INCOMINGDIR/$NNAME not found."
+ echo
+ fi
+ shift 1
+ ERRCODE=1
+ continue;
+fi
+
+# Unless --reinstall was given, compare the package names
+# and skip any exact matches:
+if [ ! "$REINSTALL" = "true" ]; then
+ if [ "$OLD" = "$NEW" ]; then
+ if [ "$DRY_RUN" = "true" ]; then
+ echo "$NEW would be skipped (already installed)."
+ else
+ cat << EOF
+
++==============================================================================
+| Skipping package $NEW (already installed)
++==============================================================================
+
+EOF
+ fi
+ shift 1
+ continue;
+ fi
+fi
+
+# Showtime. Let's do the upgrade. First, we will rename all the
+# installed packages with this basename to make them easy to remove later:
+
+TIMESTAMP=$(date +%Y-%m-%d,%T)
+SHORT="$(package_name $OLD)"
+if [ "$DRY_RUN" = "true" ]; then
+ echo -n "$NEW would upgrade: "
+ for installed_package in $ROOT/var/log/packages/$SHORT* ; do
+ if [ "$(package_name $installed_package)" = "$SHORT" ]; then
+ echo -n "$(pkgbase $installed_package)"
+ fi
+ done
+ echo
+ shift 1
+ continue
+fi
+for installed_package in $ROOT/var/log/packages/$SHORT* ; do
+ if [ "$(package_name $installed_package)" = "$SHORT" ]; then
+ mv $installed_package ${installed_package}-upgraded-$TIMESTAMP
+ fi
+done
+for installed_script in $ROOT/var/log/scripts/$SHORT* ; do
+ if [ "$(package_name $installed_script)" = "$SHORT" ]; then
+ if [ -r $installed_script ]; then
+ mv $installed_script ${installed_script}-upgraded-$TIMESTAMP
+ fi
+ fi
+done
+
+# Print a banner for the current upgrade:
+cat << EOF
+
++==============================================================================
+| Upgrading $OLD package using $INCOMINGDIR/$NNAME
++==============================================================================
+
+EOF
+
+# Next, the new package is pre-installed:
+if [ "$VERBOSE" = "verbose" ]; then
+ installpkg $INCOMINGDIR/$NNAME
+ RETCODE=$?
+else
+ echo "Pre-installing package $NEW..."
+ installpkg $INCOMINGDIR/$NNAME 1> /dev/null
+ RETCODE=$?
+fi
+# Make sure that worked:
+if [ ! $RETCODE = 0 ]; then
+ echo "ERROR: Package $INCOMINGDIR/$NNAME did not install"
+ echo "correctly. You may need to reinstall your old package"
+ echo "to avoid problems. Make sure the new package is not"
+ echo "corrupted."
+ sleep 30
+ # Skip this package, but still try to proceed. Good luck...
+ shift 1
+ continue;
+fi
+
+# Now, the leftovers from the old package(s) can go. Pretty simple, huh? :)
+if [ -d "$ROOT" ]; then
+ ( cd $ROOT/var/log/packages
+ for rempkg in *-$TIMESTAMP ; do
+ if [ "$VERBOSE" = "verbose" ]; then
+ ROOT=$ROOT removepkg $rempkg
+ else
+ ROOT=$ROOT removepkg $rempkg | grep -v "Skipping\." | grep -v "Removing files:"
+ fi
+ done
+ )
+else
+ ( cd /var/log/packages
+ for rempkg in *-$TIMESTAMP ; do
+ if [ "$VERBOSE" = "verbose" ]; then
+ removepkg $rempkg
+ else
+ removepkg $rempkg | grep -v "Skipping\." | grep -v "Removing files:"
+ fi
+ done
+ )
+fi
+echo
+
+# Again! Again!
+# Seriously, the reinstalling of a package can be crucial if any files
+# shift location, so we should always reinstall as the final step:
+if [ ! "$NOT_PARANOID" = "true" ]; then
+ installpkg $INCOMINGDIR/$NNAME
+fi
+
+echo "Package $OLD upgraded with new package $INCOMINGDIR/$NNAME."
+ERRCODE=0
+
+# Process next parameter:
+shift 1
+
+done
+
+if [ ! "$DRY_RUN" = "true" ]; then
+ echo
+fi
+exit $ERRCODE
diff --git a/source/a/pkgtools/slack-desc b/source/a/pkgtools/slack-desc
new file mode 100644
index 000000000..ab3fc1198
--- /dev/null
+++ b/source/a/pkgtools/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|' on
+# the right side marks the last column you can put a character in. You must make
+# exactly 11 lines for the formatting to be correct. It's also customary to
+# leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+pkgtools: pkgtools (The Slackware package maintenance system)
+pkgtools:
+pkgtools: This package contains utilities for handling Slackware packages.
+pkgtools: Included are the command line utilities 'installpkg', 'removepkg',
+pkgtools: 'makepkg', 'explodepkg', and 'upgradepkg' that install, remove,
+pkgtools: build, examine, and upgrade software packages. Also included are
+pkgtools: 'pkgtool', a menu based program for installing packages, removing
+pkgtools: packages, or viewing the packages that are installed on the system,
+pkgtools: documentation (man pages), and a few other system admin scripts.
+pkgtools:
+pkgtools: