Bonjour voici le brouillon d’un tuto que je viens de réaliser.
N’hesitez pas à tester, commenter etc …
Tuto préparation serveur yunohost.
Remarque importante :
Attention il faut un petit peu de connaissances système, usage de fdisk, création d’un file system concepts LVM et cryptsetup.
Donc ne pas hésiter à faire quelques recherches sur la toile avant toute chose.
Périmètre :
Ce tuto s’applique comme dans mon cas sur un VPS fournit par un hébergeur sous debian jessie.
Mais il peut tout à fait s’appliquer à un serveur en auto hébergement.
Je suis hébergé depuis 2 ans, et en suis globalement satisfait.
Mais certaines contraintes me font chercher ailleurs pour voir si l’herbe est plus verte.
Sur mon VPS actuel, il n’est pas possible de gérer facilement l’espace disque disponible, et yunohost comme toute distribution serveur a ses contraintes en termes d’usage de cet espace.
Mes objectifs sont:
- Isoler les espaces disques data, utilisés par yunohost.
- Crypter ces espaces.
- Gérer l’espace dynamiquement par extension ou ajout de disque simplement.
Pour cela je vais utiliser LVM2 et crypsetup.
Je viens donc de louer un nouveau VPS de type KVM chez un hébergeur qui me permet un accès facile à la console linux (ex: accès au boot grub) et un mode rescue qui me permet de monter mon système en cas de problème ou de maintenance.
En effet il est très important d’avoir ces 2 possibilités pour faire ce que j’envisage.
LE VPS dispose de 500Go ce qui est confortable, par contre le disque est decoupé en deux partitions, une toute petite pour /boot et le reste pour / ce qui ne me convient pas du tout.
Je veux diminuer / à environ 6 Go pour configurer le reste de l’espace à ma guise.
Pour cela il faut réduire la partition
Malheureusement sur ext4, on ne peut pas le faire à chaud.
La seule solution le reboot en mode rescue pour modifier le partitionnement initial.
Voici ma config de départ.
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 487423 485376 237M 83 Linux
/dev/vda2 487424 1048573951 1048086528 499.8G 83 Linux
Je boote donc en mode rescue par le panel de mon fournisseur.
Pour ceux qui hébergent chez eux, j’aime bien utiliser knoppix comme distro de rescue.
Se logger root et réduire la partition /.
D’abord le file system
e2fsck -f /dev/vda2
e2fsck 1.42.13 (17-May-2015)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vda2: 21406/32759808 files (0.3% non-contiguous), 2257252/131010816 blocks
resize2fs /dev/vda2 6G
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/vda2 to 1572864 (4k) blocks.
The filesystem on /dev/vda2 is now 1572864 (4k) blocks long
Ensuite avec fdisk
Réduire la partition, attention si erreur, il y a risque de destruction, donc bien réfléchir et utiliser une calculette si nécessaire.
Je la retaille à 6,5 Go ce qui me laisse une marge
Pour cela il faut d’abord la supprimer
fdisk /dev/vda
Welcome to fdisk (util-linux 2.26.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/vda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5710e40b
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 487423 485376 237M 83 Linux
/dev/vda2 487424 1048573951 1048086528 499.8G 83 Linux
Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2):
First sector (487424-1048575999, default 487424):
Last sector, +sectors or +size{K,M,G,T,P} (487424-1048575999, default 1048575999): +6.5G
Created a new partition 2 of type ‘Linux’ and of size 6.5 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 487423 485376 237M 83 Linux
/dev/vda2 487424 14094335 13606912 6.5G 83 Linux
On redémarre en mode normal pour voir si tout va bien, et normalement cela doit-être le cas
On réajuste si nécessaire / à la taille réelle de la partition (6,5Go)
resize2fs /dev/vda2
et on créer par fdisk un nouvelle partition de type LVM
fdisk /dev/vda
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 487423 485376 237M 83 Linux
/dev/vda2 487424 14000000 13512577 6.5G 83 Linux
/dev/vda3 14000128 1048575999 1034575872 493.3G 8e Linux LVM
Profitons pour installer parted afin d’utiliser partprobe pour la relecture de la table des partitions, ce qui évite un reboot.
apt-get install parted
Relecture de la table des partitions
partprobe /dev/vda
Ou sinon reboot du serveur.
Préparation de l’espace disque.
Installation si nécessaire de crytpsetup
apt-get install cryptsetup
D’abord création du device crypté, il faudra créer une passphrase (ne pas l’oublier)
cryptsetup -y -v luksFormat /dev/vda3
WARNING!
========
This will overwrite data on /dev/vda3 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.
Création du mapping
cryptsetup luksOpen /dev/vda3 yuno_crypt
vérification
ls -ali /dev/mapper/yuno_crypt
Formatage du volume
apt-get install pv
pv -tpreb /dev/zero | dd of=/dev/mapper/yuno_crypt bs=128M
Remarque: L’exécution de la commande a durée pratiquement 7H
Pour plus d’information sur cryptsetup voir :
Préparation de la configuration LVM
Installation de lvm si nécessaire
apt-get install lvm2
éditer le fichier /etc/lvm/lvm.conf
et dans la section filter ajouter une ligne pour prendre en compte les devices mapper
filter = [ “a|dev/sda[2-9]$|”, “a/mapper./", "r/./” ]
Créer la struture LVM
D’abord le physical volume
pvcreate /dev/mapper/yuno_crypt
Ensuite le volume group
vgcreate vg_yuno /dev/mapper/yuno_crypt
Afficher l’UUID du de la partition
lsblk -o name,uuid,mountpoint
NAME UUID MOUNTPOINT
vda
├─vda1 11102a8e-c64c-40f2-af1a-caa8c48e2abe /boot
├─vda2 9930e9a9-ee56-44eb-99a8-3a6577408604 /
└─vda3 58e1bc55-0abd-4528-8a20-fb98c6ec2da4
Modifier le fichier /etc/crypttab comme suit
yuno_crypt UUID=58e1bc55-0abd-4528-8a20-fb98c6ec2da4 none luks
Tester
cryptdisks_stop yuno_crypt
cryptdisks_start yuno_crypt
Préparation des logicals volumes.
Dans ma vision des choses, je veux 4 espaces différents pour les données yunohost
• /var/mail pour la messagerie
• /home pour des données utilisateurs et également owncloud
• /home/yunohost.transmission pour transmission
• /tmp
lvcreate -L 50G -n lv_mail vg_yuno
** Logical volume “lv_mail” created**
lvcreate -L 10G -n lv_tmp vg_yuno
** Logical volume “lv_tmp” created**
lvcreate -L 150G -n lv_home vg_yuno
** Logical volume “lv_home” created**
lvcreate -L 150G -n lv_transmission vg_yuno
** Logical volume “lv_transmission” create**
Bien entendu, chacun fera en fonction de ses besoins en termes de nombre de file system et de taille.
Dans mon cas je n’utilise pas tout l’espace disque disponible, ce n’est pas nécessaire et cela me permettra de l’utiliser en fonction de mes besoins futurs (extension de FS, ajout de nouveaux FS,etc …)
Formater en ext4
for i in /dev/mapper/vg_yuno-lv_*; do mkfs.ext4 $i; done
On creer les points de montage si nécessaire.
mkdir /var/mail /home /home/yunohost.transmission
on modifie /etc/fstab en conséquence
pour cela récupération des UUUID
lsblk -o name,uuid,mountpoint
NAME UUID MOUNTPOINT
vda
├─vda1 11102a8e-c64c-40f2-af1a-caa8c48e2abe /boot
├─vda2 9930e9a9-ee56-44eb-99a8-3a6577408604 /
└─vda3 58e1bc55-0abd-4528-8a20-fb98c6ec2da4
└─yuno_crypt f9D7W9-A2o6-1L25-lamS-d4WG-8Cxa-axtBDX
├─vg_yuno-lv_mail 34fa7d71-6f73-4a8c-8850-cb746b064088
├─vg_yuno-lv_tmp 77ba5f46-7fed-4602-bd59-277508cfe4e4
├─vg_yuno-lv_home 3feb02c1-2178-4be4-8305-fa613947c0f9
└─vg_yuno-lv_transmission 117545b1-9417-4bb0-9167-4430ac25c6ca
cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use ‘blkid’ to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
# / was on /dev/vda2 during installation
UUID=9930e9a9-ee56-44eb-99a8-3a6577408604 / ext4 errors=remount-ro 0 0
# /boot was on /dev/vda1 during installation
UUID=11102a8e-c64c-40f2-af1a-caa8c48e2abe /boot ext4 defaults,noatime 0 0
UUID=77ba5f46-7fed-4602-bd59-277508cfe4e4 /tmp ext4 errors=remount-ro 0 1
UUID=34fa7d71-6f73-4a8c-8850-cb746b064088 /var/mail ext4 errors=remount-ro 0 1
UUID=3feb02c1-2178-4be4-8305-fa613947c0f9 /home ext4 errors=remount-ro 0 1
#UUID=117545b1-9417-4bb0-9167-4430ac25c6ca /home/yunohost.transmission ext4 errors=remount-ro 0 1
Pour relire /etc/fstab :
mount -a
Remettre les droits corrects sur /tmp sous peine d’avoir de gros soucis d’installation de yunohost
chmod 1777 /tmp
puis df pour vérifier ques les Files sytems se montent bien.
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda2 6518232 1751004 4413036 29% /
udev 10240 0 10240 0% /dev
tmpfs 1225684 85392 1140292 7% /run
tmpfs 3064208 0 3064208 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 3064208 0 3064208 0% /sys/fs/cgroup
/dev/vda1 230925 34076 180619 16% /boot
/dev/mapper/vg_yuno-lv_mail 51475068 20256024 28581220 42% /var/mail
/dev/mapper/vg_yuno-lv_tmp 10190136 23772 9625692 1% /tmp
/dev/mapper/vg_yuno-lv_home 154687468 40412804 106393960 28% /home
tmpfs 612844 0 612844 0% /run/user/1007
Le dernier test, attention il est délicat, le reboot du serveur.
Il faut absolument un accès à la console, parce qu’il vous sera demandé la passphrase pour l’activation du volume crypté.
Dans mon cas j’ai choisi une passphrase en chiffres uniquement par peur d’avoir des problèmes de clavier au démarrage (clavier en qwerty par exemple …)
Si le reboot c’est bien passé, vérifier par df que tous les FS sont bien présents.
Notez que à chaque reboot il faudra intervenir et entrer la passphase, cela implique un accès permanent à la console du serveur.
Voilà maintenant j’ai un partitionnement crypté et à mon sens, mieux adapté à yunohost.
Je vais pouvoir grâce à lvm gérer dynamiquement l’espace disque, étendre, ajouter un autre disque, faire du mirroring, etc …
Nino