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`.
|
Либо склонируйте репозиторий в `/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'
|
||||||
|
```
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user