summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/a/dcron/crond.default10
-rwxr-xr-xsource/a/dcron/dcron.SlackBuild56
-rw-r--r--source/a/dcron/defs.h._DEFAULT_SOURCE.diff11
-rw-r--r--source/a/dcron/doinst.sh35
-rw-r--r--source/a/dcron/patches/0002-README-var-spool-cron-crontabs-root.patch26
-rw-r--r--source/a/dcron/patches/0003-CHANGELOG-tweak.patch34
-rw-r--r--source/a/dcron/patches/0006-Fixed-a-bug-whereby-syncs-killed-all-waiting-jobs.patch35
-rw-r--r--source/a/dcron/patches/0007-Update-main.c.patch (renamed from source/a/dcron/dcron.update.during.long.running.jobs.diff)10
-rw-r--r--source/a/dcron/patches/0008-Fix-3-every-Nth-day-of-week-syntax-not-working.patch538
-rw-r--r--source/a/dcron/patches/0009-Updated-manpage.patch45
-rw-r--r--source/a/dcron/patches/crontab.c.O_EXCL.diff (renamed from source/a/dcron/crontab.c.O_EXCL.diff)0
-rw-r--r--source/a/dcron/patches/defs.h.TMPDIR.diff (renamed from source/a/dcron/defs.h.TMPDIR.diff)2
-rw-r--r--source/a/dcron/rc.crond40
-rw-r--r--source/a/efibootmgr/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch28
-rw-r--r--source/a/efibootmgr/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch30
-rw-r--r--source/a/efibootmgr/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch29
-rw-r--r--source/a/efibootmgr/efibootmgr-0.5.4-support-4k-sectors.patch176
-rwxr-xr-xsource/a/efibootmgr/efibootmgr.SlackBuild32
-rw-r--r--source/a/efibootmgr/slack-desc2
-rwxr-xr-xsource/a/efivar/efivar.SlackBuild114
-rw-r--r--source/a/efivar/slack-desc19
-rwxr-xr-xsource/a/elilo/elilo.SlackBuild5
-rw-r--r--source/a/haveged/doinst.sh28
-rwxr-xr-xsource/a/haveged/haveged.SlackBuild127
-rw-r--r--source/a/haveged/haveged.url1
-rw-r--r--source/a/haveged/rc.haveged46
-rw-r--r--source/a/haveged/slack-desc19
-rwxr-xr-xsource/a/pkgtools/pkgtools.SlackBuild2
-rw-r--r--source/a/pkgtools/scripts/setup.services24
-rw-r--r--source/a/sysvinit-scripts/scripts/rc.64
-rw-r--r--source/a/sysvinit-scripts/scripts/rc.K2
-rw-r--r--source/a/sysvinit-scripts/scripts/rc.M11
-rw-r--r--source/a/sysvinit-scripts/scripts/rc.S4
-rwxr-xr-xsource/a/sysvinit-scripts/sysvinit-scripts.SlackBuild2
-rwxr-xr-xsource/ap/at/at.SlackBuild15
-rw-r--r--source/ap/at/atd.default6
-rw-r--r--source/ap/at/doinst.sh33
-rw-r--r--source/ap/at/rc.atd39
-rw-r--r--source/ap/at/slack-desc2
-rw-r--r--source/l/glibc/doinst.sh-glibc5
-rw-r--r--source/l/glibc/doinst.sh-glibc-solibs5
-rwxr-xr-xsource/l/glibc/glibc.SlackBuild2
-rwxr-xr-xsource/l/gnu-efi/gnu-efi.SlackBuild14
-rw-r--r--source/l/gnu-efi/gnu-efi.url2
44 files changed, 1319 insertions, 351 deletions
diff --git a/source/a/dcron/crond.default b/source/a/dcron/crond.default
new file mode 100644
index 00000000..03203006
--- /dev/null
+++ b/source/a/dcron/crond.default
@@ -0,0 +1,10 @@
+# Default log level is "notice". If you want cron to actually log activity
+# to /var/log/cron, then change "-l notice" to "-l info" to increase the
+# logging level.
+#
+# Valid log levels are:
+# alert, crit, debug, emerg, err, error (deprecated synonym for err),
+# info, notice, panic (deprecated synonym for emerg), warning,
+# warn (deprecated synonym for warning).
+
+CROND_OPTS="-l notice"
diff --git a/source/a/dcron/dcron.SlackBuild b/source/a/dcron/dcron.SlackBuild
index 5c32ace8..abd76e21 100755
--- a/source/a/dcron/dcron.SlackBuild
+++ b/source/a/dcron/dcron.SlackBuild
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
# Copyright 2009, 2010, 2012, 2016, 2018 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
@@ -24,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=dcron
VERSION=${VERSION:-$(echo dcron-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-6}
+BUILD=${BUILD:-7}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -44,6 +44,7 @@ if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
exit 0
fi
+CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-dcron
@@ -73,30 +74,47 @@ find . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
-# Define TMPDIR as /var/spool/cron instead of /tmp
-zcat $CWD/defs.h.TMPDIR.diff.gz | patch -p1 --verbose || exit 1
+# Apply patches from git:
+zcat $CWD/patches/0002-README-var-spool-cron-crontabs-root.patch.gz | patch -p1 --verbose || exit 1
+zcat $CWD/patches/0003-CHANGELOG-tweak.patch.gz | patch -p1 --verbose || exit 1
+zcat $CWD/patches/0006-Fixed-a-bug-whereby-syncs-killed-all-waiting-jobs.patch.gz | patch -p1 --verbose || exit 1
+zcat $CWD/patches/0007-Update-main.c.patch.gz | patch -p1 --verbose || exit 1
+zcat $CWD/patches/0008-Fix-3-every-Nth-day-of-week-syntax-not-working.patch.gz | patch -p1 --verbose || exit 1
+zcat $CWD/patches/0009-Updated-manpage.patch.gz | patch -p1 --verbose || exit 1
+
+# Define TMPDIR as /run/cron instead of /tmp:
+# This eliminates possibility of stale $TMPDIR/cron.??????/ dirs as
+# they won't survive a reboot when they're in a subdir of /run
+zcat $CWD/patches/defs.h.TMPDIR.diff.gz | patch -p1 --verbose || exit 1
# Fix problem where user creates /var/spool/cron/crontabs/<user>.new
# using 'crontab -', exits with control-c, and then crontab refuses to
-# overwrite the junk file. It would be better if dcron would wipe
+# overwrite the junk file. It would be better if dcron would wipe
# the junk file in the event it were not closed correctly, but oh well.
-zcat $CWD/crontab.c.O_EXCL.diff.gz | patch -p1 --verbose || exit 1
+zcat $CWD/patches/crontab.c.O_EXCL.diff.gz | patch -p1 --verbose || exit 1
-# Running jobs should not block cron.update:
-zcat $CWD/dcron.update.during.long.running.jobs.diff.gz | patch -p1 --verbose || exit 1
+CFLAGS+="$SLKCFLAGS" make \
+ PREFIX=/usr \
+ BINDIR=/usr/bin \
+ SBINDIR=/usr/sbin \
+ MANDIR=/usr/man \
+ CRONTAB_GROUP=root \
+ || exit 1
-# Change _BSD_SOURCE to _DEFAULT_SOURCE for recent glibc:
-zcat $CWD/defs.h._DEFAULT_SOURCE.diff.gz | patch -p1 --verbose || exit 1
+# This works now, but predictability is a good thing...
+#make install DESTDIR=$PKG
-CFLAGS+="$SLKCFLAGS" make || exit 1
strip --strip-unneeded crond crontab
-mkdir -p $PKG/usr/{bin,sbin}
+mkdir -p $PKG/usr/sbin
cat crond > $PKG/usr/sbin/crond
-cat crontab > $PKG/usr/bin/crontab
-zcat $CWD/run-parts.gz > $PKG/usr/bin/run-parts
chmod 0755 $PKG/usr/sbin/crond
+
+mkdir -p $PKG/usr/bin
+cat crontab > $PKG/usr/bin/crontab
chmod 4711 $PKG/usr/bin/crontab
+
+zcat $CWD/run-parts.gz > $PKG/usr/bin/run-parts
chmod 0755 $PKG/usr/bin/run-parts
mkdir -p $PKG/usr/man/man{1,8}
@@ -104,6 +122,15 @@ cat crontab.1 | gzip -9c > $PKG/usr/man/man1/crontab.1.gz
cat crond.8 | gzip -9c > $PKG/usr/man/man8/crond.8.gz
cat $CWD/run-parts.8.gz > $PKG/usr/man/man8/run-parts.8.gz
+# Add the init script:
+mkdir -p $PKG/etc/rc.d
+cat $CWD/rc.crond > $PKG/etc/rc.d/rc.crond.new
+chmod 755 $PKG/etc/rc.d/rc.crond.new
+
+# Add the default file:
+mkdir -p $PKG/etc/default
+cat $CWD/crond.default > $PKG/etc/default/crond.new
+
# Create some other stuff we need
mkdir -p $PKG/etc/cron.{hourly,daily,weekly,monthly}
mkdir -p $PKG/var/spool/cron/crontabs
@@ -112,6 +139,7 @@ chmod 0751 $PKG/var/spool/cron
chmod 0750 $PKG/var/spool/cron/crontabs $PKG/var/spool/cron/cronstamps
zcat $CWD/crontab.root > $PKG/var/spool/cron/crontabs/root.new
chmod 0600 $PKG/var/spool/cron/crontabs/root.new
+
# dcron will whine about "unable to scan" this directory, so we'll create it
mkdir -p $PKG/etc/cron.d
diff --git a/source/a/dcron/defs.h._DEFAULT_SOURCE.diff b/source/a/dcron/defs.h._DEFAULT_SOURCE.diff
deleted file mode 100644
index 8d17b33a..00000000
--- a/source/a/dcron/defs.h._DEFAULT_SOURCE.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./defs.h.orig 2016-05-10 12:56:47.127582837 -0500
-+++ ./defs.h 2016-05-10 12:59:31.059577597 -0500
-@@ -17,7 +17,7 @@
- */
-
- #define _XOPEN_SOURCE 1
--#define _BSD_SOURCE 1
-+#define _DEFAULT_SOURCE 1
-
- #include <sys/types.h>
- #include <sys/stat.h>
diff --git a/source/a/dcron/doinst.sh b/source/a/dcron/doinst.sh
index ce8dc7f3..0d5f1ee8 100644
--- a/source/a/dcron/doinst.sh
+++ b/source/a/dcron/doinst.sh
@@ -1,5 +1,30 @@
-if [ ! -r var/spool/cron/crontabs/root ]; then
- mv var/spool/cron/crontabs/root.new var/spool/cron/crontabs/root
-else
- rm -f var/spool/cron/crontabs/root.new
-fi
+config() {
+ for infile in $1; do
+ NEW="$infile"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+ done
+}
+
+preserve_perms() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ if [ -e $OLD ]; then
+ cp -a $OLD ${NEW}.incoming
+ cat $NEW > ${NEW}.incoming
+ mv ${NEW}.incoming $NEW
+ fi
+ config $NEW
+}
+
+preserve_perms etc/rc.d/rc.crond.new
+config etc/default/crond.new
+config var/spool/cron/crontabs/root.new
+rm -f var/spool/cron/crontabs/root.new
diff --git a/source/a/dcron/patches/0002-README-var-spool-cron-crontabs-root.patch b/source/a/dcron/patches/0002-README-var-spool-cron-crontabs-root.patch
new file mode 100644
index 00000000..57b8966d
--- /dev/null
+++ b/source/a/dcron/patches/0002-README-var-spool-cron-crontabs-root.patch
@@ -0,0 +1,26 @@
+From 500f3d402a94c6950946515d76ebd72872a6d0e2 Mon Sep 17 00:00:00 2001
+From: Jim Pryor <profjim@jimpryor.net>
+Date: Sun, 1 May 2011 18:56:17 -0400
+Subject: [PATCH 2/9] README: /var/spool/cron/crontabs/root
+
+Signed-off-by: Jim Pryor <profjim@jimpryor.net>
+---
+ README | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/README b/README
+index de02958..e33b1aa 100644
+--- a/README
++++ b/README
+@@ -115,7 +115,7 @@ are normally in /var/spool/cron/cronstamps. These directories normally have perm
+
+ Here is the superuser's crontab, created using `sudo crontab -e`:
+
+- -rw------- 0 root root 513 Jan 6 18:58 /var/spool/cron/root
++ -rw------- 0 root root 513 Jan 6 18:58 /var/spool/cron/crontabs/root
+
+ TESTING
+ -------
+--
+2.13.2
+
diff --git a/source/a/dcron/patches/0003-CHANGELOG-tweak.patch b/source/a/dcron/patches/0003-CHANGELOG-tweak.patch
new file mode 100644
index 00000000..56f3c750
--- /dev/null
+++ b/source/a/dcron/patches/0003-CHANGELOG-tweak.patch
@@ -0,0 +1,34 @@
+From 2e3717c48ead5a962e2c29bc818672fff36f73f6 Mon Sep 17 00:00:00 2001
+From: Jim Pryor <profjim@jimpryor.net>
+Date: Sun, 1 May 2011 19:21:21 -0400
+Subject: [PATCH 3/9] CHANGELOG tweak
+
+Signed-off-by: Jim Pryor <profjim@jimpryor.net>
+---
+ CHANGELOG | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index a1ea4a7..0710c3b 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -19,12 +19,12 @@ git
+
+ * Documentation and error message updates.
+
+-v4.5 30-Apr-2011
++v4.5 1-May-2011
+ * Some cron jobs were running multiple times. Now we make sure not to
+ ArmJobs that are already running; and not to resynchronize while jobs are
+- running; and to poll the DST setting. (Fixes Arch FS#18681; thanks to Paul
+- Gideon Dann for identifying the second issue; and Tilman Sauerbeck for
+- identifying the third.)
++ running; and to poll the DST setting. (Fixes Arch FS#18681; thanks to Vincent
++ Cappe and Paul Gideon Dann for identifying the second issue; and Tilman
++ Sauerbeck for identifying the third.)
+
+ * @monthly was wrongly being parsed the same as @yearly (fixes Arch
+ FS#19123). Thanks to Peter Johnson, Paul Gideon Dann, and Tilman Sauerbeck.
+--
+2.13.2
+
diff --git a/source/a/dcron/patches/0006-Fixed-a-bug-whereby-syncs-killed-all-waiting-jobs.patch b/source/a/dcron/patches/0006-Fixed-a-bug-whereby-syncs-killed-all-waiting-jobs.patch
new file mode 100644
index 00000000..090e2e5f
--- /dev/null
+++ b/source/a/dcron/patches/0006-Fixed-a-bug-whereby-syncs-killed-all-waiting-jobs.patch
@@ -0,0 +1,35 @@
+From 65d2649a7c8b72561eefcec239f97e7fd386114e Mon Sep 17 00:00:00 2001
+From: Corey Theiss <corey.theiss@maclaren.com>
+Date: Mon, 24 Mar 2014 16:25:31 -0400
+Subject: [PATCH 6/9] Fixed a bug whereby syncs killed all waiting jobs.
+
+---
+ database.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/database.c b/database.c
+index dd971ce..02c5c92 100644
+--- a/database.c
++++ b/database.c
+@@ -1232,8 +1232,17 @@ CheckJobs(void)
+ }
+ }
+ }
++ nStillRunning += file->cf_Running;
++ }
++ /* For the purposes of this check, increase the "still running" counter if a file has lines that are waiting */
++ if (file->cf_Running == 0) {
++ for (line = file->cf_LineBase; line; line = line->cl_Next) {
++ if (line->cl_Pid == -2) {
++ nStillRunning += 1;
++ break;
++ }
++ }
+ }
+- nStillRunning += file->cf_Running;
+ }
+ return(nStillRunning);
+ }
+--
+2.13.2
+
diff --git a/source/a/dcron/dcron.update.during.long.running.jobs.diff b/source/a/dcron/patches/0007-Update-main.c.patch
index cd1297c7..d120f37c 100644
--- a/source/a/dcron/dcron.update.during.long.running.jobs.diff
+++ b/source/a/dcron/patches/0007-Update-main.c.patch
@@ -1,6 +1,12 @@
- Update main.c
+From abf8c4bf53a84ef3de530519a3bbb6b599595f2c Mon Sep 17 00:00:00 2001
+From: robdewit <rdewit@wise-guys.nl>
+Date: Tue, 31 Mar 2015 14:24:15 +0200
+Subject: [PATCH 7/9] Update main.c
Removed bug where cron.update is not picked up while jobs are still running. (We have long running cronjobs and experienced long overdue cron.update files)
+---
+ main.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/main.c b/main.c
index 595f07a..0eba280 100644
@@ -16,4 +22,6 @@ index 595f07a..0eba280 100644
CheckUpdates(CDir, NULL, t1, t2);
CheckUpdates(SCDir, "root", t1, t2);
}
+--
+2.13.2
diff --git a/source/a/dcron/patches/0008-Fix-3-every-Nth-day-of-week-syntax-not-working.patch b/source/a/dcron/patches/0008-Fix-3-every-Nth-day-of-week-syntax-not-working.patch
new file mode 100644
index 00000000..e50158f0
--- /dev/null
+++ b/source/a/dcron/patches/0008-Fix-3-every-Nth-day-of-week-syntax-not-working.patch
@@ -0,0 +1,538 @@
+From f048a83da348c1d62204fcbdf407b7abf33e3db0 Mon Sep 17 00:00:00 2001
+From: Erik on RPi <ewfalor@gmail.com>
+Date: Tue, 17 Nov 2015 11:28:42 -0700
+Subject: [PATCH 8/9] Fix #3 '"every Nth [day of week]" syntax not working'
+
+---
+ database.c | 237 ++++++++++++++++++++++++++++++++++++++++++-------------------
+ defs.h | 24 ++++---
+ 2 files changed, 180 insertions(+), 81 deletions(-)
+
+diff --git a/database.c b/database.c
+index 02c5c92..c0cdc11 100644
+--- a/database.c
++++ b/database.c
+@@ -9,6 +9,14 @@
+
+ #include "defs.h"
+
++#define FIRST_DOW (1 << 0)
++#define SECOND_DOW (1 << 1)
++#define THIRD_DOW (1 << 2)
++#define FOURTH_DOW (1 << 3)
++#define FIFTH_DOW (1 << 4)
++#define LAST_DOW (1 << 5)
++#define ALL_DOW (FIRST_DOW|SECOND_DOW|THIRD_DOW|FOURTH_DOW|FIFTH_DOW|LAST_DOW)
++
+ Prototype void CheckUpdates(const char *dpath, const char *user_override, time_t t1, time_t t2);
+ Prototype void SynchronizeDir(const char *dpath, const char *user_override, int initial_scan);
+ Prototype void ReadTimestamps(const char *user);
+@@ -21,8 +29,10 @@ Prototype int CheckJobs(void);
+ void SynchronizeFile(const char *dpath, const char *fname, const char *uname);
+ void DeleteFile(CronFile **pfile);
+ char *ParseInterval(int *interval, char *ptr);
+-char *ParseField(char *userName, char *ary, int modvalue, int off, int onvalue, const char **names, char *ptr);
++char *ParseField(char *userName, char *ary, int modvalue, int offset, int onvalue, const char **names, char *ptr);
+ void FixDayDow(CronLine *line);
++void PrintLine(CronLine *line);
++void PrintFile(CronFile *file, char* loc, char* fname, int line);
+
+ CronFile *FileBase = NULL;
+
+@@ -454,15 +464,15 @@ SynchronizeFile(const char *dpath, const char *fileName, const char *userName)
+ * parse date ranges
+ */
+
+- ptr = ParseField(file->cf_UserName, line.cl_Mins, 60, 0, 1,
++ ptr = ParseField(file->cf_UserName, line.cl_Mins, FIELD_MINUTES, 0, 1,
+ NULL, ptr);
+- ptr = ParseField(file->cf_UserName, line.cl_Hrs, 24, 0, 1,
++ ptr = ParseField(file->cf_UserName, line.cl_Hrs, FIELD_HOURS, 0, 1,
+ NULL, ptr);
+- ptr = ParseField(file->cf_UserName, line.cl_Days, 32, 0, 1,
++ ptr = ParseField(file->cf_UserName, line.cl_Days, FIELD_M_DAYS, 0, 1,
+ NULL, ptr);
+- ptr = ParseField(file->cf_UserName, line.cl_Mons, 12, -1, 1,
++ ptr = ParseField(file->cf_UserName, line.cl_Mons, FIELD_MONTHS, -1, 1,
+ MonAry, ptr);
+- ptr = ParseField(file->cf_UserName, line.cl_Dow, 7, 0, 31,
++ ptr = ParseField(file->cf_UserName, line.cl_Dow, FIELD_W_DAYS, 0, ALL_DOW,
+ DowAry, ptr);
+ /*
+ * check failure
+@@ -634,12 +644,12 @@ SynchronizeFile(const char *dpath, const char *fileName, const char *userName)
+
+ if (line.cl_JobName) {
+ if (DebugOpt)
+- printlogf(LOG_DEBUG, " Command %s Job %s\n", line.cl_Shell, line.cl_JobName);
++ printlogf(LOG_DEBUG, " Command %s Job %s\n\n", line.cl_Shell, line.cl_JobName);
+ } else {
+ /* when cl_JobName is NULL, we point cl_Description to cl_Shell */
+ line.cl_Description = line.cl_Shell;
+ if (DebugOpt)
+- printlogf(LOG_DEBUG, " Command %s\n", line.cl_Shell);
++ printlogf(LOG_DEBUG, " Command %s\n\n", line.cl_Shell);
+ }
+
+ *pline = calloc(1, sizeof(CronLine));
+@@ -691,7 +701,7 @@ ParseInterval(int *interval, char *ptr)
+ }
+
+ char *
+-ParseField(char *user, char *ary, int modvalue, int off, int onvalue, const char **names, char *ptr)
++ParseField(char *user, char *ary, int modvalue, int offset, int onvalue, const char **names, char *ptr)
+ {
+ char *base = ptr;
+ int n1 = -1;
+@@ -714,9 +724,9 @@ ParseField(char *user, char *ary, int modvalue, int off, int onvalue, const char
+ ++ptr;
+ } else if (*ptr >= '0' && *ptr <= '9') {
+ if (n1 < 0)
+- n1 = strtol(ptr, &ptr, 10) + off;
++ n1 = strtol(ptr, &ptr, 10) + offset;
+ else
+- n2 = strtol(ptr, &ptr, 10) + off;
++ n2 = strtol(ptr, &ptr, 10) + offset;
+ skip = 1;
+ } else if (names) {
+ int i;
+@@ -805,7 +815,7 @@ ParseField(char *user, char *ary, int modvalue, int off, int onvalue, const char
+ int i;
+
+ for (i = 0; i < modvalue; ++i)
+- if (modvalue == 7)
++ if (modvalue == FIELD_W_DAYS)
+ printlogf(LOG_DEBUG, "%2x ", ary[i]);
+ else
+ printlogf(LOG_DEBUG, "%d", ary[i]);
+@@ -815,50 +825,66 @@ ParseField(char *user, char *ary, int modvalue, int off, int onvalue, const char
+ return(ptr);
+ }
+
++/* Reconcile Days of Month with Days of Week.
++ * There are four cases to cover:
++ * 1) DoM and DoW are both specified as *; the task may run on any day
++ * 2) DoM is * and DoW is specific; the task runs weekly on the specified DoW(s)
++ * 3) DoM is specific and DoW is *; the task runs on the specified DoM, regardless
++ * of which day of the week they fall
++ * 4) DoM is in the range [1..5] and DoW is specific; the task runs on the Nth
++ * specified DoW. DoM > 5 means the last such DoW in that month
++ */
+ void
+ FixDayDow(CronLine *line)
+ {
+- unsigned short i,j;
+- short weekUsed = 0;
+- short daysUsed = 0;
++ unsigned short i;
++ short DowStar = 1;
++ short DomStar = 1;
++ char mask = 0;
+
+ for (i = 0; i < arysize(line->cl_Dow); ++i) {
+ if (line->cl_Dow[i] == 0) {
+- weekUsed = 1;
++ /* '*' was NOT specified in the DoW field on this CronLine */
++ DowStar = 0;
+ break;
+ }
+ }
++
+ for (i = 0; i < arysize(line->cl_Days); ++i) {
+ if (line->cl_Days[i] == 0) {
+- if (weekUsed) {
+- if (!daysUsed) {
+- daysUsed = 1;
+- /* change from "every Mon" to "ith Mon"
+- * 6th,7th... Dow are treated as 1st,2nd... */
+- for (j = 0; j < arysize(line->cl_Dow); ++j) {
+- line->cl_Dow[j] &= 1 << (i-1)%5;
+- }
+- } else {
+- /* change from "nth Mon" to "nth or ith Mon" */
+- for (j = 0; j < arysize(line->cl_Dow); ++j) {
+- if (line->cl_Dow[j])
+- line->cl_Dow[j] |= 1 << (i-1)%5;
+- }
+- }
+- /* continue cycling through cl_Days */
+- }
+- else {
+- daysUsed = 1;
+- break;
+- }
++ /* '*' was NOT specified in the Date field on this CronLine */
++ DomStar = 0;
++ break;
+ }
+ }
+- if (weekUsed) {
+- memset(line->cl_Days, 0, sizeof(line->cl_Days));
++
++ /* When cases 1, 2 or 3 there is nothing left to do */
++ if (DowStar || DomStar)
++ return;
++
++ /* Set individual bits within the DoW mask... */
++ for (i = 0; i < arysize(line->cl_Days); ++i) {
++ if (line->cl_Days[i]) {
++ if (i < 6)
++ mask |= 1 << (i - 1);
++ else
++ mask |= LAST_DOW;
++ }
+ }
+- if (daysUsed && !weekUsed) {
+- memset(line->cl_Dow, 0, sizeof(line->cl_Dow));
++
++ /* and apply the mask to each DoW element */
++ for (i = 0; i < arysize(line->cl_Dow); ++i) {
++ if (line->cl_Dow[i])
++ line->cl_Dow[i] = mask;
++ else
++ line->cl_Dow[i] = 0;
+ }
++
++ /* case 4 relies on the DoW value to guard the date instead of using the
++ * cl_Days field for this purpose; so we must set each element of cl_Days
++ * to 1 to allow the DoW bitmask test to be made
++ */
++ memset(line->cl_Days, 1, sizeof(line->cl_Days));
+ }
+
+ /*
+@@ -881,7 +907,7 @@ DeleteFile(CronFile **pfile)
+ file->cf_Deleted = 1;
+
+ while ((line = *pline) != NULL) {
+- if (line->cl_Pid > 0) {
++ if (line->cl_Pid > JOB_NONE) {
+ file->cf_Running = 1;
+ pline = &line->cl_Next;
+ } else {
+@@ -942,13 +968,14 @@ TestJobs(time_t t1, time_t t2)
+ CronFile *file;
+ CronLine *line;
+
++ PrintFile(FileBase, "TestJobs()", __FILE__, __LINE__);
+ for (file = FileBase; file; file = file->cf_Next) {
+ if (file->cf_Deleted)
+ continue;
+ for (line = file->cf_LineBase; line; line = line->cl_Next) {
+ struct CronWaiter *waiter;
+
+- if (line->cl_Pid == -2) {
++ if (line->cl_Pid == JOB_WAITING) {
+ /* can job stop waiting? */
+ int ready = 1;
+ waiter = line->cl_Waiters;
+@@ -965,7 +992,7 @@ TestJobs(time_t t1, time_t t2)
+ if (ready == 2) {
+ if (DebugOpt)
+ printlogf(LOG_DEBUG, "cancelled waiting: user %s %s\n", file->cf_UserName, line->cl_Description);
+- line->cl_Pid = 0;
++ line->cl_Pid = JOB_NONE;
+ } else if (ready) {
+ if (DebugOpt)
+ printlogf(LOG_DEBUG, "finished waiting: user %s %s\n", file->cf_UserName, line->cl_Description);
+@@ -987,24 +1014,23 @@ TestJobs(time_t t1, time_t t2)
+ if (t > t1) {
+ struct tm *tp = localtime(&t);
+
+- unsigned short n_wday = (tp->tm_mday - 1)%7 + 1;
+- if (n_wday >= 4) {
++ char n_wday = 1 << ((tp->tm_mday - 1) / 7);
++ if (n_wday >= FOURTH_DOW) {
+ struct tm tnext = *tp;
+ tnext.tm_mday += 7;
+ if (mktime(&tnext) != (time_t)-1 && tnext.tm_mon != tp->tm_mon)
+- n_wday |= 16; /* last dow in month is always recognized as 5th */
++ n_wday |= LAST_DOW; /* last dow in month is always recognized as 6th bit */
+ }
+
+ for (file = FileBase; file; file = file->cf_Next) {
+ if (file->cf_Deleted)
+ continue;
+ for (line = file->cf_LineBase; line; line = line->cl_Next) {
+- if ((line->cl_Pid == -2 || line->cl_Pid == 0) && (line->cl_Freq == 0 || (line->cl_Freq > 0 && t2 >= line->cl_NotUntil))) {
++ if ((line->cl_Pid == JOB_WAITING || line->cl_Pid == JOB_NONE) && (line->cl_Freq == 0 || (line->cl_Freq > 0 && t2 >= line->cl_NotUntil))) {
+ /* (re)schedule job? */
+ if (line->cl_Mins[tp->tm_min] &&
+ line->cl_Hrs[tp->tm_hour] &&
+- (line->cl_Days[tp->tm_mday] || (n_wday && line->cl_Dow[tp->tm_wday]) ) &&
+- line->cl_Mons[tp->tm_mon]
++ (line->cl_Days[tp->tm_mday] && n_wday & line->cl_Dow[tp->tm_wday])
+ ) {
+ if (line->cl_NotUntil)
+ line->cl_NotUntil = t2 - t2 % 60 + line->cl_Delay; /* save what minute this job was scheduled/started waiting, plus cl_Delay */
+@@ -1027,19 +1053,19 @@ int
+ ArmJob(CronFile *file, CronLine *line, time_t t1, time_t t2)
+ {
+ struct CronWaiter *waiter;
+- if (line->cl_Pid > 0) {
++ if (line->cl_Pid > JOB_NONE) {
+ printlogf(LOG_NOTICE, "process already running (%d): user %s %s\n",
+ line->cl_Pid,
+ file->cf_UserName,
+ line->cl_Description
+ );
+- } else if (t2 == -1 && line->cl_Pid != -1) {
+- line->cl_Pid = -1;
++ } else if (t2 == -1 && line->cl_Pid != JOB_ARMED) {
++ line->cl_Pid = JOB_ARMED;
+ file->cf_Ready = 1;
+ return 1;
+- } else if (line->cl_Pid == 0) {
++ } else if (line->cl_Pid == JOB_NONE) {
+ /* arming a waiting job (cl_Pid == -2) without forcing has no effect */
+- line->cl_Pid = -1;
++ line->cl_Pid = JOB_ARMED;
+ /* if we have any waiters, zero them and arm cl_Pid=-2 */
+ waiter = line->cl_Waiters;
+ while (waiter != NULL) {
+@@ -1047,15 +1073,15 @@ ArmJob(CronFile *file, CronLine *line, time_t t1, time_t t2)
+ if (!waiter->cw_NotifLine)
+ /* notifier deleted */
+ waiter->cw_Flag = 0;
+- else if (waiter->cw_NotifLine->cl_Pid != 0) {
++ else if (waiter->cw_NotifLine->cl_Pid != JOB_NONE) {
+ /* if notifier is armed, or waiting, or running, we wait for it */
+ waiter->cw_Flag = -1;
+- line->cl_Pid = -2;
++ line->cl_Pid = JOB_WAITING;
+ } else if (waiter->cw_NotifLine->cl_Freq < 0) {
+ /* arm any @noauto or @reboot jobs we're waiting on */
+ ArmJob(file, waiter->cw_NotifLine, t1, t2);
+ waiter->cw_Flag = -1;
+- line->cl_Pid = -2;
++ line->cl_Pid = JOB_WAITING;
+ } else {
+ time_t t;
+ if (waiter->cw_MaxWait == 0)
+@@ -1068,21 +1094,20 @@ ArmJob(CronFile *file, CronLine *line, time_t t1, time_t t2)
+ if (t > t1) {
+ struct tm *tp = localtime(&t);
+
+- unsigned short n_wday = (tp->tm_mday - 1)%7 + 1;
+- if (n_wday >= 4) {
++ char n_wday = 1 << ((tp->tm_mday - 1) / 7);
++ if (n_wday >= FOURTH_DOW) {
+ struct tm tnext = *tp;
+ tnext.tm_mday += 7;
+ if (mktime(&tnext) != (time_t)-1 && tnext.tm_mon != tp->tm_mon)
+- n_wday |= 16; /* last dow in month is always recognized as 5th */
++ n_wday |= LAST_DOW; /* last dow in month is always recognized as 6th */
+ }
+ if (line->cl_Mins[tp->tm_min] &&
+ line->cl_Hrs[tp->tm_hour] &&
+- (line->cl_Days[tp->tm_mday] || (n_wday && line->cl_Dow[tp->tm_wday]) ) &&
+- line->cl_Mons[tp->tm_mon]
++ (line->cl_Days[tp->tm_mday] && n_wday & line->cl_Dow[tp->tm_wday])
+ ) {
+ /* notifier will run soon enough, we wait for it */
+ waiter->cw_Flag = -1;
+- line->cl_Pid = -2;
++ line->cl_Pid = JOB_WAITING;
+ break;
+ }
+ }
+@@ -1091,7 +1116,7 @@ ArmJob(CronFile *file, CronLine *line, time_t t1, time_t t2)
+ }
+ waiter = waiter->cw_Next;
+ }
+- if (line->cl_Pid == -1) {
++ if (line->cl_Pid == JOB_ARMED) {
+ /* job is ready to run */
+ file->cf_Ready = 1;
+ if (DebugOpt)
+@@ -1135,18 +1160,18 @@ TestStartupJobs(void)
+ if (line->cl_Freq == -1) {
+ /* freq is @reboot */
+
+- line->cl_Pid = -1;
++ line->cl_Pid = JOB_ARMED;
+ /* if we have any waiters, reset them and arm Pid = -2 */
+ waiter = line->cl_Waiters;
+ while (waiter != NULL) {
+ waiter->cw_Flag = -1;
+- line->cl_Pid = -2;
++ line->cl_Pid = JOB_WAITING;
+ /* we only arm @noauto jobs we're waiting on, not other @reboot jobs */
+ if (waiter->cw_NotifLine && waiter->cw_NotifLine->cl_Freq == -2)
+ ArmJob(file, waiter->cw_NotifLine, t1, t1+60);
+ waiter = waiter->cw_Next;
+ }
+- if (line->cl_Pid == -1) {
++ if (line->cl_Pid == JOB_ARMED) {
+ /* job is ready to run */
+ file->cf_Ready = 1;
+ ++nJobs;
+@@ -1173,7 +1198,7 @@ RunJobs(void)
+ file->cf_Ready = 0;
+
+ for (line = file->cf_LineBase; line; line = line->cl_Next) {
+- if (line->cl_Pid == -1) {
++ if (line->cl_Pid == JOB_ARMED) {
+
+ RunJob(file, line);
+
+@@ -1184,10 +1209,10 @@ RunJobs(void)
+ line->cl_Pid,
+ line->cl_Description
+ );
+- if (line->cl_Pid < 0)
++ if (line->cl_Pid < JOB_NONE)
+ /* QUESTION how could this happen? RunJob will leave cl_Pid set to 0 or the actual pid */
+ file->cf_Ready = 1;
+- else if (line->cl_Pid > 0)
++ else if (line->cl_Pid > JOB_NONE)
+ file->cf_Running = 1;
+ }
+ }
+@@ -1214,7 +1239,7 @@ CheckJobs(void)
+ file->cf_Running = 0;
+
+ for (line = file->cf_LineBase; line; line = line->cl_Next) {
+- if (line->cl_Pid > 0) {
++ if (line->cl_Pid > JOB_NONE) {
+ int status;
+ int r = waitpid(line->cl_Pid, &status, WNOHANG);
+
+@@ -1237,7 +1262,7 @@ CheckJobs(void)
+ /* For the purposes of this check, increase the "still running" counter if a file has lines that are waiting */
+ if (file->cf_Running == 0) {
+ for (line = file->cf_LineBase; line; line = line->cl_Next) {
+- if (line->cl_Pid == -2) {
++ if (line->cl_Pid == JOB_WAITING) {
+ nStillRunning += 1;
+ break;
+ }
+@@ -1247,3 +1272,69 @@ CheckJobs(void)
+ return(nStillRunning);
+ }
+
++void
++PrintLine(CronLine *line)
++{
++ int i;
++ if (!line)
++ return;
++
++ printlogf(LOG_DEBUG, "CronLine:\n------------\n");
++ printlogf(LOG_DEBUG, " Command: %s\n", line->cl_Shell);
++ //printlogf(LOG_DEBUG, " Desc: %s\n", line->cl_Description);
++ printlogf(LOG_DEBUG, " Freq: %s\n", (line->cl_Freq ?
++ (line->cl_Freq == -1 ? "(noauto)" : "(startup") : "(use arrays)"));
++ printlogf(LOG_DEBUG, " PID: %d\n", line->cl_Pid);
++
++ printlogf(LOG_DEBUG, " Mins: ");
++ for (i = 0; i < 60; ++i)
++ printlogf(LOG_DEBUG, "%d", line->cl_Mins[i]);
++
++ printlogf(LOG_DEBUG, "\n Hrs: ");
++ for (i = 0; i < 24; ++i)
++ printlogf(LOG_DEBUG, "%d", line->cl_Hrs[i]);
++
++ printlogf(LOG_DEBUG, "\n Days: ");
++ for (i = 0; i < 32; ++i)
++ printlogf(LOG_DEBUG, "%d", line->cl_Days[i]);
++
++ printlogf(LOG_DEBUG, "\n Mons: ");
++ for (i = 0; i < 12; ++i)
++ printlogf(LOG_DEBUG, "%d", line->cl_Mons[i]);
++
++ printlogf(LOG_DEBUG, "\n Dow: ");
++ for (i = 0; i < 7; ++i)
++ printlogf(LOG_DEBUG, "%02x ", line->cl_Dow[i]);
++ printlogf(LOG_DEBUG, "\n\n");
++}
++
++void
++PrintFile(CronFile *file, char* loc, char* fname, int line)
++{
++ CronFile *f;
++ CronLine *l;
++
++ printlogf(LOG_DEBUG, "%s %s:%d\n", loc, fname, line);
++
++ if (!file)
++ return;
++
++ f = file;
++ while (f) {
++
++ if (strncmp(file->cf_UserName, "root", 4)) {
++ printlogf(LOG_DEBUG, "FILE %s/%s USER %s\n=============================\n",
++ file->cf_DPath,
++ file->cf_FileName,
++ file->cf_UserName);
++ l = f->cf_LineBase;
++
++ while (l) {
++ PrintLine(l);
++ l = l->cl_Next;
++ }
++ }
++ f = f->cf_Next;
++ }
++
++}
+diff --git a/defs.h b/defs.h
+index b221636..cf77b5f 100644
+--- a/defs.h
++++ b/defs.h
+@@ -17,6 +17,7 @@
+ */
+
+ #define _XOPEN_SOURCE 1
++#define _DEFAULT_SOURCE 1
+ #define _BSD_SOURCE 1
+
+ #include <sys/types.h>
+@@ -102,6 +103,16 @@
+ #define MONTHLY_FREQ 30 * DAILY_FREQ
+ #define YEARLY_FREQ 365 * DAILY_FREQ
+
++#define FIELD_MINUTES 60
++#define FIELD_HOURS 24
++#define FIELD_M_DAYS 32
++#define FIELD_MONTHS 12
++#define FIELD_W_DAYS 7
++
++#define JOB_NONE 0
++#define JOB_ARMED -1
++#define JOB_WAITING -2
++
+ #define LOGHEADER TIMESTAMP_FMT " %%s " LOG_IDENT ": "
+ #define LOCALE_LOGHEADER "%c %%s " LOG_IDENT ": "
+
+@@ -112,9 +123,6 @@
+ #define RW_BUFFER 1024
+ #define LOG_BUFFER 2048 /* max size of log line */
+
+-
+-
+-
+ typedef struct CronFile {
+ struct CronFile *cf_Next;
+ struct CronLine *cf_LineBase;
+@@ -141,11 +149,11 @@ typedef struct CronLine {
+ int cl_Pid; /* running pid, 0, or armed (-1), or waiting (-2) */
+ int cl_MailFlag; /* running pid is for mail */
+ int cl_MailPos; /* 'empty file' size */
+- char cl_Mins[60]; /* 0-59 */
+- char cl_Hrs[24]; /* 0-23 */
+- char cl_Days[32]; /* 1-31 */
+- char cl_Mons[12]; /* 0-11 */
+- char cl_Dow[7]; /* 0-6, beginning sunday */
++ char cl_Mins[FIELD_MINUTES]; /* 0-59 */
++ char cl_Hrs[FIELD_HOURS]; /* 0-23 */
++ char cl_Days[FIELD_M_DAYS]; /* 1-31 */
++ char cl_Mons[FIELD_MONTHS]; /* 0-11 */
++ char cl_Dow[FIELD_W_DAYS]; /* 0-6, beginning sunday */
+ } CronLine;
+
+ typedef struct CronWaiter {
+--
+2.13.2
+
diff --git a/source/a/dcron/patches/0009-Updated-manpage.patch b/source/a/dcron/patches/0009-Updated-manpage.patch
new file mode 100644
index 00000000..5db2550c
--- /dev/null
+++ b/source/a/dcron/patches/0009-Updated-manpage.patch
@@ -0,0 +1,45 @@
+From 496027f566df6968939c45ad1a0069af495a2d40 Mon Sep 17 00:00:00 2001
+From: "Erik Falor (fadein)" <ewfalor@gmail.com>
+Date: Tue, 24 Nov 2015 22:19:30 -0700
+Subject: [PATCH 9/9] Updated manpage
+
+---
+ crontab.1 | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/crontab.1 b/crontab.1
+index 36043a9..1e2f59f 100644
+--- a/crontab.1
++++ b/crontab.1
+@@ -92,20 +92,23 @@ Some examples:
+ .fi
+ .PP
+ To request the last Monday, etc.
+-in a month, ask for the \[lq]5th\[rq] one.
++in a month, ask for the \[lq]6th\[rq] one.
+ This will always match the last Monday, etc., even if there are
+ only four Mondays in the month:
+ .IP
+ .nf
+ \f[C]
+ #\ run\ at\ 11\ am\ on\ the\ first\ and\ last\ Mon,\ Tue,\ Wed\ of\ each\ month
+-0\ 11\ 1,5\ *\ mon-wed\ date
++0\ 11\ 1,6\ *\ mon-wed\ date
++
++#\ run\ at\ noon\ on\ the\ fourth\ and\ last\ Friday\ of\ each\ month
++0\ 12\ 4,6\ *\ fri\ date
+ \f[]
+ .fi
+ .PP
+-When the fourth Monday in a month is the last, it will match
+-against both the \[lq]4th\[rq] and the \[lq]5th\[rq] (it will only
+-run once if both are specified).
++When the fourth Monday in a month is also the last, this will match against
++both the \[lq]4th\[rq] and the \[lq]6th\[rq] but the job is scheduled only
++once.
+ .PP
+ The following formats are also recognized:
+ .IP
+--
+2.13.2
+
diff --git a/source/a/dcron/crontab.c.O_EXCL.diff b/source/a/dcron/patches/crontab.c.O_EXCL.diff
index f705487e..f705487e 100644
--- a/source/a/dcron/crontab.c.O_EXCL.diff
+++ b/source/a/dcron/patches/crontab.c.O_EXCL.diff
diff --git a/source/a/dcron/defs.h.TMPDIR.diff b/source/a/dcron/patches/defs.h.TMPDIR.diff
index 698f4ebc..0210c55c 100644
--- a/source/a/dcron/defs.h.TMPDIR.diff
+++ b/source/a/dcron/patches/defs.h.TMPDIR.diff
@@ -6,7 +6,7 @@ diff -Nur dcron-4.5.orig//defs.h dcron-4.5/defs.h
#endif
#ifndef TMPDIR
-#define TMPDIR "/tmp"
-+#define TMPDIR "/var/spool/cron"
++#define TMPDIR "/run/cron"
#endif
#ifndef SENDMAIL
diff --git a/source/a/dcron/rc.crond b/source/a/dcron/rc.crond
new file mode 100644
index 00000000..c9c94ec8
--- /dev/null
+++ b/source/a/dcron/rc.crond
@@ -0,0 +1,40 @@
+#!/bin/sh
+# /etc/rc.d/rc.crond - start/stop the cron daemon
+
+# To change the default options, edit /etc/default/crond.
+if [ -r /etc/default/crond ]; then
+ . /etc/default/crond
+fi
+
+start_crond() {
+ if ! /usr/bin/pgrep --ns $$ --exact crond 1> /dev/null 2> /dev/null ; then
+ echo "Starting crond: /usr/sbin/crond $CROND_OPTS"
+ mkdir -p /run/cron
+ /usr/sbin/crond $CROND_OPTS
+ fi
+}
+
+stop_crond() {
+ echo "Stopping crond."
+ /usr/bin/pkill --ns $$ --exact crond 2> /dev/null
+}
+
+restart_crond() {
+ stop_crond
+ sleep 1
+ start_crond
+}
+
+case "$1" in
+'start')
+ start_crond
+ ;;
+'stop')
+ stop_crond
+ ;;
+'restart')
+ restart_crond
+ ;;
+*)
+ echo "usage $0 start|stop|restart"
+esac
diff --git a/source/a/efibootmgr/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch b/source/a/efibootmgr/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch
deleted file mode 100644
index 240aa696..00000000
--- a/source/a/efibootmgr/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 2d8f962284f40b918c0fc8385e58fcba219ddc12 Mon Sep 17 00:00:00 2001
-From: Fedora Ninjas <pjones@fedoraproject.org>
-Date: Wed, 28 Nov 2012 17:13:24 -0500
-Subject: [PATCH 2/5] Remove device path padding on non-Itanium
-
-This code predates EFI support on any x86 hardware, and it's a strict
-violation of the specification. Windows doesn't do it either.
----
- src/include/efi.h | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/include/efi.h b/src/include/efi.h
-index be667ae..c2ac853 100644
---- a/src/include/efi.h
-+++ b/src/include/efi.h
-@@ -294,7 +294,9 @@ typedef struct {
- uint8_t signature[16];
- uint8_t mbr_type;
- uint8_t signature_type;
-+#ifdef __ia64
- uint8_t padding[6]; /* Emperically needed */
-+#endif
- } __attribute__((packed)) HARDDRIVE_DEVICE_PATH;
-
- typedef struct {
---
-1.8.0
-
diff --git a/source/a/efibootmgr/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch b/source/a/efibootmgr/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch
deleted file mode 100644
index a1d9831d..00000000
--- a/source/a/efibootmgr/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 6edc3ed5479b575f87eb51e335957b05fdd04fe8 Mon Sep 17 00:00:00 2001
-From: Fedora Ninjas <pjones@fedoraproject.org>
-Date: Wed, 28 Nov 2012 16:49:18 -0500
-Subject: [PATCH 1/5] Work around broken Apple firmware
-
-Alex Murray found that Apple's firmware sets an invalid EFI attribute on
-BootCurrent, which newer versions of the kernel then reject. This patch
-from him simply masks off the extraneous bit.
----
- src/lib/efivars_sysfs.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/lib/efivars_sysfs.c b/src/lib/efivars_sysfs.c
-index 182c70f..ea87325 100644
---- a/src/lib/efivars_sysfs.c
-+++ b/src/lib/efivars_sysfs.c
-@@ -55,6 +55,10 @@ sysfs_read_variable(const char *name, efi_variable_t *var)
- return EFI_INVALID_PARAMETER;
- }
- close(fd);
-+ /* latest apple firmware sets high bit which appears invalid
-+ to the linux kernel if we write it back so lets zero it out
-+ if it is set since it would be invalid to set it anyway */
-+ var->Attributes = var->Attributes & ~(1 << 31);
- return var->Status;
- }
-
---
-1.8.0
-
diff --git a/source/a/efibootmgr/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch b/source/a/efibootmgr/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch
deleted file mode 100644
index e9b53583..00000000
--- a/source/a/efibootmgr/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From f9f4ee75ad745637a47bf17ed968101b1ffbcc1d Mon Sep 17 00:00:00 2001
-From: Matt Domsch <Matt_Domsch@dell.com>
-Date: Thu, 23 Jul 2009 14:20:19 -0500
-Subject: [PATCH 4/5] fix disk minor number discovery
-
-Raymund Will noted disk_info_from_fd() incorrectly used logical &&
-instead of bitwise & when obtaining the minor number.
-
-Reported in https://bugzilla.novell.com/show_bug.cgi?id=524529#c1
----
- src/lib/disk.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/lib/disk.c b/src/lib/disk.c
-index ebfe619..8ad590b 100644
---- a/src/lib/disk.c
-+++ b/src/lib/disk.c
-@@ -55,7 +55,7 @@ disk_info_from_fd(int fd,
- return 1;
- }
- major = buf.st_dev >> 8;
-- minor = buf.st_dev && 0xFF;
-+ minor = buf.st_dev & 0xFF;
-
- /* IDE disks can have up to 64 partitions, or 6 bits worth,
- * and have one bit for the disk number.
---
-1.8.0
-
diff --git a/source/a/efibootmgr/efibootmgr-0.5.4-support-4k-sectors.patch b/source/a/efibootmgr/efibootmgr-0.5.4-support-4k-sectors.patch
deleted file mode 100644
index c380c610..00000000
--- a/source/a/efibootmgr/efibootmgr-0.5.4-support-4k-sectors.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-Return-Path: pjones@redhat.com
-Received: from zmta02.collab.prod.int.phx2.redhat.com (LHLO
- zmta02.collab.prod.int.phx2.redhat.com) (10.5.5.32) by
- mail04.corp.redhat.com with LMTP; Wed, 14 Jul 2010 14:25:52 -0400 (EDT)
-Received: from localhost (localhost.localdomain [127.0.0.1])
- by zmta02.collab.prod.int.phx2.redhat.com (Postfix) with ESMTP id B69C19F152
- for <pjones@redhat.com>; Wed, 14 Jul 2010 14:25:52 -0400 (EDT)
-Received: from zmta02.collab.prod.int.phx2.redhat.com ([127.0.0.1])
- by localhost (zmta02.collab.prod.int.phx2.redhat.com [127.0.0.1]) (amavisd-new, port 10024)
- with ESMTP id jCHcGZehMQ5J for <pjones@redhat.com>;
- Wed, 14 Jul 2010 14:25:52 -0400 (EDT)
-Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21])
- by zmta02.collab.prod.int.phx2.redhat.com (Postfix) with ESMTP id A601C9F14C
- for <pjones@mail.corp.redhat.com>; Wed, 14 Jul 2010 14:25:52 -0400 (EDT)
-Received: from pjones4.install.bos.redhat.com (pjones4.install.bos.redhat.com [10.16.52.154])
- by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o6EIPpGh017771;
- Wed, 14 Jul 2010 14:25:52 -0400
-From: Peter Jones <pjones@redhat.com>
-To: Matt Domsch <Matt_Domsch@dell.com>
-Cc: Peter Jones <pjones@redhat.com>, Stuart Hayes <stuart_hayes@dell.com>
-Subject: [efibootmgr patch] Handle sector_size != 512.
-Date: Wed, 14 Jul 2010 14:26:49 -0400
-Message-Id: <1279132009-26635-1-git-send-email-pjones@redhat.com>
-In-Reply-To: <1279121617-17961-1-git-send-email-pjones@redhat.com>
-References: <1279121617-17961-1-git-send-email-pjones@redhat.com>
-X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21
-
-Disks can have 4kB sectors now, so don't just bail out when that's the
-case.
----
- src/include/disk.h | 3 +++
- src/lib/disk.c | 43 +++++++++++++++++++++++++++++++++----------
- src/lib/gpt.c | 30 ++++++++++++++----------------
- 3 files changed, 50 insertions(+), 26 deletions(-)
-
-diff --git a/src/include/disk.h b/src/include/disk.h
-index eb93d10..8aa37d7 100644
---- a/src/include/disk.h
-+++ b/src/include/disk.h
-@@ -65,6 +65,9 @@ enum _interface_type {interface_type_unknown,
- ata, atapi, scsi, usb,
- i1394, fibre, i2o, md};
-
-+
-+unsigned int lcm(unsigned int x, unsigned int y);
-+
- int disk_get_pci(int fd,
- unsigned char *bus,
- unsigned char *device,
-diff --git a/src/lib/disk.c b/src/lib/disk.c
-index 883864f..9c3a878 100644
---- a/src/lib/disk.c
-+++ b/src/lib/disk.c
-@@ -420,6 +420,27 @@ get_sector_size(int filedes)
- return sector_size;
- }
-
-+/************************************************************
-+ * lcm
-+ * Requires:
-+ * - numbers of which to find the lowest common multiple
-+ * Modifies: nothing
-+ * Returns:
-+ * lowest common multiple of x and y
-+ ************************************************************/
-+unsigned int
-+lcm(unsigned int x, unsigned int y)
-+{
-+ unsigned int m = x, n = y, o;
-+
-+ while ((o = m % n)) {
-+ m = n;
-+ n = o;
-+ }
-+
-+ return (x / n) * y;
-+}
-+
- /**
- * disk_get_partition_info()
- * @fd - open file descriptor to disk
-@@ -442,26 +463,27 @@ disk_get_partition_info (int fd,
- uint8_t *mbr_type, uint8_t *signature_type)
- {
- legacy_mbr *mbr;
-- void *mbr_unaligned;
-+ void *mbr_sector;
-+ size_t mbr_size;
- off_t offset;
- int this_bytes_read = 0;
- int gpt_invalid=0, mbr_invalid=0;
- int rc=0;
- int sector_size = get_sector_size(fd);
-
-- if (sizeof(*mbr) != sector_size)
-- return 1;
-- mbr_unaligned = malloc(sizeof(*mbr)+sector_size-1);
-- mbr = (legacy_mbr *)
-- (((unsigned long)mbr_unaligned + sector_size - 1) &
-- ~(unsigned long)(sector_size-1));
-- memset(mbr, 0, sizeof(*mbr));
-+
-+ mbr_size = lcm(sizeof(*mbr), sector_size);
-+ if ((rc = posix_memalign(&mbr_sector, sector_size, mbr_size)) != 0)
-+ goto error;
-+ memset(mbr_sector, '\0', mbr_size);
-+
- offset = lseek(fd, 0, SEEK_SET);
-- this_bytes_read = read(fd, mbr, sizeof(*mbr));
-+ this_bytes_read = read(fd, mbr_sector, mbr_size);
- if (this_bytes_read < sizeof(*mbr)) {
- rc=1;
- goto error_free_mbr;
- }
-+ mbr = (legacy_mbr *)mbr_sector;
- gpt_invalid = gpt_disk_get_partition_info(fd, num,
- start, size,
- signature,
-@@ -479,7 +501,8 @@ disk_get_partition_info (int fd,
- }
- }
- error_free_mbr:
-- free(mbr_unaligned);
-+ free(mbr_sector);
-+ error:
- return rc;
- }
-
-diff --git a/src/lib/gpt.c b/src/lib/gpt.c
-index d90ddaf..83e7a94 100644
---- a/src/lib/gpt.c
-+++ b/src/lib/gpt.c
-@@ -215,26 +215,24 @@ read_lastoddsector(int fd, uint64_t lba, void *buffer, size_t count)
- static ssize_t
- read_lba(int fd, uint64_t lba, void *buffer, size_t bytes)
- {
-- int sector_size = get_sector_size(fd);
-- off_t offset = lba * sector_size;
-+ int sector_size = get_sector_size(fd);
-+ off_t offset = lba * sector_size;
- ssize_t bytesread;
-- void *aligned;
-- void *unaligned;
--
-- if (bytes % sector_size)
-- return EINVAL;
-+ void *iobuf;
-+ size_t iobuf_size;
-+ int rc;
-
-- unaligned = malloc(bytes+sector_size-1);
-- aligned = (void *)
-- (((unsigned long)unaligned + sector_size - 1) &
-- ~(unsigned long)(sector_size-1));
-- memset(aligned, 0, bytes);
-+ iobuf_size = lcm(bytes, sector_size);
-+ rc = posix_memalign(&iobuf, sector_size, iobuf_size);
-+ if (rc)
-+ return rc;
-+ memset(iobuf, 0, bytes);
-
-
-- lseek(fd, offset, SEEK_SET);
-- bytesread = read(fd, aligned, bytes);
-- memcpy(buffer, aligned, bytesread);
-- free(unaligned);
-+ lseek(fd, offset, SEEK_SET);
-+ bytesread = read(fd, iobuf, iobuf_size);
-+ memcpy(buffer, iobuf, bytes);
-+ free(iobuf);
-
- /* Kludge. This is necessary to read/write the last
- block of an odd-sized disk, until Linux 2.5.x kernel fixes.
---
-1.7.1.1
-
diff --git a/source/a/efibootmgr/efibootmgr.SlackBuild b/source/a/efibootmgr/efibootmgr.SlackBuild
index cdcbcb2b..e91b25fd 100755
--- a/source/a/efibootmgr/efibootmgr.SlackBuild
+++ b/source/a/efibootmgr/efibootmgr.SlackBuild
@@ -24,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=efibootmgr
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-2}
+BUILD=${BUILD:-1}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -79,11 +79,6 @@ rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1
cd $PKGNAM-$VERSION
-zcat $CWD/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/efibootmgr-0.5.4-support-4k-sectors.patch.gz | patch -p1 --verbose || exit 1
-
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
@@ -91,17 +86,13 @@ find . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
-# Build:
-export EXTRA_CFLAGS="$SLKCFLAGS -fgnu89-inline"
-make || exit 1
+# Set default EFI System Partition directory:
+export EFIDIR=/boot/efi
-# Install:
-mkdir -p $PKG/usr/sbin
-cp src/efibootmgr/efibootmgr $PKG/usr/sbin
-chown root:root $PKG/usr/sbin/efibootmgr
-chmod 755 $PKG/usr/sbin/efibootmgr
-mkdir -p $PKG/usr/man/man8
-cat src/man/man8/efibootmgr.8 | gzip -9c > $PKG/usr/man/man8/efibootmgr.8.gz
+# Build:
+export EXTRA_CFLAGS="$SLKCFLAGS"
+make mandir=/usr/man || exit 1
+make install mandir=/usr/man DESTDIR=$PKG || exit 1
# Strip binaries:
( cd $PKG
@@ -109,10 +100,17 @@ cat src/man/man8/efibootmgr.8 | gzip -9c > $PKG/usr/man/man8/efibootmgr.8.gz
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
)
+# Compress manual pages:
+find $PKG/usr/man -type f -exec gzip -9 {} \;
+for i in $( find $PKG/usr/man -type l ) ; do
+ ln -s $( readlink $i ).gz $i.gz
+ rm $i
+done
+
# Add a documentation directory:
mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION
cp -a \
- AUTHORS COPYING* INSTALL README* doc/* \
+ AUTHORS COPYING* INSTALL README* TODO* \
$PKG/usr/doc/${PKGNAM}-$VERSION
mkdir -p $PKG/install
diff --git a/source/a/efibootmgr/slack-desc b/source/a/efibootmgr/slack-desc
index dee525ac..094d3b75 100644
--- a/source/a/efibootmgr/slack-desc
+++ b/source/a/efibootmgr/slack-desc
@@ -13,7 +13,7 @@ efibootmgr: Extensible Firmware Interface (EFI) Boot Manager. This application
efibootmgr: can create and destroy boot entries, change the boot order, change
efibootmgr: the next running boot option, and more.
efibootmgr:
-efibootmgr: Homepage: http://linux.dell.com/efibootmgr
+efibootmgr: Homepage: https://github.com/rhboot/efibootmgr
efibootmgr:
efibootmgr:
efibootmgr:
diff --git a/source/a/efivar/efivar.SlackBuild b/source/a/efivar/efivar.SlackBuild
new file mode 100755
index 00000000..f954ff90
--- /dev/null
+++ b/source/a/efivar/efivar.SlackBuild
@@ -0,0 +1,114 @@
+#!/bin/bash
+
+# Copyright 2018 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PKGNAM=efivar
+VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
+BUILD=${BUILD:-1}
+
+# Automatically determine the architecture we're building on:
+if [ -z "$ARCH" ]; then
+ case "$(uname -m)" in
+ i?86) ARCH=i586 ;;
+ arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
+ # Unless $ARCH is already set, use uname -m for all other archs:
+ *) ARCH=$(uname -m) ;;
+ esac
+ export ARCH
+fi
+
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
+NUMJOBS=${NUMJOBS:-" -j7 "}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "s390" ]; then
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+elif [ "$ARCH" = "armv7hl" ]; then
+ SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16"
+ LIBDIRSUFFIX=""
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$PKGNAM
+
+rm -rf $PKG
+mkdir -p $TMP $PKG
+
+cd $TMP
+rm -rf $PKGNAM-$VERSION
+tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1
+cd $PKGNAM-$VERSION || exit 1
+
+chown -R root:root .
+find . \
+ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \;
+
+CFLAGS="$SLKCFLAGS" \
+CXXFLAGS="$SLKCFLAGS" \
+make $NUMJOBS libdir=/usr/lib$LIBDIRSUFFIX/ mandir=/usr/man/
+make $NUMJOBS install DESTDIR=${PKG}/ libdir=/usr/lib$LIBDIRSUFFIX/ mandir=/usr/man/
+
+# Strip binaries:
+find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
+
+# Compress manual pages:
+find $PKG/usr/man -type f -exec gzip -9 {} \;
+for i in $( find $PKG/usr/man -type l ) ; do
+ ln -s $( readlink $i ).gz $i.gz
+ rm $i
+done
+
+# Add a documentation directory:
+mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION
+cp -a \
+ COPYING* README* TODO* \
+ $PKG/usr/doc/${PKGNAM}-$VERSION
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
+
diff --git a/source/a/efivar/slack-desc b/source/a/efivar/slack-desc
new file mode 100644
index 00000000..4a0491c9
--- /dev/null
+++ b/source/a/efivar/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+efivar: efivar (library and utilities to handle UEFI variables)
+efivar:
+efivar: The efivar package contains a library and utilities for manipulating
+efivar: UEFI (Unified Extensible Firmware Interface) variables.
+efivar:
+efivar: Homepage: https://github.com/rhboot/efivar
+efivar:
+efivar:
+efivar:
+efivar:
+efivar:
diff --git a/source/a/elilo/elilo.SlackBuild b/source/a/elilo/elilo.SlackBuild
index 1dc1004c..5a59c3b7 100755
--- a/source/a/elilo/elilo.SlackBuild
+++ b/source/a/elilo/elilo.SlackBuild
@@ -24,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=elilo
VERSION=${VERSION:-$(echo $PKGNAM*.tar.?z* | rev | cut -f 2 -d - | rev)}
-BUILD=${BUILD:-6}
+BUILD=${BUILD:-7}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
@@ -85,6 +85,9 @@ sed -i "s,/usr/lib,/usr/lib${LIBDIRSUFFIX},g" Make.defaults
sed -i "s,EFICRT0.*= /usr/lib${LIBDIRSUFFIX},EFICRT0 = /usr/lib${LIBDIRSUFFIX}/gnuefi,g" Make.defaults
sed -i "s,dpkg-architecture -qDEB_BUILD_ARCH,uname -m,g" Make.defaults
+# Fix collision with StrnCpy() function in both elilo and gnu-efi:
+grep -r -l StrnCpy * | xargs sed -i "s/StrnCpy/elilo_StrnCpy/g"
+
# Increase kernel size limit from 8MB to 16MB (nobody will ever need more than 640K ;-):
zcat $CWD/elilo.double.kernel.size.limit.diff.gz | patch -p1 --verbose || exit 1
diff --git a/source/a/haveged/doinst.sh b/source/a/haveged/doinst.sh
new file mode 100644
index 00000000..b9e90c86
--- /dev/null
+++ b/source/a/haveged/doinst.sh
@@ -0,0 +1,28 @@
+config() {
+ for infile in $1; do
+ NEW="$infile"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+ done
+}
+
+preserve_perms() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ if [ -e $OLD ]; then
+ cp -a $OLD ${NEW}.incoming
+ cat $NEW > ${NEW}.incoming
+ mv ${NEW}.incoming $NEW
+ fi
+ config $NEW
+}
+
+preserve_perms etc/rc.d/rc.haveged.new
+
diff --git a/source/a/haveged/haveged.SlackBuild b/source/a/haveged/haveged.SlackBuild
new file mode 100755
index 00000000..27838158
--- /dev/null
+++ b/source/a/haveged/haveged.SlackBuild
@@ -0,0 +1,127 @@
+#!/bin/sh
+#
+# Copyright 2014 Erik Falor, West Valley City, Utah, USA
+# Copyright 2018 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PKGNAM=haveged
+VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
+BUILD=${BUILD:-1}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
+NUMJOBS=${NUMJOBS:-" -j7 "}
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$PKGNAM
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+rm -rf $PKG
+mkdir -p $TMP $PKG
+cd $TMP
+rm -rf $PKGNAM-$VERSION
+tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1
+cd $PKGNAM-$VERSION || exit 1
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+# LDFLAGS="-static" to avoid introducing a shared library that would be used
+# by nothing else.
+LDFLAGS="-static" \
+CFLAGS="$SLKCFLAGS" \
+CXXFLAGS="$SLKCFLAGS" \
+./configure \
+ --prefix=/usr \
+ --sbindir=/sbin \
+ --libdir=/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --mandir=/usr/man \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
+ --build=$ARCH-slackware-linux || exit 1
+
+make $NUMJOBS || make || exit 1
+make install DESTDIR=$PKG || exit 1
+
+# Remove library/include/.la file cruft, since (to my knowledge) nothing
+# else will want it.
+rm -rf $PKG/lib${LIBDIRSUFFIX} $PKG/usr/include $PKG/usr/man/man3
+
+find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+
+rm -rf $PKG/etc/init.d
+mkdir -p $PKG/etc/rc.d
+cat $CWD/rc.haveged > $PKG/etc/rc.d/rc.haveged.new
+chmod 755 $PKG/etc/rc.d/rc.haveged.new
+
+find $PKG/usr/man -type f -exec gzip -9 {} \;
+for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
+
+mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
+cp -a AUTHORS COPYING* INSTALL README* \
+ $PKG/usr/doc/$PKGNAM-$VERSION
+
+# If there's a ChangeLog, installing at least part of the recent history
+# is useful, but don't let it get totally out of control:
+if [ -r ChangeLog ]; then
+ DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION)
+ cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
+ touch -r ChangeLog $DOCSDIR/ChangeLog
+fi
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh
+
+cd $PKG
+/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
diff --git a/source/a/haveged/haveged.url b/source/a/haveged/haveged.url
new file mode 100644
index 00000000..4af969a6
--- /dev/null
+++ b/source/a/haveged/haveged.url
@@ -0,0 +1 @@
+http://www.issihosts.com/haveged
diff --git a/source/a/haveged/rc.haveged b/source/a/haveged/rc.haveged
new file mode 100644
index 00000000..51d4f16b
--- /dev/null
+++ b/source/a/haveged/rc.haveged
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Start/stop/restart haveged.
+
+PIDFILE="/var/run/haveged.pid"
+HAVEGED_OPTS="-w 1024 -v 1 -p $PIDFILE"
+
+# Start haveged:
+haveged_start() {
+ if [ -f $PIDFILE ]; then
+ echo "haveged is already running as PID $(cat $PIDFILE) " >&2
+ exit 3
+ elif [ -x /sbin/haveged ]; then
+ echo "Starting haveged entropy daemon: /sbin/haveged"
+ /sbin/haveged $HAVEGED_OPTS
+ fi
+}
+
+# Stop haveged:
+haveged_stop() {
+ if [ -r $PIDFILE ]; then
+ echo "Stopping haveged."
+ kill $(cat $PIDFILE)
+ fi
+}
+
+# Restart haveged:
+haveged_restart() {
+ haveged_stop
+ sleep 1
+ haveged_start
+}
+
+case "$1" in
+'start')
+ haveged_start
+ ;;
+'stop')
+ haveged_stop
+ ;;
+'restart')
+ haveged_restart
+ ;;
+*)
+ echo "usage $0 start|stop|restart"
+ exit 2
+esac
diff --git a/source/a/haveged/slack-desc b/source/a/haveged/slack-desc
new file mode 100644
index 00000000..39b14bf3
--- /dev/null
+++ b/source/a/haveged/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+haveged: haveged (A simple entropy daemon)
+haveged:
+haveged: The haveged project is an attempt to provide an easy-to-use,
+haveged: unpredictable random number generator based upon an adaptation of the
+haveged: HAVEGE algorithm. Haveged was created to remedy low-entropy conditions
+haveged: in the Linux random device that can occur under some workloads,
+haveged: especially on headless servers.
+haveged:
+haveged: Homepage: http://www.issihosts.com/haveged/index.html
+haveged:
+haveged:
diff --git a/source/a/pkgtools/pkgtools.SlackBuild b/source/a/pkgtools/pkgtools.SlackBuild
index 162b0110..ec1c71cd 100755
--- a/source/a/pkgtools/pkgtools.SlackBuild
+++ b/source/a/pkgtools/pkgtools.SlackBuild
@@ -30,7 +30,7 @@ PKGNAM=pkgtools
# *** UPDATE THESE WITH EACH BUILD:
VERSION=15.0
ARCH=${ARCH:-noarch}
-BUILD=${BUILD:-17}
+BUILD=${BUILD:-18}
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
diff --git a/source/a/pkgtools/scripts/setup.services b/source/a/pkgtools/scripts/setup.services
index b57ad33f..47b4cef7 100644
--- a/source/a/pkgtools/scripts/setup.services
+++ b/source/a/pkgtools/scripts/setup.services
@@ -31,6 +31,17 @@ if [ -r etc/rc.d/rc.atalk ]; then
EOF
fi
+if [ -r etc/rc.d/rc.atd ]; then
+ if [ -x etc/rc.d/rc.atd ]; then
+ RC_ATD=on
+ else
+ RC_ATD=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.atd" "Schedules jobs for later" $RC_ATD "The at daemon schedules jobs to be run at a specified time." \\
+EOF
+fi
+
if [ -r etc/rc.d/rc.bind ]; then
if [ -x etc/rc.d/rc.bind ]; then
RC_BIND=on
@@ -42,6 +53,17 @@ if [ -r etc/rc.d/rc.bind ]; then
EOF
fi
+if [ -r etc/rc.d/rc.crond ]; then
+ if [ -x etc/rc.d/rc.crond ]; then
+ RC_CROND=on
+ else
+ RC_CROND=off
+ fi
+ cat << EOF >> $TMP/tmpscript
+ "rc.crond" "Time based job scheduler" $RC_CROND "The cron daemon schedules jobs to run at fixed times, dates, or intervals." \\
+EOF
+fi
+
if [ -r etc/rc.d/rc.cups ]; then
if [ -x etc/rc.d/rc.cups ]; then
RC_CUPS=on
@@ -306,7 +328,7 @@ if [ ! $? = 0 ]; then
exit
fi
-for service in rc.atalk rc.bind rc.cups rc.dovecot rc.dnsmasq rc.fuse rc.hald rc.hplip rc.httpd rc.inetd rc.ip_forward rc.lprng rc.messagebus rc.mysqld rc.ntpd rc.pcmcia rc.postfix rc.rpc rc.samba rc.saslauthd rc.smartd rc.snmpd rc.sendmail rc.syslog rc.sshd ; do
+for service in rc.atalk rc.atd rc.bind rc.crond rc.cups rc.dovecot rc.dnsmasq rc.fuse rc.hald rc.hplip rc.httpd rc.inetd rc.ip_forward rc.lprng rc.messagebus rc.mysqld rc.ntpd rc.pcmcia rc.postfix rc.rpc rc.samba rc.saslauthd rc.smartd rc.snmpd rc.sendmail rc.syslog rc.sshd ; do
if [ -f etc/rc.d/$service ]; then
if grep -w $service $TMP/reply 1> /dev/null ; then
chmod 755 etc/rc.d/$service
diff --git a/source/a/sysvinit-scripts/scripts/rc.6 b/source/a/sysvinit-scripts/scripts/rc.6
index cf9d0342..35de0a7a 100644
--- a/source/a/sysvinit-scripts/scripts/rc.6
+++ b/source/a/sysvinit-scripts/scripts/rc.6
@@ -37,6 +37,10 @@ case "$0" in
;;
esac
+# Restart init. This prevents init from hanging on to file handles for removed
+# glibc shared libraries in the case that those were upgraded or reinstalled.
+/sbin/telinit u
+
# Save the system time to the hardware clock using hwclock --systohc.
# This will also create or update the timestamps in /etc/adjtime.
if [ -x /sbin/hwclock ]; then
diff --git a/source/a/sysvinit-scripts/scripts/rc.K b/source/a/sysvinit-scripts/scripts/rc.K
index 5362a620..50b1702b 100644
--- a/source/a/sysvinit-scripts/scripts/rc.K
+++ b/source/a/sysvinit-scripts/scripts/rc.K
@@ -117,5 +117,5 @@ echo
# Now go to the single user level
echo "Going to single user mode..."
-telinit -t 1 1
+/sbin/telinit -t 1 1
diff --git a/source/a/sysvinit-scripts/scripts/rc.M b/source/a/sysvinit-scripts/scripts/rc.M
index 6b69bad2..6bd667c5 100644
--- a/source/a/sysvinit-scripts/scripts/rc.M
+++ b/source/a/sysvinit-scripts/scripts/rc.M
@@ -141,7 +141,6 @@ fi
# Remove stale locks and junk files (must be done after mount -a!)
/bin/rm -f /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /tmp/core /core 2> /dev/null
-/bin/rm -rf /var/spool/cron/cron.?????? 2> /dev/null
# Remove stale hunt sockets so the game can start.
if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then
@@ -272,15 +271,13 @@ if [ -x /sbin/accton -a -r /var/log/pacct ]; then
fi
# Start crond (Dillon's crond):
-# If you want cron to actually log activity to /var/log/cron, then change
-# -l notice to -l info to increase the logging level.
-if [ -x /usr/sbin/crond ]; then
- /usr/sbin/crond -l notice
+if [ -x /etc/rc.d/rc.crond ]; then
+ /etc/rc.d/rc.crond start
fi
# Start atd (manages jobs scheduled with 'at'):
-if [ -x /usr/sbin/atd ]; then
- /usr/sbin/atd -b 15 -l 1
+if [ -x /etc/rc.d/rc.atd ]; then
+ /etc/rc.d/rc.atd start
fi
# Slackware-Mini-Quota-HOWTO:
diff --git a/source/a/sysvinit-scripts/scripts/rc.S b/source/a/sysvinit-scripts/scripts/rc.S
index cbe99e8f..c53548f4 100644
--- a/source/a/sysvinit-scripts/scripts/rc.S
+++ b/source/a/sysvinit-scripts/scripts/rc.S
@@ -73,6 +73,10 @@ if grep -wq cgroup /proc/filesystems ; then
fi
fi
+# Start the haveged entropy daemon:
+if [ -x /etc/rc.d/rc.haveged ]; then
+ /etc/rc.d/rc.haveged start
+fi
# Initialize the Logical Volume Manager.
# This won't start unless we find /etc/lvmtab (LVM1) or
diff --git a/source/a/sysvinit-scripts/sysvinit-scripts.SlackBuild b/source/a/sysvinit-scripts/sysvinit-scripts.SlackBuild
index ca09faf8..6e47bc03 100755
--- a/source/a/sysvinit-scripts/sysvinit-scripts.SlackBuild
+++ b/source/a/sysvinit-scripts/sysvinit-scripts.SlackBuild
@@ -25,7 +25,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=sysvinit-scripts
VERSION=${VERSION:-2.1}
ARCH=noarch
-BUILD=${BUILD:-9}
+BUILD=${BUILD:-10}
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
diff --git a/source/ap/at/at.SlackBuild b/source/ap/at/at.SlackBuild
index 46837914..6d8af558 100755
--- a/source/ap/at/at.SlackBuild
+++ b/source/ap/at/at.SlackBuild
@@ -23,8 +23,8 @@
cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=at
-VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-2}
+VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
+BUILD=${BUILD:-3}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -62,7 +62,7 @@ mkdir -p $TMP $PKG
cd $TMP
rm -rf at-$VERSION
-tar xvf $CWD/at-${VERSION}.tar.?z* || exit 1
+tar xvf $CWD/at-${VERSION}.tar.?z || exit 1
cd at-$VERSION || exit 1
chown -R root:root .
@@ -89,6 +89,15 @@ make install IROOT=$PKG || exit
mv $PKG/etc/at.deny $PKG/etc/at.deny.new
chown root:root $PKG/var $PKG/var/spool
+# Add the init script:
+mkdir -p $PKG/etc/rc.d
+cat $CWD/rc.atd > $PKG/etc/rc.d/rc.atd.new
+chmod 755 $PKG/etc/rc.d/rc.atd.new
+
+# Add the default file:
+mkdir -p $PKG/etc/default
+cat $CWD/atd.default > $PKG/etc/default/atd.new
+
find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
diff --git a/source/ap/at/atd.default b/source/ap/at/atd.default
new file mode 100644
index 00000000..b70fad0b
--- /dev/null
+++ b/source/ap/at/atd.default
@@ -0,0 +1,6 @@
+# Default options for the atd daemon:
+#
+# -b 15: minimal interval in seconds between two jobs
+# -l 1: do not start new jobs if the load average is above 1
+
+ATD_OPTS="-b 15 -l 1"
diff --git a/source/ap/at/doinst.sh b/source/ap/at/doinst.sh
index 6c4b5431..8c031101 100644
--- a/source/ap/at/doinst.sh
+++ b/source/ap/at/doinst.sh
@@ -1,16 +1,35 @@
#!/bin/sh
+
config() {
+ for infile in $1; do
+ NEW="$infile"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+ done
+}
+
+preserve_perms() {
NEW="$1"
- OLD="`dirname $NEW`/`basename $NEW .new`"
- # If there's no config file by that name, mv it over:
- if [ ! -r $OLD ]; then
- mv $NEW $OLD
- elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy
- rm $NEW
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ if [ -e $OLD ]; then
+ cp -a $OLD ${NEW}.incoming
+ cat $NEW > ${NEW}.incoming
+ mv ${NEW}.incoming $NEW
fi
- # Otherwise, we leave the .new copy for the admin to consider...
+ config $NEW
}
+
+preserve_perms etc/rc.d/rc.atd.new
+config etc/default/atd.new
config etc/at.deny.new
+
if [ ! -r var/spool/atjobs/.SEQ ]; then
touch var/spool/atjobs/.SEQ
chmod 660 var/spool/atjobs/.SEQ
diff --git a/source/ap/at/rc.atd b/source/ap/at/rc.atd
new file mode 100644
index 00000000..2e06f169
--- /dev/null
+++ b/source/ap/at/rc.atd
@@ -0,0 +1,39 @@
+#!/bin/sh
+# /etc/rc.d/rc.atd - start/stop the at daemon
+
+# To change the default options, edit /etc/default/atd.
+if [ -r /etc/default/atd ]; then
+ . /etc/default/atd
+fi
+
+start_atd() {
+ if ! /usr/bin/pgrep --ns $$ --exact atd 1> /dev/null 2> /dev/null ; then
+ echo "Starting atd: /usr/sbin/atd $ATD_OPTS"
+ /usr/sbin/atd $CROND_OPTS
+ fi
+}
+
+stop_atd() {
+ echo "Stopping atd."
+ /usr/bin/pkill --ns $$ --exact atd 2> /dev/null
+}
+
+restart_atd() {
+ stop_atd
+ sleep 1
+ start_atd
+}
+
+case "$1" in
+'start')
+ start_atd
+ ;;
+'stop')
+ stop_atd
+ ;;
+'restart')
+ restart_atd
+ ;;
+*)
+ echo "usage $0 start|stop|restart"
+esac
diff --git a/source/ap/at/slack-desc b/source/ap/at/slack-desc
index cc37d8b8..532193fb 100644
--- a/source/ap/at/slack-desc
+++ b/source/ap/at/slack-desc
@@ -14,6 +14,6 @@ at: time.
at:
at: The 'at' command was written by David Parsons and Thomas Koenig.
at:
-at: Homepage: http://anonscm.debian.org/cgit/collab-maint/at.git/
+at: Homepage: http://ftp.debian.org/debian/pool/main/a/at
at:
at:
diff --git a/source/l/glibc/doinst.sh-glibc b/source/l/glibc/doinst.sh-glibc
index e9929739..4ce7c1a0 100644
--- a/source/l/glibc/doinst.sh-glibc
+++ b/source/l/glibc/doinst.sh-glibc
@@ -197,8 +197,3 @@ fi
( cd usr/share/zoneinfo ; ln -sf /etc/localtime localtime )
( cd bin ; rm -rf sln )
( cd bin ; ln -sf /sbin/sln sln )
-
-# Reload to prevent init from holding a stale handle to glibc on shutdown:
-if [ -x /sbin/telinit ]; then
- /sbin/telinit u
-fi
diff --git a/source/l/glibc/doinst.sh-glibc-solibs b/source/l/glibc/doinst.sh-glibc-solibs
index a285f4ed..570f427d 100644
--- a/source/l/glibc/doinst.sh-glibc-solibs
+++ b/source/l/glibc/doinst.sh-glibc-solibs
@@ -154,8 +154,3 @@ if [ ! -x /sbin/ldconfig ]; then
( cd lib ; rm -rf librt.so.1 )
( cd lib ; ln -sf librt-@@VERSION@@.so librt.so.1 )
fi
-
-# Reload to prevent init from holding a stale handle to glibc on shutdown:
-if [ -x /sbin/telinit ]; then
- /sbin/telinit u
-fi
diff --git a/source/l/glibc/glibc.SlackBuild b/source/l/glibc/glibc.SlackBuild
index 57479292..0623cd5c 100755
--- a/source/l/glibc/glibc.SlackBuild
+++ b/source/l/glibc/glibc.SlackBuild
@@ -27,7 +27,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=glibc
VERSION=${VERSION:-$(echo glibc-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
CHECKOUT=${CHECKOUT:-""}
-BUILD=${BUILD:-3}
+BUILD=${BUILD:-4}
# I was considering disabling NSCD, but MoZes talked me out of it. :)
#DISABLE_NSCD=" --disable-nscd "
diff --git a/source/l/gnu-efi/gnu-efi.SlackBuild b/source/l/gnu-efi/gnu-efi.SlackBuild
index ec5967dd..d98191af 100755
--- a/source/l/gnu-efi/gnu-efi.SlackBuild
+++ b/source/l/gnu-efi/gnu-efi.SlackBuild
@@ -26,8 +26,8 @@
cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=gnu-efi
-VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-2}
+VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
+BUILD=${BUILD:-1}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
@@ -66,7 +66,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PKGNAM-$VERSION
-tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z* || exit 1
+tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z || exit 1
cd $PKGNAM-$VERSION || exit 1
chown -R root:root .
chmod -R u+w,go+r-w,a-s .
@@ -93,6 +93,14 @@ mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a ChangeLog README* \
$PKG/usr/doc/$PKGNAM-$VERSION
+# If there's a ChangeLog, installing at least part of the recent history
+# is useful, but don't let it get totally out of control:
+if [ -r ChangeLog ]; then
+ DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION)
+ cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
+ touch -r ChangeLog $DOCSDIR/ChangeLog
+fi
+
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
diff --git a/source/l/gnu-efi/gnu-efi.url b/source/l/gnu-efi/gnu-efi.url
index bcc8aa9f..e5435b45 100644
--- a/source/l/gnu-efi/gnu-efi.url
+++ b/source/l/gnu-efi/gnu-efi.url
@@ -1 +1 @@
-https://downloads.sourceforge.net/gnu-efi/gnu-efi-3.0.6.tar.bz2
+https://downloads.sourceforge.net/gnu-efi/gnu-efi-3.0.8.tar.bz2