Ceci est une ancienne révision du document !
Bel article sur proxmox 5 ⇒ https://community.capensis.org/t/nouveautes-installation-et-configuration-de-proxmox-5-2/133
Proxmox est une distribution linux sous debian lenny qui intègre les outils openvz ( http://wiki.openvz.org/Main_Page ) permettant la virtualisation de machine.
L’intérêt de proxmox est qu’ils ont développés une interface web permettant de gérer facilement les outils openvz.
Ici l’install se fait via OVH sur un kimsufi 2g
On va sur la page http://pve.proxmox.com/wiki/Get_Virtual_Appliances pour trouver nos OS qu’on veut installer en VM
Ensuite, dans notre cas nous voulons installer une debian 6.0 64bit
cd /vz/template/cache/ wget http://download.proxmox.com/appliances/system/debian-6.0-standard_6.0-4_amd64.tar.gz
On rajouter pour l’instant une petite règle de firewall
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j SNAT --to 70.70.70.70
Cela permet à votre réseau virtuel en 192.168.0.0 d’avoir accès à internet via votre serveur 70.70.70.70
Pour un accès ssh de votre VM, vous devez utiliser un autre port que le 22 qui est déja utilisé par votre serveur principal.
Exemple pour le port 2222 qui sera redirigé sur le port 22 de votre VM 192.168.0.1
On déclare tout d’abord une règle permettant de faire du NAT sur notre réseau local virtuelle 192.168.0.0/24
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j SNAT --to-source 70.70.70.70
Ensuite on redirige le port 2222
iptables -t nat -A PREROUTING -d 70.70.70.70 -p tcp --dport 2222 -j DNAT --to-dest 192.168.0.1:22
(a venir, une config plus sécurisé du firewall…)
Je désactive l’ecoute sur le port 80 du serveur principal pour laisser libre ce port pour les autres machines.
L’interface reste toujours accessible sur le port 443 via https://...
Pour cela, modifiez le fichier /etc/apache2/ports.conf et commentez la ligne Listen 80
Rédémarrez apache
Installons maintenant pound qui permet le reverse-proxy et load-balancer
aptitude install pound
Dans ce cas la, pas besoin de faire du nat, on a une sorte de pont entre le wan et les vm. On ne peut pas faire d’iptables directement dans les VM, je n’ai pas trouvé l’astuce… Donc tout se faire sur le serveur proxmox.
L’insterface vmbr0 correspond à l’interface de proxmox, ensuite, tout ce qui est forwardé sur cette interface fini sur les VM.
Brièvement, pour couper le port 80 sur la machine proxmox mais sans couper le port 80 de vos VM
iptables -A INPUT -i vmbr0 -p tcp --dport 80 -j DROP
A l’inverse, couper le port 80 de toutes vos VM sans couper celui de proxmox
iptables -A FORWARD -i vmbr0 -p tcp --dport 80 -j DROP
Pour couper le port 80 d’une seule VM, procurez-vous son adresse ip et ajoutez-la dans la règle
iptables -A FORWARD -i vmbr0 -p tcp -d 199.199.199.199 --dport 80 -j DROP
Garder à l’esprit que vos VM peuvent communiquer entre elle, je mettrai prochainement une règle permettant de les isoler entre elles.
La commande suivante permet un backup de base
[root@serveur:]# vzdump --compress 102 INFO: starting new backup job: vzdump --compress 102 INFO: Starting Backup of VM 102 (openvz) INFO: CTID 102 exist unmounted down INFO: status = CTID 102 exist unmounted down INFO: backup mode: stop INFO: ionice priority: 7 INFO: creating archive '/var/lib/vz/dump/vzdump-openvz-102-2012_01_22-23_33_14.tgz' INFO: Total bytes written: 457912320 (437MiB, 4.3MiB/s) INFO: archive file size: 188MB INFO: Finished Backup of VM 102 (00:01:46) INFO: Backup job finished successfuly
Le contenu de l’archive comprend toute l’arborescence du serveur virtuel ce qui est pratique pour récupérer toutes les données que l’on souhaite sans avoir les outils openvz sous la main.
La commande suivante permet la restautarion d’un backup de ma machine 101 sur une nouvelle machine nommé 103
[root@serveur:/vz/vzdump]# vzrestore vzdump-openvz-101-2012_01_29-00_00_02.tgz 103 INFO: restore openvz backup 'vzdump-openvz-101-2012_01_29-00_00_02.tgz' using ID 103 INFO: extracting archive 'vzdump-openvz-101-2012_01_29-00_00_02.tgz' INFO: Total bytes read: 583393280 (557MiB, 21MiB/s) INFO: extracting configuration to '/etc/vz/conf/103.conf' INFO: restore openvz backup 'vzdump-openvz-101-2012_01_29-00_00_02.tgz' successful
Avec proxmox vous n’avez pas besoin d’utiliser ces lignes de commandes pour faire un backup, tout est prévu dans l’interface web.
Il suffit de déclarer un espace de stockage pour les backups, ensuite on crée une tache de backup en spécifiant la période, combien de backup on garde et quelle machine on veut sauvegarder.
Rien n’est prévu toutefois pour faire une restauration… il faudra passer par la ligne de commande.
Une fois la commande de restauration effectué, vous retrouverez la machine dans votre interface web.
Admettons vous voulez un répertoire dans votre VM qui contient plein de données mais vous ne souhaitez pas que ces données soient inclus dans le backup de votre VM.
La solution est de créer un répertoire qui sera partagé par le système proxmox dans votre VM.
Pour cela on va utiliser un montage bind directement sur la machine proxmox.
Admettons que votre VM est le numéro 101, tapez cette commande sur la machine proxmox.
mount --bind /var/lib/vz/stockage /var/lib/vz/root/101/mnt/stockage
Maintenant tout ce que vous stockerez sur votre VM dans le répertoire /mnt/stockage ne sera pas considérer comme des données de votre VM et ne sera donc pas sauvegardé par votre backup.
Pour que ce montage se fasse automatiquement, vous devez créer le fichier suivant
#!/bin/bash source /etc/vz/vz.conf source ${VE_CONFFILE} mount --bind /vz/stockage ${VE_ROOT}/mnt/stockage
Assurez-vous qu’il soit exécutable, chez moi il s’est mis automatiquement exécutable.
Par défaut on trouve pas mal de templates disponibles sur proxmox mais par exemple, il n’y a que la version 32bits de Debian.
On peut trouver une version 64bits et d’autres distrib ici ⇒ http://wiki.openvz.org/Download/template/precreated
Il n’y a plus qu’a les télécharger dans le répertoire template prévu par proxmox.
Plus de openVZ maintenant c’est du LXC
Our image repositories contain a list of available images, and there is a cron job run each day to download that list. You can trigger that update manually with:
pveam update
After that you can view the list of available images using:
pveam available
You can restrict this large list by specifying the section you are interested in, for example basic system images:
List available system images
# pveam available --section system system archlinux-base_2015-24-29-1_x86_64.tar.gz system centos-7-default_20160205_amd64.tar.xz system debian-6.0-standard_6.0-7_amd64.tar.gz system debian-7.0-standard_7.0-3_amd64.tar.gz system debian-8.0-standard_8.0-1_amd64.tar.gz system ubuntu-12.04-standard_12.04-1_amd64.tar.gz system ubuntu-14.04-standard_14.04-1_amd64.tar.gz system ubuntu-15.04-standard_15.04-1_amd64.tar.gz system ubuntu-15.10-standard_15.10-1_amd64.tar.gz
Before you can use such a template, you need to download them into one of your storages. You can simply use storage local for that purpose. For clustered installations, it is preferred to use a shared storage so that all nodes can access those images.
pveam download local debian-8.0-standard_8.0-1_amd64.tar.gz
You are now ready to create containers using that image, and you can list all downloaded images on storage local with:
# pveam list local local:vztmpl/debian-8.0-standard_8.0-1_amd64.tar.gz 190.20MB
The above command shows you the full Proxmox VE volume identifiers. They include the storage name, and most other Proxmox VE commands can use them. For example you can delete that image later with:
pveam remove local:vztmpl/debian-8.0-standard_8.0-1_amd64.tar.gz
solution ⇒ https://www.razva.ro/fixing-apparmordenied-namerunsystemdjournaldev-log/
J’ai constaté ça dans /var/log/syslog
Mar 5 21:37:58 p2pfr kernel: [2587040.014930] audit: type=1400 audit(1488746278.820:13404): apparmor="DENIED" operation="sendmsg" profile="/usr/sbin/named" name="/run/systemd/journal/dev-log" pid=20470 comm="named" requested_mask="w" denied_mask="w" fsuid=109 ouid=0 Mar 5 21:38:33 p2pfr kernel: [2587074.565032] audit: type=1400 audit(1488746313.371:13411): apparmor="DENIED" operation="sendmsg" profile="/usr/sbin/named" name="/run/systemd/journal/dev-log" pid=20469 comm="named" requested_mask="w" denied_mask="w" fsuid=109 ouid=0 Mar 5 21:38:55 p2pfr kernel: [2587096.733778] audit: type=1400 audit(1488746335.538:13413): apparmor="DENIED" operation="sendmsg" profile="/usr/sbin/named" name="/run/systemd/journal/dev-log" pid=20473 comm="named" requested_mask="w" denied_mask="w" fsuid=109 ouid=0 Mar 5 21:39:00 p2pfr kernel: [2587101.993724] audit: type=1400 audit(1488746340.798:13414): apparmor="DENIED" operation="sendmsg" profile="/usr/sbin/named" name="/run/systemd/journal/dev-log" pid=20473 comm="named" requested_mask="w" denied_mask="w" fsuid=109 ouid=0 Mar 5 21:39:25 p2pfr kernel: [2587126.367660] audit: type=1400 audit(1488746365.173:13420): apparmor="DENIED" operation="sendmsg" profile="/usr/sbin/named" name="/run/systemd/journal/dev-log" pid=20467 comm="named" requested_mask="w" denied_mask="w" fsuid=109 ouid=0 Mar 5 21:39:25 p2pfr kernel: [2587126.624156] audit: type=1400 audit(1488746365.429:13421): apparmor="DENIED" operation="sendmsg" profile="/usr/sbin/named" name="/run/systemd/journal/dev-log" pid=20469 comm="named" requested_mask="w" denied_mask="w" fsuid=109 ouid=0 Mar 5 21:40:06 p2pfr kernel: [2587167.443497] audit: type=1400 audit(1488746406.248:13429): apparmor="DENIED" operation="sendmsg" profile="/usr/sbin/named" name="/run/systemd/journal/dev-log" pid=20471 comm="named" requested_mask="w" denied_mask="w" fsuid=109 ouid=0 Mar 5 21:40:11 p2pfr kernel: [2587172.965146] audit: type=1400 audit(1488746411.768:13431): apparmor="DENIED" operation="sendmsg" profile="/usr/sbin/named" name="/run/systemd/journal/dev-log" pid=20468 comm="named" requested_mask="w" denied_mask="w" fsuid=109 ouid=0
Après une recherche, j’ai pu comprendre que proxmox utilise un soft qui s’appelle AppArmor qui est une espèce de soft qui controle ce que d’autres soft ont le droit de lire ou écrire sur le serveur.
Si on analyse le log, on nous parle du profile /usr/sbin/named qui veut accéder à /run/systemd/journal/dev-log en écriture ( requested_mask=w )
Il faut donc chercher sur proxmox la règle du même nom ⇒ /etc/apparmor.d/usr.sbin.named et là on ne trouve aucune trace de /run/systemd/journal/dev-log
Donc pour faire les choses bien, on va ajouter notre règle dans le fichier prévu à cette effet dans /etc/apparmor.d/local/usr.sbin.named ce qui doit donner ça
# Site-specific additions and overrides for usr.sbin.named. # For more details, please see /etc/apparmor.d/local/README. /run/systemd/journal/dev-log rw,
Ensuite on lance la commande qui recharge seulement ça
apparmor_parser -r /etc/apparmor.d/usr.sbin.named
et voilà :)
Après installation de debian 9 et mise à jour en debian 9.1, impossible de redémarrer la VM.
Solution ⇒ https://forum.proxmox.com/threads/lxc-start-fails-unsupported-debian-version-9-1.35860/
--- /usr/share/perl5/PVE/LXC/Setup/Debian.pm.orig 2017-07-22 08:57:59.495838723 -0700 +++ /usr/share/perl5/PVE/LXC/Setup/Debian.pm 2017-07-22 08:53:18.607049610 -0700 @@ -28,7 +28,7 @@ $version = $1; die "unsupported debian version '$version'\n" - if !($version >= 4 && $version <= 9); + if !($version >= 4 && $version <= 9.1); my $self = { conf => $conf, rootdir => $rootdir, version => $version };
Voir ou sont monté les VM
# losetup NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /var/lib/vz/images/101/vm-101-disk-1.raw /dev/loop1 0 0 1 0 /var/lib/vz/images/150/vm-150-disk-1.raw /dev/loop2 0 0 1 0 /var/lib/vz/images/201/vm-201-disk-1.raw
Ensuite vous pouvez soit les monter pour accéder aux fichiers, soit faire un fsck
fsck /dev/loop0
Un utilitaire pour gérer les containers LXC dans un terminal
USAGE: pct <COMMAND> [ARGS] [OPTIONS] pct clone <vmid> <newid> -experimental <boolean> [OPTIONS] pct create <vmid> <ostemplate> [OPTIONS] pct destroy <vmid> pct list pct migrate <vmid> <target> [OPTIONS] pct resize <vmid> <disk> <size> [OPTIONS] pct restore <vmid> <ostemplate> [OPTIONS] pct template <vmid> -experimental <boolean> [OPTIONS] pct config <vmid> pct set <vmid> [OPTIONS] pct delsnapshot <vmid> <snapname> [OPTIONS] pct listsnapshot <vmid> pct rollback <vmid> <snapname> pct snapshot <vmid> <snapname> [OPTIONS] pct resume <vmid> pct shutdown <vmid> [OPTIONS] pct start <vmid> [OPTIONS] pct stop <vmid> [OPTIONS] pct suspend <vmid> pct console <vmid> pct cpusets pct df <vmid> pct enter <vmid> pct exec <vmid> [<extra-args>] pct fsck <vmid> [OPTIONS] pct mount <vmid> pct pull <vmid> <path> <destination> [OPTIONS] pct push <vmid> <file> <destination> [OPTIONS] pct status <vmid> [OPTIONS] pct unlock <vmid> pct unmount <vmid> pct help [<cmd>] [OPTIONS]
exemple: lister les VM
pct list
entrer à l’intérieur d’une VM
pct enter 101
ouvrir la console d’une VM (pour sortir de la console, Ctrl+a q)
pct console 101