From 61b2c378aea81c515d02436364f90e4d597d4266 Mon Sep 17 00:00:00 2001 From: nbd Date: Sat, 22 Dec 2012 18:56:06 +0000 Subject: procd: add initial implementation procd is the new OpenWrt process management daemon. It keeps track of processes started from init scripts (via ubus calls), and can suppress redundant service start/restart requests when the config/environment has not changed. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34865 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/procd/Makefile | 37 +++++++++ package/procd/files/procd.init | 19 +++++ package/procd/files/procd.sh | 171 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 package/procd/Makefile create mode 100644 package/procd/files/procd.init create mode 100644 package/procd/files/procd.sh (limited to 'package/procd') diff --git a/package/procd/Makefile b/package/procd/Makefile new file mode 100644 index 000000000..033090557 --- /dev/null +++ b/package/procd/Makefile @@ -0,0 +1,37 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=procd +PKG_VERSION:=2012-12-20 +PKG_RELEASE=$(PKG_SOURCE_VERSION) + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=git://nbd.name/luci2/procd.git +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE_VERSION:=d343dd9e9a64d4ae7d225ea29169e97fa8d116a1 +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz +CMAKE_INSTALL:=1 + +PKG_LICENSE:=GPLv2 +PKG_LICENSE_FILES:= + +PKG_MAINTAINER:=Felix Fietkau + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +define Package/procd + SECTION:=base + CATEGORY:=Base system + DEPENDS:=+ubusd +ubus + TITLE:=OpenWrt system process manager +endef + +define Package/procd/install + $(INSTALL_DIR) $(1)/sbin $(1)/lib/functions $(1)/etc/init.d + + $(CP) $(PKG_INSTALL_DIR)/usr/sbin/procd $(1)/sbin/ + $(INSTALL_BIN) ./files/procd.init $(1)/etc/init.d/procd + $(INSTALL_DATA) ./files/procd.sh $(1)/lib/functions/ +endef + +$(eval $(call BuildPackage,procd)) diff --git a/package/procd/files/procd.init b/package/procd/files/procd.init new file mode 100644 index 000000000..3df5f48e6 --- /dev/null +++ b/package/procd/files/procd.init @@ -0,0 +1,19 @@ +#!/bin/sh /etc/rc.common + +START=11 + +start_stop() { + start-stop-daemon $1 -b -m -p /var/run/procd.pid -x /sbin/procd +} + +start() { + start_stop -S +} + +reload() { + return +} + +stop() { + start_stop -K +} diff --git a/package/procd/files/procd.sh b/package/procd/files/procd.sh new file mode 100644 index 000000000..e771e0c15 --- /dev/null +++ b/package/procd/files/procd.sh @@ -0,0 +1,171 @@ +# procd API: +# +# procd_open_service(name, [script]): +# Initialize a new procd command message containing a service with one or more instances +# +# procd_close_service() +# Send the command message for the service +# +# procd_open_instance([name]): +# Add an instance to the service described by the previous procd_open_service call +# +# procd_set_param(type, [value...]) +# Available types: +# command: command line (array). +# env: environment variable (passed to the process) +# data: arbitrary name/value pairs for detecting config changes (table) +# file: configuration files (array) +# netdev: bound network device (detects ifindex changes) +# +# No space separation is done for arrays/tables - use one function argument per command line argument +# +# procd_close_instance(): +# Complete the instance being prepared +# +# procd_kill(service, [instance]): +# Kill a service instance (or all instances) +# + +. $IPKG_INSTROOT/usr/share/libubox/jshn.sh + +_PROCD_SERVICE= + +_procd_call() { + local old_cb + + json_set_namespace procd old_cb + "$@" + json_set_namespace $old_cb +} + +_procd_wrapper() { + while [ -n "$1" ]; do + eval "$1() { _procd_call _$1 \"\$@\"; }" + shift + done +} + +_procd_ubus_call() { + local cmd="$1" + + ubus call service "$cmd" "$(json_dump)" + json_cleanup +} + +_procd_open_service() { + local name="$1" + local script="$2" + + _PROCD_SERVICE="$name" + _PROCD_INSTANCE_SEQ=0 + + json_init + json_add_string name "$name" + [ -n "$script" ] && json_add_string script "$script" + json_add_object instances +} + +_procd_close_service() { + json_close_object + _procd_ubus_call set +} + +_procd_add_array_data() { + while [ -n "$1" ]; do + json_add_string "" "$1" + shift + done +} + +_procd_add_array() { + json_add_array "$1" + shift + _procd_add_array_data "$@" + json_close_array +} + +_procd_add_table_data() { + while [ -n "$1" ]; do + local var="${1%%=*}" + local val="${1#*=}" + [[ "$1" == "$val" ]] && val= + json_add_string "$var" "$val" + shift + done +} + +_procd_add_table() { + json_add_object "$1" + shift + _procd_add_table_data "$@" + json_close_object +} + +_procd_open_instance() { + local name="$1"; shift + + _PROCD_INSTANCE_SEQ="$(($_PROCD_INSTANCE_SEQ + 1))" + name="${name:-instance$_PROCD_INSTANCE_SEQ}" + json_add_object "$name" +} + +_procd_set_param() { + local type="$1"; shift + + case "$type" in + env|data) + _procd_add_table "$type" "$@" + ;; + command|netdev|file) + _procd_add_array "$type" "$@" + ;; + nice) + json_add_int "$type" "$1" + ;; + esac +} + +_procd_append_param() { + local type="$1"; shift + + json_select "$type" + case "$type" in + env|data) + _procd_add_table_data "$@" + ;; + command|netdev|file) + _procd_add_array_data "$@" + ;; + esac + json_select .. +} + +_procd_close_instance() { + json_close_object +} + +_procd_add_instance() { + _procd_open_instance + _procd_set_command "$@" + _procd_close_instance +} + +_procd_kill() { + local service="$1" + local instance="$2" + + json_init + [ -n "$service" ] && json_add_string service "$service" + [ -n "$instance" ] && json_add_string instance "$instance" + _procd_ubus_call delete +} + +_procd_wrapper \ + procd_open_service \ + procd_close_service \ + procd_add_instance \ + procd_open_instance \ + procd_close_instance \ + procd_set_param \ + procd_append_param \ + procd_kill -- cgit v1.2.3 From eb89fda29cbc4ba70741ea1cddae266033db1ae4 Mon Sep 17 00:00:00 2001 From: blogic Date: Wed, 13 Mar 2013 18:11:07 +0000 Subject: [procd] update to latest git head Signed-off-by: John Crispin git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36001 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/procd/Makefile | 19 ++++++-- package/procd/files/hotplug-preinit.json | 21 +++++++++ package/procd/files/hotplug.json | 80 ++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 package/procd/files/hotplug-preinit.json create mode 100644 package/procd/files/hotplug.json (limited to 'package/procd') diff --git a/package/procd/Makefile b/package/procd/Makefile index 033090557..25b0271b3 100644 --- a/package/procd/Makefile +++ b/package/procd/Makefile @@ -1,19 +1,21 @@ include $(TOPDIR)/rules.mk PKG_NAME:=procd -PKG_VERSION:=2012-12-20 +PKG_VERSION:=2012-03-13 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=git://nbd.name/luci2/procd.git PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=d343dd9e9a64d4ae7d225ea29169e97fa8d116a1 +PKG_SOURCE_VERSION:=8158e9052afbf2ee47de645167b90b6e7fc7d86d PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz CMAKE_INSTALL:=1 PKG_LICENSE:=GPLv2 PKG_LICENSE_FILES:= +PKG_CONFIG_DEPENDS:=CONFIG_PROCD_INIT + PKG_MAINTAINER:=Felix Fietkau include $(INCLUDE_DIR)/package.mk @@ -22,10 +24,20 @@ include $(INCLUDE_DIR)/cmake.mk define Package/procd SECTION:=base CATEGORY:=Base system - DEPENDS:=+ubusd +ubus + DEPENDS:=+ubusd +ubus +libjson_script TITLE:=OpenWrt system process manager endef +ifneq ($(CONFIG_PROCD_INIT),) +define Package/procd/install + $(INSTALL_DIR) $(1)/sbin $(1)/lib/functions $(1)/etc + + $(CP) $(PKG_INSTALL_DIR)/usr/sbin/{procd,askfirst,udevtrigger,logread} $(1)/sbin/ + $(INSTALL_DATA) ./files/hotplug*.json $(1)/etc/ + $(INSTALL_DATA) ./files/procd.sh $(1)/lib/functions/ + ln -s /sbin/procd $(1)/sbin/init +endef +else define Package/procd/install $(INSTALL_DIR) $(1)/sbin $(1)/lib/functions $(1)/etc/init.d @@ -33,5 +45,6 @@ define Package/procd/install $(INSTALL_BIN) ./files/procd.init $(1)/etc/init.d/procd $(INSTALL_DATA) ./files/procd.sh $(1)/lib/functions/ endef +endif $(eval $(call BuildPackage,procd)) diff --git a/package/procd/files/hotplug-preinit.json b/package/procd/files/hotplug-preinit.json new file mode 100644 index 000000000..d212b22fa --- /dev/null +++ b/package/procd/files/hotplug-preinit.json @@ -0,0 +1,21 @@ +[ + [ "case", "ACTION", { + "add": [ + [ "if", + [ "has", "FIRMWARE" ], + [ + [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ], + [ "load-firmware", "/lib/firmware" ], + [ "return" ] + ] + ], + ], + }, ], + [ "if", + [ "and", + [ "eq", "SUBSYSTEM", "button" ], + [ "eq", "BUTTON", "reset" ], + ], + [ "exec", "/etc/rc.button/failsafe" ] + ], +] diff --git a/package/procd/files/hotplug.json b/package/procd/files/hotplug.json new file mode 100644 index 000000000..43fec0c0d --- /dev/null +++ b/package/procd/files/hotplug.json @@ -0,0 +1,80 @@ +[ + [ "case", "ACTION", { + "add": [ + [ "if", + [ "and", + [ "has", "MAJOR" ], + [ "has", "MINOR" ], + ], + [ + [ "if", + [ "or", + [ "eq", "DEVNAME", + [ "null", "full", "ptmx", "zero" ], + ], + [ "regex", "DEVNAME", + [ "^gpio", "^hvc", "^tty" ], + ], + ], + [ + [ "makedev", "/dev/%DEVNAME%", "0666" ], + [ "return" ], + ] + ], + [ "if", + [ "or", + [ "eq", "DEVNAME", "mapper/control" ], + [ "regex", "DEVPATH", "^ppp" ], + ], + [ + [ "makedev", "/dev/%DEVNAME%", "0600" ], + [ "return" ], + ], + ], + [ "if", + [ "has", "DEVNAME" ], + [ + [ "makedev", "/dev/%DEVNAME%", "0644" ], + [ "return" ], + ], + ], + ], + ], + [ "if", + [ "has", "FIRMWARE" ], + [ + [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ], + [ "load-firmware", "/lib/firmware" ], + [ "return" ] + ] + ], + ], + "remove" : [ + [ "if", + [ "and", + [ "has", "DEVNAME" ], + [ "has", "MAJOR" ], + [ "has", "MINOR" ], + ], + [ "rm", "/dev/%DEVNAME%" ] + ] + ] + } ], + [ "if", + [ "eq", "SUBSYSTEM", "platform" ], + [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ] + ], + [ "if", + [ "and", + [ "has", "BUTTON" ], + [ "eq", "SUBSYSTEM", "button" ], + ], + [ "exec", "/etc/rc.button/%BUTTON%" ] + ], + [ "if", + [ "eq", "SUBSYSTEM", + [ "net", "input", "usb", "ieee1394", "block", "atm", "zaptel", "tty" ] + ], + [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ] + ], +] -- cgit v1.2.3 From e7436a23180eea12132ae059b71f7f557d2e0510 Mon Sep 17 00:00:00 2001 From: blogic Date: Wed, 13 Mar 2013 18:29:08 +0000 Subject: [procd] fix date and dependency Signed-off-by: John Crispin git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36006 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/procd/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'package/procd') diff --git a/package/procd/Makefile b/package/procd/Makefile index 25b0271b3..8cb1d3074 100644 --- a/package/procd/Makefile +++ b/package/procd/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=procd -PKG_VERSION:=2012-03-13 +PKG_VERSION:=2013-03-13 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_SOURCE_PROTO:=git @@ -24,7 +24,7 @@ include $(INCLUDE_DIR)/cmake.mk define Package/procd SECTION:=base CATEGORY:=Base system - DEPENDS:=+ubusd +ubus +libjson_script + DEPENDS:=+ubusd +ubus +libjson-script TITLE:=OpenWrt system process manager endef -- cgit v1.2.3 From bb775e6d67016f2219672c50c73891710e472439 Mon Sep 17 00:00:00 2001 From: blogic Date: Thu, 14 Mar 2013 18:44:03 +0000 Subject: [procd] fix up the mount options to match what openwrt had before using procd as pid 1 Signed-off-by: John Crispin git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36032 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/procd/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'package/procd') diff --git a/package/procd/Makefile b/package/procd/Makefile index 8cb1d3074..762fb5f18 100644 --- a/package/procd/Makefile +++ b/package/procd/Makefile @@ -1,13 +1,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=procd -PKG_VERSION:=2013-03-13 +PKG_VERSION:=2013-03-14 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=git://nbd.name/luci2/procd.git PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=8158e9052afbf2ee47de645167b90b6e7fc7d86d +PKG_SOURCE_VERSION:=9fcc900e301e0c304488b6b83f10c8db5b8f4ce0 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz CMAKE_INSTALL:=1 -- cgit v1.2.3 From 1d66193a3b7812b2d5fd38f36cbd3829d1d8d963 Mon Sep 17 00:00:00 2001 From: blogic Date: Wed, 3 Apr 2013 10:01:10 +0000 Subject: [procd] fix eglibc compile add librt dependency/link flag to procd when using eglibc thanks to jow for the help Signed-off-by: Etienne CHAMPETIER git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36188 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/procd/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'package/procd') diff --git a/package/procd/Makefile b/package/procd/Makefile index 762fb5f18..53c102a7c 100644 --- a/package/procd/Makefile +++ b/package/procd/Makefile @@ -21,10 +21,12 @@ PKG_MAINTAINER:=Felix Fietkau include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk +TARGET_LDFLAGS += $(if $(CONFIG_USE_EGLIBC),-lrt) + define Package/procd SECTION:=base CATEGORY:=Base system - DEPENDS:=+ubusd +ubus +libjson-script + DEPENDS:=+ubusd +ubus +libjson-script +USE_EGLIBC:librt TITLE:=OpenWrt system process manager endef -- cgit v1.2.3 From e703ef1fe95d870b37319eadffa4bad5a1b7ed1e Mon Sep 17 00:00:00 2001 From: blogic Date: Thu, 25 Apr 2013 19:02:20 +0000 Subject: procd: update to latest git version Signed-off-by: John Crispin git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36426 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/procd/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'package/procd') diff --git a/package/procd/Makefile b/package/procd/Makefile index 53c102a7c..f7751b4ef 100644 --- a/package/procd/Makefile +++ b/package/procd/Makefile @@ -1,13 +1,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=procd -PKG_VERSION:=2013-03-14 +PKG_VERSION:=2013-04-24 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=git://nbd.name/luci2/procd.git PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=9fcc900e301e0c304488b6b83f10c8db5b8f4ce0 +PKG_SOURCE_VERSION:=7edfbb45edcf275a855f5e1f5cc24cac81e382ff PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz CMAKE_INSTALL:=1 @@ -26,7 +26,7 @@ TARGET_LDFLAGS += $(if $(CONFIG_USE_EGLIBC),-lrt) define Package/procd SECTION:=base CATEGORY:=Base system - DEPENDS:=+ubusd +ubus +libjson-script +USE_EGLIBC:librt + DEPENDS:=+ubusd +ubus +libjson-script +USE_EGLIBC:librt +PROCD_INIT:ubox TITLE:=OpenWrt system process manager endef -- cgit v1.2.3 From 4ea4e6bcb036930b3498f7bdf6bc8fcfef112273 Mon Sep 17 00:00:00 2001 From: blogic Date: Thu, 25 Apr 2013 19:51:08 +0000 Subject: procd: fix wrap around bug in logread time handling code Signed-off-by: John Crispin git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36447 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/procd/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'package/procd') diff --git a/package/procd/Makefile b/package/procd/Makefile index f7751b4ef..afe0d0a8b 100644 --- a/package/procd/Makefile +++ b/package/procd/Makefile @@ -1,13 +1,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=procd -PKG_VERSION:=2013-04-24 +PKG_VERSION:=2013-04-25 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=git://nbd.name/luci2/procd.git PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=7edfbb45edcf275a855f5e1f5cc24cac81e382ff +PKG_SOURCE_VERSION:=c28ba8c1947e1b31874bf5888742d1607ed7ae61 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz CMAKE_INSTALL:=1 -- cgit v1.2.3