Commit graph

754 commits

Author SHA1 Message Date
Thomas Haller
2c9faea63c
contrib,tools: move "nm-in-container.sh" script to "tools"
This script seems very useful to me. Give it a more prominent place and
move it out from "contrib/scripts". Also do some further renaming.
2023-03-20 08:59:59 +01:00
Thomas Haller
a6802cfa74
nm-in-container: disable handling of "/etc/resolv.conf" in container and use 8.8.8.8.
By default, podman bind mounts a "/etc/resolv.conf" file. That prevents
NetworkManager (inside the container) to update the file, which leads to
warnings in the log and certain NM-ci tests won't pass due to that.

Disable handling of "/etc/resolv.conf" in podman. But also pre-deploy a
default resolv.conf, with the google name server 8.8.8.8.  I don't
understand why, but even with "--dns=none", writing "/etc/resolv.conf"
while building the container doesn't take effect.  Instead, write a
usable "/etc/resolv.conf" from "/etc/rc.d/rc.local".
2023-03-16 08:33:00 +01:00
Thomas Haller
d453188ed2
nm-in-container: add nm-deploy.sh script for reinstalling NetworkManager 2023-03-15 16:50:57 +01:00
Thomas Haller
0c233fb216
nm-in-container: symlink NM/NM-ci directories in nm-in-container 2023-03-15 16:50:57 +01:00
Thomas Haller
9bf193f1a8
contrib: escape shell arguments in "nm-setup-git.sh" output 2023-03-09 16:56:18 +01:00
Thomas Haller
3c548dd081
release: improve hint about documentation in "release.sh"
A "minor" release can still be the latest release. It depends
on which minor release you do. The script isn't smart enough
to understand the difference, so make the hint a bit clearer.
2023-03-09 09:50:03 +01:00
Thomas Haller
b88700bd4b
release: fix honoring $ORIGIN environment variable 2023-03-09 09:05:21 +01:00
Thomas Haller
acd895e1f7
contrib: update history and hints in "nm-in-container.sh" script
Calling `nm-env-prepare.sh --prefix eth -i 1 && nmcli device connect eth1` has
a race, where NetworkManager didn't see the interface yet. Add a sleep.
2023-03-08 11:22:52 +01:00
Thomas Haller
d0732962d2
contrib: install more packages in "nm-in-container.sh" 2023-03-03 15:42:05 +01:00
Thomas Haller
713de313dc
contrib: add usage comment to "git-subtree-reimport.sh" 2023-03-03 13:45:31 +01:00
Thomas Haller
004464cfbd
contrib: update "configure-for-system.sh" and start build
"configure-for-system.sh" is supposed to be in sync with
NetworkManager.spec. Update for the recent changes.

Also add a make/ninja call at the end. Almost always we want to build
after the configure.
2023-02-14 09:15:39 +01:00
Thomas Haller
786ebecee9
contrib/rpm: minor cleanup of "NetworkManager.spec"
Reorder ppp arguments so that they make more sense and are consistent
with the autotools code.
2023-02-14 09:03:31 +01:00
Thomas Haller
5973e83160
systemd: merge branch systemd into main
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1529
2023-02-13 15:33:02 +01:00
Thomas Haller
a798b4f3f6
contrib/release: fix version in import-docs hint message 2023-02-13 10:24:08 +01:00
Thomas Haller
06dc84a563
contrib/rpm: fix "--enable-ppp" flag to build without ppp
[thaller@redhat.com: I introduced this bug when taking the original patch].

Fixes: 820f6f3a4a ('contrib/rpm: sync obsoletes_{initscripts_updown,ifcfg_rh} version')
2023-02-10 10:09:27 +01:00
Thomas Haller
820f6f3a4a
contrib/rpm: sync obsoletes_{initscripts_updown,ifcfg_rh} version
Initially, when we obsoleted {initscripts_updown,ifcfg_rh}, the package
versions that we build from this upstream spec file differed from what
we put into Fedora/RHEL.

By now, this is long gone, and for upstream package builds we don't care
to accurately track the version, when using upstream/copr builds. Just
sync the version to what they are in Fedora/RHEL.
2023-02-10 10:05:03 +01:00
Stewart Smith
2598ec3a1f
contrib/rpm: fix building without ppp
We need to explicitly say we don't want PPP as the default is
that we do want to build with PPP.

https://src.fedoraproject.org/rpms/NetworkManager/pull-request/13
2023-02-10 09:53:15 +01:00
Yaakov Selkowitz
42cd422f18
contrib/rpm: fix flatpak build
https://src.fedoraproject.org/rpms/NetworkManager/pull-request/13
2023-02-10 09:51:01 +01:00
Thomas Haller
46f39829d9
contrib: accept ssh:// git url for origin in "nm-setup-git.sh" 2023-02-09 19:22:37 +01:00
Thomas Haller
f6805debee
contrib: avoid using "sudo" in REQUIRED_PACKAGES scripts
It's often not installed, and usually we are already root. Avoid
using sudo.
2023-02-08 09:51:25 +01:00
Thomas Haller
0ee784f1f0
contrib: add "git-backport-merge" script for backporting merge commits in NetworkManager
On the main branch, we commonly rebase our WIP branches to latest HEAD,
before merging them with "--no-ff". The effect is to have a merge commit
that acts as a parentheses around the set of patches.

When backporting such a branch, we should preserve that structure and
take the merge commit too. We should must use `git cherry-pick -x` to
record the commit IDs of the original patch.

This script helps with that.

Also hook it up in "contrib/scripts/nm-setup-git.sh" to create an alias
for it. This alias has the advantage, of fetching the latest version of
the script from "main" or "origin/main", so it also works on older
branches.
2023-02-03 10:37:35 +01:00
Thomas Haller
362a96ff52
contrib: setup "systemd" in makerepo.sh script 2023-02-01 11:05:13 +01:00
Thomas Haller
00affc7b6f
contrib/release.sh: add hint about publishing documentation on website 2023-01-30 09:32:01 +01:00
Thomas Haller
dba2fb5fff
gitlab-ci: use "meson test" for running unit tests
It seems that `meson test` is preferred over `ninja test`.  Also, pass
"--print-errorlogs" to meson, and pass "-v" to the build steps.

Note that `ninja test` already ends up calling `meson test
--print-errorlogs`, but it doesn't use "-v", so the logs are truncated.
2023-01-30 08:19:49 +01:00
Thomas Haller
13d9cf75ed
gitlab-ci: rerun meson test on failure with debugging
Like done for autotools. First we run the test without debugging option.
If it fails, we run it again to possibly trigger the failure again and
get better logs.
2023-01-30 08:19:49 +01:00
Thomas Haller
3f2ad76363
gitlab-ci: explicitly set "NMTST_DEBUG=debug,..." for second debug run
"debug" is implied when setting NMTST_DEBUG, but not specifying
"no-debug". This change has thus no effect, but it seems clearer to be
explicit.

The "debug" flag affects nmtst_is_debug(). Note that tests *must* not
result in different code paths based on debug, they may only

 1) print more debug logging
 2) do more assertion checks.

Having more assertion checks can result in different outcome of the
test, that is, that the additional assertion fails first. That is
acceptable, because failing earlier is possibly closer to the issue and
helps debugging. Also, when the additional failure is fixed and passes,
we still will fail at the assertion we are trying to debug.

In particular, an access to nmtst_get_rand*()/nmtst_rand*() must not
depend on nmtst_is_debug(), because then different randomized paths
are taken based on whether debugging is enabled.
2023-01-30 08:18:45 +01:00
Thomas Haller
3bad3f8b24
gitlab-ci: fix randomizing tests in "nm-ci-run.sh"
The code was just wrong. Usually in gitlab-ci, NMTST_SEED_RANDOM is
unset, so the previous code  would not have set it. Which means that our
tests run with NMTST_SEED_RANDOM="0".

Fuzzing (or randomizing tests) is very useful, we should do that for the
unit tests that run in gitlab-ci. Fix this.

But don't let the test choose a random number. Instead, let the calling
script choose it. That is, because we might run the tests more than once
(without debugging and no valgrind; in case of failure return with
debugging; with valgrind). Those runs should use the same seed.

This fixes commit 70487d9ff8 ('ci: randomize tests during our CI'),
but as fixing randomization can break previously running tests, we may
only want to backport this commit after careful evaluation.
2023-01-30 08:18:45 +01:00
Thomas Haller
fce8e572d0
contrib/copr: better detect git-ref in "nm-copr-build.sh" 2023-01-24 14:58:52 +01:00
Thomas Haller
36ad5cbb3b
contrib/rpm: fix condition in "NetworkManager.spec" (3)
Fixes: 096b9955d6 ('contrib/fedora: make "lto" in the spec file configurable')
Fixes: 7a62845424 ('contrib/rpm: fix condition in "NetworkManager.spec"')
2023-01-24 12:29:04 +01:00
Thomas Haller
13dfdaf3a0
contrib/rpm: fix condition in "NetworkManager.spec" (2)
Fixes: 096b9955d6 ('contrib/fedora: make "lto" in the spec file configurable')
Fixes: 7a62845424 ('contrib/rpm: fix condition in "NetworkManager.spec"')
2023-01-24 11:46:44 +01:00
Thomas Haller
7a62845424
contrib/rpm: fix condition in "NetworkManager.spec"
Fixes: 096b9955d6 ('contrib/fedora: make "lto" in the spec file configurable')
2023-01-24 11:31:54 +01:00
Thomas Haller
096b9955d6
contrib/fedora: make "lto" in the spec file configurable
When we build a copr image, we run the "nm-copr-build.sh" script.
That script, should honor "LTO=0|1|" to explicitly enable/disable
LTO. Since the copr script only builds a SRPM, which then gets build
we need that the default LTO flag in the SRPM is templated.

Fixes: 0566e9dc63 ('contrib: support disabling "LTO" in "nm-copr-build.sh"')
2023-01-24 10:36:34 +01:00
Thomas Haller
0566e9dc63
contrib: support disabling "LTO" in "nm-copr-build.sh"
The "nm-copr-build.sh" script is run by our copr to generate the SRPM of
NetworkManager (via `curl ... | bash`).

Building with LTO takes a long time, for testing it can be nice to disable
that. Add an environment variable for that. It can be used when manually
building an RPM in copr.
2023-01-24 08:46:14 +01:00
Thomas Haller
128c000f0c
contrib/fedora: install "python36-gobject" when building with meson on centos7
With the meson build configuration, there is obviously python3 installed
and in the path. The build script will pick that up as preferred python.

However, we will also need working pygobject to build the documentation.
But we only have that for python2 installed. Fix that, by installing
"python36-gobject".
2023-01-23 21:39:00 +01:00
Thomas Haller
ea16997c4a
contrib/fedora: disable "qt" build of examples for spec file
Otherwise, we require a C++ compiler, but our build requirements
don't install g++. So build will fail.
2023-01-23 18:24:56 +01:00
Thomas Haller
a9cb294b73
contrib/fedora: explicitly set "pppd" path in configure script
We have "BuildRequires: ppp-devel". While in Fedora 37 that has a
dependency on "ppp" package, that is not the case on Centos7. I didn't
test others, but the point is it's not always there.

"/usr/sbin/pppd" is provided by "ppp" package, and we might not have it
installed via the build requirements. But we only need it to detect the
path, which is not necessary on RHEL/Fedora. Just set the path
explicitly with the respective configure option.
2023-01-23 18:24:56 +01:00
Lubomir Rintel
ff472d8e59 rpm: don't BR dhcp-client
We don't need the builder to install dhcp-client to build with support for
it. Requiring it to be installed it not great because it has runtime
implications -- it installs a dispatcher script.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1503
2023-01-17 13:56:57 +01:00
Thomas Haller
ae7e7bf3d3
contrib: add "reexec" step to "nm-in-container.sh"
Just a shortcut for reset and exec.
2023-01-05 08:59:10 +01:00
Thomas Haller
897a96da7b
contrib: default to run same fedora version in nm-in-container.sh as host
If the out host runs Fedora, it's most useful that the container is the
same Fedora version. Detect it.
2023-01-05 08:17:24 +01:00
Thomas Haller
81527052d7
contrib: install more package in "nm-in-container.sh"
NM-ci wants to install a lot of packages when running the first test.
In particular, NM-ci has no nice script that lists all the dependencies,
so it's not immediately clear which packages are required.

Still, install some of those packages so that they are already present
when running the first NM-ci test.
2023-01-04 21:40:00 +01:00
Thomas Haller
ea80a4a813
contrib/scripts: update "nm-copr-build.sh" script to use new nm-git-bundle 2022-12-20 11:38:32 +01:00
Thomas Haller
8febb15bfe
contrib: fix duplicate package in "contrib/scripts/nm-in-container.sh" script 2022-12-14 10:07:23 +01:00
Thomas Haller
c33a95e6f6
gitlab-ci: ignore failure to install "python-setuptools" on debian
python-setuptools is now gone from debian:testing ([1], [2]):

    Package python-setuptools is not available, but is referred to by another package.
    This may mean that the package is missing, has been obsoleted, or
    is only available from another source

    E: Package 'python-setuptools' has no installation candidate

This package is entirely optional. Fix the failure by ignoring any failure to
install the package.

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=938168
[2] https://tracker.debian.org/news/1391360/python-setuptools-removed-from-testing/
2022-11-29 19:54:19 +01:00
Thomas Haller
3fb8c0f614
clang-format: reformat code with clang-format 15.0.4-1.fc37
This is the version shipped in Fedora 37. As Fedora 37 is now out, the
core developers switch to it. Our gitlab-ci will also use that as base
image for the check-{patch.tree} tests and to generate the pages. There
is a need that everybody agrees on which clang-format version to use,
and that version should be the one of the currently used Fedora release.

Also update the used Fedora image in "contrib/scripts/nm-code-format-container.sh"
script.

The gitlab-ci still needs update in the following commit. The change
in isolation will break the "check-tree" test.
2022-11-23 09:17:21 +01:00
Thomas Haller
ad7d5887cd
all: cleanup close() handling and clarify nm_close()/nm_close_with_error()
Cleanup the handling of close().

First of all, closing an invalid (non-negative) file descriptor (EBADF) is
always a serious bug. We want to catch that. Hence, we should use nm_close()
(or nm_close_with_error()) which asserts against such bugs. Don't ever use
close() directly, to get that additional assertion.

Also, our nm_close() handles EINTR internally and correctly. Recent
POSIX defines that on EINTR the close should be retried. On Linux,
that is never correct. After close() returns, the file descriptor is
always closed (or invalid). nm_close() gets this right, and pretends
that EINTR is a success (without retrying).

The majority of our file descriptors are sockets, etc. That means,
often an error from close isn't something that we want to handle. Adjust
nm_close() to return no error and preserve the caller's errno. That is
the appropriate reaction to error (ignoring it) in most of our cases.

And error from close may mean that there was an IO error (except EINTR
and EBADF). In a few cases, we may want to handle that. For those
cases we have nm_close_with_error().

TL;DR: use almost always nm_close(). Unless you want to handle the error
code, then use nm_close_with_error(). Never use close() directly.

There is much reading on the internet about handling errors of close and
in particular EINTR. See the following links:

https://lwn.net/Articles/576478/
https://askcodes.net/coding/what-to-do-if-a-posix-close-call-fails-
https://www.austingroupbugs.net/view.php?id=529
https://sourceware.org/bugzilla/show_bug.cgi?id=14627
https://news.ycombinator.com/item?id=3363819
https://peps.python.org/pep-0475/
2022-10-25 13:12:48 +02:00
Thomas Haller
c7bc4e0c67
checkpatch: suggest nm_memdup() instead of g_memdup() 2022-10-18 20:31:21 +02:00
Thomas Haller
6cbad14721
contrib: discourage g_type_class_add_private() via "checkpatch.pl"
Our GObject structs should be internal API. In which case, we should
embed the private data in the struct themselves (`_priv`) and use the
_NM_GET_PRIVATE() macro. The advantage is better debugability because
following G_TYPE_INSTANCE_GET_PRIVATE() in the debugger is very
cumbersome. Another (less relevant) advantage is better performance.

Thus, warn about uses of g_type_class_add_private() and
G_TYPE_INSTANCE_GET_PRIVATE().

Note that if the struct and is in a header file (which is usually only
necessary when subclassing the type), then the private data should be
an opaque pointer `_priv` instead, and we should use the _NM_GET_PRIVATE_PTR()
macro. In that case, the use of g_type_class_add_private() and
G_TYPE_INSTANCE_GET_PRIVATE() is correct and the warning is false. But
this is only a warning, for the unusual case where we have deep object
hierarchies.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1396
2022-10-03 17:23:29 +02:00
Thomas Haller
a80bb943b1
contrib: add entries to bash_history for nm-in-container.sh script 2022-09-28 18:35:48 +02:00
Thomas Haller
1fa9db0705
contrib: add entries to bash_history for nm-in-container.sh script 2022-09-28 17:51:15 +02:00
Thomas Haller
2f8bb7c86a
contrib: handle non-existing files with nm-code-format.sh -u
"-u" calls `git diff -name-only $UPSTREAM` to get a list of files.
However, if $UPSTREAM contains a file that doesn't exist in the current
checkout, we get a non-existing file name and clang-format will fail.

Avoid that, by filtering only files that exist.

Also, pass "--no-renames" option to git-diff.
2022-09-23 15:32:28 +02:00