diff options
Diffstat (limited to 'source')
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 |