--- /dev/null
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=beanstalkd
+PKG_VERSION:=1.9
+PKG_RELEASE:=1
+
+# for now, build from latest commit since releases are infrequent and
+# useful fixes trickle in...
+PKG_SOURCE_URL:=https://github.com/kr/beanstalkd.git
+PKG_SOURCE_VERSION:=b7b4a6a14b7e8d096dc8cbc255b23be17a228cbb
+
+PKG_SOURCE_PROTO:=git
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-v$(PKG_VERSION)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-v$(PKG_VERSION)
+
+PKG_MAINTAINER:=Philip Prindeville <philipp@redfish-solutions.com>
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/beanstalkd
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=Beanstalk
+endef
+
+define Package/beanstalkd/description
+ Beanstalk is a simple, fast work queue.
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+ cd $(PKG_BUILD_DIR) && make CC="$(TARGET_CC)" CFLAGS="$(TARGET_CFLAGS)" LDFLAGS="$(TARGET_LDFLAGS)" PREFIX=/usr
+endef
+
+define Package/beanstalkd/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/beanstalkd $(1)/usr/bin/beanstalkd
+
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/beanstalkd.init $(1)/etc/init.d/beanstalkd
+endef
+
+$(eval $(call BuildPackage,beanstalkd))
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Beanstalk
+
+START=21
+STOP=11
+
+USE_PROCD=1
+PROG=/usr/bin/beanstalkd
+
+start_service() {
+ procd_open_instance
+ procd_set_param command $PROG
+ procd_close_instance
+}
--- /dev/null
+diff --git a/Makefile b/Makefile
+index a3f345f..fe5a083 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,17 +1,16 @@
+-PREFIX=/usr/local
+-BINDIR=$(DESTDIR)$(PREFIX)/bin
+-CFLAGS=-Wall -Werror\
+- -Wformat=2\
+- -g\
+-
+-LDFLAGS=
+-OS=$(shell uname|tr A-Z a-z)
+-INSTALL=install
+-
+-VERS=$(shell ./vers.sh)
+-TARG=beanstalkd
+-MOFILE=main.o
+-OFILES=\
++PREFIX ?= /usr/local
++BINDIR = $(DESTDIR)$(PREFIX)/bin
++CFLAGS += -Wall -Werror -Wformat=2 -g
++LDFLAGS +=
++LDLIBS ?=
++
++OS ?= $(shell uname | tr 'A-Z' 'a-z')
++INSTALL ?= install
++
++VERS = $(shell ./vers.sh)
++TARG = beanstalkd
++MOFILE = main.o
++OFILES = \
+ $(OS).o\
+ conn.o\
+ file.o\
+@@ -29,52 +28,44 @@ OFILES=\
+ vers.o\
+ walg.o\
+
+-TOFILES=\
++TOFILES = \
+ testheap.o\
+ testjobs.o\
+ testserv.o\
+ testutil.o\
+
+-HFILES=\
++HFILES = \
+ dat.h\
+ sd-daemon.h\
+
+ ifeq ($(OS),linux)
+-
+-LDLIBS=\
+- -lrt\
+-
++ LDLIBS += -lrt
+ endif
+
+-CLEANFILES=\
++CLEANFILES = \
+ vers.c\
+
+-.PHONY: all
+ all: $(TARG)
+
+ $(TARG): $(OFILES) $(MOFILE)
+ $(LINK.o) -o $@ $^ $(LDLIBS)
+
+-.PHONY: install
+ install: $(BINDIR)/$(TARG)
+
+ $(BINDIR)/%: %
+ $(INSTALL) -d $(dir $@)
+ $(INSTALL) $< $@
+
+-CLEANFILES:=$(CLEANFILES) $(TARG)
++CLEANFILES := $(CLEANFILES) $(TARG)
+
+ $(OFILES) $(MOFILE): $(HFILES)
+
+-.PHONY: clean
+ clean:
+ rm -f *.o $(CLEANFILES)
+
+-.PHONY: check
+ check: ct/_ctcheck
+ ct/_ctcheck
+
+-.PHONY: bench
+ bench: ct/_ctcheck
+ ct/_ctcheck -b
+
+@@ -88,11 +79,8 @@ ct/ct.o ct/_ctcheck.o: ct/ct.h ct/internal.h
+
+ $(TOFILES): $(HFILES) ct/ct.h
+
+-CLEANFILES:=$(CLEANFILES) ct/_* ct/*.o
++CLEANFILES += ct/_* ct/*.o
+
+-ifneq ($(shell ./verc.sh),$(shell cat vers.c 2>/dev/null))
+-.PHONY: vers.c
+-endif
+ vers.c:
+ ./verc.sh >vers.c
+
+@@ -100,3 +88,9 @@ doc/beanstalkd.1 doc/beanstalkd.1.html: doc/beanstalkd.ronn
+ ronn $<
+
+ freebsd.o: darwin.c
++
++.PHONY: all install clean check bench
++
++ifneq ($(shell ./verc.sh),$(shell cat vers.c 2>/dev/null))
++.PHONY: vers.c
++endif
--- /dev/null
+--- a/sd-daemon.c 2017-02-16 18:50:20.000000000 -0700
++++ b/sd-daemon.c 2017-02-16 19:21:09.086008361 -0700
+@@ -32,7 +32,7 @@
+ #include <sys/stat.h>
+ #include <sys/socket.h>
+ #include <sys/un.h>
+-#include <sys/fcntl.h>
++#include <fcntl.h>
+ #include <netinet/in.h>
+ #include <stdlib.h>
+ #include <errno.h>
--- /dev/null
+--- a/linux.c
++++ b/linux.c
+@@ -1,4 +1,6 @@
+ #define _XOPEN_SOURCE 600
++#include <unistd.h>
++#include <sys/types.h>
+ #include <stdint.h>
+ #include <fcntl.h>
+ #include <stdlib.h>
+@@ -19,7 +19,7 @@ static int epfd;
+ int
+ rawfalloc(int fd, int len)
+ {
+- return posix_fallocate(fd, 0, len);
++ return ftruncate(fd, len);
+ }
+
+