Commit Graph

1915 Commits

Author SHA1 Message Date
Peter Korsgaard
e4a5ab3b31 Update for 2024.05.3
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-09-09 09:38:08 +02:00
Julien Olivain
056fe139e4 support/testing: package: gpsd: fix test by enabling python support
Commit 9696d27756 "package/gpsd: condition python stuff to the proper
kconfig option" changed the condition in which the gpsd python scripts
are installed. After that change, the "gpsfake" command (which is a
python script) is no longer found and the runtime test is failing.

This commit fixes the issue by reflecting the change in the runtime
test Buildroot configuration.

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit b6f4d79df2)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-09-03 21:30:33 +02:00
Julien Olivain
e0fcc10522 support/testing: package: mariadb: fix test configuration
The mysql virtual package was removed in commit 8708f3a23a
"package/mysql: drop virtual package".

The mariadb runtime test was authored before this mysql virtual
package removal, but was merged after it, in commit 5356754d1e
"support/testing: add mariadb runtime test". Due to this, this test
always failed with the error:

    Makefile.legacy:9: *** "You have legacy configuration in your .config! Please check your configuration.".  Stop.

This commit fixes the issue by removing the legacy
BR2_PACKAGE_MYSQL=y configuration directive.

Fixes:
https://gitlab.com/buildroot.org/buildroot/-/jobs/7540345406

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
(cherry picked from commit 3da3361a1b)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-09-03 20:22:01 +02:00
Julien Olivain
11dda46ff2 support/testing: add mariadb runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 5356754d1e)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-09-03 20:21:59 +02:00
Julien Olivain
eb39c88509 support/testing: add make runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 3e1e49069d)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-09-03 20:20:11 +02:00
Julien Olivain
7a63a484a2 support/testing/infra/emulator.py: add host load info in run log
Runtime tests running on test runners are subject to a high
variability in term of performance and timing. Most or the runtime
test commands are executed with a timeout, in pexpect.

Slow or very loaded test runners can use the timeout_multiplier to
globally increase those timeouts.

Some runtime test commands sometimes needs to poll or query a state,
rather than having purely sequential actions. It is sometimes hard to
know, from the test writer point of view, the maximum timeout to set, or
if a retry logic is needed.

In order to help debugging runtime tests failing due very slow
execution, this commit adds extra information on the host test runner
about its load in the run log. Relevant information are: number of
cpus, the load average at the moment the emulator is started and the
current timeout_multiplier.

Note: this change was discussed in:
https://lists.buildroot.org/pipermail/buildroot/2024-July/759119.html

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 7a6edbc7b9)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-09-01 16:46:17 +02:00
Julien Olivain
0712ca8326 support/testing: add 4th runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit b09ae4f045)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-31 16:19:58 +02:00
Julien Olivain
59f3f3222c support/testing: add iproute2 runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 91738f5093)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-31 12:08:58 +02:00
Julien Olivain
645d271e45 support/testing: add nmap runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit 5510d2890f)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-30 14:21:10 +02:00
Julien Olivain
1519399c31 support/testing: package: gpsd: fix gpsfake command line
The gpsfake command line has a typo (a missing space), which makes the
next gpsctl command to always fail.

This commit fixes the issue by adding the missing space.

Fixes:
https://gitlab.com/buildroot.org/buildroot/-/jobs/7391792948

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 49156a0fa4)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-29 15:38:47 +02:00
Julien Olivain
fa2f8886df support/testing: add gpsd runtime testing
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 9c8f6dc5e4)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-29 15:38:30 +02:00
Julien Olivain
fcaba8e25f support/testing: add mawk runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit f04a95f79f)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-29 12:18:06 +02:00
Marcus Hoffmann
210df8fc4a support/testing: add python-asn1crypto runtime test
Signed-off-by: Marcus Hoffmann <buildroot@bubu1.eu>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 2fe638af26)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-27 18:00:40 +02:00
Julien Olivain
df596e57b8 support/testing: fs: new btrfs runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit 009f9106d9)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-22 14:37:46 +02:00
Marcus Hoffmann
663b0c49f3 support/testing: add python-msgpack runtime test
Signed-off-by: Marcus Hoffmann <buildroot@bubu1.eu>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit d429d5d399)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-20 21:45:36 +02:00
Julien Olivain
2432073c23 support/testing: add attr runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit 2da40a2fd7)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-20 21:30:54 +02:00
Yann E. MORIN
10babcbf2d support/download/check-hash: accept hash files without terminating \n
Lots of people are using broken text editors that 1. do not naturally
terminate text files with a final \n as is customary in UNIX text files,
and 2. do not respect our .editorconfig settings, which explicitly
require adding that final newline. See this nice summary of what a text
file is (with references to applicable standards):

    https://stackoverflow.com/questions/12916352/shell-script-read-missing-last-line/12916758#12916758

So, it is not surprising that read does not read the last "line" of a
file, when said "line" does not end with a newline, because it is thus
not really a line.

Even though we do mandate actual text files, let's be a little bit lax
in this respect, because people may write packages, and their hash
files, in a br2-external tree, and they may not have our .editorconfig
in the directory heierarchy (e.g. if buildroot is a submodule of their
br2-external tree, or whatever).

mapfile does not suffer from this limitation, though, and correctly
reads all lines from a file, even the final line-that-is-not-a-line.

mapfile was introduced in bash 4.0, released on 2009-01-20, more than
15 years ago. Debian squeeze, released in 2011 already had bash 4.1.
Those are really ancient. So, it means we can indeed expect bash
version 4.0 or later; which means mapfile is available.

"It should be fine!"

Fixes: #15976

Reported-by: masonwardle@gmail.com
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit ac2e6b3927)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-20 19:19:18 +02:00
Yann E. MORIN
06706fa80d support/scripts/mkusers: accept user tables without terminating \n
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit 5d8445138b)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-20 19:18:16 +02:00
Peter Korsgaard
078f99a315 Update for 2024.05.2
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-14 10:54:30 +02:00
Julien Olivain
ea282e0e5f support/testing: new btrfs-progs runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 14b3ca20c9)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-12 22:20:28 +02:00
Raphaël Mélotte
d9bddddd23 support/testing: add new test for python-pymupdf
To give us a chance to catch runtime issues (such as missing
dependencies) more easily, add a test that writes a sample PDF file,
read it back and verify the text that was read.

Like similar packages that lead to a big
rootfs (e.g. python-botocore), this test requires a separate ext2
rootfs to avoid filling the default amount of RAM available
entirely (which would cause missing files from the root filesystem and
in turn, test failures).

Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 115e9493b8)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-12 11:21:01 +02:00
Julien Olivain
560fb72ff4 support/testing: new xfsprogs runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit 1fb08cdc85)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-12 09:31:33 +02:00
Julien Olivain
6c995cb48e support/testing: add mosquitto runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 3ba6f800fd)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-01 12:58:09 +02:00
Marcus Hoffmann
648478ee85 support/testing: add new python-ruamel-yaml runtime test
Signed-off-by: Marcus Hoffmann <buildroot@bubu1.eu>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 21da0df09d)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-07-31 17:25:15 +02:00
Julien Olivain
6d6e9fb45f support/testing: add kmod runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit 48790b4329)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-07-28 09:26:15 +02:00
Peter Korsgaard
2555f47788 Update for 2024.05.1
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-07-13 13:48:13 +02:00
Brandon Maier
e1c896b10f support/scripts/apply-patches: fallback $TAR to tar
Commit f77d698f83 changed apply-patches to
use $TAR instead of `tar`, but did not define a fallback if $TAR is not
defined. This results in an error when calling apply-patches.sh from
outside Buildroot's Makefile. Our team uses this script to setup local
checkouts of Buildroot package's with patches for development.

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
(cherry picked from commit 118c824b56)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-07-08 08:39:59 +02:00
Julien Olivain
db309fb4fa support/testing: add ntp runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit c986928aff)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-07-06 22:39:15 +02:00
Peter Korsgaard
6a1f9b3c0c Update for 2024.05
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-06-12 12:30:36 +02:00
Peter Korsgaard
893c39ba4c Update for 2024.02.3
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
(cherry picked from commit a73dd8f787)
[Peter: drop Makefile change]
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-06-10 10:30:41 +02:00
Brandon Maier
4dafb8b5c2 support/testing/infra/builder.py: fix missing $HOME during build
When running a test that uses host-python-setuptools using the Buildroot
Docker image, for example running the following command,

> ./utils/docker-run ./support/testing/run-tests -o output -s -k tests.package.test_python_pytest.TestPythonPy3Pytest

The build fails with the following error,

>   File "/home/blmaier/buildroot/output/TestPythonPy3Pytest/build/host-python-setuptools-69.2.0/setuptools/_distutils/dist.py", line 354, in _gen_paths
>     yield pathlib.Path('~').expanduser() / filename
>           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "/home/blmaier/buildroot/output/TestPythonPy3Pytest/host/lib/python3.11/pathlib.py", line 1385, in expanduser
>     raise RuntimeError("Could not determine home directory.")
> RuntimeError: Could not determine home directory.
>
> ERROR Backend subprocess exited when trying to invoke get_requires_for_build_wheel

Python setuptools is looking for $HOME but failing to find it.

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-06-06 20:57:22 +02:00
Yann E. MORIN
f77d698f83 support/scripts/apply-patches: use appropriate TAR
Note that here, it is in fact not really relevant. We only extract a
tarball, and we don't use any "modern" or GNU-only options like
--strip-components. However, for consistency it's better to use the same
tar everywhere.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: "Maier, Brandon L Collins" <Brandon.Maier@collins.com>
Reviewed-by: brandon.maier@collins.com
[Arnout: quote TAR="..."]
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-06-05 23:47:56 +02:00
Yann E. MORIN
c013836ae6 support/download/cvs: use appropriate TAR
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-06-05 23:39:13 +02:00
Yann E. MORIN
84309d7071 support/download/cvs: fix shellcheck
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-06-05 23:33:22 +02:00
Yann E. MORIN
86f6c7929e support/download/helpers: use appropriate TAR
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-06-05 23:31:36 +02:00
Peter Korsgaard
ed9288505c support/testing: sample_python_pybind.py: use python3 shebang
No functional change as we install a python symlink, but use python3 for
consistency with the other scripts.

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-06-05 22:34:41 +02:00
Brandon Maier
5806419b91 support/testing: add mtd test
Signed-off-by: Brandon Maier <brandon.maier@collins.com>
[yann.morin.1998@free.fr:
  - don't set an empty BR2_ENABLE_LOCALE_WHITELIST
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2024-06-01 21:35:19 +02:00
Julien Olivain
9a734700d7 support/testing: improve python-magic-wormhole test reliability
The python-magic-wormhole runtime test can randomly fail on slow
runners, see [1].

The issue is that the sending command is started first in background
_without_ redirecting its output to /dev/null. The receiving command
is started after, expecting the message to be printed on the first
standard output line. On slower systems, the sending command still
print messages while the test controller expect output from the
receiving command. The expected string finally appear, but not on the
first line. This makes the test fail.

This commit fixes the issue by redirecting all outputs (stdout, stderr)
of the sending command to /dev/null. To help even more, the sleep time
is moved from the emulator to the test controller. The sleep time is
also multiplied by the timeout_multiplier.

Fixes: [1]

[1] https://gitlab.com/buildroot.org/buildroot/-/jobs/6888691508

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Romain Naour <romain.naour@smile.fr>
2024-05-22 15:04:39 +02:00
Julien Olivain
1263adf7a9 support/config-fragments: fix bootlin-x86-i686-musl
Commit a8be4a04ad "support/config-fragments: replace
br-i386-pentium-mmx-musl" replaced this old toolchain by
bootlin-x86-i686-musl.

When using test-pkg with all toolchains, bootlin-x86-i686-musl is always
failing. The issue can be reproduced with for example:

    utils/test-pkg -a -p busybox

The issue can also be reproduced with a simple config like:

    cat > .config <<EOF
    BR2_i386=y
    BR2_TOOLCHAIN_EXTERNAL=y
    BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
    BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_I686_MUSL_STABLE=y
    BR2_PACKAGE_BUSYBOX=y
    EOF
    make olddefconfig
    make

Compilation fail with output:

    Cannot execute cross-compiler '/i586-linux-gcc'

This issue happen is because the toolchain can never be selected.

The config fragment [1] selects BR2_i386 alone.

The target architecture variant default to i586 if target
architecture is i386. See [2].

Finally, the generated toolchain options includes a depends on
BR2_i386 and !BR2_x86_i586, making the toolchain always ignored.
See [3].

This commit fixes the issue by adding BR2_x86_i686=y to the
bootlin-x86-i686-musl.config fragment as suggested by the
Bootlin toolchain fragment [4].

[1] a8be4a04ad/support/config-fragments/autobuild/bootlin-x86-i686-musl.config
[2] https://gitlab.com/buildroot.org/buildroot/-/blob/2024.02.2/arch/Config.in.x86?ref_type=tags#L38
[3] https://gitlab.com/buildroot.org/buildroot/-/blob/345ccb523e/toolchain/toolchain-external/toolchain-external-bootlin/Config.in.options#L5768-5770
[4] https://toolchains.bootlin.com/downloads/releases/toolchains/x86-i686/fragments/x86-i686--musl--stable-2024.02-1.frag

Signed-off-by: Julien Olivain <ju.o@free.fr>
[Romain: add the link to the Bootlin toolchain fragment]
Signed-off-by: Romain Naour <romain.naour@smile.fr>
2024-05-22 13:55:43 +02:00
Peter Korsgaard
71c9da92b2 support/testing/tests/package/test_python_hid.py: drop unneeded explicit hidapi package
The python-hid package got tweaked when applied in commit 4432b08790
(package/python-hid: new package) so it now selects
BR2_PACKAGE_HIDAPI, and we therefore do not need to explicitly enable
hidapi in the test.

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-12 09:04:48 +02:00
Brandon Maier
23ef540288 support/testing: add zip test
Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-11 08:46:27 +02:00
Francois Perrad
9f84196986 package/lua-lightningmdb: new package
Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-10 22:01:48 +02:00
Julien Olivain
92ae6d75c1 support/testing: add gnuplot runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-10 14:03:10 +02:00
Yann E. MORIN
72bcff3081 support/download: force fetching tags
Our git download backend switches the remote of our local clone, and
fetches all refs and tags from that remote.

When the local clone has a tag fetched from another remote, and the new
remote also has a tag by the same name, and that tag points to another
commit, then git refuses to fetch the new tag and exits in error, as it
considers that the new tag would clobber the existing one. This is safe
and sane behaviour when run interactively with a human that can take a
decision.

However, in our case, we don't care about any tags that were present
before, as only the last one makes sense in our case: the one from the
remote the user has requested for the current build.

Tell git to forcefully pull tags, even if they would clobber existing
ones.

Note that, although this changes the git backend, it does not change the
content of generated archives, so we do not need to bump the suffix
version.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:45:14 +02:00
Yann E. MORIN
8eea9f5783 support/testing: update hashes for generated archives
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:45:09 +02:00
Yann E. MORIN
b11956fb66 support/dependencies: require tar >= 1.35
We can't stay in the past forever and ever...

Since tar 1.35, the way some fields (devmajor and devminor) are stored
has changed. These fields exist for each file in the tarball, but only
used for device nodes. In previous versions of GNU tar, they were set to
zero; since 1.35, they are set to empty.

Although this doesn't change anything about the content of the tarball,
and it will be extracted in exactly the same way regardless of the tar
version used for extracting, it does change the hash of the tarball.
Therefore, we have to
- make sure that the correct version of tar is used;
- update the format version so that the filename is different from
  before.

Increment all BR_FMT_VERSION by one.

Require tar >= 1.35 instead of < 1.35.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
[Arnout: also increment BR_FMT_VERSION and extend the commit message]
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:45:07 +02:00
Yann E. MORIN
2c3c1fa788 support/testing: update git tests
Replace the names of the tarballs in the hash files to -git3.

We don't have any symlinks in the tests, so the hashes themselves don't
change.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:45:01 +02:00
Yann E. MORIN
3035fc23de support/download: even more reproducible archives (until next time)
Currently, when we generate archives, we rely on a few assumptions and
mechanisms to ensure reproducilibity. So far, we mostly accounted for
the content (i.e. content, filenames, and path) of the files we
archived, and this is OK (git and svn should provide reproducilbe
content by design, and cargo and go vendoring are also supposed to be
generating reproducible content.

However, tarballs do not only contain the content of the files; they
also have a few metadata about those files. Beyond filenames and paths,
which are already reproducible, there is the timestamp, the user and
group name and ID. Those are also accounted for and made reproducible.

The final touch (so far!) is that files have access rights (aka mode),
and those too are stored in tarballs. So far we accounted for those by
ensuring that Buildroot would always run under a known umask, thus
generating files with reproducible modes.

That falls short in one case that we did not envision, though: a shared
download directory, where extended attributes are set to provide a
default ACL that is permissive, to allow two or more users (with
different uid and gid) to all read and write to such a directory. This
is trivially achieved with something like:

    $ mkdir -p "${BR2_DL_DIR}"
    $ setfacl -m 'default:user::rwx' "${BR2_DL_DIR}"
    $ setfacl -m 'default:group::rwx' "${BR2_DL_DIR}"
    $ setfacl -m 'default:other::rwx' "${BR2_DL_DIR}"

This has the effect that:

  - files below BR2_DL_DIR are all set with user, group, and world read
    and write access,
  - files executable by the owner will also be group and world
    executable,
  - directories are user, group, and world readable, writable, and
    searchable.

This means that all the archives we generate from files in BR2_DL_DIR
will have modes that are different from those generated on other systems,
where only the traditional umask is used.

There are various solutions to solve that issue:

  - detect the situation and abort: that's not nice, because users have
    a legitimiate reason to want to share that directory,

  - find a solution for each affected download mechanism: git, svn, hg,
    cvs, bzr... and for each of the affected vendoring mechanism: go and
    cargo [0]; this is not nice, because it means a lot of repetition,
    with the risk that they diverge over time (e.g. one is fixed for a
    newer issue, while the others are left out due to an oversight...)

  - find a single, common solution that works in all cases, whatever the
    download mechanism and/or vendoring: this is the best, because we
    can extend and fix it once and everything else benefits from it.

We obviously go for the third option.

The common solution is rather simple. When creating the tarball in
support/download/helpers, give an option to tar to set the group and
other permissions to those of the user, but without write permission.

This implies that we must bump the version-suffix for the download
backends [1] and for the vendoring post-processes. It also implies that
the hash may change, under the following circumstances:

- Symlinks normally have permissions 0777 (because symlink permissions
  are in fact meaningless). They will now have permission 0755 in the
  tarball.
- If the original tarball (for vendored go and cargo packages) contained
  files that are readable or executable by owner but not by group or
  other, they will now be readable resp. executable by group and other
  too. Note that for writeable it is not the case, because those were
  already handled by our 0022 umask (which makes them not writeable by
  group and other).

Because the hash may change, we need to update the BR_FMT_VERSION for
everything that creates tarballs. Go and cargo didn't have one up to
now, the the previous commit added the possibility to give one. The ones
for git and svn have to be updated. Since it is now possible to have a
suffix for both the VCS and the post-processing, change the suffix to
something more descriptive than "-brX", i.e. -git3 for git, -go1 for
golang, etc.

The hash updates and filename changes will be handled in a follow-up
commit.

[0] Note however that the vendoring is currently not done in a
sub-directory of BR2_DL_DIR, but the cargo and go caches are located
there. Files that get copied from there to the vendoring area would be
tainted as well, and thus we want to address that situation as well.

[1] we currently do not have a CVS version suffix, because we do not
guarantee the reproducilibity of CVS archives (we can't); for hg, we are
currently using hg's own archive tool, and presumably that does not have
the mode issue because it is not using the checked-out files. Still,
doing the mode fix in a single location will help extend those two
backends in the future (if that ever happens...).

Reported-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:44:59 +02:00
Yann E. MORIN
32dcc92655 *: update filename for git-download packages
The version suffix for the git-generated archives has changed, so update
the filenames accordingly in the hash files. The content of the archives
has not changed, though.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:44:55 +02:00
Yann E. MORIN
a6182475b0 support/testing: add test for export-subst support in git-download
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:44:52 +02:00