# 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