
通过 FAI(全自动安装)构建 Kali Linux 云镜像,fork 自 Debian Cloud Images。
这些正是 Kali 团队 用来生成官方 Kali Linux 云镜像的同一套构建脚本,官方镜像可在 kali.org/get-kali/ 找到。
更多信息,请参阅:kali.org/docs/cloud/ 以及 kali.org/docs/troubleshooting/common-cloud-setup/。
今天就构建你的 Kali!
我们建议在与目标架构相匹配的 Linux 主机上进行构建。
有多种方式可以准备好使用 kali-cloud 构建脚本。你可以选择:
build.sh - 直接从你的机器上构建build-in-container.sh - 在容器内构建 (例如 Docker 或 Podman) 要让 build.sh 正常工作,它需要超级用户权限(例如 sudo 或 rootful 容器)。不过并不需要 KVM。
首先安装 git,并确保仓库已在本地克隆:
$ sudo apt-get install --no-install-recommends \
git ca-certificates
$ git clone https://gitlab.com/kalilinux/build-scripts/kali-cloud.git
$ cd ./kali-cloud/
要使用 build.sh 直接在主机上构建,请安装构建依赖:
$ sudo apt-get install --no-install-recommends \
python3-minimal libpython3-stdlib python3-yaml python3-libcloud python3-marshmallow python3-httpx python3-pytest \
fai-server fai-setup-storage \
sudo \
qemu-utils qemu-user-binfmt \
fdisk \
udev \
dosfstools \
apt-utils \
debsums
注意:根据操作系统版本的年代,你可能需要使用 qemu-user-static(旧版)而不是 qemu-user-binfmt(现代/当前/最新)。
注意:仅当你进行跨架构构建时(例如 amd64 主机构建 arm64 镜像),才需要 qemu-user-static/qemu-user-binfmt。
现在你可以使用 ./build.sh,它会直接在你的机器上构建 Kali 云镜像。
如果你不是以 Kali 作为基础操作系统,则需要安装 Kali 的 kali-archive-keyring,以便 fai 能够获取 Kali 的软件包。
$ sudo apt-get install --no-install-recommends \
wget ca-certificates
$ wget https://http.kali.org/pool/main/k/kali-archive-keyring/kali-archive-keyring_20YY.X_all.deb
$ sudo apt-get install ./kali-archive-keyring_*_all.deb
注意:将 20YY.X 替换为此处 kali-archive-keyring 中显示的值。
现在你可以按照从主机构建(Kali)来安装构建依赖。
我们将跳过任何容器软件的设置。
如果你更愿意在容器内构建,则需要在你的机器上安装并配置 docker 或 podman。
docker 要求将用户添加到 Docker 组,或使用 root 账户(例如 $ sudo ./build-in-container.sh)。podman 已在 rootful 模式下测试过(例如 $ sudo ./build-in-container.sh)。如果以 rootless 模式运行,build-in-container.sh 将尝试通过 sudo 提升自身权限,或回退到将 podman machine 重新配置为 rootful,参见已知限制。build-in-container.sh 是 build.sh 之上的一层封装。它会检测使用哪个符合 OCI 标准的容器引擎,负责在缺失时创建容器镜像,然后启动容器以在其中执行构建。
你有三种方式提供容器镜像:
$ # Option #1 - Automated build (recommended)
$ ./build-in-container.sh
$ ./build-in-container.sh --force # If you need to rebuild the image from scratch
$
$
$
$ # Option #2 - Manual build
$ docker build -t kali-build/kali-cloud .
$ # ...OR...
$ podman build -t kali-build/kali-cloud .
$
$
$
$ # Option #3 - Use the pre-generated
$ docker pull registry.gitlab.com/kalilinux/build-scripts/kali-cloud:latest
$ docker tag registry.gitlab.com/kalilinux/build-scripts/kali-cloud:latest kali-build/kali-cloud
$ # ...OR...
$ podman pull registry.gitlab.com/kalilinux/build-scripts/kali-cloud:latest
$ podman tag registry.gitlab.com/kalilinux/build-scripts/kali-cloud:latest kali-build/kali-cloud
$
$ # ...then point the build at it:
$ ./build-in-container.sh # Locally built (automated or manual)
$ IMAGE=registry.gitlab.com/kalilinux/build-scripts/kali-cloud:latest ./build-in-container.sh # Pre-generated
如果你同时安装了 docker 和 podman,build-in-container.sh 将默认使用 podman。要更改此行为,请在 ./build-in-container.sh 前加上 CONTAINER=docker:
$ CONTAINER=docker ./build-in-container.sh [...]
现在你可以使用 ./build-in-container.sh(而不是 ./build.sh)来构建镜像。
$ ./build.sh --help
Usage: build.sh [OPTIONS]
Build a Kali Linux Cloud image.
Build options:
-a, --arch ARCH Build an image for this architecture (default: amd64)
Supported: amd64 arm64
-b, --branch BRANCH Kali branch used to build the image (default: kali-rolling)
Supported: kali-rolling kali-dev kali-last-snapshot
-k, --keep Keep intermediary build artifacts
-m, --mirror URL Mirror used to build the image (default: http://http.kali.org/kali)
-o, --output DIR Output directory (default: /home/kali/kali-cloud/output)
-v, --variant VARIANT Cloud platform/target image to build (default: genericcloud)
Supported: genericcloud azure ec2 gce generic nocloud
-x, --version VERSION What to name the image release as (default: rolling)
-z, --zip Compress image after the build
-h, --help Show this help and exit
Cloud options:
-H, --hostname HOSTNAME Set system host name (default: kali)
-P, --packages PKGS Install extra packages (comma/space separated list)
-s, --size SIZE Size of the disk image in GB (default: ...depends on --variant)
-T, --toolset TOOLSET The selection of tools to include in the image (default: default)
Supported: default minimal
Apt caching proxy:
Auto-detected: localhost:3142 (apt-cacher-ng), localhost:8000 (squid-deb-proxy).
If detected and --mirror is not set, the mirror is routed via the proxy.
Supported environment variables:
http_proxy HTTP proxy URL, see README.md for details
DEBUG Print extra debug output
Any --flag value can be pre-set via its env var (e.g. ARCH, BUILD_MIRROR, OUT_DIR)
Examples:
build.sh
build.sh --branch kali-rolling --variant generic --arch amd64
build.sh -b kali-dev -T minimal -v generic -a amd64
注意:有三个标志与其变量名不同:--mirror 对应 BUILD_MIRROR,--hostname 对应 KALI_HOSTNAME(bash 已设置 HOSTNAME),--output 对应 OUT_DIR。其他每个标志都是其自身名称的大写形式(例如 --branch 对应 BRANCH)。
更多信息和/或示例,请参阅:
根据你的偏好,使用 build.sh 或 build-in-container.sh 均可。
为简洁起见,从这里开始我们将使用 build.sh。
默认选项将为 AMD64 架构构建一个 Kali rolling genericcloud 镜像,使用默认工具集: