HEX
Server: Apache/2.4.63 (Unix)
System: Linux Synopilou92 4.4.302+ #72806 SMP Mon Jul 21 23:16:00 CST 2025 x86_64
User: pilou92 (1026)
PHP: 8.0.30
Disabled: NONE
Upload Files
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