summaryrefslogtreecommitdiffstats
path: root/files
diff options
context:
space:
mode:
authorRobby Workman <rworkman@slackware.com>2017-10-19 13:49:43 -0500
committerRobby Workman <rworkman@slackware.com>2017-10-22 01:59:41 -0500
commit406e0e84f5321652fa1a539d80be6ca5df1ffb1b (patch)
tree0225a21dca44efe55180ee2e83027d5eaca2ddec /files
downloadslackpkg-2.82.2.tar.xz
*: Initial commit of slackpkg (as of 2.82.2 release)2.82.2
Diffstat (limited to 'files')
-rw-r--r--files/ChangeLog1521
-rw-r--r--files/GPL340
-rw-r--r--files/README74
-rw-r--r--files/blacklist.new36
-rw-r--r--files/core-functions.sh1351
-rw-r--r--files/cutpkg.awk8
-rw-r--r--files/dialog-functions.sh75
-rw-r--r--files/filelist.awk28
-rw-r--r--files/install-new.awk45
-rw-r--r--files/mirrors-arm.sample78
-rw-r--r--files/mirrors-s390.sample43
-rw-r--r--files/mirrors-x86.sample370
-rw-r--r--files/mirrors-x86_64.sample362
-rw-r--r--files/pkglist.awk35
-rw-r--r--files/post-functions.sh221
-rw-r--r--files/slackpkg574
-rw-r--r--files/slackpkg.8339
-rw-r--r--files/slackpkg.conf.5338
-rw-r--r--files/slackpkg.conf.new153
19 files changed, 5991 insertions, 0 deletions
diff --git a/files/ChangeLog b/files/ChangeLog
new file mode 100644
index 0000000..774be50
--- /dev/null
+++ b/files/ChangeLog
@@ -0,0 +1,1521 @@
+
+Sun Oct 10 07:48:13 UTC 2017
+---------------
+ - Updated mirrors-x86*.sample to remove dead mirrors and clarify
+ intent to use mirrors.slackware.com
+ - Updated mirrors-arm.sample to sync with mozes' copy
+ - Add /usr/share/vim/ and /var/yp/ to search path for .new files
+ - Minor tweaks to default blacklist file
+ - Minor tweaks to manual pages
+ - Released as 2.82.2 (rworkman)
+
+Wed May 11 04:23:52 UTC 2016
+---------------
+ - Updated mirrors-x86*.sample for Slackware 14.2.
+ - Released as 2.82.1-1 (yet another unauthorized volkerdi release)
+
+2014 Thu Jul 10
+---------------
+ - Patched to respect the $ROOT environment variable to point to the
+ location to update (like installpkg does), and also to use the
+ $CONF environment variable to point to the slackpkg config file.
+ Thanks to Matteo Bernardini.
+ - Released as 2.82.0-13 (yet another unauthorized volkerdi release)
+
+2013 Sun Oct 20
+---------------
+ - Corrected some typos in the slackpkg man page.
+ Thanks to sycamorex.
+ - Released as 2.82.0-12 (yet another unauthorized volkerdi release)
+
+2013 Fri Oct 11
+---------------
+ - Verified and corrected the mirrors lists for x86 and x86_64.
+ - Changed version numbers from 14.0 to 14.1 in preparation for
+ the upcoming Slackware 14.1 release.
+ - Corrected a manpage bug in the file-search section.
+ - Released as 2.82.0-11 (yet another unauthorized volkerdi release)
+
+2013 Tue Sep 17
+---------------
+ - Patched core-functions.sh to fix searching for qt, phonon,
+ and other packages in cases where package names overlap.
+ Thanks to Sébastien Ballet.
+ - Released as 2.82.0-10 (yet another unauthorized volkerdi release)
+
+2013 Wed May 22
+---------------
+ - Set DOWNLOAD_ALL=on by default. This avoids issues where
+ components that are needed by slackpkg requires library
+ updates in a different package. Without downloading all
+ packages first failures are all too common.
+ - Released as 2.82.0-9 (yet another unauthorized volkerdi release)
+
+2012 Thu Aug 30
+---------------
+ - Merged a few fixes to the mirror lists for x86 and x86_64.
+ Thanks to Jordan Clarke for the help!
+ - Released as 2.82.0-8 (yet another unauthorized volkerdi release)
+
+2012 Fri Aug 24
+---------------
+ - Updated mirrors for Slackware 14.0 release.
+ Thanks to Jordan Clarke for the help!
+ - Released as 2.82.0-7 (yet another unauthorized volkerdi release)
+
+2012 Sun Jul 22
+---------------
+ - Added support for the XFCE series
+ - Released as 2.82.0-6 (Clandestine release by volkerdi ;-)
+
+2011 Tue Apr 05
+---------------
+ - Fixed regex bugs (packages with 'asc' in the name ignored by
+ clean-system). (Thanks David Somero)
+ - Released as 2.82.0-5
+
+2011 Wed Mar 30
+---------------
+ - Updated mirrors for Indonesia and Servia
+ (Thanks Willy Sudiarto and Branko Grubic)
+ - Better explanation about regex blacklisting in blacklist sample
+ file. (Thanks crocket and rworkman)
+ - Last ChangeLog date fixed, was Mar 23 and the correct is Mar 24
+ - Released as 2.82.0-4
+
+2011 Thu Mar 24
+---------------
+ - Fixed ARCH string for ARMedslack.
+ (report and fix by Niels Horn)
+ - Updated mirrors file to include slackware 13.37 mirrors
+ (thanks volkerdi)
+ - Updated blacklist sample file to include new usage examples
+ - Released as 2.82.0
+
+2011 Thu Feb 17
+---------------
+ - Fixed problem in "search" function:
+ If the package name string matches the end of a previous
+ package name it will not be in the "search" package list
+ (reported by David Lee)
+ - Removed old checkblacklist function and all references to it
+
+2010 Sun Dec 05
+---------------
+ - Some fixes in blacklist new function. The old one have problems
+ when making the install list (all blacklisted packages appears
+ as installables).
+
+2010 Fri Sep 10
+---------------
+ - Change in blacklist function. Using a fresh new one.
+ Now blacklist is applied in package lists and not package-by-package.
+ This speeds package list generation and allow the use of regexp
+ on blacklist file.
+
+2010 Thu May 13
+---------------
+ - Include 2010 on Copyright notices
+ - Added slackware 13.1 on mirrors file (x86, x86_64 and arm)
+ - Released as 2.81.1
+
+2010 Sat May 01
+---------------
+ - Use $TMPDIR/pkglist instead $WORKDIR/tmplist on many places.
+ This avoids problems when slackpkg does self-upgrade.
+ - Change CHECKSIZE default to "off"
+ - Fix CHECKSIZE to only check mountpoints. This avoids problems when
+ the system have networked or DVD/CDs mounted
+ (Thanks alienbob and vbatts)
+ - Change version number to 2.81.1
+ - Released as 2.81.1beta1. Happy Workers Day!
+
+2010 Wed Apr 28
+---------------
+ - Fix blacklist checking on 'slackpkg clean-system'. It was
+ checking if the package is blacklisted but didn't use this
+ information.
+ (Reported by Greg and Shuren)
+ - Change 2.81 release date on ChangeLog and README to 2010 *Fri*
+ Apr 23, not 2010 *Thu* Apr 23.
+ (Thanks gui_ap)
+
+2010 Fri Apr 23
+---------------
+ - Fixed some typos in 'slackpkg help'
+ - Fixed 'update gpg' to use the unified getfile function
+ - Released as 2.81
+
+2010 Tue Apr 20
+---------------
+ - Unified download code. Function getfile is the only place
+ with download instructions and getpkg uses it.
+ - Added DOWNLOADER variable. You can choose between "curl" and "wget"
+ downloaders.
+
+2010 Mon Apr 19
+---------------
+ - Now we can, before install or upgrade a package, verify
+ if the system have enough available space in its filesystems.
+ This can slowdown the upgrade/install process but can save a lot
+ of problems.
+ . Added CHECKSIZE on slackpkg.conf
+ . Added CHECKSIZE on slackpkg.conf manpage
+ . Added -checksize on usr/sbin/slackpkg
+ . Added havespace and checksize functions on core-functions.sh
+ - Released as slackpkg-2.81beta2
+
+2010 Sun Apr 18
+---------------
+ - Added DIALOG_MAXARGS variable. This is to set the max number of
+ characters that dialog can handle. If DIALOG_MAXARGS is unset we
+ use the traditional 19500 characters. Removing hints when
+ we reach DIALOG_MAXARGS *ISN'T A BUG* is a *FIX*. Without that,
+ upgrade from slackware-X to slackware-X+1 will be impossible.
+ . Added DIALOG_MAXARGS on slackpkg.conf
+ . Added DIALOG_MAXARGS on slackpkg.conf manpage
+ . Added -dialog_maxargs on usr/sbin/slackpkg
+
+2010 Tue Feb 16
+---------------
+ - Fix x86 32bits regexp to not catch x86_64 packages
+ - Applied more patches from Grissiom:
+ . uniq in listpkgname function
+ . tell the user the ignored arguments
+ . respect only .sh functions on functions.d
+ - Split mirrors file by architecture. doinst.sh copy the
+ right file to right place.
+ - Change references to <piterpk@terra.com.br> to
+ <piterpunk@slackware.com>
+
+2009 Sat Dec 12
+---------------
+ - Fix link problem with non-existent files
+ - Fix pkglist.awk to be compatible with new awk
+ (reported by rworkman)
+ - Now users can run "help" function
+ - Update man-pages with file-search, help and search
+ - Applied a lot of patches from Grissiom:
+ . Change mktemp creation test to be more "standard"
+ . Use parameter expansion instead "echo STRING | cut" in
+ some places
+ . Use MORECMD to show blacklist if needed
+ . Change all `command` to $(command)
+ . Check if lilo is installed before trying to run it
+ . Some minor formating changes
+ - Other minor formating changes
+ - Update version on many places to 2.81
+
+2009 Tue Nov 24
+---------------
+ - Move search code from /sbin/slackpkg to core-functions.sh
+ - Use spinning bar on search and file-search
+ - Move existing "search" function to "file-search" and create a
+ new "search", that looks for package's name
+ - Update usage and full_usage to reflect "search" and "file-search"
+ changes
+ - Update a lot of system checks to take care of file-search.
+
+2009 Mon Nov 23
+---------------
+ - Add listpkgname function to create spkg, lpkg and dpkg files
+ - Change upgrade-all to use listpkgname function
+ - Enhance clean-system performance using listpkgname function
+ to list packages
+ - Put comments on some functions to be more useful
+ - Change usage function to show only the slackpkg's syntax
+ Old usage is now "slackpkg help", with a short description
+ of each slackpkg command.
+
+2009 Sun Nov 22
+---------------
+ - Applied patch to link local files instead copying
+ The old way was really stupid, why copy a file that
+ already is there?
+ (Thanks Grissiom)
+ - Changed the way that slackpkg make the upgrade-all list
+ Now the list is created very faster than before
+ (Thanks Grissiom)
+ - Added spinning bar to sanity-check function
+ Good to give some feedback to user
+ - Move awk code from cutpkg function to cutpkg.awk
+ Now we have cutpkg function, to handle a single package name
+ and batchcutpkg to read many package names from stdin
+ This speed sanity-check function
+ - Deactivate spinning bar when tput command is not found
+ - Force cursor back to normal mode in cleanup function
+ (Thanks NaCl)
+
+2009 Thu Jul 30
+---------------
+ - Change version number in manpages
+ - Released as 2.80.2
+
+2009 Mon Jul 27
+---------------
+ - Bumped version number to 2.80.2
+
+2009 Sun Jul 26
+---------------
+ - Changed [[:digit:]] references to [^-] in usr/sbin/slackpkg
+ that makes some packages don't be found by slackpkg.
+ (Thanks Niels Horn and Grissiom)
+ - Removing leading spaces or tabs in mirrors file.
+ (Thanks Luke, Max, Cezar Rangel and
+ other guys on slack-users-br list)
+ - Fix slackpkg.conf comments about BATCH mode.
+ (Thanks Bruce Hill and AlienBob)
+ - Fix Indonesian mirrors.
+ (Thanks Willy Sudiarto Raharjo)
+ - Fix some Polish mirrors.
+ (Thanks Dexen deVries)
+ - Fix some UK mirrors.
+ (Thanks Andrew Fielder)
+
+2009 Tue Jul 14
+---------------
+ - Added ARMedslack mirrors
+ (Thanks MoZes)
+ - Fix in generate-template to honor USE_INCLUDES option
+ - Released as 2.80.1
+
+2009 Wed Jul 08
+---------------
+ - Updated the Slackpkg's mirrors file.
+ (Thanks DagMoller)
+
+2009 Thu Jun 18
+---------------
+ - Merged some patches from Daniel Levai to enhance the config
+ merge options.
+ - Released as 2.80
+
+2009 Thu Jun 11
+---------------
+ - Fixed a circular check: new-config needs update and update
+ needs new-config.
+
+2009 Sun Jun 07
+---------------
+ - Change in doinst.sh to remove old pkglist at slackpkg's
+ install. (Thanks Klein)
+ - Change in slackpkg to use most of time ${TMPDIR}/pkglist instead
+ ${WORKDIR}/pkglist.
+ - Released as 2.80beta3
+
+2009 Wed Jun 03
+---------------
+ - Change "tput cub1" to "tput sc" and "tput rc". This give back to
+ us the option of multi-character "spinning bars".
+ - Create function showmenu to handle aligned options in post-functions.sh
+ - Released as 2.80beta2
+
+2009 Mon Jun 01
+---------------
+ - Use cub1 instead "cub N" in spinning bar. cub1 is
+ supported by "linux" terminal.
+ (Thanks KynDer)
+ - Honors $PAGER variable if set.
+ (Thanks Daniel Levai)
+ - Added interactive merge option to post-functions.sh this makes
+ very easier to manage .new files.
+ (Thanks Daniel Levai)
+ - Changes on post-functions.sh to show aligned options in "(P)rompt"
+ and "(M)erge" functions.
+
+2009 Fri May 29
+---------------
+ - Eliminate ARCH test when new-config is called
+ - Use $PRIORITY in search command
+ (Thanks Supergrilo)
+
+2009 Thu May 28
+---------------
+ - Released as 2.80beta1
+
+2009 Thu May 21
+---------------
+ - Fix usage message formatting
+ - new-config can run with outdated slackpkg.conf. With that
+ you can use new-config to update the slackpkg.conf -;)
+
+2009 Tue May 19
+---------------
+ - Released Slackware64! Congratulations to everyone in
+ Slackware Team!
+ - Fix a problem with rpm2tgz package (again?!?!?)
+ Thanks Niels Horn
+ - Added Slackware key configuration to x86_64 architecture
+ - Added remove-template, install-template and generate-template
+ to usage function
+
+2009 Mon May 04
+---------------
+ - Fixed .new detection. (Thanks Stuart Winter)
+ - Renamed the "CHECKPKG" variable to "CHECKMD5" (and changed the
+ relevant command line options; this is more appropriate for what
+ the function does (it checks md5 sums of the packages), and it's
+ easier to tell the difference between it and CHECKGPG at a glance.
+ (Thanks Robby Workman)
+ - Added check to see if slackpkg.conf version matches slackpkg
+ version.
+ - More changes in install-new's ChangeLog.txt parsing
+
+2009 Sun May 03
+---------------
+ - Added generate-template, remove-template, and install-template
+ commands. The first one creates a template with all official
+ slackware packages installed in the machine. The template is saved
+ in /etc/slackpkg/templates. You can copy this template to other
+ machines and install it with install-template.
+ - Added a spinning bar to give visual feedback of slackpkg "thinking".
+ - SPINNING is added to slackpkg.conf. It can enable (on) and
+ disable (off) the spinning bar.
+ - Added USE_INCLUDES to manage whether template includes should be
+ processed by slackpkg.
+ - ARCH now needs to be in the same format of "uname -m".
+ slackpkg can change it automagically. If you need to override what
+ slackpkg detects, set the variable in slackpkg.conf.
+ - MAIN is now handled internally by slackpkg. You can no longer change
+ this variable using slackpkg.conf.
+ - PKGMAIN is set by slackpkg to the appropriate value for your
+ ARCH port.
+ - SLACKKEY now can be set in slackpkg.conf. Usually slackpkg will
+ handle this automagically.
+ - FIRST, SECOND, THIRD, FOURTH, and FIFTH are replaced by a single
+ array: PRIORITY. The contents of those five variables now are
+ inside PRIORITY array.
+ - Added support to Slackintosh with the inclusion of "mac" series.
+ - Some changes in install-new's ChangeLog.txt parsing
+ - slackpkg.conf bumped to version 2.8
+ - updated slackpkg and slackpkg.conf manpages
+
+2009 Sat May 02
+---------------
+ - Released as slackpkg 2.71.1
+
+2009 Sat Apr 25
+---------------
+ - Fixed parsing of .t[blxg]z extension in packages
+ with tgz, tlz, tbz or txz inside file name.
+ (Thanks Erik Jan Tromp)
+
+2009 Thu Apr 23
+---------------
+ - Released 2.71!
+
+2009 Sat Apr 18
+---------------
+ - Removing source files in md5 package search
+ (Thanks Alan Hicks)
+ - Fixed problem in search function and packages with
+ letters, _ or . in RELEASE field.
+ (Thanks mrgobling)
+ - Released as 2.71beta5 (i think last one)
+
+2009 Wed Apr 15
+---------------
+ - Fix problem in checking md5 of some packages
+ - Fix pkglist.awk script. The changes to support
+ tbz, tlz and txz brokes the local package list.
+ - 2.71beta4!! Man, we don't stop!
+
+2009 Fri Apr 10
+---------------
+ - Now use CHECKSUMS.md5 as primary source of package
+ names.
+ - Check if FILELIST.TXT is newer than last update.
+ That will prevents you to accidentaly downgrade
+ your machine using an outdated mirror.
+ - Added a lot of new security checks
+ - check CHECKSUMS.md5 against CHECKSUMS.md5.asc
+ - check FILELIST.TXT against CHECKSUMS.md5
+ - check all downloaded .asc against CHECKSUMS.md5
+ (CHECKSUMS.md5.asc is excluded of this check)
+
+2009 Tue Apr 07
+---------------
+ - Added support to other package extensions.
+ Now slackpkg can handle tgz, tbz, tlz and txz.
+ Of course, this depends on pkgtools with the
+ same capabilities.
+
+2009 Mon Mar 23
+---------------
+ - Put findutils to be upgraded before glibc-solibs.
+ I think this is wrong. But for some strange reason
+ findutils brokes if glibc is upgraded first.
+ - Packaged and relased as 2.71beta3 (hope last)
+
+2009 Wed Mar 18
+---------------
+ - Non root users can use "check-updates" command in slackpkg
+ - Show to user if using FILELIST.TXT or CHECKSUMS.md5 as package
+ lista source.
+ - Added ONLY_NEW_DOTNEW variable to slackpkg configuration file
+ (and -only_new_dotnew to command line). With that, only the
+ latest .new files will be checked by post-install function.
+ - Added ONLY_NEW_DOTNEW and PKGMAIN description on slackpkg.conf
+ man-page.
+ - Added "check-updates" on slackpkg man-page.
+ - Random fixes in both man-pages.
+ - Fix "check-updates" to be used without Slackware Project GPG
+ Key imported. (thanks guax)
+
+2009 Sat Mar 14
+---------------
+ - Change update and getpkg functions to create a slackware
+ tree inside /var/cache/packages.
+
+2009 Fri Mar 06
+---------------
+ - If FILELIST.TXT isn't found, use CHECKSUMS.md5 to the
+ same thing
+ - Fix some problems in parsing MANIFEST.bz2 files
+ - Release as first 2.71beta1
+
+2008 Mon Dec 22
+---------------
+ - Include check-updates option
+ - Fix problem with MORE env variable. Now slackpkg uses
+ MORECMD internally
+
+2008 Thu Dec 04
+---------------
+ - Change version in man-pages (ok, put the version in man-pages
+ probably was the most stupid idea that i had).
+ - Released 2.70.5
+
+2008 Mon Dec 01
+---------------
+ - Update mirrors file for Slackware 12.2 (Thanks rworkman!)
+ - Change version to 2.70.5 (Thanks rworkman!)
+
+2008 Tue Nov 25
+---------------
+ - Fix install-new.awk file to catch the return of
+ bluez-libs and bluez-utils
+
+2008 Fri Nov 21
+---------------
+ - We are in Slackware main-tree!!! Big Thanks Patrick!
+ Big thanks to all our users!
+
+2008 Fri May 02
+---------------
+ - Fix regexp in slackpkg.conf to x86 arch. It was missing
+ kernel-headers package
+ - Released 2.70.4
+
+2008 Wed Apr 30
+---------------
+ - Fix regexps to catch "fw" packages
+ - Released 2.70.3
+
+2008 Tue Apr 08
+---------------
+ - Added xbacklight, ntfs-3g, wqy-zenhei-font-ttf,
+ xf86-video-geode and ghostscript packages to install-new
+ list.
+ - Released 2.70.2
+
+2008 Sat Mar 15
+---------------
+ - Released 2.70.1
+
+2008 Fri Mar 14
+---------------
+ - Compressed man-pages
+ - Fix problem with somo proxys adding ^M at FILELIST.TXT
+
+2008 Tue Jan 29
+---------------
+ - Released slackpkg 2.70
+ - Happy Birthday Marina!
+
+2008 Mon Jan 28
+---------------
+ - Fix problem with duplicated packages in package list
+ (reported by gar0t0)
+ - Fixed pattern matching problems with g++ and other packages
+ with special characters. (reported by gar0t0)
+
+2008 Tue Jan 22
+---------------
+ - Better error handling in update from wrong mirrors
+ (problem reported by redhate)
+
+2008 Mon Jan 21
+---------------
+ - Fixed install-new ChangeLog parsing problem.
+ Some packages are missing from install-new list.
+
+2008 Sat Jan 19
+---------------
+ - Not released. Bugs everywhere
+ - slackpkg info doesn't work (info was using deprecated
+ PATTERN variable) (reported by redhate)
+ - slackpkg update corrupts file lists and package
+ information. Now all the files are first in TMPDIR
+ before goes to WORKDIR. (reported by redhate)
+ - slackpkg download isn't in new command line parser.
+ (reported by redhate)
+ - Fix all commands to doesn't work without a configured
+ mirror
+ - Fixed some format errors in "usage"
+
+2008 Fri Jan 18
+---------------
+ - Fixed an error when checking GPG key. This is caused
+ by the "backticks" enhancement, reported by many and
+ fixed by rworkman, many thanks!
+ - No more bug reports in a week, time to release
+
+2008 Wed Jan 10
+---------------
+ - Updated "mirrors" file
+ - Fixed stall on "search" (reported by The-spiki)
+ - Fixed misbehavior of "update gpg" (The-spiki, again. Thanks!)
+ - Added local:// as the same of file:// and cdrom://
+ in mirrors definitions. (thanks rworkman!)
+ - Removed backticks `commmand` and using now $(command)
+ (thanks rworkman!)
+ - Fixed many en_BR bugs in docs and configuration files
+ (thanks again rworkman!)
+
+2008 Wed Jan 09
+---------------
+ - A new command line parser, much better than the older one.
+ Now you can override slackpkg.conf configurations from
+ command line:
+
+ slackpkg -checkpkg=off upgrade-all
+
+ Will disable the checkpkg feature. Many slackpkg.conf
+ can be overrided using that. You can also specify a
+ different mirror, using -mirror=URL/
+ - Additional check to see if "which" is there
+ - Added "new-config" option, it will search for .new files
+ and ask to user what to do with them. (suggested by X-Gizmo)
+
+2008 Wed Jan 07
+---------------
+ - Added BATCH and DEFAULT_ANSWER options in slackpkg.conf,
+ you can use those two to make automated upgrades without
+ human intervention. (suggested by Clayton and many others).
+
+2008 Wed Jan 04
+---------------
+ - Fixes in install-new.awk to catch more new packages
+
+2007 Sat Jun 09
+---------------
+ - Removed "httpd" from the hardcoded list. It isn't needed.
+ - Released the 2.61
+
+2007 Tue Jun 05
+---------------
+ - Fixes in almost all slackpkg messages and in README file
+ (Thanks Robby Workman!)
+ - Included (I) to ignore duplicated files... well, this can
+ burn your computer... but who am I to don't let you do that?
+ (Thanks Robby Workman, again)
+ - Included httpd in hardcoded install-new files.
+ - Bumped the version number to 2.61
+
+2007 Sun May 27
+---------------
+ - Back to the xargs combo in dialog-functions. --file doesn't
+ works in slackware 10.1.
+ - Fix some bugs in file list generation. Some declarations
+ like:
+ local VAR=`something`
+ doens't works well in older bash (in 10.1). This bug
+ generates a lot of "dialog" bugs. I hope they are fixed
+ now.
+ - Better error handling in dialog-functions. Now we can
+ detect when dialog fails and print one error message.
+
+2007 Tue May 15
+---------------
+ - Added one / before ${NAMEPKG} in check md5sum. It prevents
+ a match with vim and vim-gvim (and possible other packages)
+ and subsequent m5sum errors.
+ (Reported by Diniz Bortolotto)
+ - Swap some "ls" uses by -e to check if one file exists
+ - Changed the way of error treatment. Now we have:
+ . One log of what package gives error
+ . What error happens in each package
+ . Not install one package if the GPG signature
+ is OK but md5sum isn't (maybe a corrupted
+ package?)
+ . Shows all logged errors when slackpkg
+ ends.
+
+2007 Tue May 08
+---------------
+ - Correct the release date of 2.52
+ - Change version number to 2.60 instead 2.60beta
+ - Added one tip in slackpkg's man page telling about
+ slackpkg upgrade slackware
+ - Released slackpkg 2.60!!
+
+2007 Wed May 02
+---------------
+ - Added fontconfig in the hardcoded install-new packages
+ - Make install-new to search only in the main slackware
+ series. No more /extra and /pasture packages
+ - Changes in dialog functions. To prevent some strange
+ errors we use grep -m1 to use only the first match
+ and --file in dialog to prevent bizarre xargs
+ errors (reported by many)
+ - Fixes in sanity-check function to discover
+ duplicated packages. (Thanks Sasha Alexandr)
+
+2007 Sat Mar 17
+---------------
+ - Change VERSION to 2.52 instead 2.52beta
+ - Added a test do detect old slackpkg.conf versions
+ - Added hardcoded dialog and aaa_terminfo in install-new
+ - Released slackpkg 2.52!!
+
+2007 Mon Mar 12
+---------------
+ - Changing NOGPG to CHECKGPG. Is more coherent with the other
+ options. Thanks Robby to point that.
+ - Many update and grammar fixes in documentation.
+ (Thanks again Robby Workman!)
+
+2007 Mon Jan 05
+---------------
+ - Fix many errors in "install-new". It didn't found any
+ package with [A-Z] or [0-9] in his names.
+ - Still in "install-new", now we can detect more new packages,
+ the awk script is a lot better now.
+ - Correct the .tgz parsing in pkglist.awk, using \.tgz instead.
+ - Newer (and i hope, good) man-pages.
+
+2006 Wed Nov 08
+---------------
+ - Fixed the "upgrade" package parsing. It was going wrong
+ with nn and glib packages.
+ (Reported by Ralph Alvy)
+ - Fixed "reinstall" it was ignoring the blacklist and given
+ wrong packages to reinstall.
+ - Now blacklist can handle directories beginning with a / and not
+ with ./ (very better, and this is the needed behavior).
+ - Accept the list of packages from a file
+ (e.g.: slackpkg upgrade /etc/slackpkg/files)
+ We accept relative (./something, ../something) and absolute
+ paths (/something).
+ - Release 2.51beta
+
+2006 Sun Oct 29
+---------------
+ - Fixes to install/upgrade (it was broked when i change the
+ tmplist). Now it's OK
+ - Fixes in remove and reinstall, they are showing duplicated
+ entries in the list. Now it's OK
+ - Fix in download... it was total crazy! Now it's OK
+ - Added install-new.awk and improve the ChangeLog.txt parser
+ now we don't have any package hardcoded.
+ - Fix in upgrade-all to remove the unused variable NAME now we can use
+ the data in pkglist.
+ - Minor fix in clean-system.
+ - Change the variable's scope to "local" in many functions
+
+2006 Sat Oct 28
+---------------
+ - Change the tmplist format to be the same as pkglist
+ - New functions to make the package list with that we now can:
+ - Handle multiple files in the command line.
+ (e.g.: slackpkg upgrade kernel x11 lsof)
+ - Use the package series as the pattern, without the
+ trailing / hack.
+ (e.g.: slackpkg remove a)
+ - "download" don't use the blacklist. The user now can
+ download one blacklisted package.
+ - Release slackpkg 2.5beta
+
+2006 Fri Oct 27
+---------------
+ - A lot of job rebuilding (again) the package parser. This
+ is the logic that search for apropriate packages and see if
+ that packages are or not in blacklist. This is the harder
+ piece of slackpkg development. For now we made:
+ . a new pkglist.awk that creates a really new and
+ more featureful pkglist. The new slackpkg can't work
+ anymore with the old pkglist.
+ . One blacklist function that can match:
+ . directories
+ . package-names
+ . package-names with version
+ . package-names with version and arch
+ . package-names with version, arch and release.
+ . This fix a problem with some packages being override
+ by others with "similar" names.
+ (e.g.: k3b being override by k3b-i18n)
+
+2006 Thu Oct 26
+---------------
+ - Create the WORKDIR variable and put all package and file lists
+ there. Now ppl that wants to mount / read-only can do that.
+ (Thanks to Trevor Caira)
+ - Added a little bit of sanity in slackpkg.conf. Now all options
+ uses "on" to be activated and "off" to be deactivated. No more
+ "1", "0", "On", "ON" and all the chaos that we had before.
+ (Thanks to Robby Workman)
+ - Added one FIFTH directory. Now people can use /testing as a
+ repository, too (of course this will break a lot of things)
+ - Added one MAIN variable. This is used instead slackware to
+ identify the main distro directory.
+ - Move /etc/slackpkg/filelist.awk to /usr/libexec/slackpkg. This
+ is the correct place to a executable.
+
+2006 Mon Aug 28
+---------------
+ - Fixed a problem with upgrade-all when try to upgrade directly
+ from 10.2 to 11rc3. xargs can only handle 20k lines.
+ - Changed version to 2.09
+ - Released 2.09
+
+2006 Sat Aug 26
+---------------
+ - Fixed a typo in ChangeLog.txt message
+ (Thanks Cameron Willians)
+ - Fixed two problems in install-new:
+ bug0: install-new duplicates packages
+ bug1: install-new doesn't catch lm_sensors package we wasn't
+ ready to handle packages with a _.
+
+2006 Wed Aug 23
+---------------
+ - Fixes in blacklist.new, nothing more.
+ - Released a repackaged 2.08-3
+
+2006 Fri Aug 18
+---------------
+ - Fixed typos in manpages
+ - Changed version to slackpkg 2.08
+ - Released 2.08
+
+2006 Thu Aug 17
+---------------
+ - Revert the "typo fix" and now "Formating" is "Formatting" again.
+ - A little fix in install-new to better handler the newer packages
+ - Big fixes in new priority check
+
+2006 Mon Aug 14
+---------------
+ - Released 2.07
+
+2006 Sun Aug 13
+---------------
+ - Added another test to solve problems with "install-new"
+ and no ARCH match.
+ (Thanks to Ralph Alvy)
+ - Removed some debug messages
+
+2006 Fri Aug 11
+---------------
+ - Solves the problem with -upgraded-$TIMESTAMP
+ packages in /var/log/packages.
+ (Thanks to Ralph Alvy and Ing Nicolo Chiellini)
+ - Added l/mm in install-new
+
+2006 Wed Aug 09
+---------------
+ - Change in search function, now it uses the priority to
+ sort packages.
+ - Some fix in changes from yesterday and move the blacklist
+ and check to a separate function.
+ - Non-root users now can see the slackpkg help
+ (Thanks to Thomas)
+ - Changed slackpkg's doinst.sh to use the config function from
+ doinst.sh from other packages
+ (Thanks Ernani (idea) and Patrick (the function itself))
+ - Put the ChangeLog in reverse order. Is very easier to see the
+ news now.
+ - Changed the version number to 2.07
+
+2006 Tue Aug 08
+---------------
+ - Changed the function that give priority and check the
+ blacklist in install, upgrade, reinstall, download and
+ upgrade-all
+ - Blacklist now supports blacklist entire directories.
+
+2006 Wed Aug 02
+---------------
+ - Fixed a typo in "Formatting". Now is "Formating" -;)
+ (Thanx Devin J. Pohly)
+
+2006 Fri Jul 28
+---------------
+ - Added xfsdump (hardcoded) in install-new
+ - Change the list generation in install-new to handle Renamed
+ and Split files.
+ - Change copyright notices to include 2006
+ - Released slackpkg 2.06
+
+2006 Thu Jun 08
+---------------
+ - Added acl, attr and dmapi (hardcoded) in install-new
+ - Changed the list generation in sanity_check. We had problems
+ with non-standard package names.
+ (Thanx Rolando Roman)
+ - Released slackpkg 2.05
+
+2006 Tue Jun 06
+---------------
+ - A better message in sanity_check
+ - Fixes in the grepping of packages in sanity_check function
+ (Thanx Rolando Roman)
+ - Changed version to 2.05
+
+2006 Thu Jun 01
+---------------
+ - More modularized functions. Now upgrade and upgrade-all, remove and
+ clean-system, install and install-new shares the same code
+ - makelist now work for all commands
+ - Some sanity_checks, to saw if the machine have some doubled packages
+
+2006 Thu May 25
+---------------
+ - Create a manpage for slackpkg.conf (probably full of typos)
+ - Changed versions to 2.04
+
+2006 Wed May 24
+---------------
+ - Fix some problems in install-new. If the package are ugraded before
+ added in slackware, the install-new only finds the old package.
+
+2006 Sat May 20
+---------------
+ - Put -- in many "grep" to prevent using grep options as a
+ package pattern.
+ - Added DOWNLOAD_ALL in slackpkg.conf, with that you can download
+ all packages and after that install/upgrade all.
+
+2006 Thu May 18
+---------------
+ - Fix a mistype in install-new
+ - Put dialog functions disabled by default. If you want, you can
+ try it using: chmod +x /usr/libexec/slackpkg/functions.d/dialog*
+ - Fix permissions to root.root
+ - Released version 2.03
+
+2006 Mon May 16
+---------------
+ - Fix errors in install-new list.
+ (Reported by rick276 and gar0t0, thanx!)
+ - Put one version warning in dialog functions
+ (Thanx coqui)
+ - Included install-new on the man-page and in README
+
+2006 Fri May 12
+---------------
+ - Added install-new, it searches for packages added in slackware
+ distribution and install them.
+
+2006 Thu May 11
+---------------
+ - Upgrade the mirrors list to include slackware 11.0. Well,
+ it is in pre-order, probably we need to upgrade soon
+ - More two patches from Marek
+ - One to show the diff between "something" and "something.new".
+ This make the life more easier
+ - Another to include dialog lists when you need to choose packages.
+ If you want to disable this feature, you can remove the
+ executable permission from:
+ /usr/libexec/slackpkg/functions.d/dialog-functions.sh
+ - Set the PATH in the beginning of slackpkg script to prevent
+ problems with . in the PATH
+ - Fix in filelist.awk, the ARCH upgrade brokes "search" function
+ (Thanks gar0t0)
+ - Move syntax checking from slackpkg to core-functions.sh
+ - To minimize the downloads, now slackpkg first download the
+ ChangeLog and, only if something changes, it download the rest
+ of files.
+
+2006 Wed May 10
+---------------
+ - A new variable in slackpkg.conf (ARCH), with that we can use
+ slackpkg with the unofficial slackware ports, like
+ slackintosh and slamd64. This is VERY experimental.
+ (Inspired by a Carlos C patch, thanx!)
+ - Fix a typo in slackpkg (Thanx Chess Griffin)
+ - Include "readline" in upgrade-all first upgrades
+
+2005 Thu Oct 06
+---------------
+ - Applied patch from Marek Wodzinski
+ - Updating file list, md5 sums etc (in 'slackpkg update' part) are
+ moved from main scipt to core-functions.sh into function
+ updatefilelists().
+ (Thanx Marek!)
+ - showlist() now return list of packages in $SHOWLIST variable.
+ This is preparation for dialog function to really choose
+ for which packages we want to say 'yes'.
+ (Thanx Marek!)
+ - Don't copy/download .asc files if $NOGPG=1
+ (Thanx Marek!)
+ - slackpkg number bumped to 1.99beta -:)
+
+2005 Sun Sep 12
+---------------
+ - Correct one mirror typo (Thanx Daniel de Kok)
+ - Repackaged (1.5.2-2)
+
+2005 Sun Sep 11
+---------------
+ - Correct removing temporary dirs.
+ - Better error handling
+ - Fix post-functions to not show the question when the only .new files
+ are rc.inet1.conf.new, shadow.new, group.new, passwd.new and
+ gshadow.new.
+ - Change version number to 1.5.2
+ - Released slackpkg 1.5.2
+
+2005 Wed Aug 17
+---------------
+ - Fix some blacklist problems (problems AGAIN with the + signal)
+ - Updated mirrors file
+ (Thanks fizban)
+ - Change version number to 1.5.1
+ - Released slackpkg 1.5.1
+
+2005 Tue Aug 02
+---------------
+ - Fix copyright notices (to include 2004 and 2005)
+ - Fix mirrors file
+ (Thanks fizban and Ivan Kalvachev)
+
+2005 Fri Jul 29
+---------------
+ - Fix some errors creating temporary dirs on slackware 10.0 and
+ earlier.
+ (Thanks Sasha Shipka)
+
+2005 Fri Jul 22
+---------------
+ - Correct a little problem in clean-system. When clean-system
+ don't found any package to clen, it already shows the "question".
+ Now it exits the program.
+ (Thanks mrgoblin)
+ - New mirrors list. Now including the (not released yet)
+ slackware 10.2. Now we are ready to the next slackware release -:)
+ (Thanks fizban)
+ - Released slackpkg 1.5.0!
+
+2005 Thu Jul 21
+---------------
+ - Correct many typos and spelling errors
+ (Thanks fizban, amrit and mrgoblin for this help!)
+ - Don't run post-install if the action is clean-system
+ - Now, if something goes wrong when slackpkg run, in the end of
+ operation we will show a BIG WARNING. And no more reports about
+ that -;)
+ (Thanks amrit to help me with the message)
+ - Another fix with the "+" signal, now in remove option.
+ - Fix the default action in:
+ "Do you wish to xxxxxx selected packages (Y/n)?"
+ The default should be "Y", but is "n". Now it's corrected and
+ the default is "Y".
+ (Thanks gar0t0)
+
+2005 Wed Jul 20
+---------------
+ - Correct tabulation errors in usage
+ (Thanks Steven E. Woorlard)
+ - Some problems with the "+" signal in upgrade-all. Solved Now.
+ (Thanks Sulamita Garcia)
+ - Wrong version number in slackpkg's now is 1.5.0 (unreleased)
+ . Put correct version in /usr/sbin/slackpkg
+ . Put correct version in slackpkg's man page
+ - Put new options and correct some small things in man page
+ - Same thing, but now in README
+
+2005 Tue Jul 19
+---------------
+ - Changed number version to 1.4.99 is a beta release to slackpkg 1.5
+ - Included two new options:
+ . clean-system (suggested by Steven E. Woolard)
+ Removes from the machine all packages removed
+ from slackware. It removes packages external of
+ distro, too. Keep your house clean, man!
+ . upgrade-all (suggested by Jaroslav Imrich)
+ Look all installed packages and keep it synced
+ with the mirror. The "true" way to get all distro
+ upgraded.
+ - Changes in "post-install" features. Now they are more closer to
+ the script in slackware's UPGRADE.TXT
+
+2005 Wed Jun 22
+---------------
+ - Changed small problem with some "trash" temporary files.
+ - Released slackpkg 1.4.1
+
+2005 Tue Jun 21
+---------------
+ - Change the "remove" behavior, now it's remove not only one package,
+ but all packs with the same "beginning" (slackpkg remove kde,
+ removes all kde* packs).
+ (Thanks web-knows)
+ - Using now secure temporary files, created by mktemp.
+ (Thanks Larhzu)
+ - Changed version to 1.4.1 (security and bug fixes)
+
+2005 Thu Jan 27
+---------------
+ - OK, i released 1.4 yesterday, but mrgoblin send to me some patches
+ a few minutes after send 1.4
+ . I don't change the version number (is almost the same pack)
+ . Fixed many and many grammar errors in slackpkg program files
+ . Correct a small error in post-install
+ - Released 1.4 (again)
+
+2005 Tue Jan 25
+---------------
+ - Forgot some "echo" debug messages. Now they are all removed and
+ the post-install really works. (thanks toledo)
+ - Don't run post-install when update/remove/search/blacklist
+ (thanks toledo)
+ - Added blacklist list option (thanks toledo, again!)
+ - Changed version number to 1.4
+
+2005 Mon Jan 24
+---------------
+ - Added post-install functions! -;) After upgrade/reinstall/whatever
+ your packages, now slackpkg searchs for NEW configuration files
+ (.new) and checks if your kernel is updated (and runs lilo).
+
+2005 Wed Jan 26
+---------------
+ - include "info" in post-install's don't runs.
+ - redirect some warning and md5sum errors to /dev/null.
+ (thanks phrag)
+ - correct some typos in slackpkg's description
+ (thanks phrag)
+ - Released 1.4
+
+2005 Tue Jan 11
+---------------
+ - Finally solved some gpg errors. Some users had telled that error
+ to me but i can't reproduce. Yesterday i saw one machine with the
+ stupid error and made a fix -:) gpg don't works without .gnupg dir
+ and not create that dir -:(
+
+2004 Wed Dec 29
+---------------
+ - Changed /usr/doc dir from 1.3 to 1.3.1
+ - Removed many vim's backup files
+ - Released 1.3.1
+
+2004 Mon Dec 20
+---------------
+ - change all "/etc/slackpkg" to ${CONF}. Now is safe change the
+ configuration dir of slackpkg.
+ (Thanx toledo)
+ - added "How many" packages in package list. Is a little cosmetic
+ change but don't hurt.
+ (Thanx toledo)
+
+2004 Wed Nov 24
+---------------
+ - fixed regexp to support ./pasture/package.tgz
+ Fixed /usr/libexec/slackpkg/core-functions.sh to support packages in
+ both ./somedir/ (eg. ./pasture/proftpd-1.2.10-i486-1.tgz) and ./
+ somedir/seconddir/ instead of only second one.
+ (Thanx Marek Wodzinski)
+ - Changed version number to 1.3.1
+
+2004 Fri Nov 12
+---------------
+ - Some mirrors from Ireland are in the wrong place (Italy). It's
+ fixed now.
+ (Thanx Marek Januszewski)
+ - Changed number version on /usr/sbin/slackpkg, now is 1.3, not 1.2.2
+
+2004 Mon Nov 01
+---------------
+ - Massive updates in /etc/slackpkg/mirrors. Many mirrors included and
+ many deleted.
+ - Added "dummy" support to 10.1 mirrors... if it had 10.0 and an
+ updated current, we put one 10.1 entry... now we only needs to wait
+ new slackware releases -;)
+ (Thanx Jorge Arellano Cid)
+
+2004 Fri Oct 29
+---------------
+ - Don't use temporary files to uncompress MANIFEST.bz2, now we are
+ using pipes, that approach drastically reduces the amount of disk
+ space needed to "slackpkg update"
+ (Thanx Maxim Krikun)
+ - Removed vi backup files from slackpkg package
+ - Changed version to 1.3
+
+2004 Wed Oct 13
+---------------
+ - Fixed error in install script. Removed de leading / in slackpkg's
+ configuration path.
+ (Thanx Valter Douglas Lisbôa Júnior)
+ - Fixed some problems when two (or more) packages had the same name,
+ version, etc... now slackpkg picks only the first pack.
+ (Thanx to Alexandre Pinaffi Andrucioli)
+
+2004 Mon Jun 21
+---------------
+ - Updated "mirrors" file. Now we are ready to slackware 10.0!!
+ (Thanx Lorn!)
+
+2004 Tue Jun 15
+---------------
+ - Changed version to 1.2.2
+
+2004 Mon Jun 14
+---------------
+ - Exclude "testing". Testing packages aren't to be installed
+ through automated tools. Testing needs more care from sysadmin
+ - Removed aaa_base from default blacklist (aaa_elflibs will stay
+ here).
+
+2004 Wed May 19
+---------------
+ - Changed version to 1.2.1
+
+2004 Thu May 06
+---------------
+ - Fixed CRLF in slackpkg.conf.new and blacklist.new.
+ - Changed "usage" message. Now we have more information about
+ slackpkg use
+
+2004 Wed Apr 14
+---------------
+ - Fixed another bug in regex. Problems with "+" again...
+ (reported by gar0t0, thanx!)
+ - Fixed typing and grammar errors in slackpkg.conf and blacklist.
+ (Thanx mRgOBLIN)
+
+2004 Tue Apr 13
+---------------
+ - Fixed a bug in "parser". GPG checking now are better.
+ (Thanx mRgOBLIN)
+ - Added aaa_elflibs in default blacklist.
+ from volkerdi@slackware.com:
+ > A word of advice: you should ***NEVER*** upgradepkg aaa_elflibs.
+ > It's well-known that it can downgrade some shared libraries and
+ > lead to bugs
+ - Added aaa_base too...
+
+2004 Mon Apr 05
+---------------
+ - Non-root can (again) use info and search. Changes in other places
+ change the behavior of slackpkg "parser"...
+ - Fixed a bug with "." and "+" in filenames.
+
+2004 Wed Mar 31
+---------------
+ - Fixed one bug in "search" (yes, another bug!) (Thanx toledo, again)
+ - Change (again) the behavior of "Do you want to...". Now it's much
+ more logic, Y or y or <nothing> continues, any other key, quit.
+
+2004 Tue Mar 30
+---------------
+ - Revert behavior of "Do you want to foobar those packages (Y/n)" back
+ to original. N or n quits, any other key continue
+
+2004 Fri Mar 26
+---------------
+ - One more "error" message (isn't a error... it's more a info)
+ - Some cosmetic changes in other messages
+ - Another fix in "search" bug. (Thanx toledo)
+
+2004 Thu Mar 25
+---------------
+ - Fixed some bugs added by the regex changes.
+ - Added a test to "first time running". Now slackpkg give some
+ tips to the user...
+ - Change the GPG download behavior. Now, if doesn't have the slackware
+ GPG key, the key will be downloaded in "slackpkg update"
+
+2004 Wed Mar 24
+---------------
+ - Fixed many regex bugs and changes a lot of "greps".
+ - Fixed ls bugs -- changed to "ls -1" to stop multi column lists
+ - Added sed substitutions to fix problems with + in packagenames
+ - Altered awk script in info case statement to properly format output
+ when more than one result is returned
+ - Changed showlist function so that only Y/y will continue, any other
+ character will cleanup -- safeguards against a wrong key pressed
+ (all these fix cames from mRgOBLIN)
+ - Another feature to "non-root" users... now they can use "info"
+
+2004 Mon Mar 22
+---------------
+ - Search function all overwrited by mRgOBLIN. The new function fixes
+ some bugs and add a feature, telling to the user what package needs
+ upgrade and the name of newer package version.
+ - Minor changes in some error messages
+ - Now "non-root" users can use "search" without install Slackware GPG
+ Key...
+
+2004 Thu Mar 18
+---------------
+ - Put an error message when md5sum or gpg doesn't match.
+ (Thanx mRgOBLIN)
+ - Correct filelist.awk to fix some UGLY bugs in search function.
+ Now it's correct.
+ (Thanx mRgOBLIN, for the bug report and the tip of fix)
+
+2004 Mon Mar 01
+---------------
+ - Added GPG function. Now slackpkg check all packages against its
+ .asc file. This option are enabled by default, if you doesn't like
+ that, you can change the configuration in /etc/slackpkg/slackpkg.conf
+
+2004 Thu Feb 26
+---------------
+ - Fixed a bug with VIM package (yes, the bug affect only
+ vim package...)
+ - A little change in makelist function. Now we got our speed
+ back... when fixed duplicate packages the fix make slackpkg
+ more slow (4 minutes to make list for "slackpkg upgrade slackware").
+ Now we doesn't have duplicated packages and have back our normal
+ speed (1 minute to "slackpkg upgrade slackware" list)
+ - Change version on all places to 1.03.1
+
+2004 Tue Feb 18
+---------------
+ - Now when we show a big package list, you can scroll with "more"
+ and can see all packages
+ - Bug fix! Something changed in FILELIST.TXT and slackpkg brokes
+ all package lists. Now it's ok.
+ (Thanx to chvt and Steven De Kock)
+ - New man-page provided by Rob. Thanx!
+ - Changed VERSION to 1.03
+
+2004 Tue Feb 10
+---------------
+ - We added a new system to make easy add new functions in slackpkg.
+ You only needs put your new function in a shell script and that
+ script under /usr/share/slackpkg/functions.d
+
+ With that, if you want GPG checking (example), you only needs
+ add one checkgpg function and rewrite/change the getpkg. It's
+ a nice way of extend slackpkg.
+
+ - Changed /usr/share to /usr/libexec. It makes more sense.
+ (Thanx thefallen)
+ - Fixed blacklist duplicate packages problem. Blacklist doesn't use
+ the default makelist function (now it uses).
+ (Thanx chvt for bug reports)
+
+2004 Thu Feb 06
+---------------
+ - Corrected a little bug in makelist option. Some packages are
+ duplicated in the list. Now it's correct.
+ - Put "update" in "case-esac". It is the only option in a "if-fi"
+
+2004 Thu Feb 05
+---------------
+ - Version are wrong in VERSION var. Now it's good.
+ - A lot of design changes. The "new" output style is a big mistake.
+ I am reverting slackpkg to the old one.
+ - We are splitting slackpkg in two parts. One with slackpkg functions
+ and other with the main program itself. It's really good.
+ - Put all options in a big "case-esac" instead multiple "if-fi"
+
+2004 Mon Feb 02
+---------------
+ - A new "sleep" test to solve problems in Slackware 9.1
+ - One tr -d "\r" to fix a bug in pkglist generation
+ (Thanx to Anatol)
+ - Added a new "clean" of tmp files in the slackpkg startup. It fixes
+ some ugly errors (slackpkg never-ends, slackpkg duplicate packages,
+ etc...)
+ (Thanx Lorn, toledo and gar0t0)
+ - Little changes in "info" now you will give an error if try to see
+ a "generic" info. "info" needs one package-name.
+
+2004 Fri Jan 30
+---------------
+ - Put a spinning bar when making one slow action. Thanx to toledo!!!
+ The code for spinning bar works really fine, and now our users can
+ see: "something is happenning..."
+ - Edit a lot of small things in everywhere to use spinning bar.
+ - man-page, README and other docs are "updated".
+ - fixed some sleep problems in slackware 8.1/9.0, now our program call
+ an internal sleep function
+
+2004 Wed Jan 21
+---------------
+ - Fixed "update" option. When we work with local dirs, the PACKAGES.TXT
+ are not "downloaded".
+
+2004 Mon Jan 19
+---------------
+ - New option added! slackpkg info package can tell to you the
+ information about that package.
+ - Correct some small bugs in cutpkg (very small bugs... i can detect
+ they only now!!!)
+ - Changed update option to download PACKAGES.TXT too...
+
+2004 Fri Jan 17
+---------------
+ - Changed the default wget to not show any info. Now we got a much more
+ cleaner output on screen.
+ - Corrected some bugs in new clean output system
+
+2004 Mon Jan 12
+---------------
+ - Changed the ChangeLog file format.
+ - Corrected a bug in blacklist option. It's the same bug that happenned
+ in "download" option. The bug are reported by Toledo (again)
+ - Now slackpkg can "search" files in /extra and /pasture too
+
+Tue Nov 11 - Fixed a little problem with duplicated packages in reinstall
+ function.
+ - Corrected a bug in download option. It asks to "download" from
+ an empty line. Now it's fixed (bug report by Toledo)
+
+Mon Nov 10 - Changed version to 1.00
+ . we have 1.00beta, 1.00beta1 and 1.00beta2 in internal tests
+ - Many, many changes in the backend...
+ . The package scan are completely rewroted. Now we can
+ make the package list 30% faster than old code.
+ . Now we have a lot of functions. The code are much more
+ flexible and readable
+ . Thanx to Jochem Kossen!
+ - New "download" function.
+ . Thanx to DaMouse!
+ - Some english typos corrected... (and some new introduced)
+ - Upgraded the man-page and README
+
+Thu Sep 25 - Updated man-page to show blacklist option
+ - Updated README to show blacklist option and to show the correct
+ release number.
+ - Correct the "usage" message to include blacklist option
+ - Ok, we remove kernel-* from blacklist and put in here a
+ message telling automated upgrade kernel-* isn't a good idea.
+ A lot of people tell me blacklist need to be empty... and i
+ approve that idea.
+ - Change the way of how detect packages that will be upgraded or
+ reinstalled. Old way thinks: package-1.2.3-i386-1 are the same
+ of package-1.2.3-i386-12345, now it's correct.
+ - Now slackpkg checks if the package is already in
+ /var/cache/packages before to download. If it's in cache, only
+ upgrade|install|reinstall, don't make a new download.
+ . Thanx Leandro Toledo
+
+Wed Sep 24 - Added "blacklist" command, to put packages in blacklist.
+ put all i18n packages manually is terrible.
+
+ slackpkg blacklist kde-i18n
+
+ will be help you (and me).
+ - Updated mirrors list. slackware 9.1 isn't out but we are
+ ready -:) (Thanx Cubano)
+ - Changed search function. Now, if we have one package installed
+ in your machine and one different in the MIRROR, the slackpkg
+ will tell to you to [ upgrade ]. Suggested by Nathan Morell
+ - Changed version to 0.99.1
+
+Fri Sep 19 - Putting all kernel-packages in blacklist file.
+ It's a better idea upgrade kernel packages manually
+ Thanx to Buick_Sk.
+
+Mon Sep 15 - A warning telling to users DOESN'T USE ftp.slackware.com as your
+ default mirror.
+ - Merged a patch from pvg, making the package selection more
+ acurated,
+ - Changed version number to 0.99
+ - Changed owner of some files and gzipped man-page. That makes
+ the package more "Slackware" compliant (Thanks Patrick)
+ - Leandro Toledo makes a patch with some fixes in CHECKSUMS.MD5
+ download.
+ - Changed default package locations from /usr/local/packages to
+ /var/cache/packages. It's more compatible with FHS specifications
+ Thanx Patrick.
+
+Thu Aug 21 - Finally!!! One man page!!! Now slackpkg have a man-page and
+ you can type: man slackpkg to see more info.
+ . Thanx for William N. Zanatta for that manpage
+ - More syntax checkings... slackpkg have a lot of syntax checkings
+
+Wed Aug 20 - Changes in md5sum checking code. Original code are more
+ technical, but more complex. New code more clean.
+
+Tue Aug 19 - Changed version number to 0.98
+ - Now we have md5sum check of packages. With that, is very
+ hard install a corrupt pack.
+ . Thanx for William N. Zanatta for that code
+ - Now we can install/upgrade/reinstall from a CD-ROM or other
+ dir in your HD.
+ - Some code cleanups using functions instead duplicate code.
+ - Corrected a bug in permissions check. Now, a normal user can
+ search for one (or more) files in packages.
+
+Fri Aug 01 - Updated mirrors file (now Slackware 9.0!!!)
+ . Thanx Cubano, Udontknow and gar0t0
+ - Fixed problem with DELALL (old DELALL doesn't delete all,
+ delete only the last pack, now it works well and delete
+ really all)
+ . Thanx Isaque Galdino for the bug report and fix
+ - Deprecated MANIFEST.gz now the system only reads MANIFEST.bz2
+ - Fixed a lot of typos (Udontknow)
+ - Check if the user is root before trying upgrade/install/remove
+ a package
+
+Thu Apr 10 - Added blacklist support with the packages that can't be
+ upgraded/installed/uninstalled.
+ . Thanx Gondim for that idea
+ - Changed version number to 0.96
+
+Fri Apr 04 - Fix a bug with the kernel-sources package. Before that fix,
+ kernel-source are invisible to slackpkg
+
+Mon Mar 17 - Changed MANIFEST.gz to MANIFEST.bz2 (Patrick has changed that
+ and a lot of mirrors have changed too...)
+ - Fix a lock bug.
+ - Changed version number to 0.95
+
+Wed Mar 12 - Changed FILELIST.TXT filter to exclude .asc files
+ - Changed version number to 0.94
+
+Fri Feb 28 - Better "case" structure to select between
+ install|upgrade|reinstall
+ - Now we have an LOCK file. No more two slackpkg working at
+ same time.
+ - A trap and cleanup function to remove all garbage generated
+ by slackpkg.
+
+Fri Feb 14 - Change release number to 0.93
+ - New install scripts, no more erased confs
+ - New option in slackpkg.conf, WGETFLAGS. Now you can specify
+ some wget confs with that option.
+ - New feature, reinstall.
+ install -> install new software
+ upgrade -> upgrade existing software with new version.
+ reinstall -> re-install already installed software
+ - Some upgrades in package lists generation.
+
+Wed Feb 5 - Change release number to 0.92
+ - Correct search to know if other version (not in MANIFEST) of
+ software is installed.
+ - New tests to validate configuration files syntax
+ - No more default mirror. You really need to choice.
+ - Finally, a README file!
+ - Change slackpkg command location to /usr/sbin
+
+Thu Jan 23 - Change release number to 0.91
+ - Add new function: search! Now you can search in slackware package
+ and find a "selected" file.
+ - More fixes in system messages... much more complete.
+ - New tests to validate command syntax before execution.
+
+Wed Jan 22 - Some feature fix in 0.90
+ . Check if package can be installed/upgraded BEFORE download
+ . Cosmetic fix in some system messages.
+
+Tue Jan 21 - First public release 0.90
diff --git a/files/GPL b/files/GPL
new file mode 100644
index 0000000..d60c31a
--- /dev/null
+++ b/files/GPL
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/files/README b/files/README
new file mode 100644
index 0000000..9ae6234
--- /dev/null
+++ b/files/README
@@ -0,0 +1,74 @@
+ slackpkg - Automated Tool for Management of Slackware Linux Packages
+ ---------------------------------------------------------------------
+ Authors: Piter PUNK aka Roberto F Batista
+ <piterpunk@slackware.com>
+ Evaldo Gardenali aka UdontKnow
+ <evaldo@fasternet.com.br>
+ Robby Workman aka rworkman
+ <rworkman@slackware.com>
+ (since 2.82.2)
+
+ Version: 0.93 released at Fri Feb 14 2003
+ 0.94 released at Wed Mar 12 2003
+ 0.95 released at Mon Mar 17 2003
+ 0.96 released at Thu Apr 10 2003
+ 0.97 released at Fri Aug 01 2003
+ 0.98 released at Tue Aug 19 2003
+ 0.99 released at Mon Sep 15 2003
+ 0.99.1 released at Wed Sep 24 2003
+ 1.00 released at Mon Nov 10 2003
+ 1.02 released at Fri Jan 30 2004
+ 1.02.1 released at Mon Feb 02 2004
+ 1.02.2 released at Mon Feb 02 2004
+ 1.03 released at Wed Feb 18 2004
+ 1.03.1 released at Thu Feb 26 2004
+ 1.1 released at Mon Mar 01 2004
+ 1.2 released at Tue Mar 30 2004
+ 1.2.1 released at Wed May 19 2004
+ 1.2.2 released at Tue Jun 15 2004
+ 1.3 released at Mon Nov 01 2004
+ 1.3.1 released at Wed Dec 29 2004
+ 1.4 released at Wed Jan 26 2005
+ 1.4.1 released at Tue Jun 22 2005
+ 1.5.0 released at Fri Jul 22 2005
+ 1.5.1 released at Wed Aug 17 2005
+ 1.5.2 released at Sun Sep 11 2005
+ 2.03 released at Thu May 18 2006
+ 2.04 released at Fri May 26 2006
+ 2.05 released at Thu Jun 08 2006
+ 2.06 released at Fri Jul 28 2006
+ 2.07 released at Sun Aug 13 2006
+ 2.08 released at Fri Aug 18 2006
+ 2.09 released at Mon Aug 28 2006
+ 2.52 released at Sat Mar 17 2007
+ 2.60 released at Tue May 08 2007
+ 2.61 released at Sat Jun 09 2007
+ 2.70 released at Tue Jan 29 2008
+ 2.70.1 released at Sat Mar 15 2008
+ 2.70.2 released at Tue Apr 08 2008
+ 2.70.3 released at Wed Apr 30 2008
+ 2.70.4 released at Fri May 01 2008
+ 2.70.5 released at Thu Dec 04 2008
+ 2.71 released at Thu Apr 23 2009
+ 2.71.1 released at Sat May 02 2009
+ 2.80 released at Thu Jun 18 2009
+ 2.80.1 released at Tue Jul 14 2009
+ 2.80.2 released at Thu Jul 30 2009
+ 2.81 released at Fri Apr 23 2010
+ 2.81.1 released at Thu May 13 2010
+ 2.82.0 released at Thu Mar 24 2011
+ 2.82.1 released at Wed May 11 2016
+ 2.82.2 released at Sun Oct 08 2017
+
+ Slackpkg is a tool for those who want to easily install or upgrade packages
+ via the network. With slackpkg, you can have a minimal installation of
+ Slackware Linux and install/upgrade only those packages you need most.
+
+ You don't need to setup NFS or make dozens of CDs for all your computers;
+ all you need to do is to type one command and all the latest official
+ Slackware packages will be at your fingertips.
+
+ For more information about slackpkg, see its man pages:
+ man 8 slackpkg
+ man 5 slackpkg.conf
+
diff --git a/files/blacklist.new b/files/blacklist.new
new file mode 100644
index 0000000..d59a470
--- /dev/null
+++ b/files/blacklist.new
@@ -0,0 +1,36 @@
+# This is a blacklist file. Any packages listed here won't be
+# upgraded, removed, or installed by slackpkg.
+#
+# The correct syntax is:
+#
+# To blacklist the package xorg-server-1.19.4-x86_64-1 the line will be:
+# xorg-server
+#
+# DON'T put any space(s) before or after the package name or regexp.
+# If you do this, the blacklist will NOT work.
+
+#
+# Automated upgrade of kernel packages aren't a good idea (and you need to
+# run "lilo" after upgrade). If you think the same, uncomment the lines
+# below
+#
+#kernel-generic
+#kernel-generic-smp
+#kernel-huge
+#kernel-huge-smp
+#kernel-modules
+#kernel-modules-smp
+#kernel-source
+
+#
+# aaa_elflibs should NOT be blacklisted!
+#
+
+# You can blacklist using regular expressions.
+#
+# Don't use *full* regex here, because all of the following
+# will be checked for the regex: series, name, version, arch,
+# build and fullname.
+#
+# This one will blacklist all SBo packages:
+#[0-9]+_SBo
diff --git a/files/core-functions.sh b/files/core-functions.sh
new file mode 100644
index 0000000..919bf80
--- /dev/null
+++ b/files/core-functions.sh
@@ -0,0 +1,1351 @@
+
+#========================================================================
+#
+# PROGRAM FUNCTIONS
+#
+
+# Clean-up tmp and lock files
+#
+function cleanup() {
+ [ "$SPINNING" = "off" ] || tput cnorm
+ if [ -e $TMPDIR/error.log ]; then
+ echo -e "
+\n==============================================================================
+WARNING! WARNING! WARNING! WARNING! WARNING!
+==============================================================================
+One or more errors occurred while slackpkg was running:
+"
+ cat $TMPDIR/error.log
+ echo -e "
+=============================================================================="
+ fi
+ echo
+ if [ "$DELALL" = "on" ] && [ "$NAMEPKG" != "" ]; then
+ rm $CACHEPATH/$NAMEPKG &>/dev/null
+ fi
+ ( rm -f /var/lock/slackpkg.$$ && rm -rf $TMPDIR ) &>/dev/null
+ exit
+}
+trap 'cleanup' 2 14 15 # trap CTRL+C and kill
+
+# This create an spinning bar
+spinning() {
+ local WAITFILE
+ local SPININTERVAL
+ local COUNT
+
+ if [ "$SPIN" = "" ]; then
+ SPIN=( "|" "/" "-" "\\" )
+ fi
+ COUNT=${#SPIN[@]}
+
+ [ -n "$1" ] && WAITFILE=$1 || WAITFILE=/tmp/waitfile
+ [ -n "$2" ] && SPININTERVAL=$2 || SPININTERVAL=0.1
+
+ count=0
+ tput civis
+ while [ -e $WAITFILE ] ; do
+ count=$(( count + 1 ))
+ tput sc
+ echo -n ${SPIN[$(( count % COUNT ))]}
+ tput rc
+ sleep $SPININTERVAL
+ done
+ tput cnorm
+}
+
+# System setup
+#
+function system_setup() {
+
+ # Set LOCAL if mirror isn't through network
+ # If mirror is through network, select the command to fetch
+ # files and packages from there.
+ #
+ MEDIA=${SOURCE%%:*}
+ if [ "$MEDIA" = "cdrom" ] || [ "$MEDIA" = "file" ] || \
+ [ "$MEDIA" = "local" ]; then
+ SOURCE=/${SOURCE#${MEDIA}://}
+ LOCAL=1
+ else
+ LOCAL=0
+ if [ "$DOWNLOADER" = "curl" ]; then
+ DOWNLOADER="curl ${CURLFLAGS} -o"
+ else
+ DOWNLOADER="wget ${WGETFLAGS} -O"
+ fi
+ fi
+
+ # Set MORECMD, EDITCMD and check BATCH mode
+ #
+ if [ "$BATCH" = "on" ] || [ "$BATCH" = "ON" ]; then
+ DIALOG=off
+ SPINNING=off
+ MORECMD=cat
+ EDITCMD=vi
+ if [ "$DEFAULT_ANSWER" = "" ]; then
+ DEFAULT_ANSWER=n
+ fi
+ else
+ if [ "${PAGER}" ]; then
+ MORECMD="${PAGER}"
+ else
+ MORECMD=more
+ fi
+ if [ "${EDITOR}" ]; then
+ EDITCMD="${EDITOR}"
+ else
+ EDITCMD=vi
+ fi
+ fi
+
+ # Set ARCH, SLACKKEY and others by slackware port
+ #
+ if [ "$ARCH" = "" ]; then
+ ARCH=$(uname -m)
+ fi
+ case $ARCH in
+ i386|i486|i586|i686)
+ ARCH=[i]*[3456x]86[^_]*
+ SLACKKEY=${SLACKKEY:-"Slackware Linux Project <security@slackware.com>"}
+ PKGMAIN=${PKGMAIN:-slackware}
+ ;;
+ x86-64|x86_64|X86-64|X86_64)
+ ARCH=x86[_64]*
+ SLACKKEY=${SLACKKEY:-"Slackware Linux Project <security@slackware.com>"}
+ PKGMAIN=${PKGMAIN:-slackware64}
+ ;;
+ s390)
+ ARCH=s390
+ # Slack390 didn't have signed packages
+ CHECKGPG=off
+ PKGMAIN=${PKGMAIN:-slackware}
+ ;;
+ arm*)
+ ARCH=arm[v5tel]*
+ SLACKKEY=${SLACKKEY:-"ARMedslack Security (ARMedslack Linux Project Security) <security@armedslack.org>"}
+ PKGMAIN=${PKGMAIN:-slackware}
+ ;;
+ powerpc|ppc)
+ ARCH=powerpc
+ SLACKKEY=${SLACKKEY:-"Slackintosh-Project Sign <slackdev@workaround.ch>"}
+ PKGMAIN=${PKGMAIN:-slackintosh}
+ ;;
+ *)
+ ARCH=none
+ ;;
+ esac
+
+ # Sub %PKGMAIN with the correct $PKGMAIN value
+ #
+ MAIN=$PKGMAIN
+ for i in 0 1 2 3 4 ; do
+ if [ "${PRIORITY[$i]}" = "%PKGMAIN" ]; then
+ PRIORITY[$i]=$PKGMAIN
+ fi
+ done
+
+ TEMPLATEDIR=$CONF/templates
+ if [ ! -d $TEMPLATEDIR ]; then
+ mkdir $TEMPLATEDIR
+ fi
+
+ SLACKCFVERSION=$(grep "# v[0-9.]\+" $CONF/slackpkg.conf | cut -f2 -dv)
+ CHECKSUMSFILE=$WORKDIR/CHECKSUMS.md5
+ KERNELMD5=$(md5sum /boot/vmlinuz 2>/dev/null)
+ DIALOG_MAXARGS=${DIALOG_MAXARGS:-19500}
+ echo "$0 $VERSION - Slackware Linux $SLACKWARE_VERSION" > $TMPDIR/timestamp
+}
+
+# Syntax Checking
+#
+function system_checkup() {
+
+ # Check slackpkg.conf version
+ #
+ SLCKCFVL=$( expr length $SLACKCFVERSION )
+ if [ "$SLACKCFVERSION" != "$( echo $VERSION |cut -c1-$SLCKCFVL)" ] &&\
+ [ "$CMD" != "new-config" ]; then
+ echo -e "\
+\nYour slackpkg.conf is outdated. Please, edit it using slackpkg.conf.new\n\
+as example or overwrite it with slackpkg.conf.new.\n\
+\nYou can use 'slackpkg new-config' to do that.\n"
+ cleanup
+ fi
+
+ # Check if ARCH is set
+ #
+ if [ "$ARCH" = "none" ] && [ "$CMD" != "new-config" ]; then
+ echo -e "\
+\nThe ARCH values in slackpkg.conf are now different. You can remove\n\
+ARCH from there, and slackpkg you use your current ARCH or you can look\n\
+at slackpkg.conf.new or slackpkg.conf manual page to see the new valid\n\
+ARCH values\n"
+ cleanup
+ fi
+
+ # Check if the config files are updated to the new slackpkg version
+ #
+ if [ "$WORKDIR" = "" ]; then
+ echo -e "\
+\nYou need to upgrade your slackpkg.conf.\n\
+This is a new slackpkg version and many changes happened in config files.\n\
+In ${CONF}/slackpkg.conf.new, there is a sample of the new configuration.\n\
+\nAfter updating your configuration file, run: slackpkg update\n"
+ cleanup
+ fi
+
+ # Checking if another instance of slackpkg is running
+ #
+ if [ "$(ls /var/lock/slackpkg.* 2>/dev/null)" ] && \
+ [ "$CMD" != "search" ] && \
+ [ "$CMD" != "help" ] && \
+ [ "$CMD" != "file-search" ]; then
+ echo -e "\
+\nAnother instance of slackpkg is running. If this is not correct, you can\n\
+remove /var/lock/slackpkg.* files and run slackpkg again.\n"
+ cleanup
+ else
+ ls /var/lock/slackpkg.* &>/dev/null || \
+ touch /var/lock/slackpkg.$$
+ fi
+
+ # Checking if the we can create TMPDIR
+ #
+ if [ "$TMPDIR" = "FAILED" ]; then
+ echo -e "\
+\nA problem was encountered writing to slackpkg's temporary dir in /tmp.\n\
+Check to ensure you have permissions to write in /tmp and make sure the\n\
+filesystem is not out of free space. Run slackpkg again after correcting\n\
+the problem.\n"
+ cleanup
+ fi
+
+ # Checking if is the first time running slackpkg
+ #
+ if ! [ -f ${WORKDIR}/pkglist ] && [ "$CMD" != "update" ]; then
+ if [ "$SOURCE" = "" ]; then
+ echo -e "\
+\nThis appears to be the first time you have run slackpkg.\n\
+Before you install|upgrade|reinstall anything, you need to uncomment\n\
+ONE mirror in ${CONF}/mirrors and run:\n\n\
+\t# slackpkg update\n\n\
+You can see more information about slackpkg functions in slackpkg manpage."
+ cleanup
+ elif [ "$CMD" != "new-config" ]; then
+ echo -e "\
+\nThe package list is missing.\n\
+Before you install|upgrade|reinstall anything you need to run:\n\n\
+\t# slackpkg update\n"
+ cleanup
+ fi
+ fi
+
+
+ # Checking if /etc/slackpkg/mirrors are in correct syntax.
+ #
+ if [ "$SOURCE" = "" ] ; then
+ echo -e "\
+\nYou do not have any mirror selected in ${CONF}/mirrors\n\
+Please edit that file and uncomment ONE mirror. Slackpkg\n\
+only works with ONE mirror selected.\n"
+ cleanup
+ else
+ COUNT=$(echo $SOURCE | wc -w | tr -d " ")
+ if [ "$COUNT" != "1" ]; then
+ echo -e "\n\
+Slackpkg only works with ONE mirror selected. Please edit your\n\
+${CONF}/mirrors and comment all but one line - two or more\n\
+mirrors uncommented is not valid syntax.\n"
+ cleanup
+ fi
+ fi
+
+ # It will check if the mirror selected are ftp.slackware.com
+ # if set to "ftp.slackware.com" tell the user to choose another
+ #
+ if echo ${SOURCE} | grep "^ftp://ftp.slackware.com" &>/dev/null ; then
+ echo -e "\n\
+Please use one of the mirrors.\n\
+ftp.slackware.com should be reserved so that the\n\
+official mirrors can be kept up-to-date.\n"
+ cleanup
+ fi
+
+ # Also check if the mirror selected is ftp://mirrors.slackware.com
+ # if set to "ftp://mirrors.slackware.com" tell the user to choose another
+ #
+ if echo ${SOURCE} | grep "^ftp://mirrors.slackware.com" &>/dev/null ; then
+ echo -e "\n\
+Please use http://mirrors.slackware.com instead.\n\
+ftp://mirrors.slackware.com does not handle redirects \n\
+to the closest mirror and is very slow.\n"
+ cleanup
+ fi
+
+ # Checking if the user has the permissions to install/upgrade/update
+ #
+ if [ "$(id -u)" != "0" ] && \
+ [ "$CMD" != "search" ] && \
+ [ "$CMD" != "file-search" ] && \
+ [ "$CMD" != "check-updates" ] && \
+ [ "$CMD" != "info" ]; then
+ echo -e "\n\
+Only root can install, upgrade, or remove packages.\n\
+Please log in as root or contact your system administrator.\n"
+ cleanup
+ fi
+
+ # Check if the "which" command is there
+ if ! which which 1>/dev/null 2>/dev/null ; then
+ echo -e "\n\
+No 'which' command found, please install it if you want to\n\
+use slackpkg.\n"
+ cleanup
+ fi
+
+ # Check if we have md5sum in the PATH. Without md5sum, disables
+ # md5sum checks
+ #
+ if ! [ $(which md5sum 2>/dev/null) ]; then
+ CHECKMD5=off
+ elif ! [ -f ${WORKDIR}/CHECKSUMS.md5 ] && \
+ [ "$CMD" != "update" ] && \
+ [ "$CHECKMD5" = "on" ]; then
+ echo -e "\n\
+No CHECKSUMS.md5 found! Please disable md5sums checking\n\
+on your ${CONF}/slackpkg.conf or run slackpkg update\n\
+to download a new CHECKSUMS.md5 file.\n"
+ cleanup
+ fi
+
+ # Check if awk is installed
+ #
+ if ! [ "$(which awk 2>/dev/null)" ]; then
+ echo -e "\n\
+awk package not found! Please install awk before you run slackpkg,\n\
+as slackpkg cannot function without awk.\n"
+ cleanup
+ fi
+
+ # Check if tput is there
+ #
+ if ! which tput 1>/dev/null 2>/dev/null ; then
+ SPINNING=off
+ fi
+
+ # Check if gpg is enabled but no GPG command are found.
+ #
+ if ! [ "$(which gpg 2>/dev/null)" ] && [ "${CHECKGPG}" = "on" ]; then
+ CHECKGPG=off
+ echo -e "\n\
+gpg package not found! Please disable GPG in ${CONF}/slackpkg.conf or install\n\
+the gnupg package.\n\n\
+To disable GPG, edit slackpkg.conf and change the value of the CHECKGPG \n\
+variable to "off" - you can see an example in the original slackpkg.conf.new\n\
+file distributed with slackpkg.\n"
+ sleep 5
+ fi
+
+ # Check if the Slackware GPG key are found in the system
+ #
+ GPGFIRSTTIME="$(gpg --list-keys \"$SLACKKEY\" 2>/dev/null \
+ | grep -c "$SLACKKEY")"
+ if [ "$GPGFIRSTTIME" = "0" ] && \
+ [ "$CMD" != "search" ] && \
+ [ "$CMD" != "file-search" ] && \
+ [ "$CMD" != "info" ] && \
+ [ "$CMD" != "new-config" ] && \
+ [ "$CMD" != "update" ] && \
+ [ "$CMD" != "check-updates" ] && \
+ [ "$CHECKGPG" = "on" ]; then
+ echo -e "\n\
+You need the GPG key of $SLACKKEY.\n\
+To download and install that key, run:\n\n\
+\t# slackpkg update gpg\n\n\
+You can disable GPG checking too, but it is not a good idea.\n\
+To disable GPG, edit slackpkg.conf and change the value of the CHECKGPG\n\
+variable to "off" - you can see an example in the original slackpkg.conf.new\n\
+file distributed with slackpkg.\n"
+ cleanup
+ fi
+ echo
+}
+
+# Got the name of a package, without version-arch-release data
+#
+function cutpkg() {
+ echo ${1/%.t[blxg]z/} | awk -F- -f /usr/libexec/slackpkg/cutpkg.awk
+}
+
+# The same, but reading packages from stdin
+#
+function batchcutpkg() {
+ awk -F- -f /usr/libexec/slackpkg/cutpkg.awk
+}
+
+# Show the slackpkg usage
+#
+function usage() {
+ echo -e "\
+slackpkg - version $VERSION\n\
+\nUsage:\n\
+\tslackpkg [OPTIONS] {install|remove|search|file-search|
+\t\t\t upgrade|reinstall|blacklist} {PATTERN|FILE}
+\tslackpkg [OPTIONS] {generate-template|install-template|remove-template}
+\t\t\t TEMPLATENAME
+\tslackpkg [OPTIONS] info PACKAGE
+\tslackpkg [OPTIONS] update [gpg]
+\tslackpkg [OPTIONS] {clean-system|upgrade-all|install-new}
+\tslackpkg [OPTIONS] {new-config|check-updates|help}
+\nIf you need more information try to use 'slackpkg help' or look the\n\
+slackpkg's manpage.
+"
+ cleanup
+}
+
+function full_usage() {
+ echo -e "\
+slackpkg - version $VERSION\n\
+\nUsage: \tslackpkg update [gpg]\t\tdownload and update files and
+\t\t\t\t\tpackage indexes
+\tslackpkg check-updates\t\tcheck if there is any news on
+\t\t\t\t\tSlackware's ChangeLog.txt
+\tslackpkg install package\tdownload and install packages
+\tslackpkg upgrade package\tdownload and upgrade packages
+\tslackpkg reinstall package\tsame as install, but for packages
+\t\t\t\t\talready installed
+\tslackpkg remove package\t\tremove installed packages
+\tslackpkg clean-system\t\tremove all packages which are not
+\t\t\t\t\tpresent in the official Slackware
+\t\t\t\t\tpackage set. Good to keep the house
+\t\t\t\t\tin order
+\tslackpkg upgrade-all\t\tsync all packages installed in your
+\t\t\t\t\tmachine with the selected mirror. This
+\t\t\t\t\tis the "correct" way to upgrade all of
+\t\t\t\t\tyour machine.
+\tslackpkg install-new\t\tinstall packages which are added to
+\t\t\t\t\tthe official Slackware package set.
+\t\t\t\t\tRun this if you are upgrading to another
+\t\t\t\t\tSlackware version or using "current".
+\tslackpkg blacklist\t\tBlacklist a package. Blacklisted
+\t\t\t\t\tpackages cannot be upgraded, installed,
+\t\t\t\t\tor reinstalled by slackpkg
+\tslackpkg download\t\tOnly download (do not install) a package
+\tslackpkg info package\t\tShow package information
+\t\t\t\t\t(works with only ONE package)
+\tslackpkg search package\t\tSearch packages that have a
+\t\t\t\t\tselected name
+\tslackpkg file-search file\tSearch for a specific file in the
+\t\t\t\t\tentire package collection
+\tslackpkg new-config\t\tSearch for new configuration files and
+\t\t\t\t\task to user what to do with them.
+\tslackpkg generate-template\tCreate a template with all
+\t\t\t\t\tofficial Slackware packages installed
+\t\t\t\t\tin your machine.
+\tslackpkg install-template\tInstall selected template.
+\tslackpkg remove-template\tRemove selected template. Be careful.
+\tslackpkg help\t\t\tShow this screen.
+\nYou can see more information about slackpkg usage and some examples
+in slackpkg's manpage. You can use partial package names (such as xorg
+instead of xorg-server, xorg-docs, etc), or even Slackware series
+(such as "n","ap","xap",etc) when searching for packages.
+"
+ cleanup
+}
+
+# Verify if we have enough disk space to install selected package
+#
+function havespace() {
+ local DSIZE
+ local ASIZE
+ DSIZE=$(grep "^${1}" ${TMPDIR}/tempsize | \
+ awk 'BEGIN { tot=0 } { tot+=$2 } END { print int(tot/1024)+1}')
+ ASIZE=$(df ${1} | awk '/% \// { print 0+$(NF-2) }')
+ if [ ${DSIZE} -gt ${ASIZE} ] ; then
+ ISOK=0
+ fi
+}
+
+function checksize() {
+ local i
+ local ISOK=1
+ tar -tvf ${1} | tr -s ' ' | grep -v '^[dl]' | cut -f6,3 -d\ | \
+ sed 's,[^/]*$,,' | awk '
+ { size[$2]+=$1 }
+ END {
+ for (i in size) {
+ print "/"i,size[i]
+ }
+ }' > ${TMPDIR}/tempsize
+
+ for i in $(tac /proc/mounts | grep "^/dev" |cut -f2 -d\ ); do
+ if grep -q "^${i}" ${TMPDIR}/tempsize ; then
+ havespace ${i}
+ grep -v "^${i}/" ${TMPDIR}/tempsize > ${TMPDIR}/tempsize.tmp
+ mv ${TMPDIR}/tempsize.tmp ${TMPDIR}/tempsize
+ fi
+ done
+ echo ${ISOK}
+}
+
+# Verify if the package was corrupted by checking md5sum
+#
+function checkmd5() {
+ local MD5ORIGINAL
+ local MD5DOWNLOAD
+
+ MD5ORIGINAL=$( grep -v "/source/" ${CHECKSUMSFILE} |\
+ grep -m1 "/$(basename $1)$" | cut -f1 -d \ )
+ MD5DOWNLOAD=$(md5sum ${1} | cut -f1 -d \ )
+ if [ "$MD5ORIGINAL" = "$MD5DOWNLOAD" ]; then
+ echo 1
+ else
+ echo 0
+ fi
+}
+
+# Verify the GPG signature of files/packages
+#
+function checkgpg() {
+ gpg --verify ${1}.asc ${1} 2>/dev/null && echo "1" || echo "0"
+}
+
+# Found packages in repository.
+# This function selects the package from the higher priority
+# repository directories.
+#
+function givepriority {
+ local DIR
+ local ARGUMENT=$1
+ local PKGDATA
+
+ unset NAME
+ unset FULLNAME
+ unset PKGDATA
+
+ for DIR in ${PRIORITY[@]} ; do
+ [ "$PKGDATA" ] && break
+ PKGDATA=( $(grep "^${DIR} ${ARGUMENT} " ${TMPDIR}/pkglist) )
+ if [ "$PKGDATA" ]; then
+ NAME=${PKGDATA[1]}
+ FULLNAME=$(echo "${PKGDATA[5]}.${PKGDATA[7]}")
+ fi
+ done
+}
+
+# Creates files with mirror package names (spkg), local package
+# names (lpkg) and packages unique to one or other file (dpkg)
+#
+function listpkgname() {
+ cut -f2 -d\ ${TMPDIR}/pkglist | sort > ${TMPDIR}/spkg
+ cut -f2 -d\ ${TMPDIR}/tmplist | sort > ${TMPDIR}/lpkg
+ cat ${TMPDIR}/pkglist ${TMPDIR}/tmplist | \
+ cut -f2-6 -d\ |sort | uniq -u | \
+ cut -f1 -d\ | uniq > ${TMPDIR}/dpkg
+}
+
+function applyblacklist() {
+ grep -vEw -f ${TMPDIR}/blacklist
+}
+
+# Function to make install/reinstall/upgrade lists
+#
+function makelist() {
+ local ARGUMENT
+ local i
+ local VRFY
+
+ INPUTLIST=$@
+
+ grep -vE "(^#|^[[:blank:]]*$)" ${CONF}/blacklist > ${TMPDIR}/blacklist
+ if echo $CMD | grep -q install ; then
+ ls -1 $ROOT/var/log/packages/* | awk -f /usr/libexec/slackpkg/pkglist.awk > ${TMPDIR}/tmplist
+ else
+ ls -1 $ROOT/var/log/packages/* | awk -f /usr/libexec/slackpkg/pkglist.awk | applyblacklist > ${TMPDIR}/tmplist
+ fi
+ cat ${WORKDIR}/pkglist | applyblacklist > ${TMPDIR}/pkglist
+
+ touch ${TMPDIR}/waiting
+
+ case "$CMD" in
+ clean-system)
+ echo -n "Looking for packages to remove. Please wait... "
+ ;;
+ upgrade-all)
+ echo -n "Looking for packages to upgrade. Please wait... "
+ ;;
+ install-new)
+ echo -n "Looking for NEW packages to install. Please wait... "
+ ;;
+ *-template)
+ echo -n "Looking for packages in \"$ARG\" template to ${CMD/%-template/}. Please wait..."
+ ;;
+ *)
+ echo -n "Looking for $(echo $INPUTLIST | tr -d '\\') in package list. Please wait... "
+ ;;
+ esac
+
+ [ "$SPINNING" = "off" ] || spinning ${TMPDIR}/waiting &
+
+ case "$CMD" in
+ download)
+ for ARGUMENT in $(echo $INPUTLIST); do
+ for i in $(grep -w -- "${ARGUMENT}" ${TMPDIR}/pkglist | cut -f2 -d\ | sort -u); do
+ LIST="$LIST $(grep " ${i} " ${TMPDIR}/pkglist | cut -f6,8 -d\ --output-delimiter=.)"
+ done
+ LIST="$(echo -e $LIST | sort -u)"
+ done
+ ;;
+ blacklist)
+ for ARGUMENT in $(echo $INPUTLIST); do
+ for i in $(cat ${TMPDIR}/pkglist ${TMPDIR}/tmplist | \
+ grep -w -- "${ARGUMENT}" | cut -f2 -d\ | sort -u); do
+ grep -qx "${i}" ${CONF}/blacklist || LIST="$LIST $i"
+ done
+ done
+ ;;
+ install|upgrade|reinstall)
+ for ARGUMENT in $(echo $INPUTLIST); do
+ for i in $(grep -w -- "${ARGUMENT}" ${TMPDIR}/pkglist | cut -f2 -d\ | sort -u); do
+ givepriority $i
+ [ ! "$FULLNAME" ] && continue
+
+ case $CMD in
+ 'upgrade')
+ VRFY=$(cut -f6 -d\ ${TMPDIR}/tmplist | \
+ grep -x "${NAME}-[^-]\+-\(noarch\|fw\|${ARCH}\)-[^-]\+")
+ [ "${FULLNAME/%.t[blxg]z/}" != "${VRFY}" ] && \
+ [ "${VRFY}" ] && \
+ LIST="$LIST ${FULLNAME}"
+ ;;
+ 'install')
+ grep -q " ${NAME} " ${TMPDIR}/tmplist || \
+ LIST="$LIST ${FULLNAME}"
+ ;;
+ 'reinstall')
+ grep -q " ${FULLNAME/%.t[blxg]z} " ${TMPDIR}/tmplist && \
+ LIST="$LIST ${FULLNAME}"
+ ;;
+ esac
+ done
+ done
+ ;;
+ remove)
+ for ARGUMENT in $(echo $INPUTLIST); do
+ for i in $(cat ${TMPDIR}/pkglist ${TMPDIR}/tmplist | \
+ grep -w -- "${ARGUMENT}" | cut -f6 -d\ | sort -u); do
+ PKGDATA=( $(grep -w -- "$i" ${TMPDIR}/tmplist) )
+ [ ! "$PKGDATA" ] && continue
+ LIST="$LIST ${PKGDATA[5]}"
+ unset PKGDATA
+ done
+ done
+ ;;
+ clean-system)
+ listpkgname
+ for i in $(comm -2 -3 ${TMPDIR}/lpkg ${TMPDIR}/spkg) ; do
+ PKGDATA=( $(grep -- "^local $i " ${TMPDIR}/tmplist) )
+ [ ! "$PKGDATA" ] && continue
+ LIST="$LIST ${PKGDATA[5]}"
+ unset PKGDATA
+ done
+ ;;
+ upgrade-all)
+ listpkgname
+ for i in $(comm -1 -2 ${TMPDIR}/lpkg ${TMPDIR}/dpkg | \
+ comm -1 -2 - ${TMPDIR}/spkg) ; do
+
+ givepriority ${i}
+ [ ! "$FULLNAME" ] && continue
+
+ VRFY=$(cut -f6 -d\ ${TMPDIR}/tmplist | grep -x "${NAME}-[^-]\+-\(noarch\|fw\|${ARCH}\)-[^-]\+")
+ [ "${FULLNAME/%.t[blxg]z}" != "${VRFY}" ] && \
+ [ "${VRFY}" ] && \
+ LIST="$LIST ${FULLNAME}"
+ done
+ ;;
+ install-new)
+ for i in $(awk -f /usr/libexec/slackpkg/install-new.awk ${WORKDIR}/ChangeLog.txt |\
+ sort -u ) dialog aaa_terminfo fontconfig \
+ ntfs-3g ghostscript wqy-zenhei-font-ttf \
+ xbacklight xf86-video-geode ; do
+
+ givepriority $i
+ [ ! "$FULLNAME" ] && continue
+
+ grep -q " ${NAME} " ${TMPDIR}/tmplist || \
+ LIST="$LIST ${FULLNAME}"
+ done
+ ;;
+ install-template)
+ for i in $INPUTLIST ; do
+ givepriority $i
+ [ ! "$FULLNAME" ] && continue
+ grep -q " ${NAME} " ${TMPDIR}/tmplist || \
+ LIST="$LIST ${FULLNAME}"
+ done
+ ;;
+ remove-template)
+ for i in $INPUTLIST ; do
+ givepriority $i
+ [ ! "$FULLNAME" ] && continue
+ grep -q " ${NAME} " ${TMPDIR}/tmplist && \
+ LIST="$LIST ${FULLNAME}"
+ done
+ ;;
+ search|file-search)
+ # -- temporary file used to store the basename of selected
+ # packages.
+
+ PKGNAMELIST=$(tempfile --directory=$TMPDIR)
+
+ if [ "$CMD" = "file-search" ]; then
+ # Search filelist.gz for possible matches
+ for i in ${PRIORITY[@]}; do
+ if [ -e ${WORKDIR}/${i}-filelist.gz ]; then
+ PKGS="$(zegrep -w "${INPUTLIST}" ${WORKDIR}/${i}-filelist.gz | \
+ cut -d\ -f 1 | awk -F'/' '{print $NF}')"
+ for FULLNAME in $PKGS ; do
+ NAME=$(cutpkg ${FULLNAME})
+ grep -q "^${NAME}$" $PKGNAMELIST && continue
+ LIST="$LIST ${FULLNAME}"
+ echo "$NAME" >> $PKGNAMELIST
+ done
+ fi
+ done
+ else
+ for i in ${PRIORITY[@]}; do
+ PKGS=$(grep "^${i}.*${PATTERN}" \
+ ${TMPDIR}/pkglist | cut -f6 -d\ )
+ for FULLNAME in $PKGS ; do
+ NAME=$(cutpkg ${FULLNAME})
+
+ grep -q "^${NAME}$" $PKGNAMELIST && continue
+ LIST="$LIST ${FULLNAME}"
+ echo "$NAME" >> $PKGNAMELIST
+ done
+ done
+ fi
+ rm -f $PKGNAMELIST
+ ;;
+ esac
+ LIST=$(echo -e $LIST | tr \ "\n" | uniq )
+
+ rm ${TMPDIR}/waiting
+
+ echo -e "DONE\n"
+}
+
+# Function to count total of packages
+#
+function countpkg() {
+ local COUNTPKG=$(echo -e "$1" | wc -w)
+
+ if [ "$COUNTPKG" != "0" ]; then
+ echo -e "Total package(s): $COUNTPKG\n"
+ fi
+}
+
+function answer() {
+ if [ "$BATCH" = "on" ]; then
+ ANSWER="$DEFAULT_ANSWER"
+ echo $DEFAULT_ANSWER
+ else
+ read ANSWER
+ fi
+}
+
+function searchlist() {
+ local i
+ local BASENAME
+ local RAWNAME
+ local STATUS
+ local INSTPKG
+
+ for i in $1; do
+ if [ "$BASENAME" = "$(cutpkg ${i})" ]; then
+ continue
+ fi
+ # BASENAME is base package name
+ BASENAME="$(cutpkg ${i})"
+
+ # RAWNAME is Latest available version
+ RAWNAME="${i/%.t[blxg]z/}"
+
+ # Default is uninstalled
+ STATUS="uninstalled"
+
+ # First is the package already installed?
+ # Amazing what a little sleep will do
+ # exclusion is so much nicer :)
+ INSTPKG=$(ls -1 $ROOT/var/log/packages | \
+ grep -e "^${BASENAME}-[^-]\+-\(${ARCH}\|fw\|noarch\)-[^-]\+")
+
+ # INSTPKG is local version
+ if [ ! "${INSTPKG}" = "" ]; then
+
+ # If installed is it uptodate?
+ if [ "${INSTPKG}" = "${RAWNAME}" ]; then
+ STATUS=" installed "
+ echo "[${STATUS}] - ${INSTPKG}"
+ else
+ STATUS=" upgrade "
+ echo "[${STATUS}] - ${INSTPKG} --> ${RAWNAME}"
+ fi
+ else
+ echo "[${STATUS}] - ${RAWNAME}"
+ fi
+ done
+}
+
+# Show the lists and asks if the user want to proceed with that action
+# Return accepted list in $SHOWLIST
+#
+function showlist() {
+ local ANSWER
+ local i
+
+ for i in $1; do echo $i; done | $MORECMD
+ echo
+ countpkg "$1"
+ echo -e "Do you wish to $2 selected packages (Y/n)? \c"
+ answer
+ if [ "$ANSWER" = "N" -o "$ANSWER" = "n" ]; then
+ cleanup
+ else
+ SHOWLIST="$1"
+ continue
+ fi
+}
+
+function getfile() {
+ if [ "$LOCAL" = "1" ]; then
+ echo -e "\t\t\tLinking $1..."
+ if [ -e $1 ]; then
+ ln -s $1 $2 2>/dev/null
+ else
+ return 1
+ fi
+ else
+ echo -e "\t\t\tDownloading $1..."
+ $DOWNLOADER $2 $1
+ fi
+}
+
+# Function to download the correct package and many "checks"
+#
+function getpkg() {
+ local ISOK="1"
+ local ERROR=""
+ local PKGNAME
+ local FULLPATH
+ local NAMEPKG
+ local CACHEPATH
+
+ PKGNAME=( $(grep -m 1 -- "[[:space:]]${1/%.t[blxg]z/}[[:space:]]" ${TMPDIR}/pkglist) )
+ NAMEPKG=${PKGNAME[5]}.${PKGNAME[7]}
+ FULLPATH=${PKGNAME[6]}
+ CACHEPATH=${TEMP}/${FULLPATH}
+
+ # Create destination dir if it isn't there
+ if ! [ -d $CACHEPATH ]; then
+ mkdir -p $CACHEPATH
+ fi
+
+ if ! [ -e ${CACHEPATH}/${NAMEPKG} ]; then
+ echo -e "\nPackage: $1"
+ # Check if the mirror are local, if is local, copy files
+ # to CACHEPATH else, download packages from remote host and
+ # put then in CACHEPATH
+ #
+ getfile ${SOURCE}${FULLPATH}/${NAMEPKG} \
+ ${CACHEPATH}/${NAMEPKG}
+ if [ "$CHECKGPG" = "on" ]; then
+ getfile ${SOURCE}${FULLPATH}/${NAMEPKG}.asc \
+ ${CACHEPATH}/${NAMEPKG}.asc
+ fi
+
+ if ! [ -e ${CACHEPATH}/$1 ]; then
+ ERROR="Not found"
+ ISOK="0"
+ echo -e "${NAMEPKG}:\t$ERROR" >> $TMPDIR/error.log
+ fi
+ else
+ echo -e "\tPackage $1 is already in cache - not downloading"
+ fi
+
+ # Check if we have sufficient disk space to install selected package
+ if [ "$CHECKSIZE" = "on" ] && [ "$ISOK" = "1" ]; then
+ ISOK=$(checksize ${CACHEPATH}/$1)
+ if [ "$ISOK" = "0" ]; then
+ ERROR="Insufficient disk space"
+ echo -e "${NAMEPKG}:\t$ERROR" >> $TMPDIR/error.log
+ fi
+ fi
+
+ # If MD5SUM checks are enabled in slackpkg.conf, check the
+ # packages md5sum to detect if they are corrupt or not
+ #
+ if [ "$CHECKMD5" = "on" ] && [ "$ISOK" = "1" ]; then
+ ISOK=$(checkmd5 ${CACHEPATH}/$1)
+ if [ "$ISOK" = "0" ]; then
+ ERROR="md5sum"
+ echo -e "${NAMEPKG}:\t$ERROR" >> $TMPDIR/error.log
+ fi
+ if [ "$CHECKGPG" = "on" ] && [ "$ISOK" = "1" ]; then
+ ISOK=$(checkmd5 ${CACHEPATH}/$1.asc)
+ if [ "$ISOK" = "0" ]; then
+ ERROR="md5sum"
+ echo -e "${NAMEPKG}.asc:\t$ERROR" >> \
+ $TMPDIR/error.log
+ fi
+ fi
+ fi
+
+ # Check the package against its .asc. If you don't like this
+ # disable GPG checking in /etc/slackpkg/slackpkg.conf
+ #
+ if [ "$CHECKGPG" = "on" ] && [ "$ISOK" = "1" ]; then
+ ISOK=$(checkgpg ${CACHEPATH}/$1)
+ if [ "$ISOK" = "0" ]; then
+ ERROR="gpg"
+ echo -e "${NAMEPKG}:\t$ERROR" >> $TMPDIR/error.log
+ fi
+ fi
+
+ if [ "$ISOK" = "1" ]; then
+ case $2 in
+ installpkg)
+ echo -e "\tInstalling ${1/%.t[blxg]z/}..."
+ ;;
+ upgradepkg)
+ echo -e "\tUpgrading ${1/%.t[blxg]z/}..."
+ ;;
+ *)
+ echo -e "\c"
+ ;;
+ esac
+ ( cd $CACHEPATH && $2 $1 )
+ else
+ rm $CACHEPATH/$1 2>/dev/null
+ echo -e "\tERROR - Package not installed! $ERROR error!"
+ fi
+
+ # If DELALL is checked, all downloaded files will be erased
+ # after installed/upgraded/reinstalled
+ #
+ if [ "$DELALL" = "on" ]; then
+ rm $CACHEPATH/$1 $CACHEPATH/${1}.asc 2>/dev/null
+ fi
+}
+
+# Main logic to download and format package list, md5 etc.
+#
+function checkchangelog()
+{
+ if ! [ -e ${WORKDIR}/ChangeLog.txt ]; then
+ touch ${WORKDIR}/ChangeLog.txt
+ fi
+
+ echo -e "\tDownloading..."
+ #
+ # Download ChangeLog.txt first of all and test if it's equal
+ # or different from our already existent ChangeLog.txt
+ #
+ getfile ${SOURCE}ChangeLog.txt $TMPDIR/ChangeLog.txt
+ if ! grep -q "[a-z]" $TMPDIR/ChangeLog.txt ; then
+ echo -e "\
+\nError downloading from $SOURCE.\n\
+Please check your mirror and try again."
+ cleanup
+ fi
+
+ if diff --brief ${WORKDIR}/ChangeLog.txt $TMPDIR/ChangeLog.txt ; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+function updatefilelists()
+{
+ if checkchangelog ; then
+ echo -e "\
+\n\t\tNo changes in ChangeLog.txt between your last update and now.\n\
+\t\tDo you really want to download all other files (y/N)? \c"
+ answer
+ if [ "$ANSWER" != "Y" ] && [ "$ANSWER" != "y" ]; then
+ cleanup
+ fi
+ fi
+ echo
+ cp ${TMPDIR}/ChangeLog.txt ${WORKDIR}/ChangeLog.txt
+
+ #
+ # Download MANIFEST, FILELIST.TXT and CHECKSUMS.md5
+ #
+
+ # That will be download MANIFEST.bz2 files
+ #
+ echo -e "\t\tList of all files"
+ for i in ${PRIORITY[@]} ; do
+ getfile ${SOURCE}${i}/MANIFEST.bz2 $TMPDIR/${i}-MANIFEST.bz2 && \
+ DIRS="$DIRS $i"
+ done
+
+ ISOK="1"
+ echo -e "\t\tChecksums"
+ getfile ${SOURCE}CHECKSUMS.md5 ${TMPDIR}/CHECKSUMS.md5
+ getfile ${SOURCE}CHECKSUMS.md5.asc ${TMPDIR}/CHECKSUMS.md5.asc
+ if ! [ -e "${TMPDIR}/CHECKSUMS.md5" ]; then
+ echo -e "\
+\n\t\tWARNING: Your mirror appears incomplete and is missing the\n\
+\t\t CHECKSUMS.md5 file. We recommend you change your mirror\n\
+\t\t so that package integrity can be verified against \n\
+\t\t CHECKSUMS.md5.\n"
+ sleep 10
+ else
+ if [ "$CHECKGPG" = "on" ]; then
+ ISOK=$(checkgpg ${TMPDIR}/CHECKSUMS.md5)
+ if [ "$ISOK" = "0" ]; then
+ rm $TMPDIR/CHECKSUMS.md5
+ rm $TMPDIR/CHECKSUMS.md5.asc
+ echo -e "\
+\n\t\tERROR: Verification of the gpg signature on CHECKSUMS.md5\n\
+\t\t failed! This could mean that the file is out of date\n\
+\t\t or has been tampered with.\n"
+ cleanup
+ fi
+ elif [ "$SLACKKEY" != "" ]; then
+ echo -e "\
+\n\t\tWARNING: Without CHECKGPG, we can't check if this file is\n\
+\t\t signed by:\n\
+\n\t\t $SLACKKEY.\n\
+\n\t\t Enabling CHECKGPG is highly recommended for best\n\
+\t\t security.\n"
+ sleep 10
+ fi
+ fi
+
+ ISOK="1"
+ echo -e "\t\tPackage List"
+ getfile ${SOURCE}FILELIST.TXT ${TMPDIR}/FILELIST.TXT
+ if [ "$CHECKMD5" = "on" ]; then
+ CHECKSUMSFILE=${TMPDIR}/CHECKSUMS.md5
+ ISOK=$(checkmd5 ${TMPDIR}/FILELIST.TXT)
+ fi
+ if [ "$ISOK" = "1" ]; then
+ if ! [ -e $WORKDIR/LASTUPDATE ]; then
+ echo "742868196" > $WORKDIR/LASTUPDATE
+ fi
+ LASTUPDATE=$(cat $WORKDIR/LASTUPDATE)
+ ACTUALDATE=$(date -d "$(head -1 $TMPDIR/FILELIST.TXT)" "+%s")
+ if [ $ACTUALDATE -lt $LASTUPDATE ]; then
+ echo -e "\
+\n\t\tFILELIST.TXT seems to be older than the last one.\n\
+\t\tDo you really want to continue (y/N)? \c"
+ answer
+ if [ "$ANSWER" != "Y" ] && [ "$ANSWER" != "y" ]; then
+ cleanup
+ fi
+ echo
+ fi
+ echo $ACTUALDATE > $WORKDIR/LASTUPDATE
+ else
+ rm $TMPDIR/FILELIST.TXT
+ fi
+
+ if [ -e $TMPDIR/CHECKSUMS.md5 ]; then
+ FILELIST="$TMPDIR/CHECKSUMS.md5"
+ elif [ -e $TMPDIR/FILELIST.TXT ]; then
+ if [ "$ISOK" = "0" ]; then
+ echo -e "\
+\n\t\tERROR: CHECKSUMS.md5 signature doesn't match!\n\
+\t\t We strongly recommend that you change your mirror\n\
+\t\t to prevent security problems.\n"
+ cleanup
+ fi
+ sleep 10
+ FILELIST="$TMPDIR/FILELIST.TXT"
+ else
+ echo -e "\
+\n\t\tERROR: No CHECKSUMS.md5 and no FILELIST.TXT.\n\
+\t\t We strongly recommend that you change your mirror\n\
+\t\t to prevent security problems.\n"
+ cleanup
+ fi
+
+ # Download all PACKAGES.TXT files
+ #
+ echo -e "\t\tPackage descriptions"
+ for i in $DIRS; do
+ getfile ${SOURCE}${i}/PACKAGES.TXT $TMPDIR/${i}-PACKAGES.TXT
+ done
+
+ # Format FILELIST.TXT
+ #
+ echo -e "\tFormatting lists to slackpkg style..."
+ echo -e "\t\tPackage List: using $( basename $FILELIST ) as source"
+ grep "\.t[blxg]z$" $FILELIST| \
+ awk -f /usr/libexec/slackpkg/pkglist.awk |\
+ sed -e 's/^M//g' > ${TMPDIR}/pkglist
+ cp ${TMPDIR}/pkglist ${WORKDIR}/pkglist
+
+ # Create the slackware tree under TEMP directory
+ for i in $( cut -f7 -d\ ${WORKDIR}/pkglist | sort -u ) ; do
+ if ! [ -d ${TEMP}/${i} ]; then
+ mkdir -p ${TEMP}/${i}
+ fi
+ done
+
+ # Format MANIFEST
+ #
+
+ # bunzip and concatenate all MANIFEST files
+ #
+ MANFILES=""
+ for i in $DIRS; do
+ bunzip2 -c $TMPDIR/${i}-MANIFEST.bz2 | awk -f /usr/libexec/slackpkg/filelist.awk | \
+ gzip > ${TMPDIR}/${i}-filelist.gz
+ done
+ cp ${TMPDIR}/*-filelist.gz ${WORKDIR}/
+
+ if [ -r ${WORKDIR}/filelist.gz ]; then
+ rm ${WORKDIR}/filelist.gz
+ ln -s ${WORKDIR}/${MAIN}-filelist.gz ${WORKDIR}/filelist.gz
+ fi
+
+ # Concatenate PACKAGE.TXT files
+ #
+ echo -e "\t\tPackage descriptions"
+ for i in $DIRS; do
+ cat $TMPDIR/${i}-PACKAGES.TXT >> $TMPDIR/PACKAGES.TXT
+ done
+ cp $TMPDIR/PACKAGES.TXT ${WORKDIR}/PACKAGES.TXT
+
+ if [ -e $TMPDIR/CHECKSUMS.md5 ]; then
+ cp $TMPDIR/CHECKSUMS.md5 $WORKDIR/CHECKSUMS.md5 2>/dev/null
+ fi
+
+ if [ -e $TMPDIR/CHECKSUMS.md5.asc ]; then
+ cp $TMPDIR/CHECKSUMS.md5.asc \
+ $WORKDIR/CHECKSUMS.md5.asc 2>/dev/null
+ fi
+}
+
+function sanity_check() {
+ local REVNAME
+ local i
+ local FILES
+ local DOUBLEFILES
+ local ANSWER
+
+ touch ${TMPDIR}/waiting
+ echo -e "Checking local integrity... \c"
+
+ [ "$SPINNING" = "off" ] || spinning ${TMPDIR}/waiting &
+
+ for i in $(ls -1 $ROOT/var/log/packages | \
+ egrep -- "^.*-(${ARCH}|fw|noarch)-[^-]+-upgraded"); do
+ REVNAME=$(echo ${i} | awk -F'-upgraded' '{ print $1 }')
+ mv $ROOT/var/log/packages/${i} $ROOT/var/log/packages/${REVNAME}
+ mv $ROOT/var/log/scripts/${i} $ROOT/var/log/scripts/${REVNAME}
+ done
+
+ ls -1 $ROOT/var/log/packages | egrep "^.*-(${ARCH}|fw|noarch)-[^-]+$" | \
+ batchcutpkg | sort > $TMPDIR/list1
+ cat $TMPDIR/list1 | uniq > $TMPDIR/list2
+ FILES="$(diff $TMPDIR/list1 $TMPDIR/list2 | grep '<' | cut -f2 -d\ )"
+ if [ "$FILES" != "" ]; then
+ for i in $FILES ; do
+ grep -qx "${i}" ${CONF}/blacklist && continue
+ DOUBLEFILES="$DOUBLEFILES $i"
+ done
+ unset FILES
+ fi
+
+ rm ${TMPDIR}/waiting
+ echo -e "DONE"
+
+ if [ "$DOUBLEFILES" != "" ]; then
+ echo -e "\
+You have a broken $ROOT/var/log/packages - with two versions of the same package.\n\
+The list of packages duplicated in your machine are shown below, but don't\n\
+worry about this list - when you select your action, slackpkg will show a\n\
+better list:\n"
+ for i in $DOUBLEFILES ; do
+ ls -1 $ROOT/var/log/packages |\
+ egrep -i -- "^${i}-[^-]+-(${ARCH}|fw|noarch)-"
+ done
+ echo -ne "\n\
+You can (B)lacklist, (R)emove, or (I)gnore these packages.\n\
+Select your action (B/R/I): "
+ read ANSWER
+ echo
+ case "$ANSWER" in
+ B|b)
+ showlist "$DOUBLEFILES" blacklist
+ blacklist_pkg
+ ;;
+ R|r)
+ for i in $DOUBLEFILES ; do
+ FILE=$(ls -1 $ROOT/var/log/packages |\
+ egrep -i -- "^${i}-[^-]+-(${ARCH}|fw|noarch)-")
+ FILES="$FILES $FILE"
+ done
+ showlist "$FILES" remove
+ remove_pkg
+ ;;
+ *)
+ echo -e "\n\
+Okay - slackpkg won't do anything now, but please, do something to fix it.\n"
+ cleanup
+ ;;
+ esac
+ fi
+}
+
+function blacklist_pkg() {
+ echo $SHOWLIST | tr ' ' "\n" >> ${CONF}/blacklist
+
+ echo -e "\nPackages added to your blacklist.\n\
+If you want to remove those packages, edit ${CONF}/blacklist.\n"
+}
+
+function remove_pkg() {
+ local i
+
+ for i in $SHOWLIST; do
+ echo -e "\nPackage: $i"
+ echo -e "\tRemoving... "
+ removepkg $i
+ done
+}
+
+function upgrade_pkg() {
+ local i
+
+ if [ "$DOWNLOAD_ALL" = "on" ]; then
+ OLDDEL="$DELALL"
+ DELALL="off"
+ for i in $SHOWLIST; do
+ getpkg $i true
+ done
+ DELALL="$OLDDEL"
+ fi
+ for i in $SHOWLIST; do
+ getpkg $i upgradepkg Upgrading
+ done
+}
+
+function install_pkg() {
+ local i
+
+ if [ "$DOWNLOAD_ALL" = "on" ]; then
+ OLDDEL="$DELALL"
+ DELALL="off"
+ for i in $SHOWLIST; do
+ getpkg $i true
+ done
+ DELALL="$OLDDEL"
+ fi
+ for i in $SHOWLIST; do
+ getpkg $i installpkg Installing
+ done
+}
+
+#
+# Template related functions
+#
+include_includes() {
+ TEMPLATEFILE=$1
+ COUNT=$((COUNT + 1))
+ TMPFILE=$TMPDIR/$(basename $( echo $TEMPLATEFILE | cut -f1,2 -d. )).$COUNT.tmp
+ INCLUDELIST="$( grep "^#include" $TEMPLATEFILE | cut -d\ -f2 )"
+ if [ "$INCLUDELIST" != "" ]; then
+ for INCLUDE in $INCLUDELIST ; do
+ echo "#include $INCLUDE" \
+ >> ${TMPFILE/.$COUNT/}.header
+ cat $INCLUDE > $TMPFILE
+ grep -v "^$" $TEMPLATEFILE | grep -v "^#" >> $TMPFILE
+ include_includes $TMPFILE
+ done
+ else
+ echo $TEMPLATEFILE
+ return
+ fi
+}
+
+parse_template() {
+ if [ "$USE_INCLUDES" = "off" ]; then
+ touch $TMPDIR/$1.header
+ grep -v "^$" $1 | grep -v "^#" | sort -u > $TMPDIR/$1.tmp
+ else
+ TMPFILE=$(include_includes $1)
+ sort -u $TMPFILE > $TMPDIR/$1.tmp
+ if [ -e $TMPDIR/$1.tmp.header ]; then
+ sort -u $TMPDIR/$1.tmp.header > $TMPDIR/$1.header
+ fi
+ rm $TMPDIR/$1.[0-9]*.tmp $TMPDIR/$1.tmp.header 2>/dev/null
+ fi
+}
+
+generate_template() {
+ if [ "$USE_INCLUDES" = "on" ]; then
+ (
+ cd $TEMPLATEDIR
+ if [ "$(ls *.template 2>/dev/null)" != "" ]; then
+ echo -e "\tParsing actual template files:"
+ for i in *.template ; do
+ echo -e "\t\t$i"
+ parse_template $i
+ done
+ fi
+ )
+ fi
+
+ touch $TMPDIR/allheaders
+
+ touch $TMPDIR/waiting
+ echo -e "\tGenerating slackware installed package list (this may take a while) \c"
+ [ "$SPINNING" = "off" ] || spinning ${TMPDIR}/waiting &
+ for i in $ROOT/var/log/packages/* ; do
+ PKGNAME=$( cutpkg $(basename $i))
+ grep -q " $PKGNAME " ${WORKDIR}/pkglist && \
+ echo $PKGNAME >> $TMPDIR/$TEMPLATE.work
+ done
+ rm $TMPDIR/waiting
+ echo " "
+
+ echo -e "\tGenerating $TEMPLATE "
+ for TMPLATE in $( wc -l $TMPDIR/* | sort -r | \
+ awk -F/ '/template.tmp/ { print $NF }'); do
+ if ! $( grep -q "^#include.*${TMPLATE/.tmp/}" \
+ $TMPDIR/allheaders) ; then
+ diff -y $TMPDIR/$TEMPLATE.work $TMPDIR/$TMPLATE | \
+ awk -vTMPDIR=$TMPDIR \
+ '!/</ { print $1 > TMPDIR"/same" }
+ /</ { print $1 > TMPDIR"/notsame" }'
+ if $( diff -q $TMPDIR/$TMPLATE \
+ $TMPDIR/same &>/dev/null ); then
+ echo "#include ${TMPLATE/.tmp/}" \
+ >> $TMPDIR/$TEMPLATE.header
+ cat $TMPDIR/${TMPLATE/.tmp/}.header \
+ >> $TMPDIR/allheaders 2>/dev/null
+ cat $TMPDIR/same >> $TMPDIR/allfiles
+ fi
+ fi
+ done
+
+ if [ -e $TMPDIR/allfiles ]; then
+ sort -u $TMPDIR/allfiles > $TMPDIR/alluniqfiles
+ else
+ touch $TMPDIR/alluniqfiles
+ fi
+ if [ -e $TMPDIR/$TEMPLATE.header ]; then
+ cat $TMPDIR/$TEMPLATE.header > $TEMPLATEDIR/$TEMPLATE
+ fi
+ diff $TMPDIR/alluniqfiles $TMPDIR/$TEMPLATE.work |\
+ awk '/>/ { print $2 }' >> $TEMPLATEDIR/$TEMPLATE
+}
diff --git a/files/cutpkg.awk b/files/cutpkg.awk
new file mode 100644
index 0000000..62aaad7
--- /dev/null
+++ b/files/cutpkg.awk
@@ -0,0 +1,8 @@
+OFS="-" {
+ if ( NF > 3 ) {
+ NF=NF-3
+ print $0
+ } else {
+ print $0
+ }
+}
diff --git a/files/dialog-functions.sh b/files/dialog-functions.sh
new file mode 100644
index 0000000..042906c
--- /dev/null
+++ b/files/dialog-functions.sh
@@ -0,0 +1,75 @@
+# Dialog functions
+# Original functions from slackpkg modified by Marek Wodzinski (majek@mamy.to)
+#
+export DIALOG_CANCEL="1"
+export DIALOG_ERROR="126"
+export DIALOG_ESC="1"
+export DIALOG_EXTRA="3"
+export DIALOG_HELP="2"
+export DIALOG_ITEM_HELP="2"
+export DIALOG_OK="0"
+
+# Show the lists and asks if the user want to proceed with that action
+# Return accepted list in $SHOWLIST
+#
+if [ "$DIALOG" = "on" ] || [ "$DIALOG" = "ON" ]; then
+ function showlist() {
+ if [ "$ONOFF" != "off" ]; then
+ ONOFF=on
+ fi
+ rm -f $TMPDIR/dialog.tmp
+
+ if [ "$2" = "upgrade" ]; then
+ ls -1 $ROOT/var/log/packages > $TMPDIR/tmplist
+ for i in $1; do
+ BASENAME=$(cutpkg $i)
+ PKGFOUND=$(grep -m1 -e "^${BASENAME}-[^-]\+-\(noarch\|fw\|${ARCH}\)" $TMPDIR/tmplist)
+ echo "$i \"\" $ONOFF \"currently installed: $PKGFOUND\"" >>$TMPDIR/dialog.tmp
+ done
+ HINT="--item-help"
+ else
+ for i in $1; do
+ echo "$i \"\" $ONOFF" >>$TMPDIR/dialog.tmp
+ done
+ HINT=""
+ fi
+
+ # This is needed because dialog have a limit of arguments.
+ # This limit is around 20k characters in slackware 10.x
+ # Empiric tests on slackware 13.0 got a limit around 139k.
+ # If we exceed this limit, dialog got a terrible error, to
+ # avoid that, if the number of arguments is bigger than
+ # DIALOG_MAXARGS we remove the hints. If even without hints
+ # we can't got less characters than DIALOG_MAXARGS we give an
+ # error message to the user ask him to not use dialog
+ if [ $(wc -c $TMPDIR/dialog.tmp | cut -f1 -d\ ) -ge $DIALOG_MAXARGS ]; then
+ mv $TMPDIR/dialog.tmp $TMPDIR/dialog2.tmp
+ awk '{ NF=3 ; print $0 }' $TMPDIR/dialog2.tmp > $TMPDIR/dialog.tmp
+ HINT=""
+ fi
+ cat $TMPDIR/dialog.tmp|xargs dialog --title $2 --backtitle "slackpkg $VERSION" $HINT --checklist "Choose packages to $2:" 19 70 13 2>$TMPDIR/dialog.out
+ case "$?" in
+ 0|123)
+ dialog --clear
+ ;;
+ 1|124|125|126|127)
+ dialog --clear
+ echo -e "DIALOG ERROR:\n-------------" >> $TMPDIR/error.log
+ cat $TMPDIR/dialog.out >> $TMPDIR/error.log
+ echo -e "-------------
+If you want to continue using slackpkg, disable the DIALOG option in
+/etc/slackpkg/slackpkg.conf and try again.
+
+Help us to make slackpkg a better tool - report bugs to the slackpkg
+developers" >> $TMPDIR/error.log
+ cleanup
+ ;;
+ esac
+ SHOWLIST=$(cat $TMPDIR/dialog.out | tr -d \")
+ rm -f $TMPDIR/dialog.*
+ if [ -z "$SHOWLIST" ]; then
+ echo "No packages selected for $2, exiting."
+ cleanup
+ fi
+ }
+fi
diff --git a/files/filelist.awk b/files/filelist.awk
new file mode 100644
index 0000000..291624b
--- /dev/null
+++ b/files/filelist.awk
@@ -0,0 +1,28 @@
+BEGIN {
+ starting = 1
+}
+
+/^\|\|[[:blank:]]+Package:[[:blank:]]+.*-[[:alnum:]_]+-[[:alnum:]_.]+\.t[blxg]z$/ {
+ if( starting == 1 )
+ starting = 0
+ else
+ printf( "\n" )
+ printf( "%s ", $3 )
+ show = 1
+}
+
+/^\|\|[[:blank:]]+Package:[[:blank:]]+/ && !/t[blxg]z/ {
+ show = 0
+}
+
+/^[-bcdlps][-r][-w][-xsS][-r][-w][-xsS][-r][-w][-xtT][[:space:]]/ {
+ if( show == 1 ) {
+ printf( "%s ", $6 )
+ }
+}
+
+
+
+END {
+ printf( "\n" )
+}
diff --git a/files/install-new.awk b/files/install-new.awk
new file mode 100644
index 0000000..d2fd4ee
--- /dev/null
+++ b/files/install-new.awk
@@ -0,0 +1,45 @@
+/^(a|ap|d|e|f|k|kde|kdei|l|mac|n|t|tcl|x|xap|xfce|y)\/([a-zA-Z0-9_\+.\-]+):.* ([Aa]dded|[Ss]plit|[Rr]enamed|[Mm]oved|[Nn]ame [Cc]hange|NAME CHANGE|[Ss]witched).*/ {
+ INPUT=$1
+ fs=FS
+ FS="/" ; OFS="/"
+ $0=INPUT
+ FULLPACK=$NF
+ FS="-" ; OFS="-"
+ $0=FULLPACK
+ if ( NF > 3 ) {
+ NF=NF-3
+ } else {
+ FS=":" ; OFS=":"
+ $0=$0
+ $0=$1
+ }
+ FS=fs
+ CONTINUE=no
+ print $0
+}
+
+/^(a|ap|d|e|f|k|kde|kdei|l|mac|n|t|tcl|x|xap|xfce|y)\/([a-zA-Z0-9_\+.\-]+): *$/ {
+ INPUT=$1
+ fs=FS
+ FS="/" ; OFS="/"
+ $0=INPUT
+ FULLPACK=$NF
+ FS="-" ; OFS="-"
+ $0=FULLPACK
+ if ( NF > 3 ) {
+ NF=NF-3
+ } else {
+ FS=":"
+ $0=$1
+ }
+ FS=fs
+ CONTINUE=yes
+ NAME=$0
+}
+
+/^ *([Aa]dded|[Ss]plit|[Rr]enamed|[Mm]oved|[Nn]ame [Cc]hange|NAME CHANGE|[Ss]witched).*/ {
+ if ( CONTINUE==yes ) {
+ print NAME
+ }
+ CONTINUE=no
+}
diff --git a/files/mirrors-arm.sample b/files/mirrors-arm.sample
new file mode 100644
index 0000000..8a42d7b
--- /dev/null
+++ b/files/mirrors-arm.sample
@@ -0,0 +1,78 @@
+# mirrors - List of Slackware Linux mirrors.
+#
+# SlackPkg - An Automated packaging tool for Slackware Linux
+# Copyright (C) 2003-2011 Roberto F. Batista, Evaldo Gardenali
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Project Page: http://slackpkg.org/
+# Roberto F. Batista (aka PiterPunk) piterpunk@slackware.com
+# Evaldo Gardenali (aka UdontKnow) evaldogardenali@fasternet.com.br
+#
+# END OF LEGAL NOTICE
+#
+#
+# You only need to select one mirror and uncomment it.
+# ONLY ONE mirror can be uncommented.
+#
+# You can use a mirror not included in this file. Many people have mirrors
+# in their local networks.
+#
+# Slackpkg only needs to point to the directory that contains
+# "ChangeLog.txt", and don't forget the trailing slash.
+#
+#----------------------------------------------------------------
+# Local CD/DVD drive
+#----------------------------------------------------------------
+#cdrom://media/cdrom/
+#
+#----------------------------------------------------------------
+# Local Directory
+#----------------------------------------------------------------
+#file://path/to/some/directory/
+#
+#----------------------------------------------------------------
+# Local CD/DVD drive
+#----------------------------------------------------------------
+#cdrom://media/cdrom/
+#
+#----------------------------------------------------------------
+# Local Directory
+#----------------------------------------------------------------
+#file://path/to/some/directory/
+#
+#----------------------------------------------------------------
+# Slackware ARM x.x (for an assumed release of the hard float port)
+#----------------------------------------------------------------
+#ftp://slackware.uk/slackwarearm/slackwarearm-x.x/
+#ftp://ftp.halifax.rwth-aachen.de/slackwarearm/slackwarearm-x.x/
+#ftp://ftp.slackware.pl/pub/slackwarearm/slackwarearm-x.x/
+#ftp://mirrors.vbi.vt.edu/linux/slackwarearm/slackwarearm-x.x/
+#ftp://mirror.slackbuilds.org/pub/slackwarearm/slackwarearm-x.x/
+#
+#ftp://ftp.arm.slackware.com/slackwarearm/slackwarearm-x.x/
+#
+
+#----------------------------------------------------------------
+# Slackware ARM current
+#----------------------------------------------------------------
+#ftp://slackware.uk/slackwarearm/slackwarearm-current/
+#ftp://ftp.halifax.rwth-aachen.de/slackwarearm/slackwarearm-current/
+#ftp://ftp.slackware.pl/pub/slackwarearm/slackwarearm-current/
+#ftp://mirrors.vbi.vt.edu/linux/slackwarearm/slackwarearm-current/
+#ftp://mirror.slackbuilds.org/pub/slackwarearm/slackwarearm-current/
+#
+#ftp://ftp.arm.slackware.com/slackwarearm/slackwarearm-current/
+
diff --git a/files/mirrors-s390.sample b/files/mirrors-s390.sample
new file mode 100644
index 0000000..03cad82
--- /dev/null
+++ b/files/mirrors-s390.sample
@@ -0,0 +1,43 @@
+# mirrors - List of Slackware Linux mirrors.
+#
+# SlackPkg - An Automated packaging tool for Slackware Linux
+# Copyright (C) 2003-2011 Roberto F. Batista, Evaldo Gardenali
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Project Page: http://slackpkg.org/
+# Roberto F. Batista (aka PiterPunk) piterpunk@slackware.com
+# Evaldo Gardenali (aka UdontKnow) evaldogardenali@fasternet.com.br
+#
+# END OF LEGAL NOTICE
+#
+#
+# You only need to select one mirror and uncomment them. Please,
+# ONLY ONE mirror can be uncommented each time.
+#
+# You can include new mirrors in this file. Many people have mirrors
+# in their local networks. Slackpkg only needs to point to the
+# directory that contains "ChangeLog.txt", and don't forget the
+# trailling slash.
+#
+#----------------------------------------------------------------
+# Local CD/DVD drive
+#----------------------------------------------------------------
+#cdrom://media/cdrom/
+#
+#----------------------------------------------------------------
+# Local Directory
+#----------------------------------------------------------------
+#file://path/to/some/directory/
diff --git a/files/mirrors-x86.sample b/files/mirrors-x86.sample
new file mode 100644
index 0000000..922bc17
--- /dev/null
+++ b/files/mirrors-x86.sample
@@ -0,0 +1,370 @@
+# mirrors - List of Slackware Linux mirrors.
+#
+# SlackPkg - An Automated packaging tool for Slackware Linux
+# Copyright (C) 2003-2011 Roberto F. Batista, Evaldo Gardenali
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Project Page: http://slackpkg.org/
+# Roberto F. Batista (aka PiterPunk) piterpunk@slackware.com
+# Evaldo Gardenali (aka UdontKnow) evaldogardenali@fasternet.com.br
+#
+# END OF LEGAL NOTICE
+#
+#
+# You only need to select one mirror and uncomment it.
+# ONLY ONE mirror can be uncommented.
+#
+# You can use a mirror not included in this file. Many people have mirrors
+# in their local networks. A list of all official Slackware mirrors
+# (not version-specific, so some mirrors may not have all files) is here:
+# https://mirrors.slackware.com/mirrorlist/
+#
+# Slackpkg only needs to point to the directory that contains
+# "ChangeLog.txt", and don't forget the trailing slash.
+#
+#----------------------------------------------------------------
+# Local CD/DVD drive
+#----------------------------------------------------------------
+# cdrom://media/cdrom/
+#
+#----------------------------------------------------------------
+# Local Directory
+#----------------------------------------------------------------
+# file://path/to/some/directory/
+#
+#----------------------------------------------------------------
+# Slackware-14.2
+#----------------------------------------------------------------
+# USE MIRRORS.SLACKWARE.COM (DO NOT USE FTP - ONLY HTTP FINDS A NEARBY MIRROR)
+# https://mirrors.slackware.com/slackware/slackware-14.2/
+#
+#
+# Here are some individual mirrors that can be used instead of the
+# redirector at mirrors.slackware.com if necessary ; note that this
+# list is not guaranteed to be up-to-date
+#
+# AUSTRALIA (AU)
+# ftp://ftp.cc.swin.edu.au/slackware/slackware-14.2/
+# http://ftp.cc.swin.edu.au/slackware/slackware-14.2/
+# ftp://ftp.iinet.net.au/pub/slackware/slackware-14.2/
+# http://ftp.iinet.net.au/pub/slackware/slackware-14.2/
+# ftp://mirror.as24220.net/pub/slackware/slackware-14.2/
+# http://mirror.as24220.net/pub/slackware/slackware-14.2/
+# ftp://mirror.internode.on.net/.pub2/slackware/slackware-14.2/
+# http://mirror.internode.on.net/pub/slackware/slackware-14.2/
+# AUSTRIA (AT)
+# http://gd.tuwien.ac.at/opsys/linux/freesoftware.com/slackware-14.2/
+# BELARUS (BY)
+# ftp://mirror.datacenter.by/pub/slackware/slackware-14.2/
+# http://mirror.datacenter.by/pub/slackware/slackware-14.2/
+# BRAZIL (BR)
+# ftp://ftp.slackware-brasil.com.br/slackware-14.2/
+# http://ftp.slackware-brasil.com.br/slackware-14.2/
+# BULGARIA (BG)
+# ftp://mirrors.unixsol.org/slackware/slackware-14.2/
+# http://mirrors.unixsol.org/slackware/slackware-14.2/
+# CANADA (CA)
+# ftp://mirror.csclub.uwaterloo.ca/slackware/slackware-14.2/
+# http://mirror.csclub.uwaterloo.ca/slackware/slackware-14.2/
+# ftp://mirror.its.dal.ca/slackware/slackware-14.2/
+# http://mirror.its.dal.ca/slackware/slackware-14.2/
+# CHINA (CN)
+# http://mirrors.163.com/slackware/slackware-14.2/
+# http://mirrors.ustc.edu.cn/slackware/slackware-14.2/
+# COSTA RICA (CR)
+# ftp://mirrors.ucr.ac.cr/slackware/pub/slackware/slackware-14.2/
+# http://mirrors.ucr.ac.cr/slackware/pub/slackware/slackware-14.2/
+# CZECH REPUBLIC (CZ)
+# ftp://odysseus.linux.cz/pub/linux/slackware/slackware-14.2/
+# http://odysseus.linux.cz/pub/linux/slackware/slackware-14.2/
+# DENMARK (DK)
+# ftp://mirrors.dotsrc.org/slackware/slackware-14.2/
+# https://mirrors.dotsrc.org/slackware/slackware-14.2/
+# FINLAND (FI)
+# ftp://elektroni.phys.tut.fi/slackware-14.2/
+# FRANCE (FR)
+# ftp://nephtys.lip6.fr/pub/linux/distributions/slackware/slackware-14.2/
+# http://nephtys.lip6.fr/pub/linux/distributions/slackware/slackware-14.2/
+# GERMANY (DE)
+# ftp://ftp.gwdg.de/pub/linux/slackware/slackware-13.2/
+# http://ftp.gwdg.de/pub/linux/slackware/slackware-14.2/
+# ftp://ftp.tu-chemnitz.de/pub/linux/slackware/slackware-14.2/
+# http://ftp.tu-chemnitz.de/pub/linux/slackware/slackware-14.2/
+# ftp://ftp.zimt.uni-siegen.de/pub/slackware/slackware-14.2/
+# http://ftp.zimt.uni-siegen.de/slackware/slackware-14.2/
+# ftp://sunsite.informatik.rwth-aachen.de/pub/comp/Linux/slackware/slackware-14.2/
+# http://sunsite.informatik.rwth-aachen.de/ftp/pub/comp/Linux/slackware/slackware-14.2/
+# GREECE (GR)
+# ftp://ftp.cc.uoc.gr/mirrors/linux/slackware/slackware-14.2/
+# http://ftp.cc.uoc.gr/mirrors/linux/slackware/slackware-14.2/
+# ftp://ftp.otenet.gr/pub/linux/slackware/slackware-14.2/
+# http://ftp.otenet.gr/linux/slackware/slackware-14.2/
+# ftp://patroklos.noc.ntua.gr/pub/linux/slackware/slackware-14.2/
+# http://patroklos.noc.ntua.gr/pub/linux/slackware/slackware-14.2/
+# INDONESIA (ID)
+# http://kambing.ui.ac.id/slackware/slackware-14.2/
+# https://repo.ukdw.ac.id/slackware/slackware-14.2/
+# IRELAND (IE)
+# ftp://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware-14.2/
+# http://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware-14.2/
+# ITALY (IT)
+# ftp://ba.mirror.garr.it/mirrors/Slackware/slackware-14.2/
+# http://ba.mirror.garr.it/mirrors/Slackware/slackware-14.2/
+# JAPAN (JP)
+# ftp://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware-14.2/
+# http://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware-14.2/
+# ftp://ftp.kddilabs.jp/Linux/distributions/Slackware/slackware-14.2/
+# http://ftp.kddilabs.jp/Linux/distributions/Slackware/slackware-14.2/
+# ftp://riksun.riken.go.jp/Linux/slackware/slackware-14.2/
+# http://riksun.riken.go.jp/Linux/slackware/slackware-14.2/
+# NETHERLANDS (NL)
+# ftp://ftp.nluug.nl/pub/os/Linux/distr/slackware/slackware-14.2/
+# http://ftp.nluug.nl/os/Linux/distr/slackware/slackware-14.2/
+# ftp://mirror.nl.leaseweb.net/slackware/slackware-14.2/
+# http://mirror.nl.leaseweb.net/slackware/slackware-14.2/
+# NORWAY (NO)
+# ftp://ftp.slackware.no/slackware/slackware-14.2/
+# http://ftp.slackware.no/slackware/slackware-14.2/
+# POLAND (PL)
+# ftp://ftp.pwr.wroc.pl/pub/linux/slackware/slackware-14.2/
+# http://ftp.pwr.wroc.pl/pub/linux/slackware/slackware-14.2/
+# ftp://ftp.slackware.pl/pub/slackware/slackware-14.2/
+# http://ftp.slackware.pl/pub/slackware/slackware-14.2/
+# ftp://sunsite.icm.edu.pl/vol/rzm1/linux-slackware/slackware-14.2/
+# http://sunsite.icm.edu.pl/packages/linux-slackware/slackware-14.2/
+# ftp://z-ftp.wcss.wroc.pl/pub/linux/slackware/slackware-14.2/
+# http://z-ftp.wcss.wroc.pl/pub/linux/slackware/slackware-14.2/
+# RUSSIA (RU)
+# http://mirror.rol.ru/slackware/slackware-14.2/
+# ftp://mirror.yandex.ru/slackware/slackware-14.2/
+# http://mirror.yandex.ru/slackware/slackware-14.2/
+# SOUTH AFRICA (ZA)
+# ftp://ftp.is.co.za/mirror/ftp.slackware.com/pub/slackware-14.2/
+# http://ftp.is.co.za/mirror/ftp.slackware.com/pub/slackware-14.2/
+# ftp://ftp.wa.co.za/pub/slackware/slackware-14.2/
+# http://ftp.wa.co.za/pub/slackware/slackware-14.2/
+# ftp://slackware.mirror.ac.za/slackware-14.2/
+# http://slackware.mirror.ac.za/slackware-14.2/
+# SWEDEN (SE)
+# ftp://ftp.sunet.se/mirror/slackware.com/slackware-14.2/
+# http://ftp.sunet.se/mirror/slackware.com/slackware-14.2/
+# SWITZERLAND (CH)
+# ftp://mirror.switch.ch/mirror/slackware/slackware-14.2/
+# http://mirror.switch.ch/ftp/mirror/slackware/slackware-14.2/
+# TAIWAN (TW)
+# ftp://ftp.isu.edu.tw/pub/Linux/Slackware/slackware-14.2/
+# http://ftp.isu.edu.tw/pub/Linux/Slackware/slackware-14.2/
+# ftp://ftp.twaren.net/pub/Linux/Slackware/slackware-14.2/
+# http://ftp.twaren.net/Linux/Slackware/slackware-14.2/
+# TURKEY (TR)
+# ftp://ftp.linux.org.tr/slackware/slackware-14.2/
+# http://ftp.linux.org.tr/slackware/slackware-14.2/
+# UKRAINE (UA)
+# ftp://mirrors.mithril.org.ua/linux/slackware/slackware-14.2/
+# http://mirrors.mithril.org.ua/linux/slackware/slackware-14.2/
+# UNITED KINGDOM (UK)
+# ftp://ftp.mirrorservice.org/sites/ftp.slackware.com/pub/slackware/slackware-14.2/
+# http://ftp.mirrorservice.org/sites/ftp.slackware.com/pub/slackware/slackware-14.2/
+# ftp://mirror.bytemark.co.uk/slackware/slackware-14.2/
+# http://mirror.bytemark.co.uk/slackware/slackware-14.2/
+# UNITED STATES (US)
+# ftp://ftp.gtlib.gatech.edu/nv/ao2/lxmirror/ftp.slackware.com/slackware-14.2/
+# ftp://mirror.cs.princeton.edu/pub/mirrors/slackware/slackware-14.2/
+# ftp://mirrors.easynews.com/linux/slackware/slackware-14.2/
+# http://mirrors.easynews.com/linux/slackware/slackware-14.2/
+# ftp://mirrors.us.kernel.org/slackware/slackware-14.2/
+# http://mirrors.us.kernel.org/slackware/slackware-14.2/
+# ftp://mirrors.xmission.com/slackware/slackware-14.2/
+# http://mirrors.xmission.com/slackware/slackware-14.2/
+# https://mirror.slackbuilds.org/slackware/slackware-14.2/
+# http://slackware.cs.utah.edu/pub/slackware/slackware-14.2/
+# http://slackware.mirrors.pair.com/slackware-14.2/
+# ftp://slackware.mirrors.tds.net/pub/slackware/slackware-14.2/
+# http://slackware.mirrors.tds.net/pub/slackware/slackware-14.2/
+# ftp://spout.ussg.indiana.edu/linux/slackware/slackware-14.2/
+# http://spout.ussg.indiana.edu/linux/slackware/slackware-14.2/
+# ftp://teewurst.cc.columbia.edu/pub/linux/slackware/slackware-14.2/
+# http://teewurst.cc.columbia.edu/pub/linux/slackware/slackware-14.2/
+#
+#----------------------------------------------------------------
+# Slackware-current
+#----------------------------------------------------------------
+# USE MIRRORS.SLACKWARE.COM (DO NOT USE FTP - ONLY HTTP FINDS A NEARBY MIRROR)
+# https://mirrors.slackware.com/slackware/slackware-current/
+#
+#
+# Here are some individual mirrors that can be used instead of the
+# redirector at mirrors.slackware.com if necessary ; note that this
+# list is not guaranteed to be up-to-date
+#
+# AUSTRALIA (AU)
+# ftp://ftp.cc.swin.edu.au/slackware/slackware-current/
+# http://ftp.cc.swin.edu.au/slackware/slackware-current/
+# ftp://ftp.iinet.net.au/pub/slackware/slackware-current/
+# http://ftp.iinet.net.au/pub/slackware/slackware-current/
+# ftp://mirror.aarnet.edu.au/pub/slackware/slackware-current/
+# http://mirror.aarnet.edu.au/pub/slackware/slackware-current/
+# ftp://mirror.as24220.net/pub/slackware/slackware-current/
+# http://mirror.as24220.net/pub/slackware/slackware-current/
+# ftp://mirror.internode.on.net/.pub2/slackware/slackware-current/
+# http://mirror.internode.on.net/pub/slackware/slackware-current/
+# http://mirror.primusdatacentre.com.au/slackware/slackware-current/
+# AUSTRIA (AT)
+# ftp://ftp.slackware.at/slackware-current/
+# http://ftp.slackware.at/data/slackware-current/
+# ftp://gd.tuwien.ac.at/opsys/linux/freesoftware.com/slackware-current/
+# http://gd.tuwien.ac.at/opsys/linux/freesoftware.com/slackware-current/
+# BELARUS (BY)
+# ftp://mirror.datacenter.by/pub/slackware/slackware-current/
+# http://mirror.datacenter.by/pub/slackware/slackware-current/
+# BRAZIL (BR)
+# ftp://ftp.slackware-brasil.com.br/slackware-current/
+# http://ftp.slackware-brasil.com.br/slackware-current/
+# BULGARIA (BG)
+# ftp://mirrors.unixsol.org/slackware/slackware-current/
+# http://mirrors.unixsol.org/slackware/slackware-current/
+# CANADA (CA)
+# ftp://mirror.csclub.uwaterloo.ca/slackware/slackware-current/
+# http://mirror.csclub.uwaterloo.ca/slackware/slackware-current/
+# ftp://mirror.its.dal.ca/slackware/slackware-current/
+# http://mirror.its.dal.ca/slackware/slackware-current/
+# CHINA (CN)
+# http://mirror.bjtu.edu.cn/slackware/slackware-current/
+# http://mirrors.163.com/slackware/slackware-current/
+# http://mirrors.ustc.edu.cn/slackware/slackware-current/
+# COSTA RICA (CR)
+# ftp://mirrors.ucr.ac.cr/slackware/pub/slackware/slackware-current/
+# http://mirrors.ucr.ac.cr/slackware/pub/slackware/slackware-current/
+# CZECH REPUBLIC (CZ)
+# ftp://odysseus.linux.cz/pub/linux/slackware/slackware-current/
+# http://odysseus.linux.cz/pub/linux/slackware/slackware-current/
+# DENMARK (DK)
+# ftp://mirrors.dotsrc.org/slackware/slackware-current/
+# https://mirrors.dotsrc.org/slackware/slackware-current/
+# FINLAND (FI)
+# ftp://elektroni.phys.tut.fi/slackware-current/
+# FRANCE (FR)
+# ftp://mirror.ovh.net/mirrors/ftp.slackware.com/slackware-current/
+# http://mirror.ovh.net/mirrors/ftp.slackware.com/slackware-current/
+# ftp://nephtys.lip6.fr/pub/linux/distributions/slackware/slackware-current/
+# http://nephtys.lip6.fr/pub/linux/distributions/slackware/slackware-current/
+# GERMANY (DE)
+# ftp://ftp.fu-berlin.de/unix/linux/slackware/slackware-current/
+# ftp://ftp.gwdg.de/pub/linux/slackware/slackware-current/
+# http://ftp.gwdg.de/pub/linux/slackware/slackware-current/
+# ftp://ftp.tu-chemnitz.de/pub/linux/slackware/slackware-current/
+# http://ftp.tu-chemnitz.de/pub/linux/slackware/slackware-current/
+# ftp://ftp.zimt.uni-siegen.de/pub/slackware/slackware-current/
+# http://ftp.zimt.uni-siegen.de/slackware/slackware-current/
+# ftp://sunsite.informatik.rwth-aachen.de/pub/comp/Linux/slackware/slackware-current/
+# http://sunsite.informatik.rwth-aachen.de/ftp/pub/comp/Linux/slackware/slackware-current/
+# ftp://wrz1013.rz.uni-wuerzburg.de/pub/MIRROR/slackware/slackware-current/
+# http://wrz1013.rz.uni-wuerzburg.de/pub/MIRROR/slackware/slackware-current/
+# GREECE (GR)
+# ftp://ftp.cc.uoc.gr/mirrors/linux/slackware/slackware-current/
+# http://ftp.cc.uoc.gr/mirrors/linux/slackware/slackware-current/
+# ftp://ftp.otenet.gr/pub/linux/slackware/slackware-current/
+# http://ftp.otenet.gr/linux/slackware/slackware-current/
+# ftp://patroklos.noc.ntua.gr/pub/linux/slackware/slackware-current/
+# http://patroklos.noc.ntua.gr/pub/linux/slackware/slackware-current/
+# INDONESIA (ID)
+# http://kambing.ui.ac.id/slackware/slackware-current/
+# https://repo.ukdw.ac.id/slackware/slackware-current/
+# IRELAND (IE)
+# ftp://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware-current/
+# http://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware-current/
+# ITALY (IT)
+# ftp://ba.mirror.garr.it/mirrors/Slackware/slackware-current/
+# http://ba.mirror.garr.it/mirrors/Slackware/slackware-current/
+# JAPAN (JP)
+# ftp://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware-current/
+# http://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware-current/
+# ftp://ftp.kddilabs.jp/Linux/distributions/Slackware/slackware-current/
+# http://ftp.kddilabs.jp/Linux/distributions/Slackware/slackware-current/
+# ftp://riksun.riken.go.jp/Linux/slackware/slackware-current/
+# http://riksun.riken.go.jp/Linux/slackware/slackware-current/
+# NETHERLANDS (NL)
+# ftp://ftp.nluug.nl/pub/os/Linux/distr/slackware/slackware-current/
+# http://ftp.nluug.nl/os/Linux/distr/slackware/slackware-current/
+# ftp://mirror.nl.leaseweb.net/slackware/slackware-current/
+# http://mirror.nl.leaseweb.net/slackware/slackware-current/
+# NORWAY (NO)
+# ftp://ftp.slackware.no/slackware/slackware-current/
+# http://ftp.slackware.no/slackware/slackware-current/
+# POLAND (PL)
+# ftp://ftp.pwr.wroc.pl/pub/linux/slackware/slackware-current/
+# http://ftp.pwr.wroc.pl/pub/linux/slackware/slackware-current/
+# ftp://ftp.slackware.pl/pub/slackware/slackware-current/
+# http://ftp.slackware.pl/pub/slackware/slackware-current/
+# ftp://sunsite.icm.edu.pl/vol/rzm1/linux-slackware/slackware-current/
+# http://sunsite.icm.edu.pl/packages/linux-slackware/slackware-current/
+# ftp://z-ftp.wcss.wroc.pl/pub/linux/slackware/slackware-current/
+# http://z-ftp.wcss.wroc.pl/pub/linux/slackware/slackware-current/
+# RUSSIA (RU)
+# http://mirror.rol.ru/slackware/slackware-current/
+# ftp://mirror.yandex.ru/slackware/slackware-current/
+# http://mirror.yandex.ru/slackware/slackware-current/
+# SOUTH AFRICA (ZA)
+# ftp://ftp.is.co.za/mirror/ftp.slackware.com/pub/slackware-current/
+# http://ftp.is.co.za/mirror/ftp.slackware.com/pub/slackware-current/
+# ftp://ftp.wa.co.za/pub/slackware/slackware-current/
+# http://ftp.wa.co.za/pub/slackware/slackware-current/
+# ftp://slackware.mirror.ac.za/slackware-current/
+# http://slackware.mirror.ac.za/slackware-current/
+# SWEDEN (SE)
+# ftp://ftp.sunet.se/mirror/slackware.com/slackware-current/
+# http://ftp.sunet.se/mirror/slackware.com/slackware-current/
+# SWITZERLAND (CH)
+# ftp://mirror.switch.ch/mirror/slackware/slackware-current/
+# http://mirror.switch.ch/ftp/mirror/slackware/slackware-current/
+# TAIWAN (TW)
+# ftp://ftp.isu.edu.tw/pub/Linux/Slackware/slackware-current/
+# http://ftp.isu.edu.tw/pub/Linux/Slackware/slackware-current/
+# ftp://ftp.twaren.net/pub/Linux/Slackware/slackware-current/
+# http://ftp.twaren.net/Linux/Slackware/slackware-current/
+# TURKEY (TR)
+# ftp://ftp.linux.org.tr/slackware/slackware-current/
+# http://ftp.linux.org.tr/slackware/slackware-current/
+# UKRAINE (UA)
+# ftp://ftp.linux.kiev.ua/pub/Linux/Slackware/slackware-current/
+# http://ftp.linux.kiev.ua/pub/Linux/Slackware/slackware-current/
+# ftp://mirrors.mithril.org.ua/linux/slackware/slackware-current/
+# http://mirrors.mithril.org.ua/linux/slackware/slackware-current/
+# UNITED KINGDOM (UK)
+# ftp://ftp.mirrorservice.org/sites/ftp.slackware.com/pub/slackware/slackware-current/
+# http://ftp.mirrorservice.org/sites/ftp.slackware.com/pub/slackware/slackware-current/
+# ftp://mirror.bytemark.co.uk/slackware/slackware-current/
+# http://mirror.bytemark.co.uk/slackware/slackware-current/
+# ftp://slackware.mirrors.uk2.net/pub/slackware/slackware-current/
+# http://slackware.mirrors.uk2.net/slackware-current/
+# UNITED STATES (US)
+# ftp://ftp.gtlib.gatech.edu/nv/ao2/lxmirror/ftp.slackware.com/slackware-current/
+# ftp://mirror.cs.princeton.edu/pub/mirrors/slackware/slackware-current/
+# ftp://mirrors.easynews.com/linux/slackware/slackware-current/
+# http://mirrors.easynews.com/linux/slackware/slackware-current/
+# ftp://mirrors.us.kernel.org/slackware/slackware-current/
+# http://mirrors.us.kernel.org/slackware/slackware-current/
+# ftp://mirrors.xmission.com/slackware/slackware-current/
+# http://mirrors.xmission.com/slackware/slackware-current/
+# https://mirror.slackbuilds.org/slackware/slackware-current/
+# http://slackware.cs.utah.edu/pub/slackware/slackware-current/
+# http://slackware.mirrors.pair.com/slackware-current/
+# ftp://slackware.mirrors.tds.net/pub/slackware/slackware-current/
+# http://slackware.mirrors.tds.net/pub/slackware/slackware-current/
+# ftp://spout.ussg.indiana.edu/linux/slackware/slackware-current/
+# http://spout.ussg.indiana.edu/linux/slackware/slackware-current/
+# ftp://teewurst.cc.columbia.edu/pub/linux/slackware/slackware-current/
+# http://teewurst.cc.columbia.edu/pub/linux/slackware/slackware-current/
diff --git a/files/mirrors-x86_64.sample b/files/mirrors-x86_64.sample
new file mode 100644
index 0000000..aae06f1
--- /dev/null
+++ b/files/mirrors-x86_64.sample
@@ -0,0 +1,362 @@
+# mirrors - List of Slackware Linux mirrors.
+#
+# SlackPkg - An Automated packaging tool for Slackware Linux
+# Copyright (C) 2003-2011 Roberto F. Batista, Evaldo Gardenali
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Project Page: http://slackpkg.org/
+# Roberto F. Batista (aka PiterPunk) piterpunk@slackware.com
+# Evaldo Gardenali (aka UdontKnow) evaldogardenali@fasternet.com.br
+#
+# END OF LEGAL NOTICE
+#
+#
+# You only need to select one mirror and uncomment it.
+# ONLY ONE mirror can be uncommented.
+#
+# You can use a mirror not included in this file. Many people have mirrors
+# in their local networks. A list of all official Slackware mirrors
+# (not version-specific, so some mirrors may not have all files) is here:
+# https://mirrors.slackware.com/mirrorlist/
+#
+# Slackpkg only needs to point to the directory that contains
+# "ChangeLog.txt", and don't forget the trailing slash.
+#
+#----------------------------------------------------------------
+# Local CD/DVD drive
+#----------------------------------------------------------------
+# cdrom://media/cdrom/
+#
+#----------------------------------------------------------------
+# Local Directory
+#----------------------------------------------------------------
+# file://path/to/some/directory/
+#
+#----------------------------------------------------------------
+# Slackware64-14.2
+#----------------------------------------------------------------
+# USE MIRRORS.SLACKWARE.COM (DO NOT USE FTP - ONLY HTTP FINDS A NEARBY MIRROR)
+# https://mirrors.slackware.com/slackware/slackware64-14.2/
+#
+#
+# Here are some individual mirrors that can be used instead of the
+# redirector at mirrors.slackware.com if necessary ; note that this
+# list is not guaranteed to be up-to-date
+#
+# AUSTRALIA (AU)
+# ftp://ftp.cc.swin.edu.au/slackware/slackware64-14.2/
+# http://ftp.cc.swin.edu.au/slackware/slackware64-14.2/
+# ftp://ftp.iinet.net.au/pub/slackware/slackware64-14.2/
+# http://ftp.iinet.net.au/pub/slackware/slackware64-14.2/
+# ftp://mirror.as24220.net/pub/slackware/slackware64-14.2/
+# http://mirror.as24220.net/pub/slackware/slackware64-14.2/
+# ftp://mirror.internode.on.net/.pub2/slackware/slackware64-14.2/
+# http://mirror.internode.on.net/pub/slackware/slackware64-14.2/
+# AUSTRIA (AT)
+# http://gd.tuwien.ac.at/opsys/linux/freesoftware.com/slackware64-14.2/
+# BELARUS (BY)
+# ftp://mirror.datacenter.by/pub/slackware/slackware64-14.2/
+# http://mirror.datacenter.by/pub/slackware/slackware64-14.2/
+# BRAZIL (BR)
+# ftp://ftp.slackware-brasil.com.br/slackware64-14.2/
+# http://ftp.slackware-brasil.com.br/slackware64-14.2/
+# BULGARIA (BG)
+# ftp://mirrors.unixsol.org/slackware/slackware64-14.2/
+# http://mirrors.unixsol.org/slackware/slackware64-14.2/
+# CANADA (CA)
+# ftp://mirror.csclub.uwaterloo.ca/slackware/slackware64-14.2/
+# http://mirror.csclub.uwaterloo.ca/slackware/slackware64-14.2/
+# ftp://mirror.its.dal.ca/slackware/slackware64-14.2/
+# http://mirror.its.dal.ca/slackware/slackware64-14.2/
+# CHINA (CN)
+# http://mirrors.163.com/slackware/slackware64-14.2/
+# http://mirrors.ustc.edu.cn/slackware/slackware64-14.2/
+# COSTA RICA (CR)
+# ftp://mirrors.ucr.ac.cr/slackware/pub/slackware/slackware64-14.2/
+# http://mirrors.ucr.ac.cr/slackware/pub/slackware/slackware64-14.2/
+# CZECH REPUBLIC (CZ)
+# ftp://odysseus.linux.cz/pub/linux/slackware/slackware64-14.2/
+# http://odysseus.linux.cz/pub/linux/slackware/slackware64-14.2/
+# DENMARK (DK)
+# ftp://mirrors.dotsrc.org/slackware/slackware64-14.2/
+# https://mirrors.dotsrc.org/slackware/slackware64-14.2/
+# FINLAND (FI)
+# ftp://elektroni.phys.tut.fi/slackware64-14.2/
+# FRANCE (FR)
+# ftp://nephtys.lip6.fr/pub/linux/distributions/slackware/slackware64-14.2/
+# http://nephtys.lip6.fr/pub/linux/distributions/slackware/slackware64-14.2/
+# GERMANY (DE)
+# ftp://ftp.gwdg.de/pub/linux/slackware/slackware64-14.2/
+# http://ftp.gwdg.de/pub/linux/slackware/slackware64-14.2/
+# ftp://ftp.tu-chemnitz.de/pub/linux/slackware/slackware64-14.2/
+# http://ftp.tu-chemnitz.de/pub/linux/slackware/slackware64-14.2/
+# ftp://sunsite.informatik.rwth-aachen.de/pub/comp/Linux/slackware/slackware64-14.2/
+# http://sunsite.informatik.rwth-aachen.de/ftp/pub/comp/Linux/slackware/slackware64-14.2/
+# GREECE (GR)
+# ftp://ftp.cc.uoc.gr/mirrors/linux/slackware/slackware64-14.2/
+# http://ftp.cc.uoc.gr/mirrors/linux/slackware/slackware64-14.2/
+# ftp://ftp.otenet.gr/pub/linux/slackware/slackware64-14.2/
+# http://ftp.otenet.gr/linux/slackware/slackware64-14.2/
+# ftp://patroklos.noc.ntua.gr/pub/linux/slackware/slackware64-14.2/
+# http://patroklos.noc.ntua.gr/pub/linux/slackware/slackware64-14.2/
+# INDONESIA (ID)
+# http://kambing.ui.ac.id/slackware/slackware64-14.2/
+# https://repo.ukdw.ac.id/slackware/slackware64-14.2/
+# IRELAND (IE)
+# ftp://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware64-14.2/
+# http://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware64-14.2/
+# ITALY (IT)
+# ftp://ba.mirror.garr.it/mirrors/Slackware/slackware64-14.2/
+# http://ba.mirror.garr.it/mirrors/Slackware/slackware64-14.2/
+# JAPAN (JP)
+# ftp://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware64-14.2/
+# http://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware64-14.2/
+# ftp://ftp.kddilabs.jp/Linux/distributions/Slackware/slackware64-14.2/
+# http://ftp.kddilabs.jp/Linux/distributions/Slackware/slackware64-14.2/
+# ftp://riksun.riken.go.jp/Linux/slackware/slackware64-14.2/
+# http://riksun.riken.go.jp/Linux/slackware/slackware64-14.2/
+# NETHERLANDS (NL)
+# ftp://ftp.nluug.nl/pub/os/Linux/distr/slackware/slackware64-14.2/
+# http://ftp.nluug.nl/os/Linux/distr/slackware/slackware64-14.2/
+# ftp://mirror.nl.leaseweb.net/slackware/slackware64-14.2/
+# http://mirror.nl.leaseweb.net/slackware/slackware64-14.2/
+# NORWAY (NO)
+# ftp://ftp.slackware.no/slackware/slackware64-14.2/
+# http://ftp.slackware.no/slackware/slackware64-14.2/
+# POLAND (PL)
+# ftp://ftp.pwr.wroc.pl/pub/linux/slackware/slackware64-14.2/
+# http://ftp.pwr.wroc.pl/pub/linux/slackware/slackware64-14.2/
+# ftp://ftp.slackware.pl/pub/slackware/slackware64-14.2/
+# http://ftp.slackware.pl/pub/slackware/slackware64-14.2/
+# ftp://sunsite.icm.edu.pl/vol/rzm1/linux-slackware/slackware64-14.2/
+# http://sunsite.icm.edu.pl/packages/linux-slackware/slackware64-14.2/
+# ftp://z-ftp.wcss.wroc.pl/pub/linux/slackware/slackware64-14.2/
+# http://z-ftp.wcss.wroc.pl/pub/linux/slackware/slackware64-14.2/
+# RUSSIA (RU)
+# http://mirror.rol.ru/slackware/slackware64-14.2/
+# ftp://mirror.yandex.ru/slackware/slackware64-14.2/
+# http://mirror.yandex.ru/slackware/slackware64-14.2/
+# SOUTH AFRICA (ZA)
+# ftp://ftp.is.co.za/mirror/ftp.slackware.com/pub/slackware64-14.2/
+# http://ftp.is.co.za/mirror/ftp.slackware.com/pub/slackware64-14.2/
+# ftp://ftp.wa.co.za/pub/slackware/slackware64-14.2/
+# http://ftp.wa.co.za/pub/slackware/slackware64-14.2/
+# ftp://slackware.mirror.ac.za/slackware64-14.2/
+# http://slackware.mirror.ac.za/slackware64-14.2/
+# SWEDEN (SE)
+# ftp://ftp.sunet.se/mirror/slackware.com/slackware64-14.2/
+# http://ftp.sunet.se/mirror/slackware.com/slackware64-14.2/
+# SWITZERLAND (CH)
+# ftp://mirror.switch.ch/mirror/slackware/slackware64-14.2/
+# http://mirror.switch.ch/ftp/mirror/slackware/slackware64-14.2/
+# TAIWAN (TW)
+# ftp://ftp.isu.edu.tw/pub/Linux/Slackware/slackware64-14.2/
+# http://ftp.isu.edu.tw/pub/Linux/Slackware/slackware64-14.2/
+# ftp://ftp.twaren.net/pub/Linux/Slackware/slackware64-14.2/
+# http://ftp.twaren.net/Linux/Slackware/slackware64-14.2/
+# TURKEY (TR)
+# ftp://ftp.linux.org.tr/slackware/slackware64-14.2/
+# http://ftp.linux.org.tr/slackware/slackware64-14.2/
+# UKRAINE (UA)
+# ftp://mirrors.mithril.org.ua/linux/slackware/slackware64-14.2/
+# http://mirrors.mithril.org.ua/linux/slackware/slackware64-14.2/
+# UNITED KINGDOM (UK)
+# ftp://ftp.mirrorservice.org/sites/ftp.slackware.com/pub/slackware/slackware64-14.2/
+# http://ftp.mirrorservice.org/sites/ftp.slackware.com/pub/slackware/slackware64-14.2/
+# ftp://mirror.bytemark.co.uk/slackware/slackware64-14.2/
+# http://mirror.bytemark.co.uk/slackware/slackware64-14.2/
+# UNITED STATES (US)
+# ftp://ftp.gtlib.gatech.edu/nv/ao2/lxmirror/ftp.slackware.com/slackware64-14.2/
+# ftp://mirror.cs.princeton.edu/pub/mirrors/slackware/slackware64-14.2/
+# ftp://mirrors.easynews.com/linux/slackware/slackware64-14.2/
+# http://mirrors.easynews.com/linux/slackware/slackware64-14.2/
+# ftp://mirrors.us.kernel.org/slackware/slackware64-14.2/
+# http://mirrors.us.kernel.org/slackware/slackware64-14.2/
+# ftp://mirrors.xmission.com/slackware/slackware64-14.2/
+# http://mirrors.xmission.com/slackware/slackware64-14.2/
+# https://mirror.slackbuilds.org/slackware/slackware64-14.2/
+# http://slackware.cs.utah.edu/pub/slackware/slackware64-14.2/
+# http://slackware.mirrors.pair.com/slackware64-14.2/
+# ftp://slackware.mirrors.tds.net/pub/slackware/slackware64-14.2/
+# http://slackware.mirrors.tds.net/pub/slackware/slackware64-14.2/
+# ftp://spout.ussg.indiana.edu/linux/slackware/slackware64-14.2/
+# http://spout.ussg.indiana.edu/linux/slackware/slackware64-14.2/
+# ftp://teewurst.cc.columbia.edu/pub/linux/slackware/slackware64-14.2/
+# http://teewurst.cc.columbia.edu/pub/linux/slackware/slackware64-14.2/
+#
+#----------------------------------------------------------------
+# Slackware64-current
+#----------------------------------------------------------------
+# USE MIRRORS.SLACKWARE.COM (DO NOT USE FTP - ONLY HTTP FINDS A NEARBY MIRROR)
+# https://mirrors.slackware.com/slackware/slackware64-current/
+#
+#
+# Here are some individual mirrors that can be used instead of the
+# redirector at mirrors.slackware.com if necessary ; note that this
+# list is not guaranteed to be up-to-date
+#
+# AUSTRALIA (AU)
+# ftp://ftp.cc.swin.edu.au/slackware/slackware64-current/
+# http://ftp.cc.swin.edu.au/slackware/slackware64-current/
+# ftp://ftp.iinet.net.au/pub/slackware/slackware64-current/
+# http://ftp.iinet.net.au/pub/slackware/slackware64-current/
+# ftp://mirror.aarnet.edu.au/pub/slackware/slackware64-current/
+# http://mirror.aarnet.edu.au/pub/slackware/slackware64-current/
+# ftp://mirror.as24220.net/pub/slackware/slackware64-current/
+# http://mirror.as24220.net/pub/slackware/slackware64-current/
+# ftp://mirror.internode.on.net/.pub2/slackware/slackware64-current/
+# http://mirror.internode.on.net/pub/slackware/slackware64-current/
+# http://mirror.primusdatacentre.com.au/slackware/slackware64-current/
+# AUSTRIA (AT)
+# ftp://ftp.slackware.at/slackware64-current/
+# http://ftp.slackware.at/data/slackware64-current/
+# ftp://gd.tuwien.ac.at/opsys/linux/freesoftware.com/slackware64-current/
+# http://gd.tuwien.ac.at/opsys/linux/freesoftware.com/slackware64-current/
+# BELARUS (BY)
+# ftp://mirror.datacenter.by/pub/slackware/slackware64-current/
+# http://mirror.datacenter.by/pub/slackware/slackware64-current/
+# BRAZIL (BR)
+# ftp://ftp.slackware-brasil.com.br/slackware64-current/
+# http://ftp.slackware-brasil.com.br/slackware64-current/
+# BULGARIA (BG)
+# ftp://mirrors.unixsol.org/slackware/slackware64-current/
+# http://mirrors.unixsol.org/slackware/slackware64-current/
+# CANADA (CA)
+# ftp://mirror.csclub.uwaterloo.ca/slackware/slackware64-current/
+# http://mirror.csclub.uwaterloo.ca/slackware/slackware64-current/
+# ftp://mirror.its.dal.ca/slackware/slackware64-current/
+# http://mirror.its.dal.ca/slackware/slackware64-current/
+# CHINA (CN)
+# http://mirror.bjtu.edu.cn/slackware/slackware64-current/
+# http://mirrors.163.com/slackware/slackware64-current/
+# http://mirrors.ustc.edu.cn/slackware/slackware64-current/
+# COSTA RICA (CR)
+# ftp://mirrors.ucr.ac.cr/slackware/pub/slackware/slackware64-current/
+# http://mirrors.ucr.ac.cr/slackware/pub/slackware/slackware64-current/
+# CZECH REPUBLIC (CZ)
+# ftp://odysseus.linux.cz/pub/linux/slackware/slackware64-current/
+# http://odysseus.linux.cz/pub/linux/slackware/slackware64-current/
+# DENMARK (DK)
+# ftp://mirrors.dotsrc.org/slackware/slackware64-current/
+# https://mirrors.dotsrc.org/slackware/slackware64-current/
+# FINLAND (FI)
+# ftp://elektroni.phys.tut.fi/slackware64-current/
+# FRANCE (FR)
+# ftp://mirror.ovh.net/mirrors/ftp.slackware.com/slackware64-current/
+# http://mirror.ovh.net/mirrors/ftp.slackware.com/slackware64-current/
+# ftp://nephtys.lip6.fr/pub/linux/distributions/slackware/slackware64-current/
+# http://nephtys.lip6.fr/pub/linux/distributions/slackware/slackware64-current/
+# GERMANY (DE)
+# ftp://ftp.fu-berlin.de/unix/linux/slackware/slackware64-current/
+# ftp://ftp.gwdg.de/pub/linux/slackware/slackware64-current/
+# http://ftp.gwdg.de/pub/linux/slackware/slackware64-current/
+# ftp://ftp.tu-chemnitz.de/pub/linux/slackware/slackware64-current/
+# http://ftp.tu-chemnitz.de/pub/linux/slackware/slackware64-current/
+# ftp://sunsite.informatik.rwth-aachen.de/pub/comp/Linux/slackware/slackware64-current/
+# http://sunsite.informatik.rwth-aachen.de/ftp/pub/comp/Linux/slackware/slackware64-current/
+# ftp://wrz1013.rz.uni-wuerzburg.de/pub/MIRROR/slackware/slackware64-current/
+# http://wrz1013.rz.uni-wuerzburg.de/pub/MIRROR/slackware/slackware64-current/
+# GREECE (GR)
+# ftp://ftp.cc.uoc.gr/mirrors/linux/slackware/slackware64-current/
+# http://ftp.cc.uoc.gr/mirrors/linux/slackware/slackware64-current/
+# ftp://ftp.otenet.gr/pub/linux/slackware/slackware64-current/
+# http://ftp.otenet.gr/linux/slackware/slackware64-current/
+# ftp://patroklos.noc.ntua.gr/pub/linux/slackware/slackware64-current/
+# http://patroklos.noc.ntua.gr/pub/linux/slackware/slackware64-current/
+# INDONESIA (ID)
+# http://kambing.ui.ac.id/slackware/slackware64-current/
+# https://repo.ukdw.ac.id/slackware/slackware64-current/
+# IRELAND (IE)
+# ftp://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware64-current/
+# http://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware64-current/
+# ITALY (IT)
+# ftp://ba.mirror.garr.it/mirrors/Slackware/slackware64-current/
+# http://ba.mirror.garr.it/mirrors/Slackware/slackware64-current/
+# JAPAN (JP)
+# ftp://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware64-current/
+# http://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware64-current/
+# ftp://ftp.kddilabs.jp/Linux/distributions/Slackware/slackware64-current/
+# http://ftp.kddilabs.jp/Linux/distributions/Slackware/slackware64-current/
+# ftp://riksun.riken.go.jp/Linux/slackware/slackware64-current/
+# http://riksun.riken.go.jp/Linux/slackware/slackware64-current/
+# NETHERLANDS (NL)
+# ftp://ftp.nluug.nl/pub/os/Linux/distr/slackware/slackware64-current/
+# http://ftp.nluug.nl/os/Linux/distr/slackware/slackware64-current/
+# ftp://mirror.nl.leaseweb.net/slackware/slackware64-current/
+# http://mirror.nl.leaseweb.net/slackware/slackware64-current/
+# NORWAY (NO)
+# ftp://ftp.slackware.no/slackware/slackware64-current/
+# http://ftp.slackware.no/slackware/slackware64-current/
+# POLAND (PL)
+# ftp://ftp.pwr.wroc.pl/pub/linux/slackware/slackware64-current/
+# http://ftp.pwr.wroc.pl/pub/linux/slackware/slackware64-current/
+# ftp://ftp.slackware.pl/pub/slackware/slackware64-current/
+# http://ftp.slackware.pl/pub/slackware/slackware64-current/
+# ftp://sunsite.icm.edu.pl/vol/rzm1/linux-slackware/slackware64-current/
+# http://sunsite.icm.edu.pl/packages/linux-slackware/slackware64-current/
+# ftp://z-ftp.wcss.wroc.pl/pub/linux/slackware/slackware64-current/
+# http://z-ftp.wcss.wroc.pl/pub/linux/slackware/slackware64-current/
+# RUSSIA (RU)
+# http://mirror.rol.ru/slackware/slackware64-current/
+# ftp://mirror.yandex.ru/slackware/slackware64-current/
+# http://mirror.yandex.ru/slackware/slackware64-current/
+# SOUTH AFRICA (ZA)
+# ftp://ftp.is.co.za/mirror/ftp.slackware.com/pub/slackware64-current/
+# http://ftp.is.co.za/mirror/ftp.slackware.com/pub/slackware64-current/
+# ftp://ftp.wa.co.za/pub/slackware/slackware64-current/
+# http://ftp.wa.co.za/pub/slackware/slackware64-current/
+# ftp://slackware.mirror.ac.za/slackware64-current/
+# http://slackware.mirror.ac.za/slackware64-current/
+# SWEDEN (SE)
+# ftp://ftp.sunet.se/mirror/slackware.com/slackware64-current/
+# http://ftp.sunet.se/mirror/slackware.com/slackware64-current/
+# SWITZERLAND (CH)
+# ftp://mirror.switch.ch/mirror/slackware/slackware64-current/
+# http://mirror.switch.ch/ftp/mirror/slackware/slackware64-current/
+# TAIWAN (TW)
+# ftp://ftp.isu.edu.tw/pub/Linux/Slackware/slackware64-current/
+# http://ftp.isu.edu.tw/pub/Linux/Slackware/slackware64-current/
+# ftp://ftp.twaren.net/pub/Linux/Slackware/slackware64-current/
+# http://ftp.twaren.net/Linux/Slackware/slackware64-current/
+# TURKEY (TR)
+# ftp://ftp.linux.org.tr/slackware/slackware64-current/
+# http://ftp.linux.org.tr/slackware/slackware64-current/
+# UKRAINE (UA)
+# ftp://mirrors.mithril.org.ua/linux/slackware/slackware64-current/
+# http://mirrors.mithril.org.ua/linux/slackware/slackware64-current/
+# UNITED KINGDOM (UK)
+# ftp://ftp.mirrorservice.org/sites/ftp.slackware.com/pub/slackware/slackware64-current/
+# http://ftp.mirrorservice.org/sites/ftp.slackware.com/pub/slackware/slackware64-current/
+# ftp://mirror.bytemark.co.uk/slackware/slackware64-current/
+# http://mirror.bytemark.co.uk/slackware/slackware64-current/
+# UNITED STATES (US)
+# ftp://ftp.gtlib.gatech.edu/nv/ao2/lxmirror/ftp.slackware.com/slackware64-current/
+# ftp://mirror.cs.princeton.edu/pub/mirrors/slackware/slackware64-current/
+# ftp://mirrors.easynews.com/linux/slackware/slackware64-current/
+# http://mirrors.easynews.com/linux/slackware/slackware64-current/
+# ftp://mirrors.us.kernel.org/slackware/slackware64-current/
+# http://mirrors.us.kernel.org/slackware/slackware64-current/
+# ftp://mirrors.xmission.com/slackware/slackware64-current/
+# http://mirrors.xmission.com/slackware/slackware64-current/
+# https://mirror.slackbuilds.org/slackware/slackware64-current/
+# http://slackware.cs.utah.edu/pub/slackware/slackware64-current/
+# http://slackware.mirrors.pair.com/slackware64-current/
+# ftp://slackware.mirrors.tds.net/pub/slackware/slackware64-current/
+# http://slackware.mirrors.tds.net/pub/slackware/slackware64-current/
+# ftp://spout.ussg.indiana.edu/linux/slackware/slackware64-current/
+# http://spout.ussg.indiana.edu/linux/slackware/slackware64-current/
+# ftp://teewurst.cc.columbia.edu/pub/linux/slackware/slackware64-current/
+# http://teewurst.cc.columbia.edu/pub/linux/slackware/slackware64-current/
diff --git a/files/pkglist.awk b/files/pkglist.awk
new file mode 100644
index 0000000..5a0c18e
--- /dev/null
+++ b/files/pkglist.awk
@@ -0,0 +1,35 @@
+!/source\// && !/\.asc$/ {
+ INPUT=$NF
+ fs=FS
+ FS="/" ; OFS="/"
+ $0=INPUT
+ if ( $2 != "var" ) {
+ DIR=$2
+ FULLPACK=$NF
+ } else {
+ DIR="local"
+ FULLPACK=$NF".tgz"
+ }
+ NF=NF-1
+ PATH=$0
+ FS="-" ; OFS="-"
+ $0=FULLPACK
+ if ( NF > 3 ) {
+ SIZE=split($NF,RELEXT,".")
+ EXTENSION=RELEXT[SIZE]
+ LAST=length($NF)-4
+ RELEASE=substr($NF,1,LAST)
+ ARCH=$(NF-1)
+ VERSION=$(NF-2)
+ NF=NF-3
+ NAME=$0
+ } else {
+ RELEASE=none
+ ARCH=none
+ VERSION=none
+ EXTENSION=tgz
+ NAME=$0
+ }
+ FS=fs
+ print DIR" "NAME" "VERSION" "ARCH" "RELEASE" "NAME"-"VERSION"-"ARCH"-"RELEASE" "PATH" "EXTENSION
+}
diff --git a/files/post-functions.sh b/files/post-functions.sh
new file mode 100644
index 0000000..c286e7a
--- /dev/null
+++ b/files/post-functions.sh
@@ -0,0 +1,221 @@
+showdiff() {
+ BASENAME=$(basename $i .new)
+ FILEPATH=$(dirname $i)
+ FULLNAME="${FILEPATH}/${BASENAME}"
+
+ if [ -e ${FULLNAME} ]; then
+ diff -u ${FULLNAME} ${FULLNAME}.new | $MORECMD
+ else
+ echo "file $FULLNAME doesn't exist"
+ fi
+}
+
+showmenu() {
+ echo -e "$1 - \c"
+ tput sc
+ shift
+ while [ $# -gt 0 ]; do
+ echo -e "$1"
+ tput rc
+ shift
+ done
+}
+
+mergenew() {
+ BASENAME=$(basename $i .new)
+ FILEPATH=$(dirname $i)
+ FULLNAME="${FILEPATH}/${BASENAME}"
+
+ if [ -e "${FULLNAME}" ]; then
+ # in media res. we do the merging right away, but we later allow the user to redo it, if not satisfied with the results.
+ rm -f "${FULLNAME}.smerge"
+ echo "Enter '?' in the prompt (%) to display help."
+ cp -p "${FULLNAME}.new" "${FULLNAME}.smerge" # <- this is so that the installed merged file will have the same permissions as the .new file
+ sdiff -s -o "${FULLNAME}.smerge" "${FULLNAME}" "${FULLNAME}.new"
+
+ GOEXM=0
+ while [ $GOEXM -eq 0 ]; do
+ showmenu $i "(E)dit the merged file" "(I)nstall the merged file" "View a diff between the merged and the (N)ew file" "View a diff between the (O)ld and the merged file" "(R)edo the merge" "(V)iew the merged file" "(B)ack to previous menu, and delete the merged file"
+ read ANSWER
+ case "$ANSWER" in
+ E|e)
+ if [ -f "${FULLNAME}.smerge" ]; then
+ $EDITCMD "${FULLNAME}.smerge"
+ else
+ echo -e "Nothing was merged yet..."
+ fi
+ ;;
+ I|i)
+ if [ -f "${FULLNAME}.smerge" ]; then
+ if [ -e "${FULLNAME}" ]; then
+ mv "${FULLNAME}" "${FULLNAME}.orig"
+ fi
+ mv "${FULLNAME}.smerge" "${FULLNAME}"
+ rm -f "${FULLNAME}.new"
+ GOEXM=1
+ GOEX=1
+ else
+ echo -e "Nothing was merged yet..."
+ fi
+ ;;
+ N|n)
+ if [ -f "${FULLNAME}.smerge" ]; then
+ diff -u "${FULLNAME}.smerge" "${FULLNAME}.new" | $MORECMD
+ else
+ echo -e "Nothing was merged yet..."
+ fi
+ ;;
+ O|o)
+ if [ -f "${FULLNAME}.smerge" ]; then
+ diff -u "${FULLNAME}" "${FULLNAME}.smerge" | $MORECMD
+ else
+ echo -e "Nothing was merged yet..."
+ fi
+ ;;
+ R|r)
+ rm -f "${FULLNAME}.smerge"
+ echo "Enter '?' in the prompt (%) to display help."
+ cp -p "${FULLNAME}.new" "${FULLNAME}.smerge" # <- this is so that the installed merged file will have the same permissions as the .new file
+ sdiff -s -o "${FULLNAME}.smerge" "${FULLNAME}" "${FULLNAME}.new"
+ ;;
+ V|v)
+ if [ -f "${FULLNAME}.smerge" ]; then
+ $MORECMD "${FULLNAME}.smerge"
+ else
+ echo -e "Nothing was merged yet..."
+ fi
+ ;;
+ B|b)
+ rm -f "${FULLNAME}.smerge"
+ GOEXM=1
+ ;;
+ esac
+ done
+ else
+ echo "file $FULLNAME doesn't exist"
+ fi
+}
+
+overold() {
+ BASENAME=$(basename $i .new)
+ FILEPATH=$(dirname $i)
+ FULLNAME="${FILEPATH}/${BASENAME}"
+
+ if [ -e ${FULLNAME} ]; then
+ mv ${FULLNAME} ${FULLNAME}.orig
+ fi
+ mv ${FULLNAME}.new ${FULLNAME}
+}
+
+removeold() {
+ rm $i
+}
+
+looknew() {
+
+ # with ONLY_NEW_DOTNEW set, slackpkg will search only for
+ # .new files installed in actual slackpkg's execution
+ if [ "$ONLY_NEW_DOTNEW" = "on" ]; then
+ ONLY_NEW_DOTNEW="-cnewer $TMPDIR/timestamp"
+ else
+ ONLY_NEW_DOTNEW=""
+ fi
+
+ echo -e "\nSearching for NEW configuration files"
+ FILES=$(find /etc /var/yp /usr/share/vim -name "*.new" ${ONLY_NEW_DOTNEW} \
+ -not -name "rc.inet1.conf.new" \
+ -not -name "group.new" \
+ -not -name "passwd.new" \
+ -not -name "shadow.new" \
+ -not -name "gshadow.new" 2>/dev/null)
+ if [ "$FILES" != "" ]; then
+ echo -e "\n\
+Some packages had new configuration files installed.
+You have four choices:
+
+ (K)eep the old files and consider .new files later
+
+ (O)verwrite all old files with the new ones. The
+ old files will be stored with the suffix .orig
+
+ (R)emove all .new files
+
+ (P)rompt K, O, R selection for every single file
+
+What do you want (K/O/R/P)?"
+ answer
+ case $ANSWER in
+ K|k)
+ break
+ ;;
+ O|o)
+ for i in $FILES; do
+ overold $i
+ done
+ break
+ ;;
+ R|r)
+ for i in $FILES; do
+ removeold $i
+ done
+ break
+ ;;
+ P|p)
+ echo "Select what you want file-by-file"
+ for i in $FILES; do
+ GOEX=0
+ while [ $GOEX -eq 0 ]; do
+ echo
+ showmenu $i "(K)eep" "(O)verwrite" "(R)emove" "(D)iff" "(M)erge"
+ read ANSWER
+ case $ANSWER in
+ O|o)
+ overold $i
+ GOEX=1
+ ;;
+ R|r)
+ removeold $i
+ GOEX=1
+ ;;
+ D|d)
+ showdiff $1
+ ;;
+ M|m)
+ mergenew $1
+ ;;
+ K|k|*)
+ GOEX=1
+ ;;
+ esac
+ done
+ done
+ break
+ ;;
+ *)
+ echo "OK! Your choice is nothing! slackpkg will Keep the old files for you to deal with later"
+ ;;
+ esac
+ else
+ echo -e "\t\tNo .new files found."
+ fi
+}
+
+lookkernel() {
+ NEWKERNELMD5=$(md5sum /boot/vmlinuz 2>/dev/null)
+ if [ "$KERNELMD5" != "$NEWKERNELMD5" ]; then
+ if [ -x /sbin/lilo ]; then
+ echo -e "\n
+Your kernel image was updated. We highly recommend you run: lilo
+Do you want slackpkg to run lilo now? (Y/n)"
+ answer
+ if [ "$ANSWER" != "n" ] && [ "$ANSWER" != "N" ]; then
+ /sbin/lilo
+ fi
+ else
+ echo -e "\n
+Your kernel image was updated and lilo is not found on your system.
+You may need to adjust your boot manager (like GRUB) to boot appropriate
+kernel."
+ fi
+ fi
+}
diff --git a/files/slackpkg b/files/slackpkg
new file mode 100644
index 0000000..4fcdd61
--- /dev/null
+++ b/files/slackpkg
@@ -0,0 +1,574 @@
+#!/bin/sh
+#
+# SlackPkg - An Automated packaging tool for Slackware Linux
+# Copyright (C) 2003-2011 Roberto F. Batista, Evaldo Gardenali
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Project Page: http://slackpkg.org/
+# Roberto F. Batista (aka PiterPunk) piterpunk@slackware.com
+# Evaldo Gardenali (aka UdontKnow) evaldogardenali@fasternet.com.br
+#
+
+
+#========================================================================
+#
+# LOAD CONFIGURATIONS
+#
+
+#
+# CONF = configuration directory
+# SOURCE = A mirror of Slackware. Source can be sett by editing $CONF/mirrors
+#
+VERSION=@VERSION@
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+SLACKWARE_VERSION=$(cat /etc/slackware-version | cut -f2 -d\ )
+CONF=${CONF:-/etc/slackpkg}
+SOURCE=$(sed -e 's/^[[:blank:]]*//' $CONF/mirrors | grep -m1 -e "^\([a-z]\)")
+. $CONF/slackpkg.conf
+ERROR=""
+
+# Set temporary directory
+#
+TMPDIR=$(mktemp -p /tmp -d slackpkg.XXXXXX 2>/dev/null)
+if [ $? -ne 0 ]; then
+ TMPDIR="/tmp/slackpkg.${RANDOM}"
+ mkdir -m 700 $TMPDIR || TMPDIR="FAILED"
+fi
+
+#
+# Load the slackpkg functions
+#
+. /usr/libexec/slackpkg/core-functions.sh
+
+#========================================================================
+#
+# COMMAND LINE PARSING
+#
+if [ $# -eq 0 ]; then
+ usage
+fi
+
+while [ -n "$1" ] ; do
+ case $1 in
+ -delall=on)
+ DELALL=on
+ shift
+ ;;
+ -delall=off)
+ DELALL=off
+ shift
+ ;;
+ -checkmd5=on)
+ CHECKMD5=on
+ shift
+ ;;
+ -checkmd5=off)
+ CHECKMD5=off
+ shift
+ ;;
+ -checkgpg=on)
+ CHECKGPG=on
+ shift
+ ;;
+ -checkgpg=off)
+ CHECKGPG=off
+ shift
+ ;;
+ -checksize=on)
+ CHECKSIZE=on
+ shift
+ ;;
+ -checksize=off)
+ CHECKSIZE=off
+ shift
+ ;;
+ -postinst=on)
+ POSTINST=on
+ shift
+ ;;
+ -postinst=off)
+ POSTINST=off
+ shift
+ ;;
+ -onoff=on)
+ ONOFF=on
+ shift
+ ;;
+ -onoff=off)
+ ONOFF=off
+ shift
+ ;;
+ -download_all=on)
+ DOWNLOAD_ALL=on
+ shift
+ ;;
+ -download_all=off)
+ DOWNLOAD_ALL=off
+ shift
+ ;;
+ -dialog=on)
+ DIALOG=on
+ shift
+ ;;
+ -dialog=off)
+ DIALOG=off
+ shift
+ ;;
+ -dialog_maxargs=*)
+ DIALOG_MAXARGS=$(echo $1 | cut -f2 -d=)
+ shift
+ ;;
+ -batch=on)
+ BATCH=on
+ shift
+ ;;
+ -batch=off)
+ BATCH=off
+ shift
+ ;;
+ -only_new_dotnew=on)
+ ONLY_NEW_DOTNEW=on
+ shift
+ ;;
+ -only_new_dotnew=off)
+ ONLY_NEW_DOTNEW=off
+ shift
+ ;;
+ -use_includes=on)
+ USE_INCLUDES=on
+ shift
+ ;;
+ -use_includes=off)
+ USE_INCLUDES=off
+ shift
+ ;;
+ -spinning=on)
+ SPINNING=on
+ shift
+ ;;
+ -spinning=off)
+ SPINNING=off
+ shift
+ ;;
+ -default_answer=y|-default_answer=yes)
+ DEFAULT_ANSWER=y
+ shift
+ ;;
+ -default_answer=n|-default_answer=no)
+ DEFAULT_ANSWER=n
+ shift
+ ;;
+ -mirror=*)
+ SOURCE=$(echo $1 | cut -f2 -d=)
+ shift
+ ;;
+ install|reinstall|upgrade|remove|blacklist|download)
+ CMD=$1
+ shift
+ if [ -n "$1" ]; then
+ if echo $1 | egrep -q "^\.{0,2}/" ; then
+ if [ -e $1 ]; then
+ INPUTLIST=$(cat $1 | tr "\n" " ")
+ else
+ echo -e "The file $1 doesn't exist.\n"
+ cleanup
+ fi
+ else
+ #
+ # Sanitize the argument. We have some problems with dots
+ # and plus (.+)
+ #
+ #INPUTLIST="$(echo $@ | sed -e 's/\+/\\\+/g' -e 's/\./\\\./g')"
+ INPUTLIST="$@"
+ fi
+ elif [ "$CMD" != "blacklist" ]; then
+ usage
+ fi
+ shift $#
+ ;;
+ update)
+ CMD=$1
+ shift
+ if [ "$1" = "gpg" ]; then
+ UPARG="$1"
+ shift
+ fi
+ ;;
+ install-new|upgrade-all|clean-system|new-config|check-updates|help)
+ CMD=$1
+ shift
+ if [ -n "$1" ]; then
+ echo -e "\n$CMD: Ignoring extra arguments: $@" >&2 >&1
+ shift $#
+ fi
+ ;;
+ generate-template|install-template|remove-template|search|file-search|info)
+ CMD=$1
+ shift
+ if [ -n "$1" ]; then
+ ARG=$1
+ shift
+ else
+ usage
+ fi
+
+ if [ -n "$1" ]; then
+ echo -e "\n$CMD: Ignoring extra arguments: $@" >&2 >&1
+ shift $#
+ fi
+ ;;
+ *)
+ echo -e "\n$1: Unknown option.\n"
+ usage
+ ;;
+ esac
+done
+
+#========================================================================
+#
+# SYSTEM SETUP
+#
+system_setup
+
+#========================================================================
+#
+# SYNTAX CHECKING
+#
+system_checkup
+
+#========================================================================
+#
+# READ EXTRA FUNCTIONS
+#
+
+# If you want a new function or need a rewrite of an existing
+# feature, you can put your new function in a shell script under
+# /usr/libexec/slackpkg/functions.d/
+#
+# Remember - the new function scripts need to be executable
+#
+for i in /usr/libexec/slackpkg/functions.d/*.sh; do
+ if [ -x $i ]; then
+ . $i
+ fi
+done
+
+#========================================================================
+#
+# MAIN PROGRAM
+#
+
+#
+# A *BIG* case with all slackpkg commands -:)
+#
+case "$CMD" in
+ help)
+ full_usage
+ ;;
+ check-updates)
+ if checkchangelog 1>/dev/null 2>/dev/null ; then
+ echo "No updated packages since last check."
+ else
+ echo "Updated packages are available since last check."
+ fi
+ ;;
+ update)
+ # If you are using "slackpkg update gpg" OR the system
+ # doesn't have Slackware GPG key, download and install
+ # the key
+ #
+ if [ "$UPARG" = "gpg" ] || [ "$GPGFIRSTTIME" = "0" ]; then
+ #
+ # Creates .gnupg directory if doesn't exist
+ # without this dir, gpg got an error.
+ #
+ if ! [ -e ~/.gnupg ]; then
+ mkdir ~/.gnupg
+ fi
+ getfile ${SOURCE}GPG-KEY $TMPDIR/gpgkey
+ gpg --yes --batch --delete-key "$SLACKKEY" &>/dev/null
+ gpg --import $TMPDIR/gpgkey &>/dev/null && \
+ echo -e "\t\t\tSlackware Linux Project's GPG key added"
+ if [ "$UPARG" = "gpg" ]; then
+ cleanup
+ fi
+ fi
+ echo "Updating the package lists..."
+ updatefilelists
+ ;;
+ install)
+ makelist $INPUTLIST
+ if [ -n "$LIST" ]; then
+ showlist "$LIST" $CMD
+ install_pkg
+ else
+ echo -e "No packages match the pattern for install. Try:"
+ echo -e "\n\t$0 reinstall|upgrade $2\n"
+ POSTINST=off
+ fi
+ ;;
+ reinstall)
+ makelist $INPUTLIST
+ if [ -n "$LIST" ]; then
+ showlist "$LIST" $CMD
+ install_pkg
+ else
+ echo -e "No packages match the pattern for reinstall. Try:"
+ echo -e "\n\t$0 install|upgrade $2\n"
+ POSTINST=off
+ fi
+ ;;
+ upgrade)
+ sanity_check
+ makelist $INPUTLIST
+ if [ -n "$LIST" ]; then
+ showlist "$LIST" $CMD
+ upgrade_pkg
+ else
+ echo -e "No packages match the pattern for upgrade. Try:"
+ echo -e "\n\t$0 install|reinstall $2\n"
+ POSTINST=off
+ fi
+ ;;
+ download)
+ makelist $INPUTLIST
+ DELALL="off"
+ if ! [ "$LIST" = "" ]; then
+ showlist "$LIST" $CMD
+ for i in $SHOWLIST; do
+ getpkg $i true
+ done
+ else
+ echo -e "No packages match the pattern for download."
+ POSTINST=off
+ fi
+ ;;
+ remove)
+ makelist $INPUTLIST
+ if [ "$LIST" = "" ]; then
+ echo -e "The file(s) $INPUTLIST can't be removed - package not installed.\n"
+ cleanup
+ fi
+ showlist "$LIST" $CMD
+ remove_pkg
+ ;;
+ clean-system)
+ makelist $INPUTLIST
+ if [ -n "$LIST" ]; then
+ showlist "$LIST" remove
+ remove_pkg
+ else
+ echo -e "No packages match the pattern for clean-system\n"
+ POSTINST=off
+ fi
+ ;;
+ upgrade-all)
+ sanity_check
+ makelist $INPUTLIST
+ if ! [ -n "${LIST}" ]; then
+ echo -e "No packages match the pattern for upgrade. Try:"
+ echo -e "\n\t$0 install|reinstall $2\n"
+ POSTINST=off
+ else
+ showlist "$LIST" upgrade
+ if [ "$DOWNLOAD_ALL" = "on" ]; then
+ OLDDEL="$DELALL"
+ DELALL="off"
+ for i in $SHOWLIST; do
+ getpkg $i true
+ done
+ DELALL="$OLDDEL"
+ fi
+ FOUND=""
+ FOUND=$(echo $SHOWLIST | tr -s ' ' "\n" | grep "slackpkg-[0-9]")
+ if [ "$FOUND" != "" ]; then
+ getpkg $FOUND upgradepkg Upgrading
+ echo -e "slackpkg was upgraded - you will need start the upgrade process again...\n"
+ cleanup
+ exit 0
+ fi
+ for i in pkgtools glibc-solibs aaa_elflibs readline sed; do
+ FOUND=""
+ FOUND=$(echo $SHOWLIST | tr -s ' ' "\n" | grep "${i}-[0-9]")
+ if [ "$FOUND" != "" ]; then
+ getpkg $FOUND upgradepkg Upgrading
+ fi
+ done
+ upgrade_pkg
+ fi
+ ;;
+ install-new)
+ makelist ${INPUTLIST}
+ if ! [ -n "${LIST}" ]; then
+ echo -e "No packages match the pattern for install. Try:"
+ echo -e "\n\t$0 upgrade|reinstall $2\n"
+ POSTINST=off
+ else
+ showlist "$LIST" install
+ install_pkg
+ fi
+ ;;
+ blacklist)
+ #
+ # If blacklist is called without package name, list
+ # all blacklisted packages
+ if [ "$INPUTLIST" = "" ]; then
+ echo -e "Packages in blacklist:\n"
+ grep -e "^\([a-z]\)" $CONF/blacklist | $MORECMD
+ cleanup
+ fi
+
+ makelist ${INPUTLIST}
+ for i in $LIST; do
+ BASENAME=$(cutpkg $i)
+ BLACKLIST="$BLACKLIST $BASENAME"
+ done
+ BLACKLIST=$(echo $BLACKLIST | tr ' ' "\n")
+ if [ "$BLACKLIST" = "" ]; then
+ echo -e "No packages match the pattern."
+ cleanup
+ else
+ showlist "$BLACKLIST" $CMD
+ fi
+
+ blacklist_pkg
+ ;;
+ file-search)
+ PATTERN=$(echo $ARG | sed -e 's/\+/\\\+/g' -e 's/\./\\\./g' -e 's/ /\|/g')
+ makelist $PATTERN
+
+ if [ "$LIST" = "" ]; then
+ echo -e "No packages contains \"$PATTERN\" file."
+ else
+ echo -e "The list below shows the packages that contains \"$PATTERN\" file.\n"
+ searchlist "$LIST"
+ echo -e "\nYou can search specific packages using \"slackpkg search package\".\n"
+ fi
+ ;;
+ search)
+ PATTERN=$(echo $ARG | sed -e 's/\+/\\\+/g' -e 's/\./\\\./g' -e 's/ /\|/g')
+ makelist $PATTERN
+
+ if [ "$LIST" = "" ]; then
+ echo -e "No package name matches the pattern."
+ else
+ echo -e "The list below shows all packages with name matching \"$PATTERN\".\n"
+ searchlist "$LIST"
+ echo -e "\nYou can search specific files using \"slackpkg file-search file\".\n"
+ fi
+ ;;
+ info)
+ PATTERN=$(echo $ARG | sed -e 's/\+/\\\+/g' -e 's/\./\\\./g')
+ NAME=$(cutpkg $PATTERN)
+ awk -F: "/PACKAGE NAME:.* ${NAME}-[^-]+-(${ARCH}|fw|noarch)-[^-]+/,/^$/ {
+ found=1
+ if (\$1 ~ /"$NAME"/) {
+ print \$PATTERN
+ } else {
+ print \$0
+ }
+ }
+ END {
+ if ( found != 1 ) {
+ print \"No packages found! Try:\n\n\tslackpkg search $PATTERN\n\nand choose one (and ONLY one package).\n\"
+ }
+ }" ${WORKDIR}/PACKAGES.TXT 2>/dev/null
+ ;;
+ new-config)
+ POSTINST=on
+ ;;
+ generate-template)
+ TEMPLATE=$ARG.template
+ if [ -e $TEMPLATEDIR/$TEMPLATE ]; then
+ echo -e "\
+\"$TEMPLATE\" already exists!\n\
+\nDo you want to overwrite $TEMPLATE (y/N)? \c"
+ answer
+ if [ "$ANSWER" = "Y" -o "$ANSWER" = "y" ]; then
+ rm $TEMPLATEDIR/$TEMPLATE
+ echo
+ else
+ cleanup
+ fi
+ fi
+ generate_template $ARG
+ ;;
+ install-template)
+ TEMPLATE=$ARG.template
+ if [ -e $TEMPLATEDIR/$TEMPLATE ]; then
+ ( cd $TEMPLATEDIR
+ parse_template $TEMPLATE
+ )
+ INPUTLIST=$(cat ${TMPDIR}/${TEMPLATE}.tmp | tr "\n" " ")
+ else
+ echo -e "$ARG template not found!"
+ cleanup
+ fi
+
+ makelist $INPUTLIST
+ if [ -n "$LIST" ]; then
+ showlist "$LIST" $CMD
+ install_pkg
+ else
+ echo -e "All packages from $ARG template are already installed"
+ POSTINST=off
+ fi
+ ;;
+ remove-template)
+ TEMPLATE=$ARG.template
+ if [ -e $TEMPLATEDIR/$TEMPLATE ]; then
+ ( cd $TEMPLATEDIR
+ parse_template $TEMPLATE
+ )
+ INPUTLIST=$(cat ${TMPDIR}/${TEMPLATE}.tmp | tr "\n" " ")
+ else
+ echo -e "$ARG template not found!"
+ cleanup
+ fi
+
+ makelist $INPUTLIST
+ if [ "$LIST" = "" ]; then
+ echo -e "The template $ARG can't be removed - it isn't installed.\n"
+ cleanup
+ fi
+ showlist "$LIST" $CMD
+ remove_pkg
+ ;;
+ *)
+ usage
+ ;;
+esac
+
+#
+# Executes the post-install. This is the default
+# Before runs post-install, check if the slackpkg option is
+# remove, search, update, blacklist, info or clean-system.
+# That options don't change configurations files and, if
+# someone remove the kernel, i hope he knows what is doing.
+#
+for i in check-updates remove search file-search update blacklist info \
+ clean-system download generate-template remove-template; do
+ if [ "$CMD" = "$i" ]; then
+ POSTINST=off
+ fi
+done
+
+if [ "$POSTINST" != "off" ]; then
+ lookkernel
+ looknew
+fi
+
+cleanup
diff --git a/files/slackpkg.8 b/files/slackpkg.8
new file mode 100644
index 0000000..16c463d
--- /dev/null
+++ b/files/slackpkg.8
@@ -0,0 +1,339 @@
+.TH SLACKPKG 8 "Oct 2017" slackpkg-2.82.2 ""
+.SH NAME
+.B slackpkg
+\- Automated tool for managing Slackware Linux packages
+
+.SH SYNOPSIS
+.B slackpkg
+.B [OPTIONS]
+.B {install|remove|search|upgrade|reinstall|blacklist}
+.BI { PATTERN | FILE }
+
+.B slackpkg [OPTIONS] {clean-system|upgrade-all|install-new}
+
+.B slackpkg
+.B [OPTIONS]
+.B {search|file-search}
+.BI { PATTERN | FILE }
+
+.B slackpkg
+.B [OPTIONS]
+.B {generate-template|install-template|remove-template}
+.I TEMPLATENAME
+
+.B slackpkg [OPTIONS] info
+.I PACKAGE
+
+.B slackpkg [OPTIONS] update [gpg]
+
+.B slackpkg [OPTIONS] {new-config|check-updates}
+
+.B slackpkg [OPTIONS] help
+
+.SH DESCRIPTION
+Slackpkg is a tool for those who want to easily install or upgrade
+packages via the network. With slackpkg, you can have a minimal
+installation of Slackware Linux and install/upgrade only those packages
+you need most.
+
+You don't need to setup NFS or make dozens of CDs for all your
+computers; all you need to do is to type one command and all of
+the latest official Slackware packages will be at your fingertips.
+
+.SH INSTRUCTIONS
+Slackpkg has many features. It can search for specific files, remove
+all third-party packages in your system, install packages added to
+Slackware since your last update, show package descriptions, etc.
+
+Before you do anything, you will need to uncomment one mirror in
+/etc/slackpkg/mirrors file and run:
+
+.in +5
+# slackpkg update
+.in
+
+The "update" action will download and format the list of files and
+packages in Slackware. Every time this list is changed, the update
+needs to be run.
+
+The main features of Slackpkg are the ones directly related to
+package management: install, upgrade, and remove packages.
+To do any of these tasks, the Slackpkg syntax is:
+
+.in +5
+# slackpkg [OPTIONS] <action> {PATTERN|FILE}
+.in
+
+.I OPTIONS
+can be one or more of the many configuration options listed in
+/etc/slackpkg/slackpkg.conf. There are equivalent command line options
+for most of the configuration directives found in slackpkg.conf - see the
+.B slackpkg.conf(5)
+man-page to see what options are available.
+
+.I PATTERN
+can be a package name or just part of package name. It can also
+be a software series (like kde, a, ap, ...).
+.br
+
+.I FILE
+is a file with a list of
+.I PATTERNs
+inside: either one per line,
+or several per line with spaces as separators.
+
+Slackpkg can be used to upgrade the whole distribution.
+.br
+The usual way is to do:
+
+.in +5
+# slackpkg update
+.br
+# slackpkg install-new
+.br
+# slackpkg upgrade-all
+.br
+# slackpkg clean-system
+.in
+
+Another feature of Slackpkg is the ability to work with templates, which can
+make it much easier to create different machines with the same contents of
+packages. The basic steps are as follows:
+
+.RS +5
+.IP \(bu 2
+Install one machine
+.IP \(bu 2
+Run "slackpkg generate-template TEMPLATENAME"
+.IP \(bu 2
+Copy /etc/slackpkg/templates/TEMPLATENAME.template to the same directory on
+the other machine
+.IP \(bu 2
+Run "slackpkg install-template TEMPLATENAME" on the other machine
+.RE
+
+.I TEMPLATENAME
+is the name of your template.
+
+Following this manual page, you can find what each of these (and other)
+actions does.
+
+.SH ACTIONS
+.TP 5
+.B help
+.br
+Show slackpkg's actions and a short description of them. Useful if you need
+to know a little about slackpkg. The information here, on man-page is much
+more complete.
+
+.TP 5
+.B update
+.br
+update will download the latest package lists from a Slackware mirror
+(or your CD). It's a good idea to run
+
+.in +5
+# slackpkg update
+.in
+
+before attempting to upgrade, install, or search for packages.
+.br
+If you need to update Slackware's GPG key, run
+
+.in +5
+# slackpkg update gpg
+.in
+
+The GPG key doesn't change. This should be a "one time" command - run it
+once and forget it...
+
+.TP 5
+.B check-updates
+.br
+Verify if there is any update to ChangeLog.txt. This is good to be used from
+cron to alert the sysadmin about updates.
+
+.TP 5
+.B file-search
+.br
+You can search the official Slackware packages for any file in the Slackware
+distribution. Do you need a strange library? Use file-search to find it.
+
+.in +5
+# slackpkg file-search filename
+.in
+
+All packages with matching "filename" will be shown, thus you can see whether
+the packages are installed or not; if not, you can download and install them
+with other slackpkg actions.
+
+.TP 5
+.B search
+.br
+You can search for any package distributed in Slackware.
+
+.in +5
+# slackpkg search pattern
+.in
+
+All packages names that matches with "pattern" will be shown.
+Like file-search, you can see whether the packages are installed or not; if
+not, you can download and install them with other slackpkg actions.
+
+.TP 5
+.B install
+.br
+Installation of a package is very simple. Just use a command like this:
+
+.in +5
+# slackpkg install package
+.in
+
+and the package will be downloaded and installed.
+.br
+You can't use the "install" option to install an already installed package,
+but you may reinstall or upgrade it.
+
+.TP 5
+.B upgrade
+.br
+upgrade installs the most recent official version of the specified package(s).
+
+upgrade will not attempt to install new packages (use the install
+function for that purpose; the latest official version of the package
+will be installed).
+.TP 5
+.B reinstall
+.br
+In case you mistakenly corrupt something, the reinstall option will allow
+you to reinstall the same version of a package that is currently installed.
+
+.TP 5
+.B remove
+.br
+With remove, you can remove certain installed packages. As an example:
+
+.in +5
+# slackpkg remove kde
+.in
+
+will remove all packages with "kde" in their name.
+
+.TP 5
+.B blacklist
+.br
+With this action, you can "blacklist" certain packages.
+.br
+Blacklisted packages will not be installed, upgraded, or removed by slackpkg.
+If you want to remove some package from the black list, please edit
+/etc/slackpkg/blacklist.
+
+.TP 5
+.B download
+.br
+This action tells slackpkg to download the packages, but not to install them.
+They will be placed in /var/cache/packages, and you can
+install/upgrade/reinstall them later (or burn them to CD).
+
+.TP 5
+.B info
+.br
+This action prints information about the package(s): compressed and
+uncompressed size, description, etcetera...
+
+.TP 5
+.B clean-system
+.br
+This action removes all of the packages that don't belong to a standard
+Slackware installation. With this option, you can clean up your system,
+removing third-party packages as well as any packages that were removed
+from the official Slackware package set.
+.br
+If you have some third party (or custom built) packages that you would like
+to keep, you can temporarily add them to the list of blacklisted packages
+before you run the 'clean-system' action.
+
+.TP 5
+.B upgrade-all
+.br
+This action upgrades every package installed on the system to the version in
+the official Slackware tree; this is the "good" way to upgrade the entire
+system.
+.br
+Remember to use the "install-new" action before you use "upgrade-all."
+
+.TP 5
+.B install-new
+This action installs any new packages that are added to the official
+Slackware package set. Run this if you are upgrading your system to
+another Slackware version or if you are using -current.
+.br
+If you want to install all uninstalled Slackware packages onto your system,
+use the following command instead of the install-new action:
+
+.in +5
+# slackpkg install slackware.
+.in
+.TP 5
+.B new-config
+This action searches for .new configuration files and ask the user what to
+do with those files.
+.br
+new-config is very useful when you perform an upgrade and leave the
+configuration files to be reviewed later. Instead of a manual search,
+diff, and replace; you can use the new-config action.
+.br
+new-config searches /etc and /usr/share/vim for new config files.
+.TP 5
+.B generate-template
+This action creates a new template with all official packages that are
+installed in your system. The template is stored at /etc/slackpkg/templates
+.TP 5
+.B install-template
+This action install the required template in the system. The template must
+be in /etc/slackpkg/templates. If the template "includes" other templates,
+all of them need to be in /etc/slackpkg/templates. You can disable the
+"includes" in slackpkg.conf or in command-line.
+.TP 5
+.B remove-template
+This action remove all packages that are part of selected template. Be
+careful, this can put your machine in an unusable state. The "include"
+handling can be activated/deactivated in slackpkg.conf or with the
+appropriate option in command-line.
+
+.SH FILES
+.TP 5
+.B /etc/slackpkg/mirrors
+File to specify the location from which to download packages
+.TP 5
+.B /etc/slackpkg/slackpkg.conf
+General configuration of slackpkg
+.TP 5
+.B /etc/slackpkg/blacklist
+List of packages to skip
+.TP 5
+.B /etc/slackpkg/templates
+Contains all template files
+.TP 5
+.B /usr/libexec/slackpkg
+Contains slackpkg core and additional functions
+.TP 5
+.B /var/lib/slackpkg
+Slackpkg internal use - Formatted package lists, copy of
+ChangeLog.txt, list of files, etcetera...
+
+.SH "SEE ALSO"
+.BR slackpkg.conf (5),
+.BR installpkg (8),
+.BR upgradepkg (8),
+.BR explodepkg (8),
+.BR makepkg (8),
+.BR pkgtool (8).
+
+.SH AUTHORS
+.TP 5
+Piter PUNK aka Roberto F Batista
+<piterpk AT terra DOT com DOT br>
+.TP 5
+Evaldo Gardenali aka UdontKnow
+<evaldo AT fasternet DOT com DOT br>
diff --git a/files/slackpkg.conf.5 b/files/slackpkg.conf.5
new file mode 100644
index 0000000..5af259a
--- /dev/null
+++ b/files/slackpkg.conf.5
@@ -0,0 +1,338 @@
+.TH SLACKPKG.CONF 5 "Oct 2017" slackpkg-2.82.2 ""
+.SH NAME
+.B slackpkg.conf
+\- Configuration data for slackpkg
+
+.SH DESCRIPTION
+
+The slackpkg.conf file contains information for
+.B slackpkg
+(8), an automated tool for managing Slackware Linux packages.
+
+The slackpkg.conf file is a sequence of shell script variables, and each
+variable controls one aspect of slackpkg. Comments begin with the #
+character and end at end of the line, and comments may appear anywhere
+inside the slackpkg.conf file. If some variable appears more than once
+in the file, slackpkg will use the value that was defined last.
+
+Many variables can be overridden by options passed to slackpkg on the command
+line. If you need to override the value of
+.B VARIABLE
+, pass
+.B -variable=value
+on the command line just before the slackpkg action. Multiple variables may
+be overridden.
+
+EXAMPLE: slackpkg -batch=on -default_answer=y upgrade-all
+
+For configuration options that have only two states, possible values are
+either "on" or "off" unless otherwise indicated.
+
+The different configuration options are:
+
+.TP 5
+.B ARCH
+.br
+Chooses the system architecture. Usually Slackpkg can find the correct
+value using "uname -m". The valid values are:
+
+.ds title MACHINE\t\tVALID ARCH VALUES
+.ds arm ARM\t\t\tarm
+.ds x86 x86 (32bits)\ti386, i486, i586 and i686
+.ds x86_64 x86 (64bits)\tx86_64
+.ds ppc PowerPC\t\tpowerpc
+.ds s390 S/390\t\t390
+.in +5
+.B \*[title]
+.br
+\*[arm]
+.br
+\*[x86]
+.br
+\*[x86_64]
+.br
+\*[ppc]
+.br
+\*[s390]
+.in
+
+The default value of
+.B ARCH
+depends on your architecture.
+
+.TP 5
+.B SLACKKEY
+.br
+Slackpkg checks the package signature file (.asc) against the GPG signature
+of the project. Different ports of Slackware can have different signatures,
+and Slackpkg tries to find the correct one based on the architecture of your
+system. If the automatically-detected
+.B SLACKKEY
+isn't correct, you can change it using this option.
+
+The default value of
+.B SLACKKEY
+depends on your Slackware port.
+
+.TP 5
+.B TEMP
+.br
+Defines the location to which slackpkg will download the packages before
+installing/upgrading them.
+
+The default value of
+.B TEMP
+is /var/cache/packages.
+
+.TP 5
+.B WORKDIR
+.br
+Defines the directory for package lists, file lists, and other information
+used by slackpkg as it works. Do not change the value of this variable
+unless you know what you are doing.
+
+The default value of
+.B WORKDIR
+is /var/lib/slackpkg.
+
+.TP 5
+.B WGETFLAGS
+.br
+Selects special options for wget. If you need to use multiple options,
+remember to put them between double quotes.
+
+The default value of
+.B WGETFLAGS
+is "\--passive-ftp"
+
+.TP 5
+.B DELALL
+.br
+If set to "on", all downloaded files will be removed after slackpkg performs
+install or upgrade (this does NOT have any impact when slackpkg is run with
+"download"). If set to "off", the files will be kept in the directory
+defined in
+.B TEMP
+(as described above).
+
+The default value of
+.B DELALL
+is "on".
+.br
+From command line, you can use -delall=value.
+
+.TP 5
+.B CHECKMD5
+.br
+Enables (on) or disables (off) the checking of MD5 checksums of all downloaded
+packages before installing or upgrading them.
+
+The default value of
+.B CHECKMD5
+is "on".
+.br
+From command line, you can use -checkmd5=value.
+
+.TP 5
+.B CHECKGPG
+.br
+Enables (on) or disables (off) the check of GPG signature for each package
+before install or upgrade.
+
+The default value of
+.B CHECKGPG
+is "on".
+.br
+From command line, you can use -checkgpg=value.
+
+.TP 5
+.B CHECKSIZE
+.br
+Enables (on) or disables (off) the check of available disk space for each
+package before install or upgrade.
+
+The default value of
+.B CHECKSIZE
+is "off".
+.br
+From command line, you can use -checksize=value.
+
+.TP 5
+.B PKGMAIN
+.br
+Defines the main distribution directory. Usually, you don't need to worry
+about this variable, as Slackpkg tries to find it based on your architecture.
+However, if you need to change it, then include this variable in your
+slackpkg.conf. This should always be the directory which contains the
+Slackware package set series (A, AP, D, E, F, ...).
+
+Default: depends on Slackware port
+
+.TP 5
+.B PRIORITY
+.br
+This array selects the priority at which directories on the mirror will have
+when slackpkg looks for packages. If a package is found in more than one
+place, the package in first directory gets priority, then second, then third,
+then fourth and finally, the package found in last listed directory. You can
+use %PKGMAIN to use the contents of PKGMAIN variable.
+
+Default values (in order): patches %PKGMAIN extra pasture testing
+
+.TP 5
+.B POSTINST
+.br
+Enables (on) or disables (off) slackpkg's post-installation features, such
+as checking for new (*.new) configuration files and new kernel images, and
+prompts you for what it should do.
+
+The default value of
+.B POSTINST
+is "on".
+.br
+From command line, you can use -postinst=value.
+
+.TP 5
+.B ONLY_NEW_DOTNEW
+.br
+When
+.B POSTINST
+is set to "on", slackpkg will search for all .new files inside /etc and
+prompt the user for what to do with them. However, some users prefer to
+see only the .new files installed in slackpkg's last execution, so if
+this applies to you, set
+.B ONLY_NEW_DOTNEW
+to "on".
+
+The default value of
+.B ONLY_NEW_DOTNEW
+is "off". Only change this if you know what are you doing...
+.br
+From command line, you can use -only_new_dotnew=value.
+
+.TP 5
+.B ONOFF
+.br
+The
+.B ONOFF
+variable sets the initial behavior of the dialog interface.
+If you set this to "on" then all packages will be selected by default.
+If you prefer the opposite option (all unchecked), then set this to "off".
+
+The default value of
+.B ONOFF
+is "on".
+.br
+From command line, you can use -onoff=value.
+
+.TP 5
+.B DOWNLOAD_ALL
+.br
+If this variable is set to "on", all files will be downloaded before the
+requested operation (install or upgrade) is performed. If set to "off",
+then the files will be downloaded and the operation (install/upgrade) performed
+one by one.
+
+The default value of
+.B DOWNLOAD_ALL
+is "off".
+.br
+From command line, you can use -download_all=value.
+
+.TP 5
+.B DIALOG
+.br
+Enables (on) or disables (off) the dialog interface.
+
+The default value of
+.B DIALOG
+is "on".
+.br
+From command line, you can use -dialog=value.
+
+.TP 5
+.B DIALOG_MAXARGS
+.br
+Set the max number of characters that will be send to "dialog". If this number
+is reached in upgrade, slackpkg removes the information about current installed
+version of each package. If even without this information the number is reached
+again, slackpkg returns an error to the user.
+
+If
+.B DIALOG_MAXARGS
+is unset, 19500 is the default value.
+.br
+From command line, you can use -dialog_maxargs=value.
+
+.TP 5
+.B BATCH
+.br
+Enables (on) or disables (off) the non-interactive mode. When run in batch
+mode, slackpkg will not prompt the user for anything; instead, all questions
+will get
+.B DEFAULT_ANSWER
+(see below).
+.br
+If you perform an upgrade using this mode, you will need to run
+"slackpkg new-config" later to find and merge .new files.
+
+The default value of
+.B BATCH
+is "off".
+.br
+From command line, you can use -batch=value.
+
+.TP 5
+.B DEFAULT_ANSWER
+.br
+This is the default answer to questions when slackpkg prompts the user for
+some information. This is used only in non-interactive mode (when
+.B BATCH
+is "yes" or the user turns batch mode on via the command line); otherwise,
+this variable has no effect.
+.br
+Valid values are "y" or "n".
+
+The default value of
+.B DEFAULT_ANSWER
+is "n".
+.br
+From command line, you can use -default_answer=value.
+
+.TP 5
+.B USE_INCLUDES
+.br
+Slackpkg templates can include other templates. This reduces the package
+duplication in many templates, but it can be a problem if you want to remove
+only a specific template. You can disable the #include parsing by setting
+this option to "off".
+
+The default value of
+.B USE_INCLUDES
+is "on".
+.br
+From command line, you can use -use_includes=value.
+
+.TP 5
+.B SPINNING
+.br
+When Slackpkg is doing an activity that takes some time, it gives visual
+feedback with a spinning bar. If you don't like the spinning bar, it can be
+disabled by setting this option to "off".
+
+The default value of
+.B SPINNING
+is "on".
+.br
+From command line, you can use -spinning=value.
+
+.SH FILES
+.TP 5
+.B /etc/slackpkg/slacpkg.conf
+
+.SH "SEE ALSO"
+.BR slackpkg (8)
+.BR pkgtool (8)
+.BR installpkg (8)
+.BR upgradepkg (8)
+.BR removepkg (8)
diff --git a/files/slackpkg.conf.new b/files/slackpkg.conf.new
new file mode 100644
index 0000000..9eae0ab
--- /dev/null
+++ b/files/slackpkg.conf.new
@@ -0,0 +1,153 @@
+#
+# slackpkg.conf - Configuration for SlackPkg
+# v2.8
+#
+
+#
+# SlackPkg - An Automated packaging tool for Slackware Linux
+# Copyright (C) 2003-2011 Roberto F. Batista, Evaldo Gardenali
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Project Page: http://slackpkg.org/
+# Roberto F. Batista (aka PiterPunk) piterpunk@slackware.com
+# Evaldo Gardenali (aka UdontKnow) evaldogardenali@fasternet.com.br
+#
+
+# For configuration options that have only two states, possible values are
+# either "on" or "off"
+
+# Remember, the only official Slackware ports are x86, s390 and arm, and
+# slackpkg developers don't have s390 boxes for testing. If you are
+# testing/using other architectures and have suggestions or patches,
+# please let me know (piterpunk@slackware.com)
+#
+# Select the architecture of your system. Valid values are:
+# i#86 (where # is 3, 4, 5 or 6)
+# x86_64
+# s390
+# arm* (* can be v4, v5tejl, and other ARM versions)
+# powerpc
+#
+# The line is commented because slackpkg will try to find your
+# architecture automagically. If you want to override what slackpkg
+# finds, put the value after the = and uncomment this line
+#ARCH=
+
+# The default PKGMAIN is "slackware", but some derived distros use other
+# names as the main directory. PKGMAIN is the place with the slackware
+# package series (a, ap, n, ... ).
+#
+# Usually slackpkg can automagically discover this variable. If you want
+# to override the discovered variable, then uncomment this line and change
+# it to reflect the correct value of PKGMAIN
+#PKGMAIN=slackware
+
+# Slackware packages are signed by project key. Slackpkg uses this key
+# to check if the packages downloaded are valid, so remember to set
+# CHECKGPG to "on".
+#
+# Usually slackpkg can automagically discover this variable. If you want
+# to override the discovered variable, then uncomment this line and edit
+# as needed
+#SLACKKEY="Slackware Linux Project <security@slackware.com>"
+
+# Downloaded files will be in directory below:
+TEMP=/var/cache/packages
+
+# Package lists, file lists, and others will be at WORKDIR:
+WORKDIR=/var/lib/slackpkg
+
+# Special options for wget (default is WGETFLAGS="--passive-ftp")
+WGETFLAGS="--passive-ftp"
+
+# If DELALL is "on", all downloaded files will be removed after install.
+DELALL=on
+
+# If CHECKMD5 is "on", the system will check the md5sums of all packages before
+# install/upgrade/reinstall is performed.
+CHECKMD5=on
+
+# If CHECKGPG is "on", the system will verify the GPG signature of each package
+# before install/upgrade/reinstall is performed.
+CHECKGPG=on
+
+# If CHECKSIZE is "on", the system will check if we have sufficient disk
+# space to install selected package. This make upgrade/install safer, but slow
+# upgrade/install process.
+CHECKSIZE=off
+
+# PRIORITY sets the download priority. slackpkg will try to found the
+# package first in the first value, then the second one, through all
+# values in list.
+#
+# Default value: patches %PKGMAIN extra pasture testing
+PRIORITY=( patches %PKGMAIN extra pasture testing )
+
+# Enables (on) or disables (off) slackpkg's post-installation features, such
+# as checking for new (*.new) configuration files and new kernel images, and
+# prompts you for what it should do. Default=on
+POSTINST=on
+
+# Post-installation features, by default, search all of /etc for .new files.
+# This is the safe option: with it, you won't have any unmerged .new files
+# to cause problems. Even so, some people prefer that only the .new files
+# installed by the current slackpkg session be checked.
+# If this is your case, change ONLY_NEW_DOTNEW to "on".
+# Default=off
+ONLY_NEW_DOTNEW=off
+
+# The ONOFF variable sets the initial behavior of the dialog interface.
+# If you set this to "on" then all packages will be selected by default.
+# If you prefer the opposite option (all unchecked), then set this to "off".
+ONOFF=on
+
+# If this variable is set to "on", all files will be downloaded before the
+# requested operation (install or upgrade) is performed. If set to "off",
+# then the files will be downloaded and the operation (install/upgrade)
+# performed one by one. Default=on
+DOWNLOAD_ALL=on
+
+# Enables (on) or disables (off) the dialog interface in slackpkg. Default=on
+DIALOG=on
+
+# Enables (on) or disables (off) the non-interactive mode. If set to "on",
+# slackpkg will run without asking the user anything, and answer all questions
+# with DEFAULT_ANSWER. If you do any upgrades using this mode, you'll need to
+# run "slackpkg new-config" later to find and merge any .new files.
+BATCH=off
+
+# Default answer to slackpkg questions. Can be "y" or "n".
+DEFAULT_ANSWER=n
+
+# Slackpkg allows a template to "include" the packages specified in another
+# template. This option enables (on) or disables (off) the parsing of
+# any "#include" directives in template files. Default=on
+USE_INCLUDES=on
+
+# Enables a spinning bar as visual feedback when slackpkg is making its
+# internal lists and some other operations. Default=on
+SPINNING=on
+
+# Max number of characters that "dialog" command can handle.
+# If unset, this variable will be 19500 (the number that works on
+# Slackware 10.2)
+DIALOG_MAXARGS=139000
+
+#
+# The MIRROR is set from /etc/slackpkg/mirrors
+# You only need to uncomment the selected mirror.
+# Uncomment one mirror only.
+#