
Compile le code source en paquets APK signés et audités à l'aide de pipelines déclaratifs pour Wolfi/Alpine, avec émulation QEMU multi-architecture et builds reproductibles.
Construisez des paquets apk à l'aide de pipelines déclaratifs.
Couramment utilisé pour fournir des paquets personnalisés pour les images de conteneurs construites avec apko. La majorité des apks sont construits pour être utilisés avec les écosystèmes Wolfi ou Alpine Linux.
Fonctionnalités clés :
Les usines logicielles sécurisées sont l'évolution de DevOps, permettant à un utilisateur de prouver la provenance de tous les artefacts incorporés dans une appliance logicielle. En construisant et en capturant les artefacts logiciels dans des paquets, les équipes DevOps peuvent gérer leurs artefacts logiciels comme s'il s'agissait de n'importe quel autre composant d'une image.
C'est particulièrement utile lors de la construction d'appliances logicielles sous la forme d'images de conteneurs OCI avec apko.
Vous pouvez installer Melange depuis Homebrew :
brew install melange
Vous pouvez également installer Melange depuis les sources :
go install chainguard.dev/melange@latest
Vous pouvez également utiliser l'image de conteneur Melange :
docker run cgr.dev/chainguard/melange version
Pour utiliser les exemples, vous voudrez généralement monter votre répertoire actuel dans le conteneur et fournir des privilèges élevés, par exemple :
docker run --privileged -v "$PWD":/work cgr.dev/chainguard/melange build examples/gnu-hello.yaml
L'exécution en dehors d'un conteneur nécessite Docker, mais devrait également fonctionner avec d'autres moteurs d'exécution tels que podman.
Un fichier de construction melange ressemble à :
package:
name: hello
version: 2.12
epoch: 0
description: "the GNU hello world program"
copyright:
- attestation: |
Copyright 1992, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2005,
2006, 2007, 2008, 2010, 2011, 2013, 2014, 2022 Free Software Foundation,
Inc.
license: GPL-3.0-or-later
dependencies:
runtime:
environment:
contents:
repositories:
- https://dl-cdn.alpinelinux.org/alpine/edge/main
packages:
- alpine-baselayout-data
- busybox
- build-base
- scanelf
- ssl_client
- ca-certificates-bundle
pipeline:
- uses: fetch
with:
uri: https://ftp.gnu.org/gnu/hello/hello-${{package.version}}.tar.gz
expected-sha256: cf04af86dc085268c5f4470fbae49b18afbc221b78096aab842d934a76bad0ab
- uses: autoconf/configure
- uses: autoconf/make
- uses: autoconf/make-install
- uses: strip
subpackages:
- name: "hello-doc"
description: "Documentation for hello"
dependencies:
runtime:
- foo
pipeline:
- uses: split/manpages
test:
pipeline:
- uses: test/docs
test:
environment:
contents:
packages:
- bar
pipeline:
- runs: |
hello
hello --version
Nous pouvons construire ce fichier avec :
melange build examples/gnu-hello.yaml
ou, avec Docker :
docker run --privileged --rm -v "${PWD}":/work \
cgr.dev/chainguard/melange build examples/gnu-hello.yaml
Cela créera un dossier packages, avec une entrée pour chaque architecture prise en charge par le paquet. Si vous souhaitez uniquement construire pour l'architecture actuelle, vous pouvez ajouter --arch $(uname -m) à la commande de construction. Dans le répertoire de l'architecture, vous devriez trouver les fichiers apk pour chaque paquet construit dans le pipeline.
Si vous souhaitez signer vos apks, créez une clé de signature avec la commande melange keygen :
melange keygen
generating keypair with a 4096 bit prime, please wait...
wrote private key to melange.rsa
wrote public key to melange.rsa.pub
Transmettez ensuite l'argument --signing-key à melange build.
Pour inclure des informations de niveau débogage sur les constructions melange, modifiez votre fichier melange.yaml et incluez set -x dans votre pipeline. Vous pouvez ajouter cette option à n'importe quel endroit de vos commandes de pipeline pour déboguer davantage une section spécifique de votre construction.
...
pipeline:
- name: Build Minicli application
runs: |
set -x
APP_HOME="${{targets.destdir}}/usr/share/hello-minicli"
...
Melange fournit les substitutions par défaut suivantes qui peuvent être référencées dans le pipeline du fichier de construction :
Un exemple de pipeline de fichier de construction avec substitutions :
pipeline:
- name: 'Create tmp dir'
runs: mkdir ${{targets.destdir}}/var/lib/${{package.name}}/tmp
Pour utiliser un apk construit avec melange dans apko, téléversez-le dans un dépôt de paquets ou utilisez un dépôt « local ». L'utilisation d'un dépôt local permet à une construction melange et à une construction apko de s'exécuter dans le même répertoire (ou dépôt GitHub) sans utiliser de stockage externe. Un exemple de cette approche peut être consulté dans le dépôt nginx-image-demo.
| Substitution | Description |
|---|
${{package.name}} | Nom du paquet |
${{package.version}} | Version du paquet |
${{package.epoch}} | Epoch du paquet |
${{package.full-version}} | ${{package.version}}-r${{package.epoch}} |
${{package.description}} | Description du paquet |
${{package.srcdir}} | Répertoire source du paquet (--source-dir) |
${{subpkg.name}} | Nom du sous-paquet |
${{context.name}} | nom du paquet principal ou du sous-paquet |
${{targets.outdir}} | Répertoire où les cibles seront stockées |
${{targets.contextdir}} | Répertoire où seront stockées les cibles pour les paquets principaux et les sous-paquets |
${{targets.destdir}} | Répertoire où seront stockées les cibles pour le paquet principal |
${{targets.subpkgdir}} | Répertoire où seront stockées les cibles pour les sous-paquets |
${{build.arch}} | Architecture de la construction actuelle (par ex. x86_64, aarch64) |
${{build.goarch}} | GOARCH de la construction actuelle (par ex. amd64, arm64) |