Ajoute des scripts bootstrap pour Proxmox
This commit is contained in:
14
README.md
14
README.md
@@ -48,6 +48,14 @@ Le déploiement dans le LXC n'utilise pas Docker. Le script installe `nginx`, `g
|
|||||||
--proxmox-password 'secret'
|
--proxmox-password 'secret'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Version "curl | bash" :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch/main/install-chesscubing-proxmox.sh)"
|
||||||
|
```
|
||||||
|
|
||||||
|
Cette version pose les questions nécessaires si les variables d'environnement ne sont pas déjà définies.
|
||||||
|
|
||||||
Valeurs par défaut utiles :
|
Valeurs par défaut utiles :
|
||||||
|
|
||||||
- LXC nommé `chesscubing-web`
|
- LXC nommé `chesscubing-web`
|
||||||
@@ -79,6 +87,12 @@ Options utiles si besoin :
|
|||||||
--ctid 120
|
--ctid 120
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Version "curl | bash" :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch/main/update-chesscubing-proxmox.sh)"
|
||||||
|
```
|
||||||
|
|
||||||
On peut aussi cibler le conteneur par nom si on n'a pas le `CTID` :
|
On peut aussi cibler le conteneur par nom si on n'a pas le `CTID` :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
202
install-chesscubing-proxmox.sh
Executable file
202
install-chesscubing-proxmox.sh
Executable file
@@ -0,0 +1,202 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO_URL="https://git.jeannerot.fr/christophe/chesscubing.git"
|
||||||
|
REPO_BRANCH="${CHESSCUBING_GIT_BRANCH:-main}"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
Bootstrap d'installation ChessCubing pour Proxmox.
|
||||||
|
|
||||||
|
Usage local :
|
||||||
|
./install-chesscubing-proxmox.sh
|
||||||
|
|
||||||
|
Usage en une ligne :
|
||||||
|
bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch/main/install-chesscubing-proxmox.sh)"
|
||||||
|
|
||||||
|
Variables d'environnement reconnues :
|
||||||
|
CHESSCUBING_PROXMOX_HOST
|
||||||
|
CHESSCUBING_PROXMOX_USER
|
||||||
|
CHESSCUBING_PROXMOX_PASSWORD
|
||||||
|
CHESSCUBING_SSH_PORT
|
||||||
|
CHESSCUBING_CTID
|
||||||
|
CHESSCUBING_LXC_HOSTNAME
|
||||||
|
CHESSCUBING_LXC_IP
|
||||||
|
CHESSCUBING_LXC_GATEWAY
|
||||||
|
CHESSCUBING_LXC_BRIDGE
|
||||||
|
CHESSCUBING_LXC_CORES
|
||||||
|
CHESSCUBING_LXC_MEMORY
|
||||||
|
CHESSCUBING_LXC_SWAP
|
||||||
|
CHESSCUBING_LXC_DISK_GB
|
||||||
|
CHESSCUBING_TEMPLATE_STORAGE
|
||||||
|
CHESSCUBING_ROOTFS_STORAGE
|
||||||
|
CHESSCUBING_LXC_PASSWORD
|
||||||
|
CHESSCUBING_GIT_BRANCH
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
printf 'Erreur: %s\n' "$*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
have_cmd() {
|
||||||
|
command -v "$1" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
install_pkg_if_missing() {
|
||||||
|
local missing=()
|
||||||
|
local pkg=""
|
||||||
|
|
||||||
|
for pkg in "$@"; do
|
||||||
|
if ! have_cmd "$pkg"; then
|
||||||
|
missing+=("$pkg")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ${#missing[@]} -eq 0 ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! have_cmd apt-get; then
|
||||||
|
die "Commandes manquantes: ${missing[*]}. Installe-les manuellement."
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf 'Installation des dépendances manquantes: %s\n' "${missing[*]}"
|
||||||
|
if have_cmd sudo && [[ "${EUID}" -ne 0 ]]; then
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y git sshpass openssh-client ca-certificates
|
||||||
|
elif [[ "${EUID}" -eq 0 ]]; then
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y git sshpass openssh-client ca-certificates
|
||||||
|
else
|
||||||
|
die "git/sshpass manquent et sudo n'est pas disponible."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_default() {
|
||||||
|
local var_name="$1"
|
||||||
|
local prompt_label="$2"
|
||||||
|
local default_value="${3:-}"
|
||||||
|
local current_value="${!var_name:-}"
|
||||||
|
local input=""
|
||||||
|
|
||||||
|
if [[ -n "$current_value" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$default_value" ]]; then
|
||||||
|
read -r -p "$prompt_label [$default_value]: " input
|
||||||
|
printf -v "$var_name" '%s' "${input:-$default_value}"
|
||||||
|
else
|
||||||
|
read -r -p "$prompt_label: " input
|
||||||
|
printf -v "$var_name" '%s' "$input"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_secret() {
|
||||||
|
local var_name="$1"
|
||||||
|
local prompt_label="$2"
|
||||||
|
local current_value="${!var_name:-}"
|
||||||
|
|
||||||
|
if [[ -n "$current_value" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -rsp "$prompt_label: " current_value
|
||||||
|
echo
|
||||||
|
printf -v "$var_name" '%s' "$current_value"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
install_pkg_if_missing git ssh sshpass
|
||||||
|
|
||||||
|
PROXMOX_HOST="${CHESSCUBING_PROXMOX_HOST:-}"
|
||||||
|
PROXMOX_USER="${CHESSCUBING_PROXMOX_USER:-}"
|
||||||
|
PROXMOX_PASSWORD="${CHESSCUBING_PROXMOX_PASSWORD:-}"
|
||||||
|
SSH_PORT="${CHESSCUBING_SSH_PORT:-22}"
|
||||||
|
CTID="${CHESSCUBING_CTID:-}"
|
||||||
|
LXC_HOSTNAME="${CHESSCUBING_LXC_HOSTNAME:-chesscubing-web}"
|
||||||
|
LXC_IP="${CHESSCUBING_LXC_IP:-dhcp}"
|
||||||
|
LXC_GATEWAY="${CHESSCUBING_LXC_GATEWAY:-}"
|
||||||
|
LXC_BRIDGE="${CHESSCUBING_LXC_BRIDGE:-vmbr0}"
|
||||||
|
LXC_CORES="${CHESSCUBING_LXC_CORES:-2}"
|
||||||
|
LXC_MEMORY="${CHESSCUBING_LXC_MEMORY:-1024}"
|
||||||
|
LXC_SWAP="${CHESSCUBING_LXC_SWAP:-512}"
|
||||||
|
LXC_DISK_GB="${CHESSCUBING_LXC_DISK_GB:-6}"
|
||||||
|
TEMPLATE_STORAGE="${CHESSCUBING_TEMPLATE_STORAGE:-}"
|
||||||
|
ROOTFS_STORAGE="${CHESSCUBING_ROOTFS_STORAGE:-}"
|
||||||
|
LXC_PASSWORD="${CHESSCUBING_LXC_PASSWORD:-}"
|
||||||
|
|
||||||
|
default_host=""
|
||||||
|
if have_cmd pct && have_cmd pveam; then
|
||||||
|
default_host="127.0.0.1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prompt_default PROXMOX_HOST "IP ou nom du serveur Proxmox" "$default_host"
|
||||||
|
prompt_default PROXMOX_USER "Utilisateur SSH Proxmox" "root@pam"
|
||||||
|
prompt_secret PROXMOX_PASSWORD "Mot de passe SSH Proxmox"
|
||||||
|
prompt_default SSH_PORT "Port SSH Proxmox" "22"
|
||||||
|
prompt_default CTID "CTID Proxmox (laisser vide pour auto)" ""
|
||||||
|
prompt_default LXC_HOSTNAME "Nom du LXC" "chesscubing-web"
|
||||||
|
prompt_default LXC_IP "IP du LXC ou dhcp" "dhcp"
|
||||||
|
if [[ "$LXC_IP" != "dhcp" ]]; then
|
||||||
|
prompt_default LXC_GATEWAY "Passerelle du LXC" ""
|
||||||
|
fi
|
||||||
|
prompt_default LXC_BRIDGE "Bridge réseau Proxmox" "vmbr0"
|
||||||
|
|
||||||
|
[[ -n "$PROXMOX_HOST" ]] || die "Le serveur Proxmox est obligatoire."
|
||||||
|
[[ -n "$PROXMOX_USER" ]] || die "L'utilisateur Proxmox est obligatoire."
|
||||||
|
[[ -n "$PROXMOX_PASSWORD" ]] || die "Le mot de passe Proxmox est obligatoire."
|
||||||
|
|
||||||
|
TMP_DIR="$(mktemp -d)"
|
||||||
|
cleanup() {
|
||||||
|
rm -rf "$TMP_DIR"
|
||||||
|
}
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
printf 'Clonage temporaire du dépôt ChessCubing...\n'
|
||||||
|
git clone --depth 1 --branch "$REPO_BRANCH" "$REPO_URL" "$TMP_DIR/repo" >/dev/null 2>&1
|
||||||
|
|
||||||
|
cmd=(
|
||||||
|
"$TMP_DIR/repo/scripts/install-proxmox-lxc.sh"
|
||||||
|
--proxmox-host "$PROXMOX_HOST"
|
||||||
|
--proxmox-user "$PROXMOX_USER"
|
||||||
|
--proxmox-password "$PROXMOX_PASSWORD"
|
||||||
|
--ssh-port "$SSH_PORT"
|
||||||
|
--hostname "$LXC_HOSTNAME"
|
||||||
|
--lxc-ip "$LXC_IP"
|
||||||
|
--bridge "$LXC_BRIDGE"
|
||||||
|
--cores "$LXC_CORES"
|
||||||
|
--memory "$LXC_MEMORY"
|
||||||
|
--swap "$LXC_SWAP"
|
||||||
|
--disk-gb "$LXC_DISK_GB"
|
||||||
|
--branch "$REPO_BRANCH"
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ -n "$CTID" ]]; then
|
||||||
|
cmd+=(--ctid "$CTID")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$LXC_GATEWAY" ]]; then
|
||||||
|
cmd+=(--gateway "$LXC_GATEWAY")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$TEMPLATE_STORAGE" ]]; then
|
||||||
|
cmd+=(--template-storage "$TEMPLATE_STORAGE")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$ROOTFS_STORAGE" ]]; then
|
||||||
|
cmd+=(--rootfs-storage "$ROOTFS_STORAGE")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$LXC_PASSWORD" ]]; then
|
||||||
|
cmd+=(--lxc-password "$LXC_PASSWORD")
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf 'Lancement de l’installation LXC ChessCubing...\n'
|
||||||
|
"${cmd[@]}"
|
||||||
158
update-chesscubing-proxmox.sh
Executable file
158
update-chesscubing-proxmox.sh
Executable file
@@ -0,0 +1,158 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO_URL="https://git.jeannerot.fr/christophe/chesscubing.git"
|
||||||
|
REPO_BRANCH="${CHESSCUBING_GIT_BRANCH:-main}"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
Bootstrap de mise à jour ChessCubing pour Proxmox.
|
||||||
|
|
||||||
|
Usage local :
|
||||||
|
./update-chesscubing-proxmox.sh
|
||||||
|
|
||||||
|
Usage en une ligne :
|
||||||
|
bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch/main/update-chesscubing-proxmox.sh)"
|
||||||
|
|
||||||
|
Variables d'environnement reconnues :
|
||||||
|
CHESSCUBING_PROXMOX_HOST
|
||||||
|
CHESSCUBING_PROXMOX_USER
|
||||||
|
CHESSCUBING_PROXMOX_PASSWORD
|
||||||
|
CHESSCUBING_SSH_PORT
|
||||||
|
CHESSCUBING_CTID
|
||||||
|
CHESSCUBING_LXC_HOSTNAME
|
||||||
|
CHESSCUBING_GIT_BRANCH
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
printf 'Erreur: %s\n' "$*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
have_cmd() {
|
||||||
|
command -v "$1" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
install_pkg_if_missing() {
|
||||||
|
local missing=()
|
||||||
|
local pkg=""
|
||||||
|
|
||||||
|
for pkg in "$@"; do
|
||||||
|
if ! have_cmd "$pkg"; then
|
||||||
|
missing+=("$pkg")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ${#missing[@]} -eq 0 ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! have_cmd apt-get; then
|
||||||
|
die "Commandes manquantes: ${missing[*]}. Installe-les manuellement."
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf 'Installation des dépendances manquantes: %s\n' "${missing[*]}"
|
||||||
|
if have_cmd sudo && [[ "${EUID}" -ne 0 ]]; then
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y git sshpass openssh-client ca-certificates
|
||||||
|
elif [[ "${EUID}" -eq 0 ]]; then
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y git sshpass openssh-client ca-certificates
|
||||||
|
else
|
||||||
|
die "git/sshpass manquent et sudo n'est pas disponible."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_default() {
|
||||||
|
local var_name="$1"
|
||||||
|
local prompt_label="$2"
|
||||||
|
local default_value="${3:-}"
|
||||||
|
local current_value="${!var_name:-}"
|
||||||
|
local input=""
|
||||||
|
|
||||||
|
if [[ -n "$current_value" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$default_value" ]]; then
|
||||||
|
read -r -p "$prompt_label [$default_value]: " input
|
||||||
|
printf -v "$var_name" '%s' "${input:-$default_value}"
|
||||||
|
else
|
||||||
|
read -r -p "$prompt_label: " input
|
||||||
|
printf -v "$var_name" '%s' "$input"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_secret() {
|
||||||
|
local var_name="$1"
|
||||||
|
local prompt_label="$2"
|
||||||
|
local current_value="${!var_name:-}"
|
||||||
|
|
||||||
|
if [[ -n "$current_value" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -rsp "$prompt_label: " current_value
|
||||||
|
echo
|
||||||
|
printf -v "$var_name" '%s' "$current_value"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
install_pkg_if_missing git ssh sshpass
|
||||||
|
|
||||||
|
PROXMOX_HOST="${CHESSCUBING_PROXMOX_HOST:-}"
|
||||||
|
PROXMOX_USER="${CHESSCUBING_PROXMOX_USER:-}"
|
||||||
|
PROXMOX_PASSWORD="${CHESSCUBING_PROXMOX_PASSWORD:-}"
|
||||||
|
SSH_PORT="${CHESSCUBING_SSH_PORT:-22}"
|
||||||
|
CTID="${CHESSCUBING_CTID:-}"
|
||||||
|
LXC_HOSTNAME="${CHESSCUBING_LXC_HOSTNAME:-chesscubing-web}"
|
||||||
|
|
||||||
|
default_host=""
|
||||||
|
if have_cmd pct && have_cmd pveam; then
|
||||||
|
default_host="127.0.0.1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prompt_default PROXMOX_HOST "IP ou nom du serveur Proxmox" "$default_host"
|
||||||
|
prompt_default PROXMOX_USER "Utilisateur SSH Proxmox" "root@pam"
|
||||||
|
prompt_secret PROXMOX_PASSWORD "Mot de passe SSH Proxmox"
|
||||||
|
prompt_default SSH_PORT "Port SSH Proxmox" "22"
|
||||||
|
prompt_default CTID "CTID du LXC (laisser vide pour rechercher par nom)" ""
|
||||||
|
if [[ -z "$CTID" ]]; then
|
||||||
|
prompt_default LXC_HOSTNAME "Nom du LXC" "chesscubing-web"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -n "$PROXMOX_HOST" ]] || die "Le serveur Proxmox est obligatoire."
|
||||||
|
[[ -n "$PROXMOX_USER" ]] || die "L'utilisateur Proxmox est obligatoire."
|
||||||
|
[[ -n "$PROXMOX_PASSWORD" ]] || die "Le mot de passe Proxmox est obligatoire."
|
||||||
|
|
||||||
|
TMP_DIR="$(mktemp -d)"
|
||||||
|
cleanup() {
|
||||||
|
rm -rf "$TMP_DIR"
|
||||||
|
}
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
printf 'Clonage temporaire du dépôt ChessCubing...\n'
|
||||||
|
git clone --depth 1 --branch "$REPO_BRANCH" "$REPO_URL" "$TMP_DIR/repo" >/dev/null 2>&1
|
||||||
|
|
||||||
|
cmd=(
|
||||||
|
"$TMP_DIR/repo/scripts/update-proxmox-lxc.sh"
|
||||||
|
--proxmox-host "$PROXMOX_HOST"
|
||||||
|
--proxmox-user "$PROXMOX_USER"
|
||||||
|
--proxmox-password "$PROXMOX_PASSWORD"
|
||||||
|
--ssh-port "$SSH_PORT"
|
||||||
|
--branch "$REPO_BRANCH"
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ -n "$CTID" ]]; then
|
||||||
|
cmd+=(--ctid "$CTID")
|
||||||
|
else
|
||||||
|
cmd+=(--hostname "$LXC_HOSTNAME")
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf 'Lancement de la mise à jour ChessCubing...\n'
|
||||||
|
"${cmd[@]}"
|
||||||
Reference in New Issue
Block a user