diff options
38 files changed, 5309 insertions, 172 deletions
diff --git a/ChangeLog.rss b/ChangeLog.rss index 3b8d8306..99b885e2 100644 --- a/ChangeLog.rss +++ b/ChangeLog.rss @@ -11,10 +11,63 @@ <description>Tracking Slackware development in git.</description> <language>en-us</language> <id xmlns="http://www.w3.org/2005/Atom">urn:uuid:c964f45e-6732-11e8-bbe5-107b4450212f</id> - <pubDate>Tue, 19 Jun 2018 05:47:22 GMT</pubDate> - <lastBuildDate>Tue, 19 Jun 2018 19:00:30 GMT</lastBuildDate> + <pubDate>Tue, 19 Jun 2018 22:35:25 GMT</pubDate> + <lastBuildDate>Wed, 20 Jun 2018 07:00:28 GMT</lastBuildDate> <generator>maintain_current_git.sh v 1.10</generator> <item> + <title>Tue, 19 Jun 2018 22:35:25 GMT</title> + <pubDate>Tue, 19 Jun 2018 22:35:25 GMT</pubDate> + <link>https://git.slackware.nl/current/tag/?h=20180619223525</link> + <guid isPermaLink="false">20180619223525</guid> + <description> + <![CDATA[<pre> +a/acl-2.2.53-x86_64-1.txz: Upgraded. +a/attr-2.4.48-x86_64-1.txz: Upgraded. +n/gnupg-1.4.23-x86_64-1.txz: Upgraded. + Sanitize the diagnostic output of the original file name in verbose mode. + By using a made up file name in the message it was possible to fake status + messages. Using this technique it was for example possible to fake the + verification status of a signed mail. + For more information, see: + https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-12020 + (* Security fix *) +x/libXaw3d-1.6.3-x86_64-1.txz: Upgraded. +x/libinput-1.11.1-x86_64-1.txz: Upgraded. +x/xf86-input-mouse-1.9.3-x86_64-1.txz: Upgraded. +testing/packages/pkgtools-15.0-noarch-20.txz: Rebuilt. + This update is a bit scarier than usual, so we're going to test it here + first and then move it into the main tree in a couple of days if there + are no serious bug reports. It's well-tested here, and works with the + slackpkg that's in -current now, but I don't know about slackpkg+ so that's + another reason to let it cool down here first. The purpose of this update + is to migrate the package database and directories from /var/log to + /var/lib/pkgtools. /var/log was never a good place for this data, as it is + considered by many to be a directory that could be wiped to free up some + space. Originally the package database was in /var/adm, but the FSSTND + (later FHS) group decided that directory should be a symlink to /var/log, + and I went along with that since it was years ago and I was a n00b and didn't + know any better. /var/lib/pkgtools will be a better and safer location. + The removed_packages and removed_scripts directories are really just logs + that aren't actually used for anything - those will remain under /var/log, + but moved into /var/log/pkgtools. Everything under /var/log will be + considered potentially non-permanent by the pkgtools - if any directories or + symlinks disappear from there, the pkgtools will automatically recreate them + as needed. In fact, the migration process will create symlinks from all the + old directory locations to the new ones, so anything that expects the old + locations (including slackpkg, for now) should continue to work. Once this + moves into the main tree, the plan is to fix other packages to use the new + installer script directory (/var/lib/pkgtools/setup) and change the installer + and slackpkg to use the new native locations for everything. When slackpkg + is changed over to use the new native locations, I'll also make sure to float + that in testing/ for a few days before moving it to the main tree to avoid + more unintentional disruption to slackpkg+ users. + Be aware that the package database migration is a one-way operation, but even + so if you later downgrade to an older version of the pkgtools it will still + work through the compatibility symlinks. + </pre>]]> + </description> + </item> + <item> <title>Tue, 19 Jun 2018 05:47:22 GMT</title> <pubDate>Tue, 19 Jun 2018 05:47:22 GMT</pubDate> <link>https://git.slackware.nl/current/tag/?h=20180619054722</link> diff --git a/ChangeLog.txt b/ChangeLog.txt index 68a3c84d..f3a35ee8 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,48 @@ +Tue Jun 19 22:35:25 UTC 2018 +a/acl-2.2.53-x86_64-1.txz: Upgraded. +a/attr-2.4.48-x86_64-1.txz: Upgraded. +n/gnupg-1.4.23-x86_64-1.txz: Upgraded. + Sanitize the diagnostic output of the original file name in verbose mode. + By using a made up file name in the message it was possible to fake status + messages. Using this technique it was for example possible to fake the + verification status of a signed mail. + For more information, see: + https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-12020 + (* Security fix *) +x/libXaw3d-1.6.3-x86_64-1.txz: Upgraded. +x/libinput-1.11.1-x86_64-1.txz: Upgraded. +x/xf86-input-mouse-1.9.3-x86_64-1.txz: Upgraded. +testing/packages/pkgtools-15.0-noarch-20.txz: Rebuilt. + This update is a bit scarier than usual, so we're going to test it here + first and then move it into the main tree in a couple of days if there + are no serious bug reports. It's well-tested here, and works with the + slackpkg that's in -current now, but I don't know about slackpkg+ so that's + another reason to let it cool down here first. The purpose of this update + is to migrate the package database and directories from /var/log to + /var/lib/pkgtools. /var/log was never a good place for this data, as it is + considered by many to be a directory that could be wiped to free up some + space. Originally the package database was in /var/adm, but the FSSTND + (later FHS) group decided that directory should be a symlink to /var/log, + and I went along with that since it was years ago and I was a n00b and didn't + know any better. /var/lib/pkgtools will be a better and safer location. + The removed_packages and removed_scripts directories are really just logs + that aren't actually used for anything - those will remain under /var/log, + but moved into /var/log/pkgtools. Everything under /var/log will be + considered potentially non-permanent by the pkgtools - if any directories or + symlinks disappear from there, the pkgtools will automatically recreate them + as needed. In fact, the migration process will create symlinks from all the + old directory locations to the new ones, so anything that expects the old + locations (including slackpkg, for now) should continue to work. Once this + moves into the main tree, the plan is to fix other packages to use the new + installer script directory (/var/lib/pkgtools/setup) and change the installer + and slackpkg to use the new native locations for everything. When slackpkg + is changed over to use the new native locations, I'll also make sure to float + that in testing/ for a few days before moving it to the main tree to avoid + more unintentional disruption to slackpkg+ users. + Be aware that the package database migration is a one-way operation, but even + so if you later downgrade to an older version of the pkgtools it will still + work through the compatibility symlinks. ++--------------------------+ Tue Jun 19 05:47:22 UTC 2018 a/btrfs-progs-v4.17-x86_64-1.txz: Upgraded. a/lvm2-2.02.179-x86_64-1.txz: Upgraded. diff --git a/FILELIST.TXT b/FILELIST.TXT index 69f2b62a..24c468a8 100644 --- a/FILELIST.TXT +++ b/FILELIST.TXT @@ -1,20 +1,20 @@ -Tue Jun 19 05:57:13 UTC 2018 +Tue Jun 19 23:07:14 UTC 2018 Here is the file list for this directory. If you are using a mirror site and find missing or extra files in the disk subdirectories, please have the archive administrator refresh the mirror. -drwxr-xr-x 12 root root 4096 2018-06-19 05:47 . +drwxr-xr-x 12 root root 4096 2018-06-19 22:35 . -rw-r--r-- 1 root root 10064 2016-06-30 18:39 ./ANNOUNCE.14_2 -rw-r--r-- 1 root root 13424 2018-06-13 05:25 ./CHANGES_AND_HINTS.TXT --rw-r--r-- 1 root root 896128 2018-06-18 18:38 ./CHECKSUMS.md5 --rw-r--r-- 1 root root 163 2018-06-18 18:38 ./CHECKSUMS.md5.asc +-rw-r--r-- 1 root root 896152 2018-06-19 05:57 ./CHECKSUMS.md5 +-rw-r--r-- 1 root root 163 2018-06-19 05:57 ./CHECKSUMS.md5.asc -rw-r--r-- 1 root root 17976 1994-06-10 02:28 ./COPYING -rw-r--r-- 1 root root 35147 2007-06-30 04:21 ./COPYING3 -rw-r--r-- 1 root root 19573 2016-06-23 20:08 ./COPYRIGHT.TXT -rw-r--r-- 1 root root 616 2006-10-02 04:37 ./CRYPTO_NOTICE.TXT --rw-r--r-- 1 root root 419378 2018-06-19 05:47 ./ChangeLog.txt +-rw-r--r-- 1 root root 422280 2018-06-19 22:35 ./ChangeLog.txt drwxr-xr-x 3 root root 4096 2013-03-20 22:17 ./EFI drwxr-xr-x 2 root root 4096 2018-06-18 18:15 ./EFI/BOOT -rw-r--r-- 1 root root 1253376 2018-02-24 20:49 ./EFI/BOOT/bootx64.efi @@ -25,9 +25,9 @@ drwxr-xr-x 2 root root 4096 2018-06-18 18:15 ./EFI/BOOT -rwxr-xr-x 1 root root 2494 2018-02-24 20:49 ./EFI/BOOT/make-grub.sh -rw-r--r-- 1 root root 10722 2013-09-21 19:02 ./EFI/BOOT/osdetect.cfg -rw-r--r-- 1 root root 1273 2013-08-12 21:08 ./EFI/BOOT/tools.cfg --rw-r--r-- 1 root root 1179810 2018-06-18 18:37 ./FILELIST.TXT +-rw-r--r-- 1 root root 1179831 2018-06-19 05:57 ./FILELIST.TXT -rw-r--r-- 1 root root 1572 2012-08-29 18:27 ./GPG-KEY --rw-r--r-- 1 root root 725984 2018-06-19 05:55 ./PACKAGES.TXT +-rw-r--r-- 1 root root 725984 2018-06-19 23:05 ./PACKAGES.TXT -rw-r--r-- 1 root root 8564 2016-06-28 21:33 ./README.TXT -rw-r--r-- 1 root root 3634 2018-06-18 05:56 ./README.initrd -rw-r--r-- 1 root root 34412 2017-12-01 17:44 ./README_CRYPT.TXT @@ -748,13 +748,13 @@ drwxr-xr-x 2 root root 4096 2012-09-20 18:06 ./patches -rw-r--r-- 1 root root 575 2012-09-20 18:06 ./patches/FILE_LIST -rw-r--r-- 1 root root 14 2012-09-20 18:06 ./patches/MANIFEST.bz2 -rw-r--r-- 1 root root 224 2012-09-20 18:06 ./patches/PACKAGES.TXT -drwxr-xr-x 18 root root 4096 2018-06-19 05:56 ./slackware64 --rw-r--r-- 1 root root 288390 2018-06-19 05:56 ./slackware64/CHECKSUMS.md5 --rw-r--r-- 1 root root 163 2018-06-19 05:56 ./slackware64/CHECKSUMS.md5.asc --rw-r--r-- 1 root root 359305 2018-06-19 05:53 ./slackware64/FILE_LIST --rw-r--r-- 1 root root 3611845 2018-06-19 05:54 ./slackware64/MANIFEST.bz2 +drwxr-xr-x 18 root root 4096 2018-06-19 23:05 ./slackware64 +-rw-r--r-- 1 root root 288390 2018-06-19 23:05 ./slackware64/CHECKSUMS.md5 +-rw-r--r-- 1 root root 163 2018-06-19 23:05 ./slackware64/CHECKSUMS.md5.asc +-rw-r--r-- 1 root root 359305 2018-06-19 23:03 ./slackware64/FILE_LIST +-rw-r--r-- 1 root root 3609920 2018-06-19 23:04 ./slackware64/MANIFEST.bz2 lrwxrwxrwx 1 root root 15 2009-08-23 23:34 ./slackware64/PACKAGES.TXT -> ../PACKAGES.TXT -drwxr-xr-x 2 root root 20480 2018-06-19 05:53 ./slackware64/a +drwxr-xr-x 2 root root 20480 2018-06-19 23:03 ./slackware64/a -rw-r--r-- 1 root root 327 2018-04-14 20:33 ./slackware64/a/aaa_base-14.2-x86_64-4.txt -rw-r--r-- 1 root root 10972 2018-04-14 20:33 ./slackware64/a/aaa_base-14.2-x86_64-4.txz -rw-r--r-- 1 root root 163 2018-04-14 20:33 ./slackware64/a/aaa_base-14.2-x86_64-4.txz.asc @@ -764,15 +764,15 @@ drwxr-xr-x 2 root root 20480 2018-06-19 05:53 ./slackware64/a -rw-r--r-- 1 root root 503 2018-04-16 17:32 ./slackware64/a/aaa_terminfo-6.1_20180324-x86_64-4.txt -rw-r--r-- 1 root root 50276 2018-04-16 17:32 ./slackware64/a/aaa_terminfo-6.1_20180324-x86_64-4.txz -rw-r--r-- 1 root root 163 2018-04-16 17:32 ./slackware64/a/aaa_terminfo-6.1_20180324-x86_64-4.txz.asc --rw-r--r-- 1 root root 414 2018-04-13 13:00 ./slackware64/a/acl-2.2.52-x86_64-2.txt --rw-r--r-- 1 root root 138096 2018-04-13 13:00 ./slackware64/a/acl-2.2.52-x86_64-2.txz --rw-r--r-- 1 root root 163 2018-04-13 13:00 ./slackware64/a/acl-2.2.52-x86_64-2.txz.asc +-rw-r--r-- 1 root root 414 2018-06-19 20:04 ./slackware64/a/acl-2.2.53-x86_64-1.txt +-rw-r--r-- 1 root root 128832 2018-06-19 20:04 ./slackware64/a/acl-2.2.53-x86_64-1.txz +-rw-r--r-- 1 root root 163 2018-06-19 20:04 ./slackware64/a/acl-2.2.53-x86_64-1.txz.asc -rw-r--r-- 1 root root 462 2018-04-18 18:18 ./slackware64/a/acpid-2.0.29-x86_64-1.txt -rw-r--r-- 1 root root 47480 2018-04-18 18:18 ./slackware64/a/acpid-2.0.29-x86_64-1.txz -rw-r--r-- 1 root root 163 2018-04-18 18:18 ./slackware64/a/acpid-2.0.29-x86_64-1.txz.asc --rw-r--r-- 1 root root 606 2018-04-13 13:00 ./slackware64/a/attr-2.4.47-x86_64-2.txt --rw-r--r-- 1 root root 74984 2018-04-13 13:00 ./slackware64/a/attr-2.4.47-x86_64-2.txz --rw-r--r-- 1 root root 163 2018-04-13 13:00 ./slackware64/a/attr-2.4.47-x86_64-2.txz.asc +-rw-r--r-- 1 root root 606 2018-06-19 20:02 ./slackware64/a/attr-2.4.48-x86_64-1.txt +-rw-r--r-- 1 root root 63636 2018-06-19 20:02 ./slackware64/a/attr-2.4.48-x86_64-1.txz +-rw-r--r-- 1 root root 163 2018-06-19 20:02 ./slackware64/a/attr-2.4.48-x86_64-1.txz.asc -rw-r--r-- 1 root root 507 2018-06-05 18:56 ./slackware64/a/bash-4.4.023-x86_64-1.txt -rw-r--r-- 1 root root 1526328 2018-06-05 18:56 ./slackware64/a/bash-4.4.023-x86_64-1.txz -rw-r--r-- 1 root root 163 2018-06-05 18:56 ./slackware64/a/bash-4.4.023-x86_64-1.txz.asc @@ -3355,7 +3355,7 @@ drwxr-xr-x 2 root root 69632 2018-06-19 05:53 ./slackware64/l -rw-r--r-- 1 root root 388 2018-04-13 15:26 ./slackware64/l/zlib-1.2.11-x86_64-2.txt -rw-r--r-- 1 root root 103500 2018-04-13 15:26 ./slackware64/l/zlib-1.2.11-x86_64-2.txz -rw-r--r-- 1 root root 163 2018-04-13 15:26 ./slackware64/l/zlib-1.2.11-x86_64-2.txz.asc -drwxr-xr-x 2 root root 32768 2018-06-19 05:53 ./slackware64/n +drwxr-xr-x 2 root root 32768 2018-06-19 23:03 ./slackware64/n -rw-r--r-- 1 root root 368 2018-06-05 04:17 ./slackware64/n/ModemManager-1.8.0-x86_64-1.txt -rw-r--r-- 1 root root 1510328 2018-06-05 04:17 ./slackware64/n/ModemManager-1.8.0-x86_64-1.txz -rw-r--r-- 1 root root 163 2018-06-05 04:17 ./slackware64/n/ModemManager-1.8.0-x86_64-1.txz.asc @@ -3437,9 +3437,9 @@ drwxr-xr-x 2 root root 32768 2018-06-19 05:53 ./slackware64/n -rw-r--r-- 1 root root 362 2018-04-13 15:35 ./slackware64/n/getmail-5.6-x86_64-2.txt -rw-r--r-- 1 root root 176848 2018-04-13 15:35 ./slackware64/n/getmail-5.6-x86_64-2.txz -rw-r--r-- 1 root root 163 2018-04-13 15:35 ./slackware64/n/getmail-5.6-x86_64-2.txz.asc --rw-r--r-- 1 root root 369 2018-04-13 15:35 ./slackware64/n/gnupg-1.4.22-x86_64-2.txt --rw-r--r-- 1 root root 1175556 2018-04-13 15:35 ./slackware64/n/gnupg-1.4.22-x86_64-2.txz --rw-r--r-- 1 root root 163 2018-04-13 15:35 ./slackware64/n/gnupg-1.4.22-x86_64-2.txz.asc +-rw-r--r-- 1 root root 369 2018-06-19 19:00 ./slackware64/n/gnupg-1.4.23-x86_64-1.txt +-rw-r--r-- 1 root root 1175208 2018-06-19 19:00 ./slackware64/n/gnupg-1.4.23-x86_64-1.txz +-rw-r--r-- 1 root root 163 2018-06-19 19:00 ./slackware64/n/gnupg-1.4.23-x86_64-1.txz.asc -rw-r--r-- 1 root root 598 2018-06-08 18:58 ./slackware64/n/gnupg2-2.2.8-x86_64-1.txt -rw-r--r-- 1 root root 2176680 2018-06-08 18:58 ./slackware64/n/gnupg2-2.2.8-x86_64-1.txz -rw-r--r-- 1 root root 163 2018-06-08 18:58 ./slackware64/n/gnupg2-2.2.8-x86_64-1.txz.asc @@ -3835,7 +3835,7 @@ drwxr-xr-x 2 root root 4096 2018-04-18 08:32 ./slackware64/tcl -rw-r--r-- 1 root root 198 2018-04-13 16:03 ./slackware64/tcl/tk-8.6.8-x86_64-2.txt -rw-r--r-- 1 root root 1762804 2018-04-13 16:03 ./slackware64/tcl/tk-8.6.8-x86_64-2.txz -rw-r--r-- 1 root root 163 2018-04-13 16:03 ./slackware64/tcl/tk-8.6.8-x86_64-2.txz.asc -drwxr-xr-x 2 root root 65536 2018-06-19 05:53 ./slackware64/x +drwxr-xr-x 2 root root 65536 2018-06-19 23:03 ./slackware64/x -rw-r--r-- 1 root root 257 2018-04-13 16:03 ./slackware64/x/anthy-9100h-x86_64-2.txt -rw-r--r-- 1 root root 5074404 2018-04-13 16:03 ./slackware64/x/anthy-9100h-x86_64-2.txz -rw-r--r-- 1 root root 163 2018-04-13 16:03 ./slackware64/x/anthy-9100h-x86_64-2.txz.asc @@ -4036,9 +4036,9 @@ drwxr-xr-x 2 root root 65536 2018-06-19 05:53 ./slackware64/x -rw-r--r-- 1 root root 208 2018-04-13 05:55 ./slackware64/x/libXaw-1.0.13-x86_64-2.txt -rw-r--r-- 1 root root 378328 2018-04-13 05:55 ./slackware64/x/libXaw-1.0.13-x86_64-2.txz -rw-r--r-- 1 root root 163 2018-04-13 05:55 ./slackware64/x/libXaw-1.0.13-x86_64-2.txz.asc --rw-r--r-- 1 root root 511 2018-04-13 05:55 ./slackware64/x/libXaw3d-1.6.2-x86_64-4.txt --rw-r--r-- 1 root root 183520 2018-04-13 05:55 ./slackware64/x/libXaw3d-1.6.2-x86_64-4.txz --rw-r--r-- 1 root root 163 2018-04-13 05:55 ./slackware64/x/libXaw3d-1.6.2-x86_64-4.txz.asc +-rw-r--r-- 1 root root 511 2018-06-19 18:00 ./slackware64/x/libXaw3d-1.6.3-x86_64-1.txt +-rw-r--r-- 1 root root 185804 2018-06-19 18:00 ./slackware64/x/libXaw3d-1.6.3-x86_64-1.txz +-rw-r--r-- 1 root root 163 2018-06-19 18:00 ./slackware64/x/libXaw3d-1.6.3-x86_64-1.txz.asc -rw-r--r-- 1 root root 556 2018-04-13 16:06 ./slackware64/x/libXaw3dXft-1.6.2d-x86_64-3.txt -rw-r--r-- 1 root root 181236 2018-04-13 16:06 ./slackware64/x/libXaw3dXft-1.6.2d-x86_64-3.txz -rw-r--r-- 1 root root 163 2018-04-13 16:06 ./slackware64/x/libXaw3dXft-1.6.2d-x86_64-3.txz.asc @@ -4144,9 +4144,9 @@ drwxr-xr-x 2 root root 65536 2018-06-19 05:53 ./slackware64/x -rw-r--r-- 1 root root 378 2018-04-13 16:07 ./slackware64/x/libhangul-0.1.0-x86_64-2.txt -rw-r--r-- 1 root root 1865468 2018-04-13 16:07 ./slackware64/x/libhangul-0.1.0-x86_64-2.txz -rw-r--r-- 1 root root 163 2018-04-13 16:07 ./slackware64/x/libhangul-0.1.0-x86_64-2.txz.asc --rw-r--r-- 1 root root 534 2018-06-05 18:59 ./slackware64/x/libinput-1.11.0-x86_64-1.txt --rw-r--r-- 1 root root 180960 2018-06-05 18:59 ./slackware64/x/libinput-1.11.0-x86_64-1.txz --rw-r--r-- 1 root root 163 2018-06-05 18:59 ./slackware64/x/libinput-1.11.0-x86_64-1.txz.asc +-rw-r--r-- 1 root root 534 2018-06-19 17:43 ./slackware64/x/libinput-1.11.1-x86_64-1.txt +-rw-r--r-- 1 root root 181144 2018-06-19 17:43 ./slackware64/x/libinput-1.11.1-x86_64-1.txz +-rw-r--r-- 1 root root 163 2018-06-19 17:43 ./slackware64/x/libinput-1.11.1-x86_64-1.txz.asc -rw-r--r-- 1 root root 322 2018-05-01 18:36 ./slackware64/x/libmypaint-1.3.0-x86_64-1.txt -rw-r--r-- 1 root root 117120 2018-05-01 18:36 ./slackware64/x/libmypaint-1.3.0-x86_64-1.txz -rw-r--r-- 1 root root 163 2018-05-01 18:36 ./slackware64/x/libmypaint-1.3.0-x86_64-1.txz.asc @@ -4411,9 +4411,9 @@ drwxr-xr-x 2 root root 65536 2018-06-19 05:53 ./slackware64/x -rw-r--r-- 1 root root 468 2018-05-11 23:28 ./slackware64/x/xf86-input-libinput-0.27.1-x86_64-3.txt -rw-r--r-- 1 root root 50192 2018-05-11 23:28 ./slackware64/x/xf86-input-libinput-0.27.1-x86_64-3.txz -rw-r--r-- 1 root root 163 2018-05-11 23:28 ./slackware64/x/xf86-input-libinput-0.27.1-x86_64-3.txz.asc --rw-r--r-- 1 root root 428 2018-05-11 23:28 ./slackware64/x/xf86-input-mouse-1.9.2-x86_64-3.txt --rw-r--r-- 1 root root 49556 2018-05-11 23:28 ./slackware64/x/xf86-input-mouse-1.9.2-x86_64-3.txz --rw-r--r-- 1 root root 163 2018-05-11 23:28 ./slackware64/x/xf86-input-mouse-1.9.2-x86_64-3.txz.asc +-rw-r--r-- 1 root root 428 2018-06-19 18:00 ./slackware64/x/xf86-input-mouse-1.9.3-x86_64-1.txt +-rw-r--r-- 1 root root 49684 2018-06-19 18:00 ./slackware64/x/xf86-input-mouse-1.9.3-x86_64-1.txz +-rw-r--r-- 1 root root 163 2018-06-19 18:00 ./slackware64/x/xf86-input-mouse-1.9.3-x86_64-1.txz.asc -rw-r--r-- 1 root root 485 2018-05-11 23:29 ./slackware64/x/xf86-input-penmount-1.5.0-x86_64-12.txt -rw-r--r-- 1 root root 18160 2018-05-11 23:29 ./slackware64/x/xf86-input-penmount-1.5.0-x86_64-12.txz -rw-r--r-- 1 root root 163 2018-05-11 23:29 ./slackware64/x/xf86-input-penmount-1.5.0-x86_64-12.txz.asc @@ -4933,11 +4933,11 @@ drwxr-xr-x 2 root root 4096 2018-04-18 08:35 ./slackware64/y -rw-r--r-- 1 root root 1147 2018-03-01 07:55 ./slackware64/y/maketag -rw-r--r-- 1 root root 1147 2018-03-01 07:55 ./slackware64/y/maketag.ez -rw-r--r-- 1 root root 14 2018-03-01 07:55 ./slackware64/y/tagfile -drwxr-xr-x 19 root root 4096 2018-06-19 05:57 ./source --rw-r--r-- 1 root root 452852 2018-06-19 05:57 ./source/CHECKSUMS.md5 --rw-r--r-- 1 root root 163 2018-06-19 05:57 ./source/CHECKSUMS.md5.asc --rw-r--r-- 1 root root 641000 2018-06-19 05:56 ./source/FILE_LIST --rw-r--r-- 1 root root 14766616 2018-06-19 05:56 ./source/MANIFEST.bz2 +drwxr-xr-x 19 root root 4096 2018-06-19 23:07 ./source +-rw-r--r-- 1 root root 452816 2018-06-19 23:07 ./source/CHECKSUMS.md5 +-rw-r--r-- 1 root root 163 2018-06-19 23:07 ./source/CHECKSUMS.md5.asc +-rw-r--r-- 1 root root 640899 2018-06-19 23:06 ./source/FILE_LIST +-rw-r--r-- 1 root root 14763377 2018-06-19 23:06 ./source/MANIFEST.bz2 -rw-r--r-- 1 root root 1314 2006-10-02 04:40 ./source/README.TXT drwxr-xr-x 110 root root 4096 2018-06-14 19:02 ./source/a -rw-r--r-- 1 root root 567 2018-03-13 18:43 ./source/a/FTBFSlog @@ -4957,10 +4957,11 @@ drwxr-xr-x 2 root root 4096 2018-05-06 19:33 ./source/a/aaa_elflibs -rw-r--r-- 1 root root 288 2015-08-29 17:08 ./source/a/aaa_elflibs/tracked-files -rw-r--r-- 1 root root 213 2015-04-20 04:40 ./source/a/aaa_elflibs/tracked-files-tmp lrwxrwxrwx 1 root root 12 2018-04-16 17:31 ./source/a/aaa_terminfo -> ../l/ncurses -drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/a/acl --rw-r--r-- 1 root root 274060 2013-05-19 06:10 ./source/a/acl/acl-2.2.52.src.tar.xz --rwxr-xr-x 1 root root 4119 2018-04-23 17:20 ./source/a/acl/acl.SlackBuild --rw-r--r-- 1 root root 865 2018-02-27 06:13 ./source/a/acl/slack-desc +drwxr-xr-x 2 root root 4096 2018-06-19 18:12 ./source/a/acl +-rw-r--r-- 1 root root 355672 2018-06-19 03:34 ./source/a/acl/acl-2.2.53.tar.lz +-rwxr-xr-x 1 root root 3972 2018-06-19 20:04 ./source/a/acl/acl.SlackBuild +-rw-r--r-- 1 root root 49 2018-06-19 18:12 ./source/a/acl/acl.url +-rw-r--r-- 1 root root 865 2018-06-19 18:00 ./source/a/acl/slack-desc drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/a/acpid -rw-r--r-- 1 root root 224 2004-02-05 01:54 ./source/a/acpid/acpi_handler.sh.gz -rw-r--r-- 1 root root 155568 2018-04-17 01:29 ./source/a/acpid/acpid-2.0.29.tar.xz @@ -4970,10 +4971,12 @@ drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/a/acpid -rw-r--r-- 1 root root 271 2010-01-16 00:00 ./source/a/acpid/doinst.sh.gz -rw-r--r-- 1 root root 285 2010-02-16 22:57 ./source/a/acpid/rc.acpid.gz -rw-r--r-- 1 root root 915 2018-02-27 06:13 ./source/a/acpid/slack-desc -drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/a/attr --rw-r--r-- 1 root root 242700 2013-05-19 14:16 ./source/a/attr/attr-2.4.47.src.tar.xz --rwxr-xr-x 1 root root 4056 2018-04-23 17:20 ./source/a/attr/attr.SlackBuild +drwxr-xr-x 2 root root 4096 2018-06-19 18:09 ./source/a/attr +-rw-r--r-- 1 root root 317239 2018-06-19 02:52 ./source/a/attr/attr-2.4.48.tar.lz +-rwxr-xr-x 1 root root 4181 2018-06-19 20:02 ./source/a/attr/attr.SlackBuild +-rw-r--r-- 1 root root 50 2018-06-19 18:02 ./source/a/attr/attr.url -rw-r--r-- 1 root root 88 2006-02-28 00:02 ./source/a/attr/build +-rw-r--r-- 1 root root 270 2018-06-19 18:09 ./source/a/attr/doinst.sh.gz -rw-r--r-- 1 root root 1058 2018-02-27 06:13 ./source/a/attr/slack-desc drwxr-xr-x 3 root root 4096 2018-04-23 17:20 ./source/a/bash drwxr-xr-x 2 root root 4096 2018-06-05 18:55 ./source/a/bash/bash-4.4-patches @@ -5694,7 +5697,7 @@ drwxr-xr-x 2 root root 4096 2017-11-03 00:51 ./source/a/sysvinit-scripts/s -rw-r--r-- 1 root root 1654 2015-11-23 22:22 ./source/a/sysvinit-scripts/scripts/rc.sysvinit -rw-r--r-- 1 root root 22473 2012-09-07 17:51 ./source/a/sysvinit-scripts/scripts/rescan-scsi-bus.sh -rw-r--r-- 1 root root 645 2012-09-07 17:52 ./source/a/sysvinit-scripts/scripts/rescan-scsi-bus.sh.diff --rw-r--r-- 1 root root 842 2018-02-27 06:13 ./source/a/sysvinit-scripts/slack-desc +-rw-r--r-- 1 root root 842 2018-02-27 06:13 ./source/a/sysvinit-scripts/slack-desc -rwxr-xr-x 1 root root 2558 2018-06-14 23:29 ./source/a/sysvinit-scripts/sysvinit-scripts.SlackBuild -rw-r--r-- 1 root root 23 2015-08-06 22:54 ./source/a/sysvinit/CHANGES -rw-r--r-- 1 root root 668 2015-08-06 22:54 ./source/a/sysvinit/doinst.sh.gz @@ -9838,9 +9841,9 @@ drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/n/getmail -rwxr-xr-x 1 root root 2544 2018-04-23 17:20 ./source/n/getmail/getmail.SlackBuild -rw-r--r-- 1 root root 35 2018-04-03 18:20 ./source/n/getmail/getmail.url -rw-r--r-- 1 root root 817 2018-02-27 06:13 ./source/n/getmail/slack-desc -drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/n/gnupg --rw-r--r-- 1 root root 2660120 2017-07-19 09:24 ./source/n/gnupg/gnupg-1.4.22.tar.xz --rwxr-xr-x 1 root root 3720 2018-04-23 17:20 ./source/n/gnupg/gnupg.SlackBuild +drwxr-xr-x 2 root root 4096 2018-06-19 18:59 ./source/n/gnupg +-rw-r--r-- 1 root root 2663136 2018-06-11 08:48 ./source/n/gnupg/gnupg-1.4.23.tar.xz +-rwxr-xr-x 1 root root 3720 2018-06-19 18:59 ./source/n/gnupg/gnupg.SlackBuild -rw-r--r-- 1 root root 822 2018-02-27 06:13 ./source/n/gnupg/slack-desc.gnupg drwxr-xr-x 2 root root 4096 2018-06-08 18:57 ./source/n/gnupg2 -rw-r--r-- 1 root root 4694045 2018-06-08 10:11 ./source/n/gnupg2/gnupg-2.2.8.tar.lz @@ -10772,9 +10775,9 @@ drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/x/libhangul -rw-r--r-- 1 root root 2148068 2011-10-30 11:43 ./source/x/libhangul/libhangul-0.1.0.tar.xz -rwxr-xr-x 1 root root 4852 2018-04-23 17:20 ./source/x/libhangul/libhangul.SlackBuild -rw-r--r-- 1 root root 835 2018-02-27 06:13 ./source/x/libhangul/slack-desc -drwxr-xr-x 2 root root 4096 2018-06-05 18:59 ./source/x/libinput --rw-r--r-- 1 root root 485976 2018-06-05 00:27 ./source/x/libinput/libinput-1.11.0.tar.xz --rw-r--r-- 1 root root 95 2018-06-05 00:27 ./source/x/libinput/libinput-1.11.0.tar.xz.sig +drwxr-xr-x 2 root root 4096 2018-06-19 17:43 ./source/x/libinput +-rw-r--r-- 1 root root 485064 2018-06-19 05:01 ./source/x/libinput/libinput-1.11.1.tar.xz +-rw-r--r-- 1 root root 95 2018-06-19 05:01 ./source/x/libinput/libinput-1.11.1.tar.xz.sig -rwxr-xr-x 1 root root 3729 2018-04-23 17:20 ./source/x/libinput/libinput.SlackBuild -rw-r--r-- 1 root root 46 2015-04-21 01:23 ./source/x/libinput/libinput.url -rw-r--r-- 1 root root 1022 2018-02-27 06:13 ./source/x/libinput/slack-desc @@ -11015,7 +11018,7 @@ drwxr-xr-x 2 root root 12288 2018-04-15 22:31 ./source/x/x11/build -rw-r--r-- 1 root root 2 2018-04-13 02:44 ./source/x/x11/build/libXScrnSaver -rw-r--r-- 1 root root 2 2018-04-13 02:44 ./source/x/x11/build/libXau -rw-r--r-- 1 root root 2 2018-04-13 02:44 ./source/x/x11/build/libXaw --rw-r--r-- 1 root root 2 2018-04-13 02:44 ./source/x/x11/build/libXaw3d +-rw-r--r-- 1 root root 2 2018-06-19 17:45 ./source/x/x11/build/libXaw3d -rw-r--r-- 1 root root 2 2018-04-13 02:44 ./source/x/x11/build/libXaw3dXft -rw-r--r-- 1 root root 2 2018-04-13 02:44 ./source/x/x11/build/libXcm -rw-r--r-- 1 root root 2 2018-04-13 02:44 ./source/x/x11/build/libXcomposite @@ -11148,7 +11151,7 @@ drwxr-xr-x 2 root root 12288 2018-04-15 22:31 ./source/x/x11/build -rw-r--r-- 1 root root 2 2018-05-11 12:33 ./source/x/x11/build/xf86-input-joystick -rw-r--r-- 1 root root 2 2018-05-11 12:33 ./source/x/x11/build/xf86-input-keyboard -rw-r--r-- 1 root root 2 2018-05-11 12:33 ./source/x/x11/build/xf86-input-libinput --rw-r--r-- 1 root root 2 2018-05-11 12:33 ./source/x/x11/build/xf86-input-mouse +-rw-r--r-- 1 root root 2 2018-06-19 17:44 ./source/x/x11/build/xf86-input-mouse -rw-r--r-- 1 root root 3 2018-05-11 12:33 ./source/x/x11/build/xf86-input-penmount -rw-r--r-- 1 root root 2 2018-06-01 05:18 ./source/x/x11/build/xf86-input-synaptics -rw-r--r-- 1 root root 2 2018-05-11 12:33 ./source/x/x11/build/xf86-input-vmmouse @@ -11325,7 +11328,7 @@ drwxr-xr-x 2 root root 4096 2015-04-21 02:59 ./source/x/x11/makepkg -rw-r--r-- 1 root root 3528 2018-03-12 18:09 ./source/x/x11/modularize -rw-r--r-- 1 root root 1189 2018-05-03 12:16 ./source/x/x11/noarch -rw-r--r-- 1 root root 856 2016-01-12 23:39 ./source/x/x11/package-blacklist -drwxr-xr-x 13 root root 4096 2018-05-17 19:24 ./source/x/x11/patch +drwxr-xr-x 12 root root 4096 2018-06-19 17:59 ./source/x/x11/patch -rw-r--r-- 1 root root 326 2010-11-13 18:39 ./source/x/x11/patch/README drwxr-xr-x 2 root root 4096 2014-07-14 23:09 ./source/x/x11/patch/luit -rw-r--r-- 1 root root 170 2014-07-14 23:09 ./source/x/x11/patch/luit.patch @@ -11340,9 +11343,6 @@ drwxr-xr-x 2 root root 4096 2014-12-07 08:09 ./source/x/x11/patch/xdm -rw-r--r-- 1 root root 419 2014-12-07 08:06 ./source/x/x11/patch/xdm/xdm-1.1.11-setproctitle-include.patch.gz -rw-r--r-- 1 root root 2309 2014-12-07 08:07 ./source/x/x11/patch/xdm/xdm-consolekit.patch.gz -rw-r--r-- 1 root root 830 2013-07-07 06:42 ./source/x/x11/patch/xdm/xdm.glibc.crypt.diff.gz -drwxr-xr-x 2 root root 4096 2018-05-11 12:39 ./source/x/x11/patch/xf86-input-mouse --rw-r--r-- 1 root root 174 2018-05-11 12:40 ./source/x/x11/patch/xf86-input-mouse.patch --rw-r--r-- 1 root root 632 2018-05-11 12:38 ./source/x/x11/patch/xf86-input-mouse/3c8f243b750a92d5837a449d344ff884dbd02b57.patch.gz -rw-r--r-- 1 root root 319 2015-08-20 06:44 ./source/x/x11/patch/xf86-video-apm.patch -rw-r--r-- 1 root root 319 2015-08-20 06:44 ./source/x/x11/patch/xf86-video-ark.patch -rw-r--r-- 1 root root 319 2015-08-20 06:44 ./source/x/x11/patch/xf86-video-ast.patch @@ -11756,7 +11756,7 @@ drwxr-xr-x 2 root root 12288 2018-03-12 18:05 ./source/x/x11/slack-desc -rw-r--r-- 1 root root 716 2012-04-08 02:21 ./source/x/x11/slack-desc/xwd -rw-r--r-- 1 root root 702 2012-04-08 02:21 ./source/x/x11/slack-desc/xwininfo -rw-r--r-- 1 root root 668 2012-04-07 23:42 ./source/x/x11/slack-desc/xwud -drwxr-xr-x 12 root root 4096 2018-05-18 17:19 ./source/x/x11/src +drwxr-xr-x 12 root root 4096 2018-06-19 17:44 ./source/x/x11/src drwxr-xr-x 2 root root 4096 2018-06-11 18:01 ./source/x/x11/src/app -rw-r--r-- 1 root root 115464 2018-03-05 03:32 ./source/x/x11/src/app/appres-1.0.5.tar.xz -rw-r--r-- 1 root root 139452 2017-11-07 19:12 ./source/x/x11/src/app/bdftopcf-1.1.tar.xz @@ -11853,13 +11853,13 @@ drwxr-xr-x 2 root root 4096 2018-03-11 20:42 ./source/x/x11/src/data drwxr-xr-x 2 root root 4096 2015-05-04 05:55 ./source/x/x11/src/doc -rw-r--r-- 1 root root 333452 2015-05-01 06:18 ./source/x/x11/src/doc/xorg-docs-1.7.1.tar.xz -rw-r--r-- 1 root root 110976 2012-06-06 02:42 ./source/x/x11/src/doc/xorg-sgml-doctools-1.11.tar.xz -drwxr-xr-x 2 root root 4096 2018-06-01 05:18 ./source/x/x11/src/driver +drwxr-xr-x 2 root root 4096 2018-06-19 17:44 ./source/x/x11/src/driver -rw-r--r-- 1 root root 236544 2011-05-04 23:02 ./source/x/x11/src/driver/xf86-input-acecad-1.5.0.tar.xz -rw-r--r-- 1 root root 345048 2018-05-29 02:33 ./source/x/x11/src/driver/xf86-input-evdev-2.10.6.tar.xz -rw-r--r-- 1 root root 291860 2016-11-17 23:02 ./source/x/x11/src/driver/xf86-input-joystick-1.6.3.tar.xz -rw-r--r-- 1 root root 290104 2016-11-17 04:29 ./source/x/x11/src/driver/xf86-input-keyboard-1.9.0.tar.xz -rw-r--r-- 1 root root 305292 2018-04-09 23:27 ./source/x/x11/src/driver/xf86-input-libinput-0.27.1.tar.xz --rw-r--r-- 1 root root 318096 2016-11-17 04:39 ./source/x/x11/src/driver/xf86-input-mouse-1.9.2.tar.xz +-rw-r--r-- 1 root root 318204 2018-06-19 04:36 ./source/x/x11/src/driver/xf86-input-mouse-1.9.3.tar.xz -rw-r--r-- 1 root root 229120 2011-06-28 00:52 ./source/x/x11/src/driver/xf86-input-penmount-1.5.0.tar.xz -rw-r--r-- 1 root root 427964 2018-05-29 03:19 ./source/x/x11/src/driver/xf86-input-synaptics-1.9.1.tar.xz -rw-r--r-- 1 root root 258876 2015-06-25 10:30 ./source/x/x11/src/driver/xf86-input-vmmouse-13.1.0.tar.xz @@ -11945,7 +11945,7 @@ drwxr-xr-x 2 root root 4096 2015-03-15 21:33 ./source/x/x11/src/font -rwxr-xr-x 1 root root 2052 2016-04-13 17:16 ./source/x/x11/src/get-xf86-video-intel.sh -rwxr-xr-x 1 root root 2080 2016-04-13 17:16 ./source/x/x11/src/get-xf86-video-nouveau.sh -rwxr-xr-x 1 root root 2125 2016-04-13 17:16 ./source/x/x11/src/get-xf86-video-openchrome.sh -drwxr-xr-x 2 root root 4096 2018-05-14 18:23 ./source/x/x11/src/lib +drwxr-xr-x 2 root root 4096 2018-06-19 17:44 ./source/x/x11/src/lib -rw-r--r-- 1 root root 266224 2015-05-01 04:35 ./source/x/x11/src/lib/libFS-1.0.7.tar.xz -rw-r--r-- 1 root root 309088 2014-06-07 01:31 ./source/x/x11/src/lib/libICE-1.0.9.tar.xz -rw-r--r-- 1 root root 283276 2013-09-08 06:08 ./source/x/x11/src/lib/libSM-1.2.2.tar.xz @@ -11953,7 +11953,7 @@ drwxr-xr-x 2 root root 4096 2018-05-14 18:23 ./source/x/x11/src/lib -rw-r--r-- 1 root root 235904 2012-03-08 05:08 ./source/x/x11/src/lib/libXScrnSaver-1.2.2.tar.xz -rw-r--r-- 1 root root 247936 2013-05-24 22:18 ./source/x/x11/src/lib/libXau-1.0.8.tar.xz -rw-r--r-- 1 root root 565164 2015-05-01 05:18 ./source/x/x11/src/lib/libXaw-1.0.13.tar.xz --rw-r--r-- 1 root root 454428 2012-03-29 22:44 ./source/x/x11/src/lib/libXaw3d-1.6.2.tar.xz +-rw-r--r-- 1 root root 475672 2018-06-19 05:01 ./source/x/x11/src/lib/libXaw3d-1.6.3.tar.xz -rw-r--r-- 1 root root 250328 2013-01-04 09:14 ./source/x/x11/src/lib/libXcm-0.5.2.tar.xz -rw-r--r-- 1 root root 239876 2013-01-03 07:30 ./source/x/x11/src/lib/libXcomposite-0.4.4.tar.xz -rw-r--r-- 1 root root 273708 2017-11-28 14:26 ./source/x/x11/src/lib/libXcursor-1.1.15.tar.xz @@ -12237,7 +12237,7 @@ drwxr-xr-x 2 root root 4096 2018-05-06 19:33 ./source/xap/sane -rw-r--r-- 1 root root 3581624 2017-05-23 13:08 ./source/xap/sane/sane-backends-1.0.27.tar.xz -rw-r--r-- 1 root root 341 2010-01-20 01:54 ./source/xap/sane/sane-frontends-1.0.14-sane_cap_always_settable.diff.gz -rw-r--r-- 1 root root 172596 2005-09-18 07:21 ./source/xap/sane/sane-frontends-1.0.14.tar.xz --rwxr-xr-x 1 root root 5677 2018-05-06 19:33 ./source/xap/sane/sane.SlackBuild +-rwxr-xr-x 1 root root 5718 2018-06-19 21:38 ./source/xap/sane/sane.SlackBuild -rw-r--r-- 1 root root 773 2018-02-27 06:13 ./source/xap/sane/slack-desc drwxr-xr-x 5 root root 4096 2018-05-03 19:20 ./source/xap/seamonkey drwxr-xr-x 2 root root 4096 2016-07-03 18:05 ./source/xap/seamonkey/autoconf @@ -12455,11 +12455,11 @@ drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/xfce/libxfce4ui drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/xfce/libxfce4util -rw-r--r-- 1 root root 386632 2015-02-28 16:06 ./source/xfce/libxfce4util/libxfce4util-4.12.1.tar.xz -rwxr-xr-x 1 root root 4750 2018-04-23 17:20 ./source/xfce/libxfce4util/libxfce4util.SlackBuild --rw-r--r-- 1 root root 776 2018-02-27 06:13 ./source/xfce/libxfce4util/slack-desc -drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/xfce/orage --rw-r--r-- 1 root root 2165672 2015-04-10 10:30 ./source/xfce/orage/orage-4.12.1.tar.xz --rwxr-xr-x 1 root root 4085 2018-04-23 17:20 ./source/xfce/orage/orage.SlackBuild --rw-r--r-- 1 root root 723 2017-11-14 22:05 ./source/xfce/orage/orage.libical3.diff.gz +-rw-r--r-- 1 root root 776 2018-02-27 06:13 ./source/xfce/libxfce4util/slack-desc +drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/xfce/orage +-rw-r--r-- 1 root root 2165672 2015-04-10 10:30 ./source/xfce/orage/orage-4.12.1.tar.xz +-rwxr-xr-x 1 root root 4085 2018-04-23 17:20 ./source/xfce/orage/orage.SlackBuild +-rw-r--r-- 1 root root 723 2017-11-14 22:05 ./source/xfce/orage/orage.libical3.diff.gz -rw-r--r-- 1 root root 625 2018-02-27 06:13 ./source/xfce/orage/slack-desc drwxr-xr-x 2 root root 4096 2018-04-23 17:20 ./source/xfce/thunar-volman -rw-r--r-- 1 root root 835 2015-03-22 04:39 ./source/xfce/thunar-volman/0001-Fix-return-with-no-value-in-function-returning-non-v.patch @@ -12585,14 +12585,43 @@ drwxr-xr-x 2 root root 4096 2012-03-02 16:01 ./source/y/bsd-games/fortune-fi -rw-r--r-- 1 root root 364407 2002-03-10 05:09 ./source/y/bsd-games/fortunes-o.tar.gz -rw-r--r-- 1 root root 104848 1993-10-25 00:02 ./source/y/bsd-games/hangman-words.gz -rw-r--r-- 1 root root 1048 2018-02-27 06:13 ./source/y/bsd-games/slack-desc -drwxr-xr-x 4 root root 4096 2018-06-13 05:57 ./testing --rw-r--r-- 1 root root 552 2018-06-13 05:57 ./testing/CHECKSUMS.md5 --rw-r--r-- 1 root root 163 2018-06-13 05:57 ./testing/CHECKSUMS.md5.asc --rw-r--r-- 1 root root 685 2018-06-13 05:57 ./testing/FILE_LIST --rw-r--r-- 1 root root 14 2018-06-13 05:57 ./testing/MANIFEST.bz2 --rw-r--r-- 1 root root 224 2018-06-13 05:57 ./testing/PACKAGES.TXT -drwxr-xr-x 2 root root 4096 2018-06-12 19:55 ./testing/packages -drwxr-xr-x 2 root root 4096 2018-06-12 19:55 ./testing/source +drwxr-xr-x 4 root root 4096 2018-06-19 23:07 ./testing +-rw-r--r-- 1 root root 2433 2018-06-19 23:07 ./testing/CHECKSUMS.md5 +-rw-r--r-- 1 root root 163 2018-06-19 23:07 ./testing/CHECKSUMS.md5.asc +-rw-r--r-- 1 root root 3132 2018-06-19 23:07 ./testing/FILE_LIST +-rw-r--r-- 1 root root 1640 2018-06-19 23:07 ./testing/MANIFEST.bz2 +-rw-r--r-- 1 root root 1079 2018-06-19 23:07 ./testing/PACKAGES.TXT +drwxr-xr-x 2 root root 4096 2018-06-19 23:07 ./testing/packages +-rw-r--r-- 1 root root 672 2018-06-19 21:13 ./testing/packages/pkgtools-15.0-noarch-20.txt +-rw-r--r-- 1 root root 195204 2018-06-19 21:13 ./testing/packages/pkgtools-15.0-noarch-20.txz +-rw-r--r-- 1 root root 163 2018-06-19 21:13 ./testing/packages/pkgtools-15.0-noarch-20.txz.asc +drwxr-xr-x 3 root root 4096 2018-06-19 21:12 ./testing/source +drwxr-xr-x 4 root root 4096 2018-06-19 21:12 ./testing/source/pkgtools +-rw-r--r-- 1 root root 984 2018-06-19 19:28 ./testing/source/pkgtools/doinst.sh.gz +drwxr-xr-x 2 root root 4096 2018-06-19 19:42 ./testing/source/pkgtools/manpages +-rw-r--r-- 1 root root 76636 2016-06-15 01:08 ./testing/source/pkgtools/manpages-l10n.tar.xz +-rw-r--r-- 1 root root 1265 2018-06-19 19:28 ./testing/source/pkgtools/manpages/explodepkg.8 +-rw-r--r-- 1 root root 3554 2018-06-19 19:28 ./testing/source/pkgtools/manpages/installpkg.8 +-rw-r--r-- 1 root root 5441 2018-06-19 19:28 ./testing/source/pkgtools/manpages/makepkg.8 +-rw-r--r-- 1 root root 1401 2018-04-11 19:48 ./testing/source/pkgtools/manpages/pkgdiff.8 +-rw-r--r-- 1 root root 2518 2009-04-11 21:11 ./testing/source/pkgtools/manpages/pkgtool.8 +-rw-r--r-- 1 root root 3251 2018-06-19 19:28 ./testing/source/pkgtools/manpages/removepkg.8 +-rw-r--r-- 1 root root 2962 2018-06-08 19:56 ./testing/source/pkgtools/manpages/upgradepkg.8 +-rwxr-xr-x 1 root root 3742 2018-06-19 21:13 ./testing/source/pkgtools/pkgtools.SlackBuild +drwxr-xr-x 2 root root 4096 2018-06-19 19:42 ./testing/source/pkgtools/scripts +-rw-r--r-- 1 root root 3608 2018-06-19 19:28 ./testing/source/pkgtools/scripts/explodepkg +-rw-r--r-- 1 root root 27106 2018-06-19 19:31 ./testing/source/pkgtools/scripts/installpkg +-rw-r--r-- 1 root root 13672 2018-06-19 19:28 ./testing/source/pkgtools/scripts/makebootdisk +-rw-r--r-- 1 root root 15923 2018-05-22 00:23 ./testing/source/pkgtools/scripts/makepkg +-rw-r--r-- 1 root root 4712 2018-04-11 20:28 ./testing/source/pkgtools/scripts/pkgdiff +-rw-r--r-- 1 root root 21938 2018-06-19 19:28 ./testing/source/pkgtools/scripts/pkgtool +-rw-r--r-- 1 root root 15611 2018-06-19 19:39 ./testing/source/pkgtools/scripts/removepkg +-rw-r--r-- 1 root root 170 2003-02-16 00:56 ./testing/source/pkgtools/scripts/setup.70.install-kernel +-rw-r--r-- 1 root root 9164 2018-06-19 19:28 ./testing/source/pkgtools/scripts/setup.80.make-bootdisk +-rw-r--r-- 1 root root 1062 2018-04-28 19:12 ./testing/source/pkgtools/scripts/setup.htmlview +-rw-r--r-- 1 root root 8875 2018-06-19 19:28 ./testing/source/pkgtools/scripts/setup.services +-rw-r--r-- 1 root root 14138 2018-06-19 19:41 ./testing/source/pkgtools/scripts/upgradepkg +-rw-r--r-- 1 root root 1128 2018-04-11 19:51 ./testing/source/pkgtools/slack-desc drwxr-xr-x 2 root root 4096 2018-06-18 18:15 ./usb-and-pxe-installers -rw-r--r-- 1 root root 31203 2011-03-21 21:21 ./usb-and-pxe-installers/README_PXE.TXT -rw-r--r-- 1 root root 9197 2013-09-25 04:33 ./usb-and-pxe-installers/README_USB.TXT diff --git a/recompress.sh b/recompress.sh index 6a889615..b5c7bc5f 100755 --- a/recompress.sh +++ b/recompress.sh @@ -33,7 +33,6 @@ gzip ./source/x/motif/motif-2.3.4-mwmrc_dir.patch gzip ./source/x/motif/motif-2.3.4-bindings.patch gzip ./source/x/motif/motif.rgbtxt.patch gzip ./source/x/ttf-indic-fonts/doinst.sh -gzip ./source/x/x11/patch/xf86-input-mouse/3c8f243b750a92d5837a449d344ff884dbd02b57.patch gzip ./source/x/x11/patch/xpyb/xpyb-1.3.1-xcbproto-1.13.patch gzip ./source/x/x11/patch/xorg-server/fix-nouveau-segfault.diff gzip ./source/x/x11/patch/xorg-server/xorg-server.combo.mouse.keyboard.layout.patch @@ -923,6 +922,7 @@ gzip ./source/a/logrotate/logrotate.conf gzip ./source/a/sysvinit-scripts/doinst.sh gzip ./source/a/dialog/dialog.smaller.min.height.diff gzip ./source/a/glibc-zoneinfo/doinst.sh +gzip ./source/a/attr/doinst.sh gzip ./source/a/lvm2/doinst.sh gzip ./source/a/lvm2/create-dm-run-dir.diff gzip ./source/a/tcsh/doinst.sh @@ -1066,6 +1066,7 @@ gzip ./source/ap/linuxdoc-tools/doinst.sh gzip ./source/t/texlive/doinst.sh gzip ./source/t/xfig/xfig.fig.ad.diff gzip ./source/t/xfig/xfig.no.pdf.ref.diff +gzip ./testing/source/pkgtools/doinst.sh gzip ./pasture/source/php/php-fpm.conf.diff gzip ./pasture/source/php/PHP-5.6.31-OpenSSL-1.1.0-compatibility-20170801.patch gzip ./pasture/source/php/doinst.sh diff --git a/source/a/acl/acl.SlackBuild b/source/a/acl/acl.SlackBuild index 83e78f9d..9d024b20 100755 --- a/source/a/acl/acl.SlackBuild +++ b/source/a/acl/acl.SlackBuild @@ -23,8 +23,8 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=acl -VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 4- -d . | rev | cut -f 2 -d -)} -BUILD=${BUILD:-2} +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -53,13 +53,15 @@ else LIBDIRSUFFIX="" fi +NUMJOBS=${NUMJOBS:-" -j7 "} + rm -rf $PKG -mkdir -p $TMP $PKG +mkdir -p $TMP $PKG/usr/lib${LIBDIRSUFFIX} cd $TMP rm -rf acl-$(echo $VERSION | cut -f 1 -d '-') -tar xvf $CWD/acl-$VERSION.src.tar.?z || exit 1 +tar xvf $CWD/acl-$VERSION.tar.?z || exit 1 cd acl-$(echo $VERSION | cut -f 1 -d '-') || exit 1 chown -R root:root . @@ -70,22 +72,19 @@ find . \ -exec chmod 644 {} \; ./configure \ - --prefix=/ \ - --exec-prefix=/ \ - --sbindir=/bin \ - --bindir=/usr/bin \ - --libdir=/lib${LIBDIRSUFFIX} \ - --libexecdir=/usr/lib${LIBDIRSUFFIX} \ - --includedir=/usr/include \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --docdir=/usr/doc/$PKGNAM-$VERSION \ --mandir=/usr/man \ - --datadir=/usr/share \ + --infodir=/usr/info \ + --disable-static \ --docdir=/usr/doc/acl-$VERSION \ --build=$ARCH-slackware-linux || exit 1 -make PKG_DOC_DIR=/usr/doc/acl-$VERSION || exit 1 -make install PKG_DOC_DIR=/usr/doc/acl-$VERSION DESTDIR=$PKG || exit 1 -make install-dev PKG_DOC_DIR=/usr/doc/acl-$VERSION DESTDIR=$PKG || exit 1 -make install-lib PKG_DOC_DIR=/usr/doc/acl-$VERSION DESTDIR=$PKG || exit 1 +make $NUMJOBS || make || exit 1 +make install DESTDIR=$PKG || exit 1 #It would be nice to keep the same timestamps that the files have in the source: cp -a \ @@ -96,17 +95,23 @@ cp -a \ find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) -strip -g $PKG/usr/lib${LIBDIRSUFFIX}/*.a -# Remove bogus files: -rm -f $PKG/lib${LIBDIRSUFFIX}/*.a $PKG/lib${LIBDIRSUFFIX}/libacl.so $PKG/lib${LIBDIRSUFFIX}/*.la $PKG/usr/lib${LIBDIRSUFFIX}/*.la -# Make /usr/lib${LIBDIRSUFFIX}/libacl.so a symlink to /lib${LIBDIRSUFFIX}: +# Don't ship static libraries: +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.a + +# Don't ship .la files: +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la + +# Move libraries, as they might be needed by programs that bring a network +# mounted /usr online: +mkdir $PKG/lib${LIBDIRSUFFIX} ( cd $PKG/usr/lib${LIBDIRSUFFIX} - rm -f libacl.so - ln -sf /lib${LIBDIRSUFFIX}/libacl.so.1 libacl.so + for file in lib*.so.?.* ; do + mv $file ../../lib${LIBDIRSUFFIX} + ln -sf ../../lib${LIBDIRSUFFIX}/$file . + done + cp -a lib*.so.? ../../lib${LIBDIRSUFFIX} ) -# Fix shared library perms: -chmod 755 $PKG/lib${LIBDIRSUFFIX}/* # Gzip the man pages: ( cd $PKG/usr/man diff --git a/source/a/acl/acl.url b/source/a/acl/acl.url new file mode 100644 index 00000000..ea5a80b3 --- /dev/null +++ b/source/a/acl/acl.url @@ -0,0 +1 @@ +http://download.savannah.nongnu.org/releases/acl diff --git a/source/a/acl/slack-desc b/source/a/acl/slack-desc index a3b5966f..95f100fc 100644 --- a/source/a/acl/slack-desc +++ b/source/a/acl/slack-desc @@ -13,7 +13,7 @@ acl: POSIX Access Control Lists. POSIX Access Control Lists (defined in acl: POSIX 1003.1e draft standard 17) are used to define more fine-grained acl: discretionary access rights for files and directories. acl: +acl: Homepage: http://savannah.nongnu.org/projects/acl acl: acl: -acl: Homepage: http://savannah.nongnu.org/projects/acl acl: diff --git a/source/a/attr/attr.SlackBuild b/source/a/attr/attr.SlackBuild index f9593d5d..1254c5ca 100755 --- a/source/a/attr/attr.SlackBuild +++ b/source/a/attr/attr.SlackBuild @@ -23,8 +23,8 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=attr -VERSION=2.4.47 -BUILD=${BUILD:-2} +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -53,12 +53,14 @@ else LIBDIRSUFFIX="" fi +NUMJOBS=${NUMJOBS:-" -j7 "} + rm -rf $PKG mkdir -p $TMP $PKG cd $TMP rm -rf attr-$(echo $VERSION | cut -f 1 -d '-') -tar xvf $CWD/attr-$VERSION.src.tar.?z || exit 1 +tar xvf $CWD/attr-$VERSION.tar.?z || exit 1 cd attr-$(echo $VERSION | cut -f 1 -d '-') || exit 1 chown -R root:root . find . \ @@ -68,22 +70,39 @@ find . \ -exec chmod 644 {} \; ./configure \ - --prefix=/ \ - --exec-prefix=/ \ - --sbindir=/bin \ - --bindir=/usr/bin \ - --libdir=/lib${LIBDIRSUFFIX} \ - --libexecdir=/usr/lib${LIBDIRSUFFIX} \ - --includedir=/usr/include \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --docdir=/usr/doc/$PKGNAM-$VERSION \ --mandir=/usr/man \ - --datadir=/usr/share \ + --infodir=/usr/info \ --docdir=/usr/doc/attr-$VERSION \ + --disable-static \ --build=$ARCH-slackware-linux || exit 1 -make PKG_DOC_DIR=/usr/doc/attr-$VERSION || exit 1 -make install PKG_DOC_DIR=/usr/doc/attr-$VERSION DESTDIR=$PKG || exit 1 -make install-dev PKG_DOC_DIR=/usr/doc/attr-$VERSION DESTDIR=$PKG || exit 1 -make install-lib PKG_DOC_DIR=/usr/doc/attr-$VERSION DESTDIR=$PKG || exit 1 +make $NUMJOBS || make || exit 1 +make install DESTDIR=$PKG || exit 1 + +# Install xattr.conf as a .new file: +mv $PKG/etc/xattr.conf $PKG/etc/xattr.conf.new + +# Don't ship static library: +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.a + +# Don't ship .la files: +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la + +# Move libraries, as they might be needed by programs that bring a network +# mounted /usr online: +mkdir $PKG/lib${LIBDIRSUFFIX} +( cd $PKG/usr/lib${LIBDIRSUFFIX} + for file in lib*.so.?.* ; do + mv $file ../../lib${LIBDIRSUFFIX} + ln -sf ../../lib${LIBDIRSUFFIX}/$file . + done + cp -a lib*.so.? ../../lib${LIBDIRSUFFIX} +) #It would be nice to keep the same timestamps that the files have in the source: rm -rf $PKG/usr/doc/attr-$VERSION/ea-conv @@ -95,11 +114,6 @@ find $PKG | xargs file | grep -e "executable" -e "shared object" \ | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null strip -g $PKG/usr/lib${LIBDIRSUFFIX}/*.a -# Remove bogus files: -rm -f $PKG/lib${LIBDIRSUFFIX}/*.a $PKG/lib${LIBDIRSUFFIX}/libattr.so $PKG/lib${LIBDIRSUFFIX}/*.la $PKG/usr/lib${LIBDIRSUFFIX}/*.la -# Make /usr/lib${LIBDIRSUFFIX}/libattr.so a symlink to /lib${LIBDIRSUFFIX}: -mkdir -p $PKG/usr/lib${LIBDIRSUFFIX} -ln -sf /lib${LIBDIRSUFFIX}/libattr.so.1 $PKG/usr/lib${LIBDIRSUFFIX}/libattr.so # Fix shared library perms: chmod 755 $PKG/lib${LIBDIRSUFFIX}/* @@ -111,6 +125,7 @@ chmod 755 $PKG/lib${LIBDIRSUFFIX}/* mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $TMP/attr-$(echo $VERSION | tr - _ )-$ARCH-$BUILD.txz diff --git a/source/a/attr/attr.url b/source/a/attr/attr.url new file mode 100644 index 00000000..f9f14b84 --- /dev/null +++ b/source/a/attr/attr.url @@ -0,0 +1 @@ +http://download.savannah.nongnu.org/releases/attr diff --git a/source/a/attr/doinst.sh b/source/a/attr/doinst.sh new file mode 100644 index 00000000..ca6ce568 --- /dev/null +++ b/source/a/attr/doinst.sh @@ -0,0 +1,14 @@ +#!/bin/sh +config() { + NEW="$1" + OLD="`dirname $NEW`/`basename $NEW .new`" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/xattr.conf.new diff --git a/source/n/gnupg/gnupg.SlackBuild b/source/n/gnupg/gnupg.SlackBuild index 5de0ee6c..8836b552 100755 --- a/source/n/gnupg/gnupg.SlackBuild +++ b/source/n/gnupg/gnupg.SlackBuild @@ -24,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=gnupg VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-2} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then diff --git a/source/x/x11/build/libXaw3d b/source/x/x11/build/libXaw3d index b8626c4c..d00491fd 100644 --- a/source/x/x11/build/libXaw3d +++ b/source/x/x11/build/libXaw3d @@ -1 +1 @@ -4 +1 diff --git a/source/x/x11/build/xf86-input-mouse b/source/x/x11/build/xf86-input-mouse index 00750edc..d00491fd 100644 --- a/source/x/x11/build/xf86-input-mouse +++ b/source/x/x11/build/xf86-input-mouse @@ -1 +1 @@ -3 +1 diff --git a/source/x/x11/patch/xf86-input-mouse.patch b/source/x/x11/patch/xf86-input-mouse.patch deleted file mode 100644 index e54c5190..00000000 --- a/source/x/x11/patch/xf86-input-mouse.patch +++ /dev/null @@ -1,2 +0,0 @@ -zcat $CWD/patch/xf86-input-mouse/3c8f243b750a92d5837a449d344ff884dbd02b57.patch.gz \ - | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; } diff --git a/source/x/x11/patch/xf86-input-mouse/3c8f243b750a92d5837a449d344ff884dbd02b57.patch b/source/x/x11/patch/xf86-input-mouse/3c8f243b750a92d5837a449d344ff884dbd02b57.patch deleted file mode 100644 index 5726c50a..00000000 --- a/source/x/x11/patch/xf86-input-mouse/3c8f243b750a92d5837a449d344ff884dbd02b57.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 3c8f243b750a92d5837a449d344ff884dbd02b57 Mon Sep 17 00:00:00 2001 -From: Adam Jackson <ajax@redhat.com> -Date: Thu, 16 Feb 2017 09:21:21 -0500 -Subject: Adapt to removal of xf86GetOS - -Signed-off-by: Adam Jackson <ajax@redhat.com> ---- - src/mouse.c | 11 +++++------ - 1 file changed, 5 insertions(+), 6 deletions(-) - -diff --git a/src/mouse.c b/src/mouse.c -index dae98aa..40d97a9 100644 ---- a/src/mouse.c -+++ b/src/mouse.c -@@ -794,7 +794,6 @@ InitProtocols(void) - { - int classes; - int i; -- const char *osname = NULL; - - if (osInfo) - return TRUE; -@@ -821,11 +820,11 @@ InitProtocols(void) - mouseProtocols[i].id = PROT_UNSUP; - - /* NetBSD uses PROT_BM for "PS/2". */ -- xf86GetOS(&osname, NULL, NULL, NULL); -- if (osname && xf86NameCmp(osname, "netbsd") == 0) -- for (i = 0; mouseProtocols[i].name; i++) -- if (mouseProtocols[i].id == PROT_PS2) -- mouseProtocols[i].id = PROT_BM; -+#if defined(__NetBSD__) -+ for (i = 0; mouseProtocols[i].name; i++) -+ if (mouseProtocols[i].id == PROT_PS2) -+ mouseProtocols[i].id = PROT_BM; -+#endif - - return TRUE; - } --- -cgit v1.1 - diff --git a/source/xap/sane/sane.SlackBuild b/source/xap/sane/sane.SlackBuild index e14b943b..f66739c1 100755 --- a/source/xap/sane/sane.SlackBuild +++ b/source/xap/sane/sane.SlackBuild @@ -152,6 +152,7 @@ find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ # Don't ship .la files: rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la +rm -f /usr/lib${LIBDIRSUFFIX}/libsane.la # List additional backends in /etc/sane.d/dll.conf. # I don't think it will hurt anything to do this, even diff --git a/testing/source/pkgtools/doinst.sh b/testing/source/pkgtools/doinst.sh new file mode 100644 index 00000000..d14a6787 --- /dev/null +++ b/testing/source/pkgtools/doinst.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# Migrate the package database and related directories from the long-time +# (stupid) directory /var/log to /var/lib/pkgtools. +# +# The removed_* directories will remain under /var/log (but moved to +# /var/log/pkgtools) as they contain log files of previous operations, +# not anything that's actively used for package management. Also, the +# removed_* directories can become quite large compared with the database. +# +# First, if it's just a case of missing symlinks, make them. Don't make them +# if the directories exist in /var/log - we'll do a proper migration in that +# case. +for directory in packages scripts setup ; do + if [ ! -L var/log/$directory -a ! -d var/log/$directory ]; then + if [ -d var/lib/pkgtools/$directory ]; then + # Make the symlink: + ( cd var/log ; ln -sf ../lib/pkgtools/$directory . ) + fi + fi +done +for directory in removed_packages removed_scripts ; do + if [ ! -L var/log/$directory -a ! -d var/log/$directory ]; then + mkdir -p var/log/pkgtools/$directory + ( cd var/log ; ln -sf pkgtools/$directory . ) + fi + if [ ! -L var/lib/pkgtools/$directory -a ! -d var/lib/pkgtools/$directory ]; then + mkdir -p var/lib/pkgtools + ( cd var/lib/pkgtools ; ln -sf ../../log/pkgtools/$directory . ) + fi +done +# If at this point /var/log/packages is not a symlink, we need to do the +# migration. We should already have a lock on being the only install script +# that's currently running, but also get a lock on ldconfig to freeze any +# other package operations that are happening now until after the migration +# is complete. +if [ ! -L var/log/packages ]; then + if [ ! -d run/lock/pkgtools ]; then + mkdir -p run/lock/pkgtools + fi + ( flock 9 || exit 11 + # Don't migrate if tar is running, as there may still be package operations + # going on in another process: + while pidof tar 1> /dev/null 2> /dev/null ; do + sleep 15 + done + # Just to be a bit safer from race conditions: + sleep 5 + # First, move the removed_* directories into a pkgtools subdirectory: + mkdir -p var/log/pkgtools + for directory in removed_packages removed_scripts ; do + if [ ! -d var/log/pkgtools/$directory ]; then + mkdir -p var/log/pkgtools/$directory + # Move anything found in the old location, then remove it: + mv var/log/$directory/* var/log/pkgtools/$directory 2> /dev/null + rm -rf var/log/$directory + # Make a symlink: + ( cd var/log ; ln -sf pkgtools/$directory . ) + fi + done + for directory in packages scripts setup ; do + mkdir -p var/lib/pkgtools/$directory + mv var/log/$directory/* var/lib/pkgtools/$directory 2> /dev/null + rm -rf var/log/$directory + ( cd var/log + ln -sf ../lib/pkgtools/$directory . + ) + done + ) 9> run/lock/pkgtools/ldconfig.lock +fi diff --git a/testing/source/pkgtools/manpages/explodepkg.8 b/testing/source/pkgtools/manpages/explodepkg.8 new file mode 100644 index 00000000..ddc3d47c --- /dev/null +++ b/testing/source/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/lib/pkgtools/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/testing/source/pkgtools/manpages/installpkg.8 b/testing/source/pkgtools/manpages/installpkg.8 new file mode 100644 index 00000000..204cc841 --- /dev/null +++ b/testing/source/pkgtools/manpages/installpkg.8 @@ -0,0 +1,126 @@ +.\" -*- 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 \--terse +] +[ +.B \--terselength <length> +] +[ +.B \--ask +] +[ +.B \--priority ADD|REC|OPT|SKP +] +[ +.B \--tagfile /somedir/tagfile +] +[ +.B \--threads <number> +] +.BI packagename +[ +.B packagename2 ... +] +.SH DESCRIPTION +.B installpkg +installs single or multiple *.txz (or .tbz, .tgz, .tlz) binary packages designed +for use with the Slackware Linux distribution onto your system. +.SH OPTIONS +.TP +.B \--warn packagename +Generate a list of files that would be overwritten to the standard output, but do +not actually install the package. The list is formatted in a suitable fashion to +use as a list of files to backup. +.TP +.B \--md5sum packagename +Record the package md5sum in the metadata written in /var/lib/pkgtools/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 \--terse +Install the package displaying only a single description line to stdout. +.TP +.B \--terselength <length> +Maximum line length of --terse mode output. Default is the number of terminal columns. +.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. +.TP +.B \--threads <number> +For xz/plzip compressed packages, set the maximum number of threads to be used for +decompression. Only has an effect if a multithreaded compressor was used, and then +only on large packages. The default for plzip is the number of CPU threads available. +The default for xz is 2. +.SH EXAMPLES +.TP +.B Install a font package for X: +.P +installpkg font-bh-ttf-1.0.3-noarch-1.txz +.P +Note that if a package is already installed, upgradepkg(8) should be used instead. +.TP +.B Create a backup of the files that would be overwritten if the package is installed: +.P +.nf +tar czvf /tmp/backup.tar.gz \\ + $(installpkg --warn font-bh-ttf-1.0.3-noarch-1.txz) +.fi +.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/testing/source/pkgtools/manpages/makepkg.8 b/testing/source/pkgtools/manpages/makepkg.8 new file mode 100644 index 00000000..16a98f3f --- /dev/null +++ b/testing/source/pkgtools/manpages/makepkg.8 @@ -0,0 +1,164 @@ +.\" -*- 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 +] +[ +.B --threads <number> +] +[ +.B --compress <option> +] +[ +.B --acls +] +[ +.B --xattrs +] +.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 .txz, +but .tgz, .tbz, and .tlz are also accepted. The proper compression utility +(xz, gzip, bzip2, or lzip) 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. +.TP +.B --threads <number> +For xz/plzip compressed packages, set the maximum number of threads to be used for +compression. Only has an effect on large packages. For plzip, the default is the number +of CPU threads available. For xz, the default is 2 (due to commonly occuring memory +related failures on 32-bit with too many threads and multithreaded xz compression). +.TP +.B --compress <option> +Supply a custom option to the compressor. This will be used in place of the default, which is: -9 +.TP +.B --acls +Support storing POSIX ACLs in the package. The resulting package will not be compatible +with pkgtools version < 15.0. +.TP +.B --xattrs +Support storing extended attributes in the package. The resulting package will not be +compatible with pkgtools version < 15.0. +.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/lib/pkgtools/setup +and must have a name that starts with +.B setup. +in order to be recongnized. An example is the timezone script: +.B /var/lib/pkgtools/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/lib/pkgtools/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/lib/pkgtools/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/testing/source/pkgtools/manpages/pkgdiff.8 b/testing/source/pkgtools/manpages/pkgdiff.8 new file mode 100644 index 00000000..5d91ac21 --- /dev/null +++ b/testing/source/pkgtools/manpages/pkgdiff.8 @@ -0,0 +1,57 @@ +.\" -*- 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 PKGDIFF 8 "11 Apr 2018" "Slackware Version 15.0 +.SH NAME +pkgdiff \- compare the file contents of two packages. +.SH SYNOPSIS +.B pkgdiff +[ +.B \--help +] +[ +.B \-c +] +[ +.B \-a +] +.BI packagename +.BI packagename2 +.SH DESCRIPTION +.B pkgdiff +Displays the differences in the files contained in two packages. This works with +plain .tar, Slackware packages (.tgz, .tbz, .tlz, .txz), .rpm, and .deb. By default, +the results will be displayed in a tree-style unified diff format. +.SH OPTIONS +.TP +.B \--help +Display help for using the pkgdiff utility. +.TP +.B \-c +Colorize the tree-style output a-la DIR_COLORS. If piping to a pager such as +less, you'll need to enable displaying raw data. For example: +.P +pkgdiff -c package-1.0-i586-1.txz package-2.0-i586-1.txz | less -r +.TP +.B \-a +Instead of a tree-style output format, generate a simple unified diff of the +package file lists. +.SH EXAMPLES +.TP +.B Compare two packages and pipe the result to less: +.P +pkgdiff package-1.0-i586-1.txz package-2.0-i586-1.txz | less +.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/testing/source/pkgtools/manpages/pkgtool.8 b/testing/source/pkgtools/manpages/pkgtool.8 new file mode 100644 index 00000000..56e39217 --- /dev/null +++ b/testing/source/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/testing/source/pkgtools/manpages/removepkg.8 b/testing/source/pkgtools/manpages/removepkg.8 new file mode 100644 index 00000000..f92ed8c2 --- /dev/null +++ b/testing/source/pkgtools/manpages/removepkg.8 @@ -0,0 +1,114 @@ +.\" -*- 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 \--terse +] +[ +.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/lib/pkgtools/packages/), or by the +base package name. For example, the package foo-1.0-i586-1.txz may be removed +with any of the following commands: + +removepkg foo-1.0-i586-1.txz (also recognized: .tgz, .tbz, .tlz) + +removepkg foo-1.0-i586-1 + +removepkg foo.txz + +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/lib/pkgtools/packages to /var/log/pkgtools/removed_packages. Likewise, its installation +script will be moved from /var/lib/pkgtools/scripts to /var/log/pkgtools/removed_scripts. +.SH OPTIONS +.TP +.B \--copy packagename +Construct a copy of the package under /var/lib/pkgtools/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. +.TP +.B \--preserve packagename +If specified, the complete package subtree is reconstructed in +/var/lib/pkgtools/setup/tmp/preserved_packages/packagename. +.TP +.B \--terse +Remove the package displaying only a single description line to stdout. +.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. +.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/testing/source/pkgtools/manpages/upgradepkg.8 b/testing/source/pkgtools/manpages/upgradepkg.8 new file mode 100644 index 00000000..757d6003 --- /dev/null +++ b/testing/source/pkgtools/manpages/upgradepkg.8 @@ -0,0 +1,116 @@ +.\" -*- 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 \--terse +] +[ +.B \--terselength <length> +] +[ +.B --verbose +] +.BI newpackagename +.BI [ newpackagename2 ] +.LP +.B upgradepkg +[ +.B --dry-run +] +[ +.B --install-new +] +[ +.B --reinstall +] +[ +.B \--terse +] +[ +.B \--terselength <length> +] +[ +.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. +.P +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. +.P +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.txz (or .tbz, .tgz, .tlz) +.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 \--terse +Upgrade the package displaying only a single description line to stdout. +.TP +.B \--terselength <length> +Maximum line length of --terse mode output. Default is the number of terminal columns. +.TP +.B \--verbose +Show all the gory details of the upgrade. +.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/testing/source/pkgtools/pkgtools.SlackBuild b/testing/source/pkgtools/pkgtools.SlackBuild new file mode 100755 index 00000000..bdcb11ac --- /dev/null +++ b/testing/source/pkgtools/pkgtools.SlackBuild @@ -0,0 +1,109 @@ +#!/bin/bash +# Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2018 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: +cd $(dirname $0) ; CWD=$(pwd) +if [ "$TMP" = "" ]; then + TMP=/tmp +fi +PKG=$TMP/package-pkgtools + +PKGNAM=pkgtools +# *** UPDATE THESE WITH EACH BUILD: +VERSION=15.0 +ARCH=${ARCH:-noarch} +BUILD=${BUILD:-20} + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + +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 pkgdiff.8 \ + pkgtool.8 removepkg.8 ; do + cat $page | gzip -9c > $PKG/usr/man/man8/$page.gz + done +) + +# Install internationalized manpages from +# http://slint.fr/forSlackware/man_l10n/pkgtools/ +( cd $PKG/usr/man + tar xf $CWD/manpages-l10n.tar.xz + for page in manpages-l10n/* ; do + manpage=$(basename $page) + mkdir -p ${manpage%%.*}/man8 + mv $page ${manpage%%.*}/man8/${page#*.}.8 + done + gzip -9 */man8/*.8 + rmdir manpages-l10n +) + +# Install Slackware scripts: +( cd $CWD/scripts + # Install the core Slackware package tools: + mkdir -p $PKG/sbin + # Don't include makebootdisk... it's useless since a kernel won't fit on a + # floppy disk, and nobody uses floppies any more anyway. + for file in explodepkg installpkg makepkg pkgdiff 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/lib/pkgtools/setup/tmp + chmod 700 $PKG/var/lib/pkgtools/setup/tmp + for file in setup.* ; do + cp -a $file $PKG/var/lib/pkgtools/setup + done + chown root:root $PKG/var/lib/pkgtools/setup/setup.* + chmod 755 $PKG/var/lib/pkgtools/setup/setup.* + # Add a link for makebootstick: + ( cd $PKG/sbin ; ln -sf ../var/lib/pkgtools/setup/setup.80.make-bootdisk makebootstick ) +) + +# Create the base directories (not really necessary, but doesn't hurt): +mkdir -p $PKG/var/lib/pkgtools/{packages,scripts} +mkdir -p $PKG/var/log/pkgtools/{removed_packages,removed_scripts} + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh + +# Build the package: +cd $PKG +makepkg -l y -c n $TMP/pkgtools-$VERSION-$ARCH-$BUILD.txz + +echo +echo "HEY -- did you remember to update the version numbers in the setup scripts?" +echo + diff --git a/testing/source/pkgtools/scripts/explodepkg b/testing/source/pkgtools/scripts/explodepkg new file mode 100644 index 00000000..72c013d4 --- /dev/null +++ b/testing/source/pkgtools/scripts/explodepkg @@ -0,0 +1,109 @@ +#!/bin/sh +# Copyright 1994, 1998, 2000 Patrick Volkerding, Concord, CA, USA +# Copyright 2001, 2003 Slackware Linux, Inc., Concord, CA, USA +# Copyright 2007, 2009, 2017, 2018 Patrick Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +if [ $# = 0 ]; then + cat << EOF +Usage: explodepkg package_name [package_name2, ...] + +Explodes a Slackware compatible software package +(or any tar+{gzip,bzip2,lz,xz archive) in the current directory. +Equivalent to (for each package listed): + + ( umask 000 ; cat package_name | COMPRESSOR -dc | tar xpvf 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/lib/pkgtools/packages and /var/lib/pkgtools/scripts. + +EOF +fi + +# Set maximum number of threads to use. By default, this will be the number +# of CPU threads: +THREADS="$(nproc)" + +# 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' ) + if which lbzip2 1> /dev/null 2> /dev/null ; then + packagecompression=lbzip2 + else + packagecompression=bzip2 + fi + ;; + 'bz2' ) + if which lbzip2 1> /dev/null 2> /dev/null ; then + packagecompression=lbzip2 + else + packagecompression=bzip2 + fi + ;; + 'tlz' ) + if which plzip 1> /dev/null 2> /dev/null ; then + packagecompression="plzip --threads=${THREADS}" + elif which lzip 1> /dev/null 2> /dev/null ; then + packagecompression=lzip + else + echo "ERROR: lzip compression utility not found in \$PATH." + exit 3 + fi + ;; + 'lz' ) + if which plzip 1> /dev/null 2> /dev/null ; then + packagecompression="plzip --threads=${THREADS}" + elif which lzip 1> /dev/null 2> /dev/null ; then + packagecompression=lzip + else + echo "ERROR: lzip compression utility not found in \$PATH." + exit 3 + fi + ;; + 'lzma' ) + packagecompression=lzma + ;; + 'txz' ) + packagecompression="xz --threads=${THREADS}" + ;; + 'xz' ) + packagecompression="xz --threads=${THREADS}" + ;; + esac + ( umask 000 ; cat $PKG | $packagecompression -dc | tar --xattrs --xattrs-include='*' --keep-directory-symlink -xpvf - 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/testing/source/pkgtools/scripts/installpkg b/testing/source/pkgtools/scripts/installpkg new file mode 100644 index 00000000..0d82f89c --- /dev/null +++ b/testing/source/pkgtools/scripts/installpkg @@ -0,0 +1,713 @@ +#!/bin/sh +# Copyright 1994, 1998, 2000 Patrick Volkerding, Concord, CA, USA +# Copyright 2001, 2003 Slackware Linux, Inc., Concord, CA, USA +# Copyright 2007, 2009, 2011, 2017, 2018 Patrick Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Mon Jun 4 21:17:58 UTC 2018 +# Migrate the package database and directories from /var/log to +# /var/lib/pkgtools. /var/log was never a good place for this data, as it is +# considered by many to be a directory that could be wiped to free up some +# space. Originally the package database was in /var/adm, but the FSSTND +# (later FHS) group decided that directory should be a symlink to /var/log, +# and I went along with that since it was years ago and I was a n00b and didn't +# know any better. /var/lib/pkgtools will be a better and safer location. +# +# Thu May 24 20:23:55 UTC 2018 +# Added --terselength option to set the line length in --terse mode. +# Allow adding NOLOCK in an install script to allow it to run without locking. +# +# Sat May 19 22:42:03 UTC 2018 +# Implement locking to prevent screen output or install script collisions if +# multiple copies of installpkg are running simultaneously. +# Use ${MCOOKIE} instead of $$ (might as well, since we already generated it). +# +# Tue Apr 17 17:26:44 UTC 2018 +# Quit with the funny business in /install. Note however that /install still +# isn't a safe directory to use in a package for anything other than package +# metadata. Other files placed there are going to be left on the system in +# /installpkg-$(mcookie). That could be worked around, but we'll wait until +# someone reports there is a need. The main reason to do this is that /install +# was a collision point if more than one copy of installpkg was running at +# once. With this change, the pkgtools are (more or less) thread-safe. +# +# Tue Feb 13 01:19:46 UTC 2018 +# Use recent tar, and support restoring POSIX ACLs and extended attributes. +# +# Tue Dec 12 21:49:48 UTC 2017 +# If possible, use multiple decompression threads. +# +# Thu Dec 7 04:09:17 UTC 2017 +# Change meaning of .tlz to tar.lz (lzip) +# +# Sun Sep 6 21:58:36 BST 2009 +# Replaced usage of "cat" with STDIN redirection or file name parameters +# to speed up execution on ARM. +# Replaced pkgbase & package_name code with 'sed' script by Jim Hawkins. +# +# 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() { + # basename + strip extensions .tbz, .tgz, .tlz and .txz + echo "$1" | sed 's?.*/??;s/\.t[bglx]z$//' +} + +# 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 + +# If we have mcookie and a tar that is recent enough to support --transform, +# then we can stop needlessly erasing files in the /install directory while +# also making installpkg thread-safe. Don't check for recent tar - we'll +# already break from --attrs and --xattrs anyway if the wrong tar is used. +if which mcookie 1> /dev/null 2> /dev/null ; then + MCOOKIE=$(mcookie) + INSTDIR=installpkg-${MCOOKIE} +else + # Well, we will make due with this: + MCOOKIE=$$ + INSTDIR=installpkg-${MCOOKIE} +fi + +# Create a lockfile directory if it doesn't exist. We can use it to prevent +# screen corruption (from multiple dialogs) and install script collisions +# (from multiple scripts trying to work on the same files) in the case of +# parallel instances of installpkg. +INSTLOCKDIR=${INSTLOCKDIR:-/run/lock/pkgtools} +if [ ! -d $INSTLOCKDIR ]; then + mkdir -p $INSTLOCKDIR +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) + --terse (display a one-line short description for install) + --terselength <length> (line length in terse mode - default is + the number of columns available) + --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) + --threads <number> For xz/plzip compressed packages, set the max + number of threads to be used for decompression. Only has + an effect if a multithreaded compressor was used, and then + only on large packages. For plzip, the default is equal to + the number of CPU threads available on the machine. For xz, + the default is equal to 2. + --md5sum (record the package's md5sum in the metadata file) + +EOF +} + +# Eliminate whitespace function: +crunch() { + while read FOO ; do + echo $FOO + done +} + +# Strip version, architecture and build from the end of the name +package_name() { + pkgbase $1 | sed 's?-[^-]*-[^-]*-[^-]*$??' +} + +# Set maximum number of threads to use. By default, this will be the number +# of CPU threads: +THREADS="$(nproc)" + +# Set default line length for terse mode: +if tty -s && which tput 1> /dev/null 2> /dev/null ; then + TERSELENGTH=$(tput cols) +else + TERSELENGTH=80 +fi + +# Default install mode is standard text mode: +MODE=install +# If $TERSE is set to 0 in the environment, then use terse mode: +if [ "$TERSE" = "0" ]; then + MODE=terse +fi + +# Parse options: +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" = "-terse" -o "$1" = "--terse" ]; then + MODE=terse + shift 1 + elif [ "$1" = "-terselength" -o "$1" = "--terselength" ]; then + TERSELENGTH=$2 + shift 2 + 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" = "-threads" -o "$1" = "--threads" ]; then + THREADS="$2" + shift 2 + # xz has not yet implemented multi-threaded decompression. + # Who knows if or how well it will work... + XZ_THREADS_FORCED=yes + 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/lib/pkgtools" + +# Set the prefix for the removed packages/scripts log files: +LOG_DIR="$ROOT/var/log/pkgtools" + +# If the directories don't exist, "initialize" the package database: +for PKGDBDIR in packages scripts setup ; do + if [ ! -d $ADM_DIR/$PKGDBDIR ]; then + mkdir -p $ADM_DIR/$PKGDBDIR + chmod 755 $ADM_DIR/$PKGDBDIR + fi +done +for PKGLOGDIR in removed_packages removed_scripts ; do + if [ ! -d $LOG_DIR/$PKGLOGDIR ]; then + rm -rf $LOG_DIR/$PKGLOGDIR # make sure it's not a symlink or something stupid + mkdir -p $LOG_DIR/$PKGLOGDIR + chmod 755 $LOG_DIR/$PKGLOGDIR + fi +done +# Likewise, make sure that the symlinks in /var/log exist. We no longer +# trust anything to remain in /var/log. Let the admin wipe it if that's +# what they like. +for symlink in packages scripts setup ; do + if [ ! -L $LOG_DIR/../$symlink -a ! -d $LOG_DIR/../$symlink ]; then + ( cd $LOG_DIR/.. ; ln -sf ../lib/pkgtools/$symlink . ) + 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 + 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 + mkdir -p $TMP/scan${MCOOKIE} + # Determine extension: + packageext="$( echo $1 | rev | cut -f 1 -d . | rev)" + # Determine decompressor utility: + case $packageext in + 'tgz' ) + packagecompression=gzip + ;; + 'tbz' ) + if which lbzip2 1> /dev/null 2> /dev/null ; then + packagecompression=lbzip2 + else + packagecompression=bzip2 + fi + ;; + 'tlz' ) + if which plzip 1> /dev/null 2> /dev/null ; then + packagecompression="plzip --threads=${THREADS}" + elif which lzip 1> /dev/null 2> /dev/null ; then + packagecompression=lzip + else + echo "ERROR: lzip compression utility not found in \$PATH." + exit 3 + fi + ;; + 'txz' ) + if [ ! "$XZ_THREADS_FORCED" = "yes" ]; then + packagecompression="xz --threads=${THREADS}" + else + packagecompression="xz --threads=2" + fi + ;; + esac + ( cd $TMP/scan${MCOOKIE} ; $packagecompression -dc | tar xf - install ) < $1 2> /dev/null + if [ -r $TMP/scan${MCOOKIE}/install/doinst.sh ]; then + if grep ' rm -rf ' $TMP/scan${MCOOKIE}/install/doinst.sh 1>/dev/null 2>/dev/null ; then + grep ' rm -rf ' $TMP/scan${MCOOKIE}/install/doinst.sh > $TMP/scan${MCOOKIE}/install/delete + for f in `cat $TMP/scan${MCOOKIE}/install/delete | cut -f 3,7 -d ' ' | tr ' ' '/'`; do + f="/$f" + if [ -f "$f" -o -L "$f" ]; then + echo "$f" + fi + done + fi + if [ -d $TMP/scan${MCOOKIE} ]; then + ( cd $TMP/scan${MCOOKIE} ; rm -rf install ) 2> /dev/null + ( cd $TMP ; rmdir scan${MCOOKIE} ) 2> /dev/null + fi + fi + for f in `( $packagecompression -dc | tar tf - ) < $1 | grep -v 'drwx'`; do + f="/$f" + if [ -f "$f" -o -L "$f" ]; then + echo "$f" + fi + done + 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' ) + if which lbzip2 1> /dev/null 2> /dev/null ; then + packagecompression=lbzip2 + else + packagecompression=bzip2 + fi + ;; + 'tlz' ) + if which plzip 1> /dev/null 2> /dev/null ; then + packagecompression="plzip --threads=${THREADS}" + elif which lzip 1> /dev/null 2> /dev/null ; then + packagecompression=lzip + else + echo "ERROR: lzip compression utility not found in \$PATH." + exit 3 + fi + ;; + 'txz' ) + if [ ! "$XZ_THREADS_FORCED" = "yes" ]; then + packagecompression="xz --threads=${THREADS}" + else + packagecompression="xz --threads=2" + fi + ;; + esac + + # Test presence of external compression utility: + if ! $(echo $packagecompression | cut -f 1 -d ' ') --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="$(/bin/du -sh "$(readlink -f $package)" | cut -f 1)" + 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 + # The stray cat reduces the frequency of the lack of reported size. + # If it still fails, we hit it with a bigger hammer down below. + cat $package | $packagecompression -dc | LC_ALL=C dd 2> $TMP/tmpsize${MCOOKIE} | cat | tar tf - 2> /dev/null 1> $TMP/tmplist${MCOOKIE} + 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${MCOOKIE} $TMP/tmpsize${MCOOKIE} + continue + fi + UNCOMPRESSED="$(cat $TMP/tmpsize${MCOOKIE} | tail -n 1 | cut -f 1 -d ' ' | numfmt --to=iec)" + # Weird bug "fix". Sometimes we get no uncompressed size (this started when we + # moved away from tar-1.13, but I don't see what that could have to do with + # it). So, if we have no uncompressed size here, demand it in this loop. + # Hopefully the bug is not weird enough to make this an infinite loop. :/ + while [ "$UNCOMPRESSED" = "" ]; do + cat $package | $packagecompression -dc | LC_ALL=C dd 1> /dev/null 2> $TMP/tmpsize${MCOOKIE} + UNCOMPRESSED="$(cat $TMP/tmpsize${MCOOKIE} | tail -n 1 | cut -f 1 -d ' ' | numfmt --to=iec)" + done + rm -f $TMP/tmpsize${MCOOKIE} + + # 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${MCOOKIE} + ( cd $TMP/scan${MCOOKIE} ; $packagecompression -dc | tar xf - install ) < $package 2> /dev/null + if grep "^$packagebase:" "$TMP/scan${MCOOKIE}/install/slack-desc" 1> /dev/null 2> /dev/null ; then + DESCRIPTION="$TMP/scan${MCOOKIE}/install/slack-desc" + elif grep "^$shortname:" "$TMP/scan${MCOOKIE}/install/slack-desc" 1> /dev/null 2> /dev/null ; then + DESCRIPTION="$TMP/scan${MCOOKIE}/install/slack-desc" + fi + fi + + if [ "$DESCRIPTION" = "" ]; then + #echo "WARNING NO SLACK-DESC" + DESCRIPTION="/dev/null" + fi + + # Gather package infomation into a temporary file: + grep "^$packagebase:" $DESCRIPTION | cut -f 2- -d : | cut -b2- 1> $TMP/tmpmsg${MCOOKIE} 2> /dev/null + if [ "$shortname" != "$packagebase" ]; then + grep "^$shortname:" $DESCRIPTION | cut -f 2- -d : | cut -b2- 1>> $TMP/tmpmsg${MCOOKIE} 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=$(wc -l < $TMP/tmpmsg${MCOOKIE} ) + while [ $LENGTH -lt 12 ]; do + echo >> $TMP/tmpmsg${MCOOKIE} + LENGTH=$(expr $LENGTH + 1) + done + echo "Size: Compressed: ${COMPRESSED}, uncompressed: ${UNCOMPRESSED}." >> $TMP/tmpmsg${MCOOKIE} + # 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${MCOOKIE} +\n +\n +\n +\n +\n +\n +\n +\n +\n +\n +\n +\n +\n +EOF + paste -d "" $TMP/tmpmsg${MCOOKIE} $TMP/controlns${MCOOKIE} > $TMP/pasted${MCOOKIE} + rm -f $TMP/controlns${MCOOKIE} + mv $TMP/pasted${MCOOKIE} $TMP/tmpmsg${MCOOKIE} + # 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:" + grep "^$packagebase:" $DESCRIPTION | uniq | sed "s/^$packagebase:/#/g" + if [ "$shortname" != "$packagebase" ]; then + grep "^$shortname:" $DESCRIPTION | uniq | sed "s/^$shortname:/#/g" + fi + elif [ "$MODE" = "terse" ]; then # emit a single description line + ( flock 9 || exit 11 + printf "%-$(expr $TERSELENGTH - 7)s %-6s\n" "$(echo $shortname: $(echo $(cat $DESCRIPTION | grep "^$packagebase:" | sed "s/^$packagebase: //g" | head -n 1 | tr -d '()' | sed "s/^$packagebase //g" ) $(echo " $(printf '.%.0s' {1..256})")) | cut -b1-$(expr $TERSELENGTH - 7))" "$(printf "[%4s]" $UNCOMPRESSED)" | cut -b 1-${TERSELENGTH} + ) 9> $INSTLOCKDIR/dialog.lock + elif [ "$MODE" = "infobox" ]; then # install infobox package + ( flock 9 || exit 11 + dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0 + ) 9> $INSTLOCKDIR/dialog.lock + elif [ "$MODE" = "menu" -a "$PRIORITY" = "ADD" -a ! "$ALWAYSASK" = "yes" ]; then # ADD overrides menu mode unless -ask was used + ( flock 9 || exit 11 + dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0 + ) 9> $INSTLOCKDIR/dialog.lock + elif [ "$MODE" = "menu" -a "$USERPRIORITY" = "ADD" ]; then # install no matter what $PRIORITY + ( flock 9 || exit 11 + dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0 + ) 9> $INSTLOCKDIR/dialog.lock + else # we must need a full menu: + ( flock 9 || exit 11 + dialog --title "Package Name: $shortname $PMSG" --menu "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0 3 \ + "Yes" "Install package $shortname" \ + "No" "Do not install package $shortname" \ + "Quit" "Abort software installation completely" 2> $TMP/reply${MCOOKIE} + if [ ! $? = 0 ]; then + echo "No" > $TMP/reply${MCOOKIE} + fi + ) 9> $INSTLOCKDIR/dialog.lock + REPLY="$(cat $TMP/reply${MCOOKIE})" + rm -f $TMP/reply${MCOOKIE} $TMP/tmpmsg${MCOOKIE} + 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: + grep -v "/$" $TMP/tmplist${MCOOKIE} | while read file ; do + if [ -L "$ROOT/$file" ]; then + rm -f "$ROOT/$file" + fi + done + rm -f $TMP/tmplist${MCOOKIE} + + # 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 + grep "^$packagebase:" $DESCRIPTION >> $ADM_DIR/packages/$shortname 2> /dev/null + if [ "$shortname" != "$packagebase" ]; then + grep "^$shortname:" $DESCRIPTION >> $ADM_DIR/packages/$shortname 2> /dev/null + fi + echo "FILE LIST:" >> $ADM_DIR/packages/$shortname + if [ "$INSTDIR" = "install" ]; then + ( cd $ROOT/ ; $packagecompression -dc | tar --acls --xattrs --xattrs-include='*' --keep-directory-symlink -xpvf - | LC_ALL=C sort ) < $package >> $TMP/$shortname 2> /dev/null + else + ( cd $ROOT/ ; $packagecompression -dc | tar --transform "s,^install$,$INSTDIR," --transform "s,^install/,$INSTDIR/," --acls --xattrs --xattrs-include='*' --keep-directory-symlink -xpvf - | LC_ALL=C sort ) < $package >> $TMP/$shortname 2> /dev/null + fi + if [ "$( grep '^\./' $TMP/$shortname | 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... + # We'll assume it's just a recent tar with an unfiltered filelist with all + # files prefixed with "./". No guarantees, but this will usually work. + cat $TMP/$shortname | sed '2,$s,^\./,,' >> $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, unless ROOT is pointing somewhere else in which case + # running ldconfig on the host system won't make any difference: + if [ "$ROOT" = "" ] && [ -x /sbin/ldconfig ]; then + ( flock 9 || exit 11 + /sbin/ldconfig 2> /dev/null + ) 9> $INSTLOCKDIR/ldconfig.lock + fi + + if [ -f $ROOT/$INSTDIR/doinst.sh ]; then + if [ "$MODE" = "install" ]; then + echo "Executing install script for $(basename $package)." + fi + # Don't use locking if the script contains "NOLOCK": + if grep -q NOLOCK $ROOT/$INSTDIR/doinst.sh ; then + # If bash is available, use sed to convert the install script to use pushd/popd + # rather than spawning subshells which is slow on ARM. This will also speed up + # install script processing on any platform. + if [ -x /bin/bash ]; then + cd $ROOT/ ; sed -e's?^( cd \([^;]*\);\(.*\) )$?pushd \1 \&\> /dev/null ; \2 ; popd \&\> /dev/null?g ' $INSTDIR/doinst.sh | /bin/bash + else + cd $ROOT/ ; sh $INSTDIR/doinst.sh + fi + else # use locking + # If bash is available, use sed to convert the install script to use pushd/popd + # rather than spawning subshells which is slow on ARM. This will also speed up + # install script processing on any platform. + if [ -x /bin/bash ]; then + ( flock 9 || exit 11 + cd $ROOT/ ; sed -e's?^( cd \([^;]*\);\(.*\) )$?pushd \1 \&\> /dev/null ; \2 ; popd \&\> /dev/null?g ' $INSTDIR/doinst.sh | /bin/bash + ) 9> $INSTLOCKDIR/doinst.sh.lock + else + ( flock 9 || exit 11 + cd $ROOT/ ; sh $INSTDIR/doinst.sh + ) 9> $INSTLOCKDIR/doinst.sh.lock + fi + fi + fi + # Clean up the mess... + if [ -d $ROOT/$INSTDIR ]; then + if [ -r $ROOT/$INSTDIR/doinst.sh ]; then + cp $ROOT/$INSTDIR/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. + # Heh, not any more with a recent tar :-) + ( cd $ROOT/$INSTDIR ; rm -f doinst.sh slack-* 1> /dev/null 2>&1 ) + rmdir $ROOT/$INSTDIR 1> /dev/null 2>&1 + fi + # If we used a scan directory, get rid of it: + if [ -d "$TMP/scan${MCOOKIE}" ]; then + rm -rf "$TMP/scan${MCOOKIE}" + fi + rm -f $TMP/tmpmsg${MCOOKIE} $TMP/reply${MCOOKIE} + if [ "$MODE" = "install" ]; then + echo "Package $(basename $package) installed." + fi +done + +exit $EXITSTATUS diff --git a/testing/source/pkgtools/scripts/makebootdisk b/testing/source/pkgtools/scripts/makebootdisk new file mode 100644 index 00000000..79379618 --- /dev/null +++ b/testing/source/pkgtools/scripts/makebootdisk @@ -0,0 +1,443 @@ +#!/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/lib/pkgtools/setup/tmp +# If the $TMP directory doesn't exist, create it: +if [ ! -d $TMP ]; then + 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/testing/source/pkgtools/scripts/makepkg b/testing/source/pkgtools/scripts/makepkg new file mode 100644 index 00000000..f9241cb9 --- /dev/null +++ b/testing/source/pkgtools/scripts/makepkg @@ -0,0 +1,452 @@ +#!/bin/sh +# Copyright 1994, 1998, 2008 Patrick Volkerding, Moorhead, Minnesota USA +# Copyright 2003 Slackware Linux, Inc. Concord, CA USA +# Copyright 2009, 2015, 2017, 2018 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. +# +# Mon May 21 18:31:20 UTC 2018 +# Add --compress option, usually used to change the preset compression level +# or block size. +# +# Tue Feb 13 00:46:12 UTC 2018 +# Use recent tar, and support storing POSIX ACLs and extended attributes. +# +# Tue Dec 12 21:55:59 UTC 2017 +# If possible, use multiple compression threads. +# +# Wed Sep 23 18:36:43 UTC 2015 +# Support spaces in file/directory names. <alphageek> +# +# Sun Apr 5 21:23:26 CDT 2009 +# Support .tgz, .tbz, .tlz, and .txz packages. <volkerdi> +# +# Fri Nov 26 13:53:36 GMT 2004 +# Patched to chmod 755 the package's root directory if needed, then restore +# previous permissions after the package has been created. <sw> +# +# Wed Mar 18 15:32:33 CST 1998 +# Patched to avoid possible symlink attacks in /tmp. + +CWD=$(pwd) + +umask 022 + +make_install_script() { + TAB="$(echo -e "\t")" + COUNT=1 + while :; do + LINE="$(sed -n "$COUNT p" $1)" + if [ "$LINE" = "" ]; then + break + fi + LINKGOESIN="$(echo "$LINE" | cut -f 1 -d "$TAB")" + LINKGOESIN="$(dirname "$LINKGOESIN")" + LINKNAMEIS="$(echo "$LINE" | cut -f 1 -d "$TAB")" + LINKNAMEIS="$(basename "$LINKNAMEIS")" + LINKPOINTSTO="$(echo "$LINE" | cut -f 2 -d "$TAB")" + echo "( cd $LINKGOESIN ; rm -rf $LINKNAMEIS )" + echo "( cd $LINKGOESIN ; ln -sf $LINKPOINTSTO $LINKNAMEIS )" + COUNT=$(expr $COUNT + 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) + --threads <number> For xz/plzip compressed packages, set the max + number of threads to be used for compression. Only has an + effect on large packages. For plzip, the default is equal to + the number of CPU threads available on the machine. For xz, + the default is equal to 2 (due to commonly occuring memory + related failures when using many threads with multi-threaded + xz compression). + --compress <option> Supply a custom option to the compressor. + This will be used in place of the default, which is: -9 + --acls Support storing POSIX ACLs in the package. The resulting + package will not be compatible with pkgtools version < 15.0. + --xattrs Support storing extended attributes in the package. The + resulting package will not be compatible with pkgtools + version < 15.0. + +If these options are not set, makepkg will prompt if 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. :^) + +# Set maximum number of threads to use. By default, this will be the number +# of CPU threads: +THREADS="$(nproc)" + +# Set default compression option. +COMPRESS_OPTION="-9" + +# Parse options +unset ACLS XATTRS +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" = "-threads" -o "$1" = "--threads" ]; then + THREADS="$2" + shift 2 + # xz has memory issues with threads it seems, so we'll use two threads by + # default unless we see that something else was user-selected: + XZ_THREADS_FORCED=yes + elif [ "$1" = "-compress" -o "$1" = "--compress" ]; then + COMPRESS_OPTION="$2" + shift 2 + elif [ "$1" = "--acls" ]; then + ACLS="--acls" + shift 1 + elif [ "$1" = "--xattrs" ]; then + XATTRS="--xattrs" + 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 and compression type to use: +if [ ! "$(basename $PACKAGE_NAME .tgz)" = "$PACKAGE_NAME" ]; then + EXTENSION="tgz" + COMPEXT="gz" + COMPRESSOR="gzip ${COMPRESS_OPTION} -c" + if ! which gzip 1> /dev/null 2> /dev/null ; then + echo "ERROR: gzip compression utility not found in \$PATH." + exit 3 + fi +elif [ ! "$(basename $PACKAGE_NAME .tar.gz)" = "$PACKAGE_NAME" ]; then + EXTENSION="tar.gz" + COMPRESSOR="gzip ${COMPRESS_OPTION} -c" + if ! which gzip 1> /dev/null 2> /dev/null ; then + echo "ERROR: gzip compression utility not found in \$PATH." + exit 3 + fi +elif [ ! "$(basename $PACKAGE_NAME .tbz)" = "$PACKAGE_NAME" ]; then + EXTENSION="tbz" + if which lbzip2 1> /dev/null 2> /dev/null ; then + COMPRESSOR="lbzip2 ${COMPRESS_OPTION} -c" + else + if which bzip2 1> /dev/null 2> /dev/null ; then + COMPRESSOR="bzip2 ${COMPRESS_OPTION} -c" + else + echo "ERROR: bzip2 compression utility not found in \$PATH." + exit 3 + fi + fi +elif [ ! "$(basename $PACKAGE_NAME .tar.bz2)" = "$PACKAGE_NAME" ]; then + EXTENSION="tar.bz2" + if which lbzip2 1> /dev/null 2> /dev/null ; then + COMPRESSOR="lbzip2 ${COMPRESS_OPTION} -c" + else + if which bzip2 1> /dev/null 2> /dev/null ; then + COMPRESSOR="bzip2 ${COMPRESS_OPTION} -c" + else + echo "ERROR: bzip2 compression utility not found in \$PATH." + exit 3 + fi + fi +elif [ ! "$(basename $PACKAGE_NAME .tlz)" = "$PACKAGE_NAME" ]; then + EXTENSION="tlz" + if which plzip 1> /dev/null 2> /dev/null ; then + COMPRESSOR="plzip ${COMPRESS_OPTION} --threads=${THREADS} -c" + else + echo "WARNING: plzip compression utility not found in \$PATH." + echo "WARNING: package will not support multithreaded decompression." + if which lzip 1> /dev/null 2> /dev/null ; then + COMPRESSOR="lzip ${COMPRESS_OPTION} -c" + else + echo "ERROR: lzip compression utility not found in \$PATH." + exit 3 + fi + fi +elif [ ! "$(basename $PACKAGE_NAME .tar.lz)" = "$PACKAGE_NAME" ]; then + EXTENSION="tar.lz" + if which plzip 1> /dev/null 2> /dev/null ; then + COMPRESSOR="plzip ${COMPRESS_OPTION} --threads=${THREADS} -c" + else + echo "WARNING: plzip compression utility not found in \$PATH." + echo "WARNING: package will not support multithreaded decompression." + if which lzip 1> /dev/null 2> /dev/null ; then + COMPRESSOR="lzip ${COMPRESS_OPTION} -c" + else + echo "ERROR: lzip compression utility not found in \$PATH." + exit 3 + fi + fi +elif [ ! "$(basename $PACKAGE_NAME .tar.lzma)" = "$PACKAGE_NAME" ]; then + EXTENSION="tar.lzma" + COMPRESSOR="lzma ${COMPRESS_OPTION} -c" + if ! which lzma 1> /dev/null 2> /dev/null ; then + echo "ERROR: lzma compression utility not found in \$PATH." + exit 3 + fi +elif [ ! "$(basename $PACKAGE_NAME .txz)" = "$PACKAGE_NAME" ]; then + EXTENSION="txz" + if [ ! "$XZ_THREADS_FORCED" = "yes" ]; then + # Two threads by default with xz due to memory failures on 32-bit. Not that + # it matters much... if upstream ever gets around to implementing multi- + # threaded decompression we'll revisit this default. :-D + COMPRESSOR="xz ${COMPRESS_OPTION} --threads=2 -c" + else + COMPRESSOR="xz ${COMPRESS_OPTION} --threads=${THREADS} -c" + fi + if ! which xz 1> /dev/null 2> /dev/null ; then + echo "ERROR: xz compression utility not found in \$PATH." + exit 3 + fi +elif [ ! "$(basename $PACKAGE_NAME .tar.xz)" = "$PACKAGE_NAME" ]; then + EXTENSION="tar.xz" + if [ ! "$XZ_THREADS_FORCED" = "yes" ]; then + # Two threads by default with xz due to memory failures on 32-bit. Not that + # it matters much... if upstream ever gets around to implementing multi- + # threaded decompression we'll revisit this default. :-D + COMPRESSOR="xz ${COMPRESS_OPTION} --threads=2 -c" + else + COMPRESSOR="xz ${COMPRESS_OPTION} --threads=${THREADS} -c" + fi + if ! which xz 1> /dev/null 2> /dev/null ; then + echo "ERROR: xz compression utility not found in \$PATH." + exit 3 + fi +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 + +echo +echo "Slackware package maker, version 3.14159265." +echo +echo "Searching for symbolic links:" +# Get rid of possible pre-existing trouble: +INST=$(mktemp $TMP/makepkg.XXXXXX) +find . -type l -printf "%p\t%l\n" | sed 's,^\./,, ; s, ,\\ ,g' | 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 + +# Ensure that the 'root' of the package is chmod 755 because +# the / of your filesystem will inherit these permissions. +# If it's anything tighter than 755 then bad things happen such as users +# not being able to login, users already logged in can no longer run commands +# and so on. +OLDROOTPERMS="$(find -name . -printf "%m\n")" +if [ $OLDROOTPERMS -ne 755 ]; then + echo "WARNING: $PWD is chmod $OLDROOTPERMS" + echo " temporarily changing to chmod 755" + chmod 755 . +fi + +echo "Creating Slackware package: ${TARGET_NAME}/${TAR_NAME}.${EXTENSION}" +echo +rm -f ${TARGET_NAME}/${TAR_NAME}.${EXTENSION} + +# HISTORICAL NOTE 2/2018: +# In the interest of maximizing portability of this script, we'll use find +# and sed to create a filelist compatible with tar-1.13, and then use a +# more modern tar version to create the archive. +# +# Other (but possibly less portable) ways to achieve the same result: +# +# Use the tar --transform and --show-transformed-names options: +# tar --transform "s,^\./\(.\),\1," --show-transformed-names $ACLS $XATTRS -cvf - . | $COMPRESSOR > ${TARGET_NAME}/${TAR_NAME}.${EXTENSION} +# +# Use cpio: +# find ./ | sed '2,$s,^\./,,' | cpio --quiet -ovHustar > ${TARGET_NAME}/${TAR_NAME}.tar + +# Create the package: +find ./ | sed '2,$s,^\./,,' | tar --no-recursion $ACLS $XATTRS -T - -cvf - | $COMPRESSOR > ${TARGET_NAME}/${TAR_NAME}.${EXTENSION} +ERRCODE=$? +if [ ! $ERRCODE = 0 ]; then + echo "ERROR: $COMPRESSOR returned error code $ERRCODE -- makepkg failed." + exit 1 +fi + +# 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 + +# Restore the old permissions if they previously weren't chmod 755 +if [ $OLDROOTPERMS -ne 755 ]; then + echo + echo "Restoring permissions of $PWD to chmod $OLDROOTPERMS" + chmod $OLDROOTPERMS . +fi + +echo +echo "Slackware package ${TARGET_NAME}/${TAR_NAME}.${EXTENSION} created." +echo diff --git a/testing/source/pkgtools/scripts/pkgdiff b/testing/source/pkgtools/scripts/pkgdiff new file mode 100644 index 00000000..ca21ad8f --- /dev/null +++ b/testing/source/pkgtools/scripts/pkgdiff @@ -0,0 +1,164 @@ +#!/bin/sh +# Copyright 2002 Patrick J. Volkerding, Concord, CA, USA +# Copyright 2018 Patrick J. Volkerding, Sebeka, Minnesota, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +CWD=$(pwd) + +# Display usage for basic usage errors: +usage() { + cat << EOF +pkgdiff: missing file arguments +Try 'pkgdiff --help' for more information. +EOF +} + +# Display full --help if requested: +helpme() { + cat << EOF +Usage: pkgdiff [OPTION] FILE1 FILE2 +Show which files are new and which are removed between two tar archives. +The tar archives may be uncompressed, or compressed with gzip, bzip2, +xz, or lzip. Also works with .rpm and .deb. + + --help display this help and exit + -c use ANSI color with default tree mode + -a show simple text (ASCII) diff of package file lists + +By default, the trees are drawn with in crude ASCII with no color. For +the full-color effect, try something like this: + + pkgdiff -c package1 package2 | less -r + +EOF + # --help doesn't return + exit 22 +} + +# How the heck do I open this? +explode() { + tar xf $1 1> /dev/null 2> /dev/null + # Check for common extensions and do additional magic: + if [ ! "$(basename $1)" = "$(basename $1 .zip)" ]; then + unzip $1 1> /dev/null 2> /dev/null + fi + if [ ! "$(basename $1)" = "$(basename $1 .rpm)" ]; then + cp $1 . + rpm2tgz $(basename $1) 1> /dev/null 2> /dev/null + rm -f $(basename $1) + tar xzf $(basename $1 .rpm).tgz 1> /dev/null 2> /dev/null + rm -f $(basename $1 .rpm).tgz + fi + if [ ! "$(basename $1)" = "$(basename $1 .deb)" ]; then + cp $1 . + ar x $(basename $1) 1> /dev/null 2> /dev/null + tar xf data.tar.xz 1> /dev/null 2> /dev/null + rm -f * 2> /dev/null + fi + # Diffs for other archive formats are welcome. +} + +# Parse options. +# -c turns on colorization ala dircolors: +unset COLOR +if [ "$1" = "-c" ]; then + COLOR="-C" + shift 1 +fi +if [ "$1" = "-a" ]; then + ASCII=true + shift 1 +fi +if [ "$1" = "--help" ]; then + helpme +fi + +TMPDIR=$(mktemp -d) +cd $TMPDIR + +if [ ! -r "$1" ]; then + if [ -d "$CWD/$1" ]; then + usage + exit 99 + else + PKG1="$CWD/$1" + fi +else + PKG1="$1" +fi + +if [ ! -r "$2" ]; then + if [ -d "$CWD/$2" ]; then + usage + #echo "pkgdiff -- find the difference between two tar archives" + #echo "usage: pkgdiff [ -C ] pkg1 pkg2" + exit 99 + else + PKG2="$CWD/$2" + fi +else + PKG2="$2" +fi + +# We have to account for the possibility that the packages have the +# same name, but different contents... +if [ "$(basename $PKG1)" = "$(basename $PKG2)" ]; then + PKG1=${PKG1}.orig +fi + +# This will be mighty safe even if we ended up in /tmp. +PKG=.pkgdiff.$(mcookie) + +( mkdir -p $TMPDIR/$PKG/1 + cd $TMPDIR/$PKG/1 + if [ -r $PKG1 ]; then + explode $PKG1 + elif [ -r $(dirname $PKG1)/$(basename $PKG1 .orig) ]; then + explode $(dirname $PKG1)/$(basename $PKG1 .orig) + fi + if [ ! "$ASCII" = "true" ]; then + tree $COLOR -a --noreport > ../$(basename $PKG1) + else + find ./ | sed '2,$s,^\./,,' | tar --no-recursion -T - -cf - | tar tf - | sort > ../$(basename $PKG1) + fi +) +( mkdir -p $TMPDIR/$PKG/2 + cd $TMPDIR/$PKG/2 + explode $PKG2 + if [ ! "$ASCII" = "true" ]; then + tree $COLOR -a --noreport > ../$(basename $PKG2) + else + find ./ | sed '2,$s,^\./,,' | tar --no-recursion -T - -cf - | tar tf - | sort > ../$(basename $PKG2) + fi +) + +# Always going that extra mile... ;) +if [ -r $PKG1 ]; then + touch -r $PKG1 $TMPDIR/$PKG/$(basename $PKG1) +elif [ -r $(dirname $PKG1)/$(basename $PKG1 .orig) ]; then + touch -r $(dirname $PKG1)/$(basename $PKG1 .orig) $TMPDIR/$PKG/$(basename $PKG1) +fi +touch -r $PKG2 $TMPDIR/$PKG/$(basename $PKG2) + +rm -rf $TMPDIR/$PKG/{1,2} +( cd $TMPDIR/$PKG ; diff -d -u $(basename $PKG1) $(basename $PKG2) ) + +# cleanup: +rm -rf $PKG $TMPDIR diff --git a/testing/source/pkgtools/scripts/pkgtool b/testing/source/pkgtools/scripts/pkgtool new file mode 100644 index 00000000..076402b8 --- /dev/null +++ b/testing/source/pkgtools/scripts/pkgtool @@ -0,0 +1,723 @@ +#!/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, 2010, 2011, 2013, 2015, 2016, 2018 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. +# + +# Mon Jun 4 21:17:58 UTC 2018 +# Use /var/lib/pkgtools, not /var/log. +# +# 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/lib/pkgtools/mount +ASK="tagfiles" +if [ -L /bin/chmod -a -L /bin/chown ]; then # probably on the bootdisk using busybox + TARGET_DIR=/mnt + rootdevice="$(mount | grep ' on /mnt ' | tail -n 1 | cut -f 1 -d ' ' 2> /dev/null)" + TMP=/mnt/var/lib/pkgtools/setup/tmp + if ! mount | grep ' on /mnt ' 1> /dev/null 2> /dev/null ; then + 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:" + echo + echo "If your root partition is /dev/sda1 you would type:" + echo "mount /dev/sda1 /mnt" + echo + echo "Now you can find a list of all your partitions in /mnt/etc/fstab." + echo + echo "Then, supposing your /usr partition is /dev/sda2, you must do this:" + echo "mount /dev/sda2 /mnt/usr" + echo + echo "Please mount your Linux partitions and then run pkgtool again." + echo + exit + fi +else + TARGET_DIR=/ + rootdevice="$(mount | grep ' on / ' | tail -n 1 | cut -f 1 -d ' ')" + TMP=/var/lib/pkgtools/setup/tmp +fi +if [ ! -d $TMP ]; then + mkdir -p $TMP + chmod 700 $TMP + fi +ADM_DIR=$TARGET_DIR/var/lib/pkgtools +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/lib/pkgtools + 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 15.0)" \ +--menu "\nWelcome to the Slackware package tool.\n\ +\nWhich option would you like?\n" 16 75 6 \ +"Current" "Install packages from the current directory" \ +"Other" "Install packages from some other directory" \ +"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 \") + ( COLOR=on ; cd $TARGET_DIR ; . $scrpath $TARGET_DIR $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 \' + ) > $TMP/viewscr + cat $TMP/list_of_installed_packages >> $TMP/viewscr + 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 \\ +EOF + ) > $TMP/rmscript + cat $TMP/temporary_list >> $TMP/rmscript + 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" = "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> /dev/null + 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> /dev/null ; 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> /dev/null ; 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> /dev/null ; 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/testing/source/pkgtools/scripts/removepkg b/testing/source/pkgtools/scripts/removepkg new file mode 100644 index 00000000..b033eebf --- /dev/null +++ b/testing/source/pkgtools/scripts/removepkg @@ -0,0 +1,438 @@ +#!/bin/sh +# Slackware remove package script +# +# Copyright 1994, 1995, 1998 Patrick Volkerding, Moorhead, Minnesota USA +# Copyright 2001, Slackware Linux, Inc., Concord, CA USA +# Copyright 2009, 2015, 2016, 2018 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. +# + +# Tue Jun 5 20:04:45 UTC 2018 +# Use /var/lib/pkgtools for the package database, not /var/log. +# Logs of the removed packages and scripts will remain in /var/log, but moved +# into /var/log/pkgtools. +# +# Sun May 27 18:02:23 UTC 2018 +# Added --terse mode to print one line per removed package. +# +# Wed May 23 17:31:23 UTC 2018 +# Use file locking to prevent more than one copy of ldconfig from running at +# a time. +# +# Thu Sep 15 17:46:28 UTC 2016 <volkerdi> +# If removepkg is called with a short package name (no -$VERSION-$ARCH-$BUILD), +# remove the most recently installed matching package, not the oldest one. +# +# Thu Sep 15 08:09:01 BST 2016 <mozes> +# - Handle finding >1 match for a package. Thanks to SeB on LQ for the feedback. +# +# Wed Sep 14 20:44:00 BST 2016 <mozes> +# - Modify package_name function to cater for package file names that contain +# >=4 hyphens. +# Thanks to coralfang on LQ for the report and to Jim Hawkins for the patch. +# - Modified to handle packages that contain file names with backslashes +# Thanks to aaazen on LQ for the report and the patch. +# +# Thu Sep 24 03:31:58 UTC 2015 <alphageek> +# extract_links() sed adjusted to handle symlinks with spaces. +# +# Sun Sep 6 21:58:36 BST 2009 +# Replaced pkgbase & package_name code with 'sed' script by Jim Hawkins. +# +# 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 +# + +# Needed to find package names within the 'remove_packages' function: +shopt -s extglob + +# Return a package name that has been stripped of the dirname portion +# and any of the valid extensions (only): +pkgbase() { + # basename + strip extensions .tbz, .tgz, .tlz and .txz + echo "$1" | sed 's?.*/??;s/\.t[bglx]z$//' +} + +# This makes "sort" run much faster: +export LC_ALL=C + +# Set the prefix for the package database directories (packages, scripts). +ADM_DIR="$ROOT/var/lib/pkgtools" + +# Set the prefix for the removed packages/scripts log files: +LOG_DIR="$ROOT/var/log/pkgtools" + +# 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 + mkdir -p $TMP + chmod 700 $TMP # no need to leave it open +fi +PRES_DIR=$TMP/preserved_packages + +# Lock directory for ldconfig... share it with installpkg so that upgradepkg +# becomes properly ldconfig-locked, too. +INSTLOCKDIR=${INSTLOCKDIR:-/run/lock/pkgtools} +if [ ! -d $INSTLOCKDIR ]; then + mkdir -p $INSTLOCKDIR +fi + +# 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 2> /dev/null | wc -l) -ne 1 ]; then + cat $(find . -type f -maxdepth 1 2> /dev/null | grep -v "$2") 2> /dev/null + 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 + ! [ $TERSE ] && echo " --> $ROOT/$FILE was found in another package. Skipping." + preserve_file "$FILE" + else + if [ "$(echo $FILE | cut -b1-8)" != "install/" ]; then + ! [ $TERSE ] && 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 + ! [ $TERSE ] && echo " --> $ROOT/$LINK (symlink) was found in another package. Skipping." + else + ! [ $TERSE ] && echo "WARNING: Nonexistent $ROOT/$LINK (symlink) was found in another package. Skipping." + fi + done +} + +delete_files() { + local unset LC_ALL # Locally (within this delete_files function) allow handling of backslashes + while read -r AFILE ; do # do not expand backslashes on read + FILE=$(printf "%b" "$AFILE") # unescape octal characters + if [ ! -d "$ROOT/$FILE" ]; then + if [ -r "$ROOT/$FILE" ]; then + if [ "$ROOT/$FILE" -nt "$ADM_DIR/packages/$PKGNAME" ]; then + ! [ $TERSE ] && echo "WARNING: $ROOT/$FILE changed after package installation." + fi + if [ ! "$WARN" = "true" ]; then + ! [ $TERSE ] && echo " --> Deleting $ROOT/$FILE" + preserve_file "$FILE" && rm -f "$ROOT/$FILE" + else + ! [ $TERSE ] && echo " --> $ROOT/$FILE would be deleted" + preserve_file "$FILE" + fi + else + ! [ $TERSE ] && 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 + ! [ $TERSE ] && echo " --> Deleting symlink $ROOT/$LINK" + rm -f "$ROOT/$LINK" + else + ! [ $TERSE ] && echo " --> $ROOT/$LINK (symlink) would be deleted" + fi + else + ! [ $TERSE ] && 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 + ! [ $TERSE ] && echo " --> Deleting empty directory $ROOT/$DIR" + rmdir "$ROOT/$DIR" + else + ! [ $TERSE ] && echo "WARNING: Unique directory $ROOT/$DIR contains new files" + fi + else + ! [ $TERSE ] && 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 + ! [ $TERSE ] && echo " --> Deleting $ROOT/$FILE (fmt man page)" + rm -f $ROOT/$FILE + else + ! [ $TERSE ] && echo " --> $ROOT/$FILE (fmt man page) would be deleted" + fi + fi + done +} + +# Conversion to 'comm' utility by Mark Wisdom. +# is pretty nifty! :^) +remove_packages() { + for PKGLIST in $* + do + PKGNAME=$(pkgbase $PKGLIST) + # 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 name not found - finally try looking for full name - e.g. foo-1.0-arm-1 + pushd $ADM_DIR/packages > /dev/null + # Don't set PKGNAME if there are no matches: + if [ ! "$( ls -1 $PKGNAME-+([^-])-+([^-])-+([^-]) 2>/dev/null | wc -l )" = "0" ]; then + # If there is more than one package with the same name, set PKGNAME to the + # most recently installed version. This does not affect the behavior of + # upgradepkg, which always removes all other existing versions of the + # same package. + PKGNAME=$( ls -1t $PKGNAME-+([^-])-+([^-])-+([^-]) 2> /dev/null | head -n1 ) + fi + popd > /dev/null + fi + + if [ -r $ADM_DIR/packages/$PKGNAME ]; then + if [ ! "$WARN" = true ]; then + echo "Removing package: $(basename $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 + ! [ $TERSE ] && 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/* 2> /dev/null | 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 + # We won't assume that anything in /var/log can be trusted to remain there, + # so we'll remake the directories and symlinks first: + mkdir -p $LOG_DIR/removed_packages $LOG_DIR/removed_scripts + for symlink in removed_packages removed_scripts ; do + if [ ! -L $LOG_DIR/../$symlink ]; then + rm -rf $LOG_DIR/../$symlink + ( cd $LOG_DIR/.. ; ln -sf pkgtools/$symlink . ) + fi + done + # Now that we know we have log directories, move the files: + mv $ADM_DIR/packages/$PKGNAME $LOG_DIR/removed_packages + if [ -r $ADM_DIR/scripts/$PKGNAME ]; then + mv $ADM_DIR/scripts/$PKGNAME $LOG_DIR/removed_scripts + fi + fi + else + echo "No such package: $(basename $ADM_DIR/packages/$PKGNAME). Can't remove." + fi + # In the case where a library and symlink are removed but an earlier version + # remains on the machine, this will link it up and save potential problems: + if [ "$ROOT" = "" ] && [ -x /sbin/ldconfig ]; then + ( flock 9 || exit 11 + /sbin/ldconfig 2> /dev/null + ) 9> $INSTLOCKDIR/ldconfig.lock + fi + done +} + +if [ "$#" = "0" ]; then + echo "Usage: $(basename $0) [--copy] [--keep] [--preserve] [--terse] [--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;; + -terse | --terse) TERSE=0; shift;; + -warn | --warn) WARN=true; shift;; + -* | --*) echo "Usage: $(basename $0) [-copy] [-keep] [-preserve] [-warn] packagename ..."; exit 1;; + *) break + esac +done + +if [ "$WARN" = "true" ]; then + unset TERSE + 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/testing/source/pkgtools/scripts/setup.70.install-kernel b/testing/source/pkgtools/scripts/setup.70.install-kernel new file mode 100644 index 00000000..8edf6477 --- /dev/null +++ b/testing/source/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/testing/source/pkgtools/scripts/setup.80.make-bootdisk b/testing/source/pkgtools/scripts/setup.80.make-bootdisk new file mode 100644 index 00000000..0ed8b9a1 --- /dev/null +++ b/testing/source/pkgtools/scripts/setup.80.make-bootdisk @@ -0,0 +1,267 @@ +#!/bin/sh +#BLURB="Create a USB Linux boot stick" +if [ -r /usr/lib/setup/setup ]; then + RDIR=/dev/tty4 +else + RDIR=/dev/null +fi +TMP=/var/lib/pkgtools/setup/tmp + +if [ ! -d $TMP ]; then + mkdir -p $TMP +fi +if [ -z "$1" ]; then + T_PX=/ +else + T_PX="$1" +fi +if [ -z "$2" ]; then + ROOT_DEVICE=$(mount | head -n 1 | cut -f 1 -d ' ') +else + ROOT_DEVICE="$2" +fi + +if [ -r $T_PX/usr/share/syslinux/mbr.bin ]; then + MBR_BIN=$T_PX/usr/share/syslinux/mbr.bin +elif [ -r /usr/share/syslinux/mbr.bin ]; then + MBR_BIN=/usr/share/syslinux/mbr.bin +else + dialog --title "ERROR: USB BOOT STICK NOT CREATED" --msgbox \ + "Master Boot Record file mbr.bin not found. This script requires that the syslinux package is installed." 6 60 + exit +fi + +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 + if [ "$T_PX" = "/" ]; then + DEFAULTITEM="Create" + else + DEFAULTITEM="Skip" + fi + dialog --title "MAKE USB FLASH BOOT" --default-item "$DEFAULTITEM" --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 + # Create a 16M partition with FAT16. This should be large enough for any kernel (for now). + PARTSIZE="+16384K" + # Zero out master boot record and then initialize it with one bootable dos partition + dd if=/dev/zero of=/dev/$STICK bs=512 count=1 1> $RDIR 2> $RDIR + echo "PARTSIZE=$PARTSIZE" 1> $RDIR + fdisk /dev/$STICK << EOF 1> $RDIR 2> $RDIR +n +p +1 +2048 +$PARTSIZE +t 1 +6 +a +w +EOF + if [ -x /sbin/mkdosfs ]; then + /sbin/mkdosfs -I -n USBSLACK -F 16 /dev/${STICK}1 1> $RDIR 2> $RDIR + else + chroot $T_PX /sbin/mkdosfs -I -n USBSLACK -F 16 /dev/${STICK}1 1> $RDIR 2> $RDIR + fi + sync + # install syslinux + if which syslinux-nomtools 1> $RDIR 2> $RDIR ; then + syslinux-nomtools -i -s /dev/${STICK}1 1> $RDIR 2> $RDIR + elif which strace 1> $RDIR 2> $RDIR ; then + # There is a race condition between udev >= 214 and mtools which causes + # the regular version of syslinux to fail when installing to USB, but + # strace changes the timing just enough that it usually works: + strace syslinux -i -s /dev/${STICK}1 1> $RDIR 2> $RDIR + else + # This might work when the issues with mtools and udev are addressed, + # or if syslinux is eventually able to work around them. + syslinux -i -s /dev/${STICK}1 1> $RDIR 2> $RDIR + fi + # make the device bootable: + echo "dd if=$MBR_BIN of=/dev/$STICK" 1> $RDIR 2> $RDIR + dd if=$MBR_BIN of=/dev/$STICK 1> $RDIR 2> $RDIR + sync + # mount the device and write some configuration files + if [ ! -d $TMP/bootdisk ]; then + mkdir $TMP/bootdisk 2> $RDIR + fi + mount -t vfat /dev/${STICK}1 $TMP/bootdisk 1> $RDIR 2> $RDIR + if [ -r $T_PX/boot/vmlinuz ]; then + cp $T_PX/boot/vmlinuz $TMP/bootdisk/vmlinuz 1> $RDIR 2> $RDIR + elif [ -r $T_PX/vmlinuz ]; then + cp $T_PX/vmlinuz $TMP/bootdisk/vmlinuz 1> $RDIR 2> $RDIR + fi + cat << EOF > $TMP/bootdisk/message.txt 2> $RDIR + +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 2> $RDIR +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 2> $RDIR + 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 + if [ "$(uname -m)" == "x86_64" ]; then # also install an EFI bootloader + mkdir -p $TMP/bootdisk/EFI/BOOT 1> $RDIR 2> $RDIR + cp $T_PX/boot/elilo-x86_64.efi $TMP/bootdisk/EFI/BOOT/BOOTX64.EFI 1> $RDIR 2> $RDIR + cat << EOF > $TMP/bootdisk/EFI/BOOT/message.txt 2> $RDIR + +Welcome to the Slackware 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: + + huge.s 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. You may also add any other +kernel parameters you might need depending on your hardware, and which +drivers are included in your kernel. + +Hit ENTER to boot: + +EOF + cat << EOF > $TMP/bootdisk/EFI/BOOT/elilo.conf 2> $RDIR +chooser=simple +message=message.txt +delay=300 +timeout=300 +# +image=/vmlinuz + label=huge.s + read-only + append="root=$ROOT_DEVICE vga=normal ro" +EOF + fi # end EFI installation + sync + umount /dev/${STICK}1 + rm -r $TMP/bootdisk + # Sometimes the nomtools version of syslinux will leave the volume mounted, + # so umount again: + umount /dev/${STICK}1 2> $RDIR + if [ "$T_PX" = "/" ]; then + dialog --title "USB BOOT STICK CREATED" --msgbox \ + "The USB boot stick has been successfully created on device /dev/$STICK." 6 60 + exit + fi + dialog --title "USB BOOT STICK CREATED" --ok-label Continue --cancel-label Create --menu \ +"The USB boot stick has been successfully created on device /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 71 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/testing/source/pkgtools/scripts/setup.htmlview b/testing/source/pkgtools/scripts/setup.htmlview new file mode 100644 index 00000000..98039100 --- /dev/null +++ b/testing/source/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/testing/source/pkgtools/scripts/setup.services b/testing/source/pkgtools/scripts/setup.services new file mode 100644 index 00000000..2e83cb93 --- /dev/null +++ b/testing/source/pkgtools/scripts/setup.services @@ -0,0 +1,342 @@ +#!/bin/sh +#BLURB="Select/deselect system daemons (services)" +TMP=/var/lib/pkgtools/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.atd ]; then + if [ -x etc/rc.d/rc.atd ]; then + RC_ATD=on + else + RC_ATD=off + fi + cat << EOF >> $TMP/tmpscript + "rc.atd" "Schedules jobs for later" $RC_ATD "The at daemon schedules jobs to be run at a specified time." \\ +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.crond ]; then + if [ -x etc/rc.d/rc.crond ]; then + RC_CROND=on + else + RC_CROND=off + fi + cat << EOF >> $TMP/tmpscript + "rc.crond" "Time based job scheduler" $RC_CROND "The cron daemon schedules jobs to run at fixed times, dates, or intervals." \\ +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.dovecot ]; then + if [ -x etc/rc.d/rc.dovecot ]; then + RC_DOVECOT=on + else + RC_DOVECOT=off + fi + cat << EOF >> $TMP/tmpscript + "rc.dovecot" "Dovecot IMAP/POP3 server" $RC_DOVECOT "Dovecot provides remote mailbox access for email clients." \\ +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 interprocess communication and coordination." \\ +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.postfix ]; then + if [ -x etc/rc.d/rc.postfix ]; then + RC_POSTFIX=on + else + RC_POSTFIX=off + fi + cat << EOF >> $TMP/tmpscript + "rc.postfix" "The Postfix mail server" $RC_POSTFIX "The Postfix server allows your machine to send and receive mail." \\ +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.smartd ]; then + if [ -x etc/rc.d/rc.smartd ]; then + RC_SMARTD=on + else + RC_SMARTD=off + fi + cat << EOF >> $TMP/tmpscript + "rc.smartd" "SMART monitoring daemon" $RC_SMARTD "The SMART daemon monitors your hard drives to help predict failures." \\ +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.atd rc.bind rc.crond rc.cups rc.dovecot 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.postfix rc.rpc rc.samba rc.saslauthd rc.smartd 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/testing/source/pkgtools/scripts/upgradepkg b/testing/source/pkgtools/scripts/upgradepkg new file mode 100644 index 00000000..f53d21d9 --- /dev/null +++ b/testing/source/pkgtools/scripts/upgradepkg @@ -0,0 +1,417 @@ +#!/bin/bash +# Copyright 1999 Patrick Volkerding, Moorhead, Minnesota, USA +# Copyright 2001, 2002, 2003 Slackware Linux, Inc., Concord, California, USA +# Copyright 2009, 2015 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2015 Michal Nazarewicz <mina86@mina86.com> +# 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. +# +# Mon Jun 4 21:17:58 UTC 2018 +# Use /var/lib/pkgtools, not /var/log. +# +# Thu May 24 20:23:55 UTC 2018 +# Added --terselength option to set the line length in --terse mode. +# Use a lockfile to prevent output collisions in --terse mode. +# +# Wed May 23 03:35:28 UTC 2018 +# Added --terse, which limits screen output to one line per package. +# +# Sat 17 Jan 16:21:32 UTC 2015 mina86 +# Various optimisation mostly resolving around avoiding having to fork +# and call cut, basename and other helper commands. Slight +# refactoring of code calling removepkg. +# +# 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. +# +# Added --dry-run, Sat Apr 26 18:13:29 PDT 2003 +# +# Added --install-new and --reinstall, Fri May 31 14:11:14 PDT 2002 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 +# +# Modified to handle either old 8.3 or new package-version-arch-build.tgz +# packages, Sat Nov 17 14:25:58 PST 2001 volkerdi + +# Return a package name that has been stripped of the dirname portion +# and any of the valid extensions (only): +pkgbase() { + PKGRETURN=${1##*/} + case "$PKGRETURN" in *.t[gblx]z) + PKGRETURN=${PKGRETURN%.*} + esac + echo "$PKGRETURN" +} + +usage() { + cat << EOF + +Usage: upgradepkg [options] <newpackage> ... + upgradepkg [options] <oldpackage%newpackage> ... + +Upgrade, install, or reinstall Slackware packages (.tgz, .tbz, .tlz, .txz). + +To operate on an alternate directory, such as /mnt: + ROOT=/mnt upgradepkg package.txz + +Options: + --dry-run only display what would be done + --install-new install new packages also + --reinstall upgrade packages of the same version + --terse display a single line for each package operation + --terselength <length> maximum line length of terse output + --verbose display all the gory details of the upgrade + --help display this help + +For more details see upgradepkg(8). +EOF +} + +# Set the prefix for the package database directories (packages, scripts). +ADM_DIR="$ROOT/var/lib/pkgtools" + +# 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 + mkdir -p $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 +else + unset ROOT +fi + +# --help or no args? +if [ "$1" = "" -o "$1" = "-help" -o "$1" = "--help" -o "$1" = "-?" ]; then + usage; + exit 1; +fi + +# Create a lockfile directory if it doesn't exist. We can use it to prevent +# output line collisions in --terse mode. +INSTLOCKDIR=${INSTLOCKDIR:-/run/lock/pkgtools} +if [ ! -d $INSTLOCKDIR ]; then + mkdir -p $INSTLOCKDIR +fi + +# Set default line length for terse mode: +if tty -s && which tput 1> /dev/null 2> /dev/null ; then + TERSELENGTH=$(tput cols) +else + TERSELENGTH=80 +fi + +# Arg processing loop. These must come before any packages are listed. +while [ 0 ]; do + if [ "$1" = "-no-paranoia" -o "$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" -o "$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" -o "$1" = "--reinstall" ]; then + # Reinstall packages even if the installed one is the same version. + REINSTALL="true" + shift 1 + elif [ "$1" = "-verbose" -o "$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" -o "$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 + elif [ "$1" = "-terse" -o "$1" = "--terse" ]; then + # Output one line per installed/upgraded package by calling installpkg + # with --terse. Use TERSE=0 for true, so we can check with test. + TERSE=0 + shift 1 + elif [ "$1" = "-terselength" -o "$1" = "--terselength" ]; then + # Set line length in --terse mode: + TERSELENGTH=$2 + shift 2 + else # no more args + break; + fi +done # processing args + +# A couple not-really-documented features to adjust the behavior of --terse +# mode. These need to be used in addition to --terse, and passed in as +# environment variables. +# PLAINTERSE=0 (This outputs the standard terse line from installpkg, rather +# than prefixing it with "Upgrading:" or "Installing:") +# INFOBOX=0 (This outputs the installpkg --infobox instead of a terse line) + +# 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") + case "$STRING" in + *-*-*-*) + # At least four segments, strip version arch and build and return name: + echo "${STRING%-*-*-*}" + # cruft for later ;) + # BUILD=${STRING##*-} + # STRING=${STRING%*-} + # ARCH=${STRING##*-} + # STRING=${STRING%*-} + # VER=${STRING%*-} + ;; + *) + # Old style package name with one segment or we don't have four + # segments: return the old-style (or out of spec) package name. + echo $STRING + esac +} + +ERRCODE=0 + +# Main processing loop: +for ARG; do + OLD=${ARG%'%'*} # first segment, = $ARG if no % + NEW=${ARG#*'%'} # second segment, = $ARG if no % + + # Simple package integrity check: + if ! [ -f "$NEW" ]; then + ERRCODE=4 + echo "Cannot install $NEW: file not found" + continue; + fi + + # Figure out the names of the old and new packages: + INCOMINGDIR=$(dirname $NEW) + # These are the package names with the extension: + NNAME=${NEW##*/} + ONAME=${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 $OLD: invalid package extension" + continue; + fi + + # Check and fix the old package name: + SHORT="$(package_name $OLD)" + if [ ! -r $ADM_DIR/packages/$OLD ]; then + if ls $ADM_DIR/packages/$SHORT* 1> /dev/null 2> /dev/null ; then + for installed_package in $ADM_DIR/packages/$SHORT* ; do + if [ "$(package_name $installed_package)" = "$SHORT" ]; then # found one + OLD="${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 $ADM_DIR/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 + ! [ $TERSE ] && echo + echo "Error: there is no installed package named $OLD." + ! [ $TERSE ] && echo " (looking for $ADM_DIR/packages/$OLD)" + ! [ $TERSE ] && 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 + if [ $PLAINTERSE ]; then + /sbin/installpkg --terse --terselength $TERSELENGTH $INCOMINGDIR/$NNAME + elif [ $INFOBOX ]; then + /sbin/installpkg --infobox $INCOMINGDIR/$NNAME + elif [ $TERSE ]; then + OUTPUTLINE="$(/sbin/installpkg --terse --terselength $(expr $TERSELENGTH - 12) $INCOMINGDIR/$NNAME)" + ( flock 9 || exit 11 + echo "Installing: ${OUTPUTLINE}" + ) 9> $INSTLOCKDIR/outputline.lock + else + cat << EOF + ++============================================================================== +| Installing new package $INCOMINGDIR/$NNAME ++============================================================================== + +EOF + /sbin/installpkg $INCOMINGDIR/$NNAME + fi + fi + fi + continue; + elif [ ! -r "$INCOMINGDIR/$NNAME" ]; then + if [ "$DRY_RUN" = "true" ]; then + echo "$NEW incoming package not found (command line)." + else + ! [ $TERSE ] && echo + echo "Error: incoming package $INCOMINGDIR/$NNAME not found." + ! [ $TERSE ] && echo + fi + 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 + if ! [ $TERSE ]; then + cat << EOF + ++============================================================================== +| Skipping package $NEW (already installed) ++============================================================================== + +EOF + fi + fi + 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 $ADM_DIR/packages/$SHORT* ; do + if [ "$(package_name $installed_package)" = "$SHORT" ]; then + echo -n "$(pkgbase $installed_package)" + fi + done + echo + continue + fi + for installed_package in $ADM_DIR/packages/$SHORT* ; do + if [ "$(package_name $installed_package)" = "$SHORT" ]; then + mv $installed_package ${installed_package}-upgraded-$TIMESTAMP + fi + done + for installed_script in $ADM_DIR/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: + if ! [ $TERSE ]; then + cat << EOF + ++============================================================================== +| Upgrading $OLD package using $INCOMINGDIR/$NNAME ++============================================================================== +EOF + fi + # Next, the new package is pre-installed: + if [ "$VERBOSE" = "verbose" ]; then + if ! [ $TERSE ]; then + /sbin/installpkg $INCOMINGDIR/$NNAME + RETCODE=$? + else + /sbin/installpkg $INCOMINGDIR/$NNAME 1> /dev/null + RETCODE=$? + fi + else + if [ $PLAINTERSE ]; then + /sbin/installpkg --terse --terselength $TERSELENGTH $INCOMINGDIR/$NNAME + elif [ $INFOBOX ]; then + /sbin/installpkg --infobox $INCOMINGDIR/$NNAME + elif [ $TERSE ]; then + OUTPUTLINE="$(/sbin/installpkg --terse --terselength $(expr $TERSELENGTH - 12) $INCOMINGDIR/$NNAME)" + RETCODE=$? + ( flock 9 || exit 11 + echo "Upgrading: ${OUTPUTLINE}" + ) 9> $INSTLOCKDIR/outputline.lock + else + echo "Pre-installing package $NEW..." + /sbin/installpkg $INCOMINGDIR/$NNAME 1> /dev/null + RETCODE=$? + fi + 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 15 + # Skip this package, but still try to proceed. Good luck... + continue; + fi + # Now, the leftovers from the old package(s) can go. Pretty simple, huh? :) + ( flock 9 || exit 11 + for rempkg in "$ADM_DIR/packages/"*"-$TIMESTAMP"; do + if [ "$VERBOSE" = "verbose" ]; then + /sbin/removepkg "${rempkg##*/}" + elif ! [ $TERSE ]; then + /sbin/removepkg "${rempkg##*/}" | grep -v 'Skipping\.\|Removing files:' + else + /sbin/removepkg "${rempkg##*/}" > /dev/null + fi + done + ) 9> $INSTLOCKDIR/removepkg.lock + # 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 + if ! [ $TERSE ]; then + /sbin/installpkg $INCOMINGDIR/$NNAME + else + /sbin/installpkg $INCOMINGDIR/$NNAME 1> /dev/null + fi + fi + ! [ $TERSE ] && echo "Package $OLD upgraded with new package $INCOMINGDIR/$NNAME." + ERRCODE=0 +done +exit $ERRCODE diff --git a/testing/source/pkgtools/slack-desc b/testing/source/pkgtools/slack-desc new file mode 100644 index 00000000..d06b5863 --- /dev/null +++ b/testing/source/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: 'pkgdiff', a utility for comparing two packages, documentation (man +pkgtools: pages), and a few other system admin scripts. +pkgtools: |