mirror of
https://github.com/dokku/dokku.git
synced 2025-12-29 00:25:08 +01:00
Previously, we would try and traverse the entire dokku lib directory, causing extremely slow updates for installations with lots of data. This would also potentially cause issues for anyone using symlinks in their data directories. Instead, just remove symlinks in the plugin directories.
151 lines
4.7 KiB
Bash
Executable File
151 lines
4.7 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}/core-plugins" -type l -delete
|
|
find -L "${DOKKU_LIB_ROOT}/plugins" -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
|