diff --git a/Server/install-service.sh b/Server/install-service.sh index a13bf7a..1f21189 100644 --- a/Server/install-service.sh +++ b/Server/install-service.sh @@ -84,6 +84,45 @@ fi [[ -d "${SERVER_DIR}" ]] || err "каталог сервера не найден: ${SERVER_DIR}" [[ -f "${SERVER_DIR}/start.sh" ]] || err "не найден ${SERVER_DIR}/start.sh" +# 3b. Предупреждение про /home — типичная причина status=200/CHDIR +# ProtectHome=read-only в unit-файле блокирует доступ к /home, +# плюс домашний каталог обычно имеет права 750 и пользователь +# сервиса не может в него войти. Рекомендуем /opt/. +if [[ "${SERVER_DIR}" == /home/* ]]; then + PARENT_USER="$(stat -c '%U' "$(dirname "${SERVER_DIR}")" 2>/dev/null || echo "$USER")" + SUGGESTED_DIR="/opt/$(basename "$(dirname "${SERVER_DIR}")")/$(basename "${SERVER_DIR}")" + cat >&2 </dev/null || true + sudo mkdir -p $(dirname "${SUGGESTED_DIR}") + sudo mv "$(dirname "${SERVER_DIR}")" "$(dirname "${SUGGESTED_DIR}")/" + cd "${SUGGESTED_DIR}" + sudo ./install-service.sh --admin-user ${PARENT_USER} + +После этого git pull/push продолжит работать из нового пути, +а сервис уже не будет упираться в ProtectHome. +==================================================================== + +EOF + read -r -p "Продолжить установку с текущим путём в /home? [y/N] " ans + case "${ans,,}" in + y|yes) echo "Продолжаю..." ;; + *) err "установка отменена. Перенесите каталог в /opt и запустите скрипт снова." ;; + esac +fi + chmod +x "${SERVER_DIR}/start.sh" "${SERVER_DIR}/run.sh" 2>/dev/null || true # 4. Создание пользователя при необходимости @@ -142,6 +181,16 @@ EOF fi # 7. Генерация systemd unit-файла +# Если каталог в /home, ProtectHome нужно ослабить, иначе systemd +# не сможет даже сделать chdir в WorkingDirectory. +if [[ "${SERVER_DIR}" == /home/* ]]; then + PROTECT_HOME_LINE="ProtectHome=false # ослаблено, т.к. сервер в /home" + # Дополнительно открываем доступ юзеру minecraft на проход через ~ + chmod o+x "$(dirname "${SERVER_DIR}")" 2>/dev/null || true +else + PROTECT_HOME_LINE="ProtectHome=read-only" +fi + echo ">> Создаю ${UNIT_FILE}..." cat > "${UNIT_FILE}" <