diff --git a/srcpkgs/dracut/patches/portability.patch b/srcpkgs/dracut/patches/portability.patch
new file mode 100644
index 00000000000..e30c16548ca
--- /dev/null
+++ b/srcpkgs/dracut/patches/portability.patch
@@ -0,0 +1,36 @@
+Portability fixes:
+
+- Use uid_t not __uid_t.
+- Define _GNU_SOURCE for cpu_set_t and others.
+- Include string.h for strncmp().
+
+--- install/dracut-install.c 2014-10-24 13:19:58.000000000 +0200
++++ install/dracut-install.c 2014-12-28 07:59:14.083865632 +0100
+@@ -222,7 +222,7 @@ static int cp(const char *src, const cha
+ if (ret == 0) {
+ struct timeval tv[2];
+ if (fchown(dest_desc, sb.st_uid, sb.st_gid) != 0)
+- if(fchown(dest_desc, (__uid_t) - 1, sb.st_gid) != 0)
++ if(fchown(dest_desc, (uid_t) - 1, sb.st_gid) != 0)
+ log_error("Failed to chown %s: %m", dst);
+ tv[0].tv_sec = sb.st_atime;
+ tv[0].tv_usec = 0;
+--- install/util.h 2014-10-24 13:19:58.000000000 +0200
++++ install/util.h 2014-12-28 07:58:51.723864634 +0100
+@@ -20,6 +20,8 @@
+ along with systemd; If not, see .
+ ***/
+
++#define _GNU_SOURCE
++
+ #include
+ #include
+ #include
+@@ -27,6 +29,7 @@
+ #include
+ #include
+ #include
++#include
+ #include
+ #include
+ #include
diff --git a/srcpkgs/dracut/template b/srcpkgs/dracut/template
index 4092d35b01f..4f7a2832910 100644
--- a/srcpkgs/dracut/template
+++ b/srcpkgs/dracut/template
@@ -1,7 +1,7 @@
# Template file for 'dracut'
pkgname=dracut
version=040
-revision=2
+revision=3
build_style=meta
hostmakedepends="libxslt docbook-xsl asciidoc"
depends="psmisc cpio"