version: '3' vars: IMAGE: quine-linux INSTALLER_IMAGE: quine-installer COPR_REPO: philip-peterson/quine-anaconda-webui OUTPUT_DIR: ./output tasks: default: desc: List available tasks cmds: - task --list silent: true build-image: desc: >- Build the quine-linux bootc container image, as root (so bootc and bootc-image-builder -- both of which read root's default containers-storage location -- can see the result). cmds: - sudo podman build -t {{.IMAGE}} -f Containerfile . sources: - Containerfile - overlay/**/* - patches/**/* build-iso: desc: >- Build a bootable install ISO from the local quine-linux image, via bootc-image-builder. Output lands in {{.OUTPUT_DIR}}/bootiso/install.iso. deps: [build-image] cmds: - mkdir -p {{.OUTPUT_DIR}} - >- sudo podman run --rm --privileged --pull=newer --security-opt label=type:unconfined_t -v {{.OUTPUT_DIR}}:/output -v /var/lib/containers/storage:/var/lib/containers/storage quay.io/centos-bootc/bootc-image-builder:latest --type iso --local {{.IMAGE}} generates: - "{{.OUTPUT_DIR}}/bootiso/install.iso" build-installer-image: desc: >- Build the patched-Anaconda installer-environment container (see installer/Containerfile and docs/patched-anaconda-installer.md). This is separate from the quine-linux OS image itself. Defaults to the {{.COPR_REPO}} COPR project; override with `task build-installer-image COPR_REPO=you/other-project`. cmds: - sudo podman build -t {{.INSTALLER_IMAGE}} --build-arg COPR_REPO={{.COPR_REPO}} -f installer/Containerfile installer/ sources: - installer/Containerfile build-installer-iso: desc: >- Build a bootable install ISO using the patched-Anaconda installer image to install the quine-linux bootc image, via bootc-image-builder's `bootc-installer` type. Output lands in {{.OUTPUT_DIR}}/bootc-installer/install.iso. Uses the same COPR_REPO default/override as build-installer-image. deps: [build-image] cmds: - task: build-installer-image vars: { COPR_REPO: "{{.COPR_REPO}}" } - mkdir -p {{.OUTPUT_DIR}} - >- sudo podman run --rm --privileged --pull=newer --security-opt label=type:unconfined_t -v {{.OUTPUT_DIR}}:/output -v /var/lib/containers/storage:/var/lib/containers/storage quay.io/centos-bootc/bootc-image-builder:latest --type bootc-installer --bootc-installer-payload-ref localhost/{{.IMAGE}} localhost/{{.INSTALLER_IMAGE}} generates: - "{{.OUTPUT_DIR}}/bootc-installer/install.iso" status: desc: Show current bootc deployment status (what's booted, what's staged/rollback). cmds: - bootc status test:stage: desc: >- Build the local image and stage it as the next-boot target on THIS machine (bootc switch, no reboot yet). This is the fast way to test a change -- especially the CS8409 mic-fix kernel module -- against the real running system without building an ISO or reinstalling anything. Reboot separately when ready: `task test:boot`, or `sudo systemctl reboot`. deps: [build-image] cmds: - sudo bootc switch --transport containers-storage localhost/{{.IMAGE}} - bootc status --booted - echo "Staged localhost/{{.IMAGE}} for next boot. Run task test:boot when ready to reboot into it." test:boot: desc: Stage the local image (if not already) and reboot into it now. prompt: This will reboot this machine into the locally-built {{.IMAGE}} image. Continue? deps: [test:stage] cmds: - sudo systemctl reboot revert: desc: >- Roll back to the previously-booted deployment and reboot into it -- undoes a `test:boot` switch (or any other deployment change) if something's wrong. Safe even if nothing was ever switched: bootc/ rpm-ostree always keep the prior deployment around for exactly this. prompt: This will reboot this machine back into the previous deployment. Continue? cmds: - sudo bootc rollback - sudo systemctl reboot