mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-16 02:30:52 +00:00
Merge pull request #2040 from ajones-rvbd/ajones-issue-2030
alpine packaging: use a more standard packaging format
This commit is contained in:
commit
d4c58fa8f4
@ -4,9 +4,9 @@ pkgver=@VERSION@
|
|||||||
pkgrel=0
|
pkgrel=0
|
||||||
pkgdesc="Free Range Routing is a fork of quagga"
|
pkgdesc="Free Range Routing is a fork of quagga"
|
||||||
url="https://frrouting.org/"
|
url="https://frrouting.org/"
|
||||||
arch="all"
|
arch="x86_64"
|
||||||
license="GPL-2.0"
|
license="GPL-2.0"
|
||||||
depends="iproute2 json-c c-ares ipsec-tools iproute2"
|
depends="json-c c-ares ipsec-tools iproute2 python py-ipaddr bash"
|
||||||
makedepends="ncurses-dev net-snmp-dev gawk texinfo perl
|
makedepends="ncurses-dev net-snmp-dev gawk texinfo perl
|
||||||
acct autoconf automake bash
|
acct autoconf automake bash
|
||||||
binutils binutils-libs bison bsd-compat-headers build-base
|
binutils binutils-libs bison bsd-compat-headers build-base
|
||||||
@ -20,18 +20,42 @@ makedepends="ncurses-dev net-snmp-dev gawk texinfo perl
|
|||||||
patch pax-utils pcre perl pkgconf python2 python2-dev readline
|
patch pax-utils pcre perl pkgconf python2 python2-dev readline
|
||||||
readline-dev sqlite-libs squashfs-tools sudo tar texinfo xorriso xz-libs
|
readline-dev sqlite-libs squashfs-tools sudo tar texinfo xorriso xz-libs
|
||||||
py-sphinx"
|
py-sphinx"
|
||||||
|
install="$pkgname.pre-install $pkgname.pre-deinstall $pkgname.post-deinstall"
|
||||||
subpackages="$pkgname-dev $pkgname-doc $pkgname-dbg"
|
subpackages="$pkgname-dev $pkgname-doc $pkgname-dbg"
|
||||||
source="$pkgname-$pkgver.tar.gz"
|
source="$pkgname-$pkgver.tar.gz docker-start daemons daemons.conf"
|
||||||
|
|
||||||
builddir="$srcdir"/$pkgname-$pkgver
|
builddir="$srcdir"/$pkgname-$pkgver
|
||||||
|
|
||||||
|
_sbindir=/usr/lib/frr
|
||||||
|
_sysconfdir=/etc/frr
|
||||||
|
_libdir=/usr/lib
|
||||||
|
_localstatedir=/var/run/frr
|
||||||
|
_user=frr
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
cd "$builddir"
|
cd "$builddir"
|
||||||
./configure --prefix=/usr || return 1
|
./configure \
|
||||||
|
--prefix=/usr \
|
||||||
|
--sbindir=$_sbindir \
|
||||||
|
--sysconfdir=$_sysconfdir \
|
||||||
|
--libdir=$_libdir \
|
||||||
|
--localstatedir=$_localstatedir \
|
||||||
|
--enable-systemd=no \
|
||||||
|
--enable-vtysh \
|
||||||
|
--enable-multipath=64 \
|
||||||
|
--enable-vty-group=frrvty \
|
||||||
|
--enable-user=$_user \
|
||||||
|
--enable-group=$_user || return 1
|
||||||
make || return 1
|
make || return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
package() {
|
package() {
|
||||||
cd "$builddir"
|
cd "$builddir"
|
||||||
make DESTDIR="$pkgdir" install || return 1
|
make DESTDIR="$pkgdir" install || return 1
|
||||||
|
|
||||||
|
install -Dm755 "$srcdir"/docker-start "$pkgdir"$_sbindir
|
||||||
|
install -Dm644 "$srcdir"/daemons "$pkgdir"$_sysconfdir
|
||||||
|
install -Dm644 "$srcdir"/daemons.conf "$pkgdir"$_sysconfdir
|
||||||
|
install -d "$pkgdir"/etc/init.d
|
||||||
|
ln -s ${_sbindir}/frr "$pkgdir"/etc/init.d/frr
|
||||||
}
|
}
|
||||||
|
10
alpine/docker-start
Executable file
10
alpine/docker-start
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
##
|
||||||
|
# For volume mounts...
|
||||||
|
##
|
||||||
|
chown -R frr:frr /etc/frr
|
||||||
|
/etc/init.d/frr start
|
||||||
|
exec sleep 10000d
|
6
alpine/frr.post-deinstall
Executable file
6
alpine/frr.post-deinstall
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
getent passwd frr > /dev/null && deluser frr
|
||||||
|
getent group frrvty > /dev/null && delgroup frrvty
|
||||||
|
getent group frr > /dev/null && delgroup frr
|
||||||
|
exit 0
|
4
alpine/frr.pre-deinstall
Executable file
4
alpine/frr.pre-deinstall
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
/etc/init.d/frr stop
|
||||||
|
exit 0
|
10
alpine/frr.pre-install
Executable file
10
alpine/frr.pre-install
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for g in frr frrvty; do
|
||||||
|
! getent group $g > /dev/null && addgroup -S $g
|
||||||
|
done
|
||||||
|
|
||||||
|
! getent passwd frr > /dev/null && \
|
||||||
|
adduser -S -D -h /var/run/frr -s /sbin/nologin -G frr -g frr frr
|
||||||
|
|
||||||
|
adduser frr frrvty
|
@ -52,13 +52,32 @@ And to run the image:
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
docker run -it --rm frr:latest /bin/sh
|
docker run -it --rm --name frr frr:latest
|
||||||
|
|
||||||
Currently, we only package the raw daemons and example files, so, you'll
|
In the default configuration, none of the frr daemons will be running.
|
||||||
need to run the daemons by hand (or, better, orchestrate in the Dockerfile).
|
To configure the daemons, exec into the container and edit the configuration
|
||||||
|
files or mount a volume with configuration files into the container on
|
||||||
|
startup. To configure by hand:
|
||||||
|
|
||||||
We can also build directly from docker-compose, with a docker-compose.yml file
|
::
|
||||||
like this one:
|
|
||||||
|
docker exec -it frr /bin/sh
|
||||||
|
vi /etc/frr/daemons
|
||||||
|
vi /etc/frr/daemons.conf
|
||||||
|
cp /etc/frr/zebra.conf.sample /etc/frr/zebra.conf
|
||||||
|
vi /etc/frr/zebra.conf
|
||||||
|
/etc/init.d/frr start
|
||||||
|
|
||||||
|
Or, to configure the daemons using /etc/frr from a host volume, put the
|
||||||
|
config files in, say, ./docker/etc and bind mount that into the
|
||||||
|
container:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
docker run -it --rm -v `pwd`/docker/etc:/etc/frr frr:latest
|
||||||
|
|
||||||
|
We can also build the base image directly from docker-compose, with a
|
||||||
|
docker-compose.yml file like this one:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
|
@ -23,11 +23,13 @@ FROM alpine:3.7 as alpine-builder
|
|||||||
RUN apk add --no-cache abuild alpine-sdk && mkdir -p /pkgs/apk
|
RUN apk add --no-cache abuild alpine-sdk && mkdir -p /pkgs/apk
|
||||||
ADD docker/alpine/alpine-build.sh /usr/bin/
|
ADD docker/alpine/alpine-build.sh /usr/bin/
|
||||||
ADD docker/alpine/builder /etc/sudoers.d
|
ADD docker/alpine/builder /etc/sudoers.d
|
||||||
COPY --from=source-builder /src/*.tar.gz /src/alpine/APKBUILD /dist/
|
COPY --from=source-builder /src/*.tar.gz /src/alpine/* /src/tools/etc/frr/daemons* /dist/
|
||||||
RUN adduser -D -G abuild builder && chown -R builder /dist /pkgs
|
RUN adduser -D -G abuild builder && chown -R builder /dist /pkgs
|
||||||
USER builder
|
USER builder
|
||||||
RUN /usr/bin/alpine-build.sh
|
RUN /usr/bin/alpine-build.sh
|
||||||
FROM alpine:3.7
|
FROM alpine:3.7
|
||||||
RUN mkdir -p /pkgs/apk
|
RUN mkdir -p /pkgs/apk
|
||||||
COPY --from=alpine-builder /pkgs/apk/ /pkgs/apk/
|
COPY --from=alpine-builder /pkgs/apk/ /pkgs/apk/
|
||||||
|
RUN apk add --no-cache tini
|
||||||
RUN apk add --no-cache --allow-untrusted /pkgs/apk/x86_64/*.apk
|
RUN apk add --no-cache --allow-untrusted /pkgs/apk/x86_64/*.apk
|
||||||
|
ENTRYPOINT [ "/sbin/tini", "--", "/usr/lib/frr/docker-start" ]
|
||||||
|
@ -25,7 +25,9 @@ DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pimd ldpd nhrpd eigrpd
|
|||||||
MAX_INSTANCES=5
|
MAX_INSTANCES=5
|
||||||
RELOAD_SCRIPT=/usr/lib/frr/frr-reload.py
|
RELOAD_SCRIPT=/usr/lib/frr/frr-reload.py
|
||||||
|
|
||||||
. /lib/lsb/init-functions
|
if [ -e /lib/lsb/init-functions ]; then
|
||||||
|
. /lib/lsb/init-functions
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -f /usr/lib/frr/ssd ]; then
|
if [ -f /usr/lib/frr/ssd ]; then
|
||||||
SSD=/usr/lib/frr/ssd
|
SSD=/usr/lib/frr/ssd
|
||||||
|
Loading…
Reference in New Issue
Block a user