
# Kali 클라우드 이미지 빌드 스크립트 (https://salsa.debian.org/cloud-team/debian-cloud-images의 포크)
FAI(Fully Automatic Installation)를 통한 Kali Linux 클라우드 이미지 빌더로, Debian Cloud Images에서 포크되었습니다.
이들은 Kali 팀이 kali.org/get-kali/에서 제공되는 공식 Kali Linux 클라우드 이미지를 생성하는 데 사용하는 것과 동일한 빌드 스크립트입니다.
자세한 내용은 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
참고: OS 버전의 연식에 따라 qemu-user-binfmt(최신/현재/최신 버전) 대신 qemu-user-static(레거시)을 사용해야 할 수도 있습니다.
참고: qemu-user-static/qemu-user-binfmt는 크로스 아키텍처로 빌드하는 경우(예: amd64 호스트에서 arm64 이미지 빌드)에만 필요합니다.
이제 ./build.sh를 사용할 수 있으며, 이는 머신에서 직접 Kali 클라우드 이미지를 빌드합니다.
Kali를 기본 OS로 사용하지 않는 경우, fai가 Kali의 패키지를 가져올 수 있도록 Kali의 kali-archive-keyring을 설치해야 합니다.
$ 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.sh 대신 ./build-in-container.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).
더 많은 정보 및/또는 예시는 다음을 참조하세요: