Skip to content

Instantly share code, notes, and snippets.

@bbidulock
Created December 20, 2021 06:59
Show Gist options
  • Save bbidulock/ec78188f23ee27bcc6347eed2f64a2e0 to your computer and use it in GitHub Desktop.
Save bbidulock/ec78188f23ee27bcc6347eed2f64a2e0 to your computer and use it in GitHub Desktop.
PKGBUILD for frr-8.1-2
# /lib/lsb/init-functions for Debian -*- shell-script -*-
#
#Copyright (c) 2002-08 Chris Lawrence
#All rights reserved.
#
#Redistribution and use in source and binary forms, with or without
#modification, are permitted provided that the following conditions
#are met:
#1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#3. Neither the name of the author nor the names of other contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
#THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
#IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
#ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
#CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
#SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
#BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
#OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
#EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
start_daemon () {
local force nice pidfile exec args OPTIND
force=""
nice=0
pidfile=/dev/null
OPTIND=1
while getopts fn:p: opt ; do
case "$opt" in
f) force="force";;
n) nice="$OPTARG";;
p) pidfile="$OPTARG";;
esac
done
shift $(($OPTIND - 1))
if [ "$1" = '--' ]; then
shift
fi
exec="$1"; shift
args="--start --nicelevel $nice --quiet --oknodo"
if [ "$force" ]; then
/sbin/start-stop-daemon $args \
--chdir "$PWD" --startas $exec --pidfile /dev/null -- "$@"
elif [ $pidfile ]; then
/sbin/start-stop-daemon $args \
--chdir "$PWD" --exec $exec --oknodo --pidfile "$pidfile" -- "$@"
else
/sbin/start-stop-daemon $args --chdir "$PWD" --exec $exec -- "$@"
fi
}
pidofproc () {
local pidfile base status specified pid OPTIND
pidfile=
specified=
OPTIND=1
while getopts p: opt ; do
case "$opt" in
p) pidfile="$OPTARG"
specified="specified"
;;
esac
done
shift $(($OPTIND - 1))
if [ $# -ne 1 ]; then
echo "$0: invalid arguments" >&2
return 4
fi
base=${1##*/}
if [ ! "$specified" ]; then
pidfile="/var/run/$base.pid"
fi
if [ -n "${pidfile:-}" -a -r "$pidfile" ]; then
read pid < "$pidfile"
if [ -n "${pid:-}" ]; then
if $(kill -0 "${pid:-}" 2> /dev/null); then
echo "$pid" || true
return 0
elif ps "${pid:-}" >/dev/null 2>&1; then
echo "$pid" || true
return 0 # program is running, but not owned by this user
else
return 1 # program is dead and /var/run pid file exists
fi
fi
fi
if [ -n "$specified" ]; then
if [ -e "$pidfile" -a ! -r "$pidfile" ]; then
return 4 # pidfile exists, but unreadable, return unknown
else
return 3 # pidfile specified, but contains no PID to test
fi
fi
if [ -x /bin/pidof ]; then
status="0"
/bin/pidof -o %PPID -x $1 || status="$?"
if [ "$status" = 1 ]; then
return 3 # program is not running
fi
return 0
fi
return 4 # Unable to determine status
}
# start-stop-daemon uses the same algorithm as "pidofproc" above.
killproc () {
local pidfile sig status base name_param is_term_sig OPTIND
pidfile=
name_param=
is_term_sig=
OPTIND=1
while getopts p: opt ; do
case "$opt" in
p) pidfile="$OPTARG";;
esac
done
shift $(($OPTIND - 1))
base=${1##*/}
if [ ! $pidfile ]; then
name_param="--name $base --pidfile /var/run/$base.pid"
else
name_param="--pidfile $pidfile"
fi
sig=$(echo ${2:-} | sed -e 's/^-\(.*\)/\1/')
sig=$(echo $sig | sed -e 's/^SIG\(.*\)/\1/')
if [ "$sig" = 15 ] || [ "$sig" = TERM ]; then
is_term_sig="terminate_signal"
fi
status=0
if [ ! "$is_term_sig" ]; then
if [ -n "$sig" ]; then
/sbin/start-stop-daemon --stop --signal "$sig" \
--quiet $name_param || status="$?"
else
/sbin/start-stop-daemon --stop \
--retry 5 \
--quiet $name_param || status="$?"
fi
else
/sbin/start-stop-daemon --stop --quiet \
--oknodo $name_param || status="$?"
fi
if [ "$status" = 1 ]; then
if [ -z "$sig" ]; then
return 0
fi
return 3 # program is not running
fi
if [ "$status" = 0 ] && [ "$is_term_sig" ] && [ "$pidfile" ]; then
pidofproc -p "$pidfile" "$1" >/dev/null || rm -f "$pidfile"
fi
return 0
}
# Return LSB status
status_of_proc () {
local pidfile daemon name status OPTIND
pidfile=
OPTIND=1
while getopts p: opt ; do
case "$opt" in
p) pidfile="$OPTARG";;
esac
done
shift $(($OPTIND - 1))
if [ -n "$pidfile" ]; then
pidfile="-p $pidfile"
fi
daemon="$1"
name="$2"
status="0"
pidofproc $pidfile $daemon >/dev/null || status="$?"
if [ "$status" = 0 ]; then
log_success_msg "$name is running"
return 0
elif [ "$status" = 4 ]; then
log_failure_msg "could not access PID file for $name"
return $status
else
log_failure_msg "$name is not running"
return $status
fi
}
log_use_fancy_output () {
TPUT=/usr/bin/tput
EXPR=/usr/bin/expr
if [ -t 1 ] &&
[ "x${TERM:-}" != "x" ] &&
[ "x${TERM:-}" != "xdumb" ] &&
[ -x $TPUT ] && [ -x $EXPR ] &&
$TPUT hpa 60 >/dev/null 2>&1 &&
$TPUT setaf 1 >/dev/null 2>&1
then
[ -z $FANCYTTY ] && FANCYTTY=1 || true
else
FANCYTTY=0
fi
case "$FANCYTTY" in
1|Y|yes|true) true;;
*) false;;
esac
}
log_success_msg () {
if [ -n "${1:-}" ]; then
log_begin_msg $@
fi
log_end_msg 0
}
log_failure_msg () {
if [ -n "${1:-}" ]; then
log_begin_msg $@ "..."
fi
log_end_msg 1 || true
}
log_warning_msg () {
if [ -n "${1:-}" ]; then
log_begin_msg $@ "..."
fi
log_end_msg 255 || true
}
#
# NON-LSB HELPER FUNCTIONS
#
# int get_lsb_header_val (char *scriptpathname, char *key)
get_lsb_header_val () {
if [ ! -f "$1" ] || [ -z "${2:-}" ]; then
return 1
fi
LSB_S="### BEGIN INIT INFO"
LSB_E="### END INIT INFO"
sed -n "/$LSB_S/,/$LSB_E/ s/# $2: \(.*\)/\1/p" $1
}
# If the currently running init daemon is upstart, return zero; if the
# calling init script belongs to a package which also provides a native
# upstart job, it should generally exit non-zero in this case.
init_is_upstart()
{
if [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | /bin/grep -q upstart; then
return 0
fi
return 1
}
# int log_begin_message (char *message)
log_begin_msg () {
log_begin_msg_pre "$@"
if [ -z "${1:-}" ]; then
return 1
fi
echo -n "$@" || true
log_begin_msg_post "$@"
}
# Sample usage:
# log_daemon_msg "Starting GNOME Login Manager" "gdm"
#
# On Debian, would output "Starting GNOME Login Manager: gdm"
# On Ubuntu, would output " * Starting GNOME Login Manager..."
#
# If the second argument is omitted, logging suitable for use with
# log_progress_msg() is used:
#
# log_daemon_msg "Starting remote filesystem services"
#
# On Debian, would output "Starting remote filesystem services:"
# On Ubuntu, would output " * Starting remote filesystem services..."
log_daemon_msg () {
if [ -z "${1:-}" ]; then
return 1
fi
log_daemon_msg_pre "$@"
if [ -z "${2:-}" ]; then
echo -n "$1:" || true
return
fi
echo -n "$1: $2" || true
log_daemon_msg_post "$@"
}
# #319739
#
# Per policy docs:
#
# log_daemon_msg "Starting remote file system services"
# log_progress_msg "nfsd"; start-stop-daemon --start --quiet nfsd
# log_progress_msg "mountd"; start-stop-daemon --start --quiet mountd
# log_progress_msg "ugidd"; start-stop-daemon --start --quiet ugidd
# log_end_msg 0
#
# You could also do something fancy with log_end_msg here based on the
# return values of start-stop-daemon; this is left as an exercise for
# the reader...
#
# On Ubuntu, one would expect log_progress_msg to be a no-op.
log_progress_msg () {
if [ -z "${1:-}" ]; then
return 1
fi
echo -n " $@" || true
}
# int log_end_message (int exitstatus)
log_end_msg () {
# If no arguments were passed, return
if [ -z "${1:-}" ]; then
return 1
fi
local retval
retval=$1
log_end_msg_pre "$@"
# Only do the fancy stuff if we have an appropriate terminal
# and if /usr is already mounted
if log_use_fancy_output; then
RED=$( $TPUT setaf 1)
YELLOW=$( $TPUT setaf 3)
NORMAL=$( $TPUT op)
else
RED=''
YELLOW=''
NORMAL=''
fi
if [ $1 -eq 0 ]; then
echo "." || true
elif [ $1 -eq 255 ]; then
/bin/echo -e " ${YELLOW}(warning).${NORMAL}" || true
else
/bin/echo -e " ${RED}failed!${NORMAL}" || true
fi
log_end_msg_post "$@"
return $retval
}
log_action_msg () {
log_action_msg_pre "$@"
echo "$@." || true
log_action_msg_post "$@"
}
log_action_begin_msg () {
log_action_begin_msg_pre "$@"
echo -n "$@..." || true
log_action_begin_msg_post "$@"
}
log_action_cont_msg () {
echo -n "$@..." || true
}
log_action_end_msg () {
local end
log_action_end_msg_pre "$@"
if [ -z "${2:-}" ]; then
end="."
else
end=" ($2)."
fi
if [ $1 -eq 0 ]; then
echo "done${end}" || true
else
if log_use_fancy_output; then
RED=$( $TPUT setaf 1)
NORMAL=$( $TPUT op)
/bin/echo -e "${RED}failed${end}${NORMAL}" || true
else
echo "failed${end}" || true
fi
fi
log_action_end_msg_post "$@"
}
# Pre&Post empty function declaration, to be overriden from /lib/lsb/init-functions.d/*
log_daemon_msg_pre () { :; }
log_daemon_msg_post () { :; }
log_begin_msg_pre () { :; }
log_begin_msg_post () { :; }
log_end_msg_pre () { :; }
log_end_msg_post () { :; }
log_action_msg_pre () { :; }
log_action_msg_post () { :; }
log_action_begin_msg_pre () { :; }
log_action_begin_msg_post () { :; }
log_action_end_msg_pre () { :; }
log_action_end_msg_post () { :; }
# Include hooks from other packages in /lib/lsb/init-functions.d
for hook in $(run-parts --lsbsysinit --list /lib/lsb/init-functions.d 2>/dev/null); do
[ -r $hook ] && . $hook || true
done
FANCYTTY=
[ -e /etc/lsb-base-logging.sh ] && . /etc/lsb-base-logging.sh || true
# Create frr user
g frr 177
u frr 177:177 - /run/frr
# Create frrvty group and add frr user to this group
g frrvty 178
m frr frrvty
d /etc/frr 0750 frr frr
d /var/log/frr 0750 frr frr
d /run/frr 0750 frr frr
Z /etc/frr - frr frr
diff -Naupr frr-frr-8.0_orig/lib/table.h frr-frr-8.0/lib/table.h
--- frr-frr-8.0_orig/lib/table.h 2021-07-21 20:06:19.000000000 +0700
+++ frr-frr-8.0/lib/table.h 2021-08-14 14:44:45.820799226 +0700
@@ -244,7 +244,7 @@ extern void route_table_iter_cleanup(rou
/* Lock node. */
static inline struct route_node *route_lock_node(struct route_node *node)
{
- (*(unsigned *)&node->lock)++;
+ node->lock+=1;
return node;
}
@@ -252,7 +252,7 @@ static inline struct route_node *route_l
static inline void route_unlock_node(struct route_node *node)
{
assert(node->lock > 0);
- (*(unsigned *)&node->lock)--;
+ node->lock-=1;
if (node->lock == 0)
route_node_delete(node);
diff -Naupr frr-frr-8.0_orig/tools/etc/frr/daemons frr-frr-8.0/tools/etc/frr/daemons
--- frr-frr-8.0_orig/tools/etc/frr/daemons 2021-07-21 20:06:19.000000000 +0700
+++ frr-frr-8.0/tools/etc/frr/daemons 2021-08-14 14:48:56.387345975 +0700
@@ -31,6 +31,8 @@ bfdd=no
fabricd=no
vrrpd=no
pathd=no
+zebra=yes
+#ospfd_instances="1,2,3"
#
# If this option is set the /etc/init.d/frr script automatically loads
@@ -38,25 +40,25 @@ pathd=no
# Check /etc/pam.d/frr if you intend to use "vtysh"!
#
vtysh_enable=yes
-zebra_options=" -A 127.0.0.1 -s 90000000"
-bgpd_options=" -A 127.0.0.1"
-ospfd_options=" -A 127.0.0.1"
-ospf6d_options=" -A ::1"
-ripd_options=" -A 127.0.0.1"
-ripngd_options=" -A ::1"
-isisd_options=" -A 127.0.0.1"
-pimd_options=" -A 127.0.0.1"
-ldpd_options=" -A 127.0.0.1"
-nhrpd_options=" -A 127.0.0.1"
-eigrpd_options=" -A 127.0.0.1"
-babeld_options=" -A 127.0.0.1"
-sharpd_options=" -A 127.0.0.1"
-pbrd_options=" -A 127.0.0.1"
-staticd_options="-A 127.0.0.1"
-bfdd_options=" -A 127.0.0.1"
-fabricd_options="-A 127.0.0.1"
-vrrpd_options=" -A 127.0.0.1"
-pathd_options=" -A 127.0.0.1"
+zebra_options=" -A 127.0.0.1 -s 90000000 -d -f /etc/frr/zebra.conf"
+bgpd_options=" -A 127.0.0.1 -d -f /etc/frr/bgpd.conf"
+ospfd_options=" -A 127.0.0.1 -d -f /etc/frr/ospfd.conf"
+ospf6d_options=" -A ::1 -d -f /etc/frr/ospf6d.conf"
+ripd_options=" -A 127.0.0.1 -d -f /etc/frr/ripd.conf"
+ripngd_options=" -A ::1 -d -f /etc/frr/ripngd.conf"
+isisd_options=" -A 127.0.0.1 -d -f /etc/frr/isisd.conf"
+pimd_options=" -A 127.0.0.1 -d -f /etc/frr/pimd.conf"
+ldpd_options=" -A 127.0.0.1 -d -f /etc/frr/ldpd.conf"
+nhrpd_options=" -A 127.0.0.1 -d -f /etc/frr/nhrdp.conf"
+eigrpd_options=" -A 127.0.0.1 -d -f /etc/frr/eigrpd.conf"
+babeld_options=" -A 127.0.0.1 -d -f /etc/frr/babeld.conf"
+sharpd_options=" -A 127.0.0.1 -d -f /etc/frr/sharpd.conf"
+pbrd_options=" -A 127.0.0.1 -d -f /etc/frr/pbrd.conf"
+staticd_options="-A 127.0.0.1 -d -f /etc/frr/staticd.conf"
+bfdd_options=" -A 127.0.0.1 -d -f /etc/frr/bfdd.conf"
+fabricd_options="-A 127.0.0.1 -d -f /etc/frr/fabricd.conf"
+vrrpd_options=" -A 127.0.0.1 -d -f /etc/frr/vrrpd.conf"
+pathd_options=" -A 127.0.0.1 -d -f /etc/frr/pathd.conf"
# configuration profile
#
@@ -72,12 +74,13 @@ pathd_options=" -A 127.0.0.1"
#MAX_FDS=1024
# The list of daemons to watch is automatically generated by the init script.
-#watchfrr_options=""
+watchfrr_enable=yes
# To make watchfrr create/join the specified netns, use the following option:
#watchfrr_options="--netns"
# This only has an effect in /etc/frr/<somename>/daemons, and you need to
# start FRR with "/usr/lib/frr/frrinit.sh start <somename>".
+watchfrr_options="-d -r '/usr/bin/frr restart %s' -s '/usr/bin/frr start %s' -k '/usr/bin/frr stop %s'"
# for debugging purposes, you can specify a "wrap" command to start instead
# of starting the daemon directly, e.g. to use valgrind on ospfd:
diff -Naupr frr-frr-8.0_orig/tools/frrcommon.sh.in frr-frr-8.0/tools/frrcommon.sh.in
--- frr-frr-8.0_orig/tools/frrcommon.sh.in 2021-07-21 20:06:19.000000000 +0700
+++ frr-frr-8.0/tools/frrcommon.sh.in 2021-08-14 14:44:45.824132559 +0700
@@ -291,7 +291,7 @@ load_old_config() {
[ -s "$oldcfg" ] || return 0
grep -v '^[[:blank:]]*\(#\|$\)' "$oldcfg" > /dev/null || return 0
- log_warning_msg "Reading deprecated $oldcfg. Please move its settings to $C_PATH/daemons and remove it."
+ log_warning_msg "Reading deprecated $oldcfg. Please move its settings to $C_PATH/daemons.conf and remove it."
# save off settings from daemons for the OR below
for dmn in $DAEMONS; do eval "_new_$dmn=\${$dmn:-no}"; done
@@ -302,8 +302,8 @@ load_old_config() {
for dmn in $DAEMONS; do eval "test \$_new_$dmn != no && $dmn=\$_new_$dmn; unset _new_$dmn"; done
}
-[ -r "$C_PATH/daemons" ] || {
- log_failure_msg "cannot run $@: $C_PATH/daemons does not exist"
+[ -r "$C_PATH/daemons.conf" ] || {
+ log_failure_msg "cannot run $@: $C_PATH/daemons.conf does not exist"
exit 1
}
. "$C_PATH/daemons"
diff -Naupr frr-frr-8.0_orig/tools/frr.in frr-frr-8.0/tools/frr.in
--- frr-frr-8.0_orig/tools/frr.in 2021-07-21 20:06:19.000000000 +0700
+++ frr-frr-8.0/tools/frr.in 2021-08-14 14:51:47.870597234 +0700
@@ -28,7 +28,7 @@ FRR_DEFAULT_PROFILE="@DFLT_NAME@" # trad
# See /usr/share/doc/frr/README.Debian.gz for further information.
# Keep zebra first and do not list watchfrr!
DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pimd ldpd nhrpd eigrpd sharpd pbrd staticd bfdd fabricd vrrpd pathd"
-MAX_INSTANCES=5
+MAX_INSTANCES=1024
RELOAD_SCRIPT="$D_PATH/frr-reload.py"
if [ -e /lib/lsb/init-functions ]; then
@@ -503,10 +503,8 @@ check_status()
#########################################################
# Config broken but script must exit silently.
-[ ! -r "$C_PATH/daemons" ] && exit 0
-
+[ ! -r "$C_PATH/daemons.conf" ] && exit 0
# Load configuration
-. "$C_PATH/daemons"
if [ -e "$C_PATH/daemons.conf" ]; then
. "$C_PATH/daemons.conf"
fi
@@ -526,7 +524,7 @@ if test -z "$frr_profile"; then
fi
test -n "$frr_profile" && frr_global_options="$frr_global_options -F $frr_profile"
-MAX_INSTANCES=${MAX_INSTANCES:=5}
+MAX_INSTANCES=${MAX_INSTANCES:=1024}
# Set priority of un-startable daemons to 'no' and substitute 'yes' to '0'
convert_daemon_prios
diff -Naupr frr-frr-8.0_orig/tools/frr-reload frr-frr-8.0/tools/frr-reload
--- frr-frr-8.0_orig/tools/frr-reload 2021-07-21 20:06:19.000000000 +0700
+++ frr-frr-8.0/tools/frr-reload 2021-08-14 14:44:45.824132559 +0700
@@ -1,7 +1,7 @@
#!/bin/sh
-if test -e /usr/lib/frr/frr-reload.py; then
- exec /usr/lib/frr/frr-reload.py --reload /etc/frr/frr.conf
+if test -e /usr/bin/frr-reload.py; then
+ exec /usr/bin/frr-reload.py --reload /etc/frr/frr.conf
fi
>&2 echo "Please install frr-pythontools package. Required for reload"
exit 1
# Maintainer: Shalygin Konstantin <[email protected]>
# Contributor: Shalygin Konstantin <[email protected]>
# Contributor: Evgeny Cherkashin <[email protected]>
pkgname=frr
pkgver=8.1
pkgrel=2
pkgdesc='FRRouting (quagga fork) supports BGP4, OSPFv2, OSPFv3, ISIS, RIP, RIPng, PIM, LDP, BFD, VRRP, NHRP and EIGRP.'
arch=('x86_64' 'i686' 'aarch64')
url="https://frrouting.org/"
license=('GPL2')
depends=('libcap' 'json-c' 'net-snmp' 'rtrlib' 'libyang' 'libunwind' 'c-ares' 'libelf')
makedepends=('perl-xml-libxml' 'python-sphinx')
checkdepends=('python-pytest')
optdepends=('rsyslog: syslog support' 'python: for frr-reload.py and generate_support_bundle.py')
conflicts=('quagga' 'babeld' 'quagga_cumulus')
provides=('quagga' 'quagga_cumulus')
backup=("etc/${pkgname}/${pkgname}.conf"
"etc/${pkgname}/daemons.conf"
"etc/${pkgname}/vtysh.conf")
source=("https://github.com/FRRouting/${pkgname}/archive/${pkgname}-${pkgver}.tar.gz"
"${pkgname}.sysusers"
"${pkgname}.tmpfiles"
"${pkgname}_8.0_Archlinux.patch"
"${pkgname}-init-functions")
sha256sums=('9d82c11b304ab89a30627fcbb4150f51e639f473f8563976e14101e796240599'
'b713df127ea476d6ec7793854cbb75f24085551816108b0c5ca4ae5feb9b74b6'
'd4ee57baa7f067e07f6456dedf59e54f56774924e2e2b2ea8ac01151237ac19b'
'dd02d7b6df161cf8e6f58384e40227b2bffcf626707a44e2a7fd5fe4dcb10159'
'e6e2592a8b0b18f7f173186fb4ebf23e642b3d912179f0bb36251962ca64cd7a')
prepare() {
cd ${pkgname}-${pkgname}-${pkgver}
patch -p1 -i "${srcdir}/${pkgname}_8.0_Archlinux.patch"
autoreconf -fvi
}
build() {
cd ${pkgname}-${pkgname}-${pkgver}
./configure \
--prefix="/usr" \
--sbindir="/usr/bin" \
--sysconfdir="/etc/${pkgname}" \
--localstatedir="/run/${pkgname}" \
--with-libpam \
--enable-snmp="agentx" \
--enable-multipath=256 \
--enable-user="${pkgname}" \
--enable-group="${pkgname}" \
--enable-vty-group="${pkgname}vty" \
--enable-configfile-mask="0640" \
--enable-logfile-mask="0640" \
--enable-shell-access \
--enable-rpki \
--enable-fpm
# Fight unused direct deps
sed -i -e "s/ -shared / $LDFLAGS\0 /g" libtool
make
}
check() {
cd ${pkgname}-${pkgname}-${pkgver}
make check
}
package() {
cd ${pkgname}-${pkgname}-${pkgver}
make DESTDIR="${pkgdir}" install
install -Dm0644 "../frr-init-functions" "${pkgdir}/usr/bin/"
pushd "redhat"
sed -ri 's|/var/run/frr|/run/frr|g' "${pkgname}.logrotate"
install -Dm0644 "${pkgname}.logrotate" "${pkgdir}/etc/logrotate.d/${pkgname}"
install -Dm0644 "${pkgname}.pam" "${pkgdir}/etc/pam.d/${pkgname}"
popd
install -Dm0644 "../${pkgname}.tmpfiles" "${pkgdir}/usr/lib/tmpfiles.d/${pkgname}.conf"
install -Dm0644 "../${pkgname}.sysusers" "${pkgdir}/usr/lib/sysusers.d/${pkgname}.conf"
pushd "tools"
sed -ri 's|/usr/lib/frr/|/usr/bin/|g' "${pkgname}.service"
install -Dm0644 "${pkgname}.service" "${pkgdir}/usr/lib/systemd/system/${pkgname}.service"
popd
pushd "tools/etc"
install -Dm0644 "${pkgname}/daemons" "${pkgdir}/etc/${pkgname}/daemons.conf"
install -Dm0644 "iproute2/rt_protos.d/${pkgname}.conf" "${pkgdir}/etc/iproute2/rt_protos.d/${pkgname}.conf"
install -Dm0644 "${pkgname}/${pkgname}.conf" "${pkgdir}/etc/${pkgname}/${pkgname}.conf"
install -Dm0644 "${pkgname}/vtysh.conf" "${pkgdir}/etc/${pkgname}/vtysh.conf"
install -Dm0644 "rsyslog.d/45-${pkgname}.conf" "${pkgdir}/etc/rsyslog.d/45-${pkgname}.conf"
popd
pushd "${pkgdir}/usr/bin"
for file in frr frr-reload frrcommon.sh frrinit.sh watchfrr.sh;
do
sed -ri 's|/lib/lsb/init-functions|/usr/bin/frr-init-functions|g' "$file";
done
sed -ri 's|C_PATH/daemons\"|C_PATH/daemons.conf\"|g' frrcommon.sh
sed -ri 's|load_old_config \"\$C_PATH/daemons.conf\"|load_old_config \"\$C_PATH/daemons\"|g' frrcommon.sh
popd
pushd "${pkgdir}/usr/lib/systemd/system"
sed -ri 's|frrinit.sh|frr|g' frr.service
popd
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment