% Installation de proxmox

[Install Proxmox VE on Debian 12 Bookworm - Proxmox VE](https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_12_Bookworm)

# Configuration

Proxmox requiert une configuration réseau avec IP statique

## Récupération des adresses fournies par le DHCP

On récupère les informations données par le DHCP avec les commandes `ip a` (équivalente à `ip addr show`) et `ip r` (équivalente à `ip route show`)

```bash
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 4c:72:b9:20:ac:9e brd ff:ff:ff:ff:ff:ff
    altname eno1
    altname enp0s25
    inet 188.165.235.71/24 brd 188.165.235.255 scope global dynamic eth0
       valid_lft 63054sec preferred_lft 63054sec
    inet6 fe80::4e72:b9ff:fe20:ac9e/64 scope link 
       valid_lft forever preferred_lft forever
```

La sortie précédente nous indique:

- l'IP: `188.165.235.71`
- le nom de l'interface: `eth0`
- les alias (`altname`): `eno1` et `enp0s25`
- l'adresse de broadcast : `188.165.235.255`
- la longueur du masque de sous-réseau: `/24`

```bash
$ ip r
default via 188.165.235.254 dev eth0 
188.165.235.0/24 dev eth0 proto kernel scope link src 188.165.235.71 
```

La sortie précédente nous indique:

- la passerelle (gateway) : `188.165.235.254`
- l'identifiant du sous-réseau: `188.165.235.0`

### DNS

Le DNS est donné par `cat /etc/resolv.conf`:

```
nameserver 213.186.33.99
```

### Sauvegarde du fichier `/etc/network/interfaces`

```bash
sudo cp /etc/network/interfaces /etc/network/interfaces.restore
```

### Création du fichier `/etc/network/interfaces`

```
iface eth0 inet static
    address 188.165.235.71
    alias eno1 enp0s25
    gateway 188.165.235.254
    network 188.165.235.0
    netmask 255.255.255.0
    broadcast 188.165.235.255
    dns-nameservers 213.186.33.99 208.67.222.123

```

### Vérification du fichier `/etc/network/interfaces`


sudo ifup --no-act eth0


## Restauration automatique du réseau

### OVH

En cas de problème avec le fichier `/etc/network/interfaces`, on perdra la connexion réseau. Une possibilité est de redémarrer le serveur en mode Rescue, mais avec un temps d'attente qui peut être assez long.

Pour éviter tout problème, on va plutôt installer un script dans le crontab de root. Ce script redémarrera la machine au bout de 5 minutes en cas de problème réseau, avec les anciens paramètres.

```bash
$ sudo su - 
root@server:~# mkdir bin
root@server:~# nano bin/restore_network
```

Y placer le code suivant:

```bash
#!/bin/bash

# Vérifier si la machine peut accéder à Internet
check_network() {
    ping -c 1 8.8.8.8 >/dev/null 2>&1
    return $?
}

# Chemins des fichiers
INTERFACES_FILE="/etc/network/interfaces"
RESTORE_FILE="/etc/network/interfaces.restore"

# Fonction principale
main() {
    if check_network; then
        echo "Le réseau est fonctionnel. Aucune action nécessaire."
    else
        echo "Le réseau n'est pas fonctionnel. Restauration du fichier interfaces..."
        if [ -f "$RESTORE_FILE" ]; then
            cp "$RESTORE_FILE" "$INTERFACES_FILE"
            echo "Fichier restauré avec succès."
            
            echo "Redémarrage des interfaces réseau..."
            ifdown -a && ifup -a
            echo "Les interfaces réseau ont été redémarrées."
        else
            echo "Le fichier $RESTORE_FILE n'existe pas. Impossible de restaurer."
            exit 1
        fi
    fi
}

# Appel de la fonction principale
main
```


```bash
chmod +x bin/restore_network
```


### Redémarrage des interfaces réseau

```
sudo ifdown eth0 ; sudo ifup eth0
```

## Nom de la machine

Il faut ajouter une ligne au fichier `/etc/hosts` et qui correspond au nom de la machine.

```
188.165.235.71 ecaz.aezi.fr ecaz
```

On vérifie qu'au moins une adresse (hors boucle locale) est affichée par la commande suivante:

```bash
hostname --ip-address
```

Exemple:

```
127.0.1.1 188.165.235.71
```

# Installation de proxmox

## Préparation du gestionnaire de paquets APT

```bash
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" | sudo tee /etc/apt/sources.list.d/pve-install-repo.list
```

### Ajout des clés de vérification

```bash
sudo wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg 
```

Vérification

```bash
sha512sum /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg > downloaded.txt ; echo "7da6fe34168adc6e479327ba517796d4702fa2f8b4f0a9833f5ea6e6b48f6507a6da403a274fe201595edc86a84463d50383d07f64bdde2e3658108db7d6dc87  /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg" > expected.txt ; diff downloaded.txt expected.txt && echo OK || echo KO ; rm downloaded.txt expected.txt
```

Devrait afficher `OK`


### Mise à jour

```bash
sudo apt update && sudo apt full-upgrade
```

### Installation de `proxmox`

```bash
sudo apt install proxmox-default-kernel
```

Redémarrer

```bash
sudo shutdown -r now
```

Installation des paquets complémentaires:

```bash
sudo apt install proxmox-ve postfix open-iscsi chrony
```

#### Configuration de `postfix`

- `Internet site`
- `ecaz.aezi.fr`

#### Post-installation de `proxmox`

Suppression du noyau Debian:

```bash
sudo apt remove linux-image-amd64 'linux-image-6.1*'
sudo update-grub
```

Suppression du paquet `os-prober`:

```bash
sudo apt remove os-prober
```

## Autorisation des tunnels SSH

Pour permettre le tunnelling, on édite le fichier `/etc/ssh/sshd_config` et on positionne à `yes` les options suivantes:

```conf
GatewayPorts yes
PermitTunnel yes
```

Redémarrer le service `ssh`:

```bash
sudo systemctl restart ssh
```

## Ouverture d'un tunnel pour accéder à l'interface *proxmox*

La commande la plus simple pour créer un tunnel redirigeant le port local 8006 vers le port distant du serveur *proxmox* n°8006 est:

```bash
ssh -L 8206:localhost:8006 ecaz
```

Cependant, ceci ouvre une session Shell.

Pour ouvrir le tunnel sans ouvrir une session dans le terminal on va plutôt utiliser:

```bash
ssh -f -N -T -L 8206:localhost:8006 ecaz
```


# Finalisation de l'installation de *proxmox*

## Connexion à l'interface

Après avoir ouver le tunnel, se connecter avec son navigateur à l'adresse suivante: [https://localhost:8206](https://localhost:8206)

Accepter les risques de sécurité (tout passe par le tunnel SSH, donc les communications sont chiffrées entre votre poste de travail et le serveur)

:::warning

Si vous êtes sur un ordinateur public, n'acceptez pas les risques et utilisez un ordinateur personnel.

:::

Se connecter avec l'utilisateur `root` (GNU/Linux) du serveur. S'il n'a pas de mot de passe, il faut lui en créer un.

## Suppression de la notification de non-souscription

```bash
sudo echo "Ensure sudo password is entered"
sudo su - <<EOF
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.original
sed -Ezi.bak "s/(function\(orig_cmd\) \{)/\1\n\torig_cmd\(\);\n\treturn;/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service
EOF
```

Source: [Remove Proxmox Subscription Notice (Tested to 8.2) | McLaren Data Systems](https://mclarendatasystems.com/remove-proxmox51-subscription-notice/)


