Compare commits

..

18 commits

Author SHA1 Message Date
9ff633d04b Attempt to fix the use of ARG
... because the image failed to build with:
  Error in plugin orchestrate_build:
    {"x86_64": {"docker_api": "ARG requires exactly one argument"},
     "aarch64": {"docker_api": "Dockerfile parse error line 4: ARG
                  requires exactly one argument"}}.

Fallout from 0914617155
2023-03-01 13:26:19 +01:00
Timothée Ravier
0914617155 Use ARG instead of ENV to avoid leaking variables
We only need those temporary variables for the container build and for
the LABELS. We do not want to set those specific environment variables
for the container environment itself.

Using ARG instead of ENV lets us do that.

See: https://github.com/containers/toolbox/issues/188
See: https://github.com/containers/docs/pull/15
2023-03-01 13:22:55 +01:00
951b464d50 Synchronize with upstream 2023-03-01 13:21:19 +01:00
4d60442315 Ensure that the gpg2(1), gnupg2(7), etc. manuals are available
It turns out that at least since Fedora 30 [1], the gnupg2 package has
been part of the fedora base image, because it's required by the dnf
package:
  dnf -> python3-dnf -> python3-libdnf -> libdnf -> gpgme -> gnupg2

Hence, the need to restore the gnupg2 documentation that was stripped
out in the base image.

[1] It's difficult to find out if the gnupg2 package wasn't part of the
    fedora base image before Fedora 30, because those images are no
    longer available from registry.fedoraproject.org.

https://github.com/containers/toolbox/pull/1228
2023-02-02 20:29:45 +01:00
1c389e3eb4 Use the package name instead of a virtual Provides for gnupg2
The package for GnuPG 2.0 has always been called gnupg2 [1], so this
must have been a mistake.

[1] https://pagure.io/fedora-comps/blob/main/f/comps-f21.xml.in

https://github.com/containers/toolbox/pull/1228
2023-02-02 20:29:45 +01:00
63ef4ae48f Ensure that the kill(1), mount(8), etc. manuals are available
https://github.com/containers/toolbox/pull/1227
2023-02-02 20:29:45 +01:00
e657f2554f Ensure that the cat(1), cp(1), ls(1), etc. manuals are available
https://github.com/containers/toolbox/pull/1226
2023-02-02 20:29:45 +01:00
38d38e140e Fix up the previous commit
Fallout from d6f0488665
2023-02-02 20:26:00 +01:00
1b4486460a images: Ensure that the desired manuals are indeed present
Building an OCI image leads to so much spew that it's hard to notice if
something unexpected happened, and as seen in the previous commit [1],
unexpected things do happen.

Therefore, this adds a built-in test to ensure that the desired files
are actually present in the final image.  Right now it only checks the
presence of some representative manuals to ensure that the packages
listed in the 'missing-docs' file really do get reinstalled, and the
documentation that was stripped out in the base image really does get
restored.

[1] Commit 6d4ecac69f
    https://github.com/containers/toolbox/pull/1226

https://github.com/containers/toolbox/pull/1226
2023-02-02 20:26:00 +01:00
a1d5815684 Avoid unexpected DNF behaviour when reinstalling or swapping
The RPM packages in the base 'fedora' image can be older than the those
currently available in the DNF 'updates' repository [1], but at the same
time newer than those available in the DNF 'fedora' repository [1].  The
first part happens because the base image isn't updated as often as the
individual packages, so the 'updates' repository can have newer RPMs.
The second part happens because the base image does get updated after a
stable Fedora has been released, and hence can have newer RPMs than the
'fedora' repository.

This is complicated by the fact that packages can get pulled directly
from Fedora's Koji build system into the base 'fedora' image before
they make it to one of the well-known repositories like 'fedora' or
'updates' [1].  These packages are marked as having come from the
koji-override-0 repository.

All that combined can lead to unexpected behaviour when DNF is invoked
to reinstall or swap the RPM packages in the base image.  Some examples
below.

The base fedora:36 image contains glibc-minimal-langpack-2.35-20.fc36
that came from koji-override-0, while 'fedora' and 'updates' have
glibc-all-langpacks-2.35-4.fc36 and glibc-all-langpacks-2.35-22.fc36
respectively.  This leads to:
  STEP 8/15: RUN dnf -y swap glibc-minimal-langpack glibc-all-langpacks
  Last metadata expiration check: 0:00:03 ago on Wed Feb  1 12:37:04...
  Dependencies resolved.
  ======================================================================
   Package                   Arch      Version          Repository
  ======================================================================
  Installing:
   glibc-all-langpacks       x86_64    2.35-4.fc36      fedora
  Removing:
   glibc-minimal-langpack    x86_64    2.35-20.fc36     @koji-override-0
  Downgrading:
   glibc                     x86_64    2.35-4.fc36      fedora
   glibc-common              x86_64    2.35-4.fc36      fedora

That's unexpected.  Instead of upgrading all the glibc sub-packages to
the latest version from 'updates', it's downgrading them to the older
version from 'fedora'.

Similarly, the base fedora:36 image has bash-5.2.9-2.fc36.x86_64 from
koji-override-0, and there is bash-5.2.15-1.fc36.x86_64 in 'updates'.
This leads to:
  STEP 10/15: RUN dnf -y reinstall $(<missing-docs)
  Last metadata expiration check: 0:00:06 ago on Wed Feb  1 12:37:04...
  Package acl available, but not installed.
  No match for argument: acl
  Installed package bash-5.2.9-2.fc36.x86_64 (from koji-override-0) not
    available.

That's unexpected.  Instead of upgrading bash to the latest version from
'updates', it's simply skipping the 'reinstall', which means that the
documentation that was stripped out in the base image doesn't get
restored.

Updating all the RPM packages in the base 'fedora' image to match the
contents of the 'updates' repository before making any changes to the
image's package set will avoid such unexpected behaviour.

[1] https://docs.fedoraproject.org/en-US/quick-docs/repositories/

https://github.com/containers/toolbox/pull/1226
2023-02-02 20:25:27 +01:00
08f4699d4a Ensure that the sudo(8), sudoers(5), etc. manuals are available
https://github.com/containers/toolbox/pull/1068
https://github.com/containers/toolbox/pull/1133
2023-02-02 20:24:54 +01:00
a4947a9269 Enable OpenGL and Vulkan for hardware with free drivers
https://github.com/containers/toolbox/issues/1110
2023-02-02 20:24:54 +01:00
87d7ad6a72 Remove RPM configuration to strip out translations
Note that this doesn't restore the translations that were stripped out
from the base fedora image.  It only ensures that subsequent RPM
transactions retain the translations.

https://github.com/containers/toolbox/issues/60
2023-02-02 20:21:27 +01:00
bfcccc0943 Ensure that all the glibc language packs are available
... and not just C, POSIX and C.UTF-8.

https://github.com/containers/toolbox/issues/60
2023-02-02 20:21:27 +01:00
92830d1635 Removed deprecated com.github.debarshiray.toolbox tag
https://github.com/containers/toolbox/pull/820
2023-02-02 20:21:27 +01:00
Jens Petersen
85ef0e9bbe missing-docs: add util-linux-core 2022-12-13 19:00:56 +08:00
Jens Petersen
af1edb81ec findutils missing docs 2022-08-09 14:26:33 +08:00
Jens Petersen
8859dc0fc7 remove autorebuild config to unbreak koji OBS build
see https://pagure.io/releng/issue/10658
2022-03-08 15:33:41 +08:00
6 changed files with 173 additions and 9 deletions

44
Dockerfile Normal file
View file

@ -0,0 +1,44 @@
FROM registry.fedoraproject.org/fedora:36
ARG NAME=fedora-toolbox
ARG VERSION=36
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 <rishi@fedoraproject.org>"
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
README.md Normal file
View file

@ -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/).

View file

@ -1,9 +0,0 @@
The fedora-toolbox OCI image for Fedora 39 onwards is no longer built using
OpenShift Build Service from the Dockerfile here. It's now being built using
Image Factory from fedora-kickstarts and pungi-fedora [1], as part of the
ToolbxReleaseBlocker Change [2] for Fedora 39.
[1] https://pagure.io/fedora-kickstarts/
https://pagure.io/pungi-fedora/
[2] https://fedoraproject.org/wiki/Changes/ToolbxReleaseBlocker

17
ensure-files Normal file
View file

@ -0,0 +1,17 @@
/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/kill.1*
/usr/share/man/man8/mount.8*

48
extra-packages Normal file
View file

@ -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
jwhois
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
words
xorg-x11-xauth
xz
zip

20
missing-docs Normal file
View file

@ -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