quagga.inc 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. SUMMARY = "BGP/OSPF/RIP routing daemon"
  2. DESCRIPTION = "Quagga is a routing software suite, providing \
  3. implementations of OSPFv2, OSPFv3, RIP v1 and v2, RIPv3 and BGPv4 for \
  4. Unix platforms, particularly FreeBSD, Linux, Solaris and NetBSD. \
  5. Quagga is a fork of GNU Zebra which was developed by Kunihiro \
  6. Ishiguro. The Quagga tree aims to build a more involved community \
  7. around Quagga than the current centralised model of GNU Zebra."
  8. HOMEPAGE = "http://www.nongnu.org/quagga/"
  9. SECTION = "net"
  10. LICENSE = "GPL-2.0 & LGPL-2.0"
  11. DEPENDS = "readline ncurses perl-native"
  12. DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'snmp', 'net-snmp', '', d)}"
  13. SNMP_CONF="${@bb.utils.contains('DISTRO_FEATURES', 'snmp', '--enable-snmp', '', d)}"
  14. LIC_FILES_CHKSUM = "file://COPYING;md5=81bcece21748c91ba9992349a91ec11d \
  15. file://COPYING.LIB;md5=01ef24401ded36cd8e5d18bfe947240c"
  16. # the "ip" command from busybox is not sufficient (flush by protocol flushes all routes)
  17. RDEPENDS_${PN} += "iproute2"
  18. QUAGGASUBDIR = ""
  19. # ${QUAGGASUBDIR} is deal with old versions. Set to "/attic" for old
  20. # versions and leave it empty for recent versions.
  21. SRC_URI = "${SAVANNAH_GNU_MIRROR}/quagga${QUAGGASUBDIR}/quagga-${PV}.tar.gz; \
  22. file://quagga.init \
  23. file://quagga.default \
  24. file://watchquagga.init \
  25. file://watchquagga.default \
  26. file://volatiles.03_quagga \
  27. file://quagga.pam \
  28. file://ripd-fix-two-bugs-after-received-SIGHUP.patch \
  29. file://quagga-Avoid-duplicate-connected-address.patch \
  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. PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)}"
  39. PACKAGECONFIG[cap] = "--enable-capabilities,--disable-capabilities,libcap"
  40. PACKAGECONFIG[pam] = "--with-libpam, --without-libpam, libpam"
  41. inherit autotools update-rc.d useradd systemd
  42. SYSTEMD_PACKAGES = "${PN} ${PN}-bgpd ${PN}-isisd ${PN}-ospf6d ${PN}-ospfd ${PN}-ripd ${PN}-ripngd"
  43. SYSTEMD_SERVICE_${PN}-bgpd = "bgpd.service"
  44. SYSTEMD_SERVICE_${PN}-isisd = "isisd.service"
  45. SYSTEMD_SERVICE_${PN}-ospf6d = "ospf6d.service"
  46. SYSTEMD_SERVICE_${PN}-ospfd = "ospfd.service"
  47. SYSTEMD_SERVICE_${PN}-ripd = "ripd.service"
  48. SYSTEMD_SERVICE_${PN}-ripngd = "ripngd.service"
  49. SYSTEMD_SERVICE_${PN} = "zebra.service"
  50. EXTRA_OECONF = "--sysconfdir=${sysconfdir}/quagga \
  51. --localstatedir=${localstatedir}/run/quagga \
  52. --enable-exampledir=${docdir}/quagga/examples/ \
  53. --enable-vtysh \
  54. --enable-isisd \
  55. ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '--enable-watchquagga', '--disable-watchquagga', d)} \
  56. --enable-ospfclient=yes \
  57. --enable-multipath=64 \
  58. --enable-user=quagga \
  59. --enable-group=quagga \
  60. --enable-vty-group=quaggavty \
  61. --enable-configfile-mask=0640 \
  62. --enable-logfile-mask=0640 \
  63. --enable-rtadv \
  64. --enable-linux24-tcp-md5 \
  65. ap_cv_cc_pie=no \
  66. ${SNMP_CONF}"
  67. do_install () {
  68. # Install init script and default settings
  69. install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d \
  70. ${D}${sysconfdir}/quagga ${D}${sysconfdir}/default/volatiles
  71. install -m 0644 ${WORKDIR}/quagga.default ${D}${sysconfdir}/default/quagga
  72. install -m 0644 ${WORKDIR}/watchquagga.default ${D}${sysconfdir}/default/watchquagga
  73. install -m 0755 ${WORKDIR}/quagga.init ${D}${sysconfdir}/init.d/quagga
  74. install -m 0755 ${WORKDIR}/watchquagga.init ${D}${sysconfdir}/init.d/watchquagga
  75. install -m 0644 ${WORKDIR}/volatiles.03_quagga ${D}${sysconfdir}/default/volatiles/volatiles.03_quagga
  76. # Install sample configurations for the daemons
  77. for f in bgpd vtysh isisd ospfd ripngd zebra ripd ospf6d; do
  78. install -m 0640 ${S}/$f/$f.conf.sample ${D}${sysconfdir}/quagga/$f.conf.sample
  79. done
  80. for f in bgpd vtysh isisd ospfd ripngd zebra ripd ospf6d; do
  81. touch ${D}${sysconfdir}/quagga/$f.conf
  82. done
  83. chown quagga:quaggavty ${D}${sysconfdir}/quagga
  84. chown quagga:quagga ${D}${sysconfdir}/quagga/*.conf
  85. chmod 750 ${D}${sysconfdir}/quagga
  86. chmod 640 ${D}${sysconfdir}/quagga/*.conf
  87. # Install quagga
  88. oe_runmake install DESTDIR=${D} prefix=${prefix} \
  89. sbindir=${sbindir} \
  90. sysconfdir=${sysconfdir}/quagga \
  91. localstatedir=${localstatedir}/run/quagga
  92. # Fix hardcoded paths
  93. sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/*
  94. sed -i 's!/usr/bin/!${bindir}/!g' ${D}${sysconfdir}/init.d/quagga
  95. sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/* ${D}${sysconfdir}/default/watchquagga
  96. sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/* ${D}${sysconfdir}/default/volatiles/volatiles.03_quagga
  97. sed -i 's!^PATH=.*!PATH=${base_sbindir}:${sbindir}:${base_bindir}:${bindir}!' ${D}${sysconfdir}/init.d/*
  98. # Remove generated info dir file, it doesn't belong in the generated
  99. # package.
  100. rm -f ${D}${infodir}/dir
  101. # For PAM
  102. for feature in ${DISTRO_FEATURES}; do
  103. if [ "$feature" = "pam" ]; then
  104. install -D -m 644 ${WORKDIR}/quagga.pam ${D}/${sysconfdir}/pam.d/quagga
  105. break
  106. fi
  107. done
  108. if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
  109. install -d ${D}${sysconfdir}/tmpfiles.d
  110. echo "d /var/run/quagga 0755 quagga quagga -" \
  111. > ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
  112. fi
  113. # Remove sysinit script if sysvinit is not in DISTRO_FEATURES
  114. if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}; then
  115. rm -rf ${D}${sysconfdir}/init.d/
  116. rm -f ${D}${sysconfdir}/default/watchquagga
  117. fi
  118. install -d ${D}${systemd_unitdir}/system
  119. for i in bgpd isisd ospf6d ospfd ripd ripngd zebra; do
  120. install -m 0644 ${WORKDIR}/$i.service ${D}${systemd_unitdir}/system
  121. done
  122. sed -e 's,@BASE_SBINDIR@,${base_sbindir},g' \
  123. -e 's,@SYSCONFDIR@,${sysconfdir},g' \
  124. -e 's,@SBINDIR@,${sbindir},g' \
  125. -e 's,@base_bindir@,${base_bindir},g' \
  126. -e 's,@localstatedir@,${localstatedir},g' \
  127. -i ${D}${systemd_unitdir}/system/*.service
  128. }
  129. DEPENDS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-systemctl-native', '', d)}"
  130. pkg_postinst_${PN} () {
  131. if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd sysvinit', 'true', 'false', d)}; then
  132. if [ -n "$D" ]; then
  133. OPTS="--root=$D"
  134. fi
  135. systemctl $OPTS mask quagga.service
  136. fi
  137. }
  138. # Split into a main package and separate per-protocol packages
  139. PACKAGE_BEFORE_PN = "${PN}-ospfd ${PN}-ospf6d ${PN}-bgpd \
  140. ${PN}-ripd ${PN}-ripngd ${PN}-isisd \
  141. ${PN}-ospfclient ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '${PN}-watchquagga', '', d)}"
  142. RDEPENDS_${PN} += "${PN}-bgpd ${PN}-isisd ${PN}-ospf6d ${PN}-ospfd ${PN}-ripd ${PN}-ripngd"
  143. FILES_${PN}-ospfd = "${sbindir}/ospfd ${libdir}/libospf.so.*"
  144. FILES_${PN}-ospf6d = "${sbindir}/ospf6d"
  145. FILES_${PN}-bgpd = "${sbindir}/bgpd"
  146. FILES_${PN}-ripd = "${sbindir}/ripd"
  147. FILES_${PN}-ripngd = "${sbindir}/ripngd"
  148. FILES_${PN}-isisd = "${sbindir}/isisd"
  149. FILES_${PN}-ospfclient = "${sbindir}/ospfclient ${libdir}/libospfapiclient.so.*"
  150. FILES_${PN}-watchquagga = "${sbindir}/watchquagga ${sysconfdir}/default/watchquagga \
  151. ${sysconfdir}/init.d/watchquagga"
  152. # Indicate that the default files are configuration files
  153. CONFFILES_${PN} = "${sysconfdir}/default/quagga \
  154. ${sysconfdir}/quagga/bgpd.conf \
  155. ${sysconfdir}/quagga/vtysh.conf \
  156. ${sysconfdir}/quagga/isisd.conf \
  157. ${sysconfdir}/quagga/ospfd.conf \
  158. ${sysconfdir}/quagga/ripngd.conf \
  159. ${sysconfdir}/quagga/zebra.conf \
  160. ${sysconfdir}/quagga/ripd.conf \
  161. ${sysconfdir}/quagga/ospf6d.conf \
  162. "
  163. CONFFILES_${PN}-watchquagga = "${sysconfdir}/default/watchquagga"
  164. # Stop the names being rewritten due to the internal shared libraries
  165. DEBIAN_NOAUTONAME_${PN}-ospfd = "1"
  166. DEBIAN_NOAUTONAME_${PN}-ospfclient = "1"
  167. # the "ip" command from busybox is not sufficient (flush by protocol flushes all routes)
  168. RDEPENDS_${PN} += "iproute2"
  169. # Main init script starts all deamons
  170. # Seperate init script for watchquagga
  171. INITSCRIPT_PACKAGES = "${PN} ${PN}-watchquagga"
  172. INITSCRIPT_NAME_${PN} = "quagga"
  173. INITSCRIPT_PARAMS_${PN} = "defaults 15 85"
  174. INITSCRIPT_NAME_${PN}-watchquagga = "watchquagga"
  175. INITSCRIPT_PARAMS_${PN}-watchquagga = "defaults 90 10"
  176. # Add quagga's user and group
  177. USERADD_PACKAGES = "${PN}"
  178. GROUPADD_PARAM_${PN} = "--system quagga ; --system quaggavty"
  179. USERADD_PARAM_${PN} = "--system --home ${localstatedir}/run/quagga/ -M -g quagga --shell /bin/false quagga"
  180. pkg_postinst_${PN} () {
  181. if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then
  182. ${sysconfdir}/init.d/populate-volatile.sh update
  183. fi
  184. }
  185. # Stop apps before uninstall
  186. pkg_prerm_${PN} () {
  187. ${sysconfdir}/init.d/quagga stop
  188. }
  189. pkg_prerm_${PN}-ospfd () {
  190. ${sysconfdir}/init.d/quagga stop ospfd
  191. }
  192. pkg_prerm_${PN}-ospf6d () {
  193. ${sysconfdir}/init.d/quagga stop ospf6d
  194. }
  195. pkg_prerm_${PN}-bgpd () {
  196. ${sysconfdir}/init.d/quagga stop bgpd
  197. }
  198. pkg_prerm_${PN}-ripd () {
  199. ${sysconfdir}/init.d/quagga stop ripd
  200. }
  201. pkg_prerm_${PN}-ripngd () {
  202. ${sysconfdir}/init.d/quagga stop ripngd
  203. }
  204. pkg_prerm_${PN}-isisd () {
  205. ${sysconfdir}/init.d/quagga stop isisd
  206. }