install.sh : question Docker absent (auto/manuel) via /dev/tty + flags --install-docker/--no-install-docker
This commit is contained in:
1 parent
0744374e3c
commit
1664a8dbeb
2 files changed
+82
-5
No files matched your search
@@ -46,8 +46,34 @@ curl -fsSL .../install.sh | sudo bash -s -- --image git.hilel.fr/hamriou/streamb
|
|||||||
| `--from-ssh HOST` | `ssh HOST 'docker save …' \| docker load` |
|
| `--from-ssh HOST` | `ssh HOST 'docker save …' \| docker load` |
|
||||||
| `--image REPO:TAG` | `docker pull` puis tag local |
|
| `--image REPO:TAG` | `docker pull` puis tag local |
|
||||||
| `--wait N` | attente max du health check (défaut 90 s) |
|
| `--wait N` | attente max du health check (défaut 90 s) |
|
||||||
|
| `--install-docker` | installer Docker automatiquement si absent, sans poser la question |
|
||||||
|
| `--no-install-docker` | ne jamais installer Docker : quitte avec la commande à lancer |
|
||||||
| `--dry-run` | affiche les actions sans rien modifier |
|
| `--dry-run` | affiche les actions sans rien modifier |
|
||||||
|
|
||||||
|
## Docker absent
|
||||||
|
|
||||||
|
Par défaut l'installeur **pose la question** :
|
||||||
|
|
||||||
|
```
|
||||||
|
Docker n'est pas présent sur cette machine.
|
||||||
|
|
||||||
|
1) Installer Docker automatiquement (script officiel get.docker.com)
|
||||||
|
2) Quitter et installer Docker manuellement
|
||||||
|
|
||||||
|
Choix [1/2] :
|
||||||
|
```
|
||||||
|
|
||||||
|
Le choix 1 lance `curl -fsSL https://get.docker.com | sh` puis revérifie le
|
||||||
|
démon et le greffon `compose` ; le choix 2 quitte en affichant la commande.
|
||||||
|
|
||||||
|
Deux détails qui comptent :
|
||||||
|
|
||||||
|
- la question est lue sur **`/dev/tty`**, pas sur stdin — avec `curl … | bash`,
|
||||||
|
stdin contient le script et un `read` naïf consommerait ses octets ;
|
||||||
|
- **sans terminal interactif** (cron, CI, `ssh` sans `-t`), l'installeur ne reste
|
||||||
|
jamais bloqué : il sort avec la commande à lancer. Utilise alors
|
||||||
|
`--install-docker` ou `--no-install-docker` pour trancher à l'avance.
|
||||||
|
|
||||||
## Mise à jour
|
## Mise à jour
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
+56
-5
@@ -26,6 +26,7 @@ SRC_REF=""
|
|||||||
SRC_SSH=""
|
SRC_SSH=""
|
||||||
DRY=0
|
DRY=0
|
||||||
WAIT="${WAIT:-90}"
|
WAIT="${WAIT:-90}"
|
||||||
|
DOCKER_MODE="${DOCKER_MODE:-ask}" # ask | auto | manual
|
||||||
|
|
||||||
log() { printf '\033[1;34m==>\033[0m %s\n' "$*"; }
|
log() { printf '\033[1;34m==>\033[0m %s\n' "$*"; }
|
||||||
ok() { printf '\033[1;32m ok\033[0m %s\n' "$*"; }
|
ok() { printf '\033[1;32m ok\033[0m %s\n' "$*"; }
|
||||||
@@ -42,6 +43,8 @@ streambox — installeur
|
|||||||
--tar FICHIER charger l'image depuis une archive (docker load), chemin ou URL
|
--tar FICHIER charger l'image depuis une archive (docker load), chemin ou URL
|
||||||
--from-ssh HOST charger l'image depuis HOST (ssh HOST 'docker save ...' | docker load)
|
--from-ssh HOST charger l'image depuis HOST (ssh HOST 'docker save ...' | docker load)
|
||||||
--wait SECONDES attente max du health check (défaut: 90)
|
--wait SECONDES attente max du health check (défaut: 90)
|
||||||
|
--install-docker installer Docker automatiquement si absent (sans question)
|
||||||
|
--no-install-docker ne jamais installer Docker (quitte avec la commande à lancer)
|
||||||
--dry-run afficher les actions sans rien modifier
|
--dry-run afficher les actions sans rien modifier
|
||||||
-h, --help cette aide
|
-h, --help cette aide
|
||||||
|
|
||||||
@@ -58,6 +61,8 @@ while [ $# -gt 0 ]; do
|
|||||||
--tar) SRC_TAR="${2:?}"; shift 2 ;;
|
--tar) SRC_TAR="${2:?}"; shift 2 ;;
|
||||||
--from-ssh) SRC_SSH="${2:?}"; shift 2 ;;
|
--from-ssh) SRC_SSH="${2:?}"; shift 2 ;;
|
||||||
--wait) WAIT="${2:?}"; shift 2 ;;
|
--wait) WAIT="${2:?}"; shift 2 ;;
|
||||||
|
--install-docker) DOCKER_MODE=auto; shift ;;
|
||||||
|
--no-install-docker) DOCKER_MODE=manual; shift ;;
|
||||||
--dry-run) DRY=1; shift ;;
|
--dry-run) DRY=1; shift ;;
|
||||||
-h|--help) usage; exit 0 ;;
|
-h|--help) usage; exit 0 ;;
|
||||||
*) die "argument inconnu: $1 (voir --help)" ;;
|
*) die "argument inconnu: $1 (voir --help)" ;;
|
||||||
@@ -69,13 +74,59 @@ COMPOSE="$INSTALL_DIR/docker-compose.yml"
|
|||||||
|
|
||||||
# ----------------------------------------------------------------- 1. prérequis
|
# ----------------------------------------------------------------- 1. prérequis
|
||||||
log "Prérequis"
|
log "Prérequis"
|
||||||
command -v docker >/dev/null || die "docker absent"
|
|
||||||
command -v curl >/dev/null || die "curl absent"
|
COMMANDE_DOCKER="curl -fsSL https://get.docker.com | sudo sh"
|
||||||
if [ "$DRY" = 0 ]; then
|
|
||||||
docker info >/dev/null 2>&1 || die "docker injoignable (droits ? lance avec sudo)"
|
installer_docker() {
|
||||||
docker compose version >/dev/null 2>&1 || die "docker compose v2 absent"
|
log "Installation automatique de Docker (script officiel get.docker.com)"
|
||||||
|
curl -fsSL https://get.docker.com | sh || die "l'installation de Docker a échoué"
|
||||||
|
hash -r
|
||||||
|
command -v docker >/dev/null 2>&1 || die "docker reste absent après l'installation"
|
||||||
|
docker info >/dev/null 2>&1 || die "Docker installé mais le démon ne répond pas (systemctl start docker)"
|
||||||
|
docker compose version >/dev/null 2>&1 || die "docker compose v2 absent après l'installation"
|
||||||
|
ok "$(docker --version | cut -d, -f1)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Demande quoi faire quand Docker (ou son greffon compose) manque.
|
||||||
|
# Lit sur /dev/tty : avec `curl | bash`, stdin contient le script, pas le clavier.
|
||||||
|
resoudre_docker() {
|
||||||
|
local raison="$1"
|
||||||
|
warn "$raison"
|
||||||
|
case "$DOCKER_MODE" in
|
||||||
|
auto) installer_docker; return 0 ;;
|
||||||
|
manual) die "installation manuelle demandée. Lance : $COMMANDE_DOCKER" ;;
|
||||||
|
esac
|
||||||
|
if ! ( : > /dev/tty ) 2>/dev/null; then
|
||||||
|
die "pas de terminal interactif. Relance avec --install-docker, ou lance : $COMMANDE_DOCKER"
|
||||||
fi
|
fi
|
||||||
|
{
|
||||||
|
printf '\n %s\n\n' "$raison"
|
||||||
|
printf ' 1) Installer Docker automatiquement (script officiel get.docker.com)\n'
|
||||||
|
printf ' 2) Quitter et installer Docker manuellement\n\n'
|
||||||
|
printf ' Choix [1/2] : '
|
||||||
|
} > /dev/tty
|
||||||
|
local rep=""
|
||||||
|
read -r rep < /dev/tty || rep="2"
|
||||||
|
case "$rep" in
|
||||||
|
1) installer_docker ;;
|
||||||
|
*) printf '\n Installation manuelle :\n %s\n\n' "$COMMANDE_DOCKER" > /dev/tty
|
||||||
|
die "arrêt à la demande de l'utilisateur" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
command -v curl >/dev/null 2>&1 || die "curl absent (apt-get install -y curl)"
|
||||||
|
|
||||||
|
if [ "$DRY" = 0 ]; then
|
||||||
|
if ! command -v docker >/dev/null 2>&1; then
|
||||||
|
resoudre_docker "Docker n'est pas présent sur cette machine."
|
||||||
|
elif ! docker compose version >/dev/null 2>&1; then
|
||||||
|
resoudre_docker "Le greffon 'docker compose' (v2) est absent."
|
||||||
|
fi
|
||||||
|
docker info >/dev/null 2>&1 || die "docker injoignable (droits ? lance avec sudo)"
|
||||||
ok "docker + compose v2"
|
ok "docker + compose v2"
|
||||||
|
else
|
||||||
|
ok "prérequis non vérifiés (dry-run)"
|
||||||
|
fi
|
||||||
|
|
||||||
# --------------------------------------------------------- 2. répertoire + compose
|
# --------------------------------------------------------- 2. répertoire + compose
|
||||||
log "Répertoire $INSTALL_DIR"
|
log "Répertoire $INSTALL_DIR"
|
||||||
|
|||||||
Reference in new issue
Block a user