Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alpinelinux/alpine-make-rootfs
Make customized Alpine Linux rootfs (base image) for containers
https://github.com/alpinelinux/alpine-make-rootfs
alpine-linux containers image-builder rootfs shell-script
Last synced: 13 days ago
JSON representation
Make customized Alpine Linux rootfs (base image) for containers
- Host: GitHub
- URL: https://github.com/alpinelinux/alpine-make-rootfs
- Owner: alpinelinux
- License: mit
- Created: 2018-03-20T21:31:12.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-08-20T16:30:22.000Z (about 1 year ago)
- Last Synced: 2024-10-17T12:21:57.632Z (27 days ago)
- Topics: alpine-linux, containers, image-builder, rootfs, shell-script
- Language: Shell
- Homepage:
- Size: 56.6 KB
- Stars: 187
- Watchers: 5
- Forks: 42
- Open Issues: 6
-
Metadata Files:
- Readme: README.adoc
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
= Make Alpine Linux RootFS
:script-name: alpine-make-rootfs
:script-sha1: e09b623054d06ea389f3a901fd85e64aa154ab3a
:gh-name: alpinelinux/{script-name}
:version: 0.7.0ifdef::env-github[]
image:https://github.com/{gh-name}/workflows/CI/badge.svg["Build Status", link="https://github.com/{gh-name}/actions"]
endif::env-github[]This project provides a script for building customized https://alpinelinux.org/[Alpine Linux] rootfs (a base image if you like) for containers.
It’s quite simple (300 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 https://github.com/alpinelinux/alpine-chroot-install[alpine-chroot-install]!== Requirements
* Linux system
* http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html[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 link:{script-name}[{script-name}].
See link:.github/workflows/ci.yml[] for GitHub Actions example.You can copy link:{script-name}[{script-name}] into your repository or download it on demand, e.g.:
[source, sh, subs="+attributes"]
wget https://raw.githubusercontent.com/{gh-name}/v{version}/{script-name} \
&& echo '{script-sha1} {script-name}' | sha1sum -c \
|| exit 1== Examples
=== Installation Script in Heredoc
[source, sh]
----
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
----
<1> 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. using `sudo`).
<2> Alpine branch (release) to install (see https://wiki.alpinelinux.org/wiki/Alpine_Linux:Releases[Alpine Releases]).
<3> You can name packages to install into the chroot, in addition to base packages (see `ALPINE_BASE_PKGS` in link:{script-name}[{script-name}]).
<4> You may specify timezone to set (default is UTC).
<5> 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.
<6> Installation script may be provided also via STDIN, using a convenient heredoc syntax.
The script passed is executed using `/bin/sh -e`.
<7> 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.
[source, sh]
----
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 https://github.com/jirutka/sloci-image/[sloci-image] to pack the generated rootfs as a single-layer OCI image.
[source, sh]
----
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 http://opensource.org/licenses/MIT/[MIT License].
For the full text of the license, see the link:LICENSE[LICENSE] file.