mirror of
https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git
synced 2025-12-15 11:22:43 +03:00
ref: https://gitlab.alpinelinux.org/alpine/mkinitfs/-/merge_requests/133 ref: https://cloudinit.readthedocs.io/en/latest/howto/disable_cloud_init.html
143 lines
3.2 KiB
Bash
Executable File
143 lines
3.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# vim:set filetype=sh:
|
|
|
|
# Tiny Cloud
|
|
|
|
set -e
|
|
|
|
: "${LIBDIR:=$PREFIX/lib}"
|
|
. "$LIBDIR/tiny-cloud/common"
|
|
|
|
usage() {
|
|
cat <<-EOF
|
|
Usage: ${0##*/} [-h | --help] { boot | early | main | final | --bootstrap {complete|incomplete|status} | --enable | --disable }
|
|
EOF
|
|
}
|
|
|
|
bootstrap_complete() {
|
|
touch "$TINY_CLOUD_VAR/.bootstrap-complete"
|
|
}
|
|
bootstrap_incomplete() {
|
|
rm -f "$TINY_CLOUD_VAR/.bootstrap-complete"
|
|
}
|
|
is_bootstrap_complete() {
|
|
[ -f "$TINY_CLOUD_VAR/.bootstrap-complete" ]
|
|
}
|
|
|
|
args=$(getopt -o hEDb: --long help,enable,disable,bootstrap: -n ${0##*/} -- "$@") || { usage >&2; exit 1; }
|
|
if [ $# -eq 0 ]; then
|
|
usage >&2
|
|
exit 1
|
|
fi
|
|
eval set -- "$args"
|
|
while true; do
|
|
case "$1" in
|
|
-h|--help) usage; exit 0;;
|
|
-b|--bootstrap) shift
|
|
case "$1" in
|
|
complete) # indicate bootstrap is done
|
|
bootstrap_complete
|
|
log -i notice 'bootstrap marked complete';;
|
|
incomplete) # indicate bootstrap isn't done
|
|
bootstrap_incomplete
|
|
log -i warn 'bootstrap marked incomplete';;
|
|
status) is_bootstrap_complete && echo 'complete' || echo 'incomplete' ;;
|
|
*) usage >&2; exit 1;;
|
|
esac
|
|
exit 0;;
|
|
-[ED]|--enable|--disable) # just openrc for now
|
|
: "${ROOT:=}" # for mounted volumes
|
|
# always start with a clean slate
|
|
rm -f "$ROOT"/etc/runlevels/*/tiny-cloud*
|
|
log -i info "- tiny-cloud* services removed from all runlevels"
|
|
if [ "$1" = '-D' ] || [ "$1" = '--disable' ]; then
|
|
exit 0
|
|
fi
|
|
ln -s /etc/init.d/tiny-cloud-boot "$ROOT"/etc/runlevels/boot
|
|
log -i info "+ tiny-cloud-boot service added to boot runlevel"
|
|
for p in early main final; do
|
|
ln -s "/etc/init.d/tiny-cloud-$p" "$ROOT"/etc/runlevels/default
|
|
log -i info "+ tiny-cloud-$p service added to default runlevel"
|
|
done
|
|
exit 0;;
|
|
--) shift; break;;
|
|
*) usage >&2; exit 1;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
phase="$1"
|
|
shift
|
|
|
|
case "$phase" in
|
|
boot|early|main|final) ;;
|
|
*) usage >&2; exit 1;;
|
|
esac
|
|
|
|
if [ -e "$ROOT"/etc/tiny-cloud.disabled ]; then
|
|
log -i -t "$phase" info "tiny-cloud disabled"
|
|
exit 0
|
|
fi
|
|
|
|
# is initial bootstrap already done?
|
|
if is_bootstrap_complete; then
|
|
log -i -t "$phase" info "already bootstrapped"
|
|
exit 0;
|
|
fi
|
|
|
|
# load init functions
|
|
. "$LIBDIR/tiny-cloud/init"
|
|
|
|
### non-overrideable stuff
|
|
|
|
# should we skip this action?
|
|
skip_action() {
|
|
local action="$1"
|
|
for i in $SKIP_INIT_ACTIONS; do
|
|
[ "$i" = "$action" ] && return 0
|
|
done
|
|
return 1
|
|
}
|
|
|
|
# mandatory final action...
|
|
init__bootstrap_complete() {
|
|
bootstrap_complete
|
|
}
|
|
INIT_ACTIONS_FINAL="${INIT_ACTIONS_FINAL} bootstrap_complete"
|
|
|
|
### let's do stuff!
|
|
|
|
case "$phase" in
|
|
boot) INIT_ACTIONS="$INIT_ACTIONS_BOOT";;
|
|
early) INIT_ACTIONS="$INIT_ACTIONS_EARLY";;
|
|
main) INIT_ACTIONS="$INIT_ACTIONS_MAIN";;
|
|
final) INIT_ACTIONS="$INIT_ACTIONS_FINAL";;
|
|
*) usage >&2; exit 1;;
|
|
esac
|
|
|
|
printf '\n' >&2
|
|
for ACTION in $INIT_ACTIONS; do
|
|
if skip_action "$ACTION"; then
|
|
printf ' -- ' >&2
|
|
log -i -t "$phase" notice "$ACTION: skipped"
|
|
continue
|
|
fi
|
|
printf ' ++ ' >&2
|
|
log -i -t "$phase" info "$ACTION: starting"
|
|
RESULT="unknown"
|
|
LEVEL="err"
|
|
if type "init__$ACTION" | grep -q -w "function"; then
|
|
if "init__$ACTION" "$@"; then
|
|
RESULT="done"
|
|
LEVEL="info"
|
|
else
|
|
RESULT="failed"
|
|
fi
|
|
fi
|
|
printf ' ++ ' >&2
|
|
log -i -t "$phase" "$LEVEL" "$ACTION: $RESULT"
|
|
if [ "$RESULT" = "failed" ]; then
|
|
exit 1
|
|
fi
|
|
done
|