]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
ci: Update to Ubuntu 22.04 LTS
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 16 May 2022 14:57:02 +0000 (16:57 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 20 Jun 2022 10:48:17 +0000 (12:48 +0200)
Note: The LTS image is still in beta (https://github.com/actions/virtual-environments/issues/5490).

In Jammy, we have recent versions of zypper and dnf packaged so we
don't have to build them from source anymore. Also, sq is packaged
so we don't have to build sq from source anymore either.

The setup-github-actions.sh script is renamed to setup-pacman.sh
and it's reduced to only install the dependencies necessary to
build pacman and archlinux-keyring.

All other dependencies are moved to action.yaml and the action
mkosi.default script.

.github/workflows/ci.yml
action.yaml
action/mkosi.default
action/setup-github-actions.sh [deleted file]
action/setup-pacman.sh [new file with mode: 0755]

index 9ed4bce701424157e03831700ae6bc374a72697d..6ed15e073826fa7645120d7c527fd10f0e970ef8 100644 (file)
@@ -10,7 +10,7 @@ on:
 
 jobs:
   unit-test:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     concurrency:
       group: ${{ github.workflow }}-${{ github.ref }}
       cancel-in-progress: true
@@ -97,7 +97,7 @@ jobs:
         bash -c 'shopt -s globstar; shellcheck **/*.sh'
 
   integration-test:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     needs: unit-test
     concurrency:
       group: ${{ github.workflow }}-${{ matrix.distro }}-${{ matrix.format }}-${{ github.ref }}
index 9295958fba9dafdac3876a61c3ee35560086973c..6974b485c7b83cca0a28a413ed26c4255f9552cc 100644 (file)
@@ -9,14 +9,27 @@ runs:
     uses: actions/cache@v3
     with:
       path: build
-      key: ${{ runner.os }}-${{ hashFiles('action/setup-github-actions.sh') }}
+      key: ${{ runner.os }}-${{ hashFiles('action/setup-pacman.sh') }}
 
   - name: Dependencies
     shell: bash
     run: |
+      sudo apt-get update
+      sudo apt-get install --assume-yes --no-install-recommends \
+        debootstrap \
+        zypper \
+        dnf \
+        systemd-container \
+        qemu-system-x86 \
+        ovmf \
+        e2fsprogs \
+        xfsprogs \
+        squashfs-tools \
+        btrfs-progs
+
       mkdir -p $BUILDDIR
 
-      sudo -E ${{ github.action_path }}/action/setup-github-actions.sh
+      sudo -E ${{ github.action_path }}/action/setup-pacman.sh
       sudo chown -R $USER: $BUILDDIR
 
       sudo pacman-key --init
index 4da4a03a669613ff215b18492d1c16175c0f5faa..36840eee4437c9a9daafbf66396b581920f2a620 100644 (file)
@@ -1,56 +1,25 @@
 [Distribution]
 Distribution=ubuntu
-Release=focal
-
-[Output]
-HostonlyInitrd=yes
+Release=jammy
 
 [Content]
-Cache=../mkosi.cache/ubuntu~focal
-BuildScript=setup-github-actions.sh
+Cache=../mkosi.cache/ubuntu~jammy
+BuildScript=setup-pacman.sh
 WithNetwork=yes
 Repositories=main,universe
 Autologin=yes
 Bootable=yes
 Password=
-Packages=bzip2
-         clang
-         debootstrap
-         e2fsprogs
-         git
-         libarchive13
-         libcap2
-         libcppunit-1.15-0
-         libcurl4
-         libdb5.3
-         libgcrypt20
-         libglib2.0.0
-         libgpgme11
-         libjson-c4
-         liblua5.3-0
-         liblzma5
-         libmagic1
-         libpopt0
-         libpython3.8
-         libsmartcols1
-         libsqlite3-0
-         libssl1.1
-         libtool
-         libxml2
-         libyaml-0-2
-         libzstd1
-         python-is-python3
-         python3
-         python3-distutils
-         python3-gpg
-         python3-setuptools
-         rustc
-         squashfs-tools
+Packages=debootstrap
+         zypper
+         dnf
          systemd-container
+         qemu-system-x86
+         ovmf
+         squashfs-tools
+         e2fsprogs
          xfsprogs
-         zlib1g
-         zypper
-
+         btrfs-progs
 
 [Validation]
 QemuHeadless=yes
diff --git a/action/setup-github-actions.sh b/action/setup-github-actions.sh
deleted file mode 100755 (executable)
index 6d7ca7e..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-PACMAN_VERSION="6.0.1"
-ARCHLINUX_KEYRING_COMMIT="29dc5d228d033929f90af14d219487b1edc4c2c0"
-RPM_VERSION="4.17.0"
-LIBCOMPS_VERSION="0.1.18"
-LIBREPO_VERSION="1.14.2"
-LIBMODULEMD_VERSION="2.14.0"
-LIBSOLV_VERSION="0.7.22"
-LIBDNF_VERSION="0.66.0"
-DNF_VERSION="4.11.1"
-SEQUOIA_SQ_VERSION="0.26.0"
-
-export CMAKE_GENERATOR=Ninja
-export CARGO_HOME=cargo
-
-# All built libraries are installed to both $DESTDIR and /usr so they appear in
-# the final image and can be found by the build scripts of the libraries and
-# binaries that depend on them. If every library/binary used CMake as the build
-# systemd we'd just use CMAKE_PREFIX_PATH to allow CMake to find libraries in
-# $DESTDIR but unfortunately meson and autotools don't have an equivalent
-# feature.
-
-apt-get update
-
-apt-get --assume-yes --no-install-recommends install \
-        asciidoc \
-        autoconf \
-        automake \
-        autopoint \
-        check \
-        cargo \
-        cmake \
-        debootstrap \
-        docbook-xsl \
-        e2fsprogs \
-        g++ \
-        gcc \
-        gettext \
-        gobject-introspection \
-        libarchive-dev \
-        libbz2-dev \
-        libcap-dev \
-        libcppunit-dev \
-        libcurl4-openssl-dev \
-        libdb-dev \
-        libgcrypt-dev \
-        libgirepository1.0-dev \
-        libglib2.0-dev \
-        libgpgme-dev \
-        libjson-c-dev \
-        liblua5.3-dev \
-        liblzma-dev \
-        libmagic-dev \
-        libpopt-dev \
-        libsmartcols-dev \
-        libsqlite3-dev \
-        libssl-dev \
-        libtool \
-        libxml2-dev \
-        libyaml-dev \
-        libzstd-dev \
-        m4 \
-        make \
-        meson \
-        ninja-build \
-        ovmf \
-        pandoc \
-        pkgconf \
-        python3 \
-        python3-dev \
-        python3-gpg \
-        python3-sphinx \
-        python3-setuptools \
-        qemu-system-x86-64 \
-        squashfs-tools \
-        swig \
-        systemd-container \
-        xfsprogs \
-        xsltproc \
-        zlib1g-dev \
-        zypper \
-        libclang-dev \
-        nettle-dev \
-        capnproto
-
-cd "$BUILDDIR"
-
-if [ ! -f pacman-$PACMAN_VERSION.tar.xz ]; then
-    wget https://sources.archlinux.org/other/pacman/pacman-$PACMAN_VERSION.tar.xz
-    tar xf pacman-$PACMAN_VERSION.tar.xz
-fi
-
-if [ ! -f pacman-$PACMAN_VERSION-build/build.ninja ]; then
-    meson \
-        --buildtype=release \
-        --prefix /usr \
-        --libdir lib/x86_64-linux-gnu \
-        -Ddoc=disabled \
-        -Dscriptlet-shell=/usr/bin/bash \
-        -Dldconfig=/usr/bin/ldconfig \
-        pacman-$PACMAN_VERSION-build \
-        pacman-$PACMAN_VERSION
-fi
-
-meson install -C pacman-$PACMAN_VERSION-build
-
-cargo install sequoia-sq --version $SEQUOIA_SQ_VERSION --features 'crypto-nettle compression-bzip2 autocrypt' --target-dir .
-install -Dm 755 "$CARGO_HOME"/bin/sq -t /usr/bin
-
-if [ ! -d archlinux-keyring-$ARCHLINUX_KEYRING_COMMIT ]; then
-    git clone https://gitlab.archlinux.org/archlinux/archlinux-keyring.git archlinux-keyring-$ARCHLINUX_KEYRING_COMMIT
-    git -C archlinux-keyring-$ARCHLINUX_KEYRING_COMMIT checkout $ARCHLINUX_KEYRING_COMMIT
-fi
-
-make -C archlinux-keyring-$ARCHLINUX_KEYRING_COMMIT PREFIX=/usr install
-
-if [ ! -f rpm-$RPM_VERSION-release.tar.gz ]; then
-    wget https://github.com/rpm-software-management/rpm/archive/refs/tags/rpm-$RPM_VERSION-release.tar.gz
-    tar xf rpm-$RPM_VERSION-release.tar.gz
-fi
-
-pushd rpm-rpm-$RPM_VERSION-release
-
-if [ ! -f Makefile ]; then
-    ./autogen.sh \
-        --prefix=/usr \
-        --libdir=/usr/lib/x86_64-linux-gnu \
-        --sysconfdir=/etc \
-        --localstatedir=/var \
-        --enable-python \
-        --with-external-db \
-        --with-lua \
-        --with-cap \
-        LUA_CFLAGS="$(pkg-config --cflags lua5.3)" \
-        LUA_LIBS="$(pkg-config --libs lua5.3)"
-fi
-
-make -j 2
-make install
-make DESTDIR="" install
-
-pushd python
-python3 setup.py install --root="$DESTDIR" --optimize=1
-python3 setup.py install --optimize=1
-popd
-
-popd
-
-if [ ! -f $LIBCOMPS_VERSION.tar.gz ]; then
-    wget https://github.com/rpm-software-management/libcomps/archive/$LIBCOMPS_VERSION.tar.gz
-    tar xf $LIBCOMPS_VERSION.tar.gz
-fi
-
-if [ ! -f libcomps-$LIBCOMPS_VERSION-build/build.ninja ]; then
-    cmake \
-        -DCMAKE_BUILD_TYPE=Release \
-        -DCMAKE_INSTALL_PREFIX=/usr \
-        -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \
-        -DENABLE_TESTS=OFF \
-        -DENABLE_DOCS=OFF \
-        -DBUILD_SHARED_LIBS=ON \
-        -Wno-dev \
-        -B libcomps-$LIBCOMPS_VERSION-build \
-        -S libcomps-$LIBCOMPS_VERSION/libcomps
-fi
-
-cmake --build libcomps-$LIBCOMPS_VERSION-build
-cmake --install libcomps-$LIBCOMPS_VERSION-build
-DESTDIR="" cmake --install libcomps-$LIBCOMPS_VERSION-build
-
-if [ ! -f $LIBREPO_VERSION.tar.gz ]; then
-    wget https://github.com/rpm-software-management/librepo/archive/$LIBREPO_VERSION.tar.gz
-    tar xf $LIBREPO_VERSION.tar.gz
-fi
-
-if [ ! -f librepo-$LIBREPO_VERSION-build/build.ninja ]; then
-    cmake \
-        -DCMAKE_BUILD_TYPE=Release \
-        -DCMAKE_INSTALL_PREFIX=/usr \
-        -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \
-        -DENABLE_TESTS=OFF \
-        -DENABLE_DOCS=OFF \
-        -DWITH_ZCHUNK=OFF \
-        -DBUILD_SHARED_LIBS=ON \
-        -Wno-dev \
-        -B librepo-$LIBREPO_VERSION-build \
-        -S librepo-$LIBREPO_VERSION
-fi
-
-cmake --build librepo-$LIBREPO_VERSION-build
-cmake --install librepo-$LIBREPO_VERSION-build
-DESTDIR="" cmake --install librepo-$LIBREPO_VERSION-build
-
-if [ ! -f libmodulemd-$LIBMODULEMD_VERSION.tar.gz ]; then
-    wget https://github.com/fedora-modularity/libmodulemd/archive/libmodulemd-$LIBMODULEMD_VERSION.tar.gz
-    tar xf libmodulemd-$LIBMODULEMD_VERSION.tar.gz
-fi
-
-if [ ! -f libmodulemd-$LIBMODULEMD_VERSION-build/build.ninja ]; then
-    meson \
-        --buildtype=release \
-        --prefix /usr \
-        --libdir lib/x86_64-linux-gnu \
-        --pkg-config-path /usr/lib/x86_64-linux-gnu/pkgconfig \
-        -Ddeveloper_build=false \
-        -Dwith_docs=false \
-        -Dwith_manpages=disabled \
-        -Dskip_introspection=false \
-        -Dgobject_overrides_dir_py3=override \
-        libmodulemd-$LIBMODULEMD_VERSION-build \
-        libmodulemd-libmodulemd-$LIBMODULEMD_VERSION
-fi
-
-meson install -C libmodulemd-$LIBMODULEMD_VERSION-build
-DESTDIR="" meson install -C libmodulemd-$LIBMODULEMD_VERSION-build
-
-if [ ! -f $LIBSOLV_VERSION.tar.gz ]; then
-    wget https://github.com/openSUSE/libsolv/archive/$LIBSOLV_VERSION.tar.gz
-    tar xf $LIBSOLV_VERSION.tar.gz
-    patch -d libsolv-$LIBSOLV_VERSION -p1 <<'EOF'
-diff --git a/ext/repo_rpmdb_librpm.h b/ext/repo_rpmdb_librpm.h
-index 3f9798c2..e1b30a0f 100644
---- a/ext/repo_rpmdb_librpm.h
-+++ b/ext/repo_rpmdb_librpm.h
-@@ -136,7 +136,7 @@ opendbenv(struct rpmdbstate *state)
-       return 0;
-     }
- #ifndef HAVE_RPMDBNEXTITERATORHEADERBLOB
--  if (!strcmp(RPMVERSION, "4.16.0"))
-+  if (!strcmp(RPMVERSION, "4.16.0") || !strcmp(RPMVERSION, "4.17.0"))
-     set_db_backend();
- #endif
-   if (rpmtsOpenDB(ts, O_RDONLY))
-EOF
-fi
-
-if [ ! -f libsolv-$LIBSOLV_VERSION-build/build.ninja ]; then
-    cmake \
-        -DCMAKE_BUILD_TYPE=Release \
-        -DCMAKE_INSTALL_PREFIX=/usr \
-        -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \
-        -DENABLE_RPMDB=ON \
-        -DENABLE_RPMPKG=ON \
-        -DENABLE_PUBKEY=ON \
-        -DENABLE_RPMDB_BYRPMHEADER=ON \
-        -DENABLE_RPMDB_LIBRPM=ON \
-        -DENABLE_RPMPKG_LIBRPM=ON \
-        -DENABLE_RPMMD=ON \
-        -DENABLE_COMPS=ON \
-        -DENABLE_MDKREPO=ON \
-        -DENABLE_COMPLEX_DEPS=ON \
-        -DENABLE_APPDATA=ON \
-        -DENABLE_LZMA_COMPRESSION=ON \
-        -DENABLE_BZIP2_COMPRESSION=ON \
-        -DENABLE_ZSTD_COMPRESSION=ON \
-        -Wno-dev \
-        -B libsolv-$LIBSOLV_VERSION-build \
-        -S libsolv-$LIBSOLV_VERSION
-fi
-
-cmake --build libsolv-$LIBSOLV_VERSION-build
-cmake --install libsolv-$LIBSOLV_VERSION-build
-DESTDIR="" cmake --install libsolv-$LIBSOLV_VERSION-build
-
-if [ ! -f $LIBDNF_VERSION.tar.gz ]; then
-    wget https://github.com/rpm-software-management/libdnf/archive/$LIBDNF_VERSION.tar.gz
-    tar xf $LIBDNF_VERSION.tar.gz
-fi
-
-if [ ! -f libdnf-$LIBDNF_VERSION-build/build.ninja ]; then
-    cp /usr/share/cmake/Modules/FindLibSolv.cmake libdnf-$LIBDNF_VERSION/cmake/modules
-    cmake \
-        -DCMAKE_BUILD_TYPE=Release \
-        -DCMAKE_INSTALL_PREFIX=/usr \
-        -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \
-        -DWITH_GTKDOC=OFF \
-        -DWITH_HTML=OFF \
-        -DWITH_MAN=OFF \
-        -DWITH_ZCHUNK=OFF \
-        -DBUILD_SHARED_LIBS=ON \
-        -DCMAKE_CXX_FLAGS="-pthread" \
-        -DPYTHON_DESIRED=3 \
-        -Wno-dev \
-        -B libdnf-$LIBDNF_VERSION-build \
-        -S libdnf-$LIBDNF_VERSION
-fi
-
-cmake --build libdnf-$LIBDNF_VERSION-build
-cmake --install libdnf-$LIBDNF_VERSION-build
-DESTDIR="" cmake --install libdnf-$LIBDNF_VERSION-build
-
-if [ ! -f $DNF_VERSION.tar.gz ]; then
-    wget https://github.com/rpm-software-management/dnf/archive/$DNF_VERSION.tar.gz
-    tar xf $DNF_VERSION.tar.gz
-fi
-
-if [ ! -f dnf-$DNF_VERSION-build/build.ninja ]; then
-    cmake \
-        -DCMAKE_BUILD_TYPE=Release \
-        -DCMAKE_INSTALL_PREFIX=/usr \
-        -DPYTHON_DESIRED=3 \
-        -DWITH_MAN=0 \
-        -Wno-dev \
-        -B dnf-$DNF_VERSION-build \
-        -S dnf-$DNF_VERSION
-fi
-
-cmake --build dnf-$DNF_VERSION-build
-cmake --install dnf-$DNF_VERSION-build
-
-# All python libraries are installed to a location that's not in the default
-# search path so let's fix that by moving those python files to a location that
-# is in the default search path.
-mkdir -p "$DESTDIR"/usr/lib/python3/dist-packages
-mv "$DESTDIR"/usr/lib/python3.8/site-packages/* "$DESTDIR"/usr/lib/python3/dist-packages
-
-ln -sf /usr/bin/dnf-3 "$DESTDIR"/usr/bin/dnf
diff --git a/action/setup-pacman.sh b/action/setup-pacman.sh
new file mode 100755 (executable)
index 0000000..5e1f3dc
--- /dev/null
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+set -e
+
+PACMAN_VERSION="6.0.1"
+ARCHLINUX_KEYRING_VERSION="20220424"
+
+apt-get --assume-yes --no-install-recommends install \
+        gcc \
+        git \
+        libarchive-dev \
+        libgpgme-dev \
+        libssl-dev \
+        libcurl4-openssl-dev \
+        make \
+        meson \
+        pkgconf \
+        sq
+
+cd "$BUILDDIR"
+
+if [ ! -f pacman-$PACMAN_VERSION.tar.xz ]; then
+    wget https://sources.archlinux.org/other/pacman/pacman-$PACMAN_VERSION.tar.xz
+    tar xf pacman-$PACMAN_VERSION.tar.xz
+fi
+
+if [ ! -f pacman-$PACMAN_VERSION-build/build.ninja ]; then
+    meson \
+        --buildtype=release \
+        --prefix /usr \
+        --libdir lib/x86_64-linux-gnu \
+        -Ddoc=disabled \
+        -Dscriptlet-shell=/usr/bin/bash \
+        -Dldconfig=/usr/bin/ldconfig \
+        pacman-$PACMAN_VERSION-build \
+        pacman-$PACMAN_VERSION
+fi
+
+meson install -C pacman-$PACMAN_VERSION-build
+
+# Ubuntu 22.04 doesn't ship the python-is-python3 package anymore so we manually create the symlink instead.
+if [ ! -f /usr/bin/python ]; then
+    ln -s /usr/bin/python3 /usr/bin/python
+fi
+
+if [ ! -d archlinux-keyring-$ARCHLINUX_KEYRING_VERSION ]; then
+    git clone \
+        --branch $ARCHLINUX_KEYRING_VERSION \
+        --depth 1 \
+        https://gitlab.archlinux.org/archlinux/archlinux-keyring.git \
+        archlinux-keyring-$ARCHLINUX_KEYRING_VERSION
+fi
+
+make -C archlinux-keyring-$ARCHLINUX_KEYRING_VERSION PREFIX=/usr install