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! |
-
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)
Read documentation in alpine-make-rootfs. See .travis.yml for Travis 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.5.0/alpine-make-rootfs \
&& echo '9afe2c181b4c32bfff1caadbc28554f460a1f906 alpine-make-rootfs' | sha1sum -c \
|| exit 1
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 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
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
This project is licensed under MIT License. For the full text of the license, see the LICENSE file.