summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gregory2015-07-08 01:27:37 -0400
committerAndrew Gregory2015-07-08 01:27:37 -0400
commitdf32656a184af44d2a827fc9b85a32515e492aa5 (patch)
treebf9805ead0c86ded79d192826abf15d3d53d241d
downloadaur-df32656a184af44d2a827fc9b85a32515e492aa5.tar.gz
add openrc-sysvinit
-rw-r--r--.SRCINFO22
-rw-r--r--.gitignore3
-rw-r--r--0001-Makefile-detect-dynamic-libcrypt.patch31
-rw-r--r--0001-simplify-writelog.patch125
-rw-r--r--0002-remove-ansi-escape-codes-from-log-file.patch79
-rw-r--r--PKGBUILD43
-rw-r--r--openrc-init.patch11
-rw-r--r--sysvinit.install7
8 files changed, 321 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..745fc7b37d07
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,22 @@
+pkgbase = openrc-sysvinit
+ pkgdesc = Linux System V Init patched to use alternate inittab for openrc
+ pkgver = 2.88
+ pkgrel = 10
+ url = http://savannah.nongnu.org/projects/sysvinit
+ install = sysvinit.install
+ arch = i686
+ arch = x86_64
+ groups = base
+ license = GPL
+ depends = sysvinit
+ source = http://download.savannah.gnu.org/releases/sysvinit/sysvinit-2.88dsf.tar.bz2
+ source = 0001-simplify-writelog.patch
+ source = 0002-remove-ansi-escape-codes-from-log-file.patch
+ source = openrc-init.patch
+ md5sums = 6eda8a97b86e0a6f59dabbf25202aa6f
+ md5sums = 26bfc38ccd225814ef9dd02842109df2
+ md5sums = a913d77f6554699bc074428cc6b07589
+ md5sums = f60460c6a3bc58376562fc76568bf3d7
+
+pkgname = openrc-sysvinit
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..d725ba4cf0d2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+*.tar.*
+pkg/
+src/
diff --git a/0001-Makefile-detect-dynamic-libcrypt.patch b/0001-Makefile-detect-dynamic-libcrypt.patch
new file mode 100644
index 000000000000..6eef631cab0b
--- /dev/null
+++ b/0001-Makefile-detect-dynamic-libcrypt.patch
@@ -0,0 +1,31 @@
+From bd0ec99398e3ebdb54ea80200d7cc738a7f6657a Mon Sep 17 00:00:00 2001
+From: Andrew Gregory <andrew.gregory.8@gmail.com>
+Date: Sat, 7 Dec 2013 10:17:41 -0500
+Subject: [PATCH] Makefile: detect dynamic libcrypt
+
+Even though the libcrypt detection was looking for libcrypt.a, sulogin
+was being linked against libcrypt dynamically anyway because -static was
+not used. Using libcrypt.a failed to find libcrypt on systems without
+static libs, causing compiler errors.
+
+Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
+---
+ src/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/Makefile b/src/Makefile
+index 9e80533..215ad19 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -89,7 +89,7 @@ else
+ endif
+
+ # Additional libs for GNU libc.
+-ifneq ($(wildcard /usr/lib*/libcrypt.a),)
++ifneq ($(wildcard /usr/lib*/libcrypt.*),)
+ SULOGINLIBS += -lcrypt
+ endif
+
+--
+1.8.4.2
+
diff --git a/0001-simplify-writelog.patch b/0001-simplify-writelog.patch
new file mode 100644
index 000000000000..6f1b63c7f832
--- /dev/null
+++ b/0001-simplify-writelog.patch
@@ -0,0 +1,125 @@
+From 5577552eb1344ddd661893564b1e628f8edcf13d Mon Sep 17 00:00:00 2001
+From: Florian Pritz <bluewind@xinu.at>
+Date: Fri, 15 Jun 2012 16:41:52 +0200
+Subject: [PATCH 1/2] simplify writelog()
+
+All we do is prepend the date and remove \r. We don't handle color
+codes, but the user can just cat the log file in a terminal and it will
+interpret the codes correctly.
+
+Signed-off-by: Florian Pritz <bluewind@xinu.at>
+---
+ bootlogd.c | 76 +++++++++++++++++-------------------------------------------
+ 1 file changed, 21 insertions(+), 55 deletions(-)
+
+diff --git a/bootlogd.c b/bootlogd.c
+index 570d382..e36e261 100644
+--- a/bootlogd.c
++++ b/bootlogd.c
+@@ -68,11 +68,6 @@ int didnl = 1;
+ int createlogfile = 0;
+ int syncalot = 0;
+
+-struct line {
+- char buf[256];
+- int pos;
+-} line;
+-
+ /*
+ * Console devices as listed on the kernel command line and
+ * the mapping to actual devices in /dev
+@@ -351,63 +346,34 @@ int consolename(char *res, int rlen)
+ */
+ void writelog(FILE *fp, unsigned char *ptr, int len)
+ {
+- time_t t;
+- char *s;
+- char tmp[8];
+- int olen = len;
+- int dosync = 0;
+- int tlen;
+-
+- while (len > 0) {
+- tmp[0] = 0;
+- if (didnl) {
++ int dosync = 0;
++ int i;
++ static int first_run = 1;
++
++ for (i = 0; i < len; i++) {
++ int ignore = 0;
++
++ /* prepend date to every line */
++ if (*(ptr-1) == '\n' || first_run) {
++ time_t t;
++ char *s;
+ time(&t);
+ s = ctime(&t);
+ fprintf(fp, "%.24s: ", s);
+- didnl = 0;
++ dosync = 1;
++ first_run = 0;
+ }
+- switch (*ptr) {
+- case 27: /* ESC */
+- strcpy(tmp, "^[");
+- break;
+- case '\r':
+- line.pos = 0;
+- break;
+- case 8: /* ^H */
+- if (line.pos > 0) line.pos--;
+- break;
+- case '\n':
+- didnl = 1;
+- dosync = 1;
+- break;
+- case '\t':
+- line.pos += (line.pos / 8 + 1) * 8;
+- if (line.pos >= (int)sizeof(line.buf))
+- line.pos = sizeof(line.buf) - 1;
+- break;
+- case 32 ... 127:
+- case 161 ... 255:
+- tmp[0] = *ptr;
+- tmp[1] = 0;
+- break;
+- default:
+- sprintf(tmp, "\\%03o", *ptr);
+- break;
+- }
+- ptr++;
+- len--;
+
+- tlen = strlen(tmp);
+- if (tlen && (line.pos + tlen < (int)sizeof(line.buf))) {
+- memcpy(line.buf + line.pos, tmp, tlen);
+- line.pos += tlen;
++ if (*ptr == '\r') {
++ ignore = 1;
+ }
+- if (didnl) {
+- fprintf(fp, "%s\n", line.buf);
+- memset(&line, 0, sizeof(line));
++
++ if (!ignore) {
++ fwrite(ptr, sizeof(char), 1, fp);
+ }
+- }
+
++ ptr++;
++ }
+ if (dosync) {
+ fflush(fp);
+ if (syncalot) {
+@@ -415,7 +381,7 @@ void writelog(FILE *fp, unsigned char *ptr, int len)
+ }
+ }
+
+- outptr += olen;
++ outptr += len;
+ if (outptr >= endptr)
+ outptr = ringbuf;
+
+--
+1.7.10.4
diff --git a/0002-remove-ansi-escape-codes-from-log-file.patch b/0002-remove-ansi-escape-codes-from-log-file.patch
new file mode 100644
index 000000000000..99c3cfa9e14a
--- /dev/null
+++ b/0002-remove-ansi-escape-codes-from-log-file.patch
@@ -0,0 +1,79 @@
+From 8d0022d9540112a92ce8d88c91c4ac10bad8c9ef Mon Sep 17 00:00:00 2001
+From: Florian Pritz <bluewind@xinu.at>
+Date: Sun, 24 Jun 2012 15:49:51 +0200
+Subject: [PATCH 2/2] remove ansi escape codes from log file
+
+References: https://en.wikipedia.org/wiki/ANSI_escape_code
+
+Signed-off-by: Florian Pritz <bluewind@xinu.at>
+---
+ bootlogd.c | 45 +++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 43 insertions(+), 2 deletions(-)
+
+diff --git a/bootlogd.c b/bootlogd.c
+index e36e261..88e610d 100644
+--- a/bootlogd.c
++++ b/bootlogd.c
+@@ -349,6 +349,7 @@ void writelog(FILE *fp, unsigned char *ptr, int len)
+ int dosync = 0;
+ int i;
+ static int first_run = 1;
++ static int inside_esc = 0;
+
+ for (i = 0; i < len; i++) {
+ int ignore = 0;
+@@ -364,10 +365,50 @@ void writelog(FILE *fp, unsigned char *ptr, int len)
+ first_run = 0;
+ }
+
+- if (*ptr == '\r') {
+- ignore = 1;
++ /* remove escape sequences, but do it in a way that allows us to stop
++ * in the middle in case the string was cut off */
++ if (inside_esc == 1) {
++ /* first '[' is special because if we encounter it again, it should be considered the final byte */
++ if (*ptr == '[') {
++ /* multi char sequence */
++ ignore = 1;
++ inside_esc = 2;
++ } else {
++ /* single char sequence */
++ if (*ptr >= 64 && *ptr <= 95) {
++ ignore = 1;
++ }
++ inside_esc = 0;
++ }
++ } else if (inside_esc == 2) {
++ switch (*ptr) {
++ case '0' ... '9': /* intermediate chars of escape sequence */
++ case ';':
++ case 32 ... 47:
++ if (inside_esc) {
++ ignore = 1;
++ }
++ break;
++ case 64 ... 126: /* final char of escape sequence */
++ if (inside_esc) {
++ ignore = 1;
++ inside_esc = 0;
++ }
++ break;
++ }
++ } else {
++ switch (*ptr) {
++ case '\r':
++ ignore = 1;
++ break;
++ case 27: /* ESC */
++ ignore = 1;
++ inside_esc = 1;
++ break;
++ }
+ }
+
++
+ if (!ignore) {
+ fwrite(ptr, sizeof(char), 1, fp);
+ }
+--
+1.7.10.4
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..9f798e48e6a0
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,43 @@
+# Contributor: Eric Belanger <eric@archlinux.org>
+# Maintainer: Andrew Gregory <andrew.gregory.8@gmail.com>
+
+pkgname=openrc-sysvinit
+pkgdesc="Linux System V Init patched to use alternate inittab for openrc"
+depends=('sysvinit')
+install=sysvinit.install
+pkgver=2.88
+pkgrel=10
+arch=('i686' 'x86_64')
+url="http://savannah.nongnu.org/projects/sysvinit"
+license=('GPL')
+groups=('base')
+source=(http://download.savannah.gnu.org/releases/sysvinit/sysvinit-${pkgver}dsf.tar.bz2
+ "0001-simplify-writelog.patch"
+ "0002-remove-ansi-escape-codes-from-log-file.patch"
+ "openrc-init.patch")
+md5sums=('6eda8a97b86e0a6f59dabbf25202aa6f'
+ '26bfc38ccd225814ef9dd02842109df2'
+ 'a913d77f6554699bc074428cc6b07589'
+ 'f60460c6a3bc58376562fc76568bf3d7')
+
+prepare() {
+ cd "$srcdir/sysvinit-${pkgver}dsf"
+
+ # FS#30005
+ patch -p1 -d "src" -i "$srcdir/0001-simplify-writelog.patch"
+ patch -p1 -d "src" -i "$srcdir/0002-remove-ansi-escape-codes-from-log-file.patch"
+
+ # use /etc/openrc/inittab instead of /etc/inittab
+ patch -p1 -d "src" -i "$srcdir/openrc-init.patch"
+}
+
+build() {
+ cd "$srcdir/sysvinit-${pkgver}dsf"
+ make -C src init
+}
+
+package() {
+ cd "$srcdir/sysvinit-${pkgver}dsf"
+ install -d "$pkgdir/usr/bin"
+ install -m 755 src/init "$pkgdir/usr/bin/init-openrc"
+}
diff --git a/openrc-init.patch b/openrc-init.patch
new file mode 100644
index 000000000000..869bb7dd2e2f
--- /dev/null
+++ b/openrc-init.patch
@@ -0,0 +1,11 @@
+--- src/paths.h 2012-09-28 23:52:32.635670907 -0400
++++ src/paths.h.new 2012-09-28 23:52:39.504932330 -0400
+@@ -26,7 +26,7 @@
+ #define CONSOLE "/dev/console" /* Logical system console */
+ #define SECURETTY "/etc/securetty" /* List of root terminals */
+ #define SDALLOW "/etc/shutdown.allow" /* Users allowed to shutdown */
+-#define INITTAB "/etc/inittab" /* Location of inittab */
++#define INITTAB "/etc/openrc/inittab" /* Location of inittab */
+ #define INIT "/sbin/init" /* Location of init itself. */
+ #define NOLOGIN "/etc/nologin" /* Stop user logging in. */
+ #define FASTBOOT "/fastboot" /* Enable fast boot. */
diff --git a/sysvinit.install b/sysvinit.install
new file mode 100644
index 000000000000..bbda4bee8da3
--- /dev/null
+++ b/sysvinit.install
@@ -0,0 +1,7 @@
+post_install() {
+ echo "To boot using OpenRC append init=/usr/bin/init-openrc to your kernel bootline."
+}
+
+post_upgrade() {
+ [ -x usr/bin/init-openrc ] && usr/bin/init-openrc u
+}