This is an automated email from the ASF dual-hosted git repository.
raulcd pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new f3f1eb0f1f GH-49341: [Packaging] Add support for Ubuntu 26.04 (#49345)
f3f1eb0f1f is described below
commit f3f1eb0f1fd5436c2936cdf33982bf50e5ec4d88
Author: Sutou Kouhei <[email protected]>
AuthorDate: Wed Feb 25 02:09:36 2026 +0900
GH-49341: [Packaging] Add support for Ubuntu 26.04 (#49345)
### Rationale for this change
Ubuntu 26.04 will be the next LTS for Ubuntu. It'll be released on 2026-04.
### What changes are included in this PR?
* Add `Dockerfile`s for Ubuntu 26.04
* Add Ubuntu 26.04 entries
* Add a labeler configuration for Linux packages
### Are these changes tested?
Yes.
### Are there any user-facing changes?
Yes.
* GitHub Issue: #49341
Authored-by: Sutou Kouhei <[email protected]>
Signed-off-by: Raúl Cumplido <[email protected]>
---
.github/workflows/dev_pr/labeler.yml | 9 +++
.github/workflows/package_linux.yml | 2 +
dev/release/binary-task.rb | 3 +
dev/release/verify-release-candidate.sh | 6 +-
.../apt/ubuntu-resolute/Dockerfile | 41 +++++++++++
.../apache-arrow/apt/ubuntu-resolute-arm64/from | 18 +++++
.../apache-arrow/apt/ubuntu-resolute/Dockerfile | 85 ++++++++++++++++++++++
dev/tasks/linux-packages/apache-arrow/debian/rules | 19 ++++-
dev/tasks/linux-packages/package-task.rb | 2 +
9 files changed, 179 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/dev_pr/labeler.yml
b/.github/workflows/dev_pr/labeler.yml
index e13287856e..057a1f954f 100644
--- a/.github/workflows/dev_pr/labeler.yml
+++ b/.github/workflows/dev_pr/labeler.yml
@@ -79,3 +79,12 @@
- any-glob-to-any-file:
- .github/workflows/cpp_extra.yml
- cpp/src/arrow/flight/sql/odbc/**/*
+
+"CI: Extra: Package: Linux":
+- changed-files:
+ - any-glob-to-any-file:
+ - .github/workflows/package_linux.yml
+ - dev/release/binary-task.rb
+ - dev/release/verify-apt.sh
+ - dev/release/verify-yum.sh
+ - dev/tasks/linux-packages/**/*
diff --git a/.github/workflows/package_linux.yml
b/.github/workflows/package_linux.yml
index e300251e16..b3f422746d 100644
--- a/.github/workflows/package_linux.yml
+++ b/.github/workflows/package_linux.yml
@@ -109,6 +109,8 @@ jobs:
- ubuntu-jammy-arm64
- ubuntu-noble-amd64
- ubuntu-noble-arm64
+ - ubuntu-resolute-amd64
+ - ubuntu-resolute-arm64
env:
DOCKER_VOLUME_PREFIX: ".docker/"
steps:
diff --git a/dev/release/binary-task.rb b/dev/release/binary-task.rb
index 79d4903755..11feb4fa43 100644
--- a/dev/release/binary-task.rb
+++ b/dev/release/binary-task.rb
@@ -1433,6 +1433,7 @@ class BinaryTask
["debian", "forky", "main"],
["ubuntu", "jammy", "main"],
["ubuntu", "noble", "main"],
+ ["ubuntu", "resolute", "main"],
]
end
@@ -2333,6 +2334,8 @@ class LocalBinaryTask < BinaryTask
# "ubuntu-jammy-arm64",
"ubuntu-noble",
# "ubuntu-noble-arm64",
+ "ubuntu-resolute",
+ # "ubuntu-resolute-arm64",
]
end
diff --git a/dev/release/verify-release-candidate.sh
b/dev/release/verify-release-candidate.sh
index e6def2ca19..325c4342e6 100755
--- a/dev/release/verify-release-candidate.sh
+++ b/dev/release/verify-release-candidate.sh
@@ -218,7 +218,8 @@ test_apt() {
"debian:trixie" \
"debian:forky" \
"ubuntu:jammy" \
- "ubuntu:noble"; do \
+ "ubuntu:noble" \
+ "ubuntu:resolute"; do \
if ! docker run \
--platform=linux/x86_64 \
--rm \
@@ -238,7 +239,8 @@ test_apt() {
"arm64v8/debian:trixie" \
"arm64v8/debian:forky" \
"arm64v8/ubuntu:jammy" \
- "arm64v8/ubuntu:noble"; do \
+ "arm64v8/ubuntu:noble" \
+ "arm64v8/ubuntu:resolute"; do \
if ! docker run \
--platform=linux/arm64 \
--rm \
diff --git
a/dev/tasks/linux-packages/apache-arrow-apt-source/apt/ubuntu-resolute/Dockerfile
b/dev/tasks/linux-packages/apache-arrow-apt-source/apt/ubuntu-resolute/Dockerfile
new file mode 100644
index 0000000000..3420047ee2
--- /dev/null
+++
b/dev/tasks/linux-packages/apache-arrow-apt-source/apt/ubuntu-resolute/Dockerfile
@@ -0,0 +1,41 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+
+FROM ubuntu:resolute
+
+RUN \
+ echo "debconf debconf/frontend select Noninteractive" | \
+ debconf-set-selections
+
+RUN \
+ echo 'APT::Install-Recommends "false";' > \
+ /etc/apt/apt.conf.d/disable-install-recommends
+
+ARG DEBUG
+
+RUN \
+ quiet=$([ "${DEBUG}" = "yes" ] || echo "-qq") && \
+ apt update ${quiet} && \
+ apt install -y -V ${quiet} \
+ build-essential \
+ debhelper \
+ devscripts \
+ fakeroot \
+ gnupg \
+ lsb-release && \
+ apt clean && \
+ rm -rf /var/lib/apt/lists/*
diff --git
a/dev/tasks/linux-packages/apache-arrow/apt/ubuntu-resolute-arm64/from
b/dev/tasks/linux-packages/apache-arrow/apt/ubuntu-resolute-arm64/from
new file mode 100644
index 0000000000..4974160241
--- /dev/null
+++ b/dev/tasks/linux-packages/apache-arrow/apt/ubuntu-resolute-arm64/from
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+
+arm64v8/ubuntu:resolute
diff --git
a/dev/tasks/linux-packages/apache-arrow/apt/ubuntu-resolute/Dockerfile
b/dev/tasks/linux-packages/apache-arrow/apt/ubuntu-resolute/Dockerfile
new file mode 100644
index 0000000000..4df30814f7
--- /dev/null
+++ b/dev/tasks/linux-packages/apache-arrow/apt/ubuntu-resolute/Dockerfile
@@ -0,0 +1,85 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+
+ARG FROM=ubuntu:resolute
+FROM ${FROM}
+
+RUN \
+ echo "debconf debconf/frontend select Noninteractive" | \
+ debconf-set-selections
+
+RUN \
+ echo 'APT::Install-Recommends "false";' > \
+ /etc/apt/apt.conf.d/disable-install-recommends
+
+ARG DEBUG
+RUN \
+ quiet=$([ "${DEBUG}" = "yes" ] || echo "-qq") && \
+ apt update ${quiet} && \
+ apt install -y -V ${quiet} \
+ build-essential \
+ clang \
+ clang-tools \
+ cmake \
+ debhelper \
+ devscripts \
+ gi-docgen \
+ git \
+ libboost-filesystem-dev \
+ libboost-system-dev \
+ libbrotli-dev \
+ libbz2-dev \
+ libc-ares-dev \
+ libcurl4-openssl-dev \
+ libgirepository1.0-dev \
+ libglib2.0-doc \
+ libgmock-dev \
+ libgoogle-glog-dev \
+ libgrpc++-dev \
+ libgtest-dev \
+ liblz4-dev \
+ libprotobuf-dev \
+ libprotoc-dev \
+ libre2-dev \
+ libsnappy-dev \
+ libssl-dev \
+ libthrift-dev \
+ libutf8proc-dev \
+ libxxhash-dev \
+ libzstd-dev \
+ llvm-dev \
+ lsb-release \
+ meson \
+ mold \
+ ninja-build \
+ nlohmann-json3-dev \
+ pkg-config \
+ protobuf-compiler-grpc \
+ python3-dev \
+ python3-pip \
+ python3-setuptools \
+ rapidjson-dev \
+ tzdata \
+ valac \
+ zlib1g-dev && \
+ if apt list | grep -q '^libcuda'; then \
+ apt install -y -V ${quiet} nvidia-cuda-toolkit; \
+ else \
+ :; \
+ fi && \
+ apt clean && \
+ rm -rf /var/lib/apt/lists/*
diff --git a/dev/tasks/linux-packages/apache-arrow/debian/rules
b/dev/tasks/linux-packages/apache-arrow/debian/rules
index 08aa1c8384..28cc121764 100755
--- a/dev/tasks/linux-packages/apache-arrow/debian/rules
+++ b/dev/tasks/linux-packages/apache-arrow/debian/rules
@@ -6,7 +6,13 @@
# This has to be exported to make some magic below work.
export DH_OPTIONS
+# lto1 (GCC 15) on Ubuntu 26.04 crashes with LTO.
+include /etc/os-release
+ifeq ($(VERSION_CODENAME),resolute)
+export DEB_BUILD_MAINT_OPTIONS=optimize=-lto,reproducible=-timeless
+else
export DEB_BUILD_MAINT_OPTIONS=reproducible=-timeless
+endif
BUILD_TYPE=relwithdebinfo
@@ -14,9 +20,7 @@ BUILD_TYPE=relwithdebinfo
dh $@ --with gir
override_dh_auto_configure:
- code_name="$$(. /etc/os-release && \
- echo $${VERSION_CODENAME})"; \
- if [ "$${code_name}" = "focal" ]; then \
+ if [ "$(VERSION_CODENAME)" = "focal" ]; then \
ARROW_AZURE=OFF; \
else \
ARROW_AZURE=ON; \
@@ -26,6 +30,12 @@ override_dh_auto_configure:
else \
ARROW_CUDA=OFF; \
fi; \
+ if [ "$(VERSION_CODENAME)" = "resolute" ]; then \
+ : "RE2 is not built for C++17 or later"; \
+ re2_SOURCE=BUNDLED; \
+ else \
+ re2_SOURCE=SYSTEM; \
+ fi; \
dh_auto_configure \
--sourcedirectory=cpp \
--builddirectory=cpp_build \
@@ -61,7 +71,8 @@ override_dh_auto_configure:
-DCUDAToolkit_ROOT=/usr \
-DFETCHCONTENT_FULLY_DISCONNECTED=OFF \
-DPARQUET_BUILD_EXECUTABLES=ON \
- -DPARQUET_REQUIRE_ENCRYPTION=ON
+ -DPARQUET_REQUIRE_ENCRYPTION=ON \
+ -Dre2_SOURCE=$${re2_SOURCE}
override_dh_auto_build:
dh_auto_build \
diff --git a/dev/tasks/linux-packages/package-task.rb
b/dev/tasks/linux-packages/package-task.rb
index caaea708e7..404f0d8c78 100644
--- a/dev/tasks/linux-packages/package-task.rb
+++ b/dev/tasks/linux-packages/package-task.rb
@@ -278,6 +278,8 @@ class PackageTask
# "ubuntu-jammy-arm64",
"ubuntu-noble",
# "ubuntu-noble-arm64",
+ "ubuntu-resolute",
+ # "ubuntu-resolute-arm64",
]
end