aboutsummaryrefslogtreecommitdiff
path: root/scripts/rootfs.sh
diff options
context:
space:
mode:
authorMhd Sulhan <ms@kilabit.info>2016-01-29 12:17:54 +0700
committerMhd Sulhan <ms@kilabit.info>2016-01-29 12:17:54 +0700
commit7aa08d6583be57195d53f3b7337b6264ff0d600f (patch)
treeb99117e9a497f285bf4660f4ca568ef7bd3414ec /scripts/rootfs.sh
parent4da1e3686ba189e56f8a410172eaa3b460a033b4 (diff)
downloadarch-docker-7aa08d6583be57195d53f3b7337b6264ff0d600f.tar.xz
Simplify user rootfs scripts.
- Simplify bootstrap, handle copy and run internally in rootfs script. - create_rootfs only run one function, which is rootfs_main. - create_image only run one function, which is rootfs_to_docker. - bootstraping through one function - allow replacing hostname, locales, and timezone through vars.sh
Diffstat (limited to 'scripts/rootfs.sh')
-rwxr-xr-xscripts/rootfs.sh61
1 files changed, 53 insertions, 8 deletions
diff --git a/scripts/rootfs.sh b/scripts/rootfs.sh
index 608c00c..955aef9 100755
--- a/scripts/rootfs.sh
+++ b/scripts/rootfs.sh
@@ -3,7 +3,7 @@
## Get script directory.
export SCRIPTD=${0:a:h}
-export ROOTFS=arch-rootfs
+export ROOTFS="arch-rootfs"
export ROOTFS_SIZE=400M
## List of packages to be installed
@@ -20,7 +20,13 @@ typeset -A FILES
## docker image.
typeset -A IMAGE_FILES_BAK
-FILES=(${SCRIPTD}/bootstrap.sh ${ROOTFS}/)
+## Files that needed for bootstraping the rootfs.
+typeset -A _FILES
+_FILES=("${SCRIPTD}/_bootstrap_script.sh" "${ROOTFS}/")
+_FILES+=("${SCRIPTD}/_bootstrap_post.sh" "${ROOTFS}/")
+
+_BOOTSTRAP_SCRIPT="/_bootstrap_script.sh"
+_BOOTSTRAP_POST="/_bootstrap_post.sh"
rootfs_must_root() {
if [[ $EUID != 0 ]]; then
@@ -30,12 +36,14 @@ rootfs_must_root() {
}
rootfs_create() {
- echo "==> create rootfs ${ROOTFS}"
+ echo ""
+ echo "==> create rootfs '${ROOTFS}'"
mkdir -p $ROOTFS
}
rootfs_mount() {
- echo "==> mounting ${ROOTFS} as tmpfs"
+ echo ""
+ echo "==> mounting '${ROOTFS}' as tmpfs"
## safety first, make sure we do not mount rootfs recursively
umount -R "$ROOTFS"
mount -t tmpfs -o size=${ROOTFS_SIZE} tmpfs "$ROOTFS"
@@ -50,8 +58,15 @@ rootfs_install() {
}
rootfs_copy() {
+ echo ""
echo "==> copying files ..."
+ for k in "${(@k)_FILES}"; do
+ echo " from $k to $_FILES[$k]"
+ cp $k $_FILES[$k]
+ chown root:root $_FILES[$k]
+ done
+
for k in "${(@k)FILES}"; do
echo " from $k to $FILES[$k]"
if [ -h $k ]; then
@@ -71,19 +86,31 @@ rootfs_bootstrap() {
RUN_BOOTSTRAP="${ROOTFS}/run_bootstrap.sh"
VAR_BOOTSTRAP="${ROOTFS}/vars.sh"
- echo "==> bootstraping ... ${RUN_BOOTSTRAP}"
+ echo ""
+ echo "==> creating bootstrap script '${RUN_BOOTSTRAP}'"
## generate vars for bootstrap
echo '#!/bin/bash' > ${VAR_BOOTSTRAP}
- echo "PKGS_REMOVED=($PKGS_REMOVED)" >> ${VAR_BOOTSTRAP}
## generate bootstrap script.
echo '#!/bin/bash' > ${RUN_BOOTSTRAP}
echo '. ./vars.sh' >> ${RUN_BOOTSTRAP}
- for (( i = 1; i <= ${#BOOTSTRAP_S}; i++ )) do
- echo ". $BOOTSTRAP_S[$i]" >> ${RUN_BOOTSTRAP}
+ echo ". $_BOOTSTRAP_SCRIPT" >> ${RUN_BOOTSTRAP}
+
+ for (( i = 1; i <= ${#BOOTSTRAP_SCRIPTS}; i++ )) do
+ echo ". $BOOTSTRAP_SCRIPTS[$i]" >> ${RUN_BOOTSTRAP}
done
+
+ echo ". $_BOOTSTRAP_POST" >> ${RUN_BOOTSTRAP}
+
+ ## User variables at the end to replace default values.
+ if [ -f ${PWD}/vars.sh ]; then
+ echo ">>> User variables:"
+ cat ${PWD}/vars.sh >> ${VAR_BOOTSTRAP}
+ cat ${VAR_BOOTSTRAP}
+ fi
+
chmod +x ${RUN_BOOTSTRAP}
## run the bootstrap script.
@@ -92,6 +119,7 @@ rootfs_bootstrap() {
}
rootfs_uninstall() {
+ echo ""
echo "==> uninstalling packages ..."
if [[ ${#PKGS_REMOVED} > 0 ]]; then
pacman -r "$ROOTFS" -Rdd --noconfirm ${PKGS_REMOVED}
@@ -99,6 +127,7 @@ rootfs_uninstall() {
}
rootfs_clean_pacman() {
+ echo ""
echo "==> remove pacman db and local ..."
rm -rf "${ROOTFS}/var/lib/pacman/sync/*"
rm -rf "${ROOTFS}/var/lib/pacman/local/*"
@@ -113,6 +142,10 @@ rootfs_clean_pacman() {
## (6) run bootstrap script in new root fs.
##
rootfs_main() {
+ echo "=============================================="
+ echo " ARCH DOCKER: minimalis docker image creation"
+ echo "=============================================="
+ rootfs_must_root
rootfs_clean
rootfs_create
rootfs_mount
@@ -120,9 +153,14 @@ rootfs_main() {
rootfs_copy
rootfs_bootstrap
rootfs_uninstall
+ echo ""
+ echo "==> FINISHED"
+ echo "==> Total size of rootfs:"
+ du -sch $ROOTFS
}
rootfs_backup() {
+ echo ""
echo "==> creating backups ..."
for k in "${(@k)IMAGE_FILES_BAK}"; do
@@ -139,8 +177,12 @@ rootfs_backup() {
## Convert rootfs to docker image.
##
rootfs_to_docker() {
+ rootfs_clean_pacman
rootfs_backup
+ echo ""
+ echo "==> creating docker image '$1' with args '${@:2}' ..."
+
sudo tar --numeric-owner --xattrs --acls -C "$ROOTFS" -c . |
docker import ${@:2} - $1
}
@@ -149,6 +191,9 @@ rootfs_to_docker() {
## Unmount and remove rootfs.
##
rootfs_clean() {
+ echo ""
+ echo "==> unmounting and cleaning previous rootfs ..."
+
sudo umount -R $ROOTFS
rm -f ${ROOTFS}/*
rmdir ${ROOTFS}