mirror of
https://github.com/dokku/dokku.git
synced 2025-12-28 16:06:40 +01:00
This makes standard use of shellcheck work without needing to provide extra configuration anywhere. Also remove use of inline 'shellcheck disable' calls that are already defined in the .shellcheckrc and don't need to be set inline.
150 lines
4.6 KiB
Bash
Executable File
150 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
set -eo pipefail
|
|
[[ $TRACE ]] && set -x
|
|
|
|
if [[ -e /usr/share/debconf/confmodule ]]; then
|
|
. /usr/share/debconf/confmodule
|
|
fi
|
|
|
|
if [[ -r /etc/default/dokku ]]; then
|
|
source /etc/default/dokku
|
|
fi
|
|
|
|
readonly DOKKU_ROOT="${DOKKU_ROOT:-/home/dokku}"
|
|
readonly DOKKU_LIB_ROOT="${DOKKU_LIB_PATH:-/var/lib/dokku}"
|
|
|
|
call-sshcommand() {
|
|
if [[ -x /usr/local/bin/sshcommand ]]; then
|
|
/usr/local/bin/sshcommand "$@"
|
|
elif [[ -x /usr/bin/sshcommand ]]; then
|
|
/usr/bin/sshcommand "$@"
|
|
else
|
|
echo "Unable to find sshcommand binary" 1>&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
setup-user() {
|
|
echo "Setting up dokku user"
|
|
call-sshcommand create dokku /usr/bin/dokku
|
|
grep -i -E "^docker" /etc/group || groupadd docker
|
|
usermod -aG docker dokku
|
|
mkdir -p "$DOKKU_ROOT/.ssh" "$DOKKU_ROOT/.dokkurc"
|
|
touch "$DOKKU_ROOT/.ssh/authorized_keys"
|
|
chown -R dokku:dokku "$DOKKU_ROOT/.ssh" "${DOKKU_ROOT}/.dokkurc"
|
|
}
|
|
|
|
setup-storage() {
|
|
echo "Setting up storage directories"
|
|
mkdir -p "${DOKKU_LIB_ROOT}/data" "${DOKKU_LIB_ROOT}/data/storage"
|
|
chown dokku:dokku "${DOKKU_LIB_ROOT}/data"
|
|
}
|
|
|
|
setup-plugins() {
|
|
echo "Deleting invalid plugins"
|
|
if [ -f "${DOKKU_LIB_ROOT}/core-plugins/available/" ]; then
|
|
find "${DOKKU_LIB_ROOT}/core-plugins/available/" -type d -empty -delete
|
|
fi
|
|
if [ -f "${DOKKU_LIB_ROOT}/core-plugins/enabled/" ]; then
|
|
find "${DOKKU_LIB_ROOT}/core-plugins/enabled/" -type d -empty -delete
|
|
fi
|
|
if [ -f "${DOKKU_LIB_ROOT}/plugins/available/" ]; then
|
|
find "${DOKKU_LIB_ROOT}/plugins/available/" -type d -empty -delete
|
|
fi
|
|
if [ -f "${DOKKU_LIB_ROOT}/plugins/enabled/" ]; then
|
|
find "${DOKKU_LIB_ROOT}/plugins/enabled/" -type d -empty -delete
|
|
fi
|
|
|
|
echo "Setting up plugin directories"
|
|
# should be replaced by `plugn init`
|
|
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/available" "${DOKKU_LIB_ROOT}/plugins/available"
|
|
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/enabled" "${DOKKU_LIB_ROOT}/plugins/enabled"
|
|
touch "${DOKKU_LIB_ROOT}/core-plugins/config.toml" "${DOKKU_LIB_ROOT}/plugins/config.toml"
|
|
|
|
echo "Migrating old plugins"
|
|
find ${DOKKU_LIB_ROOT}/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
|
if [ "$plugin" = "available" ] || [ "$plugin" = "enabled" ]; then
|
|
continue
|
|
elif [ -f ${DOKKU_LIB_ROOT}/plugins/$plugin/.core ]; then
|
|
rm -rf ${DOKKU_LIB_ROOT}/plugins/$plugin
|
|
elif [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
|
|
mv ${DOKKU_LIB_ROOT}/plugins/$plugin ${DOKKU_LIB_ROOT}/plugins/available
|
|
fi
|
|
done
|
|
|
|
db_get "dokku/nginx_enable"
|
|
echo "Enabling all core plugins"
|
|
find "${DOKKU_LIB_ROOT}/core-plugins/available" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
|
if [ "$plugin" = "nginx-vhosts" ] && [ "$RET" = "false" ]; then
|
|
echo "Skipping enable of nginx-vhosts plugin"
|
|
continue
|
|
elif [ ! -d "${DOKKU_LIB_ROOT}/plugins/available/$plugin" ]; then
|
|
ln -s "${DOKKU_LIB_ROOT}/core-plugins/available/$plugin" "${DOKKU_LIB_ROOT}/plugins/available/$plugin"
|
|
PLUGIN_PATH="${DOKKU_LIB_ROOT}/core-plugins" plugn enable "$plugin"
|
|
PLUGIN_PATH="${DOKKU_LIB_ROOT}/plugins" plugn enable "$plugin"
|
|
fi
|
|
done
|
|
find -L "${DOKKU_LIB_ROOT}" -type l -delete
|
|
chown dokku:dokku -R "${DOKKU_LIB_ROOT}/plugins" "${DOKKU_LIB_ROOT}/core-plugins"
|
|
|
|
echo "Install all core plugins"
|
|
dokku plugin:install --core
|
|
}
|
|
|
|
setup-sshcommand() {
|
|
echo "Ensure proper sshcommand path"
|
|
echo '/usr/bin/dokku' >"${DOKKU_ROOT}/.sshcommand"
|
|
if [[ -f .ssh/authorized_keys ]]; then
|
|
sed -i.bak 's#/usr/local/bin/dokku#/usr/bin/dokku#' "${DOKKU_ROOT}/.ssh/authorized_keys"
|
|
rm "${DOKKU_ROOT}/.ssh/authorized_keys"
|
|
fi
|
|
}
|
|
|
|
dpkg-handling() {
|
|
if [ -f "${DOKKU_ROOT}/VHOST" ]; then
|
|
echo "VHOST file detected, skipping modification"
|
|
else
|
|
db_get "dokku/vhost_enable"
|
|
if [ "$RET" = "true" ]; then
|
|
db_get "dokku/hostname"
|
|
echo "Setting VHOST contents to $RET"
|
|
echo "$RET" >"${DOKKU_ROOT}/VHOST"
|
|
chown dokku:dokku "${DOKKU_ROOT}/VHOST"
|
|
fi
|
|
fi
|
|
|
|
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
|
|
db_get "dokku/key_file"
|
|
if [ -f "$RET" ]; then
|
|
call-sshcommand acl-add dokku default <"$RET" || true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
abort-upgrade | abort-remove | abort-deconfigure) ;;
|
|
|
|
configure)
|
|
mandb
|
|
[ ! -x /usr/bin/docker.io ] || ln -sf /usr/bin/docker.io /usr/local/bin/docker
|
|
if [[ -f /sbin/modprobe ]]; then
|
|
modprobe aufs || echo "WARNING: Restart server to finish installing dokku!"
|
|
fi
|
|
|
|
setup-user
|
|
setup-storage
|
|
|
|
dpkg-handling
|
|
setup-plugins
|
|
setup-sshcommand
|
|
;;
|
|
|
|
*)
|
|
echo "postinst called with unknown argument \`$1'" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
db_stop
|
|
exit 0
|