diff --git a/build/scripts/migration/script.d/02-migrate-user-service.sh b/build/scripts/migration/script.d/02-migrate-user-service.sh index 9e35a0e..cb82b6f 100644 --- a/build/scripts/migration/script.d/02-migrate-user-service.sh +++ b/build/scripts/migration/script.d/02-migrate-user-service.sh @@ -63,7 +63,6 @@ readonly BUILD_PATH readonly SOURCE_ROOT=${BUILD_PATH}/sysroot readonly APP_NAME="casaos-user-service" -readonly APP_NAME_FORMAL="CasaOS-UserService" readonly APP_NAME_SHORT="user-service" readonly APP_NAME_LEGACY="casaos" @@ -95,46 +94,6 @@ if [ "${NEED_MIGRATION}" = "false" ]; then exit 0 fi -MIGRATION_SERVICE_DIR=${1} - -if [ -z "${MIGRATION_SERVICE_DIR}" ]; then - MIGRATION_SERVICE_DIR=${BUILD_PATH}/scripts/migration/service.d/${APP_NAME_SHORT} -fi - -readonly MIGRATION_LIST_FILE=${MIGRATION_SERVICE_DIR}/migration.list - -MIGRATION_PATH=() -CURRENT_VERSION_FOUND="false" - -# a VERSION_PAIR looks like "v0.3.5 v0.3.6-alpha2" -# -# - "v0.3.5" is the current version installed on this host -# - "v0.3.6-alpha2" is the version of the migration tool from GitHub -while read -r VERSION_PAIR; do - if [ -z "${VERSION_PAIR}" ]; then - continue - fi - - # obtain "v0.3.5" from "v0.3.5 v0.3.6-alpha2" - VER1=$(echo "${VERSION_PAIR}" | cut -d' ' -f1) - - # obtain "v0.3.6-alpha2" from "v0.3.5 v0.3.6-alpha2" - VER2=$(echo "${VERSION_PAIR}" | cut -d' ' -f2) - - if [ "${CURRENT_VERSION}" = "${VER1// /}" ] || [ "${CURRENT_VERSION}" = "LEGACY_WITHOUT_VERSION" ]; then - CURRENT_VERSION_FOUND="true" - fi - - if [ "${CURRENT_VERSION_FOUND}" = "true" ]; then - MIGRATION_PATH+=("${VER2// /}") - fi -done < "${MIGRATION_LIST_FILE}" - -if [ ${#MIGRATION_PATH[@]} -eq 0 ]; then - __warning "No migration path found from ${CURRENT_VERSION} to ${SOURCE_VERSION}" - exit 0 -fi - ARCH="unknown" case $(uname -m) in @@ -152,20 +111,61 @@ case $(uname -m) in ;; esac +__info "ARCH: ${ARCH}" + +MIGRATION_SERVICE_DIR=${1} + +if [ -z "${MIGRATION_SERVICE_DIR}" ]; then + MIGRATION_SERVICE_DIR=${BUILD_PATH}/scripts/migration/service.d/${APP_NAME_SHORT} +fi + +readonly MIGRATION_LIST_FILE=${MIGRATION_SERVICE_DIR}/migration.list + +MIGRATION_PATH=() +CURRENT_VERSION_FOUND="false" + +# a VERSION_PAIR looks like "v0.3.5 " +# +# - "v0.3.5" is the current version installed on this host +# - "" is the url of the migration tool +while read -r VERSION_PAIR; do + if [ -z "${VERSION_PAIR}" ]; then + continue + fi + + # obtain "v0.3.5" from "v0.3.5 v0.3.6-alpha2" + VER1=$(echo "${VERSION_PAIR}" | cut -d' ' -f1) + + # obtain "" from "v0.3.5 " + URL=$(eval echo "${VERSION_PAIR}" | cut -d' ' -f2) + + if [ "${CURRENT_VERSION}" = "${VER1// /}" ] || [ "${CURRENT_VERSION}" = "LEGACY_WITHOUT_VERSION" ]; then + CURRENT_VERSION_FOUND="true" + fi + + if [ "${CURRENT_VERSION_FOUND}" = "true" ]; then + MIGRATION_PATH+=("${URL// /}") + fi +done < "${MIGRATION_LIST_FILE}" + +if [ ${#MIGRATION_PATH[@]} -eq 0 ]; then + __warning "No migration path found from ${CURRENT_VERSION} to ${SOURCE_VERSION}" + exit 0 +fi + pushd "${MIGRATION_SERVICE_DIR}" { - for VER2 in "${MIGRATION_PATH[@]}"; do - MIGRATION_TOOL_FILE=linux-"${ARCH}"-"${APP_NAME}"-migration-tool-"${VER2}".tar.gz + for URL in "${MIGRATION_PATH[@]}"; do + MIGRATION_TOOL_FILE=$(basename "${URL}") if [ -f "${MIGRATION_TOOL_FILE}" ]; then __info "Migration tool ${MIGRATION_TOOL_FILE} exists. Skip downloading." continue fi - MIGRATION_TOOL_URL=https://github.com/IceWhaleTech/"${APP_NAME_FORMAL}"/releases/download/"${VER2}"/linux-"${ARCH}"-"${APP_NAME}"-migration-tool-"${VER2}".tar.gz - __info "Dowloading ${MIGRATION_TOOL_URL}..." - curl -sL -O "${MIGRATION_TOOL_URL}" + __info "Dowloading ${URL}..." + curl -fsSL -o "${MIGRATION_TOOL_FILE}" -O "${URL}" done } || { popd @@ -173,8 +173,8 @@ pushd "${MIGRATION_SERVICE_DIR}" } { - for VER2 in "${MIGRATION_PATH[@]}"; do - MIGRATION_TOOL_FILE=linux-"${ARCH}"-"${APP_NAME}"-migration-tool-"${VER2}".tar.gz + for URL in "${MIGRATION_PATH[@]}"; do + MIGRATION_TOOL_FILE=$(basename "${URL}") __info "Extracting ${MIGRATION_TOOL_FILE}..." tar zxvf "${MIGRATION_TOOL_FILE}" || __error "Failed to extract ${MIGRATION_TOOL_FILE}" diff --git a/build/scripts/migration/service.d/user-service/migration.list b/build/scripts/migration/service.d/user-service/migration.list index 2035e42..2bcb2f3 100644 --- a/build/scripts/migration/service.d/user-service/migration.list +++ b/build/scripts/migration/service.d/user-service/migration.list @@ -1,3 +1,3 @@ -LEGACY_WITHOUT_VERSION v0.3.6 -v0.3.5 v0.3.6 -v0.3.5.1 v0.3.6 +LEGACY_WITHOUT_VERSION https://github.com/IceWhaleTech/CasaOS-UserService/releases/download/v0.3.6/linux-${ARCH}-casaos-user-service-migration-tool-v0.3.6.tar.gz +v0.3.5 https://github.com/IceWhaleTech/CasaOS-UserService/releases/download/v0.3.6/linux-${ARCH}-casaos-user-service-migration-tool-v0.3.6.tar.gz +v0.3.5.1 https://github.com/IceWhaleTech/CasaOS-UserService/releases/download/v0.3.6/linux-${ARCH}-casaos-user-service-migration-tool-v0.3.6.tar.gz diff --git a/build/scripts/setup/service.d/user-service/debian/setup-user-service.sh b/build/scripts/setup/service.d/user-service/debian/setup-user-service.sh index 93739aa..86e7b09 100644 --- a/build/scripts/setup/service.d/user-service/debian/setup-user-service.sh +++ b/build/scripts/setup/service.d/user-service/debian/setup-user-service.sh @@ -15,11 +15,8 @@ if [ ! -f "${CONF_FILE}" ]; then \ cp -v "${CONF_FILE_SAMPLE}" "${CONF_FILE}"; \ fi -# enable and start service systemctl daemon-reload +# enable service (without starting) echo "Enabling service..." systemctl enable --force --no-ask-password "${APP_NAME}.service" - -#echo "Starting service..." -#systemctl start --force --no-ask-password "${APP_NAME}.service" diff --git a/build/sysroot/usr/share/casaos/cleanup/script.d/02-cleanup-user-service.sh b/build/sysroot/usr/share/casaos/cleanup/script.d/02-cleanup-user-service.sh new file mode 100755 index 0000000..2a4f03c --- /dev/null +++ b/build/sysroot/usr/share/casaos/cleanup/script.d/02-cleanup-user-service.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +set -e + +readonly APP_NAME_SHORT=user-service + +__get_setup_script_directory_by_os_release() { + pushd "$(dirname "${BASH_SOURCE[0]}")/../service.d/${APP_NAME_SHORT}" &>/dev/null + + { + # shellcheck source=/dev/null + { + source /etc/os-release + { + pushd "${ID}"/"${VERSION_CODENAME}" &>/dev/null + } || { + pushd "${ID}" &>/dev/null + } || { + pushd "${ID_LIKE}" &>/dev/null + } || { + echo "Unsupported OS: ${ID} ${VERSION_CODENAME} (${ID_LIKE})" + exit 1 + } + + pwd + + popd &>/dev/null + + } || { + echo "Unsupported OS: unknown" + exit 1 + } + + } + + popd &>/dev/null +} + +SETUP_SCRIPT_DIRECTORY=$(__get_setup_script_directory_by_os_release) + +readonly SETUP_SCRIPT_DIRECTORY +readonly SETUP_SCRIPT_FILENAME="cleanup-${APP_NAME_SHORT}.sh" +readonly SETUP_SCRIPT_FILEPATH="${SETUP_SCRIPT_DIRECTORY}/${SETUP_SCRIPT_FILENAME}" + +echo "🟩 Running ${SETUP_SCRIPT_FILENAME}..." +$SHELL "${SETUP_SCRIPT_FILEPATH}" "${BUILD_PATH}" diff --git a/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/debian/bullseye/cleanup-user-service.sh b/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/debian/bullseye/cleanup-user-service.sh new file mode 120000 index 0000000..4062f1d --- /dev/null +++ b/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/debian/bullseye/cleanup-user-service.sh @@ -0,0 +1 @@ +../cleanup-user-service.sh \ No newline at end of file diff --git a/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/debian/cleanup-user-service.sh b/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/debian/cleanup-user-service.sh new file mode 100644 index 0000000..f39f4ad --- /dev/null +++ b/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/debian/cleanup-user-service.sh @@ -0,0 +1,109 @@ +#!/bin/bash + +set -e + +readonly CASA_EXEC=casaos-user-service +readonly CASA_SERVICE=casaos-user-service.service + +CASA_SERVICE_PATH=$(systemctl show ${CASA_SERVICE} --no-pager --property FragmentPath | cut -d'=' -sf2) +readonly CASA_SERVICE_PATH + +CASA_CONF=$( grep -i ExecStart= "${CASA_SERVICE_PATH}" | cut -d'=' -sf2 | cut -d' ' -sf3) +if [[ -z "${CASA_CONF}" ]]; then + CASA_CONF=/etc/casaos/user-service.conf +fi + +CASA_DB_PATH=$( (grep -i dbpath "${CASA_CONF}" || echo "/var/lib/casaos/db") | cut -d'=' -sf2 | xargs ) +readonly CASA_DB_PATH + +CASA_DB_FILE=${CASA_DB_PATH}/user-service.db + +readonly aCOLOUR=( + '\e[38;5;154m' # green | Lines, bullets and separators + '\e[1m' # Bold white | Main descriptions + '\e[90m' # Grey | Credits + '\e[91m' # Red | Update notifications Alert + '\e[33m' # Yellow | Emphasis +) + +Show() { + # OK + if (($1 == 0)); then + echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} OK $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" + # FAILED + elif (($1 == 1)); then + echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[3]}FAILED$COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" + # INFO + elif (($1 == 2)); then + echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} INFO $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" + # NOTICE + elif (($1 == 3)); then + echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[4]}NOTICE$COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" + fi +} + +Warn() { + echo -e "${aCOLOUR[3]}$1$COLOUR_RESET" +} + +trap 'onCtrlC' INT +onCtrlC() { + echo -e "${COLOUR_RESET}" + exit 1 +} + +if [[ ! -x "$(command -v ${CASA_EXEC})" ]]; then + Show 2 "${CASA_EXEC} is not detected, exit the script." + exit 1 +fi + +while true; do + echo -n -e " ${aCOLOUR[4]}Do you want delete user database? Y/n :${COLOUR_RESET}" + read -r input + case $input in + [yY][eE][sS] | [yY]) + REMOVE_USER_DATABASE=true + break + ;; + [nN][oO] | [nN]) + REMOVE_USER_DATABASE=false + break + ;; + *) + echo -e " ${aCOLOUR[3]}Invalid input, please try again.${COLOUR_RESET}" + ;; + esac +done + +while true; do + echo -n -e " ${aCOLOUR[4]}Do you want delete user directory? Y/n :${COLOUR_RESET}" + read -r input + case $input in + [yY][eE][sS] | [yY]) + REMOVE_USER_DIRECTORY=true + break + ;; + [nN][oO] | [nN]) + REMOVE_USER_DIRECTORY=false + break + ;; + *) + echo -e " ${aCOLOUR[3]}Invalid input, please try again.${COLOUR_RESET}" + ;; + esac +done + +Show 2 "Stopping ${CASA_SERVICE}..." +systemctl disable --now "${CASA_SERVICE}" || Show 3 "Failed to disable ${CASA_SERVICE}" + +rm -rvf "$(which ${CASA_EXEC})" || Show 3 "Failed to remove ${CASA_EXEC}" +rm -rvf "${CASA_CONF}" || Show 3 "Failed to remove ${CASA_CONF}" + +if [[ "${REMOVE_USER_DATABASE}" == true ]]; then + rm -rvf "${CASA_DB_FILE}" || Show 3 "Failed to remove ${CASA_DB_FILE}" +fi + +if [[ "${REMOVE_USER_DIRECTORY}" == true ]]; then + Show 2 "Removing user directories..." + rm -rvf /var/lib/casaos/[1-9]* +fi diff --git a/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/ubuntu/cleanup-user-service.sh b/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/ubuntu/cleanup-user-service.sh new file mode 120000 index 0000000..3aeecd6 --- /dev/null +++ b/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/ubuntu/cleanup-user-service.sh @@ -0,0 +1 @@ +../debian/cleanup-user-service.sh \ No newline at end of file diff --git a/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/ubuntu/jammy/cleanup-user-service.sh b/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/ubuntu/jammy/cleanup-user-service.sh new file mode 120000 index 0000000..f1d1773 --- /dev/null +++ b/build/sysroot/usr/share/casaos/cleanup/service.d/user-service/ubuntu/jammy/cleanup-user-service.sh @@ -0,0 +1 @@ +../../debian/bullseye/cleanup-user-service.sh \ No newline at end of file