Update Linux distribution package list for v3.7.0 release#6067
Merged
Conversation
In commit e828a95 of PR git-lfs#3444 we updated our Makefile so it would pass any linker flags defined in the LDFLAGS environment variable to the Go linker to be passed on to the external system linker. To do this we define the EXTRA_LD_FLAGS Makefile variable, if it is not already defined, with the Go linker's -extldflags option and the value of the LDFLAGS environment variable as the parameter to that option. The EXTRA_LD_FLAGS variable is then included in the LD_FLAGS Makefile variable, which is supplied as the parameter value of the Go compiler command's -ldflags option in the definition of our BUILD Makefile variable. The "go build" compiler command passes the value of its -ldflags option to the "go link" command, which in turn should pass the value of its -extldflags option to the external linker. At present, we enclose the entire value of the -ldflags option in quotation marks, so the full set of arguments from our LD_FLAGS variable is correctly passed to the "go build" command as a single parameter, and then expanded into a set of arguments for the "go link" command. However, we do not enclose the value of the LDFLAGS environment variable in quotation marks, so if it contains multiple arguments for the external linker, only the first is treated as the parameter of the -extldflags option and the remainder are incorrectly considered to be options to the "go link" command. In PR git-lfs/build-dockers#71 and in subsequent commits in this PR we expect to introduce support for the recently-released Red Hat Enterprise Linux (RHEL) 10 and Rocky Linux 10 platform, so that our CI and release GitHub Actions workflows will build RPM packages for this platform. However, our builds of the Git LFS client will not succeed on this platform unless we revise our handling of the LDFLAGS environment variable first, because that environment variable is defined on RHEL/Rocky Linux 10 systems with multiple options, some of which are not valid options for the Go linker. As a result, the "go link" command will fail with an error such as "flag provided but not defined: -Wl,--as-needed" when it tries to parse a -Wl option intended for the external linker as if it were an argument to the Go linker. We therefore update our Makefile's definition of the EXTRA_LD_FLAGS variable so that it enclose any value from the LDFLAGS environment variable in escaped quotation marks. By escaping these delimiters we ensure they will be retained as literals within the single parameter passed for the -ldflags option and not terminate that parameter prematurely. Instead, the value they enclose will now be passed as single parameter for the -extldflags option. We also take the opportunity to replace the curly braces around the LDFLAGS variable name with parentheses, which is the newer style of Makefile variable reference. Note that, in practice, the value we pass to the -extldflags option will be ignored because the Go compiler command does not need to invoke an external linker, since our code no longer imports the "C" pseudo- module nor makes any direct calls to C functions. Our last remaining C code was removed in commit c65ea86 of PR git-lfs#4387. However, for the moment we retain support in our Makefile for the use of the -extldflags option with any system-defined linker arguments in case we have need to resort to the use of C code again in the future.
In commit 6006acc in PR git-lfs#976 we introduced a conditional build clause to the SPEC file use we to build RPM Linux packages, in an attempt to avoid compiling with cgo enabled on Red Hat Enterprise Linux (RHEL) 5 and CentOS 5 platforms. This change was made after the use of the "C" pseudo- module was introduced into the Git LFS client code in commit ea16fd5 of PR git-lfs#952, as part of our initial support for copy-on-write file creation. In practice, though, this conditional build clause was ineffective, according to the notes in PR git-lfs#976. Instead, one of the Dockerfiles used to build RPM packages for the RHEL/CentOS 5 platform was updated in commit git-lfs/build-dockers@39cec36 of PR git-lfs/build-dockers#1 to set the CGO_ENABLED environment variable with a value of "0". The conditional build clause in our SPEC file was never removed afterwards, however. Later, the Dockerfile in which the CGO_ENABLED environment variable was set was removed in commit git-lfs/build-dockers@d4c2fe6, and the primary Dockerfile used for building packages for the RHEL/CentOS 5 platform was then dropped in commit git-lfs/build-dockers@64a3a9f of PR #3. This followed the removal of the references to the RHEL/CentOS 5 platform from the scripts in our "dockers" directory in commit b560b85 of PR git-lfs#1298. As there is no value to retaining the conditional build clause for the RHEL/CentOS 5 platform in the SPEC file for our RPM packages, we simply remove it now.
When we build Debian and RPM Linux packages, we define the minimum versions of Git and Go required by the Git LFS client. However, the minimum versions we specify are at present somewhat out of date. Specifically, both the "control" file for our Debian packages and the SPEC file for our RPM packages state that we require at least Git version 1.8.2, and the former also specifies that we require at least Go version 1.12.0. In practice, though, since we introduced the "git lfs migrate" command in PR git-lfs#2353, Git v2.0.0 has been the earliest version of Git we support, as per commit 5aea841 of that PR. We have also required at least Go v1.23.0 to build the Git LFS client since commit 70e23fa of PR git-lfs#5997, when we updated the minimum version of the x/crypto Go module specified in our "go.mod" file and the "go mod tidy" command then also updated the minimum required version of Go to 1.23.0. Because we anticipate making a v3.7.0 release of the Git LFS client in the near future, we now update the "control" file for our Debian packages and the SPEC file for our RPM packages to indicate that the Git LFS client requires at least Git v2.0.0 and Go v1.23.0.
As announced with the v3.6.0 release of the Git LFS client, and as noted in commit 23fbfe8 of PR git-lfs#5911, since all the distribution versions based on Red Hat Enterprise Linux (RHEL) 7, CentOS 7, and SUSE Linux Enterprise Server (SLES) 12 for which we previously built RPM packages have now reached the end of their standard LTS (Long-Term Support) periods, future releases of Git LFS will no longer provide support for these platforms or build packages for them. Because we anticipate making a v3.7.0 release of the Git LFS client in the near future, we removed the Dockerfile we used to build packages for the RHEL/CentOS 7 and SLES 12 platforms in commit git-lfs/build-dockers@cfde130 of PR git-lfs/build-dockers#71. We can now also remove the entries for these platforms from the list of our supported Linux distribution versions in the DistroMap Ruby class source file, which is utilized by several scripts run by our GitHub Actions release workflow jobs when building and naming the Linux packages we publish on Packagecloud.
As announced with the v3.6.0 release of the Git LFS client, and as noted in commit 23fbfe8 of PR git-lfs#5911, since all the distribution versions based on Debian 10 ("buster") for which we previously built Debian packages have now reached the end of their standard LTS (Long-Term Support) periods, future releases of Git LFS will no longer provide support for this platform or build packages for it. Because we anticipate making a v3.7.0 release of the Git LFS client in the near future, we removed the Dockerfile we used to build packages for the Debian 10 platform in commit git-lfs/build-dockers@04829f9 of PR git-lfs/build-dockers#71. We can now also remove the entries for this platform from the list of our supported Linux distribution versions in the DistroMap Ruby class source file, which is utilized by several scripts run by our GitHub Actions release workflow jobs when building and naming the Linux packages we publish on Packagecloud.
Rocky Linux 10.0 was recently released, following the release last month of RHEL (Red Hat Enterprise Linux) 10.0, and because we anticipate making a v3.7.0 release of the Git LFS client in the near future, we added a Dockerfile we can use to build packages for the RHEL/Rocky Linux 10 platform in commit git-lfs/build-dockers@cc16329 of PR git-lfs/build-dockers#71. We can now also add entries for this platform to the list of our supported Linux distribution versions in the DistroMap Ruby class source file, which is utilized by several scripts run by our GitHub Actions release workflow jobs when building and naming the Linux packages we publish on Packagecloud.
We maintain a compatibility matrix of Linux distributions and versions in the DistroMap Ruby class in our script/lib/distro.rb source file, which is utilized by several scripts run by our GitHub Actions release workflow jobs when building and naming the Linux packages we publish on Packagecloud. As we anticipate making a v3.7.0 release of the Git LFS client in the near future, we first update the list of Linux distribution versions for which we will build RPM and Debian packages, removing those which have reached the end of their regular support lifecycles and adding those which have become available since our v3.6.0 release.
As announced with the v3.6.0 release of the Git LFS client, and as noted in commit 23fbfe8 of PR git-lfs#5911, since all the distribution versions based on Red Hat Enterprise Linux (RHEL) 7, CentOS 7, and SUSE Linux Enterprise Server (SLES) 12 for which we previously built RPM packages have now reached the end of their standard LTS (Long-Term Support) periods, future releases of Git LFS will no longer provide support for these platforms or build packages for them. Because we anticipate making a v3.7.0 release of the Git LFS client in the near future, we removed the Dockerfile we used to build packages for the RHEL/CentOS 7 and SLES 12 platforms in commit git-lfs/build-dockers@cfde130 of PR git-lfs/build-dockers#71. We then also removed the entries for these platforms from the list of our supported Linux distribution versions in the DistroMap Ruby class source file, which is utilized by several scripts run by our GitHub Actions release workflow jobs when building and naming the Linux packages we publish on Packagecloud. Previously, we removed support for the RHEL/CentOS 6 platform in commit d69e28d in PR git-lfs#4328. However, our "docker/run_dockers.bsh" shell script still references these platforms in its comments, so we update that script now to provide more up-to-date usage examples. As well, we update the test data in the Ruby RSpec script we use to validate the DistroMap Ruby class source file, so that the test data now aligns more closely with our current list of supported Linux distribution versions. Note, though, that this change does not affect the behaviour of either the test script or the DistroMap source file.
In PR git-lfs#5054 we updated the source files of our manual pages from the Ronn format to the AsciiDoc format, which necessitated changing our Linux package build processes to use the Asciidoctor Ruby gem to generate manual pages in Roff and HTML formats. At the time, an RPM package for a 2.0.x version of the Asciidoctor Ruby gem was not easily available for all the platforms based on Red Hat Enterprise Linux (RHEL) that we supported, particularly RHEL/CentOS 7, so in commit db9a821 of PR git-lfs#5054 we updated the "rpm/build_rpms.bsh" script to build and install a custom RPM package with Asciidoctor v2.0.17. In the same commit we also defined a SPEC file for this custom rubygem-asciidoctor RPM package in the "rpm/SPECS" directory. However, we have now removed the Dockerfile we used to build packages for the RHEL/CentOS 7 and SLES 12 platforms in commit git-lfs/build-dockers@cfde130 of PR git-lfs/build-dockers#71, because all the distribution versions based on RHEL 7, CentOS 7, and SUSE Linux Enterprise Server (SLES) 12 for which we previously built RPM packages have now reached the end of their standard LTS (Long-Term Support) periods, and so future releases of the Git LFS client will no longer build packages for them. Further, in PR git-lfs/build-dockers#73 we updated the Dockerfiles we use to build RPM packages of the Git LFS client on the RHEL/CentOS 8, RHEL/Rocky Linux 9, and RHEL/Rocky Linux 10 platforms so that the rubygem-asciidoctor package is installed before the final command in the Dockerfiles is run. This rubygem-asciidoctor package provides Asciidoctor v2.0.15 or higher, so we no longer need to build and install a custom RPM package in order to use Asciidoctor to generate manual pages formatted in Roff and HTML. We can therefore now delete our custom SPEC file for the rubygem-asciidoctor package, and also simplify our "rpm/build_rpms.bsh" script by removing the section which built and installed our custom RPM package if the "asciidoctor" command was not found in a given Docker container image for an RHEL-based platform.
In commit e4e5ada of PR git-lfs#5882 we added an initial check to the t/t-clone.sh test script which detects whether libcurl is linked against the legacy libnss3 library on Linux, and if so, sets a GIT_LIBNSS variable. We then check that variable at the start of several tests in the script, and if it is set, skip performing the tests. This workaround was introduced because the libnss3 library rejects TLS/SSL certificates which have both an Extended Key Usage attribute for TLS Web Server Authentication and a Basic Constraint setting of "CA:TRUE", and the self-signed certificate used by our lfstest-gitserver utility program has both attributes, so our tests would otherwise fail. The only platform on which our tests run which used the legacy libnss3 library was the one based on Red Hat Enterprise Linux (RHEL) 7. All the distribution versions based on RHEL 7, CentOS 7, and SUSE Linux Enterprise Server (SLES) 12 for which we previously built RPM packages have now reached the end of their standard LTS (Long-Term Support) periods, and so future releases of the Git LFS client will no longer build packages for them. We therefore removed the Dockerfile we used to build packages for the RHEL/CentOS 7 and SLES 12 platforms in commit git-lfs/build-dockers@cfde130 of PR git-lfs/build-dockers#71. As well, in a prior commit in this PR we removed the entries for these platforms from the list of our supported Linux distribution versions in the DistroMap Ruby class source file, which is utilized by several scripts run by our GitHub Actions CI and release workflow jobs. Since our CI and release workflows will no longer run on any platforms where libcurl is linked against the legacy libnss3 library, we can now also remove the checks for the libnss3 library from our t/t-clone.sh test script.
As announced with the v3.6.0 release of the Git LFS client, and as noted in commit 23fbfe8 of PR git-lfs#5911, since all the distribution versions based on Red Hat Enterprise Linux (RHEL) 7, CentOS 7, and SUSE Linux Enterprise Server (SLES) 12 for which we previously built RPM packages have now reached the end of their standard LTS (Long-Term Support) periods, future releases of Git LFS will no longer provide support for these platforms or build packages for them. Because we anticipate making a v3.7.0 release of the Git LFS client in the near future, we removed the Dockerfile we used to build packages for the RHEL/CentOS 7 and SLES 12 platforms in commit git-lfs/build-dockers@cfde130 of PR git-lfs/build-dockers#71. We then also removed the entries for these platforms from the list of our supported Linux distribution versions in the DistroMap Ruby class source file, which is utilized by several scripts run by our GitHub Actions release workflow jobs when building and naming the Linux packages we publish on Packagecloud. Previously, in commit ff36182 of PR git-lfs#4328, we removed support for distribution versions based on the Debian 8 ("jessie") platform, including Ubuntu 14.04 ("Trusty Tahr") and Linux Mint 17.1 ("Rebecca"). However, some of the installation examples in our "INSTALLING.md" page still reference these platforms, so we update these exmaples now with more contemporary Linux distribution versions.
larsxschneider
approved these changes
Jun 24, 2025
This was referenced Jan 20, 2026
chrisd8088
added a commit
to chrisd8088/git-lfs
that referenced
this pull request
Apr 20, 2026
In commit 8ca171e of PR git-lfs#6067 we added an entry for the RHEL (Red Hat Enterprise Linux) 10.0 and Rocky Linux 10 platforms to the matrix of Linux distribution versions we support. We maintain this list in the DistroMap Ruby class in our "script/lib/distro.rb" source file. Several scripts that are run by our GitHub Actions release workflow jobs use the matrix to build and name the Linux packages we publish on Packagecloud. The RHEL/Rocky Linux 10 platform is derived from version 40 of the Fedora distribution, which served as the branch point for CentOS Stream 10 and later RHEL 10. As such, all these distribution versions use the same version of the GNU C library (glibc), specifically v2.39: https://www.redhat.com/en/blog/announcing-fedora-linux-40 https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html-single/10.0_release_notes/index https://fedoraproject.org/wiki/Releases/40/ChangeSet#GNU_Toolchain_Update_(gcc_14.0,_binutils_2.41,_glibc_2.39,_gdb_14.1) Therefore, when we added an entry for RHEL/Rocky Linux 10 to the list of Linux distribution versions we support, we should also have moved the entries for the then-current versions 40 and 41 of the Fedora distribution into the group of entries which we consider equivalent to RHEL/Rocky Linux 10. However, we did not make this change at the time, so we now update our list of Linux distributions and move the entry for Fedora 42 to the group we consider equivalent to RHEL/Rocky Linux 10. As Fedora 42 uses glibc v2.41, any Git LFS binary we build for RHEL/Rocky Linux 10 and glibc v2.39 should be functional on Fedora 42 as well: https://fedoraproject.org/wiki/Releases/42/ChangeSet#GNU_Toolchain_Update_(gcc_15,_binutils_2.44,_glibc_2.41,_gdb_15+) We also take the opportunity to remove the entry for Fedora 41, as it has reached the end of its support life cycle, and add entries for Fedora 43 and 44, both of which are actively supported at present.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
As we anticipate releasing Git LFS version 3.7.0 in the near future, we first update our list of the Linux distributions and versions for which our scripts will publish RPM and Debian packages.
Most significantly, we remove support for RHEL/CentOS 7 and Debian 10, and add support for RHEL/Rocky Linux 10.
This PR will be most easily reviewed on a commit-by-commit basis.
RHEL/Rocky Linux 10
Rocky Linux 10.0 was recently released, following the release last month of RHEL (Red Hat Enterprise Linux) 10.0, so future releases of Git LFS beginning with v3.7.0 will provide support for this platform.
We added a
Dockerfilewe can use to build RPM packages for this platform in PR git-lfs/build-dockers#71, and in this PR we add entries for this platform to our list of Linux distribution versions and the end dates of their regular support lifecycles.Because the
LDFLAGSenvironment variable is set on this platform with multiple arguments, some of which are not valid options for the Go linker, we also update ourMakefileto correctly escape the value of this variable when it is passed to the Go linker via the-extldflagsoption. Note that, in practice, the parameter we supply to the-extldflagsoption will be ignored because the Go compiler command does not need to invoke an external linker, since our code no longer imports theCpseudo-module nor makes any direct calls to C functions. However, for the moment we retain support in ourMakefilefor the use of the-extldflagsoption with any system-defined linker arguments in case we have need to resort to the use of C code again in the future.RHEL/CentOS 7 and SLES 12
As announced with our v3.6.0 release and noted in PRs #5911 and git-lfs/build-dockers#71, since all the distribution versions based on Red Hat Enterprise Linux (RHEL) 7, CentOS 7, and SUSE Linux Enterprise Server (SLES) 12 for which we previously built RPM packages have now reached the end of their standard LTS (Long-Term Support) periods, future releases of Git LFS beginning with v3.7.0 will no longer provide support for these platforms or build packages for them.
We removed the
Dockerfilewe used to build RPM packages for this platform in PR git-lfs/build-dockers#71, and in this PR we remove the entries for this platform from our list of Linux distribution versions and the end dates of their regular support lifecycles.Because we will no longer support the RHEL/CentOS 7 and SLES 12 platforms, we are also able to remove several sections of our build and test scripts which were specific to these platforms.
First, we update our
rpm/build_rpms.bshscript so that it no longer builds and installs a custom RPM package for Asciidoctor in order to generate manual pages formatted in Roff and HTML. We also delete the SPEC file we used for that custom package. We no longer need this custom installation of Asciidoctor v2.0.x to generate HTML and Roff versions of our manual pages because arubygem-asciidoctorpackage with at least Asciidoctor v2.0.15 is available for all the newer RHEL-based platforms we support, and so in PR git-lfs/build-dockers#73 we updated theDockerfiles we use to build RPM packages for those platforms to install this officialrubygem-asciidoctorpackage.Second, we eliminate the workaround introduced to the
t/t-clone.shtest script in PR #5882, which detects whether the Git's binaries are linked against the legacy libnss3 library, and if so, sets a variable which we then check in several tests to determine whether to skip those tests. We added these checks because the libnss3 library rejects the self-signed certificate used by ourlfstest-gitserverutility program, so our tests would otherwise fail on RHEL/CentOS 7 systems.Debian 10 ("buster")
As also announced with our v3.6.0 release and noted in PRs #5911 and git-lfs/build-dockers#71, since all the distribution versions based on Debian 10 ("buster") for which we previously built Debian packages have now reached the end of their standard LTS (Long-Term Support) periods, future releases of Git LFS will no longer provide support for this platform or build packages for it.
We removed the
Dockerfilewe used to build Debian packages for this platform in PR git-lfs/build-dockers#71, and in this PR we remove the entries for this platform from our list of Linux distribution versions and the end dates of their regular support lifecycles.Other Platforms
In addition to the changes described above, we also update our list of Linux distribution versions to remove distribution versions that are no longer supported and add those which have become available since our last revisions in PR #5911, prior to our Git LFS v3.6.0 release.
Other Changes
Lastly, we make a number of small changes to various other files related to our build processes:
rpm/SPECS/git-lfs.specfile which was intended to avoid compiling withcgoenabled on RHEL 5 and CentOS 5 platforms, but which was never effective in practice.