mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 01:36:09 +03:00
build: Add sysroot creator script
This commit is contained in:
parent
e3074c8af5
commit
45485e0cca
@ -9,8 +9,14 @@ set -o errexit
|
|||||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
KEYS=(
|
KEYS=(
|
||||||
|
# Debian Ports Archive Automatic Signing Key (2023)
|
||||||
|
"B523E5F3FC4E5F2C"
|
||||||
|
# Debian Ports Archive Automatic Signing Key (2024)
|
||||||
|
"8D69674688B6CB36"
|
||||||
# Debian Archive Automatic Signing Key (12/bookworm)
|
# Debian Archive Automatic Signing Key (12/bookworm)
|
||||||
"6ED0E7B82643E131"
|
"B7C5D7D6350947F8"
|
||||||
|
# Debian Security Archive Automatic Signing Key (12/bookworm)
|
||||||
|
"254CF3B5AEC0A8F0"
|
||||||
# Debian Stable Release Key (12/bookworm)
|
# Debian Stable Release Key (12/bookworm)
|
||||||
"F8D2585B8783D481"
|
"F8D2585B8783D481"
|
||||||
# Debian Archive Automatic Signing Key (11/bullseye)
|
# Debian Archive Automatic Signing Key (11/bullseye)
|
||||||
|
@ -36,7 +36,7 @@ from urllib.request import urlopen
|
|||||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(SCRIPT_DIR)))
|
SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(SCRIPT_DIR)))
|
||||||
|
|
||||||
VALID_ARCHS = ("amd64", "i386", "armhf", "arm64", "mipsel", "mips64el")
|
VALID_ARCHS = ("amd64", "i386", "armhf", "arm64", "mipsel", "mips64el", "riscv64")
|
||||||
|
|
||||||
ARCH_TRANSLATIONS = {
|
ARCH_TRANSLATIONS = {
|
||||||
"x64": "amd64",
|
"x64": "amd64",
|
||||||
|
125
src/build/linux/sysroot_scripts/reversion_glibc.py
Normal file
125
src/build/linux/sysroot_scripts/reversion_glibc.py
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
# Copyright 2021 The Chromium Authors
|
||||||
|
# Use of this source code is governed by a BSD-style license that can be
|
||||||
|
# found in the LICENSE file.
|
||||||
|
|
||||||
|
"""Rewrite incompatible default symbols in glibc.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
# This constant comes from the oldest glibc version in
|
||||||
|
# //chrome/installer/linux/debian/dist_package_versions.json and
|
||||||
|
# //chrome/installer/linux/rpm/dist_package_provides.json
|
||||||
|
MAX_ALLOWED_GLIBC_VERSION = [2, 26]
|
||||||
|
|
||||||
|
VERSION_PATTERN = re.compile(r"GLIBC_([0-9\.]+)")
|
||||||
|
SECTION_PATTERN = re.compile(r"^ *\[ *[0-9]+\] +(\S+) +\S+ + ([0-9a-f]+) .*$")
|
||||||
|
|
||||||
|
# Some otherwise disallowed symbols are referenced in the linux-chromeos build.
|
||||||
|
# To continue supporting it, allow these symbols to remain enabled.
|
||||||
|
SYMBOL_ALLOWLIST = {
|
||||||
|
"fts64_close",
|
||||||
|
"fts64_open",
|
||||||
|
"fts64_read",
|
||||||
|
"memfd_create",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def reversion_glibc(bin_file: str) -> None:
|
||||||
|
# The two dictionaries below map from symbol name to
|
||||||
|
# (symbol version, symbol index).
|
||||||
|
#
|
||||||
|
# The default version for a given symbol (which may be unsupported).
|
||||||
|
default_version = {}
|
||||||
|
# The max supported symbol version for a given symbol.
|
||||||
|
supported_version = {}
|
||||||
|
|
||||||
|
# Populate |default_version| and |supported_version| with data from readelf.
|
||||||
|
stdout = subprocess.check_output(
|
||||||
|
["readelf", "--dyn-syms", "--wide", bin_file])
|
||||||
|
for line in stdout.decode("utf-8").split("\n"):
|
||||||
|
cols = re.split(r"\s+", line)
|
||||||
|
# Skip the preamble.
|
||||||
|
if len(cols) < 9:
|
||||||
|
continue
|
||||||
|
|
||||||
|
index = cols[1].rstrip(":")
|
||||||
|
# Skip the header.
|
||||||
|
if not index.isdigit():
|
||||||
|
continue
|
||||||
|
|
||||||
|
index = int(index)
|
||||||
|
name = cols[8].split("@")
|
||||||
|
# Ignore unversioned symbols.
|
||||||
|
if len(name) < 2:
|
||||||
|
continue
|
||||||
|
|
||||||
|
base_name = name[0]
|
||||||
|
version = name[-1]
|
||||||
|
# The default version will have '@@' in the name.
|
||||||
|
is_default = len(name) > 2
|
||||||
|
|
||||||
|
if version.startswith("XCRYPT_"):
|
||||||
|
# Prefer GLIBC_* versioned symbols over XCRYPT_* ones.
|
||||||
|
# Set the version to something > MAX_ALLOWED_GLIBC_VERSION
|
||||||
|
# so this symbol will not be picked.
|
||||||
|
version = [10**10]
|
||||||
|
else:
|
||||||
|
match = re.match(VERSION_PATTERN, version)
|
||||||
|
# Ignore symbols versioned with GLIBC_PRIVATE.
|
||||||
|
if not match:
|
||||||
|
continue
|
||||||
|
version = [int(part) for part in match.group(1).split(".")]
|
||||||
|
|
||||||
|
if version < MAX_ALLOWED_GLIBC_VERSION:
|
||||||
|
old_supported_version = supported_version.get(
|
||||||
|
base_name, ([-1], -1))
|
||||||
|
supported_version[base_name] = max((version, index),
|
||||||
|
old_supported_version)
|
||||||
|
if is_default:
|
||||||
|
default_version[base_name] = (version, index)
|
||||||
|
|
||||||
|
# Get the offset into the binary of the .gnu.version section from readelf.
|
||||||
|
stdout = subprocess.check_output(
|
||||||
|
["readelf", "--sections", "--wide", bin_file])
|
||||||
|
for line in stdout.decode("utf-8").split("\n"):
|
||||||
|
if match := SECTION_PATTERN.match(line):
|
||||||
|
section_name, address = match.groups()
|
||||||
|
if section_name == ".gnu.version":
|
||||||
|
gnu_version_addr = int(address, base=16)
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise Exception("No .gnu.version section found")
|
||||||
|
|
||||||
|
# Rewrite the binary.
|
||||||
|
bin_data = bytearray(open(bin_file, "rb").read())
|
||||||
|
for name, (version, index) in default_version.items():
|
||||||
|
# No need to rewrite the default if it's already an allowed version.
|
||||||
|
if version <= MAX_ALLOWED_GLIBC_VERSION:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if name in SYMBOL_ALLOWLIST:
|
||||||
|
continue
|
||||||
|
elif name in supported_version:
|
||||||
|
_, supported_index = supported_version[name]
|
||||||
|
else:
|
||||||
|
supported_index = -1
|
||||||
|
|
||||||
|
# The .gnu.version section is divided into 16-bit chunks that give the
|
||||||
|
# symbol versions. The 16th bit is a flag that's false for the default
|
||||||
|
# version. The data is stored in little-endian so we need to add 1 to
|
||||||
|
# get the address of the byte we want to flip.
|
||||||
|
#
|
||||||
|
# Disable the unsupported symbol.
|
||||||
|
old_default = gnu_version_addr + 2 * index + 1
|
||||||
|
assert (bin_data[old_default] & 0x80) == 0
|
||||||
|
bin_data[old_default] ^= 0x80
|
||||||
|
|
||||||
|
# If we found a supported version, enable that as default.
|
||||||
|
if supported_index != -1:
|
||||||
|
new_default = gnu_version_addr + 2 * supported_index + 1
|
||||||
|
assert (bin_data[new_default] & 0x80) == 0x80
|
||||||
|
bin_data[new_default] ^= 0x80
|
||||||
|
|
||||||
|
open(bin_file, "wb").write(bin_data)
|
@ -17,6 +17,7 @@ import tempfile
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
import reversion_glibc
|
||||||
|
|
||||||
DISTRO = "debian"
|
DISTRO = "debian"
|
||||||
RELEASE = "bullseye"
|
RELEASE = "bullseye"
|
||||||
@ -38,10 +39,6 @@ ARCHIVE_TIMESTAMP = "20230611T210420Z"
|
|||||||
|
|
||||||
ARCHIVE_URL = f"https://snapshot.debian.org/archive/debian/{ARCHIVE_TIMESTAMP}/"
|
ARCHIVE_URL = f"https://snapshot.debian.org/archive/debian/{ARCHIVE_TIMESTAMP}/"
|
||||||
APT_SOURCES_LIST = [
|
APT_SOURCES_LIST = [
|
||||||
# Debian 12 (Bookworm) is needed for GTK4. It should be kept before
|
|
||||||
# bullseye so that bullseye takes precedence.
|
|
||||||
("bookworm", ["main"]),
|
|
||||||
("bookworm-updates", ["main"]),
|
|
||||||
# This mimics a sources.list from bullseye.
|
# This mimics a sources.list from bullseye.
|
||||||
("bullseye", ["main", "contrib", "non-free"]),
|
("bullseye", ["main", "contrib", "non-free"]),
|
||||||
("bullseye-updates", ["main", "contrib", "non-free"]),
|
("bullseye-updates", ["main", "contrib", "non-free"]),
|
||||||
@ -55,6 +52,7 @@ TRIPLES = {
|
|||||||
"arm64": "aarch64-linux-gnu",
|
"arm64": "aarch64-linux-gnu",
|
||||||
"mipsel": "mipsel-linux-gnu",
|
"mipsel": "mipsel-linux-gnu",
|
||||||
"mips64el": "mips64el-linux-gnuabi64",
|
"mips64el": "mips64el-linux-gnuabi64",
|
||||||
|
"riscv64": "riscv64-linux-gnu",
|
||||||
}
|
}
|
||||||
|
|
||||||
REQUIRED_TOOLS = [
|
REQUIRED_TOOLS = [
|
||||||
@ -73,520 +71,48 @@ RELEASE_FILE_GPG = "Release.gpg"
|
|||||||
|
|
||||||
# Packages common to all architectures.
|
# Packages common to all architectures.
|
||||||
DEBIAN_PACKAGES = [
|
DEBIAN_PACKAGES = [
|
||||||
"comerr-dev",
|
|
||||||
"krb5-multidev",
|
|
||||||
"libaom0",
|
|
||||||
"libaom3",
|
|
||||||
"libasound2",
|
|
||||||
"libasound2-dev",
|
|
||||||
"libasyncns0",
|
|
||||||
"libatk-bridge2.0-0",
|
|
||||||
"libatk-bridge2.0-dev",
|
|
||||||
"libatk1.0-0",
|
|
||||||
"libatk1.0-dev",
|
|
||||||
"libatomic1",
|
"libatomic1",
|
||||||
"libatspi2.0-0",
|
|
||||||
"libatspi2.0-dev",
|
|
||||||
"libattr1",
|
|
||||||
"libaudit1",
|
|
||||||
"libavahi-client3",
|
|
||||||
"libavahi-common3",
|
|
||||||
"libavcodec-dev",
|
|
||||||
"libavcodec58",
|
|
||||||
"libavcodec59",
|
|
||||||
"libavformat-dev",
|
|
||||||
"libavformat59",
|
|
||||||
"libavutil-dev",
|
|
||||||
"libavutil56",
|
|
||||||
"libavutil57",
|
|
||||||
"libb2-1",
|
|
||||||
"libblkid-dev",
|
|
||||||
"libblkid1",
|
|
||||||
"libbluetooth-dev",
|
|
||||||
"libbluetooth3",
|
|
||||||
"libbluray2",
|
|
||||||
"libbrotli-dev",
|
|
||||||
"libbrotli1",
|
|
||||||
"libbsd0",
|
|
||||||
"libbz2-1.0",
|
|
||||||
"libc6",
|
"libc6",
|
||||||
"libc6-dev",
|
"libc6-dev",
|
||||||
"libcairo-gobject2",
|
|
||||||
"libcairo-script-interpreter2",
|
|
||||||
"libcairo2",
|
|
||||||
"libcairo2-dev",
|
|
||||||
"libcap-dev",
|
|
||||||
"libcap-ng0",
|
|
||||||
"libcap2",
|
|
||||||
"libchromaprint1",
|
|
||||||
"libcjson1",
|
|
||||||
"libcloudproviders0",
|
|
||||||
"libcodec2-0.9",
|
|
||||||
"libcodec2-1.0",
|
|
||||||
"libcolord2",
|
|
||||||
"libcom-err2",
|
|
||||||
"libcrypt-dev",
|
|
||||||
"libcrypt1",
|
"libcrypt1",
|
||||||
"libcups2",
|
|
||||||
"libcups2-dev",
|
|
||||||
"libcupsimage2",
|
|
||||||
"libcupsimage2-dev",
|
|
||||||
"libcurl3-gnutls",
|
|
||||||
"libcurl4-gnutls-dev",
|
|
||||||
"libdatrie-dev",
|
|
||||||
"libdatrie1",
|
|
||||||
"libdav1d4",
|
|
||||||
"libdav1d6",
|
|
||||||
"libdb5.3",
|
|
||||||
"libdbus-1-3",
|
|
||||||
"libdbus-1-dev",
|
|
||||||
"libdbus-glib-1-2",
|
|
||||||
"libdbusmenu-glib-dev",
|
|
||||||
"libdbusmenu-glib4",
|
|
||||||
"libdbusmenu-gtk3-4",
|
|
||||||
"libdbusmenu-gtk4",
|
|
||||||
"libdeflate-dev",
|
|
||||||
"libdeflate0",
|
|
||||||
"libdouble-conversion3",
|
|
||||||
"libdrm-amdgpu1",
|
|
||||||
"libdrm-dev",
|
|
||||||
"libdrm-nouveau2",
|
|
||||||
"libdrm-radeon1",
|
|
||||||
"libdrm2",
|
|
||||||
"libegl-dev",
|
|
||||||
"libegl1",
|
|
||||||
"libegl1-mesa",
|
|
||||||
"libegl1-mesa-dev",
|
|
||||||
"libelf-dev",
|
|
||||||
"libelf1",
|
|
||||||
"libepoxy-dev",
|
|
||||||
"libepoxy0",
|
|
||||||
"libevdev-dev",
|
|
||||||
"libevdev2",
|
|
||||||
"libevent-2.1-7",
|
|
||||||
"libexpat1",
|
|
||||||
"libexpat1-dev",
|
|
||||||
"libffi-dev",
|
|
||||||
"libffi7",
|
|
||||||
"libflac-dev",
|
|
||||||
"libflac8",
|
|
||||||
"libfontconfig-dev",
|
|
||||||
"libfontconfig1",
|
|
||||||
"libfreetype-dev",
|
|
||||||
"libfreetype6",
|
|
||||||
"libfribidi-dev",
|
|
||||||
"libfribidi0",
|
|
||||||
"libgbm-dev",
|
|
||||||
"libgbm1",
|
|
||||||
"libgcc-10-dev",
|
"libgcc-10-dev",
|
||||||
"libgcc-s1",
|
"libgcc-s1",
|
||||||
"libgcrypt20",
|
|
||||||
"libgcrypt20-dev",
|
|
||||||
"libgdk-pixbuf-2.0-0",
|
|
||||||
"libgdk-pixbuf-2.0-dev",
|
|
||||||
"libgl-dev",
|
|
||||||
"libgl1",
|
|
||||||
"libgl1-mesa-dev",
|
|
||||||
"libgl1-mesa-glx",
|
|
||||||
"libglapi-mesa",
|
|
||||||
"libgles-dev",
|
|
||||||
"libgles1",
|
|
||||||
"libgles2",
|
|
||||||
"libglib2.0-0",
|
|
||||||
"libglib2.0-dev",
|
|
||||||
"libglvnd-dev",
|
|
||||||
"libglvnd0",
|
|
||||||
"libglx-dev",
|
|
||||||
"libglx0",
|
|
||||||
"libgme0",
|
|
||||||
"libgmp10",
|
|
||||||
"libgnutls-dane0",
|
|
||||||
"libgnutls-openssl27",
|
|
||||||
"libgnutls28-dev",
|
|
||||||
"libgnutls30",
|
|
||||||
"libgnutlsxx28",
|
|
||||||
"libgomp1",
|
"libgomp1",
|
||||||
"libgpg-error-dev",
|
|
||||||
"libgpg-error0",
|
|
||||||
"libgraphene-1.0-0",
|
|
||||||
"libgraphene-1.0-dev",
|
|
||||||
"libgraphite2-3",
|
|
||||||
"libgraphite2-dev",
|
|
||||||
"libgsm1",
|
|
||||||
"libgssapi-krb5-2",
|
|
||||||
"libgssrpc4",
|
|
||||||
"libgtk-3-0",
|
|
||||||
"libgtk-3-dev",
|
|
||||||
"libgtk-4-1",
|
|
||||||
"libgtk-4-dev",
|
|
||||||
"libgtk2.0-0",
|
|
||||||
"libgudev-1.0-0",
|
|
||||||
"libharfbuzz-dev",
|
|
||||||
"libharfbuzz-gobject0",
|
|
||||||
"libharfbuzz-icu0",
|
|
||||||
"libharfbuzz0b",
|
|
||||||
"libhogweed6",
|
|
||||||
"libhwy1",
|
|
||||||
"libice6",
|
|
||||||
"libicu-le-hb0",
|
|
||||||
"libicu67",
|
|
||||||
"libidl-2-0",
|
|
||||||
"libidn11",
|
|
||||||
"libidn2-0",
|
|
||||||
"libinput-dev",
|
|
||||||
"libinput10",
|
|
||||||
"libjbig-dev",
|
|
||||||
"libjbig0",
|
|
||||||
"libjpeg62-turbo",
|
|
||||||
"libjpeg62-turbo-dev",
|
|
||||||
"libjson-glib-1.0-0",
|
|
||||||
"libjsoncpp-dev",
|
|
||||||
"libjsoncpp24",
|
|
||||||
"libjxl0.7",
|
|
||||||
"libjxl0.7",
|
|
||||||
"libk5crypto3",
|
|
||||||
"libkadm5clnt-mit12",
|
|
||||||
"libkadm5srv-mit12",
|
|
||||||
"libkdb5-10",
|
|
||||||
"libkeyutils1",
|
|
||||||
"libkrb5-3",
|
|
||||||
"libkrb5-dev",
|
|
||||||
"libkrb5support0",
|
|
||||||
"liblcms2-2",
|
|
||||||
"libldap-2.4-2",
|
|
||||||
"liblerc4",
|
|
||||||
"libltdl7",
|
|
||||||
"liblz4-1",
|
|
||||||
"liblzma5",
|
|
||||||
"liblzo2-2",
|
|
||||||
"libmbedcrypto7",
|
|
||||||
"libmd0",
|
|
||||||
"libmd4c0",
|
|
||||||
"libminizip-dev",
|
|
||||||
"libminizip1",
|
|
||||||
"libmount-dev",
|
|
||||||
"libmount1",
|
|
||||||
"libmp3lame0",
|
|
||||||
"libmpg123-0",
|
|
||||||
"libmtdev1",
|
|
||||||
"libncurses-dev",
|
|
||||||
"libncurses6",
|
|
||||||
"libncursesw6",
|
|
||||||
"libnettle8",
|
|
||||||
"libnghttp2-14",
|
|
||||||
"libnorm1",
|
|
||||||
"libnsl2",
|
|
||||||
"libnspr4",
|
|
||||||
"libnspr4-dev",
|
|
||||||
"libnss-db",
|
|
||||||
"libnss3",
|
|
||||||
"libnss3-dev",
|
|
||||||
"libnuma1",
|
|
||||||
"libogg-dev",
|
|
||||||
"libogg0",
|
|
||||||
"libopengl0",
|
|
||||||
"libopenjp2-7",
|
|
||||||
"libopenmpt0",
|
|
||||||
"libopus-dev",
|
|
||||||
"libopus-dev",
|
|
||||||
"libopus0",
|
|
||||||
"libp11-kit0",
|
|
||||||
"libpam0g",
|
|
||||||
"libpam0g-dev",
|
|
||||||
"libpango-1.0-0",
|
|
||||||
"libpango1.0-dev",
|
|
||||||
"libpangocairo-1.0-0",
|
|
||||||
"libpangoft2-1.0-0",
|
|
||||||
"libpangox-1.0-0",
|
|
||||||
"libpangoxft-1.0-0",
|
|
||||||
"libpci-dev",
|
|
||||||
"libpci3",
|
|
||||||
"libpciaccess0",
|
|
||||||
"libpcre16-3",
|
|
||||||
"libpcre2-16-0",
|
|
||||||
"libpcre2-32-0",
|
|
||||||
"libpcre2-8-0",
|
|
||||||
"libpcre2-dev",
|
|
||||||
"libpcre2-posix2",
|
|
||||||
"libpcre3",
|
|
||||||
"libpcre3-dev",
|
|
||||||
"libpcre32-3",
|
|
||||||
"libpcrecpp0v5",
|
|
||||||
"libpgm-5.3-0",
|
|
||||||
"libpipewire-0.3-0",
|
|
||||||
"libpipewire-0.3-dev",
|
|
||||||
"libpixman-1-0",
|
|
||||||
"libpixman-1-dev",
|
|
||||||
"libpng-dev",
|
|
||||||
"libpng16-16",
|
|
||||||
"libproxy1v5",
|
|
||||||
"libpsl5",
|
|
||||||
"libpthread-stubs0-dev",
|
|
||||||
"libpulse-dev",
|
|
||||||
"libpulse-mainloop-glib0",
|
|
||||||
"libpulse0",
|
|
||||||
"libqt5concurrent5",
|
|
||||||
"libqt5core5a",
|
|
||||||
"libqt5dbus5",
|
|
||||||
"libqt5gui5",
|
|
||||||
"libqt5network5",
|
|
||||||
"libqt5printsupport5",
|
|
||||||
"libqt5sql5",
|
|
||||||
"libqt5test5",
|
|
||||||
"libqt5widgets5",
|
|
||||||
"libqt5xml5",
|
|
||||||
"libqt6concurrent6",
|
|
||||||
"libqt6core6",
|
|
||||||
"libqt6dbus6",
|
|
||||||
"libqt6gui6",
|
|
||||||
"libqt6network6",
|
|
||||||
"libqt6opengl6",
|
|
||||||
"libqt6openglwidgets6",
|
|
||||||
"libqt6printsupport6",
|
|
||||||
"libqt6sql6",
|
|
||||||
"libqt6test6",
|
|
||||||
"libqt6widgets6",
|
|
||||||
"libqt6xml6",
|
|
||||||
"librabbitmq4",
|
|
||||||
"librav1e0",
|
|
||||||
"libre2-9",
|
|
||||||
"libre2-dev",
|
|
||||||
"librest-0.7-0",
|
|
||||||
"librist4",
|
|
||||||
"librsvg2-2",
|
|
||||||
"librtmp1",
|
|
||||||
"libsasl2-2",
|
|
||||||
"libselinux1",
|
|
||||||
"libselinux1-dev",
|
|
||||||
"libsepol1",
|
|
||||||
"libsepol1-dev",
|
|
||||||
"libshine3",
|
|
||||||
"libsm6",
|
|
||||||
"libsnappy-dev",
|
|
||||||
"libsnappy1v5",
|
|
||||||
"libsndfile1",
|
|
||||||
"libsodium23",
|
|
||||||
"libsoup-gnome2.4-1",
|
|
||||||
"libsoup2.4-1",
|
|
||||||
"libsoxr0",
|
|
||||||
"libspa-0.2-dev",
|
|
||||||
"libspeechd-dev",
|
|
||||||
"libspeechd2",
|
|
||||||
"libspeex1",
|
|
||||||
"libsqlite3-0",
|
|
||||||
"libsrt1.5-gnutls",
|
|
||||||
"libssh-gcrypt-4",
|
|
||||||
"libssh2-1",
|
|
||||||
"libssl-dev",
|
|
||||||
"libssl1.1",
|
|
||||||
"libstdc++-10-dev",
|
"libstdc++-10-dev",
|
||||||
"libstdc++6",
|
"libstdc++6",
|
||||||
"libsvtav1enc1",
|
|
||||||
"libswresample-dev",
|
|
||||||
"libswresample3",
|
|
||||||
"libswresample4",
|
|
||||||
"libsystemd-dev",
|
|
||||||
"libsystemd0",
|
|
||||||
"libtasn1-6",
|
|
||||||
"libthai-dev",
|
|
||||||
"libthai0",
|
|
||||||
"libtheora0",
|
|
||||||
"libtheora0",
|
|
||||||
"libtiff-dev",
|
|
||||||
"libtiff5",
|
|
||||||
"libtiff6",
|
|
||||||
"libtiffxx5",
|
|
||||||
"libtinfo6",
|
|
||||||
"libtirpc3",
|
|
||||||
"libts0",
|
|
||||||
"libtwolame0",
|
|
||||||
"libudev-dev",
|
|
||||||
"libudev1",
|
|
||||||
"libudfread0",
|
|
||||||
"libunbound8",
|
|
||||||
"libunistring2",
|
|
||||||
"libutempter-dev",
|
|
||||||
"libutempter0",
|
|
||||||
"libuuid1",
|
|
||||||
"libva-dev",
|
|
||||||
"libva-drm2",
|
|
||||||
"libva-glx2",
|
|
||||||
"libva-wayland2",
|
|
||||||
"libva-x11-2",
|
|
||||||
"libva2",
|
|
||||||
"libvdpau1",
|
|
||||||
"libvorbis0a",
|
|
||||||
"libvorbisenc2",
|
|
||||||
"libvorbisfile3",
|
|
||||||
"libvpx-dev",
|
|
||||||
"libvpx6",
|
|
||||||
"libvpx7",
|
|
||||||
"libvulkan-dev",
|
|
||||||
"libvulkan1",
|
|
||||||
"libwacom2",
|
|
||||||
"libwavpack1",
|
|
||||||
"libwayland-bin",
|
|
||||||
"libwayland-client0",
|
|
||||||
"libwayland-cursor0",
|
|
||||||
"libwayland-dev",
|
|
||||||
"libwayland-egl-backend-dev",
|
|
||||||
"libwayland-egl1",
|
|
||||||
"libwayland-egl1-mesa",
|
|
||||||
"libwayland-server0",
|
|
||||||
"libwebp-dev",
|
|
||||||
"libwebp6",
|
|
||||||
"libwebp7",
|
|
||||||
"libwebpdemux2",
|
|
||||||
"libwebpmux3",
|
|
||||||
"libwrap0",
|
|
||||||
"libx11-6",
|
|
||||||
"libx11-dev",
|
|
||||||
"libx11-xcb-dev",
|
|
||||||
"libx11-xcb1",
|
|
||||||
"libx264-160",
|
|
||||||
"libx264-164",
|
|
||||||
"libx265-192",
|
|
||||||
"libx265-199",
|
|
||||||
"libxau-dev",
|
|
||||||
"libxau6",
|
|
||||||
"libxcb-dri2-0",
|
|
||||||
"libxcb-dri2-0-dev",
|
|
||||||
"libxcb-dri3-0",
|
|
||||||
"libxcb-dri3-dev",
|
|
||||||
"libxcb-glx0",
|
|
||||||
"libxcb-glx0-dev",
|
|
||||||
"libxcb-icccm4",
|
|
||||||
"libxcb-image0",
|
|
||||||
"libxcb-image0-dev",
|
|
||||||
"libxcb-keysyms1",
|
|
||||||
"libxcb-present-dev",
|
|
||||||
"libxcb-present0",
|
|
||||||
"libxcb-randr0",
|
|
||||||
"libxcb-randr0-dev",
|
|
||||||
"libxcb-render-util0",
|
|
||||||
"libxcb-render-util0-dev",
|
|
||||||
"libxcb-render0",
|
|
||||||
"libxcb-render0-dev",
|
|
||||||
"libxcb-shape0",
|
|
||||||
"libxcb-shape0-dev",
|
|
||||||
"libxcb-shm0",
|
|
||||||
"libxcb-shm0-dev",
|
|
||||||
"libxcb-sync-dev",
|
|
||||||
"libxcb-sync1",
|
|
||||||
"libxcb-util-dev",
|
|
||||||
"libxcb-util1",
|
|
||||||
"libxcb-xfixes0",
|
|
||||||
"libxcb-xfixes0-dev",
|
|
||||||
"libxcb-xinerama0",
|
|
||||||
"libxcb-xinput0",
|
|
||||||
"libxcb-xkb1",
|
|
||||||
"libxcb1",
|
|
||||||
"libxcb1-dev",
|
|
||||||
"libxcomposite-dev",
|
|
||||||
"libxcomposite1",
|
|
||||||
"libxcursor-dev",
|
|
||||||
"libxcursor1",
|
|
||||||
"libxdamage-dev",
|
|
||||||
"libxdamage1",
|
|
||||||
"libxdmcp-dev",
|
|
||||||
"libxdmcp6",
|
|
||||||
"libxext-dev",
|
|
||||||
"libxext6",
|
|
||||||
"libxfixes-dev",
|
|
||||||
"libxfixes3",
|
|
||||||
"libxft-dev",
|
|
||||||
"libxft2",
|
|
||||||
"libxi-dev",
|
|
||||||
"libxi6",
|
|
||||||
"libxinerama-dev",
|
|
||||||
"libxinerama1",
|
|
||||||
"libxkbcommon-dev",
|
|
||||||
"libxkbcommon-x11-0",
|
|
||||||
"libxkbcommon0",
|
|
||||||
"libxml2",
|
|
||||||
"libxml2-dev",
|
|
||||||
"libxrandr-dev",
|
|
||||||
"libxrandr2",
|
|
||||||
"libxrender-dev",
|
|
||||||
"libxrender1",
|
|
||||||
"libxshmfence-dev",
|
|
||||||
"libxshmfence1",
|
|
||||||
"libxslt1-dev",
|
|
||||||
"libxslt1.1",
|
|
||||||
"libxss-dev",
|
|
||||||
"libxss1",
|
|
||||||
"libxt-dev",
|
|
||||||
"libxt6",
|
|
||||||
"libxtst-dev",
|
|
||||||
"libxtst6",
|
|
||||||
"libxvidcore4",
|
|
||||||
"libxxf86vm-dev",
|
|
||||||
"libxxf86vm1",
|
|
||||||
"libzmq5",
|
|
||||||
"libzstd1",
|
|
||||||
"libzvbi0",
|
|
||||||
"linux-libc-dev",
|
"linux-libc-dev",
|
||||||
"mesa-common-dev",
|
|
||||||
"ocl-icd-libopencl1",
|
|
||||||
"qt6-base-dev",
|
|
||||||
"qt6-base-dev-tools",
|
|
||||||
"qtbase5-dev",
|
|
||||||
"qtbase5-dev-tools",
|
|
||||||
"shared-mime-info",
|
|
||||||
"uuid-dev",
|
|
||||||
"wayland-protocols",
|
|
||||||
"x11proto-dev",
|
|
||||||
"zlib1g",
|
|
||||||
"zlib1g-dev",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
DEBIAN_PACKAGES_ARCH = {
|
DEBIAN_PACKAGES_ARCH = {
|
||||||
"amd64": [
|
"amd64": [
|
||||||
"libasan6",
|
"libasan6",
|
||||||
"libdrm-intel1",
|
|
||||||
"libitm1",
|
"libitm1",
|
||||||
"liblsan0",
|
"liblsan0",
|
||||||
"libmfx1",
|
|
||||||
"libquadmath0",
|
"libquadmath0",
|
||||||
"libtsan0",
|
"libtsan0",
|
||||||
"libubsan1",
|
"libubsan1",
|
||||||
"valgrind",
|
|
||||||
],
|
],
|
||||||
"i386": [
|
"i386": [
|
||||||
"libasan6",
|
"libasan6",
|
||||||
"libdrm-intel1",
|
|
||||||
"libitm1",
|
"libitm1",
|
||||||
"libquadmath0",
|
"libquadmath0",
|
||||||
"libubsan1",
|
"libubsan1",
|
||||||
"valgrind",
|
|
||||||
],
|
],
|
||||||
"armhf": [
|
"armhf": [
|
||||||
"libasan6",
|
"libasan6",
|
||||||
"libdrm-etnaviv1",
|
|
||||||
"libdrm-exynos1",
|
|
||||||
"libdrm-freedreno1",
|
|
||||||
"libdrm-omap1",
|
|
||||||
"libdrm-tegra0",
|
|
||||||
"libubsan1",
|
"libubsan1",
|
||||||
"valgrind",
|
|
||||||
],
|
],
|
||||||
"arm64": [
|
"arm64": [
|
||||||
"libasan6",
|
"libasan6",
|
||||||
"libdrm-etnaviv1",
|
|
||||||
"libdrm-freedreno1",
|
|
||||||
"libdrm-tegra0",
|
|
||||||
"libgmp10",
|
"libgmp10",
|
||||||
"libitm1",
|
"libitm1",
|
||||||
"liblsan0",
|
"liblsan0",
|
||||||
"libthai0",
|
|
||||||
"libtsan0",
|
"libtsan0",
|
||||||
"libubsan1",
|
"libubsan1",
|
||||||
"valgrind",
|
|
||||||
],
|
],
|
||||||
"mipsel": [],
|
"mipsel": [],
|
||||||
"mips64el": [
|
"mips64el": [],
|
||||||
"valgrind",
|
"riscv64": [],
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -728,11 +254,13 @@ def generate_package_list_dist_repo(arch: str, dist: str,
|
|||||||
download_or_copy_non_unique_filename(package_list_arch, package_list)
|
download_or_copy_non_unique_filename(package_list_arch, package_list)
|
||||||
verify_package_listing(package_file_arch, package_list, dist)
|
verify_package_listing(package_file_arch, package_list, dist)
|
||||||
|
|
||||||
|
# `not line.endswith(":")` is added here to handle the case of
|
||||||
|
# "X-Cargo-Built-Using:\n rust-adler (= 1.0.2-2), ..."
|
||||||
with lzma.open(package_list, "rt") as src:
|
with lzma.open(package_list, "rt") as src:
|
||||||
return [
|
return [
|
||||||
dict(
|
dict(
|
||||||
line.split(": ", 1) for line in package_meta.splitlines()
|
line.split(": ", 1) for line in package_meta.splitlines()
|
||||||
if not line.startswith(" "))
|
if not line.startswith(" ") and not line.endswith(":"))
|
||||||
for package_meta in src.read().split("\n\n") if package_meta
|
for package_meta in src.read().split("\n\n") if package_meta
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -774,13 +302,34 @@ def hacks_and_patches(install_root: str, script_dir: str, arch: str) -> None:
|
|||||||
if os.path.exists(qtchooser_conf):
|
if os.path.exists(qtchooser_conf):
|
||||||
os.remove(qtchooser_conf)
|
os.remove(qtchooser_conf)
|
||||||
|
|
||||||
# libxcomposite1 is missing a symbols file.
|
# __GLIBC_MINOR__ is used as a feature test macro. Replace it with the
|
||||||
atomic_copyfile(
|
# earliest supported version of glibc (2.26).
|
||||||
os.path.join(script_dir, "libxcomposite1-symbols"),
|
features_h = os.path.join(install_root, "usr", "include", "features.h")
|
||||||
os.path.join(install_root, "debian", "libxcomposite1", "DEBIAN",
|
replace_in_file(features_h, r"(#define\s+__GLIBC_MINOR__)", r"\1 26 //")
|
||||||
"symbols"),
|
|
||||||
|
# fcntl64() was introduced in glibc 2.28. Make sure to use fcntl() instead.
|
||||||
|
fcntl_h = os.path.join(install_root, "usr", "include", "fcntl.h")
|
||||||
|
replace_in_file(
|
||||||
|
fcntl_h,
|
||||||
|
r"#ifndef __USE_FILE_OFFSET64(\nextern int fcntl)",
|
||||||
|
r"#if 1\1",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Do not use pthread_cond_clockwait as it was introduced in glibc 2.30.
|
||||||
|
cppconfig_h = os.path.join(
|
||||||
|
install_root,
|
||||||
|
"usr",
|
||||||
|
"include",
|
||||||
|
TRIPLES[arch],
|
||||||
|
"c++",
|
||||||
|
"10",
|
||||||
|
"bits",
|
||||||
|
"c++config.h",
|
||||||
|
)
|
||||||
|
replace_in_file(cppconfig_h,
|
||||||
|
r"(#define\s+_GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT)",
|
||||||
|
r"// \1")
|
||||||
|
|
||||||
# Include limits.h in stdlib.h to fix an ODR issue.
|
# Include limits.h in stdlib.h to fix an ODR issue.
|
||||||
stdlib_h = os.path.join(install_root, "usr", "include", "stdlib.h")
|
stdlib_h = os.path.join(install_root, "usr", "include", "stdlib.h")
|
||||||
replace_in_file(stdlib_h, r"(#include <stddef.h>)",
|
replace_in_file(stdlib_h, r"(#include <stddef.h>)",
|
||||||
@ -796,12 +345,14 @@ def hacks_and_patches(install_root: str, script_dir: str, arch: str) -> None:
|
|||||||
shutil.move(os.path.join(triple_pkgconfig_dir, file),
|
shutil.move(os.path.join(triple_pkgconfig_dir, file),
|
||||||
pkgconfig_dir)
|
pkgconfig_dir)
|
||||||
|
|
||||||
# GTK4 is provided by bookworm (12), but pango is provided by bullseye
|
# Avoid requiring unsupported glibc versions.
|
||||||
# (11). Fix the GTK4 pkgconfig file to relax the pango version
|
for lib in ["libc.so.6", "libm.so.6", "libcrypt.so.1"]:
|
||||||
# requirement.
|
# RISCV64 is new and has no backward compatibility.
|
||||||
gtk4_pc = os.path.join(pkgconfig_dir, "gtk4.pc")
|
# Reversioning would remove necessary symbols and cause linking failures.
|
||||||
replace_in_file(gtk4_pc, r"pango [>=0-9. ]*", "pango")
|
if arch == "riscv64":
|
||||||
replace_in_file(gtk4_pc, r"pangocairo [>=0-9. ]*", "pangocairo")
|
continue
|
||||||
|
lib_path = os.path.join(install_root, "lib", TRIPLES[arch], lib)
|
||||||
|
reversion_glibc.reversion_glibc(lib_path)
|
||||||
|
|
||||||
|
|
||||||
def replace_in_file(file_path: str, search_pattern: str,
|
def replace_in_file(file_path: str, search_pattern: str,
|
||||||
@ -910,7 +461,6 @@ def cleanup_jail_symlinks(install_root: str) -> None:
|
|||||||
os.remove(full_path)
|
os.remove(full_path)
|
||||||
os.symlink(relative_path, full_path)
|
os.symlink(relative_path, full_path)
|
||||||
|
|
||||||
|
|
||||||
def verify_library_deps(install_root: str) -> None:
|
def verify_library_deps(install_root: str) -> None:
|
||||||
"""
|
"""
|
||||||
Verifies if all required libraries are present in the sysroot environment.
|
Verifies if all required libraries are present in the sysroot environment.
|
||||||
@ -937,6 +487,7 @@ def verify_library_deps(install_root: str) -> None:
|
|||||||
output = subprocess.check_output(cmd_readelf).decode()
|
output = subprocess.check_output(cmd_readelf).decode()
|
||||||
for line in output.split("\n"):
|
for line in output.split("\n"):
|
||||||
if "NEEDED" in line:
|
if "NEEDED" in line:
|
||||||
|
print(file, line)
|
||||||
needed_libs.add(line.split("[")[1].split("]")[0])
|
needed_libs.add(line.split("[")[1].split("]")[0])
|
||||||
|
|
||||||
missing_libs = needed_libs - shared_libs
|
missing_libs = needed_libs - shared_libs
|
||||||
@ -952,7 +503,6 @@ def build_sysroot(arch: str) -> None:
|
|||||||
hacks_and_patches(install_root, SCRIPT_DIR, arch)
|
hacks_and_patches(install_root, SCRIPT_DIR, arch)
|
||||||
cleanup_jail_symlinks(install_root)
|
cleanup_jail_symlinks(install_root)
|
||||||
verify_library_deps(install_root)
|
verify_library_deps(install_root)
|
||||||
create_tarball(install_root, arch)
|
|
||||||
|
|
||||||
|
|
||||||
def upload_sysroot(arch: str) -> str:
|
def upload_sysroot(arch: str) -> str:
|
||||||
@ -1019,6 +569,12 @@ def main():
|
|||||||
|
|
||||||
sanity_check()
|
sanity_check()
|
||||||
|
|
||||||
|
# RISCV64 only has support in debian-ports, no support in bookworm.
|
||||||
|
if args.architecture == "riscv64":
|
||||||
|
global ARCHIVE_URL, APT_SOURCES_LIST
|
||||||
|
ARCHIVE_URL = "https://snapshot.debian.org/archive/debian-ports/20230724T141507Z/"
|
||||||
|
APT_SOURCES_LIST = [("sid", ["main"])]
|
||||||
|
|
||||||
if args.command == "build":
|
if args.command == "build":
|
||||||
build_sysroot(args.architecture)
|
build_sysroot(args.architecture)
|
||||||
elif args.command == "upload":
|
elif args.command == "upload":
|
||||||
|
@ -34,5 +34,11 @@
|
|||||||
"SysrootDir": "debian_bullseye_mipsel-sysroot",
|
"SysrootDir": "debian_bullseye_mipsel-sysroot",
|
||||||
"Tarball": "debian_bullseye_mipsel_sysroot.tar.xz",
|
"Tarball": "debian_bullseye_mipsel_sysroot.tar.xz",
|
||||||
"URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot"
|
"URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot"
|
||||||
|
},
|
||||||
|
"bullseye_riscv64": {
|
||||||
|
"Key": "",
|
||||||
|
"Sha1Sum": "",
|
||||||
|
"SysrootDir": "debian_bullseye_riscv64-sysroot",
|
||||||
|
"Tarball": "debian_bullseye_riscv64_sysroot.tar.xz"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user