Installer un serveur de nouvelles sur un Raspberry Pi

De Wiki Usenet-fr
Aller à : navigation, rechercher

Préambule

Suite à l'installation d'un serveur INN grâce à la documentation bien connue : Installer et configurer un serveur de nouvelles, j'ai décidé pour économiser des électrons et torturer des diptères de convertir une raspberry pi en serveur NNTP.

Matériel

Un kit complet : Starter kit Wifi - Raspberry Pi 2 Modèle B 1GB

Un disque externe USB2 avec une alimentation car la raspberry n'est pas assez puissante pour alimenter un disque usb.

Une télévision récente qui supporte l'HDMI.

Un clavier USB.

Démarrage

Brancher les différentes connectiques et à la fin mettre en route électriquement la bestiole! Pour l'instant, on peut laisser le disque USB dans un coin.

Configuration de Noobs

Le minimum : installer un serveur SSH pour ne pas devoir laisser traîner un clavier USB et configurer le mot de passer de l'utilisateur pi.

En plus, on peut configurer la locale (langue française dans mon cas) et l'heure locale.

Et c'est tout!

Passage de Wheezie à Jessie

Préambule

Avant de lancer la mise à jour, il est utile d'installer screen ou un équivalent car la montée de version peut être longue.

$ sudo  apt-get install screen


Préparation

Il suffit de modifier tous les 'wheezy' en 'jessie' dans les divers fichiers de /etc/apt :

$ sudo nano /etc/apt/sources.list /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/collabora.list

Par contre pour collabra.list, ça ne fonctionne pas avec Jessie, il faut tout laisser commenté :

$ more /etc/apt/sources.list.d/collabora.list
#deb http://raspberrypi.collabora.com wheezy rpi
#deb http://raspberrypi.collabora.com jessie rpi

Action

Pour mettre à jour, c'est un grand classique debian :

$ sudo -s
# screen -S installation
# apt-get update
# apt-get dist-upgrade

Ensuite pour voir si tout va bien, on redémarre :

# reboot

Et si tout va bien, on nettoie :

$ sudo apt-get autoremove


Remarque

Pour les puristes, il faut directement utiliser une net install car en utilisant noobs, on a plein de paquets inutiles pour un serveur.

Particularités

Température

Pour connaître la température du processeur :

$ /opt/vc/bin/vcgencmd measure_temp
temp=39.5'C

On peut rajouter un alias dans ~pi/.bashrc pour connaitre facilement la température :

alias temperature='/opt/vc/bin/vcgencmd measure_temp'
$ temperature
temp=39.5'C

ipV6

Comme j'ai la chance d'avoir une ipV6 grâce à mon FAI, j'en profite!

$ sudo insmod ipv6
Error: could not load module ipv6: No such file or directory
$ sudo modprobe ipv6 

ipV6 est activé et la carte a déjà pris une ipV6, on peut le vérifier en tapant :

$ ifconfig

Pour que ce soit permanent :

#echo "ipv6" >> /etc/modules

origine de l'astuce


Chroot

Derrière ce terme d'unixien, se cache le fond du problème et sa solution : la carte SD n'est pas conçue pour supporter INN2 et cleanfeed. On va se servir de la carte SD pour démarrer et pour les écritures/lectures massives le disque usb.

Je ne vais pas mettre l'intégralité de la manipulation, juste les différences avec le tutoriel original.

État des lieux

Examinons l'existant ; je ne copie ici que les parties qui vont nous intéresser :

# fdisk -l

##################################################################
#De manière contre-intuitive le disque usb est en sda et pas sdb :
###################################################################

Device     Boot    Start       End   Sectors  Size Id Type
/dev/sda1           2048  42979327  42977280 20,5G 83 Linux
/dev/sda2       42979328  45076479   2097152    1G 83 Linux
/dev/sda3       45076480 976773166 931696687 444,3G 83 Linux

#####################################
#Le système du raspberry pi est là :
#####################################


Device         Boot    Start      End  Sectors   Size Id Type
/dev/mmcblk0p1          8192  1673828  1665637 813,3M  c W95 FAT32 (LBA)
/dev/mmcblk0p2       1679360 15333375 13654016   6,5G  5 Extended
/dev/mmcblk0p3      15333376 15398911    65536    32M 83 Linux
/dev/mmcblk0p5       1687552  1810431   122880    60M  c W95 FAT32 (LBA)
/dev/mmcblk0p6       1818624 15333375 13514752   6,5G 83 Linux

Les points de montage avant modification :

# more /etc/fstab 
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p5  /boot           vfat    defaults          0       2
/dev/mmcblk0p6  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[on|off]  for that

Une fois après avoir monté /dev/sda1 sur /mnt, on obtient :

# df -hT
Sys. de fichiers Type     Taille Utilisé Dispo Uti% Monté sur
/dev/root        ext4       6,3G    3,7G  2,3G  63% /
devtmpfs         devtmpfs   459M       0  459M   0% /dev
tmpfs            tmpfs      463M       0  463M   0% /dev/shm
tmpfs            tmpfs      463M    6,3M  457M   2% /run
tmpfs            tmpfs      5,0M    4,0K  5,0M   1% /run/lock
tmpfs            tmpfs      463M       0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p5   vfat        60M     20M   41M  33% /boot
tmpfs            tmpfs       93M       0   93M   0% /run/user/106
tmpfs            tmpfs       93M       0   93M   0% /run/user/1000
/dev/sda1        ext4        21G     44M   19G   1% /mnt

Modification du boot

Le tutoriel parle d'un fichier "/boot/firmware/cmdline.txt" qui n'est pas présent. Pour trouver son équivalent :

# fgrep '/dev/' -R /boot/

Et on trouve :

/boot/cmdline.txt:dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait

Qu'on modifie pour obtenir :

# less /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline  rootwait rootdelay=5
#dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait

Préparation du chroot

Avant de bidouiller /etc/fstab, j'ai l'habitude de le sauvegarder :

# cp /etc/fstab /etc/fstab.pi

Et on le modifie pour obtenir:

# less /etc/fstab
proc            /proc           proc    defaults                        0       0
/dev/mmcblk0p5  /boot           vfat    defaults                        0       2
/dev/sda1       /               ext4    relatime,errors=remount-ro      0       1
#/dev/mmcblk-1p6  /               ext4    defaults,noatime              0       1
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[on|off]  for that

Après avoir fait le rsync :

# df -hT
Sys. de fichiers Type     Taille Utilisé Dispo Uti% Monté sur
/dev/root        ext4       6,3G    3,7G  2,3G  63% /
devtmpfs         devtmpfs   459M       0  459M   0% /dev
tmpfs            tmpfs      463M       0  463M   0% /dev/shm
tmpfs            tmpfs      463M    6,3M  457M   2% /run
tmpfs            tmpfs      5,0M    4,0K  5,0M   1% /run/lock
tmpfs            tmpfs      463M       0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p5   vfat        60M     20M   41M  33% /boot
tmpfs            tmpfs       93M       0   93M   0% /run/user/106
tmpfs            tmpfs       93M       0   93M   0% /run/user/1000
/dev/sda1        ext4        21G    3,8G   16G  20% /mnt

Plus de 20 Go pour la future racine c'est du luxe mais comme on n'utilise pas LVM2, il vaut mieux beaucoup trop que pas assez!

swap

État des lieux

# more /etc/crypttab
# <target name> <source device>         <key file>      <options>

action

Vous pouvez lire cette page avant de continuer. Attention à bien écrire ">>" et pas ">"!

# echo "sda2_crypt /dev/sda2 /dev/urandom cipher=aes-xts-plain64,size=256,swap" >> /etc/crypttab
# echo "sda2_crypt /dev/sda2 /dev/urandom cipher=aes-xts-plain64,size=256,swap" >> /mnt/etc/crypttab
# echo "/dev/mapper/sda2_crypt none swap sw 0 0" >> /etc/fstab
# echo "/dev/mapper/sda2_crypt none swap sw 0 0" >> /mnt/etc/fstab
# more /etc/crypttab
# <target name> <source device>         <key file>      <options>
sda2_crypt /dev/sda2 /dev/urandom cipher=aes-xts-plain64,size=256,swap
# more /etc/fstab
proc            /proc           proc    defaults                        0       0
/dev/mmcblk0p5  /boot           vfat    defaults                        0       2
/dev/sda1       /               ext4    relatime,errors=remount-ro      0       1
#/dev/mmcblk-1p6  /               ext4    defaults,noatime              0       1
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[on|off]  for that
/dev/mapper/sda2_crypt none swap sw 0 0

On applique les changements

On croise les doigts, on branche la télé pour voir le boot et on redémarre!

umount /mnt
reboot

Note, j'ai du le faire en mode semi barbare Grâce aux commandes magiques REISUB cf :[1] car j'avais oublié le umount /mnt !!!

On obtient :

$ df -hT
Sys. de fichiers Type     Taille Utilisé Dispo Uti% Monté sur
/dev/root        ext4        21G    3,8G   16G  20% /
devtmpfs         devtmpfs   459M       0  459M   0% /dev
tmpfs            tmpfs      463M       0  463M   0% /dev/shm
tmpfs            tmpfs      463M    6,3M  457M   2% /run
tmpfs            tmpfs      5,0M    4,0K  5,0M   1% /run/lock
tmpfs            tmpfs      463M       0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p5   vfat        60M     20M   41M  33% /boot
tmpfs            tmpfs       93M       0   93M   0% /run/user/106
tmpfs            tmpfs       93M       0   93M   0% /run/user/1000
$ free -hm
             total       used       free     shared    buffers     cached
Mem:          925M       139M       786M       6,3M        13M        70M
-/+ buffers/cache:        56M       869M
Swap:         1,1G         0B       1,1G

S'il y a des fichiers de l'ancienne racine qui manquent, on peut la monter :

mount -t ext4 /dev/mmcblk0p6 /mnt


Préparation de l'espace de stockage

La doc en référence utilise une partition cryptée que je n'ai pas réussit à faire fonctionner. Je vais monter les gros répertoires par exemple /var/spool en lvm2 qui a l'avantage d'être modifiable à chaud si on utilise ext3, ext4 et sûrement d'autres systèmes de fichiers.

On regarde si la partition n'est pas déjà utilisée pour LVM

# pvs | grep sda3

On la formate en LVM

# pvcreate /dev/sda3

On créé le groupe de volume

vgcreate VgData /dev/sda3

Exemple de volume logique de 35GB :

# lvcreate -L 35GB -nLvVarSpool VgData

On le formate en ext4

# mkfs -t ext4 /dev/mapper/VgData-LvVarSpool

Partie périlleuse On vérifie que /var/spool n'a pas d'activité sinon ça va mal se passer! Le plus prudent c'est de faire ces modifications en init 1...

# lsof +D /var/spool/

En une ligne histoire de limiter les risques :

# mv /var/spool /var/spool2 && mkdir /var/spool && mount -t ext4 /dev/mapper/VgData-LvVarSpool /var/spool && mv /var/spool2/* /var/spool
# df -hT
Sys. de fichiers              Type     Taille Utilisé Dispo Uti% Monté sur
/dev/root                     ext4        21G    3,9G   16G  21% /
devtmpfs                      devtmpfs   459M       0  459M   0% /dev
tmpfs                         tmpfs      463M       0  463M   0% /dev/shm
tmpfs                         tmpfs      463M    6,3M  457M   2% /run
tmpfs                         tmpfs      5,0M    4,0K  5,0M   1% /run/lock
tmpfs                         tmpfs      463M       0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p5                vfat        60M     20M   41M  33% /boot
tmpfs                         tmpfs       93M       0   93M   0% /run/user/106
tmpfs                         tmpfs       93M       0   93M   0% /run/user/1000
/dev/mapper/VgData-LvVarSpool ext4        35G     48M   33G   1% /var/spool

On rend permanente la modification :

# echo "/dev/mapper/VgData-LvVarSpool  /var/spool   ext4    rw      0 0" >> /etc/fstab

Et on redémarre pour voir si le raspberry accepte bien LVM2 Après le reboot on a :

# df -hT
Sys. de fichiers              Type     Taille Utilisé Dispo Uti% Monté sur
/dev/root                     ext4        21G    3,9G   16G  21% /
devtmpfs                      devtmpfs   459M       0  459M   0% /dev
tmpfs                         tmpfs      463M       0  463M   0% /dev/shm
tmpfs                         tmpfs      463M    6,3M  457M   2% /run
tmpfs                         tmpfs      5,0M    4,0K  5,0M   1% /run/lock
tmpfs                         tmpfs      463M       0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p5                vfat        60M     20M   41M  33% /boot
/dev/mapper/VgData-LvVarSpool ext4        35G     48M   33G   1% /var/spool
tmpfs                         tmpfs       93M       0   93M   0% /run/user/106
tmpfs                         tmpfs       93M       0   93M   0% /run/user/1000

On vérifie qu'il ne reste rien en /var/spool2 et on en profite pour vérifier que les droits sont identiques :

# ls -al /var/spool /var/spool2
/var/spool:
total 28
drwxr-xr-x  4 root root  4096 nov.  10 19:19 .
drwxr-xr-x 13 root root  4096 nov.  10 19:19 ..
drwxr-xr-x  3 root root  4096 nov.   8 22:57 cron
drwx------  2 root root 16384 nov.  10 19:16 lost+found

/var/spool2:
total 8
drwxr-xr-x  2 root root 4096 nov.  10 19:19 .
drwxr-xr-x 13 root root 4096 nov.  10 19:19 ..

On peut supprimer /var/spool2 :

# rmdir /var/spool2

Et il nous reste énormément de place pour agrandir le système de fichiers et créer d'autres volumes logiques :

# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  VgData   1   1   0 wz--n- 444,27g 409,27g

Il vaut mieux agrandir un volume logique que de devoir le réduire car un autre a pris trop de place. Lors de la réduction, en cas de fausse manipulation on perd toutes les données concernées! Exemple à chaud, où on ajoute 900Mo :

# lvresize -L+900M /dev/mapper/VgData-LvVarSpool -r

En cas d'utilisation sur une machine virtuelle et si on a formaté le disque entier et pas une partition, on peut agrandir le disque émulé et bénéficier plus facilement d'un volume physique plus grand.

INN2

2.5

Pour installer la version 2.5.4 se référer à la doc bien connue. Mais attention, bien que la version 2.5.4 fonctionne bien sur debian, je n'ai pas réussit à la faire fonctionner sur raspbian.

2.6

L'installation de la 2.6 est possible en rajoutant un dépôt stretch ou testing, c'est beaucoup plus simple que de la compiler :

# more /etc/apt/sources.list
#deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://mirror.ox.ac.uk/sites/archive.raspbian.org/archive/raspbian/ wheezy main contrib non-free rpi
deb-src http://mirror.ox.ac.uk/sites/archive.raspbian.org/archive/raspbian/ jessie main contrib non-free rpi
deb http://httpredir.debian.org//debian testing main non-free contrib

Il vaut mieux faire du pinning :

# more /etc/apt/preferences.d/stable 
Package: *
Pin: release a=stable
Pin-priority: 900
 
Package: *
Pin: release n=jessie
Pin-priority: 900
# more /etc/apt/preferences.d/testing 
Package: *
Pin: release a=testing
Pin-priority: 100

Et ensuite :

apt-get install debian-archive-keyring -t testing
apt-get update
apt-get install inn2 -t testing


Après il reste à suivre la doc Installer_et_configurer_un_serveur_de_nouvelles . Et surtout adapter inn.conf à la version 2.6 : [[2]]

Reste à faire

Supprimer l'interface graphique inutile et consommatrice de ressources.