Add a startup and a uci configuration for ZNC. This allows configuring multiple users, loading modules with parameters (global and per user) and starts the ZNC binary as nobody. The latter requires su, so add this as a dependecy.
Signed-off-by: Jonas Gorski <[email protected]> --- net/znc/Makefile | 10 +++++- net/znc/files/znc.conf | 13 +++++++ net/znc/files/znc.init | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 1 deletions(-) create mode 100644 net/znc/files/znc.conf create mode 100644 net/znc/files/znc.init diff --git a/net/znc/Makefile b/net/znc/Makefile index 08364d4..1eaf795 100644 --- a/net/znc/Makefile +++ b/net/znc/Makefile @@ -29,7 +29,7 @@ endef define Package/znc $(Package/znc/default) - DEPENDS:=+libopenssl +uclibcxx + DEPENDS:=+libopenssl +uclibcxx +coreutils-su MENU:=1 endef @@ -39,6 +39,10 @@ define Package/znc/description bouncing, and c++ module support to name a few. endef +define Package/znc/conffiles +/etc/config/znc +endef + define Package/znc-mod-admin $(Package/znc/default) TITLE+= (admin plugin) @@ -388,6 +392,10 @@ endef define Package/znc/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/znc $(1)/usr/bin/ + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/znc.init $(1)/etc/init.d/znc + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DATA) ./files/znc.conf $(1)/etc/config/znc endef define Package/znc-mod-admin/install diff --git a/net/znc/files/znc.conf b/net/znc/files/znc.conf new file mode 100644 index 0000000..ba3f069 --- /dev/null +++ b/net/znc/files/znc.conf @@ -0,0 +1,13 @@ +config znc + # where to listen for connections + list listener '192.168.1.1 1234' + +config user 'sampleUser' + option password 'changeme' + option nick 'sampleUser' + option altnick 'userSample' + option ident 'openwrt' + option realname 'John Doe' + + # list of allowed servers + list server 'chat.freenode.net 6667' diff --git a/net/znc/files/znc.init b/net/znc/files/znc.init new file mode 100644 index 0000000..6e56efd --- /dev/null +++ b/net/znc/files/znc.init @@ -0,0 +1,92 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2010 Openwrt.org + +START=60 + +PID_FILE=/tmp/etc/znc/znc.pid +ZNC_CONFIG=/tmp/etc/znc/configs/znc.conf + +add_param() { + echo "$1 = $2" >> $ZNC_CONFIG +} + +znc_global() { + local znc="$1" + local anoniplimit + local maxbuffersize + local connectdelay + local serverthrottle + + + config_get anoniplimit "$znc" anoniplimit + config_get maxbuffersize "$znc" maxbuffersize + config_get connectdelay "$znc" connectdelay + config_get serverthrottle "$znc" serverthrottle + + [ -z $anoniplimit ] || echo "AnonIPLimit = $anoniplimit" >> $ZNC_CONFIG + [ -z $maxbuffersize ] || echo "MaxBufferSize = $maxbuffersize" >> $ZNC_CONFIG + [ -z $connectdelay ] || echo "ConnectDelay = $connectdelay" >> $ZNC_CONFIG + [ -z $serverthrottle ] || echo "ServerThrottle = $anoniplimit" >> $ZNC_CONFIG + + echo "PidFile = $PID_FILE" >> $ZNC_CONFIG + + config_list_foreach "$znc" listener "add_param Listener" + config_list_foreach "$znc" module "add_param LoadModule" +} + +add_user() { + local user="$1" + local password + local nick + local altnick + local ident + local realname + local buffer + local quitmsg + local chanmodes + local vhost + + config_get password "$user" password + config_get nick "$user" nick + config_get altnick "$user" altnick + config_get ident "$user" ident + config_get realname "$user" realname + config_get buffer "$user" buffer + config_get quitmsg "$user" quitmsg + config_get chanmodes "$user" chanmodes + config_get vhost "$user" vhost + + echo "<User $user>" >> $ZNC_CONFIG + echo " Pass = plain#$password" >> $ZNC_CONFIG + echo " Nick = $nick" >> $ZNC_CONFIG + echo " AltNick = ${altnick:-$nick"_"}" >> $ZNC_CONFIG + echo " Ident = ${ident:-$nick}" >> $ZNC_CONFIG + echo " RealName = ${realname:-$nick}" >> $ZNC_CONFIG + [ -z "$vhost" ] || echo " VHost = $vhost" >> $ZNC_CONFIG + echo " Buffer = ${buffer:-50}" >> $ZNC_CONFIG + echo " KeepBuffer = false" >> $ZNC_CONFIG + echo " ChanModes = ${chanmodes:-"+stn"}" >> $ZNC_CONFIG + [ -z "$quitmsg" ] || echo " QuitMsg = $quitmsg" >> $ZNC_CONFIG + + config_list_foreach "$user" server "add_param \" Server\"" + config_list_foreach "$user" module "add_param \" LoadModule\"" + echo "</User>" >> $ZNC_CONFIG +} + + +start() { + mkdir -p /tmp/etc/znc/configs/ + [ -f "$ZNC_CONFIG" ] && rm "$ZNC_CONFIG" + config_load znc + config_foreach znc_global znc + config_foreach add_listener listener + config_foreach add_user user + + chown -R nobody:nogroup /tmp/etc/znc + su -s /bin/ash -c "/usr/bin/znc -d/tmp/etc/znc" nobody +} + +stop() { + [ -f "$PID_FILE" ] && kill $(cat "$PID_FILE") +} + -- 1.5.6.5 _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
