From 1b5f1166a806a5522da36cec71ebc0a1d6956605 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Mon, 17 Nov 2008 21:07:42 +0000 Subject: [PATCH] Add the unstable version of quagga based on 0.99.11 SVN-Revision: 13270 --- net/quagga-unstable/Makefile | 232 ++++++++++++++++++ net/quagga-unstable/files/quagga | 333 ++++++++++++++++++++++++++ net/quagga-unstable/files/quagga.init | 11 + 3 files changed, 576 insertions(+) create mode 100644 net/quagga-unstable/Makefile create mode 100644 net/quagga-unstable/files/quagga create mode 100644 net/quagga-unstable/files/quagga.init diff --git a/net/quagga-unstable/Makefile b/net/quagga-unstable/Makefile new file mode 100644 index 0000000000..7e7425dbe3 --- /dev/null +++ b/net/quagga-unstable/Makefile @@ -0,0 +1,232 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id: Makefile 12175 2008-08-05 22:04:10Z florian $ + +include $(TOPDIR)/rules.mk + +PKG_NAME:=quagga-unstable +PKG_VERSION:=0.99.11 +PKG_RELEASE:=1 +PKG_MD5SUM:=903e40c744730ad4d62bee872eeb813b + +PKG_SOURCE_URL:=http://www.quagga.net/download/ \ + http://www.de.quagga.net/download/ \ + http://www.uk.quagga.net/download/ +PKG_SOURCE:=quagga-$(PKG_VERSION).tar.gz +PKG_BUILD_DIR:=$(BUILD_DIR)/quagga-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk + +define Package/quagga-unstable/Default + SECTION:=net + CATEGORY:=Network + DEPENDS:=quagga-unstable + TITLE:=The Quagga Software Routing Suite + URL:=http://www.quagga.net +endef + +define Package/quagga-unstable + $(call Package/quagga-unstable/Default) + DEPENDS:= + MENU:=1 +endef + +define Package/quagga-unstable/description + A routing software package that provides TCP/IP based routing services + with routing protocols support such as RIPv1, RIPv2, RIPng, OSPFv2, + OSPFv3, BGP-4, and BGP-4+ + +endef + +define Package/quagga-unstable-libzebra + $(call Package/quagga-unstable/Default) + TITLE:=zebra library +endef + +define Package/quagga-unstable-libospf + $(call Package/quagga-unstable/Default) + TITLE:=OSPF library +endef + +define Package/quagga-unstable-bgpd + $(call Package/quagga-unstable/Default) + DEPENDS += quagga-unstable-libzebra + TITLE:=BGPv4, BGPv4+, BGPv4- routing engine +endef + +define Package/quagga-unstable-isisd + $(call Package/quagga-unstable/Default) + TITLE:=IS-IS routing engine +endef + +define Package/quagga-unstable-ospfd + $(call Package/quagga-unstable/Default) + DEPENDS += quagga-unstable-libospf quagga-unstable-libzebra + TITLE:=OSPFv2 routing engine +endef + +define Package/quagga-unstable-ospf6d + $(call Package/quagga-unstable/Default) + DEPENDS += quagga-unstable-libospf quagga-unstable-libzebra + TITLE:=OSPFv3 routing engine +endef + +define Package/quagga-unstable-ripd + $(call Package/quagga-unstable/Default) + DEPENDS += quagga-unstable-libzebra + TITLE:=RIP routing engine +endef + +define Package/quagga-unstable-ripngd + $(call Package/quagga-unstable/Default) + DEPENDS += quagga-unstable-libzebra + TITLE:=RIPNG routing engine +endef + +define Package/quagga-unstable-vtysh + $(call Package/quagga-unstable/Default) + DEPENDS += quagga-unstable-libzebra +libreadline +libncurses + TITLE:=integrated shell for Quagga routing software +endef + +define Build/Configure + $(call Build/Configure/Default, \ + --localstatedir=/var/run/quagga \ + --sysconfdir=/etc/quagga/ \ + --enable-shared \ + --disable-static \ + --enable-ipv6 \ + --enable-vtysh \ + --enable-user=quagga \ + --enable-group=quagga \ + --enable-multipath=8 \ + --enable-isisd \ + ) +endef + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR) \ + DESTDIR=$(PKG_INSTALL_DIR) \ + all install +endef + +define Package/quagga-unstable/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/zebra $(1)/usr/sbin/ + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/watchquagga $(1)/usr/sbin/ + # avoid /etc being set to 0750 + $(INSTALL_DIR) $(1)/etc/quagga/ + chmod 0750 $(1)/etc/quagga/ + $(INSTALL_DIR) $(1)/etc/init.d/ + $(INSTALL_BIN) ./files/quagga $(1)/usr/sbin/quagga.init + $(INSTALL_BIN) ./files/quagga.init $(1)/etc/init.d/quagga + $(INSTALL_DIR) $(1)/var/run/quagga +endef + +define Package/quagga-unstable/postinst +#!/bin/sh + +name=quagga +id=51 + +# do not change below +# check if we are on real system +if [ -z "$${IPKG_INSTROOT}" ]; then + # create copies of passwd and group, if we use squashfs + rootfs=`mount |awk '/root/ { print $$5 }'` + if [ "$$rootfs" = "squashfs" ]; then + if [ -h /etc/group ]; then + rm /etc/group + cp /rom/etc/group /etc/group + fi + if [ -h /etc/passwd ]; then + rm /etc/passwd + cp /rom/etc/passwd /etc/passwd + fi + fi +fi + +echo "" +if [ -z "$$(grep ^\\$${name}: $${IPKG_INSTROOT}/etc/group)" ]; then + echo "adding group $$name to /etc/group" + echo "$${name}:x:$${id}:" >> $${IPKG_INSTROOT}/etc/group +fi + +if [ -z "$$(grep ^\\$${name}: $${IPKG_INSTROOT}/etc/passwd)" ]; then + echo "adding user $$name to /etc/passwd" + echo "$${name}:x:$${id}:$${id}:$${name}:/tmp/.$${name}:/bin/false" >> $${IPKG_INSTROOT}/etc/passwd +fi + +grep -q '^zebra[[:space:]]*2601/tcp' $${IPKG_INSTROOT}/etc/services 2>/dev/null +if [ $$? -ne 0 ]; then +echo "zebrasrv 2600/tcp" >>$${IPKG_INSTROOT}/etc/services +echo "zebra 2601/tcp" >>$${IPKG_INSTROOT}/etc/services +echo "ripd 2602/tcp" >>$${IPKG_INSTROOT}/etc/services +echo "ripngd 2603/tcp" >>$${IPKG_INSTROOT}/etc/services +echo "ospfd 2604/tcp" >>$${IPKG_INSTROOT}/etc/services +echo "bgpd 2605/tcp" >>$${IPKG_INSTROOT}/etc/services +echo "ospf6d 2606/tcp" >>$${IPKG_INSTROOT}/etc/services +echo "ospfapi 2607/tcp" >>$${IPKG_INSTROOT}/etc/services +echo "isisd 2608/tcp" >>$${IPKG_INSTROOT}/etc/services +fi +endef + +define Package/quagga-unstable-bgpd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/bgpd $(1)/usr/sbin/ +endef + +define Package/quagga-unstable-isisd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/isisd $(1)/usr/sbin +endef + +define Package/quagga-unstable-ospfd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ospfd $(1)/usr/sbin/ +endef + +define Package/quagga-unstable-ospf6d/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ospf6d $(1)/usr/sbin/ +endef + +define Package/quagga-unstable-ripd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ripd $(1)/usr/sbin/ +endef + +define Package/quagga-unstable-ripngd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ripngd $(1)/usr/sbin/ +endef + +define Package/quagga-unstable-vtysh/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/vtysh $(1)/usr/bin/ +endef + +define Package/quagga-unstable-libospf/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libospf.so.* $(1)/usr/lib/ +endef + +define Package/quagga-unstable-libzebra/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libzebra.so.* $(1)/usr/lib +endef + +$(eval $(call BuildPackage,quagga-unstable)) +$(eval $(call BuildPackage,quagga-unstable-libzebra)) +$(eval $(call BuildPackage,quagga-unstable-libospf)) +$(eval $(call BuildPackage,quagga-unstable-bgpd)) +$(eval $(call BuildPackage,quagga-unstable-isisd)) +$(eval $(call BuildPackage,quagga-unstable-ospfd)) +$(eval $(call BuildPackage,quagga-unstable-ospf6d)) +$(eval $(call BuildPackage,quagga-unstable-ripd)) +$(eval $(call BuildPackage,quagga-unstable-ripngd)) +$(eval $(call BuildPackage,quagga-unstable-vtysh)) diff --git a/net/quagga-unstable/files/quagga b/net/quagga-unstable/files/quagga new file mode 100644 index 0000000000..01f8d7137d --- /dev/null +++ b/net/quagga-unstable/files/quagga @@ -0,0 +1,333 @@ +#!/bin/sh +# +# quagga Starts/stops quagga daemons and watchquagga. +# Create a daemon.conf file to have that routing daemon +# started/stopped automagically when using this script +# without any daemon names as args. +# If watchquagga is available, it will also be +# started/stopped if the script is called without +# any daemon names. +# + +ME=$(basename $0) + +usage() { + echo "Usage: ${ME} {start|stop|restart} [daemon ...]" + exit 2 +} + +if [ -z "$1" ] +then + usage +else + COMMAND=$1 +fi +shift +ARG_DAEMONS=$* +BINDIR=/usr/sbin +CONFDIR=/etc/quagga +STATEDIR=/var/run/quagga +DAEMONS="zebra ripd ripngd ospfd ospf6d bgpd" +DAEMON_FLAGS=-d +WATCHQUAGGA_FLAGS="-d -z -T 60 -R" +WATCHQUAGGA_CMD="$0 watchrestart" +if [ ${COMMAND} != "watchrestart" ] +then + DAEMONS="${DAEMONS} watchquagga" +fi +DAEMONS_STARTSEQ=${DAEMONS} + +reverse() +{ + local revlist r + revlist= + for r + do + revlist="$r $revlist" + done + echo $revlist +} + +DAEMONS_STOPSEQ=$(reverse ${DAEMONS_STARTSEQ}) + +#pidof() { +# ps ax | awk 'match($5, "(^|/)'"$1"'$") > 0 { printf " %s", $1 }' +#} + +quit() { + echo "${ME}: $1" + exit 0 +} + +die() { + echo "${ME}: $1" + exit 1 +} + +is_in() { + local i + for i in $2 + do + [ "$1" = "$i" ] && return 0 + done + return 1 +} + +select_subset() { + local unknown i j + unknown= + RESULT= + for i in $1 + do + is_in $i "$2" || unknown="$unknown $i" + done + if [ -n "$unknown" ] + then + RESULT=$unknown + return 1 + else + for j in $2 + do + is_in $j "$1" && RESULT="$RESULT $j" + done + return 0 + fi +} + +# check command + +case ${COMMAND} +in + start|stop|restart) + ;; + watchrestart) + if [ -n "$ARG_DAEMONS" ] + then + echo "${ME}: watchrestart mode is only for use by watchquagga" + exit 2 + fi + ;; + *) + usage + ;; +esac + +# select daemons to start + +case ${COMMAND} +in + start|restart|watchrestart) + START_DAEMONS= + for d in ${DAEMONS_STARTSEQ} + do + [ -x "${BINDIR}/${d}" -a -f "${CONFDIR}/${d}.conf" ] \ + && START_DAEMONS="${START_DAEMONS}${d} " + done + WATCHQUAGGA_DAEMONS=${START_DAEMONS} + if is_in watchquagga "${DAEMONS_STARTSEQ}" + then + START_DAEMONS="${START_DAEMONS} watchquagga" + fi + if [ -n "${ARG_DAEMONS}" ] + then + if select_subset "${ARG_DAEMONS}" "${DAEMONS}" + then + if select_subset "${ARG_DAEMONS}" "${START_DAEMONS}" + then + START_DAEMONS=${RESULT} + else + die "these daemons are not startable:${RESULT}." + fi + else + die "unknown daemons:${RESULT}; choose from: ${DAEMONS}." + fi + fi + ;; +esac + +# select daemons to stop + +case ${COMMAND} +in + stop|restart|watchrestart) + STOP_DAEMONS=${DAEMONS_STOPSEQ} + if [ -n "${ARG_DAEMONS}" ] + then + if select_subset "${ARG_DAEMONS}" "${STOP_DAEMONS}" + then + STOP_DAEMONS=${RESULT} + else + die "unknown daemons:${RESULT}; choose from: ${DAEMONS}." + fi + fi + stop_daemons= + for d in ${STOP_DAEMONS} + do + pidfile=${STATEDIR}/${d}.pid + if [ -f "${pidfile}" -o -n "$(pidof ${d})" ] + then + stop_daemons="${stop_daemons}${d} " + elif [ -n "${ARG_DAEMONS}" ] + then + echo "${ME}: found no ${d} process running." + fi + done + STOP_DAEMONS=${stop_daemons} + ;; +esac + +# stop daemons + +for d in $STOP_DAEMONS +do + echo -n "${ME}: Stopping ${d} ... " + pidfile=${STATEDIR}/${d}.pid + if [ -f "${pidfile}" ] + then + file_pid=$(cat ${pidfile}) + if [ -z "${file_pid}" ] + then + echo -n "no pid file entry found ... " + fi + else + file_pid= + echo -n "no pid file found ... " + fi + proc_pid=$(pidof ${d}) + if [ -z "${proc_pid}" ] + then + echo -n "found no ${d} process running ... " + else + count=0 + notinpidfile= + for p in ${proc_pid} + do + count=$((${count}+1)) + if kill ${p} + then + echo -n "killed ${p} ... " + else + echo -n "failed to kill ${p} ... " + fi + [ "${p}" = "${file_pid}" ] \ + || notinpidfile="${notinpidfile} ${p}" + done + [ ${count} -le 1 ] \ + || echo -n "WARNING: ${count} ${d} processes were found running ... " + for n in ${notinpidfile} + do + echo -n "WARNING: process ${n} was not in pid file ... " + done + fi + count=0 + survivors=$(pidof ${d}) + while [ -n "${survivors}" ] + do + sleep 1 + count=$((${count}+1)) + survivors=$(pidof ${d}) + [ -z "${survivors}" -o ${count} -gt 5 ] && break + for p in ${survivors} + do + sleep 1 + echo -n "${p} " + kill ${p} + done + done + survivors=$(pidof ${d}) + [ -n "${survivors}" ] && \ + if kill -KILL ${survivors} + then + echo -n "KILLed ${survivors} ... " + else + echo -n "failed to KILL ${survivors} ... " + fi + sleep 1 + survivors=$(pidof ${d}) + if [ -z "${survivors}" ] + then + echo -n "done." + if [ -f "${pidfile}" ] + then + rm -f ${pidfile} \ + || echo -n " Failed to remove pidfile." + fi + else + echo -n "failed to stop ${survivors} - giving up." + if [ "${survivors}" != "${file_pid}" ] + then + if echo "${survivors}" > ${pidfile} + then + chown quagga:quagga ${pidfile} + echo -n " Wrote ${survivors} to pidfile." + else + echo -n " Failed to write ${survivors} to pidfile." + fi + fi + fi + echo +done + +# start daemons + +if [ -n "$START_DAEMONS" ] +then + [ -d ${CONFDIR} ] \ + || quit "${ME}: no config directory ${CONFDIR} - exiting." + chown -R quagga:quagga ${CONFDIR} + [ -d ${STATEDIR} ] || mkdir -p ${STATEDIR} \ + || die "${ME}: could not create state directory ${STATEDIR} - exiting." + chown -R quagga:quagga ${STATEDIR} + + for d in $START_DAEMONS + do + echo -n "${ME}: Starting ${d} ... " + proc_pid=$(pidof ${d}) + pidfile=${STATEDIR}/${d}.pid + file_pid= + if [ -f "${pidfile}" ] + then + file_pid=$(cat ${pidfile}) + if [ -n "${file_pid}" ] + then + echo -n "found old pid file entry ${file_pid} ... " + fi + fi + if [ -n "${proc_pid}" ] + then + echo -n "found ${d} running (${proc_pid}) - skipping ${d}." + if [ "${proc_pid}" != "${file_pid}" ] + then + if echo "${proc_pid}" > ${pidfile} + then + chown quagga:quagga ${pidfile} + echo -n " Wrote ${proc_pid} to pidfile." + else + echo -n " Failed to write ${proc_pid} to pidfile." + fi + fi + elif rm -f "${pidfile}" + then + if [ "${d}" = "watchquagga" ] + then + $("${BINDIR}/${d}" \ + ${WATCHQUAGGA_FLAGS} \ + "${WATCHQUAGGA_CMD}" \ + ${WATCHQUAGGA_DAEMONS}) + status=$? + else + $("${BINDIR}/${d}" ${DAEMON_FLAGS}) + status=$? + fi + if [ $status -eq 0 ] + then + echo -n "done." + else + echo -n "failed." + fi + else + echo -n " failed to remove pidfile." + fi + echo + done +fi diff --git a/net/quagga-unstable/files/quagga.init b/net/quagga-unstable/files/quagga.init new file mode 100644 index 0000000000..21fbf2c3ab --- /dev/null +++ b/net/quagga-unstable/files/quagga.init @@ -0,0 +1,11 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2006 OpenWrt.org + +START=60 +start() { + /usr/sbin/quagga.init start +} + +stop() { + /usr/sbin/quagga.init stop +} -- 2.30.2