
स्रोत कोड को Wolfi/Alpine के लिए घोषणात्मक पाइपलाइनों का उपयोग करके ऑडिट योग्य, हस्ताक्षरित APK पैकेजों में संकलित करता है, जिसमें बहु-वास्तुकला QEMU एमुलेशन और पुनरुत्पादन योग्य बिल्ड शामिल हैं।
घोषणात्मक पाइपलाइनों का उपयोग करके apk पैकेज बनाएँ।
आमतौर पर apko के साथ निर्मित कंटेनर छवियों के लिए कस्टम पैकेज प्रदान करने के लिए उपयोग किया जाता है। अधिकांश apk या तो Wolfi या Alpine Linux इकोसिस्टम के साथ उपयोग के लिए बनाए जाते हैं।
मुख्य विशेषताएँ:
सुरक्षित सॉफ़्टवेयर फैक्ट्रियाँ DevOps का विकास हैं, जो उपयोगकर्ता को किसी सॉफ़्टवेयर उपकरण में शामिल सभी आर्टिफैक्ट्स की उत्पत्ति साबित करने की अनुमति देती हैं। सॉफ़्टवेयर आर्टिफैक्ट्स को पैकेजों में बनाकर और कैप्चर करके, DevOps टीमें अपने सॉफ़्टवेयर आर्टिफैक्ट्स को ऐसे प्रबंधित कर सकती हैं जैसे कि वे किसी छवि का कोई अन्य घटक हों।
यह विशेष रूप से तब उपयोगी है जब apko के साथ OCI कंटेनर छवियों के रूप में सॉफ़्टवेयर उपकरण बनाए जा रहे हों।
आप Melange को Homebrew से इंस्टॉल कर सकते हैं:
brew install melange
आप Melange को स्रोत से भी इंस्टॉल कर सकते हैं:
go install chainguard.dev/melange@latest
आप Melange कंटेनर छवि का भी उपयोग कर सकते हैं:
docker run cgr.dev/chainguard/melange version
उदाहरणों का उपयोग करने के लिए, आप आम तौर पर अपनी वर्तमान निर्देशिका को कंटेनर में माउंट करना चाहेंगे और उन्नत विशेषाधिकार प्रदान करना चाहेंगे, उदाहरण के लिए:
docker run --privileged -v "$PWD":/work cgr.dev/chainguard/melange build examples/gnu-hello.yaml
कंटेनर के बाहर चलाने के लिए Docker की आवश्यकता होती है, लेकिन यह podman जैसे अन्य रनटाइम के साथ भी काम करना चाहिए।
एक melange बिल्ड फ़ाइल इस प्रकार दिखती है:
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
हम इसे इस प्रकार बना सकते हैं:
melange build examples/gnu-hello.yaml
या, Docker के साथ:
docker run --privileged --rm -v "${PWD}":/work \
cgr.dev/chainguard/melange build examples/gnu-hello.yaml
यह एक packages फ़ोल्डर बनाएगा, जिसमें पैकेज द्वारा समर्थित प्रत्येक आर्किटेक्चर के लिए एक प्रविष्टि होगी। यदि आप केवल वर्तमान आर्किटेक्चर के लिए बिल्ड करना चाहते हैं, तो आप बिल्ड कमांड में --arch $(uname -m) जोड़ सकते हैं। आर्किटेक्चर निर्देशिका के अंदर आपको पाइपलाइन में बनाए गए प्रत्येक पैकेज के लिए apk फ़ाइलें मिलनी चाहिए।
यदि आप अपने apk पर हस्ताक्षर करना चाहते हैं, तो 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
और फिर melange build को --signing-key तर्क दें।
melange बिल्ड में डीबग-स्तरीय जानकारी शामिल करने के लिए, अपनी melange.yaml फ़ाइल संपादित करें और अपनी पाइपलाइन में set -x शामिल करें। आप इस फ़्लैग को अपने बिल्ड के किसी विशेष अनुभाग को और डीबग करने के लिए अपनी पाइपलाइन कमांड के किसी भी बिंदु पर जोड़ सकते हैं।
...
pipeline:
- name: Build Minicli application
runs: |
set -x
APP_HOME="${{targets.destdir}}/usr/share/hello-minicli"
...
Melange निम्नलिखित डिफ़ॉल्ट प्रतिस्थापन प्रदान करता है जिन्हें बिल्ड फ़ाइल पाइपलाइन में संदर्भित किया जा सकता है:
प्रतिस्थापनों के साथ एक उदाहरण बिल्ड फ़ाइल पाइपलाइन:
pipeline:
- name: 'Create tmp dir'
runs: mkdir ${{targets.destdir}}/var/lib/${{package.name}}/tmp
apko में melange से निर्मित apk का उपयोग करने के लिए, इसे पैकेज रिपॉजिटरी में अपलोड करें या "लोकल" रिपॉजिटरी का उपयोग करें। लोकल रिपॉजिटरी का उपयोग करने से melange बिल्ड और apko बिल्ड एक ही निर्देशिका (या GitHub रेपो) में बाहरी स्टोरेज का उपयोग किए बिना चल सकते हैं। इस दृष्टिकोण का एक उदाहरण nginx-image-demo repo में देखा जा सकता है।
| Substitution | Description |
|---|
${{package.name}} | पैकेज नाम |
${{package.version}} | पैकेज संस्करण |
${{package.epoch}} | पैकेज इपॉक |
${{package.full-version}} | ${{package.version}}-r${{package.epoch}} |
${{package.description}} | पैकेज विवरण |
${{package.srcdir}} | पैकेज स्रोत निर्देशिका (--source-dir) |
${{subpkg.name}} | उपपैकेज नाम |
${{context.name}} | मुख्य पैकेज या उपपैकेज नाम |
${{targets.outdir}} | वह निर्देशिका जहाँ targets संग्रहीत किए जाएँगे |
${{targets.contextdir}} | वह निर्देशिका जहाँ मुख्य पैकेजों और उपपैकेजों के लिए targets संग्रहीत किए जाएँगे |
${{targets.destdir}} | वह निर्देशिका जहाँ मुख्य के लिए targets संग्रहीत किए जाएँगे |
${{targets.subpkgdir}} | वह निर्देशिका जहाँ उपपैकेजों के लिए targets संग्रहीत किए जाएँगे |
${{build.arch}} | वर्तमान बिल्ड का आर्किटेक्चर (जैसे x86_64, aarch64) |
${{build.goarch}} | वर्तमान बिल्ड की GOARCH (जैसे amd64, arm64) |