# 2022-12-09: Migration du serveur Mutual
{{INLINETOC}}
## Présentation
L'objectif est de configurer un serveur Rocky Linux 8.4 (socle2022_8.04) en remplacement du serveur MUTUAL.
### Configuration précédente
La configuration du serveur Mutual repose sur **DRBL** (**D**iskless **R**emote **B**oot in **L**inux) un logiciel libre, open source pour gérer le déploiement de système d'exploitation GNU / Linux sur des postes clients.
Un environnement PXE DRBL met en oeuvre :
* un serveur DHCP;
* un serveur TFTP.
* un serveur NFS
Il n'est donc pas utile d'installer toute l'application sur le nouveau serveur, seuls les services (DHCPCD, TFTP et NFS) sont nécessaires pour une exploitation courante des données sauvegardées sur l'espace de stockage `/data`.
### Organisation du nouveau serveur
- Avec 2 disques de 1,8 TB en RAID 1 on a 1,8 TB
- Avec 3 disques de 1,8 TB en RAID 5 on a 3,6 TB
- Avec 4 disques de 1,8 TB en RAID 5 on a 5,4 TB
Sur le précédent serveur on a 2398.0 GiB (2,3TiB).
Avec une répartition de 4x on a 5,4 TB d'expace de stockage alors qu'avec une répartion 3x3 on a 3,6 TB.
Pour se donner de la marge il est préférable de donner le maximum d'espace de stockage au serveur Mutualisé.
## Configuration réseau
Le nouveau serveur dispose des cartes suivantes:
```
lshw -class network -short
H/W path Device Class Description
=========================================================
/0/101/2/0 ens1f0 network I350 Gigabit Network Connection
/0/101/2/0.1 ens1f1 network I350 Gigabit Network Connection
/0/101/2/0.2 ens1f2 network I350 Gigabit Network Connection
/0/101/2/0.3 ens1f3 network I350 Gigabit Network Connection
/0/102/2/0 ens2f0 network Ethernet Controller X710 for 10GbE
/0/102/2/0.1 ens2f1 network Ethernet Controller X710 for 10GbE
/0/103/4/0 ens10f0 network I350 Gigabit Network Connection
/0/103/4/0.1 ens10f1 network I350 Gigabit Network Connection
/0/103/4/0.2 ens10f2 network I350 Gigabit Network Connection
/0/103/4/0.3 ens10f3 network I350 Gigabit Network Connection
/0/109/2/0 ens3f0 network Ethernet Controller X710 for 10GbE
/0/109/2/0.1 ens3f1 network Ethernet Controller X710 for 10GbE
```
Deux interfaces réseau et un bond constitué de 4 interfaces sont définis sur le serveur Mutual:
- **bond0** est utilisé pour les montages NFS de l'espace secondaire,
- **ens10f0** pour l'adresse primaire 10.103.212.14
- **ens10f1** pour l'adresse secondaire 10.103.212.62 afin que les clients puissent sauvegarder leurs données même lorsqu'on fait un exercice de backup.
### Configuration des interfaces
Définir l'interface ifcfg-ens10f0(provisoirement 10.103.212.15/27):
```
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=ens10f0
UUID=db974012-217c-44b6-a199-0f33b940a934
DEVICE=ens10f0
ONBOOT=yes
IPADDR=10.103.212.15
PREFIX=27
GATEWAY=10.103.212.1
DNS1=10.154.59.104
DNS2=10.156.32.33
IPV6_DISABLED=yes
```
Définir l'interface ifcfg-ens10f1 (10.103.212.62/27):
```
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
NAME=ens10f1
UUID=4ac6c0d1-37a8-4325-b393-b8b79036bf16
DEVICE=ens10f1
ONBOOT=yes
IPADDR=10.103.212.62
PREFIX=27
```
### Configuration des liens pour NFS
Le serveurs est configuré afin de partager espace de stockage sur un réseau interne avec l'ancien serveur.
Les ports des cartes filles des deux serveurs sont configurés afin d'établir un lien grande capacité.
^ Server ^ logical name ^ product ^ vendor ^ physical id ^ bus info ^ serial ^ capacity ^
| mutual1 | eth2 | I350 Gigabit Network Connection | Intel Corporation | 0 | pci@0000:07:00.0 | 40:f2:e9:1d:66:80 | 1Gbit/s |
| ::: | eth3 | I350 Gigabit Network Connection | Intel Corporation | 0.2 | pci@0000:07:00.2 | 40:f2:e9:1d:66:80 | 1Gbit/s |
| ::: | eth4 | I350 Gigabit Network Connection | Intel Corporation | 0.3 | pci@0000:07:00.3 | 40:f2:e9:1d:66:80 | 1Gbit/s |
| mutual2 | ens1f0 | I350 Gigabit Network Connection | Intel Corporation | 0 | /0/101/2/0 | | 1Gbit/s |
| ::: | ens1f1 | I350 Gigabit Network Connection | Intel Corporation | 0.1 | /0/101/2/0.1 | | 1Gbit/s |
| ::: | ens1f2 | I350 Gigabit Network Connection | Intel Corporation | 0.2 | /0/101/2/0.2 | | 1Gbit/s |
| ::: | ens1f3 | I350 Gigabit Network Connection | Intel Corporation | 0.3 | /0/101/2/0.3 | | 1Gbit/s |
'-------------------------------'
|[PK] sf033 |
| |
'-------------------------------'
^ ^ ^ ^
eth0 | | eth1 | |
10.103.212.14 | | 10.103.212.61 | |
.---------------------------------------------------+------+-----. | |
| | | |
| Mutual 192.168.1.14 | | |
| | | |
.----------------------------------------------------------------. | |
eth2 ^ eth3 ^ eth4 ^ ^ | |
| | | | '---------------------------' |
| | | | | |
| | | | | '---------------'
| | | | | |
| | | | | ens10f0 | ens10f1
ens1f0 v ens1f1 v ens1f2 v ens1f3 v | 10.103.212.15 |
.----------------------------------------------+---------------+-.
| |
| Mutual2 192.168.1.15 |
| |
.----------------------------------------------------------------.
[PK]: {"fill":"#FFAAAA","a2s:delref":true}
Définir sur chacune des cartes les options suivantes
```
IPV6INIT=no
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
```
Définir le bound0 qui sera utilisé pour les montages NFS des systèmes sur les serveurs distants:
```
cat > /etc/sysconfig/network-scripts/ifcfg-bond0<<'EOF'
DEVICE=bond0
BOOTPROTO=static
IPADDR=192.168.1.15
NETMASK=255.255.255.0
ONBOOT=yes
USERCTL=no
BONDING_OPTS='mode=1 miimon=100 primary=ens1f1'
EOF
```
Redémarrer le réseau:
```
systemctl restart NetworkManager.service
```
### Configuration des routes pour les ops
Définir les routes alternatives pour que les serveurs puissent opérer leurs sauvegardes en utilisant l'interface ens10f1 (ex eth1)
```
cat > /etc/sysconfig/network-scripts/route-ens10f1<< 'EOF'
10.153.150.25/32 via 10.103.212.34 dev ens10f1
10.153.150.27/32 via 10.103.212.34 dev ens10f1
10.153.150.50/32 via 10.103.212.34 dev ens10f1
10.153.150.70/32 via 10.103.212.34 dev ens10f1
10.37.221.50/32 via 10.103.212.34 dev ens10f1
10.37.221.70/32 via 10.103.212.34 dev ens10f1
10.153.150.43/32 via 10.103.212.34 dev ens10f1
10.153.150.45/32 via 10.103.212.34 dev ens10f1
10.37.221.25/32 via 10.103.212.34 dev ens10f1
10.37.221.27/32 via 10.103.212.34 dev ens10f1
10.37.221.43/32 via 10.103.212.34 dev ens10f1
10.37.221.45/32 via 10.103.212.34 dev ens10f1
10.153.113.154/32 via 10.103.212.34 dev ens10f1
10.153.113.35/32 via 10.103.212.34 dev ens10f1
10.153.113.38/32 via 10.103.212.34 dev ens10f1
10.153.113.55/32 via 10.103.212.34 dev ens10f1
10.153.113.56/32 via 10.103.212.34 dev ens10f1
10.153.113.58/32 via 10.103.212.34 dev ens10f1
10.156.251.153/32 via 10.103.212.34 dev ens10f1
10.156.251.154/32 via 10.103.212.34 dev ens10f1
10.153.113.96/32 via 10.103.212.34 dev ens10f1
10.153.113.98/32 via 10.103.212.34 dev ens10f1
10.87.254.50/32 via 10.103.212.34 dev ens10f1
10.67.254.50/32 via 10.103.212.34 dev ens10f1
EOF
```
## Configuration de l'espace de stockage
Les images bootables du serveur PXE sont stockées dans le dossier `/tftpboot`.
L'espace de stockage `/data` du serveur mutual comporte les sous dossiers `home`, `ops`, `ops-sav`, `partimag` et `petra`.
### Configuration avec LVM/XFS
^ device ^ nom du volume ^ taille ^ capacité ^
| /dev/vg00/vol\_partimag | vol\_partimag | 1%VG | <50,30 GiB |
| /dev/vg00/vol\_backups | vol\_backups | 30%VG | 1,47 TiB |
| /dev/vg00/vol\_data | vol\_data | 100%FREE | <3,39 TiB |
Créer un volume physique LVM sur le disque raid /dev/sdb:
```
pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
```
```
pvdisplay
"/dev/sdb1" is a new physical volume of "4,91 TiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 4,91 TiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID K8oQ3C-hXv8-wbfU-Yfxl-xsGE-oeej-hXTEdz
```
Créer le groupe de volumes vg00:
```
vg create vg00 /dev/sdb1
```
Créer les volumes logiques:
```
lvcreate -n vol_partimag -l 1%VG vg00
lvcreate -n vol_backups -l 30%VG vg00
lvcreate -n vol_data -l 100%FREE vg00
```
Formater les volumes logiques:
```
mkfs.xfs /dev/vg00/vol_partimag
mkfs.xfs /dev/vg00/vol_backups
mkfs.xfs /dev/vg00/vol_data
```
AJouter dans `/etc/fstab` les points de montages des nouveaux volumes:
```
/dev/mapper/vg00-vol_partimag /partimag xfs defaults 0 0
/dev/mapper/vg00-vol_backups /nfsshare xfs defaults 0 0
/dev/mapper/vg00-vol_data /data xfs defaults 0 0
```
Créer les points de montage
```
mkdir /partimag
mkdir /nfsshare
mkdir /data
```
Monter les volumes sur les points de montage:
```
mount /partimag
mount /nfsshare
mount /data
```
Créer les points de montage :
```
mkdir -p /data/{petra,ops,nfsshare}
mkdir -p /home/petra
```
Pour s'assurer que le système de fichier est bien monté on va créer un drapeau qui n'apparaitra pas quand tous les systèmes sont montés:\\ \\ `touch /home/petra/ceci-est-cache-quand-le-fs-est-monte`
### Configuration avec ZFS
La déduplication est gourmande en mémoire. Lorsque le système ne contient pas suffisamment de RAM, il ne peut pas mettre en cache le DDT dans la mémoire lors de la lecture et les performances du système peuvent diminuer.\\ \\ La RAM requise dépend de la taille du DDT et de la quantité de données qui seront stockées dans le pool. De plus, plus les données sont dupliquées, moins il y a d'entrées et plus le DDT est petit. Les pools adaptés à la déduplication, avec des taux de déduplication de 3x ou plus (la taille des données peut être réduite à un tiers ou moins), peuvent n'avoir besoin que de 1 à 3 Go de RAM pour 1 To de données. La taille réelle du DDT peut être estimée en dédupliquant une quantité limitée de données dans un pool de test temporaire ou en utilisant `zdb -S` dans une ligne de commande.\\ \\ Le réglage **vfs.zfs.arc.meta\_min (type=LOADER, value=bytes)** peut être utilisé pour forcer ZFS à réserver au moins la quantité de RAM donnée pour la mise en cache des métadonnées.
Pour simplifier l'installation, les distributions basées sur RHEL et CentOS dans le référentiel OpenZFS, un package zfs-release est fourni qui inclut un fichier de configuration et une clé de signature publique.
Tous les packages OpenZFS officiels sont signés à l'aide de cette clé et, par défaut, yum ou dnf vérifiera la signature d'un package avant d'autoriser son installation.
```
dnf install https://zfsonlinux.org/epel/zfs-release.el8_4.noarch.rpm
```
Pour installer des packages de style DKMS, exécuter les commandes suivantes. Ajouter d'abord le référentiel EPEL fourni par DKMS en installant le package epel-release, puis les packages kernel-devel et zfs.
```
dnf install epel-release
dnf install kernel-devel zfs
```
Pour pouvoir compiler le **dkms** celui-ci doit correspondre à la version du noyau retournée avec la commande `uname -r`.\\ Mais il arrive que le paquet installé soit en avance, si l'installation du **dkms** s'est bien passée la commande `dkms status` doit retourner la version du noyau avec la mention **installed** comme suit\\ \\ `zfs/2.1.7, 4.18.0-305.3.1.el8_4.x86_64, x86_64: installed`\\ \\ si ce n'est pas le cas il faut forcer l'installation de la bonne version ainsi:\\ `yum install "kernel-devel == $(uname -r)"`\\ \\ Mais il peut arriver que la version attachée au noyau ne soit plus disponible il faut donc récupérer la version des RPM sur les dépots puis l'installer manuellement: \\ \\ `wget https://koji.mbox.centos.org/pkgs/packages/kernel/4.18.0/305.3.1.el8/x86_64/kernel-headers-4.18.0-305.3.1.el8.x86_64.rpm`\\ `yum install kernel-headers-4.18.0-305.3.1.el8.x86_64.rpm`\\ `wget https://koji.mbox.centos.org/pkgs/packages/kernel/4.18.0/305.3.1.el8/x86_64/kernel-devel-4.18.0-305.3.1.el8.x86_64.rpm`\\ `yum install kernel-devel-4.18.0-305.3.1.el8.x86_64.rpm`\\ \\ Puis forcer l'installation du bon dkms:\\ \\ `dkms --force install zfs/2.1.7`\\ \\ Ensuite il faut adopter le lien qui pointe vers la mauvaise référence\\ \\ `ln -s /lib/modules/$(uname -r)/build /usr/src/kernels/$(uname -r)/`
Chaque sous-dossier de `/data` sont associés à un système de fichiers ZFS:
^ sous dossier btrfs ^ système de fichiers zfs ^ Déduplication ^
| /data/ops | pool1/ops | oui((Il faut définir un système de fichiers ZFS pour chacun des sous répertoires de petra sinon \\ - **rsync** va répliquer sur la racine\\ - On ne pourra pas créer de snapshots individuels)) |
| /data/partimag | pool1/partimag | non |
| /data/petra | pool1/petra | oui((Il faut définir un système de fichiers ZFS pour chacun des sous répertoires de petra sinon \\ - **rsync** va répliquer sur la racine\\ - On ne pourra pas créer de snapshots individuels)) |
| /nfsshare | pool1/nfsshare | non |
Activer le module zfs:
```
/sbin/modprobe zfs
```
Créer un nouveau pool ZFS pool1 sur le périphérique de stockage /dev/sdb, exécuter la commande suivante :
```
zpool create -f pool1 /dev/sdb
zpool status
pool: pool1
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
pool1 ONLINE 0 0 0
sdb ONLINE 0 0 0
```
Créer les systèmes de fichiers dans `pool1/petra`:
```
zfs create pool1/petra
for _rep in eas sns t13a t44c t51a txxa1 li87a st67a t44a t44v t63a; do zfs create pool1/petra/${_rep}; zfs set dedup=on pool1/petra/${_rep}; done
```
La déduplication n'est pas activée par défaut, il faut activer la déduplication sur les système de fichiers ZFS comme suit : `zfs set dedup=on pool1/petra/${_rep}`
Créer les systèmes de fichiers dans `pool1/ops`:
```
zfs create pool1/ops
for _rep in o13b o44a o44c o44e o51b o63b o77e w75b o13e o44b o44d o44f o51e o63e w75e; do zfs create pool1/ops/${_rep}; zfs set dedup=on pool1/ops/${_rep}; done
```
La déduplication n'est pas activée par défaut, il faut activer la déduplication sur les système de fichiers ZFS comme suit : `zfs set dedup=on pool1/ops/${_rep}`
Créer les systèmes de fichiers ZFS partimag et nfssahre sur le pool ZFS pool1 comme suit :
```
zfs create pool1/partimag
zfs create pool1/nfsshare
```
Vérifier que les systèmes de fichiers sont bien créés.
```
zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool1 431G 4.36T 411G /data
pool1/nfsshare 96K 4.36T 96K /data/nfsshare
pool1/ops 1.65M 4.36T 252K /data/ops
pool1/ops/o13b 96K 4.36T 96K /data/ops/o13b
pool1/ops/o13e 96K 4.36T 96K /data/ops/o13e
pool1/ops/o44a 96K 4.36T 96K /data/ops/o44a
pool1/ops/o44b 96K 4.36T 96K /data/ops/o44b
pool1/ops/o44c 96K 4.36T 96K /data/ops/o44c
pool1/ops/o44d 96K 4.36T 96K /data/ops/o44d
pool1/ops/o44e 96K 4.36T 96K /data/ops/o44e
pool1/ops/o44f 96K 4.36T 96K /data/ops/o44f
pool1/ops/o51b 96K 4.36T 96K /data/ops/o51b
pool1/ops/o51e 96K 4.36T 96K /data/ops/o51e
pool1/ops/o63b 96K 4.36T 96K /data/ops/o63b
pool1/ops/o63e 96K 4.36T 96K /data/ops/o63e
pool1/ops/o77e 96K 4.36T 96K /data/ops/o77e
pool1/ops/w75b 96K 4.36T 96K /data/ops/w75b
pool1/ops/w75e 96K 4.36T 96K /data/ops/w75e
pool1/partimag 19.7G 4.36T 19.7G /data/partimag
pool1/petra 1.21M 4.36T 188K /data/petra
pool1/petra/eas 96K 4.36T 96K /data/petra/eas
pool1/petra/li87a 96K 4.36T 96K /data/petra/li87a
pool1/petra/sns 96K 4.36T 96K /data/petra/sns
pool1/petra/st67a 96K 4.36T 96K /data/petra/st67a
pool1/petra/t13a 96K 4.36T 96K /data/petra/t13a
pool1/petra/t44a 96K 4.36T 96K /data/petra/t44a
pool1/petra/t44c 96K 4.36T 96K /data/petra/t44c
pool1/petra/t44v 96K 4.36T 96K /data/petra/t44v
pool1/petra/t51a 96K 4.36T 96K /data/petra/t51a
pool1/petra/t63a 96K 4.36T 96K /data/petra/t63a
pool1/petra/txxa1 96K 4.36T 96K /data/petra/txxa1
```
Monter le pool ZFS pool1:
```
zfs set mountpoint=/data pool1
```
## Configuration de PXE
DRBL démarre les services suivants :
* dhcpd
* inetd(tftp)
* rpcbind
* iptables
* nfsd
### Serveur dhcp
Installer le package dhcp-server
```
dnf -y install dhcp-server
```
Sauvegarder la configuration d'origine du serveur
```
cp -a /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.old
```
récupérer la configuration sur l'ancien serveur:
```
rsync -aPHv -e root@10.103.212.14:/etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf
```
### serveur tftp
Installer les paquets **tftp** et **tftp-server**
```
dnf install -y tftp-server tftp
```
L'installation crée automatiquement un service tftp et un fichier socket pour systemd sous `/usr/lib/systemd/system`. Il faut copier les fichiers de configuration systemd dans le répertoire `/etc/systemd/system`.
```
cp /usr/lib/systemd/system/tftp.service /etc/systemd/system/tftp-server.service
cp /usr/lib/systemd/system/tftp.socket /etc/systemd/system/tftp-server.socket
```
Modifier le fichier `/etc/systemd/system/tftp-server.service`:
```
[Unit]
Description=Tftp Server
Requires=tftp-server.socket
Documentation=man:in.tftpd
[Service]
ExecStart=/usr/sbin/in.tftpd -c -p -s /tftpboot
StandardInput=socket
[Install]
Also=tftp-server.socket
```
Signification des options ajoutées à la ligne ExecStart:\\ \\ * **-c**: Autorise la création de nouveaux fichiers.\\ * **-p**: utilisé pour qu'aucune vérification d'autorisation supplémentaire ne soit effectuée au-delà des contrôles d'accès normaux fournis par le système.\\ * **-s** : Recommandé pour la sécurité et la compatibilité avec les anciennes ROM de démarrage.
Exécuter `systemctl daemon-reload` pour recharger les unités.
Vérifier que le démon tftp est bien activé:
```
systemctl status tftp-server
```
Il est possible d'utiliser la méthode avec **xinetd**:
Installer **xinetd**
```
dnf install xinetd
```
Définir un service dans `/etc/xinetd.d/tftp`:
```
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -c -s /tftpboot/nbi_img
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
```
Démarrer xinetd
```
systemctl start xinetd
systemctl enable xinetd
```
### rpcbind
**rpcbind** est utilisé pour **NFS** (**N**etwork **F**ile **S**ystem), qui permet de « monter » un système de fichier distant comme s’il était local, le démon rpcbind, écoute et répond sur le port 111.
Le client **NFS** utilise le service **rpcbind** sur le serveur pour découvrir le numéro de port utilisé par nfsd.
Les fichiers hosts.allow et hosts.deny de l'ancien serveur sont vides:
```
cat /etc/hosts.allow
#
# hosts.allow This file contains access rules which are used to
# allow or deny connections to network services that
# either use the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
#
```
```
cat /etc/hosts.deny
#
# hosts.deny This file contains access rules which are used to
# deny connections to network services that either use
# the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# The rules in this file can also be set up in
# /etc/hosts.allow with a 'deny' option instead.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
#
```
### firewalld
Sur l'ancien serveur aucune règles **iptables** étaient définies dans l'ancien serveur, mais dans le nouveau serveur **firewalld est activé**:
```
systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor p>
Active: active (running) since Wed 2022-12-14 02:09:17 EST; 1 day 2h ago
Docs: man:firewalld(1)
Main PID: 1915 (firewalld)
Tasks: 2 (limit: 821162)
Memory: 30.5M
CGroup: /system.slice/firewalld.service
└─1915 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork >
déc. 14 02:09:16 localhost.localdomain systemd[1]: Starting firewalld - dynamic>
déc. 14 02:09:17 localhost.localdomain systemd[1]: Started firewalld - dynamic >
déc. 14 02:09:17 localhost.localdomain firewalld[1915]: WARNING: AllowZoneDrift>
```
### NFS
Installer le paquet **nfs-utils**:
```
dnf install nfs-utils -y
```
Indiquer dans le fichier `/etc/exports` les dossiers exportés pour PXE:
```
cat > /etc/exports<<'EOF'
/data/ops 192.168.1.14(rw,async,no_root_squash)
/data/petra 192.168.1.14(rw,async,no_root_squash)
EOF
```
Redémarrer le serveur nfs:
```
systemctl restart nfs-server.service
```
Pour les systèmes avec le service Firewalld en cours d'exécution, autoriser les ports NFS:\\ \\ `firewall-cmd --add-service=nfs`\\ `firewall-cmd --add-service={nfs3,mountd,rpc-bind}`\\ `firewall-cmd --runtime-to-permanent`
## Reprise des données
Avant d'utiliser **rsync** avec **ssh** il faut adapter la configuration du démon sshd sur le serveur (cf [[notes:ssh-session-timeout]])\\ \\ Ajouter les lignes suivantes à `/etc/ssh/sshd_config`:\\ `ClientAliveInterval 600`\\ `ClientAliveCountMax 0`
### Montage des systèmes de fichiers
Monter les systèmes de fichiers sur nfsshare
```
mount -t nfs 192.168.1.15:/data/petra /nfsshare/petra
mount -t nfs 192.168.1.15:/data/ops /nfsshare/ops
```
### Automatisation de la synchronisation:
- transfert de la cle publique de **mutual1** vers **mutual-new**: `scp ~/.ssh/id_rsa_SNS.pub root@10.103.212.15:`
- création de `authorized_keys` sur le root de **mutual-new**: `touch ~/.ssh/authorized_keys`
- intégration de la clé publique de **mutual1** dans le fichier `authorized_keys` du root de **mutual-new**: `cat ~/id_rsa_SNS.pub >> ~/.ssh/authorized_keys`
Modifier le script de synchronisation dans le /root de **mutual1**:
```
cat > ~/syncro-nfsshare.sh << 'EOF'
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
date > root/syncro-nfsshare.log
rsync -av --no-i-r --delete /data/ops/ /nfsshare/ops/ >> /root/syncro-nfsshare.log && \
rsync -av --no-i-r --delete /data/petra/ /nfsshare/petra/ >> /root/syncro-nfsshare.log && \
ssh root@10.103.212.15 "zpool list" >> ~/syncro-nfsshare.log
tail -n40 /root/synchro-nfsshare.log | mailx -s "synchro nfsshare $(date)" -S smtp=smtp://smtp.oc.dgfip:25 -S from="esi.marseille.snsreseau@dgfip.finances.gouv.fr" esi.marseille.snsreseau@dgfip.finances.gouv.fr
EOF
```
Activer le programmation du contrôle dans cron de **mutual1** avec `crontab -e`:
```
00 09 * 6 * /root/syncro-nfsshare.sh
```
### Synchronisation du répertoire home
Les répertoires des utilisateurs du système (à l'exclusion du répertoire `/root` et `/home/petra`) doivent être récupérés.
```
rsync -aPHv -e 'ssh --exclude /home/petra /home root@10.103.212.15:/
```
### Synchronisation du répertoire tftpboot
Les images **PXE** sont dans le répertoire des images d'amorçage `/tftpboot` (3,8G), ce répertoire doit être intégralement récupéré.
```
rsync -aPHv -e ssh /tftpboot root@10.103.212.15:/
rsync -aL -e ssh /tftpboot root@10.103.212.15:/
```
La seconde synchronisation avec l'opérateur **-L** permet de récupérer les cibles de liens symboliques et non pas les liens.
Liens pointant vers un emplacement inexistant:
```
symlink has no referent: "/tftpboot/node_root/boot/boot"
symlink has no referent: "/tftpboot/node_root/etc/grub.conf"
symlink has no referent: "/tftpboot/node_root/etc/httpd/modules"
symlink has no referent: "/tftpboot/node_root/lib/cpp"
symlink has no referent: "/tftpboot/node_root/lib/modules/2.6.32-358.el6.x86_64/build"
symlink has no referent: "/tftpboot/node_root/lib/modules/2.6.32-358.el6.x86_64/source"
symlink has no referent: "/tftpboot/node_root/tmp/boot/boot"
symlink has no referent: "/tftpboot/node_root/usr/lib64/libustr-1.0.so.1"
symlink has no referent: "/tftpboot/nodes/10.103.212.20/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.20/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.20/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.20/etc/sysconfig/network-scripts/ifdown"
symlink has no referent: "/tftpboot/nodes/10.103.212.21/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.21/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.21/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.21/etc/sysconfig/network-scripts/ifdown"
symlink has no referent: "/tftpboot/nodes/10.103.212.22/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.22/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.22/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.22/etc/sysconfig/network-scripts/ifdown"
symlink has no referent: "/tftpboot/nodes/10.103.212.23/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.23/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.23/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.23/etc/sysconfig/network-scripts/ifdown"
symlink has no referent: "/tftpboot/nodes/10.103.212.24/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.24/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.24/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.24/etc/sysconfig/network-scripts/ifdown"
symlink has no referent: "/tftpboot/nodes/10.103.212.25/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.25/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.25/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.25/etc/sysconfig/network-scripts/ifdown"
symlink has no referent: "/tftpboot/nodes/10.103.212.26/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.26/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.26/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.26/etc/sysconfig/network-scripts/ifdown"
symlink has no referent: "/tftpboot/nodes/10.103.212.27/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.27/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.27/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.27/etc/sysconfig/network-scripts/ifdown"
symlink has no referent: "/tftpboot/nodes/10.103.212.28/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.28/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.28/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.28/etc/sysconfig/network-scripts/ifdown"
symlink has no referent: "/tftpboot/nodes/10.103.212.29/etc/grub.conf"
symlink has no referent: "/tftpboot/nodes/10.103.212.29/etc/httpd/modules"
symlink has no referent: "/tftpboot/nodes/10.103.212.29/etc/sysconfig/network-scripts/ifup"
symlink has no referent: "/tftpboot/nodes/10.103.212.29/etc/sysconfig/network-scripts/ifdown"
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
```
L'image de boot de DRBL utilise le répertoire `/usr` du serveur, mais **clonezilla** a été compilé pour utiliser les librairies de l'ancien serveur il faut donc le récupérer de l'ancien serveur :
```
rsync -aPHv -e ssh /usr/ root@10.103.212.15:/tftpboot/node_usr/
rsync -aL -e ssh /usr/ root@10.103.212.15:/tftpboot/node_usr/
```
Liens pointant vers un emplacement inexistant:
```
symlink has no referent: "/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libmudflap.a"
symlink has no referent: "/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libgomp.so"
symlink has no referent: "/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libmudflapth.a"
symlink has no referent: "/usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/libmudflap.a"
symlink has no referent: "/usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/libgomp.so"
symlink has no referent: "/usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/libmudflapth.a"
symlink has no referent: "/usr/lib/mkpxeinitrd-net/initrd-skel/etc/resolv.conf"
symlink has no referent: "/usr/share/doc/redhat-release"
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
```
* **libmudflap**: contient la bibliothèque de support partagé GCC qui est nécessaire pour le support de mudflap (Mudflap a été supprimé de GCC 4.9 et versions ultérieures)
* **libgomp**: contient la bibliothèque de support partagé GCC qui est nécessaire pour le support OpenMP v3.0
Il faut modifier le fichier `/etc/fstab` dans chaque node du répertoire `/tftpboot/node_root/` afin de monter le répertoire `/tftpboot/node_usr/` à la place de `/usr`:
```
10.103.212.14:/tftpboot/node_usr /usr nfs ro,soft,nfsvers=3,tcp,,defaults 0 0
```
Si **SELinux** est activé il faut vérifier les permissions:
```
ls -Z /tftpboot/
unconfined_u:object_r:default_t:s0 5510HI-CMW710-R1311P02.ipe
unconfined_u:object_r:default_t:s0 nbi_img
unconfined_u:object_r:default_t:s0 node_root
unconfined_u:object_r:default_t:s0 nodes
```
Les permissions par défaut **object\_r** et **default\_t** doivent être modifiées en **system\_r** et **tftpd\_t**:
```
chcon -R -r system_r /tftpboot/
chcon -R -t tftpd_t /tftpboot/
```
* **-u, --user=UTILISATEUR**: définit l'utilisateur UTILISATEUR dans le contexte de sécurité cible
* **-r, --role=RÔLE**: définit le rôle RÔLE dans le contexte de sécurité cible
* **-t, --type=TYPE**: définit le type TYPE dans le contexte de sécurité cible
```
ls -Z /tftpboot/
unconfined_u:system_r:tftpd_t:s0 5510HI-CMW710-R1311P02.ipe
unconfined_u:system_r:tftpd_t:s0 nbi_img
unconfined_u:system_r:tftpd_t:s0 node_root
unconfined_u:system_r:tftpd_t:s0 nodes
```
Vérifier ensuite les autorisations **tftp** dans **SELinux**:
```
getsebool -a | grep tftp
tftp_anon_write --> off
tftp_home_dir --> off
```
Si l'écriture **tftp** est désactivée comme indiqué ci-dessus, il faut l'activer avec la commande **setsebool**:
```
setsebool -P tftp_anon_write 1
setsebool -P tftp_home_dir 1
```
Les modifications ci-dessus apportées à **SELinux** sont permanentes, il n'est donc plus nécessaire de modifier les fichiers de configuration de **SELinux**.
```
getsebool -a | grep tftp
tftp_anon_write --> on
tftp_home_dir --> on
```
### Synchronisation du répertoire partimag
Les images **clonezilla** sont dans le répertoire des images `/data/partimag` (20G), ce répertoire doit être intégralement récupéré.
```
rsync -aPHv -e ssh /data/partimag/ root@10.103.212.15:/home/partimag/
sent 21153316226 bytes received 4029 bytes 112219205.60 bytes/sec
total size is 21150720341 speedup is 1.00
```
Les permissions par défaut **object\_r** et **default\_t** doivent être modifiées en **system\_r** et **tftpd\_t**:
```
chcon -R -r system_r /home/
chcon -R -t tftpd_t /home/
```
* **-u, --user=UTILISATEUR**: définit l'utilisateur UTILISATEUR dans le contexte de sécurité cible
* **-r, --role=RÔLE**: définit le rôle RÔLE dans le contexte de sécurité cible
* **-t, --type=TYPE**: définit le type TYPE dans le contexte de sécurité cible
### Synchronisation des répertoires petra et ops
Les sauvegardes distantes sont dans le répertoire `/data/petra` et `/data/ops`, ces répertoires doivent être intégralement récupérés.
```
rsync -av --no-i-r --delete /data/ops/ /nfsshare/ops/
sent 248215746694 bytes received 132142800 bytes 9685766.25 bytes/sec
total size is 247792694310 speedup is 1.00
rsync -av --no-i-r --delete /data/petra/ /nfsshare/petra/
sent 995329445884 bytes received 15745231 bytes 58953723.52 bytes/sec
total size is 995153645621 speedup is 1.00
```
## Migration du serveur Mutual
Le jour du remplacement du serveur
### Import du trousseau de clef
Le répertoire `~/.ssh` héberge une clé privée `~/.ssh/id_rsa` et une clé publique qui peut par ex. s'appeler `id_rsa.pub` (sur l'ancien serveur elle s'appelle `id_rsa_SNS.pub`).
Ce trousseau est, en principe, unique pour chaque utilisateur et différent sur chaque machine. Il est utilisé lors de l'authentification sans mot de passe.
Afin de permettre aux clients du serveur Mutual de continuer à pousser leurs sauvegardes sur le nouveau serveur avec le compte **root**, il faut implanter l'ancien couple de ce compte à la place de celui créé lors de l'installation du nouveau serveur.
Sur le nouveau serveur (10.103.212.15), sauvegarder le trousseau:
```
tar czf /home/root-ssh-mutual-new-$(date +%Y-%m-%d).tgz /root/.ssh
tar czf /home/root-etc-mutual-new-$(date +%Y-%m-%d).tgz /etc/ssh/ssh_*
```
Sur l'ancien serveur (10.103.212.14), sauvegarder le trousseau:
```
tar czf /home/root-ssh-mutual-old-$(date +%Y-%m-%d).tgz /root/.ssh
tar czf /home/root-etc-mutual-old-$(date +%Y-%m-%d).tgz /etc/ssh/ssh_*
```
Sur l'ancien serveur (10.103.212.14), implanter le trousseau de clef du nouveau serveur:
```
scp root@10.103.212.15:/home/root-ssh-mutual-new-$(date +%Y-%m-%d).tgz ~/
scp root@10.103.212.15:/home/root-etc-mutual-new-$(date +%Y-%m-%d).tgz ~/
mv ~/.ssh ~/.ssh-old
cp -a /etc/ssh/ /etc/ssh-old
tar xzf root-ssh-mutual-new-$(date +%Y-%m-%d).tgz -C /
tar xzf root-etc-mutual-new-$(date +%Y-%m-%d).tgz -C /
```
La nouvelle clé privée doit correspondre à la clé `id_rsa_SNS.pub`, dans le répertoire `~/.ssh`, utiliser la commande **diff** suivante pour voir si les clés vont ensemble:
```
cd
diff -q <( ssh-keygen -y -e -f "~/root/.ssh/id_rsa" ) <( ssh-keygen -y -e -f "~/root/.ssh/id_rsa.pub" )
```
Sur le nouveau serveur (10.103.212.15), implanter le trousseau de clef de l'ancien serveur:
```
scp root@10.103.212.14:/home/root-ssh-mutual-old-$(date +%Y-%m-%d).tgz ~/
scp root@10.103.212.14:/home/root-etc-mutual-old-$(date +%Y-%m-%d).tgz ~/
mv ~/.ssh ~/.ssh-old
cp -a /etc/ssh /etc/ssh-old
tar xzf root-ssh-mutual-old-$(date +%Y-%m-%d).tgz -C /
tar xzf root-etc-mutual-old-$(date +%Y-%m-%d).tgz -C /
```
La nouvelle clé privée doit correspondre à la clé `id_rsa_SNS.pub`, dans le répertoire `~/.ssh`, utiliser la commande **diff** suivante pour voir si les clés vont ensemble:
```
diff -q <( ssh-keygen -y -e -f "~/root/.ssh/id_rsa" ) <( ssh-keygen -y -e -f "~/root/.ssh/id_rsa_SNS.pub" )
```
Chaque utilisateur a une clé privée, c'est un document sensible très personnel, il faut y appliquer des droits très restrictifs : `r-x------ (500)` pour le répertoire `.ssh` et `r-------- (400)` pour le fichier `id_rsa`.
### Re configuration des interfaces
Définir l'interface ifcfg-ens10f0( 10.103.212.14/27):
```
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=ens10f0
UUID=db974012-217c-44b6-a199-0f33b940a934
DEVICE=ens10f0
ONBOOT=yes
IPADDR=10.103.212.14
PREFIX=27
GATEWAY=10.103.212.1
DNS1=10.154.59.104
DNS2=10.156.32.33
IPV6_DISABLED=yes
```
Re définir le bound0 qui sera utilisé pour les montages NFS:
```
cat > /etc/sysconfig/network-scripts/ifcfg-bond0<<'EOF'
DEVICE=bond0
BOOTPROTO=static
IPADDR=192.168.1.14
NETMASK=255.255.255.0
ONBOOT=yes
USERCTL=no
BONDING_OPTS='mode=1 miimon=100 primary=ens1f1'
EOF
```
Redémarrer le réseau:
```
systemctl restart NetworkManager.service
```
### Montage de /home/petra
Ajouter dans /etc/fstab le montage automatique:
```
/data/petra /home/petra none bind 0 0
```
Monter le répertoire `/home/petra`:
```
mount /home/petra
```
### Exports des fs PXE
Recharger le fichier /etc/exports avec les dossiers nécessaires à PXE
```
cat > /etc/exports<<'EOF'
# Generated by DRBL at 15:21:52 2019/07/11
/tftpboot/node_root 10.103.212.20(ro,async,no_root_squash,no_subtree_check)
/usr 10.103.212.20(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.20(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.20(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.20(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/node_root 10.103.212.21(ro,async,no_root_squash,no_subtree_check)
/tftpboot/node_usr 10.103.212.21(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.21(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.21(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.21(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/node_root 10.103.212.22(ro,async,no_root_squash,no_subtree_check)
/tftpboot/node_usr 10.103.212.22(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.22(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.22(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.22(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/node_root 10.103.212.23(ro,async,no_root_squash,no_subtree_check)
/tftpboot/node_usr 10.103.212.23(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.23(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.23(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.23(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/node_root 10.103.212.24(ro,async,no_root_squash,no_subtree_check)
/tftpboot/node_usr 10.103.212.24(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.24(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.24(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.24(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/node_root 10.103.212.25(ro,async,no_root_squash,no_subtree_check)
/usr 10.103.212.25(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.25(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.25(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.25(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/node_root 10.103.212.26(ro,async,no_root_squash,no_subtree_check)
/tftpboot/node_usr 10.103.212.26(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.26(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.26(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.26(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/node_root 10.103.212.27(ro,async,no_root_squash,no_subtree_check)
/tftpboot/node_usr 10.103.212.27(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.27(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.27(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.27(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/node_root 10.103.212.28(ro,async,no_root_squash,no_subtree_check)
/tftpboot/node_usr 10.103.212.28(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.28(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.28(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.28(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/node_root 10.103.212.29(ro,async,no_root_squash,no_subtree_check)
/tftpboot/node_usr 10.103.212.29(ro,async,no_root_squash,no_subtree_check)
/home 10.103.212.29(rw,sync,no_root_squash,no_subtree_check,crossmnt)
/var/spool/mail 10.103.212.29(rw,sync,root_squash,no_subtree_check)
/opt 10.103.212.29(ro,async,no_root_squash,no_subtree_check,crossmnt)
/tftpboot/nodes/10.103.212.20/ 10.103.212.20(rw,sync,no_root_squash,no_subtree_check)
/tftpboot/nodes/10.103.212.21/ 10.103.212.21(rw,sync,no_root_squash,no_subtree_check)
/tftpboot/nodes/10.103.212.22/ 10.103.212.22(rw,sync,no_root_squash,no_subtree_check)
/tftpboot/nodes/10.103.212.23/ 10.103.212.23(rw,sync,no_root_squash,no_subtree_check)
/tftpboot/nodes/10.103.212.24/ 10.103.212.24(rw,sync,no_root_squash,no_subtree_check)
/tftpboot/nodes/10.103.212.25/ 10.103.212.25(rw,sync,no_root_squash,no_subtree_check)
/tftpboot/nodes/10.103.212.26/ 10.103.212.26(rw,sync,no_root_squash,no_subtree_check)
/tftpboot/nodes/10.103.212.27/ 10.103.212.27(rw,sync,no_root_squash,no_subtree_check)
/tftpboot/nodes/10.103.212.28/ 10.103.212.28(rw,sync,no_root_squash,no_subtree_check)
/tftpboot/nodes/10.103.212.29/ 10.103.212.29(rw,sync,no_root_squash,no_subtree_check)
EOF
```
Redémarrer le serveur nfs:
```
systemctl restart nfs-server.service
```
Vérifier que le démon **NFS** est bien activé:
```
systemctl status nfs-server
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor>
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: active (exited) since Wed 2023-01-11 15:05:44 CET; 1min 44s ago
Process: 8511 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCE>
Process: 8508 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCC>
Process: 8505 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
Process: 8536 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then s>
Process: 8524 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
Process: 8522 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCE>
Main PID: 8536 (code=exited, status=0/SUCCESS)
janv. 11 15:05:44 localhost.localdomain systemd[1]: Starting NFS server and ser>
janv. 11 15:05:44 localhost.localdomain systemd[1]: Started NFS server and serv>
lines 1-15/15 (END)
```
### Ativer le service dhcpcd
```
systemctl enable --now dhcpd
```
Vérifier que le serveur est actif:
```
systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor prese>
Active: active (running) since Wed 2023-01-11 14:24:12 CET; 8min ago
Docs: man:dhcpd(8)
man:dhcpd.conf(5)
Main PID: 8259 (dhcpd)
Status: "Dispatching packets..."
Tasks: 1 (limit: 821162)
Memory: 8.9M
CGroup: /system.slice/dhcpd.service
└─8259 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -grou>
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]:
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]:
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]: No subnet declaration for >
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]: ** Ignoring requests on en>
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]: you want, please write >
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]: in your dhcpd.conf file>
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]: to which interface ens2>
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]:
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]: Sending on Socket/fallba>
janv. 11 14:24:12 localhost.localdomain dhcpd[8259]: Server starting service.
lines 1-22/22 (END)
```
Pour les systèmes avec le service Firewalld en cours d'exécution, autoriser les ports DHCP (Le serveur DHCP utilise [67/UDP]):\\ \\ `firewall-cmd --add-service=dhcp`\\ `firewall-cmd --runtime-to-permanent`
### Activer le service tftp
```
sudo systemctl enable --now tftp-server
```
Vérifier que le démon est bien activé:
```
systemctl status tftp-server
● tftp-server.service - Tftp Server
Loaded: loaded (/etc/systemd/system/tftp-server.service; indirect; vendor pr>
Active: active (running) since Wed 2023-01-11 14:54:45 CET; 59s ago
Docs: man:in.tftpd
Main PID: 8484 (in.tftpd)
Tasks: 1 (limit: 821162)
Memory: 376.0K
CGroup: /system.slice/tftp-server.service
└─8484 /usr/sbin/in.tftpd -c -p -s /tftpboot
janv. 11 14:54:45 localhost.localdomain systemd[1]: Started Tftp Server.
```
Pour les systèmes avec le service Firewalld en cours d'exécution, autoriser les ports TFTP :\\ \\ `sudo firewall-cmd --add-service=tftp`\\ `sudo firewall-cmd --runtime-to-permanent`
### Récupération des scriptes
Récupérer tous les scriptes dans le répertoire `/root` de l'ancien serveur:
```
scp root@10.103.212.15:~/syncro* ~/
```
Et adapter les scriptes `syncro-nfsshare-ops.sh` et `syncro-nfsshare-petra.sh`.
```
#!/bin/bash
# Script pour faire un snapshot en utilisant les liens physiques
set -o errexit
set -o nounset
set -o pipefail
readonly SOURCE_DIR="/data/ops/"
readonly BACKUP_DIR="/data/ops/"
LC_TIME="fr_FR.UTF-8" BACKUP_PATH="/data/backups/$(date -d yesterday +%d)/ops/"
#rsync -av --delete ${SOURCE_DIR} ${BACKUP_DIR}>> /root/synchro-nfsshare-ops.log
LC_TIME="fr_FR.UTF-8" TIMEFORMAT="Sauvegarde ${SOURCE_DIR} de "$(date -d yesterday +%A)" en %R secondes ..."
{ time {
cd ${BACKUP_DIR}
for _rep in */ ; do
echo "ammorce de ${BACKUP_PATH}${_rep%/}/"
LATEST_LINK="${BACKUP_PATH}${_rep%/}/"
if [ -d "${LATEST_LINK}" ]
then
rm -rf "${LATEST_LINK}"
fi
mkdir -p "${LATEST_LINK}"
# La commande cp ci-dessous equivaut à la commande rsync avec --link-dest
# cp -al "${BACKUP_DIR}/${_rep}" "${LATEST_LINK}"
rsync -a --link-dest="${BACKUP_DIR}/${_rep}" "${BACKUP_DIR}/${_rep}" "${LATEST_LINK}"
touch "${LATEST_LINK}/$(date -d yesterday +%A-%w-%d)"
done
"$@" 2>&3
}
} 3>&2 2>> /root/synchro-nfsshare-ops.log
tail -n40 /root/synchro-nfsshare-ops.log | mailx -s "synchro nfsshare ops $(date)" -S smtp=smtp://smtp.oc.dgfip:25 -S from="esi.marseille.snsreseau@dgfip.finances.gouv.fr" esi.marseille.snsreseau@dgfip.finances.gouv.fr
```
```
#!/bin/bash
# Script pour faire un snapshot en utilisant les liens physiques
set -o errexit
set -o nounset
set -o pipefail
readonly SOURCE_DIR="/data/petra/"
readonly BACKUP_DIR="/data/petra/"
LC_TIME="fr_FR.UTF-8" BACKUP_PATH="/data/backups/$(date -d yesterday +%d)/petra/"
#rsync -av --delete ${SOURCE_DIR} ${BACKUP_DIR}>> /root/synchro-nfsshare-petra.log
LC_TIME="fr_FR.UTF-8" TIMEFORMAT="Sauvegarde ${SOURCE_DIR} de "$(date -d yesterday +%A)" en %R secondes ..."
{ time {
cd ${BACKUP_DIR}
for _rep in */ ; do
echo "ammorce de ${BACKUP_PATH}${_rep%/}/"
LATEST_LINK="${BACKUP_PATH}${_rep%/}/"
if [ -d "${LATEST_LINK}" ]
then
rm -rf "${LATEST_LINK}"
fi
mkdir -p "${LATEST_LINK}"
# La commande cp ci-dessous equivaut à la commande rsync avec --link-dest
# cp -al "${BACKUP_DIR}/${_rep}" "${LATEST_LINK}"
rsync -a --link-dest="${BACKUP_DIR}/${_rep}" "${BACKUP_DIR}/${_rep}" "${LATEST_LINK}"
touch "${LATEST_LINK}/$(date -d yesterday +%A-%w-%d)"
done
"$@" 2>&3
}
} 3>&2 2>> synchro-nfsshare-petra.log
tail -n40 /root/synchro-nfsshare-petra.log | mailx -s "synchro nfsshare petra $(date)" -S smtp=smtp://smtp.oc.dgfip:25 -S from="esi.marseille.snsreseau@dgfip.finances.gouv.fr" esi.marseille.snsreseau@dgfip.finances.gouv.fr
```
### Installer la crontab
```
# SYNCHRONISATION
30 5,21 * * * /home/petra/t13a/eas/synchro/synchro.pl 2>&1 >> /home/petra/t13a/eas/synchro/log
40 5,21 * * * /home/petra/t51a/eas/synchro/synchro.pl 2>&1 >> /home/petra/t51a/eas/synchro/log
50 5,21 * * * /home/petra/t63a/eas/synchro/synchro.pl 2>&1 >> /home/petra/t63a/eas/synchro/log
55 5,21 * * * /home/petra/t44a/eas/synchro/synchro.pl 2>&1 >> /home/petra/t44a/eas/synchro/log
10 1 * * * /home/petra/t44c/eas/synchro/synchro.pl 2>&1 >> /home/petra/t44c/eas/synchro/log
#######################################
# synchro t44v temporairement desactivee
20 1 * * * /home/petra/t44v/eas/synchro/synchro.pl 2>&1 >> /home/petra/t44v/eas/synchro/log
# synchro alternative temporaire pour t44v (sur /nfsshare)
#20 1 * * * /home/petra/synct44v.pl 2>&1 >> /nfsshare/t44v/eas/synchro/log
###################################
00 20 * * 1-5 /home/petra/li87a/eas/synchro/synchro.pl 2>&1 >> /home/petra/li87a/eas/synchro/log
00 3 * * * /home/petra/st67a/eas/synchro/synchro.pl 2>&1 >> /home/petra/st67a/eas/synchro/log
00 7 * * * /root/syncro-nfsshare.sh
# minute heure jour-du-mois numero-du-mois jour-de-la-semaine(6=samedi)
#0 8 25 8 6 rsync -avP /data/ops/o13e /data/ops-o13e-25aout2018/ 2>&1 >> /data/sauveOPS.log
```
Sur l'ancien serveur toutes les entrées de la crontab sont commentées