feat: startingpoint modules (#33)
* feat: add startingpoint modules some modules authored by @gerblesh original source: https://github.com/ublue-os/startingpoint/pull/135 * docs: better readme for modules dir * docs: yafti deps * docs: sp more information * feat: startingpoint modules in container * docs: sentence structure, check sidebar
This commit is contained in:
parent
288945331e
commit
7c4dd1553e
21 changed files with 408 additions and 0 deletions
33
modules/rpm-ostree/README.md
Normal file
33
modules/rpm-ostree/README.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# [`rpm-ostree`](https://coreos.github.io/rpm-ostree/) Module for Startingpoint
|
||||
|
||||
The `rpm-ostree` module offers pseudo-declarative package and repository management using `rpm-ostree`.
|
||||
|
||||
The module first downloads the repository files from repositories declared under `repos:` into `/etc/yum.repos.d/`. The magic string `%OS_VERSION%` is substituted with the current VERSION_ID (major Fedora version), which can be used, for example, for pulling correct versions of repositories from [Fedora's Copr](https://copr.fedorainfracloud.org/).
|
||||
|
||||
Then the module installs the packages declared under `install:` using `rpm-ostree install`, it removes the packages declared under `remove:` using `rpm-ostree override remove`. If there are packages declared under both `install:` and `remove:` a hybrid command `rpm-ostree remove <packages> --install <packages>` is used, which should allow you to switch required packages for other ones.
|
||||
|
||||
Additionally, the `rpm-ostree` module supports a temporary (waiting for `rpm-ostree` issue [#233](https://github.com/coreos/rpm-ostree/issues/233)) fix for packages that install into `/opt/`. Installation for packages that install into folder names declared under `optfix:` are fixed using some symlinks.
|
||||
|
||||
## Example Configuration:
|
||||
|
||||
```yml
|
||||
type: rpm-ostree
|
||||
repos:
|
||||
- https://copr.fedorainfracloud.org/coprs/atim/starship/repo/fedora-%OS_VERSION%/atim-starship-fedora-%OS_VERSION%.repo
|
||||
install:
|
||||
- python3-pip
|
||||
- libadwaita
|
||||
remove:
|
||||
- firefox
|
||||
- firefox-langpacks
|
||||
```
|
||||
|
||||
|
||||
## Known issues
|
||||
|
||||
When removing certain packages, some problem probably in upstream `rpm-ostree` causes a `depsolve` issue similar to below. [Removed packages are still present in the underlying ostree repository](https://coreos.github.io/rpm-ostree/administrator-handbook/#removing-a-base-package), what `remove` does is "hide" them from the system, it doesn't reclaim disk space.
|
||||
```
|
||||
Resolving dependencies...done
|
||||
error: Could not depsolve transaction; 1 problem detected:
|
||||
Problem: conflicting requests
|
||||
```
|
||||
58
modules/rpm-ostree/rpm-ostree.sh
Normal file
58
modules/rpm-ostree/rpm-ostree.sh
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Tell build process to exit if there are any errors.
|
||||
set -oue pipefail
|
||||
|
||||
# Pull in repos
|
||||
get_yaml_array REPOS '.repos[]' "$1"
|
||||
if [[ ${#REPOS[@]} -gt 0 ]]; then
|
||||
echo "Adding repositories"
|
||||
for REPO in "${REPOS[@]}"; do
|
||||
REPO="${REPO//%OS_VERSION%/${OS_VERSION}}"
|
||||
wget "${REPO//[$'\t\r\n ']}" -P "/etc/yum.repos.d/"
|
||||
done
|
||||
fi
|
||||
|
||||
# Create symlinks to fix packages that create directories in /opt
|
||||
get_yaml_array OPTFIX '.optfix[]' "$1"
|
||||
if [[ ${#OPTFIX[@]} -gt 0 ]]; then
|
||||
echo "Creating symlinks to fix packages that install to /opt"
|
||||
# Create symlink for /opt to /var/opt since it is not created in the image yet
|
||||
mkdir -p "/var/opt"
|
||||
ln -s "/var/opt" "/opt"
|
||||
# Create symlinks for each directory specified in recipe.yml
|
||||
for OPTPKG in "${OPTFIX[@]}"; do
|
||||
OPTPKG="${OPTPKG%\"}"
|
||||
OPTPKG="${OPTPKG#\"}"
|
||||
OPTPKG=$(printf "$OPTPKG")
|
||||
mkdir -p "/usr/lib/opt/${OPTPKG}"
|
||||
ln -s "../../usr/lib/opt/${OPTPKG}" "/var/opt/${OPTPKG}"
|
||||
echo "Created symlinks for ${OPTPKG}"
|
||||
done
|
||||
fi
|
||||
|
||||
get_yaml_array INSTALL '.install[]' "$1"
|
||||
get_yaml_array REMOVE '.remove[]' "$1"
|
||||
|
||||
# The installation is done with some wordsplitting hacks
|
||||
# because of errors when doing array destructuring at the installation step.
|
||||
# This is different from other ublue projects and could be investigated further.
|
||||
INSTALL_STR=$(echo "${INSTALL[*]}" | tr -d '\n')
|
||||
REMOVE_STR=$(echo "${REMOVE[*]}" | tr -d '\n')
|
||||
|
||||
# Install and remove RPM packages
|
||||
if [[ ${#INSTALL[@]} -gt 0 && ${#REMOVE[@]} -gt 0 ]]; then
|
||||
echo "Installing & Removing RPMs"
|
||||
echo "Installing: ${INSTALL_STR[*]}"
|
||||
echo "Removing: ${REMOVE_STR[*]}"
|
||||
# Doing both actions in one command allows for replacing required packages with alternatives
|
||||
rpm-ostree override remove $REMOVE_STR $(printf -- "--install=%s " $INSTALL_STR)
|
||||
elif [[ ${#INSTALL[@]} -gt 0 ]]; then
|
||||
echo "Installing RPMs"
|
||||
echo "Installing: ${INSTALL_STR[*]}"
|
||||
rpm-ostree install $INSTALL_STR
|
||||
elif [[ ${#INSTALL[@]} -gt 0 ]]; then
|
||||
echo "Removing RPMs"
|
||||
echo "Removing: ${REMOVE_STR[*]}"
|
||||
rpm-ostree override remove $REMOVE_STR
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue