diff --git a/main/rsyslog/APKBUILD b/main/rsyslog/APKBUILD
index b590f620910fb2fa53ca31027d0b8f7349ef772a..079adabd0e1407651a4e6fb1acce755de155f96c 100644
--- a/main/rsyslog/APKBUILD
+++ b/main/rsyslog/APKBUILD
@@ -5,7 +5,7 @@
 # Maintainer: Cameron Banta <cbanta@gmail.com>
 pkgname=rsyslog
 pkgver=8.40.0
-pkgrel=1
+pkgrel=2
 pkgdesc="Enhanced multi-threaded syslogd with database support and more."
 url="https://www.rsyslog.com/"
 arch="all"
@@ -28,8 +28,7 @@ makedepends="
 	util-linux-dev
 	zlib-dev
 	"
-subpackages="$pkgname-doc $pkgname-mysql $pkgname-pgsql $pkgname-tls
-	$pkgname-snmp $pkgname-hiredis $pkgname-elasticsearch $pkgname-dbg"
+subpackages="$pkgname-doc $pkgname-dbg"
 source="https://www.rsyslog.com/files/download/$pkgname/$pkgname-$pkgver.tar.gz
 	$pkgname.initd
 	$pkgname.confd
@@ -40,6 +39,18 @@ source="https://www.rsyslog.com/files/download/$pkgname/$pkgname-$pkgver.tar.gz
 	"
 builddir="$srcdir/$pkgname-$pkgver"
 
+_plugins="
+	elasticsearch:omelasticsearch
+	hiredis:omhiredis
+	mysql:ommysql
+	pgsql:ompgsql
+	snmp:omsnmp
+	tls:lmnsd_gtls
+	"
+for _i in $_plugins; do
+	subpackages="$subpackages $pkgname-${_i%%:*}:_plugin"
+done
+
 build() {
 	cd "$builddir"
 
@@ -80,52 +91,24 @@ package() {
 	install -m644 -D "$srcdir"/$pkgname.conf "$pkgdir"/etc/$pkgname.conf
 }
 
-mysql() {
-	pkgdesc="rsyslog mysql support"
-
-	mkdir -p "$subpkgdir"/usr/lib/rsyslog/
-	mv "$pkgdir"/usr/lib/rsyslog/ommysql.so \
-		"$subpkgdir"/usr/lib/rsyslog/
-}
-
-hiredis(){
-	pkgdesc="rsyslog hiredis support"
-
-	mkdir -p "$subpkgdir"/usr/lib/rsyslog/
-	mv "$pkgdir"/usr/lib/rsyslog/omhiredis.so \
-		"$subpkgdir"/usr/lib/rsyslog/
-}
-
-pgsql() {
-	pkgdesc="rsyslog pgsql support"
+_plugin() {
+	local name="${subpkgname#$pkgname-}"
+	pkgdesc="$name support for $pkgname"
+	depends="$pkgname=$pkgver-r$pkgrel"
 
-	mkdir -p "$subpkgdir"/usr/lib/rsyslog/
-	mv "$pkgdir"/usr/lib/rsyslog/ompgsql.so \
-		"$subpkgdir"/usr/lib/rsyslog/
-}
-
-tls() {
-	pkgdesc="rsyslog tls support"
-
-	mkdir -p "$subpkgdir"/usr/lib/rsyslog/
-	mv "$pkgdir"/usr/lib/rsyslog/lmnsd_gtls.so \
-		"$subpkgdir"/usr/lib/rsyslog/
-}
-
-snmp() {
-	pkgdesc="rsyslog snmp support"
-
-	mkdir -p "$subpkgdir"/usr/lib/rsyslog/
-	mv "$pkgdir"/usr/lib/rsyslog/omsnmp.so \
-		"$subpkgdir"/usr/lib/rsyslog/
-}
+	local libnames=$(printf '%s\n' $_plugins | grep "^$name:" | cut -d: -f2- | tr : ' ')
+	local libname
 
-elasticsearch() {
-	pkgdesc="rsyslog elasticsearch support"
+	for libname in ${libnames:-$name}; do
+		mkdir -p "$subpkgdir"/usr/lib/rsyslog/
+		mv "$pkgdir"/usr/lib/rsyslog/$libname.so "$subpkgdir"/usr/lib/rsyslog/
+	done
 
-	mkdir -p "$subpkgdir"/usr/lib/rsyslog/
-	mv "$pkgdir"/usr/lib/rsyslog/omelasticsearch.so \
-		 "$subpkgdir"/usr/lib/rsyslog/
+	# Allow people to find plugins by their full name (including prefix;
+	# mm, om, im, ...).
+	for libname in $libnames; do
+		provides="$provides $pkgname-$libname=$pkgver-r$pkgrel"
+	done
 }
 
 sha512sums="3d5d4f92e37ad9bf3767d5d7fc87fcb7956656f676a9495c78abd12fe9072ec8763b50543b198308a71d5d919721fb9b84b6725dd83a9d9b8a1639d81382c0dd  rsyslog-8.40.0.tar.gz