diff options
| author | Mhd Sulhan <ms@kilabit.info> | 2016-01-29 12:17:54 +0700 |
|---|---|---|
| committer | Mhd Sulhan <ms@kilabit.info> | 2016-01-29 12:17:54 +0700 |
| commit | 7aa08d6583be57195d53f3b7337b6264ff0d600f (patch) | |
| tree | b99117e9a497f285bf4660f4ca568ef7bd3414ec /scripts/rootfs.sh | |
| parent | 4da1e3686ba189e56f8a410172eaa3b460a033b4 (diff) | |
| download | arch-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-x | scripts/rootfs.sh | 61 |
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} |
