From 577d68e7cb75056d33e3d1bbbd0dc83f7f0a9113 Mon Sep 17 00:00:00 2001 From: Jan Macku Date: Thu, 18 May 2023 13:25:43 +0200 Subject: [PATCH] systemd-239-76 Resolves: #2179309,#2190151 --- ...op-requirements-on-linting-workflows.patch | 42 +++ ...gathering-metadata-for-source-git-au.patch | 51 +++ ...-the-source-git-automation-commit-li.patch | 103 ++++++ ...-and-forward-dummy-arguments-instead.patch | 31 ++ ...S-devices-from-initramfs-in-QEMU-tes.patch | 45 +++ ...y-set-the-base-when-converting-recor.patch | 37 ++ ...ning-the-dmesg.txt-file-if-not-reque.patch | 68 ++++ ...a-couple-of-tests-for-systemd-pstore.patch | 341 ++++++++++++++++++ systemd.spec | 20 +- 9 files changed, 737 insertions(+), 1 deletion(-) create mode 100644 0912-ci-Mergify-drop-requirements-on-linting-workflows.patch create mode 100644 0913-ci-workflow-for-gathering-metadata-for-source-git-au.patch create mode 100644 0914-ci-first-part-of-the-source-git-automation-commit-li.patch create mode 100644 0915-pstore-fix-crash-and-forward-dummy-arguments-instead.patch create mode 100644 0916-test-Disable-LUKS-devices-from-initramfs-in-QEMU-tes.patch create mode 100644 0917-pstore-explicitly-set-the-base-when-converting-recor.patch create mode 100644 0918-pstore-avoid-opening-the-dmesg.txt-file-if-not-reque.patch create mode 100644 0919-test-add-a-couple-of-tests-for-systemd-pstore.patch diff --git a/0912-ci-Mergify-drop-requirements-on-linting-workflows.patch b/0912-ci-Mergify-drop-requirements-on-linting-workflows.patch new file mode 100644 index 0000000..e10ce1f --- /dev/null +++ b/0912-ci-Mergify-drop-requirements-on-linting-workflows.patch @@ -0,0 +1,42 @@ +From d0e8ca2dcc1467a9e28c569e0dc608e5426bae79 Mon Sep 17 00:00:00 2001 +From: Jan Macku +Date: Mon, 24 Apr 2023 15:25:02 +0200 +Subject: [PATCH] ci(Mergify): drop requirements on linting workflows + +CodeQL and DifferentialShellCheck workflows aren't run for all PRs on all branches. +This results in Mergify incorrectly labeling PRs with `needs-ci` label. +Lets drop the requirements on these workflows. + +rhel-only + +Related: #2179309 +--- + .mergify.yml | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/.mergify.yml b/.mergify.yml +index a5eed6a82a..624eb7291d 100644 +--- a/.mergify.yml ++++ b/.mergify.yml +@@ -11,10 +11,6 @@ pull_request_rules: + - -check-success=build (stream8, GCC_ASAN) + # CentOS Stream CI + - -check-success=CentOS CI (CentOS Stream 8) +- # CodeQL +- - -check-success=CodeQL +- # Other +- - -check-success=Differential ShellCheck + actions: + label: + add: +@@ -30,10 +26,6 @@ pull_request_rules: + - check-success=build (stream8, GCC_ASAN) + # CentOS Stream CI + - check-success=CentOS CI (CentOS Stream 8) +- # CodeQL +- - check-success=CodeQL +- # Other +- - check-success=Differential ShellCheck + actions: + label: + remove: diff --git a/0913-ci-workflow-for-gathering-metadata-for-source-git-au.patch b/0913-ci-workflow-for-gathering-metadata-for-source-git-au.patch new file mode 100644 index 0000000..c1a27a7 --- /dev/null +++ b/0913-ci-workflow-for-gathering-metadata-for-source-git-au.patch @@ -0,0 +1,51 @@ +From a81ace51e1efa2313fcad18f2ef5c6c6cd167240 Mon Sep 17 00:00:00 2001 +From: Jan Macku +Date: Mon, 24 Apr 2023 15:13:08 +0200 +Subject: [PATCH] ci: workflow for gathering metadata for source-git automation + +Workflow gathers metadata like pull request numbers and information about commits. +This metadata is used for commit validation and other actions. +This workflow also triggers for rest of the source-git automation workflows. + +rhel-only + +Related: #2179309 +--- + .github/workflows/gather-metadata.yml | 28 +++++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) + create mode 100644 .github/workflows/gather-metadata.yml + +diff --git a/.github/workflows/gather-metadata.yml b/.github/workflows/gather-metadata.yml +new file mode 100644 +index 0000000000..f432f41811 +--- /dev/null ++++ b/.github/workflows/gather-metadata.yml +@@ -0,0 +1,28 @@ ++name: Gather Pull Request Metadata ++on: ++ pull_request: ++ types: [ opened, reopened, synchronize ] ++ branches: ++ - main ++ - rhel-8.*.0 ++ ++permissions: ++ contents: read ++ ++jobs: ++ gather-metadata: ++ runs-on: ubuntu-latest ++ ++ steps: ++ - name: Repository checkout ++ uses: actions/checkout@v3 ++ ++ - id: Metadata ++ name: Gather Pull Request Metadata ++ uses: redhat-plumbers-in-action/gather-pull-request-metadata@v1 ++ ++ - name: Upload artifact with gathered metadata ++ uses: actions/upload-artifact@v3 ++ with: ++ name: pr-metadata ++ path: ${{ steps.Metadata.outputs.metadata-file }} diff --git a/0914-ci-first-part-of-the-source-git-automation-commit-li.patch b/0914-ci-first-part-of-the-source-git-automation-commit-li.patch new file mode 100644 index 0000000..4961ca3 --- /dev/null +++ b/0914-ci-first-part-of-the-source-git-automation-commit-li.patch @@ -0,0 +1,103 @@ +From 7e0eb456a99229d19b8e42491c1ddb7b8050903f Mon Sep 17 00:00:00 2001 +From: Jan Macku +Date: Mon, 24 Apr 2023 15:15:00 +0200 +Subject: [PATCH] ci: first part of the source-git automation - commit linter + +Add a GitHub Workflow that is triggered on `workflow_run` events. +It uses metadata provided by `redhat-plumbers-in-action/gather-pull-request-metadata` +GitHub Action to get the PR number and the commit metadata. +The commit metadata is then used to check if the commit message contains +all required information (tracker and upstream reference). GitHub Action +responsible for commit verification `redhat-plumbers-in-action/advanced-commit-linter` +is configured via the `advanced-commit-linter.yml` file. + +rhel-only + +Related: #2179309 +--- + .github/advanced-commit-linter.yml | 23 +++++++++++ + .github/workflows/source-git-automation.yml | 45 +++++++++++++++++++++ + 2 files changed, 68 insertions(+) + create mode 100644 .github/advanced-commit-linter.yml + create mode 100644 .github/workflows/source-git-automation.yml + +diff --git a/.github/advanced-commit-linter.yml b/.github/advanced-commit-linter.yml +new file mode 100644 +index 0000000000..491836abbb +--- /dev/null ++++ b/.github/advanced-commit-linter.yml +@@ -0,0 +1,23 @@ ++policy: ++ cherry-pick: ++ upstream: ++ - github: systemd/systemd ++ - github: systemd/systemd-stable ++ exception: ++ note: ++ - rhel-only ++ tracker: ++ - keyword: ++ - 'Resolves: #?' ++ - 'Related: #?' ++ - 'Reverts: #?' ++ issue-format: ++ - '\d+$' ++ url: 'https://bugzilla.redhat.com/show_bug.cgi?id=' ++ - keyword: ++ - 'Resolves: ' ++ - 'Related: ' ++ - 'Reverts: ' ++ issue-format: ++ - 'RHEL-\d+$' ++ url: 'https://issues.redhat.com/browse/' +diff --git a/.github/workflows/source-git-automation.yml b/.github/workflows/source-git-automation.yml +new file mode 100644 +index 0000000000..140f21b116 +--- /dev/null ++++ b/.github/workflows/source-git-automation.yml +@@ -0,0 +1,45 @@ ++name: Source git Automation ++on: ++ workflow_run: ++ workflows: [ Gather Pull Request Metadata ] ++ types: ++ - completed ++ ++permissions: ++ contents: read ++ ++jobs: ++ download-metadata: ++ if: > ++ github.event.workflow_run.event == 'pull_request' && ++ github.event.workflow_run.conclusion == 'success' ++ runs-on: ubuntu-latest ++ ++ outputs: ++ pr-metadata: ${{ steps.Artifact.outputs.pr-metadata-json }} ++ ++ steps: ++ - id: Artifact ++ name: Download Artifact ++ uses: redhat-plumbers-in-action/download-artifact@v1 ++ with: ++ name: pr-metadata ++ ++ commit-linter: ++ needs: [ download-metadata ] ++ runs-on: ubuntu-latest ++ ++ outputs: ++ validated-pr-metadata: ${{ steps.commit-linter.outputs.validated-pr-metadata }} ++ ++ permissions: ++ statuses: write ++ pull-requests: write ++ ++ steps: ++ - id: commit-linter ++ name: Lint Commits ++ uses: redhat-plumbers-in-action/advanced-commit-linter@v1 ++ with: ++ pr-metadata: ${{ needs.download-metadata.outputs.pr-metadata }} ++ token: ${{ secrets.GITHUB_TOKEN }} diff --git a/0915-pstore-fix-crash-and-forward-dummy-arguments-instead.patch b/0915-pstore-fix-crash-and-forward-dummy-arguments-instead.patch new file mode 100644 index 0000000..d978500 --- /dev/null +++ b/0915-pstore-fix-crash-and-forward-dummy-arguments-instead.patch @@ -0,0 +1,31 @@ +From f86a51500b5aa9288dbb2800e0a1f63ad863bd8f Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Wed, 26 Apr 2023 20:07:10 +0200 +Subject: [PATCH] pstore: fix crash and forward dummy arguments instead of NULL + +[msekleta: in our version of systemd "const char path*" argument of +path_join() can't be NULL. Here we don't really want any subdirs paths +passed into move_file(), but we can't just pass NULL pointers because +they will be forwarded to path_join(). Hence, let's just pass "/" +instead.] + +rhel-only + +Related: #2190151 +--- + src/pstore/pstore.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/pstore/pstore.c b/src/pstore/pstore.c +index 9f61e8f7f8..5335c9f92d 100644 +--- a/src/pstore/pstore.c ++++ b/src/pstore/pstore.c +@@ -366,7 +366,7 @@ static int run(int argc, char *argv[]) { + + /* Move left over files out of pstore */ + for (size_t n = 0; n < list.n_entries; n++) +- (void) move_file(&list.entries[n], NULL, NULL); ++ (void) move_file(&list.entries[n], "/", "/"); + + return 0; + } diff --git a/0916-test-Disable-LUKS-devices-from-initramfs-in-QEMU-tes.patch b/0916-test-Disable-LUKS-devices-from-initramfs-in-QEMU-tes.patch new file mode 100644 index 0000000..a2df2e4 --- /dev/null +++ b/0916-test-Disable-LUKS-devices-from-initramfs-in-QEMU-tes.patch @@ -0,0 +1,45 @@ +From 6fdc5f71ee28829bdedb159e7d138f7a1b447fb2 Mon Sep 17 00:00:00 2001 +From: Filipe Brandenburger +Date: Wed, 13 Nov 2019 10:46:08 -0800 +Subject: [PATCH] test: Disable LUKS devices from initramfs in QEMU tests + +We currently use the host's kernel and initramfs in our QEMU tests. + +If the host is running on an encrypted LUKS partition, then the initramfs +will have a crypttab setup looking for the particular root disk it needs to +encrypt before booting into the system. + +However, this disk obviously doesn't exist in our QEMU VM, so it turns out +our tests end up waiting for this device to become available, which will +never actually happen, and boot hangs for 90s until that service times out. + +[*** ] A start job is running for /dev/disk/by-uuid/01234567-abcd-1234-abcd-0123456789ab (20s / 1min 30s) + +In order to prevent this issue, let's pass "rd.luks=0" to disable LUKS in +the initramfs only as part of our default kernel command-line in our QEMU +tests. + +This is enough to disable this behavior and prevent the timeout, while at +the same time doesn't conflict with our tests that actually check for LUKS +behavior in the systemd running under test (such as TEST-02-CRYPTSETUP). + +Tested: `sudo make -C TEST-02-CRYPTSETUP/ clean setup run` +(cherry picked from commit 14e0259b499c188de09040f2e5857a0193094d5a) + +Related: #2190151 +--- + test/test-functions | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/test-functions b/test/test-functions +index e5d4d28a5f..a7b18991f4 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -154,6 +154,7 @@ fi + KERNEL_APPEND="$PARAMS \ + root=/dev/sda1 \ + raid=noautodetect \ ++rd.luks=0 \ + loglevel=2 \ + init=$PATH_TO_INIT \ + console=ttyS0 \ diff --git a/0917-pstore-explicitly-set-the-base-when-converting-recor.patch b/0917-pstore-explicitly-set-the-base-when-converting-recor.patch new file mode 100644 index 0000000..dd3941a --- /dev/null +++ b/0917-pstore-explicitly-set-the-base-when-converting-recor.patch @@ -0,0 +1,37 @@ +From 3aefa216bf5e8bcfaf5a628e9e06672e786ce9ea Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 28 Apr 2023 11:09:22 +0200 +Subject: [PATCH] pstore: explicitly set the base when converting record ID + +(cherry picked from commit a95d96a2430db171b40fc2e50589807236f8f746) + +Related: #2190151 +--- + src/pstore/pstore.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/pstore/pstore.c b/src/pstore/pstore.c +index 5335c9f92d..073fedb7d2 100644 +--- a/src/pstore/pstore.c ++++ b/src/pstore/pstore.c +@@ -207,7 +207,7 @@ static int append_dmesg(PStoreEntry *pe, const char *subdir1, const char *subdir + static int process_dmesg_files(PStoreList *list) { + /* Move files, reconstruct dmesg.txt */ + _cleanup_free_ char *erst_subdir = NULL; +- uint64_t last_record_id = 0; ++ unsigned long long last_record_id = 0; + + /* When dmesg is written into pstore, it is done so in small chunks, whatever the exchange buffer + * size is with the underlying pstore backend (ie. EFI may be ~2KiB), which means an example +@@ -263,9 +263,9 @@ static int process_dmesg_files(PStoreList *list) { + } else if ((p = startswith(pe->dirent.d_name, "dmesg-erst-"))) { + /* For the ERST backend, the record is a monotonically increasing number, seeded as + * a timestamp. See linux/drivers/acpi/apei/erst.c in erst_writer(). */ +- uint64_t record_id; ++ unsigned long long record_id; + +- if (safe_atou64(p, &record_id) < 0) ++ if (safe_atollu_full(p, 10, &record_id) < 0) + continue; + if (last_record_id - 1 != record_id) + /* A discontinuity in the number has been detected, this current record id diff --git a/0918-pstore-avoid-opening-the-dmesg.txt-file-if-not-reque.patch b/0918-pstore-avoid-opening-the-dmesg.txt-file-if-not-reque.patch new file mode 100644 index 0000000..a600799 --- /dev/null +++ b/0918-pstore-avoid-opening-the-dmesg.txt-file-if-not-reque.patch @@ -0,0 +1,68 @@ +From 7a76b2a073b5df72e9afc39dc6c0cce388e0a733 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 28 Apr 2023 11:50:33 +0200 +Subject: [PATCH] pstore: avoid opening the dmesg.txt file if not requested + +Even with Storage=journal we would still attempt to open the final +dmesg.txt file which causes a lot of noise in the journal: + +``` +[ 5.764111] H testsuite-82.sh[658]: + systemctl start systemd-pstore +[ 5.806385] H systemd[1]: Starting modprobe@efi_pstore.service... +[ 5.808656] H systemd[1]: modprobe@efi_pstore.service: Deactivated successfully. +[ 5.808971] H systemd[1]: Finished modprobe@efi_pstore.service. +[ 5.818845] H kernel: audit: type=1130 audit(1682630623.637:114): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=kernel msg='unit=modprobe@efi_pstore comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? termin> +[ 5.818865] H kernel: audit: type=1131 audit(1682630623.637:115): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=kernel msg='unit=modprobe@efi_pstore comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? termin> +[ 5.816052] H systemd[1]: Starting systemd-pstore.service... +[ 5.840703] H systemd-pstore[806]: PStore dmesg-efi-168263062313014. +[ 5.841239] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.841428] H systemd-pstore[806]: PStore dmesg-efi-168263062312014. +[ 5.841575] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.841712] H systemd-pstore[806]: PStore dmesg-efi-168263062311014. +[ 5.841839] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.841989] H systemd-pstore[806]: PStore dmesg-efi-168263062310014. +[ 5.842141] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.842274] H systemd-pstore[806]: PStore dmesg-efi-168263062309014. +[ 5.842423] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.842589] H systemd-pstore[806]: PStore dmesg-efi-168263062308014. +[ 5.842722] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.842865] H systemd-pstore[806]: PStore dmesg-efi-168263062307014. +[ 5.843003] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.843153] H systemd-pstore[806]: PStore dmesg-efi-168263062306014. +[ 5.843280] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.843434] H systemd-pstore[806]: PStore dmesg-efi-168263062305014. +[ 5.843570] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.843702] H systemd-pstore[806]: PStore dmesg-efi-168263062304014. +[ 5.843831] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.843958] H systemd-pstore[806]: PStore dmesg-efi-168263062303014. +[ 5.844093] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.844250] H systemd-pstore[806]: PStore dmesg-efi-168263062302014. +[ 5.844412] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.844619] H systemd-pstore[806]: PStore dmesg-efi-168263062301014. +[ 5.844781] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.844956] H systemd-pstore[806]: PStore dmesg-efi-168263062300014. +[ 5.845168] H systemd-pstore[806]: Failed to open file /var/lib/systemd/pstore/1682630623/014/dmesg.txt: Operation not permitted +[ 5.851101] H systemd[1]: Finished systemd-pstore.service. +``` + +(cherry picked from commit ad5980803adac8dc1cf980447a07cb18962c238b) + +Related: #2190151 +--- + src/pstore/pstore.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/pstore/pstore.c b/src/pstore/pstore.c +index 073fedb7d2..9367071833 100644 +--- a/src/pstore/pstore.c ++++ b/src/pstore/pstore.c +@@ -181,6 +181,9 @@ static int append_dmesg(PStoreEntry *pe, const char *subdir1, const char *subdir + + assert(pe); + ++ if (arg_storage != PSTORE_STORAGE_EXTERNAL) ++ return 0; ++ + if (pe->content_size == 0) + return 0; + diff --git a/0919-test-add-a-couple-of-tests-for-systemd-pstore.patch b/0919-test-add-a-couple-of-tests-for-systemd-pstore.patch new file mode 100644 index 0000000..029f380 --- /dev/null +++ b/0919-test-add-a-couple-of-tests-for-systemd-pstore.patch @@ -0,0 +1,341 @@ +From 06b0704a8bb41fa9a496f5671e191dc7b6c7ed9b Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Wed, 3 May 2023 15:25:18 +0200 +Subject: [PATCH] test: add a couple of tests for systemd-pstore + +Based on: + - 6858e32d730fd5574eaa3d7fbf4cb12aacaea336 + - edea0d6ac57610b7af603b833b19a846327e3638 + +Related: #2190151 +--- + test/TEST-74-AUX-UTILS/Makefile | 1 + + test/TEST-74-AUX-UTILS/test.sh | 48 +++++ + test/TEST-74-AUX-UTILS/testsuite.pstore.sh | 218 +++++++++++++++++++++ + test/TEST-74-AUX-UTILS/testsuite.sh | 14 ++ + test/test-functions | 2 +- + 5 files changed, 282 insertions(+), 1 deletion(-) + create mode 120000 test/TEST-74-AUX-UTILS/Makefile + create mode 100755 test/TEST-74-AUX-UTILS/test.sh + create mode 100755 test/TEST-74-AUX-UTILS/testsuite.pstore.sh + create mode 100755 test/TEST-74-AUX-UTILS/testsuite.sh + +diff --git a/test/TEST-74-AUX-UTILS/Makefile b/test/TEST-74-AUX-UTILS/Makefile +new file mode 120000 +index 0000000000..e9f93b1104 +--- /dev/null ++++ b/test/TEST-74-AUX-UTILS/Makefile +@@ -0,0 +1 @@ ++../TEST-01-BASIC/Makefile +\ No newline at end of file +diff --git a/test/TEST-74-AUX-UTILS/test.sh b/test/TEST-74-AUX-UTILS/test.sh +new file mode 100755 +index 0000000000..fead257337 +--- /dev/null ++++ b/test/TEST-74-AUX-UTILS/test.sh +@@ -0,0 +1,48 @@ ++#!/usr/bin/env bash ++set -e ++TEST_DESCRIPTION="Tests for auxiliary utilities" ++ ++. $TEST_BASE_DIR/test-functions ++ ++test_setup() { ++ create_empty_image ++ mkdir -p $TESTDIR/root ++ mount ${LOOPDEV}p1 $TESTDIR/root ++ ++ ( ++ LOG_LEVEL=5 ++ eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) ++ ++ setup_basic_environment ++ ++ # mask some services that we do not want to run in these tests ++ ln -fs /dev/null $initdir/etc/systemd/system/systemd-hwdb-update.service ++ ln -fs /dev/null $initdir/etc/systemd/system/systemd-journal-catalog-update.service ++ ln -fs /dev/null $initdir/etc/systemd/system/systemd-networkd.service ++ ln -fs /dev/null $initdir/etc/systemd/system/systemd-networkd.socket ++ ln -fs /dev/null $initdir/etc/systemd/system/systemd-resolved.service ++ ln -fs /dev/null $initdir/etc/systemd/system/systemd-machined.service ++ ++ # setup the testsuite service ++ cat >$initdir/etc/systemd/system/testsuite.service <"$DUMMY_DMESG_1" <<\EOF ++6,17159,5340096332127,-;usb 1-4: USB disconnect, device number 124 ++6,17160,5340109662397,-;input: WH-1000XM3 (AVRCP) as /devices/virtual/input/input293 ++6,17161,5343126458360,-;loop0: detected capacity change from 0 to 3145728 ++6,17162,5343126766065,-; loop0: p1 p2 ++6,17163,5343126815038,-;EXT4-fs (loop0p1): mounted filesystem with ordered data mode. Quota mode: none. ++6,17164,5343158037334,-;EXT4-fs (loop0p1): unmounting filesystem. ++6,17165,5343158072598,-;loop0: detected capacity change from 0 to 3145728 ++6,17166,5343158073563,-; loop0: p1 p2 ++6,17167,5343158074325,-; loop0: p1 p2 ++6,17168,5343158140859,-;EXT4-fs (loop0p1): mounted filesystem with ordered data mode. Quota mode: none. ++6,17169,5343158182977,-;EXT4-fs (loop0p1): unmounting filesystem. ++6,17170,5343158700241,-;loop0: detected capacity change from 0 to 3145728 ++6,17171,5343158700439,-; loop0: p1 p2 ++6,17172,5343158701120,-; loop0: p1 p2 ++EOF ++ ++DUMMY_DMESG_2="$(mktemp)" ++cat >"$DUMMY_DMESG_2" <<\EOF ++Nechť již hříšné saxofony ďáblů rozezvučí síň úděsnými tóny waltzu, tanga a quickstepu. ++Příliš žluťoučký kůň úpěl ďábelské ódy. ++Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů. ++Vyciď křišťálový nůž, ó učiň úděsné líbivým! ++Loď čeří kýlem tůň obzvlášť v Grónské úžině ++Ó, náhlý déšť již zvířil prach a čilá laň teď běží s houfcem gazel k úkrytům. ++Vypätá dcéra grófa Maxwella s IQ nižším ako kôň núti čeľaď hrýzť hŕbu jabĺk. ++Kŕdeľ šťastných ďatľov učí pri ústí Váhu mĺkveho koňa obhrýzať kôru a žrať čerstvé mäso. ++Stróż pchnął kość w quiz gędźb vel fax myjń. ++Portez ce vieux whisky au juge blond qui fume! ++EOF ++ ++file_count() { find "${1:?}" -type f | wc -l; } ++file_size() { wc -l <"${1:?}"; } ++random_efi_timestamp() { printf "%0.10d" "$((1000000000 + RANDOM))"; } ++ ++# The dmesg- filename contains the backend-type and the Common Platform Error Record, CPER, ++# record id, a 64-bit number. ++# ++# Files are processed in reverse lexigraphical order so as to properly reconstruct original dmesg. ++ ++prepare_efi_logs() { ++ local file="${1:?}" ++ local timestamp="${2:?}" ++ local chunk count filename ++ ++ # For the EFI backend, the 3 least significant digits of record id encodes a ++ # "count" number, the next 2 least significant digits for the dmesg part ++ # (chunk) number, and the remaining digits as the timestamp. See ++ # linux/drivers/firmware/efi/efi-pstore.c in efi_pstore_write(). ++ count="$(file_size "$file")" ++ chunk=0 ++ # The sed in the process substitution below just reverses the file ++ while read -r line; do ++ filename="$(printf "dmesg-efi-%0.10d%0.2d%0.3d" "$timestamp" "$chunk" "$count")" ++ echo "$line" >"/sys/fs/pstore/$filename" ++ chunk=$((chunk + 1)) ++ done < <(sed '1!G;h;$!d' "$file") ++ ++ if [[ "$chunk" -eq 0 ]]; then ++ echo >&2 "No dmesg-efi files were created" ++ exit 1 ++ fi ++} ++ ++prepare_erst_logs() { ++ local file="${1:?}" ++ local start_id="${2:?}" ++ local id filename ++ ++ # For the ERST backend, the record is a monotonically increasing number, seeded as ++ # a timestamp. See linux/drivers/acpi/apei/erst.c in erst_writer(). ++ id="$start_id" ++ # The sed in the process substitution below just reverses the file ++ while read -r line; do ++ filename="$(printf "dmesg-erst-%0.16d" "$id")" ++ echo "$line" >"/sys/fs/pstore/$filename" ++ id=$((id + 1)) ++ done < <(sed '1!G;h;$!d' "$file") ++ ++ if [[ "$id" -eq "$start_id" ]]; then ++ echo >&2 "No dmesg-erst files were created" ++ exit 1 ++ fi ++ ++ # ID of the last dmesg file will be the ID of the erst subfolder ++ echo "$((id - 1))" ++} ++ ++prepare_pstore_config() { ++ local storage="${1:?}" ++ local unlink="${2:?}" ++ ++ systemctl stop systemd-pstore ++ ++ rm -fr /sys/fs/pstore/* /var/lib/systemd/pstore/* ++ ++ mkdir -p /run/systemd/pstore.conf.d ++ cat >"/run/systemd/pstore.conf.d/99-test.conf" </sys/fs/pstore/foo.bar ++ [[ "$unlink" == yes ]] && exp_count=0 || exp_count="$(file_count /sys/fs/pstore/)" ++ start_pstore ++ [[ "$(file_count /sys/fs/pstore)" -ge "$exp_count" ]] ++ [[ "$(file_count /var/lib/systemd/pstore/)" -ne 0 ]] ++ filename_1="$(printf "/var/lib/systemd/pstore/%s/%0.3d/dmesg.txt" "$timestamp_1" "$(file_size "$DUMMY_DMESG_1")")" ++ diff "$DUMMY_DMESG_1" "$filename_1" ++ filename_2="$(printf "/var/lib/systemd/pstore/%s/%0.3d/dmesg.txt" "$timestamp_2" "$(file_size "$DUMMY_DMESG_2")")" ++ diff "$DUMMY_DMESG_2" "$filename_2" ++ grep "hello world" "/var/lib/systemd/pstore/foo.bar" ++ ++ : "Backend: EFI; Storage: journal; Unlink: $unlink" ++ timestamp="$(random_efi_timestamp)" ++ prepare_pstore_config "journal" "$unlink" ++ prepare_efi_logs "$DUMMY_DMESG_1" "$timestamp" ++ [[ "$unlink" == yes ]] && exp_count=0 || exp_count="$(file_count /sys/fs/pstore/)" ++ start_pstore ++ [[ "$(file_count /sys/fs/pstore)" -ge "$exp_count" ]] ++ [[ "$(file_count /var/lib/systemd/pstore/)" -eq 0 ]] ++ diff "$DUMMY_DMESG_1" <(journalctl -o json --after-cursor="${JOURNAL_CURSOR:?}" | jq -r 'select(.FILE) | .FILE' | sed '/^$/d') ++ ++ : "Backend: ERST; Storage: external; Unlink: $unlink" ++ prepare_pstore_config "external" "$unlink" ++ last_id="$(prepare_erst_logs "$DUMMY_DMESG_1" 0)" ++ [[ "$unlink" == yes ]] && exp_count=0 || exp_count="$(file_count /sys/fs/pstore/)" ++ start_pstore ++ [[ "$(file_count /sys/fs/pstore)" -ge "$exp_count" ]] ++ [[ "$(file_count /var/lib/systemd/pstore/)" -ne 0 ]] ++ # We always log to journal ++ diff "$DUMMY_DMESG_1" <(journalctl -o json --after-cursor="${JOURNAL_CURSOR:?}" | jq -r 'select(.FILE) | .FILE' | sed '/^$/d') ++ filename="$(printf "/var/lib/systemd/pstore/%0.16d/dmesg.txt" "$last_id")" ++ diff "$DUMMY_DMESG_1" "$filename" ++ ++ : "Backend: ERST; Storage: external; Unlink: $unlink; multiple dmesg files" ++ prepare_pstore_config "external" "$unlink" ++ last_id_1="$(prepare_erst_logs "$DUMMY_DMESG_1" 0)" ++ last_id_2="$(prepare_erst_logs "$DUMMY_DMESG_2" "$((last_id_1 + 10))")" ++ # Add one "random" (non-dmesg) file as well ++ echo "hello world" >/sys/fs/pstore/foo.bar ++ [[ "$unlink" == yes ]] && exp_count=0 || exp_count="$(file_count /sys/fs/pstore/)" ++ start_pstore ++ [[ "$(file_count /sys/fs/pstore)" -ge "$exp_count" ]] ++ [[ "$(file_count /var/lib/systemd/pstore/)" -ne 0 ]] ++ filename_1="$(printf "/var/lib/systemd/pstore/%0.16d/dmesg.txt" "$last_id_1")" ++ diff "$DUMMY_DMESG_1" "$filename_1" ++ filename_2="$(printf "/var/lib/systemd/pstore/%0.16d/dmesg.txt" "$last_id_2")" ++ diff "$DUMMY_DMESG_2" "$filename_2" ++ grep "hello world" "/var/lib/systemd/pstore/foo.bar" ++ ++ : "Backend: ERST; Storage: journal; Unlink: $unlink" ++ prepare_pstore_config "journal" "$unlink" ++ last_id="$(prepare_erst_logs "$DUMMY_DMESG_1" 0)" ++ [[ "$unlink" == yes ]] && exp_count=0 || exp_count="$(file_count /sys/fs/pstore/)" ++ start_pstore ++ [[ "$(file_count /sys/fs/pstore)" -ge "$exp_count" ]] ++ [[ "$(file_count /var/lib/systemd/pstore/)" -eq 0 ]] ++ diff "$DUMMY_DMESG_1" <(journalctl -o json --after-cursor="${JOURNAL_CURSOR:?}" | jq -r 'select(.FILE) | .FILE' | sed '/^$/d') ++done +diff --git a/test/TEST-74-AUX-UTILS/testsuite.sh b/test/TEST-74-AUX-UTILS/testsuite.sh +new file mode 100755 +index 0000000000..13c767e490 +--- /dev/null ++++ b/test/TEST-74-AUX-UTILS/testsuite.sh +@@ -0,0 +1,14 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -eux ++set -o pipefail ++ ++: >/failed ++ ++for script in "${0%.sh}".*.sh; do ++ echo "Running $script" ++ "./$script" ++done ++ ++touch /testok ++rm /failed +diff --git a/test/test-functions b/test/test-functions +index a7b18991f4..f0cf6f8575 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -23,7 +23,7 @@ fi + + PATH_TO_INIT=$ROOTLIBDIR/systemd + +-BASICTOOLS="test sh bash setsid loadkeys setfont login sulogin gzip sleep echo mount umount cryptsetup date dmsetup modprobe sed cmp tee rm true false chmod chown ln xargs env mktemp mountpoint useradd userdel timeout" ++BASICTOOLS="test sh bash setsid loadkeys setfont login sulogin gzip sleep echo mount umount cryptsetup date dmsetup modprobe sed cmp tee rm true false chmod chown ln xargs env mktemp mountpoint useradd userdel timeout jq wc awk diff" + DEBUGTOOLS="df free ls stty cat ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort hostname find" + + STATEDIR="${BUILD_DIR:-.}/test/$(basename $(dirname $(realpath $0)))" diff --git a/systemd.spec b/systemd.spec index 9f74f77..65e229b 100644 --- a/systemd.spec +++ b/systemd.spec @@ -13,7 +13,7 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd Version: 239 -Release: 75%{?dist} +Release: 76%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: System and Service Manager @@ -961,6 +961,14 @@ Patch0908: 0908-pager-make-pager-secure-when-under-euid-is-changed-o.patch Patch0909: 0909-ci-trigger-differential-shellcheck-workflow-on-push.patch Patch0910: 0910-ci-codeql-master-main.patch Patch0911: 0911-test-ignore-ENOMEDIUM-error-from-sd_pid_get_cgroup.patch +Patch0912: 0912-ci-Mergify-drop-requirements-on-linting-workflows.patch +Patch0913: 0913-ci-workflow-for-gathering-metadata-for-source-git-au.patch +Patch0914: 0914-ci-first-part-of-the-source-git-automation-commit-li.patch +Patch0915: 0915-pstore-fix-crash-and-forward-dummy-arguments-instead.patch +Patch0916: 0916-test-Disable-LUKS-devices-from-initramfs-in-QEMU-tes.patch +Patch0917: 0917-pstore-explicitly-set-the-base-when-converting-recor.patch +Patch0918: 0918-pstore-avoid-opening-the-dmesg.txt-file-if-not-reque.patch +Patch0919: 0919-test-add-a-couple-of-tests-for-systemd-pstore.patch %ifarch %{ix86} x86_64 aarch64 %global have_gnu_efi 1 @@ -1591,6 +1599,16 @@ fi %files tests -f .file-list-tests %changelog +* Thu May 18 2023 systemd maintenance team - 239-76 +- ci(Mergify): drop requirements on linting workflows (#2179309) +- ci: workflow for gathering metadata for source-git automation (#2179309) +- ci: first part of the source-git automation - commit linter (#2179309) +- pstore: fix crash and forward dummy arguments instead of NULL (#2190151) +- test: Disable LUKS devices from initramfs in QEMU tests (#2190151) +- pstore: explicitly set the base when converting record ID (#2190151) +- pstore: avoid opening the dmesg.txt file if not requested (#2190151) +- test: add a couple of tests for systemd-pstore (#2190151) + * Tue Apr 18 2023 systemd maintenance team - 239-75 - journald-server: always create state file in signal handler (#2176892) - journald-server: move relinquish code into function (#2176892)