File: //var/packages/ContainerManager/scripts/postinst
#!/bin/bash
# Copyright (c) 2000-2020 Synology Inc. All rights reserved.
TARGET_PATH="/var/packages/ContainerManager/target"
NATIVE_DOCKER_DATA_LINK="/var/packages/ContainerManager/var/docker"
DockerEtcPath="/var/packages/ContainerManager/etc/"
DockerdConf="dockerd.json"
PkgVersionFile="pkg_version"
DockerUpdaterBin="$TARGET_PATH/tool/updater"
get_install_volume_type() {
local installed_volume="${SYNOPKG_PKGDEST_VOL}"
local volume_type="$(synofstool --get-fs-type "${installed_volume}")"
echo "${volume_type}"
}
deprecate_legacy_docker_postuninst() {
rm -rf "/var/packages/Docker/WIZARD_UIFILES"
local legacy_postuninst="/var/packages/Docker/scripts/postuninst"
if [[ ! -f "$legacy_postuninst" ]]; then
return
fi
local deprecated_lines=(
"#!/bin/bash"
"# Copyright (c) 2000-2023 Synology Inc. All rights reserved."
''
'# DEPRECATED'
'echo "ContainerManager" installed, original legacy "Docker" postuninst script will FORCE be replace'
'/usr/syno/bin/synosystemctl reload syslog-ng'
'exit 0'
''
)
local deprecated_text=""
for i in "${deprecated_lines[@]}"; do
deprecated_text+="$i\n"
done
printf "${deprecated_text}" > $legacy_postuninst
}
migrate_old_docker_confs_to_container_manager() {
local docker_pkg_root="/var/packages/Docker"
local container_manager_pkg_root="/var/packages/ContainerManager"
if [[ ! -d "$docker_pkg_root" ]]; then
return
fi
declare -A patterns
var_patterns=(
"docker"
"hook"
"log"
"migrater-info.log"
"upgradable_image.json"
)
etc_patterns=(
"dockerd.json"
"image_description.json"
"registry.json"
"*.config"
"cert"
"projects"
"LastRunningContainer"
)
patterns["var"]=var_patterns[@]
patterns["etc"]=etc_patterns[@]
for subdir in "${!patterns[@]}"; do
for name in "${!patterns[$subdir]}"; do
src_pattern="$docker_pkg_root/$subdir/$name"
target_dir="$container_manager_pkg_root/$subdir"
cp -rn $src_pattern "$target_dir" 2>/dev/null || true
done
done
}
migrate_old_log_file() {
migrate_logfile "/var/log/synolog/synodockerwebapi.log" "/var/packages/ContainerManager/var/log" "synodockerwebapi.log"
migrate_logfile "/var/log/Docker/docker.log" "/var/packages/ContainerManager/var/log" "docker.log"
migrate_logfile "/var/log/Docker/termd.log" "/var/packages/ContainerManager/var/log" "termd.log"
rm -rf /var/log/Docker
/usr/syno/bin/synosystemctl reload --no-block syslog-ng
}
migrate_logfile() {
local oldLogFile="$1"
local newLogDir="$2"
local newLogPath="$2/$3"
local tmpLog=$(mktemp)
if [ ! -f "$oldLogFile" ]; then
return
fi
mkdir "$newLogDir"
cp -f "$oldLogFile" "$tmpLog"
if [ -f "$newLogPath" ]; then
cat "$newLogPath" >> "$tmpLog"
fi
mv -f "$tmpLog" "$newLogPath"
rm -f "$oldLogFile"
}
update_docker_share_acl() {
local docker_share_real_path=$(synoshare --get-real-path docker)
if [ $? -ne 0 ]; then
return
fi
synoacltool -add "$docker_share_real_path" "everyone:everyone:allow:r-x---a-R-c--:fd--"
}
migrate_old_docker_confs_to_container_manager
if [[ -L "$NATIVE_DOCKER_DATA_LINK.bak" ]]; then
mv "$NATIVE_DOCKER_DATA_LINK.bak" "$NATIVE_DOCKER_DATA_LINK"
fi
if [[ ! -L "$NATIVE_DOCKER_DATA_LINK" ]]; then
NATIVE_DOCKER_PATH="${SYNOPKG_PKGDEST_VOL}/@docker"
ln -sf "$NATIVE_DOCKER_PATH" "$NATIVE_DOCKER_DATA_LINK"
fi
if [[ ! -d "$NATIVE_DOCKER_DATA_LINK" ]]; then
mkdir -p $(readlink -f "$NATIVE_DOCKER_DATA_LINK")
fi
if [[ ! -d "${DockerEtcPath}/cert" ]]; then
mkdir -p "${DockerEtcPath}/cert"
fi
# install default dockerd opt file
if [ ! -f "${DockerEtcPath}/${DockerdConf}" ]; then
cp "${TARGET_PATH}/config/${DockerdConf}" "${DockerEtcPath}/${DockerdConf}"
fi
# Migrate old log file to new one
migrate_old_log_file
# Add everyone readable to docker share ACL
update_docker_share_acl
$DockerUpdaterBin postinst updateregistryfile
$DockerUpdaterBin postinst updatedockerdconf "$(get_install_volume_type)"
$DockerUpdaterBin postinst removeimagefile
$DockerUpdaterBin postinst remove-redundant-sc
$DockerUpdaterBin postinst update-ipv4-port-binding
$DockerUpdaterBin postinst fix-config-permission
$DockerUpdaterBin postinst migrate-mirror-registry-to-v2
$DockerUpdaterBin postinst migrate-portals-to-v2
$DockerUpdaterBin postinst fallback-index-docker-io
$DockerUpdaterBin postinst remove-aliyun-registry
$DockerUpdaterBin postinst update-seccomp-profile-unconfined
$DockerUpdaterBin postinst update-package-project
$DockerUpdaterBin postinst update-exposed-ports
$DockerUpdaterBin postinst append-cn-mirrors
if [ "${dockerdBip:-}" ]; then
$DockerUpdaterBin postinst update-bip "$dockerdBip"
fi
# Leave package verison information
echo "$SYNOPKG_PKGVER" > "$DockerEtcPath/$PkgVersionFile"
if [[ -f "/var/packages/Docker/INFO" ]]; then
deprecate_legacy_docker_postuninst
fi
exit 0