
Some checks failed
CI - 4NK_node / Code Quality (push) Failing after 38s
CI - 4NK_node / Unit Tests (push) Failing after 36s
CI - 4NK_node / Integration Tests (push) Successful in 33s
CI - 4NK_node / Security Tests (push) Failing after 33s
CI - 4NK_node / Docker Build & Test (push) Failing after 15s
CI - 4NK_node / Documentation Tests (push) Successful in 12s
CI - 4NK_node / Release Guard (push) Has been skipped
CI - 4NK_node / Performance Tests (push) Successful in 35s
CI - 4NK_node / Notify (push) Failing after 2s
145 lines
6.4 KiB
Bash
Executable File
145 lines
6.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Script d'amorçage 4NK_node
|
|
# - Installe git s'il est absent
|
|
# - Installe Docker Engine + docker compose plugin s'ils sont absents
|
|
# - Ajoute l'utilisateur courant au groupe docker dès le début
|
|
# - Installe Node.js et npm via nvm (dernière LTS par défaut)
|
|
# - Affiche les versions installées
|
|
|
|
echo "[bootstrap] Démarrage du script d'amorçage"
|
|
|
|
if [ "${EUID}" -ne 0 ]; then
|
|
SUDO="sudo"
|
|
else
|
|
SUDO=""
|
|
fi
|
|
|
|
OS_ID="$(. /etc/os-release && echo "${ID:-debian}")"
|
|
OS_CODENAME="$(. /etc/os-release && echo "${VERSION_CODENAME:-buster}")"
|
|
|
|
echo "[bootstrap] OS: ${OS_ID} (${OS_CODENAME})"
|
|
|
|
# 1) Ajouter l'utilisateur au groupe docker dès le début (si le groupe existe plus tard, on rejouera)
|
|
if getent group docker >/dev/null 2>&1; then
|
|
echo "[bootstrap] Ajout de l'utilisateur ${USER} au groupe docker (si non présent)"
|
|
${SUDO} usermod -aG docker "${USER}" || true
|
|
else
|
|
echo "[bootstrap] Groupe docker non présent pour l'instant; il sera créé à l'installation de Docker. Une seconde tentative aura lieu après l'installation."
|
|
fi
|
|
|
|
# 2) Mise à jour des index paquets (APT)
|
|
if command -v apt-get >/dev/null 2>&1; then
|
|
echo "[bootstrap] Mise à jour APT"
|
|
${SUDO} DEBIAN_FRONTEND=noninteractive apt-get -y update
|
|
${SUDO} DEBIAN_FRONTEND=noninteractive apt-get -y install ca-certificates curl gnupg lsb-release
|
|
elif command -v yum >/dev/null 2>&1; then
|
|
echo "[bootstrap] Vérification curl (yum)"
|
|
command -v curl >/dev/null 2>&1 || ${SUDO} yum install -y curl ca-certificates || true
|
|
elif command -v dnf >/dev/null 2>&1; then
|
|
echo "[bootstrap] Vérification curl (dnf)"
|
|
command -v curl >/dev/null 2>&1 || ${SUDO} dnf install -y curl ca-certificates || true
|
|
fi
|
|
|
|
# 3) Installer git si absent
|
|
if ! command -v git >/dev/null 2>&1; then
|
|
echo "[bootstrap] Installation de git"
|
|
if command -v apt-get >/dev/null 2>&1; then
|
|
${SUDO} DEBIAN_FRONTEND=noninteractive apt-get -y install git
|
|
elif command -v yum >/dev/null 2>&1; then
|
|
${SUDO} yum install -y git
|
|
elif command -v dnf >/dev/null 2>&1; then
|
|
${SUDO} dnf install -y git
|
|
else
|
|
echo "[bootstrap][ERREUR] Gestionnaire de paquets non pris en charge pour git." >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "[bootstrap] git déjà installé: $(git --version)"
|
|
fi
|
|
|
|
# 3b) Installer tree si absent
|
|
if ! command -v tree >/dev/null 2>&1; then
|
|
echo "[bootstrap] Installation de tree"
|
|
if command -v apt-get >/dev/null 2>&1; then
|
|
${SUDO} DEBIAN_FRONTEND=noninteractive apt-get -y install tree
|
|
elif command -v yum >/dev/null 2>&1; then
|
|
${SUDO} yum install -y tree
|
|
elif command -v dnf >/dev/null 2>&1; then
|
|
${SUDO} dnf install -y tree
|
|
else
|
|
echo "[bootstrap][ERREUR] Gestionnaire de paquets non pris en charge pour tree." >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "[bootstrap] tree déjà installé: $(tree --version | head -n1)"
|
|
fi
|
|
|
|
# 4) Installer Docker + plugin compose si absent
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo "[bootstrap] Installation de Docker Engine et du plugin compose"
|
|
if command -v apt-get >/dev/null 2>&1; then
|
|
# Dépôt officiel Docker (compatible anciens Debian/Ubuntu)
|
|
${SUDO} install -m 0755 -d /etc/apt/keyrings || true
|
|
curl -fsSL https://download.docker.com/linux/${OS_ID}/gpg | ${SUDO} gpg --dearmor -o /etc/apt/keyrings/docker.asc
|
|
${SUDO} chmod a+r /etc/apt/keyrings/docker.asc
|
|
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/${OS_ID} ${OS_CODENAME} stable" | ${SUDO} tee /etc/apt/sources.list.d/docker.list >/dev/null
|
|
${SUDO} DEBIAN_FRONTEND=noninteractive apt-get -y update
|
|
${SUDO} DEBIAN_FRONTEND=noninteractive apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin docker-ce-rootless-extras || {
|
|
echo "[bootstrap] Tentative d'installation minimale (sans extras)";
|
|
${SUDO} DEBIAN_FRONTEND=noninteractive apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin || true;
|
|
}
|
|
${SUDO} systemctl enable --now docker || true
|
|
elif command -v yum >/dev/null 2>&1; then
|
|
${SUDO} yum install -y yum-utils
|
|
${SUDO} yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
|
${SUDO} yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
|
${SUDO} systemctl enable --now docker || true
|
|
elif command -v dnf >/dev/null 2>&1; then
|
|
${SUDO} dnf -y install dnf-plugins-core
|
|
${SUDO} dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
|
|
${SUDO} dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
|
${SUDO} systemctl enable --now docker || true
|
|
else
|
|
echo "[bootstrap][ERREUR] Gestionnaire de paquets non pris en charge pour Docker." >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "[bootstrap] Docker déjà installé: $(docker --version)"
|
|
fi
|
|
|
|
# Re-tenter l'ajout au groupe docker maintenant que Docker est installé
|
|
if getent group docker >/dev/null 2>&1; then
|
|
echo "[bootstrap] Ajout de l'utilisateur ${USER} au groupe docker (post-install)"
|
|
${SUDO} usermod -aG docker "${USER}" || true
|
|
fi
|
|
|
|
# 5) Installer nvm + Node.js (dernière LTS) si node/npm absents
|
|
if ! command -v node >/dev/null 2>&1 || ! command -v npm >/dev/null 2>&1; then
|
|
echo "[bootstrap] Installation de nvm (Node Version Manager) et de Node.js (LTS)"
|
|
export NVM_DIR="$HOME/.nvm"
|
|
if [ ! -d "$NVM_DIR" ]; then
|
|
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
|
|
fi
|
|
# Charger nvm dans le shell courant
|
|
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
|
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"
|
|
# Installer la dernière LTS
|
|
nvm install --lts
|
|
nvm alias default 'lts/*'
|
|
else
|
|
echo "[bootstrap] Node/npm déjà installés: node $(node --version), npm $(npm --version)"
|
|
fi
|
|
|
|
echo "[bootstrap] Versions installées:"
|
|
command -v git >/dev/null 2>&1 && git --version || echo "git: non installé"
|
|
command -v docker >/dev/null 2>&1 && docker --version || echo "docker: non installé"
|
|
if docker compose version >/dev/null 2>&1; then docker compose version; else echo "docker compose: non installé"; fi
|
|
command -v node >/dev/null 2>&1 && node --version || echo "node: non installé"
|
|
command -v npm >/dev/null 2>&1 && npm --version || echo "npm: non installé"
|
|
command -v tree >/dev/null 2>&1 && tree --version | head -n1 || echo "tree: non installé"
|
|
|
|
echo "[bootstrap] Terminé. Si c'est la première installation Docker, déconnectez-vous/reconnectez-vous pour que l'appartenance au groupe docker prenne effet."
|
|
|