User Tools

Site Tools


journal:2022:day-2022-12-09

2022-12-09: Migration du serveur Mutual

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 (Diskless Remote Boot in Linux) 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 3×3 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:

  1. bond0 est utilisé pour les montages NFS de l'espace secondaire,
  2. ens10f0 pour l'adresse primaire 10.103.212.14
  3. 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
sf033 Mutual 192.168.1.14 Mutual2 192.168.1.15 eth0 eth1 10.103.212.14 10.103.212.61 eth2 eth3 eth4 ens10f0 ens10f1 ens1f0 ens1f1 ens1f2 ens1f3 10.103.212.15

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 oui1)
/data/partimag pool1/partimag non
/data/petra pool1/petra oui2)
/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 (Network File System), 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 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

1) , 2)
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
journal/2022/day-2022-12-09.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1