craft_parts.packages.deb.Ubuntu wants gcc, but it is not installable (Depends: binutils)
Metadata
Current evaluation
⚠️ This summary may be outdated — the issue content or evaluation prompts have changed since this evaluation was made.
Cross-compiling Firefox amd64->arm64 in destructive Docker fails installing build-packages: plugin-injected gcc/make leads to gcc-13 Depends binutils not installable. No maintainer triage yet.
Suggested action: needs triage
Reason: The issue has no labels, comments, or maintainer acknowledgement, and the reproducer requires Mozilla CI permissions plus a large project-specific snapcraft.yaml. The root cause is not yet isolated: it may be an apt repository/architecture configuration problem rather than a snapcraft defect.
Evaluated by: mr-cal-bot
Impact:
45
Quick Win:
6
Complexity:
65
Confidence:
50
Actionability:
35
Issue body
### Check existing issues
- [x] I've verified that this bug isn't described by any existing issues.
### Bug description
When installing the packages specified in the part's build-packages, snapcraft will fail:
```
The following packages have unmet dependencies:
gcc-13 : Depends: binutils (>= 2.39) but it is not installable
E: Unable to correct problems, you have held broken packages.
Cannot install all requested build packages: clang-19:arm64, cmake, coreutils, curl, file, gcc, git, gpg, jq, libasound2-dev:arm64, libc++-19-dev-wasm32, libc++abi-19-dev-wasm32, libc++abi-19-dev:arm64, libclang-rt-19-dev-wasm32, libclang-rt-19-dev:arm64, libpython3-dev:arm64, libstdc++-11-dev-arm64-cross, libx11-dev:arm64, lld-19:arm64, llvm-19:arm64, m4, make, mercurial, nasm, nodejs:arm64, python3, python3-lxml, python3-virtualenv, python3-yaml, quilt, sed, sudo, unzip, wasi-libc:arm64, wget, xvfb, zip
```
Now, I never specified GCC-13 in the part. Looking some lines above, one can see
```
get repository attribute: attr=get_packages_for_source_type, repository:<class 'craft_parts.packages.deb.Ubuntu'>
plugin build packages: {'gcc', 'make'}
```
This seems to be a "hidden" part responsible for the `build-packages:` list.
An important factor is that this happens when cross-compiling Firefox in destructive mode in Docker.
### Steps to reproduce
This is complicated as it has to be reproduced in Mozilla's CI. Clone Firefox' source and `./mach try fuzzy --full -q "'snap"` (one needs to have permissions to run it).
### Environment
Cross-compiling (amd64->arm64) Firefox in destructive mode in Docker.
### snapcraft.yaml
```yaml
# Copyright (C) 2021 Canonical Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3, as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
name: firefox
version: "159.0a1"
summary: Mozilla Firefox web browser
description: Firefox is a powerful, extensible web browser with support for modern web application technologies.
confinement: strict
grade: stable
base: core24
compression: lzo
# This requires snapcraft version including
# https://github.com/canonical/snapcraft/pull/5233
# Launchpad is not able to handle those for the moment, so it is commented by
# default but users can uncomment
##CROSS-COMPILATION##platforms:
##CROSS-COMPILATION## native:
##CROSS-COMPILATION## build-on: [amd64]
##CROSS-COMPILATION## build-for: [amd64]
##CROSS-COMPILATION## cross-arm64:
##CROSS-COMPILATION## build-on: [amd64, arm64]
##CROSS-COMPILATION## build-for: [arm64]
package-repositories:
- type: apt
architectures: [arm64]
components: [main, multiverse, universe]
suites: [noble, noble-updates, noble-security, noble-backports]
key-id: F6ECB3762474EDA9D21B7022871920D1991BC93C
url: http://ports.ubuntu.com/
assumes:
- snapd2.54 # for mount-control
apps:
firefox:
command: firefox.launcher
desktop: firefox.desktop
extensions: [gnome]
environment:
# See below and also the 'snap/hooks/post-refresh' file for
# more details about our hunspell setup.
DICPATH: "$SNAP_COMMON/snap-hunspell"
GTK_USE_PORTAL: 1
HOME: "$SNAP_USER_COMMON"
PIPEWIRE_CONFIG_NAME: client.conf
SPEECHD_ADDRESS: "unix_socket:/run/user/$SNAP_UID/speech-dispatcher/speechd.sock"
MOZ_DBUS_APP_NAME: "firefox_nightly"
MOZ_APP_REMOTINGNAME: "firefox_firefox"
MOZ_LEGACY_HOME: 1
slots:
- dbus-daemon
- mpris
plugs:
- alsa
- audio-playback
- audio-record
- avahi-observe
- browser-sandbox
- camera
- cups-control
- gsettings
- hardware-observe
- home-read-all
- host-hunspell
- host-usr-share-hunspell
- joystick
- kerberos-tickets
- login-session-observe
- network
- network-observe
- opengl
- password-manager-service
- pcscd
- removable-media
- screen-inhibit-control
- system-packages-doc
- timezone-control
- u2f-devices
- unity7
- upower-observe
geckodriver:
command: usr/lib/firefox/geckodriver
extensions: [gnome]
plugs:
- network-bind
# + all the plugs required by firefox, so that when geckodriver
# executes firefox it inherits the correct set of permissions
- audio-playback
- audio-record
- avahi-observe
- browser-sandbox
- camera
- cups-control
- gsettings
- hardware-observe
- home-read-all
- host-hunspell
- host-usr-share-hunspell
- joystick
- kerberos-tickets
- login-session-observe
- network
- network-observe
- opengl
- password-manager-service
- pcscd
- removable-media
- screen-inhibit-control
- system-packages-doc
- timezone-control
- u2f-devices
- unity7
- upower-observe
slots:
- dbus-daemon
- mpris
plugs:
browser-sandbox:
interface: browser-support
allow-sandbox: true
dot-mozilla-firefox:
interface: personal-files
read: [$HOME/.mozilla/firefox]
etc-firefox:
interface: system-files
read: [/etc/firefox]
host-hunspell:
interface: mount-control
mount:
- what: /usr/share/hunspell
where: $SNAP_COMMON/host-hunspell
persistent: true
options: [ro, bind, noatime, noexec]
host-usr-share-hunspell:
interface: system-files
read:
- /var/lib/snapd/hostfs/usr/share/hunspell
home-read-all:
interface: home
read: all
layout:
/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/opensc-pkcs11.so:
bind-file: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/opensc-pkcs11.so
parts:
dump-syms:
plugin: nil
build-packages:
- curl
- git
- jq
- python3-yaml
override-pull: |
apt remove -y gcc || :
if [ $CRAFT_ARCH_TRIPLET_BUILD_FOR = arm64 ]; then
apt install -y rustc-1.91:arm64 cargo-1.91:arm64 gcc-13:arm64
else
apt install -y cargo-1.91 rustc-1.91 gcc-13
fi
ROOT=https://ftp.mozilla.org/pub/firefox/nightly/latest-mozilla-central
REVISION=$(wget -O - $ROOT/firefox-$(craftctl get version).en-US.linux-x86_64.txt | tail -1 | sed -n "s#^.*\/rev/\(.*\)\$#\1#p")
FETCHES=https://hg.mozilla.org/mozilla-central/raw-file/${REVISION}/taskcluster/kinds/fetch/toolchains.yml
TOOLCHAINS=$(curl -sSL "${FETCHES}")
unset PYTHONPATH
REPO=$(echo "${TOOLCHAINS}" | /usr/bin/python3 -c 'import yaml, sys; fetches = yaml.safe_load(sys.stdin); print("{}".format(fetches["dump-syms"]["fetch"]["repo"]))')
SHA1=$(echo "${TOOLCHAINS}" | /usr/bin/python3 -c 'import yaml, sys; fetches = yaml.safe_load(sys.stdin); print("{}".format(fetches["dump-syms"]["fetch"]["revision"]))')
git clone "${REPO}" . && git checkout "${SHA1}"
override-build: |
craftctl default
cargo-1.91 build --release
mkdir -p $CRAFT_STAGE/usr/bin/
cp target/release/dump_syms $CRAFT_STAGE/usr/bin/
# This is a temporary workaround to including the hunspell content
# snap, which would cause breakage in the Ubuntu desktop image build
# because of the Ubuntu policy. See:
# https://bugzilla.mozilla.org/show_bug.cgi?id=1792006
#
# The definition of this part is essentially a copy of the
# corresponding part in hunspell-dictionaries-1-7-2004 by
# Buo-ren, Lin.
hunspell:
plugin: nil
override-build: |
craftctl default
set -eu
apt download $(apt-cache search '^hunspell-.*$' |
awk '!/myspell|dbgsym|tools|transitional|dependency/{printf "%s ", $1}')
find . -name "*.deb" -exec dpkg-deb -x {} "$CRAFT_PART_INSTALL" \;
prime:
- usr/share/hunspell
mozconfig:
plugin: nil
# This should be 'pull' step so that firefox.pull step can add more
# configure flags to mozconfig ; if it's stage then firefox.pull will put
# content that we will overwrite here
override-pull: |
cp $CRAFT_PROJECT_DIR/mozconfig.in $CRAFT_STAGE/mozconfig
override-prime: ''
# Launchpad builders have a timeout for how long they are allowed to access
# the internet (through a proxy) starting from the start of the build.
# Since the firefox part takes a long time to build, we need to ensure
# that all other parts that need to access the internet (to e.g. fetch build
# or stage packages) are built before it (before the proxy authentication is
# revoked).
firefox:
plugin: nil
after:
- apikeys
- distribution
- dump-syms
- kerberos
- ffmpeg
- firefox-langpacks
- hunspell
- mozconfig
build-packages:
- libc++-19-dev-wasm32
- libc++abi-19-dev-wasm32
- libclang-rt-19-dev-wasm32
- sudo # For Mozilla's docker build
- on amd64:
- to amd64:
- libasound2-dev
- libpython3-dev
- libclang-rt-19-dev
- libc++abi-19-dev
- libx11-dev
- clang-19
- llvm-19
- lld-19
- nodejs
- wasi-libc
- to arm64:
- libstdc++-11-dev-arm64-cross
- libasound2-dev:arm64
- libpython3-dev:arm64
- libclang-rt-19-dev:arm64
- libc++abi-19-dev:arm64
- libx11-dev:arm64
- clang-19:arm64
- llvm-19:arm64
- lld-19:arm64
- nodejs:arm64
- wasi-libc:arm64
- else:
- libasound2-dev
- libpython3-dev
- libclang-rt-19-dev
- libc++abi-19-dev
- libx11-dev
- clang-19
- llvm-19
- lld-19
- nodejs
- wasi-libc
- cmake
- coreutils
- file
- git
- m4
- make
- mercurial
- nasm
- quilt
- sed
- unzip
- wget
- xvfb
- zip
override-pull: |
craftctl default
REPO=https://hg.mozilla.org/mozilla-central
ROOT=https://ftp.mozilla.org/pub/firefox/nightly/latest-mozilla-central
REVISION=$(wget -O - $ROOT/firefox-$(craftctl get version).en-US.linux-x86_64.txt | tail -1 | sed -n "s#^$REPO/rev/\(.*\)\$#\1#p")
hg clone --stream $REPO -u $REVISION .
rm -rf .hg
mkdir -p $CRAFT_STAGE/debug-symbols
cp toolkit/crashreporter/tools/upload_symbols.py $CRAFT_STAGE/debug-symbols/
# Apply patches before the build, so a failed build can be
# easily rerun.
QUILT_PATCHES=$CRAFT_PROJECT_DIR/patches quilt push -a
BUILD_DBGSYMS=true
export MOZCONFIG="$CRAFT_STAGE/mozconfig"
echo "export MOZ_SOURCE_REPO=${REPO}" >> $MOZCONFIG
echo "export MOZ_SOURCE_CHANGESET=${REVISION}" >> $MOZCONFIG
if [ $BUILD_DBGSYMS = "true" ]; then
echo "ac_add_options --enable-debug-symbols" >> $MOZCONFIG
else
echo "ac_add_options --disable-debug-symbols" >> $MOZCONFIG
fi
if [ $CRAFT_ARCH_BUILD_FOR = "amd64" ]; then
# Enable LTO and PGO (https://firefox-source-docs.mozilla.org/build/buildsystem/pgo.html) only on amd64 for now.
# Running PGO on arm64 takes forever (> 4 days in the Launchpad build environment!).
echo "ac_add_options --enable-linker=lld" >> $MOZCONFIG
echo "ac_add_options MOZ_PGO=1" >> $MOZCONFIG
fi
echo "ac_add_options --enable-rust-simd" >> $MOZCONFIG
echo "ac_add_options --prefix=$CRAFT_PART_INSTALL/usr" >> $MOZCONFIG
if [ $CRAFT_ARCH_BUILD_ON != $CRAFT_ARCH_BUILD_FOR ]; then
if [ $CRAFT_ARCH_BUILD_FOR = "arm64" ]; then
echo "ac_add_options --target=aarch64-linux-gnu" >> $MOZCONFIG
echo "ac_add_options --enable-linker=lld" >> $MOZCONFIG
fi
fi
override-build: |
craftctl default
unvBinDir=$CRAFT_PART_BUILD/unversioned-binaries
export PATH=$PATH:$unvBinDir
mkdir -p "$unvBinDir"
for o in /usr/bin/llvm-*-19 \
/usr/bin/lld-19 \
/usr/bin/lld-link-19 \
/usr/bin/ld.lld-19 \
/usr/bin/wasm-ld-19 \
/usr/bin/lld-19 \
/usr/bin/clang-19 \
/usr/bin/clang++-19 \
; do
b=$(basename "$o")
ln -sf "$o" "$unvBinDir/${b%-19}"
done
rustv=1.91
ln -sf "/usr/bin/rustc-${rustv}" "$unvBinDir/rustc"
ln -sf "/usr/bin/rust-${rustv}-clang" "$unvBinDir/rust-clang"
ln -sf "/usr/bin/rust-${rustv}-lld" "$unvBinDir/rust-lld"
ln -sf "/usr/bin/rust-${rustv}-llvm-dwp" "$unvBinDir/rust-llvm-dwp"
ln -sf "/usr/bin/cargo-${rustv}" "$unvBinDir/cargo"
cargo install cbindgen
# Fixes configuration error that started after Libclang version 19:
# "Could not find libclang to generate rust bindings for C/C++."
export MOZCONFIG="$CRAFT_STAGE/mozconfig"
sudo ln -sf /usr/lib/llvm-19/lib/libclang-19.so.1 \
/usr/lib/llvm-19/lib/libclang.so.1
echo "ac_add_options --with-libclang-path=/usr/lib/llvm-19/lib/" >> $MOZCONFIG
GNOME_SDK_SNAP_BASE=gnome-46-2404-sdk
GNOME_SDK_SNAP_REVISION=current
GNOME_SDK_SNAP=/snap/$GNOME_SDK_SNAP_BASE/$GNOME_SDK_SNAP_REVISION
if [ $CRAFT_ARCH_BUILD_FOR = "amd64" ]; then
# "clang -dumpmachine" returns "x86_64-unknown-linux-gnu" on
# amd64 (at least the binaries they distribute), but what we
# really need is "x86_64-pc-linux-gnu"; so let's hard-code it.
export TARGET_TRIPLET="x86_64-pc-linux-gnu"
elif [ $CRAFT_ARCH_BUILD_FOR = "arm64" ]; then
export TARGET_TRIPLET="aarch64-unknown-linux-gnu"
fi
export LDFLAGS="-Wl,-rpath-link=$GNOME_SDK_SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR -Wl,-rpath-link=$GNOME_SDK_SNAP/usr/lib"
export LDFLAGS="-Wl,-rpath-link=$CRAFT_PART_BUILD/obj-$TARGET_TRIPLET/dist/bin${LDFLAGS:+ $LDFLAGS}"
export LD_LIBRARY_PATH="$CRAFT_PART_BUILD/obj-$TARGET_TRIPLET/dist/bin${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export MOZBUILD_STATE_PATH=$CRAFT_PART_BUILD/.mozbuild
export MOZCONFIG="$CRAFT_STAGE/mozconfig"
BUILD_DBGSYMS=false
if [ $CRAFT_ARCH_BUILD_ON = "amd64" ] || [ $CRAFT_ARCH_BUILD_FOR = "arm64" ]; then
# See override-pull above for why we only build debug symbols
# on these arches.
BUILD_DBGSYMS=true
fi
unset PYTHONPATH
if [ $CRAFT_ARCH_BUILD_FOR = "amd64" ]; then
# Needed for PGO-enabled builds that execute the built binaries. This should mirror the link paths in $LDFLAGS.
export LD_LIBRARY_PATH="$GNOME_SDK_SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$GNOME_SDK_SNAP/usr/lib"
# Ensure the instrumented binary is run against the right version of libssl3.so and libnss3.so
# (locally-built versions are more recent than the ones in the gnome platform snap)
export LD_LIBRARY_PATH="$CRAFT_PART_BUILD/obj-$TARGET_TRIPLET/instrumented/dist/bin${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
fi
# Hack to avoid out of space condition when building. This removes the
# sources of all parts. FIXME when Launchpad builders get more space
# (currently 80 GB: https://help.launchpad.net/Packaging/BuilderSpecs)
for d in $CRAFT_PROJECT_DIR/parts/*/; do
rm -rf "$d"/src || :
done
MACH="/usr/bin/python3 ./mach"
$MACH repackage desktop-file --output $CRAFT_PART_INSTALL/firefox.desktop --flavor snap --release-product "firefox" --release-type nightly
if grep -qF "MOZ_PGO=1" "$MOZCONFIG"; then
# xvfb is only needed when doing a PGO-enabled build
xvfb-run '--server-args=-screen 0 1920x1080x24' $MACH build --verbose -j$CRAFT_PARALLEL_BUILD_COUNT
else
$MACH build --verbose -j$CRAFT_PARALLEL_BUILD_COUNT
fi
find . -name 'dep-graph.bin' -delete
find . -name 'query-cache.bin' -delete
find . -name 'work-products.bin' -delete
if [ $BUILD_DBGSYMS = "true" ]; then
DUMP_SYMS=$CRAFT_STAGE/usr/bin/dump_syms $MACH buildsymbols
fi
$MACH install
cp obj-*/dist/host/bin/geckodriver $CRAFT_PART_INSTALL/usr/lib/firefox/
DISTRIBUTION=$CRAFT_PART_INSTALL/usr/lib/firefox/distribution
mkdir -p $DISTRIBUTION/extensions
cp browser/branding/nightly/default256.png $CRAFT_PART_INSTALL/
if [ $BUILD_DBGSYMS = "true" ]; then
cp obj-*/dist/firefox-*.crashreporter-symbols.zip $CRAFT_STAGE/debug-symbols/
fi
override-stage: |
# Workaround for LP: #2016358: create mount points for the gnome
# content interface, while a proper fix is implemented in snapd.
# Thanks to James Henstridge.
mkdir $CRAFT_PART_INSTALL/{gnome-platform,data-dir,data-dir/{icons,sounds,themes}}
craftctl default
stage-packages:
- on amd64:
- to amd64:
- libpci3
- libspeechd2
- opensc-pkcs11
- to arm64:
- libpci3:arm64
- libspeechd2:arm64
- opensc-pkcs11:arm64
- else:
- libpci3
- libspeechd2
- opensc-pkcs11
prime:
- default256.png
- firefox.desktop
- usr/lib/firefox
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/opensc-pkcs11.so
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/pkcs11/opensc-pkcs11.so
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libasn1.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libhcrypto.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libheimbase.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libheimntlm.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libhogweed.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libhx509.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/liblber-2.4.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libldap_r-2.4.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libnettle.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libnghttp2.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libroken.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/librtmp.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libsasl2.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libspeechd.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libssh.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libssl.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libwind.so.*
# Workaround for LP: #2016358 (see the 'override-stage' above).
- gnome-platform
- data-dir/icons
- data-dir/sounds
- data-dir/themes
firefox-langpacks:
plugin: nil
build-packages:
- coreutils
- sed
- wget
override-pull: |
VERSION=$(craftctl get version)
SERVER=https://ftp.mozilla.org
ROOT=$SERVER/pub/firefox/nightly/latest-mozilla-central-l10n/linux-x86_64/xpi/
XPIS=$(wget -O - $ROOT | sed -n "s/.* href=\"\(.*$VERSION.*\.xpi\)\".*/\1/p")
mkdir -p $CRAFT_STAGE
for XPI in $XPIS; do
wget -P $CRAFT_STAGE $SERVER$XPI
done
override-prime: |
INSTALLDIR=$CRAFT_PRIME/usr/lib/firefox/distribution/extensions
mkdir -p $INSTALLDIR
for XPI in $(ls $CRAFT_STAGE/*.xpi); do
LANGCODE=$(basename $XPI .xpi)
mkdir $INSTALLDIR/locale-$LANGCODE
cp $XPI $INSTALLDIR/locale-$LANGCODE/langpack-$LANGCODE@firefox.mozilla.org.xpi
done
# Bundle patched Kerberos library that ignores failed includedirs (LP:2122317)
#
# We need to untangle this part from Gnome extension's idiosyncrasies,
# as they cause cryptic errors including but not limited to
#
# > relocation R_X86_64_TPOFF32 against `buffer' can not be used when making
# > a shared object; recompile with -fPIC"
kerberos:
plugin: nil
build-packages:
- python3-lxml # Missing from Krb5 build-dependencies?
- sudo # For Mozilla's docker build
build-environment:
- DEB_BUILD_OPTIONS: nodoc
# Delete Gnome extension's injections in this variable
- PKG_CONFIG_PATH: $CRAFT_STAGE/usr/share/pkgconfig
override-pull: |
# Fetch Kerberos from release matching current base snap
sudo sed -i '/Types:/s/deb/deb deb-src/' /etc/apt/sources.list.d/*.sources
sudo apt update
apt source krb5
override-build: |
# Delete Gnome extension's injections in this variable
export PATH=${PATH#/snap*:}
# Apply our patch and build
cp -r $CRAFT_PART_SRC/krb5* .
cd krb5*/
sudo apt build-dep -y . # sudo needed in Mozilla's docker build
patch -p1 < "$CRAFT_PROJECT_DIR/patches/external/krb5:ignore-failed-includedirs"
./debian/rules build
# Prime its resultant relevant libraries
mkdir -p "$CRAFT_PRIME/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR"
cp build/lib/*krb5*.so.? "$CRAFT_PRIME/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR"
launcher:
plugin: nil
override-prime: |
cp "$CRAFT_PROJECT_DIR/firefox.launcher" "$CRAFT_PRIME/"
cp "$CRAFT_PROJECT_DIR/patch-default-profile.py" "$CRAFT_PRIME/"
distribution:
plugin: nil
override-pull : |
git clone --depth 1 https://github.com/mozilla-partners/canonical.git .
mkdir -p $CRAFT_PRIME/usr/lib/firefox/
cp -Rv desktop/ubuntu/distribution $CRAFT_PRIME/usr/lib/firefox/
ffmpeg:
plugin: nil
# Not using the ffmpeg snap (which might provide a more recent version)
# because it is currently built on core18
stage-packages:
- on amd64:
- to amd64:
- libavcodec60
- libhwy1t64
- libsvtav1enc1d1
- libjxl0.7
- librav1e0
- libvpl2 # the package is intel specific
- to arm64:
- libavcodec60:arm64
- libhwy1t64:arm64
- libsvtav1enc1d1:arm64
- libjxl0.7:arm64
- librav1e0:arm64
- else:
- libavcodec60
- libhwy1t64
- libsvtav1enc1d1
- libjxl0.7
- librav1e0
prime:
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libaom.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libavcodec.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libavutil.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libcodec2.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libdav1d.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libgsm.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libhwy.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libjxl.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libjxl_threads.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libmd.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libmfx.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libmp3lame.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libnuma.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libOpenCL.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libopus.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/librav1e.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libshine.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libsnappy.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libsoxr.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libspeex.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libSvtAv1Enc.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libswresample.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libtheoradec.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libtheoraenc.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libtwolame.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libvdpau.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libvpl.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libvpx.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libwavpack.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libwebpmux.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libwebp.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libx264.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libx265.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libxvidcore.so.*
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libzvbi.so.*
# the package is intel specific
- on amd64:
- to amd64:
- usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libvpl.so.*
# Obscure API keys. This is just to give scrapers a hard time; It is therefore
# no problem that .passphrase is public.
#
# To update an API key, execute the GPG command to generate the apikeys file.
# Update the desired key manually, encrypt and commit the new .apikeys file.
apikeys:
plugin: nil
after:
- mozconfig
build-packages:
- coreutils
- gpg
- jq
override-build: |
craftctl default
MOZCONFIG="$CRAFT_STAGE/mozconfig"
gpg -d --batch --passphrase "$(base64 -d $CRAFT_PROJECT_DIR/.passphrase)" -o apikeys $CRAFT_PROJECT_DIR/.apikeys
< apikeys jq .MOZ_GOOGLE_LOCATION_SERVICE_API_KEY | tr -d '"' > $CRAFT_PART_INSTALL/gls-gapi.data
echo "ac_add_options --with-google-location-service-api-keyfile=$CRAFT_STAGE/gls-gapi.data" >> $MOZCONFIG
< apikeys jq .MOZ_GOOGLE_SAFEBROWSING_API_KEY | tr -d '"' > $CRAFT_PART_INSTALL/sb-gapi.data
echo "ac_add_options --with-google-safebrowsing-api-keyfile=$CRAFT_STAGE/sb-gapi.data" >> $MOZCONFIG
override-prime: ''
debug-symbols:
plugin: nil
build-packages:
- python3
- python3-virtualenv
after:
- firefox
override-build: |
export SYMBOLS_ARCHIVE=$(find $CRAFT_STAGE/debug-symbols/ -type f -name "firefox-*.crashreporter-symbols.zip")
if [ -f "$SYMBOLS_ARCHIVE" ]; then
cp $SYMBOLS_ARCHIVE $CRAFT_PROJECT_DIR/$CRAFT_PROJECT_NAME_$(craftctl get version)_$CRAFT_ARCH_BUILD_FOR.debug
fi
slots:
dbus-daemon:
interface: dbus
bus: session
name: org.mozilla.firefox_nightly
hooks:
post-refresh:
plugs: [host-usr-share-hunspell]
install:
plugs: [host-usr-share-hunspell]
```
### Log output
```shell
https://people.canonical.com/~npt/live_backing.log
```
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| ~deepseek/deepseek-pro-latest |
Impact:
45
Quick Win:
6
Complexity:
65
Confidence:
50
Actionability:
35
|
needs triage | Cross-compiling Firefox amd64->arm64 in destructive Docker fails installing build-packages: plugin-injected gcc/make leads to gcc-13 Depends binutils not installable. No maintainer triage yet. |
Update history
| Date | Change |
|---|---|
| updated | |
| created |
Related issues
No related issues found above the similarity threshold.