aboutsummaryrefslogtreecommitdiffstats
path: root/community
diff options
context:
space:
mode:
Diffstat (limited to 'community')
-rw-r--r--community/albatross-themes/APKBUILD62
-rw-r--r--community/albatross-themes/commits-to-010514-since-v1.7.3.patch1012
-rw-r--r--community/apk-post-messages/APKBUILD25
-rw-r--r--community/apk-post-messages/apk-post-messages.trigger16
-rw-r--r--community/autossh/APKBUILD66
-rw-r--r--community/autossh/README.alpine34
-rw-r--r--community/bitcoin/APKBUILD102
-rw-r--r--community/bitcoin/bitcoin.conf13
-rw-r--r--community/bitcoin/bitcoin.initd38
-rw-r--r--community/bitcoin/bitcoin.post-install35
-rw-r--r--community/bitcoin/bitcoin.pre-install6
-rw-r--r--community/bitcoin/ssize_t.patch12
-rw-r--r--community/btrbk/APKBUILD40
-rw-r--r--community/entr/APKBUILD43
-rw-r--r--community/entr/remove-strlcpy-compat.h.patch14
-rw-r--r--community/ffmpegthumbnailer/APKBUILD41
-rw-r--r--community/firejail/APKBUILD56
-rw-r--r--community/firetools/APKBUILD38
-rw-r--r--community/fwsnort/APKBUILD76
-rw-r--r--community/fwsnort/fwsnort.post-install16
-rw-r--r--community/fwsnort/fwsnort.up5
-rw-r--r--community/fwsnort/fwsnort.update15
-rw-r--r--community/fwsnort/periodic.daily5
-rw-r--r--community/gnome-colors/APKBUILD75
-rw-r--r--community/imapsync/APKBUILD32
-rw-r--r--community/inetutils-syslogd/APKBUILD98
-rw-r--r--community/inetutils-syslogd/inetutils-syslogd.confd9
-rw-r--r--community/inetutils-syslogd/inetutils-syslogd.initd36
-rw-r--r--community/inetutils-syslogd/inetutils-syslogd.logrotate38
-rw-r--r--community/inetutils-syslogd/inetutils-syslogd.post-deinstall7
-rw-r--r--community/inetutils-syslogd/inetutils-syslogd.post-install3
-rw-r--r--community/inetutils-syslogd/inetutils-syslogd.setup28
-rw-r--r--community/inetutils-syslogd/syslog.conf38
-rw-r--r--community/inotify-tools-inc/APKBUILD58
-rw-r--r--community/inotify-tools-inc/add-include-regex.patch365
-rw-r--r--community/isync/APKBUILD37
-rw-r--r--community/junit/APKBUILD30
-rw-r--r--community/ktsuss/APKBUILD43
-rw-r--r--community/letsencrypt-nosudo/APKBUILD32
-rw-r--r--community/libmbim/APKBUILD35
-rw-r--r--community/libndp/APKBUILD55
-rw-r--r--community/libndp/fix-fd_set.patch10
-rw-r--r--community/libqmi/APKBUILD48
-rw-r--r--community/libteam/APKBUILD70
-rw-r--r--community/libteam/fix-fd_set.patch10
-rw-r--r--community/libteam/memcpy-memset-implicit-declaration.patch10
-rw-r--r--community/mini-sendmail/APKBUILD64
-rw-r--r--community/mini-sendmail/LICENSE25
-rw-r--r--community/mini-sendmail/README.alpine5
-rw-r--r--community/mini-sendmail/sh.c30
-rw-r--r--community/modemmanager/APKBUILD93
-rw-r--r--community/modemmanager/modemmanager.rules8
-rw-r--r--community/modemmanager/no-XCASE.patch35
-rw-r--r--community/namecoin/12-fix-miniupnpc.patch17
-rw-r--r--community/namecoin/20-boost-multithread-dynamic.patch33
-rw-r--r--community/namecoin/31-set-default-env-function.patch61
-rw-r--r--community/namecoin/APKBUILD75
-rw-r--r--community/namecoin/namecoin.conf13
-rw-r--r--community/namecoin/namecoin.initd38
-rw-r--r--community/namecoin/namecoin.post-install35
-rw-r--r--community/namecoin/namecoin.pre-install6
-rw-r--r--community/namecoin/system-strlcpy.patch60
-rw-r--r--community/networkmanager/APKBUILD129
-rw-r--r--community/networkmanager/disable_set_hostname.patch20
-rw-r--r--community/networkmanager/networkmanager.conf2
-rw-r--r--community/networkmanager/networkmanager.initd23
-rw-r--r--community/networkmanager/networkmanager.rules9
-rw-r--r--community/networkmanager/new-fix-musl-headers.patch31
-rw-r--r--community/nginx-naxsi/APKBUILD143
-rw-r--r--community/nginx-naxsi/anonymise.patch76
-rw-r--r--community/nginx-naxsi/ipv6.patch42
-rw-r--r--community/nginx-naxsi/nginx-naxsi.pre-install9
l---------community/nginx-naxsi/nginx-naxsi.pre-upgrade1
-rw-r--r--community/nginx-naxsi/nginx.initd42
-rw-r--r--community/nginx-naxsi/nginx.logrotate12
-rw-r--r--community/nginx-naxsi/sysguard.patch10
-rw-r--r--community/numix-themes/APKBUILD68
-rw-r--r--community/nxapi/APKBUILD47
-rw-r--r--community/nxapi/fix-config-location.patch26
-rw-r--r--community/opencl-headers/APKBUILD42
-rw-r--r--community/opencl-icd-loader/APKBUILD41
-rw-r--r--community/opus-tools/APKBUILD37
-rw-r--r--community/perl-authen-ntlm/APKBUILD34
-rw-r--r--community/perl-bit-vector/APKBUILD33
-rw-r--r--community/perl-data-uniqid/APKBUILD34
-rw-r--r--community/perl-file-copy-recursive/APKBUILD34
-rw-r--r--community/perl-getopt-argvfile/APKBUILD34
-rw-r--r--community/perl-io-tee/APKBUILD34
-rw-r--r--community/perl-iptables-chainmgr/APKBUILD41
-rw-r--r--community/perl-iptables-parse/APKBUILD41
-rw-r--r--community/perl-module-scandeps/APKBUILD40
-rw-r--r--community/perl-par-dist/APKBUILD34
-rw-r--r--community/perl-par-packer/APKBUILD36
-rw-r--r--community/perl-par/APKBUILD34
-rw-r--r--community/perl-uri-escape/APKBUILD34
-rw-r--r--community/psad/APKBUILD109
-rw-r--r--community/psad/psad.confd8
-rw-r--r--community/psad/psad.initd51
-rw-r--r--community/py-crcmod/APKBUILD38
-rw-r--r--community/py-graphviz/APKBUILD42
-rw-r--r--community/py-lz4/01-system_lz4.patch36
-rw-r--r--community/py-lz4/02-tests.patch24
-rw-r--r--community/py-lz4/APKBUILD40
-rw-r--r--community/py-opencl/APKBUILD33
-rw-r--r--community/py-opengl-accelerate/APKBUILD31
-rw-r--r--community/runit/APKBUILD66
-rw-r--r--community/runit/README.alpine56
-rw-r--r--community/runit/run-service-dir.patch11
-rw-r--r--community/runit/runit.initd14
-rw-r--r--community/secpwgen/APKBUILD57
-rw-r--r--community/secpwgen/make-openssl.patch33
-rw-r--r--community/secure-delete/APKBUILD37
-rw-r--r--community/socklog/APKBUILD49
-rw-r--r--community/socklog/socklog.post-install22
-rw-r--r--community/spacefm/APKBUILD65
-rw-r--r--community/tinyssh/APKBUILD62
-rw-r--r--community/tinyssh/tinyssh.confd8
-rw-r--r--community/tinyssh/tinyssh.initd43
-rw-r--r--community/udevil/APKBUILD61
-rw-r--r--community/udevil/udevil.pre-install5
-rw-r--r--community/virt-viewer/APKBUILD47
-rw-r--r--community/virtualbricks/APKBUILD39
-rw-r--r--community/whois/APKBUILD30
-rw-r--r--community/wrk/APKBUILD37
-rw-r--r--community/xpra/APKBUILD52
-rw-r--r--community/zram-init/APKBUILD39
126 files changed, 6053 insertions, 0 deletions
diff --git a/community/albatross-themes/APKBUILD b/community/albatross-themes/APKBUILD
new file mode 100644
index 0000000000..6492e0741d
--- /dev/null
+++ b/community/albatross-themes/APKBUILD
@@ -0,0 +1,62 @@
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=albatross-themes
+pkgver=1.7.4
+pkgrel=0
+pkgdesc="A clean minimalistic theme for Xfce, GTK 2 and 3"
+url="http://shimmerproject.org/project/albatross/"
+arch="noarch"
+license="GPLv2 or CC-BY-SA"
+makedepends="$depends_dev"
+subpackages="$pkgname-gtk2 $pkgname-gtk3 $pkgname-metacity $pkgname-xfwm4"
+source="albatross-$pkgver.tar.gz::https://github.com/shimmerproject/Albatross/archive/v$pkgver.tar.gz"
+
+_builddir="$srcdir"/Albatross-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ # Remove Unity theme
+ rm -f gtk-3.0/apps/unity.css
+ sed -i '/unity\.css/d' gtk-3.0/gtk.css
+}
+
+package() {
+ cd "$_builddir"
+ mkdir -p "$pkgdir"/usr/share/themes/Albatross
+ cp -pr * "$pkgdir"/usr/share/themes/Albatross
+}
+
+_mv() {
+ pkgdesc="$1"
+ install_if="$pkgname=$pkgver-r$pkgrel $2";
+ depends=
+ local _i
+ shift; shift
+ mkdir -p "$subpkgdir"/usr/share/themes/Albatross
+ for _i; do
+ msg "moving $_i"
+ mv "$pkgdir"/usr/share/themes/Albatross/$_i \
+ "$subpkgdir"/usr/share/themes/Albatross || return 1
+ done
+}
+
+gtk2() {
+ _mv "Albatross GTK2 themes" gtk2.0 gtk-2.0
+ depends="gtk-murrine-engine"
+}
+
+gtk3() { _mv "Albatross GTK3 themes" gtk3.0 gtk-3.0; }
+metacity() { _mv "Albatross Metacity themes" metacity metacity-1; }
+xfwm4() { _mv "Albatross Xfce4 themes" xfwm4 xfwm4; }
+
+md5sums="66e7dcf8efe689d9f40ac53b5fb245f6 albatross-1.7.4.tar.gz"
+sha256sums="ff40e28e164cb99f01b131ae3e79a07782e29a720535460e901ce305fa322ae1 albatross-1.7.4.tar.gz"
+sha512sums="3ec30f6c654e7e5ccc49cd7116c308329c5a4bd9027c90f6545ca73d4734e1339d1c79c0cb2a7489bb701ccb0623e6a0e72f22bd4c923bb32a75dd4f4337fcfd albatross-1.7.4.tar.gz"
diff --git a/community/albatross-themes/commits-to-010514-since-v1.7.3.patch b/community/albatross-themes/commits-to-010514-since-v1.7.3.patch
new file mode 100644
index 0000000000..9cdc073ea4
--- /dev/null
+++ b/community/albatross-themes/commits-to-010514-since-v1.7.3.patch
@@ -0,0 +1,1012 @@
+--- Albatross-1.7.3/gtk-3.0/gtk-widgets-assets.css
++++ Albatross/gtk-3.0/gtk-widgets-assets.css
+@@ -22,118 +22,118 @@
+ .check,
+ .check row:selected,
+ .check row:selected:focus {
+- background-image: url("assets/checkbox-unchecked.png");
++ -gtk-icon-source: url("assets/checkbox-unchecked.png");
+ }
+
+ .check:insensitive,
+ .check row:selected:insensitive,
+ .check row:selected:focus:insensitive {
+- background-image: url("assets/checkbox-unchecked-insensitive.png");
++ -gtk-icon-source: url("assets/checkbox-unchecked-insensitive.png");
+ }
+
+-.check:active,
+-.check row:selected:active,
+-.check row:selected:focus:active {
+- background-image: url("assets/checkbox-checked.png");
++.check:active, .check:checked,
++.check row:selected:active, .check row:selected:checked,
++.check row:selected:focus:active, .check row:selected:focus:checked {
++ -gtk-icon-source: url("assets/checkbox-checked.png");
+ }
+
+-.check:active:insensitive,
+-.check row:selected:active:insensitive,
+-.check row:selected:focus:active:insensitive {
+- background-image: url("assets/checkbox-checked-insensitive.png");
++.check:active:insensitive, .check:checked:insensitive,
++.check row:selected:active:insensitive, .check row:selected:checked:insensitive,
++.check row:selected:focus:active:insensitive, .check row:selected:focus:checked:insensitive {
++ -gtk-icon-source: url("assets/checkbox-checked-insensitive.png");
+ }
+
+ .check:inconsistent,
+ .check row:selected:inconsistent,
+ .check row:selected:focus:inconsistent {
+- background-image: url("assets/checkbox-mixed.png");
++ -gtk-icon-source: url("assets/checkbox-mixed.png");
+ }
+
+ .check:inconsistent:insensitive,
+ .check row:selected:inconsistent:insensitive,
+ .check row:selected:focus:inconsistent:insensitive {
+- background-image: url("assets/checkbox-mixed-insensitive.png");
++ -gtk-icon-source: url("assets/checkbox-mixed-insensitive.png");
+ }
+
+ .radio,
+ .radio row:selected,
+ .radio row:selected:focus {
+- background-image: url("assets/radio-unselected.png");
++ -gtk-icon-source: url("assets/radio-unselected.png");
+ }
+
+ .radio:insensitive,
+ .radio row:selected:insensitive,
+ .radio row:selected:focus:insensitive {
+- background-image: url("assets/radio-unselected-insensitive.png");
++ -gtk-icon-source: url("assets/radio-unselected-insensitive.png");
+ }
+
+-.radio:active,
+-.radio row:selected:active,
+-.radio row:selected:focus:active {
+- background-image: url("assets/radio-selected.png");
++.radio:active, .radio:checked,
++.radio row:selected:active, .radio row:selected:checked,
++.radio row:selected:focus:active, .radio row:selected:focus:checked {
++ -gtk-icon-source: url("assets/radio-selected.png");
+ }
+
+-.radio:active:insensitive,
+-.radio row:selected:active:insensitive,
+-.radio row:selected:focus:active:insensitive {
+- background-image: url("assets/radio-selected-insensitive.png");
++.radio:active:insensitive, .radio:checked:insensitive,
++.radio row:selected:active:insensitive, .radio row:selected:checked:insensitive,
++.radio row:selected:focus:active:insensitive, .radio row:selected:focus:checked:insensitive {
++ -gtk-icon-source: url("assets/radio-selected-insensitive.png");
+ }
+
+ .radio:inconsistent,
+ .radio row:selected:inconsistent,
+ .radio row:selected:focus:inconsistent {
+- background-image: url("assets/radio-mixed.png");
++ -gtk-icon-source: url("assets/radio-mixed.png");
+ }
+
+ .radio:inconsistent:insensitive,
+ .radio row:selected:inconsistent:insensitive,
+ .radio row:selected:focus:inconsistent:insensitive {
+- background-image: url("assets/radio-mixed-insensitive.png");
++ -gtk-icon-source: url("assets/radio-mixed-insensitive.png");
+ }
+
+-.menuitem.check:active {
+- background-image: url("assets/menuitem-checkbox-checked.png");
++.menuitem.check:active, .menuitem.check:checked {
++ -gtk-icon-source: url("assets/menuitem-checkbox-checked.png");
+ }
+
+-.menuitem.check:active:hover {
+- background-image: url("assets/menuitem-checkbox-checked-selected.png");
++.menuitem.check:active:hover, .menuitem.check:checked:hover {
++ -gtk-icon-source: url("assets/menuitem-checkbox-checked-selected.png");
+ }
+
+-.menuitem.check:active:insensitive {
+- background-image: url("assets/menuitem-checkbox-checked-insensitive.png");
++.menuitem.check:active:insensitive, .menuitem.check:checked:insensitive {
++ -gtk-icon-source: url("assets/menuitem-checkbox-checked-insensitive.png");
+ }
+
+ .menuitem.check:inconsistent:hover,
+ .menuitem.radio:inconsistent:hover {
+- background-image: url("assets/menuitem-checkbox-mixed-selected.png");
++ -gtk-icon-source: url("assets/menuitem-checkbox-mixed-selected.png");
+ }
+
+ .menuitem.check:inconsistent,
+ .menuitem.radio:inconsistent {
+- background-image: url("assets/menuitem-checkbox-mixed.png");
++ -gtk-icon-source: url("assets/menuitem-checkbox-mixed.png");
+ }
+
+ .menuitem.check:inconsistent:insensitive,
+ .menuitem.radio:inconsistent:insensitive {
+- background-image: url("assets/menuitem-checkbox-mixed-insensitive.png");
++ -gtk-icon-source: url("assets/menuitem-checkbox-mixed-insensitive.png");
+ }
+
+-.menuitem.radio:active {
+- background-image: url("assets/menuitem-radio-checked.png");
++.menuitem.radio:active, .menuitem.radio:checked {
++ -gtk-icon-source: url("assets/menuitem-radio-checked.png");
+ }
+
+-.menuitem.radio:active:hover {
+- background-image: url("assets/menuitem-radio-checked-selected.png");
++.menuitem.radio:active:hover, .menuitem.radio:checked:hover {
++ -gtk-icon-source: url("assets/menuitem-radio-checked-selected.png");
+ }
+
+-.menuitem.radio:active:insensitive {
+- background-image: url("assets/menuitem-radio-checked-insensitive.png");
++.menuitem.radio:active:insensitive, .menuitem.radio:checked:insensitive {
++ -gtk-icon-source: url("assets/menuitem-radio-checked-insensitive.png");
+ }
+
+ GtkIconView.content-view.cell.check {
+- background-image: url("assets/grid-selection-unchecked.png");
++ -gtk-icon-source: url("assets/grid-selection-unchecked.png");
+ }
+
+-GtkIconView.content-view.cell.check:active {
+- background-image: url("assets/grid-selection-checked.png");
++GtkIconView.content-view.cell.check:active, GtkIconView.content-view.cell.check:checked {
++ -gtk-icon-source: url("assets/grid-selection-checked.png");
+ }
+--- Albatross-1.7.3/gtk-3.0/gtk-widgets.css
++++ Albatross/gtk-3.0/gtk-widgets.css
+@@ -148,9 +148,13 @@
+ inset 1px -1px alpha(@light_shadow, 0.3);
+ }
+
++.button:checked,
+ .button:active,
++.primary-toolbar .button:checked,
+ .primary-toolbar .button:active,
++.toolbar .button:checked,
+ .toolbar .button:active,
++.header-bar .button:checked,
+ .header-bar .button:active {
+ box-shadow: inset 1px 1px alpha(@dark_shadow, 0.1),
+ inset -1px -1px alpha(@dark_shadow, 0.1);
+@@ -179,9 +183,13 @@
+ .primary-toolbar .button:insensitive,
+ .toolbar .button:insensitive,
+ .header-bar .button:insensitive,
++.button:checked *:insensitive,
+ .button:active *:insensitive,
++.primary-toolbar .button:checked *:insensitive,
+ .primary-toolbar .button:active *:insensitive,
++.toolbar .button:checked *:insensitive,
+ .toolbar .button:active *:insensitive,
++.header-bar .button:checked *:insensitive,
+ .header-bar .button:active *:insensitive,
+ .entry:insensitive,
+ .scrollbar.button,
+@@ -239,6 +247,7 @@
+ to (shade(@theme_selected_bg_color, 1.09)));
+ }
+
++.button:checked,
+ .button:active {
+ border-color: shade(@theme_bg_color, 0.7);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -248,6 +257,7 @@
+ to (shade(@theme_bg_color, 0.82)));
+ }
+
++.button:checked:hover,
+ .button:active:hover {
+ border-color: shade(@theme_bg_color, 0.7);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -259,7 +269,9 @@
+
+ .button:focus,
+ .button:hover:focus,
++.button:checked:focus,
+ .button:active:focus,
++.button:checked:hover:focus,
+ .button:active:hover:focus {
+ border-color: shade(@theme_selected_bg_color, 0.8);
+ }
+@@ -273,6 +285,7 @@
+ to (shade(@theme_bg_color, 0.91)));
+ }
+
++.button:checked *:insensitive,
+ .button:active *:insensitive {
+ border-color: shade(@theme_bg_color, 0.8);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -335,14 +348,17 @@
+ * column-header *
+ *****************/
+ column-header .button,
++column-header .button:checked,
+ column-header .button:active {
+ border-width: 0 1px 1px 0;
+ border-radius: 0;
+ }
+
+ column-header .button,
++column-header .button:checked,
+ column-header .button:active,
+ column-header .button:focus,
++column-header .button:checked:focus,
+ column-header .button:active:focus {
+ border-color: shade(@theme_base_color, 0.9);
+ border-bottom-color: shade(@theme_base_color, 0.8);
+@@ -353,8 +369,10 @@
+ }
+
+ column-header .button:hover,
++column-header .button:checked:hover,
+ column-header .button:active:hover,
+ column-header .button:hover:focus,
++column-header .button:checked:hover:focus,
+ column-header .button:active:hover:focus {
+ border-color: shade(@theme_base_color, 0.9);
+ border-bottom-color: shade(@theme_base_color, 0.8);
+@@ -488,10 +506,12 @@
+
+ .primary-toolbar GtkComboBox.combobox-entry .button,
+ .primary-toolbar GtkComboBox.combobox-entry .button:hover,
++.primary-toolbar GtkComboBox.combobox-entry .button:checked,
+ .primary-toolbar GtkComboBox.combobox-entry .button:active,
+ .primary-toolbar GtkComboBox.combobox-entry .button:insensitive,
+ GtkComboBox.combobox-entry .button,
+ GtkComboBox.combobox-entry .button:hover,
++GtkComboBox.combobox-entry .button:checked,
+ GtkComboBox.combobox-entry .button:active,
+ GtkComboBox.combobox-entry .button:insensitive {
+ border-width: 1px 1px 1px 1px;
+@@ -665,11 +685,13 @@
+ background-color: shade(@info_bg_color, 1.10);
+ }
+
++.info .button:checked,
+ .info .button:active {
+ border-color: shade(@info_bg_color, 0.6);
+ background-color: shade(@info_bg_color, 0.95);
+ }
+
++.info .button:checked:hover,
+ .info .button:active:hover {
+ border-top-color: shade(@info_bg_color, 0.85);
+ border-right-color: shade(@info_bg_color, 0.78);
+@@ -719,11 +741,13 @@
+ background-color: shade(@warning_bg_color, 1.10);
+ }
+
++.warning .button:checked,
+ .warning .button:active {
+ border-color: shade(@warning_bg_color, 0.6);
+ background-color: shade(@warning_bg_color, 0.95);
+ }
+
++.warning .button:checked:hover,
+ .warning .button:active:hover {
+ border-top-color: shade(@warning_bg_color, 0.85);
+ border-right-color: shade(@warning_bg_color, 0.78);
+@@ -773,11 +797,13 @@
+ background-color: shade(@question_bg_color, 1.10);
+ }
+
++.question .button:checked,
+ .question .button:active {
+ border-color: shade(@question_bg_color, 0.6);
+ background-color: shade(@question_bg_color, 0.95);
+ }
+
++.question .button:checked:hover,
+ .question .button:active:hover {
+ border-top-color: shade(@question_bg_color, 0.85);
+ border-right-color: shade(@question_bg_color, 0.78);
+@@ -829,11 +855,13 @@
+ background-color: shade(@error_bg_color, 1.10);
+ }
+
++.error .button:checked,
+ .error .button:active {
+ border-color: shade(@error_bg_color, 0.6);
+ background-color: shade(@error_bg_color, 0.95);
+ }
+
++.error .button:checked:hover,
+ .error .button:active:hover {
+ border-top-color: shade(@error_bg_color, 0.85);
+ border-right-color: shade(@error_bg_color, 0.78);
+@@ -977,7 +1005,9 @@
+ }
+
+ .menu.button:hover,
++.menu.button:checked,
+ .menu.button:active,
++.menu.button:checked *:insensitive,
+ .menu.button:active *:insensitive,
+ .menu.button:insensitive,
+ .menu.button {
+@@ -1178,8 +1208,10 @@
+ }
+
+ GtkModelButton.button,
++GtkModelButton.button:checked,
+ GtkModelButton.button:active,
+ GtkModelButton.button:insensitive,
++GtkModelButton.button:checked:insensitive,
+ GtkModelButton.button:active:insensitive {
+ background-color: transparent;
+ background-image: none;
+@@ -1189,6 +1221,7 @@
+ color: @theme_fg_color;
+ }
+
++GtkModelButton.button:checked:hover,
+ GtkModelButton.button:active:hover,
+ GtkModelButton.button:hover,
+ GtkModelButton.button:selected {
+@@ -1554,7 +1587,9 @@
+ }
+
+ .scrollbar.button,
++.scrollbar.button:checked,
+ .scrollbar.button:active,
++.scrollbar.button:checked:hover,
+ .scrollbar.button:active:hover {
+ border-width: 0;
+ border-radius: 0;
+@@ -1741,6 +1776,7 @@
+ box-shadow: inset 1px 0 shade(@theme_bg_color, 0.95);
+ }
+
++.spinbutton .button:checked,
+ .spinbutton .button:active,
+ .spinbutton .button:hover {
+ color: @theme_fg_color;
+@@ -1783,6 +1819,7 @@
+ to (shade(@theme_selected_bg_color, 1.09)));
+ }
+
++.spinbutton.vertical .button:checked,
+ .spinbutton.vertical .button:active {
+ border-color: shade(@theme_bg_color, 0.7);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -1792,6 +1829,7 @@
+ to (shade(@theme_bg_color, 0.82)));
+ }
+
++.spinbutton.vertical .button:checked:hover,
+ .spinbutton.vertical .button:active:hover {
+ border-color: shade(@theme_bg_color, 0.7);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -1803,7 +1841,9 @@
+
+ .spinbutton.vertical .button:focus,
+ .spinbutton.vertical .button:hover:focus,
++.spinbutton.vertical .button:checked:focus,
+ .spinbutton.vertical .button:active:focus,
++.spinbutton.vertical .button:checked:hover:focus,
+ .spinbutton.vertical .button:active:hover:focus {
+ border-color: shade(@theme_selected_bg_color, 0.7);
+ }
+@@ -2247,8 +2287,11 @@
+ to (shade(@theme_selected_bg_color, 1.09)));
+ }
+
++.primary-toolbar .button:checked,
+ .primary-toolbar .button:active,
++.toolbar .button:checked,
+ .toolbar .button:active,
++.header-bar .button:checked,
+ .header-bar .button:active {
+ border-color: shade(@toolbar_bg_color, 0.7);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -2258,8 +2301,11 @@
+ to (shade(@toolbar_bg_color, 0.82)));
+ }
+
++.primary-toolbar .button:checked:hover,
+ .primary-toolbar .button:active:hover,
++.toolbar .button:checked:hover,
+ .toolbar .button:active:hover,
++.header-bar .button:checked:hover,
+ .header-bar .button:active:hover {
+ border-color: shade(@toolbar_bg_color, 0.7);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -2271,15 +2317,21 @@
+
+ .primary-toolbar .button:focus,
+ .primary-toolbar .button:hover:focus,
++.primary-toolbar .button:checked:focus,
+ .primary-toolbar .button:active:focus,
++.primary-toolbar .button:checked:hover:focus,
+ .primary-toolbar .button:active:hover:focus,
+ .toolbar .button:focus,
+ .toolbar .button:hover:focus,
++.toolbar .button:checked:focus,
+ .toolbar .button:active:focus,
++.toolbar .button:checked:hover:focus,
+ .toolbar .button:active:hover:focus,
+ .header-bar .button:focus,
+ .header-bar .button:hover:focus,
++.header-bar .button:checked:focus,
+ .header-bar .button:active:focus,
++.header-bar .button:checked:hover:focus,
+ .header-bar .button:active:hover:focus {
+ border-color: shade(@theme_selected_bg_color, 0.8);
+ }
+@@ -2295,8 +2347,11 @@
+ to (shade(@toolbar_bg_color, 0.91)));
+ }
+
++.primary-toolbar .button:checked *:insensitive,
+ .primary-toolbar .button:active *:insensitive,
++.toolbar .button:checked *:insensitive,
+ .toolbar .button:active *:insensitive,
++.header-bar .button:checked *:insensitive,
+ .header-bar .button:active *:insensitive {
+ border-color: shade(@toolbar_bg_color, 0.8);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -2357,19 +2412,23 @@
+ background-image: none;
+ }
+
++.inline-toolbar.toolbar .button:checked,
+ .inline-toolbar.toolbar .button:active {
+ border-color: shade(@theme_bg_color, 0.8);
+ background-color: shade(@theme_bg_color, 0.95);
+ background-image: none;
+ }
+
++.inline-toolbar.toolbar .button:checked:hover,
+ .inline-toolbar.toolbar .button:active:hover {
+ border-color: shade(@theme_bg_color, 0.7);
+ }
+
+ .inline-toolbar.toolbar .button:focus,
+ .inline-toolbar.toolbar .button:hover:focus,
++.inline-toolbar.toolbar .button:checked:focus,
+ .inline-toolbar.toolbar .button:active:focus,
++.inline-toolbar.toolbar .button:checked:hover:focus,
+ .inline-toolbar.toolbar .button:active:hover:focus {
+ border-color: shade(@theme_bg_color, 0.7);
+ }
+@@ -2394,9 +2453,13 @@
+ inset -1px 1px alpha(@light_shadow, 0.3);
+ }
+
++.linked .button:checked,
+ .linked .button:active,
++.inline-toolbar.toolbar .button:checked,
+ .inline-toolbar.toolbar .button:active,
++.inline-toolbar.toolbar GtkToolButton .button:checked,
+ .inline-toolbar.toolbar GtkToolButton .button:active,
++.inline-toolbar.toolbar GtkToolButton > .button:checked,
+ .inline-toolbar.toolbar GtkToolButton > .button:active {
+ box-shadow: inset -1px 0 shade(@theme_bg_color, 0.8),
+ inset 1px 1px alpha(@dark_shadow, 0.1),
+@@ -2411,11 +2474,17 @@
+ }
+
+ /* remove box shadow from last-child and only-child */
++.linked .button:checked *:insensitive:last-child,
+ .linked .button:active *:insensitive:last-child,
++.linked .button:checked *:insensitive:only-child,
+ .linked .button:active *:insensitive:only-child,
++.inline-toolbar.toolbar .button:checked *:insensitive:last-child,
+ .inline-toolbar.toolbar .button:active *:insensitive:last-child,
++.inline-toolbar.toolbar .button:checked *:insensitive:only-child,
+ .inline-toolbar.toolbar .button:active *:insensitive:only-child,
++.inline-toolbar.toolbar GtkToolButton:last-child > .button:checked *:insensitive,
+ .inline-toolbar.toolbar GtkToolButton:last-child > .button:active *:insensitive,
++.inline-toolbar.toolbar GtkToolButton:only-child > .button:checked *:insensitive,
+ .inline-toolbar.toolbar GtkToolButton:only-child > .button:active *:insensitive {
+ box-shadow: none;
+ }
+@@ -2437,11 +2506,17 @@
+ inset -1px 1px alpha(@light_shadow, 0.3);
+ }
+
++.linked .button:checked:last-child,
+ .linked .button:active:last-child,
++.linked .button:checked:only-child,
+ .linked .button:active:only-child,
++.inline-toolbar.toolbar .button:checked:last-child,
+ .inline-toolbar.toolbar .button:active:last-child,
++.inline-toolbar.toolbar .button:checked:only-child,
+ .inline-toolbar.toolbar .button:active:only-child,
++.inline-toolbar.toolbar GtkToolButton:last-child > .button:checked,
+ .inline-toolbar.toolbar GtkToolButton:last-child > .button:active,
++.inline-toolbar.toolbar GtkToolButton:only-child > .button:checked,
+ .inline-toolbar.toolbar GtkToolButton:only-child > .button:active {
+ box-shadow: inset 1px 1px alpha(@dark_shadow, 0.1),
+ inset -1px -1px alpha(@dark_shadow, 0.1);
+@@ -2450,13 +2525,17 @@
+ /* middle button */
+ .linked .entry,
+ .linked .button,
++.linked .button:checked,
+ .linked .button:active,
++.linked .button:checked:hover,
+ .linked .button:active:hover,
+ .linked .button:insensitive,
+ .inline-toolbar.toolbar .button,
++.inline-toolbar.toolbar .button:checked,
+ .inline-toolbar.toolbar .button:active,
+ .inline-toolbar.toolbar .button:insensitive,
+ .inline-toolbar.toolbar GtkToolButton .button,
++.inline-toolbar.toolbar GtkToolButton .button:checked,
+ .inline-toolbar.toolbar GtkToolButton .button:active,
+ .inline-toolbar.toolbar GtkToolButton .button:insensitive {
+ border-width: 1px;
+@@ -2468,13 +2547,17 @@
+ /*leftmost button */
+ .linked .entry:first-child,
+ .linked .button:first-child,
++.linked .button:checked:first-child,
+ .linked .button:active:first-child,
++.linked .button:checked:hover:first-child,
+ .linked .button:active:hover:first-child,
+ .linked .button:insensitive:first-child,
+ .inline-toolbar.toolbar .button:first-child,
++.inline-toolbar.toolbar .button:checked:first-child,
+ .inline-toolbar.toolbar .button:active:first-child,
+ .inline-toolbar.toolbar .button:insensitive:first-child,
+ .inline-toolbar.toolbar GtkToolButton:first-child .button,
++.inline-toolbar.toolbar GtkToolButton:first-child .button:checked,
+ .inline-toolbar.toolbar GtkToolButton:first-child .button:active,
+ .inline-toolbar.toolbar GtkToolButton:first-child .button:insensitive {
+ border-width: 1px;
+@@ -2487,13 +2570,17 @@
+ /* rightmost button */
+ .linked .entry:last-child,
+ .linked .button:last-child,
++.linked .button:checked:last-child,
+ .linked .button:active:last-child,
++.linked .button:checked:hover:last-child,
+ .linked .button:active:hover:last-child,
+ .linked .button:insensitive:last-child,
+ .inline-toolbar.toolbar .button:last-child,
++.inline-toolbar.toolbar .button:checked:last-child,
+ .inline-toolbar.toolbar .button:active:last-child,
+ .inline-toolbar.toolbar .button:insensitive:last-child,
+ .inline-toolbar.toolbar GtkToolButton:last-child .button,
++.inline-toolbar.toolbar GtkToolButton:last-child .button:checked,
+ .inline-toolbar.toolbar GtkToolButton:last-child .button:active,
+ .inline-toolbar.toolbar GtkToolButton:last-child .button:insensitive {
+ border-width: 1px;
+@@ -2506,13 +2593,17 @@
+ /* linked single button */
+ .linked .entry:only-child,
+ .linked .button:only-child,
++.linked .button:checked:only-child,
+ .linked .button:active:only-child,
++.linked .button:checked:hover:only-child,
+ .linked .button:active:hover:only-child,
+ .linked .button:insensitive:only-child,
+ .inline-toolbar.toolbar .button:only-child,
++.inline-toolbar.toolbar .button:checked:only-child,
+ .inline-toolbar.toolbar .button:active:only-child,
+ .inline-toolbar.toolbar .button:insensitive:only-child,
+ .inline-toolbar.toolbar GtkToolButton:only-child .button,
++.inline-toolbar.toolbar GtkToolButton:only-child .button:checked,
+ .inline-toolbar.toolbar GtkToolButton:only-child .button:active,
+ .inline-toolbar.toolbar GtkToolButton:only-child .button:insensitive {
+ border-width: 1px;
+@@ -2528,8 +2619,11 @@
+ inset -1px 1px alpha(@light_shadow, 0.3);
+ }
+
++.linked.vertical .button:checked,
+ .linked.vertical .button:active,
++.inline-toolbar.toolbar.vertical .button:checked,
+ .inline-toolbar.toolbar.vertical .button:active,
++.inline-toolbar.toolbar.vertical GtkToolButton > .button:checked,
+ .inline-toolbar.toolbar.vertical GtkToolButton > .button:active {
+ box-shadow: inset 0 -1px shade(@theme_bg_color, 0.8),
+ inset 1px 1px alpha(@dark_shadow, 0.1),
+@@ -2543,11 +2637,17 @@
+ }
+
+ /* remove box shadow from last-child and only-child */
++.linked.vertical .button:checked *:insensitive:last-child,
+ .linked.vertical .button:active *:insensitive:last-child,
++.linked.vertical .button:checked *:insensitive:only-child,
+ .linked.vertical .button:active *:insensitive:only-child,
++.inline-toolbar.toolbar.vertical .button:checked *:insensitive:last-child,
+ .inline-toolbar.toolbar.vertical .button:active *:insensitive:last-child,
++.inline-toolbar.toolbar.vertical .button:checked *:insensitive:only-child,
+ .inline-toolbar.toolbar.vertical .button:active *:insensitive:only-child,
++.inline-toolbar.toolbar.vertical GtkToolButton:last-child > .button:checked *:insensitive,
+ .inline-toolbar.toolbar.vertical GtkToolButton:last-child > .button:active *:insensitive,
++.inline-toolbar.toolbar.vertical GtkToolButton:only-child > .button:checked *:insensitive,
+ .inline-toolbar.toolbar.vertical GtkToolButton:only-child > .button:active *:insensitive {
+ box-shadow: none;
+ }
+@@ -2569,11 +2669,17 @@
+ inset -1px 1px alpha(@light_shadow, 0.3);
+ }
+
++.linked.vertical .button:checked:last-child,
+ .linked.vertical .button:active:last-child,
++.linked.vertical .button:checked:only-child,
+ .linked.vertical .button:active:only-child,
++.inline-toolbar.toolbar.vertical .button:checked:last-child,
+ .inline-toolbar.toolbar.vertical .button:active:last-child,
++.inline-toolbar.toolbar.vertical .button:checked:only-child,
+ .inline-toolbar.toolbar.vertical .button:active:only-child,
++.inline-toolbar.toolbar.vertical GtkToolButton:last-child > .button:checked,
+ .inline-toolbar.toolbar.vertical GtkToolButton:last-child > .button:active,
++.inline-toolbar.toolbar.vertical GtkToolButton:only-child > .button:checked,
+ .inline-toolbar.toolbar.vertical GtkToolButton:only-child > .button:active {
+ box-shadow: inset 1px 1px alpha(@dark_shadow, 0.1),
+ inset -1px -1px alpha(@dark_shadow, 0.1);
+@@ -2582,7 +2688,9 @@
+ /* middle button (vertical) */
+ .linked.vertical .entry,
+ .linked.vertical .button,
++.linked.vertical .button:checked,
+ .linked.vertical .button:active,
++.linked.vertical .button:checked:hover,
+ .linked.vertical .button:active:hover,
+ .linked.vertical .button:insensitive {
+ border-width: 1px;
+@@ -2594,7 +2702,9 @@
+ /* top button (vertical) */
+ .linked.vertical .entry:first-child,
+ .linked.vertical .button:first-child,
++.linked.vertical .button:checked:first-child,
+ .linked.vertical .button:active:first-child,
++.linked.vertical .button:checked:hover:first-child,
+ .linked.vertical .button:active:hover:first-child,
+ .linked.vertical .button:insensitive:first-child {
+ border-width: 1px;
+@@ -2607,7 +2717,9 @@
+ /* bottom button (vertical) */
+ .linked.vertical .entry:last-child,
+ .linked.vertical .button:last-child,
++.linked.vertical .button:checked:last-child,
+ .linked.vertical .button:active:last-child,
++.linked.vertical .button:checked:hover:last-child,
+ .linked.vertical .button:active:hover:last-child,
+ .linked.vertical .button:insensitive:last-child {
+ border-width: 1px;
+@@ -2620,7 +2732,9 @@
+ /* linked single button (vertical) */
+ .linked.vertical .entry:only-child,
+ .linked.vertical .button:only-child,
++.linked.vertical .button:checked:only-child,
+ .linked.vertical .button:active:only-child,
++.linked.vertical .button:checked:hover:only-child,
+ .linked.vertical .button:active:hover:only-child,
+ .linked.vertical .button:insensitive:only-child {
+ border-width: 1px;
+@@ -2642,12 +2756,17 @@
+ }
+
+ .primary-toolbar .button.raised.linked:active,
++.primary-toolbar .raised.linked .button:checked,
+ .primary-toolbar .raised.linked .button:active,
+ .toolbar .button.raised.linked:active,
++.toolbar .raised.linked .button:checked,
+ .toolbar .raised.linked .button:active,
++.toolbar .linked .button:checked,
+ .toolbar .linked .button:active,
+ .header-bar .button.raised.linked:active,
++.header-bar .raised.linked .button:checked,
+ .header-bar .raised.linked .button:active,
++.header-bar .linked .button:checked,
+ .header-bar .linked .button:active {
+ box-shadow: inset -1px 0 shade(@toolbar_bg_color, 0.8),
+ inset 1px 1px alpha(@dark_shadow, 0.1),
+@@ -2666,21 +2785,37 @@
+ }
+
+ /* remove box shadow from last-child and only-child */
++.primary-toolbar .button:checked *:insensitive.raised.linked:last-child,
+ .primary-toolbar .button:active *:insensitive.raised.linked:last-child,
++.primary-toolbar .button:checked *:insensitive.raised.linked:only-child,
+ .primary-toolbar .button:active *:insensitive.raised.linked:only-child,
++.primary-toolbar .raised.linked .button:checked *:insensitive:last-child,
+ .primary-toolbar .raised.linked .button:active *:insensitive:last-child,
++.primary-toolbar .raised.linked .button:checked *:insensitive:only-child
+ .primary-toolbar .raised.linked .button:active *:insensitive:only-child
++.toolbar .button:checked *:insensitive.raised.linked:last-child,
+ .toolbar .button:active *:insensitive.raised.linked:last-child,
++.toolbar .button:checked *:insensitive.raised.linked:only-child,
+ .toolbar .button:active *:insensitive.raised.linked:only-child,
++.toolbar .raised.linked .button:checked *:insensitive:last-child,
+ .toolbar .raised.linked .button:active *:insensitive:last-child,
++.toolbar .raised.linked .button:checked *:insensitive:only-child,
+ .toolbar .raised.linked .button:active *:insensitive:only-child,
++.toolbar .linked .button:checked *:insensitive:last-child,
+ .toolbar .linked .button:active *:insensitive:last-child,
++.toolbar .linked .button:checked *:insensitive:only-child,
+ .toolbar .linked .button:active *:insensitive:only-child,
++.header-bar .button:checked *:insensitive.raised.linked:last-child,
+ .header-bar .button:active *:insensitive.raised.linked:last-child,
++.header-bar .button:checked *:insensitive.raised.linked:only-child,
+ .header-bar .button:active *:insensitive.raised.linked:only-child,
++.header-bar .raised.linked .button:checked *:insensitive:last-child,
+ .header-bar .raised.linked .button:active *:insensitive:last-child,
++.header-bar .raised.linked .button:checked *:insensitive:only-child,
+ .header-bar .raised.linked .button:active *:insensitive:only-child,
++.header-bar .linked .button:checked *:insensitive:last-child,
+ .header-bar .linked .button:active *:insensitive:last-child,
++.header-bar .linked .button:checked *:insensitive:only-child,
+ .header-bar .linked .button:active *:insensitive:only-child {
+ box-shadow: none;
+ }
+@@ -2722,21 +2857,37 @@
+ inset -1px 1px alpha(@light_shadow, 0.3);
+ }
+
++.primary-toolbar .button:checked.raised.linked:last-child,
+ .primary-toolbar .button:active.raised.linked:last-child,
++.primary-toolbar .button:checked.raised.linked:only-child,
+ .primary-toolbar .button:active.raised.linked:only-child,
++.primary-toolbar .raised.linked .button:checked:last-child,
+ .primary-toolbar .raised.linked .button:active:last-child,
++.primary-toolbar .raised.linked .button:checked:only-child,
+ .primary-toolbar .raised.linked .button:active:only-child,
++.toolbar .button:checked.raised.linked:last-child,
+ .toolbar .button:active.raised.linked:last-child,
++.toolbar .button:checked.raised.linked:only-child,
+ .toolbar .button:active.raised.linked:only-child,
++.toolbar .raised.linked .button:checked:last-child,
+ .toolbar .raised.linked .button:active:last-child,
++.toolbar .raised.linked .button:checked:only-child,
+ .toolbar .raised.linked .button:active:only-child,
++.toolbar .linked .button:checked:last-child,
+ .toolbar .linked .button:active:last-child,
++.toolbar .linked .button:checked:only-child,
+ .toolbar .linked .button:active:only-child,
++.header-bar .button:checked.raised.linked:last-child,
+ .header-bar .button:active.raised.linked:last-child,
++.header-bar .button:checked.raised.linked:only-child,
+ .header-bar .button:active.raised.linked:only-child,
++.header-bar .raised.linked .button:checked:last-child,
+ .header-bar .raised.linked .button:active:last-child,
++.header-bar .raised.linked .button:checked:only-child,
+ .header-bar .raised.linked .button:active:only-child,
++.header-bar .linked .button:checked:last-child,
+ .header-bar .linked .button:active:last-child,
++.header-bar .linked .button:checked:only-child,
+ .header-bar .linked .button:active:only-child {
+ box-shadow: inset 1px 1px alpha(@dark_shadow, 0.1),
+ inset -1px -1px alpha(@dark_shadow, 0.1);
+@@ -2747,26 +2898,31 @@
+ .primary-toolbar .button.raised.linked:active,
+ .primary-toolbar .button.raised.linked:insensitive,
+ .primary-toolbar .raised.linked .button,
++.primary-toolbar .raised.linked .button:checked,
+ .primary-toolbar .raised.linked .button:active,
+ .primary-toolbar .raised.linked .button:insensitive,
+ .toolbar .button.raised.linked,
+ .toolbar .button.raised.linked:active,
+ .toolbar .button.raised.linked:insensitive,
+ .toolbar .raised.linked .button,
++.toolbar .raised.linked .button:checked,
+ .toolbar .raised.linked .button:active,
+ .toolbar .raised.linked .button:insensitive,
+ .toolbar .linked .button,
++.toolbar .linked .button:checked,
+ .toolbar .linked .button:active,
+ .toolbar .linked .button:insensitive,
+ .header-bar .button.raised.linked,
+ .header-bar .button.raised.linked:active,
+ .header-bar .button.raised.linked:insensitive,
+ .header-bar .raised.linked .button,
++.header-bar .raised.linked .button:checked,
+ .header-bar .raised.linked .button:active,
+ .header-bar .raised.linked .button:insensitive,
+ .header-bar .linked .button,
++.header-bar .linked .button:checked,
+ .header-bar .linked .button:active,
+-.header-bar .linked .button:insensitive, {
++.header-bar .linked .button:insensitive {
+ border-width: 1px;
+ border-radius: 0;
+ border-right-width: 0;
+@@ -2778,24 +2934,29 @@
+ .primary-toolbar .button.raised.linked:active:first-child,
+ .primary-toolbar .button.raised.linked:insensitive:first-child,
+ .primary-toolbar .raised.linked .button:first-child,
++.primary-toolbar .raised.linked .button:checked:first-child,
+ .primary-toolbar .raised.linked .button:active:first-child,
+ .primary-toolbar .raised.linked .button:insensitive:first-child,
+ .toolbar .button.raised.linked:first-child,
+ .toolbar .button.raised.linked:active:first-child,
+ .toolbar .button.raised.linked:insensitive:first-child,
+ .toolbar .raised.linked .button:first-child,
++.toolbar .raised.linked .button:checked:first-child,
+ .toolbar .raised.linked .button:active:first-child,
+ .toolbar .raised.linked .button:insensitive:first-child,
+ .toolbar .linked .button:first-child,
++.toolbar .linked .button:checked:first-child,
+ .toolbar .linked .button:active:first-child,
+ .toolbar .linked .button:insensitive:first-child,
+ .header-bar .button.raised.linked:first-child,
+ .header-bar .button.raised.linked:active:first-child,
+ .header-bar .button.raised.linked:insensitive:first-child,
+ .header-bar .raised.linked .button:first-child,
++.header-bar .raised.linked .button:checked:first-child,
+ .header-bar .raised.linked .button:active:first-child,
+ .header-bar .raised.linked .button:insensitive:first-child,
+ .header-bar .linked .button:first-child,
++.header-bar .linked .button:checked:first-child,
+ .header-bar .linked .button:active:first-child,
+ .header-bar .linked .button:insensitive:first-child {
+ border-width: 1px;
+@@ -2810,24 +2971,29 @@
+ .primary-toolbar .button.raised.linked:active:last-child,
+ .primary-toolbar .button.raised.linked:insensitive:last-child,
+ .primary-toolbar .raised.linked .button:last-child,
++.primary-toolbar .raised.linked .button:checked:last-child,
+ .primary-toolbar .raised.linked .button:active:last-child,
+ .primary-toolbar .raised.linked .button:insensitive:last-child,
+ .toolbar .button.raised.linked:last-child,
+ .toolbar .button.raised.linked:active:last-child,
+ .toolbar .button.raised.linked:insensitive:last-child,
+ .toolbar .raised.linked .button:last-child,
++.toolbar .raised.linked .button:checked:last-child,
+ .toolbar .raised.linked .button:active:last-child,
+ .toolbar .raised.linked .button:insensitive:last-child,
+ .toolbar .linked .button:last-child,
++.toolbar .linked .button:checked:last-child,
+ .toolbar .linked .button:active:last-child,
+ .toolbar .linked .button:insensitive:last-child,
+ .header-bar .button.raised.linked:last-child,
+ .header-bar .button.raised.linked:active:last-child,
+ .header-bar .button.raised.linked:insensitive:last-child,
+ .header-bar .raised.linked .button:last-child,
++.header-bar .raised.linked .button:checked:last-child,
+ .header-bar .raised.linked .button:active:last-child,
+ .header-bar .raised.linked .button:insensitive:last-child,
+ .header-bar .linked .button:last-child,
++.header-bar .linked .button:checked:last-child,
+ .header-bar .linked .button:active:last-child,
+ .header-bar .linked .button:insensitive:last-child {
+ border-width: 1px;
+@@ -2842,24 +3008,29 @@
+ .primary-toolbar .button.raised.linked:active:only-child,
+ .primary-toolbar .button.raised.linked:insensitive:only-child,
+ .primary-toolbar .raised.linked .button:only-child,
++.primary-toolbar .raised.linked .button:checked:only-child,
+ .primary-toolbar .raised.linked .button:active:only-child,
+ .primary-toolbar .raised.linked .button:insensitive:only-child,
+ .toolbar .button.raised.linked:only-child,
+ .toolbar .button.raised.linked:active:only-child,
+ .toolbar .button.raised.linked:insensitive:only-child,
+ .toolbar .raised.linked .button:only-child,
++.toolbar .raised.linked .button:checked:only-child,
+ .toolbar .raised.linked .button:active:only-child,
+ .toolbar .raised.linked .button:insensitive:only-child,
+ .toolbar .linked .button:only-child,
++.toolbar .linked .button:checked:only-child,
+ .toolbar .linked .button:active:only-child,
+ .toolbar .linked .button:insensitive:only-child,
+ .header-bar .button.raised.linked:only-child,
+ .header-bar .button.raised.linked:active:only-child,
+ .header-bar .button.raised.linked:insensitive:only-child,
+ .header-bar .raised.linked .button:only-child,
++.header-bar .raised.linked .button:checked:only-child,
+ .header-bar .raised.linked .button:active:only-child,
+ .header-bar .raised.linked .button:insensitive:only-child,
+ .header-bar .linked .button:only-child,
++.header-bar .linked .button:checked:only-child,
+ .header-bar .linked .button:active:only-child,
+ .header-bar .linked .button:insensitive:only-child {
+ border-width: 1px;
+@@ -2991,16 +3162,22 @@
+ background-image: none;
+ }
+
++.osd.button:checked,
+ .osd.button:active,
++.osd .button:checked,
+ .osd .button:active,
++.osd GtkMenuButton.button:checked,
+ .osd GtkMenuButton.button:active {
+ border-color: shade(@osd_bg, 0.8);
+ background-color: shade(@osd_bg, 0.95);
+ background-image: none;
+ }
+
++.osd.button:checked:hover,
+ .osd.button:active:hover,
++.osd .button:checked:hover,
+ .osd .button:active:hover,
++.osd GtkMenuButton.button:checked:hover,
+ .osd GtkMenuButton.button:active:hover {
+ border-color: shade(@osd_bg, 0.7);
+ }
+@@ -3012,7 +3189,9 @@
+ background-image: none;
+ }
+
++.osd.button:checked *:insensitive,
+ .osd.button:active *:insensitive,
++.osd .button:checked *:insensitive,
+ .osd .button:active *:insensitive {
+ background-color: shade(@osd_bg, 0.80);
+ background-image: none;
+@@ -3048,19 +3227,23 @@
+ background-image: none;
+ }
+
++.osd.toolbar .button:checked,
+ .osd.toolbar .button:active {
+ border-color: shade(@osd_bg, 0.8);
+ background-color: shade(@osd_bg, 0.95);
+ background-image: none;
+ }
+
++.osd.toolbar .button:checked:hover,
+ .osd.toolbar .button:active:hover {
+ border-color: shade(@osd_bg, 0.7);
+ }
+
+ .osd.toolbar .button:focus,
+ .osd.toolbar .button:hover:focus,
++.osd.toolbar .button:checked:focus,
+ .osd.toolbar .button:active:focus,
++.osd.toolbar .button:checked:hover:focus,
+ .osd.toolbar .button:active:hover:focus {
+ border-color: shade(@osd_bg, 0.7);
+ }
+@@ -3071,6 +3254,7 @@
+ background-image: none;
+ }
+
++.osd.toolbar .button:checked *:insensitive,
+ .osd.toolbar .button:active *:insensitive {
+ border-color: shade(@osd_bg, 0.75);
+ background-color: shade(@osd_bg, 0.80);
+@@ -3255,6 +3439,7 @@
+ to (shade(@error_color, 1.09)));
+ }
+
++.destructive-action.button:checked,
+ .destructive-action.button:active {
+ border-color: shade(@error_color, 0.7);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -3323,8 +3508,11 @@
+ to (shade(@theme_selected_bg_color, 1.09)));
+ }
+
++.selection-mode.header-bar .button:checked,
+ .selection-mode.header-bar .button:active,
++.selection-mode.toolbar .button:checked,
+ .selection-mode.toolbar .button:active,
++.selection-mode.toolbar GtkToolButton .button:checked,
+ .selection-mode.toolbar GtkToolButton .button:active {
+ border-color: shade(@theme_selected_bg_color, 0.7);
+ background-image: -gtk-gradient(linear, left top, left bottom,
+@@ -3373,7 +3561,9 @@
+ to (shade(@theme_selected_bg_color, 1.09)));
+ }
+
++.selection-mode.header-bar .suggested-action.button:checked,
+ .selection-mode.header-bar .suggested-action.button:active,
++.selection-mode.toolbar .suggested-action.button:checked,
+ .selection-mode.toolbar .suggested-action.button:active,
+ .selection-mode.toolbar GtkToolButton.suggested-action:active {
+ border-color: shade(@theme_selected_bg_color, 0.7);
+@@ -3417,7 +3607,9 @@
+ color: shade(@theme_selected_bg_color, 0.5);
+ }
+
++.selection-mode.header-bar .selection-menu.button:checked,
+ .selection-mode.header-bar .selection-menu.button:active,
++.selection-mode.toolbar .selection-menu.button:checked,
+ .selection-mode.toolbar .selection-menu.button:active {
+ color: shade(@theme_selected_bg_color, 0.6);
+ box-shadow: none;
diff --git a/community/apk-post-messages/APKBUILD b/community/apk-post-messages/APKBUILD
new file mode 100644
index 0000000000..dad2aa6ed8
--- /dev/null
+++ b/community/apk-post-messages/APKBUILD
@@ -0,0 +1,25 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=apk-post-messages
+pkgver=0.10
+pkgrel=0
+pkgdesc="Print apk post-install messages"
+url="http://alpinelinux.org"
+arch="noarch"
+license="GPL"
+depends="apk-tools"
+triggers="$pkgname.trigger=/usr/share/doc/*"
+source=""
+
+_builddir="$srcdir"
+
+build() {
+ cd "$_builddir"
+ echo "Building $pkgname trigger package"
+}
+
+package() {
+ cd "$_builddir"
+ mkdir -p "$pkgdir"
+}
+
diff --git a/community/apk-post-messages/apk-post-messages.trigger b/community/apk-post-messages/apk-post-messages.trigger
new file mode 100644
index 0000000000..224d295937
--- /dev/null
+++ b/community/apk-post-messages/apk-post-messages.trigger
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+x=README.alpine
+for i; do
+ if [ -f "$i/$x" ]; then
+ msg="| $i: $x |"
+ msg_len=$(( $(echo $msg |wc -m) - 1))
+ printf "%${msg_len}s" | sed 's/ /-/g'
+ echo -e "\n$msg"
+ printf "%${msg_len}s" | sed 's/ /=/g'
+ echo -e "\n"
+ cat $i/$x
+ echo -e; break
+ fi
+done
+
diff --git a/community/autossh/APKBUILD b/community/autossh/APKBUILD
new file mode 100644
index 0000000000..ef27bd3518
--- /dev/null
+++ b/community/autossh/APKBUILD
@@ -0,0 +1,66 @@
+# Contributor: Carlo Landmeter <clandmeter@gmail.com>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=autossh
+pkgver=1.4e
+pkgrel=0
+pkgdesc="Automatically restart SSH sessions and tunnels"
+url="http://www.harding.motd.ca/autossh/"
+arch="all"
+license="BSD"
+depends="openssh-client"
+depends_dev=""
+makedepends="$depends_dev"
+subpackages="$pkgname-doc"
+source="http://www.harding.motd.ca/autossh/autossh-$pkgver.tgz
+ README.alpine
+ "
+
+_builddir="$srcdir"/autossh-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ install -D -m755 autossh \
+ "$pkgdir"/usr/bin/autossh || return 1
+ install -D -m644 CHANGES \
+ "$pkgdir"/usr/share/doc/autossh/CHANGES || return 1
+ install -D -m644 README \
+ "$pkgdir"/usr/share/doc/autossh/README || return 1
+ install -D -m644 autossh.host \
+ "$pkgdir"/usr/share/autossh/examples/autossh.host || return 1
+ install -D -m644 rscreen \
+ "$pkgdir"/usr/share/autossh/examples/rscreen || return 1
+ install -D -m644 autossh.1 \
+ "$pkgdir"/usr/share/man/man1/autossh.1 || return 1
+ install -Dm644 "$srcdir"/README.alpine \
+ "$pkgdir"/usr/share/doc/$pkgname/README.alpine || return 1
+}
+
+md5sums="f86684b96e99d22b2e9d35dc63b0aa29 autossh-1.4e.tgz
+fb31542bb76c90a8286fdf8eca402d1e README.alpine"
+sha256sums="9e8e10a59d7619176f4b986e256f776097a364d1be012781ea52e08d04679156 autossh-1.4e.tgz
+7e1a64e013743e94aa9477968d1a9dc9ca71f11b45a0530088d0c03b19f474cb README.alpine"
+sha512sums="2f71403ee005103c6a3e2e669f6b26153161c95c8dacd3e73d61673461b3512348636877760d911341771e744c0a682b107df4ac48621661ff36a9fc0191f2fb autossh-1.4e.tgz
+25ec2d17c5b93d8c3f5b41f1bb2671432e8d29081621fe58ff8de4c20171b7447459272a27264440a947ef5867ed15bbaaea8ea7ec02783956055e0ee8e31128 README.alpine"
diff --git a/community/autossh/README.alpine b/community/autossh/README.alpine
new file mode 100644
index 0000000000..d7013c3ad8
--- /dev/null
+++ b/community/autossh/README.alpine
@@ -0,0 +1,34 @@
+Example: Connecting to remote postgresql
+========================================
+
+(1) On both the local & remote hosts:
+
+adduser -s /bin/false autossh <with blank passwords>
+-------------------------------------------------------------------
+
+(2) On the local client create an SSH key with an empty password:
+
+su -s /bin/sh autossh
+echo 'y' |ssh-keygen -t ed25519 -N ''
+-------------------------------------------------------------------
+
+(3) If using runit for service supervision < /etc/sv/autossh/run >:
+
+-------------------------------------------------------------------
+#!/bin/sh
+exec 2>&1
+su -s /bin/sh autossh -c \
+'autossh -M 0 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -L 1234:localhost:1234 -N -l autossh remote.ip.addr'
+-------------------------------------------------------------------------------------------------------------------------
+ln -s /etc/sv/autossh /etc/service/autossh
+-------------------------------------------------------------------------------
+** if running autossh in a script without using runit add -f to ssh options **|
+-------------------------------------------------------------------------------
+
+(4) Connect with:
+
+psql -h 127.0.0.1 -p 1234 -U username -d database
+-------------------------------------------------------------------------------
+openssh-server: works out of the box | ed25519 keys possible
+dropbear: echo "/bin/false" >> /etc/shells | ecdsa keys possible
+tinyssh: port forwarding not yet implemented | ed25519 keys possible
diff --git a/community/bitcoin/APKBUILD b/community/bitcoin/APKBUILD
new file mode 100644
index 0000000000..59101b5005
--- /dev/null
+++ b/community/bitcoin/APKBUILD
@@ -0,0 +1,102 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=bitcoin
+pkgver=0.13.0_rc2
+_ver=${pkgver/_/}
+pkgrel=1
+pkgdesc="decentralized P2P electronic cash system"
+url="http://www.bitcoin.org/"
+arch="all"
+license="MIT"
+depends_dev=""
+makedepends="$depends_dev autoconf automake libtool boost-dev openssl-dev db-dev miniupnpc-dev qt5-qtbase-dev
+ qt5-qttools-dev protobuf-dev libqrencode-dev libevent-dev chrpath"
+install="$pkgname.post-install $pkgname.pre-install"
+subpackages="$pkgname-dev $pkgname-qt $pkgname-cli $pkgname-tx $pkgname-tests"
+source="$pkgname-$_ver.tar.gz::https://github.com/bitcoin/bitcoin/archive/v${_ver}.tar.gz
+ ssize_t.patch
+ $pkgname.initd
+ $pkgname.conf
+ "
+
+_builddir="$srcdir"/bitcoin-$_ver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+ ./autogen.sh
+}
+
+build() {
+ cd "$_builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --mandir=/usr/share/man \
+ --with-incompatible-bdb \
+ --with-gui=qt5 \
+ --with-utils \
+ --disable-ccache \
+ --disable-static \
+ --enable-hardening \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make install DESTDIR="$pkgdir" || return 1
+ install -m755 -D "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname || return 1
+ install -m600 -D "$srcdir"/$pkgname.conf "$pkgdir"/etc/$pkgname.conf || return 1
+ rm -f "$pkgdir"/usr/lib/*.la
+}
+
+qt() {
+ pkgdesc="Bitcoin with a Qt frontend & QR Code support"
+ mkdir -p "$subpkgdir"/usr/bin
+ mv "$pkgdir"/usr/bin/bitcoin-qt "$subpkgdir"/usr/bin/ || return 1
+}
+
+cli() {
+ pkgdesc="Bitcoin CLI"
+ mkdir -p "$subpkgdir"/usr/bin
+ mv "$pkgdir"/usr/bin/bitcoin-cli "$subpkgdir"/usr/bin/ || return 1
+}
+
+tx() {
+ pkgdesc="Bitcoin TX (Transaction Tool)"
+ mkdir -p "$subpkgdir"/usr/bin
+ mv "$pkgdir"/usr/bin/bitcoin-tx "$subpkgdir"/usr/bin/ || return 1
+}
+
+tests() {
+ pkgdesc="Bitcoin & Bitcoin-QT Unit Tests)"
+ mkdir -p "$subpkgdir"/usr/bin
+ chrpath -d "$pkgdir"/usr/bin/test_bitcoin || return 1
+ mv "$pkgdir"/usr/bin/test_bitcoin-qt "$subpkgdir"/usr/bin/ || return 1
+ mv "$pkgdir"/usr/bin/test_bitcoin "$subpkgdir"/usr/bin/ || return 1
+}
+
+dev() {
+ mkdir -p "$subpkgdir"/usr
+ mv "$pkgdir"/usr/lib "$subpkgdir"/usr/ || return 1
+ mv "$pkgdir"/usr/include "$subpkgdir"/usr/ || return 1
+}
+
+md5sums="f85ff5ce0dd0253e07179bc5a562e128 bitcoin-0.13.0rc2.tar.gz
+716a88e668729e89d3eb929da86f7f04 ssize_t.patch
+70a29202a5fa77e50e92083b014909c9 bitcoin.initd
+3e9b4a37bb46e6cd83b6824870c58484 bitcoin.conf"
+sha256sums="163d2b6af8b34a200d884a89a678cb9f12269f596bcaa37da28bd68f06d1c85b bitcoin-0.13.0rc2.tar.gz
+f0a094c7b374338ad153ee06b7dd2369dad6b97b1f1bb0252da12c9aaace5321 ssize_t.patch
+432b769f9e7cc2e728d72dd38c20ef54132da4a36134988e3401c8451f31bc42 bitcoin.initd
+b7a31bf251f1011ab6584b610acac8494612c2012e9771985228c36c08a315ac bitcoin.conf"
+sha512sums="bc7b87e2d3acaba46159e4b8a360adc5efa0bf7cc75dfa7a653cb4099efe7325304ebed8774ee8da9d380f548dbdc94e407c693d54ecf85cb076be9405350c64 bitcoin-0.13.0rc2.tar.gz
+98aa5ad81bdb4ae961b791bc978c39117cdf2d83c2181f92bebbb0db107d9b6e86eda265fb3f93ff8a5ca8a7754d7148818b98095d57201dff9363d60b97e7dd ssize_t.patch
+cb2454c353014213bd25fbb938affe79639aa82542c560eaa910e4d9fc01d1cbfec6d8ff004aab9a123ca62e26ed2ebeb264b052a36d3d7154758061065664ab bitcoin.initd
+48abce0f0a5b088c957aa5cb2bcf9bb520593caa7a20019bdf785e43f7d2459968240d4529dfa30be2fca92891bf50c1253a513530511e99d8ee471d9ff6bd95 bitcoin.conf"
diff --git a/community/bitcoin/bitcoin.conf b/community/bitcoin/bitcoin.conf
new file mode 100644
index 0000000000..4f070b19ec
--- /dev/null
+++ b/community/bitcoin/bitcoin.conf
@@ -0,0 +1,13 @@
+### Bitcoin configuration for Alpine Linux ####
+# #
+##### data directory is /var/lib/bitcoin ######
+##### & set in /etc/init.d/bitcoin not here ###
+#
+#proxy=127.0.0.1:9050 #use TOR Socks Proxy
+rpcallowip=127.0.0.1
+rpcuser=changeme
+rpcpassword=changeme
+rpcport=changeme
+daemon=1
+#gen=1 #generate bitcoins
+
diff --git a/community/bitcoin/bitcoin.initd b/community/bitcoin/bitcoin.initd
new file mode 100644
index 0000000000..393ea45374
--- /dev/null
+++ b/community/bitcoin/bitcoin.initd
@@ -0,0 +1,38 @@
+#!/sbin/openrc-run
+
+# Bitcoin init.d file for Alpine Linux.
+
+name=bitcoind
+daemon=/usr/bin/$name
+config=/etc/bitcoin.conf
+user=bitcoin
+group=bitcoin
+## supercedes datadir set in $config ##
+datadir=/var/lib/bitcoin
+pidfile=/var/run/bitcoin/$name.pid
+
+depend() {
+ need net
+ after logger firewall
+}
+
+start() {
+ ebegin "Starting ${name}"
+ # enforce permissions
+ checkpath -q -d ${pidfile%/*} -o ${user}:${group}
+ checkpath -q -d ${datadir} -m 0700 -o ${user}:${group}
+ checkpath -q -f ${config} -m 0600 -o ${user}:${group}
+ start-stop-daemon --start --quiet \
+ --pidfile ${pidfile} \
+ --user ${user}:${group} \
+ --exec ${daemon} -- -conf=${config} -datadir=${datadir} -pid=${pidfile}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping ${name}"
+ start-stop-daemon --stop --quiet \
+ --pidfile ${pidfile} \
+ --exec ${daemon}
+ eend $?
+}
diff --git a/community/bitcoin/bitcoin.post-install b/community/bitcoin/bitcoin.post-install
new file mode 100644
index 0000000000..9d2510fb2d
--- /dev/null
+++ b/community/bitcoin/bitcoin.post-install
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+NORMAL="\033[1;0m"
+STRONG="\033[1;1m"
+GREEN="\033[1;32m"
+
+config=$(grep -F 'config=' /etc/init.d/bitcoin |sed 's/config=//')
+
+randgen() {
+ output=$(cat /dev/urandom | tr -dc '0-9a-zA-Z!@#$%^&*_+-' | head -c${1:-$1}) 2>/dev/null
+ echo $output
+}
+
+findRandomTcpPort(){
+ port=$(( 1024 + $(( $RANDOM % $(( 65534 - 1024 )) )) ))
+ while netstat -atn | grep -q :$port; do port=$(expr $port + 1); done; echo $port
+}
+
+GenPasswd(){
+ sed -i "/rpcuser=/ c \rpcuser=USER-"$(randgen 32)"" $config
+ sed -i "/rpcpassword=/ c \rpcpassword=PW-"$(randgen 64)"" $config
+ sed -i "/rpcport=/ c \rpcport="$(findRandomTcpPort)"" $config
+ print_green "Generated random user / password / port in:" " $config\n"
+}
+
+print_green() {
+ local prompt="${STRONG}$1${GREEN}$2${NORMAL}"
+ printf "${prompt}%s"
+}
+
+if grep -F "changeme" $config 1>/dev/null; then
+ GenPasswd
+fi
+
+exit 0
diff --git a/community/bitcoin/bitcoin.pre-install b/community/bitcoin/bitcoin.pre-install
new file mode 100644
index 0000000000..3f83b3810a
--- /dev/null
+++ b/community/bitcoin/bitcoin.pre-install
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S bitcoin 2>/dev/null
+adduser -S -D -H -h /var/lib/bitcoin -s /sbin/nologin -G bitcoin -g bitcoin bitcoin 2>/dev/null
+
+exit 0
diff --git a/community/bitcoin/ssize_t.patch b/community/bitcoin/ssize_t.patch
new file mode 100644
index 0000000000..2c21854ea3
--- /dev/null
+++ b/community/bitcoin/ssize_t.patch
@@ -0,0 +1,12 @@
+diff --git a/src/leveldb/db/db_iter.cc b/src/leveldb/db/db_iter.cc
+index 071a54e..68a18f2 100644
+--- a/src/leveldb/db/db_iter.cc
++++ b/src/leveldb/db/db_iter.cc
+@@ -2,6 +2,7 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file. See the AUTHORS file for names of contributors.
+
++#include <sys/types.h>
+ #include "db/db_iter.h"
+
+ #include "db/filename.h"
diff --git a/community/btrbk/APKBUILD b/community/btrbk/APKBUILD
new file mode 100644
index 0000000000..01d1722346
--- /dev/null
+++ b/community/btrbk/APKBUILD
@@ -0,0 +1,40 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=btrbk
+pkgver=0.23.3
+pkgrel=0
+pkgdesc="Backup tool for btrfs subvolumes with atomic snapshots & incremental transfers"
+url="http://digint.ch/btrbk/"
+arch="noarch"
+license="GPL3"
+depends="perl perl-date-calc btrfs-progs"
+depends_dev=""
+makedepends="$depends_dev"
+subpackages="$pkgname-doc"
+source="http://digint.ch/download/$pkgname/releases/$pkgname-$pkgver.tar.xz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ return 0
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ rm -rf "$pkgdir"/usr/lib || return 1 # systemd scripts
+}
+
+md5sums="66ba390efd0db3e55db4bd12ee7876fb btrbk-0.23.3.tar.xz"
+sha256sums="779636116261e3e0fe64ec986e39be594c04454d87be8005115c8577f62b1725 btrbk-0.23.3.tar.xz"
+sha512sums="d9fc29b8e2a6e191be93c7845c7f1f99ab60fb4ec910d8b60947ef902b7fdaf789bc73a4884bdd6060f1b180cafaacd5fa8f93dc29624dfea8a2890618ce4012 btrbk-0.23.3.tar.xz"
diff --git a/community/entr/APKBUILD b/community/entr/APKBUILD
new file mode 100644
index 0000000000..f8af64df38
--- /dev/null
+++ b/community/entr/APKBUILD
@@ -0,0 +1,43 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=entr
+_srcdir=eradman-$pkgname-220131754e1c
+pkgver=3.3
+pkgrel=0
+pkgdesc="Event Notify Test Runner: Run arbitrary commands when files change"
+url="http://entrproject.org"
+arch="all"
+license="ISC / BSD"
+subpackages="$pkgname-doc"
+source="http://entrproject.org/code/$pkgname-$pkgver.tar.gz
+ remove-strlcpy-compat.h.patch
+ "
+
+_builddir="$srcdir"/$_srcdir
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./configure || return 1
+ CFLAGS="-static" make test || return 1
+}
+
+package() {
+ cd "$_builddir"
+ PREFIX="$pkgdir/usr" make install || return 1
+}
+
+md5sums="769f353934b73e929a0a0fb9fca79c41 entr-3.3.tar.gz
+5ae5aa6f2b8de9747312b32b17c56d0b remove-strlcpy-compat.h.patch"
+sha256sums="701cb7b0a72b6c9ba794ad7cc15b6ebcc2e0c978bb6906c8ae407567a044461f entr-3.3.tar.gz
+2bc42c8c154acf0aaa876b4395c2e0e7b20773e48d50b0c8a15e90ca2e8db472 remove-strlcpy-compat.h.patch"
+sha512sums="aa45bef57fb12d5ddaaebd8de03df33b69a833e4b729ad9fb0844af1c8b7031fc37ca1c81170b20967aa7dbf8854849a7b1f46da6d1d13a49d4d33502269bbca entr-3.3.tar.gz
+9d0f4e06cd5c312788f5ff2efa13f55f78a3491de3ddf64612a6c731072e8514deb1cea48c630194cbda71c58c57e9a6b937172eca58be0b1fb4f0f7a1652e2d remove-strlcpy-compat.h.patch"
diff --git a/community/entr/remove-strlcpy-compat.h.patch b/community/entr/remove-strlcpy-compat.h.patch
new file mode 100644
index 0000000000..ae2d271a1b
--- /dev/null
+++ b/community/entr/remove-strlcpy-compat.h.patch
@@ -0,0 +1,14 @@
+--- eradman-entr-c20e34ec153a/missing/compat.h
++++ eradman-entr-c20e34ec153a/missing/compat.h.new
+@@ -4,11 +4,6 @@
+ #define NOTE_TRUNCATE 0
+ #endif
+
+-#if defined(_LINUX_PORT)
+-#include <sys/types.h>
+-size_t strlcpy(char *to, const char *from, int l);
+-#endif
+-
+ #if defined(_MACOS_PORT)
+ #include <stdio.h>
+ FILE *fmemopen(void *buf, size_t size, const char *mode);
diff --git a/community/ffmpegthumbnailer/APKBUILD b/community/ffmpegthumbnailer/APKBUILD
new file mode 100644
index 0000000000..bf1efd94eb
--- /dev/null
+++ b/community/ffmpegthumbnailer/APKBUILD
@@ -0,0 +1,41 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=ffmpegthumbnailer
+pkgver=2.1.1
+pkgrel=0
+pkgdesc="Lightweight video thumbnailer that can be used by file managers"
+url="https://github.com/dirkvdb/ffmpegthumbnailer"
+arch="all"
+license="GPLv2"
+makedepends="$depends_dev ffmpeg-dev libpng-dev libjpeg-turbo-dev cmake"
+subpackages="$pkgname-dev $pkgname-doc"
+source="$pkgname-$pkgver.tar.bz2::https://github.com/dirkvdb/$pkgname/releases/download/$pkgver/$pkgname-$pkgver.tar.bz2"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DENABLE_GIO=ON -DENABLE_THUMBNAILER=ON . || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ if [ -d "$pkgdir/usr/lib64" ]; then
+ mv "$pkgdir"/usr/lib64 "$pkgdir"/usr/lib
+ fi
+}
+
+md5sums="753c8ba68f66ae085ef178d7c5966cae ffmpegthumbnailer-2.1.1.tar.bz2"
+sha256sums="51bca83c0cfae283e8e2f323aa49e0c6ced206c5a068332b4be974d3905cf055 ffmpegthumbnailer-2.1.1.tar.bz2"
+sha512sums="2ac9e8b904e73086d0bf0f586a971bf3807d41bd394505164461731099c17570b45d71374e2bbf6fa2d0d7d47011564e06230b360255535120a9969fde3888a4 ffmpegthumbnailer-2.1.1.tar.bz2"
diff --git a/community/firejail/APKBUILD b/community/firejail/APKBUILD
new file mode 100644
index 0000000000..1820e2a51c
--- /dev/null
+++ b/community/firejail/APKBUILD
@@ -0,0 +1,56 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=firejail
+pkgver=0.9.42_rc1
+_pkgver=${pkgver//_/-}
+pkgrel=1
+pkgdesc="Linux namespaces and seccomp-bpf sandbox"
+url="https://firejail.wordpress.com/"
+arch="all !armhf"
+license="GPL2"
+depends="bash"
+depends_dev=""
+makedepends="$depends_dev linux-headers"
+install=""
+options="suid"
+subpackages="$pkgname-doc $pkgname-bash-completion:bashcomp"
+source="$pkgname-$pkgver.tar.gz::https://github.com/netblue30/$pkgname/archive/$_pkgver.tar.gz"
+
+builddir="$srcdir"/$pkgname-$_pkgver
+prepare() {
+ default_prepare || return 1
+ find "$builddir" -name Makefile.in -exec sed -i -r \
+ -e '/CFLAGS/s: (-O2|-ggdb) : :g' \
+ -e '1iCC=@CC@' {} + || die
+}
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ || return 1
+ make || return 1
+}
+
+bashcomp() {
+ depends=""
+ pkgdesc="Bash completions for $pkgname"
+ install_if="$pkgname=$pkgver-r$pkgrel bash"
+ arch="noarch"
+ mkdir -p "$subpkgdir"/usr
+ mv "$pkgdir"/usr/share "$subpkgdir"/usr/
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install || return 1
+}
+
+md5sums="34f0c17c302103fce07b75346554a5b8 firejail-0.9.42_rc1.tar.gz"
+sha256sums="66ab1657fba1a593be7b6c8a6df509dc18b48eae67dfa656e65c37607238b742 firejail-0.9.42_rc1.tar.gz"
+sha512sums="e418a67d95c0eb62e291331c4e142c622deba05c78ea7255d643cbf7af89703adc99f35b98af688a686cd35b78d6a79e1bf5067d59871c63c87191d574e88d74 firejail-0.9.42_rc1.tar.gz"
diff --git a/community/firetools/APKBUILD b/community/firetools/APKBUILD
new file mode 100644
index 0000000000..f3e0c71afb
--- /dev/null
+++ b/community/firetools/APKBUILD
@@ -0,0 +1,38 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=firetools
+pkgver=0.9.40.1
+pkgrel=0
+pkgdesc="Firejail sandbox launcher integrated with the system tray"
+url="https://l3net.wordpress.com/projects/firejail/#firetools"
+arch="all !armhf"
+license="GPL2"
+depends="firejail xterm qt5-qtsvg mesa-dri-swrast"
+depends_dev=""
+makedepends="$depends_dev qt5-qtbase-dev qt5-qtsvg-dev"
+install=""
+subpackages="$pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::https://github.com/netblue30/firetools/archive/$pkgver.tar.gz"
+
+builddir="$srcdir"/$pkgname-$pkgver
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --with-qmake=/usr/lib/qt5/bin/qmake \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install || return 1
+}
+
+md5sums="c127fb6433e1a74b2065c311bb2d3726 firetools-0.9.40.1.tar.gz"
+sha256sums="518d4af3a761dff417208e2fc4ce8ae2e897ef03db1096d636e22d606b21edf8 firetools-0.9.40.1.tar.gz"
+sha512sums="8a148ed9608d15074e9d8f4f947f1af6a75a5b03976835c40df7b9f1efb937914e0c08d44b5c71637fba17a189d61707ef613230a11ba29d71f305b8934dfb5b firetools-0.9.40.1.tar.gz"
diff --git a/community/fwsnort/APKBUILD b/community/fwsnort/APKBUILD
new file mode 100644
index 0000000000..90f96e5dd5
--- /dev/null
+++ b/community/fwsnort/APKBUILD
@@ -0,0 +1,76 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=fwsnort
+pkgver=1.6.5
+pkgrel=0
+pkgdesc="Application layer IDS/IPS by translating snort rules into iptables"
+url="http://www.cipherdyne.org/fwsnort/"
+arch="noarch"
+license="GPL"
+depends="perl perl-netaddr-ip perl-iptables-parse iptables ip6tables net-tools"
+depends_dev="wget"
+makedepends="$depends_dev"
+install="$pkgname.post-install"
+source="http://www.cipherdyne.org/$pkgname/download/$pkgname-nodeps-$pkgver.tar.gz
+ fwsnort.up
+ fwsnort.update
+ periodic.daily
+ "
+
+_builddir="$srcdir"/$pkgname-$pkgver
+
+build() {
+ cd "$_builddir"
+
+ #Disable Root requirement to build
+ START=$(sed -n '/die "You need to be root (or equivalent UID 0"/=' ./install.pl)
+ END=$(expr $START + 1)
+ #Busybox sed does not support +1d
+ sed -e ''$START','$END'd' ./install.pl -i
+
+ #prevent chmod 0500 halting the build
+ sed -e "s|0500|0755|" ./install.pl -i
+
+ #change MAN path so package builds
+ sed -e "s|/usr/share/man/man8|$pkgdir&|" ./install.pl -i
+
+ # --install-test-dir sets the INSTALL_ROOT to $src/../test/fwsnort-test
+ # avoids installation attempted into /etc /usr /var
+ # -S disables dependency installs (we also build with the nodep sources)
+ ./install.pl -S --install-test-dir
+}
+
+package() {
+ cd "$_builddir"
+ mkdir -p $pkgdir/etc \
+ $pkgdir/usr \
+ $pkgdir/usr
+ cp -rf $srcdir/fwsnort-$pkgver/test/fwsnort-install/* $pkgdir
+
+ # delete references to $pkgdir made by the installer
+ cp -f $srcdir/fwsnort-$pkgver/fwsnort.conf $pkgdir/etc/fwsnort/fwsnort.conf
+ #fix permissions
+ chmod 0500 $pkgdir/etc/fwsnort $pkgdir/etc/fwsnort/snort_rules
+ chmod 0500 $pkgdir/usr/sbin/fwsnort
+ chmod 0600 $pkgdir/etc/fwsnort/fwsnort.conf
+
+ # install rule / signature update script
+ install -Dm755 "$srcdir"/fwsnort.update "$pkgdir"/usr/bin/update-fwsnort
+ # install iptables rule splicing script
+ install -Dm755 "$srcdir"/fwsnort.up "$pkgdir"/etc/network/if-pre-up.d/fwsnort
+ # install daily cron
+ install -Dm755 "$srcdir"/periodic.daily "$pkgdir"/etc/periodic/daily/fwsnort
+}
+
+md5sums="a822b8a8eb482400b192acb7ea7ae342 fwsnort-nodeps-1.6.5.tar.gz
+442039bc04d553c7c5f9d3fc4269cc71 fwsnort.up
+ab969dd4b3154f8ce663e51473eda6c7 fwsnort.update
+80bd0a7b0c1392e8a279d95e06120ca4 periodic.daily"
+sha256sums="8a74abb75bd3c38fc00650e3d99aa2c8d657f2017c41c8c9aab5670d2afc5d26 fwsnort-nodeps-1.6.5.tar.gz
+8caf113ff779a02fe97288d545f029111151fac9f342be9b40aa9f80e49dd359 fwsnort.up
+a015a512ba9c7b3de7a8da42b33fd1eace25544b4d8b25c3a5f465c8d765a384 fwsnort.update
+f080f4cb0b8e915a5d3af798b46b13fee0d2258d9c8c9dffafa4ecc0b9e1bbe6 periodic.daily"
+sha512sums="6103bc8a04fbd1207f8bcae81e7d6522a50bb25d3f901561525649d4aeeb7a955f779968058471f2b8a4ab28e8358de429ee51d2f2cea24cc07f8fb02037db78 fwsnort-nodeps-1.6.5.tar.gz
+3c97b5f4bb922086acd62305baae4ba1d91e6e627d063f131f98e08da3f57b607b35558eae2cf292b3997d25f09147039f95123161f8f29c5b97b71c80811e9f fwsnort.up
+2a1e7ca6dc1c4a6e59907175c3483736f0efe1dcd8035dae2b903cd22fe953d29333939ad9e0a6f446480eda55370f4b11a77016932bef73e769b5e5401e92c0 fwsnort.update
+763b459d43319e9b6678a5addd96b3542c629379f9f11095bc158b1ef08b039cd776ceedd6207953ab01000804d7580a3a8223b352b407d3cc6a05c27d96fcb0 periodic.daily"
diff --git a/community/fwsnort/fwsnort.post-install b/community/fwsnort/fwsnort.post-install
new file mode 100644
index 0000000000..b4e80d6c5c
--- /dev/null
+++ b/community/fwsnort/fwsnort.post-install
@@ -0,0 +1,16 @@
+#!/bin/sh
+# fwsnort post install script
+#############################
+
+NORMAL="\033[1;0m"
+STRONG="\033[1;1m"
+GREEN="\033[1;32m"
+
+print_strong() {
+ local prompt="${STRONG}$1 ${GREEN}$2${NORMAL}"
+ printf "${prompt} %s\n"
+}
+
+print_strong "\nFWSNORT installed & daily signature updates configured.\n\nTo update now run:" "\t/usr/bin/update-fwsnort\n"
+exit 0
+
diff --git a/community/fwsnort/fwsnort.up b/community/fwsnort/fwsnort.up
new file mode 100644
index 0000000000..b750f59098
--- /dev/null
+++ b/community/fwsnort/fwsnort.up
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+#splice fwsnort rules into iptables whenever the network comes up
+/var/lib/fwsnort/fwsnort.sh
+
diff --git a/community/fwsnort/fwsnort.update b/community/fwsnort/fwsnort.update
new file mode 100644
index 0000000000..41dc608f6d
--- /dev/null
+++ b/community/fwsnort/fwsnort.update
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# update fwsnort rules / psad signatures
+/usr/sbin/fwsnort --update-rules
+#generate iptables ruleset
+/usr/sbin/fwsnort
+#splice rules into iptables
+/var/lib/fwsnort/fwsnort.sh
+
+if ps aux | grep psad; then
+ psad --sig-update
+ echo "running 'psad -H'"
+ psad -H
+fi
+
diff --git a/community/fwsnort/periodic.daily b/community/fwsnort/periodic.daily
new file mode 100644
index 0000000000..ffc785d82d
--- /dev/null
+++ b/community/fwsnort/periodic.daily
@@ -0,0 +1,5 @@
+#!/bin/sh
+#update FWSNORT Rules & PSAD signatures daily
+/usr/bin/update-fwsnort
+exit 0
+
diff --git a/community/gnome-colors/APKBUILD b/community/gnome-colors/APKBUILD
new file mode 100644
index 0000000000..ba192241ca
--- /dev/null
+++ b/community/gnome-colors/APKBUILD
@@ -0,0 +1,75 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=gnome-colors
+pkgver=5.5.1
+pkgrel=1
+pkgdesc="gnome-colors icon themes meta package (all themes)"
+url="https://code.google.com/p/gnome-colors/"
+arch="noarch"
+license="GPLv2"
+subpackages="$pkgname-common
+ gnome-brave-icon-theme:brave
+ gnome-dust-icon-theme:dust
+ gnome-human-icon-theme:human
+ gnome-illustrious-icon-theme:illustrious
+ gnome-noble-icon-theme:noble
+ gnome-wine-icon-theme:wine
+ gnome-wise-icon-theme:wise
+ "
+depends="$pkgname-common gnome-brave-icon-theme gnome-dust-icon-theme gnome-human-icon-theme
+ gnome-illustrious-icon-theme gnome-noble-icon-theme gnome-wine-icon-theme gnome-wise-icon-theme"
+
+source="https://gnome-colors.googlecode.com/files/gnome-colors-$pkgver.tar.gz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+
+prepare() {
+ mkdir $_builddir
+ ls -1 | egrep -v "$pkgver|.patch" | xargs -I{} mv {} $_builddir/
+}
+
+package() {
+ cd "$_builddir" || return 1
+ find gnome* -name 'xchat*' | while read i; do
+ ln -s "${i##*/}" "${i/xchat/hexchat}" || break
+ done
+ mkdir -p "$pkgdir/$pkgname"
+}
+
+_app() {
+ local app="$1" final_name= color=
+ vmsg="variation of the" cmsg="icons for all"
+
+ case "$app" in
+ brave) color="Blue $vmsg";;
+ colors-common) color="Common $cmsg";;
+ dust) color="Chocolate $vmsg";;
+ human) color="Orange $vmsg";;
+ illustrious) color="Pink $vmsg";;
+ noble) color="Purple $vmsg";;
+ wine) color="Red $vmsg";;
+ wise) color="Green $vmsg";;
+ esac
+
+ pkgdesc="$color GNOME-Colors icon theme"
+ if [ "$app" != "colors-common" ]; then
+ depends="$pkgname-common"
+ fi
+
+ cd "$_builddir"
+ mkdir -p "$subpkgdir/usr/share/icons"
+ mv "gnome-$app" "$subpkgdir/usr/share/icons/" || return 1
+}
+
+brave() { _app brave 'brave*'; }
+common() { _app colors-common 'colors-common*'; }
+dust() { _app dust 'dust*'; }
+human() { _app human 'human*'; }
+illustrious() { _app illustrious 'illustrious*'; }
+noble() { _app noble 'noble*'; }
+wine() { _app wine 'wine*'; }
+wise() { _app wise 'wise*'; }
+
+md5sums="8ec81b556bac351817bd56a1701dbbfb gnome-colors-5.5.1.tar.gz"
+sha256sums="1e91d845a753eb38671e7614a786f852ab858a12983111e780da4a47c9debe58 gnome-colors-5.5.1.tar.gz"
+sha512sums="23d1fb9b96cd4287acc0f540c8a7abed1b9f16d7e2bc952beedc365cfd71a3a0134382a7f4bb1c01c62dc376acb6aaf81332167869ec6e8c036679e89d325ff3 gnome-colors-5.5.1.tar.gz"
diff --git a/community/imapsync/APKBUILD b/community/imapsync/APKBUILD
new file mode 100644
index 0000000000..40b6972a87
--- /dev/null
+++ b/community/imapsync/APKBUILD
@@ -0,0 +1,32 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=imapsync
+pkgver=1.678
+pkgrel=1
+pkgdesc="IMAP synchronisation, sync, copy or migration tool"
+url="http://imapsync.lamiral.info"
+arch="noarch"
+license="custom"
+depends="perl-digest-hmac perl-authen-ntlm perl-io-compress perl-data-dumper \
+ perl-data-uniqid perl-digest-md5 perl-file-copy-recursive perl-io-socket-inet6 \
+ perl-io-socket-ssl perl-io-tee perl-mail-imapclient perl-parse-recdescent \
+ perl-term-readkey perl-test-pod perl-test-tester perl-unicode-string perl-uri-escape"
+depends_dev=""
+makedepends="$depends_dev perl-module-scandeps perl-par-packer"
+subpackages="$pkgname-doc"
+source="https://github.com/$pkgname/$pkgname/archive/$pkgname-$pkgver.tar.gz"
+
+builddir="$srcdir"/$pkgname-$pkgname-$pkgver
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install || return 1
+
+ mkdir -p "$pkgdir"/usr/share/doc/$pkgname
+ install -Dm644 FAQ.d/* "$pkgdir"/usr/share/doc/$pkgname/ || return 1
+
+ install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE || return 1
+}
+
+md5sums="065961c37544635861a068a0596e4e29 imapsync-1.678.tar.gz"
+sha256sums="77cd7b58bc1872bcf6c531ee8f764dda87e0dec3f6ffed752748ff9ae74534b0 imapsync-1.678.tar.gz"
+sha512sums="88dd59bbd1567f76c70aca74d86540f00baa6df0869e7679505e8402138665e0380b942167b1cfe4fb55c5e01402b7820163bfa9d296de67e05248699592b799 imapsync-1.678.tar.gz"
diff --git a/community/inetutils-syslogd/APKBUILD b/community/inetutils-syslogd/APKBUILD
new file mode 100644
index 0000000000..24ac837ad1
--- /dev/null
+++ b/community/inetutils-syslogd/APKBUILD
@@ -0,0 +1,98 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=inetutils-syslogd
+_pkgname=inetutils
+pkgver=1.9.4
+pkgrel=1
+pkgdesc="A small syslogd for logging to multiple files"
+url="http://www.gnu.org/software/inetutils/"
+arch="all"
+license="GPL3"
+depends_dev="readline-dev ncurses-dev"
+makedepends="$depends_dev"
+install="$pkgname.post-install $pkgname.post-deinstall"
+subpackages="$pkgname-doc"
+source="http://ftp.gnu.org/gnu/inetutils/${_pkgname}-${pkgver}.tar.gz
+ $pkgname.initd
+ $pkgname.confd
+ syslog.conf
+ $pkgname.logrotate
+ $pkgname.setup
+ "
+
+_builddir="$srcdir"/$_pkgname-$pkgver
+
+build() {
+ cd "$_builddir"
+
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --libexec=/usr/sbin \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --without-wrap --without-pam \
+ --disable-ftp --disable-ftpd \
+ --disable-telnet --disable-telnetd \
+ --disable-talk --disable-talkd \
+ --disable-rlogin --disable-rlogind \
+ --disable-rsh --disable-rshd \
+ --disable-rexec --disable-rexecd \
+ --disable-rcp --disable-hostname \
+ --disable-tftp --disable-tftpd \
+ --disable-ping --disable-ping6 \
+ --disable-logger --enable-syslogd \
+ --disable-inetd --disable-whois --disable-dnsdomainname \
+ --disable-uucpd --disable-ifconfig --disable-traceroute \
+ || return 1
+ make || return 1
+}
+
+check() {
+ cd "$srcdir/${_pkgname}-${pkgver}"
+ make check
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="${pkgdir}" install || return 1
+ #binary installed to /usr/sbin not bin
+ rm -rf "$pkgdir"/usr/bin \
+ "$pkgdir"/usr/lib/charset.alias \
+ || return 1
+
+ #install init script & config defaults
+ install -m755 -D "$srcdir"/$pkgname.initd \
+ "$pkgdir"/etc/init.d/$pkgname || return 1
+ install -m644 -D "$srcdir"/$pkgname.confd \
+ "$pkgdir"/etc/conf.d/$pkgname || return 1
+ install -m644 -D "$srcdir"/syslog.conf \
+ "$pkgdir"/etc/syslog.conf || return 1
+ install -m644 -D "$srcdir"/inetutils-syslogd.logrotate \
+ "$pkgdir"/etc/logrotate.d/inetutils-syslogd || return 1
+ install -m755 -D "$srcdir"/inetutils-syslogd.setup \
+ "$pkgdir"/sbin/setup-inetutils-syslogd || return 1
+ mkdir -p "$pkgdir/usr/share/apk-tools/$pkgname"
+}
+
+md5sums="04852c26c47cc8c6b825f2b74f191f52 inetutils-1.9.4.tar.gz
+4a5ed84baf026fe2e686b9e915d140e3 inetutils-syslogd.initd
+edf3f502d9f2bf49c5da8cb37a927d06 inetutils-syslogd.confd
+9c9998ff341c48322ffdc8f48fa018cf syslog.conf
+842e971153c19cb328db2cc6e22a7baf inetutils-syslogd.logrotate
+82d3bf51747654410b2dbd4075e940b4 inetutils-syslogd.setup"
+sha256sums="be8f75eff936b8e41b112462db51adf689715658a1b09e0d6b05d11ec92cc616 inetutils-1.9.4.tar.gz
+a0bc678a83103ee412c6c57a5f5e0bc4c66f579f7e839f71aac99d329719c80f inetutils-syslogd.initd
+86105f0a0105f50275f7381b5d7fe603b8d854a0e6753c2f06f6d0c234562948 inetutils-syslogd.confd
+0b3f080466437a068d1627a00a5abdf494fdefa2e17821b993462d0310e60cc3 syslog.conf
+f2afe7dad8cd933fbd213b20f09127096f8798698874b2ead2d47a6509f95f6c inetutils-syslogd.logrotate
+f293c6221c89f6d3eb4a557fe68ca66cc92696c95b48182821aa5aa61f9a2c8f inetutils-syslogd.setup"
+sha512sums="8074eb230c64d8fb0f3a20825b9329e5648b81941bb3441c5ffe2661c428f93fe2bac222d5334e75ef182083124c4bc5d7ebf8090ed667e4ae33b9aaacbc6dcb inetutils-1.9.4.tar.gz
+75d5681d08a391956e0f0510eadb20c3ba74de4026f76ea0a54c3e34bb53655ff6cbe3087c0953343fdef3b05864a4dc7d9d12ed26836f8986859868f0076c79 inetutils-syslogd.initd
+82968692b4fe79706aacaeb1021b343288dc4f1d86925481796dac1f743a8269976ce86bf446cd0c16d246b918e5822e312660b201407eb7031a17cb398c9513 inetutils-syslogd.confd
+d9c61aee1a3f2c7cf7b06dfda08599c08f1f618ba092e60adff11e9cbe5be847544780eaa9e4bb54a70c5e5bc243fed3d6ff8111878f073b41629db4245b135c syslog.conf
+ffe2b1fd6b9d4dc9e378f0c857be318ec86e48aee17ede865656bdf9a5da3d2f3a8ffe788cd62794132839577ab6ce1ce7fe3a964bc21e0f8b698827a9ee5817 inetutils-syslogd.logrotate
+a3c54be2c2154adec3b5d8cf68e43f274eb42ac2e02f3ea39235a11f333d1cc88ea2d0af93daf5095c8de7dfbbc147c53d97bbfce3944f50858ee97907270bf7 inetutils-syslogd.setup"
diff --git a/community/inetutils-syslogd/inetutils-syslogd.confd b/community/inetutils-syslogd/inetutils-syslogd.confd
new file mode 100644
index 0000000000..dfcc1cb855
--- /dev/null
+++ b/community/inetutils-syslogd/inetutils-syslogd.confd
@@ -0,0 +1,9 @@
+#
+# inetutils syslogd defaults
+#
+
+# Internet connections are enabled if forwarding (which is the default).
+# Example option to add a socket for chroot jailed openvpn server
+#SYSLOGD_OPTS="--no-forward -a /etc/openvpn/jail/dev/log"
+
+SYSLOGD_OPTS="--no-forward"
diff --git a/community/inetutils-syslogd/inetutils-syslogd.initd b/community/inetutils-syslogd/inetutils-syslogd.initd
new file mode 100644
index 0000000000..a10caa738d
--- /dev/null
+++ b/community/inetutils-syslogd/inetutils-syslogd.initd
@@ -0,0 +1,36 @@
+#!/sbin/openrc-run
+# This file is part of inetutils-syslogd
+# Created for Alpine Linux by Stuart Cardall <developer@it-offshore.co.uk>
+# Distributed under the terms of the GNU General Public License v2
+
+name=syslogd
+config_file="/etc/syslog.conf"
+pid_file=/var/run/syslog.pid
+command=/usr/sbin/$name
+command_args=${SYSLOGD_OPTS}
+extra_started_commands="reload"
+
+depend() {
+ need clock hostname localmount
+ provide logger
+}
+
+check_config() {
+ [ -f "$config_file" ] || error "$config_file is missing"
+}
+
+start_pre() {
+ check_config || return 1
+}
+
+reload() {
+ if [ ! -f "${pid_file}" ]; then
+ eerror "inetutils-$name is not running"
+ return 1
+ fi
+
+ ebegin "Re-opening intetutils-$name log files"
+ pkill -HUP -f "$command $command_args"
+ eend $?
+}
+
diff --git a/community/inetutils-syslogd/inetutils-syslogd.logrotate b/community/inetutils-syslogd/inetutils-syslogd.logrotate
new file mode 100644
index 0000000000..853c21341c
--- /dev/null
+++ b/community/inetutils-syslogd/inetutils-syslogd.logrotate
@@ -0,0 +1,38 @@
+/var/log/syslog
+{
+ rotate 7
+ daily
+ missingok
+ notifempty
+ copytruncate
+ compress
+ postrotate
+ /etc/init.d/inetutils-syslogd reload &>/dev/null || true
+ endscript
+}
+
+/var/log/mail.info
+/var/log/mail.warn
+/var/log/mail.err
+/var/log/mail.log
+/var/log/daemon.log
+/var/log/kern.log
+/var/log/auth.log
+/var/log/user.log
+/var/log/lpr.log
+/var/log/cron.log
+/var/log/debug
+/var/log/messages
+{
+ rotate 4
+ weekly
+ missingok
+ notifempty
+ copytruncate
+ compress
+ sharedscripts
+ postrotate
+ /etc/init.d/inetutils-syslogd reload &>/dev/null || true
+ endscript
+}
+
diff --git a/community/inetutils-syslogd/inetutils-syslogd.post-deinstall b/community/inetutils-syslogd/inetutils-syslogd.post-deinstall
new file mode 100644
index 0000000000..23ebea52af
--- /dev/null
+++ b/community/inetutils-syslogd/inetutils-syslogd.post-deinstall
@@ -0,0 +1,7 @@
+#!/bin/sh
+echo; rc-update del inetutils-syslogd boot; rc-update add syslog boot
+syslog_state=$(rc-service syslog status)
+inetutils_state=" * status: running: inetutils-syslogd [pid: $(pidof syslogd)]"
+echo "$inetutils_state"
+echo -e "$syslog_state: syslog\n"
+
diff --git a/community/inetutils-syslogd/inetutils-syslogd.post-install b/community/inetutils-syslogd/inetutils-syslogd.post-install
new file mode 100644
index 0000000000..18099c7d9c
--- /dev/null
+++ b/community/inetutils-syslogd/inetutils-syslogd.post-install
@@ -0,0 +1,3 @@
+#!/bin/sh
+echo -e "\nTo configure inetutils-syslogd / deconfigure BusyBox syslog execute:\n\n/sbin/setup-inetutils-syslogd\n"
+
diff --git a/community/inetutils-syslogd/inetutils-syslogd.setup b/community/inetutils-syslogd/inetutils-syslogd.setup
new file mode 100644
index 0000000000..7c82513915
--- /dev/null
+++ b/community/inetutils-syslogd/inetutils-syslogd.setup
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+NORMAL="\033[1;0m"
+STRONG="\033[1;1m"
+RED="\033[1;31m"
+GREEN="\033[1;32m"
+
+print_stop() {
+ local prompt="${STRONG}$1 ${RED}$2${NORMAL}"
+ printf "${prompt} %s"
+}
+
+print_start() {
+ local prompt="${STRONG}$1 ${GREEN}$2${NORMAL}"
+ printf "${prompt} %s"
+}
+
+print_stop "\nWould you like to STOP BusyBox Syslog & remove it from the Boot Runlevel ?" "[ Enter or Y to remove ]:"; read ans
+if [ -z "$ans" ] || [ "$ans" = "y" ] || [ "$ans" = "Y" ]; then
+ echo; rc-update del syslog boot; rc-service syslog stop; rc-service klogd stop
+fi
+
+print_start "\nWould you like to START inetutils-syslogd & add it to the Boot Runlevel ?" "[ Enter or Y to add ]:"; read ans
+if [ -z "$ans" ] || [ "$ans" = "y" ] || [ "$ans" = "Y" ]; then
+ echo; rc-update add inetutils-syslogd boot; rc-service inetutils-syslogd start; rc-service cron restart; echo
+fi
+
+exit 0
diff --git a/community/inetutils-syslogd/syslog.conf b/community/inetutils-syslogd/syslog.conf
new file mode 100644
index 0000000000..fb6b25ef09
--- /dev/null
+++ b/community/inetutils-syslogd/syslog.conf
@@ -0,0 +1,38 @@
+#
+# First some standard log files. Log by facility.
+#
+auth,authpriv.* /var/log/auth.log
+*.*;auth,authpriv.none -/var/log/syslog
+cron.* /var/log/cron.log
+daemon.* -/var/log/daemon.log
+kern.* -/var/log/kern.log
+lpr.* -/var/log/lpr.log
+mail.* -/var/log/mail.log
+user.* -/var/log/user.log
+
+#
+# Logging for the mail system. Split it up so that
+# it is easy to write scripts to parse these files.
+#
+mail.info -/var/log/mail.info
+mail.warn -/var/log/mail.warn
+mail.err /var/log/mail.err
+
+#
+# Logging for INN news system.
+#
+#news.crit /var/log/news/news.crit
+#news.err /var/log/news/news.err
+#news.notice -/var/log/news/news.notice
+
+#
+# Some "catch-all" log files.
+#
+*.=debug;\
+ auth,authpriv.none;\
+ news.none;mail.none -/var/log/debug
+*.=info;*.=notice;*.=warn;\
+ auth,authpriv.none;\
+ cron,daemon.none;\
+ mail,news.none -/var/log/messages
+
diff --git a/community/inotify-tools-inc/APKBUILD b/community/inotify-tools-inc/APKBUILD
new file mode 100644
index 0000000000..73c2fecb45
--- /dev/null
+++ b/community/inotify-tools-inc/APKBUILD
@@ -0,0 +1,58 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname="inotify-tools-inc"
+_realname="${pkgname%*-inc}"
+pkgver=3.14
+pkgrel=1
+pkgdesc="inotify-tools patched to add --include regex"
+url="http://github.com/rvoicilas/inotify-tools"
+arch="all"
+license="GPL2"
+depends="!inotify-tools"
+subpackages="$pkgname-dev $pkgname-doc"
+source="https://github.com/downloads/rvoicilas/$_realname/$_realname-$pkgver.tar.gz
+ add-include-regex.patch
+ "
+
+_builddir="$srcdir"/$_realname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ # post-install message
+ mkdir -p "$pkgdir/usr/share/doc/$pkgname"
+ cat > $pkgdir/usr/share/doc/$pkgname/example.sh <<EOF
+#!/bin/sh
+## watch for a specific file recursively ##
+inotifywait -mr -e modify /path/to/watch --include="(my.file)$" |
+while read path action file; do
+ echo "The file '$file' appeared in directory '$path' via '$action'"
+done
+EOF
+}
+
+md5sums="b43d95a0fa8c45f8bab3aec9672cf30c inotify-tools-3.14.tar.gz
+72f3ffd0d57ddb2b6b38faaa3b751ca8 add-include-regex.patch"
+sha256sums="222bcca8893d7bf8a1ce207fb39ceead5233b5015623d099392e95197676c92f inotify-tools-3.14.tar.gz
+5b193b9b5cbd16d4aca9ce843a8493191cbf825598978a2602180fc28d56ffd7 add-include-regex.patch"
+sha512sums="6074d510e89bba5da0d7c4d86f2562c662868666ba0a7ea5d73e53c010a0050dd1fc01959b22cffdb9b8a35bd1b0b43c04d02d6f19927520f05889e8a9297dfb inotify-tools-3.14.tar.gz
+b858b79dcfb2967d0c8d31ecbc17f4f36064218d2276fdafcdc6c8e51c9db2645fa102f88f1401b78f79a1b2ddbe400ea3e691bf93d084ecb312a170f69bda24 add-include-regex.patch"
diff --git a/community/inotify-tools-inc/add-include-regex.patch b/community/inotify-tools-inc/add-include-regex.patch
new file mode 100644
index 0000000000..31833e0df5
--- /dev/null
+++ b/community/inotify-tools-inc/add-include-regex.patch
@@ -0,0 +1,365 @@
+### adapted from https://github.com/rvoicilas/inotify-tools/pull/28 ###
+diff -urp inotify-tools-3.14/libinotifytools/src/inotifytools/inotifytools.h inotify-tools.new/libinotifytools/src/inotifytools/inotifytools.h
+--- inotify-tools-3.14/libinotifytools/src/inotifytools/inotifytools.h 2010-03-12 13:53:46.000000000 +0000
++++ inotify-tools.new/libinotifytools/src/inotifytools/inotifytools.h 2015-05-10 02:22:22.971561931 +0000
+@@ -28,7 +28,7 @@ int inotifytools_watch_recursively_with_
+ int events,
+ char const ** exclude_list );
+ // [UH]
+-int inotifytools_ignore_events_by_regex( char const *pattern, int flags );
++int inotifytools_ignore_events_by_regex( char const *pattern, int flags, int invert );
+ struct inotify_event * inotifytools_next_event( int timeout );
+ struct inotify_event * inotifytools_next_events( int timeout, int num_events );
+ int inotifytools_error();
+diff -urp inotify-tools-3.14/libinotifytools/src/inotifytools.c inotify-tools.new/libinotifytools/src/inotifytools.c
+--- inotify-tools-3.14/libinotifytools/src/inotifytools.c 2010-03-12 13:53:46.000000000 +0000
++++ inotify-tools.new/libinotifytools/src/inotifytools.c 2015-05-10 02:21:08.839560752 +0000
+@@ -149,6 +149,7 @@ static int error = 0;
+ static int init = 0;
+ static char* timefmt = 0;
+ static regex_t* regex = 0;
++static int invert_regex = 0;
+
+ int isdir( char const * path );
+ void record_stats( struct inotify_event const * event );
+@@ -1103,12 +1104,14 @@ struct inotify_event * inotifytools_next
+ static ssize_t bytes;
+ static jmp_buf jmp;
+ static char match_name[MAX_STRLEN];
++ static int rv;
+
+ #define RETURN(A) {\
+ if (regex) {\
+ inotifytools_snprintf(match_name, MAX_STRLEN, A, "%w%f");\
+- if (0 == regexec(regex, match_name, 0, 0, 0)) {\
+- longjmp(jmp,0);\
++ rv = regexec(regex, match_name, 0, 0, 0); \
++ if ((!invert_regex && 0 == rv) || (invert_regex && 0 != rv)) { \
++ longjmp(jmp,0); \
+ }\
+ }\
+ if ( collect_stats ) {\
+@@ -1999,7 +2002,7 @@ int inotifytools_get_max_user_watches()
+ * events occur. If the regular expression matches, the matched event will be
+ * ignored.
+ */
+-int inotifytools_ignore_events_by_regex( char const *pattern, int flags ) {
++int inotifytools_ignore_events_by_regex( char const *pattern, int flags, int invert ) {
+ if (!pattern) {
+ if (regex) {
+ regfree(regex);
+@@ -2013,7 +2016,10 @@ int inotifytools_ignore_events_by_regex(
+ else { regex = (regex_t *)malloc(sizeof(regex_t)); }
+
+ int ret = regcomp(regex, pattern, flags | REG_NOSUB);
+- if (0 == ret) return 1;
++ if (0 == ret) {
++ invert_regex = invert;
++ return 1;
++ }
+
+ regfree(regex);
+ free(regex);
+
+diff -urp inotify-tools-3.14/src/inotifywait.c inotify-tools.new/src/inotifywait.c
+--- inotify-tools-3.14/src/inotifywait.c 2010-03-12 13:53:46.000000000 +0000
++++ inotify-tools.new/src/inotifywait.c 2015-05-10 16:53:20.384393049 +0000
+@@ -48,7 +48,9 @@ bool parse_opts(
+ char ** fromfile,
+ char ** outfile,
+ char ** regex,
+- char ** iregex
++ char ** iregex,
++ char ** include_regex,
++ char ** include_iregex
+ );
+
+ void print_help();
+@@ -157,16 +159,29 @@ int main(int argc, char ** argv)
+ char * outfile = NULL;
+ char * regex = NULL;
+ char * iregex = NULL;
++ char * include_regex = NULL;
++ char * include_iregex = NULL;
++ bool invert_regex = false;
+ pid_t pid;
+ int fd;
+
+ // Parse commandline options, aborting if something goes wrong
+ if ( !parse_opts(&argc, &argv, &events, &monitor, &quiet, &timeout,
+- &recursive, &csv, &daemon, &syslog, &format, &timefmt,
+- &fromfile, &outfile, &regex, &iregex) ) {
++ &recursive, &csv, &daemon, &syslog, &format, &timefmt,
++ &fromfile, &outfile, &regex, &iregex, &include_regex, &include_iregex) ) {
+ return EXIT_FAILURE;
+ }
+
++ if (include_regex) {
++ regex = include_regex;
++ invert_regex = true;
++ }
++
++ if (include_iregex) {
++ iregex = include_iregex;
++ invert_regex = true;
++ }
++
+ if ( !inotifytools_initialize() ) {
+ fprintf(stderr, "Couldn't initialize inotify. Are you running Linux "
+ "2.6.13 or later, and was the\n"
+@@ -180,11 +195,11 @@ int main(int argc, char ** argv)
+
+ if ( timefmt ) inotifytools_set_printf_timefmt( timefmt );
+ if (
+- (regex && !inotifytools_ignore_events_by_regex(regex, REG_EXTENDED) ) ||
++ (regex && !inotifytools_ignore_events_by_regex(regex, REG_EXTENDED, invert_regex) ) ||
+ (iregex && !inotifytools_ignore_events_by_regex(iregex, REG_EXTENDED|
+- REG_ICASE))
++ REG_ICASE, invert_regex))
+ ) {
+- fprintf(stderr, "Error in `exclude' regular expression.\n");
++ fprintf(stderr, "Error in `exclude' or `include' regular expression.\n");
+ return EXIT_FAILURE;
+ }
+
+@@ -423,18 +438,20 @@ bool parse_opts(
+ char ** fromfile,
+ char ** outfile,
+ char ** regex,
+- char ** iregex
++ char ** iregex,
++ char ** include_regex,
++ char ** include_iregex
+ ) {
+ assert( argc ); assert( argv ); assert( events ); assert( monitor );
+ assert( quiet ); assert( timeout ); assert( csv ); assert( daemon );
+- assert( syslog ); assert( format ); assert( timefmt ); assert( fromfile );
++ assert( syslog ); assert( format ); assert( timefmt ); assert( fromfile );
+ assert( outfile ); assert( regex ); assert( iregex );
+
+ // Short options
+ char * opt_string = "mrhcdsqt:fo:e:";
+
+ // Construct array
+- struct option long_opts[17];
++ struct option long_opts[19];
+
+ // --help
+ long_opts[0].name = "help";
+@@ -520,11 +537,21 @@ bool parse_opts(
+ long_opts[15].has_arg = 1;
+ long_opts[15].flag = NULL;
+ long_opts[15].val = (int)'b';
++ // --include
++ long_opts[16].name = "include";
++ long_opts[16].has_arg = 1;
++ long_opts[16].flag = NULL;
++ long_opts[16].val = (int)'j';
++ // --includei
++ long_opts[17].name = "includei";
++ long_opts[17].has_arg = 1;
++ long_opts[17].flag = NULL;
++ long_opts[17].val = (int)'k';
+ // Empty last element
+- long_opts[16].name = 0;
+- long_opts[16].has_arg = 0;
+- long_opts[16].flag = 0;
+- long_opts[16].val = 0;
++ long_opts[18].name = 0;
++ long_opts[18].has_arg = 0;
++ long_opts[18].flag = 0;
++ long_opts[18].val = 0;
+
+ // Get first option
+ char curr_opt = getopt_long(*argc, *argv, opt_string, long_opts, NULL);
+@@ -604,6 +631,16 @@ bool parse_opts(
+ (*iregex) = optarg;
+ break;
+
++ // --include
++ case 'j':
++ (*include_regex) = optarg;
++ break;
++
++ // --includei
++ case 'k':
++ (*include_iregex) = optarg;
++ break;
++
+ // --fromfile
+ case 'z':
+ if (*fromfile) {
+@@ -671,6 +708,16 @@ bool parse_opts(
+ return false;
+ }
+
++ if ( *include_regex && *include_iregex ) {
++ fprintf(stderr, "--include and --includei cannot both be specified.\n");
++ return false;
++ }
++
++ if ( ( *include_regex || *include_iregex ) && ( *regex || *iregex ) ) {
++ fprintf(stderr, "Cannot use include and exclude options simultaneously.\n");
++ return false;
++ }
++
+ if ( *format && *csv ) {
+ fprintf(stderr, "-c and --format cannot both be specified.\n");
+ return false;
+@@ -715,6 +762,11 @@ void print_help()
+ "\t \textended regular expression <pattern>.\n");
+ printf("\t--excludei <pattern>\n"
+ "\t \tLike --exclude but case insensitive.\n");
++ printf("\t--include <pattern>\n"
++ "\t \tInclude all events on only those files matching\n"
++ "\t \tthe extended regular expression <pattern>.\n");
++ printf("\t--includei <pattern>\n"
++ "\t \tLike --include but case insensitive.\n");
+ printf("\t-m|--monitor \tKeep listening for events forever. Without\n"
+ "\t \tthis option, inotifywait will exit after one\n"
+ "\t \tevent is received.\n");
+diff -urp inotify-tools-3.14/src/inotifywatch.c inotify-tools.new/src/inotifywatch.c
+--- inotify-tools-3.14/src/inotifywatch.c 2010-03-12 13:53:46.000000000 +0000
++++ inotify-tools.new/src/inotifywatch.c 2015-05-10 16:51:40.060391453 +0000
+@@ -43,7 +43,9 @@ bool parse_opts(
+ int * recursive,
+ char ** fromfile,
+ char ** regex,
+- char ** iregex
++ char ** iregex,
++ char ** include_regex,
++ char ** include_iregex
+ );
+
+ void print_help();
+@@ -91,21 +93,34 @@ int main(int argc, char ** argv)
+ done = false;
+ char * regex = NULL;
+ char * iregex = NULL;
++ char * include_regex = NULL;
++ char * include_iregex = NULL;
++ bool invert_regex = false;
+
+ signal( SIGINT, handle_impatient_user );
+
+ // Parse commandline options, aborting if something goes wrong
+ if ( !parse_opts( &argc, &argv, &events, &timeout, &verbose, &zero, &sort,
+- &recursive, &fromfile, &regex, &iregex ) ) {
++ &recursive, &fromfile, &regex, &iregex, &include_regex, &include_iregex ) ) {
+ return EXIT_FAILURE;
+ }
+
++ if (include_regex) {
++ regex = include_regex;
++ invert_regex = true;
++ }
++
++ if (include_iregex) {
++ iregex = include_iregex;
++ invert_regex = true;
++ }
++
+ if (
+- (regex && !inotifytools_ignore_events_by_regex(regex, REG_EXTENDED) ) ||
++ (regex && !inotifytools_ignore_events_by_regex(regex, REG_EXTENDED, invert_regex) ) ||
+ (iregex && !inotifytools_ignore_events_by_regex(iregex, REG_EXTENDED|
+- REG_ICASE))
++ REG_ICASE, invert_regex))
+ ) {
+- fprintf(stderr, "Error in `exclude' regular expression.\n");
++ fprintf(stderr, "Error in `exclude' or `include' regular expression.\n");
+ return EXIT_FAILURE;
+ }
+
+@@ -390,7 +405,9 @@ bool parse_opts(
+ int * recursive,
+ char ** fromfile,
+ char ** regex,
+- char ** iregex
++ char ** iregex,
++ char ** include_regex,
++ char ** include_iregex
+ ) {
+ assert( argc ); assert( argv ); assert( events ); assert( timeout );
+ assert( verbose ); assert( zero ); assert( sort ); assert( recursive );
+@@ -400,7 +417,7 @@ bool parse_opts(
+ char * opt_string = "hra:d:zve:t:";
+
+ // Construct array
+- struct option long_opts[12];
++ struct option long_opts[14];
+
+ // --help
+ long_opts[0].name = "help";
+@@ -460,11 +477,21 @@ bool parse_opts(
+ long_opts[10].has_arg = 1;
+ long_opts[10].flag = NULL;
+ long_opts[10].val = (int)'b';
++ // --include
++ long_opts[11].name = "include";
++ long_opts[11].has_arg = 1;
++ long_opts[11].flag = NULL;
++ long_opts[11].val = (int)'j';
++ // --includei
++ long_opts[12].name = "includei";
++ long_opts[12].has_arg = 1;
++ long_opts[12].flag = NULL;
++ long_opts[12].val = (int)'k';
+ // Empty last element
+- long_opts[11].name = 0;
+- long_opts[11].has_arg = 0;
+- long_opts[11].flag = 0;
+- long_opts[11].val = 0;
++ long_opts[13].name = 0;
++ long_opts[13].has_arg = 0;
++ long_opts[13].flag = 0;
++ long_opts[13].val = 0;
+
+ // Get first option
+ char curr_opt = getopt_long(*argc, *argv, opt_string, long_opts, NULL);
+@@ -506,6 +533,16 @@ bool parse_opts(
+ (*iregex) = optarg;
+ break;
+
++ // --include
++ case 'j':
++ (*include_regex) = optarg;
++ break;
++
++ // --includei
++ case 'k':
++ (*include_iregex) = optarg;
++ break;
++
+ // --fromfile
+ case 'o':
+ if (*fromfile) {
+@@ -625,6 +662,16 @@ bool parse_opts(
+ return false;
+ }
+
++ if ( *include_regex && *include_iregex ) {
++ fprintf(stderr, "--include and --includei cannot both be specified.\n");
++ return false;
++ }
++
++ if ( ( *include_regex || *include_iregex ) && ( *regex || *iregex ) ) {
++ fprintf(stderr, "Cannot use include and exclude options simultaneously.\n");
++ return false;
++ }
++
+ // If ? returned, invalid option
+ return (curr_opt != '?');
+ }
+@@ -647,6 +694,11 @@ void print_help()
+ "\t\texpression <pattern>.\n");
+ printf("\t--excludei <pattern>\n"
+ "\t\tLike --exclude but case insensitive.\n");
++ printf("\t--include <pattern>\n"
++ "\t\tInclude all events only those files matching the extended\n"
++ "\t\tregular expression <pattern>.\n");
++ printf("\t--includei <pattern>\n"
++ "\t\tLike --include but case insensitive.\n");
+ printf("\t-z|--zero\n"
+ "\t\tIn the final table of results, output rows and columns even\n"
+ "\t\tif they consist only of zeros (the default is to not output\n"
diff --git a/community/isync/APKBUILD b/community/isync/APKBUILD
new file mode 100644
index 0000000000..85c71a6cc3
--- /dev/null
+++ b/community/isync/APKBUILD
@@ -0,0 +1,37 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=isync
+pkgver=1.2.1
+pkgrel=0
+pkgdesc="IMAP and MailDir mailbox synchronizer"
+url="http://isync.sourceforge.net"
+arch="all"
+license="GPL2"
+depends=""
+depends_dev=""
+makedepends="$depends_dev openssl-dev cyrus-sasl-dev zlib-dev db-dev"
+install=""
+subpackages="$pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::http://downloads.sourceforge.net/sourceforge/isync/$pkgname-$pkgver.tar.gz"
+
+builddir="$srcdir"/$pkgname-$pkgver
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install || return 1
+}
+
+md5sums="7ba1a07c7b487a3ab5fef54d0071f1dd isync-1.2.1.tar.gz"
+sha256sums="e716de28c9a08e624a035caae3902fcf3b511553be5d61517a133e03aa3532ae isync-1.2.1.tar.gz"
+sha512sums="706379e602cdcef3a1ca7eaf2301cfea15b9bbb5ee46c8f598308ad68a48725c6a4d13a2e73cc4633efec34fda1dbcb89bdd0e4c2e06993fa24db69cce9ff50b isync-1.2.1.tar.gz"
diff --git a/community/junit/APKBUILD b/community/junit/APKBUILD
new file mode 100644
index 0000000000..8a8bdb946f
--- /dev/null
+++ b/community/junit/APKBUILD
@@ -0,0 +1,30 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=junit
+pkgver=4.12
+pkgrel=0
+pkgdesc="A programmer-oriented testing framework for Java"
+url="http://junit.org/"
+arch="noarch"
+license="Eclipse 1.0"
+depends=""
+source="http://search.maven.org/remotecontent?filepath=$pkgname/$pkgname/$pkgver/$pkgname-$pkgver.jar"
+
+_builddir="$srcdir"
+
+build() {
+ cd "$_builddir"
+ return 0
+}
+
+package() {
+ cd "$_builddir"
+ install -dm755 ${pkgdir}/usr/share/java || return 1
+ install -m644 "$pkgname-$pkgver.jar" ${pkgdir}/usr/share/java || return 1
+ cd ${pkgdir}/usr/share/java || return 1
+ ln -s "$pkgname-$pkgver.jar" "$pkgname.jar"
+}
+
+md5sums="5b38c40c97fbd0adee29f91e60405584 junit-4.12.jar"
+sha256sums="59721f0805e223d84b90677887d9ff567dc534d7c502ca903c0c2b17f05c116a junit-4.12.jar"
+sha512sums="5974670c3d178a12da5929ba5dd9b4f5ff461bdc1b92618c2c36d53e88650df7adbf3c1684017bb082b477cb8f40f15dcf7526f06f06183f93118ba9ebeaccce junit-4.12.jar"
diff --git a/community/ktsuss/APKBUILD b/community/ktsuss/APKBUILD
new file mode 100644
index 0000000000..5aae9e13b1
--- /dev/null
+++ b/community/ktsuss/APKBUILD
@@ -0,0 +1,43 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=ktsuss
+pkgver=2.1
+pkgrel=0
+pkgdesc="Graphical version of su written in C and GTK+ (gksu alternative)"
+url="https://github.com/nomius/ktsuss"
+arch="all"
+license="BSD"
+depends=""
+depends_dev=""
+makedepends="$depends_dev gtk+2.0-dev bash libtool m4 autoconf automake"
+install=""
+subpackages="$pkgname-doc"
+source="${pkgname}-${pkgver}.tar.gz::https://github.com/nomius/$pkgname/archive/$pkgver.tar.gz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./autogen.sh
+ ./configure --prefix=/usr
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="${pkgdir}" install
+ install -D -m644 COPYING "${pkgdir}/usr/share/doc/${pkgname}/COPYING"
+}
+
+md5sums="812ef25c189af1998b66a5403a12fff9 ktsuss-2.1.tar.gz"
+sha256sums="f65f5083e61abc12f5b546ef43efdc8ef55cd8c7fbee27cedc0f42ff329b34ac ktsuss-2.1.tar.gz"
+sha512sums="980c184947ebac91f936cad9cd74050e42e57da39f13cca3b9ec0ec44a16265243a1e6f570a2027435234084c1e15ce28b3dc6389d7831237c762b1aafb99507 ktsuss-2.1.tar.gz"
diff --git a/community/letsencrypt-nosudo/APKBUILD b/community/letsencrypt-nosudo/APKBUILD
new file mode 100644
index 0000000000..a602cf03bc
--- /dev/null
+++ b/community/letsencrypt-nosudo/APKBUILD
@@ -0,0 +1,32 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=letsencrypt-nosudo
+pkgver=0.0.1
+pkgrel=0
+pkgdesc="Free HTTPS certificates without having to trust the letsencrypt cli with sudo/root"
+url="https://github.com/diafygi/letsencrypt-nosudo"
+arch="noarch"
+license="GPL3"
+depends="python"
+depends_dev=""
+makedepends="$depends_dev"
+subpackages="$pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::https://github.com/itoffshore/$pkgname/archive/$pkgver.tar.gz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+
+build() {
+ return 0
+}
+
+package() {
+ cd "$_builddir"
+ mkdir -p "$pkgdir"/usr/bin
+ mkdir -p "$pkgdir"/usr/share/doc/$pkgname
+ install -Dm755 *.py "$pkgdir"/usr/bin/ || return 1
+ install -Dm644 README.md "$pkgdir"/usr/share/doc/$pkgname/ || return 1
+}
+
+md5sums="c95fde63fe3d357ebf54ace79b412d2c letsencrypt-nosudo-0.0.1.tar.gz"
+sha256sums="19f8a5b316c06afd258b101eaad7e28dd2ddf1b1809d5559c683f7412247c690 letsencrypt-nosudo-0.0.1.tar.gz"
+sha512sums="1d496a2dc74892f2f359562961547aad71c940fc372e2895d618cdf2a7b44b116ae039608e3589de74658ec9140ffbe1fcb51728805d215a4a6aa0c053c21672 letsencrypt-nosudo-0.0.1.tar.gz"
diff --git a/community/libmbim/APKBUILD b/community/libmbim/APKBUILD
new file mode 100644
index 0000000000..313c0c6201
--- /dev/null
+++ b/community/libmbim/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=libmbim
+pkgver=1.12.4
+pkgrel=0
+pkgdesc="MBIM modem protocol helper library"
+url="http://www.freedesktop.org/wiki/Software/libmbim"
+arch="all"
+license="GPL2"
+makedepends="$depends_dev gtk-doc python glib-dev py-gobject libgudev-dev"
+subpackages="$pkgname-dev $pkgname-doc"
+source="http://www.freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+
+build() {
+ cd "$_builddir"
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --disable-static \
+ || return 1
+ make || return 1
+ make check || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+md5sums="4561bc490fcd439aa805c1692b25cb61 libmbim-1.12.4.tar.xz"
+sha256sums="7bd9af154e88ee1cccaf2fedd05e0f5cb82e3359ab6ad2a75cfec98bf57f973a libmbim-1.12.4.tar.xz"
+sha512sums="74b0290eba3c83c13d1a8a07c1eaa979eae79cfadccd1b7acef0729c9d4c90e721dee9503a7cf69dd9c13a11c4a876716000cf78c22017d7e2d4e2b7906a3fbf libmbim-1.12.4.tar.xz"
diff --git a/community/libndp/APKBUILD b/community/libndp/APKBUILD
new file mode 100644
index 0000000000..556ffb47ad
--- /dev/null
+++ b/community/libndp/APKBUILD
@@ -0,0 +1,55 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=libndp
+pkgver=1.4
+pkgrel=0
+pkgdesc="Library for IPv6 Neighbor Discovery Protocol"
+url="http://libndp.org"
+arch="all"
+license="GPL2.1"
+depends=""
+depends_dev=""
+makedepends="$depends_dev"
+install=""
+subpackages="$pkgname-dev $pkgname-doc"
+source="http://libndp.org/files/$pkgname-$pkgver.tar.gz
+ fix-fd_set.patch
+ "
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --disable-static \
+ --libexecdir=/usr/lib \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+}
+
+md5sums="52c708d4b8729ae6e3781b3737a85e16 libndp-1.4.tar.gz
+7b1e885680e9677de2f25707850db7dd fix-fd_set.patch"
+sha256sums="3a0be247ec024bd72fe5b40ea9491519c4023c7faf078311196fab817b2fd55f libndp-1.4.tar.gz
+401a6d2601790f136e9c7b51b49003c3994df93136c6acdb289ce377d7068942 fix-fd_set.patch"
+sha512sums="a84d4d6672bf83bcf865eef8986e7bbcc49587686c5085a5ce5f346791223ede0e60db3b990055afc4f0005182aa1b5546c459306d2955f95d00ffb68bd58766 libndp-1.4.tar.gz
+291503b1a9b21ae3e75d0048fadaa0bace989c6091ddb7238ed7920d4daa968bbd66608432de341fa2cde33d440dcd1b679bc590c7b8d91a68363f5469abc92b fix-fd_set.patch"
diff --git a/community/libndp/fix-fd_set.patch b/community/libndp/fix-fd_set.patch
new file mode 100644
index 0000000000..7797418c1a
--- /dev/null
+++ b/community/libndp/fix-fd_set.patch
@@ -0,0 +1,10 @@
+--- libndp-1.4/utils/ndptool.c
++++ libndp-1.4/utils/ndptool.c.new
+@@ -22,6 +22,7 @@
+ #include <unistd.h>
+ #include <string.h>
+ #include <signal.h>
++#include <sys/select.h>
+ #include <sys/signalfd.h>
+ #include <getopt.h>
+ #include <net/if.h>
diff --git a/community/libqmi/APKBUILD b/community/libqmi/APKBUILD
new file mode 100644
index 0000000000..110b299316
--- /dev/null
+++ b/community/libqmi/APKBUILD
@@ -0,0 +1,48 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=libqmi
+pkgver=1.12.6
+pkgrel=0
+pkgdesc="QMI modem protocol helper library"
+url="http://www.freedesktop.org/wiki/Software/libqmi"
+arch="all"
+license="GPL2"
+depends=""
+depends_dev="glib-dev"
+makedepends="$depends_dev gtk-doc python"
+install=""
+subpackages="$pkgname-dev $pkgname-doc"
+source="http://www.freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --disable-static \
+ --enable-more-warnings=yes \
+ || return 1
+ make || return 1
+ make check || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+md5sums="24c9eb300662ba6cff0152de89bd9ec0 libqmi-1.12.6.tar.xz"
+sha256sums="0857bffece4e8ddfa7f721dd9ca63b4c78de345ac9ae2faebf04062cacba3780 libqmi-1.12.6.tar.xz"
+sha512sums="7001f61dbe2be431867a504dbfc634ed5e7c3f3b1740aef7833fb8163d1a6bdffb57793f09062f49c0b8eeff5a011a2a057a938d618f3547ff5942021b3e8a9d libqmi-1.12.6.tar.xz"
diff --git a/community/libteam/APKBUILD b/community/libteam/APKBUILD
new file mode 100644
index 0000000000..1fe5441751
--- /dev/null
+++ b/community/libteam/APKBUILD
@@ -0,0 +1,70 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=libteam
+pkgver=1.23
+pkgrel=0
+pkgdesc="Library for controlling team network device"
+url="http://libteam.org"
+arch="all"
+license="LGPL2.1"
+depends_dev=""
+makedepends="$depends_dev autoconf automake libtool libnl3-dev libdaemon-dev jansson-dev dbus-dev
+ linux-headers bsd-compat-headers doxygen swig python-dev python3-dev"
+subpackages="$pkgname-dev $pkgname-doc py-$pkgname:py"
+source="$pkgname-$pkgver.tar.gz::https://github.com/jpirko/$pkgname/archive/v$pkgver.tar.gz
+ fix-fd_set.patch
+ memcpy-memset-implicit-declaration.patch
+ "
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./autogen.sh
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --mandir=/usr/share/man \
+ || return 1
+ make || return 1
+}
+
+py() {
+ pkgdesc="Python 2/3 Bindings for libteam"
+ mkdir -p "$subpkgdir"
+ cd "$_builddir"
+ cp -ar binding/python binding/python3 || return 1
+ cd binding/python
+ python ./setup.py build || return 1
+ cd ../python3
+ python3 ./setup.py build || return 1
+ cd binding/python
+ python ./setup.py install --root "$subpkgdir" -O1 || return 1
+ cd ../python3
+ python3 ./setup.py install --root "$subpkgdir" -O1 || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+}
+
+md5sums="f80451570e68a85983de41b0d6dcdd49 libteam-1.23.tar.gz
+ea78f0a9b84eb87747ddfbcfa582a122 fix-fd_set.patch
+fb6662bced494fd24a107e3f7f7dc5e8 memcpy-memset-implicit-declaration.patch"
+sha256sums="b9ed23da5c1a9e6bdd77aee345cce3898312fddaeeb5754dfe29a58610802a78 libteam-1.23.tar.gz
+43bff56cfd3d293ecae58b3a77e55e7a740ddcf188d6516097fbd93b13a82ac8 fix-fd_set.patch
+a2982cbd9bce4367d1a6e20bfedcc24cab452538e2e0ec1af0d8a3515cf21077 memcpy-memset-implicit-declaration.patch"
+sha512sums="f78ceca4606b93e75fafdd97aa3cc44153fc42d31209f216c3da9c71abf38a2e4a690c71b8631ae09e02d7285d6bbd8292983fdc69eb921b0537a75558bc89f5 libteam-1.23.tar.gz
+83f8dd77cfed0f815bc0cb2aa4af25883a02567dbb35b59016d7f3a30f162e63155996d21216424f0ea4efa8e92f8f9526a018a892533c3c7dd7c7ba12b46a44 fix-fd_set.patch
+1279c164960b6215e9bb9f3ee161ef9ac6a38b8066d4a1031996b8067031b9b19404681ebecf3492a26b1215ec2eaaddecae3370ec25e2593dc3ca7dc5f8ead7 memcpy-memset-implicit-declaration.patch"
diff --git a/community/libteam/fix-fd_set.patch b/community/libteam/fix-fd_set.patch
new file mode 100644
index 0000000000..b019ff321b
--- /dev/null
+++ b/community/libteam/fix-fd_set.patch
@@ -0,0 +1,10 @@
+--- libteam-1.17/utils/teamnl.c
++++ libteam-1.17/utils/teamnl.c.new
+@@ -23,6 +23,7 @@
+ #include <string.h>
+ #include <getopt.h>
+ #include <errno.h>
++#include <sys/select.h>
+ #include <sys/signalfd.h>
+ #include <signal.h>
+ #include <unistd.h>
diff --git a/community/libteam/memcpy-memset-implicit-declaration.patch b/community/libteam/memcpy-memset-implicit-declaration.patch
new file mode 100644
index 0000000000..84b1a99b8e
--- /dev/null
+++ b/community/libteam/memcpy-memset-implicit-declaration.patch
@@ -0,0 +1,10 @@
+--- libteam-1.17/teamd/teamd_phys_port_check.c
++++ libteam-1.17/teamd/teamd_phys_port_check.c.new
+@@ -17,6 +17,7 @@
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
++#include <string.h>
+ #include <stdio.h>
+ #include <errno.h>
+ #include <sys/types.h>
diff --git a/community/mini-sendmail/APKBUILD b/community/mini-sendmail/APKBUILD
new file mode 100644
index 0000000000..4d05ad3860
--- /dev/null
+++ b/community/mini-sendmail/APKBUILD
@@ -0,0 +1,64 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=mini-sendmail
+_realname=mini_sendmail
+pkgver=1.3.9
+pkgrel=0
+pkgdesc="Accept mail inside a chroot + wrapper for /bin/sh"
+url="http://acme.com/software/mini_sendmail/"
+arch="all"
+license="custom"
+depends=""
+depends_dev=""
+makedepends="$depends_dev"
+subpackages="$pkgname-doc"
+source="http://www.acme.com/software/$_realname/$_realname-$pkgver.tar.gz
+ README.alpine
+ LICENSE
+ sh.c
+ "
+
+_builddir="$srcdir"/$_realname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ sed -i "s|^BINDIR.*|BINDIR = $pkgdir/var/lib/mini-sendmail|" Makefile
+ sed -i "s|^MANDIR.*|MANDIR = $pkgdir/usr/share/man|" Makefile
+ sed -i 's|cp mini_sendmail.8.*|cp mini_sendmail.8 $(MANDIR)/man8/|' Makefile
+ make || return 1
+ cp "$srcdir"/sh.c ./
+ gcc sh.c -o sh -static || return 1
+}
+
+package() {
+ cd "$_builddir"
+ mkdir -p "$pkgdir"/var/lib/mini-sendmail
+ mkdir -p "$pkgdir"/usr/share/man/man8
+ mkdir -p "$pkgdir"/usr/share/doc/mini-sendmail
+ make DESTDIR="$pkgdir" install || return 1
+ install -Dm755 sh "$pkgdir"/var/lib/mini-sendmail/
+ install -Dm644 "$srcdir"/README.alpine "$pkgdir"/usr/share/doc/mini-sendmail/
+ install -Dm644 "$srcdir"/LICENSE "$pkgdir"/usr/share/doc/mini-sendmail/
+}
+
+md5sums="0769b6d3ba64fa77a52a90c8866fc4ed mini_sendmail-1.3.9.tar.gz
+de62b0348231c4f3863876f4611f82f8 README.alpine
+a51bbd8a9bcc7391e4db256b6bfb581b LICENSE
+4d751980f33365c5a6520725ab67686e sh.c"
+sha256sums="2e2741ade434808b2b95c7df7b2016a4a7e629c3d6c87468a7f58fb183a1967b mini_sendmail-1.3.9.tar.gz
+be609714548a5b5e33bef3d6e231eec978050f17b0c4f57793025f505b3ff7c9 README.alpine
+65c82388e07b7fc2427c870d52db6e2f6dc81aba58cd2bee005544db6b151376 LICENSE
+d24df6d8ee3b335e6be3a0e78b3110e35ffd3e523e50e0272603ec44c08176b0 sh.c"
+sha512sums="b28c39d94b77acc27a8c9e99583904b43815936b2bf7e27b996685784ff1bc9882bdfc57822ddf62d3198f38ec3df0b766289115cb4e6c23abee93884d2d6bb9 mini_sendmail-1.3.9.tar.gz
+bc6a389f20834956e86edbf033cd6b7a3b7df4a9c1a101a751179c4af444ca08a4cb0bb07dc3a01a3d72908f45059921db336814d9ac9f8eee61d61ce1b2e62f README.alpine
+315b63e597561d911541975160ef5b6158fa5421a638efb06bf5e7af72069484a057c332d590b9e8e72383b67e25f7393a81666f8b914d0c649f1572cf330077 LICENSE
+7356bfb52c46ac79797fea620f7e39c4141c066006e1b72fbf247ea36268a8c89a04120c508c431e0ad152eec9891b2766e2782046e8ea370a1f8ea6699fa0ff sh.c"
diff --git a/community/mini-sendmail/LICENSE b/community/mini-sendmail/LICENSE
new file mode 100644
index 0000000000..47bb71d8d7
--- /dev/null
+++ b/community/mini-sendmail/LICENSE
@@ -0,0 +1,25 @@
+mini_sendmail - accept email on behalf of real sendmail
+
+Copyright © 1999,2015 by Jef Poskanzer <jef@mail.acme.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
diff --git a/community/mini-sendmail/README.alpine b/community/mini-sendmail/README.alpine
new file mode 100644
index 0000000000..ce44325167
--- /dev/null
+++ b/community/mini-sendmail/README.alpine
@@ -0,0 +1,5 @@
+PHP launches sendmail via system(), which in turn uses “/bin/sh -c” internally.
+/var/lib/mini-sendmail/sh is a wrapper that supports being called with “-c command”
+to launch sendmail.
+
+https://knzl.de/setting-up-a-chroot-for-php/
diff --git a/community/mini-sendmail/sh.c b/community/mini-sendmail/sh.c
new file mode 100644
index 0000000000..7feea6d7d1
--- /dev/null
+++ b/community/mini-sendmail/sh.c
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define MAXARG 64
+
+int main( int argc, char* const argv[] ) {
+ char* args[ MAXARG ] = {};
+
+ if( argc < 3 || strcmp( argv[1], "-c" ) != 0 ) {
+ fprintf( stderr, "Usage: %s -c <cmd>\n", argv[0] );
+ return 1;
+ }
+
+ {
+ char* token;
+ int i = 0;
+ char* argStr = strdup( argv[2] );
+ while( ( token = strsep( &argStr, " " ) ) != NULL ) {
+ if( token && strlen( token ) )
+ args[ i++ ] = token;
+ if( i >= MAXARG )
+ return 2;
+ }
+ }
+
+ return execvp( args[0], args );
+}
+
diff --git a/community/modemmanager/APKBUILD b/community/modemmanager/APKBUILD
new file mode 100644
index 0000000000..94cea74916
--- /dev/null
+++ b/community/modemmanager/APKBUILD
@@ -0,0 +1,93 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=modemmanager
+pkgver=1.4.14
+pkgrel=0
+pkgdesc="ModemManager library"
+url="http://www.freedesktop.org/wiki/Software/ModemManager"
+arch="all"
+license="GPL2, LGPL2.1"
+depends_dev=""
+makedepends="$depends_dev gobject-introspection-dev gtk-doc intltool vala
+ libgudev-dev polkit-dev libmbim-dev libqmi-dev linux-headers"
+subpackages="$pkgname-dev $pkgname-lang $pkgname-doc libmm-glib:libmm libmm-glib-dev:libmmdev"
+source="http://www.freedesktop.org/software/ModemManager/ModemManager-$pkgver.tar.xz
+ no-XCASE.patch
+ $pkgname.rules
+ "
+
+_builddir="$srcdir"/ModemManager-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --with-polkit=permissive \
+ --enable-gtk-doc \
+ --disable-static \
+ --enable-more-warnings \
+ --with-newest-qmi-commands \
+ --with-dbus-sys-dir=/etc/dbus-1 \
+ --enable-vala=yes \
+ || return 1
+ # https://bugzilla.gnome.org/show_bug.cgi?id=655517
+ sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+ make || return 1
+}
+
+libmm() {
+ cd "$_builddir"
+ mkdir -p "$subpkgdir"
+ make DESTDIR="$subpkgdir" -C libmm-glib install || return 1
+ make DESTDIR="$subpkgdir" -C vapi install || return 1
+}
+
+libmmdev() {
+ mkdir -p "$subpkgdir/usr/lib/pkgconfig"
+ mv "${subpkgdir%*-dev}/usr/include" "$subpkgdir/usr/"
+ mv "${subpkgdir%*-dev}/usr/share" "$subpkgdir/usr/"
+ mv "$pkgdir-dev"/usr/lib/pkgconfig/mm-glib.pc "$subpkgdir"/usr/lib/pkgconfig/
+ rmdir "$pkgdir-dev"/usr/include/libmm-glib # in libmm-glib-dev
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ make DESTDIR="$pkgdir" -C libmm-glib uninstall || return 1
+ make DESTDIR="$pkgdir" -C vapi uninstall || return 1
+ rmdir "$pkgdir"/usr/lib/girepository-1.0 # in libmm-glib
+ rm -rf "$pkgdir"/usr/share/dbus-1/system-services #systemd-service
+ mkdir -p "$pkgdir/usr/share/polkit-1/rules.d"
+ install -m644 -D "$srcdir/$pkgname.rules" \
+ "$pkgdir/usr/share/polkit-1/rules.d/01-org.freedesktop.ModemManager.rules" || return 1
+ # post-install message
+ mkdir -p "$pkgdir/usr/share/doc/$pkgname"
+ cat > $pkgdir/usr/share/doc/$pkgname/README.alpine <<EOF
+If your USB modem shows up as a Flash drive when you plug it in:
+
+install 'usb-modeswitch' to automatically switch to USB modem mode whenever you plug it in.
+To control your modem without the root password: add your user account to the 'plugdev' group.
+EOF
+}
+
+md5sums="cabb72e7c2ddf6af96eca2c9f3d168a3 ModemManager-1.4.14.tar.xz
+63288189ea454e9712dc26d76d75277d no-XCASE.patch
+735e155a785554349906c09dd36d3866 modemmanager.rules"
+sha256sums="abe6cdd515a774bcba3afdcdb1e504569801e79282ccdf26099f33cbb8731ba2 ModemManager-1.4.14.tar.xz
+5e5b87b580faf14e4c56ccc7f9f189522742a64ab365b26751dcc86e68dedb87 no-XCASE.patch
+577807e59b1e95757a4d94922c66f7f36487922c5092a6c148e7db6a4dc6afe8 modemmanager.rules"
+sha512sums="2fb5517cd3fbd98cf4048cec326fabf18fb26d88b75e56208d1ed64d70d72d6e826ef30391c86fbcfe4d69661194bcfbb55d545db10ebe8baf8ef16a3c580446 ModemManager-1.4.14.tar.xz
+5c537e4a86212339d0c41ae3e1055513051a0d6e51bdf2547a38054fbe802feeac2ff46c863ab69423a6693ac33ebacec7a771d4b270aeb5fe6e6bb601361f23 no-XCASE.patch
+3c76ee577334e25c836857f8e7fef6a249cdd9fcd8f889cb64d9c1667bc6a95c087267a153bddd1a13256c59f8cd578ccb448e6b9cb54b73bb74acb8a0ca1e3f modemmanager.rules"
diff --git a/community/modemmanager/modemmanager.rules b/community/modemmanager/modemmanager.rules
new file mode 100644
index 0000000000..09e586e642
--- /dev/null
+++ b/community/modemmanager/modemmanager.rules
@@ -0,0 +1,8 @@
+// Let users in plugdev group modify ModemManager
+polkit.addRule(function(action, subject) {
+ if (/^org\.freedesktop\.ModemManager1\.(Device\.Control|Contacts|Messaging|Location)$/.test(action.id) &&
+ subject.isInGroup("plugdev") && subject.active) {
+ return "yes";
+ }
+});
+
diff --git a/community/modemmanager/no-XCASE.patch b/community/modemmanager/no-XCASE.patch
new file mode 100644
index 0000000000..1de41f753d
--- /dev/null
+++ b/community/modemmanager/no-XCASE.patch
@@ -0,0 +1,35 @@
+## http://man7.org/linux/man-pages/man3/termios.3.html
+## XCASE (not in POSIX; not supported under Linux)
+--- ModemManager-1.4.6/libqcdm/src/com.c
++++ ModemManager-1.4.6.new/libqcdm/src/com.c
+@@ -39,7 +39,7 @@
+ stbuf.c_iflag &= ~(HUPCL | IUTF8 | IUCLC | ISTRIP | IXON | IXOFF | IXANY | ICRNL);
+ stbuf.c_oflag &= ~(OPOST | OCRNL | ONLCR | OLCUC | ONLRET);
+ stbuf.c_lflag &= ~(ICANON | ISIG | IEXTEN | ECHO | ECHOE | ECHOK | ECHONL);
+- stbuf.c_lflag &= ~(NOFLSH | XCASE | TOSTOP | ECHOPRT | ECHOCTL | ECHOKE);
++ stbuf.c_lflag &= ~(NOFLSH | TOSTOP | ECHOPRT | ECHOCTL | ECHOKE);
+ stbuf.c_cc[VMIN] = 1;
+ stbuf.c_cc[VTIME] = 0;
+ stbuf.c_cc[VEOF] = 1;
+--- ModemManager-1.4.6/libwmc/src/com.c
++++ ModemManager-1.4.6.new/libwmc/src/com.c
+@@ -39,7 +39,7 @@
+ stbuf.c_iflag &= ~(HUPCL | IUTF8 | IUCLC | ISTRIP | IXON | IXOFF | IXANY | ICRNL);
+ stbuf.c_oflag &= ~(OPOST | OCRNL | ONLCR | OLCUC | ONLRET);
+ stbuf.c_lflag &= ~(ICANON | ISIG | IEXTEN | ECHO | ECHOE | ECHOK | ECHONL);
+- stbuf.c_lflag &= ~(NOFLSH | XCASE | TOSTOP | ECHOPRT | ECHOCTL | ECHOKE);
++ stbuf.c_lflag &= ~(NOFLSH | TOSTOP | ECHOPRT | ECHOCTL | ECHOKE);
+ stbuf.c_cc[VMIN] = 1;
+ stbuf.c_cc[VTIME] = 0;
+ stbuf.c_cc[VEOF] = 1;
+--- ModemManager-1.4.6/src/mm-port-serial.c
++++ ModemManager-1.4.6.new/src/mm-port-serial.c
+@@ -455,7 +455,7 @@
+
+ stbuf.c_iflag &= ~(IGNCR | ICRNL | IUCLC | INPCK | IXON | IXANY );
+ stbuf.c_oflag &= ~(OPOST | OLCUC | OCRNL | ONLCR | ONLRET);
+- stbuf.c_lflag &= ~(ICANON | XCASE | ECHO | ECHOE | ECHONL);
++ stbuf.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHONL);
+ stbuf.c_lflag &= ~(ECHO | ECHOE);
+ stbuf.c_cc[VMIN] = 1;
+ stbuf.c_cc[VTIME] = 0;
diff --git a/community/namecoin/12-fix-miniupnpc.patch b/community/namecoin/12-fix-miniupnpc.patch
new file mode 100644
index 0000000000..bf226df8a4
--- /dev/null
+++ b/community/namecoin/12-fix-miniupnpc.patch
@@ -0,0 +1,17 @@
+--- namecoin-nc*/src/net.cpp
++++ namecoin-nc*/src/net.cpp
+@@ -19,10 +19,10 @@
+ #endif
+
+ #ifdef USE_UPNP
+-#include <miniwget.h>
+-#include <miniupnpc.h>
+-#include <upnpcommands.h>
+-#include <upnperrors.h>
++#include <miniupnpc/miniwget.h>
++#include <miniupnpc/miniupnpc.h>
++#include <miniupnpc/upnpcommands.h>
++#include <miniupnpc/upnperrors.h>
+ #endif
+
+ using namespace std;
diff --git a/community/namecoin/20-boost-multithread-dynamic.patch b/community/namecoin/20-boost-multithread-dynamic.patch
new file mode 100644
index 0000000000..4adf46f349
--- /dev/null
+++ b/community/namecoin/20-boost-multithread-dynamic.patch
@@ -0,0 +1,33 @@
+--- namecoin-nc*/src/Makefile
++++ namecoin-nc*/src/Makefile
+@@ -9,24 +9,20 @@
+ DEFS += -DBOOST_THREAD_USE_LIB
+
+ INCLUDEPATHS= \
+- -I../libs/openssl-1.0.1i/include \
+- -I../libs/db-4.7.25.NC/build_unix \
+- -I../libs/boost_1_50_0
++ -I/usr/include
+
+ LIBPATHS= \
+- -L../libs/openssl-1.0.1i \
+- -L../libs/db-4.7.25.NC/build_unix \
+- -L../libs/boost_1_50_0/stage/lib
++ -L/usr/lib
+
+ LIBBOOST_SUFFIX=
+
+ LIBS= \
+- -Wl,-Bstatic \
++ -Wl,-Bdynamic \
+ -l boost_system$(LIBBOOST_SUFFIX) \
+ -l boost_filesystem$(LIBBOOST_SUFFIX) \
+- -l boost_program_options$(LIBBOOST_SUFFIX) \
+- -l boost_thread$(LIBBOOST_SUFFIX) \
+- -l boost_chrono$(LIBBOOST_SUFFIX) \
++ -l boost_program_options-mt$(LIBBOOST_SUFFIX) \
++ -l boost_thread-mt$(LIBBOOST_SUFFIX) \
++ -l boost_chrono-mt$(LIBBOOST_SUFFIX) \
+ -l db_cxx \
+ -l ssl \
+ -l crypto
diff --git a/community/namecoin/31-set-default-env-function.patch b/community/namecoin/31-set-default-env-function.patch
new file mode 100644
index 0000000000..9af0446cfd
--- /dev/null
+++ b/community/namecoin/31-set-default-env-function.patch
@@ -0,0 +1,61 @@
+--- namecoin-nc*/src/init.cpp
++++ namecoin-nc*/src/init.cpp
+@@ -99,6 +99,10 @@
+ #ifndef GUI
+ int main(int argc, char* argv[])
+ {
++ #ifndef WIN32
++ SetupEnvironment();
++ #endif
++
+ bool fRet = false;
+ fRet = AppInit(argc, argv);
+
+--- namecoin-nc*/src/qt/bitcoin.cpp
++++ namecoin-nc*/src/qt/bitcoin.cpp
+@@ -124,6 +124,10 @@
+ #ifndef BITCOIN_QT_TEST
+ int main(int argc, char *argv[])
+ {
++ #ifndef WIN32
++ SetupEnvironment();
++ #endif
++
+ // Command-line options take precedence:
+ ParseParameters(argc, argv);
+
+--- namecoin-nc*/src/util.cpp
++++ namecoin-nc*/src/util.cpp
+@@ -1114,3 +1114,20 @@
+ }
+ return true;
+ }
++
++#ifndef WIN32
++void SetupEnvironment()
++{
++ try
++ {
++ #if BOOST_FILESYSTEM_VERSION == 3
++ boost::filesystem::path::codecvt(); // Raises runtime error if current locale is invalid
++ #else // boost filesystem v2
++ std::locale(); // Raises runtime error if current locale is invalid
++ #endif
++ } catch(std::runtime_error &e)
++ {
++ setenv("LC_ALL", "C", 1); // Force C locale
++ }
++}
++#endif
+
+--- namecoin-nc0.3.76/src/util.h
++++ namecoin-nc0.3.76/src.new/util.h
+@@ -211,6 +211,7 @@
+
+ void RandAddSeed();
+ void RandAddSeedPerfmon();
++void SetupEnvironment();
+ int OutputDebugStringF(const char* pszFormat, ...);
+ int my_snprintf(char* buffer, size_t limit, const char* format, ...);
+
+
diff --git a/community/namecoin/APKBUILD b/community/namecoin/APKBUILD
new file mode 100644
index 0000000000..a2d5eff343
--- /dev/null
+++ b/community/namecoin/APKBUILD
@@ -0,0 +1,75 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=namecoin
+pkgver=0.3.80
+pkgrel=1
+pkgdesc="Namecoin is a peer to peer DNS based on bitcoin"
+url="https://github.com/namecoin/namecoin"
+arch=""
+license="GPL"
+depends=""
+depends_dev="openssl-dev db-dev boost-dev miniupnpc-dev glib-dev qt5-qtbase-dev qt5-qttools-dev"
+makedepends="$depends_dev bsd-compat-headers"
+install="$pkgname.post-install $pkgname.pre-install"
+subpackages="$pkgname-qt"
+source="$pkgname-$pkgver.tar.gz::https://github.com/namecoin/namecoin/archive/nc$pkgver.tar.gz
+ 20-boost-multithread-dynamic.patch
+ system-strlcpy.patch
+ $pkgname.initd
+ $pkgname.conf
+ "
+
+_builddir="$srcdir"/namecoin-nc$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"/src
+ # build namecoind
+ make USE_UPNP=1 USE_SSL=1 || return 1
+ cd ..
+ # build namecoin-qt
+ qmake
+ # Fix boost_multi thread linking in the GUI too
+ sed -i 's/-lboost_thread/-lboost_thread-mt/g' ./Makefile
+ sed -i 's/-lboost_program_options/-lboost_program_options-mt/g' ./Makefile
+ sed -i 's/-lboost_chrono/-lboost_chrono-mt/g' ./Makefile
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"/src
+ install -Dm755 namecoind "$pkgdir"/usr/bin/namecoind || return 1
+ install -m755 -D "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname || return 1
+ install -m600 -D "$srcdir"/$pkgname.conf "$pkgdir"/etc/$pkgname.conf || return 1
+}
+
+qt() {
+ pkgdesc="Namecoin with a Qt frontend"
+ cd "$_builddir"
+ mkdir -p "$subpkgdir"/usr/bin
+ install -Dm755 namecoin-qt "$subpkgdir"/usr/bin/namecoin-qt || return 1
+}
+
+md5sums="7302f83d8390184139277255a6c1d484 namecoin-0.3.80.tar.gz
+e4e43d7420191a94500189fe58a34a9c 20-boost-multithread-dynamic.patch
+3350b82aec4eb1edb2555c0b0e8b0451 system-strlcpy.patch
+9ecdbd9e17240075d064498a80fd50bd namecoin.initd
+59b2e0e765738ba48f632051fb6917ae namecoin.conf"
+sha256sums="3f5e5af95cea46111d3cf1663f0e84d5fda653917745e0607a3ca4773baea59c namecoin-0.3.80.tar.gz
+1b0e2c1c3ca849df816405c9f8dd86e056daed213c3e4c4e72161cabd64e67e8 20-boost-multithread-dynamic.patch
+44ff4beb1a10bd1e6a0f984a37d69e025b2c2b5de58af300ec5c23fd3e83f67e system-strlcpy.patch
+04ae66115343aa8ed7343139a2370b1e570c8ab4397d09457f5f157dd906a204 namecoin.initd
+4b413833527929ea863351469a5a4fc1e0ac365fe9df5e8a8304d8667acf8cea namecoin.conf"
+sha512sums="6ff3fddd72cf8ed4224b42deb6a7ca50906262cb50c3ca5ccb419791daa474d52b9584cbc47240fa7546c3f23fe23b72af475f16d1dd110ab13098e3e60a5de6 namecoin-0.3.80.tar.gz
+fc13574fef73cca20178e5895e2327567f40c91d25105d72b301a155f9025bfb494ce337096424fd71da8034fb0544562b8459c1d8ae2598ee503efd5995c6bf 20-boost-multithread-dynamic.patch
+8701c8faf786420a7085a8e5d85080fe18f26e53ae346c1c897315fd7f8f00e1f1e326ed5917b0eefa8f74bc7470e8979c1b10515017584baa2e9feb3c39b205 system-strlcpy.patch
+3048248b3da7300b0b3cb5667283badc17b41e6c90573604fd9ea9eb9933e93f9b1d6288846793b4e7a001a4cae5e52d2ce42e4bdc83e48f72aca6ee0e8ddd43 namecoin.initd
+3f92cb9a5f66d0e9e3792691b2e62b929c092030273bb87ebd9564e0c02196a5a9f69c458162f1b35099ac28e9b79b1c4035144b9d2dae4ad3e87d05a40d7ed4 namecoin.conf"
diff --git a/community/namecoin/namecoin.conf b/community/namecoin/namecoin.conf
new file mode 100644
index 0000000000..dd48332259
--- /dev/null
+++ b/community/namecoin/namecoin.conf
@@ -0,0 +1,13 @@
+### Namecoin configuration for Alpine Linux ###
+# #
+##### data directory is /var/lib/namecoin #####
+##### & set in /etc/init.d/namecoin not here ##
+#
+#proxy=127.0.0.1:9050 #use TOR Socks Proxy
+rpcallowip=127.0.0.1
+rpcuser=changeme
+rpcpassword=changeme
+rpcport=changeme
+daemon=1
+#gen=1 #generate namecoins
+
diff --git a/community/namecoin/namecoin.initd b/community/namecoin/namecoin.initd
new file mode 100644
index 0000000000..9bdeea0893
--- /dev/null
+++ b/community/namecoin/namecoin.initd
@@ -0,0 +1,38 @@
+#!/sbin/runscript
+
+# Namecoin init.d file for Alpine Linux.
+
+name=namecoind
+daemon=/usr/bin/$name
+config=/etc/namecoin.conf
+user=namecoin
+group=namecoin
+## supercedes datadir set in $config ##
+datadir=/var/lib/namecoin
+pidfile=/var/run/namecoin/$name.pid
+
+depend() {
+ need net
+ after logger firewall
+}
+
+start() {
+ ebegin "Starting ${name}"
+ # enforce permissions
+ checkpath -q -d ${pidfile%/*} -o ${user}:${group}
+ checkpath -q -d ${datadir} -m 0700 -o ${user}:${group}
+ checkpath -q -f ${config} -m 0600 -o ${user}:${group}
+ start-stop-daemon --start --quiet \
+ --pidfile ${pidfile} \
+ --user ${user}:${group} \
+ --exec ${daemon} -- -conf=${config} -datadir=${datadir} -pid=${pidfile}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping ${name}"
+ start-stop-daemon --stop --quiet \
+ --pidfile ${pidfile} \
+ --exec ${daemon}
+ eend $?
+}
diff --git a/community/namecoin/namecoin.post-install b/community/namecoin/namecoin.post-install
new file mode 100644
index 0000000000..ee8b756b40
--- /dev/null
+++ b/community/namecoin/namecoin.post-install
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+NORMAL="\033[1;0m"
+STRONG="\033[1;1m"
+GREEN="\033[1;32m"
+
+config=$(grep -F 'config=' /etc/init.d/namecoin |sed 's/config=//')
+
+randgen() {
+ output=$(cat /dev/urandom | tr -dc '0-9a-zA-Z!@#$%^&*_+-' | head -c${1:-$1}) 2>/dev/null
+ echo $output
+}
+
+findRandomTcpPort(){
+ port=$(( 1024 + $(( $RANDOM % $(( 65534 - 1024 )) )) ))
+ while netstat -atn | grep -q :$port; do port=$(expr $port + 1); done; echo $port
+}
+
+GenPasswd(){
+ sed -i "/rpcuser=/ c \rpcuser=USER-"$(randgen 32)"" $config
+ sed -i "/rpcpassword=/ c \rpcpassword=PW-"$(randgen 64)"" $config
+ sed -i "/rpcport=/ c \rpcport="$(findRandomTcpPort)"" $config
+ print_green "Generated random user / password / port in:" " $config\n"
+}
+
+print_green() {
+ local prompt="${STRONG}$1${GREEN}$2${NORMAL}"
+ printf "${prompt}%s"
+}
+
+if grep -F "changeme" $config 1>/dev/null; then
+ GenPasswd
+fi
+
+exit 0
diff --git a/community/namecoin/namecoin.pre-install b/community/namecoin/namecoin.pre-install
new file mode 100644
index 0000000000..f41286d1bd
--- /dev/null
+++ b/community/namecoin/namecoin.pre-install
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S namecoin 2>/dev/null
+adduser -S -D -h /var/lib/namecoin -s /sbin/nologin -G namecoin -g namecoin namecoin 2>/dev/null
+
+exit 0
diff --git a/community/namecoin/system-strlcpy.patch b/community/namecoin/system-strlcpy.patch
new file mode 100644
index 0000000000..f7bb2717df
--- /dev/null
+++ b/community/namecoin/system-strlcpy.patch
@@ -0,0 +1,60 @@
+diff --git a/src/init.cpp b/src/init.cpp
+index bc7e714..295e20f 100644
+--- a/src/init.cpp
++++ b/src/init.cpp
+@@ -6,7 +6,6 @@
+ #include "bitcoinrpc.h"
+ #include "net.h"
+ #include "init.h"
+-#include "strlcpy.h"
+ #include <boost/filesystem.hpp>
+ #include <boost/filesystem/fstream.hpp>
+ #include <boost/interprocess/sync/file_lock.hpp>
+diff --git a/src/irc.cpp b/src/irc.cpp
+index fea0aa2..fd5d8c4 100644
+--- a/src/irc.cpp
++++ b/src/irc.cpp
+@@ -5,7 +5,6 @@
+ #include "headers.h"
+ #include "irc.h"
+ #include "net.h"
+-#include "strlcpy.h"
+
+ using namespace std;
+ using namespace boost;
+diff --git a/src/net.cpp b/src/net.cpp
+index 4d2f651..7df2b77 100644
+--- a/src/net.cpp
++++ b/src/net.cpp
+@@ -7,7 +7,6 @@
+ #include "db.h"
+ #include "net.h"
+ #include "init.h"
+-#include "strlcpy.h"
+
+ #ifdef __WXMSW__
+ #include <string.h>
+diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
+index 30dcca6..21a11af 100644
+--- a/src/qt/bitcoin.cpp
++++ b/src/qt/bitcoin.cpp
+@@ -15,7 +15,6 @@
+ #include "ui_interface.h"
+ #include "paymentserver.h"
+ #include "../allocators.h"
+-#include "../strlcpy.h"
+
+ #include <boost/filesystem.hpp>
+
+diff --git a/src/util.cpp b/src/util.cpp
+index fc51717..50ce19f 100644
+--- a/src/util.cpp
++++ b/src/util.cpp
+@@ -2,7 +2,6 @@
+ // Distributed under the MIT/X11 software license, see the accompanying
+ // file license.txt or http://www.opensource.org/licenses/mit-license.php.
+ #include "headers.h"
+-#include "strlcpy.h"
+ #include <boost/program_options/detail/config_file.hpp>
+ #include <boost/program_options/parsers.hpp>
+ #include <boost/filesystem.hpp>
diff --git a/community/networkmanager/APKBUILD b/community/networkmanager/APKBUILD
new file mode 100644
index 0000000000..7f0a0e8dbf
--- /dev/null
+++ b/community/networkmanager/APKBUILD
@@ -0,0 +1,129 @@
+# Contributor: William Pitcock <nenolod@dereferenced.org>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=networkmanager
+pkgver=1.0.6
+pkgrel=0
+pkgdesc="network management tool"
+url="http://projects.gnome.org/NetworkManager/"
+arch="all"
+license="GPL"
+depends="dhcpcd iptables dbus"
+depends_dev=
+makedepends="$depends_dev
+ dbus-glib-dev
+ eudev-dev
+ gobject-introspection-dev
+ intltool
+ libmm-glib-dev
+ libndp-dev
+ libnl3-dev
+ libsoup-dev
+ libteam-dev
+ linux-headers
+ modemmanager-dev
+ newt-dev
+ nss-dev
+ polkit-dev
+ ppp-dev
+ readline-dev
+ util-linux-dev
+ vala
+ "
+subpackages="$pkgname-dev $pkgname-doc $pkgname-lang"
+source="http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/${pkgver:0:3}/NetworkManager-$pkgver.tar.xz
+ $pkgname.conf
+ $pkgname.initd
+ $pkgname.rules
+ new-fix-musl-headers.patch
+ disable_set_hostname.patch
+ "
+
+_builddir="$srcdir"/NetworkManager-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+ # Build fails without IPTOS_CLASS_CS6 defined (required by systemd) ###
+ # http://cgit.openembedded.org/openembedded-core/commit/?id=7562021eef5b7585122c92db8b686808ebe7d85e
+ # Remove systemd functionality. This also removes many: "error: redefinition of 'struct ethhdr'"
+ local f= files=$(find src/dhcp-manager/systemd-dhcp -type f) # --without-systemd has no effect
+ files="$files $(find src/dhcp-manager -maxdepth 1 -type f -name "*-systemd.*")"
+ for f in $files; do # do NOT build --with-dbus-sys-dir=/etc/dbus-1 (nm service will crash)
+ printf "" > $f
+ done
+
+}
+
+build() {
+ cd "$_builddir"
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --disable-more-warnings \
+ --disable-config-plugin-ibft \
+ --disable-tests \
+ --disable-wimax \
+ --disable-introspection \
+ --enable-ifupdown \
+ --enable-concheck \
+ --with-dhcpcd=yes \
+ --with-systemdsystemunitdir=no \
+ --with-crypto=nss \
+ --with-modem-manager-1 \
+ --with-nmtui=yes \
+ --with-wext=yes \
+ --with-resolvconf=yes \
+ --with-session-tracking=no \
+ --with-suspend-resume=upower \
+ --without-valgrind \
+ || return 1
+ # ourLDFLAGS confuses the gir-scanner
+ unset LDFLAGS
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+
+ install -m755 -D "$srcdir"/networkmanager.initd \
+ "$pkgdir"/etc/init.d/networkmanager || return 1
+
+ install -m644 -D "$srcdir/$pkgname.conf" \
+ "$pkgdir/etc/NetworkManager/NetworkManager.conf" || return 1
+ # allow plugdev users to modify connections
+ install -m644 -D "$srcdir/$pkgname.rules" \
+ "$pkgdir/usr/share/polkit-1/rules.d/01-org.freedesktop.NetworkManager.settings.modify.system.rules" || return 1
+ mkdir -p "$pkgdir/usr/share/apk-tools/$pkgname"
+ # post-install message
+ mv "$pkgdir/usr/share/doc/NetworkManager" "$pkgdir/usr/share/doc/$pkgname" || return 1
+ cat > $pkgdir/usr/share/doc/$pkgname/README.alpine <<EOF
+To modify system network connections without the root password: add your user account to the 'plugdev' group.
+EOF
+}
+
+md5sums="00f5f9ec69725a9f9b99366853c6f73e NetworkManager-1.0.6.tar.xz
+b722fa02f904a9c8ed0d2ec21cbfc588 networkmanager.conf
+34f8909bb776840e7ec0579aeea14d30 networkmanager.initd
+a39b4feaf1edecc057596be6d82ba634 networkmanager.rules
+eb52238b018c2ca9cd969facbf3e4a39 new-fix-musl-headers.patch
+4f2c03bce7febd1eede0dc2c5f8b30d9 disable_set_hostname.patch"
+sha256sums="38ea002403e3b884ffa9aae25aea431d2a8420f81f4919761c83fb92648254bd NetworkManager-1.0.6.tar.xz
+cd2a4b0079c0726973c1cf226c4e1cb4f2d27d02c16e0e08af7e4d6b8770423c networkmanager.conf
+05225f1f658f9287d95b4564beb1089245ab83ccae28ba5d2d4c8fc5aefde207 networkmanager.initd
+01f4b833c515e88c1963a0ee56ffbf70c59c5efc4dd59a5174498d2fabfc9362 networkmanager.rules
+ea205946b52fca22b9ef8b1f3a4e89a69dca430201b5b0f441564d1659d9f295 new-fix-musl-headers.patch
+6fc7bc258ac01c2d2578f5a29e7eee55b98bbf8f32dae6d28dede7d7ee5e5c4e disable_set_hostname.patch"
+sha512sums="74e8f91bbd9a70f1764b06c729717e091d2be0a8e316fe1b6235e644b65f43add5214be7a1100fe9d30b1511f4a00b9892dce79bb8ba0f0b0d57089d2ba6ddbb NetworkManager-1.0.6.tar.xz
+a6e507260e2ceffad4cacb2b49a1d4f6b933e5ae8bc50c1bd56f828298c5dc8d9d17aa4be766faeacefbe3c6c0c748e4ef499a55bb5ee40f0f04bbf766fbbc82 networkmanager.conf
+80ef470956bc5319f02e8387bff17c5452d4147321f9f997ca86017494d5134d8579bf59566fc796f3e84ee5788a2d49743d3b93e795f4976661866d1f1b1442 networkmanager.initd
+9820ed2ead0af689644842de57657bb10330a1eaff0e85b21ae9913f55e399e47d8b41b0a12956f30de80272b4424c6e55f33acbc88e156879003a260bf576f6 networkmanager.rules
+18eff8eadcb8d47742a5c760c0c4a217d82749edc0060dc3b62e6aa0671f456de9d0c11b1669b302371410cd4036bf21aee468ed1d61e7a84afd3b694bc69984 new-fix-musl-headers.patch
+cdc8c26720b983f8afb11ee08c87aab863522633d8dc08e8cea080ed8d94378b3534aedf09efc6e7481599cfede6122b5f6a86b0b45e0a8bb653f95d4c5beaf8 disable_set_hostname.patch"
diff --git a/community/networkmanager/disable_set_hostname.patch b/community/networkmanager/disable_set_hostname.patch
new file mode 100644
index 0000000000..773e263474
--- /dev/null
+++ b/community/networkmanager/disable_set_hostname.patch
@@ -0,0 +1,20 @@
+diff -Nur NetworkManager-0.9.0.orig/src/nm-policy.c NetworkManager-0.9.0/src/nm-policy.c
+--- NetworkManager-0.9.0.orig/src/nm-policy.c 2011-08-23 06:41:02.099686450 +0000
++++ NetworkManager-0.9.0/src/nm-policy.c 2011-08-23 06:43:38.227791737 +0000
+@@ -302,6 +302,7 @@
+ return;
+ }
+
++#if 0
+ /* Try automatically determined hostname from the best device's IP config */
+ if (!best4)
+ best4 = get_best_ip4_device (policy->manager, &best_req4);
+@@ -356,6 +357,7 @@
+ }
+ }
+
++#endif
+ /* If no automatically-configured hostname, try using the hostname from
+ * when NM started up.
+ */
+
diff --git a/community/networkmanager/networkmanager.conf b/community/networkmanager/networkmanager.conf
new file mode 100644
index 0000000000..8da4fe0487
--- /dev/null
+++ b/community/networkmanager/networkmanager.conf
@@ -0,0 +1,2 @@
+[main]
+dhcp=dhcpcd
diff --git a/community/networkmanager/networkmanager.initd b/community/networkmanager/networkmanager.initd
new file mode 100644
index 0000000000..575b413897
--- /dev/null
+++ b/community/networkmanager/networkmanager.initd
@@ -0,0 +1,23 @@
+#!/sbin/openrc-run
+# Copyright (c) 2008 Saleem Abdulrasool <compnerd@compnerd.org>
+# Distributed under the terms of the GNU General Purpose License v2
+# $Header: $
+
+depend() {
+ need dbus
+}
+
+start() {
+ ebegin "Starting NetworkManager"
+ start-stop-daemon --start --quiet --pidfile /var/run/NetworkManager.pid \
+ --exec /usr/sbin/NetworkManager -- --pid-file /var/run/NetworkManager.pid
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping NetworkManager"
+ start-stop-daemon --stop --quiet --pidfile /var/run/NetworkManager.pid
+ eend $?
+}
+
+# vim: set ft=gentoo-init-d ts=3 sw=3 et:
diff --git a/community/networkmanager/networkmanager.rules b/community/networkmanager/networkmanager.rules
new file mode 100644
index 0000000000..66d21d6bbd
--- /dev/null
+++ b/community/networkmanager/networkmanager.rules
@@ -0,0 +1,9 @@
+// Let users in plugdev group modify NetworkManager
+polkit.addRule(function(action, subject) {
+ if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" &&
+ subject.isInGroup("plugdev") && subject.active) {
+ return "yes";
+ }
+});
+
+
diff --git a/community/networkmanager/new-fix-musl-headers.patch b/community/networkmanager/new-fix-musl-headers.patch
new file mode 100644
index 0000000000..e29f8569e6
--- /dev/null
+++ b/community/networkmanager/new-fix-musl-headers.patch
@@ -0,0 +1,31 @@
+## moving the <linux/xxxx> includes to below nm includes
+## no longer works in 1.0.0.
+--- NetworkManager-1.0.0/src/platform/wifi/wifi-utils.h
++++ NetworkManager-1.0.0/src/platform/wifi/wifi-utils.h.new
+@@ -22,10 +22,10 @@
+ #ifndef __WIFI_UTILS_H__
+ #define __WIFI_UTILS_H__
+
+-#include <net/ethernet.h>
+ #include <glib.h>
+
+ #include "nm-dbus-interface.h"
++#include <linux/if_ether.h>
+
+ typedef struct WifiData WifiData;
+
+--- NetworkManager-1.0.0/src/settings/nm-settings-connection.h
++++ NetworkManager-1.0.0/src/settings/nm-settings-connection.h.new
+@@ -22,10 +22,9 @@
+ #ifndef __NETWORKMANAGER_SETTINGS_CONNECTION_H__
+ #define __NETWORKMANAGER_SETTINGS_CONNECTION_H__
+
+-#include <net/ethernet.h>
+-
+ #include <nm-connection.h>
+ #include "nm-types.h"
++#include <linux/if_ether.h>
+
+ G_BEGIN_DECLS
+
+
diff --git a/community/nginx-naxsi/APKBUILD b/community/nginx-naxsi/APKBUILD
new file mode 100644
index 0000000000..c2a265e572
--- /dev/null
+++ b/community/nginx-naxsi/APKBUILD
@@ -0,0 +1,143 @@
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+# Contributor: Cameron Banta <cbanta@gmail.com>
+# Contributor: Jeff Bilyk <jbilyk@gmail.com>
+# Contributor: Bartłomiej Piotrowski <nospam@bpiotrowski.pl>
+
+pkgname=nginx-naxsi
+_pkgname=nginx
+pkgver=1.9.15
+_ngx_naxsi_ver=0.54
+_ngx_cache_purge_ver=2.3
+_ngx_upstream_fair_ver=0.1.0
+_ngx_http_sysguard_ver=2.1.0
+pkgrel=2
+pkgdesc="lightweight HTTP and reverse proxy server with Naxsi WAF support, see also 'nxapi'"
+url="http://www.nginx.org | https://github.com/nbs-system/naxsi"
+arch="all"
+license="custom"
+install="$pkgname.pre-install $pkgname.pre-upgrade"
+depends="!nginx"
+makedepends="pcre-dev openssl-dev zlib-dev paxmark linux-headers"
+subpackages="$pkgname-doc $pkgname-vim:vim"
+source="http://nginx.org/download/$_pkgname-$pkgver.tar.gz
+ naxsi-$_ngx_naxsi_ver.tar.gz::https://github.com/nbs-system/naxsi/archive/$_ngx_naxsi_ver.tar.gz
+ ngx_cache_purge-$_ngx_cache_purge_ver.tar.gz::https://github.com/FRiCKLE/ngx_cache_purge/archive/$_ngx_cache_purge_ver.tar.gz
+ upstream-fair-$_ngx_upstream_fair_ver.tar.gz::https://github.com/hnlq715/nginx-upstream-fair/archive/v$_ngx_upstream_fair_ver.tar.gz
+ sysguard-$_ngx_http_sysguard_ver.tar.gz::https://github.com/itoffshore/nginx-http-sysguard/archive/$_ngx_http_sysguard_ver.tar.gz
+
+ anonymise.patch
+ ipv6.patch
+ sysguard.patch
+
+ nginx.initd
+ nginx.logrotate
+ "
+
+_builddir="$srcdir"/$_pkgname-$pkgver
+
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./configure \
+ --add-module="$srcdir/naxsi-$_ngx_naxsi_ver/naxsi_src" \
+ --add-module="$srcdir/nginx-http-sysguard-$_ngx_http_sysguard_ver" \
+ --prefix=/usr \
+ --conf-path=/etc/$_pkgname/$_pkgname.conf \
+ --pid-path=/var/run/$_pkgname.pid \
+ --lock-path=/var/run/$_pkgname.lock \
+ --error-log-path=/var/log/$_pkgname/error.log \
+ --http-log-path=/var/log/$_pkgname/access.log \
+ --http-client-body-temp-path=/tmp/$_pkgname/client-body \
+ --http-proxy-temp-path=/tmp/$_pkgname/proxy \
+ --http-fastcgi-temp-path=/tmp/$_pkgname/fastcgi \
+ --user=nginx \
+ --group=nginx \
+ --with-ipv6 \
+ --with-threads \
+ --with-file-aio \
+ --with-pcre-jit \
+ --with-http_ssl_module \
+ --with-http_gzip_static_module \
+ --with-http_v2_module \
+ --with-mail \
+ --with-mail_ssl_module \
+ --with-http_realip_module \
+ --with-http_stub_status_module \
+ --with-http_auth_request_module \
+ --with-stream \
+ --with-stream_ssl_module \
+ --without-http_uwsgi_module \
+ --without-http_scgi_module \
+ --add-module="$srcdir/ngx_cache_purge-$_ngx_cache_purge_ver" \
+ --add-module="$srcdir/nginx-upstream-fair-$_ngx_upstream_fair_ver" \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install
+
+ local paxflags="-m"
+ [ "$CARCH" = "x86" ] && paxflags="-msp"
+ paxmark "$paxflags" "$pkgdir"/usr/sbin/nginx || return 1
+
+ install -m755 -D "$srcdir"/$_pkgname.initd "$pkgdir"/etc/init.d/$_pkgname
+ install -m644 -D "$srcdir"/$_pkgname.logrotate "$pkgdir"/etc/logrotate.d/$_pkgname
+
+ install -m644 -D LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE
+ install -m644 -D "$srcdir"/naxsi-$_ngx_naxsi_ver/naxsi_config/naxsi_core.rules "$pkgdir"/etc/nginx/naxsi_core.rules
+}
+
+vim() {
+ local t
+
+ depends=""
+ pkgdesc="Vim syntax for Nginx"
+ arch="noarch"
+
+ for t in ftdetect syntax indent; do
+ install -Dm644 "$_builddir"/contrib/vim/$t/$_pkgname.vim \
+ "$subpkgdir"/usr/share/vim/vimfiles/$t/$_pkgname.vim
+ done
+}
+
+md5sums="13cd38e9da3789035750dd45882c4a26 nginx-1.9.15.tar.gz
+1bc31058991268e4cfdb44e9b6d8b3b3 naxsi-0.54.tar.gz
+dc4c0688ed03ca7f5563097c2a8a76ca ngx_cache_purge-2.3.tar.gz
+f3562ef6573f616e254d382d6f86b8e1 upstream-fair-0.1.0.tar.gz
+fdb072dc8d67b573a0ea7983530a7d2b sysguard-2.1.0.tar.gz
+31d29937da95b31714faa399aeb07407 anonymise.patch
+801a87f7f9d27f8ad85b41a78b4c4461 ipv6.patch
+50357b75049d878c0bcce10d0c60f9ed sysguard.patch
+609ea97ab6c3c30f9e8329968aadc4f3 nginx.initd
+8823274a834332d3db4f62bf7dd1fb7d nginx.logrotate"
+sha256sums="cc89b277cc03f403c0b746d60aa5943cdecf59ae48278f8cb7e2df0cbdb6dac3 nginx-1.9.15.tar.gz
+9cc2c09405bc71f78ef26a8b6d70afcea3fccbe8125df70cb0cfc480133daba5 naxsi-0.54.tar.gz
+cb7d5f22919c613f1f03341a1aeb960965269302e9eb23425ccaabd2f5dcbbec ngx_cache_purge-2.3.tar.gz
+dd0bfb79d2489f48ea63ac004d91890cd471eb4020500ce9179c3612cb13246c upstream-fair-0.1.0.tar.gz
+97e0cc9a36fcce375c5b0667b002d2f7acd580e968a2318e3276fbdc1b99f8e4 sysguard-2.1.0.tar.gz
+28adf3605875197d5822fa382f5fd3c9c80f7d3a561e904fee223fa051f98810 anonymise.patch
+a24ef5843ae0afa538b00c37eb7da7870f9d7f146f52a9668678f7296cf71d9b ipv6.patch
+18090329435c32d91621a5943acc5b8bbe89aaa3c2fa334c3a4cdeb00efb6226 sysguard.patch
+8cbef405295eac299dfc3b9b119c02bda354a9b335923bed6ff6992c1fd8f493 nginx.initd
+cea0c6f8de55a4c3a3eccc57910de1c3116634082c8e5b660630fb927a29f38d nginx.logrotate"
+sha512sums="563cec7828d1e398ded83579c3c4afcd83fd809662e64a0212e25a34ce1b599135558e9fd8cee3e07ba028ee4b308e40ce9910a5071a3d8e3b7ec9f9bdef95f0 nginx-1.9.15.tar.gz
+91934bfd41495715269cc6e549d17f6da66f2bdd0c9a6821fa9096b694dd3927109c4aad2f8b327620ae7c34f76a0839ac16669cd8c65081bc01fa7f829c1d43 naxsi-0.54.tar.gz
+81929ca57ce5c2e1af6ec43882a54ff1da8dc77786bfb7505ff94fbcf970ae8870b419dc5c0bc7b80794d75a359e0100f360c1cf458a300f802b1d8bd7053811 ngx_cache_purge-2.3.tar.gz
+2ff9894986c5cd483ecee97d8818675ef6d063e5f45bb66e8cf56c78bbd043b9c0c37eb3cf650b7cfb6d40da9f7a4ba0e030fe39de5ef1f715cbcd6560248428 upstream-fair-0.1.0.tar.gz
+f9587b8aa7a2b09be016dc6f7a07fe3fee154d16172194e899bf3c78a3f4e373c78f79932794cd9ac75793514c606ab878f88be9400b70e37528d263f1541b34 sysguard-2.1.0.tar.gz
+f8e46dafcf553edd35699dc2a47a54756e0a4c690fc13f81436ad9db1026739ba331ad99d3d05d8a7c089a5c067bf45f4aca3a98fdd9483b7b0123a837e695be anonymise.patch
+68d64a84568ec2df0366925ab282a05ebe21a85044b6c7844a47573cfd8cc8ed119cc772358bc3fff36e2d4fdf583a730592825f5f98632993ca86d1f8438d5f ipv6.patch
+2dca2ac74fb92e330fde7b6b6120b2fd2565c377a629c9536cf77beebe41aa4b092d4229d5b487b0fb02be4f2cc5b897c429c87bbbbc7b0d31e1cbb94231ddce sysguard.patch
+6e9a37176c0ca5a463a2745401bc5a6f9c002a236244b615a2803ec04404cc768678a1fa27ee047f81f4ccf002f7bea4b803522049f4ef839c61bb83577b9d65 nginx.initd
+01b77cff16f6e8bfd7fa1d4d20f625bbcddd08f0509173452d060c342c93dc315a7b0560f4734323a5d29ea294de0491f2e3f32e5337574e1a28ebc005eceea8 nginx.logrotate"
diff --git a/community/nginx-naxsi/anonymise.patch b/community/nginx-naxsi/anonymise.patch
new file mode 100644
index 0000000000..17bca99b51
--- /dev/null
+++ b/community/nginx-naxsi/anonymise.patch
@@ -0,0 +1,76 @@
+--- nginx-1.6.1/src/http/ngx_http_header_filter_module.c
++++ nginx-1.6.1/src/http/ngx_http_header_filter_module.c
+@@ -46,8 +46,8 @@
+ };
+
+
+-static char ngx_http_server_string[] = "Server: nginx" CRLF;
+-static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
++static char ngx_http_server_string[] = "";
++static char ngx_http_server_full_string[] = "";
+
+
+ static ngx_str_t ngx_http_status_lines[] = {
+@@ -278,8 +278,8 @@
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+ if (r->headers_out.server == NULL) {
+- len += clcf->server_tokens ? sizeof(ngx_http_server_full_string) - 1:
+- sizeof(ngx_http_server_string) - 1;
++ len += clcf->server_tokens ? sizeof(ngx_http_server_full_string) - 0:
++ sizeof(ngx_http_server_string) - 0;
+ }
+
+ if (r->headers_out.date == NULL) {
+--- nginx-1.6.1/src/http/ngx_http_special_response.c
++++ nginx-1.6.1/src/http/ngx_http_special_response.c
+@@ -19,14 +19,14 @@
+
+
+ static u_char ngx_http_error_full_tail[] =
+-"<hr><center>" NGINX_VER "</center>" CRLF
++"<hr><center>127.0.0.1</center>" CRLF
+ "</body>" CRLF
+ "</html>" CRLF
+ ;
+
+
+ static u_char ngx_http_error_tail[] =
+-"<hr><center>nginx</center>" CRLF
++"<hr><center>localhost</center>" CRLF
+ "</body>" CRLF
+ "</html>" CRLF
+ ;
+--- nginx-1.9.12/src/http/v2/ngx_http_v2_filter_module.c
++++ nginx-1.9.12/src/http/v2/ngx_http_v2_filter_module.c.new
+@@ -229,9 +229,9 @@
+
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+- if (r->headers_out.server == NULL) {
++/* if (r->headers_out.server == NULL) {
+ len += 1 + (clcf->server_tokens ? nginx_ver_len : sizeof(nginx));
+- }
++ } */
+
+ if (r->headers_out.date == NULL) {
+ len += 1 + ngx_http_v2_literal_size("Wed, 31 Dec 1986 18:00:00 GMT");
+@@ -434,7 +434,7 @@
+ pos = ngx_sprintf(pos, "%03ui", r->headers_out.status);
+ }
+
+- if (r->headers_out.server == NULL) {
++/* if (r->headers_out.server == NULL) {
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
+ "http2 output header: \"server: %s\"",
+ clcf->server_tokens ? NGINX_VER : "nginx");
+@@ -453,7 +453,7 @@
+ } else {
+ pos = ngx_cpymem(pos, nginx, sizeof(nginx));
+ }
+- }
++ } */
+
+ if (r->headers_out.date == NULL) {
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
+
diff --git a/community/nginx-naxsi/ipv6.patch b/community/nginx-naxsi/ipv6.patch
new file mode 100644
index 0000000000..9b05f8ff83
--- /dev/null
+++ b/community/nginx-naxsi/ipv6.patch
@@ -0,0 +1,42 @@
+--- a/src/http/ngx_http_core_module.c
++++ b/src/http/ngx_http_core_module.c
+@@ -2442,7 +2442,11 @@
+ ngx_uint_t i;
+ ngx_conf_t pcf;
+ ngx_http_module_t *module;
++#if (NGX_HAVE_INET6)
++ struct sockaddr_in6 *sin6;
++#else
+ struct sockaddr_in *sin;
++#endif
+ ngx_http_conf_ctx_t *ctx, *http_ctx;
+ ngx_http_listen_opt_t lsopt;
+ ngx_http_core_srv_conf_t *cscf, **cscfp;
+@@ -2526,6 +2530,19 @@
+ if (rv == NGX_CONF_OK && !cscf->listen) {
+ ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t));
+
++#if (NGX_HAVE_INET6)
++ sin6 = &lsopt.u.sockaddr_in6;
++
++ sin6->sin6_family = AF_INET6;
++#if (NGX_WIN32)
++ sin6->sin6_port = htons(80);
++#else
++ sin6->sin6_port = htons((getuid() == 0) ? 80 : 8000);
++#endif
++ sin6->sin6_addr = in6addr_any;
++
++ lsopt.socklen = sizeof(struct sockaddr_in6);
++#else
+ sin = &lsopt.u.sockaddr_in;
+
+ sin->sin_family = AF_INET;
+@@ -2537,6 +2554,7 @@
+ sin->sin_addr.s_addr = INADDR_ANY;
+
+ lsopt.socklen = sizeof(struct sockaddr_in);
++#endif
+
+ lsopt.backlog = NGX_LISTEN_BACKLOG;
+ lsopt.rcvbuf = -1;
diff --git a/community/nginx-naxsi/nginx-naxsi.pre-install b/community/nginx-naxsi/nginx-naxsi.pre-install
new file mode 100644
index 0000000000..8512f43dda
--- /dev/null
+++ b/community/nginx-naxsi/nginx-naxsi.pre-install
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+addgroup -S -g 82 www-data 2>/dev/null
+addgroup -S nginx 2>/dev/null
+adduser -S -D -H -h /var/www/localhost/htdocs -s /sbin/nologin -G nginx \
+ -g nginx nginx 2>/dev/null
+addgroup nginx www-data 2>/dev/null
+
+exit 0
diff --git a/community/nginx-naxsi/nginx-naxsi.pre-upgrade b/community/nginx-naxsi/nginx-naxsi.pre-upgrade
new file mode 120000
index 0000000000..364e0b943c
--- /dev/null
+++ b/community/nginx-naxsi/nginx-naxsi.pre-upgrade
@@ -0,0 +1 @@
+nginx-naxsi.pre-install \ No newline at end of file
diff --git a/community/nginx-naxsi/nginx.initd b/community/nginx-naxsi/nginx.initd
new file mode 100644
index 0000000000..bec20dddaa
--- /dev/null
+++ b/community/nginx-naxsi/nginx.initd
@@ -0,0 +1,42 @@
+#!/sbin/openrc-run
+
+extra_started_commands="reload"
+extra_commands="configtest"
+
+depend() {
+ need net
+ use dns logger netmount
+}
+
+CONFFILE=${CONFFILE:-/etc/nginx/${SVCNAME}.conf}
+PIDFILE=${PIDFILE:-/var/run/${SVCNAME}.pid}
+
+configtest() {
+ ebegin "Checking ${SVCNAME} configuration"
+ mkdir -p /tmp/nginx
+ /usr/sbin/nginx -c ${CONFFILE} -t
+ eend $? "failed, please correct errors above"
+}
+
+start() {
+ configtest || return 1
+ ebegin "Starting ${SVCNAME}"
+ start-stop-daemon --start --pidfile "${PIDFILE}" \
+ --exec /usr/sbin/nginx -- -c ${CONFFILE} -g "pid ${PIDFILE};"
+ eend $? "Failed to start ${SVCNAME}"
+}
+
+stop() {
+ configtest || return 1
+ ebegin "Stopping ${SVCNAME}"
+ start-stop-daemon --stop --pidfile "${PIDFILE}"
+ eend $? "Failed to stop ${SVCNAME}"
+ rm -f "${PIDFILE}"
+}
+
+reload() {
+ configtest || return 1
+ ebegin "Refreshing ${SVCNAME} configuration"
+ kill -HUP $(cat "${PIDFILE}") &>/dev/null
+ eend $? "Failed to reload nginx"
+}
diff --git a/community/nginx-naxsi/nginx.logrotate b/community/nginx-naxsi/nginx.logrotate
new file mode 100644
index 0000000000..7778b1108b
--- /dev/null
+++ b/community/nginx-naxsi/nginx.logrotate
@@ -0,0 +1,12 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/www-servers/nginx/files/nginx.logrotate,v 1.1 2010/01/03 20:29:40 djc Exp $
+
+/var/log/nginx/*.log {
+ missingok
+ sharedscripts
+ postrotate
+ kill -USR1 `cat /var/run/nginx.pid`
+ endscript
+}
+
diff --git a/community/nginx-naxsi/sysguard.patch b/community/nginx-naxsi/sysguard.patch
new file mode 100644
index 0000000000..be8b0d2ee4
--- /dev/null
+++ b/community/nginx-naxsi/sysguard.patch
@@ -0,0 +1,10 @@
+--- a/src/http/ngx_http_request.h
++++ b/src/http/ngx_http_request.h
+@@ -498,6 +498,7 @@
+ */
+ unsigned limit_conn_set:1;
+ unsigned limit_req_set:1;
++ unsigned sysguard_set:1;
+
+ #if 0
+ unsigned cacheable:1;
diff --git a/community/numix-themes/APKBUILD b/community/numix-themes/APKBUILD
new file mode 100644
index 0000000000..16d3c941a2
--- /dev/null
+++ b/community/numix-themes/APKBUILD
@@ -0,0 +1,68 @@
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=numix-themes
+_pkgname=numix-gtk-theme
+pkgver=2.6.1
+pkgrel=0
+pkgdesc="A modern flat theme with a combination of light and dark elements, GTK 2 and 3"
+url="http://shimmerproject.org/project/Numix/"
+arch="noarch"
+license="GPLv3"
+makedepends="$depends_dev"
+subpackages="$pkgname-gtk2 $pkgname-gtk3 $pkgname-metacity $pkgname-xfwm4 $pkgname-xfce4-notifyd:_notify
+ $pkgname-openbox:_openbox"
+source="numix-$pkgver.tar.gz::https://github.com/numixproject/$_pkgname/archive/$pkgver.tar.gz"
+
+_builddir="$srcdir"/$_pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ # Remove Unity theme
+ rm -f gtk-3.0/apps/unity.css
+ sed -i '/unity\.css/d' gtk-3.0/gtk.css
+ rm -rf unity
+}
+
+package() {
+ cd "$_builddir"
+ mkdir -p "$pkgdir"/usr/share/themes/Numix
+ cp -pr * "$pkgdir"/usr/share/themes/Numix
+ rm -f "$pkgdir"/usr/share/themes/Numix/Makefile
+}
+
+_mv() {
+ pkgdesc="$1"
+ install_if="$pkgname=$pkgver-r$pkgrel $2";
+ depends=
+ local _i
+ shift; shift
+ mkdir -p "$subpkgdir"/usr/share/themes/Numix
+ for _i; do
+ msg "moving $_i"
+ mv "$pkgdir"/usr/share/themes/Numix/$_i \
+ "$subpkgdir"/usr/share/themes/Numix || return 1
+ done
+}
+
+gtk2() {
+ _mv "Numix GTK2 themes" gtk2.0 gtk-2.0
+ depends="gtk-murrine-engine"
+}
+
+gtk3() { _mv "Numix GTK3 themes" gtk3.0 gtk-3.*; }
+metacity() { _mv "Numix Metacity themes" metacity metacity-1; }
+xfwm4() { _mv "Numix Xfce4 themes" xfwm4 xfwm4; }
+_notify() { _mv "Numix Xfce4-notifyd themes" xfce4-notifyd xfce-notify-4.0; }
+_openbox() { _mv "Numix openbox themes" openbox openbox-3; }
+
+md5sums="499e2e8e9d7d1d81403ebf8f65c8ced6 numix-2.6.1.tar.gz"
+sha256sums="7d81fb0fe7a50f933ae8016154a6da8ea4f6c12d988f735db277424af344a5bf numix-2.6.1.tar.gz"
+sha512sums="ebdbf20049b84141b10bafa93685f844b59ae629d19ede0eef44afafa18357cb54d66cb830a67bf09ab251b04dbf21193e7bc5ea19124061d7fd8dbf4538a745 numix-2.6.1.tar.gz"
diff --git a/community/nxapi/APKBUILD b/community/nxapi/APKBUILD
new file mode 100644
index 0000000000..4163f466ba
--- /dev/null
+++ b/community/nxapi/APKBUILD
@@ -0,0 +1,47 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=nxapi
+_pkgname=naxsi
+pkgver=0.54
+_ver=${pkgver/_/}
+pkgrel=0
+pkgdesc="nginx/naxsi log parser, whitelist and report generator."
+url="http://www.nginx.org | https://github.com/nbs-system/naxsi"
+arch="noarch"
+license="GPL v2"
+depends="python"
+depends_dev=""
+makedepends="python-dev"
+#subpackages="$pkgname-doc"
+source="$_pkgname-$_ver.tar.gz::https://github.com/nbs-system/naxsi/archive/${_ver}.tar.gz
+ fix-config-location.patch
+ "
+
+_builddir="$srcdir"/$_pkgname-$_ver/nxapi
+
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ python setup.py build || return 1
+}
+
+package() {
+ cd "$_builddir"
+ python setup.py install --prefix=/usr --root="$pkgdir" || return 1
+}
+
+md5sums="1bc31058991268e4cfdb44e9b6d8b3b3 naxsi-0.54.tar.gz
+1ad187c532b7314e6db3a18dcb0e56bc fix-config-location.patch"
+sha256sums="9cc2c09405bc71f78ef26a8b6d70afcea3fccbe8125df70cb0cfc480133daba5 naxsi-0.54.tar.gz
+abc80d64fa48babcb99272fc7a0b15bfe887370e9f0021e64104c83c9e4ff448 fix-config-location.patch"
+sha512sums="91934bfd41495715269cc6e549d17f6da66f2bdd0c9a6821fa9096b694dd3927109c4aad2f8b327620ae7c34f76a0839ac16669cd8c65081bc01fa7f829c1d43 naxsi-0.54.tar.gz
+b2b62df3d50f03180c8720cb0008039bec45ac08d416617bb53631242b32f7d831016e6381a5b4735f5a00c4196366888123214a776470e47e1fe8c22adf45b8 fix-config-location.patch"
diff --git a/community/nxapi/fix-config-location.patch b/community/nxapi/fix-config-location.patch
new file mode 100644
index 0000000000..31ad21afdb
--- /dev/null
+++ b/community/nxapi/fix-config-location.patch
@@ -0,0 +1,26 @@
+--- nxapi/setup.py
++++ nxapi/setup.py.new
+@@ -6,18 +6,18 @@
+ import pprint
+
+ f = {}
+-data_files = [('/usr/local/nxapi/', ['nx_datas/country2coords.txt']),
+- ('/usr/local/etc/', ['nxapi.json'])]
++data_files = [('/etc/nginx/nxapi/', ['nx_datas/country2coords.txt']),
++ ('/etc/nginx/nxapi/', ['nxapi.json'])]
+ #modules = []
+ for dirname, dirnames, filenames in os.walk('tpl/'):
+ for filename in filenames:
+ if filename.endswith(".tpl"):
+ print dirname+"#"+filename
+- if "/usr/local/nxapi/"+dirname not in f.keys():
++ if "/etc/nginx/nxapi/"+dirname not in f.keys():
+
+- f["/usr/local/nxapi/"+dirname] = []
++ f["/etc/nginx/nxapi/"+dirname] = []
+
+- f["/usr/local/nxapi/"+dirname].append(os.path.join(dirname, filename))
++ f["/etc/nginx/nxapi/"+dirname].append(os.path.join(dirname, filename))
+
+ for z in f.keys():
+ data_files.append( (z, f[z]))
diff --git a/community/opencl-headers/APKBUILD b/community/opencl-headers/APKBUILD
new file mode 100644
index 0000000000..b23a78b1e9
--- /dev/null
+++ b/community/opencl-headers/APKBUILD
@@ -0,0 +1,42 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=opencl-headers
+pkgver=2.1
+_pkgreal=OpenCL-Headers
+pkgrel=0
+pkgdesc="OpenCL (Open Computing Language) header files"
+url="https://www.khronos.org/registry/cl/"
+arch="noarch"
+license="custom"
+depends=""
+depends_dev=""
+makedepends="$depends_dev"
+install=""
+subpackages="$pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::https://github.com/itoffshore/OpenCL-Headers/archive/$pkgver.tar.gz
+ $pkgname-$pkgver-LICENSE::https://github.com/KhronosGroup/OpenCL-ICD-Loader/raw/master/LICENSE.txt
+ "
+
+builddir="$srcdir"/$_pkgreal-$pkgver
+build() {
+ return 0
+}
+
+package() {
+ cd "$builddir"
+ mkdir -p "$pkgdir"/usr/include/CL
+ mkdir -p "$pkgdir"/usr/share/doc/$pkgname
+
+ for h in $(ls -1 *.h); do
+ install -m 644 $h "$pkgdir"/usr/include/CL/
+ done
+
+ install -D -m644 ../$pkgname-$pkgver-LICENSE "$pkgdir"/usr/share/doc/$pkgname/LICENSE
+}
+
+md5sums="04a5b1a34d0ce47520f08625d97ccfea opencl-headers-2.1.tar.gz
+ca6d58ec304a1ce6df094b52ca60c5ce opencl-headers-2.1-LICENSE"
+sha256sums="5d80fe3d9324b635e09d8891297c3c67e30635727d8dee99b9f3cefa73bf762e opencl-headers-2.1.tar.gz
+7c265341628a5f79ead4d8e00268649e16f2cb905ee21d713a2a0189cbd200b8 opencl-headers-2.1-LICENSE"
+sha512sums="0c475a6d44877289792ef055ed83df82c846e3c56df8dd1d3903965d6f817d99a7eb29b752be435f75485584036cb90e79e3c2035e2ddc99e04f30c0ada97edd opencl-headers-2.1.tar.gz
+d4bf5d67de13d6c67c935e4ada64469fba442d278a0469785d3d4221c94dec6b342ae703a30bd8b1510938d98afd9fb1813f3a14706037fb0f811466076154fb opencl-headers-2.1-LICENSE"
diff --git a/community/opencl-icd-loader/APKBUILD b/community/opencl-icd-loader/APKBUILD
new file mode 100644
index 0000000000..dbf14c208e
--- /dev/null
+++ b/community/opencl-icd-loader/APKBUILD
@@ -0,0 +1,41 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=opencl-icd-loader
+_pkgreal=ocl-icd
+pkgver=2.2.9
+pkgrel=0
+pkgdesc="Generic OpenCL ICD Loader"
+url="https://forge.imag.fr/projects/ocl-icd/"
+arch="all"
+license="custom"
+depends=""
+depends_dev="$pkgname"
+makedepends="$depends_dev ruby"
+install=""
+subpackages="$pkgname-dev $pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::https://forge.imag.fr/frs/download.php/716/$_pkgreal-$pkgver.tar.gz"
+
+builddir="$srcdir"/$_pkgreal-$pkgver
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ || return 1
+ # tests
+ #tests/testsuite || return 1
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ install -D -m644 COPYING "$pkgdir"/usr/share/doc/ocl-icd/LICENSE
+}
+
+md5sums="7dab1a9531ea79c19a414a9ee229504e opencl-icd-loader-2.2.9.tar.gz"
+sha256sums="0c8ac13e2c5b737c34de49f9aca6cad3c4d33dd0bbb149b01238d76e798feae5 opencl-icd-loader-2.2.9.tar.gz"
+sha512sums="d0b1531812feb493bdc27fd4a141796c2ecd14efd79cfa00af47c7c6edc1a7b323cd2d3b7254117a1cfa1c55e24494f662034041a0976b6ee5a6154626eb2d65 opencl-icd-loader-2.2.9.tar.gz"
diff --git a/community/opus-tools/APKBUILD b/community/opus-tools/APKBUILD
new file mode 100644
index 0000000000..361cd8f81c
--- /dev/null
+++ b/community/opus-tools/APKBUILD
@@ -0,0 +1,37 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=opus-tools
+pkgver=0.1.9
+pkgrel=0
+pkgdesc="Collection of tools for Opus audio codec"
+url="http://wiki.xiph.org/Opus-tools"
+arch="all"
+license="BSD"
+depends=""
+depends_dev=""
+makedepends="$depends_dev libogg-dev opus-dev flac-dev linux-headers"
+install=""
+subpackages="$pkgname-doc"
+source="pkgname-$pkgver.tar.gz::http://downloads.xiph.org/releases/opus/$pkgname-$pkgver.tar.gz"
+
+builddir="$srcdir"/$pkgname-$pkgver
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --mandir=/usr/share/man \
+ --enable-assertions \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install || return 1
+}
+
+md5sums="20682e4d8d1ae9ec5af3cf43e808b8cb pkgname-0.1.9.tar.gz"
+sha256sums="b1873dd78c7fbc98cf65d6e10cfddb5c2c03b3af93f922139a2104baedb4643a pkgname-0.1.9.tar.gz"
+sha512sums="e2cdc0c9c24297565f9d457893bcc548696b1a9c9b66e4cd48ddbe4dcf865bc50da5ed1b438b2b9ecdcd8be1d7c211d2be199f707cdbcd8a46a75353b0173a4c pkgname-0.1.9.tar.gz"
diff --git a/community/perl-authen-ntlm/APKBUILD b/community/perl-authen-ntlm/APKBUILD
new file mode 100644
index 0000000000..dd9a9a83a0
--- /dev/null
+++ b/community/perl-authen-ntlm/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-authen-ntlm
+pkgver=1.09
+_realname=NTLM-$pkgver
+pkgrel=0
+pkgdesc="NTLM authentication for Mail::IMAPClient"
+url="http://search.cpan.org/dist/NTLM/"
+arch="noarch"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/N/NB/NBEBOUT/$_realname.tar.gz"
+
+_builddir="$srcdir"/$_realname
+
+build() {
+ cd "$_builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="da314ee94b14af2a2f39b6f2c0046e73 NTLM-1.09.tar.gz"
+sha256sums="c823e30cda76bc15636e584302c960e2b5eeef9517c2448f7454498893151f85 NTLM-1.09.tar.gz"
+sha512sums="faae9a4a39f483a9612e5a7daec15bb8ddd940ccc73e52372dd004a9067336fccc4c490deafb3eaa0cf56c0dfe3a085cb6bba38631a5122c2f2fa6e960845039 NTLM-1.09.tar.gz"
diff --git a/community/perl-bit-vector/APKBUILD b/community/perl-bit-vector/APKBUILD
new file mode 100644
index 0000000000..740bde1c01
--- /dev/null
+++ b/community/perl-bit-vector/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: Fabian Affolter <fabian@affolter-engineering.ch>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-bit-vector
+_realname=Bit-Vector
+pkgver=7.4
+pkgrel=1
+pkgdesc="Efficient bit vector, set of integers, and big int math library"
+url="http://search.cpan.org/dist/Bit-Vector/"
+arch="all"
+license="PerlArtistic"
+depends="perl perl-carp-clan"
+depends_dev=""
+makedepends="perl-dev perl-carp-clan"
+install=""
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/$_realname-$pkgver.tar.gz"
+_builddir="$srcdir"/$_realname-$pkgver
+
+build() {
+ cd "$_builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="bf67f144e5be5327ed79d4c69e6e0086 Bit-Vector-7.4.tar.gz"
+sha256sums="3c6daa671fecfbc35f92a9385b563d65f50dfc6bdc8b4805f9ef46c0d035a926 Bit-Vector-7.4.tar.gz"
+sha512sums="80aa49aea8c31c60c14161198eab9d620d738530c3c209104b8ad8f1144822f80c3effb3303c569fc556b2457328659ae5d1aaf511d714c835618b84c722abc5 Bit-Vector-7.4.tar.gz"
diff --git a/community/perl-data-uniqid/APKBUILD b/community/perl-data-uniqid/APKBUILD
new file mode 100644
index 0000000000..06240f68d2
--- /dev/null
+++ b/community/perl-data-uniqid/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-data-uniqid
+pkgver=0.12
+_realname=Data-Uniqid-$pkgver
+pkgrel=0
+pkgdesc="Perl extension for simple generation of unique id's"
+url="http://search.cpan.org/dist/Data-Uniqid/"
+arch="noarch"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/M/MW/MWX/$_realname.tar.gz"
+
+_builddir="$srcdir"/$_realname
+
+build() {
+ cd "$_builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="6bab3b5da09fedfdf60ce2629a7367db Data-Uniqid-0.12.tar.gz"
+sha256sums="b6919ba49b9fe98bfdf3e8accae7b9b7f78dc9e71ebbd0b7fef7a45d99324ccb Data-Uniqid-0.12.tar.gz"
+sha512sums="fd12aae4a810fda88dd0f8296e73760d8d62357cb5ebc675a4b2804d9eee93ebfa01942c7057ad9092e80331504f2a38a3c8a576ccb630de10f5e563752ed6e3 Data-Uniqid-0.12.tar.gz"
diff --git a/community/perl-file-copy-recursive/APKBUILD b/community/perl-file-copy-recursive/APKBUILD
new file mode 100644
index 0000000000..d68d5594cc
--- /dev/null
+++ b/community/perl-file-copy-recursive/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-file-copy-recursive
+pkgver=0.38
+_realname=File-Copy-Recursive-$pkgver
+pkgrel=0
+pkgdesc="Perl extension for recursively copying files and directories"
+url="http://search.cpan.org/dist/File-Copy-Recursive/"
+arch="noarch"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/D/DM/DMUEY/$_realname.tar.gz"
+
+_builddir="$srcdir"/$_realname
+
+build() {
+ cd "$_builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="e76dc75ab456510d67c6c3a95183f72f File-Copy-Recursive-0.38.tar.gz"
+sha256sums="84ccbddf3894a88a2c2b6be68ff6ef8960037803bb36aa228b31944cfdf6deeb File-Copy-Recursive-0.38.tar.gz"
+sha512sums="49e5dbfc5bdbc554ad8a019c25db85ebfa55765a73758d95271b5f3de9550fd68b4d99aa287898d86bc6c11ea8de97469a85c53d4ad8534594b411be1f18eb87 File-Copy-Recursive-0.38.tar.gz"
diff --git a/community/perl-getopt-argvfile/APKBUILD b/community/perl-getopt-argvfile/APKBUILD
new file mode 100644
index 0000000000..95e9c9cb40
--- /dev/null
+++ b/community/perl-getopt-argvfile/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-getopt-argvfile
+pkgver=1.11
+_realname=Getopt-ArgvFile-$pkgver
+pkgrel=0
+pkgdesc="Interpolates script options from files into @ARGV or another array"
+url="http://search.cpan.org/dist/Getopt-ArgvFile/"
+arch="noarch"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/J/JS/JSTENZEL/$_realname.tar.gz"
+
+_builddir="$srcdir"/$_realname
+
+build() {
+ cd "$_builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="42117db2af4a24c062b2da25d4fdf756 Getopt-ArgvFile-1.11.tar.gz"
+sha256sums="3709aa513ce6fd71d1a55a02e34d2f090017d5350a9bd447005653c9b0835b22 Getopt-ArgvFile-1.11.tar.gz"
+sha512sums="832e9ec6de3dfa4aaac68faedd3561cac570761e0de805e084e8dc7b386579cd0a18278aeb262ea82fddbdf8277b17bbd7593c15d41b1d6d7de4739fc8cc8f11 Getopt-ArgvFile-1.11.tar.gz"
diff --git a/community/perl-io-tee/APKBUILD b/community/perl-io-tee/APKBUILD
new file mode 100644
index 0000000000..29198bab43
--- /dev/null
+++ b/community/perl-io-tee/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-io-tee
+pkgver=0.64
+_realname=IO-Tee-$pkgver
+pkgrel=0
+pkgdesc="Multiplex output to multiple output handles"
+url="http://search.cpan.org/dist/IO-Tee/"
+arch="noarch"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/K/KE/KENSHAN/$_realname.tar.gz"
+
+_builddir="$srcdir"/$_realname
+
+build() {
+ cd "$_builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="97d91e38fcadc1f01d8030a8d4f30701 IO-Tee-0.64.tar.gz"
+sha256sums="3ed276b1c2d3511338653c2532e73753d284943c1a8f5159ff37fecc2b345ed6 IO-Tee-0.64.tar.gz"
+sha512sums="9473a9ce3222ee6998cc53851a34051a9ae5990b9c514b5e5d322832d76f0e20d7af51bf7f06603ad927ab9789e5ab10da7a0693e4867112cd3e1dc1ca25d017 IO-Tee-0.64.tar.gz"
diff --git a/community/perl-iptables-chainmgr/APKBUILD b/community/perl-iptables-chainmgr/APKBUILD
new file mode 100644
index 0000000000..a9fd5f0565
--- /dev/null
+++ b/community/perl-iptables-chainmgr/APKBUILD
@@ -0,0 +1,41 @@
+# Automatically generated by apkbuild-cpan, template 1
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-iptables-chainmgr
+_pkgreal=IPTables-ChainMgr
+pkgver=1.5
+pkgrel=0
+pkgdesc="Perl extension for manipulating iptables and ip6tables policies"
+url="http://search.cpan.org/dist/IPTables-ChainMgr/"
+arch="noarch"
+license="artistic_1"
+cpandepends="perl-netaddr-ip perl-iptables-parse"
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/M/MR/MRASH/$_pkgreal-$pkgver.tar.gz"
+
+_builddir="$srcdir/$_pkgreal-$pkgver"
+
+prepare() {
+ cd "$_builddir"
+ export CFLAGS=`perl -MConfig -E 'say $Config{ccflags}'`
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+}
+
+build() {
+ cd "$_builddir"
+ export CFLAGS=`perl -MConfig -E 'say $Config{ccflags}'`
+ make && make test
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="21847466a9e83e3bdfd4ee2263dd6517 IPTables-ChainMgr-1.5.tar.gz"
+sha256sums="e0b2c58d95628f99a60234ab8148d72b3b4fbcb570c4997d905b8069bbfcdb59 IPTables-ChainMgr-1.5.tar.gz"
+sha512sums="e4232cad998750397cc4104138883a8e603a0e63a065be6a0245101fe851dbabce53808ed01c200c0f8e720a90788037aeb0f11b8065cd8db0f5aef419e6a184 IPTables-ChainMgr-1.5.tar.gz"
diff --git a/community/perl-iptables-parse/APKBUILD b/community/perl-iptables-parse/APKBUILD
new file mode 100644
index 0000000000..97aa093abe
--- /dev/null
+++ b/community/perl-iptables-parse/APKBUILD
@@ -0,0 +1,41 @@
+# Automatically generated by apkbuild-cpan, template 1
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-iptables-parse
+_pkgreal=IPTables-Parse
+pkgver=1.6.1
+pkgrel=0
+pkgdesc="Perl extension for parsing iptables and ip6tables firewall rulesets"
+url="http://search.cpan.org/dist/IPTables-Parse/"
+arch="noarch"
+license="artistic_1"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/M/MR/MRASH/$_pkgreal-$pkgver.tar.gz"
+
+_builddir="$srcdir/$_pkgreal-$pkgver"
+
+prepare() {
+ cd "$_builddir"
+ export CFLAGS=`perl -MConfig -E 'say $Config{ccflags}'`
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+}
+
+build() {
+ cd "$_builddir"
+ export CFLAGS=`perl -MConfig -E 'say $Config{ccflags}'`
+ make && make test
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="72299f0ab6e10a51837a48d51728a6f7 IPTables-Parse-1.6.1.tar.gz"
+sha256sums="b04a2fe8b021673f2035ac94784bb1c5353a0fd936ab8f093ad23af2b33106e4 IPTables-Parse-1.6.1.tar.gz"
+sha512sums="7638665e34f06771519bc8989ad57b6308c5efb39ecb32f3f6f208d0ece1675f499452f4b4b5b2ddd25109abecbdb5015e4441431defa8688f33f9eb2ad921eb IPTables-Parse-1.6.1.tar.gz"
diff --git a/community/perl-module-scandeps/APKBUILD b/community/perl-module-scandeps/APKBUILD
new file mode 100644
index 0000000000..13ad8f8673
--- /dev/null
+++ b/community/perl-module-scandeps/APKBUILD
@@ -0,0 +1,40 @@
+# Automatically generated by apkbuild-cpan, template 1
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-module-scandeps
+_pkgreal=Module-ScanDeps
+pkgver=1.20
+pkgrel=0
+pkgdesc="Recursively scan Perl code for dependencies"
+url="http://search.cpan.org/dist/Module-ScanDeps/"
+arch="noarch"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends="perl-test-requires"
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends perl-test-pod"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/R/RS/RSCHUPP/$_pkgreal-$pkgver.tar.gz"
+
+_builddir="$srcdir/$_pkgreal-$pkgver"
+
+prepare() {
+ cd "$_builddir"
+ export CFLAGS=`perl -MConfig -E 'say $Config{ccflags}'`
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+}
+
+build() {
+ cd "$_builddir"
+ export CFLAGS=`perl -MConfig -E 'say $Config{ccflags}'`
+ make && make test
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="283e4d4f215d6ce6a05c13e9b740f842 Module-ScanDeps-1.20.tar.gz"
+sha256sums="72003547e36db833f920eb85247943b755c94ded998e640bae20ff37d6104691 Module-ScanDeps-1.20.tar.gz"
+sha512sums="1756c48d8932d50f03e5440e9b1a1c38c4f795c5701d6c9704cef88ac1162efeefb863f003b105b8516bb9cb8113c9c8524e7c6847070450228ef6baeb4d578d Module-ScanDeps-1.20.tar.gz"
diff --git a/community/perl-par-dist/APKBUILD b/community/perl-par-dist/APKBUILD
new file mode 100644
index 0000000000..450b0585a3
--- /dev/null
+++ b/community/perl-par-dist/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-par-dist
+pkgver=0.49
+_realname=PAR-Dist-$pkgver
+pkgrel=0
+pkgdesc="Create and manipulate PAR distributions"
+url="http://search.cpan.org/dist/PAR-Dist/"
+arch="noarch"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/R/RS/RSCHUPP/PAR-Dist-0.49.tar.gz"
+
+_builddir="$srcdir"/$_realname
+
+build() {
+ cd "$_builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="bd852113974544f3c8c107ab4055cf8c PAR-Dist-0.49.tar.gz"
+sha256sums="9e47220b594a27bd1750bcfa1d6f60a57ae670c68ce331895a79f08bac671e1d PAR-Dist-0.49.tar.gz"
+sha512sums="5b0b69e9436d49ab47c4bca8d48790bbc04fec526eeec96a75c768b13f318cf3a0fb2b1a3ab9f835fb4326af2d1339f85257ec5e96f4dfe0efd77c9a36a89acc PAR-Dist-0.49.tar.gz"
diff --git a/community/perl-par-packer/APKBUILD b/community/perl-par-packer/APKBUILD
new file mode 100644
index 0000000000..65980207ce
--- /dev/null
+++ b/community/perl-par-packer/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-par-packer
+pkgver=1.035
+_realname=PAR-Packer-$pkgver
+pkgrel=0
+pkgdesc="App::Packer::Backend interface, for generating stand-alone executables, perl scripts and PAR files"
+url="http://search.cpan.org/dist/Par-Packer/"
+arch="all"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends perl-archive-zip perl-par perl-par-dist perl-module-scandeps perl-getopt-argvfile"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/R/RS/RSCHUPP/$_realname.tar.gz"
+
+_builddir="$srcdir"/$_realname
+
+build() {
+ cd "$_builddir"
+ mkdir blib
+ cp -rf lib script blib/ # fix parallel install issue on build server
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="b5ef61f4971a711c35985fa19ed87468 PAR-Packer-1.035.tar.gz"
+sha256sums="2fefd598cfca960796ba0ac8bcb29b4015be1b6d7b0893dfa2ac22dc2c8fc3ae PAR-Packer-1.035.tar.gz"
+sha512sums="084001e99d27849d274c9d76da3295d09970ca42c3980517f6cfedd9ab9eaca665183a4cc2b6db5cb48677d4680e2e508ea14e6862592ce6d3e488d8c48fdfc6 PAR-Packer-1.035.tar.gz"
diff --git a/community/perl-par/APKBUILD b/community/perl-par/APKBUILD
new file mode 100644
index 0000000000..1c933eb8d6
--- /dev/null
+++ b/community/perl-par/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-par
+pkgver=1.010
+_realname=PAR-$pkgver
+pkgrel=0
+pkgdesc="PAR - Perl Archive Toolkit"
+url="http://search.cpan.org/dist/File-Copy-Recursive/"
+arch="noarch"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/R/RS/RSCHUPP/$_realname.tar.gz"
+
+_builddir="$srcdir"/$_realname
+
+build() {
+ cd "$_builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="145d68a1f0de0f893e957c7619cc2707 PAR-1.010.tar.gz"
+sha256sums="78af355e757a55bfec0db4a02d62c402c5c56b31e8d317f70a31fc963b2e7e51 PAR-1.010.tar.gz"
+sha512sums="57e2c39927402c353ee356ae9b91b4233614afa9dca61c3c2effbe2db8b6c653949cc424b637d12dc89668ddf7f49a38d2e6610521410e613e061c0f980b304d PAR-1.010.tar.gz"
diff --git a/community/perl-uri-escape/APKBUILD b/community/perl-uri-escape/APKBUILD
new file mode 100644
index 0000000000..c55aae18e3
--- /dev/null
+++ b/community/perl-uri-escape/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=perl-uri-escape
+pkgver=1.69
+_realname=URI-$pkgver
+pkgrel=0
+pkgdesc="Percent-encode and percent-decode unsafe characters"
+url="http://search.cpan.org/dist/URI/"
+arch="noarch"
+license="GPL PerlArtistic"
+cpandepends=""
+cpanmakedepends=""
+depends="$cpandepends"
+makedepends="perl-dev $cpanmakedepends"
+subpackages="$pkgname-doc"
+source="http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/$_realname.tar.gz"
+
+_builddir="$srcdir"/$_realname
+
+build() {
+ cd "$_builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+md5sums="3c56aee0300bce5a440ccbd558277ea0 URI-1.69.tar.gz"
+sha256sums="b74b16ea626b6f8061821bb350674c638a98be1fc766eadb24fec6635998b42d URI-1.69.tar.gz"
+sha512sums="4e58cd450c58be4c3e0254c8e53bd0b4d3516468efb466c933343efc12191856bfc6c0d5c3de3b523e66d4930c2426f0089d5cd9ece7b4a5b8aff0a9596064cc URI-1.69.tar.gz"
diff --git a/community/psad/APKBUILD b/community/psad/APKBUILD
new file mode 100644
index 0000000000..9feaf89eb2
--- /dev/null
+++ b/community/psad/APKBUILD
@@ -0,0 +1,109 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=psad
+pkgver=2.4.3
+pkgrel=0
+pkgdesc="3 lightweight system daemons that analyze iptables log messages to detect port scans and other suspicious traffic"
+url="http://cipherdyne.org/psad/"
+arch="all"
+license="GPL"
+depends="perl iptables ip6tables ssmtp mailx psmisc perl-bit-vector perl-date-calc perl-iptables-chainmgr \
+ perl-iptables-parse perl-net-ipv4addr perl-unix-syslog net-tools whois"
+subpackages="$pkgname-doc"
+source="http://cipherdyne.org/psad/download/$pkgname-nodeps-$pkgver.tar.gz
+ psad.initd
+ psad.confd
+ "
+
+_builddir="$srcdir"/$pkgname-nodeps-$pkgver
+
+build() {
+ cd "$_builddir"
+
+ #Set the config dirs
+ sed -e "s|'/usr/sbin'|'$pkgdir/usr/sbin'|" \
+ -e "s|'/usr/bin'|'$pkgdir/usr/bin'|" \
+ -e "s|my \$mpath = \"/usr/share/man/man\$section\";|my \$mpath = \"$pkgdir/usr/share/man/man\$section\";|" \
+ ./install.pl -i
+ #/usr/sbin/psadwatchd set with last cmd
+ sed -e "s|/var/log/psad|$pkgdir&|" \
+ -e "s|/var/run/psad|$pkgdir&|" \
+ -e "s|/var/lib/psad|$pkgdir&|" \
+ -e "s|/usr/lib/psad|$pkgdir&|" \
+ -e "s|/etc/psad|$pkgdir&|" \
+ -e "s|/usr/bin/whois_psad|$pkgdir/usr/bin/whois|" \
+ -e "s|/usr/sbin/fwcheck_psad|$pkgdir&|" \
+ -e "s|/usr/sbin/kmsgsd|$pkgdir&|" \
+ -e "s|/usr/sbin/psad|$pkgdir&|" \
+ ./psad.conf -i
+
+ # set mail command to mailx
+ sed -e 's|/bin/mail;|/usr/bin/mail;|g' -i ./psad.conf
+
+ #Disable install of generic init script & setting numeric run level
+ START=$(sed -n '/if ($init_dir and &is_root()) {/=' ./install.pl)
+ END=$(expr $START + 7)
+ #Busybox sed does not support +7d
+ sed -e ''$START','$END'd' ./install.pl -i
+
+ #populate install.answers so build does not wait for them
+ echo -e "Would you like to merge the config from the existing psad installation:\t y;" > ./install.answers
+ echo -e "Preserve any user modfications in etc psad signatures:\t y;" >> ./install.answers
+ echo -e "Preserve any user modfications in etc psad icmp_types:\t y;" >> ./install.answers
+ echo -e "Preserve any user modfications in etc psad icmp6_types:\t y;" >> ./install.answers
+ echo -e "Preserve any user modfications in etc psad posf:\t y;" >> ./install.answers
+ echo -e "Preserve any user modfications in etc psad auto_dl:\t y;" >> ./install.answers
+ echo -e "Preserve any user modfications in etc psad snort_rule_dl:\t y;" >> ./install.answers
+ echo -e "Preserve any user modfications in etc psad pf os:\t y;" >> ./install.answers
+ echo -e "Preserve any user modfications in etc psad ip_options:\t y;" >> ./install.answers
+ echo -e "Would you like alerts sent to a different address:\t y;" >> ./install.answers
+ echo -e "Email addresses:\t root@localhost;" >> ./install.answers
+ echo -e "Would you like psad to only parse specific strings in iptables messages:\t n;" >> ./install.answers
+ echo -e "First is it ok to leave the HOME_NET setting as any:\t y;" >> ./install.answers
+ echo -e "Would you like to enable DShield alerts:\t n;" >> ./install.answers
+ echo -e "Would you like to install the latest signatures from http www cipherdyne org psad signatures:\t n;" >> ./install.answers
+ echo -e "Enable psad at boot time:\t n;" >> ./install.answers
+}
+
+package() {
+ cd "$_builddir"
+
+ mkdir -p $pkgdir/etc/psad \
+ $pkgdir/usr/bin \
+ $pkgdir/usr/sbin \
+ $pkgdir/usr/share/man/man8 \
+ $pkgdir/var/lib/psad \
+ $pkgdir/var/log/psad \
+ $pkgdir/var/run/psad
+ # add dummy whois so build completes
+ ln -s /bin/busybox $pkgdir/usr/bin/whois
+ # dummy runlevel 1 / skip perl module installation
+ ./install.pl --runlevel 1 --Use-answers --Skip-mod-install
+
+ #Set correct permissions
+ chmod -R o+r $pkgdir/etc/psad
+ chmod -R o+r $pkgdir/usr/sbin/*
+ chmod 0700 $pkgdir/var/lib/psad
+ #remove whois symbolic link
+ rm -f $pkgdir/usr/bin/whois
+
+ # Fix the config
+ sed -e "s|$pkgdir||" $pkgdir/etc/psad/psad.conf -i
+ sed -e "s|$pkgdir||" $pkgdir/var/log/psad/install.log -i
+
+ #install init script & config defaults
+ install -m755 -D "$srcdir"/$pkgname.initd \
+ "$pkgdir"/etc/init.d/$pkgname || return 1
+ install -m644 -D "$srcdir"/$pkgname.confd \
+ "$pkgdir"/etc/conf.d/$pkgname || return 1
+}
+
+md5sums="644e6094c5142f54cdca6e7429825307 psad-nodeps-2.4.3.tar.gz
+b7d0fa3ee0b711a92f25ff8188dbf75b psad.initd
+bc07efebb41cc23c4be129bbbacc874b psad.confd"
+sha256sums="c5a90f4c284c0eda3b24c5fcd9d0fd0e464ad8bf0fe7559ac6ecc41bb81e0b65 psad-nodeps-2.4.3.tar.gz
+1a5b8f1b014a9f78b43cd6e4e1006d6901a654fc51dcbe2c405d509b4a950a78 psad.initd
+74c72225fa37c367a458321b737050cacaf262f32b0cc13babc54468ff1988b9 psad.confd"
+sha512sums="9234a2ed534f571fb46d7566313802813076b9a3f2011695288b7b1a5c4f3f22cefc6ea99e087cbeb1072d61c278c11a28b5aaa4e4024d8bb459dda4873840d2 psad-nodeps-2.4.3.tar.gz
+f9f7e5e9da9de2f2258ae1b36e22e59faf950c7110de869c3581f7a89cd6dfdc96aa4db06a4ceca0ac016e8adbeb1e3bca3da66a565aec8a1ddf2808e93897c2 psad.initd
+a80666f59356cc6157a9f5dca132991d4f1e0afda8f673d602de2557219d5521bec9ae148330e98d9483175d14d96e4cc2ccd11541d8b187b0e47f44ba4ada54 psad.confd"
diff --git a/community/psad/psad.confd b/community/psad/psad.confd
new file mode 100644
index 0000000000..27ce228e92
--- /dev/null
+++ b/community/psad/psad.confd
@@ -0,0 +1,8 @@
+# Default settings for psad.
+
+# Add any options you would like to pass to the daemon when started
+# For example if you would like to add an override file for your setup, this
+# can be achived this way:
+#
+# command_args="--Override-config /root/psad.override.conf"
+command_args=""
diff --git a/community/psad/psad.initd b/community/psad/psad.initd
new file mode 100644
index 0000000000..4a78c701c6
--- /dev/null
+++ b/community/psad/psad.initd
@@ -0,0 +1,51 @@
+#!/sbin/openrc-run
+
+# This file is part of PSAD (Port Scan Attack Detector)
+# Adapted for Alpine Linux by IT Offshore <developer@it-offshore.co.uk>
+
+command="/usr/sbin/psad"
+pidfile="/var/run/psad/psad.pid"
+config_file="/etc/psad/psad.conf"
+
+depend() {
+ need net
+ need logger
+ after iptables
+}
+
+# allow override config_file location from conf.d
+: ${config_file:="/etc/psad/psad.conf"}
+
+check_config() {
+ [ -f "$config_file" ] || error "$config_file is missing"
+}
+
+start_pre() {
+ check_config || return 1
+ # make sure dir for pidfile exists. /var/run is tmpfs...
+ checkpath --directory ${pidfile%/*}
+}
+
+start() {
+ ebegin "Starting PSAD (Port Scan Attack Detector)"
+ start-stop-daemon --start $command --pidfile $pidfile
+ eend $?
+}
+
+stop() {
+ local piddir=${pidfile%/*}
+ ebegin "Stopping psadwatchd"
+ start-stop-daemon --stop --quiet --pidfile $piddir/psadwatchd.pid
+ eend $? "Failed to stop psadwatchd"
+
+ if [ -f $piddir/kmsgsd.pid ] ; then
+ ebegin "Stopping kmsgsd"
+ start-stop-daemon --stop --quiet --pidfile $piddir/kmsgsd.pid
+ eend $? "Failed to stop kmsgsd"
+ fi
+
+ ebegin "Stopping ${SVCNAME}"
+ start-stop-daemon --stop --quiet --pidfile $piddir/psad.pid
+ eend $? "Failed to stop ${SVCNAME}"
+}
+
diff --git a/community/py-crcmod/APKBUILD b/community/py-crcmod/APKBUILD
new file mode 100644
index 0000000000..777205b8a1
--- /dev/null
+++ b/community/py-crcmod/APKBUILD
@@ -0,0 +1,38 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=py-crcmod
+_pkgname=crcmod
+pkgver=1.7
+pkgrel=0
+pkgdesc="Cyclic Redundancy Check (CRC) implementation in Python"
+url="https://pypi.python.org/pypi/crcmod/"
+arch="all"
+license="MIT"
+depends="python"
+makedepends="python-dev"
+source="https://files.pythonhosted.org/packages/source/c/$_pkgname/$_pkgname-$pkgver.tar.gz"
+
+_builddir="$srcdir"/$_pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ python setup.py build || return 1
+}
+
+package() {
+ cd "$_builddir"
+ python setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 || return 1
+}
+
+md5sums="2d5b92117d958dcead94f9e17f54cd32 crcmod-1.7.tar.gz"
+sha256sums="dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e crcmod-1.7.tar.gz"
+sha512sums="3c2f65004761c84f19d6ba95a0af74512108bad5007d9e20f8e684822e4196ce17073e58b47d2fa997e058e3d82782f3393458b6f0e86935418f38877d319a31 crcmod-1.7.tar.gz"
diff --git a/community/py-graphviz/APKBUILD b/community/py-graphviz/APKBUILD
new file mode 100644
index 0000000000..6c4694b529
--- /dev/null
+++ b/community/py-graphviz/APKBUILD
@@ -0,0 +1,42 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=py-graphviz
+pkgver=1.3_rc2
+_ver=${pkgver/_/}
+pkgrel=0
+pkgdesc="Python interface to Graphviz"
+url="https://pypi.python.org/pypi/pygraphviz | http://graphviz.org/"
+arch="all"
+license="BSD"
+depends="python"
+depends_dev=""
+makedepends="python-dev graphviz-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://github.com/pygraphviz/pygraphviz/archive/pygraphviz-$_ver.tar.gz"
+
+_builddir="$srcdir"/pygraphviz-pygraphviz-$_ver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ export PYTHON=python2.7
+ python setup.py build || return 1
+}
+
+package() {
+ cd "$_builddir"
+ python setup.py install --prefix=/usr --root="$pkgdir" || return 1
+}
+
+md5sums="91f6d57dfc63cefa12c38eba3f09db09 pygraphviz-1.3rc2.tar.gz"
+sha256sums="46737437bd872788b376aeddef9176def9f87339deed739f6769ee8dbe68121f pygraphviz-1.3rc2.tar.gz"
+sha512sums="f1ed6e52a07320701e788696b8dc46d0903bdbd740645f07658265bb9dea411b43d90d97ecb2ed658fec4c53fa966d89f5feef0aa62acb4157f6ba662475d876 pygraphviz-1.3rc2.tar.gz"
diff --git a/community/py-lz4/01-system_lz4.patch b/community/py-lz4/01-system_lz4.patch
new file mode 100644
index 0000000000..62a9c9dea9
--- /dev/null
+++ b/community/py-lz4/01-system_lz4.patch
@@ -0,0 +1,36 @@
+Last-Update: 2014-08-10
+Forwarded: not-needed
+Author: Dmitry Smirnov <onlyjob@member.fsf.org>
+Description: un-bundle liblz4 and link to the system one
+
+--- a/setup.py
++++ b/setup.py
+@@ -16,11 +16,11 @@
+ packages=find_packages('src'),
+ package_dir={'': 'src'},
+ ext_modules=[
+ Extension('lz4', [
+- 'src/lz4.c',
+- 'src/lz4hc.c',
+ 'src/python-lz4.c'
++ ], libraries=[
++ "lz4",
+ ], extra_compile_args=[
+ "-std=c99",
+ "-O3",
+ "-Wall",
+--- a/src/python-lz4.c
++++ b/src/python-lz4.c
+@@ -32,10 +32,10 @@
+ #include <Python.h>
+ #include <stdlib.h>
+ #include <stdint.h>
+ #include <math.h>
+-#include "lz4.h"
+-#include "lz4hc.h"
++#include <lz4.h>
++#include <lz4hc.h>
+ #include "python-lz4.h"
+
+ #define MAX(a, b) ((a) > (b) ? (a) : (b))
+
diff --git a/community/py-lz4/02-tests.patch b/community/py-lz4/02-tests.patch
new file mode 100644
index 0000000000..dc1cb06926
--- /dev/null
+++ b/community/py-lz4/02-tests.patch
@@ -0,0 +1,24 @@
+Last-Update: 2014-08-10
+Origin: https://github.com/steeve/python-lz4/blob/master/tests/test.py
+Forwarded: not-needed
+Author: Dmitry Smirnov <onlyjob@member.fsf.org>
+Description: add basic test
+
+--- /dev/null
++++ b/tests/test.py
+@@ -0,0 +1,15 @@
++import lz4
++import sys
++
++
++import unittest
++import os
++
++class TestLZ4(unittest.TestCase):
++
++ def test_random(self):
++ DATA = os.urandom(128 * 1024) # Read 128kb
++ self.assertEqual(DATA, lz4.loads(lz4.dumps(DATA)))
++
++if __name__ == '__main__':
++ unittest.main()
diff --git a/community/py-lz4/APKBUILD b/community/py-lz4/APKBUILD
new file mode 100644
index 0000000000..91eb14d243
--- /dev/null
+++ b/community/py-lz4/APKBUILD
@@ -0,0 +1,40 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=py-lz4
+pkgver=0.7.0
+_pkgname=${pkgname#py-}
+pkgrel=0
+pkgdesc="LZ4 Bindings for Python"
+url="https://pypi.python.org/pypi/lz4"
+arch="all"
+license="BSD"
+depends="python"
+depends_dev=""
+makedepends="python-dev py-setuptools lz4-dev"
+install=""
+subpackages=""
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz
+ 01-system_lz4.patch
+ 02-tests.patch
+ "
+
+builddir="$srcdir"/$_pkgname-$pkgver
+build() {
+ cd "$builddir"
+ python setup.py build || return 1
+}
+
+package() {
+ cd "$builddir"
+ python setup.py install --prefix=/usr --root="$pkgdir" || return 1
+}
+
+md5sums="e32842a49d5254f6918567197a704492 lz4-0.7.0.tar.gz
+fda5c197a766d61d0b1ffcaaf54552e3 01-system_lz4.patch
+cba5b0e90428e8451ddbc6f3ba480fbe 02-tests.patch"
+sha256sums="cd225744298568fd217577fc14a326a24835412374dadb5060db48f1af43eb48 lz4-0.7.0.tar.gz
+b6efbab93b4bbf69c5de40a61993a8ca332a4115e87448ad51907efd74bd5bbb 01-system_lz4.patch
+f0573be2656fcad5afdb7ecb25d7ce939505cfcfc2c9ad9d9bde21c9af3151fe 02-tests.patch"
+sha512sums="fd7adc4919e70259e5b23b15919c4932354a4518360315a8d6c15c58cdccf21257fb6069bdf20e86a2461f254b50f4abd7296330fd77647ecc2ca49500eedd11 lz4-0.7.0.tar.gz
+8e30ebe4b0074195f66c9f174006b7730a2a172f76d863ad4dbf0c282f8dc342ecc6e33bf0e1f691bbdace9ef6a13969a3271f39fe8bdbe2f4234397ca1fc0b8 01-system_lz4.patch
+68e84522478af8bdf741b45cdc4b4b4367fd7831452c8f0e5b127f58cc26e698e83931dc43d3016e2714d7497de7f6c112c720e379ce5c411b2f67e89b298ed8 02-tests.patch"
diff --git a/community/py-opencl/APKBUILD b/community/py-opencl/APKBUILD
new file mode 100644
index 0000000000..b0a7999ae4
--- /dev/null
+++ b/community/py-opencl/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=py-opencl
+_pkgreal=${pkgname/-/}
+pkgver=2016.1
+pkgrel=0
+pkgdesc="Python wrapper for OpenCL"
+url="https://pypi.python.org/pypi/pyopencl"
+arch="all"
+license="MIT"
+depends="python"
+depends_dev="$pkgname"
+makedepends="python-dev py-setuptools py-mako py-numpy ctags libffi-dev mesa-dev opencl-headers opencl-icd-loader-dev"
+install=""
+subpackages="$pkgname-dev"
+source="https://files.pythonhosted.org/packages/source/${_pkgreal:0:1}/$_pkgreal/$_pkgreal-$pkgver.tar.gz"
+
+builddir="$srcdir"/$_pkgreal-$pkgver
+build() {
+ cd "$builddir"
+ python configure.py --cl-enable-gl --python-exe=python || return 1
+ make || return 1
+ python setup.py test
+}
+
+package() {
+ cd "$builddir"
+ python setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 --skip-build || return 1
+}
+
+md5sums="0c8a33b6a6b427bcd9c5966da461d9c6 pyopencl-2016.1.tar.gz"
+sha256sums="54b6e8ad02dc437807739bd53e43851efe979bd51ec87996e44b94ab67238297 pyopencl-2016.1.tar.gz"
+sha512sums="3be8da315f9b4a4e03071152bb5968c5c7b102cbae6c70f358438cfd7951d12970a76dd8e922187ff73e47f7d0ce7a070e6f303dbe364c016796fa65d7e1de71 pyopencl-2016.1.tar.gz"
diff --git a/community/py-opengl-accelerate/APKBUILD b/community/py-opengl-accelerate/APKBUILD
new file mode 100644
index 0000000000..c0006aaec7
--- /dev/null
+++ b/community/py-opengl-accelerate/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=py-opengl-accelerate
+pkgver=3.1.1
+_pkgreal=PyOpenGL-accelerate-${pkgver}a1
+pkgrel=0
+pkgdesc="OpenGL bindings for Python (Cython extensions)"
+url="http://pyopengl.sourceforge.net/"
+arch="all"
+license="BSD"
+depends="cython"
+depends_dev=""
+makedepends="cython-dev"
+install=""
+subpackages=""
+source="https://files.pythonhosted.org/packages/source/P/PyOpenGL-accelerate/$_pkgreal.tar.gz"
+
+builddir="$srcdir"/$_pkgreal
+build() {
+ cd "$builddir"
+ python setup.py build || return 1
+}
+
+package() {
+ cd "$builddir"
+ python setup.py install --prefix=/usr --root="$pkgdir" || return 1
+}
+
+md5sums="04e52af352dd078275a2d5720c4afea2 PyOpenGL-accelerate-3.1.1a1.tar.gz"
+sha256sums="3d37af9f2565febf214e1da2a5fe019561992d34026ce2a5f51972e121b84cdd PyOpenGL-accelerate-3.1.1a1.tar.gz"
+sha512sums="6881e3b435da5a33ff31c0991f403166236b44a5bd21ca60418d131dafc1159d6b1c73e60b935d1761d4fc848b824422abbe0e850fe860fa694b64536dddc35c PyOpenGL-accelerate-3.1.1a1.tar.gz"
diff --git a/community/runit/APKBUILD b/community/runit/APKBUILD
new file mode 100644
index 0000000000..fea0f14f38
--- /dev/null
+++ b/community/runit/APKBUILD
@@ -0,0 +1,66 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=runit
+pkgver=2.1.2
+pkgrel=3
+pkgdesc="UNIX init scheme with service supervision"
+url="http://smarden.org/runit/"
+arch="all"
+license="BSD"
+depends=""
+depends_dev=""
+makedepends="$depends_dev"
+install=""
+subpackages="$pkgname-doc"
+source="http://smarden.org/runit/runit-$pkgver.tar.gz
+ run-service-dir.patch
+ README.alpine
+ $pkgname.initd
+ "
+
+_builddir="$srcdir"/admin/runit-$pkgver/src
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+ echo "$CC $CFLAGS" > conf-cc
+ echo "$CC $LDFLAGS" > conf-ld
+}
+
+build() {
+ cd "$_builddir"
+ make
+}
+
+package() {
+ cd "$_builddir"
+ install -d "$pkgdir"/sbin
+ for i in chpst runit runit-init runsv runsvchdir runsvdir sv svlogd utmpset; do
+ install -m755 "$i" "$pkgdir"/sbin/$i || return 1
+ done
+ install -d "$pkgdir"/usr/share/man/man8
+ cd .. && cp -rf man/* "$pkgdir"/usr/share/man/man8/
+ install -m755 -D "$srcdir"/$pkgname.initd \
+ "$pkgdir"/etc/init.d/runitd || return 1
+ install -Dm644 "$srcdir"/README.alpine \
+ "$pkgdir"/usr/share/doc/$pkgname/README.alpine || return 1
+ mkdir -p "$pkgdir"/etc/service
+ mkdir -p "$pkgdir"/etc/sv
+}
+
+md5sums="6c985fbfe3a34608eb3c53dc719172c4 runit-2.1.2.tar.gz
+13b3d1e097d58c7fe78c8c2ae9c829ff run-service-dir.patch
+735265c11ac8653fe61615e5756af272 README.alpine
+df31f105e66ee755fd990ba7184884ed runit.initd"
+sha256sums="6fd0160cb0cf1207de4e66754b6d39750cff14bb0aa66ab49490992c0c47ba18 runit-2.1.2.tar.gz
+b051476a9cea0673cdd3f849c33555e364540f49436ab7d05f5aeee553d84ab7 run-service-dir.patch
+6a49cdf4c9fd8326d9e3fed3df8ff6fae47f60fd586b56d561e0b2d629ea949a README.alpine
+aed913227ba4035fe0a84423610817f551ea890d5c5d5a64399b504b2d6f7cc1 runit.initd"
+sha512sums="a18773ebf1aa22305dd89ed67363165b9fcf86c192b2be4e268d08005dd82d51265160c637abe072f2f2e378c4b315a75bd3d3e602c3e75bdd451a3b0190f8cf runit-2.1.2.tar.gz
+7107da162f7c13e1483f17bf04a844c23a8d1b81ef982c3d956a4c0e23b2a20e415850f0b95999b1eb1e04638284884948937377756ca080037bd6455e3301e8 run-service-dir.patch
+88d1efcf366add7803ed026ec8e693b271c842d4e3d5a52587b7ead96266ee27b4ceb1b2696551243f0d9efa93199a07231d2b37186ce1535e9a6b9d90192909 README.alpine
+32487bec20e1313eae2e9f315b5b82c67c93c11f15b737f00469006f5fd7f2944ac91887e6ceefa2934fc02f83d4184af9db74acad381a4d9caf952f76621a60 runit.initd"
diff --git a/community/runit/README.alpine b/community/runit/README.alpine
new file mode 100644
index 0000000000..e6b04f03e2
--- /dev/null
+++ b/community/runit/README.alpine
@@ -0,0 +1,56 @@
+For service supervision with runit:
+
+(1) add scripts into /etc/sv/<service>/run
+
+------------------------------
+Example: /etc/sv/nginx/run |
+------------------------------
+#!/bin/sh
+mkdir -p /tmp/nginx
+exec /usr/sbin/nginx
+------------------------------
+Example: /etc/sv/ssh/run |
+------------------------------
+#!/bin/sh
+set -e
+ssh-keygen -A
+exec /usr/sbin/sshd -D
+------------------------------
+Example: /etc/sv/mysqld/run |
+------------------------------
+#!/bin/sh
+libs=/var/lib/mysql
+socket=/run/mysqld
+mkdir -p $socket
+chown mysql:mysql $socket
+chown -R mysql:mysql $libs
+exec chpst -u mysql:mysql mysqld --user=mysql 2>&1
+--------------------------------------------------
+Example: /etc/sv/pgsql/run |
+--------------------------------------------------
+#!/bin/sh
+. /etc/conf.d/postgresql
+chown -R postgres:postgres ${PGDATA}
+exec setuidgid postgres /usr/bin/postgres -D ${PGDATA} -o "$PGOPTS" 2>&1
+---------------------------------------------------------------------------------
+Example: /etc/sv/tinyssh/run |
+---------------------------------------------------------------------------------
+#!/bin/sh
+PORT=22
+mkdir -p /etc/tinyssh
+/usr/sbin/tinysshd-makekey /etc/tinyssh/sshkeys 2>/dev/null
+exec tcpserver -HRDl0 0.0.0.0 $PORT /usr/sbin/tinysshd -v -l /etc/tinyssh/sshkeys
+---------------------------------------------------------------------------------
+
+(2) set permissions:
+
+chmod 700 /etc/sv/<service>/run
+
+(3) symlink the script directory to the service directory:
+
+ln -s /etc/sv/nginx /etc/service/nginx
+
+==========================================================
+
+The socklog package by the same author can provide logging
+with built in log rotation & also be managed by runit.
diff --git a/community/runit/run-service-dir.patch b/community/runit/run-service-dir.patch
new file mode 100644
index 0000000000..eff50b0e0a
--- /dev/null
+++ b/community/runit/run-service-dir.patch
@@ -0,0 +1,11 @@
+--- ./sv.c.orig
++++ ./sv.c
+@@ -32,7 +32,7 @@
+ char *progname;
+ char *action;
+ char *acts;
+-char *varservice ="/service/";
++char *varservice ="/etc/service/";
+ char **service;
+ char **servicex;
+ unsigned int services;
diff --git a/community/runit/runit.initd b/community/runit/runit.initd
new file mode 100644
index 0000000000..2f3a0968dc
--- /dev/null
+++ b/community/runit/runit.initd
@@ -0,0 +1,14 @@
+#!/sbin/openrc-run
+
+command="/sbin/runsvdir"
+command_args="/etc/service"
+pidfile="/run/${SVCNAME}.pid"
+command_background="true"
+description="starts and monitors a collection of runsv(8) processes"
+retry="SIGHUP/5"
+
+depend() {
+ need localmount
+ after firewall
+}
+
diff --git a/community/secpwgen/APKBUILD b/community/secpwgen/APKBUILD
new file mode 100644
index 0000000000..7862a26232
--- /dev/null
+++ b/community/secpwgen/APKBUILD
@@ -0,0 +1,57 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=secpwgen
+pkgver=1.3
+pkgrel=0
+pkgdesc="secure password generator"
+url="http://zvrba.net/"
+arch="all"
+license="MIT"
+depends=""
+depends_dev="openssl-dev"
+makedepends="$depends_dev"
+subpackages="$pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::https://github.com/itoffshore/$pkgname/archive/v$pkgver.tar.gz
+ make-openssl.patch
+ "
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ mv Makefile.proto Makefile || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ mkdir -p "$pkgdir"/usr/bin
+ mkdir -p "$pkgdir"/usr/share/man/man1
+ install -m 755 secpwgen "$pkgdir"/usr/bin || return 1
+ install -m 644 secpwgen.1 "$pkgdir"/usr/share/man/man1 || return 1
+ # post-install message
+ mkdir -p "$pkgdir/usr/share/doc/$pkgname"
+ cat > $pkgdir/usr/share/doc/$pkgname/README.alpine <<EOF
+To increase entropy in your system:
+-----------------------------------
+apk add haveged
+rc-update add haveged
+rc-service haveged start
+EOF
+}
+
+md5sums="c53da1931bb480e77691c7602fc28408 secpwgen-1.3.tar.gz
+0b54c4a66ae423d3f7f28b8f091f071a make-openssl.patch"
+sha256sums="ae2e33db5c94a18d55ad50563b026f3aecd9d4f6ebb19b2dcc9a68625fd1f509 secpwgen-1.3.tar.gz
+8b8a3b308eb75de5c54e8da0677280ef326f256c18c5e5ac816723d969e3f95a make-openssl.patch"
+sha512sums="a18b5405ae5f6a62c25dd61654ea897b2f099fa459530bc6cfdbe79d96bfa6b4943e4ba2456ad5355d37cababe585299638afe56ff1a9fc649b6df0b7aa1e269 secpwgen-1.3.tar.gz
+d9e4f84ab0d557ecc4c57152ea78fd2c610f36d2ea4ae87f690944ac454497cb450e693ab4726209b58ade32e3c1f6f2bb74fec47b2a766e68eed56bfcfbc8d0 make-openssl.patch"
diff --git a/community/secpwgen/make-openssl.patch b/community/secpwgen/make-openssl.patch
new file mode 100644
index 0000000000..f1de454ce8
--- /dev/null
+++ b/community/secpwgen/make-openssl.patch
@@ -0,0 +1,33 @@
+--- secpwgen-1.3/Makefile.proto 2015-07-21 20:15:10.000000000 +0000
++++ secpwgen-1.3/Makefile.proto.new 2015-07-21 22:03:47.511905311 +0000
+@@ -30,9 +30,9 @@
+ ##
+ # If using OpenSSL, uncomment the following 3 lines.
+ ##
+-#CRYPTO_CFLAGS =
+-#CRYPTO_OBJS = secure_random_openssl.o
+-#CRYPTO_LIBS = -lcrypto
++CRYPTO_CFLAGS =
++CRYPTO_OBJS = secure_random_openssl.o
++CRYPTO_LIBS = -lcrypto
+
+ ##
+ # If using cryptlib, uncomment the following 3 lines.
+@@ -45,7 +45,7 @@
+ # Change PREFIX to install to different directories. The binary is installed
+ # in $PREFIX/bin, and the man in $PREFIX/man/man1
+ ##
+-PREFIX = /usr/local
++PREFIX = /usr
+
+ ##
+ # On some operating systems (most notably Linux 2.6 kernels) using mlockall
+@@ -60,7 +60,7 @@ PREFIX = /usr/local
+ # Sometimes you have only dynamic libraries available. In that case COMMENT
+ # the following line.
+ ##
+-LINK_STATIC = -static
++#LINK_STATIC = -static
+
+ ##############################################################################
+ # NO USER MODIFIABLE PARTS AFTER THIS POINT
diff --git a/community/secure-delete/APKBUILD b/community/secure-delete/APKBUILD
new file mode 100644
index 0000000000..824a1d65a7
--- /dev/null
+++ b/community/secure-delete/APKBUILD
@@ -0,0 +1,37 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=secure-delete
+_pkgname=secure_delete
+pkgver=3.1
+pkgrel=0
+pkgdesc="Secure file, disk, swap, memory erasure utilities"
+url="https://www.thc.org/"
+arch="all"
+license="GPL"
+subpackages="$pkgname-doc"
+source="http://freeworld.thc.org/releases/$_pkgname-$pkgver.tar.gz"
+
+_builddir="$srcdir"/$_pkgname-$pkgver
+
+build() {
+ cd "$_builddir"
+ sed -i -e 's/mktemp/mkstemp/g' sfill.c
+ sed -i -e "s/sswap smem sdel-mod.o/sswap smem/" -e '/test.*sdel-mod/d' \
+ -e "s/^srm: /srm: sdel-lib.o /" -e "s/^sfill: /sfill: sdel-lib.o /" \
+ -e "s/^sswap: /sswap: sdel-lib.o /" -e "s/^smem: /smem: sdel-lib.o /" \
+ Makefile
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make INSTALL_DIR="${pkgdir}/usr/bin" \
+ MAN_DIR="${pkgdir}/usr/share/man" \
+ DOC_DIR="${pkgdir}/usr/share/doc/secure_delete" \
+ install || return 1
+ chmod a+r "$pkgdir/usr/bin"/*
+}
+
+md5sums="aabbd7e77bf96b326d260f16fb7f8bba secure_delete-3.1.tar.gz"
+sha256sums="a9d846d1dce3f1bdf13bbb306e8596bc1f263198a086f6beecd90ccf7bddf8d5 secure_delete-3.1.tar.gz"
+sha512sums="9e7ae1458ffcce53fac23cf9b8df673d0754e6c3ff7791c445f2290dfa04f01fd2eda8b7c5d0045883159a32438783c380f770d7277ca77c9642c68e8f42dd07 secure_delete-3.1.tar.gz"
diff --git a/community/socklog/APKBUILD b/community/socklog/APKBUILD
new file mode 100644
index 0000000000..bda6ad8fa3
--- /dev/null
+++ b/community/socklog/APKBUILD
@@ -0,0 +1,49 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=socklog
+pkgver=2.1.0
+pkgrel=2
+pkgdesc="System and kernel logging services for runit"
+url="http://smarden.org/socklog/"
+arch="all"
+license="BSD"
+install="$pkgname.post-install"
+subpackages="$pkgname-doc"
+source="http://smarden.org/$pkgname/$pkgname-$pkgver.tar.gz"
+
+_builddir="$srcdir"/admin/socklog-$pkgver/src
+
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+ echo "$CC $CFLAGS" > conf-cc
+ echo "$CC $LDFLAGS" > conf-ld
+}
+
+build() {
+ cd "$_builddir"
+ make
+}
+
+package() {
+ cd "$_builddir"
+ install -d "$pkgdir"/usr/bin
+ install -d "$pkgdir"/sbin
+ for i in socklog socklog-conf; do
+ install -m755 "$i" "$pkgdir"/sbin/$i || return 1
+ done
+ for i in socklog-check tryto uncat; do
+ install -m755 "$i" "$pkgdir"/usr/bin/$i || return 1
+ done
+ install -d "$pkgdir"/usr/share/man/man8
+ cd .. && cp -rf man/* "$pkgdir"/usr/share/man/man8/
+}
+
+md5sums="5d0e8e28c9329ad3af982c5241df9ff1 socklog-2.1.0.tar.gz"
+sha256sums="aa869a787ee004da4e5509b5a0031bcc17a4ab4ac650c2ce8d4e488123acb455 socklog-2.1.0.tar.gz"
+sha512sums="920ce5e661a6a3d970fa77ee3c228d48699ea03530be2b43b7517458b25e31a0a7f352ece2d076c715b6d34dbb26b424b48eb0f55b9bcd0355b74d3e34c77ac7 socklog-2.1.0.tar.gz"
diff --git a/community/socklog/socklog.post-install b/community/socklog/socklog.post-install
new file mode 100644
index 0000000000..de53f609d3
--- /dev/null
+++ b/community/socklog/socklog.post-install
@@ -0,0 +1,22 @@
+#!/bin/sh
+# Alpine Linux post-install script for socklog
+# Copyright 2015 Stuart Cardall (developer@it-offshore.co.uk)
+# Distributed under the terms of the GNU General Public License, v2 or later #
+
+adduser -S -D -H -h /var/empty -s /sbin/nologin -g log log 2>/dev/null
+if [ ! -d /etc/sv/socklog-unix ]; then
+ socklog-conf unix nobody log
+ mkdir -p /etc/service
+ ln -s /etc/sv/socklog-unix /etc/service/
+fi
+
+if [ ! -f /etc/sv/socklog-unix/run ]; then
+cat > /etc/sv/socklog-unix/run <<EOF
+#!/bin/sh
+/etc/init.d/syslog stop &>/dev/null
+exec 2>&1
+exec chpst -Unobody socklog unix /dev/log
+EOF
+fi
+
+exit 0
diff --git a/community/spacefm/APKBUILD b/community/spacefm/APKBUILD
new file mode 100644
index 0000000000..e70c9386f9
--- /dev/null
+++ b/community/spacefm/APKBUILD
@@ -0,0 +1,65 @@
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+# Contributor: Bartłomiej Piotrowski <bpiotrowski@alpinelinux.org>
+pkgname=spacefm
+pkgver=1.0.5
+pkgrel=0
+pkgdesc="Multi-panel tabbed file manager (GTK2 version)"
+arch=all
+url="http://ignorantguru.github.com/spacefm/"
+license="GPL3"
+depends="bash"
+makedepends="intltool gettext-dev gtk+2.0-dev gtk+3.0-dev eudev-dev ffmpegthumbnailer-dev linux-headers"
+subpackages="$pkgname-lang $pkgname-doc $pkgname-gtk3 $pkgname-gtk3-lang:lang3 $pkgname-gtk3-doc:doc3"
+source="$pkgname-$pkgver.tar.gz::https://github.com/IgnorantGuru/spacefm/archive/$pkgver.tar.gz"
+
+builddir="$srcdir"/$pkgname-$pkgver
+
+prepare() {
+ default_prepare || return 1
+ update_config_guess || return 1
+}
+
+build() {
+ cd "$builddir"
+ ./configure --prefix=/usr \
+ --with-gtk2\
+ -disable-pixmaps || return 1
+ make || return 1
+}
+
+gtk3() {
+ pkgdesc="Multi-panel tabbed file manager (GTK3 version)"
+ replaces="spacefm"
+
+ cd "$builddir"
+ make clean || return 1
+
+ ./configure --prefix=/usr \
+ --with-gtk3\
+ -disable-pixmaps || return 1
+
+ make || return 1
+ make -j1 DESTDIR="$subpkgdir" install || return 1
+}
+
+lang3() {
+ arch="noarch"
+ mkdir -p "$subpkgdir/usr/share"
+ mv "${pkgdir%*spacefm}$pkgname-gtk3/usr/share/locale" "$subpkgdir/usr/share/"
+}
+
+doc3() {
+ arch="noarch"
+ mkdir -p "$subpkgdir/usr/share"
+ mv "${pkgdir%*spacefm}$pkgname-gtk3/usr/share/doc" \
+ "$subpkgdir/usr/share/" || return 1
+}
+
+package() {
+ cd "$builddir"
+ make -j1 DESTDIR="$pkgdir" install || return 1
+}
+
+md5sums="634763f4d3886a00088e06a4295982b2 spacefm-1.0.5.tar.gz"
+sha256sums="d3f14fd1b1cfb51df98ebc341ab78ce741ba443ae2ce9e1662de39d01a95e0f3 spacefm-1.0.5.tar.gz"
+sha512sums="f32a59eac773df1bd9d36ba26cf7397bd205a2a8918e01f978c42ffb6aa2238a6f4dc871503a43f130c3b10d80f43364f54965d441f602ac895d0483fc073498 spacefm-1.0.5.tar.gz"
diff --git a/community/tinyssh/APKBUILD b/community/tinyssh/APKBUILD
new file mode 100644
index 0000000000..a0e29d0133
--- /dev/null
+++ b/community/tinyssh/APKBUILD
@@ -0,0 +1,62 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=tinyssh
+pkgver=20160809
+pkgrel=0
+pkgdesc="Small SSH server using NaCl / TweetNaCl (no dependency on OpenSSL)"
+url="http://tinyssh.org/"
+arch="all"
+license="CC0 1.0"
+makedepends="$depends_dev libsodium-dev"
+subpackages="$pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::https://github.com/janmojzis/$pkgname/archive/$pkgver.tar.gz
+ $pkgname.initd
+ $pkgname.confd
+ "
+
+builddir="$srcdir"/$pkgname-$pkgver
+build() {
+ cd "$builddir"
+ export LIBS="-lsodium"
+ export CFLAGS="$CFLAGS -I/usr/include/sodium"
+ export LDFLAGS="-L/usr/lib"
+ make || return 1
+}
+
+package() {
+ cd "$builddir"
+ make install DESTDIR="${pkgdir}" || return 1
+
+ mkdir -p "$pkgdir"/etc/$pkgname
+ install -m755 -D "$srcdir"/$pkgname.initd \
+ "$pkgdir"/etc/init.d/tinysshd || return 1
+ install -m644 -D "$srcdir"/$pkgname.confd \
+ "$pkgdir"/etc/conf.d/tinysshd || return 1
+
+ # post-install message
+ mkdir -p "$pkgdir/usr/share/doc/$pkgname"
+ cat > $pkgdir/usr/share/doc/$pkgname/README.alpine <<EOF
+TinySSH can be run in 3 different ways:
+--------------------------------------
+(1) /etc/init.d/tinysshd (requires tcpserver & takes care of key generation)
+
+(2) via inetd (you will need to 'tinysshd-makekeys <dir>' manually):
+
+echo '22 stream tcp nowait root /usr/sbin/tinysshd tinysshd -l -v /etc/tinyssh/sshkeys' >> /etc/inetd.conf
+rc-service inetd start
+
+(3) Using runit with either (1) or (2)
+
+Stealth SSH with FWKNOP: https://it-offshore.co.uk/security/53-stealth-your-ssh-port-ssh-into-lxc-containers
+EOF
+}
+
+md5sums="32606be2301eac9a1c295827b70c319a tinyssh-20160809.tar.gz
+78ec724804035bae29e1c47abec737d8 tinyssh.initd
+83e705f0f71db5ae0d8530edafa63497 tinyssh.confd"
+sha256sums="3f910f8aa505bd6101f62975c775e81cdf235b2eb9d143d36daff2820f0b3940 tinyssh-20160809.tar.gz
+b3584c463f6ba0de6a5fe2e28fb98cd8ef65a55f17a0f4c877f61f54019ef34c tinyssh.initd
+c6c67395e7230d75077734f0b08d5f8c76f11aaef27878b013b7bd68dd7ba774 tinyssh.confd"
+sha512sums="d7e55359eef2ca4ab8864a4c8b66d8cc852aed8b693beb9a40b892af862cdab174e9023bf933b7ace37d0c0e264798e34f139d6a2aba78eb7c3df4efe85c3ac4 tinyssh-20160809.tar.gz
+d10f995c6687e706453e51d06b3466427d476036efdbd86db2f9330281e46049bf2e3698208524b3f70cdbd30373f5bf46c7164dd626d22b3fa9a75ca5d8d478 tinyssh.initd
+4513bd0d43ef0825fbd77365a8a7adefcd99211102df76003becf7e3a09a47ad9bbd16a68c3fadfb7868e0562f8d42a26106b7582cb70490a7e52a7d1e6110e9 tinyssh.confd"
diff --git a/community/tinyssh/tinyssh.confd b/community/tinyssh/tinyssh.confd
new file mode 100644
index 0000000000..d7ba22a5ce
--- /dev/null
+++ b/community/tinyssh/tinyssh.confd
@@ -0,0 +1,8 @@
+# TinySSH conf.d file for Alpine Linux
+
+# Specify daemon options here:
+# OPTIONS="-l -v"
+
+# override config directory / port here:
+# CONFDIR=/etc/tinyssh
+# PORT=22
diff --git a/community/tinyssh/tinyssh.initd b/community/tinyssh/tinyssh.initd
new file mode 100644
index 0000000000..364ffb21c5
--- /dev/null
+++ b/community/tinyssh/tinyssh.initd
@@ -0,0 +1,43 @@
+#!/sbin/openrc-run
+# Alpine Linux init.d for TinySSH
+# Copyright 2015 Stuart Cardall (developer@it-offshore.co.uk)
+# Distributed under the terms of the GNU General Public License, v2 or later #
+
+name=tinysshd
+daemon=/usr/sbin/$name
+keygen=$daemon-makekey
+CONFDIR=${CONFDIR:-/etc/tinyssh}
+keydir=${CONFDIR}/sshkeys
+OPTIONS=${OPTIONS:-\-v -l}
+PORT=${PORT:-22}
+pidfile=/var/run/$name.pid
+server_opts="-HRDl0 0.0.0.0 ${PORT} $daemon ${OPTIONS} $keydir"
+
+depend() {
+ use net
+ after logger firewall
+}
+
+checkconfig() {
+ checkpath --directory ${CONFDIR}
+ eval $keygen $keydir 2>/dev/null
+ # tinyssh also runs from inetd without tcpserver
+ if [ ! -f /usr/bin/tcpserver ]; then
+ apk add --quiet ucspi-tcp
+ fi
+}
+
+start() {
+ checkconfig
+ ebegin "Starting ${name}"
+ start-stop-daemon --start --make-pidfile --background --pidfile $pidfile \
+ --exec tcpserver -- $server_opts
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping ${name}"
+ start-stop-daemon --stop --quiet \
+ --pidfile $pidfile
+ eend $?
+}
diff --git a/community/udevil/APKBUILD b/community/udevil/APKBUILD
new file mode 100644
index 0000000000..159b0d7a3e
--- /dev/null
+++ b/community/udevil/APKBUILD
@@ -0,0 +1,61 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=udevil
+pkgver=0.4.4
+pkgrel=2
+pkgdesc="Mount / unmount removable devices without a password (udisks alternative)"
+url="http://ignorantguru.github.io/udevil"
+arch="all"
+license="GPL3+"
+makedepends="$depends_dev glib-dev eudev-dev intltool"
+install="$pkgname.pre-install"
+subpackages="$pkgname-lang $pkgname-doc"
+pkggroups="plugdev"
+source="$pkgname-$pkgver.tar.gz::https://github.com/IgnorantGuru/$pkgname/archive/$pkgver.tar.gz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./configure \
+ --prefix=/usr \
+ --disable-systemd || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make -j1 DESTDIR="$pkgdir" install || return 1
+ chown root:plugdev "$pkgdir"/usr/bin/udevil || return 1
+ chmod u+s,go-s,o-x "$pkgdir"/usr/bin/udevil # remove SUID bit
+ mkdir -p "$pkgdir/usr/share/apk-tools/$pkgname"
+# chmod ugo-s,ugo+x "$pkgdir"/usr/bin/udevil #remove SUID bit completely
+ # post-install message
+ mkdir -p "$pkgdir/usr/share/doc/$pkgname"
+ cat > $pkgdir/usr/share/doc/$pkgname/README.alpine <<EOF
+To mount / unmount devices without the root password: add your user account to the 'plugdev' group.
+
+Optional dependencies:
+
+zenity: (devmon popups)
+davfs2: (mount WebDAV resources)
+cifs-utils: (mounting samba shares)
+curlftpfs: (mounting ftp shares)
+nfs-utils: (mounting nfs shares)
+sshfs-fuse: (mounting sftp shares)
+eject: (eject via devmon)
+EOF
+}
+
+md5sums="281aa065d92c679cb41728069e72b272 udevil-0.4.4.tar.gz"
+sha256sums="ad2fd8375bd62622718a04235e9772119459089938dbb78e657955e595822b7c udevil-0.4.4.tar.gz"
+sha512sums="adce4916e06d1cc4965521abbcbc2901e53930691167f431cb18e28d3ef8bde740e95a6a5f40dfc58dfd7b4b661b4475d3dd2b6174a5d7a55ae7c65629b82327 udevil-0.4.4.tar.gz"
diff --git a/community/udevil/udevil.pre-install b/community/udevil/udevil.pre-install
new file mode 100644
index 0000000000..9d4b1c3767
--- /dev/null
+++ b/community/udevil/udevil.pre-install
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+addgroup -S plugdev 2>/dev/null
+
+exit 0
diff --git a/community/virt-viewer/APKBUILD b/community/virt-viewer/APKBUILD
new file mode 100644
index 0000000000..95ec2f5480
--- /dev/null
+++ b/community/virt-viewer/APKBUILD
@@ -0,0 +1,47 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=virt-viewer
+pkgver=2.0
+pkgrel=0
+pkgdesc="A lightweight interface for interacting with the graphical display of virtualized guest OS"
+url="http://virt-manager.org"
+arch="all"
+license="GPL"
+depends=""
+depends_dev=""
+makedepends="$depends_dev intltool spice-protocol glib-dev gtk+3.0-dev gtk-vnc-dev spice-gtk-dev"
+install=""
+subpackages="$pkgname-lang $pkgname-doc"
+source="http://virt-manager.org/download/sources/$pkgname/$pkgname-$pkgver.tar.gz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./configure \
+ --prefix=/usr \
+ --with-gtk=3.0 \
+ --disable-update-mimedb \
+ --with-gtk-vnc \
+ --with-spice-gtk \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+md5sums="4b1e9a2029e0dfff741e17bb915f75ec virt-viewer-2.0.tar.gz"
+sha256sums="e9c583bcb5acdabac6a8a13eff6ce4e093a3050645771628f832e15ce685d437 virt-viewer-2.0.tar.gz"
+sha512sums="271ded11e4af3f1dd208c7b8ab7d1c0cd24f641a79e05178d0762a03de3dcf99ae7432acde2b67460e7a98d1fa562587b6b08cf06ab3cf80f025a7b259e8203e virt-viewer-2.0.tar.gz"
diff --git a/community/virtualbricks/APKBUILD b/community/virtualbricks/APKBUILD
new file mode 100644
index 0000000000..72faae66e7
--- /dev/null
+++ b/community/virtualbricks/APKBUILD
@@ -0,0 +1,39 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=virtualbricks
+pkgver=1.0.1
+pkgrel=2
+pkgdesc="A GTK frontend for VDE and QEMU/KVM"
+url="http://virtualbricks.eu | https://launchpad.net/virtualbrick"
+arch="noarch"
+license="GPL v2"
+depends="python py-zope-interface py-twisted py-gtk py-imaging py-graphviz"
+depends_dev=""
+makedepends="python-dev gettext"
+subpackages="$pkgname-lang"
+source="https://launchpad.net/virtualbrick/1.x/$pkgver/+download/$pkgname-$pkgver.tar.gz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ python setup.py build || return 1
+}
+
+package() {
+ cd "$_builddir"
+ python setup.py install --prefix=/usr --root="$pkgdir" || return 1
+}
+
+md5sums="17ae7cddd0572f3f547ff348eadcf690 virtualbricks-1.0.1.tar.gz"
+sha256sums="afed1e4b7932297e5aece861d24516a62a98e08212f510e13c4a0a4132fdd0bc virtualbricks-1.0.1.tar.gz"
+sha512sums="90a4cd46058c3139a7bc1d8e15f19a20f020371acb55587df5f315e6f691b3358ea73b37b317a9c772c7cbc4cb968ae5a27ebfb59472085bcb5ad27c4db3c464 virtualbricks-1.0.1.tar.gz"
diff --git a/community/whois/APKBUILD b/community/whois/APKBUILD
new file mode 100644
index 0000000000..64371caab9
--- /dev/null
+++ b/community/whois/APKBUILD
@@ -0,0 +1,30 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=whois
+pkgver=5.2.12
+pkgrel=1
+pkgdesc="Intelligent WHOIS client by Marco d'Itri"
+url="http://www.linux.it/~md/software/"
+arch="all"
+license="GPL2"
+makedepends="$depends_dev perl libidn-dev gettext-dev"
+subpackages="$pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::https://github.com/rfc1036/$pkgname/archive/v$pkgver.tar.gz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+build() {
+ cd "$_builddir"
+ make CONFIG_FILE="/etc/whois.conf" \
+ HAVE_LIBIDN=1 HAVE_ICONV=1 \
+ CFLAGS="$CFLAGS -lintl $CXXFLAGS" || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make BASEDIR="$pkgdir" install-whois || return 1
+ install -D -m644 whois.conf "$pkgdir/etc/whois.conf"
+}
+
+md5sums="c7d86f4cdc97f92722b2500bf12aefd1 whois-5.2.12.tar.gz"
+sha256sums="8485aa02909fd6aaa1cfd8b5e63559310879bf8a62793a83c96a4502164b968a whois-5.2.12.tar.gz"
+sha512sums="812ae2a344e5b190175213cca1b10cc58821312f8ad8b31995ecb6963e71b1343ccfa6f06ce896856b9c9622be3dfb22e1fba30ed254f25373f08b4d84143552 whois-5.2.12.tar.gz"
diff --git a/community/wrk/APKBUILD b/community/wrk/APKBUILD
new file mode 100644
index 0000000000..76b7edff01
--- /dev/null
+++ b/community/wrk/APKBUILD
@@ -0,0 +1,37 @@
+# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=wrk
+pkgver=4.0.1
+pkgrel=0
+pkgdesc="wrk is a modern HTTP benchmarking tool"
+url="https://github.com/wg/wrk"
+# requires -march=i586 to build on x86
+arch="x86_64"
+license="ASL 2.0"
+depends=""
+depends_dev=""
+makedepends="openssl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::https://github.com/wg/wrk/archive/$pkgver.tar.gz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+build() {
+ make -C "$_builddir" || return 1
+}
+
+package() {
+ cd "$_builddir"
+ mkdir -p $pkgdir/usr/bin
+ mkdir -p $pkgdir/usr/share/doc/$pkgname/scripts
+ install -m755 -D $pkgname "$pkgdir"/usr/bin/$pkgname
+ install -m644 -D README "$pkgdir"/usr/share/doc/$pkgname/
+ install -m644 -D LICENSE "$pkgdir"/usr/share/doc/$pkgname/
+ install -m644 -D NOTICE "$pkgdir"/usr/share/doc/$pkgname/
+ install -m755 -D scripts/* "$pkgdir"/usr/share/doc/$pkgname/scripts/
+}
+
+md5sums="2520c55f197b5bb38b96ef2495b9af11 wrk-4.0.1.tar.gz"
+sha256sums="c03bbc283836cb4b706eb6bfd18e724a8ce475e2c16154c13c6323a845b4327d wrk-4.0.1.tar.gz"
+sha512sums="75e8e0d6f1e7929a43bb80fe65e1f2a36a169d19d839940ebe7dc9765a182e1adee3ba2873e97511ddabbd252b8447a69a92a2cfc584f05d65a2f8b31bbf4141 wrk-4.0.1.tar.gz"
diff --git a/community/xpra/APKBUILD b/community/xpra/APKBUILD
new file mode 100644
index 0000000000..557700b24f
--- /dev/null
+++ b/community/xpra/APKBUILD
@@ -0,0 +1,52 @@
+# Contributor: Stuart Cardall <developer@it-offshore.co.uk>
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+pkgname=xpra
+pkgver=0.17.1
+pkgrel=1
+pkgdesc="Xpra is 'screen for X' & allows you to run X programs, usually on a remote host over SSH or encrypted tcp."
+url="http://xpra.org"
+arch="all"
+license="GPLv2+"
+depends="py-gobject py-gtk py-imaging xf86-video-dummy xvfb setxkbmap xorg-server py-numpy py-pillow py-gtkglext py-lz4 \
+ py-rencode py-opencl"
+depends_dev="python-dev cython-dev libx11-dev libxtst-dev libxcomposite-dev libxdamage-dev libxrandr-dev \
+ py-gobject-dev py-gtk-dev libxkbfile-dev gtk+2.0-dev x264-dev x265-dev libvpx-dev ffmpeg-dev libwebp-dev"
+makedepends="$depends_dev cython linux-headers"
+subpackages="$pkgname-dev $pkgname-doc $pkgname-tests"
+source="http://xpra.org/src/$pkgname-$pkgver.tar.xz"
+
+_builddir="$srcdir"/$pkgname-$pkgver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir" # https://www.xpra.org/trac/ticket/1080
+ CFLAGS="$CFLAGS -fno-strict-aliasing"
+ python setup.py build \
+ --with-csc_opencl \
+ --with-bundle_tests \
+ || return 1
+}
+
+package() {
+ cd "$_builddir"
+ python setup.py install --prefix=/usr --root="$pkgdir" || return 1
+}
+
+tests() {
+ arch="noarch"
+ cd "$_builddir"
+ mkdir -p "$subpkgdir"/usr/share/xpra
+ cp -rf tests "$subpkgdir"/usr/share/xpra/
+}
+
+md5sums="d83910c4e8c3799822f5fe90f6d8e928 xpra-0.17.1.tar.xz"
+sha256sums="041de13937f3f0529dcde9ccc681b52bc85c5074a021060a56a1da2cdfe66315 xpra-0.17.1.tar.xz"
+sha512sums="f1d323b7207b89838045126939d7d68ff72313c00724f2be7d405c12880fedc12900c11c8d36a0780ee6f7ffca1b6f75c69136eeebd73333fbd437cf9a7ffcfa xpra-0.17.1.tar.xz"
diff --git a/community/zram-init/APKBUILD b/community/zram-init/APKBUILD
new file mode 100644
index 0000000000..1cec0fde7d
--- /dev/null
+++ b/community/zram-init/APKBUILD
@@ -0,0 +1,39 @@
+# Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
+# Contributor: Bartłomiej Piotrowski <bpiotrowski@alpinelinux.org>
+pkgname=zram-init
+pkgver=3.8
+pkgrel=0
+pkgdesc="wrapper script for the zram kernel module"
+arch="noarch"
+url="https://github.com/vaeth/zram-init"
+license="GPL2"
+depends="e2fsprogs-extra"
+subpackages="$pkgname-zsh-completion:zshcomp"
+source="$pkgname-$pkgver.tar.gz::$url/archive/v$pkgver.tar.gz"
+
+_builddir="$srcdir/$pkgname-$pkgver"
+build() {
+ return 0
+}
+
+package() {
+ cd "$_builddir"
+ install -Dm644 modprobe.d/zram.conf "$pkgdir"/etc/modprobe.d/zram.conf
+ install -Dm755 sbin/zram-init "$pkgdir"/usr/sbin/zram-init
+ install -Dm644 openrc/conf.d/zram-init "$pkgdir"/etc/conf.d/zram-init
+ install -Dm755 openrc/init.d/zram-init "$pkgdir"/etc/init.d/zram-init
+}
+
+zshcomp() {
+ depends=""
+ pkgdesc="Zsh completions for $pkgname"
+ install_if="$pkgname=$pkgver-r$pkgrel zsh"
+ arch="noarch"
+
+ install -Dm644 "$_builddir"/zsh/_$pkgname \
+ "$subpkgdir"/usr/share/zsh/site-functions/_$pkgname
+}
+
+md5sums="fb36ef7138f028de71ed1d5e372a6e02 zram-init-3.8.tar.gz"
+sha256sums="4a43c424739dda6c4ffe62b5431b6fb1f476afd9f8b9b9149eb32314cd34a3a6 zram-init-3.8.tar.gz"
+sha512sums="c083f34bba6031f8e247f61a1451343e14cc4bc5c4731ad3a32a5f0eea265936a83b27ad0e3cbd2ba0e05e2bec1e6ae739b6e4149d120dafbcc057437188f07f zram-init-3.8.tar.gz"