Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

package-repositories fail with the core24 base due to missing packages #4740

Closed
Meulengracht opened this issue Apr 17, 2024 · 4 comments · Fixed by #4754
Closed

package-repositories fail with the core24 base due to missing packages #4740

Meulengracht opened this issue Apr 17, 2024 · 4 comments · Fixed by #4754
Labels
bug Actual bad behavior that don't fall into maintenance or documentation

Comments

@Meulengracht
Copy link
Member

Bug Description

We have a LP recipe for a snap with base: core24 that's failing due to the following:

gpg: WARNING: unsafe permissions on homedir '/tmp/tmpvro98o2s'
gpg: error running '/usr/bin/dirmngr': probably not installed
gpg: failed to start dirmngr '/usr/bin/dirmngr': Configuration error
gpg: can't connect to the dirmngr: Configuration error
gpg: keyserver receive failed: No dirmngr

The build log is here:
https://launchpadlibrarian.net/724229364/buildlog_snap_ubuntu_noble_arm64_pi-24_BUILDING.txt.gz

And the recipe is here:
https://github.com/snapcore/pi-gadget/blob/24/snapcraft.yaml

It seems to happen when we use the following

package-repositories:
  - type: apt
    ppa: snappy-dev/image

We have tried to add the missing packages gnupg and dirmngr - but snapcraft fails before installing packages. It seems to have had special handling for core22 here

To Reproduce

  1. Create a snap recipe on LP using the latest edge snapcraft.
  2. Use a snapcraft.yaml that contains both of these configs options
    • base: core24
    • package-repositories: with type: apt

Environment

Snapcraft on LP.

snapcraft.yaml

name: pi
version: 24-1
summary: Raspberry Pi gadget
description: |
  Support files for booting Raspberry Pi.
  This gadget snap supports the Raspberry Pi 2B, 3B, 3A+, 3B+, 4B, Compute
  Module 3, and the Compute Module 3+ universally.
type: gadget
base: core24
build-base: devel
assumes: [kernel-assets]
platforms:
  rpi:
    build-on: arm64
    build-for: arm64
  rpi-amd64:
    build-on: amd64
    build-for: arm64

package-repositories:
  - type: apt
    ppa: snappy-dev/image

confinement: strict
grade: devel
parts:
  gadget:
    plugin: nil
    source: .
    override-build: |
      set -x
      
      # we only support arm64 for 24 for pi
      BUILD_ARCH_TRIPLET=aarch64-linux-gnu
      BUILD_SERIES=noble
      BUILD_ARCH="$(dpkg-architecture -t $BUILD_ARCH_TRIPLET -q DEB_HOST_ARCH)"
      
      # but only use the cross-compiling sources when actually cross compiling
      # as otherwise its just safer to use the build environment - it offers
      # much more flexibility.
      if [ "$CRAFT_ARCH_TRIPLET_BUILD_ON" = "x86_64-linux-gnu" ] || [ -z "$CRAFT_ARCH_TRIPLET_BUILD_ON" ]; then
        sed -i "/^deb/s/\bSERIES/$BUILD_SERIES/" ./helpers/cross-sources.list
        sed -i "/^deb/s/\bARCH\b/$BUILD_ARCH/" ./helpers/cross-sources.list
        OPTIONAL_ARGS="SERIES_HOST=\"$BUILD_SERIES\" SOURCES_HOST=\"./helpers/cross-sources.list\" SOURCES_D_HOST=\"./helpers\""
      fi
      
      make -C $CRAFT_PART_SRC core \
        DESTDIR=${CRAFT_PART_INSTALL} \
        SERIES="$BUILD_SERIES" \
        ARCH="$BUILD_ARCH" \
        ${OPTIONAL_ARGS:-}
    prime:
      - boot-assets/*
      - piboot.conf
    build-packages:
      - lsb-release
      - dpkg-dev
      - make
      - gnupg
      - dirmngr

slots:
  bcm-gpio-0:
    interface: gpio
    number: 0
  bcm-gpio-1:
    interface: gpio
    number: 1
  bcm-gpio-2:
    interface: gpio
    number: 2
  bcm-gpio-3:
    interface: gpio
    number: 3
  bcm-gpio-4:
    interface: gpio
    number: 4
  bcm-gpio-5:
    interface: gpio
    number: 5
  bcm-gpio-6:
    interface: gpio
    number: 6
  bcm-gpio-7:
    interface: gpio
    number: 7
  bcm-gpio-8:
    interface: gpio
    number: 8
  bcm-gpio-9:
    interface: gpio
    number: 9
  bcm-gpio-10:
    interface: gpio
    number: 10
  bcm-gpio-11:
    interface: gpio
    number: 11
  bcm-gpio-12:
    interface: gpio
    number: 12
  bcm-gpio-13:
    interface: gpio
    number: 13
  bcm-gpio-14:
    interface: gpio
    number: 14
  bcm-gpio-15:
    interface: gpio
    number: 15
  bcm-gpio-16:
    interface: gpio
    number: 16
  bcm-gpio-17:
    interface: gpio
    number: 17
  bcm-gpio-18:
    interface: gpio
    number: 18
  bcm-gpio-19:
    interface: gpio
    number: 19
  bcm-gpio-20:
    interface: gpio
    number: 20
  bcm-gpio-21:
    interface: gpio
    number: 21
  bcm-gpio-22:
    interface: gpio
    number: 22
  bcm-gpio-23:
    interface: gpio
    number: 23
  bcm-gpio-24:
    interface: gpio
    number: 24
  bcm-gpio-25:
    interface: gpio
    number: 25
  bcm-gpio-26:
    interface: gpio
    number: 26
  bcm-gpio-27:
    interface: gpio
    number: 27
  i2c-0:
    interface: i2c
    path: /dev/i2c-0
  i2c-1:
    interface: i2c
    path: /dev/i2c-1
  i2c-2:
    interface: i2c
    path: /dev/i2c-2
  i2c-3:
    interface: i2c
    path: /dev/i2c-3
  i2c-4:
    interface: i2c
    path: /dev/i2c-4
  i2c-5:
    interface: i2c
    path: /dev/i2c-5
  i2c-6:
    interface: i2c
    path: /dev/i2c-6
  bt-serial:
    interface: serial-port
    path: /dev/ttyAMA0
  serial0:
    interface: serial-port
    path: /dev/ttyS0
  serial1:
    interface: serial-port
    path: /dev/ttyS1
  serial2:
    interface: serial-port
    path: /dev/ttyS2
  serial3:
    interface: serial-port
    path: /dev/ttyS3
  serial4:
    interface: serial-port
    path: /dev/ttyS4
  serial5:
    interface: serial-port
    path: /dev/ttyS5
  serial6:
    interface: serial-port
    path: /dev/ttyS6
  serial7:
    interface: serial-port
    path: /dev/ttyS7
  serial8:
    interface: serial-port
    path: /dev/ttyS8
  serial9:
    interface: serial-port
    path: /dev/ttyS9
  spidev0:
    interface: spi
    path: /dev/spidev0.0
  spidev1:
    interface: spi
    path: /dev/spidev0.1
  spidev1-0:
    interface: spi
    path: /dev/spidev1.0
  spidev1-1:
    interface: spi
    path: /dev/spidev1.1
  spidev2-0:
    interface: spi
    path: /dev/spidev2.0
  spidev2-1:
    interface: spi
    path: /dev/spidev2.1
  spidev3-0:
    interface: spi
    path: /dev/spidev3.0
  spidev3-1:
    interface: spi
    path: /dev/spidev3.1
  spidev4-0:
    interface: spi
    path: /dev/spidev4.0
  spidev4-1:
    interface: spi
    path: /dev/spidev4.1
  spidev5-0:
    interface: spi
    path: /dev/spidev5.0
  spidev5-1:
    interface: spi
    path: /dev/spidev5.1
  spidev6-0:
    interface: spi
    path: /dev/spidev6.0
  spidev6-1:
    interface: spi
    path: /dev/spidev6.1
  pwm0:
    interface: pwm
    chip-number: 0
    channel: 0
  pwm1:
    interface: pwm
    chip-number: 0
    channel: 1

Relevant log output

https://launchpadlibrarian.net/725096872/buildlog_snap_ubuntu_noble_arm64_pi-24_BUILDING.txt.gz

Additional context

No response

@Meulengracht Meulengracht added the bug Actual bad behavior that don't fall into maintenance or documentation label Apr 17, 2024
Copy link

Thank you for reporting us your feedback!

The internal ticket has been created: https://warthogs.atlassian.net/browse/CRAFT-2820.

This message was autogenerated

@tigarmo
Copy link
Contributor

tigarmo commented Apr 22, 2024

An update here is that the system running the launchpad build is indeed missing dirmngr, but this is apparently not a new thing in core24: I did some testing with core22 and the jammy build also doesn't have dirmngr.

tigarmo added a commit that referenced this issue Apr 23, 2024
This commit mimicks the behavior for core22<= builds where gpg and dirmngr
are installed at runtime for projects with package-repositories. The trigger
for this commit is the fact that the environment where Snapcraft builds in
Launchpad do _not_ have the 'dirmngr' package installed.

Unfortunately the strategy of bundling 'gpg' and 'dirmngr' as stage-packages
in Snapcraft's own snap didn't work because gpg has the expected path to the
'dirmngr' executable hardcoded (always trying to call '/usr/bin/dirmngr').

Fixes #4740
tigarmo added a commit that referenced this issue Apr 23, 2024
This commit mimicks the behavior for core22<= builds where gpg and dirmngr
are installed at runtime for projects with package-repositories. The trigger
for this commit is the fact that the environment where Snapcraft builds in
Launchpad do _not_ have the 'dirmngr' package installed.

Unfortunately the strategy of bundling 'gpg' and 'dirmngr' as stage-packages
in Snapcraft's own snap didn't work because gpg has the expected path to the
'dirmngr' executable hardcoded (always trying to call '/usr/bin/dirmngr').

Fixes #4740
tigarmo added a commit that referenced this issue Apr 23, 2024
This commit mimicks the behavior for core22<= builds where gpg and dirmngr
are installed at runtime for projects with package-repositories. The trigger
for this commit is the fact that the environment where Snapcraft builds in
Launchpad do _not_ have the 'dirmngr' package installed.

Unfortunately the strategy of bundling 'gpg' and 'dirmngr' as stage-packages
in Snapcraft's own snap didn't work because gpg has the expected path to the
'dirmngr' executable hardcoded (always trying to call '/usr/bin/dirmngr').

Fixes #4740
tigarmo added a commit that referenced this issue Apr 23, 2024
This commit mimicks the behavior for core22<= builds where gpg and dirmngr
are installed at runtime for projects with package-repositories. The trigger
for this commit is the fact that the environment where Snapcraft builds in
Launchpad do _not_ have the 'dirmngr' package installed.

Unfortunately the strategy of bundling 'gpg' and 'dirmngr' as stage-packages
in Snapcraft's own snap didn't work because gpg has the expected path to the
'dirmngr' executable hardcoded (always trying to call '/usr/bin/dirmngr').

Fixes #4740
tigarmo added a commit that referenced this issue Apr 24, 2024
This commit mimicks the behavior for core22<= builds where gpg and dirmngr
are installed at runtime for projects with package-repositories. The trigger
for this commit is the fact that the environment where Snapcraft builds in
Launchpad do _not_ have the 'dirmngr' package installed.

Unfortunately the strategy of bundling 'gpg' and 'dirmngr' as stage-packages
in Snapcraft's own snap didn't work because gpg has the expected path to the
'dirmngr' executable hardcoded (always trying to call '/usr/bin/dirmngr').

Fixes #4740
@mr-cal
Copy link
Collaborator

mr-cal commented Apr 25, 2024

Fixed via #4754

@mr-cal mr-cal closed this as completed Apr 25, 2024
@Meulengracht
Copy link
Member Author

@mr-cal @tigarmo It now builds!! Thanks!! https://launchpad.net/~ubuntu-core-service/snap-pi/+snap/pi-24

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Actual bad behavior that don't fall into maintenance or documentation
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants