Created
December 20, 2021 07:30
-
-
Save bbidulock/19ca9c1f097807b980639b11f3577dbb to your computer and use it in GitHub Desktop.
PKGBUILD for frr-git-8.2.dev
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# /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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
d /etc/frr 0750 frr frr | |
d /var/log/frr 0750 frr frr | |
d /run/frr 0750 frr frr | |
Z /etc/frr - frr frr |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Maintainer: Juergen Werner <juergen at opensourcerouting dot org> | |
# Contributor: Shalygin Konstantin <k0ste at k0ste dot ru> | |
pkgname=frr-git | |
_pkgname=frr | |
pkgver=8.2.dev.r26682 | |
pkgrel=2 | |
pkgdesc='FRRouting (quagga fork) supports BGP4, OSPFv2, OSPFv3, ISIS, RIP, RIPng, PIM, LDP, BFD, VRRP, NHRP and EIGRP.' | |
arch=('x86_64' 'i686') | |
url="https://frrouting.org/" | |
license=('GPL2') | |
depends=('libcap' 'json-c' 'net-snmp' 'rtrlib' 'libyang' 'libunwind' 'c-ares' 'libelf') | |
makedepends=('perl-xml-libxml' 'python-sphinx' 'git') | |
checkdepends=('python-pytest') | |
optdepends=('rsyslog: syslog support' 'python: for frr-reload.py and generate_support_bundle.py') | |
conflicts=('quagga' 'babeld' 'quagga_cumulus' "${_pkgname}") | |
provides=('quagga' 'quagga_cumulus' "frr=${pkgver%%.[^0-9]*}-${pkgrel}") | |
backup=("etc/${_pkgname}/${_pkgname}.conf" | |
"etc/${_pkgname}/daemons.conf" | |
"etc/${_pkgname}/vtysh.conf") | |
source=("$pkgname::git+https://github.com/FRRouting/frr.git" | |
"${_pkgname}.sysusers" | |
"${_pkgname}.tmpfiles" | |
"${_pkgname}-init-functions") | |
sha256sums=('SKIP' | |
'b713df127ea476d6ec7793854cbb75f24085551816108b0c5ca4ae5feb9b74b6' | |
'd4ee57baa7f067e07f6456dedf59e54f56774924e2e2b2ea8ac01151237ac19b' | |
'e6e2592a8b0b18f7f173186fb4ebf23e642b3d912179f0bb36251962ca64cd7a') | |
pkgver() { | |
cd ${pkgname} | |
source config.version | |
echo "${DIST_PACKAGE_VERSION}.r$(git rev-list --count HEAD)" | sed 's/-/./g' | |
} | |
prepare() { | |
cd ${pkgname} | |
autoreconf -fvi | |
./configure \ | |
CFLAGS="$CFLAGS" \ | |
LDFLAGS="$LDFLAGS" \ | |
--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 | |
} | |
build() { | |
cd ${pkgname} | |
# Fight unused direct deps | |
sed -i -e "s/ -shared / $LDFLAGS\0 /g" libtool | |
make CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" | |
} | |
check() { | |
cd ${pkgname} | |
make check | |
} | |
package() { | |
cd ${pkgname} | |
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