diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..211233fb --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,109 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Connect to VM", + "dependsOn": [ + "Run-ISO", + "Open Browser" + ], + "problemMatcher": [] + }, + { + "label": "Open Browser", + "command": "${input:openSimpleBrowser}", + "problemMatcher": [] + }, + { + "label": "Build Container", + "command": "just", + "args": [ + "build", + "${input:outputChoice}" + ], + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "Build ISO", + "command": "just", + "args": [ + "${input:installerChoice}", + "${input:outputChoice}" + ], + "problemMatcher": [] + }, + { + "label": "Run-ISO", + "command": "just", + "args": [ + "run-iso", + "${input:outputChoice}" + ], + "problemMatcher": [], + "isBackground": true + }, + { + "label": "List Images", + "command": "just", + "args": [ + "list-images" + ], + "problemMatcher": [] + }, + { + "label": "Check justfiles", + "command": "just", + "args": [ + "just-check" + ], + "problemMatcher": [] + }, + { + "label": "Run Container", + "command": "just", + "args": [ + "run-container", + "${input:outputChoice}" + ], + "problemMatcher": [] + } + ], + "inputs": [ + { + "id": "openSimpleBrowser", + "type": "command", + "command": "simpleBrowser.show", + "args": [ + "http://localhost:8006" + ] + }, + { + "id": "installerChoice", + "type": "pickString", + "description": "Choose which Installer Builder to use", + "default": "build-iso", + "options": [ + "build-iso", + "build-iso-git" + ] + }, + { + "id": "outputChoice", + "type": "pickString", + "description": "Choose which container to build", + "default": "bazzite", + "options": [ + "bazzite", + "bazzite-deck", + "bazzite-nvidia", + "bazzite gnome", + "bazzite-deck gnome", + "bazzite-nvidia gnome" + ] + } + ] +} diff --git a/Containerfile b/Containerfile index 4eb13458..f550b96b 100644 --- a/Containerfile +++ b/Containerfile @@ -7,6 +7,9 @@ ARG SOURCE_IMAGE="${SOURCE_IMAGE:-$BASE_IMAGE_NAME-$BASE_IMAGE_FLAVOR}" ARG BASE_IMAGE="ghcr.io/ublue-os/${SOURCE_IMAGE}" ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}" +FROM ghcr.io/ublue-os/akmods:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION} as akmods +FROM ghcr.io/ublue-os/akmods-extra:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION} as akmods-extra + FROM ${BASE_IMAGE}:${FEDORA_MAJOR_VERSION} AS bazzite ARG IMAGE_NAME="${IMAGE_NAME:-bazzite}" @@ -112,8 +115,8 @@ RUN mkdir -p /tmp/mediatek-firmware && \ ostree container commit # Add ublue packages, add needed negativo17 repo and then immediately disable due to incompatibility with RPMFusion -COPY --from=ghcr.io/ublue-os/akmods:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION} /rpms /tmp/akmods-rpms -COPY --from=ghcr.io/ublue-os/akmods-extra:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION} /rpms /tmp/akmods-rpms +COPY --from=akmods /rpms /tmp/akmods-rpms +COPY --from=akmods-extra /rpms /tmp/akmods-rpms RUN sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_ublue-os-akmods.repo && \ curl -Lo /etc/yum.repos.d/negativo17-fedora-multimedia.repo https://negativo17.org/repos/fedora-multimedia.repo && \ rpm-ostree install \ @@ -771,6 +774,7 @@ RUN /usr/libexec/containerbuild/image-info && \ systemctl disable batterylimit.service && \ ostree container commit +FROM ghcr.io/ublue-os/akmods-nvidia:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION} as nvidia-akmods FROM bazzite as bazzite-nvidia ARG IMAGE_NAME="${IMAGE_NAME:-bazzite-nvidia}" @@ -798,7 +802,7 @@ RUN rpm-ostree override remove \ ostree container commit # Install NVIDIA driver -COPY --from=ghcr.io/ublue-os/akmods-nvidia:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION} /rpms /tmp/akmods-rpms +COPY --from=nvidia-akmods /rpms /tmp/akmods-rpms RUN sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/rpmfusion-nonfree.repo && \ sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/rpmfusion-nonfree-updates.repo && \ sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/rpmfusion-nonfree-updates-testing.repo && \ diff --git a/Justfile b/Justfile new file mode 100644 index 00000000..08fc699d --- /dev/null +++ b/Justfile @@ -0,0 +1,68 @@ +export project_root := `git rev-parse --show-toplevel` +export git_branch := ` git branch --show-current` +export latest := "40" +export default_image := "kinoite" +export default_target := "bazzite" + +alias build-iso := build-iso-release +alias run := run-container + +_default: + @just --list + +_container_mgr: + @{{ project_root }}/just_scripts/container_mgr.sh + +_tag image: + @echo {{image}}-build + +# Check Just Syntax +just-check: + #!/usr/bin/bash + find "${project_root}" -type f -name "*.just" | while read -r file; do + echo "Checking syntax: $file" + just --unstable --fmt --check -f $file + done + just --unstable --fmt --check -f ${project_root}/Justfile + +# Fix Just Syntax +[private] +just-fix: + #!/usr/bin/bash + find "${project_root}" -type f -name "*.just" | while read -r file; do + echo "Checking syntax: $file" + just --unstable --fmt -f $file + done + just --unstable --fmt -f ${project_root}/Justfile + +# Build image +build target="" image="": + @{{ project_root }}/just_scripts/build-image.sh {{target}} {{image}} + +# Build ISO +build-iso-release target="" image="": + @{{ project_root }}/just_scripts/build-iso.sh {{target}} {{image}} + +# Build ISO using ISO Builder Git Head +build-iso-git target="" image="": + @{{ project_root }}/just_scripts/build-iso-installer-main.sh {{target}} {{image}} + +# Run ISO +run-iso target="" image="": + @{{ project_root }}/just_scripts/run-iso.sh {{target}} {{image}} + +# Run Container +run-container target="" image="": + @{{ project_root }}/just_scripts/run-image.sh {{target}} {{image}} + +# List Images +list-images: + @{{ project_root }}/just_scripts/list-images.sh + +# Clean Images +clean-images: + @{{ project_root }}/just_scripts/cleanup-images.sh + +# Clean ISOs +clean-isos: + @{{ project_root }}/just_scripts/cleanup-dir.sh diff --git a/just_scripts/build-image.sh b/just_scripts/build-image.sh new file mode 100755 index 00000000..1974a47a --- /dev/null +++ b/just_scripts/build-image.sh @@ -0,0 +1,45 @@ +#!/usr/bin/bash +set -eo pipefail +if [[ -z ${project_root} ]]; then + project_root=$(git rev-parse --show-toplevel) +fi +if [[ -z ${git_branch} ]]; then + git_branch=$(git branch --show-current) +fi + +# Get Inputs +target=$1 +image=$2 + +# Set image/target/version based on inputs +# shellcheck disable=SC2154,SC1091 +. "${project_root}/just_scripts/get-defaults.sh" + +# Get info +container_mgr=$(just _container_mgr) +tag=$(just _tag "${image}") + +if [[ ${image} =~ "gnome" ]]; then + base_image="silverblue" +else + base_image="kinoite" +fi + +if [[ ${target} =~ "nvidia" ]]; then + flavor="nvidia" +else + flavor="main" +fi + +# Build Image +$container_mgr build -f Containerfile \ + --build-arg="IMAGE_NAME=${tag}" \ + --build-arg="BASE_IMAGE_NAME=${base_image}" \ + --build-arg="BASE_IMAGE_FLAVOR=${flavor}" \ + --build-arg="IMAGE_FLAVOR=${flavor}" \ + --build-arg="KERNEL_FLAVOR=fsync" \ + --build-arg="SOURCE_IMAGE=${base_image}-${flavor}" \ + --build-arg="FEDORA_MAJOR_VERSION=${latest}" \ + --target="${target}" \ + --tag localhost/"${tag}:${latest}-${git_branch}" \ + "${project_root}" diff --git a/just_scripts/build-iso-installer-main.sh b/just_scripts/build-iso-installer-main.sh new file mode 100644 index 00000000..24197367 --- /dev/null +++ b/just_scripts/build-iso-installer-main.sh @@ -0,0 +1,143 @@ +#!/usr/bin/bash +#shellcheck disable=SC2154 + +if [[ -z ${project_root} ]]; then + project_root=$(git rev-parse --show-toplevel) +fi +if [[ -z ${git_branch} ]]; then + git_branch=$(git branch --show-current) +fi + +# shellcheck disable=SC1091 +. "${project_root}/just_scripts/sudoif.sh" + +# Check if inside rootless container +if [[ -f /run/.containerenv ]]; then + #shellcheck disable=SC1091 + source /run/.containerenv + #shellcheck disable=SC2154 + if [[ "${rootless}" -eq "1" ]]; then + echo "Cannot build ISO inside rootless podman container... Exiting..." + exit 1 + fi +fi +container_mgr=$(just _container_mgr) +# If using rootless container manager, exit. Might not be best check +if "${container_mgr}" info | grep Root | grep -q /home; then + echo "Cannot build ISO with rootless container..." + exit 1 +fi + +# Get Inputs +target=$1 +image=$2 +orig_image=$2 + +# Set image/target/version based on inputs +# shellcheck disable=SC2154,SC1091 +. "${project_root}/just_scripts/get-defaults.sh" + +# Set Container tag name +tag=$(just _tag "${image}") + +# Remove old ISO if present +sudoif rm -f "${project_root}/just_scripts/output/${tag}-${git_branch}.iso" +sudoif rm -f "${project_root}/just_scripts/output/${tag}-${git_branch}.iso-CHECKSUM" + +# Set Base Image +if [[ ${image} =~ "gnome" ]]; then + base_image="silverblue" +else + base_image="kinoite" +fi + +# Set variant and flatpak dir +if [[ "${base_image}" =~ "silverblue" ]]; then + flatpak_dir_shortname="installer/gnome_flatpaks" +elif [[ "${base_image}" =~ "kinoite" ]]; then + flatpak_dir_shortname="installer/kde_flatpaks" +else + exit 1 +fi +variant="Kinoite" +if [[ ${target} =~ "deck" ]]; then + extra_boot_params="inst.resolution=1280x800" +fi + +# Make sure image actually exists, build if it doesn't +ID=$(${container_mgr} images --filter reference=localhost/"${tag}:${latest}-${git_branch}" --format "{{.ID}}") +if [[ -z ${ID} ]]; then + just build "${target}" "${orig_image}" +fi + +# Make temp space +TEMP_FLATPAK_INSTALL_DIR=$(mktemp -d -p "${project_root}" flatpak.XXX) +# Get list of refs from directory +FLATPAK_REFS_DIR=${project_root}/${flatpak_dir_shortname} +FLATPAK_REFS_DIR_LIST=$(tr '\n' ' ' < "${FLATPAK_REFS_DIR}/flatpaks") + +# Generate install script +cat << EOF > "${TEMP_FLATPAK_INSTALL_DIR}/script.sh" +cat /temp_flatpak_install_dir/script.sh +mkdir -p /flatpak/flatpak /flatpak/triggers +mkdir /var/tmp || true +chmod -R 1777 /var/tmp +flatpak config --system --set languages "*" +flatpak remote-add --system flathub https://flathub.org/repo/flathub.flatpakrepo +flatpak install --system -y ${FLATPAK_REFS_DIR_LIST} +ostree refs --repo=\${FLATPAK_SYSTEM_DIR}/repo | grep '^deploy/' | grep -v 'org\.freedesktop\.Platform\.openh264' | sed 's/^deploy\///g' > /output/flatpaks_with_deps +EOF + +workspace=${project_root} +if [[ -f /.dockerenv || -f /run/.containerenv ]]; then + FLATPAK_REFS_DIR=${LOCAL_WORKSPACE_FOLDER}/${flatpak_dir_shortname} + TEMP_FLATPAK_INSTALL_DIR="${LOCAL_WORKSPACE_FOLDER}/$(echo "${TEMP_FLATPAK_INSTALL_DIR}" | rev | cut -d / -f 1 | rev)" + workspace=${LOCAL_WORKSPACE_FOLDER} +fi + +# Generate Flatpak Dependency List +if [[ ! -f ${project_root}/${flatpak_dir_shortname}/flatpaks_with_deps ]]; then + "${container_mgr}" run --rm --privileged \ + --entrypoint bash \ + -e FLATPAK_SYSTEM_DIR=/flatpak/flatpak \ + -e FLATPAK_TRIGGERSDIR=/flatpak/triggers \ + --volume "${FLATPAK_REFS_DIR}":/output \ + --volume "${TEMP_FLATPAK_INSTALL_DIR}":/temp_flatpak_install_dir \ + "ghcr.io/ublue-os/${base_image}-main:${version}" /temp_flatpak_install_dir/script.sh +fi + +# Remove Temp Directory +if [[ -f /.dockerenv ]]; then + TEMP_FLATPAK_INSTALL_DIR=${project_root}/$(echo "${TEMP_FLATPAK_INSTALL_DIR}" | rev | cut -d / -f 1 | rev) +fi +rm -rf "${TEMP_FLATPAK_INSTALL_DIR}" + +if [[ ${container_mgr} =~ "podman" ]]; then + api_socket=/run/podman/podman.sock +elif [[ ${container_mgr} =~ "docker" ]]; then + api_socket=/var/run/docker.sock +fi + +# Make ISO +${container_mgr} run --rm --privileged \ + --volume "${api_socket}":/var/run/docker.sock \ + --volume "${workspace}"/just_scripts/build-iso-makefile-patch:/build-container-installer/container/Makefile \ + --volume "${workspace}/${flatpak_dir_shortname}":"/build-container-installer/${flatpak_dir_shortname}" \ + --volume "${workspace}"/just_scripts/output:/build-container-installer/build \ + --volume "${workspace}"/installer/lorax_templates:/additional_lorax_templates \ + ghcr.io/jasonn3/build-container-installer:main \ + ADDITIONAL_TEMPLATES="/additional_lorax_templates/remove_root_password_prompt.tmpl" \ + ARCH="x86_64" \ + ENABLE_CACHE_DNF="false" \ + ENABLE_CACHE_SKOPEO="false" \ + ENABLE_FLATPAK_DEPENDENCIES="false" \ + ENROLLMENT_PASSWORD="ublue-os" \ + EXTRA_BOOT_PARAMS="${extra_boot_params}" \ + FLATPAK_REMOTE_REFS_DIR="${flatpak_dir_shortname}" \ + IMAGE_NAME="${tag}" \ + IMAGE_REPO="localhost" \ + IMAGE_TAG="${latest}-${git_branch}" \ + ISO_NAME="build/${tag}-${git_branch}.iso" \ + SECURE_BOOT_KEY_URL='https://github.com/ublue-os/akmods/raw/main/certs/public_key.der' \ + VARIANT="${variant}" \ + VERSION="${latest}" diff --git a/just_scripts/build-iso-makefile-patch b/just_scripts/build-iso-makefile-patch new file mode 100644 index 00000000..bb8d7d9d --- /dev/null +++ b/just_scripts/build-iso-makefile-patch @@ -0,0 +1,11 @@ +$(IMAGE_NAME)-$(IMAGE_TAG): + skopeo copy docker-daemon:$(IMAGE_REPO)/$(IMAGE_NAME):$(IMAGE_TAG) oci:$(IMAGE_NAME)-$(IMAGE_TAG) + +install-deps: + $(install_pkg) skopeo + +FILES=$(filter-out Makefile,$(wildcard *)) +clean: +ifneq ($(FILES),) + rm -Rf $(FILES) +endif diff --git a/just_scripts/build-iso.sh b/just_scripts/build-iso.sh new file mode 100644 index 00000000..0a36f709 --- /dev/null +++ b/just_scripts/build-iso.sh @@ -0,0 +1,143 @@ +#!/usr/bin/bash +#shellcheck disable=SC2154 + +if [[ -z ${project_root} ]]; then + project_root=$(git rev-parse --show-toplevel) +fi +if [[ -z ${git_branch} ]]; then + git_branch=$(git branch --show-current) +fi + +# shellcheck disable=SC1091 +. "${project_root}/just_scripts/sudoif.sh" + +# Check if inside rootless container +if [[ -f /run/.containerenv ]]; then + #shellcheck disable=SC1091 + source /run/.containerenv + #shellcheck disable=SC2154 + if [[ "${rootless}" -eq "1" ]]; then + echo "Cannot build ISO inside rootless podman container... Exiting..." + exit 1 + fi +fi +container_mgr=$(just _container_mgr) +# If using rootless container manager, exit. Might not be best check +if "${container_mgr}" info | grep Root | grep -q /home; then + echo "Cannot build ISO with rootless container..." + exit 1 +fi + +# Get Inputs +target=$1 +image=$2 +orig_image=$2 + +# Set image/target/version based on inputs +# shellcheck disable=SC2154,SC1091 +. "${project_root}/just_scripts/get-defaults.sh" + +# Set Container tag name +tag=$(just _tag "${image}") + +# Remove old ISO if present +sudoif rm -f "${project_root}/just_scripts/output/${tag}-${git_branch}.iso" +sudoif rm -f "${project_root}/just_scripts/output/${tag}-${git_branch}.iso-CHECKSUM" + +# Set Base Image +if [[ ${image} =~ "gnome" ]]; then + base_image="silverblue" +else + base_image="kinoite" +fi + +# Set variant and flatpak dir +if [[ "${base_image}" =~ "silverblue" ]]; then + flatpak_dir_shortname="installer/gnome_flatpaks" +elif [[ "${base_image}" =~ "kinoite" ]]; then + flatpak_dir_shortname="installer/kde_flatpaks" +else + exit 1 +fi +variant="Kinoite" +if [[ ${target} =~ "deck" ]]; then + extra_boot_params="inst.resolution=1280x800" +fi + +# Make sure image actually exists, build if it doesn't +ID=$(${container_mgr} images --filter reference=localhost/"${tag}:${latest}-${git_branch}" --format "{{.ID}}") +if [[ -z ${ID} ]]; then + just build "${target}" "${orig_image}" +fi + +# Make temp space +TEMP_FLATPAK_INSTALL_DIR=$(mktemp -d -p "${project_root}" flatpak.XXX) +# Get list of refs from directory +FLATPAK_REFS_DIR=${project_root}/${flatpak_dir_shortname} +FLATPAK_REFS_DIR_LIST=$(tr '\n' ' ' < "${FLATPAK_REFS_DIR}/flatpaks") + +# Generate install script +cat << EOF > "${TEMP_FLATPAK_INSTALL_DIR}/script.sh" +cat /temp_flatpak_install_dir/script.sh +mkdir -p /flatpak/flatpak /flatpak/triggers +mkdir /var/tmp || true +chmod -R 1777 /var/tmp +flatpak config --system --set languages "*" +flatpak remote-add --system flathub https://flathub.org/repo/flathub.flatpakrepo +flatpak install --system -y ${FLATPAK_REFS_DIR_LIST} +ostree refs --repo=\${FLATPAK_SYSTEM_DIR}/repo | grep '^deploy/' | grep -v 'org\.freedesktop\.Platform\.openh264' | sed 's/^deploy\///g' > /output/flatpaks_with_deps +EOF + +workspace=${project_root} +if [[ -f /.dockerenv || -f /run/.containerenv ]]; then + FLATPAK_REFS_DIR=${LOCAL_WORKSPACE_FOLDER}/${flatpak_dir_shortname} + TEMP_FLATPAK_INSTALL_DIR="${LOCAL_WORKSPACE_FOLDER}/$(echo "${TEMP_FLATPAK_INSTALL_DIR}" | rev | cut -d / -f 1 | rev)" + workspace=${LOCAL_WORKSPACE_FOLDER} +fi + +# Generate Flatpak Dependency List +if [[ ! -f ${project_root}/${flatpak_dir_shortname}/flatpaks_with_deps ]]; then + "${container_mgr}" run --rm --privileged \ + --entrypoint bash \ + -e FLATPAK_SYSTEM_DIR=/flatpak/flatpak \ + -e FLATPAK_TRIGGERSDIR=/flatpak/triggers \ + --volume "${FLATPAK_REFS_DIR}":/output \ + --volume "${TEMP_FLATPAK_INSTALL_DIR}":/temp_flatpak_install_dir \ + "ghcr.io/ublue-os/${base_image}-main:${version}" /temp_flatpak_install_dir/script.sh +fi + +# Remove Temp Directory +if [[ -f /.dockerenv ]]; then + TEMP_FLATPAK_INSTALL_DIR=${project_root}/$(echo "${TEMP_FLATPAK_INSTALL_DIR}" | rev | cut -d / -f 1 | rev) +fi +rm -rf "${TEMP_FLATPAK_INSTALL_DIR}" + +if [[ ${container_mgr} =~ "podman" ]]; then + api_socket=/run/podman/podman.sock +elif [[ ${container_mgr} =~ "docker" ]]; then + api_socket=/var/run/docker.sock +fi + +# Make ISO +${container_mgr} run --rm --privileged \ + --volume "${api_socket}":/var/run/docker.sock \ + --volume "${workspace}"/just_scripts/build-iso-makefile-patch:/build-container-installer/container/Makefile \ + --volume "${workspace}/${flatpak_dir_shortname}":"/build-container-installer/${flatpak_dir_shortname}" \ + --volume "${workspace}"/just_scripts/output:/build-container-installer/build \ + --volume "${workspace}"/installer/lorax_templates:/additional_lorax_templates \ + ghcr.io/jasonn3/build-container-installer:latest \ + ADDITIONAL_TEMPLATES="/additional_lorax_templates/remove_root_password_prompt.tmpl" \ + ARCH="x86_64" \ + ENABLE_CACHE_DNF="false" \ + ENABLE_CACHE_SKOPEO="false" \ + ENABLE_FLATPAK_DEPENDENCIES="false" \ + ENROLLMENT_PASSWORD="ublue-os" \ + EXTRA_BOOT_PARAMS="${extra_boot_params}" \ + FLATPAK_REMOTE_REFS_DIR="${flatpak_dir_shortname}" \ + IMAGE_NAME="${tag}" \ + IMAGE_REPO="localhost" \ + IMAGE_TAG="${latest}-${git_branch}" \ + ISO_NAME="build/${tag}-${git_branch}.iso" \ + SECURE_BOOT_KEY_URL='https://github.com/ublue-os/akmods/raw/main/certs/public_key.der' \ + VARIANT="${variant}" \ + VERSION="${latest}" diff --git a/just_scripts/cleanup-dir.sh b/just_scripts/cleanup-dir.sh new file mode 100755 index 00000000..03140923 --- /dev/null +++ b/just_scripts/cleanup-dir.sh @@ -0,0 +1,11 @@ +#!/usr/bin/bash +if [[ -z ${project_root} ]]; then + project_root=$(git rev-parse --show-toplevel) +fi +# shellcheck disable=SC1091 +. "${project_root}/just_scripts/sudoif.sh" + +set -euox pipefail + +#shellcheck disable=SC2154 +sudoif rm -f "${project_root}"/just_scripts/output/* #ISOs diff --git a/just_scripts/cleanup-images.sh b/just_scripts/cleanup-images.sh new file mode 100755 index 00000000..bd84a7cb --- /dev/null +++ b/just_scripts/cleanup-images.sh @@ -0,0 +1,15 @@ +#!/usr/bin/bash +set -euox pipefail +container_mgr=( + docker + podman + podman-remote +) +for i in "${container_mgr[@]}"; do + if [[ $(command -v "$i") ]]; then + echo "Container Manager: ${i}" + ID=$(${i} images --filter "reference=localhost/bazzite*-build") + xargs -I {} "${i}" image rm {} <<< "$ID" + echo "" + fi +done diff --git a/just_scripts/container_mgr.sh b/just_scripts/container_mgr.sh new file mode 100755 index 00000000..491f017b --- /dev/null +++ b/just_scripts/container_mgr.sh @@ -0,0 +1,21 @@ +#!/usr/bin/bash +valid_manager=( + docker + podman + podman-remote +) +if [[ -n ${CONTAINER_MGR} ]]; then + if [[ "${valid_manager[*]}" =~ ${CONTAINER_MGR} ]]; then + echo "${CONTAINER_MGR}" + else + exit 1 + fi +elif [[ $(command -v docker) ]]; then + echo docker +elif [[ $(command -v podman) ]]; then + echo podman +elif [[ $(command -v podman-remote) ]];then + echo podman-remote +else + exit 1 +fi \ No newline at end of file diff --git a/just_scripts/get-defaults.sh b/just_scripts/get-defaults.sh new file mode 100755 index 00000000..777c9a1c --- /dev/null +++ b/just_scripts/get-defaults.sh @@ -0,0 +1,46 @@ +#!/usr/bin/bash +if [[ -z "${image}" ]]; then + image=${default_image} +fi + +if [[ -z "${target}" ]]; then + target=${default_target} +elif [[ ${target} == "deck" ]]; then + target="bazzite-deck" +elif [[ ${target} == "nvidia" ]]; then + target="bazzite-nvidia" +fi + +valid_images=( + silverblue + kinoite + gnome + kde +) +image=${image,,} +if [[ ! ${valid_images[*]} =~ ${image} ]]; then + echo "Invalid image..." + exit 1 +fi + +target=${target,,} +valid_targets=( + bazzite + bazzite-deck + bazzite-nvidia +) +if [[ ! ${valid_targets[*]} =~ ${target} ]]; then + echo "Invalid target..." + exit 1 +fi + +desktop="" +if [[ ${image} == "gnome" || ${image} == "silverblue" ]]; then + desktop="-gnome" +fi +image="${target}${desktop}" +if [[ ${image} =~ "nvidia" ]]; then + image="bazzite${desktop}-nvidia" +fi + + diff --git a/just_scripts/list-images.sh b/just_scripts/list-images.sh new file mode 100755 index 00000000..a43d6b02 --- /dev/null +++ b/just_scripts/list-images.sh @@ -0,0 +1,13 @@ +#!/usr/bin/bash +set -euo pipefail +container_mgr=( + docker + podman + podman-remote +) +for i in "${container_mgr[@]}"; do + if [[ $(command -v "$i") ]]; then + echo "Container Manager: ${i}" + ${i} images --filter "reference=localhost/bazzite*-build" + fi +done diff --git a/just_scripts/run-image.sh b/just_scripts/run-image.sh new file mode 100644 index 00000000..221d58e7 --- /dev/null +++ b/just_scripts/run-image.sh @@ -0,0 +1,30 @@ +#!/usr/bin/bash +if [[ -z ${project_root} ]]; then + project_root=$(git rev-parse --show-toplevel) +fi +if [[ -z ${git_branch} ]]; then + git_branch=$(git branch --show-current) +fi +set -eo pipefail + +# Get Inputs +target=$1 +image=$2 +orig_image=$2 + +# Get image/target/version based on inputs +# shellcheck disable=SC2154,SC1091 +. "${project_root}/just_scripts/get-defaults.sh" + +# Get variables +container_mgr=$(just _container_mgr) +tag=$(just _tag "${image}") + +# Check if requested image exist, if it doesn't build it +ID=$(${container_mgr} images --filter reference=localhost/"${tag}":"${latest}-${git_branch}" --format "{{.ID}}") +if [[ -z ${ID} ]]; then + just build "${target}" "${orig_image}" +fi + +# Run image +"${container_mgr}" run -it --rm localhost/"${tag}:${latest}-${git_branch}" /usr/bin/bash diff --git a/just_scripts/run-iso.sh b/just_scripts/run-iso.sh new file mode 100644 index 00000000..6ab70fb1 --- /dev/null +++ b/just_scripts/run-iso.sh @@ -0,0 +1,41 @@ +#!/usr/bin/bash +if [[ -z ${project_root} ]]; then + project_root=$(git rev-parse --show-toplevel) +fi +if [[ -z ${git_branch} ]]; then + git_branch=$(git branch --show-current) +fi +set -eo pipefail + +# Get Inputs +target=$1 +image=$2 +orig_image=$2 + +# Get image/target/version based on inputs +# shellcheck disable=SC2154,SC1091 +. "${project_root}/just_scripts/get-defaults.sh" + +# Get variables +container_mgr=$(just _container_mgr) +tag=$(just _tag "${image}") + +#check if ISO exists. Create if it doesn't +if [[ ! -f "${project_root}/just_scripts/output/${tag}-${git_branch}.iso" ]]; then + just build-iso "$target" "$orig_image" +fi + +workspace=${project_root} +if [[ -f /.dockerenv ]]; then + workspace=${LOCAL_WORKSPACE_FOLDER} +fi + +${container_mgr} run --rm --cap-add NET_ADMIN \ + --publish 127.0.0.1:8006:8006 \ + --env "CPU_CORES=2" \ + --env "RAM_SIZE=4G" \ + --env "DISK_SIZE=64G" \ + --env "BOOT_MODE=uefi" \ + --device=/dev/kvm \ + --volume "${workspace}/just_scripts/output/${tag}-${git_branch}.iso":/boot.iso \ + docker.io/qemux/qemu-docker diff --git a/just_scripts/sudoif.sh b/just_scripts/sudoif.sh new file mode 100755 index 00000000..aeb7c722 --- /dev/null +++ b/just_scripts/sudoif.sh @@ -0,0 +1,14 @@ +#!/usr/bin/bash +function sudoif(){ + if [[ "${TERM_PROGRAM}" == "vscode" && \ + ! -f /run/.containerenv && \ + ! -f /.dockerenv ]]; then + [[ $(command -v systemd-run) ]] && \ + /usr/bin/systemd-run --uid=0 --gid=0 -d -E TERM="$TERM" -t -q -P -G "$@" \ + || exit 1 + else + [[ $(command -v sudo) ]] && \ + /usr/bin/sudo "$@" \ + || exit 1 + fi +}