diff options
Diffstat (limited to 'scripts/obs/data')
-rw-r--r-- | scripts/obs/data/Dockerfile | 35 | ||||
-rwxr-xr-x | scripts/obs/data/build.sh | 15 | ||||
-rw-r--r-- | scripts/obs/data/build_binpkg.Dockerfile | 90 | ||||
-rw-r--r-- | scripts/obs/data/build_binpkg_manuals.Dockerfile | 20 | ||||
-rwxr-xr-x | scripts/obs/data/build_deb.sh | 25 | ||||
-rwxr-xr-x | scripts/obs/data/build_rpm.sh | 44 | ||||
-rw-r--r-- | scripts/obs/data/build_srcpkg.Dockerfile | 31 | ||||
-rw-r--r-- | scripts/obs/data/rpmmacros | 5 |
8 files changed, 230 insertions, 35 deletions
diff --git a/scripts/obs/data/Dockerfile b/scripts/obs/data/Dockerfile deleted file mode 100644 index d8bd9c5..0000000 --- a/scripts/obs/data/Dockerfile +++ /dev/null @@ -1,35 +0,0 @@ -FROM debian:bullseye -ARG UID - -RUN apt-get update && \ - apt-get upgrade -y && \ - apt-get install -y --no-install-recommends \ - ca-certificates \ - gnupg2 \ - && \ - apt-get clean - -COPY Release.key /tmp/Release.key -RUN apt-key add /tmp/Release.key && \ - rm /tmp/Release.key && \ - echo "deb https://downloads.osmocom.org/packages/osmocom:/latest/Debian_11/ ./" \ - > /etc/apt/sources.list.d/osmocom-latest.list - -RUN apt-get update && \ - apt-get upgrade -y && \ - apt-get install -y --no-install-recommends \ - debhelper \ - dh-python \ - dpkg-dev \ - fakeroot \ - git \ - meson \ - osc \ - python3-setuptools \ - rebar3 \ - sed \ - && \ - apt-get clean - -RUN useradd --uid=${UID} -m user -USER user diff --git a/scripts/obs/data/build.sh b/scripts/obs/data/build.sh new file mode 100755 index 0000000..7dfbda7 --- /dev/null +++ b/scripts/obs/data/build.sh @@ -0,0 +1,15 @@ +#!/bin/sh -e + +if ! data/build_"$PACKAGEFORMAT".sh; then + echo + echo "ERROR: build failed!" + echo + if [ -n "$RUN_SHELL_ON_ERROR" ]; then + bash + fi + exit 1 +fi + +echo +echo "Build successful!" +echo diff --git a/scripts/obs/data/build_binpkg.Dockerfile b/scripts/obs/data/build_binpkg.Dockerfile new file mode 100644 index 0000000..55bfe0c --- /dev/null +++ b/scripts/obs/data/build_binpkg.Dockerfile @@ -0,0 +1,90 @@ +ARG DISTRO_FROM +FROM ${DISTRO_FROM} +ARG DISTRO +ARG FEED +ARG UID + +COPY Release.key /tmp/Release.key + +RUN useradd --uid=${UID} -m user + +# Only install build-essential here, and what's needed to add the Osmocom +# repository. Everything else must be defined as dependency in the package +# build recipe. For rpm-based distributions, there is no build-essential or +# similar package. Instead add relevant packages from prjconf, e.g.: +# https://build.opensuse.org/projects/CentOS:CentOS-8/prjconf +# For debian, make sure we don't have man pages as otherwise it takes some time +# to regenerate the manuals database when installing build dependencies. +# SYS#5818: using almalinux:8 instead of centos:8 +RUN case "$DISTRO" in \ + debian*|ubuntu*) \ + echo "path-exclude=/usr/share/man/*" \ + > /etc/dpkg/dpkg.cfg.d/exclude-man-pages && \ + rm -rf /usr/share/man/ && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + fakeroot \ + git \ + gnupg2 \ + iproute2 \ + && \ + apt-get clean \ + ;; \ + almalinux*) \ + dnf -y install \ + autoconf \ + automake \ + binutils \ + dnf-utils \ + gcc \ + gcc-c++ \ + glibc-devel \ + iproute \ + libtool \ + make \ + redhat-rpm-config \ + rpm-build \ + rpmdevtools \ + wget && \ + yum config-manager --set-enabled powertools && \ + su user -c rpmdev-setuptree \ + ;; \ + esac + +# Add master repository, where packages immediately get updated after merging +# patches to master. +# sed: first letter uppercase (testing -> Testing) +RUN set -x; \ + VERSION="$(echo "$DISTRO" | cut -d : -f 2 | sed 's/./\u&/')"; \ + case "$DISTRO" in \ + debian:*) \ + apt-key add /tmp/Release.key && \ + rm /tmp/Release.key && \ + echo "deb https://downloads.osmocom.org/packages/osmocom:/$FEED/Debian_$VERSION/ ./" \ + > /etc/apt/sources.list.d/osmocom-$FEED.list \ + ;; \ + ubuntu:*) \ + apt-key add /tmp/Release.key && \ + rm /tmp/Release.key && \ + echo "deb https://downloads.osmocom.org/packages/osmocom:/$FEED/xUbuntu_$VERSION/ ./" \ + > /etc/apt/sources.list.d/osmocom-$FEED.list \ + ;; \ + almalinux:*) \ + { echo "[network_osmocom_$FEED]"; \ + echo "name=osmocom:$FEED"; \ + echo "type=rpm-md"; \ + echo "baseurl=https://downloads.osmocom.org/packages/osmocom:/$FEED/CentOS_$VERSION/"; \ + echo "gpgcheck=1"; \ + echo "gpgkey=https://downloads.osmocom.org/packages/osmocom:/$FEED/CentOS_$VERSION/repodata/repomd.xml.key"; \ + echo "enabled=1"; \ + } > /etc/yum.repos.d/network:osmocom:$FEED.repo \ + ;; \ + *) \ + echo "can't install repo for $DISTRO" && \ + exit 1 \ + ;; \ + esac + +WORKDIR /obs/ diff --git a/scripts/obs/data/build_binpkg_manuals.Dockerfile b/scripts/obs/data/build_binpkg_manuals.Dockerfile new file mode 100644 index 0000000..c2b1211 --- /dev/null +++ b/scripts/obs/data/build_binpkg_manuals.Dockerfile @@ -0,0 +1,20 @@ +# Optimization: installing osmo-gsm-manuals-dev and its many, many dependencies +# takes quite a long time - sometimes longer than building the package itself +# (related: OS#4132). Instead of doing this every time before starting a build, +# here is a second docker container that already has it installed. This gets +# used by build_binpkg.py in case the package to build depends on +# osmo-gsm-manuals-dev and the build is done for Debian. Note that right now we +# don't build the manuals for rpm-based distributions. +ARG DISTRO_FROM +FROM ${DISTRO_FROM} +ARG DISTRO + +RUN case "$DISTRO" in \ + debian*|ubuntu*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + osmo-gsm-manuals-dev \ + && \ + apt-get clean \ + ;; \ + esac diff --git a/scripts/obs/data/build_deb.sh b/scripts/obs/data/build_deb.sh new file mode 100755 index 0000000..931919d --- /dev/null +++ b/scripts/obs/data/build_deb.sh @@ -0,0 +1,25 @@ +#!/bin/sh -ex + +apt_get="apt-get" +if [ -n "$INSIDE_DOCKER" ]; then + export DEBIAN_FRONTEND=noninteractive + apt_get="apt-get -y" +fi + +su "$BUILDUSER" -c "tar -C _temp/binpkgs -xvf _temp/srcpkgs/$PACKAGE/*.tar.*" +cd _temp/binpkgs/* + +$apt_get update +$apt_get build-dep . + +if [ -n "$INSIDE_DOCKER" ]; then + ip link set eth0 down +fi + +su "$BUILDUSER" -c "dpkg-buildpackage -us -uc -j$JOBS" + +# Show contents +cd .. +for i in *.deb; do + dpkg -c "$i" +done diff --git a/scripts/obs/data/build_rpm.sh b/scripts/obs/data/build_rpm.sh new file mode 100755 index 0000000..a73d164 --- /dev/null +++ b/scripts/obs/data/build_rpm.sh @@ -0,0 +1,44 @@ +#!/bin/sh -ex + +if ! [ -d /home/$BUILDUSER/rpmbuild/SOURCES ]; then + set +x + echo "ERROR: rpmdev-setuptree did not run" + echo "If this is an rpm based system and you want to build the package" + echo "here, run rpmdev-setuptree. Otherwise consider building the" + echo "package in docker (-d)." + exit 1 +fi + +yum_builddep="yum-builddep" +if [ -n "$INSIDE_DOCKER" ]; then + yum_builddep="yum-builddep -y" +fi + +spec="$(basename "$(find _temp/srcpkgs/"$PACKAGE" -name '*.spec')")" + +su "$BUILDUSER" -c "cp _temp/srcpkgs/$PACKAGE/$spec ~/rpmbuild/SPECS" +su "$BUILDUSER" -c "cp _temp/srcpkgs/$PACKAGE/*.tar.* ~/rpmbuild/SOURCES" +su "$BUILDUSER" -c "cp _temp/srcpkgs/$PACKAGE/rpmlintrc ~/rpmbuild/SOURCES" +su "$BUILDUSER" -c "cp /obs/data/rpmmacros ~/.rpmmacros" + +# Force refresh of package index data (OS#6038) +dnf makecache --refresh + +$yum_builddep "/home/$BUILDUSER/rpmbuild/SPECS/$spec" + +if [ -n "$INSIDE_DOCKER" ]; then + ip link set eth0 down +fi + +su "$BUILDUSER" -c "rpmbuild -bb ~/rpmbuild/SPECS/$spec" + +# Make built rpms available outside of docker +if [ -n "$INSIDE_DOCKER" ]; then + su "$BUILDUSER" -c "mv ~/rpmbuild/RPMS/*/*.rpm _temp/binpkgs/" +fi + +# Show contents +cd _temp/binpkgs +for i in *.rpm; do + rpm -qlp "$i" +done diff --git a/scripts/obs/data/build_srcpkg.Dockerfile b/scripts/obs/data/build_srcpkg.Dockerfile new file mode 100644 index 0000000..80488ea --- /dev/null +++ b/scripts/obs/data/build_srcpkg.Dockerfile @@ -0,0 +1,31 @@ +# Change distro in lib/config.py:docker_distro_default +ARG DISTRO_FROM +FROM ${DISTRO_FROM} +ARG UID + +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + colordiff \ + debhelper \ + dh-python \ + dpkg-dev \ + fakeroot \ + git \ + git-review \ + gnupg2 \ + libxml2-utils \ + lsb-release \ + meson \ + osc \ + python3-packaging \ + python3-setuptools \ + quilt \ + rebar3 \ + sed \ + && \ + apt-get clean + +RUN useradd --uid=${UID} -m user +USER user diff --git a/scripts/obs/data/rpmmacros b/scripts/obs/data/rpmmacros new file mode 100644 index 0000000..5ac26c7 --- /dev/null +++ b/scripts/obs/data/rpmmacros @@ -0,0 +1,5 @@ +# Default values for macros from OBS project config: +# https://build.opensuse.org/projects/CentOS:CentOS-8/prjconf + +%ext_info .gz +%ext_man .gz |