Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Update Linux distribution package list for v3.7.0 release#6067

Merged
chrisd8088 merged 11 commits into
git-lfs:mainfrom
chrisd8088:update-distro-builds
Jun 24, 2025
Merged

Update Linux distribution package list for v3.7.0 release#6067
chrisd8088 merged 11 commits into
git-lfs:mainfrom
chrisd8088:update-distro-builds

Conversation

@chrisd8088

@chrisd8088 chrisd8088 commented Jun 20, 2025

Copy link
Copy Markdown
Member

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 Dockerfile we 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 LDFLAGS environment variable is set on this platform with multiple arguments, some of which are not valid options for the Go linker, we also update our Makefile to correctly escape the value of this variable when it is passed to the Go linker via the -extldflags option. Note that, in practice, the parameter we supply 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. 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.

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 Dockerfile we 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.bsh script 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 a rubygem-asciidoctor package 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 the Dockerfiles we use to build RPM packages for those platforms to install this official rubygem-asciidoctor package.

Second, we eliminate the workaround introduced to the t/t-clone.sh test 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 our lfstest-gitserver utility 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 Dockerfile we 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:

  • We remove a conditional clause from our rpm/SPECS/git-lfs.spec file which was intended to avoid compiling with cgo enabled on RHEL 5 and CentOS 5 platforms, but which was never effective in practice.
  • We update the minimum required version of Git we specify in our Debian and RPM packages to v2.0.0, as that has been the earliest version of Git we support since PR #2353.
  • We also update the minimum required version of Go we specify in our Debian and RPM packages to v1.23.0, as that has been the minimum version required to build the Git LFS client since PR #5997.
  • We update the code comments in several of our build and test scripts to better reflect the set of Linux platforms we currently support.
  • Likewise, we update the Linux distribution examples in some of our installation instructions to better reflect the set of Linux platforms we currently support.

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.
@chrisd8088 chrisd8088 requested a review from a team as a code owner June 20, 2025 03:09
@chrisd8088 chrisd8088 added the distribution First-party packages and release assets label Jun 20, 2025
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.
@chrisd8088 chrisd8088 merged commit e28a8de into git-lfs:main Jun 24, 2025
10 checks passed
@chrisd8088 chrisd8088 deleted the update-distro-builds branch June 24, 2025 23:57
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

distribution First-party packages and release assets docs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants