diff --git a/system/cups/APKBUILD b/system/cups/APKBUILD
new file mode 100644
index 0000000000000000000000000000000000000000..ebe30a0c7d871ec7c451d0cb4b3f609b4ed9f3a7
--- /dev/null
+++ b/system/cups/APKBUILD
@@ -0,0 +1,135 @@
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=cups
+pkgver=2.2.5
+pkgrel=0
+pkgdesc="The CUPS Printing System"
+url="http://www.cups.org/"
+arch="all"
+license="GPL LGPL2+"
+# cupsUTF8ToCharset(CUPS_EUC_JP) of utfdemo.txt: FAIL (UTF-8 to EUC-JP on line 1)
+options="!check"
+subpackages="$pkgname-dev $pkgname-doc $pkgname-libs ipptool $pkgname-client
+	$pkgname-lang $pkgname-openrc"
+depends_dev="openssl-dev zlib-dev"
+makedepends="$depends_dev libpaper-dev dbus-dev libjpeg-turbo-dev linux-headers
+	gnutls-dev"
+depends="cups-client poppler-utils openssl dbus"
+install="cups.pre-install"
+pkggroups="lp lpadmin"
+pkgusers="lp"
+source="https://github.com/apple/cups/releases/download/v$pkgver/cups-$pkgver-source.tar.gz
+	$pkgname.logrotate
+	cupsd.initd
+	cups-no-export-ssllibs.patch
+	default-config-no-gssapi.patch
+	"
+builddir="$srcdir/$pkgname-$pkgver"
+
+build() {
+	cd "$builddir"
+
+	./configure \
+		--build=$CBUILD \
+		--host=$CHOST \
+		--prefix=/usr \
+		--libdir=/usr/lib \
+		--sysconfdir=/etc \
+		--localstatedir=/var \
+		--with-logdir=/var/log/cups \
+		--with-docdir=/usr/share/cups \
+		--with-rundir=/run/cups \
+		--with-cupsd-file-perm=0755 \
+		--with-cups-user=lp \
+		--with-cups-group=lp \
+		--with-system-groups=lpadmin \
+		--with-domainsocket=/run/cups/cups.sock \
+		--without-rcdir \
+		--without-php \
+		--enable-pam \
+		--enable-raw-printing \
+		--enable-dbus \
+		--with-dbusdir=/etc/dbus-1 \
+		--enable-libpaper \
+		--enable-ssl=yes \
+		--enable-gnutls \
+		--disable-launchd \
+		--with-optim="$CFLAGS"
+	make
+}
+
+check() {
+	cd "$builddir"
+	make check
+}
+
+package() {
+	cd "$builddir"
+
+	make BUILDROOT="$pkgdir" install
+
+	cd "$pkgdir"
+
+	# These no longer works since CUPS >= 1.6 (http://www.cups.org/str.php?L4120).
+	rm -rf usr/share/cups/banners/* \
+		usr/share/cups/data/testprint
+
+	install -D -m 644 "$srcdir"/cups.logrotate etc/logrotate.d/cups
+	install -D -m 755 "$srcdir"/cupsd.initd etc/init.d/cupsd
+
+	if [ -e usr/share/applications/cups.desktop ] ; then
+		sed -i 's|^Exec=htmlview http://localhost:631/|Exec=xdg-open http://localhost:631/|g' \
+			usr/share/applications/cups.desktop
+	fi
+	find usr/share/cups/model -name "*.ppd" | xargs gzip -n9f
+}
+
+libs() {
+	pkgdesc="CUPS libraries"
+	depends=""
+	replaces="libcups"
+
+	cd "$pkgdir"
+	_mv usr/lib/*.so*
+	install -d "$pkgdir"/etc/cups
+}
+
+ipptool() {
+	pkgdesc="Perform internet printing protocol requests"
+	depends=""
+
+	cd "$pkgdir"
+	_mv usr/bin/ipptool \
+		usr/share/cups/ipptool
+}
+
+client() {
+	pkgdesc="CUPS command-line client programs"
+	depends=""
+
+	cd "$pkgdir"
+	_mv usr/bin \
+		usr/sbin/accept \
+		usr/sbin/cupsaccept \
+		usr/sbin/cupsaddsmb \
+		usr/sbin/cupsctl \
+		usr/sbin/cupsdisable \
+		usr/sbin/cupsenable \
+		usr/sbin/lpadmin \
+		usr/sbin/lpc \
+		usr/sbin/lpinfo \
+		usr/sbin/lpmove \
+		usr/sbin/reject
+}
+
+_mv() {
+	local i; for i in "$@"; do
+		mkdir -p "$subpkgdir"/${i%/*}
+		mv "$pkgdir"/$i "$subpkgdir"/${i%/*}/
+	done
+}
+
+sha512sums="5c824e74e2679de360ff1f95aa74013ca2d6a88d11d18041e7a5b51746c2a21bbc10da785791ea4e40d316167560982466789767018bd02676cf810ad0c3a5c9  cups-2.2.5-source.tar.gz
+cf64211da59e79285f99d437c02fdd7db462855fb2920ec9563ba47bd8a9e5cbd10555094940ceedeb41ac805c4f0ddb9147481470112a11a76220d0298aef79  cups.logrotate
+2c2683f755a220166b3a1653fdd1a6daa9718c8f0bbdff2e2d5e61d1133306260d63a83d3ff41619b5cf84c4913fae5822b79553e2822858f38fa3613f4c7082  cupsd.initd
+7a8cd9ac33b0dd4627c72df4275db8ccd7cf8e201bce3833719b42f532f526bb347b842e3ea1ef0d61855b5c6e1088b5d20b68942f2c2c0acf504d8d9728efd3  cups-no-export-ssllibs.patch
+98bb97f4af69ea286fc3d398b8e57c32440e6b2d49fb7f79b418a4fe7f13441f3a610f65d3433d10d971ade808233c0b29b4d66160623ccaae919179384be918  default-config-no-gssapi.patch"
diff --git a/system/cups/cups-no-export-ssllibs.patch b/system/cups/cups-no-export-ssllibs.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e227bd1823906a13eaedc6f112d5b2f2f1b71968
--- /dev/null
+++ b/system/cups/cups-no-export-ssllibs.patch
@@ -0,0 +1,12 @@
+diff -up cups-1.5b1/config-scripts/cups-ssl.m4.no-export-ssllibs cups-1.5b1/config-scripts/cups-ssl.m4
+--- cups-1.6.2/config-scripts/cups-ssl.m4.no-export-ssllibs	2011-05-11 02:52:08.000000000 +0200
++++ cups-1.6.2/config-scripts/cups-ssl.m4	2011-05-23 17:47:27.000000000 +0200
+@@ -180,7 +180,7 @@
+ AC_SUBST(SSLFLAGS)
+ AC_SUBST(SSLLIBS)
+ 
+-EXPORT_SSLLIBS="$SSLLIBS"
++EXPORT_SSLLIBS=""
+ AC_SUBST(EXPORT_SSLLIBS)
+ 
+ dnl
diff --git a/system/cups/cups.logrotate b/system/cups/cups.logrotate
new file mode 100644
index 0000000000000000000000000000000000000000..a50b058a3c7151810909ad3389a18ec1f1d6c64a
--- /dev/null
+++ b/system/cups/cups.logrotate
@@ -0,0 +1,8 @@
+/var/log/cups/*log {
+	missingok
+	notifempty
+	delaycompress
+	postrotate
+		/etc/init.d/cupsd --quiet --ifstarted reload
+	endscript
+}
diff --git a/system/cups/cups.pre-install b/system/cups/cups.pre-install
new file mode 100644
index 0000000000000000000000000000000000000000..cdb75cac56839111b71b07969c62aed3966a4a7c
--- /dev/null
+++ b/system/cups/cups.pre-install
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+addgroup -S lpadmin 2>/dev/null
+addgroup -S lp 2>/dev/null
+adduser -S -G lp -g lp lp 2>/dev/null
+addgroup lp lp 2>/dev/null
+
+exit 0
diff --git a/system/cups/cupsd.initd b/system/cups/cupsd.initd
new file mode 100644
index 0000000000000000000000000000000000000000..ff099878426990b34140968eccabc129a675fc78
--- /dev/null
+++ b/system/cups/cupsd.initd
@@ -0,0 +1,44 @@
+#!/sbin/openrc-run
+
+name="CUPS"
+
+extra_commands="checkconfig"
+extra_started_commands="reload"
+
+description_checkconfig="Test the configuration file"
+description_reload="Reload"
+
+: ${cfgfile:="/etc/cups/cupsd.conf"}
+
+command="/usr/sbin/cupsd"
+command_args="-f -c $cfgfile"
+command_background="yes"
+
+pidfile="/run/cups/$RC_SVCNAME.pid"
+
+depend() {
+	use net
+	before nfs
+	need dbus
+	after logger
+}
+
+checkconfig() {
+	$command $command_args -t >/dev/null 2>&1 \
+		|| $command $command_args -t
+}
+
+start_pre() {
+	checkconfig || return 1
+
+	checkpath -q -d -m 0775 -o root:lp /var/cache/cups
+	checkpath -q -d -m 0775 -o root:lp /var/cache/cups/rss
+	checkpath -q -d -m 0755 -o root:lp /run/cups
+	checkpath -q -d -m 0511 -o lp:lpadmin /run/cups/certs
+}
+
+reload() {
+	ebegin "Reloading $name"
+	start-stop-daemon --signal HUP --pidfile "$pidfile"
+	eend $?
+}
diff --git a/system/cups/default-config-no-gssapi.patch b/system/cups/default-config-no-gssapi.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b12c55ddf81f8ba35a72bff0fb2cd8ab80f43145
--- /dev/null
+++ b/system/cups/default-config-no-gssapi.patch
@@ -0,0 +1,26 @@
+--- a/conf/cupsd.conf.in
++++ b/conf/cupsd.conf.in
+@@ -145,12 +145,12 @@
+ 
+   # Job-related operations must be done by the owner or an administrator...
+   <Limit Create-Job Print-Job Print-URI Validate-Job>
+-    AuthType Negotiate
++    AuthType Default
+     Order deny,allow
+   </Limit>
+ 
+   <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
+-    AuthType Negotiate
++    AuthType Default
+     Require user @OWNER @SYSTEM
+     Order deny,allow
+   </Limit>
+@@ -171,7 +171,7 @@
+ 
+   # Only the owner or an administrator can cancel or authenticate a job...
+   <Limit Cancel-Job CUPS-Authenticate-Job>
+-    AuthType Negotiate
++    AuthType Default
+     Require user @OWNER @CUPS_DEFAULT_PRINTOPERATOR_AUTH@
+     Order deny,allow
+   </Limit>