fix(bootstrap): skip Docker apt if compose ready; doc containerd conflict
Made-with: Cursor
This commit is contained in:
@@ -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'
|
||||
```
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user