Skip to content

Commit

Permalink
Import Fedora images from github.com/containers/toolbox
Browse files Browse the repository at this point in the history
  • Loading branch information
travier committed Oct 19, 2023
1 parent 191fbbc commit bf8bfb5
Show file tree
Hide file tree
Showing 17 changed files with 642 additions and 0 deletions.
43 changes: 43 additions & 0 deletions .github/workflows/fedora-pr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: "fedora: Build toolbx images for PRs"

permissions: read-all

on:
pull_request:
branches:
- main
paths:
- fedora/**
- .github/workflows/fedora-pr.yaml

env:
distro: 'fedora'
distro_pretty: 'fedora'
latest_release: 'f38'

jobs:
build-images:
strategy:
matrix:
release: ['f37', 'f38', 'f39']

runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Set up QEMU
uses: docker/setup-qemu-action@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Build ${{ env.distro_pretty }} ${{ matrix.release }} toolbox image
uses: docker/build-push-action@v3
with:
context: ${{ env.distro }}/${{ matrix.release }}
file: ${{ env.distro }}/${{ matrix.release }}/Containerfile
platforms: linux/amd64,linux/arm64
push: false
no-cache: true
tags: quay.io/toolbx-images/${{ env.distro }}-toolbox:${{ matrix.release }}
65 changes: 65 additions & 0 deletions .github/workflows/fedora.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: "fedora: Build and push toolbx images"

permissions: read-all

on:
push:
branches:
- main
paths:
- fedora/**
- .github/workflows/fedora.yaml
schedule:
- cron: '0 0 * * MON'

# Prevent multiple workflow runs from racing
concurrency: ${{ github.workflow }}

env:
distro: 'fedora'
distro_pretty: 'fedora'
latest_release: 'f38'

jobs:
build-and-push-images:
strategy:
matrix:
release: ['f37', 'f38', 'f39']

runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Set up QEMU
uses: docker/setup-qemu-action@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Login to Quay.io
uses: docker/login-action@v2
with:
registry: quay.io
username: 'toolbx-images+github'
password: ${{ secrets.QUAY_ROBOT_TOKEN }}

- name: Build and push ${{ env.distro_pretty }} ${{ matrix.release }} toolbox image
uses: docker/build-push-action@v3
with:
context: ${{ env.distro }}/${{ matrix.release }}
file: ${{ env.distro }}/${{ matrix.release }}/Containerfile
platforms: linux/amd64,linux/arm64
push: true
no-cache: true
tags: quay.io/toolbx-images/${{ env.distro }}-toolbox:${{ matrix.release }}

- name: Push latest tag
if: env.latest_release == matrix.release
uses: docker/build-push-action@v3
with:
context: ${{ env.distro }}/${{ matrix.release }}
file: ${{ env.distro }}/${{ matrix.release }}/Containerfile
platforms: linux/amd64,linux/arm64
push: true
tags: quay.io/toolbx-images/${{ env.distro }}-toolbox:latest
44 changes: 44 additions & 0 deletions fedora/f37/Containerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
FROM registry.fedoraproject.org/fedora:37

ARG NAME=fedora-toolbox
ARG VERSION=37
LABEL com.github.containers.toolbox="true" \
com.redhat.component="$NAME" \
name="$NAME" \
version="$VERSION" \
usage="This image is meant to be used with the toolbox command" \
summary="Base image for creating Fedora toolbox containers" \
maintainer="Debarshi Ray <[email protected]>"

COPY README.md /

RUN rm /etc/rpm/macros.image-language-conf
RUN sed -i '/tsflags=nodocs/d' /etc/dnf/dnf.conf

RUN dnf -y upgrade
RUN dnf -y swap coreutils-single coreutils-full
RUN dnf -y swap glibc-minimal-langpack glibc-all-langpacks

COPY missing-docs /
RUN dnf -y reinstall $(<missing-docs)
RUN rm /missing-docs

COPY extra-packages /
RUN dnf -y install $(<extra-packages)
RUN rm /extra-packages

COPY ensure-files /
RUN ret_val=0; \
while read file; do \
if ! compgen -G "$file" >/dev/null; then \
echo "$file: No such file or directory" >&2; \
ret_val=1; \
break; \
fi; \
done <ensure-files; \
if [ "$ret_val" -ne 0 ]; then \
false; \
fi
RUN rm /ensure-files

RUN dnf clean all
44 changes: 44 additions & 0 deletions fedora/f37/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
[Toolbox](https://containertoolbx.org/) is a tool for Linux, which allows the
use of interactive command line environments for development and
troubleshooting the host operating system, without having to install software
on the host. It is built on top of [Podman](https://podman.io/) and other
standard container technologies from [OCI](https://opencontainers.org/).

Toolbox environments have seamless access to the user's home directory,
the Wayland and X11 sockets, networking (including Avahi), removable devices
(like USB sticks), systemd journal, SSH agent, D-Bus, ulimits, /dev and the
udev database, etc..

This is particularly useful on
[OSTree](https://ostree.readthedocs.io/en/latest/) based operating systems like
[Fedora CoreOS](https://coreos.fedoraproject.org/) and
[Silverblue](https://silverblue.fedoraproject.org/). The intention of these
systems is to discourage installation of software on the host, and instead
install software as (or in) containers — they mostly don't even have package
managers like DNF or YUM. This makes it difficult to set up a development
environment or troubleshoot the operating system in the usual way.

Toolbox solves this problem by providing a fully mutable container within
which one can install their favourite development and troubleshooting tools,
editors and SDKs. For example, it's possible to do `yum install ansible`
without affecting the base operating system.

However, this tool doesn't *require* using an OSTree based system. It works
equally well on Fedora Workstation and Server, and that's a useful way to
incrementally adopt containerization.

The toolbox environment is based on an [OCI](https://www.opencontainers.org/)
image. On Fedora this is the `fedora-toolbox` image. This image is used to
create a toolbox container that offers the interactive command line
environment.

Note that Toolbox makes no promise about security beyond what's already
available in the usual command line environment on the host that everybody is
familiar with.


## Installation & Use

See our guides on
[installing & getting started](https://containertoolbx.org/install/) with
Toolbox and [Linux distro support](https://containertoolbx.org/distros/).
25 changes: 25 additions & 0 deletions fedora/f37/ensure-files
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/usr/share/man/man1/bash.1*
/usr/share/man/man1/cd.1*
/usr/share/man/man1/export.1*

/usr/share/man/man1/cat.1*
/usr/share/man/man1/cp.1*
/usr/share/man/man1/ls.1*

/usr/share/man/man1/gpg2.1*
/usr/share/man/man7/gnupg2.7*

/usr/share/man/fr/man8/rpm.8*
/usr/share/man/ja/man8/rpm.8*
/usr/share/man/man8/rpm.8*

/usr/share/man/man1/cal.1.*
/usr/share/man/man1/getopt.1*
/usr/share/man/man1/hexdump.1*

/usr/share/man/man1/kill.1*
/usr/share/man/man8/mount.8*

/usr/share/man/fr/man1/xz.1*
/usr/share/man/ko/man1/xz.1*
/usr/share/man/man1/xz.1*
48 changes: 48 additions & 0 deletions fedora/f37/extra-packages
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
bash-completion
bc
bzip2
diffutils
dnf-plugins-core
findutils
flatpak-spawn
fpaste
git
gnupg2
gnupg2-smime
gvfs-client
hostname
iproute
iputils
keyutils
krb5-libs
less
lsof
man-db
man-pages
mesa-dri-drivers
mesa-vulkan-drivers
mtr
nano-default-editor
nss-mdns
openssh-clients
passwd
pigz
procps-ng
rsync
shadow-utils
sudo
tcpdump
time
traceroute
tree
unzip
util-linux
vte-profile
vulkan-loader
wget
which
whois
words
xorg-x11-xauth
xz
zip
20 changes: 20 additions & 0 deletions fedora/f37/missing-docs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
acl
bash
coreutils-common
curl
findutils
gawk
gnupg2
grep
gzip
libcap
openssl
p11-kit
pam
python3
rpm
sed
sudo
systemd
tar
util-linux-core
44 changes: 44 additions & 0 deletions fedora/f38/Containerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
FROM registry.fedoraproject.org/fedora:38

ARG NAME=fedora-toolbox
ARG VERSION=38
LABEL com.github.containers.toolbox="true" \
com.redhat.component="$NAME" \
name="$NAME" \
version="$VERSION" \
usage="This image is meant to be used with the toolbox command" \
summary="Base image for creating Fedora toolbox containers" \
maintainer="Debarshi Ray <[email protected]>"

COPY README.md /

RUN rm /etc/rpm/macros.image-language-conf
RUN sed -i '/tsflags=nodocs/d' /etc/dnf/dnf.conf

RUN dnf -y upgrade
RUN dnf -y swap coreutils-single coreutils-full
RUN dnf -y swap glibc-minimal-langpack glibc-all-langpacks

COPY missing-docs /
RUN dnf -y reinstall $(<missing-docs)
RUN rm /missing-docs

COPY extra-packages /
RUN dnf -y install $(<extra-packages)
RUN rm /extra-packages

COPY ensure-files /
RUN ret_val=0; \
while read file; do \
if ! compgen -G "$file" >/dev/null; then \
echo "$file: No such file or directory" >&2; \
ret_val=1; \
break; \
fi; \
done <ensure-files; \
if [ "$ret_val" -ne 0 ]; then \
false; \
fi
RUN rm /ensure-files

RUN dnf clean all
44 changes: 44 additions & 0 deletions fedora/f38/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
[Toolbox](https://containertoolbx.org/) is a tool for Linux, which allows the
use of interactive command line environments for development and
troubleshooting the host operating system, without having to install software
on the host. It is built on top of [Podman](https://podman.io/) and other
standard container technologies from [OCI](https://opencontainers.org/).

Toolbox environments have seamless access to the user's home directory,
the Wayland and X11 sockets, networking (including Avahi), removable devices
(like USB sticks), systemd journal, SSH agent, D-Bus, ulimits, /dev and the
udev database, etc..

This is particularly useful on
[OSTree](https://ostree.readthedocs.io/en/latest/) based operating systems like
[Fedora CoreOS](https://coreos.fedoraproject.org/) and
[Silverblue](https://silverblue.fedoraproject.org/). The intention of these
systems is to discourage installation of software on the host, and instead
install software as (or in) containers — they mostly don't even have package
managers like DNF or YUM. This makes it difficult to set up a development
environment or troubleshoot the operating system in the usual way.

Toolbox solves this problem by providing a fully mutable container within
which one can install their favourite development and troubleshooting tools,
editors and SDKs. For example, it's possible to do `yum install ansible`
without affecting the base operating system.

However, this tool doesn't *require* using an OSTree based system. It works
equally well on Fedora Workstation and Server, and that's a useful way to
incrementally adopt containerization.

The toolbox environment is based on an [OCI](https://www.opencontainers.org/)
image. On Fedora this is the `fedora-toolbox` image. This image is used to
create a toolbox container that offers the interactive command line
environment.

Note that Toolbox makes no promise about security beyond what's already
available in the usual command line environment on the host that everybody is
familiar with.


## Installation & Use

See our guides on
[installing & getting started](https://containertoolbx.org/install/) with
Toolbox and [Linux distro support](https://containertoolbx.org/distros/).
Loading

0 comments on commit bf8bfb5

Please sign in to comment.