Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
melange — 使用面向 Wolfi/Alpine 的声明式流水线,将源代码编译为可审计、已签名的 APK 软件包,并支持多架构 QEMU 仿真与可重现构建。 | Kitploit
工具/GitHubGitHub/chainguard-dev/melange
DevSecOps实用工具与框架供应链安全
GitHubchainguard-dev/melange

melange

使用面向 Wolfi/Alpine 的声明式流水线,将源代码编译为可审计、已签名的 APK 软件包,并支持多架构 QEMU 仿真与可重现构建。

查看仓库
6231743天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

melange

使用声明式流水线构建 apk 软件包。

通常用于为使用 apko 构建的容器镜像提供自定义软件包。大多数 apk 都是为 Wolfi 或 Alpine Linux 生态系统而构建的。

主要特性:

  • 面向流水线的构建。 与传统包管理器(具有不同的阶段)不同,构建流水线的每一步都由你定义和控制。
  • 默认多架构。 使用 QEMU 模拟各种架构,从而无需交叉编译步骤。

为什么

安全软件工厂是 DevOps 的演进,允许用户证明软件设备中所有工件的来源。通过将软件工件构建并捕获到软件包中,DevOps 团队可以像管理镜像的任何其他组件一样管理其软件工件。

在构建采用 apko 的 OCI 容器镜像形式的软件设备时,这尤其有用。

安装

你可以通过 Homebrew 安装 Melange:

root@kitploit:~
brew install melange

你也可以从源码安装 Melange:

root@kitploit:~
go install chainguard.dev/melange@latest

你还可以使用 Melange 容器镜像:

root@kitploit:~
docker run cgr.dev/chainguard/melange version

要使用这些示例,你通常需要将当前目录挂载到容器中并提供提升的权限,例如:

root@kitploit:~
docker run --privileged -v "$PWD":/work cgr.dev/chainguard/melange build examples/gnu-hello.yaml

在容器外运行需要 Docker,但应也能与 podman 等其他运行时配合使用。

快速开始

melange 构建文件如下所示:

root@kitploit:~
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

我们可以使用以下命令构建:

root@kitploit:~
melange build examples/gnu-hello.yaml

或者,使用 Docker:

root@kitploit:~
docker run --privileged --rm -v "${PWD}":/work \
  cgr.dev/chainguard/melange build examples/gnu-hello.yaml

这将创建一个 packages 文件夹,其中包含该软件包支持的每种架构的条目。如果你只想为当前架构构建,可以在构建命令中添加 --arch $(uname -m)。在架构目录中,你应该会找到流水线中构建的每个软件包的 apk 文件。

如果你想对 apk 进行签名,请使用 melange keygen 命令创建签名密钥:

root@kitploit:~
melange keygen
root@kitploit:~
 generating keypair with a 4096 bit prime, please wait...
 wrote private key to melange.rsa
 wrote public key to melange.rsa.pub

然后将 --signing-key 参数传递给 melange build。

调试 melange 构建

要在 melange 构建中包含调试级别的信息,请编辑你的 melange.yaml 文件并在流水线中加入 set -x。你可以在流水线命令的任何位置添加此标志,以进一步调试构建的特定部分。

root@kitploit:~
...
pipeline:
  - name: Build Minicli application
    runs: |
      set -x
      APP_HOME="${{targets.destdir}}/usr/share/hello-minicli"
...

默认替换变量

Melange 提供以下默认替换变量,可在构建文件流水线中引用:

带有替换变量的构建文件流水线示例:

root@kitploit:~
pipeline:
  - name: 'Create tmp dir'
    runs: mkdir ${{targets.destdir}}/var/lib/${{package.name}}/tmp

更详细的文档

与 apko 一起使用

要在 apko 中使用 melange 构建的 apk,可以将其上传到软件包存储库,或使用“本地”存储库。使用本地存储库可以让 melange 构建和 apko 构建在同一目录(或 GitHub 仓库)中运行,而无需使用外部存储。可以在 nginx-image-demo 仓库 中看到此方法的示例。

下载工具
替换变量描述
${{package.name}}软件包名称
${{package.version}}软件包版本
${{package.epoch}}软件包 epoch
${{package.full-version}}${{package.version}}-r${{package.epoch}}
${{package.description}}软件包描述
${{package.srcdir}}软件包源代码目录(--source-dir)
${{subpkg.name}}子软件包名称
${{context.name}}主软件包或子软件包名称
${{targets.outdir}}目标文件将存储到的目录
${{targets.contextdir}}主软件包和子软件包的目标文件将存储到的目录
${{targets.destdir}}主软件包的目标文件将存储到的目录
${{targets.subpkgdir}}子软件包的目标文件将存储到的目录
${{build.arch}}当前构建的架构(例如 x86_64、aarch64)
${{build.goarch}}当前构建的 GOARCH(例如 amd64、arm64)