Commit graph

685 commits

Author SHA1 Message Date
Harry Míchal
188c92c76e cmd/rm: Implement the rm command in Go
https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
805450283b cmd/rmi: Implement the rmi command
https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
08e8a80d4c pkg/podman: Add functions to check if a container/image is a Toolbox
https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
c75404c056 pkg/podman: Wrap 'podman inspect --format json'
https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
c30d5549b6 cmd/list: Implement the list command
Go's text/tabwriter package isn't aware of the ANSI Select Graphic
Rendition (or SGR) escape sequences to change the terminal's
foreground colour [1,2]. Using the sequences disrupt the alignment of
the columns in the tabbed output.

Therefore, unlike the existing POSIX shell implementation, running
containers aren't marked in green in the Go version.

[1] https://en.wikipedia.org/wiki/ANSI_escape_code
[2] https://github.com/golang/go/issues/12073

https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
f4d129ab4d pkg/podman: Wrap 'podman images' & 'podman ps'
https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
74c2d7f02b pkg/utils: Add function to sort sets of containers or images in JSON
https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
928bf53943 pkg/utils: Add function to join sets of containers or images in JSON
https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
6170f494aa pkg/utils: Add function to shorten the hash of a container of image
https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
c2ba67569b cmd/root: Implement migration of containers and images
https://github.com/containers/toolbox/pull/318
2020-05-13 12:42:26 +02:00
Harry Míchal
d1a9fe20aa pkg/podman: Wrap 'podman system migrate'
https://github.com/containers/toolbox/pull/318
2020-05-13 12:33:34 +02:00
Harry Míchal
46c21a5c14 podman: Add function to check if Podman is newer than a given version
This is in the same style as GLib's GLIB_CHECK_VERSION [1].

Note that the github.com/HarryMichal/go-version package is a fork of
github.com/mcuadros/go-version. The latter is now marked as read-only
and archived by its owner.

The fork was necessary to fix the documentation of the CompareSimple
function. The function is supposed to conform to the strcmp
convention. ie., return 0 if both versions are equal, 1 if the left
side is bigger, and -1 if the right side is bigger. However, the
documentation had it the other way round.

[1] https://developer.gnome.org/glib/stable/glib-Version-Information.html#GLIB-CHECK-VERSION:CAPS

https://github.com/containers/toolbox/pull/318
2020-05-13 12:16:48 +02:00
Harry Míchal
b3fca25764 pkg/podman: Wrap 'podman version --format json'
https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:41 +02:00
Harry Míchal
3f0a135937 cmd/root: Initialize TOOLBOX_PATH; validate /etc/subgid & /etc/subuid
https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:41 +02:00
Debarshi Ray
e8866f2db1 cmd/help, cmd/root: Parametrize the basename of the executable
... instead of hard coding it as 'toolbox'.

https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:41 +02:00
Harry Míchal
e8d7f25e83 cmd/root: Initialize globals on start-up
These values are generally useful, and reading any of them is a
potentially fallible operation. Since the absence of any of these
values is indicative of a broken environment, it's more convenient to
read them early on during start-up and abort, instead of trying to
handle the error later on.

https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:41 +02:00
Debarshi Ray
f5bf741f86 pkg/utils: Add function to get the cgroups version
Based on the IsCgroup2UnifiedMode function:
https://github.com/containers/libpod/tree/master/pkg/cgroups

As suggested by Matthew Heon.

https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:41 +02:00
Harry Míchal
aaf81a56ea Sketch out the command line interface in Go
All the existing commands and their flags are present; but barring
'help', '--help' and logging, they don't do anything.

The skeleton was bootstrapped with Cobra Generator.

https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:41 +02:00
Debarshi Ray
561fe8b12d Lay the foundations for logging Podman in Go
https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:41 +02:00
Debarshi Ray
c9ae8ad3b6 pkg/utils: Add function to tunnel a Toolbox invocation to the host
https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:41 +02:00
Harry Míchal
ebad3af632 pkg/utils: Add function to get the options to propagate the environment
https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:40 +02:00
Debarshi Ray
03ca79a7b0 pkg/utils: Add function to check if running inside a toolbox container
https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:40 +02:00
Harry Míchal
8f03a902f2 pkg/utils: Add function to check if running inside a container
https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:40 +02:00
Harry Míchal
bd5b8065ae pkg/utils: Add function to conveniently check if a path exists
https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:40 +02:00
Debarshi Ray
7ab4ca868c Add a utility function for showing manuals in Go
A subsequent commit will use this to implement the help command.

Just like the existing POSIX shell implementation, the standard error
needs to be redirected to standard output. For details see commit
5e63e9ec9b.

https://github.com/containers/toolbox/pull/318
2020-05-13 09:40:00 +02:00
Debarshi Ray
19081b5d4a Add convenience wrappers to shell out to any binary in Go
https://github.com/containers/toolbox/pull/318
2020-05-13 09:39:35 +02:00
Harry Míchal
53f4d0c2f0 Add versioning infrastructure in Go
https://github.com/containers/toolbox/pull/318
2020-05-13 09:38:58 +02:00
Debarshi Ray
1b6d7d6410 build: Hook up the Go code with Meson
Meson doesn't support Go [1], so this is implemented by a custom target
that invokes 'go build' to generate the binary.

Unfortunately, when using Go modules, 'go build' insists on being
invoked in the same source directory where the go.mod file lives,
while Meson insists on using a build directory separate from the
corresponding source directory. This is addressed by using a build
script that goes into the source directory and then invokes 'go build'.

Currently, the Go code is only built when a Go implementation is found,
and even then, it's not installed. Non-technical end-users are supposed
to continue using the POSIX shell implementation until the Go version
is blessed as stable.

[1] https://github.com/mesonbuild/meson/issues/123

https://github.com/containers/toolbox/pull/318
2020-05-13 09:38:52 +02:00
Harry Míchal
d857471aa2 Add a skeleton for the Go rewrite
To build the Go, enter the src sub-directory and use 'go build':
  $ cd src
  $ go build

https://github.com/containers/toolbox/pull/318
2020-05-12 16:58:03 +02:00
Debarshi Ray
14db6622dd Update copyright notices 2020-05-12 16:56:52 +02:00
Debarshi Ray
ecc3ce029b Update URL in /etc/krb5.conf.d/kcm_default_ccache 2020-05-12 16:24:42 +02:00
Jens Petersen
b4337d4f86 images/fedora/f33: Don't install docs for packages that aren't present
This fixes the following build failure:
  atomic_reactor.util - Package chkconfig available, but not installed.
  atomic_reactor.util - No match for argument: chkconfig
  atomic_reactor.util - Package dbus-daemon available, but not
    installed.
  atomic_reactor.util - No match for argument: dbus-daemon
  atomic_reactor.util - Package rpm-plugin-systemd-inhibit available,
    but not installed.
  atomic_reactor.util - No match for argument:
    rpm-plugin-systemd-inhibit
  ...
  ...
  ...
  atomic_reactor.util - ERROR - {'errorDetail': {'code': 143,
    'message': "The command '/bin/sh -c dnf -y reinstall
    $(<missing-docs)' returned a non-zero code: 143"}, 'error': "The
    command '/bin/sh -c dnf -y reinstall $(<missing-docs)' returned a
    non-zero code: 143"}
2020-04-03 19:41:00 +02:00
Debarshi Ray
17e384b7fb images: Add fedora-toolbox image definition for Fedora 33 2020-04-03 19:29:44 +02:00
Harry Míchal
2d18f295a7 test/system: Update pre-pulled image for Rawhide
Current Rawhide is actually version 33. So the appropriate image should
be pre-pulled.

Because of the old version of image being pulled, the tests were
failing.
2020-03-13 17:16:12 +01:00
Harry Míchal
1e2232762c test/system: Rework the tests
The tests introduced by commit b5cdc57ae3 have proven to be
rather unstable due to mistakes in their design. The tests were quite
chaotically structured, and because of that images were deleted and
pulled too often, causing several false positives [1, 2].

This changes the structure of the tests in a major way. The tests
(resp. commands) are now run in a manner that better simulates the way
Toolbox is actually used. From a clean state, through creating
containers, using them and in the end deleting them. This should
reduce the strain on the bandwidth and possibly even speed up the
tests themselves.

[1] https://github.com/containers/toolbox/pull/372
[2] https://github.com/containers/toolbox/pull/374

https://github.com/containers/toolbox/pull/375
2020-02-18 14:00:59 +01:00
Tristan Cacqueray
50683c9d9a playbooks: Reduce flakiness due to network errors when pulling images
This change adds a pre-run task to pull the fedora-toolbox images from
the registry to reduce the number of false positives caused by
'podman pull' failing to download them during the actual test.

Each section needs a separate playbook because they use different
versions of Fedora, and hence different default images.

https://github.com/containers/toolbox/pull/375
2020-02-18 14:00:01 +01:00
Harry Míchal
5cea6c60eb test/system/README.md: Tweak
https://github.com/containers/toolbox/pull/377
2020-02-18 13:18:51 +01:00
TomSweeneyRedHat
518b8f55d1 Add Code of Conduct
https://github.com/containers/toolbox/pull/374

Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com>
2020-02-12 17:12:23 +01:00
Harry Míchal
c86a715d3c Remove Travis
Travis was running 'ninja test' and that's now covered by Zuul.

https://github.com/containers/toolbox/issues/68
2020-01-22 16:11:53 +01:00
Tristan Cacqueray
a28177a7ab Enable Zuul
This adds several .yaml files that specify jobs (those in folder
playbooks) and one that serves as the main config (.zuul.yaml).

Tests and builds are currently executed on every change in PRs (ie.,
check and gating) and periodically (according to the documentation
this pipeline should be run at least once a day).

There are 4 tests in total:

1. 'ninja test' - does the same thing that Travis did
2. Fedora 30 - runs the system tests with current Podman and Toolbox
   in Fedora 30
3. Fedora 31 - the same but for Fedora 31
4. Fedora Rawhide - the same but for Fedora Rawhide

https://github.com/containers/toolbox/issues/68
2020-01-22 16:11:53 +01:00
Harry Míchal
da4fea271f Add a README file for system tests
https://github.com/containers/toolbox/issues/68
2020-01-22 15:54:31 +01:00
Harry Míchal
b5cdc57ae3 Add system test scripts
These tests are written using BATS (Bash Automated Testing System). I
used a very helpful helpers.bash script from the libpod project (Thank
you!) that I tweaked slightly.

https://github.com/containers/toolbox/issues/68
2020-01-22 15:54:31 +01:00
Debarshi Ray
7b460e390d Prepare 0.0.18 2020-01-14 15:47:45 +01:00
Harry Míchal
8f4070224f Check /usr/share/profile.d when bind mounting toolbox.sh
/usr/share/profile.d is the default location where toolbox.sh is
installed, even though, in practice, most (all?) distributions use
/etc/profile.d. It's reasonable to at least make the code work with the
default build values.

https://github.com/containers/toolbox/pull/362
2020-01-14 15:19:27 +01:00
Debarshi Ray
cb79382967 Unbreak 'enter' when SELinux is disabled
/sys/fs/selinux is only present when SELinux is 'enforcing' or
'permissive'. When it's disabled, /sys/fs/selinux doesn't exist and
sysfs doesn't let you create it either. Therefore, the attempt to wipe
out the toolbox container's /sys/fs/selinux by bind mounting
/usr/share/empty over it fails, and in turn prevents the container from
starting up.

Fallout from f9cca5719d

https://github.com/containers/toolbox/issues/344
2020-01-10 18:22:47 +01:00
Debarshi Ray
47c32712f4 Set up /mnt to match the host
On Silverblue /mnt is a symbolic link to /var/mnt. Matching what the
host does will reduce weird side-effects.

https://github.com/containers/toolbox/issues/92
2020-01-06 19:16:17 +01:00
Debarshi Ray
3de605aec6 Give access to /var/mnt from the host operating system
On Silverblue, /mnt is a symbolic link to /var/mnt. Matching the
presence of /var/mnt on the host inside the toolbox container would
make things less confusing for users.

https://github.com/containers/toolbox/issues/92
2019-11-22 19:05:35 +01:00
Debarshi Ray
5595cc065f Do recursive bind mounts when binding locations at runtime
A subsequent commit will give access to /var/mnt from the host, if its
present, by bind mounting /run/host/var/mnt at runtime. However, it
turns out that an attempt to non-recursively bind it will error out, if
the host's /var/mnt already contains a mount point.

On the host:
$ sudo mkdir --parents /var/mnt/tmp
$ sudo mount -t tmpfs none /var/mnt/tmp

Inside the container:
$ sudo mkdir --parents /var/mnt
$ sudo mount --bind -o rslave /run/host/var/mnt /var/mnt
mount: /var/mnt: wrong fs type, bad option, bad superblock on
  /run/host/var/mnt, missing codepage or helper, or other error.

https://github.com/containers/toolbox/issues/92
2019-11-22 19:05:31 +01:00
Debarshi Ray
65e3eec06e Set up /media to match the host
On Silverblue /media is a symbolic link to /run/media. Matching what
the host does will reduce weird side-effects.

https://github.com/containers/toolbox/issues/330
2019-11-22 16:31:50 +01:00
Debarshi Ray
8bf970776b Check if /media is available
No /media on openSUSE.

https://github.com/containers/toolbox/issues/230
2019-11-21 17:31:03 +01:00