diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index d1d16a4..59e3afa 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -218,3 +218,37 @@ sudo OWGIT_REPO_DIR="$(pwd)" ENABLE_HAPROXY=false ./scripts/bootstrap-own-git.sh Либо склонируйте репозиторий в `/opt/owngit` и используйте `OWGIT_REPO_DIR=/opt/owngit`. Запускайте **`./scripts/bootstrap-own-git.sh`** из каталога клона (или с явным путём к скрипту), чтобы не исполнить случайный скрипт из `$PATH`. См. также блок про bootstrap в [`README.md`](../README.md). + +## 12) `containerd.io : Conflicts: containerd` при установке Docker / bootstrap + +На одной системе не должно одновременно стоять: + +- **`containerd`** — пакет Ubuntu, тянется вместе с **`docker.io`**; +- **`containerd.io`** — пакет из [репозитория Docker Inc.](https://docs.docker.com/engine/install/ubuntu/), нужен для **`docker-ce`** и типичной связке с **`docker-compose-plugin`** из того же источника. + +Если вы ставили **`docker.io`** из Ubuntu, а затем **`docker-compose-plugin`** с `download.docker.com`, apt может попытаться подтянуть **`containerd.io`** и упасть с конфликтом. + +### Решение A (рекомендуется): только стек Docker Inc. + +После того как репозиторий Docker уже добавлен (шаг B из §10): + +```bash +sudo apt-get remove -y docker.io docker-doc docker-compose docker-compose-v2 docker-doc podman-docker containerd runc 2>/dev/null || true +sudo apt-get autoremove -y +sudo apt-get update +sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +sudo systemctl enable --now docker +docker compose version +``` + +Повторите [`bootstrap-own-git.sh`](../scripts/bootstrap-own-git.sh): при уже рабочем `docker compose` он **не** будет снова вызывать `apt` для Docker. + +### Решение B: только пакеты Ubuntu + +Если хотите оставить **`docker.io`** без репозитория Docker — не ставьте **`docker-compose-plugin`** из Docker; используйте **`docker-compose`** как отдельную команду из пакета universe или бинарник Compose v2 вручную (§10, шаг C). + +### Проверка + +```bash +dpkg -l | grep -E 'docker.io|docker-ce|containerd|compose' +``` diff --git a/scripts/bootstrap-own-git.sh b/scripts/bootstrap-own-git.sh index 100a8da..8216aac 100644 --- a/scripts/bootstrap-own-git.sh +++ b/scripts/bootstrap-own-git.sh @@ -110,8 +110,7 @@ install_packages() { log "Устанавливаю зависимости..." run_cmd apt-get update local packages=( - ca-certificates curl jq git openssl - docker.io docker-compose-plugin openssh-client + ca-certificates curl jq git openssl openssh-client ) if [[ "$ENABLE_HAPROXY" == "true" ]]; then packages+=(haproxy) @@ -120,9 +119,31 @@ install_packages() { packages+=(sshpass) fi run_cmd apt-get install -y "${packages[@]}" + bootstrap_install_docker ok "Пакеты установлены" } +# Docker: не трогаем apt, если уже есть рабочий «docker compose» (избегаем лишних транзакций и конфликтов). +# Ошибка containerd vs containerd.io — см. docs/troubleshooting.md §12. +bootstrap_install_docker() { + if [[ "$DRY_RUN" == "true" ]]; then + echo "[DRY] apt-get install -y docker.io docker-compose-plugin" + return 0 + fi + if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then + ok "Docker и «docker compose» уже доступны — не устанавливаю docker.io/docker-compose-plugin" + return 0 + fi + log "Устанавливаю docker.io и docker-compose-plugin..." + if apt-get install -y docker.io docker-compose-plugin; then + return 0 + fi + err "Не удалось установить docker.io и docker-compose-plugin." + err "Частая причина: конфликт пакетов containerd (Ubuntu, от docker.io) и containerd.io (Docker Inc)." + warn "Оставьте один стек Docker: см. docs/troubleshooting.md — «12) containerd.io Conflicts: containerd»." + exit 1 +} + setup_dirs() { log "Создаю рабочие директории..." run_cmd mkdir -p "$GITEA_BASE_DIR/data/gitea/conf"