Skip to content

Commit

Permalink
Initial Universal Blue Custom Image
Browse files Browse the repository at this point in the history
  • Loading branch information
YardQuit committed Dec 15, 2024
1 parent b09443e commit 30c8a22
Show file tree
Hide file tree
Showing 23 changed files with 367 additions and 117 deletions.
41 changes: 25 additions & 16 deletions Containerfile
Original file line number Diff line number Diff line change
@@ -1,33 +1,34 @@
## 1. BUILD ARGS
# These allow changing the produced image by passing different build args to adjust
# the source from which your image is built.
# Build args can be provided on the commandline when building locally with:
# podman build -f Containerfile --build-arg FEDORA_VERSION=40 -t local-image

# SOURCE_IMAGE arg can be anything from ublue upstream which matches your desired version:
# See list here: https://github.com/orgs/ublue-os/packages?repo_name=main

### 1. BUILD ARGS
## These allow changing the produced image by passing different build args to adjust
## the source from which your image is built.
## Build args can be provided on the commandline when building locally with:
## podman build -f Containerfile --build-arg FEDORA_VERSION=40 -t local-image

## SOURCE_IMAGE arg can be anything from ublue upstream which matches your desired version:
## See list here: https://github.com/orgs/ublue-os/packages?repo_name=main
# - "silverblue"
# - "kinoite"
# - "sericea"
# - "onyx"
# - "lazurite"
# - "vauxite"
# - "base"
#
# "aurora", "bazzite", "bluefin" or "ucore" may also be used but have different suffixes.

## "aurora", "bazzite", "bluefin" or "ucore" may also be used but have different suffixes.
ARG SOURCE_IMAGE="silverblue"

## SOURCE_SUFFIX arg should include a hyphen and the appropriate suffix name
# These examples all work for silverblue/kinoite/sericea/onyx/lazurite/vauxite/base
## These examples all work for silverblue/kinoite/sericea/onyx/lazurite/vauxite/base
# - "-main"
# - "-nvidia"
# - "-asus"
# - "-asus-nvidia"
# - "-surface"
# - "-surface-nvidia"
#
# aurora, bazzite and bluefin each have unique suffixes. Please check the specific image.
# ucore has the following possible suffixes

## aurora, bazzite and bluefin each have unique suffixes. Please check the specific image.
## ucore has the following possible suffixes
# - stable
# - stable-nvidia
# - stable-zfs
Expand All @@ -48,12 +49,20 @@ FROM ghcr.io/ublue-os/${SOURCE_IMAGE}${SOURCE_SUFFIX}:${SOURCE_TAG}
## make modifications desired in your image and install packages by modifying the build.sh script
## the following RUN directive does all the things required to run "build.sh" as recommended.

## copy dirs and files to /tmp directory
COPY packages /tmp/packages
COPY scripts /tmp/scripts
COPY system_files /tmp/system_files
COPY build.sh /tmp/build.sh

RUN mkdir -p /var/lib/alternatives && \
## copy repository files, run build.sh script and commit
RUN rsync -rvK /tmp/system_files/ / && \
mkdir -p /var/lib/alternatives && \
/tmp/build.sh && \
ostree container commit
## NOTES:


### NOTES:
# - /var/lib/alternatives is required to prevent failure with some RPM installs
# - All RUN commands must end with ostree container commit
# see: https://coreos.github.io/rpm-ostree/container/#using-ostree-container-commit
138 changes: 52 additions & 86 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,86 +1,52 @@
# image-template

# Purpose

This repository is meant to be a template for building your own custom Universal Blue image. This template is the recommended way to make customizations to any image published by the Universal Blue Project:
- [Aurora](https://getaurora.dev/)
- [Bazzite](https://bazzite.gg/)
- [Bluefin](https://projectbluefin.io/)
- [uCore](https://projectucore.io/)
- [main](https://github.com/ublue-os/main/)
- [hwe](https://github.com/ublue-os/hwe/)

This template includes a Containerfile and a Github workflow for building the container image. As soon as the workflow is enabled in your repository, it will build the container image and push it to the Github Container Registry.

# Prerequisites

Working knowledge in the following topics:

- Containers
- https://www.youtube.com/watch?v=SnSH8Ht3MIc
- https://www.mankier.com/5/Containerfile
- rpm-ostree
- https://coreos.github.io/rpm-ostree/container/
- Fedora Silverblue (and other Fedora Atomic variants)
- https://docs.fedoraproject.org/en-US/fedora-silverblue/
- Github Workflows
- https://docs.github.com/en/actions/using-workflows

# How to Use

## Template

Select `Use this Template` and create a new repository from it. To enable the workflows, you may need to go the `Actions` tab of the new repository and click to enable workflows.

## Containerfile

This file defines the operations used to customize the selected image. It contains examples of possible modifications, including how to:
- change the upstream from which the custom image is derived
- add additional RPM packages
- add binaries as a layer from other images

## Workflows

### build.yml

This workflow creates your custom OCI image and publishes it to the Github Container Registry (GHCR). By default, the image name will match the Github repository name.

#### Container Signing

Container signing is important for end-user security and is enabled on all Universal Blue images. It is recommended you set this up, and by default the image builds *will fail* if you don't.

This provides users a method of verifying the image.

1. Install the [cosign CLI tool](https://edu.chainguard.dev/open-source/sigstore/cosign/how-to-install-cosign/#installing-cosign-with-the-cosign-binary)

2. Run inside your repo folder:

```bash
cosign generate-key-pair
```


- Do NOT put in a password when it asks you to, just press enter. The signing key will be used in GitHub Actions and will not work if it is encrypted.

> [!WARNING]
> Be careful to *never* accidentally commit `cosign.key` into your git repo.

3. Add the private key to GitHub

- This can also be done manually. Go to your repository settings, under Secrets and Variables -> Actions
![image](https://user-images.githubusercontent.com/1264109/216735595-0ecf1b66-b9ee-439e-87d7-c8cc43c2110a.png)
Add a new secret and name it `SIGNING_SECRET`, then paste the contents of `cosign.key` into the secret and save it. Make sure it's the .key file and not the .pub file. Once done, it should look like this:
![image](https://user-images.githubusercontent.com/1264109/216735690-2d19271f-cee2-45ac-a039-23e6a4c16b34.png)
- (CLI instructions) If you have the `github-cli` installed, run:
```bash
gh secret set SIGNING_SECRET < cosign.key
```
4. Commit the `cosign.pub` file into your git repository
### Examples
- [m2os](https://github.com/m2giles/m2os)
- [bos](https://github.com/bsherman/bos)
- [homer](https://github.com/bketelsen/homer/)
# Universal Blue Custom Image
[universal-blue.org](https://universal-blue.org/)

## Purpose

This repository is meant to be a quick setup and restore for my personal use.

## Install

To rebase from an atomic distribution:
```bash
sudo bootc switch --enforce-container-sigpolicy ghcr.io/yardquit/atomic_custm:latest
```

## Post Installs

### 1. YubiKey
To access the system using sudo, you will need to use your YubiKey as an additional factor of authentication.
YubiKey Registration:
Follow the below instructions to complete the registration process.
```bash
# Insert your YubiKey into a compatible USB port on your computer.
ykpamcfg -2
```
Ensure that YubiKey support is enabled and functional in your system settings.
```bash
sudo echo "Testing sudo with YubiKey"
```
Once your YubiKey is registered and supported by your system, you can use it to access the sudo command.


### 2. fapolicyd
Enabling and Installing fapolicyd for Enhanced Security

To secure your system, follow these steps to install, enable, and start fapolicyd.

Use the following command to install fapolicyd, its SELinux module, and a plugin for rpm-ostree.
```bash
rpm-ostree install fapolicyd fapolicyd-selinux rpm-plugin-fapolicyd
```
Restart your system for the changes take effect:
```bash
reboot
```
Configure the fapolicyd to allow repository packages, else fapolicy will allow everything.
```bash
sudo sed -i 's/integrity = none/integrity = sha256/g' /etc/fapolicyd/fapolicyd.conf
```
Configure the fapolicyd service to start automatically on boot and enable it immediately.
```bash
sudo systemctl enable --now fapolicyd.service
```
40 changes: 25 additions & 15 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,31 @@
set -ouex pipefail

RELEASE="$(rpm -E %fedora)"

### install flatpaks
flatpak remote-add --system --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# flatpak -y install --system $(cat /tmp/packages/flatpaks)

### Install packages

# Packages can be installed from any enabled yum repo on the image.
# RPMfusion repos are available by default in ublue main images
# List of rpmfusion packages can be found here:
# https://mirrors.rpmfusion.org/mirrorlist?path=free/fedora/updates/39/x86_64/repoview/index.html&protocol=https&redirect=1

# this installs a package from fedora repos
rpm-ostree install screen

# this would install a package from rpmfusion
# rpm-ostree install vlc

#### Example for enabling a System Unit File

rpm-ostree install \
$(cat /tmp/packages/desktop) \
$(cat /tmp/packages/develop) \
$(cat /tmp/packages/fonts) \
$(cat /tmp/packages/multimedia) \
$(cat /tmp/packages/personal) \
$(cat /tmp/packages/security) \
$(cat /tmp/packages/temporary) \
$(cat /tmp/packages/virtual)

### Run configuration scripts
sh /tmp/scripts/kvm.sh
sh /tmp/scripts/yubico.sh

### Enabling System Unit File(s)
systemctl enable rpm-ostreed-automatic.timer
systemctl enable tuned.service
systemctl enable docker.service
systemctl enable podman.socket
systemctl enable fstrim.timer

### Disabling System Unit File(s)
systemctl disable cosmic-greeter.service
4 changes: 4 additions & 0 deletions cosign.pub
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExKav2IaMoThdWkKBC8B542o36xkH
N5gNpZA+dOf94UxEPyxsobP8ABov+Rj1YcCYwt4HsB8Kfe+Je689B5zHWA==
-----END PUBLIC KEY-----
Empty file added mkdir
Empty file.
7 changes: 7 additions & 0 deletions packages/desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
cosmic-desktop
cosmic-idle
NetworkManager-tui
NetworkManager-openvpn
gnome-keyring
pinentry-gnome3
udiskie
61 changes: 61 additions & 0 deletions packages/develop
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
helix
neovim
osbuild
osbuild-selinux
koji
fedora-packager
fedora-review
packit
fedrq
rpm-spec-language-server
rpmdevtools
rpmlint
policycoreutils
sepolicy_analysis
libselinux-utils
checkpolicy
selinux-policy
selinux-policy-mls
selinux-policy-doc
selinux-policy-mls
selinux-policy-targeted
setools-console
setools-console-analyses
libvirt-devel
xorriso
livecd-tools
pykickstart
rust
rust-analyzer
cargo
rust-gdb
rust2rpm
rust-srpm-macros
cargo-rpm-macros
cargo2rpm
clang
gdb
gdb-doc
valgrind
golang
golang-x-tools-gopls
go-rpm-macros
go-srpm-macros
go-rpm-templates
go2rpm
python-pip
python3-devel
python3-lsp-black
python3-lsp-server+all
python3-mypy
python3-pytest
python3-pytest-lsp
poetry
cairo-devel
cairo-gobject-devel
gobject-introspection-devel
zig
zig-doc
zig-libs
zig-rpm-macros
zig-srpm-macros
6 changes: 6 additions & 0 deletions packages/flatpaks
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
hu.irl.cameractrls
com.github.wwmm.easyeffects
io.freetubeapp.FreeTube
org.fedoraproject.MediaWriter
org.gnome.Connections
org.gnome.World.PikaBackup
4 changes: 4 additions & 0 deletions packages/fonts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
cascadia-fonts-all
fontawesome-fonts-all
jetbrains-mono-fonts-all
liberation-fonts
18 changes: 18 additions & 0 deletions packages/multimedia
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
mediainfo
mpv
PackageKit-gstreamer-plugin
alsa-ucm
alsa-utils
gstreamer1-plugin-libav
gstreamer1-plugin-openh264
gstreamer1-plugins-bad-free
gstreamer1-plugins-good
gstreamer1-plugins-ugly-free
libva-intel-media-driver
pipewire-alsa
pipewire-gstreamer
pipewire-pulseaudio
pipewire-utils
wireplumber
gstreamer-plugins-espeak
ffmpeg
31 changes: 31 additions & 0 deletions packages/personal
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
starship
lf
fd-find
iucode-tool
stow
stow-doc
texinfo
tldr
yum-utils
ptyxis
inxi
fastfetch
fzf
sshfs
dislocker
pinentry-qt
pinentry-tty
pinentry-emacs
translate-shell
lm_sensors
lshw
nvtop
parallel
xxd
sassc
unrar
p7zip
btop
solaar
solaar-doc
solaar-udev
Loading

0 comments on commit 30c8a22

Please sign in to comment.