├── README.md ├── LICENSE └── .github └── workflows └── build-iso.yml /README.md: -------------------------------------------------------------------------------- 1 | # artix-live 2 | 3 | Building Artix Live ISOs on GitHub Actions. 4 | 5 | ## Solution to overlayfs issue 6 | 7 | The ISO build process uses overlayfs to create the filesystem. 8 | GitHub Actions containers run on an overlayfs filesystem, 9 | and the Linux kernel doesn't support nested overlayfs 10 | (overlayfs on top of overlayfs). 11 | 12 | The solution is to use the GitHub Actions workspace directory 13 | (`$GITHUB_WORKSPACE`) for the artools build output. The workspace 14 | is mounted from the host filesystem (ext4), not overlayfs, so it 15 | can be used as an overlayfs upperdir. 16 | 17 | ## How to build 18 | 19 | The workflow runs automatically on push, or can be manually triggered: 20 | 1. Go to Actions tab in GitHub 21 | 2. Select "Build and Release Artix Live ISO" 22 | 3. Click "Run workflow" 23 | 4. Approve the workflow if required (for first-time runs) 24 | 25 | The ISO will be automatically uploaded to GitHub Releases when the build completes. 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright (c) 2025, probonopd 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 19 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 21 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 22 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 23 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /.github/workflows/build-iso.yml: -------------------------------------------------------------------------------- 1 | # Build Artix Live ISO on GitHub Actions 2 | # 3 | # Fix for overlayfs issue: Use GitHub Actions workspace directory for artools 4 | # build output. The workspace is mounted from the host filesystem (ext4) which 5 | # is not overlayfs. This avoids nested overlayfs (overlayfs on top of overlayfs) 6 | # which is not supported by the Linux kernel. 7 | 8 | 9 | name: Build and Release Artix Live ISO 10 | 11 | on: 12 | push: 13 | workflow_dispatch: 14 | 15 | permissions: 16 | contents: write 17 | 18 | jobs: 19 | build-iso: 20 | runs-on: ubuntu-latest 21 | container: 22 | image: artixlinux/artixlinux:latest 23 | options: --privileged 24 | 25 | steps: 26 | - name: Checkout code 27 | uses: actions/checkout@v4 28 | 29 | - name: Setup pacman & update keys 30 | run: | 31 | pacman-key --init 32 | pacman -Syu --noconfirm 33 | pacman -S --noconfirm artix-keyring 34 | pacman-key --populate artix 35 | 36 | - name: Install build tools 37 | run: | 38 | pacman -S --noconfirm artools iso-profiles git base-devel squashfs-tools dosfstools mtools lvm2 39 | # According to https://packages.artixlinux.org/packages/world/any/iso-profiles/ the files should be installed by the iso-profiles package 40 | # pacman -Qi iso-profiles 41 | # pacman -Ql iso-profiles 42 | 43 | find /usr/share/artools/iso-profiles/ -xtype l || true # Find broken symlinks 44 | 45 | # Clone and set up iso-profiles 46 | git clone https://gitea.artixlinux.org/artix/iso-profiles 47 | #( cd iso-profiles ; git checkout community ) 48 | mv /usr/share/artools/iso-profiles /tmp/ 49 | mv iso-profiles /usr/share/artools/ 50 | #ls /usr/share/artools/iso-profiles/ 51 | 52 | find /usr/share/artools/iso-profiles/ -xtype l # Find broken symlinks 53 | file '/usr/share/artools/iso-profiles/xfce/root-overlay/etc/environment' 54 | file '/usr/share/artools/iso-profiles/xfce/root-overlay/etc/lightdm/lightdm-gtk-greeter.conf' 55 | file '/usr/share/artools/iso-profiles/xfce/root-overlay/etc/local.d' 56 | file '/usr/share/artools/iso-profiles/xfce/root-overlay/etc/pacman.conf' 57 | ls -lhR '/usr/share/artools/iso-profiles/xfce/root-overlay/etc/environment' 58 | ls -lhR '/usr/share/artools/iso-profiles/xfce/root-overlay/etc/lightdm/lightdm-gtk-greeter.conf' 59 | ls -lhR '/usr/share/artools/iso-profiles/xfce/root-overlay/etc/local.d' 60 | ls -lhR '/usr/share/artools/iso-profiles/xfce/root-overlay/etc/pacman.conf' 61 | 62 | - name: Build ISO 63 | run: | 64 | # Use GitHub workspace directory (host filesystem) for artools build 65 | # GitHub Actions mounts the workspace from host, which is not overlayfs 66 | # This avoids the nested overlayfs issue 67 | mkdir -p $GITHUB_WORKSPACE/artools-build 68 | ln -sf $GITHUB_WORKSPACE/artools-build /var/lib/artools 69 | 70 | ## Try to pin Artix Linux 71 | #mkdir -p /usr/share/artools/iso-profiles/common/root-overlay/etc 72 | #cat > /usr/share/artools/iso-profiles/common/root-overlay/etc/pacman.conf << 'EOF' 73 | ## 74 | ## /etc/pacman.conf 75 | ## 76 | ## See the pacman.conf(5) manpage for option and repository directives 77 | # 78 | #[options] 79 | #HoldPkg = pacman glibc 80 | #Architecture = auto 81 | # 82 | ## 83 | ## Pin Arch Linux to a certain date 84 | ## 85 | # 86 | #[core] 87 | #Server = https://archive.artixlinux.org/repos/2025/09/15/$repo/os/$arch 88 | #Server = https://archive.archlinux.org/repos/2025/09/15/$repo/os/$arch 89 | # 90 | #[extra] 91 | #Server = https://archive.artixlinux.org/repos/2025/09/15/$repo/os/$arch 92 | #Server = https://archive.archlinux.org/repos/2025/09/15/$repo/os/$arch 93 | #EOF 94 | # 95 | # Build ISO 96 | buildiso -p xfce 97 | 98 | - name: Upload ISO 99 | env: 100 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 101 | run: | 102 | set -e 103 | pacman -S --noconfirm wget 104 | wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh 105 | ISO_PATH=$(find /github/home/artools-workspace/iso/*/*.iso | head -n 1) 106 | echo $ISO_PATH 107 | bash -ex upload.sh "$ISO_PATH" 108 | --------------------------------------------------------------------------------