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