When not attaching to an existing network namespace, pasta always
spawns an interactive shell in a new namespace to attach to. Most
commands which can issue a shell in a modified environment can also
issue other commands as well (e.g. env, strace). We want to allow
pasta to do the same.
Because of the way the non-option argument to pasta is currently
overloaded, allowing this requires some other changes to the way we
parse the command line.
David Gibson (8):
conf: Make the argument to --pcap option mandatory
conf: Use "-D none" and "-S none" instead of missing empty option
arguments
Correct manpage for --userns
Remove --nsrun-dir option
Move ENOENT error message into conf_ns_opt()
More deterministic detection of whether argument is a PID, PATH or
NAME
Use explicit --netns option rather than multiplexing with PID
Allow pasta to take a command to execute
conf.c | 269 +++++++++++++++++++++++++++++---------------------------
passt.1 | 54 ++++++------
pasta.c | 33 ++++---
pasta.h | 2 +-
pcap.c | 28 ------
5 files changed, 191 insertions(+), 195 deletions(-)
--
2.37.2
Performance tests use iperf3(1) with large windows, and these sysctl
entries are needed to run them unmodified.
The passt demo uses perf(1) to report syscall overhead, and that
needs access to hardware performance counters for unprivileged
users.
Reported-by: David Gibson <david(a)gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com>
---
test/README.md | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/test/README.md b/test/README.md
index 581949a..72a4986 100644
--- a/test/README.md
+++ b/test/README.md
@@ -47,6 +47,22 @@ Virtual machine images are built during test executions using
[mbuto](https://mbuto.lameexcu.se/), the shell script is sourced via _git_
as needed, so there's no need to actually install it.
+### Kernel parameters
+
+Performance tests use iperf3 with rather large TCP receiving and sending
+windows, to decrease the likelihood of iperf3 itself becoming the bottleneck.
+These values need to be allowed by the kernel of the host running the tests.
+Example for /etc/sysctl.conf:
+
+ net.core.rmem_max = 134217728
+ net.core.wmem_max = 134217728
+
+Further, the passt demo uses perf(1), relying on hardware events for performance
+counters, to display syscall overhead. The kernel needs to allow unprivileged
+users to access these events. Suggested entry for /etc/sysctl.conf:
+
+ kernel.perf_event_paranoid = -1
+
### Special requirements for continuous integration and demo modes
Running the test suite as continuous integration or demo modes will record the
--
2.35.1
This series fixes one issue in passt itself, reported by Daniel from a
rpmlint warning, and implements six recommendations in the spec file,
also from Daniel.
Stefano Brivio (7):
util: Drop any supplementary group before dropping privileges
fedora: Adopt versioning guideline for snapshots
fedora: Drop SPDX identifier from spec file
fedora: Drop comment stating the spec file is an example file
fedora: Define git_hash in spec file and reuse it
fedora: Use full versioning for SELinux subpackage Requires: tag
fedora: Pass explicit bindir, mandir, docdir, and drop OpenSUSE
override
contrib/fedora/passt.spec | 18 +++++++-----------
contrib/fedora/rpkg.macros | 7 +++++--
util.c | 2 +-
3 files changed, 13 insertions(+), 14 deletions(-)
--
2.35.1
Trivial conflicts in man pages only.
Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com>
---
...001-libpod-Add-pasta-networking-mode.patch | 94 +++++++++----------
1 file changed, 47 insertions(+), 47 deletions(-)
diff --git a/contrib/podman/0001-libpod-Add-pasta-networking-mode.patch b/contrib/podman/0001-libpod-Add-pasta-networking-mode.patch
index ac82a44..884ebf7 100644
--- a/contrib/podman/0001-libpod-Add-pasta-networking-mode.patch
+++ b/contrib/podman/0001-libpod-Add-pasta-networking-mode.patch
@@ -1,4 +1,4 @@
-From 27b0bf3a0ad6c57c7713aef1ded8cad6d4cd4d4a Mon Sep 17 00:00:00 2001
+From 9f61d4107f7cce5fb4157e18c67fad9c135d7b9f Mon Sep 17 00:00:00 2001
From: Stefano Brivio <sbrivio(a)redhat.com>
Date: Mon, 2 May 2022 16:12:07 +0200
Subject: [PATCH] libpod: Add pasta networking mode
@@ -41,25 +41,25 @@ Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com>
SPDX-FileCopyrightText: 2021-2022 Red Hat GmbH <sbrivio(a)redhat.com>
SPDX-License-Identifier: Apache-2.0
- docs/source/markdown/podman-create.1.md | 48 ++++++++-
- docs/source/markdown/podman-pod-create.1.md | 44 ++++++++
- docs/source/markdown/podman-run.1.md | 49 ++++++++-
- docs/source/markdown/podman.1.md | 6 +-
- libpod/networking_linux.go | 6 +-
- libpod/networking_pasta.go | 107 ++++++++++++++++++++
- pkg/namespaces/namespaces.go | 6 ++
- pkg/specgen/generate/namespaces.go | 10 ++
- pkg/specgen/generate/pod_create.go | 6 ++
- pkg/specgen/namespaces.go | 16 ++-
- pkg/specgen/podspecgen.go | 2 +-
+ docs/source/markdown/podman-create.1.md.in | 48 +++++++-
+ .../source/markdown/podman-pod-create.1.md.in | 44 +++++++
+ docs/source/markdown/podman-run.1.md.in | 49 +++++++-
+ docs/source/markdown/podman.1.md | 6 +-
+ libpod/networking_linux.go | 6 +-
+ libpod/networking_pasta.go | 107 ++++++++++++++++++
+ pkg/namespaces/namespaces.go | 6 +
+ pkg/specgen/generate/namespaces.go | 10 ++
+ pkg/specgen/generate/pod_create.go | 6 +
+ pkg/specgen/namespaces.go | 16 ++-
+ pkg/specgen/podspecgen.go | 2 +-
11 files changed, 286 insertions(+), 14 deletions(-)
create mode 100644 libpod/networking_pasta.go
-diff --git a/docs/source/markdown/podman-create.1.md b/docs/source/markdown/podman-create.1.md
-index b3e707e45..03a754e4c 100644
---- a/docs/source/markdown/podman-create.1.md
-+++ b/docs/source/markdown/podman-create.1.md
-@@ -717,10 +717,15 @@ Valid _mode_ values are:
+diff --git a/docs/source/markdown/podman-create.1.md.in b/docs/source/markdown/podman-create.1.md.in
+index 0a880951d..287dbc4a4 100644
+--- a/docs/source/markdown/podman-create.1.md.in
++++ b/docs/source/markdown/podman-create.1.md.in
+@@ -394,10 +394,15 @@ Valid _mode_ values are:
- **interface_name**: Specify a name for the created network interface inside the container.
For example to set a static ipv4 address and a static mac address, use `--network bridge:ip=10.88.0.10,mac=44:33:22:11:00:99`.
@@ -75,7 +75,7 @@ index b3e707e45..03a754e4c 100644
- **ns:**_path_: Path to a network namespace to join.
- **private**: Create a new namespace for the container. This will use the **bridge** mode for rootful containers and **slirp4netns** for rootless ones.
- **slirp4netns[:OPTIONS,...]**: use **slirp4netns**(1) to create a user network stack. This is the default for rootless containers. It is possible to specify these additional options, they can also be set with `network_cmd_options` in containers.conf:
-@@ -736,6 +741,40 @@ Valid _mode_ values are:
+@@ -413,6 +418,40 @@ Valid _mode_ values are:
Note: Rootlesskit changes the source IP address of incoming packets to an IP address in the container network namespace, usually `10.0.2.100`. If your application requires the real source IP address, e.g. web server logs, use the slirp4netns port handler. The rootlesskit port handler is also used for rootless containers when connected to user-defined networks.
- **port_handler=slirp4netns**: Use the slirp4netns port forwarding, it is slower than rootlesskit but preserves the correct source IP address. This port handler cannot be used for user-defined networks.
@@ -113,10 +113,10 @@ index b3e707e45..03a754e4c 100644
+ host, using the loopback interface instead of the tap interface for improved
+ performance
+
- #### **--network-alias**=*alias*
+ @@option network-alias
- Add a network-scoped alias for the container, setting the alias for all networks that the container joins. To set a
-@@ -1595,8 +1634,9 @@ In order for users to run rootless, there must be an entry for their username in
+ @@option no-healthcheck
+@@ -1018,8 +1057,9 @@ In order for users to run rootless, there must be an entry for their username in
Rootless Podman works better if the fuse-overlayfs and slirp4netns packages are installed.
The fuse-overlayfs package provides a userspace overlay storage driver, otherwise users need to use
@@ -128,7 +128,7 @@ index b3e707e45..03a754e4c 100644
## ENVIRONMENT
-@@ -1645,7 +1685,9 @@ page.
+@@ -1068,7 +1108,9 @@ page.
NOTE: Use the environment variable `TMPDIR` to change the temporary storage location of downloaded container images. Podman defaults to use `/var/tmp`.
## SEE ALSO
@@ -139,11 +139,11 @@ index b3e707e45..03a754e4c 100644
## HISTORY
October 2017, converted from Docker documentation to Podman by Dan Walsh for Podman `<dwalsh(a)redhat.com>`
-diff --git a/docs/source/markdown/podman-pod-create.1.md b/docs/source/markdown/podman-pod-create.1.md
-index 7b63ac51d..03174d1a6 100644
---- a/docs/source/markdown/podman-pod-create.1.md
-+++ b/docs/source/markdown/podman-pod-create.1.md
-@@ -263,10 +263,15 @@ Valid _mode_ values are:
+diff --git a/docs/source/markdown/podman-pod-create.1.md.in b/docs/source/markdown/podman-pod-create.1.md.in
+index 702780c65..609a5aee5 100644
+--- a/docs/source/markdown/podman-pod-create.1.md.in
++++ b/docs/source/markdown/podman-pod-create.1.md.in
+@@ -181,10 +181,15 @@ Valid _mode_ values are:
- **interface_name**: Specify a name for the created network interface inside the container.
For example to set a static ipv4 address and a static mac address, use `--network bridge:ip=10.88.0.10,mac=44:33:22:11:00:99`.
@@ -159,7 +159,7 @@ index 7b63ac51d..03174d1a6 100644
- **ns:**_path_: Path to a network namespace to join.
- **private**: Create a new namespace for the container. This will use the **bridge** mode for rootful containers and **slirp4netns** for rootless ones.
- **slirp4netns[:OPTIONS,...]**: use **slirp4netns**(1) to create a user network stack. This is the default for rootless containers. It is possible to specify these additional options, they can also be set with `network_cmd_options` in containers.conf:
-@@ -282,6 +287,43 @@ Valid _mode_ values are:
+@@ -200,6 +205,43 @@ Valid _mode_ values are:
Note: Rootlesskit changes the source IP address of incoming packets to an IP address in the container network namespace, usually `10.0.2.100`. If your application requires the real source IP address, e.g. web server logs, use the slirp4netns port handler. The rootlesskit port handler is also used for rootless containers when connected to user-defined networks.
- **port_handler=slirp4netns**: Use the slirp4netns port forwarding, it is slower than rootlesskit but preserves the correct source IP address. This port handler cannot be used for user-defined networks.
@@ -200,10 +200,10 @@ index 7b63ac51d..03174d1a6 100644
+ host, using the loopback interface instead of the tap interface for improved
+ performance
+
- #### **--network-alias**=*alias*
+ @@option network-alias
- Add a network-scoped alias for the pod, setting the alias for all networks that the container joins. To set a
-@@ -672,6 +714,8 @@ $ podman pod create --network slirp4netns:outbound_addr=127.0.0.1,allow_host_loo
+ @@option no-hosts
+@@ -561,6 +603,8 @@ $ podman pod create --network slirp4netns:outbound_addr=127.0.0.1,allow_host_loo
$ podman pod create --network slirp4netns:cidr=192.168.0.0/24
@@ -212,11 +212,11 @@ index 7b63ac51d..03174d1a6 100644
$ podman pod create --network net1:ip=10.89.1.5 --network net2:ip=10.89.10.10
```
-diff --git a/docs/source/markdown/podman-run.1.md b/docs/source/markdown/podman-run.1.md
-index 8c889f0a5..0ad667fc2 100644
---- a/docs/source/markdown/podman-run.1.md
-+++ b/docs/source/markdown/podman-run.1.md
-@@ -734,10 +734,15 @@ Valid _mode_ values are:
+diff --git a/docs/source/markdown/podman-run.1.md.in b/docs/source/markdown/podman-run.1.md.in
+index 6798c65da..06dfa0745 100644
+--- a/docs/source/markdown/podman-run.1.md.in
++++ b/docs/source/markdown/podman-run.1.md.in
+@@ -409,10 +409,15 @@ Valid _mode_ values are:
- **interface_name**: Specify a name for the created network interface inside the container.
For example to set a static ipv4 address and a static mac address, use `--network bridge:ip=10.88.0.10,mac=44:33:22:11:00:99`.
@@ -232,7 +232,7 @@ index 8c889f0a5..0ad667fc2 100644
- **ns:**_path_: Path to a network namespace to join.
- **private**: Create a new namespace for the container. This will use the **bridge** mode for rootful containers and **slirp4netns** for rootless ones.
- **slirp4netns[:OPTIONS,...]**: use **slirp4netns**(1) to create a user network stack. This is the default for rootless containers. It is possible to specify these additional options, they can also be set with `network_cmd_options` in containers.conf:
-@@ -753,6 +758,43 @@ Valid _mode_ values are:
+@@ -428,6 +433,43 @@ Valid _mode_ values are:
Note: Rootlesskit changes the source IP address of incoming packets to an IP address in the container network namespace, usually `10.0.2.100`. If your application requires the real source IP address, e.g. web server logs, use the slirp4netns port handler. The rootlesskit port handler is also used for rootless containers when connected to user-defined networks.
- **port_handler=slirp4netns**: Use the slirp4netns port forwarding, it is slower than rootlesskit but preserves the correct source IP address. This port handler cannot be used for user-defined networks.
@@ -273,10 +273,10 @@ index 8c889f0a5..0ad667fc2 100644
+ host, using the loopback interface instead of the tap interface for improved
+ performance
+
- #### **--network-alias**=*alias*
+ @@option network-alias
- Add a network-scoped alias for the container, setting the alias for all networks that the container joins. To set a
-@@ -1967,8 +2009,9 @@ In order for users to run rootless, there must be an entry for their username in
+ @@option no-healthcheck
+@@ -1383,8 +1425,9 @@ In order for users to run rootless, there must be an entry for their username in
Rootless Podman works better if the fuse-overlayfs and slirp4netns packages are installed.
The **fuse-overlayfs** package provides a userspace overlay storage driver, otherwise users need to use
@@ -288,7 +288,7 @@ index 8c889f0a5..0ad667fc2 100644
## ENVIRONMENT
-@@ -2015,7 +2058,7 @@ page.
+@@ -1431,7 +1474,7 @@ page.
NOTE: Use the environment variable `TMPDIR` to change the temporary storage location of downloaded container images. Podman defaults to use `/var/tmp`.
## SEE ALSO
@@ -298,7 +298,7 @@ index 8c889f0a5..0ad667fc2 100644
## HISTORY
September 2018, updated by Kunal Kushwaha `<kushwaha_kunal_v7(a)lab.ntt.co.jp>`
diff --git a/docs/source/markdown/podman.1.md b/docs/source/markdown/podman.1.md
-index 4c019ae97..4c09d4bee 100644
+index d1192b6d2..a79a56253 100644
--- a/docs/source/markdown/podman.1.md
+++ b/docs/source/markdown/podman.1.md
@@ -88,7 +88,7 @@ Set libpod namespace. Namespaces are used to separate groups of containers and p
@@ -310,7 +310,7 @@ index 4c019ae97..4c09d4bee 100644
#### **--network-config-dir**=*directory*
-@@ -415,7 +415,7 @@ See the `subuid(5)` and `subgid(5)` man pages for more information.
+@@ -421,7 +421,7 @@ See the `subuid(5)` and `subgid(5)` man pages for more information.
Images are pulled under `XDG_DATA_HOME` when specified, otherwise in the home directory of the user under `.local/share/containers/storage`.
@@ -319,7 +319,7 @@ index 4c019ae97..4c09d4bee 100644
In certain environments like HPC (High Performance Computing), users cannot take advantage of the additional UIDs and GIDs from the /etc/subuid and /etc/subgid systems. However, in this environment, rootless Podman can operate with a single UID. To make this work, set the `ignore_chown_errors` option in the /etc/containers/storage.conf or in ~/.config/containers/storage.conf files. This option tells Podman when pulling an image to ignore chown errors when attempting to change a file in a container image to match the non-root UID in the image. This means all files get saved as the user's UID. Note this could cause issues when running the container.
-@@ -428,7 +428,7 @@ The Network File System (NFS) and other distributed file systems (for example: L
+@@ -434,7 +434,7 @@ The Network File System (NFS) and other distributed file systems (for example: L
For more information, please refer to the [Podman Troubleshooting Page](https://github.com/containers/podman/blob/main/troubleshooting.md).
## SEE ALSO
@@ -329,7 +329,7 @@ index 4c019ae97..4c09d4bee 100644
## HISTORY
Dec 2016, Originally compiled by Dan Walsh <dwalsh(a)redhat.com>
diff --git a/libpod/networking_linux.go b/libpod/networking_linux.go
-index c05796768..5c1f0ea35 100644
+index c10c3c0b2..0f0c1213c 100644
--- a/libpod/networking_linux.go
+++ b/libpod/networking_linux.go
@@ -640,6 +640,9 @@ func (r *Runtime) configureNetNS(ctr *Container, ctrNS ns.NetNS) (status map[str
@@ -511,10 +511,10 @@ index f0d4e9153..2c4b40509 100644
portMappings, expose, err := createPortMappings(s, imageData)
if err != nil {
diff --git a/pkg/specgen/generate/pod_create.go b/pkg/specgen/generate/pod_create.go
-index 4e6362c9b..fa8a01c84 100644
+index d6063b9a0..be94fb251 100644
--- a/pkg/specgen/generate/pod_create.go
+++ b/pkg/specgen/generate/pod_create.go
-@@ -200,6 +200,12 @@ func MapSpec(p *specgen.PodSpecGenerator) (*specgen.SpecGenerator, error) {
+@@ -201,6 +201,12 @@ func MapSpec(p *specgen.PodSpecGenerator) (*specgen.SpecGenerator, error) {
p.InfraContainerSpec.NetworkOptions = p.NetworkOptions
p.InfraContainerSpec.NetNS.NSMode = specgen.Slirp
}
--
2.35.1
Here's a handful of small fixes for passt I came across while working
on other things.
David Gibson (3):
conf: Fix incorrect bounds checking for sock_path parameter
gitignore README.plain.md
Don't unnecessarily avoid CLOEXEC flags
.gitignore | 1 +
conf.c | 12 ++++--------
passt.c | 6 ++----
pasta.c | 2 +-
4 files changed, 8 insertions(+), 13 deletions(-)
--
2.37.2
Here's get another batch of fixes and cleanups for passt/pasta tests.
Some of these are preliminary fixes before an upcoming series changing
to use more reliable (less tmux screen-scraping dependent) methods for
dispatching commands in various contexts. Others are just
miscellaneous fixes.
David Gibson (10):
test: Convert distro tests to use socat instead of nc/ncat
test: Split cppcheck and clang-tidy tests into different files
test: Remove unused *_XTERM variables
test: Ignore video processing temporary files
test: Split setup/teardown functions for build and distro tests
test: Only select a single interface or gateway in tests
test: Rename slightly misleading "valgrind" tests
test: Use shutdown test for pasta
test: Log debugging output from test script
test: Kill qemu by pidfile rather than ^C
test/.gitignore | 4 ++
test/build/{static_checkers => clang_tidy} | 5 +--
test/build/cppcheck | 17 ++++++++
test/dhcp/passt | 4 +-
test/dhcp/pasta | 4 +-
test/distro/debian | 28 ++++++-------
test/distro/fedora | 48 +++++++++++-----------
test/distro/opensuse | 18 ++++----
test/distro/ubuntu | 16 ++++----
test/lib/setup | 41 ++++++++++++------
test/lib/term | 4 --
test/ndp/passt | 4 +-
test/ndp/pasta | 2 +-
test/run | 15 +++++--
test/{valgrind => shutdown}/passt | 9 ++--
test/{valgrind => shutdown}/passt_in_ns | 9 ++--
16 files changed, 134 insertions(+), 94 deletions(-)
rename test/build/{static_checkers => clang_tidy} (86%)
create mode 100644 test/build/cppcheck
rename test/{valgrind => shutdown}/passt (62%)
rename test/{valgrind => shutdown}/passt_in_ns (62%)
--
2.37.2
This series introduces a rewrite of the doc/demo.sh script for passt
and pasta, which was entirely outdated, some changes to make packaging
easier, and a number of fixes to the Fedora spec file template.
Most issues addressed here were reported by Fedora package reviewers
at:
https://bugzilla.redhat.com/show_bug.cgi?id=2106611
Stefano Brivio (12):
doc: Rewrite demo script
README: Add link to Copr repositories
Makefile: Ugly hack to get a "plain" Markdown version of README
Makefile: Install demo.sh too, uninstall stuff under /usr/share
fedora: Install "plain" README, instead of web version, and demo
script
fedora: Introduce own rpkg macro for changelog
fedora: Start Release tag from 1, not 0
fedora: Drop VCS tag from spec file
fedora: Change source URL to HEAD link with explicit commit SHA
fedora: Build SELinux subpackage as noarch
fedora: Don't hardcode CFLAGS setting, use %set_build_flags macro
instead
fedora: Fix man pages wildcards in spec file
Makefile | 34 +++-
README.md | 37 ++--
contrib/fedora/passt.spec | 26 +--
contrib/fedora/rpkg.macros | 38 +++++
doc/demo.sh | 340 +++++++++++++++++++++++++------------
5 files changed, 334 insertions(+), 141 deletions(-)
--
2.35.1
Distribution packages reasonably expect to have a human-readable
Markdown version of the README under /usr/share/doc/, but all we have
right now is a heavily web-oriented version.
Introduce a ugly hack to strip web-oriented parts from the current
README and install it.
It should probably work the other way around: a human-readable README
could be used as a source for the web page. But cgit needs a file
that's in the tree, not something that can be built, and
https://passt.top/ is based on cgit. It should eventually be doable
to work around this in cgit, instead.
Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com>
---
Makefile | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 0de872e..f03d117 100644
--- a/Makefile
+++ b/Makefile
@@ -90,7 +90,7 @@ else
BIN := passt pasta qrap
endif
-all: $(BIN) $(MANPAGES)
+all: $(BIN) $(MANPAGES) docs
static: CFLAGS += -static -DGLIBC_NO_STATIC_NSS
static: clean all
@@ -123,12 +123,14 @@ valgrind: all
clean:
$(RM) $(BIN) *.o seccomp.h pasta.1 \
passt.tar passt.tar.gz *.deb *.rpm \
- passt.pid
+ passt.pid README.plain.md
-install: $(BIN) $(MANPAGES)
+install: $(BIN) $(MANPAGES) docs
mkdir -p $(DESTDIR)$(prefix)/bin $(DESTDIR)$(prefix)/share/man/man1
cp -d $(BIN) $(DESTDIR)$(prefix)/bin
cp -d $(MANPAGES) $(DESTDIR)$(prefix)/share/man/man1
+ mkdir -p $(DESTDIR)$(prefix)/share/doc/passt
+ cp -d README.plain.md $(DESTDIR)$(prefix)/share/doc/passt/README.md
uninstall:
$(RM) $(BIN:%=$(DESTDIR)$(prefix)/bin/%)
@@ -147,6 +149,28 @@ pkgs: static
--description="User-mode networking for VMs and namespaces" \
-k --version=g$(shell git rev-parse --short HEAD) passt.tar.gz
+# TODO: This hack makes a "plain" Markdown version of README.md that can be
+# reasonably shipped as documentation file, while the current README.md is
+# definitely intended for web browser consumption. It should probably work the
+# other way around: the web version should be obtained by adding HTML and
+# JavaScript portions to a plain Markdown, instead. However, cgit needs to use
+# a file in the git tree. Find a better way around this.
+docs: README.md
+ @( \
+ skip=0; \
+ while read l; do \
+ case $$l in \
+ "## Demo") exit 0 ;; \
+ "<!"*) ;; \
+ "</"*) skip=1 ;; \
+ "<"*) skip=2 ;; \
+ esac; \
+ \
+ [ $$skip -eq 0 ] && echo "$$l"; \
+ [ $$skip -eq 1 ] && skip=0; \
+ done < README.md; \
+ ) > README.plain.md
+
# Checkers currently disabled for clang-tidy:
# - llvmlibc-restrict-system-libc-headers
# TODO: this is Linux-only for the moment, nice to fix eventually
--
2.35.1
These have packages covering all recent versions of CentOS Stream,
EPEL, Fedora, Mageia and OpenSUSE Tumbleweed.
Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com>
---
README.md | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/README.md b/README.md
index 2cd40c7..2d7ae3c 100644
--- a/README.md
+++ b/README.md
@@ -537,6 +537,10 @@ See also the [test logs](/builds/latest/test/).
make pkgs
+ * or use one of the unofficial
+ [repositories](https://copr.fedorainfracloud.org/coprs/sbrivio/passt/) for
+ CentOS Stream, EPEL, Fedora, Mageia and OpenSUSE Tumbleweed
+
* have a look at the _man_ page for synopsis and options:
man ./passt.1
@@ -581,6 +585,10 @@ See also the [test logs](/builds/latest/test/).
make pkgs
+ * or use one of the unofficial
+ [repositories](https://copr.fedorainfracloud.org/coprs/sbrivio/passt/) for
+ CentOS Stream, EPEL, Fedora, Mageia and OpenSUSE Tumbleweed
+
* have a look at the _man_ page for synopsis and options:
man ./pasta.1
--
2.35.1