Make Alpine Linux RootFS
This project provides a script for building customized Alpine Linux rootfs (a base image if you like) for containers. Itβs quite simple (250 LoC of shell), fast and requires minimum dependencies (just common Linux tools).
Tip
|
Do you want to just quickly chroot into Alpine Linux, e.g. on CI? Check out alpine-chroot-install! |
Requirements
-
Linux system
-
POSIX-sh compatible shell (e.g. Busybox ash, dash, ZSH, bash, β¦)
-
common userland with
chroot
,getopt
,grep
,sed
,sha256sum
,wget
(e.g. from Busybox, GNU coreutils, β¦) -
tar
(full-blown)
Usage
Read documentation in alpine-make-rootfs. See .github/workflows/ci.yml for GitHub Actions example.
You can copy alpine-make-rootfs into your repository or download it on demand, e.g.:
wget https://raw.githubusercontent.com/alpinelinux/alpine-make-rootfs/v0.6.1/alpine-make-rootfs \
&& echo '73948b9ee3580d6d9dc277ec2d9449d941e32818 alpine-make-rootfs' | sha1sum -c \
|| exit 1
Examples
Installation Script in Heredoc
sudo ./alpine-make-rootfs \ # (1)
--branch v3.8 \ # (2)
--packages 'ruby ruby-bigdecimal sqlite' \ # (3)
--timezone 'Europe/Prague' \ # (4)
--script-chroot \ # (5)
example-$(date +%Y%m%d).tar.gz - <<'SHELL' # (6)
# Copy some file from the repository root to the rootfs.
install -D -m 755 examples/hello_world.rb /app/hello_world.rb
# Install some dev packages and gem mailcatcher.
apk add --no-progress -t .make build-base ruby-dev sqlite-dev
gem install --no-document mailcatcher
# Clean-up dev packages. (7)
apk del --no-progress .make
SHELL
-
The script needs to create files owned by root or other users and optionally uses chroot (when
--script-chroot
is specified), so it must be run under root (e.g. usingsudo
). -
Alpine branch (release) to install (see Alpine Releases).
-
You can name packages to install into the chroot, in addition to base packages (see
ALPINE_BASE_PKGS
in alpine-make-rootfs). -
You may specify timezone to set (default is UTC).
-
This flag tells that the installation script will be executed inside chroot with the rootfs as new root. Your current working directory is binded at
/mnt
inside the chroot and$PWD
for the script is set to/mnt
, so you can easily access files out of the chroot and copy them into the rootfs. -
Installation script may be provided also via STDIN, using a convenient heredoc syntax. The script passed is executed using
/bin/sh -e
. -
Note that itβs not needed to clean
apk
cache, this is done automatically.
Create Docker Base Image
Create your own (customized) up-to-date base image.
sudo ./alpine-make-rootfs --branch v3.8 - | docker import -c 'CMD /bin/sh' - my/alpine:3.8
Create OCI Image
You can use simply shell script sloci-image to pack the generated rootfs as a single-layer OCI image.
sudo ./alpine-make-rootfs --branch v3.8 --script-chroot rootfs.tar.gz ./install.sh
./sloci-image --entrypoint /start.sh --port 80/tcp --tar rootfs.tar.gz alpine:3.8
License
This project is licensed under MIT License. For the full text of the license, see the LICENSE file.