fix(bootstrap): skip Docker apt if compose ready; doc containerd conflict

Made-with: Cursor
This commit is contained in:
PTah
2026-04-22 12:15:45 +10:00
parent a58be4b409
commit 98282bde1d
2 changed files with 57 additions and 2 deletions
+34
View File
@@ -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`. Либо склонируйте репозиторий в `/opt/owngit` и используйте `OWGIT_REPO_DIR=/opt/owngit`. Запускайте **`./scripts/bootstrap-own-git.sh`** из каталога клона (или с явным путём к скрипту), чтобы не исполнить случайный скрипт из `$PATH`.
См. также блок про bootstrap в [`README.md`](../README.md). См. также блок про 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'
```
+23 -2
View File
@@ -110,8 +110,7 @@ install_packages() {
log "Устанавливаю зависимости..." log "Устанавливаю зависимости..."
run_cmd apt-get update run_cmd apt-get update
local packages=( local packages=(
ca-certificates curl jq git openssl ca-certificates curl jq git openssl openssh-client
docker.io docker-compose-plugin openssh-client
) )
if [[ "$ENABLE_HAPROXY" == "true" ]]; then if [[ "$ENABLE_HAPROXY" == "true" ]]; then
packages+=(haproxy) packages+=(haproxy)
@@ -120,9 +119,31 @@ install_packages() {
packages+=(sshpass) packages+=(sshpass)
fi fi
run_cmd apt-get install -y "${packages[@]}" run_cmd apt-get install -y "${packages[@]}"
bootstrap_install_docker
ok "Пакеты установлены" 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() { setup_dirs() {
log "Создаю рабочие директории..." log "Создаю рабочие директории..."
run_cmd mkdir -p "$GITEA_BASE_DIR/data/gitea/conf" run_cmd mkdir -p "$GITEA_BASE_DIR/data/gitea/conf"