xref: /OK3568_Linux_fs/yocto/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga.inc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1SUMMARY = "BGP/OSPF/RIP routing daemon"
2DESCRIPTION = "Quagga is a routing software suite, providing \
3implementations of OSPFv2, OSPFv3, RIP v1 and v2, RIPv3 and BGPv4 for \
4Unix platforms, particularly FreeBSD, Linux, Solaris and NetBSD. \
5Quagga is a fork of GNU Zebra which was developed by Kunihiro \
6Ishiguro. The Quagga tree aims to build a more involved community \
7around Quagga than the current centralised model of GNU Zebra."
8HOMEPAGE = "http://www.nongnu.org/quagga/"
9SECTION = "net"
10
11
12LICENSE = "GPL-2.0-only & LGPL-2.0-only"
13LIC_FILES_CHKSUM = "file://COPYING;md5=81bcece21748c91ba9992349a91ec11d \
14                    file://COPYING.LIB;md5=01ef24401ded36cd8e5d18bfe947240c"
15
16DEPENDS = "readline ncurses perl-native c-ares"
17DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'snmp', 'net-snmp', '', d)}"
18SNMP_CONF="${@bb.utils.contains('DISTRO_FEATURES', 'snmp', '--enable-snmp', '', d)}"
19
20# the "ip" command from busybox is not sufficient (flush by protocol flushes all routes)
21RDEPENDS:${PN} += "iproute2"
22
23SRC_URI = "https://github.com/Quagga/quagga/releases/download/quagga-${PV}/quagga-${PV}.tar.gz \
24           file://quagga.init \
25           file://quagga.default \
26           file://watchquagga.init \
27           file://watchquagga.default \
28           file://volatiles.03_quagga \
29           file://quagga.pam \
30           file://bgpd.service \
31           file://isisd.service \
32           file://ospf6d.service \
33           file://ospfd.service \
34           file://ripd.service \
35           file://ripngd.service \
36           file://zebra.service \
37          "
38
39PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
40PACKAGECONFIG[cap] = "--enable-capabilities,--disable-capabilities,libcap"
41PACKAGECONFIG[pam] = "--with-libpam, --without-libpam, libpam"
42
43inherit autotools update-rc.d useradd systemd pkgconfig multilib_header update-alternatives
44
45CFLAGS += "-fcommon"
46
47SYSTEMD_PACKAGES = "${PN} ${PN}-bgpd ${PN}-isisd ${PN}-ospf6d ${PN}-ospfd ${PN}-ripd ${PN}-ripngd"
48SYSTEMD_SERVICE:${PN}-bgpd = "bgpd.service"
49SYSTEMD_SERVICE:${PN}-isisd = "isisd.service"
50SYSTEMD_SERVICE:${PN}-ospf6d = "ospf6d.service"
51SYSTEMD_SERVICE:${PN}-ospfd = "ospfd.service"
52SYSTEMD_SERVICE:${PN}-ripd = "ripd.service"
53SYSTEMD_SERVICE:${PN}-ripngd = "ripngd.service"
54SYSTEMD_SERVICE:${PN} = "zebra.service"
55
56EXTRA_OECONF = "--sysconfdir=${sysconfdir}/quagga \
57                --localstatedir=${localstatedir}/run/quagga \
58                --enable-exampledir=${docdir}/quagga/examples/ \
59                --enable-vtysh \
60                --enable-isisd \
61                ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '--enable-watchquagga', '--disable-watchquagga', d)} \
62                --enable-ospfclient=yes \
63                --enable-multipath=64 \
64                --enable-user=quagga \
65                --enable-group=quagga \
66                --enable-vty-group=quaggavty \
67                --enable-configfile-mask=0640 \
68                --enable-logfile-mask=0640 \
69                --enable-rtadv \
70                --enable-linux24-tcp-md5 \
71                ap_cv_cc_pie=no \
72                ${SNMP_CONF}"
73
74CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
75
76do_install () {
77    # Install init script and default settings
78    install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d \
79    ${D}${sysconfdir}/quagga ${D}${sysconfdir}/default/volatiles
80    install -m 0644 ${WORKDIR}/quagga.default ${D}${sysconfdir}/default/quagga
81    install -m 0644 ${WORKDIR}/watchquagga.default ${D}${sysconfdir}/default/watchquagga
82    install -m 0755 ${WORKDIR}/quagga.init ${D}${sysconfdir}/init.d/quagga
83    install -m 0755 ${WORKDIR}/watchquagga.init ${D}${sysconfdir}/init.d/watchquagga
84    install -m 0644 ${WORKDIR}/volatiles.03_quagga  ${D}${sysconfdir}/default/volatiles/03_quagga
85
86    # Install sample configurations for the daemons
87    for f in bgpd vtysh isisd ospfd ripngd zebra ripd ospf6d; do
88        install -m 0640 ${S}/$f/$f.conf.sample ${D}${sysconfdir}/quagga/$f.conf.sample
89    done
90
91    for f in bgpd vtysh isisd ospfd ripngd zebra ripd ospf6d; do
92        touch ${D}${sysconfdir}/quagga/$f.conf
93    done
94    chown quagga:quaggavty ${D}${sysconfdir}/quagga
95    chown quagga:quagga ${D}${sysconfdir}/quagga/*.conf
96    chmod 750 ${D}${sysconfdir}/quagga
97    chmod 640 ${D}${sysconfdir}/quagga/*.conf
98
99    # Install quagga
100    oe_runmake install DESTDIR=${D} prefix=${prefix} \
101            sbindir=${sbindir} \
102            sysconfdir=${sysconfdir}/quagga \
103            localstatedir=${localstatedir}/run/quagga
104
105    # Fix hardcoded paths
106    sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/*
107    sed -i 's!/usr/bin/!${bindir}/!g' ${D}${sysconfdir}/init.d/quagga
108    sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/* ${D}${sysconfdir}/default/watchquagga
109    sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/* ${D}${sysconfdir}/default/volatiles/03_quagga
110    sed -i 's!^PATH=.*!PATH=${base_sbindir}:${sbindir}:${base_bindir}:${bindir}!' ${D}${sysconfdir}/init.d/*
111    sed -i 's!--with-libtool-sysroot=[^ "]*!!' ${D}${includedir}/quagga/version.h
112
113    oe_multilib_header quagga/version.h
114
115    # For PAM
116    for feature in ${DISTRO_FEATURES}; do
117        if [ "$feature" = "pam" ]; then
118            install -D -m 644 ${WORKDIR}/quagga.pam ${D}/${sysconfdir}/pam.d/quagga
119            break
120        fi
121    done
122
123    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
124        install -d ${D}${nonarch_libdir}/tmpfiles.d
125        echo "d /run/quagga 0755 quagga quagga -" \
126        > ${D}${nonarch_libdir}/tmpfiles.d/${BPN}.conf
127    fi
128
129    # Remove sysinit script if sysvinit is not in DISTRO_FEATURES
130    if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}; then
131        rm -rf ${D}${sysconfdir}/init.d/
132        rm -f ${D}${sysconfdir}/default/watchquagga
133    fi
134
135    install -d ${D}${systemd_unitdir}/system
136    for i in bgpd isisd ospf6d ospfd ripd ripngd zebra; do
137        install -m 0644 ${WORKDIR}/$i.service ${D}${systemd_unitdir}/system
138    done
139    sed -e 's,@BASE_SBINDIR@,${base_sbindir},g' \
140        -e 's,@SYSCONFDIR@,${sysconfdir},g' \
141        -e 's,@SBINDIR@,${sbindir},g' \
142        -e 's,@base_bindir@,${base_bindir},g' \
143        -e 's,@localstatedir@,${localstatedir},g' \
144        -i ${D}${systemd_unitdir}/system/*.service
145}
146
147DEPENDS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-systemctl-native', '', d)}"
148pkg_postinst:${PN} () {
149    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd sysvinit', 'true', 'false', d)}; then
150        if [ -n "$D" ]; then
151            OPTS="--root=$D"
152        fi
153        systemctl $OPTS mask quagga.service
154    fi
155}
156
157# Split into a main package and separate per-protocol packages
158PACKAGE_BEFORE_PN = "${PN}-ospfd ${PN}-ospf6d ${PN}-bgpd \
159                     ${PN}-ripd ${PN}-ripngd ${PN}-isisd \
160                     ${PN}-ospfclient ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '${PN}-watchquagga', '', d)}"
161
162RDEPENDS:${PN} += "${PN}-bgpd ${PN}-isisd ${PN}-ospf6d ${PN}-ospfd ${PN}-ripd ${PN}-ripngd"
163
164FILES:${PN}-ospfd       = "${sbindir}/ospfd ${libdir}/libospf.so.*"
165FILES:${PN}-ospf6d      = "${sbindir}/ospf6d"
166FILES:${PN}-bgpd        = "${sbindir}/bgpd"
167FILES:${PN}-ripd        = "${sbindir}/ripd"
168FILES:${PN}-ripngd      = "${sbindir}/ripngd"
169FILES:${PN}-isisd       = "${sbindir}/isisd"
170FILES:${PN}-ospfclient  = "${sbindir}/ospfclient ${libdir}/libospfapiclient.so.*"
171FILES:${PN}-watchquagga = "${sbindir}/watchquagga ${sysconfdir}/default/watchquagga \
172                           ${sysconfdir}/init.d/watchquagga"
173
174FILES:${PN} += "${nonarch_libdir}/tmpfiles.d/*.conf"
175
176# Indicate that the default files are configuration files
177CONFFILES:${PN} = "${sysconfdir}/default/quagga \
178                   ${sysconfdir}/quagga/bgpd.conf \
179                   ${sysconfdir}/quagga/vtysh.conf \
180                   ${sysconfdir}/quagga/isisd.conf \
181                   ${sysconfdir}/quagga/ospfd.conf \
182                   ${sysconfdir}/quagga/ripngd.conf \
183                   ${sysconfdir}/quagga/zebra.conf \
184                   ${sysconfdir}/quagga/ripd.conf \
185                   ${sysconfdir}/quagga/ospf6d.conf \
186                  "
187CONFFILES:${PN}-watchquagga = "${sysconfdir}/default/watchquagga"
188
189# Stop the names being rewritten due to the internal shared libraries
190DEBIAN_NOAUTONAME:${PN}-ospfd = "1"
191DEBIAN_NOAUTONAME:${PN}-ospfclient = "1"
192
193# Main init script starts all deamons
194# Seperate init script for watchquagga
195INITSCRIPT_PACKAGES                     = "${PN} ${PN}-watchquagga"
196INITSCRIPT_NAME:${PN}                   = "quagga"
197INITSCRIPT_PARAMS:${PN}                 = "defaults 15 85"
198INITSCRIPT_NAME:${PN}-watchquagga       = "watchquagga"
199INITSCRIPT_PARAMS:${PN}-watchquagga     = "defaults 90 10"
200
201# Add quagga's user and group
202USERADD_PACKAGES = "${PN}"
203GROUPADD_PARAM:${PN} = "--system quagga ; --system quaggavty"
204USERADD_PARAM:${PN} = "--system --home ${localstatedir}/run/quagga/ -M -g quagga -G quaggavty --shell /bin/false quagga"
205
206pkg_postinst:${PN} () {
207    if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then
208        ${sysconfdir}/init.d/populate-volatile.sh update
209    fi
210}
211
212# Stop apps before uninstall
213pkg_prerm:${PN} () {
214    ${sysconfdir}/init.d/quagga stop
215}
216
217pkg_prerm:${PN}-ospfd () {
218    ${sysconfdir}/init.d/quagga stop ospfd
219}
220
221pkg_prerm:${PN}-ospf6d () {
222    ${sysconfdir}/init.d/quagga stop ospf6d
223}
224
225pkg_prerm:${PN}-bgpd () {
226    ${sysconfdir}/init.d/quagga stop bgpd
227}
228
229pkg_prerm:${PN}-ripd () {
230    ${sysconfdir}/init.d/quagga stop ripd
231}
232
233pkg_prerm:${PN}-ripngd () {
234    ${sysconfdir}/init.d/quagga stop ripngd
235}
236
237pkg_prerm:${PN}-isisd () {
238    ${sysconfdir}/init.d/quagga stop isisd
239}
240
241ALTERNATIVE:${PN} = "pimd"
242ALTERNATIVE_LINK_NAME[pimd] = "${sbindir}/pimd"
243
244