mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	The additional flexibility allows many common tweaks to the sysroot without modifying the script, meaning we can make more targetted changes without incuring rebuilds for all the sysroots and everything that depends on them. Additionally, we add the GCC version for more Debian versions, and switch stretch and buster to use archive.debian.org instead of snapshot.debian.org. Also add lib64 paths, which appear in newer versions of Debian. Differential Revision: https://phabricator.services.mozilla.com/D238912
		
			
				
	
	
		
			159 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
set -x
 | 
						|
set -e
 | 
						|
 | 
						|
arch=$1
 | 
						|
shift
 | 
						|
 | 
						|
sysroot=$(basename $TOOLCHAIN_ARTIFACT)
 | 
						|
sysroot=${sysroot%%.*}
 | 
						|
 | 
						|
# To repackage Firefox as a .deb package
 | 
						|
# we bootstrap jessie systems on a bullseye image.
 | 
						|
# To keep the build and repackage environments
 | 
						|
# consistent the build baseline used here (jessie) should be
 | 
						|
# synchronized with the packaging baseline used in
 | 
						|
# taskcluster/docker/debian-repackage/Dockerfile
 | 
						|
# and python/mozbuild/mozbuild/repackaging/deb.py
 | 
						|
case "$arch" in
 | 
						|
i386|amd64)
 | 
						|
  dist=jessie
 | 
						|
  ;;
 | 
						|
arm64)
 | 
						|
  dist=buster
 | 
						|
  ;;
 | 
						|
*)
 | 
						|
  echo "$arch is not supported." >&2
 | 
						|
  exit 1
 | 
						|
  ;;
 | 
						|
esac
 | 
						|
 | 
						|
if [ -n "$DIST" ]; then
 | 
						|
  dist="$DIST"
 | 
						|
fi
 | 
						|
 | 
						|
case "$dist" in
 | 
						|
jessie)
 | 
						|
  gcc_version=4.9
 | 
						|
  ;;
 | 
						|
stretch)
 | 
						|
  gcc_version=6
 | 
						|
  ;;
 | 
						|
buster)
 | 
						|
  gcc_version=8
 | 
						|
  ;;
 | 
						|
bullseye)
 | 
						|
  gcc_version=10
 | 
						|
  ;;
 | 
						|
bookworm)
 | 
						|
  gcc_version=12
 | 
						|
  ;;
 | 
						|
esac
 | 
						|
 | 
						|
if [ -n "$GCC_VERSION" ]; then
 | 
						|
  gcc_version="$GCC_VERSION"
 | 
						|
fi
 | 
						|
 | 
						|
case "$dist" in
 | 
						|
jessie|stretch|buster)
 | 
						|
  repo_url=https://archive.debian.org/debian
 | 
						|
  ;;
 | 
						|
*)
 | 
						|
  : ${SNAPSHOT:=20230611T210420Z}
 | 
						|
  repo_url=http://snapshot.debian.org/archive/debian/$SNAPSHOT
 | 
						|
  ;;
 | 
						|
esac
 | 
						|
 | 
						|
case "$dist" in
 | 
						|
jessie)
 | 
						|
  # The Debian Jessie GPG key expired.
 | 
						|
  GPG_KEY_EXPIRED=1
 | 
						|
  ;;
 | 
						|
esac
 | 
						|
 | 
						|
if [ -n "$GPG_KEY_EXPIRED" ]; then
 | 
						|
  extra_apt_opt='Apt::Key::gpgvcommand "/usr/local/sbin/gpgvnoexpkeysig"'
 | 
						|
fi
 | 
						|
 | 
						|
packages="
 | 
						|
  linux-libc-dev
 | 
						|
  libasound2-dev
 | 
						|
  libstdc++-${gcc_version}-dev
 | 
						|
  libfontconfig1-dev
 | 
						|
  libfreetype6-dev
 | 
						|
  libgconf2-dev
 | 
						|
  libgcc-${gcc_version}-dev
 | 
						|
  libgtk-3-dev
 | 
						|
  libpango1.0-dev
 | 
						|
  libpulse-dev
 | 
						|
  libx11-xcb-dev
 | 
						|
  libxt-dev
 | 
						|
  valgrind
 | 
						|
  $*
 | 
						|
"
 | 
						|
 | 
						|
# --keyring=... works around https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=981710
 | 
						|
# For a sysroot, we don't need everything. Essentially only libraries and headers, as
 | 
						|
# well as pkgconfig files. We exclude debug info files and valgrind files that are not
 | 
						|
# useful to build.
 | 
						|
queue_base="$TASKCLUSTER_ROOT_URL/api/queue/v1"
 | 
						|
(
 | 
						|
  echo "deb $repo_url $dist main"
 | 
						|
  for task in $PACKAGES_TASKS; do
 | 
						|
    echo "deb [trusted=yes] $queue_base/task/$task/artifacts/public/build/ apt/"
 | 
						|
  done
 | 
						|
) | mmdebstrap \
 | 
						|
  --architectures=$arch \
 | 
						|
  --variant=extract \
 | 
						|
  --include=$(echo $packages | tr ' ' ,) \
 | 
						|
  $dist \
 | 
						|
  $sysroot \
 | 
						|
  - \
 | 
						|
  --aptopt=/etc/apt/apt.conf.d/99taskcluster \
 | 
						|
  ${extra_apt_opt:+--aptopt="$extra_apt_opt"} \
 | 
						|
  --dpkgopt=path-exclude="*" \
 | 
						|
  --dpkgopt=path-include="/lib/*" \
 | 
						|
  --dpkgopt=path-exclude="/lib/systemd/*" \
 | 
						|
  --dpkgopt=path-include="/lib32/*" \
 | 
						|
  --dpkgopt=path-include="/lib64/*" \
 | 
						|
  --dpkgopt=path-include="/usr/include/*" \
 | 
						|
  --dpkgopt=path-include="/usr/lib/*" \
 | 
						|
  --dpkgopt=path-include="/usr/lib32/*" \
 | 
						|
  --dpkgopt=path-include="/usr/lib64/*" \
 | 
						|
  --dpkgopt=path-exclude="/usr/lib/debug/*" \
 | 
						|
  --dpkgopt=path-exclude="/usr/lib/python*" \
 | 
						|
  --dpkgopt=path-exclude="/usr/lib/valgrind/*" \
 | 
						|
  --dpkgopt=path-exclude="/usr/lib/*/perl" \
 | 
						|
  --dpkgopt=path-include="/usr/share/pkgconfig/*" \
 | 
						|
  --keyring=/usr/share/keyrings/debian-archive-removed-keys.gpg \
 | 
						|
  -v
 | 
						|
 | 
						|
# Remove files that are created despite the path-exclude=*.
 | 
						|
rm -rf $sysroot/etc $sysroot/dev $sysroot/tmp $sysroot/var
 | 
						|
 | 
						|
# Remove empty directories
 | 
						|
find $sysroot -depth -type d -empty -delete
 | 
						|
 | 
						|
# Adjust symbolic links to link into the sysroot instead of absolute
 | 
						|
# paths that end up pointing at the host system.
 | 
						|
find $sysroot -type l | while read l; do
 | 
						|
  t=$(readlink $l)
 | 
						|
  case "$t" in
 | 
						|
  /*)
 | 
						|
    # We have a path in the form "$sysroot/a/b/c/d" and we want ../../..,
 | 
						|
    # which is how we get from d to the root of the sysroot. For that,
 | 
						|
    # we start from the directory containing d ("$sysroot/a/b/c"), remove
 | 
						|
    # all non-slash characters, leaving is with "///", replace each slash
 | 
						|
    # with "../", which gives us "../../../", and then we remove the last
 | 
						|
    # slash.
 | 
						|
    rel=$(dirname $l | sed 's,[^/],,g;s,/,../,g;s,/$,,')
 | 
						|
    ln -sf $rel$t $l
 | 
						|
    ;;
 | 
						|
  esac
 | 
						|
done
 | 
						|
 | 
						|
tar caf $sysroot.tar.zst $sysroot
 | 
						|
 | 
						|
mkdir -p "$UPLOAD_DIR"
 | 
						|
mv "$sysroot.tar.zst" "$UPLOAD_DIR"
 |