From 3c2b3bd8940d6255a23cadd635ca96e94afec070 Mon Sep 17 00:00:00 2001
From: coolsnowwolf <coolsnowwolf@gmail.com>
Date: Fri, 15 Nov 2024 22:53:02 +0800
Subject: [PATCH] forked-daapd: add package

---
 net/mwol/Makefile                          |  60 +++
 net/mwol/files/mwol.config                 |  11 +
 net/mwol/files/mwol.init                   |  56 +++
 net/mwol/files/mwol_config_json            |  56 +++
 net/mwol/files/ssl/ca.crt                  |  16 +
 net/mwol/files/ssl/client.crt              |  16 +
 net/mwol/files/ssl/client.key              |  27 ++
 net/njitclient/Makefile                    |  40 ++
 net/scutclient/Makefile                    |  59 +++
 sound/forked-daapd/Makefile                |  81 ++++
 sound/forked-daapd/files/forked-daapd.conf | 414 +++++++++++++++++++++
 sound/forked-daapd/files/forked-daapd.init |  15 +
 12 files changed, 851 insertions(+)
 create mode 100644 net/mwol/Makefile
 create mode 100644 net/mwol/files/mwol.config
 create mode 100755 net/mwol/files/mwol.init
 create mode 100644 net/mwol/files/mwol_config_json
 create mode 100644 net/mwol/files/ssl/ca.crt
 create mode 100644 net/mwol/files/ssl/client.crt
 create mode 100644 net/mwol/files/ssl/client.key
 create mode 100644 net/njitclient/Makefile
 create mode 100644 net/scutclient/Makefile
 create mode 100644 sound/forked-daapd/Makefile
 create mode 100644 sound/forked-daapd/files/forked-daapd.conf
 create mode 100644 sound/forked-daapd/files/forked-daapd.init

diff --git a/net/mwol/Makefile b/net/mwol/Makefile
new file mode 100644
index 00000000..c6412460
--- /dev/null
+++ b/net/mwol/Makefile
@@ -0,0 +1,60 @@
+#
+# Copyright (C) 2019 mleaf.org
+# 微信公众号【WiFi物联网】
+#
+# Copyright (C) 2021 ImmortalWrt
+# <https://immortalwrt.org>
+#
+# This is free software, licensed under the GNU General Public License v3.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mwol
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/Mleaf/mwol.git
+PKG_SOURCE_DATE:=2021-08-20
+PKG_SOURCE_VERSION:=5291e45b3baedd8bd38358bcd275ce35296df82e
+PKG_MIRROR_HASH:=5dde8ddc828c02b642e37e4e9726ab6f50e39c982da9b9d0a8e2595387504f1b
+
+PKG_LICENSE:=GPL-3.0
+PKG_LICENSE_FILES:=COPYING
+PKG_MAINTAINER:=mleaf <mleaf90@gmail.com>
+
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/mwol
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+libmosquitto-ssl +libopenssl +libpthread +luci-lib-json
+  TITLE:=MQTT Wake On Lan
+  URL:=http://www.mleaf.org
+endef
+
+define Package/mwol/description
+  Mwol is a project that uses mqtt to implement reverse proxy and
+  wake up the computer.
+endef
+
+define Package/mwol/install
+	$(INSTALL_DIR) $(1)/usr/sbin
+	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mwol $(1)/usr/sbin/mwol
+
+	$(INSTALL_DIR) $(1)/etc/config
+	$(INSTALL_DATA) files/mwol.config $(1)/etc/config/mwol
+	$(INSTALL_DIR) $(1)/etc/init.d
+	$(INSTALL_BIN) files/mwol.init $(1)/etc/init.d/mwol
+
+	$(INSTALL_DIR) $(1)/usr/sbin
+	$(INSTALL_BIN) files/mwol_config_json $(1)/usr/sbin/mwol_config_json
+	$(INSTALL_DIR) $(1)/usr/share/mwol/ssl
+	$(CP) files/ssl/* $(1)/usr/share/mwol/ssl/
+endef
+
+$(eval $(call BuildPackage,mwol))
diff --git a/net/mwol/files/mwol.config b/net/mwol/files/mwol.config
new file mode 100644
index 00000000..919c1935
--- /dev/null
+++ b/net/mwol/files/mwol.config
@@ -0,0 +1,11 @@
+
+config mwol 'mwol_conf'
+	option enable '0'
+	option hostname 'www.mleaf.org'
+	option port '1999'
+	option sslenable '1'
+	option cafile '/usr/share/mwol/ssl/ca.crt'
+	option crtfile '/usr/share/mwol/ssl/client.crt'
+	option keyfile '/usr/share/mwol/ssl/client.key'
+	option encryptionenable '0'
+
diff --git a/net/mwol/files/mwol.init b/net/mwol/files/mwol.init
new file mode 100755
index 00000000..f8048d1c
--- /dev/null
+++ b/net/mwol/files/mwol.init
@@ -0,0 +1,56 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2019 www.mleaf.org. All rights reserved.
+# 微信公众号【WiFi物联网】
+
+START=99
+STOP=10
+
+USE_PROCD=1
+
+PROG=/usr/sbin/mwol
+
+generate_mwol_conf()
+{
+	logger "Generate /tmp/mwol.json"
+	lua /usr/sbin/mwol_config_json > /tmp/mwol.json
+}
+
+start_service_real() {
+	local cfg="$1"
+	local enable
+	local id
+	config_get enable "$cfg" enable
+	config_get id "$cfg" id
+	if [ -z "$id" ]; then
+		mac=`cat /sys/class/net/eth0/address`
+		logger "mqtt id is not set to use eth0 by default: $mac"
+		uci set mwol.mwol_conf.id=$mac
+		uci commit mwol
+	fi
+
+	if [ "$enable" -eq 1 ]; then
+		generate_mwol_conf
+
+		procd_open_instance
+
+		procd_set_param command $PROG -c /tmp/mwol.json
+
+		procd_set_param respawn
+
+		procd_set_param stdout 1
+		procd_set_param stderr 1
+
+		procd_close_instance
+	fi
+}
+
+service_triggers() {
+	procd_add_reload_trigger "mwol"
+}
+
+start_service()
+{
+	config_load mwol
+
+	config_foreach start_service_real mwol
+}
diff --git a/net/mwol/files/mwol_config_json b/net/mwol/files/mwol_config_json
new file mode 100644
index 00000000..2ea55aa5
--- /dev/null
+++ b/net/mwol/files/mwol_config_json
@@ -0,0 +1,56 @@
+#!/usr/bin/env lua
+--Copyright (c) 2019 www.mleaf.org. All rights reserved.
+--微信公众号【WiFi物联网】
+
+ubus = require('ubus')
+
+local json = require "luci.json"
+
+local conn = ubus.connect()
+if not conn then
+	error("Failed to connect to ubus")
+end
+
+local mwol_ubus = conn:call("uci", "get", {config = "mwol"})
+
+local mwol_table = mwol_ubus["values"]
+
+local mwol_conf = {}
+local mwo_enable
+
+function get_mwol_conf(mTable)
+
+	for key, val in pairs(mTable) do
+		if string.match(key, '%.[%a]*', 1) == nil then
+			if key == "enable" then
+				mwo_enable = val
+			elseif key == "sslenable" then
+				if val == "1" then
+					mwol_conf["ssl"] =  true
+				else
+					mwol_conf["ssl"] =  false
+				end
+			elseif key=="encryptionenable" then
+				if val == "1" then
+					mwol_conf["encryption"] =  true
+				else
+					mwol_conf["encryption"] =  false
+				end
+			elseif key == "port" then
+				mwol_conf[key] = tonumber(val)
+			else
+				mwol_conf[key] = val
+			 end
+		end
+	end
+end
+
+for key, val in pairs(mwol_table) do
+
+	if key == "mwol_conf" then
+		get_mwol_conf(val)
+	end
+end
+
+jsonStr = json.encode(mwol_conf)
+print(jsonStr)
diff --git a/net/mwol/files/ssl/ca.crt b/net/mwol/files/ssl/ca.crt
new file mode 100644
index 00000000..0100bef3
--- /dev/null
+++ b/net/mwol/files/ssl/ca.crt
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICljCCAX4CCQCKs4OCFSYhzjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJj
+YTAeFw0yMDAxMDcwNDEwMTJaFw0zMDAxMDQwNDEwMTJaMA0xCzAJBgNVBAMMAmNh
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3LwOkCJ1MDajCRK4jTgf
+0cnapRPOs6xZFru0NgHMY7R6hlmBk8asHJIM+B9c3hGqEYERkRTR586lUWiE1n/i
+VTTa5kblEb48p9dDaeUHtGB5FYvJQDgpdyy+dbqgFs/LbZ4mngz0rBeY4ukxu3lX
+Zcs2DOGYnZd2uun7TSd5k6276tjzljcVfPigBN0U1YMyhPv+vo66bYBH+QFBXgd+
+8+Be5nCEY2IQjaeTbpobcnz1x9iyfrqDc1Xk+d+dnHoajdgIdWKgR6rTcKlMNwh+
+SVz1zU1GmzUtD+dfpB2mc8f1G3J1bXA2n8Jt568KH6Gx8KvX6NXpvK+vHcmFTaDv
+CQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAwJ8xvUtSEhYuFOGCZ1fWz1Q8lLtC6
+tNARV4C+JmT63mBkwP2tHC5GjbgCQTtYA8bgiEAsZkYL7wDw4R6104xHVmpYSaoN
+lZxSps2t7WfpwABzaHZaeIzlZ+7lkamLb5It9yAvJTEN2L3opdRFleumz+3mpouM
+VjBN6g3xX1SUmPoWn8QW7NvK9KwZHdr6uALoZ8vGAaXg7OTZooHL4xlCyESLqnbA
+p7Nr1iiqhbRRcVeplljFGoAEMBlrx1x3rwtJl2gCBQmN802P+Vh4TdoWTBbFhdNR
+R3PeUvxu3rZYnFrcfmdiABnAzqAybxr8/GO/UHqooSD2PLwC/CiI4FjT
+-----END CERTIFICATE-----
diff --git a/net/mwol/files/ssl/client.crt b/net/mwol/files/ssl/client.crt
new file mode 100644
index 00000000..a5f45c2a
--- /dev/null
+++ b/net/mwol/files/ssl/client.crt
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICmjCCAYICCQDPwW2AAN66QDANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJj
+YTAeFw0yMDAxMDcwNDEwMTJaFw0zMDAxMDQwNDEwMTJaMBExDzANBgNVBAMMBmNs
+aWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPHfX5Eb6fEz/DSL
+JwTC+ZoToYIi4Nw4n+MyTGzMrNRXGKCX52/h9DrWUNNpACZ2O3SVSdgTknv2g0oZ
+wjr0xEhMILYwAauzA9N6IcLZcZ2RMvRXyY0KRvVluBEgrZty0oEHgFE2BSMENF6P
+BWRmWJs8s91Ckt8JkHfkXR7ul8Wba9ETQldZ1Z9lHgawbxuQARq6IduqtrqHwId0
+LLYGF7bsYf/IL5ZtQs66+ldJUiUcRAwaR12X6kwn1dATpcgJlxiq4LCYP3wde3Ja
+wqbW57S7FBoVInjboieGAGBV9Cd3jW19hLQCzAO5Y81N6GSBX5uxu4RkbgMEmWOw
+/T7Wq30CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAz5let8l3UXdhVSim+ZT5Q+l9
+jTJxheSct5MnZ+68qkF7Aax0DY6eB2RTymv/uQ9TBOKPGnOQAW/c328t39XP2PRY
+tqN30iyYsmxZ/AXVDykEnV4GlssgJKWPrC+oca80+FT8O+k0QjiAFbVdpRfkr/rh
+IMBRt/E0vuaqEPfgS7b9SrE8cH+InZMvoeV1PKDBnMCnROO6jHo27iV1yJxJd0Eu
+JmOBHnIcFh3SD8kh4boPO4IiHY6FS3rDgaVveITc6faZSDvyjkv5Yqvl+n79V3M9
+zISgdkNYkEG50dJiVPoVNq0SLt4kWTpRKs3WgZEN4wZVQCu9Ijtf+4hmqeWmTg==
+-----END CERTIFICATE-----
diff --git a/net/mwol/files/ssl/client.key b/net/mwol/files/ssl/client.key
new file mode 100644
index 00000000..41451e4c
--- /dev/null
+++ b/net/mwol/files/ssl/client.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA8d9fkRvp8TP8NIsnBML5mhOhgiLg3Dif4zJMbMys1FcYoJfn
+b+H0OtZQ02kAJnY7dJVJ2BOSe/aDShnCOvTESEwgtjABq7MD03ohwtlxnZEy9FfJ
+jQpG9WW4ESCtm3LSgQeAUTYFIwQ0Xo8FZGZYmzyz3UKS3wmQd+RdHu6XxZtr0RNC
+V1nVn2UeBrBvG5ABGroh26q2uofAh3QstgYXtuxh/8gvlm1Czrr6V0lSJRxEDBpH
+XZfqTCfV0BOlyAmXGKrgsJg/fB17clrCptbntLsUGhUieNuiJ4YAYFX0J3eNbX2E
+tALMA7ljzU3oZIFfm7G7hGRuAwSZY7D9PtarfQIDAQABAoIBACkFdGTc8hlZcr3K
+l+yD0OdjyvGSTsaqx9s1jaaqM+mzd9bMzJC6JrzP2ldwqHjddon4Q9TkxORHU87+
+fWWYW63TU3zyuWXQb6avQQiV7mIF3Tl5phJImu5FuSkWfLsvhyohBo8/dTGSJfuf
+kA+OGBsD+ZFeGCDBs4HR9kUnvA/kTsXFL2XsrjNvPP4d1z90H2GtVujhhH4mfEO1
+E8BL1crNMmZFek+ETk7GfZ/GE4oLtno1jaBczbpEa9wekjtq6ffoAGaAd5/6ZjIw
+tpC6bNSDGqL0fTd/6ss5WZc8hYLTdkcZxh08kpVP5WoWm5WSxh8osQ494w6upEuo
+p9qpRrUCgYEA+eRBhfAC0Cal5qTZTX4nbKdO7gkmxefcNfMF6eNJZ/oxOANEnl/Q
+sSyZvtzoxNPaPuYu4LrniaKqFKD6DqA2ZIKRf4o8ydfQeDMvz8Ly4rpzuIDi45kc
+sZ2S3aRh8IpDM4KOFachmBcjpyf2CPhJxeYLlHCMfASN5T2cGdpBKMcCgYEA98jv
+viDoDPRTglfNYWIvU4dHWel9zjySSey6L9Awpna22jdLVTcaplZQNVKJ7uajIj1A
+DA2GNDtZXHnUJBx9avMaURXBGLh/0S9NBMaeCRoQeCI1249/3xPQzKCWscvv2hPW
+vRUQMS+erfmSDxg8B5LOVqPXLagZ0QA33KkILZsCgYBEh+GkTrcmyIKU5z6k7uT2
++kc+JopYmgadUQGdK/T0q/uVhefqmxJLlJSxcDnxyLvApjXS8c8Pwulr8N3C5xMj
+q18loA6duC721+rTyn37yfB0d/xBOLtSxokBedRWOETHupUmwQgIgsgHToE94oGw
+4S7pzZfpZwJXDPdja6SU/wKBgQDLHUG5HwxZIicaX5MR0wRseiX5BDeGSYy5YH43
+F3fp3MKDGnR8RBFqbLKPIzvCQ/lR5deMicGLK2NTNOK7P0dn1iOqeCSzePn9pcKC
+ubVuTJlXgOOZOYZefMXaF4Gv+TaCE2Uh1hRR3XE7t6sNCJactrDBwMhwuq1+76jb
+DwyPJQKBgQCGX/+wwPnAvmtaKu9EUegp2hbmPXqLCexGAME/npUn071CYRoXb1OM
++13f7zWxC+5AIbcbX1LC+GrafeJGT/9VPqivvntwU2PtxfdPJ+wGkLcV+10gxV2l
+5+w86aMDefzlqvMCX6pp9SY8jtzYBYGhm5OFVQ4eRAkceHlpXtEf/w==
+-----END RSA PRIVATE KEY-----
diff --git a/net/njitclient/Makefile b/net/njitclient/Makefile
new file mode 100644
index 00000000..087bac0f
--- /dev/null
+++ b/net/njitclient/Makefile
@@ -0,0 +1,40 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=njit8021xclient
+PKG_BASE_VERSION:=2.0
+PKG_RELEASE:=$(AUTORELEASE)
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/bitdust/njit8021xclient.git
+PKG_SOURCE_DATE:=2018-11-24
+PKG_SOURCE_VERSION:=dd28c17f24275bbbf4c44504b832c0f1e6b9ae40
+PKG_MIRROR_HASH:=66e4f20ceeceaed457657b60ec0b390aab0d7ff380b0abe749738b8f4aa23556
+
+PKG_VERSION:=$(PKG_BASE_VERSION)-$(PKG_SOURCE_DATE)-$(call version_abbrev,$(PKG_SOURCE_VERSION))
+
+PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/njit8021xclient
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Campus Network
+  TITLE:=NJIT 802.1X client program
+  DEPENDS:=+libopenssl +libpcap
+endef
+
+define Package/njit8021xclient/description
+  802.1X client from Nanjing Institude of Technology, compatable with
+  H3C iNode 802.1X client. Support H3C/iNode's private authentication
+  protocol V7.10.
+endef
+
+define Package/njit8021xclient/install
+	$(INSTALL_DIR) $(1)/usr/sbin
+	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/njit-client $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,njit8021xclient))
diff --git a/net/scutclient/Makefile b/net/scutclient/Makefile
new file mode 100644
index 00000000..c9278245
--- /dev/null
+++ b/net/scutclient/Makefile
@@ -0,0 +1,59 @@
+#
+# Copyright (C) 2016-2018 SCUT Router Term
+#
+# This is free software, licensed under the GNU Affero General Public License v3.
+# See /COPYING for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=scutclient
+PKG_BASE_VERSION:=3.1.3
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/scutclient/scutclient.git
+PKG_SOURCE_DATE:=2021-11-26
+PKG_SOURCE_VERSION:=b265ca8ffea204bd1788b0addd42184496b8a118
+PKG_MIRROR_HASH:=798b31809f59f614e76c629bce2ab2c22b5589dca820c4302bc2974e5ab777bd
+
+PKG_VERSION:=$(PKG_BASE_VERSION)-$(PKG_SOURCE_DATE)-$(call version_abbrev,$(PKG_SOURCE_VERSION))
+
+PKG_MAINTAINER:=Scutclient Project
+PKG_LICENSE:=AGPL-3.0
+PKG_LICENSE_FILES:=COPYING
+
+PKG_BUILD_PARALLEL:=1
+CMAKE_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/scutclient
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Campus Network
+  TITLE:=SCUT Dr.com client
+  URL:=https://github.com/scutclient/scutclient
+endef
+
+define Package/scutclient/description
+  Support SCUT private authentication protocol.
+endef
+
+define Package/scutclient/conffiles
+/etc/config/scutclient
+endef
+
+define Package/scutclient/install
+	$(INSTALL_DIR) $(1)/etc/config
+	$(INSTALL_DATA) $(PKG_BUILD_DIR)/openwrt/files/scutclient.config $(1)/etc/config/scutclient
+	$(INSTALL_DIR) $(1)/etc/init.d
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/openwrt/files/scutclient.init $(1)/etc/init.d/scutclient
+	$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/openwrt/files/scutclient.hotplug $(1)/etc/hotplug.d/iface/99-scutclient
+	$(INSTALL_DIR) $(1)/usr/bin
+	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/scutclient $(1)/usr/bin
+endef
+
+$(eval $(call BuildPackage,scutclient))
diff --git a/sound/forked-daapd/Makefile b/sound/forked-daapd/Makefile
new file mode 100644
index 00000000..cfefd61a
--- /dev/null
+++ b/sound/forked-daapd/Makefile
@@ -0,0 +1,81 @@
+#
+# Copyright (C) 2006-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=forked-daapd
+PKG_VERSION:=27.2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://github.com/ejurgensen/$(PKG_NAME)/releases/download/$(PKG_VERSION)/
+PKG_HASH:=27294a893253d232161f4521fc42147e65324ce5a13fcf550b537100375277bb
+
+PKG_FIXUP:=autoreconf
+PKG_USE_MIPS16:=0
+PKG_INSTALL:=1
+
+PKG_MAINTAINER:=Espen Jürgensen <espenjurgensen+openwrt@gmail.com>
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/nls.mk
+
+define Package/forked-daapd
+SECTION:=sound
+CATEGORY:=Sound
+TITLE:=iTunes (DAAP) server for Apple Remote and AirPlay
+URL:=https://github.com/ejurgensen/forked-daapd
+DEPENDS:=+libgpg-error +libgcrypt +libgdbm +zlib +libexpat +libunistring \
+	+libevent2 +libdaemon +libantlr3c +confuse +libopus +alsa-lib +libffmpeg-full \
+	+mxml +libavahi-client +sqlite3-cli +libplist +libcurl +libjson-c \
+	+libprotobuf-c +libgnutls +libsodium +libwebsockets-full $(ICONV_DEPENDS)
+endef
+
+define Package/forked-daapd/description
+  forked-daapd is a Linux/FreeBSD DAAP (iTunes), MPD (Music Player Daemon) and
+  RSP (Roku) media server. It has support for AirPlay speakers, Chromecast,
+  Apple Remote (and compatibles), MPD clients, internet radio and LastFM. It
+  does not support AirPlay/Chromecast video.
+endef
+
+define Package/forked-daapd/conffiles
+/etc/forked-daapd.conf
+endef
+
+CONFIGURE_ARGS += \
+	--enable-itunes \
+	--enable-lastfm \
+	--enable-mpd \
+	--enable-chromecast \
+	--enable-verification \
+	--enable-webinterface \
+	--disable-spotify \
+	--with-libplist \
+	--with-libwebsockets-full \
+	--with-alsa \
+	--without-pulseaudio \
+	--without-libevent_pthreads
+
+TARGET_CFLAGS += $(FPIC)
+TARGET_LDFLAGS += -Wl,-rpath-link,$(STAGING_DIR)/usr/lib
+
+define Package/forked-daapd/install
+	$(INSTALL_DIR) $(1)/usr/sbin
+	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/forked-daapd $(1)/usr/sbin/
+	$(INSTALL_DIR) $(1)/etc
+	$(INSTALL_CONF) ./files/forked-daapd.conf $(1)/etc/forked-daapd.conf
+	$(INSTALL_DIR) $(1)/usr/lib/forked-daapd
+	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/forked-daapd/* $(1)/usr/lib/forked-daapd/
+	$(INSTALL_DIR) $(1)/usr/share/forked-daapd/htdocs
+	$(CP) $(PKG_BUILD_DIR)/htdocs/* $(1)/usr/share/forked-daapd/htdocs/
+	#$(INSTALL_DIR) $(1)/etc/init.d
+	#$(INSTALL_BIN) ./files/forked-daapd.init $(1)/etc/init.d/forked-daapd
+endef
+
+$(eval $(call BuildPackage,forked-daapd))
diff --git a/sound/forked-daapd/files/forked-daapd.conf b/sound/forked-daapd/files/forked-daapd.conf
new file mode 100644
index 00000000..d7c2a80c
--- /dev/null
+++ b/sound/forked-daapd/files/forked-daapd.conf
@@ -0,0 +1,414 @@
+# A quick guide to configuring forked-daapd:
+#
+# For regular use, the most important setting to configure is "directories",
+# which should be the location of your media. Whatever user you have set as
+# "uid" must have read access to this location. If the location is a network
+# mount, please see the README.
+#
+# In all likelihood, that's all you need to do!
+
+general {
+	# Username
+	# Make sure the user has read access to the library directories you set
+	# below, and full access to the databases, log and local audio
+	uid = "root"
+
+	# Database location
+	db_path = "/opt/forked-daapd/songs3.db"
+
+	# Log file and level
+	# Available levels: fatal, log, warning, info, debug, spam
+	logfile = "/var/log/forked-daapd.log"
+	loglevel = log
+
+	# Admin password for the web interface
+	# Note that access to the web interface from computers in
+	# "trusted_network" (see below) does not require password
+#	admin_password = ""
+
+	# Websocket port for the web interface.
+#	websocket_port = 3688
+
+	# Sets who is allowed to connect without authorisation. This applies to
+	# client types like Remotes, DAAP clients (iTunes) and to the web
+	# interface. Options are "any", "localhost" or the prefix to one or
+	# more ipv4/6 networks. The default is { "localhost", "192.168", "fd" }
+#	trusted_networks = { "localhost", "192.168", "fd" }
+
+	# Enable/disable IPv6
+	ipv6 = no
+
+	# Location of cache database
+	cache_path = "/var/forked-daapd-cache.db"
+
+	# DAAP requests that take longer than this threshold (in msec) get their
+	# replies cached for next time. Set to 0 to disable caching.
+#	cache_daap_threshold = 1000
+
+	# When starting playback, autoselect speaker (if none of the previously
+	# selected speakers/outputs are available)
+#	speaker_autoselect = no
+
+	# Most modern systems have a high-resolution clock, but if you are on an
+	# unusual platform and experience audio drop-outs, you can try changing
+	# this option
+#	high_resolution_clock = yes
+}
+
+# Library configuration
+library {
+	# Name of the library as displayed by the clients (%h: hostname). If you
+	# change the name after pairing with Remote you may have to re-pair.
+	name = "My Music on %h"
+
+	# TCP port to listen on. Default port is 3689 (daap)
+	port = 3689
+
+	# Password for the library. Optional.
+#	password = ""
+
+	# Directories to index
+	directories = { "/opt/music" }
+
+	# Follow symlinks. Default: true.
+#	follow_symlinks = true
+
+	# Directories containing podcasts
+	# For each directory that is indexed the path is matched against these
+	# names. If there is a match all items in the directory are marked as
+	# podcasts. Eg. if you index /srv/music, and your podcasts are in
+	# /srv/music/Podcasts, you can set this to "/Podcasts".
+	# (changing this setting only takes effect after rescan, see the README)
+	podcasts = { "/Podcasts" }
+
+	# Directories containing audiobooks
+	# For each directory that is indexed the path is matched against these
+	# names. If there is a match all items in the directory are marked as
+	# audiobooks.
+	# (changing this setting only takes effect after rescan, see the README)
+	audiobooks = { "/Audiobooks" }
+
+	# Directories containing compilations (eg soundtracks)
+	# For each directory that is indexed the path is matched against these
+	# names. If there is a match all items in the directory are marked as
+	# compilations.
+	# (changing this setting only takes effect after rescan, see the README)
+	compilations = { "/Compilations" }
+
+	# Compilations usually have many artists, and sometimes no album artist.
+	# If you don't want every artist to be listed in artist views, you can
+	# set a single name which will be used for all compilation tracks
+	# without an album artist, and for all tracks in the compilation
+	# directories.
+	# (changing this setting only takes effect after rescan, see the README)
+	compilation_artist = "Various Artists"
+
+	# If your album and artist lists are cluttered, you can choose to hide
+	# albums and artists with only one track. The tracks will still be
+	# visible in other lists, e.g. songs and playlists. This setting
+	# currently only works in some remotes.
+#	hide_singles = false
+
+	# Internet streams in your playlists will by default be shown in the
+	# "Radio" library, like iTunes does. However, some clients (like
+	# TunesRemote+) won't show the "Radio" library. If you would also like
+	# to have them shown like normal playlists, you can enable this option.
+#	radio_playlists = false
+
+	# These are the default playlists. If you want them to have other names,
+	# you can set it here.
+#	name_library    = "Library"
+#	name_music      = "Music"
+#	name_movies     = "Movies"
+#	name_tvshows    = "TV Shows"
+#	name_podcasts   = "Podcasts"
+#	name_audiobooks = "Audiobooks"
+#	name_radio      = "Radio"
+
+	# Artwork file names (without file type extension)
+	# forked-daapd will look for jpg and png files with these base names
+#	artwork_basenames = { "artwork", "cover", "Folder" }
+
+	# Enable searching for artwork corresponding to each individual media
+	# file instead of only looking for album artwork. This is disabled by
+	# default to reduce cache size.
+#	artwork_individual = false
+
+	# File types the scanner should ignore
+	# Non-audio files will never be added to the database, but here you
+	# can prevent the scanner from even probing them. This might improve
+	# scan time. By default .db, .ini, .db-journal, .pdf and .metadata are
+	# ignored.
+#	filetypes_ignore = { ".db", ".ini", ".db-journal", ".pdf", ".metadata" }
+
+	# File paths the scanner should ignore
+	# If you want to exclude files on a more advanced basis you can enter
+	# one or more POSIX regular expressions, and any file with a matching
+	# path will be ignored.
+#	filepath_ignore = { "myregex" }
+
+	# Disable startup file scanning
+	# When forked-daapd starts it will do an initial file scan of your
+	# library (and then watch it for changes). If you are sure your library
+	# never changes while forked-daapd is not running, you can disable the
+	# initial file scan and save some system ressources. Disabling this scan
+	# may lead to forked-daapd's database coming out of sync with the
+	# library. If that happens read the instructions in the README on how
+	# to trigger a rescan.
+#	filescan_disable = false
+
+	# Should metadata from m3u playlists, e.g. artist and title in EXTINF,
+	# override the metadata we get from radio streams?
+#	m3u_overrides = false
+
+	# Should iTunes metadata override ours?
+#	itunes_overrides = false
+
+	# Should we import the content of iTunes smart playlists?
+#	itunes_smartpl = false
+
+	# Decoding options for DAAP clients
+	# Since iTunes has native support for mpeg, mp4a, mp4v, alac and wav,
+	# such files will be sent as they are. Any other formats will be decoded
+	# to raw wav. If forked-daapd detects a non-iTunes DAAP client, it is
+	# assumed to only support mpeg and wav, other formats will be decoded.
+	# Here you can change when to decode. Note that these settings have no
+	# effect on AirPlay.
+	# Formats: mp4a, mp4v, mpeg, alac, flac, mpc, ogg, wma, wmal, wmav, aif, wav
+	# Formats that should never be decoded
+#	no_decode = { "format", "format" }
+	# Formats that should always be decoded
+#	force_decode = { "format", "format" }
+
+	# Watch named pipes in the library for data and autostart playback when
+	# there is data to be read. To exclude specific pipes from watching,
+	# consider using the above _ignore options.
+#	pipe_autostart = true
+
+	# Enable automatic rating updates
+	# If enabled, rating is automatically updated after a song has either been
+	# played or skipped (only skipping to the next song is taken into account).
+	# The calculation is taken from the beets plugin "mpdstats" (see
+	# https://beets.readthedocs.io/en/latest/plugins/mpdstats.html).
+	# It consist of calculating a stable rating based only on the play- and
+	# skipcount and a rolling rating based on the current rating and the action
+	# (played or skipped). Both results are combined with a mix-factor of 0.75:
+	# new rating = 0.75 * stable rating + 0.25 * rolling rating)
+#	rating_updates = false
+
+	# Allows creating, deleting and modifying m3u playlists in the library directories.
+	# Only supported by the player web interface and some mpd clients
+	# Defaults to being disabled.
+#	allow_modifying_stored_playlists = false
+
+	# A directory in one of the library directories that will be used as the default
+	# playlist directory. forked-dapd creates new playlists in this directory if only
+	# a playlist name is provided (requires "allow_modify_stored_playlists" set to true).
+#	default_playlist_directory = ""
+}
+
+# Local audio output
+audio {
+	# Name - used in the speaker list in Remote
+	nickname = "OpenWrt"
+
+	# Type of the output (alsa, pulseaudio, dummy or disabled)
+#	type = "alsa"
+
+	# For pulseaudio output, an optional server hostname or IP can be
+	# specified (e.g. "localhost"). If not set, connection is made via local
+	# socket.
+#	server = ""
+
+	# Audio PCM device name for local audio output - ALSA only
+#	card = "default"
+
+	# Mixer channel to use for volume control - ALSA only
+	# If not set, PCM will be used if available, otherwise Master.
+#	mixer = ""
+
+	# Mixer device to use for volume control - ALSA only
+	# If not set, the value for "card" will be used.
+#	mixer_device = ""
+
+	# Enable or disable audio resampling to keep local audio in sync with
+	# e.g. Airplay. This feature relies on accurate ALSA measurements of
+	# delay, and some devices don't provide that. If that is the case you
+	# are better off disabling the feature.
+#	sync_disable = false
+
+	# Here you can adjust when local audio is started relative to other
+	# speakers, e.g. Airplay. Negative values correspond to moving local
+	# audio ahead, positive correspond to delaying it. The unit is
+	# milliseconds. The offset must be between -1000 and 1000 (+/- 1 sec).
+#	offset_ms = 0
+
+	# To calculate what and if resampling is required, local audio delay is
+	# measured each second. After a period the collected measurements are
+	# used to estimate drift and latency, which determines if corrections
+	# are required. This setting sets the length of that period in seconds.
+#	adjust_period_seconds = 100
+}
+
+# ALSA device settings
+# If you have multiple ALSA devices you can configure them individually via
+# sections like the below. Make sure to set the "card name" correctly. See the
+# README about ALSA for details. Note that these settings will override the ALSA
+# settings in the "audio" section above.
+#alsa "card name" {
+	# Name - used in the speaker list in Remote
+	# If not set, the card name will be used
+#	nickname = "Computer"
+
+	# Mixer channel to use for volume control
+	# If not set, PCM will be used if available, otherwise Master
+#	mixer = ""
+
+	# Mixer device to use for volume control
+	# If not set, the card name will be used
+#	mixer_device = ""
+#}
+
+# Pipe output
+# Allows forked-daapd to output audio data to a named pipe
+#fifo {
+#	nickname = "fifo"
+#	path = "/path/to/fifo"
+#}
+
+# AirPlay settings common to all devices
+#airplay_shared {
+        # UDP ports used when airplay devices make connections back to forked-daapd
+        # (choosing specific ports may be helpful when running forked-daapd behind a firewall)
+#       control_port = 0
+#       timing_port = 0
+#}
+
+# AirPlay per device settings
+# (make sure you get the capitalization of the device name right)
+#airplay "My AirPlay device" {
+	# forked-daapd's volume goes to 11! If that's more than you can handle
+	# you can set a lower value here
+#	max_volume = 11
+
+	# Enable this option to exclude a particular AirPlay device from the
+	# speaker list
+#	exclude = false
+
+	# Enable this option to keep a particular AirPlay device in the speaker
+	# list and thus ignore mdns notifications about it no longer being
+	# present. The speaker will remain until restart of forked-daapd.
+#	permanent = false
+
+	# Some devices spuriously disconnect during playback, and based on the
+	# device type forked-daapd may attempt to reconnect. Setting this option
+	# overrides this so reconnecting is either always enabled or disabled.
+#	reconnect = false
+
+	# AirPlay password
+#	password = "s1kr3t"
+#}
+
+# Chromecast settings
+# (make sure you get the capitalization of the device name right)
+#chromecast "My Chromecast device" {
+	# Enable this option to exclude a particular device from the speaker
+	# list
+#	exclude = false
+#}
+
+# Spotify settings (only have effect if Spotify enabled - see README/INSTALL)
+spotify {
+	# Directory where user settings should be stored (credentials)
+#	settings_dir = "/var/cache/forked-daapd/libspotify"
+
+	# Cache directory
+#	cache_dir = "/tmp"
+
+	# Set preferred bitrate for music streaming
+	# 0: No preference (default), 1: 96kbps, 2: 160kbps, 3: 320kbps
+#	bitrate = 0
+
+	# Your Spotify playlists will by default be put in a "Spotify" playlist
+	# folder. If you would rather have them together with your other
+	# playlists you can set this option to true.
+#	base_playlist_disable = false
+
+	# Spotify playlists usually have many artist, and if you don't want
+	# every artist to be listed when artist browsing in Remote, you can set
+	# the artist_override flag to true. This will use the compilation_artist
+	# as album artist for Spotify items.
+#	artist_override = false
+
+	# Similar to the different artists in Spotify playlists, the playlist
+	# items belong to different albums, and if you do not want every album
+	# to be listed when browsing in Remote, you can set the album_override
+	# flag to true. This will use the playlist name as album name for
+	# Spotify items. Notice that if an item is in more than one playlist,
+	# it will only appear in one album when browsing (in which album is
+	# random).
+#	album_override = false
+}
+
+# MPD configuration (only have effect if MPD enabled - see README/INSTALL)
+mpd {
+	# TCP port to listen on for MPD client requests.
+	# Default port is 6600, set to 0 to disable MPD support.
+#	port = 6600
+
+	# HTTP port to listen for artwork requests (only supported by some MPD
+	# clients and will need additional configuration in the MPD client to
+	# work). Set to 0 to disable serving artwork over http.
+#	http_port = 0
+
+	# By default forked-daapd will - like iTunes - clear the playqueue if
+	# playback stops. Setting clear_queue_on_stop_disable to true will keep
+	# the playlist like MPD does. Note that some dacp clients do not show
+	# the playqueue if playback is stopped.
+#	clear_queue_on_stop_disable = false
+}
+
+# SQLite configuration (allows to modify the operation of the SQLite databases)
+# Make sure to read the SQLite documentation for the corresponding PRAGMA
+# statements as changing them from the defaults may increase the possibility of
+# database corruptions! By default the SQLite default values are used.
+sqlite {
+	# Cache size in number of db pages for the library database
+	# (SQLite default page size is 1024 bytes and cache size is 2000 pages)
+#	pragma_cache_size_library = 2000
+
+	# Cache size in number of db pages for the daap cache database
+	# (SQLite default page size is 1024 bytes and cache size is 2000 pages)
+#	pragma_cache_size_cache = 2000
+
+	# Sets the journal mode for the database
+	# DELETE (default), TRUNCATE, PERSIST, MEMORY, WAL, OFF
+#	pragma_journal_mode = DELETE
+
+	# Change the setting of the "synchronous" flag
+	# 0: OFF, 1: NORMAL, 2: FULL (default)
+#	pragma_synchronous = 2
+
+	# Number of bytes set aside for memory-mapped I/O  for the library database
+	# (requires sqlite 3.7.17 or later)
+	# 0: disables mmap (default), any other value > 0: number of bytes for mmap
+#	pragma_mmap_size_library = 0
+
+	# Number of bytes set aside for memory-mapped I/O for the cache database
+	# (requires sqlite 3.7.17 or later)
+	# 0: disables mmap (default), any other value > 0: number of bytes for mmap
+#	pragma_mmap_size_cache = 0
+
+	# Should the database be vacuumed on startup? (increases startup time,
+	# but may reduce database size). Default is yes.
+#	vacuum = yes
+}
+
+# Streaming audio settings for remote connections (ie stream.mp3)
+streaming {
+	# Sample rate, typically 44100 or 48000
+#	sample_rate = 44100
+
+	# Set the MP3 streaming bit rate (in kbps), valid options: 64 / 96 / 128 / 192 / 320
+#	bit_rate = 192
+}
diff --git a/sound/forked-daapd/files/forked-daapd.init b/sound/forked-daapd/files/forked-daapd.init
new file mode 100644
index 00000000..3ae38f9a
--- /dev/null
+++ b/sound/forked-daapd/files/forked-daapd.init
@@ -0,0 +1,15 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2014 OpenWrt.org
+
+START=99
+BIN=/usr/sbin/forked-daapd
+PID=/var/run/forked-daapd.pid
+SSD=start-stop-daemon
+
+start() {
+        $SSD -p $PID -S -x $BIN -- -P $PID
+}
+	
+stop() {
+        $SSD -p $PID -K -s SIGINT
+}