diff options
| -rw-r--r-- | alpine/APKBUILD.in | 3 | ||||
| -rw-r--r-- | doc/Makefile.am | 1 | ||||
| -rw-r--r-- | doc/developer/Building_FRR_on_Alpine.rst | 47 | ||||
| -rw-r--r-- | doc/developer/building.rst | 1 | ||||
| -rw-r--r-- | docker/.gitignore | 2 | ||||
| -rw-r--r-- | docker/alpine/Dockerfile | 30 | ||||
| -rwxr-xr-x | docker/alpine/alpine-build.sh | 11 | ||||
| -rwxr-xr-x | docker/alpine/build.sh | 21 | ||||
| -rw-r--r-- | docker/alpine/builder | 1 |
9 files changed, 116 insertions, 1 deletions
diff --git a/alpine/APKBUILD.in b/alpine/APKBUILD.in index 33c2859245..2b211ccafd 100644 --- a/alpine/APKBUILD.in +++ b/alpine/APKBUILD.in @@ -18,7 +18,8 @@ makedepends="ncurses-dev net-snmp-dev gawk texinfo perl libstdc++ libtool libuuid linux-headers lzip lzo m4 make mkinitfs mpc1 mpfr3 mtools musl-dev ncurses-libs ncurses-terminfo ncurses-terminfo-base 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" subpackages="$pkgname-dev $pkgname-doc $pkgname-dbg" source="$pkgname-$pkgver.tar.gz" diff --git a/doc/Makefile.am b/doc/Makefile.am index aeabc0981d..8d35d4540b 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -179,6 +179,7 @@ EXTRA_DIST = frr-sphinx.mk \ developer/OSPF-API.md \ developer/workflow.rst \ developer/Building_FRR_on_Ubuntu1404.rst \ + developer/Building_FRR_on_Alpine.rst \ user/ospf_fundamentals.rst \ user/routemap.rst \ user/index.rst \ diff --git a/doc/developer/Building_FRR_on_Alpine.rst b/doc/developer/Building_FRR_on_Alpine.rst new file mode 100644 index 0000000000..27718bdc80 --- /dev/null +++ b/doc/developer/Building_FRR_on_Alpine.rst @@ -0,0 +1,47 @@ +Building FRR dev packages on Alpine Linux from Git Source +========================================================= + +For building Alpine Linux dev packages, we use docker. + +Install docker 17.05 or later +----------------------------- + +Depending on your host, there are different ways of installing +docker. Refer to the documentation here for instructions on how +to install a free version of docker: https://www.docker.com/community-edition + +Work with sources +----------------- + + git clone https://github.com/frrouting/frr.git frr + cd frr + +Build apk packages +------------------ + + ./docker/alpine/build.sh + +This will put the apk packages in: + + ./docker/pkgs/apk/x86_64/ + +Usage +----- + +To add the packages to a docker image, create a Dockerfile in ./docker/pkgs: + + FROM alpine:3.7 + RUN mkdir -p /pkgs + ADD apk/ /pkgs/ + RUN apk add --no-cache --allow-untrusted /pkgs/x86_64/*.apk + +And build a docker image: + + docker build --rm --force-rm -t alpine-dev-pkgs:latest docker/pkgs + +And run the image: + + docker run -it --rm alpine-dev-pkgs:latest /bin/sh + +Currently, we only package the raw daemons and example files, so, you'll +need to run the daemons by hand (or, better, orchestrate in the Dockerfile). diff --git a/doc/developer/building.rst b/doc/developer/building.rst index 4715bca532..e56744ad87 100644 --- a/doc/developer/building.rst +++ b/doc/developer/building.rst @@ -5,6 +5,7 @@ Building FRR :maxdepth: 2 Building_FRR_on_LEDE-OpenWRT + Building_FRR_on_Alpine Building_FRR_on_CentOS6 Building_FRR_on_CentOS7 Building_FRR_on_Debian8 diff --git a/docker/.gitignore b/docker/.gitignore new file mode 100644 index 0000000000..e9beab556e --- /dev/null +++ b/docker/.gitignore @@ -0,0 +1,2 @@ +src.tar +pkgs/ diff --git a/docker/alpine/Dockerfile b/docker/alpine/Dockerfile new file mode 100644 index 0000000000..e186fdccdf --- /dev/null +++ b/docker/alpine/Dockerfile @@ -0,0 +1,30 @@ +FROM alpine:3.7 as source-builder +ARG commit +RUN apk add --no-cache abuild acct alpine-sdk attr autoconf automake bash \ + binutils binutils-libs bison bsd-compat-headers build-base \ + c-ares c-ares-dev ca-certificates cryptsetup-libs curl \ + device-mapper-libs expat fakeroot flex fortify-headers g++ gcc gdbm \ + git gmp isl json-c json-c-dev kmod lddtree libacl libatomic libattr \ + libblkid libburn libbz2 libc-dev libcap libcurl libedit libffi libgcc \ + libgomp libisoburn libisofs libltdl libressl libssh2 \ + libstdc++ libtool libuuid linux-headers lzip lzo m4 make mkinitfs mpc1 \ + mpfr3 mtools musl-dev ncurses-libs ncurses-terminfo ncurses-terminfo-base \ + patch pax-utils pcre perl pkgconf python2 python2-dev readline \ + readline-dev sqlite-libs squashfs-tools sudo tar texinfo xorriso xz-libs \ + groff gzip bc py-sphinx +RUN mkdir -p /src +ADD src.tar /src +RUN (cd /src && \ + ./bootstrap.sh && \ + ./configure \ + --enable-numeric-version \ + --with-pkg-extra-version=_git$commit && \ + make dist) +FROM alpine:3.7 as alpine-builder +RUN apk add --no-cache abuild alpine-sdk && mkdir -p /pkgs/apk +ADD alpine-build.sh /usr/bin/ +ADD builder /etc/sudoers.d +COPY --from=source-builder /src/*.tar.gz /src/alpine/APKBUILD /dist/ +RUN adduser -D -G abuild builder && chown -R builder /dist /pkgs +USER builder +RUN /usr/bin/alpine-build.sh diff --git a/docker/alpine/alpine-build.sh b/docker/alpine/alpine-build.sh new file mode 100755 index 0000000000..d4c0311122 --- /dev/null +++ b/docker/alpine/alpine-build.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +cd /dist + +sudo apk --update add alpine-conf +sudo setup-apkcache /var/cache/apk +abuild-keygen -a -n +abuild checksum +abuild -r -P /pkgs/apk diff --git a/docker/alpine/build.sh b/docker/alpine/build.sh new file mode 100755 index 0000000000..357ea12dee --- /dev/null +++ b/docker/alpine/build.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +set -e +set -v +set -x + +## +# commit must be converted to decimal +## +c=`git rev-parse --short=10 HEAD` +commit=`printf '%u\n' 0x$c` +git archive --format=tar $c > docker/alpine/src.tar +(cd docker/alpine && \ + docker build --build-arg commit=$commit --rm --force-rm -t \ + frr:alpine-$c . && \ + rm -f src.tar) + +id=`docker create frr:alpine-$c` +docker cp ${id}:/pkgs/ docker +docker rm $id +docker rmi frr:alpine-$c diff --git a/docker/alpine/builder b/docker/alpine/builder new file mode 100644 index 0000000000..a950b8abaf --- /dev/null +++ b/docker/alpine/builder @@ -0,0 +1 @@ +builder ALL=(ALL) NOPASSWD:ALL |
