Outils pour utilisateurs

Outils du site


Refonte de l'infra (2017)

Plan

ansible: configure les conteneurs, et les mets à jour. nfs: redistribue les données aux conteneurs

chiffrement ?

  1. emails
  2. données des sites
  3. données éventuelles d'autres conteneurs

sauvegardes chiffrées (cloud+local)

Notes

Thin provisionning :

Nouveau partitionnement :

  • On créé une partition LVM thin pour chaque conteneur (plutôt que de mettre les conteneurs/VM sur une même partition)
  • Sur le disque dur secondaire (non-SSD), on a 2 partitions
    • une partition backups (pour les snapshots de conteneurs),
    • et une partition mpl_data (pour les données lourdes de certains conteneurs).

La partition mpl_data sera chiffrée (LUKS over LVM).

La partition mpl_data sera montée sur l'hôte, et un bind la rendra accessible à un conteneur NFS.

Le conteneur NFS partagera les données avec les autres conteneurs autorisés à y accéder (c'est le moyen le plus simple pour que des conteneurs puissent utiliser le même jeu de données.Un bind depuis l'hôte devrait le faire. Sinon il faut utiliser des systèmes de fichiers dédiés à cet usage, genre GlusterFS ou CEPH, mais ceux-ci ne semblent avoir du sens que quand on a plusieurs machines).

chiffrement mpl_data

# cryptsetup -v luksFormat /dev/mapper/mpl-mpl_data

# lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                            8:0    0 698.7G  0 disk  
└─sda1                         8:1    0 698.7G  0 part  
  ├─mpl-backups              253:9    0 198.6G  0 lvm   /mnt/local/backups
  └─mpl-mpl_data             253:10   0   500G  0 lvm   
    └─ul-mpl_data            253:15   0   500G  0 crypt 

# mkfs.ext4 /dev/mapper/ul-mpl_data

Accès à mpl_data

/etc/fstab
# mpl_data
UUID="909c06d4-0c3f-4a4f-804a-07b6c0aaef0d"     /mnt/local/mpl_data     ext4    defaults,nofail,noauto  0       0
unlock.sh
#!/bin/bash
 
cryptsetup open --type luks /dev/mapper/mpl-mpl_data ul-mpl_data
 
mount /mnt/local/mpl_data

Enfin, il faut faire un bind entre l'hôte et le conteneur.

Problème : l'interface de Proxmox ne permet que de créer un point de montage avec une taille définie ce qui aura pour effet de recréer un disque dur, il ne s'agit donc pas d'un bind.

Les forums indiquent cette solution, plus simple : https://forums.servethehome.com/index.php?threads/proxmox-ve-build-questions.13222/page-2

mp0: /mnt/local/mpl_data,mp=/mnt/mpl_data

Cela prête à confusion, car la partition apparaît alors aussi dans l'interface de Proxmox comme point de montage LXC sous le nom de md0, mais sans taille assignée.

Une autre exemple est donné ici : https://forum.proxmox.com/threads/is-it-possible-to-run-a-nfs-server-within-a-lxc.24403/#post-123955

lxc.mount.entry: /tank/data srv/data none bind,create=dir,optional 0 0

… ça a l'air plus joli, mais essai peu concluant, le montage n'est pas fait.

Piste 1 : j'ai un problème avec mes cgroups (des reliquats qui doivent être virés), mais je pense pas que ça vienne de là.

Piste 2 : pas vraiment repéré d'erreur dans les logs (dmesg). Juste ça :

new mount options do not match the existing superblock, will be ignored

(re)Démarrage du conteneur, peu de trucs dans dmesg, pas de raison explicite, comme si l'instruction était ignorée.

LXC, audio, USB passthrough, pulseaudio

A trier :

# ls /dev/snd/by-id/ -l
total 0
lrwxrwxrwx 1 root root 12 août  28 05:03 usb-M-Audio_FastTrack_Pro-00 -> ../controlC0

# ls /dev/snd/controlC0 -l
crw-rw---- 1 root audio 116, 2 Jul 25 21:03 /dev/snd/controlC0

# udevadm info /dev/snd/controlC0 
P: /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:2.0/sound/card0/controlC0
N: snd/controlC0
S: snd/by-id/usb-M-Audio_FastTrack_Pro-00
S: snd/by-path/pci-0000:00:1d.0-usb-0:1:2.0
E: DEVLINKS=/dev/snd/by-path/pci-0000:00:1d.0-usb-0:1:2.0 /dev/snd/by-id/usb-M-Audio_FastTrack_Pro-00
E: DEVNAME=/dev/snd/controlC0
E: DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:2.0/sound/card0/controlC0
E: ID_BUS=usb
E: ID_MODEL=FastTrack_Pro
E: ID_MODEL_ENC=FastTrack\x20Pro
E: ID_MODEL_ID=2012
E: ID_PATH=pci-0000:00:1d.0-usb-0:1:2.0
E: ID_PATH_TAG=pci-0000_00_1d_0-usb-0_1_2_0
E: ID_REVISION=0100
E: ID_SERIAL=M-Audio_FastTrack_Pro
E: ID_TYPE=audio
E: ID_USB_DRIVER=snd-usb-audio
E: ID_USB_INTERFACES=:010100:010300:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=M-Audio
E: ID_VENDOR_ENC=M-Audio
E: ID_VENDOR_ID=0763
E: MAJOR=116
E: MINOR=2
E: SUBSYSTEM=sound
E: TAGS=:uaccess:
E: USEC_INITIALIZED=4089223194


# Je suis pas sûr pour idProduct. idModelId ?
echo 'SUBSYSTEM=="sound", ATTRS{idVendor}=="0763", ATTRS{idProduct}=="2012", SYMLINK+="maudioft"' > /etc/udev/rules.d/99-usb-maudio.rules


lxc.cgroup.devices.allow: c 116:* rwm
lxc.mount.entry: /dev/maudioft dev/maudioft none bind,optional,create=file


# lsusb
...
Bus 005 Device 002: ID 0763:2012 Midiman M-Audio Fast Track Pro
...
Bus 002 Device 002: ID 0bc2:3320 Seagate RSS LLC SRD00F2 [Expansion Desktop Drive]

Backups foireux

Depuis la GUI de Proxmox, certains conteneurs ne se sauvegardent pas. Sans doute lié aux histoires de permissions. Après vérif, les fichiers concernés ont retrouvé des 'uid' normaux (plutôt que ceux mappés).

INFO: creating archive '/mnt/local/backups/dump/vzdump-lxc-100-2017_09_12-21_03_18.tar.lzo'
INFO: tar: ./var/log/mail.err: Cannot open: Permission denied
INFO: tar: ./var/log/mail.warn: Cannot open: Permission denied
INFO: tar: ./var/log/btmp: Cannot open: Permission denied
INFO: Total bytes written: 732303360 (699MiB, 39MiB/s)
INFO: tar: Exiting with failure status due to previous errors
ERROR: Backup of VM 100 failed - command 'set -o pipefail && lxc-usernsexec -m u:0:100000:65536 -m g:0:100000:65536 -- tar cpf - --totals --one-file-system -p --sparse --numeric-owner --acls --xattrs '--xattrs-include=user.*' '--xattrs-include=security.capability' '--warning=no-file-ignored' '--warning=no-xattr-write' --one-file-system '--warning=no-file-ignored' '--directory=/mnt/local/backups/dump/vzdump-lxc-100-2017_09_12-21_03_18.tmp' ./etc/vzdump/pct.conf '--directory=/mnt/vzsnap0' --no-anchored '--exclude=lost+found' --anchored '--exclude=./tmp/?*' '--exclude=./var/tmp/?*' '--exclude=./var/run/?*.pid' ./ | lzop >/mnt/local/backups/dump/vzdump-lxc-100-2017_09_12-21_03_18.tar.dat' failed: exit code 2
INFO: Backup job finished with errors
TASK ERROR: job errors

En effet, après suppression des fichiers problématiques, les backups fonctionnent.

Reste à comprendre pourquoi ces fichiers ont été créés avec les mauvais owners…

Migration lxc-create, .raw, qcow2

Créer un fichier qcow2 from scratch ?

Ok ! : http://nairobi-embedded.org/transfering_buildroot_fs_data_into_qemu_disk_images.html

Bof: https://forum.proxmox.com/threads/how-to-build-a-vm-with-a-existing-image.17390/

En fin de compte, pas besoin, car on souhaite créer des conteneurs et non pas des images de VM.

Créer un conteneur LXC manuellement et l'intégrer à Proxmox

Il faut donc créer une partition LVM : https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Logical_Volume_Manager_Administration/thinly_provisioned_volume_creation.html

Puis copier les fichiers dessus avec rsync.

Puis changer les permissions s'il s'agit d'un conteneur non privilégié : http://blog.benoitblanchon.fr/lxc-unprivileged-container/

chown -R 100000:100000 tmp/

chown root:root lost+found/ tmp/

lxc-start -F –name 102

lxc-start -n 102 -F -l DEBUG -o /tmp/lxc-102.log

pct start 102

# lxc-start -F --name 102
  WARNING: Not using lvmetad because config setting use_lvmetad=0.
  WARNING: To avoid corruption, rescan devices to make changes visible (pvscan --cache).
lxc-start: conf.c: mount_rootfs: 846 Permission denied - Failed to get real path for "/var/lib/lxc/102/rootfs".
lxc-start: conf.c: setup_rootfs: 1268 Failed to mount rootfs "/var/lib/lxc/102/rootfs" onto "/usr/lib/x86_64-linux-gnu/lxc/rootfs" with options "(null)".
lxc-start: conf.c: do_rootfs_setup: 3992 failed to setup rootfs for '102'
lxc-start: conf.c: lxc_setup: 4074 Error setting up rootfs mount after spawn
lxc-start: start.c: do_start: 811 Failed to setup container "102".
lxc-start: sync.c: __sync_wait: 57 An error occurred in another process (expected sequence number 3)
lxc-start: start.c: __lxc_start: 1381 Failed to spawn container "102".
lxc-start: tools/lxc_start.c: main: 366 The container failed to start.
lxc-start: tools/lxc_start.c: main: 370 Additional information can be obtained by setting the --logfile and --logpriority options.

ben ouais, en fait je vois pas comment lxc-start pourrait deviner que le contenu à chercher est sur la partition LVM si je lui dis rien … Il n'y a que proxmox qui sait que c'est par là.

En même temps, si je retire les lignes “uid map” du fichier 'config' du CT LXC, il démarre normalement…

Bordel, c'était un problème de permissions sur /var/lib/lxc/102

article/linux/mplx/refonte-proxmox.txt · Dernière modification: 2018/07/19 17:40 par fab