Skip to content

Installing packages ​

Often variants will need to install additional software to satisfy build or runtime dependencies. You can have APT packages installed using the apt directives.

Background ​

Given examples/hello-world-c as a working directory.

Install additional build dependencies ​

Given this "blubber.yaml"

yaml
version: v4
variants:
  build:
    base: debian:trixie
    apt:
      packages:
        - gcc
        - libc6-dev

When you build the "build" variant

Then the image will have the following files in "/usr/bin"

gcc

Install from additional APT sources ​

Given this "blubber.yaml"

yaml
version: v4
variants:
  build:
    base: docker-registry.wikimedia.org/trixie:latest
    apt:
      sources:
        - url: https://apt.wikimedia.org/wikimedia
          distribution: trixie-wikimedia
          components:
            - thirdparty/otelcol-contrib
      packages:
        trixie-wikimedia: # you may use an explicit distribution/release name like so
          - otelcol-contrib

When you build the "build" variant

Then the image will have the following files in "/usr/bin"

otelcol-contrib

Provide a public key for an additional APT source ​

Given this "blubber.yaml"

yaml
version: v4
base: docker-registry.wikimedia.org/trixie:latest
variants:
  build:
    apt:
      sources:
        - url: https://packages.microsoft.com/debian/13/prod
          distribution: trixie
          components: [main]
          signed-by: |
            -----BEGIN PGP PUBLIC KEY BLOCK-----
            Version: BSN Pgp v1.1.0.0

            mQINBGVUhiwBEADF3TWX0HMi2+BdQfJrSdQkZTE4qk4vV2ooAMn8vWA2DGI88JOl
            k1LwhZGEqJv5TsKTyNEMWb3NXhR1ZZ5uQPvf6iN0806cq83s096F85GUtjzfGLQj
            Zo3FhDSKeHz3mhthQ4QP4bwYUmSpWs6e+/ZSFYYc3yU8mInDM4SNzrqr4x2ltmf+
            3RWkoYYo1SpG521A9+1zi7xzz6IHpAk6MdIcTj7mHxXd6ovmXkvHUhKbXGkybHPn
            iupWokDaJZgV4+q6kc7zVgTVnwmXV7NHQhWSyOm/BmYVcpmrkCSgSH18SArFjR6Q
            KyJ9VuUo1mJEUGnEakQSaOn1UAYtO8Mh4cXXD4833G0BLjiFNOL0XRUNh35pKvcT
            my/HnXvRXtpzAzTtANPxIbjli/veagU+JRWhtjtfONz0wQ5Bv1zFjnM9ewxFNPPo
            7Jp9WCVeUKFZcZJo8r/k7Y4d0Y1WINOPniSCNhKcD0pva3gXLcxfdnZjdMSj++ba
            XlAstjw0Oyty0EXoHXCMpelMoa+DQ7KSDGKrOtm5YFAP6Ki4go1Tt2q8nmul36cZ
            Zot6eoPG/qKxW+dvmSrWhQCcfd74VbhECbzXiCFLHadq85C1K5rrLM6oVr1u7K6O
            jlc1aitGgZECi6fvu61QhpUvHjCegRWzMIhah9qrv4lvxFFcA+a1jwXlnwARAQAB
            tEJNaWNyb3NvZnQgQ29ycG9yYXRpb24gLSBHZW5lcmFsIEdQRyBTaWduZXIgPGdw
            Z3NpZ25AbWljcm9zb2Z0LmNvbT6JAjgEEwEIACIFAmVUhiwCGwMGCwkIBwMCBhUI
            AgkKCwQWAgMBAh4BAheAAAoJEO5Nd5L3SBgrDc0P/0Ubx0vqD/DgyhiP0bIs8euO
            iA5BQvOCiroIkhSkFbAw8rT9a/XtRTRM2l4I8c2M1ZX9i/0wWihmFUJhiVHyRxkl
            ZcEFv+ieBuhvD1gPOVLZg3To8yOTrcOnHe+FuKqA6u+3xBn2AmAWeck9o0NKhtnm
            5ckweos+Qj9NoxaZX8UeGFstOiTBJeyhuJjthQ+3M0BvTxEaRcLXGSXSGSgZ00ii
            YSLNgOMPF+C22bXBL/erClEYkIGCctqPvyrhV/GVNnGk2ALyJqdK+BaJeGh9mBJa
            ZrP3l6vFxsAI0RNCNU1s5QaFzfFzFkiUnG/aoyuwh4xmsB+uyVkR+KigPK9gfF3S
            nU7AqcdhSbUA6A0DGDRkHauHM5Wtc7730LdjiNDXbYwG/yXmDYNasoszmItZzh77
            HiQxYA5dNB9r9QJS2rHV/qe+heAJ5Rub5kxcu33DGL30qG7Q9+HRTu0oSEOIUFyT
            aOJJnNUiB2D4hoKKnr5U8FYOZ7KvDcG7cDvInqYtGpNfrnIf94VeB9WJY6DbDQSA
            F5yHb6X8FS0x3lMT2H1l6RRyr0278kyO18VBudtlnonC+Y1UT7eqAk6WjS5CitPX
            T3Hc7jCURugXrc51igKa+p67yAaybEIuVyWF6JaINKRqiUqEPVXnHELXPbBmiHW5
            1HwdbKTMzgF8bu1JI+tQ
            =lIzW
            -----END PGP PUBLIC KEY BLOCK-----
      packages: [dotnet-runtime-8.0]
    entrypoint: [dotnet, --list-runtimes]

When you build and run the "build" variant

Then the entrypoint will have run successfully.