aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/obs/data
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/obs/data')
-rw-r--r--scripts/obs/data/Dockerfile35
-rwxr-xr-xscripts/obs/data/build.sh15
-rw-r--r--scripts/obs/data/build_binpkg.Dockerfile90
-rw-r--r--scripts/obs/data/build_binpkg_manuals.Dockerfile20
-rwxr-xr-xscripts/obs/data/build_deb.sh25
-rwxr-xr-xscripts/obs/data/build_rpm.sh44
-rw-r--r--scripts/obs/data/build_srcpkg.Dockerfile31
-rw-r--r--scripts/obs/data/rpmmacros5
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