Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package apptainer for openSUSE:Factory checked in at 2026-07-26 11:30:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/apptainer (Old) and /work/SRC/openSUSE:Factory/.apptainer.new.2004 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "apptainer" Sun Jul 26 11:30:31 2026 rev:48 rq:1367794 version:1.5.3 Changes: -------- --- /work/SRC/openSUSE:Factory/apptainer/apptainer.changes 2026-07-18 22:26:04.032262115 +0200 +++ /work/SRC/openSUSE:Factory/.apptainer.new.2004/apptainer.changes 2026-07-26 11:33:02.144141901 +0200 @@ -1,0 +2,19 @@ +Sat Jul 25 16:00:39 UTC 2026 - Egbert Eich <[email protected]> + +- Update apptainer to version 1.5.3 + + * If the ptrace() system call does not work while building an image as + an unprivileged user, skip using PRoot to preserve file ownership and + print an INFO message. + * Bind getopt from the host when using fakeroot command mode, to make + the fakeroot command work with base containers which no longer contain + getopt by default. + * Update fixes CVE-2026-56852 (GO-2026-5970) (bsc#1272115) + golang.org/x/text/unicode/norm: + A norm.Iter can enter an infinite loop when handling input + containing invalid UTF-8 bytes. +- From version 1.5.2: + * Extended the mksquashfs segmentation fault workaround for cases + where mksquashfs uses many processor cores. + +------------------------------------------------------------------- Old: ---- apptainer-1.5.1.tar.gz New: ---- apptainer-1.5.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ apptainer.spec ++++++ --- /var/tmp/diff_new_pack.yrT2Kz/_old 2026-07-26 11:33:05.188246781 +0200 +++ /var/tmp/diff_new_pack.yrT2Kz/_new 2026-07-26 11:33:05.188246781 +0200 @@ -31,7 +31,7 @@ License: BSD-3-Clause-LBNL AND OpenSSL Group: Productivity/Clustering/Computing Name: apptainer -Version: 1.5.1 +Version: 1.5.3 Release: 0 # https://spdx.org/licenses/BSD-3-Clause-LBNL.html URL: https://apptainer.org @@ -184,15 +184,20 @@ sed -i -e "/allow setuid/s@\(.* =\).*@\1 no@" \ %{buildroot}%{_sysconfdir}/apptainer/apptainer.conf %endif - -%check %if %{with vulncheck} +status=0 +echo "VULNCHECK START ===================================================" for i in $(find %{buildroot} -executable -and -not -type d -and -not -name "*.debug" -and -not -name "*.so*"); do file $i | grep -q "^$i: ELF" || continue - govulncheck -mode=binary -db file:///usr/share/vulndb/ $i + govulncheck -mode=binary -db file:///usr/share/vulndb/ $i || status=$? done +echo "VULNCHECK END =====================================================" +[ $status -eq 0 ] || exit $status %endif + +%check + %pre suid -f %{name}.pre %post suid ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.yrT2Kz/_old 2026-07-26 11:33:05.340252018 +0200 +++ /var/tmp/diff_new_pack.yrT2Kz/_new 2026-07-26 11:33:05.344252156 +0200 @@ -1,4 +1,4 @@ -mtime: 1784351799 -commit: a3a64bb20fcfe64b851b8fc1f1ab3498d9f26c45e61591177961a699acb6ece4 +mtime: 1785044455 +commit: 2545813e0691a23985fe7992708e8b894b5a3cc47d5611a43eaa471b41e91612 url: https://src.opensuse.org/Cluster/apptainer.git ++++++ _service ++++++ --- /var/tmp/diff_new_pack.yrT2Kz/_old 2026-07-26 11:33:05.364252845 +0200 +++ /var/tmp/diff_new_pack.yrT2Kz/_new 2026-07-26 11:33:05.368252983 +0200 @@ -1,20 +1,8 @@ <services> <service name="go_modules" mode="disabled"> <param name="replace"> - github.com/go-jose/go-jose/v4=github.com/go-jose/go-jose/[email protected] - </param> - <param name="replace"> - google.golang.org/grpc=google.golang.org/[email protected] - </param> - <param name="replace"> golang.org/x/net=golang.org/x/[email protected] </param> - <param name="replace"> - golang.org/x/crypto=golang.org/x/[email protected] - </param> - <!-- <param name="replace"> - github.com/cilium/ebpf=github.com/cilium/[email protected] - </param> --> </service> </services> ++++++ apptainer-1.5.1.tar.gz -> apptainer-1.5.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/.github/workflows/ci.yml new/apptainer-1.5.3/.github/workflows/ci.yml --- old/apptainer-1.5.1/.github/workflows/ci.yml 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/.github/workflows/ci.yml 2026-07-21 20:47:49.000000000 +0200 @@ -227,14 +227,14 @@ - name: Install and test unprivileged for openSUSE leap env: - OS_TYPE: opensuse/leap + OS_TYPE: registry.opensuse.org/opensuse/leap OS_VERSION: latest TEST_TYPE: unpriv run: ./scripts/ci-docker-run - name: Install and test unprivileged for openSUSE tumbleweed env: - OS_TYPE: opensuse/tumbleweed + OS_TYPE: registry.opensuse.org/opensuse/tumbleweed OS_VERSION: latest TEST_TYPE: unpriv run: ./scripts/ci-docker-run @@ -302,7 +302,7 @@ - name: Build and test rpm under docker env: - OS_TYPE: opensuse/leap + OS_TYPE: registry.opensuse.org/opensuse/leap OS_VERSION: latest GO_ARCH: linux-amd64 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -310,9 +310,9 @@ - name: Install and test unprivileged for openSUSE leap env: - OS_TYPE: opensuse/leap + OS_TYPE: registry.opensuse.org/opensuse/leap OS_VERSION: latest - INS_OPTS: -o -d suse15 + INS_OPTS: -o -d opensuse-leap TEST_TYPE: unpriv run: ./scripts/ci-docker-run @@ -326,7 +326,7 @@ - name: Build and test rpm under docker env: - OS_TYPE: opensuse/tumbleweed + OS_TYPE: registry.opensuse.org/opensuse/tumbleweed OS_VERSION: latest GO_ARCH: linux-amd64 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -334,7 +334,7 @@ - name: Install and test unprivileged for openSUSE tumbleweed env: - OS_TYPE: opensuse/tumbleweed + OS_TYPE: registry.opensuse.org/opensuse/tumbleweed OS_VERSION: latest INS_OPTS: -o -d opensuse-tumbleweed TEST_TYPE: unpriv diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/CHANGELOG.md new/apptainer-1.5.3/CHANGELOG.md --- old/apptainer-1.5.1/CHANGELOG.md 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/CHANGELOG.md 2026-07-21 20:47:49.000000000 +0200 @@ -5,6 +5,26 @@ and re-branded as Apptainer. For older changes see the [archived Singularity change log](https://github.com/apptainer/singularity/blob/release-3.8/CHANGELOG.md). +## v1.5.3 - \[2026-07-21\] + +- If the `ptrace()` system call does not work while building an image as + an unprivileged user, skip using PRoot to preserve file ownership and + print an INFO message. +- Bind `getopt` from the host when using fakeroot command mode, to make + the fakeroot command work with EL10 and Fedora base containers which + no longer contain getopt by default. + +## v1.5.2 - \[2026-06-23\] + +- Extended the mksquashfs segmentation fault workaround for cases where + mksquashfs uses many processor cores. +- Whe building an rpm using a Red Hat version of golang, set + GOEXPERIMENT=strictfipsruntime. That makes attempting to run non-FIPS + compliant containers on a FIPS-enabled system exit with a helpful + error message instead of a crash. +- Skip building PRoot on x86_64 Fedora 45 because of difficult to fix + compilation problems. + ## v1.5.1 - \[2026-06-04\] ### Security fix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/INSTALL.md new/apptainer-1.5.3/INSTALL.md --- old/apptainer-1.5.1/INSTALL.md 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/INSTALL.md 2026-07-21 20:47:49.000000000 +0200 @@ -37,15 +37,27 @@ sudo apt-get install -y libsubid-dev ``` -On RHEL or its derivatives or Fedora: +On RHEL or its derivatives start with: ```sh # Install basic tools for compiling sudo dnf groupinstall -y 'Development Tools' -# Ensure EPEL repository is available (skip on Fedora) +# Ensure EPEL repository is available sudo dnf install -y epel-release -# Enable the CodeReady Builder repository (skip on Fedora) +# Enable the CodeReady Builder repository sudo crb enable +``` + +Or on Fedora start with: + +```sh +# Install basic tools for compiling +sudo dnf group install -y development-tools +``` + +Then on either Fedora or RHEL or its derivatives: + +```sh # Install RPM packages for dependencies sudo dnf install -y \ libseccomp-devel \ @@ -57,8 +69,8 @@ wget git ``` -For including libsubid support, use --enablerepo=devel for el8 and el9 but not -for el10 or fedora: +For including libsubid support, use --enablerepo=devel for EL8 and EL9 but not +for EL10 or Fedora: ```sh sudo dnf --enablerepo=devel install -y shadow-utils-subid-devel @@ -164,7 +176,7 @@ for example: ```sh -git checkout v1.5.1 +git checkout v1.5.3 ``` ## Compiling Apptainer @@ -211,7 +223,7 @@ zlib1g-dev liblzo2-dev liblz4-dev liblzma-dev libzstd-dev ``` -On RHEL or derivatives: +On Fedora or RHEL or derivatives: ```sh sudo dnf install -y fuse3-devel lzo-devel lz4-devel @@ -333,7 +345,7 @@ <!-- markdownlint-disable MD013 --> ```sh -VERSION=1.5.1 # this is the apptainer version, change as you need +VERSION=1.5.3 # this is the apptainer version, change as you need # Fetch the source wget https://github.com/apptainer/apptainer/releases/download/v${VERSION}/apptainer-${VERSION}.tar.gz ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/LICENSE_DEPENDENCIES.md new/apptainer-1.5.3/LICENSE_DEPENDENCIES.md --- old/apptainer-1.5.1/LICENSE_DEPENDENCIES.md 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/LICENSE_DEPENDENCIES.md 2026-07-21 20:47:49.000000000 +0200 @@ -1467,217 +1467,6 @@ ``` -## github.com/containerd/stargz-snapshotter/estargz - -**License:** Apache-2.0 - -``` - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - - ## github.com/containernetworking/cni **License:** Apache-2.0 @@ -6689,30 +6478,35 @@ ## github.com/gorilla/handlers -**License:** BSD-2-Clause +**License:** BSD-3-Clause ``` -Copyright (c) 2013 The Gorilla Handlers Authors. All rights reserved. +Copyright (c) 2023 The Gorilla Authors. All rights reserved. Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. +modification, are permitted provided that the following conditions are +met: - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ``` @@ -7932,36 +7726,6 @@ ``` - -## github.com/mitchellh/go-homedir - -**License:** MIT - -``` -The MIT License (MIT) - -Copyright (c) 2013 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - ## github.com/moby/docker-image-spec/specs-go/v1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/dist/rpm/apptainer.spec.in new/apptainer-1.5.3/dist/rpm/apptainer.spec.in --- old/apptainer-1.5.1/dist/rpm/apptainer.spec.in 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/dist/rpm/apptainer.spec.in 2026-07-21 20:47:49.000000000 +0200 @@ -35,8 +35,13 @@ %global fuse_overlayfs_version 1.16 %global squashfs_tools_version 4.7.5 %ifnarch ppc64le s390x +%if 0%{?fedora} < 45 || "%{_arch}" != "x86_64" +# On fedora45 x86_64 building PRoot dies with +# "relocation truncated to fit: R_X86_64_PC32 against `.rodata'" +# See https://github.com/proot-me/proot/issues/414 %global PRoot_version 5.4.0-rootless.3 %endif +%endif # The last singularity version number in EPEL/Fedora %global last_singularity_version 3.8.7-3 @@ -184,6 +189,13 @@ %endif %build +if go version | grep -q "Red Hat"; then + # With Red Hat's golang this changes crashes when running non-FIPS + # compliant containers on FIPS-enabled machines into helpful error + # messages. + export GOEXPERIMENT=strictfipsruntime +fi + %if "%{?SOURCE1}" != "" GOVERSION="$(echo %SOURCE1|sed 's,.*/,,;s/go//;s/\.src.*//')" if ! ./mlocal/scripts/check-min-go-version go $GOVERSION; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/e2e/imgbuild/imgbuild.go new/apptainer-1.5.3/e2e/imgbuild/imgbuild.go --- old/apptainer-1.5.1/e2e/imgbuild/imgbuild.go 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/e2e/imgbuild/imgbuild.go 2026-07-21 20:47:49.000000000 +0200 @@ -2052,6 +2052,15 @@ e2e.ExpectExit(0), ) + // also test recent redhat in mode 3 to make sure getopt is bound in + c.env.RunApptainer( + t, + e2e.WithProfile(e2e.UserProfile), + e2e.WithCommand("build"), + e2e.WithArgs("--force", "--build-arg", "FROMIMAGE=fedora:latest", "--userns", "--ignore-subuid", fmt.Sprintf("%s/openssh-mode3b.sif", tmpDir), "testdata/redhat_build.def"), + e2e.ExpectExit(0), + ) + // running under the mode 4(https://apptainer.org/docs/user/main/fakeroot.html) c.env.RunApptainer( t, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/e2e/internal/e2e/docker.go new/apptainer-1.5.3/e2e/internal/e2e/docker.go --- old/apptainer-1.5.1/e2e/internal/e2e/docker.go 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/e2e/internal/e2e/docker.go 2026-07-21 20:47:49.000000000 +0200 @@ -26,6 +26,7 @@ "github.com/docker/distribution/configuration" dcontext "github.com/docker/distribution/context" "github.com/docker/distribution/registry/handlers" + "github.com/gorilla/mux" // necessary imports for registry drivers _ "github.com/docker/distribution/registry/storage/driver/filesystem" @@ -68,9 +69,9 @@ ctx := context.Background() - authListener, err := net.Listen("tcp", "127.0.0.1:0") + listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { - t.Fatalf("could not setup listener for docker auth server: %s", err) + t.Fatalf("could not setup listener for docker registry: %s", err) } certsDir := filepath.Join(env.TestDir, "certs") @@ -102,12 +103,10 @@ t.Fatalf("openssl command failed: %s: error output:\n%s", res.Error, res.Stderr()) } - go func() { - // for simplicity let this be brutally stopped once test finished - if err := startAuthServer(authListener, certFile, keyFile); err != nil && err != http.ErrServerClosed { - panic(fmt.Errorf("failed to start docker auth server: %s", err)) - } - }() + authHandler, err := newAuthHandler(certFile, keyFile) + if err != nil { + t.Fatalf("failed to create docker auth handler: %s", err) + } regDir := filepath.Join(env.TestDir, "local-registry") if err := os.Mkdir(regDir, 0o755); err != nil { @@ -124,7 +123,7 @@ RootCertBundle string }{ RootDir: regDir, - Realm: fmt.Sprintf("http://%s/auth", authListener.Addr().String()), + Realm: fmt.Sprintf("http://%s/auth", listener.Addr().String()), RootCertBundle: certFile, } @@ -141,47 +140,39 @@ ctx = dcontext.WithLogger(ctx, dcontext.GetLogger(ctx)) app := handlers.NewApp(ctx, config) + + router := mux.NewRouter() + // The auth server shares the registry's host:port, distinguished by the + // /auth path. This matches the Realm advertised in the registry config. + router.Handle("/auth", authHandler) + router.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Cache-Control", "no-cache") + w.WriteHeader(http.StatusOK) + }).Methods(http.MethodGet) + router.PathPrefix("/").Handler(app) + server := &http.Server{ - Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path == "/" { - w.Header().Set("Cache-Control", "no-cache") - w.WriteHeader(http.StatusOK) - return - } - app.ServeHTTP(w, r) - }), + Handler: router, ReadHeaderTimeout: httpTimeout, } - registryListener, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("could not setup listener for docker registry: %s", err) - } - go func() { - if err := server.Serve(registryListener); err != nil && err != http.ErrServerClosed { + if err := server.Serve(listener); err != nil && err != http.ErrServerClosed { panic(fmt.Errorf("failed to start docker local registry: %s", err)) } }() - _, port, err := net.SplitHostPort(registryListener.Addr().String()) - if err != nil { - t.Fatalf("failed to retrieve local registry port: %s", err) - } - - addr := net.JoinHostPort("localhost", port) - for i := 0; i < 30; i++ { - resp, err := http.Get(fmt.Sprintf("http://%s/", addr)) + resp, err := http.Get(fmt.Sprintf("http://%s/", listener.Addr().String())) resp.Body.Close() if err != nil || resp.StatusCode != 200 { time.Sleep(time.Second) continue } - return addr + return listener.Addr().String() } t.Fatalf("local registry not reachable") - return addr + return listener.Addr().String() } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/e2e/internal/e2e/docker_auth_server.go new/apptainer-1.5.3/e2e/internal/e2e/docker_auth_server.go --- old/apptainer-1.5.1/e2e/internal/e2e/docker_auth_server.go 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/e2e/internal/e2e/docker_auth_server.go 2026-07-21 20:47:49.000000000 +0200 @@ -3,7 +3,7 @@ // For website terms of use, trademark policy, privacy policy and other // project policies see https://lfprojects.org/policies // Copyright (c) 2020, Control Command Inc. All rights reserved. -// Copyright (c) 2021, Sylabs Inc. All rights reserved. +// Copyright (c) 2021-2026, Sylabs Inc. All rights reserved. // This software is licensed under a 3-clause BSD license. Please consult the // LICENSE.md file distributed with the sources of this project regarding your // rights to use or distribute this software. @@ -12,7 +12,6 @@ import ( "fmt" - "net" "net/http" "strings" "sync" @@ -80,7 +79,7 @@ return []string{"pull", "push"}, nil } -func startAuthServer(ln net.Listener, crt, key string) error { +func newAuthHandler(crt, key string) (http.Handler, error) { authnz := new(authnz) opt := ®istry.Option{ @@ -94,14 +93,10 @@ srv, err := registry.NewAuthServer(opt) if err != nil { - return err + return nil, err } - http.Handle("/auth", &dockerAuthHandler{srv: srv}) - server := &http.Server{ - ReadHeaderTimeout: httpTimeout, - } - return server.Serve(ln) + return &dockerAuthHandler{srv: srv}, nil } func (d *dockerAuthHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/e2e/testdata/redhat_build.def new/apptainer-1.5.3/e2e/testdata/redhat_build.def --- old/apptainer-1.5.1/e2e/testdata/redhat_build.def 1970-01-01 01:00:00.000000000 +0100 +++ new/apptainer-1.5.3/e2e/testdata/redhat_build.def 2026-07-21 20:47:49.000000000 +0200 @@ -0,0 +1,5 @@ +Bootstrap: docker +From: {{ FROMIMAGE }} + +%post + dnf install -y openssh-clients diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/go.mod new/apptainer-1.5.3/go.mod --- old/apptainer-1.5.1/go.mod 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/go.mod 2026-07-21 20:47:49.000000000 +0200 @@ -5,7 +5,6 @@ require ( github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 github.com/ProtonMail/go-crypto v1.4.1 - github.com/adigunhammedolalekan/registry-auth v0.0.0-20200730122110-8cde180a3a60 github.com/apex/log v1.9.0 github.com/apptainer/container-key-client v0.8.0 github.com/apptainer/container-library-client v1.4.14 @@ -23,8 +22,9 @@ github.com/docker/go-units v0.5.0 github.com/fatih/color v1.19.0 github.com/go-log/log v0.2.0 - github.com/google/go-containerregistry v0.21.3 + github.com/google/go-containerregistry v0.21.6 github.com/google/uuid v1.6.0 + github.com/gorilla/mux v1.8.1 github.com/gosimple/slug v1.15.0 github.com/moby/go-archive v0.2.0 github.com/moby/moby/client v0.4.1 @@ -41,24 +41,25 @@ github.com/seccomp/containers-golang v0.6.0 github.com/seccomp/libseccomp-golang v0.11.1 github.com/shopspring/decimal v1.4.0 - github.com/sigstore/sigstore v1.10.5 + github.com/sigstore/sigstore v1.10.6 github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 github.com/sylabs/json-resp v0.9.5 github.com/vbauerster/mpb/v8 v8.12.0 go.yaml.in/yaml/v4 v4.0.0-rc.4 - golang.org/x/crypto v0.50.0 - golang.org/x/sys v0.43.0 - golang.org/x/term v0.42.0 - golang.org/x/text v0.36.0 + golang.org/x/crypto v0.51.0 + golang.org/x/sys v0.44.0 + golang.org/x/term v0.43.0 + golang.org/x/text v0.37.0 gotest.tools/v3 v3.5.2 mvdan.cc/sh/v3 v3.13.1 ) require ( github.com/BurntSushi/toml v1.6.0 + github.com/adigunhammedolalekan/registry-auth v0.0.0-20200730122110-8cde180a3a60 github.com/buger/goterm v1.0.4 - github.com/docker/cli v29.4.2+incompatible + github.com/docker/cli v29.4.3+incompatible github.com/docker/distribution v2.8.3+incompatible github.com/docker/docker v28.5.2+incompatible github.com/moby/sys/sequential v0.6.0 @@ -84,7 +85,6 @@ github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect - github.com/containerd/stargz-snapshotter/estargz v0.18.2 // indirect github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 // indirect github.com/containers/ocicrypt v1.2.1 // indirect github.com/containers/storage v1.59.1 // indirect @@ -98,16 +98,15 @@ github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/fsnotify/fsnotify v1.10.1 // indirect github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 // indirect - github.com/go-jose/go-jose/v4 v4.1.3 // indirect + github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/go-cmp v0.7.0 // indirect - github.com/gorilla/handlers v1.5.1 // indirect - github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/handlers v1.5.2 // indirect github.com/gosimple/unidecode v1.0.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect @@ -115,7 +114,7 @@ github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475 // indirect github.com/josharian/native v1.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/klauspost/compress v1.18.6 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -125,7 +124,6 @@ github.com/mdlayher/packet v1.1.2 // indirect github.com/mdlayher/socket v0.5.1 // indirect github.com/miekg/pkcs11 v1.1.1 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/moby/api v1.54.2 // indirect github.com/moby/patternmatcher v0.6.0 // indirect @@ -141,13 +139,13 @@ github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.67.5 // indirect - github.com/prometheus/procfs v0.16.1 // indirect + github.com/prometheus/procfs v0.20.1 // indirect github.com/rootless-containers/proto/go-proto v0.0.0-20230421021042-4cd87ebadd67 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/safchain/ethtool v0.6.2 // indirect github.com/secure-systems-lab/go-securesystemslib v0.9.1 // indirect - github.com/sigstore/fulcio v1.8.5 // indirect - github.com/sigstore/protobuf-specs v0.5.0 // indirect + github.com/sigstore/fulcio v1.8.6 // indirect + github.com/sigstore/protobuf-specs v0.5.1 // indirect github.com/smallstep/pkcs7 v0.1.1 // indirect github.com/stefanberger/go-pkcs11uri v0.0.0-20230803200340-78284954bff6 // indirect github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect @@ -160,18 +158,18 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect - go.opentelemetry.io/otel v1.38.0 // indirect - go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/trace v1.38.0 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect + go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/mod v0.34.0 // indirect - golang.org/x/net v0.52.0 // indirect + golang.org/x/mod v0.36.0 // indirect + golang.org/x/net v0.54.0 // indirect golang.org/x/sync v0.20.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251222181119-0a764e51fe1b // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b // indirect - google.golang.org/grpc v1.78.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60 // indirect + google.golang.org/grpc v1.81.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/go.sum new/apptainer-1.5.3/go.sum --- old/apptainer-1.5.1/go.sum 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/go.sum 2026-07-21 20:47:49.000000000 +0200 @@ -72,8 +72,6 @@ github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/containerd/stargz-snapshotter/estargz v0.18.2 h1:yXkZFYIzz3eoLwlTUZKz2iQ4MrckBxJjkmD16ynUTrw= -github.com/containerd/stargz-snapshotter/estargz v0.18.2/go.mod h1:XyVU5tcJ3PRpkA9XS2T5us6Eg35yM0214Y+wvrZTBrY= github.com/containernetworking/cni v1.3.0 h1:v6EpN8RznAZj9765HhXQrtXgX+ECGebEYEmnuFjskwo= github.com/containernetworking/cni v1.3.0/go.mod h1:Bs8glZjjFfGPHMw6hQu82RUgEPNGEaBb9KS5KtNMnJ4= github.com/containernetworking/plugins v1.9.1 h1:8oU6WsIsU3bpnNZuvHp74a6cE1MJwbj2P7s4/yTUNlA= @@ -106,8 +104,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v29.4.2+incompatible h1:nhxMY4v7wB0QMMc5ppeqV6FBMwzqv0n4t2gogu/R2DQ= -github.com/docker/cli v29.4.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v29.4.3+incompatible h1:u+UliYm2J/rYrIh2FqHQg32neRG8GjbvNuwQRTzGspU= +github.com/docker/cli v29.4.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= @@ -126,16 +124,15 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 h1:LofdAjjjqCSXMwLGgOgnE+rdPuvX9DxCqaHwKy7i/ko= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= -github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-log/log v0.2.0 h1:z8i91GBudxD5L3RmF0KVpetCbcGWAV7q1Tw1eRwQM9Q= github.com/go-log/log v0.2.0/go.mod h1:xzCnwajcues/6w7lne3yK2QU7DBPW7kqbgPGG5AF65U= @@ -166,16 +163,16 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/go-containerregistry v0.21.3 h1:Xr+yt3VvwOOn/5nJzd7UoOhwPGiPkYW0zWDLLUXqAi4= -github.com/google/go-containerregistry v0.21.3/go.mod h1:D5ZrJF1e6dMzvInpBPuMCX0FxURz7GLq2rV3Us9aPkc= +github.com/google/go-containerregistry v0.21.6 h1:T+yqQIlJXKrM98Om4DlW3GoWQAmhZuLMwoDOvVrtiUM= +github.com/google/go-containerregistry v0.21.6/go.mod h1:U7MMSBIJynke2MVQrQk19NP9k/uQsGz/h0amIFSHMbo= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6 h1:EEHtgt9IwisQ2AZ4pIsMjahcegHh6rmhqxzIRQIyepY= github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= @@ -183,8 +180,8 @@ github.com/gosimple/slug v1.15.0/go.mod h1:UiRaFH+GEilHstLUmcBgWcI42viBN7mAb818JrYOeFQ= github.com/gosimple/unidecode v1.0.1 h1:hZzFTMMqSswvf0LBJZCZgThIZrpDHFXux9KeGmn6T/o= github.com/gosimple/unidecode v1.0.1/go.mod h1:CP0Cr1Y1kogOtx0bJblKzsVWrqYaqfNOnHzpgWw4Awc= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.4 h1:kEISI/Gx67NzH3nJxAmY/dGac80kKZgZt134u7Y/k1s= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.4/go.mod h1:6Nz966r3vQYCqIzWsuEl9d7cf7mRhtDmm++sOxlnfxI= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -210,8 +207,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= +github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -252,8 +249,6 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/go-archive v0.2.0 h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8= @@ -349,8 +344,8 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= -github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= +github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= @@ -378,12 +373,12 @@ github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/sigstore/fulcio v1.8.5 h1:HYTD1/L5wlBp8JxsWxUf8hmfaNBBF/x3r3p5l6tZwbA= -github.com/sigstore/fulcio v1.8.5/go.mod h1:tSLYK3JsKvJpDW1BsIsVHZgHj+f8TjXARzqIUWSsSPQ= -github.com/sigstore/protobuf-specs v0.5.0 h1:F8YTI65xOHw70NrvPwJ5PhAzsvTnuJMGLkA4FIkofAY= -github.com/sigstore/protobuf-specs v0.5.0/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= -github.com/sigstore/sigstore v1.10.5 h1:KqrOjDhNOVY+uOzQFat2FrGLClPPCb3uz8pK3wuI+ow= -github.com/sigstore/sigstore v1.10.5/go.mod h1:k/mcVVXw3I87dYG/iCVTSW2xTrW7vPzxxGic4KqsqXs= +github.com/sigstore/fulcio v1.8.6 h1:vkvRpdhVAZjZHa0ltiJeLSILG9U8ADJoe5Z+RdZSLJk= +github.com/sigstore/fulcio v1.8.6/go.mod h1:7RwoGdMM0xpc9qc382sjSw7P9OLKbKIwQZXvYz4JPb4= +github.com/sigstore/protobuf-specs v0.5.1 h1:/5OPaNuolRJmQfeZLayJGFXMpsRJEdgC6ah1/+7Px7U= +github.com/sigstore/protobuf-specs v0.5.1/go.mod h1:DRBzpFuE+LnvQMN10/dU6nBeKwVLGEQ6o2FovN2Rats= +github.com/sigstore/sigstore v1.10.6 h1:YWhMQfTrJSK80QB1pbxjYeAwGKx+5UwWPPAY9hrPPZg= +github.com/sigstore/sigstore v1.10.6/go.mod h1:k/mcVVXw3I87dYG/iCVTSW2xTrW7vPzxxGic4KqsqXs= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -446,32 +441,32 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= -go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= -go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 h1:xJ2qHD0C1BeYVTLLR9sX12+Qb95kfeD/byKj6Ky1pXg= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0/go.mod h1:u5BF1xyjstDowA1R5QAO9JHzqK+ublenEW/dyqTjBVk= -go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= -go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= -go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= -go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= -go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= -go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= -go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= -go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= -go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= -go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.yaml.in/yaml/v2 v2.4.0 h1:1wUho2rqHvQlbIzGvWDqpyuGtd8ClFDJx7sxsblGvig= go.yaml.in/yaml/v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= +go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= +go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v3 v3.0.1 h1:XDp0bdmK8yhjHY72LqCnqEpEHMlIZgqKewnYfT7YV/U= go.yaml.in/yaml/v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= @@ -487,16 +482,16 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= +golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -510,8 +505,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -552,8 +547,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -563,8 +558,8 @@ golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= -golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= -golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -575,10 +570,10 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -586,20 +581,20 @@ golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= +golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/api v0.0.0-20251222181119-0a764e51fe1b h1:uA40e2M6fYRBf0+8uN5mLlqUtV192iiksiICIBkYJ1E= -google.golang.org/genproto/googleapis/api v0.0.0-20251222181119-0a764e51fe1b/go.mod h1:Xa7le7qx2vmqB/SzWUBa7KdMjpdpAHlh5QCSnjessQk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b h1:Mv8VFug0MP9e5vUxfBcE3vUkV6CImK3cMNMIDFjmzxU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= -google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= -google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60 h1:seT2EwLWM78plQ7wcDfuWBc/4FAEAXDDiaSol4ku4qo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= +google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/internal/pkg/fakeroot/fakefake.go new/apptainer-1.5.3/internal/pkg/fakeroot/fakefake.go --- old/apptainer-1.5.1/internal/pkg/fakeroot/fakefake.go 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/internal/pkg/fakeroot/fakefake.go 2026-07-21 20:47:49.000000000 +0200 @@ -97,6 +97,34 @@ } } +// Given an existing environment, modify it as needed to successfully +// execute the fakeroot command. If cleanLdLibraryPath is true, also +// remove any existing $LD_LIBRARY_PATH variable. +func GetFakeEnviron(environ []string, cleanLdLibraryPath bool) []string { + hasPath := false + for idx := range environ { + if cleanLdLibraryPath && strings.HasPrefix(environ[idx], "LD_LIBRARY_PATH=") { + // Remove any incoming LD_LIBRARY_PATH + environ[idx] = "LD_LIBRARY_PATH=" + } else if strings.HasPrefix(environ[idx], "PATH=") && environ[idx] != "PATH=" { + hasPath = true + // Append /:singularity.d/libs to the PATH for getopt + environ[idx] = environ[idx] + ":/.singularity.d/libs" + } + } + if !hasPath { + environ = append(environ, "PATH="+env.DefaultPath+":/.singularity.d/libs") + } + + // Without this workaround fakeroot does not work + // properly in a user namespace. It is especially + // noticeable with debian containers. Learned from + // https://salsa.debian.org/clint/fakeroot/-/merge_requests/4 + environ = append(environ, "FAKEROOTDONTTRYCHOWN=1") + + return environ +} + // Get the binds needed to map the fakeroot command into the container // The incoming parameter is the path to fakeroot func GetFakeBinds(fakerootPath string) ([]string, error) { @@ -109,29 +137,19 @@ if fakerootPath == args[0] { // The binding has already been done, this is for nesting + // Include getopt if it was included previously + if _, err := os.Stat("/.singularity.d/libs/getopt"); err == nil { + binds = append(binds, "/.singularity.d/libs/getopt") + } return binds, nil } // Start by examining the environment fakeroot creates cmd := osExec.Command(fakerootPath, "env") - environ := os.Environ() - hasPath := false - for idx := range environ { - if strings.HasPrefix(environ[idx], "LD_LIBRARY_PATH=") { - // Remove any incoming LD_LIBRARY_PATH - environ[idx] = "LD_LIBRARY_PATH=" - } else if strings.HasPrefix(environ[idx], "PATH=") && - environ[idx] != "PATH=" { - hasPath = true - } - } - if !hasPath { - environ = append(environ, "PATH="+env.DefaultPath) - } - cmd.Env = environ + cmd.Env = GetFakeEnviron(os.Environ(), true) stdout, err := cmd.StdoutPipe() if err != nil { - return binds, fmt.Errorf("error make fakeroot stdout pipe: %v", err) + return binds, fmt.Errorf("error making fakeroot stdout pipe: %v", err) } err = cmd.Start() @@ -190,5 +208,11 @@ break } } + // Check if getopt exists and add it to binds if it does + if getoptPath, err := bin.FindBin("getopt"); err == nil { + binds = append(binds, getoptPath+":/.singularity.d/libs/getopt") + } else { + sylog.Infof("getopt not found; could interfere with fakeroot command") + } return binds, nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/internal/pkg/image/packer/squashfs.go new/apptainer-1.5.3/internal/pkg/image/packer/squashfs.go --- old/apptainer-1.5.1/internal/pkg/image/packer/squashfs.go 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/internal/pkg/image/packer/squashfs.go 2026-07-21 20:47:49.000000000 +0200 @@ -15,6 +15,7 @@ "os" "os/exec" "strings" + "syscall" "github.com/apptainer/apptainer/internal/pkg/client" "github.com/apptainer/apptainer/internal/pkg/util/bin" @@ -23,6 +24,25 @@ "github.com/blang/semver/v4" ) +// hasWorkingPtrace returns true if the ptrace() system call is usable. +// proot relies on ptrace, which can be unavailable because of a seccomp +// filter, an AppArmor/Yama restriction, or because Apptainer itself is +// running inside another container without the CAP_SYS_PTRACE capability. +func hasWorkingPtrace() bool { + // Use the currently running executable as the traced child: since + // PTRACE_TRACEME causes the child to stop with SIGTRAP right after + // the exec call and before running any of its own code, it doesn't + // matter which binary is exec'd as long as it exists and is runnable. + cmd := exec.Command("/proc/self/exe") + cmd.SysProcAttr = &syscall.SysProcAttr{Ptrace: true} + err := cmd.Start() + if err == nil { + _ = cmd.Process.Kill() + _, _ = cmd.Process.Wait() + } + return err == nil +} + // Squashfs represents a squashfs packer type Squashfs struct { MksquashfsPath string @@ -79,20 +99,26 @@ ignoreProot := os.Getenv("APPTAINER_IGNORE_PROOT") proot, err := bin.FindBin("proot") if ignoreProot == "" && err == nil { - // Insert proot around mksquashfs to take advantage of - // file owner and group information stored by umoci in - // a "rootlesscontainers" extended attribute. - // https://github.com/apptainer/apptainer/issues/2830 - args = append([]string{"-S", "/", prog}, args...) - prog = proot - // Add the MALLOC settings to workaround segfaults seen - // in mksquashfs on Ubuntu 22.04 - // https://github.com/apptainer/apptainer/issues/3486 - extraEnv = append(extraEnv, - "MALLOC_MMAP_MAX_=0", - "MALLOC_ARENA_MAX=32", - ) - } else { + if hasWorkingPtrace() { + // Insert proot around mksquashfs to take advantage of + // file owner and group information stored by umoci in + // a "rootlesscontainers" extended attribute. + // https://github.com/apptainer/apptainer/issues/2830 + args = append([]string{"-S", "/", prog}, args...) + prog = proot + // Add the MALLOC settings to workaround segfaults seen + // in mksquashfs on Ubuntu 22.04 + // https://github.com/apptainer/apptainer/issues/3486 + // https://github.com/apptainer/apptainer/issues/3560 + extraEnv = append(extraEnv, + "MALLOC_MMAP_MAX_=0", + "MALLOC_ARENA_MAX=1000000", + ) + } else { + sylog.Infof("Skipping preservation of file ownership because ptrace() does not work") + } + } + if prog != proot { args = append(args, "-all-root") } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/internal/pkg/image/packer/squashfs_test.go new/apptainer-1.5.3/internal/pkg/image/packer/squashfs_test.go --- old/apptainer-1.5.1/internal/pkg/image/packer/squashfs_test.go 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/internal/pkg/image/packer/squashfs_test.go 2026-07-21 20:47:49.000000000 +0200 @@ -107,6 +107,14 @@ checkArchive(t, imageName, []string{"squashfs.go", "squashfs_test.go"}) } +func TestHasWorkingPtrace(t *testing.T) { + // ptrace is expected to work in the environment running the unit + // tests (no seccomp filter or similar restriction in place). + if !hasWorkingPtrace() { + t.Error("expected ptrace to work in the test environment") + } +} + func TestSquashfs(t *testing.T) { if s := NewSquashfs(); !s.HasMksquashfs() { t.Skip("mksquashfs not found, skipping") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/internal/pkg/runtime/engine/apptainer/process_linux.go new/apptainer-1.5.3/internal/pkg/runtime/engine/apptainer/process_linux.go --- old/apptainer-1.5.1/internal/pkg/runtime/engine/apptainer/process_linux.go 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/internal/pkg/runtime/engine/apptainer/process_linux.go 2026-07-21 20:47:49.000000000 +0200 @@ -945,11 +945,7 @@ sylog.Verbosef("Running command with %v", filepath.Base(fakerootPath)) args = append(fakeargs, args...) - // Without this workaround fakeroot does not work - // properly in a user namespace. It is especially - // noticeable with debian containers. Learned from - // https://salsa.debian.org/clint/fakeroot/-/merge_requests/4 - penv = append(penv, "FAKEROOTDONTTRYCHOWN=1") + penv = fakeroot.GetFakeEnviron(penv, false) if engineConfig.GetFakerootPath() == "" { // Must be joining an instance, so also set BIND diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/internal/pkg/util/bin/bin.go new/apptainer-1.5.3/internal/pkg/util/bin/bin.go --- old/apptainer-1.5.1/internal/pkg/util/bin/bin.go 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/internal/pkg/util/bin/bin.go 2026-07-21 20:47:49.000000000 +0200 @@ -57,6 +57,7 @@ "fakeroot-sysv", "fuse-overlayfs", "fuse2fs", + "getopt", "go", "mksquashfs", "newgidmap", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/scripts/compile-dependencies new/apptainer-1.5.3/scripts/compile-dependencies --- old/apptainer-1.5.1/scripts/compile-dependencies 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/scripts/compile-dependencies 2026-07-21 20:47:49.000000000 +0200 @@ -21,8 +21,8 @@ for PKG in squashfs-tools squashfuse e2fsprogs fuse-overlayfs gocryptfs PRoot; do TGZ="$(echo $SRC/${PKG}[_-]*.tar.gz)" if [ ! -f "$TGZ" ]; then - echo "\$PKG[_-]*.tar.gz not found in $SRC, skipping" >&2 - continue + echo "\$PKG[_-]*.tar.gz not found in $SRC, skipping" >&2 + continue fi DIR=${TGZ%.tar.gz} DIR=${DIR/*\//} @@ -30,49 +30,49 @@ tar -xf $TGZ cd $DIR for PATCH in $(echo $SRC/$PKG-*.patch); do - if [ -f "$PATCH" ]; then - patch -p1 <$PATCH - fi + if [ -f "$PATCH" ]; then + patch -p1 <$PATCH + fi done case "$PKG" in - squashfs-tools) - make -C squashfs-tools mksquashfs unsquashfs GZIP_SUPPORT=1 \ - LZO_SUPPORT=1 LZ4_SUPPORT=1 XZ_SUPPORT=1 ZSTD_SUPPORT=1 - ;; - squashfuse) - ./autogen.sh - FLAGS=-std=c99 ./configure --enable-multithreading - make squashfuse_ll - ;; - e2fsprogs) - ./configure - make libs && make -C misc fuse2fs - mv misc/fuse2fs . - ;; - fuse-overlayfs) - ./autogen.sh - ./configure - make - ;; - gocryptfs) - VER=${DIR/*-/} - echo "v$VER" >VERSION - # Don't hardcode the amd64 microarchitecture - sed -e '/GOAMD64.*v2/d' -i.orig build.bash - # GOPROXY=off makes sure we fail instead of making network requests - # the -B ldflags prevent rpm complaints about "No build ID note found" - CGO_ENABLED=0 GOPROXY=off ./build.bash \ - -mod=vendor -tags without_openssl \ - -buildvcs=false -ldflags="-X main.GitVersion=v$VER \ - -B 0x`head -c20 /dev/urandom|od -An -tx1|tr -d ' \n'`" - ;; - PRoot) - make -C src proot - ;; - *) - echo "unrecognized package $PKG" >&2 - exit 1 - ;; + squashfs-tools) + make -C squashfs-tools mksquashfs unsquashfs GZIP_SUPPORT=1 \ + LZO_SUPPORT=1 LZ4_SUPPORT=1 XZ_SUPPORT=1 ZSTD_SUPPORT=1 + ;; + squashfuse) + ./autogen.sh + FLAGS=-std=c99 ./configure --enable-multithreading + make squashfuse_ll + ;; + e2fsprogs) + ./configure + make libs && make -C misc fuse2fs + mv misc/fuse2fs . + ;; + fuse-overlayfs) + ./autogen.sh + ./configure + make + ;; + gocryptfs) + VER=${DIR/*-/} + echo "v$VER" >VERSION + # Don't hardcode the amd64 microarchitecture + sed -e '/GOAMD64.*v2/d' -i.orig build.bash + # GOPROXY=off makes sure we fail instead of making network requests + # the -B ldflags prevent rpm complaints about "No build ID note found" + CGO_ENABLED=0 GOPROXY=off ./build.bash \ + -mod=vendor -tags without_openssl \ + -buildvcs=false -ldflags="-X main.GitVersion=v$VER \ + -B 0x`head -c20 /dev/urandom|od -An -tx1|tr -d ' \n'`" + ;; + PRoot) + make -C src proot + ;; + *) + echo "unrecognized package $PKG" >&2 + exit 1 + ;; esac cd .. done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/scripts/download-dependencies new/apptainer-1.5.3/scripts/download-dependencies --- old/apptainer-1.5.1/scripts/download-dependencies 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/scripts/download-dependencies 2026-07-21 20:47:49.000000000 +0200 @@ -32,30 +32,40 @@ done echo "$LINE")) if [[ "$LINE" = *http* ]]; then - URL="${LINE/*http/http}" - if [[ "$LINE" = "URL:"*http* ]]; then - # the file name is on the next line - continue - fi - # take the file name from the base of the URL - LINE="${LINE/*\//}" + URL="${LINE/*http/http}" + if [[ "$LINE" = "URL:"*http* ]]; then + # the file name is on the next line + continue + fi + # take the file name from the base of the URL + LINE="${LINE/*\//}" fi if [[ "$LINE" = *PRoot* ]]; then # skip architectures known to not be supported by PRoot case $(arch) in ppc*|s390*|riscv*) continue;; + x86*) if [ -f /etc/os-release ]; then + . /etc/os-release + if [ "$ID" = fedora ] && [ "$VERSION_ID" -ge 45 ]; then + # On fedora45 x86_64 building PRoot dies with + # "relocation truncated to fit: R_X86_64_PC32 against `.rodata'" + # See https://github.com/proot-me/proot/issues/414 + continue + fi + fi + ;; esac fi if [ -n "$GITHUB_TOKEN" ] && [[ "$URL" = *github.com/*.patch ]]; then - # use github API instead because the public URL downloads - # sometimes hit server busy (429) when run in github actions - URL="$(echo "$URL"|sed -e 's,github.com/,api.github.com/repos/,' \ - -e 's,/pull/,/pulls/,' -e 's,\.patch,,')" - curl -f -L -sS -o $DIR/$LINE \ - -H "Accept: application/vnd.github.diff" \ - -H "Authorization: Bearer $GITHUB_TOKEN" $URL + # use github API instead because the public URL downloads + # sometimes hit server busy (429) when run in github actions + URL="$(echo "$URL"|sed -e 's,github.com/,api.github.com/repos/,' \ + -e 's,/pull/,/pulls/,' -e 's,\.patch,,')" + curl -f -L -sS -o $DIR/$LINE \ + -H "Accept: application/vnd.github.diff" \ + -H "Authorization: Bearer $GITHUB_TOKEN" $URL else - curl -f -L -sS -o $DIR/$LINE $URL + curl -f -L -sS -o $DIR/$LINE $URL fi done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/scripts/install-dependencies new/apptainer-1.5.3/scripts/install-dependencies --- old/apptainer-1.5.1/scripts/install-dependencies 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/scripts/install-dependencies 2026-07-21 20:47:49.000000000 +0200 @@ -35,8 +35,8 @@ set -ex for CMD in squashfs-tools-*/squashfs-tools/{mksquashfs,unsquashfs} squashfuse-*/squashfuse_ll e2fsprogs-*/fuse2fs fuse-overlayfs-*/fuse-overlayfs gocryptfs[_-]*/gocryptfs PRoot-*/src/proot; do if [ ! -f "$CMD" ]; then - echo "$CMD not found, skipping" >&2 - continue + echo "$CMD not found, skipping" >&2 + continue fi cp -f $CMD $DIR done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apptainer-1.5.1/tools/install-unprivileged.sh new/apptainer-1.5.3/tools/install-unprivileged.sh --- old/apptainer-1.5.1/tools/install-unprivileged.sh 2026-06-04 17:00:22.000000000 +0200 +++ new/apptainer-1.5.3/tools/install-unprivileged.sh 2026-07-21 20:47:49.000000000 +0200 @@ -12,9 +12,9 @@ # Works with apptainer versions 1.1.4 and higher. REQUIREDCMDS="curl rpm2cpio cpio" - -# assumes at least a 1 Mbit connection -CURLOPTS="--connect-timeout 5 -Y 125000 -y 10 -Ls" +MAXRETRIES=5 +# assumes at least a 0.5 Mbit connection +CURLOPTS="--connect-timeout 10 -Y 50000 -y 10 -Ls" usage() { @@ -143,7 +143,7 @@ DIST=el9 fi ;; - suse15|opensuse-leap) + suse15|suse16|opensuse-leap) if $NOOPENSUSE; then DIST=el8 fi @@ -194,10 +194,16 @@ EXTRASREPOURL=$OSREPOURL OSSPLIT=false ;; - suse15|opensuse-leap) + suse16|opensuse-leap) + OSREPOURL="https://download.opensuse.org/distribution/leap/16.0/repo/oss/$ARCH" + EPELREPOURL="https://download.opensuse.org/repositories/network:/cluster/16.0/$ARCH" + EXTRASREPOURL="https://download.opensuse.org/repositories/filesystems/16.0/$ARCH" + OSSPLIT=false + ;; + suse15) OSREPOURL="https://download.opensuse.org/distribution/leap/15.6/repo/oss/$ARCH" EPELREPOURL="https://download.opensuse.org/repositories/network:/cluster/15.6/$ARCH" - EXTRASREPOURL="https://download.opensuse.org/repositories/filesystems/15.6/$ARCH" + EXTRASREPOURL="https://download.opensuse.org/repositories/filesystems/15.7/$ARCH" OSSPLIT=false ;; *) fatal "$1 distribution not supported";; @@ -240,7 +246,7 @@ URL="${URL/\/Packages\///os/Packages/}" latesturl "$URL" "$2" false false return $? - elif [ $RETRY -lt 3 ]; then + elif [ $RETRY -lt $MAXRETRIES ]; then RETRY=$((RETRY+1)) if $SHOWERRORS; then echo "Retrying..." >&2 @@ -270,7 +276,7 @@ APPTAINERURL="$KOJIURL/$REL/$ARCH/apptainer-$VERSION-$REL.$ARCH.rpm" fi -# Retry url to 3 times if download fails +# Retry url up to $MAXTRIES times if download fails extracturl() { typeset URL="$1" @@ -282,7 +288,7 @@ break fi RETRY=$((RETRY+1)) - if [ "$RETRY" -ge 3 ]; then + if [ "$RETRY" -ge $MAXRETRIES ]; then fatal "Failure extracting $URL" fi if $SHOWERRORS; then @@ -312,7 +318,7 @@ fatal "error removing usr" fi -OSUTILS="" +OSUTILS="util-linux" NEEDSFUSE2FS=true LIBEXEC=libexec if [ "$DIST" == suse15 ] || [ "$DIST" == opensuse-leap ]; then @@ -450,7 +456,7 @@ mv tmp/lib*/* utils/lib 2>/dev/null || true # optional mv tmp/usr/*bin/*squashfs utils/libexec mv tmp/usr/*bin/fuse* utils/libexec 2>/dev/null || true # optional -mv tmp/usr/bin/fake*sysv utils/bin +mv tmp/usr/bin/fake*sysv tmp/usr/bin/getopt utils/bin cat >utils/bin/.wrapper <<'!EOF!' #!/bin/bash BASEME=${0##*/} ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-07-26 07:40:55.000000000 +0200 @@ -0,0 +1,8 @@ +*.obscpio +*.osc +_build.* +.pbuild +*.obscpio +*.osc +_build.* +.pbuild ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/apptainer/vendor.tar.gz /work/SRC/openSUSE:Factory/.apptainer.new.2004/vendor.tar.gz differ: char 14, line 1
