Outils pour utilisateurs

Outils du site


nethserver_201_cahier_02_odoo_12

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nethserver_201_cahier_02_odoo_12 [2019-08-13 14:47] michelandrenethserver_201_cahier_02_odoo_12 [2025-01-12 19:30] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +\\ 
 +[[cours_nethserver_101|{{ Images_Cahier-201-02-000.png?650 }}]]
 +\\ 
 +====== Description générale ======
  
 +===== Introduction =====
 +
 +Ce document décrit l'installation et la mise à jour d'**Odoo-12** sur un Serveur NethServer-7.6.1810.
 +
 +//Référence:// [[https://www.micronator.org/affaires/produit/sme-9-2-odoo-11/|https://www.micronator.org/affaires/produit/sme-9-2-odoo-11/]].\\ 
 +//Référence:// [[https://linuxize.com/post/install-odoo-12-on-centos-7/#disqus_thread|https://linuxize.com/post/install-odoo-12-on-centos-7/#disqus_thread]].\\ 
 +//Référence:// [[https://linuxize.com/post/how-to-deploy-odoo-12-on-ubuntu-18-04/|https://linuxize.com/post/how-to-deploy-odoo-12-on-ubuntu-18-04/]].\\ //
 +Référence:// [[https://community.nethserver.org/t/howto-install-odoo-11/10345|https://community.nethserver.org/t/howto-install-Odoo-11/10345]].
 +
 +==== Le logiciel Odoo ====
 +
 +//Référence:// [[http://fr.wikipedia.org/wiki/Odoo|http://fr.wikipedia.org/wiki/Odoo]]
 +
 +Odoo, anciennement //OpenERP// et //Tiny ERP//, est initialement un progiciel open-source de gestion intégrée comprenant de très nombreux modules permettant de simplifier la gestion d'une société dans son ensemble. Le logiciel est utilisé par plus de deux millions d’utilisateurs pour gérer leur entreprise à travers le monde. Odoo est le système ERP open-source le plus populaire.
 +
 +Il existe une version //Communautaire// gratuite, sous licence //LGPLv3//, et une version //Entreprise// sous licence propriétaire Odoo Enterprise EditionLicense v1.0.
 +
 +À l’origine un //ERP//, le logiciel s’est vu étendre ses fonctionnalités à des applications de front office //(CMS, e-commerce, blogs, forums, nouvelles, événements, chat en direct, offre d'emplois…)//.
 +
 +L’aspect //LIBRE// du logiciel a permis le développement de nombreux modules tiers créés par sa communauté de développeurs. Ces applications sont pour certaines officiellement validées par l’éditeur tandis que d’autres ne sont destinées qu’à des versions spécifiques.
 +
 +Le logiciel compte 260 modules officiels et 7300 modules communautaires.
 +
 +En décembre 2012, la version 7.0 d'//OpenERP// est lancée et peut être testée en ligne, téléchargée ou vue en version de démonstration.
 +
 +Mai 2014: //OpenERP// change de nom et devient //Odoo//.
 +
 +==== La société éditrice OpenERP SA ====
 +
 +//OpenERP S.A.// est également le nom de l’entreprise qui édite le logiciel. Dans ce document, on utilise le terme Odoo pour désigner le logiciel et //OpenERP SA// pour désigner l’entreprise de façon univoque.
 +
 +===== Étapes =====
 +
 +  - Préparation de l'environnement de travail incluant l'installation de la //Collection PHP//.
 +  - Installation du serveur de bases de données //PostgreSQL-11//.
 +  - Installation de la //Collection RH-Python36//, pour ne pas interférer avec la version de Python fournie par défaut avec le Serveur NethServer.
 +  - Installation des prérequis pour Odoo-12.
 +  - Depuis GitHuB, téléchargement du code Odoo de la branche 12 et installation.
 +  - Redirection sécurisée.
 +  - Post-scriptum Odoo.
 +  - Sauvegarde de la base de données PostgreSQL.
 +  - Programmer un script de sauvegarde de la base de données PostgreSQL et créer une tâche ''cron'' qui l'activera quotidiennement. Ainsi, la sauvegarde PostgreSQL sera intégrée à la sauvegarde régulière du Serveur NethServer.
 +  - Sauvegarde quotidienne NethServer.
 +  - Mises à jour de: Odoo, PostgreSQL, RH-Python36, npm/node, less et less-plugin-clean-css, wkhtmltox, et du Serveur NethServer.
 +
 +{{Images_icone-201-003_Note.png?25}} Ce tutoriel assume que vous avez réalisé une installation d'un Serveur NethServer-7.6.1810 sur votre réseau LOCAL et dédié à Odoo seulement. Il est aussi assumé que vous allez rouler Odoo-12 et PostgreSQL-11 __sur le même serveur__.
 +\\ 
 +
 +===== But de ce cahier =====
 +
 +Installer et configurer Odoo-12 sur un Serveur NethServer-7.6.1810 virtuel sur le réseau LOCAL. Les procédures sont exactement les mêmes pour un Serveur NethServer physique directement branché ou non à l'Internet.
 +
 +{{ Images_Cahier-201-02-005.png?550 }}
 +\\ 
 +
 +===== Cours NethServer-101 =====
 +
 +Le //Cours NethServer-101//, se voulant une base solide pour la création d'un site de **Commerce en ligne**, comprend plusieurs cahiers:
 +
 +  - [[nethserver_101_cahier_01_linux|Cahier-01]]: -> Les bases de Linux.
 +  - [[nethserver_101_cahier_02_installations_configurations_logiciels_prerequis|Cahier-02]]: -> Installation et configuration des logiciels prérequis sur le poste de travail.
 +  - [[nethserver_101_cahier_03_creation_un_serveur_virtuel|Cahier-03]]: -> Création d'un Serveur NethServer virtuel.
 +  - [[nethserver_101_cahier_04_local_certificat_let_encrypt|Cahier-04]]: -> Serveur NethServer LOCAL & Let's Encrypt.
 +  - [[nethserver_101_cahier_05_vdsl_fqdn_internet_et_nethserver|Cahier-05]]: -> FAI, modem VDSL, domaine FQDN(( **FQDN**: Dans le //DNS//, un Fully Qualified Domain Name //(FQDN, ou nom de domaine complètement qualifié)// est un nom de domaine qui révèle la position absolue d'un nœud dans l'arborescence //DNS// en indiquant tous les domaines de niveau supérieur jusqu'à la racine. On parle également de domaine absolu, par opposition aux domaines relatifs. Par convention, le //FQDN// est ponctué par un point final.\\ 
 +//Référence:// [[https://fr.wikipedia.org/wiki/Fully_qualified_domain_name|https://fr.wikipedia.org/wiki/Fully_qualified_domain_name]]. \\ \\ )) et Serveur NethServer physique.
 +  - [[nethserver_101_cahier_06_nethserver_wordPress|Cahier-06]]: -> Installation de WordPress.
 +  - [[nethserver_101_cahier_07_nethserver_wordPress_wordfence|Cahier-07]]: -> Installation de l'extension de sécurité Wordfence.
 +  - [[nethserver_101_cahier_08_woocommerce_paypal_stripe|Cahier-08]]: -> WooCommerce, comptes chez Stripe et   PayPal pour les paiements en ligne.
 +  - [[nethserver_101_cahier_09_duplicator_migration|Cahier-09]]: -> Sauvegarde/restauration ou migration d'un site avec l'extension Duplicator.
 +  - [[nethserver_101_cahier_10_mandataire_inverse|Cahier-10]]: -> Serveur mandataire inversé.
 +  - [[nethserver_101_cahier_11_nethserver_backuppc|Cahier-11]]: -> Sauvegarde/restauration avec BackupPC.
 +
 +==== Cours NethServer-201 ====
 +
 +Le //Cours NethServer-201// décrit l'installation et la configuration d'applications sur un serveur NethServer.
 +
 +  - [[nethserver_201_cahier_01_nethserver_et_dolibarr|Cahier-201-01]]: -> Dolibarr.
 +  - [[nethserver_201_cahier_02_odoo_12|Cahier-201-02]]: -> Odoo-12.
 +  - [[nethserver_201_cahier_03_mediawiki|Cahier-201-03]]: -> MediaWiki.
 +  - [[nethserver_201_cahier_04_dokuwiki|Cahier-201-04]]: -> DokuWiki.
 +  - [[nethserver_201_cahier_05_moodle|Cahier-201-05]]: -> Moodle.
 +  - [[nethserver_201_cahier_06_proxmox|Cahier-201-06]]: -> Proxmox.
 +  - [[nethserver_201_cahier_07_flectra|Cahier-201-07]]: -> Flectra.
 +
 +==== Logiciels ====
 +
 +Tous les logiciels nécessaires sont du domaine public ou LIBRE sous licence //GPL//; ils ne coûtent pas un sou. Le seul achat nécessaire est l'obtention d'un nom de domaine au prix initial de $15 CAD et son renouvellement annuel d'environ $30 CAD.
 +
 +==== But final ====
 +
 +Après avoir suivi le //Cours NethServer-101//, vous posséderez un site de //Commerce en ligne// fiable et hautement sécuritaire. De plus, vous pourrez utiliser un clone de votre site, sur un //Serveur NethServer// virtuel roulant sur votre poste de travail, pour tester de nouvelles extensions et applications sans compromettre la sécurité ou l'intégrité de votre site en ligne.
 +
 +{{ NS-101_001_Diagramme.png?500 }}
 +
 +===== Particularités de ce document =====
 +
 +==== Notes au lecteur ====
 +
 +<nowiki>*</nowiki> Les captures d'écrans ne sont que des références.\\
 +<nowiki>**</nowiki> Les informations écrites ont préséance sur celles retrouvées dans les captures d'écrans. Veillez vous référer aux différents tableaux lorsque ceux-ci sont présents.\\ 
 +<nowiki>***</nowiki> Une capture d'écran avec une accentuation en magenta indique qu'il faut remplacer cette distinction par vos propres paramètres ou implique un choix laissé à votre appréciation.
 +
 +==== Conventions ====
 +
 +{{Images_icone-201-001_doigt.png?22}} Manipulation, truc ou ruse pour se tirer d'embarras.\\
 +{{Images_icone-201-002_Lumiere.png?25}} Une recommandation ou astuce.\\
 +{{Images_icone-201-003_Note.png?25}} Une note.\\
 +{{Images_icone-201-004_Triangle.png?25}} Une étape, note ou procédure à surveiller.\\
 +{{Images_icone-201-005_Non-termine.png?25}} Paragraphe non complété ou non vérifié.\\
 +{{Images_icone-201-006_Securite.png?25}} Danger pour la sécurité du système.
 +
 +Toutes les commandes à la console ou à travers //PuTTY// sont précédées d'une invite qui est toujours présente.
 +
 +<file>
 +[root@dorgee ~]# ping 10.10.10.75 -c1
 +
 +PING 10.10.10.75 (10.10.10.75) 56(84) bytes of data.
 +64 bytes from 10.10.10.75: icmp_seq=1 ttl=64 time=1.63 ms
 +
 +--- 10.10.10.75 ping statistics ---
 +1 packets transmitted, 1 received, 0% packet loss, time 0ms
 +rtt min/avg/max/mdev = 1.639/1.639/1.639/0.000 ms
 +[root@dorgee ~]#
 +</file>
 +
 +<WRAP box round>
 +<file>
 +Commande à exécuter si ce n'est déjà fait.
 +</file>
 +</WRAP>
 +
 +<WRAP box>
 +<file>
 +Commande indiquée à titre d'information seulement.
 +</file>
 +</WRAP>
 +\\ 
 +
 +====== À savoir ======
 +
 +===== Diagramme réseau =====
 +
 +{{ Images_Cahier-201-02-005.png?600 }}
 +\\
 +
 +===== Serveur NethServer-7.6.1810 =====
 +
 +Le Serveur NethServer-7.6.1810 est un dérivé de la distribution Linux CentOS et est équivalent à CentOS-7.6.1810.
 +
 +==== dorgee.micronator.org ====
 +
 +Serveur passerelle pour les connexions à l'Internet.\\ 
 +Serveur DHCP pour tout le réseau LOCAL.
 +
 +==== tchana.micronator-dev.org ====
 +
 +Serveur virtuel LOCAL sous VirtualBox Version 6.0.4 r128413 //(Qt5.6.2)//.
 +
 +==== Répertoire d'installation ====
 +
 +Nous installerons Odoo dans le répertoire ''/opt/odoo/odoo12''.
 +
 +===== Poste de travail =====
 +
 +Windows-8.1, on utilisera ce poste de travail pour tous ce document.
 +
 +===== Éditeur de texte =====
 +
 +Ne modifiez pas les fichiers avec des éditeurs de documents tels Notepad, TextEdit ou autres qui ajoutent une marque d'ordre d'octets //(byte order marks)// aux fichiers et qui casse le programme PHP. Utilisez plutôt un éditeur de code tel vi, vim, **Notepad++**, ou Atom. Ces éditeurs gèrent l'encodage des fichiers de manière appropriée; ils peuvent aussi être utilisés pour réparer les fichiers précédemment cassés par les autres éditeurs de documents.
 +
 +==== Notepad++ ====
 +
 +Voir le [[nethserver_101_cahier_02_installations_configurations_logiciels_prerequis|Cahier-02]]: //Installations & configurations des logiciels prérequis// du "Cours NethServer-1010" pour l'installation et la configuration de cet éditeur.
 +
 +==== Description ====
 +
 +//Référence:// [[https://notepad-plus-plus.org/fr/|https://notepad-plus-plus.org/fr/]].\\ 
 +Notepad++ est un éditeur de code source qui prend en charge plusieurs langages. Ce logiciel, codé en C++ avec STL et win32 api, a pour vocation de fournir un éditeur de code source de taille réduite mais très performant. En optimisant de nombreuses fonctions, tout en conservant une facilité d’utilisation et une certaine convivialité, Notepad++ contribue à la limitation des émissions de dioxyde de carbone dans le monde; en effet, en réduisant l’utilisation du CPU, la consommation d’énergie des ordinateurs chute considérablement, en conséquence de quoi, la terre est plus verte.
 +
 +//Site de téléchargement:// [[https://notepad-plus-plus.org/fr/|https://notepad-plus-plus.org/fr/]].
 +
 +==== Documentation ====
 +
 +Guide pratique //(1er août 2013)//: [[http://nliautaud.developpez.com/tutoriels/web/notepadplusplus-guide-pratique/|http://nliautaud.developpez.com/tutoriels/web/notepadplusplus-guide-pratique/]].\\ 
 +Aide-mémoire des principales commande: [[https://drive.google.com/file/d/0B86nuTd5nMTKaENHcmliUC1kdnc/edit|https://drive.google.com/file/d/0B86nuTd5nMTKaENHcmliUC1kdnc/edit]].
 +
 +===== Connexion sécuritaire =====
 +
 +Ce document décrit aussi la marche à suivre pour une connexion sécuritaire //(https)// vers Odoo.
 +
 +HTTPS //(Hyper Text Transfer Protocol Secure)// apparaît dans l'URL lorsqu'un site Web est sécurisé par un certificat SSL/TLS. Les détails du certificat, y compris l'autorité émettrice et la dénomination sociale du propriétaire du site Web, peuvent être consultés en cliquant sur l'icône du cadenas sur la barre du navigateur.
 +\\ 
 +\\ 
 +
 +====== Préparation de l'environnement de travail ======
 +
 +===== Configuration du poste de travail =====
 +
 +Voir la section __À savoir__ du 
 +[[nethserver_101_cahier_03_creation_un_serveur_virtuel#À savoir|Cahier-03]]
 +: //Création d'un Serveur NethServer virtuel// du "Cours NethServer-101".
 +
 +<WRAP column 60%>
 +==== Vérification ====
 +
 +**Centre Réseau et partage -> Modifier les paramètres de la carte ->** clac //(clic droit)// sur la carte Éthernet **-> Statut -> Détails**.
 +
 +● Nos deux adresses IP et nos deux passerelles son présentes.
 +
 +● **Fermer** toutes les fenêtre.
 +</WRAP>
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-007.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 45%>
 +''C:\Windows\System32\drivers\etc\hosts''.
 +
 +Les CNAME de notre Serveur NethServer virtuel LOCAL sont présents.
 +</WRAP>
 +<WRAP column 45%>
 +|{{ Images_Cahier-201-02-008.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\ 
 +
 +===== Installation d'un Serveur NethServer =====
 +
 +Voir le [[nethserver_101_cahier_03_creation_un_serveur_virtuel|Cahier-03]]: //Création d'un Serveur NethServer virtuel// du "Cours NethServer-101".
 +
 +Pour un serveur virtuel de test, prendre un minimum de //8 Go// dynamiquement alloué pour le disque principal.
 +
 +==== Mise à jour du Serveur ====
 +
 +Avant de commencer quoi que ce soit, il est toujours préférable de mettre à jour le Serveur NethServer.
 +
 +==== Fail2ban & ClamAV ====
 +
 +Il est fortement recommandé d'installer //Fail2ban// et //ClamAV// pour mieux sécuriser notre futur site Odoo. L'installation de ces logiciels est décrite dans le [[nethserver_101_cahier_03_creation_un_serveur_virtuel|Cahier-03]]: //Création d'un Serveur NethServer virtuel// du "Cours NethServer-101"..
 +
 +===== interface Web NethServer =====
 +
 +{{Images_icone-201-004_Triangle.png?25}} Il faut activer Javascript et les témoins //(cookies)//.\\ 
 +Depuis le poste de travail, sur le réseau LOCAL //10.10.10.0/24//, on accède à l'interface Web Nethserver [[http://10.10.10.75:980|http://10.10.10.75:980]].
 +
 +=== Login ===
 +
 +Lorsque vous parvenez à l'URL, vous serez invité à entrer votre nom d’utilisateur //(qui est obligatoirement root)// et le //mot de passe// donné au cours du processus d’installation. Entrez ce justificatif et cliquez sur **Login** afin d’être amené à l'interface Web Nethserver. L’écran du gestionnaire s’affiche.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Le cadenas n'est pas //vert//, car nous n'avons pas encore de certificat émis par une autorité de certification reconnue. Plus loin, nous réglerons cet inconvénient 
 +
 +<WRAP column 20%>
 +|{{ Images_Cahier-201-02-009.png?400 }}|
 +</WRAP>
 +<WRAP column 70%>
 +|{{ Images_Cahier-201-02-010.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +Si vous avez de la difficulté à vous connecter, vidanger le cache DNS du poste de travail et celui du navigateur Firefox.
 +
 +<WRAP column 50%>
 +<nowiki>-</nowiki> Sur le poste de travail, ouvrir un écran de commandes.\\ 
 +<nowiki>-</nowiki> **ifconfig  /flushdns**.
 +|{{ Images_Cahier-201-02-011.png?400 }}|
 +</WRAP>
 +<WRAP column 40%>
 +**Historique -> Supprimer l'historique ré­cent... -> tout -> Effacer maintenant**.
 +|{{ Images_Cahier-201-02-012.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\ 
 +
 +{{ Images_Cahier-201-02-013.png?600}}
 +==== Fournisseur des comptes ====
 +
 +**Configuration -> Fournisseur des comptes**.
 +
 +LDAP local est notre fournisseur de comptes.
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-014.png?600}}
 +==== FQDN du serveur ====
 +
 +**Configuration -> DNS ->** onglet **Hôtes**.
 +
 +Le FQDN du serveur: //micronator-dev.org// est bien ce qu'il devrait être; //micronator-101.ddns.net// provient du [[nethserver_101_cahier_03_creation_un_serveur_virtuel|Cahier-03]]: //Création d'un Serveur NethServer virtuel//, on peut le supprimer pour ce document.
 +\\
 +
 +{{ Images_Cahier-201-02-015.png?600}}
 +==== Nom du serveur ====
 +
 +**Configuration -> Nom du serveur**.
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-016.png?600}}
 +==== Paramètres d'accès à distance ====
 +
 +**Sécurité -> SSH**.
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-017.png?600}}
 +==== FTP ====
 +
 +**Configuration -> FTP->** onglet **Configurer**.
 +
 +{{Images_icone-201-001_doigt.png?22}} __Le FTP ne doit pas être activé__, Odoo s'occupe lui-même des téléchargements.
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-018.png?600}}
 +==== Serveurs DNS ====
 +
 +**Configuration -> Réseau ->** onglet **Serveur DNS**.
 +
 +Le serveur DNS secondaire peut être //8.8.8.8// ou //1.1.1.1//; le dernier étant plus rapide.
 +<WRAP clear></WRAP>
 +\\
 +
 +===== Ouverture d'une session PuTTY =====
 +
 +Les paramètres du serveur sont définis correctement et on peut utiliser PuTTY pour s'y loguer.
 +
 +Voir __PuTTY__ dans le 
 +[[nethserver_101_cahier_02_installations_configurations_logiciels_prerequis#PuTTY|Cahier-02]]
 +: //Installations & configurations des logiciels prérequis// du "Cours NethServer-101".
 +
 +On logue en tant que l'utilisateur __root__.
 +
 +<file>
 +login as: root
 +root@10.10.10.75's password: mot-de-passe-de-root
 +Last login: Thu May 16 09:58:33 2019 from 10.10.10.81
 +
 +************ Welcome to NethServer ************
 +
 +This is a NethServer installation.
 +
 +Before editing configuration files, be aware
 +of the automatic events and templates system.
 +
 +
 +          http://docs.nethserver.org
 +
 +***********************************************
 +[root@tchana ~]#
 +</file>
 +
 +==== Adresse IP ====
 +
 +On vérifie les adresses IP du serveur.
 +
 +<file>
 +[root@tchana ~]# ifconfig
 +
 +enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 +        inet 10.10.10.75  netmask 255.255.255.0  broadcast 10.10.10.255
 +        inet6 fe80::a00:27ff:fedd:6373  prefixlen 64  scopeid 0x20<link>
 +        ether 08:00:27:dd:63:73  txqueuelen 1000  (Ethernet)
 +        RX packets 680  bytes 63712 (62.2 KiB)
 +        RX errors 0  dropped 0  overruns 0  frame 0
 +        TX packets 634  bytes 260579 (254.4 KiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +
 +enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 +        inet 192.168.1.75  netmask 255.255.255.0  broadcast 192.168.1.255
 +        inet6 fe80::a00:27ff:feda:1348  prefixlen 64  scopeid 0x20<link>
 +        ether 08:00:27:da:13:48  txqueuelen 1000  (Ethernet)
 +        RX packets 27919  bytes 26181152 (24.9 MiB)
 +        RX errors 0  dropped 0  overruns 0  frame 0
 +        TX packets 20591  bytes 5112156 (4.8 MiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +
 +lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
 +        inet 127.0.0.1  netmask 255.0.0.0
 +        inet6 ::1  prefixlen 128  scopeid 0x10<host>
 +        loop  txqueuelen 1000  (Local Loopback)
 +        RX packets 2534  bytes 309622 (302.3 KiB)
 +        RX errors 0  dropped 0  overruns 0  frame 0
 +        TX packets 2534  bytes 309622 (302.3 KiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +
 +[root@tchana ~]#
 +</file>
 +
 +==== Fail2ban ====
 +
 +On vérifie que le pare-feu //Fail2ban// est installé.
 +
 +<file>
 +[root@tchana ~]# rpm -qa | grep -i fail2ban
 +
 +fail2ban-firewalld-0.9.7-1.el7.noarch
 +fail2ban-server-0.9.7-1.el7.noarch
 +fail2ban-0.9.7-1.el7.noarch
 +fail2ban-sendmail-0.9.7-1.el7.noarch
 +nethserver-fail2ban-1.1.6-1.ns7.noarch
 +fail2ban-shorewall-0.9.7-1.el7.noarch
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie que Fail2ban roule sur le serveur.
 +
 +<file>
 +[root@tchana ~]# ps aux | grep -i fail2ban
 +
 +root      4586  1.2  0.5 1746708 22656 ?       Sl   12:05   0:28 /usr/bin/python2 -s /usr/bin/fail2ban-server -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid -x -b
 +root      7161  0.0  0.0 112728   984 pts/0    S+   12:44   0:00 grep --color=auto -i fail2ban
 +[root@tchana ~]#
 +</file>
 +
 +==== ClamAV ====
 +
 +Par défaut //ClamAV// est installé, mais partiellement, et s'occupe seulement du balayage des courriels.
 +
 +Dans le 
 +[[nethserver_101_cahier_03_creation_un_serveur_virtuel#ClamAV|Cahier-03]]
 +: //Création d'un Serveur NethServer virtuel// du "Cours NethServer-101", nous avons installé ClamAV qui s'occupe aussi du balayage du système de fichiers.
 +
 +On vérifie que l'antivirus ClamAV pour le système de fichiers est installé.
 +
 +<file>
 +[root@tchana ~]# rpm -qa | grep -i clamav
 +
 +clamav-scanner-systemd-0.101.2-1.el7.x86_64
 +clamav-lib-0.101.2-1.el7.x86_64
 +clamav-server-systemd-0.101.2-1.el7.x86_64
 +clamav-unofficial-sigs-5.6.2-7.el7.noarch
 +clamav-update-0.101.2-1.el7.x86_64
 +clamav-0.101.2-1.el7.x86_64
 +clamav-filesystem-0.101.2-1.el7.noarch
 +[root@tchana ~]#
 +</file>
 +
 +{{ Images_Cahier-201-02-019.png?600}}
 +**Configuration -> Scanner Antivirus ->** onglet **Clamscan**.
 +
 +ClamAV lancera un balayage complet du système à //**01h00**//.
 +<WRAP clear></WRAP>
 +\\
 +
 +===== Utilisateurs =====
 +
 +{{ Images_Cahier-201-02-020.png?600}}
 +==== Utilisateur michelandre ====
 +
 +**Gestion -> Utilisateurs et groupes ->** onglet **Utilisateurs**.
 +
 +L'utilisateur __michelandre__ a été créé dans le 
 +[[nethserver_101_cahier_03_creation_un_serveur_virtuel#Nouvel utilisateur|Cahier-03]]
 +: //Création d'un Serveur NethServer virtuel// du "Cours NethServer-101".
 +\\ 
 +\\ 
 +
 +===== Collection PHP =====
 +
 +Version PHP actuelle pour notre Serveur NethServer-7.6-1810.
 +
 +<file>
 +[root@tchana ~]# php --version
 +
 +PHP 5.4.16 (cli) (built: Oct 30 2018 19:30:51)
 +Copyright (c) 1997-2013 The PHP Group
 +Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
 +[root@tchana ~]#
 +</file>
 +
 +Comme on le voit, notre version //5.4.16// de PHP est légèrement vieillotte.
 +
 +{{Images_icone-201-003_Note.png?25}} Nous allons installer la Collection PHP qui fournit une version plus récente tout en gardant installée la version originale.
 +
 +==== Collections de logiciels ====
 +
 +{{Images_icone-201-001_doigt.png?22}} Les développeurs de RedHat ont pensé qu'un inconvénient, avec entre autres la version 5 de PHP, allait survenir tôt ou tard et ont écrit les paquetages des //Collections//.
 +
 +Tous les //RPM// des Collections sont installés dans le répertoire ''/opt''; ce qui empêche toutes interférences ou conflits avec les installations par défaut.
 +
 +=== * Collection PHP ===
 +
 +Le but de la //Collection PHP// est d'installer //PHP-5.6//, //PHP-7.0//, //PHP-7.1//, //PHP-7.2// et //PHP-7.3// parallèlement à la version installée par défaut avec NethServer-7.6.1810, sans devoir supprimer ou modifier cette dernière. Cette Collection utilise les RPM du référentiel **remi** qui sont en fait, les mêmes que ceux sur le site Web officiel, mais ils ont l'avantage de fournir plus de choix. Cette Collection nécessite d'installer le référentiel **stephdl**.
 +
 +==== Prérequis pour l'installation de la Collection PHP ====
 +
 +//Référence:// [[https://wiki.nethserver.org/doku.php?id=php-scl|https://wiki.nethserver.org/doku.php?id=php-scl]].\\ 
 +Il faut installer les référentiels //stephdl// et //remi// pour pouvoir installer la //Collection PHP//.
 +
 +=== Référentiel stephdl ===
 +
 +//Référence:// [[https://wiki.nethserver.org/doku.php?id=stephdl_repository|https://wiki.nethserver.org/doku.php?id=stephdl_repository]].
 +
 +<file>
 +[root@tchana ~]# yum install -y  http://mirror.de-labrusse.fr/NethServer/7/x86_64/nethserver-stephdl-1.0.7-1.ns7.sdl.noarch.rpm
 +
 +...
 +Transaction Summary
 +============================================================================================
 +Install  1 Package
 +
 +Total size: 40 k
 +Installed size: 40 k
 +...
 +Installed:
 +  nethserver-stephdl.noarch 0:1.0.7-1.ns7.sdl
 +
 +Complete!
 +[root@tchana ~]#
 +</file>
 +
 +Vérification.
 +
 +<file>
 +[root@tchana ~]# rpm -qa | grep stephdl
 +
 +nethserver-stephdl-1.0.7-1.ns7.sdl.noarch
 +[root@tchana ~]#
 +</file>
 +
 +=== Référentiel remi ===
 +
 +<file>
 +[root@tchana ~]# yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
 +
 +...
 +Transaction Summary
 +============================================================================================
 +Install  1 Package
 +
 +Total size: 19 k
 +Installed size: 19 k
 +...
 +Installed:
 +  remi-release.noarch 0:7.6-2.el7.remi
 +
 +Complete!
 +[root@tchana ~]#
 +</file>
 +
 +Vérification
 +
 +<file>
 +[root@tchana ~]# rpm -qa | grep remi
 +
 +remi-release-7.6-2.el7.remi.noarch
 +[root@tchana ~]#
 +</file>
 +
 +==== Installation de la Collection PHP ====
 +
 +<file>
 +[root@tchana ~]# yum install -y nethserver-php-scl --enablerepo=stephdl
 +
 +...
 +Résumé de la transaction
 +============================================================================================
 +Installation   1 Paquet (+127 Paquets en dépendance)
 +
 +Taille totale des téléchargements : 47 M
 +Taille d'installation : 134 M
 +...
 +  Installation : scl-utils-20130529-19.el7.x86_64                                     1/128
 +...
 +  Installation : nethserver-php-scl-1.2.4-1.ns7.sdl.x86_64                          128/128
 +  Vérification : 1:enchant-1.6.0-8.el7.x86_64                                         1/128
 +...
 +  Vérification : php72-php-tidy-7.2.18-1.el7.remi.x86_64                            128/128
 +
 +Installé :
 +  nethserver-php-scl.x86_64 0:1.2.4-1.ns7.sdl
 +
 +Dépendances installées :
 +  enchant.x86_64 1:1.6.0-8.el7
 +...
 +  tcl.x86_64 1:8.5.13-8.el7
 +
 +Terminé !
 +[root@tchana ~]#
 +</file>
 +
 +==== Usage ====
 +
 +Normalement, l'interface Web devrait être complète et vous ne devriez pas devoir utiliser la ligne de commande. Si vous pensez que //Stéphane de Labrusse// pourrait améliorer les paramètres PHP en apportant plus d'options, veuillez le lui demander: //stephd arobas de-labrusse point fr//.
 +
 +Les réglages sont répartis à deux endroits.
 +
 +  - À la page **Gestion -> Hôtes virtuels**.\\ 
 +Là, après avoir créé un hôte virtuel, vous pouvez choisir la version que vous utiliserez pour l'//Ibay/virtualhost// //(par défaut, la version PHP d’Apache)//.\\ - Vu que NethServer utilise un script CGI pour gérer la version de PHP, vous ne pourrez pas ajuster les paramètres PHP avec le module //nethserver-phpsettings//; vous devez régler les paramètres à l'aide du fichier ''php.ini'' correspondant. Stéphane de Labrusse voulait coder quelque chose de "cool" afin que tous les paramètres ne soient pas basés uniquement sur des commandes de //BD…// Il a alors crée une page de configuration.
 +  -  À la page **Configuration -> Paramètres PHP**.\\ Là, vous pouvez choisir la version PHP que vous souhaitez utiliser __pour l’ensemble du serveur__.\\ - Lorsqu'Apache est le gestionnaire de PHP, vous pouvez alors définir les paramètres PHP avec le module //nethserver-phpsettings//. En d'autres termes, si vous souhaitez utiliser le module //nethserver-phpsettings// et que vous avez besoin d'une version spécifique de PHP, vous devez utiliser cette version __pour tout le serveur__. Bien sûr, vous pouvez revenir à la version par défaut en cas de problème avec une ancienne application Web. Dans d’autres parties de cette page, vous pouvez ajuster les paramètres PHP pour toutes les versions de PHP.
 +\\ 
 +
 +==== Répertoire d'installation ====
 +
 +{{Images_icone-201-003_Note.png?25}} Toutes les versions PHP de la Collection proviennent du référentiel **remi-safe** et sont installées dans le répertoire ''/opt/remi''.
 +
 +<file>
 +[root@tchana ~]# yum repolist | grep remi
 +
 +* remi-safe: mirror.team-cymru.com
 +remi-safe                   Safe Remi's RPM repository for Enterprise Lin  3 191
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie le répertoire ''/opt''.
 +
 +<file>
 +[root@tchana ~]# ls -ls /opt
 +
 +total 0
 +0 drwxr-xr-x. 7 root root 81 Jan  4 09:16 puppetlabs
 +0 drwxr-xr-x  7 root root 71 May 10 17:06 remi
 +0 drwxr-xr-x  2 root root  6 Oct 30  2018 rh
 +[root@tchana ~]#
 +</file>
 +
 +On affiche le répertoire ''/opt/remi''.
 +
 +<file>
 +[root@tchana ~]# ls -ls /opt/remi
 +
 +total 0
 +0 dr-xr-xr-x 3 root root 32 16 mai   13:03 php56
 +0 dr-xr-xr-x 3 root root 32 16 mai   13:03 php70
 +0 dr-xr-xr-x 3 root root 32 16 mai   13:03 php71
 +0 dr-xr-xr-x 3 root root 32 16 mai   13:03 php72
 +0 dr-xr-xr-x 3 root root 32 16 mai   13:03 php73
 +[root@tchana ~]#
 +</file>
 +\\ 
 +
 +==== PHP72 par défaut après une connexion à la ligne de commande ====
 +
 +//Référence:// [[http://appdev.oit.umn.edu/2015/02/11/scl/|http://appdev.oit.umn.edu/2015/02/11/scl/]]
 +
 +On crée le fichier d'activation qui sera lu lors d'une connexion à la console du Serveur NethServer.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +cat > /etc/profile.d/activer-php72.sh <<'EOT'
 +#!/bin/bash
 +source /opt/remi/php72/enable
 +if [[ "$X_SCLS" != *php72* ]]; then
 +src="`scl enable php72 'echo $X_SCLS'`"
 +pkgs=(${src// / })
 +uniq=($(printf "%s\n" "${pkgs[@]}" | sort -u));
 +export X_SCLS="${uniq[@]}"
 +fi
 +EOT
 +
 +</file>
 +
 +On rend le fichier exécutable.
 +
 +<file>
 +[root@tchana ~]# chmod +x /etc/profile.d/activer-php72.sh
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -als /etc/profile.d/activer-php72.sh
 +
 +4 -rwxr-xr-x 1 root root 215 16 mai   13:11 /etc/profile.d/activer-php72.sh
 +[root@tchana ~]#
 +</file>
 +
 +=== Vérification si PHP72 est le défaut==
 +
 +{{Images_icone-201-004_Triangle.png?25}} On ferme la connexion PuTTY et on en ouvre une nouvelle.
 +
 +On vérifie l'installation de la Collection.
 +
 +<file>
 +[root@tchana ~]# rpm -qa | grep scl-
 +
 +centos-release-scl-rh-2-3.el7.centos.noarch
 +centos-release-scl-2-3.el7.centos.noarch
 +nethserver-php-scl-1.2.4-1.ns7.sdl.x86_64
 +scl-utils-20130529-19.el7.x86_64
 +[root@tchana ~]#
 +</file>
 +
 +Collections installées.
 +
 +<file>
 +[root@tchana ~]# scl -l
 +
 +php56
 +php70
 +php71
 +php72
 +php73
 +[root@tchana ~]#
 +</file>
 +
 +Quel est le PHP par défaut?
 +
 +<file>
 +[root@tchana ~]# which php
 +
 +/opt/remi/php72/root/usr/bin/php
 +[root@tchana ~]#
 +</file>
 +
 +Quelle est sa version?
 +
 +<file>
 +[root@tchana ~]# php --version
 +
 +PHP 7.2.18 (cli) (built: Apr 30 2019 14:41:03) ( NTS )
 +Copyright (c) 1997-2018 The PHP Group
 +Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
 +[root@tchana ~]#
 +</file>
 +
 +Notre fichier ''activer-php72.sh'' fonctionne correctement.
 +\\ 
 +
 +=== Sauvegarde ===
 +
 +On vérifie si le nom du fichier ''/etc/profile.d/activer-php72.sh'' est déjà présent dans le fichier d'inclusion de la sauvegarde des données: ''/etc/backup-data.d/custom.include'', sinon on l'insère.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +NouvelleInclusion="/etc/profile.d/activer-php72.sh"
 +if grep -Fxq "$NouvelleInclusion" /etc/backup-data.d/custom.include
 +then
 +    # L'entrée a été trouvée dans custom.include
 +    echo -e "\nLe fichier custom.include contient déjà l'entrée:\n$NouvelleInclusion \n"
 +else
 +    # L'entrée n'a pas été trouvée dans custom.include
 +    echo -e "$NouvelleInclusion" >> /etc/backup-data.d/custom.include
 +    echo -e "\nL'entrée: $NouvelleInclusion a été ajoutée\n"
 +fi
 +
 +
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/backup-data.d/custom.include | grep /etc/profile.d/activer-php72.sh
 +
 +/etc/profile.d/activer-php72.sh
 +[root@tchana ~]#
 +</file>
 +
 +Ci-dessus, il n'y a pas de ligne vide avant __/etc/profile.d/activer-php72.sh__. Nous en avons inséré une afin de faciliter la copie de la commande.
 +\\ 
 +
 +==== Mise à jour de la Collection ====
 +
 +NethServer-7.6.1810  utilise intrinsèquement le référentiel //remi-safe//. Ce qui signifie qu'il est activé par défaut. Lancez simplement la commande suivante pour mettre à jour:
 +
 +<file>
 +[root@tchana ~]# yum update -y nethserver-php-scl --enablerepo=stephdl
 +
 +Loaded plugins: changelog, fastestmirror, nethserver_events
 +Loading mirror speeds from cached hostfile
 + * ce-base: it.centos.contactlab.it
 + * ce-extras: it.centos.contactlab.it
 + * ce-updates: it.centos.contactlab.it
 + * epel: epel.mirror.constant.com
 + * nethforge: mirror.nethserver.org
 + * nethserver-base: mirror.nethserver.org
 + * nethserver-updates: mirror.nethserver.org
 + * remi-safe: rpms.remirepo.net
 +No packages marked for update
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} S'il y avait une mise à jour, elle serait installée avec cette commande.\\ 
 +{{Images_icone-201-003_Note.png?25}} La mise à jour du Serveur NethServer s'occupe aussi de celle de la Collection PHP.
 +\\ 
 +
 +==== Ajustement des paramètres PHP ====
 +
 +Les valeurs de certains paramètres de PHP ne sont pas suffisants pour certains ajouts. Ces paramètres sont: **''MemoryLimit''**, **''PostMaxSize''** et **''UploadMaxFilesize''**. Il faut les ajuster.
 +
 +Affichage des paramètres par défaut.
 +
 +<file>
 +[root@tchana ~]# config show php72
 +
 +php72=configuration
 +    AllowUrlFopen=On
 +    ExposePhp=0
 +    MaxExecutionTime=30
 +    MaxFileUpload=20
 +    MaxInputTime=60
 +    MemoryLimit=128
 +    PostMaxSize=20
 +    UploadMaxFilesize=10
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-001_doigt.png?22}} Il faut obligatoirement que le paramètre ''PostMaxSize'' soit plus grand que celui de ''UploadMaxFilesize''. Si on modifie l'un, il faut vérifier l'autre pour que la correspondance des grandeurs soit respectée.
 +\\ 
 +
 +{{Images_icone-201-004_Triangle.png?25}} Nous allons ajuster: ''MemoryLimit'' //(250M)// **>** ''PostMaxSize'' //(100M)// **>** ''UploadMaxFilesize'' //(75M)//.
 +\\ 
 +
 +=== MemoryLimit ===
 +
 +Chaque fois qu'un client fait une requête au serveur Web, PHP génère un processus PHP. Le travail de ce processus est de générer du code HTML qu'il envoie au client. Le processus fournit un temps d'exécution à un script qui crée la réponse à la requête. La limite de mémoire ''MemoryLimit'' est la quantité maximale de mémoire que ce processus peut utiliser. Si la limite est atteinte ou dépassée, le processus échoue et Apache signale une erreur //HTTP 500//.
 +
 +=== PostMaxSize ===
 +
 +Le paramètre ''PostMaxSize'' définit la taille maximale autorisée pour les données d'un //post//. Ce paramètre affecte également le téléchargement de fichiers. Pour télécharger des fichiers volumineux, cette valeur doit absolument être toujours supérieure à ''UploadMaxFilesize''.
 +
 +<WRAP column 30%>
 +=== UploadMaxFilesize ===
 +
 +Certains ajouts doivent autoriser le téléversement de fichiers et la grandeur de ceux-ci ne peut dépasser la limite définie par le paramètre ''UploadMaxFilesize'' de PHP.
 +</WRAP>
 +<WRAP column 60%>
 +|{{ Images_Cahier-201-02-200.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\ 
 +
 +<WRAP column 30%>
 +=== Version PHP par défaut ===
 +
 +On définit la version PHP par défaut pour Apache.
 +
 +**Configuration -> Paramètres PHP ->** onglet **Version PHP Apache ->** cliquer  **Php72 SCL Version -> SOUMETTRE**.
 +</WRAP>
 +<WRAP column 60%>
 +|{{ Images_Cahier-201-02-201.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +=== Ajustements des paramètres de la version PHP-7.2 ===
 +
 +Onglet **Php V7.2 SCL**\\
 +Ajuster tel que ci-contre //(250M - 100M - 75M)//\\ 
 +**-> SOUMETTRE**.
 +
 +{{Images_icone-201-006_Securite.png?25}} //**Allow PHP access to remote files**// est un bris de sécurité.
 +</WRAP>
 +<WRAP column 60%>
 +|{{ Images_Cahier-201-02-202.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\ 
 +
 +<WRAP column 30%>
 +Onglet **Version par défaut de PHP**\\ 
 +Ajuster tel que ci-contre //(250M - 75M - 75M)//\\ 
 +**-> SOUMETTRE**.\\
 +
 +{{Images_icone-201-006_Securite.png?25}} //**Autoriser l'accès PHP aux fichiers distants**// est un bris de sécurité.
 +</WRAP>
 +<WRAP column 60%>
 +|{{ Images_Cahier-201-02-203.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +=== Vérifications à la ligne de commande ===
 +
 +''MemoryLimit''
 +
 +<file>
 +[root@tchana ~]# cat /etc/opt/remi/php72/php.ini | grep -i Memory_Limit
 +
 +memory_limit                           = 250M
 +[root@tchana ~]#
 +</file>
 +
 +''PostMaxSize''
 +
 +<file>
 +[root@tchana ~]# cat /etc/opt/remi/php72/php.ini | grep -i post_max_size
 +
 +post_max_size                          = 100M
 +[root@tchana ~]#
 +</file>
 +
 +''UploadMaxFilesize''
 +
 +<file>
 +[root@tchana ~]# cat /etc/opt/remi/php72/php.ini | grep -i upload_max_filesize
 +
 +upload_max_filesize                    = 75M
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Comme on le voit ci-dessus, les grandeurs maximales pour //PHP-7.2// sont maintenant de: ''MemoryLimit'' //(250M)// **>** ''PostMaxSize'' //(100M)// **>** ''UploadMaxFilesize'' //(75M)//.
 +\\ 
 +
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +\\ 
 +
 +<WRAP centeralign>**Les prérequis pour le Serveur NethServer sont tous remplis.**</WRAP>
 +\\
 +
 +====== PostgreSQL-11 - Installation ======
 +
 +===== Invite de commandes NethServer =====
 +
 +{{Images_icone-201-003_Note.png?25}} Pour ce document, le Serveur NethServer est à l'adresse //10.10.10.75// et connecté à l'Internet à travers le serveur //dorgee.micronator.org//.
 +
 +Si nous ne sommes pas déjà logué, nous nous connectons en tant que __root__ au Serveur NethServer à l'aide de PuTTY.
 +
 +<WRAP box round>
 +<file>
 +login as: root
 +root@10.10.10.75's password: mot-de-passe-de-root
 +Last login: Fri May 10 17:11:57 2019 from 10.10.10.81
 +
 +************ Welcome to NethServer ************
 +
 +This is a NethServer installation.
 +
 +Before editing configuration files, be aware
 +of the automatic events and templates system.
 +
 +
 +          http://docs.nethserver.org
 +
 +***********************************************
 +[root@tchana ~]
 +</file>
 +</WRAP>
 +
 +On affiche les adresses IP du serveur.
 +
 +<file>
 +[root@tchana html]# ifconfig
 +
 +enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 +        inet 10.10.10.75  netmask 255.255.255.0  broadcast 10.10.10.255
 +        inet6 fe80::a00:27ff:fedd:6373  prefixlen 64  scopeid 0x20<link>
 +        ether 08:00:27:dd:63:73  txqueuelen 1000  (Ethernet)
 +        RX packets 664  bytes 74068 (72.3 KiB)
 +        RX errors 0  dropped 0  overruns 0  frame 0
 +        TX packets 615  bytes 289665 (282.8 KiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +
 +enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 +        inet 192.168.1.75  netmask 255.255.255.0  broadcast 192.168.1.255
 +        inet6 fe80::a00:27ff:feda:1348  prefixlen 64  scopeid 0x20<link>
 +        ether 08:00:27:da:13:48  txqueuelen 1000  (Ethernet)
 +        RX packets 144384  bytes 196551121 (187.4 MiB)
 +        RX errors 0  dropped 0  overruns 0  frame 0
 +        TX packets 83977  bytes 7402753 (7.0 MiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +
 +lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
 +        inet 127.0.0.1  netmask 255.0.0.0
 +        inet6 ::1  prefixlen 128  scopeid 0x10<host>
 +        loop  txqueuelen 1000  (Local Loopback)
 +        RX packets 3178  bytes 378438 (369.5 KiB)
 +        RX errors 0  dropped 0  overruns 0  frame 0
 +        TX packets 3178  bytes 378438 (369.5 KiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +[root@tchana ~]#
 +</file>
 +\\ 
 +
 +===== Référentiel pgdg11 =====
 +
 +==== 32 ou 64 bits ====
 +
 +Il nous faut connaître le genre de CPU utilisé par notre serveur afin de choisir la bonne version de PostgreSQL.
 +
 +<file>
 +[root@tchana ~]# uname -p
 +
 +x86_64
 +[root@tchana ~]#
 +</file>
 +
 +==== Version CentOS ====
 +
 +Pour connaître la version CentOS dont notre serveur est issu.
 +
 +<file>
 +[root@tchana ~]# cat /etc/centos-release
 +
 +CentOS Linux release 7.6.1810 (Core)
 +[root@tchana ~]#
 +</file>
 +
 +<WRAP column 45%>
 +==== Lien du référentiel PostgreSQL ====
 +
 +Pour connaître le lien URL du référentiel PostgreSQL, on se rends au site suivant:  [[https://yum.postgresql.org/repopackages.php#pg11|https://yum.postgresql.org/repopackages.php#pg11]]
 +
 +{{Images_icone-201-003_Note.png?25}} Le référentiel  EPEL //(Extra Packages pour Enterprise Linux)// est présent et //Activé// par défaut sur un Server NethServer.
 +
 +Notre Serveur NethServer est un //64 bits// issu de CentOS-7.6. Donc, nous choisissons //CentOS 7 - x86 64//.
 +
 +On claque //(clic droit)// sur **CentOS 7 - x86 64** et on copie l'a­dres­se du lien.
 +
 +Le lien du référentiel PostgreSQL pour notre serveur est:\\ 
 +https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
 +</WRAP>
 +<WRAP column 45%>
 +|{{ Images_Cahier-201-02-025.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +==== Installation du référentiel ====
 +
 +La commande pour installer le référentiel PostgreSQL est composée de 2 parties:
 +
 +  - ''yum'' install -y et
 +  - l'URL du référentiel.
 +
 +On installe le référentiel PostgreSQL pour les serveurs CentOS-7 dont le Serveur NethServer est issu.
 +
 +On entre ''yum install -y'' //(suivi d'un espace)// et on colle l'URL copié précédemment.
 +
 +<file>
 +[root@tchana ~]# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
 +
 +Modules complémentaires chargés : changelog, fastestmirror, nethserver_events
 +pgdg-redhat-repo-latest.noarch.rpm                                   | 5.6 kB  00:00:00
 +Examen de /var/tmp/yum-root-DVkWkS/pgdg-redhat-repo-latest.noarch.rpm : pgdg-redhat-repo-42.0-4.noarch
 +Sélection de /var/tmp/yum-root-DVkWkS/pgdg-redhat-repo-latest.noarch.rpm pour installation
 +Résolution des dépendances
 +--> Lancement de la transaction de test
 +---> Le paquet pgdg-redhat-repo.noarch 0:42.0-4 sera installé
 +--> Résolution des dépendances terminée
 +
 +Dépendances résolues
 +
 +============================================================================================
 + Package               Architecture
 +                                   Version       Dépôt                                Taille
 +============================================================================================
 +Installation :
 + pgdg-redhat-repo      noarch      42.0-4        /pgdg-redhat-repo-latest.noarch      6.8 k
 +
 +Résumé de la transaction
 +============================================================================================
 +Installation   1 Paquet
 +
 +Taille totale  : 6.8 k
 +Taille d'installation : 6.8 k
 +Downloading packages:
 +Running transaction check
 +Running transaction test
 +Transaction test succeeded
 +Running transaction
 +  Installation : pgdg-redhat-repo-42.0-4.noarch                                         1/1
 +  Vérification : pgdg-redhat-repo-42.0-4.noarch                                         1/1
 +
 +Installé :
 +  pgdg-redhat-repo.noarch 0:42.0-4
 +
 +Terminé !
 +[root@tchana ~]#
 +</file>
 +
 +Le référentiel PostgreSQL est installé.
 +\\ 
 +
 +===== Installation =====
 +
 +Maintenant, on peut procéder à l'installation de PostgreSQL-11.
 +
 +<file>
 +[root@tchana ~]# yum install -y --enablerepo=pgdg11                          \
 +                                postgresql11         postgresql11-libs       \
 +                                postgresql11-server  postgresql11-contrib    \
 +                                postgresql11-devel   postgresql11-docs       \
 +                                postgresql11-test
 +
 +...
 +Install  7 Packages (+1 Dependent package)
 +
 +Total download size: 23 M
 +Installed size: 89 M
 +
 +...
 +Installed:
 +  postgresql11.x86_64 0:11.3-1PGDG.rhel7
 +  postgresql11-contrib.x86_64 0:11.3-1PGDG.rhel7
 +  postgresql11-devel.x86_64 0:11.3-1PGDG.rhel7
 +  postgresql11-docs.x86_64 0:11.3-1PGDG.rhel7
 +  postgresql11-libs.x86_64 0:11.3-1PGDG.rhel7
 +  postgresql11-server.x86_64 0:11.3-1PGDG.rhel7
 +  postgresql11-test.x86_64 0:11.3-1PGDG.rhel7
 +
 +Dependency Installed:
 +  libicu-devel.x86_64 0:50.1.2-17.el7
 +
 +Complete!
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie l'installation.
 +
 +<file>
 +[root@tchana ~]# rpm -qi postgresql11-server
 +
 +Name        : postgresql11-server
 +Version     : 11.3
 +Release     : 1PGDG.rhel7
 +Architecture: x86_64
 +Install Date: jeu. 16 mai 2019 17:27:20 EDT
 +Group       : Applications/Databases
 +Size        : 19562871
 +License     : PostgreSQL
 +Signature   : DSA/SHA1, mer. 08 mai 2019 05:41:15 EDT, Key ID 1f16d2e1442df0f8
 +Source RPM  : postgresql11-11.3-1PGDG.rhel7.src.rpm
 +Build Date  : mer. 08 mai 2019 05:37:39 EDT
 +Build Host  : koji-centos7-x86-64-pgbuild
 +Relocations : (not relocatable)
 +Vendor      : PostgreSQL Global Development Group
 +URL         : https://www.postgresql.org/
 +Summary     : The programs needed to create and run a PostgreSQL server
 +Description :
 +PostgreSQL is an advanced Object-Relational database management system (DBMS).
 +The postgresql11-server package contains the programs needed to create
 +and run a PostgreSQL server, which will in turn allow you to create
 +and maintain PostgreSQL databases.
 +[root@tchana ~]#
 +</file>
 +
 +===== Protection du référentiel =====
 +
 +//Références:// [[http://lxsoft106.cern.ch/cern/centos/7.6.1810/updates/x86_64/repoview/yum-plugin-protectbase.html|http://lxsoft106.cern.ch/cern/centos/7.6.1810/updates/x86_64/repoview/yum-plugin-protectbase.html]]\\ 
 +//Références:// [[https://www.cyberciti.biz/faq/rhel-centos-fedora-yum-protect-packages-from-certain-repositories/|https://www.cyberciti.biz/faq/rhel-centos-fedora-yum-protect-packages-from-certain-repositories/]].
 +
 +Nous voulons protéger le référentiel [pgdg11] afin que ses paquets ne soient pas mis à jour par aucun autre référentiel.
 +
 +On installe le paquet ''yum-plugin-protectbase''.
 +
 +<file>
 +[root@tchana ~]# yum install -y yum-plugin-protectbase
 +
 +...
 +Résumé de la transaction
 +============================================================================================
 +Installation   1 Paquet
 +
 +Taille totale des téléchargements : 27 k
 +Taille d'installation : 22 k
 +...
 +Installé :
 +  yum-plugin-protectbase.noarch 0:1.1.31-50.el7
 +
 +Terminé !
 +[root@tchana ~]#
 +</file>
 +
 +On affiche les informations du paquet ''yum-plugin-protectbase''.
 +
 +<file>
 +[root@tchana ~]# rpm -qi yum-plugin-protectbase
 +
 +Name        : yum-plugin-protectbase
 +Version     : 1.1.31
 +Release     : 50.el7
 +Architecture: noarch
 +Install Date: jeu. 16 mai 2019 23:15:00 EDT
 +Group       : System Environment/Base
 +Size        : 22696
 +License     : GPLv2+
 +Signature   : RSA/SHA256, lun. 12 nov. 2018 10:27:29 EST, Key ID 24c6a8a7f4a80eb5
 +Source RPM  : yum-utils-1.1.31-50.el7.src.rpm
 +Build Date  : mar. 30 oct. 2018 18:58:13 EDT
 +Build Host  : x86-01.bsys.centos.org
 +Relocations : (not relocatable)
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +Vendor      : CentOS
 +URL         : http://yum.baseurl.org/download/yum-utils/
 +Summary     : Yum plugin to protect packages from certain repositories.
 +Description :
 +This plugin allows certain repositories to be protected. Packages in the
 +protected repositories can't be overridden by packages in non-protected
 +repositories even if the non-protected repo has a later version.
 +[root@tchana ~]#
 +</file>
 +
 +On s'assure que le paquet est activé c.-à-d. ''enabled =1''.
 +
 +<file>
 +[root@tchana ~]# cat /etc/yum/pluginconf.d/protectbase.conf
 +
 +[main]
 +enabled = 1
 +[root@tchana ~]#
 +</file>
 +
 +==== Protection de pgdg11 ====
 +
 +On protège le référentiel [pgdg11] en éditant le fichier:  ''/etc/yum.repos.d/pgdg-redhat-all.repo'' et en ajoutant la ligne ''protect = 1'' à la fin de la section définissant le référentiel [pgdg11].
 +
 +<file>
 +...
 +[pgdg11]
 +name=PostgreSQL 11 $releasever - $basearch
 +baseurl=https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-$releasever-$basearch
 +enabled=1
 +gpgcheck=1
 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
 +protect = 1
 +
 +...
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} Tous les paquets du référentiel [pgdg11] sont maintenant protégés contre toutes mises à jour provenant de tous autres référentiels.
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/yum.repos.d/pgdg-redhat-all.repo | grep protect  -n6
 +
 +10-[pgdg11]
 +11-name=PostgreSQL 11 $releasever - $basearch
 +12-baseurl=https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-$releasever-$basearch
 +13-enabled=1
 +14-gpgcheck=1
 +15-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
 +16:protect = 1
 +17-
 +18-[pgdg10]
 +19-name=PostgreSQL 10 $releasever - $basearch
 +20-baseurl=https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-$releasever-$basearch
 +21-enabled=1
 +22-gpgcheck=1
 +[root@tchana ~]#
 +</file>
 +
 +===== Initialisation de la BD =====
 +
 +On initialise la BD.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Peut prendre un certain temps.
 +
 +<file>
 +[root@tchana ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb
 +
 +Initializing database ... OK
 +[root@tchana ~]#
 +</file>
 +
 +===== Activation du service PostgreSQL =====
 +
 +On active le service pour qu'il démarre avec l'amorçage du Serveur NethServer.
 +
 +<file>
 +[root@tchana ~]# systemctl enable postgresql-11.service
 +
 +Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-11.service to /usr/lib/systemd/system/postgresql-11.service.
 +[root@tchana ~]#
 +</file>
 +
 +On démarre le service PostgreSQL.
 +
 +<file>
 +[root@tchana ~]# systemctl start postgresql-11.service
 +
 +[root@tchana ~]#
 +</file>
 +
 +On examine le statut du service PostgreSQL.
 +
 +<file>
 +[root@tchana ~]# systemctl status postgresql-11.service
 +
 +● postgresql-11.service - PostgreSQL 11 database server
 +   Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disabled)
 +   Active: active (running) since jeu. 2019-05-16 17:36:27 EDT; 12s ago
 +     Docs: https://www.postgresql.org/docs/11/static/
 +  Process: 5709 ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 + Main PID: 5715 (postmaster)
 +   CGroup: /system.slice/postgresql-11.service
 +           ├─5715 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
 +           ├─5717 postgres: logger
 +           ├─5719 postgres: checkpointer
 +           ├─5720 postgres: background writer
 +           ├─5721 postgres: walwriter
 +           ├─5722 postgres: autovacuum launcher
 +           ├─5723 postgres: stats collector
 +           └─5724 postgres: logical replication launcher
 +
 +mai 16 17:36:27 tchana.micronator-dev.org systemd[1]: Starting PostgreSQL 11 database se....
 +mai 16 17:36:27 tchana.micronator-dev.org postmaster[5715]: 2019-05-16 17:36:27.840 EDT …432
 +mai 16 17:36:27 tchana.micronator-dev.org postmaster[5715]: 2019-05-16 17:36:27.845 EDT …2 »
 +mai 16 17:36:27 tchana.micronator-dev.org postmaster[5715]: 2019-05-16 17:36:27.850 EDT …2 »
 +mai 16 17:36:27 tchana.micronator-dev.org postmaster[5715]: 2019-05-16 17:36:27.864 EDT …ces
 +mai 16 17:36:27 tchana.micronator-dev.org postmaster[5715]: 2019-05-16 17:36:27.864 EDT … ».
 +mai 16 17:36:27 tchana.micronator-dev.org systemd[1]: Started PostgreSQL 11 database server.
 +Hint: Some lines were ellipsized, use -l to show in full.
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} PostgreSQL-11 est installé et protégé contre les mises à jour par tous les référentiels, __<nowiki>sauf pgdg11/7/x86_64</nowiki>__.
 +\\ 
 +\\ 
 +
 +====== PostgreSQL-11 - Premiers pas ======
 +
 +Cette section est inspirée de l'article suivant: [[https://wiki.postgresql.org/wiki/First_steps|https://wiki.postgresql.org/wiki/First_steps]] et sert à démontrer quelques commandes à la console ''psql''.
 +
 +===== Connexion =====
 +
 +On se connecte au Serveur NethServer en tant que __root__ puis on change d'utilisateur pour devenir le super-utilisateur __postgres__. 
 +
 +<file>
 +[root@tchana ~]# su - postgres
 +
 +-bash-4.2$
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +-bash-4.2$ whoami
 +
 +postgres
 +-bash-4.2$
 +</file>
 +
 +On lance la console //PostgreSQL//.
 +
 +<file>
 +-bash-4.2$ psql
 +
 +postgres
 +-bash-4.2$ psql
 +psql (11.3)
 +Saisissez « help » pour l'aide.
 +
 +postgres=#
 +</file>
 +
 +On vérifie que l'aide fonctionne correctement.
 +
 +<file>
 +postgres=# HELP
 +
 +Vous utilisez psql, l'interface en ligne de commande de PostgreSQL.
 +Saisissez:
 +    \copyright pour les termes de distribution
 +    \h pour l'aide-mémoire des commandes SQL
 +    \? pour l'aide-mémoire des commandes psql
 +    \g ou point-virgule en fin d'instruction pour exécuter la requête
 +    \q pour quitter
 +postgres=#
 +</file>
 +
 +===== SCHEMA =====
 +
 +Une base de données contient un ou plusieurs schémas, qui eux, contiennent des tables. Les schémas con­tien­nent aussi d'autres types d'objets y compris des types de données, fonctions et opérateurs. Seul le nom d'objet peut être utilisé sans conflit c.-à-d. ''schema1'' et ''mon<nowiki>_</nowiki>schema'' t peuvent tous les deux contenir des tables ''mytable''. Contrairement aux bases de données; les schémas ne sont pas séparés de manière rigide; un utilisateur peut accéder aux objets de n'importe lequel des schémas de la base de données auxquels il se connecte __s'il a les privilèges pour le faire__.
 +
 +On crée un schéma qu'on appellera ''test'' dans la base de données par défaut appelée ''postgres''.
 +
 +<file>
 +postgres=# CREATE SCHEMA test;
 +
 +CREATE SCHEMA
 +postgres=#
 +</file>
 +
 +===== RÔLE =====
 +
 +Un rôle est une entité qui peut posséder des objets de la base de données et avoir des droits sur celle-ci. Il peut être considéré comme un "utilisateur", un "groupe" ou les deux suivant la façon dont il est utilisé.
 +
 +On crée un rôle //(utilisateur)// et on lui octroie un mot de passe.
 +
 +{{Images_icone-201-003_Note.png?25}} L'utilisateur PostgreSQL __toto__ n'a rien à voir avec l'utilisateur NethServer __toto__.
 +
 +<file>
 +postgres=# CREATE USER toto PASSWORD 'fghtbgh';
 +
 +CREATE ROLE
 +postgres=#
 +</file>
 +
 +===== GRANT =====
 +
 +La commande GRANT a deux variantes: la première donne des droits sur un objet de la base de données //(table, vue, séquence, base de données, fonction, langage de procédure, schéma ou espace logique)//, la seconde gère les appartenances à un rôle.
 +
 +On donne au nouveau rôle tous les droits //(tel que la possibilité de créer des tables)// sur le nouveau schéma.
 +
 +<file>
 +postgres=# GRANT ALL ON SCHEMA test TO toto;
 +
 +GRANT
 +postgres=#
 +</file>
 +
 +On donne au nouveau rôle tous les droits //(tel que la possibilité d'insertion)// __sur toutes les tables du nouveau schéma__.
 +
 +<file>
 +postgres=# GRANT ALL ON ALL TABLES IN SCHEMA test TO toto;
 +
 +GRANT
 +postgres=#
 +</file>
 +
 +===== Sortie de la console PostgreSQL =====
 +
 +On quitte la console PostgreSQL.
 +<file>
 +
 +postgres=# \q
 +
 +-bash-4.2$
 +</file>
 +
 +On retourne à l'utilisateur __root__.
 +
 +<file>
 +-bash-4.2$ exit
 +
 +déconnexion
 +[root@tchana ~]#
 +</file>
 +
 +===== Utilisateur standard Linux (toto) et PostgreSQL =====
 +
 +On crée un utilisateur standard Linux.
 +
 +<file>
 +[root@tchana ~]# useradd -m  -U  -s  /bin/bash  toto
 +
 +[root@tchana ~]#
 +</file>
 +
 +{{ Images_Cahier-201-02-204.png }}
 +\\
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/passwd | grep toto
 +
 +toto:x:1002:1002::/home/toto:/bin/bash
 +[root@tchana ~]#
 +</file>
 +
 +On lui octroie un mot de passe.
 +
 +<file>
 +[root@tchana ~]# passwd toto
 +
 +Changement de mot de passe pour l'utilisateur toto.
 +Nouveau mot de passe : mot-de-passe-pour-toto
 +Retapez le nouveau mot de passe : mot-de-passe-pour-toto
 +passwd : mise à jour réussie de tous les jetons d'authentification.
 +[root@tchana ~]#
 +</file>
 +
 +On se substitue à l'utilisateur __toto__.
 +
 +<file>
 +[root@tchana ~]# su - toto
 +
 +toto@tchana ~]$
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} __Si nous ne sommes pas root et que nous changeons d'utilisateur__, il faudra entrer le mot de passe demandé qui est alors celui de l'utilisateur auquel on veut se substituer.
 +
 +<WRAP box>
 +<file>
 +-bash-4.2$ su - toto
 +
 +Mot de passe : mot-de-passe-de-toto
 +-bash-4.2$
 +</file>
 +</WRAP>
 +
 +==== Connexion à la BD avec un utilisateur standard ====
 +
 +Par défaut, le mode d'authentification pour se loguer dans PostgreSQL est "ident" qui signifie qu'un utilisateur xxx de Linux ne peut se connecter qu'en tant qu'utilisateur PostgreSQL xxx.
 +
 +On se logue, en tant qu'utilisateur ordinaire //(toto qui a été créé précédemment dans PostgreSQL par le super-utilisateur __postgres__)// à la base de données par défaut c'est-à-dire la BD ''postgres''.
 +
 +<file>
 +-bash-4.2$ psql -d postgres
 +
 +psql (11.3)
 +Saisissez « help » pour l'aide.
 +
 +postgres=>
 +</file>
 +
 +=== HELP ===
 +
 +On essaie l'aide.
 +
 +<file>
 +postgres=> HELP
 +
 +Vous utilisez psql, l'interface en ligne de commande de PostgreSQL.
 +Saisissez:
 +    \copyright pour les termes de distribution
 +    \h pour l'aide-mémoire des commandes SQL
 +    \? pour l'aide-mémoire des commandes psql
 +    \g ou point-virgule en fin d'instruction pour exécuter la requête
 +    \q pour quitter
 +postgres=>
 +</file>
 +
 +=== CREATE ===
 +
 +Dans le schéma ''test'', l'utilisateur __toto__ crée une table ''test''.
 +
 +<file>
 +postgres=> CREATE TABLE test.test (testdecol varchar(20));
 +
 +CREATE TABLE
 +postgres=>
 +</file>
 +
 +=== INSERT ===
 +
 +On insère une entrée dans la nouvelle table.
 +
 +<file>
 +postgres=> insert into test.test (testdecol) values ('Ça fonctionne!');
 +
 +INSERT 0 1
 +postgres=>
 +</file>
 +
 +=== SELECT ===
 +
 +Sélection depuis une table.
 +
 +<file>
 +postgres=> SELECT * from test.test;
 +
 +   testdecol
 +-----------
 + Ça fonctionne!
 +(1 ligne)
 +
 +postgres=>
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} Tout fonctionne correctement.
 +
 +=== Déconnexion ===
 +
 +L'utilisateur __toto__ quitte la console PostgreSQL.
 +
 +<file>
 +postgres=> \q
 +
 +-bash-4.2$
 +</file>
 +
 +On vérifie qui on est.
 +
 +<file>
 +-bash-4.2$ whoami
 +
 +toto
 +-bash-4.2$
 +</file>
 +
 +On retourne à l'utilisateur __root__.
 +
 +<file>
 +-bash-4.2$ exit
 +
 +déconnexion
 +[root@tchana ~]#
 +</file>
 +
 +==== Suppression de l'utilisateur standard toto ====
 +
 +On supprime l'utilisateur standard Linux __toto__ et son répertoire.
 +
 +<file>
 +[root@tchana ~]# userdel -f -r toto
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/passwd | grep toto
 +
 +[root@tchana ~]#
 +</file>
 +
 +==== Nettoyage de PostgreSQL ====
 +
 +=== Suppression du SCHEMA test ===
 +
 +On se substitue au super-utilisateur __postgres__.
 +
 +<file>
 +[root@tchana ~]# su - postgres
 +
 +Dernière connexion : jeudi 16 mai 2019 à 17:46:27 EDT EDT sur pts/0
 +-bash-4.2$
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +-bash-4.2$ whoami
 +
 +postgres
 +-bash-4.2$
 +</file>
 +
 +On lance la console PostgreSQL.
 +
 +<file>
 +-bash-4.2$ psql
 +
 +psql (11.3)
 +Saisissez « help » pour l'aide.
 +postgres=#
 +</file>
 +
 +On affiche les SCHEMA.
 +
 +<file>
 +postgres=# \dn
 +
 +   Liste des schémas
 +  Nom   | Propriétaire
 +--------+--------------
 + public | postgres
 + test   | postgres
 +(2 lignes)
 +
 +postgres=#
 +</file>
 +
 +On supprime le SCHEMA ''test''.
 +
 +<file>
 +postgres=# DROP SCHEMA test CASCADE;
 +
 +NOTICE:  DROP cascade sur table test.test
 +DROP SCHEMA
 +postgres=#
 +</file>
 +
 +On vérifie la suppression.
 +
 +<file>
 +postgres=# \dn
 +
 +   Liste des schémas
 +  Nom   | Propriétaire
 +--------+--------------
 + public | postgres
 +(1 ligne)
 +
 +postgres=#
 +</file>
 +
 +=== Suppression de l'utilisateur PostgreSQL toto ===
 +
 +<file>
 +postgres=# DROP USER toto;
 +
 +DROP ROLE
 +postgres=#
 +</file>
 +
 +On vérifie la suppression.
 +
 +<file>
 +postgres=# \du
 +
 +                                              Liste des rôles
 + Nom du rôle |                                    Attributs                                    | Membre de
 +-------------+---------------------------------------------------------------------------------+-----------
 + postgres    | Superutilisateur, Créer un rôle, Créer une base, Réplication, Contournement RLS | {}
 +
 +postgres=#
 +</file>
 +
 +On quitte la console PostgreSQL.
 +
 +<file>
 +postgres=# \q
 +
 +-bash-4.2$
 +</file>
 +
 +On quitte la substitution d'utilisateur.
 +
 +<file>
 +-bash-4.2$ exit
 +
 +déconnexion
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie qu'on est bien de retour à l'utilisateur __root__.
 +
 +<file>
 +[root@tchana ~]# whoami
 +
 +root
 +[root@tchana ~]#
 +</file>
 +
 +<WRAP centeralign>**PostgreSQL-11 fonctionne correctement.**</WRAP>
 +\\ 
 +
 +====== PostgreSQL-11 - Configuration finale ======
 +
 +===== MD5 =====
 +
 +Maintenant, il nous faut configurer PostgreSQL pour qu'il accepte les connexions avec mots de passe chiffrés  //MD5// pour être ainsi compatible avec les modules Python.
 +
 +On vérifie qu'on est bien __root__.
 +
 +<file>
 +[root@tchana ~]# whoami
 +
 +root
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} En tant qu'utilisateur __root__, on remplace ''ident'' par ''md5'' dans le fichier ''pg<nowiki>_</nowiki>hba.conf''.
 +
 +<file>
 +[root@tchana ~]# sed -i "/^host/s/ident/md5/g" /var/lib/pgsql/11/data/pg_hba.conf
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /var/lib/pgsql/11/data/pg_hba.conf | grep md5
 +
 +# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256",
 +# Note that "password" sends passwords in clear text; "md5" or
 +host    all             all             127.0.0.1/32            md5
 +host    all             all             ::1/128                 md5
 +host    replication     all             127.0.0.1/32            md5
 +host    replication     all             ::1/128                 md5
 +[root@tchana ~]#
 +</file>
 +
 +===== Création de l'utilisateur Linux odoo =====
 +
 +On peut choisir le mot de passe qu'on veut, mais l'important est de le mémoriser. De plus, il est préférable qu'il réponde aux normes NethServer pour les mots de passe.
 +
 +==== Utilisateur Linux ====
 +
 +Le répertoire personnel //(-d)// de l'utilisateur __odoo__ sera le répertoire ''/opt/odoo'', ainsi tout le contenu de ce répertoire aura comme propriétaire:groupe **odoo:odoo**.
 +
 +<file>
 +[root@tchana ~]# useradd -m  -U  -r  -d /opt/odoo  -s /bin/bash odoo
 +
 +[root@tchana ~]#
 +</file>
 +
 +On octroie un __mot de passe robuste__ à l'utilisateur __odoo__ de Linux.
 +
 +<file>
 +[root@tchana ~]# passwd odoo
 +
 +Changement de mot de passe pour l'utilisateur odoo.
 +Nouveau mot de passe : mot-de-passe-robuste-pour-odoo
 +MOT DE PASSE INCORRECT : Le mot de passe comporte moins de 8 caractères
 +Retapez le nouveau mot de passe : mot-de-passe-robuste-pour-odoo
 +passwd : mise à jour réussie de tous les jetons d'authentification.
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} __Dans notre cas, le mot de passe est de 7 caractères seulement__; pour un serveur en Production, __il faut un mot de passe robuste et conforme aux normes NethServer__. Il ne faut pas utiliser notre exemple.
 +
 +{{Images_icone-201-003_Note.png?25}} Le mot de passe doit contenir: au moins 1 chiffre, 1 caractère majuscule, 1 caractère minuscule, 1 caractère spécial, 5 caractères différents, ne pas être présent dans les dictionnaires de mots courants et être différent du nom d'utilisateur. De plus, il est impossible de répéter des motifs formés de 3 caractères ou plus //(par exemple, le mot de passe As<wrap em>1.$</wrap>AS<wrap em>1.$</wrap> n'est pas valide)//.
 +
 +==== Utilisateur PostgreSQL ====
 +
 +Pour notre démonstration, on choisit le mot de passe //fghtbgh// qui est le préféré du fameux Général Toto dont les extraordinaires aventures sont connues de tous les enfants.
 +
 +<file>
 +[root@tchana ~]# echo -e "fghtbgh\nfghtbgh\n" |  \
 +                      su - postgres              \
 +                      -c "createuser             \
 +                      --createdb                 \
 +                      --username postgres        \
 +                      --no-createrole            \
 +                      --no-superuser             \
 +                      --pwprompt odoo"
 +
 +Saisir le mot de passe pour le nouveau rôle :
 +Le saisir de nouveau :
 +[root@tchana ~]#
 +</file>
 +
 +Il n'est pas nécessaire d'entrer le mot de passe //fghtbgh//, car il a été donné au début de la commande par l'utilitaire ''echo''.
 +
 +{{Images_icone-201-004_Triangle.png?25}} L'utilisateur __odoo__ a été créé dans PostgreSQL par le super-utilisateur __postgres__ et non dans le Serveur NethServer.
 +\\ 
 +
 +===== Sécurité =====
 +
 +//Référence:// [[https://www.odoo.com/documentation/11.0/setup/deploy.html|https://www.odoo.com/documentation/11.0/setup/deploy.html]].
 +
 +==== Sécurité de base ====
 +
 +Pour commencer, gardez à l'esprit que la sécurisation d'un système d'information est un processus continu et non pas une opération ponctuelle. A tout moment, vous ne serez pas plus sécurisé que le maillon le plus faible de votre environnement.
 +
 +Alors, s'il vous plaît, ne prenez pas cette section comme la liste ultime des mesures qui préviendront tous les problèmes de sécurité. Elle est seulement conçue comme un résumé des premières mesures importantes que vous devriez être certain d'inclure dans votre plan d'action de sécurité. Le reste proviendra des meilleures pratiques de sécurité pour votre système d'exploitation/distribution de même que des meilleures pratiques en termes d'utilisateurs, mot de passe, gestion du contrôle d'accès, etc.
 +
 +Lors du déploiement d'un serveur connecté à l'Internet, veillez à prendre en compte les sujets suivants relatifs à la sécurité:
 +
 +  - Définissez toujours un mot de passe administrateur //(super-utilisateur)// robuste et restreignez l'accès aux pages de gestion de base de données dès que le système est configuré. Voir la prochaine section: [[nethserver_201_cahier_02_odoo_12#Sécurité du gestionnaire des bases de données]].\\ 
 +\\ 
 +
 +  - Choisissez des login uniques et des mots de passe robustes pour tous les comptes d'administrateur sur toutes les bases de données. N'utilisez pas 'admin' comme identifiant. N'utilisez pas ces login pour les opérations quotidiennes, mais uniquement pour contrôler/gérer l'installation. N'utilisez jamais un mot de passe par défaut tel admin/admin, même pour les bases de données de test.\\ 
 +\\ 
 +
 +
 +  - Utilisez les filtres de base de données appropriés ''--db-filter'' pour restreindre la visibilité de vos bases de données en fonction du nom d'hôte. Vous pouvez également utiliser ''-d'' pour fournir votre propre liste //(séparée par des virgules)// de bases de données disponibles à filtrer, au lieu de laisser le système les récupérer à partir de l'arrière-plan de la base de données.\\ 
 +\\ 
 +
 +
 +  - Une fois que vos paramètres ''db<nowiki>_</nowiki>name'' et ''db<nowiki>_</nowiki>filter'' sont configurés et ne correspondent qu'à une seule base de données par nom d'hôte, vous devez définir l'option de configuration ''list<nowiki>_</nowiki>db'' à ''False'' pour empêcher l'affichage complet des bases de données et bloquer l'accès aux écrans de gestion de BD. //(Ce paramètre est également présenté comme option de ligne de commande: ''--no-database-list''.)//\\ 
 +\\ 
 +
 +
 +  - Assurez-vous que l'utilisateur ''--db<nowiki>_</nowiki>user'' n'est pas un super-utilisateur et que vos bases de données appartiennent à un utilisateur différent. Par exemple, elles pourraient être la propriété du super-utilisateur __postgres__ si vous utilisez un utilisateur ''db<nowiki>_</nowiki>user'' non privilégié.\\ 
 +\\ 
 +
 +
 +  - Maintenez les installations à jour en installant régulièrement les dernières versions, soit via GitHub, soit en téléchargeant la dernière version de [[https://www.odoo.com/page/download|https://www.odoo.com/page/download]] ou de [[http://nightly.odoo.com/|http://nightly.odoo.com]].\\ 
 +\\ 
 +
 +
 +  - Configurez votre serveur en mode multiprocessus(( **multiprocessus** - relatif à un système capable d'exécuter plusieurs applications simultanément. //Référence////://[[http://www.granddictionnaire.com/ficheOqlf.aspx?Id_Fiche=8351231|http://www.granddictionnaire.com/ficheOqlf.aspx?Id_Fiche=8351231]].
 + \\ \\ )) avec des limites adaptées à votre utilisation habituelle //(mémoire/CPU/délais d'attente)//. Voir Builtin server:  [[https://www.odoo.com/documentation/11.0/setup/deploy.html#builtin-server|https://www.odoo.com/documentation/11.0/setup/deploy.html#builtin-server]].\\ 
 +\\ 
 +
 +
 +  - Exécutez Odoo derrière un serveur Web fournissant une connexion HTTPS avec Certificat SSL valide, afin d'empêcher l'écoute clandestine des communications en texte clair. De nos jours, les Certificats SSL ne sont plus aussi dispendieux qu'autrefois et de nombreuses options gratuites existent telle Let's Encrypt. Voir le  [[nethserver_101_cahier_04_local_certificat_let_encrypt|Cahier-04]]: //NethServer LOCAL & Certificat Let's Encrypt// du "Cours NethServer-101".\\ 
 +\\ 
 +
 +
 +  - Configurez le mandataire //(proxy)// Web pour limiter la taille des demandes, définissez des délais d'attente appropriés, puis activez le mode du mandataire. Voir HTTPS server sur la [[https://www.odoo.com/documentation/11.0/setup/deploy.html|page de référence]].\\ 
 +\\ 
 +
 +
 +  - Si vous devez autoriser l'accès SSH à distance à vos serveurs, veillez à définir un mot de passe robuste pour tous les comptes et non pas seulement pour __root__.\\ 
 +\\ 
 +
 +
 +  - Il est fortement recommandé de désactiver complètement l'authentification par mot de passe et d'autoriser uniquement l'authentification par clé publique. Envisagez également de restreindre l'accès via un VPN, en autorisant uniquement les adresses IP approuvées dans le pare-feu et/ou en installant un système de détection d'attaque de force brute tel que //Fail2ban// ou équivalent. Voir le chapitre __Fail2ban__ dans le
 +[[nethserver_101_cahier_03_creation_un_serveur_virtuel#Fail2ban|Cahier-03]]
 +: //Création d'un Serveur NethServer virtuel// du "Cours NethServer-101".\\ 
 +\\ 
 +
 +
 +  - Dans la mesure du possible, hébergez vos instances de démo/test sur des machines différentes de celles de Production et veiller leur appliquer les mêmes précautions de sécurité que celles pour les serveurs en Production.\\ 
 +\\ 
 +
 +
 +  - Si vous hébergez plusieurs clients, isolez les données des clients et leurs fichiers les uns des autres en utilisant des conteneurs ou des techniques appropriées de "jail".\\ 
 +\\ 
 +
 +
 +  - Configurez les sauvegardes quotidiennes de vos bases de données/fichiers et copiez-les sur un serveur d'archivage distant qui n'est pas accessible depuis le serveur lui-même.
 +
 +==== Sécurité du gestionnaire des bases de données ====
 +
 +Sur la [[https://www.odoo.com/documentation/11.0/setup/deploy.html|page de référence]], le paragraphe __Configuring Odoo__ mentionne le paramètre ''admin_passwd''.
 +
 +<WRAP indent>
 +"Les écrans de gestion de base de données sont protégés par le paramètre ''admin_passwd''. Ce paramètre ne peut être défini qu'à l'aide de fichiers de configuration et il est toujours vérifié avant d'effectuer des modifications sur une base de données. Il doit être défini par une valeur générée aléatoirement pour s'assurer que les tiers ne peuvent pas utiliser cette interface."
 +
 +Ce paramètre est utilisé sur tous les écrans de gestion de base de données //(créer, supprimer, vider ou restaurer des bases de données)//.
 +</WRAP>
 +
 +Si les écrans de gestion ne doivent pas être accessibles du tout, vous devez définir l'option de configuration ''list<nowiki>_</nowiki>db'' à //False// pour bloquer l'accès à tous les écrans de sélection et de gestion de bases de données. Il faut absolument vous assurer de configurer un paramètre ''db<nowiki>_</nowiki>name'' approprié //(et éventuellement aussi ''db<nowiki>_</nowiki>filter'')// afin que le système puisse déterminer la base de données cible pour chaque requête, sinon les utilisateurs seront bloqués, car ils ne seront pas autorisés à choisir eux-mêmes la base de données.
 +
 +Si les écrans de gestion ne doivent être accessibles qu'à partir d'un ensemble de machines sélectionnées, utilisez les fonctions du serveur mandataire pour bloquer l'accès à toutes les routes commençant par ''/web/database'' sauf //(peut-être)// ''/web/database/selector'' qui affiche l'écran de sélection de la BD.
 +
 +Si l'écran de gestion de la base de données doit toujours demeurer accessible, le paramètre ''admin<nowiki>_</nowiki>passwd'' doit être modifié par rapport à l'admin par défaut: ce mot de passe est vérifié avant d'autoriser les opérations de modification de la BD.
 +
 +Le mot de passe devrait être stocké en toute sécurité et être généré de manière aléatoire, par exemple: 
 +
 +<WRAP box>
 +<file>
 +python -c 'import base64, os; print(base64.b64encode(os.urandom(24)))'
 +</file>
 +</WRAP>
 +
 +qui générera une chaîne imprimable pseudo-aléatoire de 32 caractères.
 +\\ 
 +
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +\\ 
 +\\ 
 +
 +====== Python36 ======
 +
 +Nous allons installer la //Collection RH-Python36// pour pouvoir utiliser la version //Python-3.6// qui est une version plus récente que celle installée par défaut avec le Serveur NethServer-7.6.1810 //(Python-2.6.6)//.
 +\\ 
 +
 +<WRAP column 50%>
 +À l'URL: [[http://mirror.centos.org/centos/7/sclo/x86_64/rh/|http://mirror.centos.org/centos/7/sclo/x86_64/rh/]], la dernière version disponible pour CentOS-7.6, donc pour NethServer-7.6.18101, est //**rh-python36**//.
 +</WRAP>
 +<WRAP column 40%>
 +|{{ Images_Cahier-201-02-026.png?350 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +===== Référentiel centos-sclo-rh =====
 +
 +Le référentiel //centos-sclo-rh// est déjà connu du Serveur NethServer.
 +
 +<file>
 +[root@tchana ~]# yum repolist | grep -i sclo
 +
 + * ce-sclo-rh: mirrors.vooservers.com
 + * ce-sclo-sclo: mirrors.vooservers.com
 +ce-sclo-rh/7/x86_64         CE-SCLo-rh-7.6.1810                            8 185
 +ce-sclo-sclo/7/x86_64       CE-SCLo-sclo-7.6.1810                            771
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} Les référentiels //ce-sclo-rh// et //ce-sclo-sclo// sont activés par défaut.\\ 
 +//Référence:// [[http://docs.nethserver.org/projects/nethserver-devel/en/latest/nethserver-base.html#repositories|http://docs.nethserver.org/projects/nethserver-devel/en/latest/nethserver-base.html#repositories]].
 +\\ 
 +
 +===== Installation =====
 +
 +<file>
 +[root@tchana ~]# yum install -y --enablerepo=centos-sclo-rh rh-python36*
 +
 +...
 +Résumé de la transaction
 +============================================================================================
 +Installation   41 Paquets (+24 Paquets en dépendance)
 +
 +Taille totale des téléchargements : 74 M
 +Taille d'installation : 355 M
 +...
 +Installé:
 +  rh-python36.x86_64 0:2.0-1.el7
 +...
 +  rh-python36-scldevel.x86_64 0:2.0-1.el7
 +Dépendance(s) installée(s) :
 +  atlas.x86_64 0:3.10.1-12.el7
 +...
 +  zip.x86_64 0:3.0-11.el7
 +
 +Terminé !
 +[root@tchana ~]#
 +</file>
 +
 +Une fois la //Collection RH-Python36// installée, on peut vérifier sa présence sur le serveur.
 +
 +<file>
 +[root@tchana ~]# scl -l
 +
 +httpd24
 +php56
 +php70
 +php71
 +php72
 +php73
 +rh-python36
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} La //Collection http24// est incluse dans l'installation de la //Collection RH-Python36//.
 +\\ 
 +
 +===== Vérification de la version Python =====
 +
 +Le chemin de la commande python est: ''/opt/rh/rh-python36/root/usr/bin/python''.
 +
 +<file>
 +[root@tchana ~]# ls -als /opt/rh/rh-python36/root/usr/bin/python
 +
 +0 lrwxrwxrwx 1 root root 7 11 mai   18:11 /opt/rh/rh-python36/root/usr/bin/python -> python3
 +[root@tchana ~]#
 +</file>
 +
 +On affiche la version de la commande python de la Collection RH-Python36.
 +
 +<file>
 +[root@tchana ~]# /opt/rh/rh-python36/root/usr/bin/python  --version
 +
 +Python 3.6.3
 +[root@tchana ~]#
 +</file>
 +
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +
 +<WRAP centeralign>**La Collection RH-Python36 est installée.**</WRAP>
 +\\ 
 +
 +====== Odoo-12 - Prérequis ======
 +
 +Odoo-12 requière un assez grand nombre de dépendances avant d'être installé.
 +
 +===== Logiciels généraux =====
 +
 +Le compilateur ''gcc'' est nécessaire lors de l'installation de certains prérequis qui doivent être compiler avant leur installation.\\ 
 +{{Images_icone-201-006_Securite.png?25}} Comme la présence de ''gcc'' sur un serveur est un bris majeur de sécurité, une fois l'installation d'Odoo terminée, on le désinstallera et on fera de même de sa dépendance ''cpp''. Voir le paragraphe [[nethserver_201_cahier_02_odoo_12#Désinstallation des compilateurs gcc et cpp]].
 +
 +==== Installation ====
 +
 +<file>
 +[root@tchana ~]# yum install -y git gcc zlib-devel bzip2-devel openssl-devel         \
 +                                ncurses-devel sqlite-devel readline-devel tk-devel   \
 +                                libffi-devel libxslt libxslt-devel libxml2-devel     \
 +                                openldap-devel libjpeg-turbo-devel openjpeg-devel    \
 +                                libtiff-devel libXext libz.so.1 xorg-x11-fonts-Type1
 +
 +...
 +Résumé de la transaction
 +============================================================================================
 +Installation   18 Paquets (+39 Paquets en dépendance)
 +
 +Taille totale des téléchargements : 53 M
 +Taille d'installation : 143 M
 +...
 +Installé :
 +  bzip2-devel.x86_64 0:1.0.6-13.el7              gcc.x86_64 0:4.8.5-36.el7_6.2
 +  git.x86_64 0:1.8.3.1-20.el7                    libffi-devel.x86_64 0:3.0.13-18.el7
 +  libjpeg-turbo-devel.x86_64 0:1.2.90-6.el7      libtiff-devel.x86_64 0:4.0.3-27.el7_3
 +  libxml2-devel.x86_64 0:2.9.1-6.el7_2.3         libxslt-devel.x86_64 0:1.1.28-5.el7
 +  ncurses-devel.x86_64 0:5.9-14.20130511.el7_4   openjpeg-devel.x86_64 0:1.5.1-18.el7
 +  openldap-devel.x86_64 0:2.4.44-21.el7_6        openssl-devel.x86_64 1:1.0.2k-16.el7_6.1
 +  readline-devel.x86_64 0:6.2-10.el7             sqlite-devel.x86_64 0:3.7.17-8.el7
 +  tk-devel.x86_64 1:8.5.13-6.el7                 xorg-x11-fonts-Type1.noarch 0:7.5-9.el7
 +  zlib.i686 0:1.2.7-18.el7                       zlib-devel.x86_64 0:1.2.7-18.el7
 +
 +Dépendance(s) installée(s) :
 +...
 +  cpp.x86_64 0:4.8.5-36.el7_6.2               cyrus-sasl.x86_64 0:2.1.26-23.el7
 +...
 +  ttmkfdir.x86_64 0:3.0.9-42.el7              xorg-x11-proto-devel.noarch 0:2018.4-1.el7
 +  xz-devel.x86_64 0:5.2.2-1.el7
 +
 +Terminé !
 +[root@tchana ~]#
 +</file>
 +
 +===== Logiciels du référentiel EPEL =====
 +
 +On s'assure que le référentiel EPEL est connu de ''yum''.
 +
 +<file>
 +[root@tchana ~]# yum repolist | grep epel
 +
 + * epel: mirror.layeronline.com
 +epel/x86_64                 Extra Packages for Enterprise Linux 7 - x8 13 168+22
 +[root@tchana ~]#
 +</file>
 +
 +==== cabextract ====
 +
 +L'utilitaire ''cabextract'' est un logiciel pour l'extraction des fichiers CAB de Microsoft //(.cab)// ou tout fichier binaire qui incorpore un fichier CAB //(fréquemment trouvé dans les fichiers .exe)//.
 +
 +<file>
 +[root@tchana ~]# yum install -y --enablerepo=epel cabextract
 +
 +...
 +Résumé de la transaction
 +============================================================================================
 +Installation   1 Paquet (+1 Paquet en dépendance)
 +
 +Taille totale des téléchargements : 107 k
 +Taille d'installation : 225 k
 +...
 +Installé:
 +  cabextract.x86_64 0:1.5-1.el7
 +
 +Dépendance(s) installée(s) :
 +  libmspack.x86_64 0:0.5-0.6.alpha.el7
 +
 +Terminé !
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} La dépendance qui a été installée, ''libmspack.x86_64 0:0.5-0.6.alpha.el7'' contient les polices de base de Microsoft afin qu'elles soient disponibles lorsque vous générez des rapports dans Odoo.
 +\\ 
 +
 +===== npm =====
 +
 +//Référence:// [[https://fr.wikipedia.org/wiki/Npm|https://fr.wikipedia.org/wiki/Npm]].\\ 
 +L'utilitaire ''npm'' est le gestionnaire officiel des paquets de //Node.js//. Depuis la version //0.6.3// de //Node.js//, ''npm'' fait partie de l'environnement et est donc automatiquement installé par défaut. L'utilitaire ''npm'' fonctionne avec un terminal et gère les dépendances pour une application. Il permet également d'installer des applications //Node.js// disponibles dans le référentiel [npm].\\ 
 +{{Images_icone-201-001_doigt.png?22}} On installe //Node.js-v10.15.3// qui installera ''npm''.
 +
 +<WRAP column 55%>
 +Les versions disponibles se trouvent à l'URL: [[https://nodejs.org/download/release/|https://nodejs.org/download/release/]].
 +</WRAP>
 +<WRAP column 35%>
 +|{{ Images_Cahier-201-02-027.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +==== Node.js-v10.15.3 ====
 +
 +On crée un répertoire de travail.
 +
 +<file>
 +[root@tchana ~]# mkdir /temp
 +
 +[root@tchana ~]#
 +</file>
 +
 +On s'y rend.
 +
 +<file>
 +[root@tchana ~]# cd /temp/
 +
 +[root@tchana temp]#
 +</file>
 +
 +On télécharge la version //Node.js-v10.15.3//.
 +
 +<file>
 +[root@tchana temp]# wget https://nodejs.org/download/release/v10.15.3/node-v10.15.3-linux-x64.tar.gz
 +
 +--2019-05-17 07:52:58--  https://nodejs.org/download/release/v10.15.3/node-v10.15.3-linux-x64.tar.gz
 +Résolution de nodejs.org (nodejs.org)... 104.20.22.46, 104.20.23.46, 2606:4700:10::6814:162e, ...
 +Connexion vers nodejs.org (nodejs.org)|104.20.22.46|:443...connecté.
 +requête HTTP transmise, en attente de la réponse...200 OK
 +Longueur: 18638507 (18M) [application/gzip]
 +Sauvegarde en : «node-v10.15.3-linux-x64.tar.gz»
 +
 +100%[==================================================>] 18 638 507  1,79MB/  ds 9,9s
 +
 +2019-05-17 07:53:08 (1,79 MB/s) - «node-v10.15.3-linux-x64.tar.gz» sauvegardé [18638507/18638507]
 +
 +[root@tchana temp]#
 +</file>
 +
 +On extraie vers le répertoire ''/usr''.
 +
 +<file>
 +[root@tchana temp]# tar -C /usr --strip-components 1 -xzf node-v10.15.3-linux-x64.tar.gz
 +
 +[root@tchana temp]#
 +</file>
 +
 +On vérifie la présence de ''npm''.
 +
 +<file>
 +[root@tchana temp]# which npm
 +
 +/usr/bin/npm
 +[root@tchana temp]#
 +</file>
 +
 +On vérifie la version.
 +
 +<file>
 +[root@tchana temp]# npm --version
 +
 +6.4.1
 +[root@tchana temp]#
 +</file>
 +
 +===== less et less-plugin-clean-css =====
 +
 +==== less ====
 +
 +//Référence:// [[https://fr.wikipedia.org/wiki/Less_(langage)|https://fr.wikipedia.org/wiki/Less_(langage)]].\\ 
 +L'utilitaire ''less'' est un langage dynamique de génération de CSS conçu par Alexis Sellier. Initialement inspiré par Sass, il l'influence à son tour avec l'apparition de la syntaxe SCSS par laquelle Sass reprend des éléments de la syntaxe CSS classique. Le principe de ''less'' est en effet de ne pas rompre avec la syntaxe CSS: tout code CSS est aussi du code ''less'' valide et sémantiquement équivalent. ''less'' y ajoute notamment les mécanismes suivants: variables, imbrication, mixins, opérateurs et fonctions.
 +
 +==== less-plugin-clean-css ====
 +
 +//Référence:// [[https://github.com/less/less-plugin-clean-css|https://github.com/less/less-plugin-clean-css]].\\ 
 +Ce greffon compresse la sortie //css// de ''less'' en utilisant ''clean-css''.
 +
 +{{Images_icone-201-001_doigt.png?22}} Pour éviter les erreurs de certificats SSL et de téléchargement.
 +
 +<file>
 +[root@tchana temp]# npm configset strict-ssl false
 +
 +[root@tchana temp]#
 +</file> 
 +
 +On installe ces logiciels.
 +
 +<file>
 +[root@tchana temp]# npm install -g less less-plugin-clean-css
 +
 +/usr/bin/lessc -> /usr/lib/node_modules/less/bin/lessc
 ++ less-plugin-clean-css@1.5.1
 ++ less@3.9.0
 +added 66 packages from 128 contributors in 4.337s
 +[root@tchana temp]#
 +</file>
 +
 +On vérifie la présence de ''less''.
 +
 +<file>
 +[root@tchana temp]# which less
 +
 +/usr/bin/less
 +[root@tchana temp]#
 +</file>
 +
 +On vérifie sa version.
 +
 +<file>
 +[root@tchana temp]# less --version
 +
 +less 458 (POSIX regular expressions)
 +Copyright (C) 1984-2012 Mark Nudelman
 +
 +less comes with NO WARRANTY, to the extent permitted by law.
 +For information about the terms of redistribution,
 +see the file named README in the less distribution.
 +Homepage: http://www.greenwoodsoftware.com/less
 +[root@tchana temp]#
 +</file>
 +
 +On vérifie la présence de ''lessc''.
 +
 +<file>
 +[root@tchana temp]# which lessc
 +
 +/usr/bin/lessc
 +[root@tchana temp]#
 +</file>
 +
 +On vérifie sa version.
 +
 +<file>
 +[root@tchana temp]# lessc --version
 +
 +lessc 3.9.0 (Less Compiler) [JavaScript]
 +[root@tchana temp]#
 +</file>
 +
 +===== wkhtmltox =====
 +
 +//Référence:// [[https://wiki.contribs.org/Odoo|https://wiki.contribs.org/Odoo]].\\ 
 +Les ''wkhtmltox'' disponibles à partir de CentOS ou du référentiel EPEL sont d'une version inférieure à celle requise par Odoo. De plus, ces versions ne convertissent pas les en-têtes et les pieds de page. Il est fortement recommandé d'obtenir la dernière version stable directement de la source.
 +
 +==== Dépendances pour wkhtmltopdf ====
 +
 +//Référence:// [[https://wkhtmltopdf.org/|https://wkhtmltopdf.org/]].\\ 
 +''wkhtmltopdf'' et ''wkhtmltoimage'' sont des outils LIBRE //(LGPLv3)// de ligne de commande pour convertir du code HTML en PDF ou en divers autres formats d'image en utilisant le moteur de rendu Qt WebKit. Ces outils fonctionnent entièrement "sans tête" //(headless)// et ne nécessitent pas de service d'écran ou d'affichage.
 +
 +On installe les dépendances.
 +
 +<file>
 +[root@tchana temp]# yum install -y fontconfig libpng libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi
 +
 +...
 +Résumé de la transaction
 +============================================================================================
 +Installation   1 Paquet
 +
 +Taille totale des téléchargements : 2.8 M
 +Taille d'installation : 2.9 M
 +...
 +Installé :
 +  xorg-x11-fonts-75dpi.noarch 0:7.5-9.el7
 +
 +Terminé !
 +[root@tchana temp]#
 +</file>
 +
 +==== Installation de wkhtmltox ====
 +
 +Si ce n'est déjà fait, on se rend dans le répertoire de travail.
 +
 +<file>
 +[root@tchana ~]# cd /temp
 +
 +[root@tchana temp]#
 +</file>
 +
 +On nettoie le répertoire ''/temp''.
 +
 +<file>
 +[root@tchana temp]# rm -rf *
 +
 +[root@tchana temp]#
 +</file>
 +
 +<WRAP column 45%>
 +À l'aide d'un navigateur Internet, on se rend à l'Url:\\ 
 +[[https://github.com/wkhtmltopdf/wkhtmltopdf/releases/|https://github.com/wkhtmltopdf/wkhtmltopdf/releases/]].
 +
 +On claque //(clic droit)// sur le fichier:\\ 
 +[[https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm|wkhtmltox-0.12.5-1.centos7.x86_64.rpm]]
 +
 +Copier l'a­dresse du lien.
 +
 +Le lien copié est: https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm 
 +</WRAP>
 +<WRAP column 45%>
 +|{{ Images_Cahier-201-02-028.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +À la ligne de commande, on entre ''rpm -Uvh'' suivi d'un //[espace]//, puis on colle le lien copié ci-dessus afin d'installer le fichier ''.rpm''.
 +
 +<file>
 +[root@tchana temp]# rpm -Uvh  https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm
 +
 +Récupération de https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm
 +Préparation...                       ################################# [100%]
 +Mise à jour / installation...
 +   1:wkhtmltox-1:0.12.5-1.centos7     ################################# [100%]
 +[root@tchana temp]#
 +</file>
 +
 +On vérifie l'installation des fichiers.
 +
 +<file>
 +[root@tchana temp]# ls -als /usr/local/bin/wkhtmlto*
 +
 +36936 -rwxr-xr-x 1 root root 37818944 11 juin   2018 /usr/local/bin/wkhtmltoimage
 +37016 -rwxr-xr-x 1 root root 37900864 11 juin   2018 /usr/local/bin/wkhtmltopdf
 +[root@tchana temp]#
 +</file>
 +
 +On supprime tout dans le répertoire ''/temp''.
 +
 +<file>
 +[root@tchana temp]# rm -rf /temp/*
 +
 +[root@tchana temp]#
 +</file>
 +
 +On retourne dans le répertoire personnel de __root__.
 +
 +<file>
 +[root@tchana temp]# cd
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# pwd
 +
 +/root
 +[root@tchana ~]#
 +</file>
 +
 +===== pychart =====
 +
 +PyChart est une bibliothèque Python pour la création de PDF, PNG ou graphiques SVG en PostScript encapsulé de haute qualité. Il prend actuellement en charge les traçage linéaires, les graphiques circulaires et par barres. Parce qu'il est basé sur Python, vous pouvez utiliser le pouvoir de scriptage de Python.
 +
 +<file>
 +[root@tchana ~]# yum install -y pychart
 +
 +...
 +Résumé de la transaction
 +============================================================================================
 +Installation   1 Paquet
 +
 +Taille totale des téléchargements : 190 k
 +Taille d'installation : 749 k
 +...
 +Installé :
 +  pychart.noarch 0:1.39-17.el7
 +
 +Terminé !
 +[root@tchana ~]#
 +</file>
 +
 +===== Vérifications finales =====
 +
 +NPM
 +
 +<file>
 +[root@tchana ~]# which npm
 +
 +/usr/local/bin/npm
 +[root@tchana ~]#
 +</file>
 +
 +<file>
 +[root@tchana ~]# npm --version
 +
 +6.4.1
 +[root@tchana ~]#
 +</file>
 +
 +LESS
 +
 +<file>
 +[root@tchana ~]# which less
 +
 +/usr/bin/less
 +[root@tchana ~]#
 +</file>
 +
 +<file>
 +[root@tchana ~]# less --version
 +
 +less 458 (POSIX regular expressions)
 +Copyright (C) 1984-2012 Mark Nudelman
 +
 +less comes with NO WARRANTY, to the extent permitted by law.
 +For information about the terms of redistribution,
 +see the file named README in the less distribution.
 +Homepage: http://www.greenwoodsoftware.com/less
 +[root@tchana ~]#
 +</file>
 +
 +LESSC
 +
 +<file>
 +[root@tchana ~]# which lessc
 +
 +/usr/bin/lessc
 +[root@tchana ~]#
 +</file>
 +
 +<file>
 +[root@tchana ~]# lessc --version
 +
 +lessc 3.9.0 (Less Compiler) [JavaScript]
 +[root@tchana ~]#
 +</file>
 +
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +
 +<WRAP centeralign>**Tous les prérequis pour Odoo-12 sont remplis, on est prêt pour l'installation.**</WRAP>
 +\\ 
 +
 +====== Odoo-12 - Installation ======
 +
 +===== Pare-feu =====
 +
 +{{Images_icone-201-004_Triangle.png?25}} On ouvre le port **8069** du pare-feu __pour le réseau vert seulement__.
 +
 +<file>
 +[root@tchana ~]# config set fw_odoo service status enabled TCPPort 8069 access green
 +
 +[root@tchana ~]#
 +</file>
 +
 +Pour ouvrir le port 8069 __pour les réseaux vert et rouge__.
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# config set fw_odoo service status enabled TCPPort 8069 access green,red
 +
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +On signale le changement.
 +
 +<file>
 +[root@tchana ~]# signal-event firewall-adjust
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/shorewall/rules | grep 8069
 +
 +ACCEPT  loc  $FW  tcp  8069
 +[root@tchana ~]#
 +</file>
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# cat /etc/shorewall/rules | grep 8069
 +
 +ACCEPT  loc     $FW     tcp     8069
 +ACCEPT  net     $FW     tcp     8069
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +On affiche la configuration du port ouvert pour Odoo.
 +
 +<file>
 +[root@tchana ~]# config show fw_odoo
 +
 +fw_odoo=service
 +    TCPPort=8069
 +    access=green
 +    status=enabled
 +[root@tchana ~]#
 +</file>
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# config show fw_odoo
 +
 +fw_odoo=service
 +    TCPPort=8069
 +    access=green,red
 +    status=enabled
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +===== git clone Odoo-12 =====
 +
 +On se substitue à l'utilisateur __odoo__.\\ 
 +{{Images_icone-201-004_Triangle.png?25}} Remarquez le changement de l'invite.
 +
 +<file>
 +[root@tchana ~]# su - odoo
 +
 +[odoo@tchana ~]$
 +</file>
 +
 +On vérifie quel utilisateur nous sommes.
 +
 +<file>
 +[odoo@tchana ~]$ whoami
 +
 +odoo
 +[odoo@tchana ~]$
 +</file>
 +
 +On vérifie le chemin du répertoire courant.
 +
 +<file>
 +[odoo@tchana ~]$ pwd
 +
 +/var/lib/nethserver/vhost/odoo/odoo
 +[odoo@tchana ~]$
 +</file>
 +
 +On emploie l'utilitaire ''git'' pour télécharger la branche **12.0** d'Odoo dans le répertoire ''/opt/odoo/odoo12''.
 +
 +<file>
 +[odoo@tchana ~]$ git clone https://github.com/odoo/odoo.git --branch 12.0 --depth=1 /opt/odoo/odoo12
 +
 +Cloning into '/opt/odoo/odoo12'...
 +remote: Enumerating objects: 24260, done.
 +remote: Counting objects: 100% (24260/24260), done.
 +remote: Compressing objects: 100% (18984/18984), done.
 +remote: Total 24260 (delta 7229), reused 15015 (delta 4465), pack-reused 0
 +Receiving objects: 100% (24260/24260), 100.42 MiB | 326.00 KiB/s, done.
 +Resolving deltas: 100% (7229/7229), done.
 +Checking out files: 100% (21766/21766), done.
 +[odoo@tchana ~]$
 +</file>
 +
 +===== Environnement virtuel pour l'utilisateur odoo =====
 +
 +On active Python-36.
 +
 +<file>
 +[odoo@tchana ~]$ scl enable rh-python36 bash
 +
 +[odoo@tchana ~]$
 +</file>
 +
 +On crée un environnement virtuel pour l'utilisateur __odoo__ //(peut prendre quelques secondes)//.
 +
 +<file>
 +[odoo@tchana ~]$ python3 -m venv odoo12-venv
 +
 +[odoo@tchana ~]$
 +</file>
 +
 +On active l'environnement virtuel.
 +
 +<file>
 +[odoo@tchana ~]$ source odoo12-venv/bin/activate
 +
 +(odoo12-venv) [odoo@tchana ~]
 +</file>
 +
 +==== requirements.txt ====
 +
 +C'est ici que ''gcc'' est utilisé pour la compilation des exigences d'Odoo.
 +
 +On installe toutes les exigences contenues dans le fichier ''requirements.txt''.
 +
 +<file>
 +(odoo12-venv) [odoo@tchana ~]$ pip3 install -r /opt/odoo/odoo12/requirements.txt
 +
 +Ignoring gevent: markers 'sys_platform != "win32" and python_version >= "3.7"' don't match your environment
 +...
 +Collecting Babel==2.3.4 (from -r /opt/odoo/odoo12/requirements.txt (line 1))
 +  Downloading https://files.pythonhosted.org/packages/b4/ec/acd307eac2e23f9cab1c8bdbe29b3b1d43215e31c32f8aa91b3a97925b5b/Babel-2.3.4-py2.py3-none-any.whl (7.1MB)
 +    100% |████████████████████████████████| 7.1MB 152kB/s
 +...
 +Building wheels for collected packages: ebaysdk, feedparser, gevent, greenlet, html2text, lxml, Mako, MarkupSafe, ofxparse, psutil, pydot, pyldap, PyPDF2, pyusb, reportlab, suds-jurko, vatnumber, vobject, olefile
 +...
 +Successfully built ebaysdk feedparser gevent greenlet html2text lxml Mako MarkupSafe ofxparse psutil pydot pyldap PyPDF2 pyusb reportlab suds-jurko vatnumber vobject olefile
 +Installing collected packages: pytz, Babel, chardet, decorator, docutils, lxml, urllib3, certifi, idna, requests, ebaysdk, feedparser, greenlet, gevent, html2text, MarkupSafe, Jinja2, libsass, Mako, pbr, mock, num2words, soupsieve, beautifulsoup4, ofxparse, passlib, olefile, Pillow, psutil, psycopg2, pyparsing, pydot, pyldap, PyPDF2, pyserial, python-dateutil, pyusb, qrcode, reportlab, suds-jurko, python-stdnum, vatnumber, vobject, Werkzeug, XlsxWriter, xlwt, xlrd
 +...
 +Successfully installed Babel-2.3.4 Jinja2-2.10.1 Mako-1.0.4 MarkupSafe-0.23 Pillow-4.0.0 PyPDF2-1.26.0 Werkzeug-0.11.15 XlsxWriter-0.9.3 beautifulsoup4-4.7.1 certifi-2019.3.9 chardet-3.0.4 decorator-4.0.10 docutils-0.12 ebaysdk-2.1.5 feedparser-5.2.1 gevent-1.1.2 greenlet-0.4.10 html2text-2016.9.19 idna-2.7 libsass-0.12.3 lxml-3.7.1 mock-2.0.0 num2words-0.5.6 ofxparse-0.16 olefile-0.46 passlib-1.6.5 pbr-5.2.0 psutil-4.3.1 psycopg2-2.7.3.1 pydot-1.2.3 pyldap-2.4.28 pyparsing-2.1.10 pyserial-3.1.1 python-dateutil-2.5.3 python-stdnum-1.11 pytz-2016.7 pyusb-1.0.0 qrcode-5.3 reportlab-3.3.0 requests-2.20.0 soupsieve-1.9.1 suds-jurko-0.6 urllib3-1.24.3 vatnumber-1.2 vobject-0.9.3 xlrd-1.0.0 xlwt-1.3.0
 +You are using pip version 9.0.1, however version 19.1.1 is available.
 +You should consider upgrading via the 'pip install --upgrade pip' command.
 +(odoo12-venv) [odoo@tchana ~]$
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} On peut ignorer la suggestion pour la mise à jour de ''pip''.
 +
 +On désactive l'environnement virtuel et on le quitte.
 +
 +<file>
 +(odoo12-venv) [odoo@tchana ~]$ deactivate && exit
 +
 +exit
 +[odoo@tchana ~]$
 +</file>
 +
 +On quitte la substitution d'utilisateur.
 +
 +<file>
 +[odoo@tchana ~]$ exit
 +
 +déconnexion
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie qui nous sommes.
 +
 +<file>
 +[root@tchana ~]# whoami
 +
 +root
 +[root@tchana ~]#
 +</file>
 +
 +===== Journal =====
 +
 +==== Création du répertoire ====
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +DIR="/var/log/odoo"
 +for NAME in $DIR
 +do
 +if [ ! -d $NAME ]; then
 +   mkdir $NAME
 +   chown odoo.odoo $NAME
 +   chmod 700 $NAME
 +fi
 +done
 +
 +</file>
 +
 +On vérifie la création du répertoire.
 +
 +<file>
 +[root@tchana ~]# ls -alsd /var/log/odoo
 +
 +4 drwx------ 2 odoo odoo 6 17 mai   12:02 /var/log/odoo
 +[root@tchana ~]#
 +</file>
 +
 +==== logrotation ====
 +
 +Nous autorisons la rotation du journal //odoo-server// de telle sorte qu'il sera géré de la même manière que ceux de toutes les autres applications.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +cat > /etc/logrotate.d/odoo-server << EOF
 +/var/log/odoo/odoo-server.log {
 +
 +# Fichier de logrotate pour /var/log/odoo/odoo-server.log
 +# Michel-André 2018-06-1_22h00  Modification: 2019-05-17 pour NethServer
 +# Pour plus de détails, voir: man logrotate
 +# Rotation quotidienne
 +    daily
 +
 +# Si le fichier n'existe pas, c'est correct, pas de problème
 +    missingok
 +
 +# Grandeur maximale de 100k
 +    maxsize 100000
 +
 +# Ne conserver que 5 fichiers de log
 +    rotate 5
 +
 +# Ne pas faire de rotation si le fichier est vide.
 +    notifempty
 +
 +# Immédiatement après la permutation, un journal est créé. Chacun des attributs du journal
 +# peut être omis, auquel cas ces attributs omis pour le nouveau journal prendront les même
 +# valeurs que pour le journal original.
 +# create droits propriétaire groupe
 +create 0640 odoo odoo
 +}
 +EOF
 +
 +
 +</file>
 +
 +On vérifie la création du fichier.
 +
 +<file>
 +[root@tchana ~]# ls -ls /etc/logrotate.d/odoo-server
 +
 +4 -rw-r--r-- 1 root root 776 17 mai  12:05 /etc/logrotate.d/odoo-server
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie son contenu.
 +
 +<file>
 +[root@tchana ~]# cat /etc/logrotate.d/odoo-server
 +
 +/var/log/odoo/odoo-server.log {
 +
 +# Fichier de logrotate pour /var/log/odoo/odoo-server.log
 +# Michel-André 2018-06-1_22h00  Modification: 2019-05-17 pour NethServer
 +# Pour plus de détails, voir: man logrotate
 +# Rotation quotidienne
 +    daily
 +
 +# Si le fichier n'existe pas, c'est correct, pas de problème
 +    missingok
 +
 +# Grandeur maximale de 100k
 +    maxsize 100000
 +
 +# Ne conserver que 5 fichiers de log
 +    rotate 5
 +
 +# Ne pas faire de rotation si le fichier est vide.
 +    notifempty
 +
 +# Immédiatement après la permutation, un journal est créé. Chacun des attributs du journal
 +# peut être omis, auquel cas ces attributs omis pour le nouveau journal prendront les même
 +# valeurs que pour le journal original.
 +# create droits propriétaire groupe
 +create 0640 odoo odoo
 +}
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Il n'y a pas de ligne vide avant __/var/log/odoo/odoo-server.log {__. Ci-dessus, nous avons inséré une ligne vide pour faciliter la copie de la commande.
 +
 +{{ Images_Cahier-201-02-029.png?200}}Le journal pourra être examiné dans l'interface Web Nethserver en se rendant à: **Administration -> Logs ->** et en cliquant **/var/log/odoo/odoo-server.log**.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Le premier examen du journal sera très long à se charger, car il contiendra les infos de débogage.
 +
 +==== Sauvegarde ====
 +
 +On vérifie si le nom du fichier ''/etc/logrotate.d/odoo-server'' est déjà inséré dans le fichier d'inclusion de la sauvegarde des données: ''/etc/backup-data.d/custom.include'', sinon on l'insère.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +NouvelleInclusion="/etc/logrotate.d/odoo-server"
 +if grep -Fxq "$NouvelleInclusion" /etc/backup-data.d/custom.include
 +then
 +    # L'entrée a été trouvée dans custom.include
 +    echo -e "\nLe fichier custom.include contient déjà l'entrée:\n$NouvelleInclusion \n"
 +else
 +    # L'entrée n'a pas été trouvée dans custom.include
 +    echo -e "$NouvelleInclusion" >> /etc/backup-data.d/custom.include
 +    echo -e "\nL'entrée: $NouvelleInclusion a été ajoutée\n"
 +fi
 +
 +
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/backup-data.d/custom.include | grep /etc/logrotate.d/odoo-server
 +
 +/etc/logrotate.d/odoo-server
 +[root@tchana ~]#
 +</file>
 +
 +Ci-dessus, il n'y a pas de ligne vide avant __/etc/logrotate.d/odoo-server__. Nous en avons inséré une afin de faciliter la copie de la commande.
 +\\ 
 +
 +===== Fichier de configuration: /etc/odoo-server.conf =====
 +
 +Pour débuter, nous activons ''log_handler = :DEBUG'' pour voir tous les messages d'Odoo dans le fichier journal. Lorsque tout fonctionnera correctement, on remettra la valeur par défaut.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +cat > /etc/odoo-server.conf <<'EOT'
 +[options]
 +; Ceci est le mot de passe qui autorise les oprérations sur la base de données:
 +admin_passwd = fghtbgh
 +; OPTIONS DE LA BASE DE DONNÉES
 +db_host = localhost
 +db_port = 5432
 +db_user = odoo
 +db_password = fghtbgh
 +; PARAMÈTRES DIVERS
 +addons_path = /opt/odoo/odoo12/addons
 +load = web
 +timezone = America/Montreal
 +without-demo=all
 +no-xmlrpc = True
 +no-xmlrpcs = True
 +no-netrpc = True
 +; PARAMÈTRES DES JOURNAUX
 +logfile = /var/log/odoo/odoo-server.log
 +; MAR - Ceci est le défault
 +;log_handler = werkzeug:WARNING
 +; MAR - Pour voir tous les messageS d'Odoo, on active à :DEBUG
 +log_handler = :DEBUG
 +;log_level = warn
 +no-logrotate = True
 +EOT
 +
 +
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana odoo]# cat /etc/odoo-server.conf
 +
 +[options]
 +; Ceci est le mot de passe qui autorise les oprérations sur la base de données:
 +admin_passwd = fghtbgh
 +; OPTIONS DE LA BASE DE DONNÉES
 +db_host = localhost
 +db_port = 5432
 +db_user = odoo
 +db_password = fghtbgh
 +; PARAMÈTRES DIVERS
 +addons_path = /opt/odoo/odoo12/addons
 +load = web
 +timezone = America/Montreal
 +without-demo=all
 +no-xmlrpc = True
 +no-xmlrpcs = True
 +no-netrpc = True
 +; PARAMÈTRES DES JOURNAUX
 +logfile = /var/log/odoo/odoo-server.log
 +; MAR - Ceci est le défault
 +;log_handler = werkzeug:WARNING
 +; MAR - Pour voir tous les messageS d'Odoo, on active à :DEBUG
 +log_handler = :DEBUG
 +;log_level = warn
 +no-logrotate = True
 +[root@tchana html]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Il n'y a pas de ligne vide avant __[options]__. Ci-dessus, nous avons inséré une ligne vide pour faciliter la copie de la commande.
 +
 +{{Images_icone-201-006_Securite.png?25}} Faille de sécurité, car ce fichier contient le mot de passe de la BD et il est lisible par "other" c.-à-d. tout le monde. \\ 
 +On vérifie les droits du fichier.
 +
 +<file>
 +[root@tchana ~]# ls -als /etc/odoo-server.conf
 +
 +4 -rw-r--r-- 1 root root 639 17 mai   12:06 /etc/odoo-server.conf
 +[root@tchana ~]#
 +</file>
 +
 +On rend le script exécutable par le propriétaire/groupe et on enlève tous les droits à "other".
 +
 +<file>
 +[root@dorgee ~]# chmod 550 /etc/odoo-server.conf
 +
 +[root@dorgee ~]#
 +</file>
 +
 +On change le propriétaire et le groupe pour ''odoo:odoo''.
 +
 +<file>
 +[root@dorgee ~]# chown odoo:odoo /etc/odoo-server.conf
 +
 +[root@dorgee ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@dorgee ~]# ls -ls /etc/odoo-server.conf
 +
 +4 -r-xr-x--- 1 odoo odoo 639 17 mai   12:06 /etc/odoo-server.conf
 +[root@dorgee ~]#
 +</file>
 +
 +===== Départ/Arrêt automatique =====
 +
 +On veut qu'Odoo-12 se lance automatiquement à tous les amorçages du Serveur NethServer. Pour ce faire, on crée le fichier ''/etc/systemd/system/odoo12.service''.
 +
 +==== Fichier /etc/systemd/system/odoo12.service ====
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +cat > /etc/systemd/system/odoo12.service <<'EOT'
 +[Unit]
 +Description=Odoo12
 +Requires=postgresql-11.service
 +After=network.target postgresql-11.service
 +
 +[Service]
 +Type=simple
 +SyslogIdentifier=odoo12
 +PermissionsStartOnly=true
 +User=odoo
 +Group=odoo
 +ExecStart=/usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/odoo-server.conf
 +StandardOutput=journal+console
 +
 +[Install]
 +WantedBy=multi-user.target
 +
 +EOT
 +
 +</file>
 +
 +On vérifie la création du fichier.
 +
 +<file>
 +[root@tchana ~]# ls -als /etc/systemd/system/odoo12.service
 +
 +4 -rw-r--r-- 1 root root 394 17 mai   12:09 /etc/systemd/system/odoo12.service
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie son contenu.
 +
 +<file>
 +[root@tchana ~]# cat /etc/systemd/system/odoo12.service
 +
 +[Unit]
 +Description=Odoo12
 +Requires=postgresql-11.service
 +After=network.target postgresql-11.service
 +
 +[Service]
 +Type=simple
 +SyslogIdentifier=odoo12
 +PermissionsStartOnly=true
 +User=odoo
 +Group=odoo
 +ExecStart=/usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/odoo-server.conf
 +StandardOutput=journal+console
 +
 +[Install]
 +WantedBy=multi-user.target
 +
 +[root@tchana ~]#
 +</file>
 +
 +==== Premier démarrage d'Odoo12 ====
 +
 +On recharge la configuration du gestionnaire "systemd" en lançant la commande ''systemctl''(( **systemctl**: Peut être utilisé pour examiner et contrôler l'état du gestionnaire du système et des services "systemd". \\ //Référence:// man systemctl//(1)//. \\ \\ )) avec le paramètre ''daemon-reload''(( **systemctl daemon-reload**: Recharge la configuration du gestionnaire "systemd". Ceci relance tous les "generators" //(voir systemd.generator [7] )//, recharge tous les fichiers de l'unité et recrée l'intégralité de l'arbre de dépendance. Pendant le rechargement du démon, tous les connecteurs logiciel //(socket)// de "systemd" resteront accessibles. Donc, c’est une recharge "soft"; essentiellement, ''daemon-reload'' lit les configurations modifiées et régénère les arbres de dépendance. Cette commande ne doit pas être confondue avec la commande ''reload''. \\ \\ )).
 +
 +<file>
 +[root@tchana ~]# systemctl daemon-reload
 +
 +[root@tchana ~]#
 +</file>
 +
 +La première fois qu'on lance Odoo, on utilise les paramètre ''enable'' et ''--now''.
 +
 +<file>
 +[root@tchana ~]# systemctl enable odoo12 --now
 +
 +Created symlink from /etc/systemd/system/multi-user.target.wants/odoo12.service to /etc/systemd/system/odoo12.service.
 +[root@tchana ~]#
 +</file>
 +
 +==== Vérification ====
 +
 +{{Images_icone-201-004_Triangle.png?25}} Peut prendre quelques secondes avant qu'Odoo soit complètement démarré.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12
 +
 +● odoo12.service - Odoo12
 +   Loaded: loaded (/etc/systemd/system/odoo12.service; enabled; vendor preset: disabled)
 +   Active: active (running) since ven. 2019-05-17 12:11:23 EDT; 15s ago
 + Main PID: 25491 (scl)
 +   CGroup: /system.slice/odoo12.service
 +           ├─25491 /usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /...
 +           ├─25492 /bin/bash /var/tmp/sclETpjVl
 +           └─25495 /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/od...
 +
 +mai 17 12:11:23 tchana.micronator-dev.org systemd[1]: Started Odoo12.
 +[root@tchana ~]#
 +</file>
 +
 +===== Finalisation de l'installation =====
 +
 +==== Accès à Odoo ====
 +
 +● {{Images_icone-201-004_Triangle.png?25}} Autoriser les //témoins// et activer //JavaScript// du fureteur Internet.\\ 
 +● On se rend à la page de notre site Odoo en spécifiant le port :8069. [[http://www.micronator-dev.org:8069/|http://www.micronator-dev.org:8069]] ou [[http://10.10.10.75:8069/|http://10.10.10.75:8069]].\\ 
 +<WRAP indent>
 +* __Pas de https__ pour l'instant.\\ 
 +* L'affichage de la page peut prendre un certain temps //(minutes)//.
 +</WRAP>
 +
 +==== Création d'une nouvelle base de données ====
 +
 +{{ Images_Cahier-201-02-030.png?400}}
 +//**Master password**//:\\ 
 +Le mot de passe qu'on a spécifié dans le fichier de configuration ''/etc/odoo-server.conf'' à la ligne ''db<nowiki>_</nowiki>password = fghtbgh'', voir la section [[nethserver_201_cahier_02_odoo_12#Fichier de configuration: /etc/odoo-server.conf]].
 +
 +//**Database name**//:\\ 
 +Le nom de la base de données que créera l'installation: ''Odoo-12''.
 +
 +//**Email**//:\\ 
 +Notre adresse courriel. On utilisera cette adresse pour se loguer en tant qu'administrateur d'Odoo.
 +
 +//**Password**//:\\ 
 +Le mot de passe pour l'administrateur.
 +
 +//**Language**//:\\ 
 +On choisit, dans le menu déroulant, la langue par défaut pour notre site.
 +
 +//**Phone number**//:\\ 
 +Le numéro de téléphone de notre société.
 +
 +//**Country**//:\\ 
 +Choisir le pays pour notre site.
 +
 +//**Démo data**//:\\ 
 +Cocher pour installer des __données fictives pour l'évaluation__ d'Odoo. //(Ne pas cocher pour un site en Production.)//
 +
 +On clic **Create database** pour créer la base de données de notre société.\\
 +{{Images_icone-201-002_Lumiere.png?25}} Ce processus peut prendre un certain temps //(quelques minutes)//. Être patient!
 +
 +{{ Images_Cahier-201-02-031.png?600}}
 +<WRAP centeralign>**Victoire!\\ 
 +\\ 
 +Nous sommes prêt à utiliser Odoo.**</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +===== Paramètre du journal Odoo =====
 +
 +Maintenant que tout fonctionne correctement, dans le fichier de configuration ''/etc/odoo-server.conf'', on peut remettre le paramètre ''log<nowiki>_</nowiki>handler'' à sa valeur par défaut en dé-commentant la ligne ''log<nowiki>_</nowiki>handler = werkzeug:WARNING'' et en commentant la ligne ''<wrap em>;</wrap>log<nowiki>_</nowiki>handler = :DEBUG''.
 +
 +On utilise //vi// ou //Notepad++// à travers WinSCP pour éditer le fichier.
 +
 +=== Fichier final de configuration /etc/odoo-server.conf ===
 +
 +<WRAP box>
 +<file>
 +...
 +; LOG SETTINGS
 +logfile = /var/log/odoo/odoo-server.log
 +; MAR - Ceci est le défault
 +log_handler = werkzeug:WARNING
 +; MAR - Pour voir tous les message d'Odoo, on active à :DEBUG
 +;log_handler = :DEBUG
 +;log_level = warn
 +no-logrotate = True
 +...
 +</file>
 +</WRAP>
 +
 +À la console du serveur, on ouvre le fichier avec l'éditeur ''vi''.\\ 
 +{{Images_icone-201-001_doigt.png?22}} Vu que le fichier n'a pas de droit d'écriture, lorsque __root__ écrira les modifications, il devra utiliser <wrap em>w!</wrap> [w] + [!].
 +
 +<file>
 +vi /etc/odoo-server.conf
 +
 +</file>
 +
 +On vérifie les changements dans le fichiers ''/etc/odoo-server.conf''.
 +
 +<file>
 +[root@tchana ~]# cat /etc/odoo-server.conf | grep log_handler
 +
 +log_handler = werkzeug:WARNING
 +;log_handler = :DEBUG
 +[root@tchana ~]#
 +</file>
 +
 +Nous avons changé un paramètre important, on redémarre le service "odoo" afin qu'il recharge son fichier de configuration.
 +
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +==== Rotation du journal Odoo ====
 +
 +Le journal d'Odoo est très volumineux, car il contient toutes les entrées pour le débogage.
 +
 +<file>
 +[odoo@tchana ~]$ ls -als /var/log/odoo/odoo-server.log
 +
 +16684 -rw-r--r-- 1 odoo odoo 17082687 17 mai   13:21 /var/log/odoo/odoo-server.log
 +[odoo@tchana ~]$
 +</file>
 +
 +On force la rotation de ce journal.
 +
 +<file>
 +[odoo@tchana ~]$ logrotate -vf /etc/logrotate.d/odoo-server
 +
 +reading config file /etc/logrotate.d/odoo-server
 +Allocating hash table for state file, size 15360 B
 +
 +Handling 1 logs
 +
 +rotating pattern: /var/log/odoo/odoo-server.log  forced from command line (5 rotations)
 +empty log files are not rotated, log files >= 100000 are rotated earlier, old logs are removed
 +considering log /var/log/odoo/odoo-server.log
 +  log needs rotating
 +rotating log /var/log/odoo/odoo-server.log, log->rotateCount is 5
 +dateext suffix '-20190517'
 +glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
 +renaming /var/log/odoo/odoo-server.log.5 to /var/log/odoo/odoo-server.log.6 (rotatecount 5, logstart 1, i 5),
 +old log /var/log/odoo/odoo-server.log.5 does not exist
 +renaming /var/log/odoo/odoo-server.log.4 to /var/log/odoo/odoo-server.log.5 (rotatecount 5, logstart 1, i 4),
 +old log /var/log/odoo/odoo-server.log.4 does not exist
 +renaming /var/log/odoo/odoo-server.log.3 to /var/log/odoo/odoo-server.log.4 (rotatecount 5, logstart 1, i 3),
 +old log /var/log/odoo/odoo-server.log.3 does not exist
 +renaming /var/log/odoo/odoo-server.log.2 to /var/log/odoo/odoo-server.log.3 (rotatecount 5, logstart 1, i 2),
 +old log /var/log/odoo/odoo-server.log.2 does not exist
 +renaming /var/log/odoo/odoo-server.log.1 to /var/log/odoo/odoo-server.log.2 (rotatecount 5, logstart 1, i 1),
 +old log /var/log/odoo/odoo-server.log.1 does not exist
 +renaming /var/log/odoo/odoo-server.log.0 to /var/log/odoo/odoo-server.log.1 (rotatecount 5, logstart 1, i 0),
 +old log /var/log/odoo/odoo-server.log.0 does not exist
 +log /var/log/odoo/odoo-server.log.6 doesn't exist -- won't try to dispose of it
 +renaming /var/log/odoo/odoo-server.log to /var/log/odoo/odoo-server.log.1
 +creating new /var/log/odoo/odoo-server.log mode = 0640 uid = 985 gid = 980
 +[odoo@tchana ~]$
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -als /var/log/odoo/
 +
 +total 16688
 +    0 drwx------   2 odoo odoo       54 17 mai   13:31 .
 +    4 drwxr-xr-x. 22 root root     4096 17 mai   12:02 ..
 +    0 -rw-r-----   1 odoo odoo        0 17 mai   13:31 odoo-server.log
 +16684 -rw-r--r--   1 odoo odoo 17082687 17 mai   13:31 odoo-server.log.1
 +[root@tchana ~]#
 +</file>
 +
 +===== Désinstallation des compilateurs gcc et cpp =====
 +
 +{{Images_icone-201-006_Securite.png?25}} Le compilateur ''gcc'' installé sur un serveur est un __risque majeur de sécurité__, car un pirate pourrait s'en servir pour compiler un logiciel malveillant.
 +
 +{{Images_icone-201-002_Lumiere.png?25}} Il faut désinstaller ''gcc'', et plus tard, si nous en avions encore besoin, il suffirait de l'installer à nouveau.
 +
 +Le paquet ''gcc'' est toujours accompagné de son inséparable collègue ''cpp''.
 +
 +Nous forçons la désinstallation de ces deux RPM.
 +
 +<file>
 +[root@tchana ~]# rpm -e --nodeps gcc cpp
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie ''cpp''.
 +
 +<file>
 +[root@tchana ~]# rpm -qa | grep cpp
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie ''gcc''.
 +
 +<file>
 +[root@tchana ~]# rpm -qa | grep gcc
 +
 +libgcc-4.8.5-36.el7_6.2.x86_64
 +[root@tchana ~]#
 +</file>
 +
 +Les compilateurs ''gcc'' et ''cpp'' ont été supprimés.
 +
 +{{Images_icone-201-004_Triangle.png?25}} La librairie ''libgcc'' est utilisée par beaucoup de logiciels; __il ne faut absolument pas la désinstaller__, car un de ses utilisateurs le plus important est le programme de sauvegarde NethServer.
 +
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +
 +<WRAP centeralign>**L'installation est réussie. Tout fonctionne correctement.**</WRAP>
 +\\ 
 +
 +====== Odoo-12 -Redirection sécurisée ======
 +
 +===== Description =====
 +
 +Un grand merci à Markus Neuberger, ambassadeur de NethServer.  [[https://community.nethserver.org/t/howto-install-odoo-11/10345|https://community.nethserver.org/t/howto-install-odoo-11/10345]]
 +
 +<WRAP column 50%>
 +{{Images_icone-201-004_Triangle.png?25}} Si nous n'avons aucun site Web et que nous spécifions seulement [[http://www.micronator-dev.org/|http://www.micronator-dev.org/]] ou [[http://10.10.10.75/|http://10.10.10.75]] sans spécifier le port **8069**, nous verrions s'afficher le contenu du site Web par défaut du Serveur NethServer.
 +</WRAP>
 +<WRAP column 40%>
 +|{{ Images_Cahier-201-02-032.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +Contenu du répertoire ''/var/www/html/''.
 +
 +<file>
 +[root@tchana ~]# ls -als /var/www/html/
 +
 +total 0
 +0 drwxr-xr-x. 3 root root 25 24 avril 09:46 .
 +0 drwxr-xr-x. 4 root root 33 24 avril 09:46 ..
 +0 drwxr-xr-x. 3 root root 28  4 janv. 09:16 .well-known
 +[root@tchana ~]#
 +</file>
 +
 +==== Serveur branché directement à l'Internet ====
 +
 +Voir la section __Certificat Let's Encrypt__ du 
 +[[nethserver_101_cahier_05_vdsl_fqdn_internet_et_nethserver#Certificat Let's Encrypt|Cahier-05]]
 +: //VDSL, FQDN, Internet et NethServer// du "Cours NethServer-101".
 +\\ 
 +
 +===== Préparation pour la demande d'un certificat Let's Encrypt =====
 +
 +<WRAP column 32%>
 +Avant d'installer un certificat Let's Encrypt selon la section __Certificat pour un domaine LOCAL__ du 
 +[[nethserver_101_cahier_04_local_certificat_let_encrypt#Certificat pour un domaine LOCAL|Cahier-04]]
 +: //NethServer LOCAL & Certificat Let's Encrypt// du "Cours NethServer-101", il faut ajouter les CNAME //odoo//, //www.odoo//, et //mail.odoo// chez [[https://www.cloudflare.com/|https://www.cloudflare.com/]].
 +</WRAP>
 +<WRAP column 58%>
 +|{{ Images_Cahier-201-02-033.png?700 }}|
 +
 +|{{ Images_Cahier-201-02-034.png?700 }}|
 +
 +|{{ Images_Cahier-201-02-035.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-036.png?600}}
 +On vérifie le résultat.
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-037.png?600}}
 +==== Création d'une entrée DNS pour Odoo ====
 +
 +**Configuration -> DNS ->** onglet  **Hôtes -> CRÉER NOUVEAU**.
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 32%>
 +<nowiki>-</nowiki> On entre le informations demandées.\\ 
 +<nowiki>-</nowiki> **SOUMETTRE**
 +|{{ Images_Cahier-201-02-038.png?400 }}|
 +</WRAP>
 +<WRAP column 60%>
 +\\ 
 +On vérifie le résultat.
 +|{{ Images_Cahier-201-02-039.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\ 
 +
 +===== Demande d'un certificat de test =====
 +
 +On force ''--force'' la demande d'un certificat de TEST ''--test''  pour notre domaine //micronator-dev.org// et six de ses CNAME.
 +
 +{{Images_icone-201-003_Note.png?25}} Le certificat sera "émis pour" le premier domaine de la liste, c.-à-d. //micronator-dev.org//. Voir //**Émis pour**// plus bas dans ce document sous la section [[nethserver_201_cahier_02_odoo_12#Demande d'un certificat officiel]].
 +
 +<file>
 +[root@tchana ~]# /root/.acme.sh/acme.sh                                             \
 +                      --issue                                                       \
 +                      --dns dns_cf                                                  \
 +                      -d micronator-dev.org                                         \
 +                      -d www.micronator-dev.org                                     \
 +                      -d mail.micronator-dev.org                                    \
 +                      -d wpad.micronator-dev.org                                    \
 +                      -d odoo.micronator-dev.org                                    \
 +                      -d www.odoo.micronator-dev.org                                \
 +                      -d mail.odoo.micronator-dev.org                               \
 +                      --cert-file /etc/pki/tls/certs/cert.pem                       \
 +                      --ca-file /etc/pki/tls/certs/chain.pem                        \
 +                      --key-file /etc/pki/tls/private/privkey.pem                   \
 +                      --reloadcmd "/sbin/e-smith/signal-event certificate-update"   \
 +                      --force                                                       \
 +                      --test
 +
 +...
 +[sam. mai 18 11:35:55 EDT 2019] Installing CA to:/etc/pki/tls/certs/chain.pem
 +[sam. mai 18 11:35:55 EDT 2019] Installing key to:/etc/pki/tls/private/privkey.pem
 +[sam. mai 18 11:35:55 EDT 2019] Run reload cmd: /sbin/e-smith/signal-event certificate-update
 +[sam. mai 18 11:35:59 EDT 2019] Reload success
 +[root@tchana ~]#
 +</file>
 +
 +La demande d'un certificat de //test// est réussie.
 +\\ 
 +
 +===== Demande d'un certificat officiel =====
 +
 +On force le renouvellement pour l'obtention d'un certificat officiel.
 +
 +<file>
 +[root@tchana ~]# /root/.acme.sh/acme.sh                                             \
 +                      --issue                                                       \
 +                      --dns dns_cf                                                  \
 +                      -d micronator-dev.org                                         \
 +                      -d www.micronator-dev.org                                     \
 +                      -d mail.micronator-dev.org                                    \
 +                      -d wpad.micronator-dev.org                                    \
 +                      -d odoo.micronator-dev.org                                    \
 +                      -d www.odoo.micronator-dev.org                                \
 +                      -d mail.odoo.micronator-dev.org                               \
 +                      --cert-file /etc/pki/tls/certs/cert.pem                       \
 +                      --ca-file /etc/pki/tls/certs/chain.pem                        \
 +                      --key-file /etc/pki/tls/private/privkey.pem                   \
 +                      --reloadcmd "/sbin/e-smith/signal-event certificate-update"   \
 +                      --force
 +
 +...
 +[sam. mai 18 11:40:01 EDT 2019] Installing cert to:/etc/pki/tls/certs/cert.pem
 +[sam. mai 18 11:40:01 EDT 2019] Installing CA to:/etc/pki/tls/certs/chain.pem
 +[sam. mai 18 11:40:01 EDT 2019] Installing key to:/etc/pki/tls/private/privkey.pem
 +[sam. mai 18 11:40:01 EDT 2019] Run reload cmd: /sbin/e-smith/signal-event certificate-update
 +[sam. mai 18 11:40:03 EDT 2019] Reload success
 +[root@tchana ~]#
 +</file>
 +
 +La demande d'un certificat officiel a été couronné de succès.
 +
 +Vérification du certificat Let's Encrypt à l'aide de Firefox en se rendant à https://www.micronator-dev.org.
 +
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Le cadenas est vert.\\ 
 +<nowiki>-</nowiki> On clique l'icône <wrap em>></wrap>.
 +|{{ Images_Cahier-201-02-040.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +**Plus d'informations**.
 +|{{ Images_Cahier-201-02-041.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Onglet **Sécurité**.\\ 
 +<nowiki>-</nowiki> **Afficher le certificat**.
 +|{{ Images_Cahier-201-02-042.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +<WRAP column 45%>
 +<nowiki>-</nowiki> Onglet **Général**.\\ 
 +<nowiki>-</nowiki> //**Émis pour**// micronator-dev.org //(le premier domai­ne de la liste, lors de la demande)//.\\ 
 +<nowiki>-</nowiki> //**Émis par**// Let's Encrypt Authority X3.
 +|{{ Images_Cahier-201-02-043.png?400 }}|
 +</WRAP>
 +<WRAP column 45%>
 +<nowiki>-</nowiki> Onglet **Détails**.\\ 
 +<nowiki>-</nowiki> **Nom alternatif du sujet du certificat**.\\ 
 +<nowiki>-</nowiki> Tous les CNAME sont présents.\\ 
 +<nowiki>-</nowiki> **Fermer** toutes les fenêtres.
 +|{{ Images_Cahier-201-02-044.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-045.png?400}}
 +Nous sommes sur un réseau LOCAL et vu que nous n'avons pas de serveur DNS pour ce réseau, on ajoute des entrées pour Odoo dans le fichier:
 +
 +''C:\Windows\System32\drivers\etc\hosts''
 +
 +du poste de travail afin qu'il puisse trouver l'adresse IP de notre serveur Odoo.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Pour un serveur directement branché à l'Internet, cette procédure de modification du fichier ''hosts'' du poste de travail n'est pas nécessaire s'il existe des CNAME "odoo" chez le régistraire du domaine.
 +<WRAP clear></WRAP>
 +
 +===== Redirection par le module Proxy inverse =====
 +
 +//Référence:// [[http://docs.nethserver.org/en/v7/ui/ProxyPass.html|http://docs.nethserver.org/en/v7/ui/ProxyPass.html]].
 +
 +On installe le module **Proxy Inverse** qui s'occupera de rediriger les accès à Odoo vers le bon endroit.
 +
 +==== Installation ====
 +
 +{{ Images_Cahier-201-02-046.png?600}}
 +**Administration -> Gestionnaire des logiciels ->** onglet **Disponible ->** cocher **Proxy inverse -> AJOUTER**.
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +\\ 
 +**APPLIQUER LES CHAN­GE­MENTS**.
 +|{{ Images_Cahier-201-02-047.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +**Recharger la page**.
 +|{{ Images_Cahier-201-02-048.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +Le nouveau menu //**Proxy inverse**// est disponible.
 +|{{ Images_Cahier-201-02-049.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +===== Configuration en mandataire inversé =====
 +
 +<WRAP column 47%>
 +On configure le Serveur NethServer en tant que mandataire inversé pour //www.odoo.micronator-dev.org//.
 +
 +**Passerelle -> Proxy inverse ->** onglet **Hôtes virtuels -> CRÉER NOUVEAU**.
 +
 +{{ Images_Cahier-201-02-050.png?200 }}
 +
 +On entre les informations demandées.
 +
 +**-> SOUMETTRE**.
 +</WRAP>
 +<WRAP column 47%>
 +|{{ Images_Cahier-201-02-051.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-052.png?600}}
 +On vérifie le résultat.
 +<WRAP clear></WRAP>
 +\\ 
 +
 +===== Vérification de la connexion redirigée et sécurisée =====
 +
 +{{Images_icone-201-001_doigt.png?22}} On __vidange l'historique__ de notre navigateur et le cache DNS du poste de travail, puis on s'assure que //java script// et les //témoins// soient activés.
 +
 +On se rend à l'URL  https://www.odoo.micronator-dev.org, on ajoute une exception pour le nouveau certificat.
 +
 +{{Images_icone-201-003_Note.png?25}} Si on utilise seulement le protocole http://..., il sera transformé en https://..., car lors de la configuration à l'onglet **Hôtes virtuels**, nous avons coché: ☑ **Nécessite une connexion SSL chiffrée**.
 +
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Le cadenas est __vert__.\\ 
 +<nowiki>-</nowiki> On se connecte.
 +|{{ Images_Cahier-201-02-053.png?400 }}|
 +</WRAP>
 +<WRAP column 60%>
 +\\ 
 +La page d'accueil d'Odoo s'affiche et le cadenas est toujours __vert__.
 +|{{ Images_Cahier-201-02-054.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +{{Images_icone-201-003_Note.png?25}} Le cadenas est toujours __vert__, car le certificat a été émis par Let's Encrypt qui est une autorité de certification reconnue et la connexion est sécurisée par un chiffrement TLS/SSL.
 +\\ 
 +
 +===== Messagerie électronique =====
 +
 +On configure la messagerie électronique pour le domaine //odoo.micronator-dev.org//.
 +
 +<WRAP column 25%>
 +<nowiki>-</nowiki> **Configuration -> Messagerie électronique ->** onglet **Domaines**.\\
 +<nowiki>-</nowiki> **CRÉER NOUVEAU**.
 +
 +<nowiki>-</nowiki> On entre les informations demandées.\\ 
 +<nowiki>-</nowiki> **SOUMETTRE**.
 +</WRAP>
 +<WRAP column 25%>
 +|{{ Images_Cahier-201-02-055.png?400 }}|
 +</WRAP>
 +<WRAP column 40%>
 +|{{ Images_Cahier-201-02-056.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +{{ Images_Cahier-201-02-057.png?750}}
 +On vérifie le résultat.
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 50%>
 +Pour accéder à //**Webmail**// de ce domaine,\\ 
 +https://mail.odoo.micronator-dev.org/webmail/.
 +
 +{{Images_icone-201-003_Note.png?25}} Le nom du serveur n'apparaît pas dans l'écran au-dessus de //**Connexion**// car nous l'avons enlevé. Pour plus de détails, voir dans le Cahier-03 du "Cours NethServer-101, la section: 
 +
 +[[nethserver_101_cahier_03_creation_un_serveur_virtuel#Écran conventionnel de démarrage|Nom du serveur dans l'écran de connexion à Webmail]]
 +
 +
 +\\ 
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +</WRAP>
 +<WRAP column 40%>
 +|{{ Images_Cahier-201-02-058.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +====== Odoo-12 - Post-scriptum ======
 +
 +===== Vérification du démarrages des services =====
 +
 +==== PostgreSQL ====
 +
 +On vérifie son statut.
 +
 +<file>
 +[root@tchana ~]# systemctl status postgresql-11
 +
 +● postgresql-11.service - PostgreSQL 11 database server
 +   Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disabled)
 +   Active: active (running) since sam. 2019-05-18 11:16:10 EDT; 5h 31min ago
 +     Docs: https://www.postgresql.org/docs/11/static/
 + Main PID: 3391 (postmaster)
 +   CGroup: /system.slice/postgresql-11.service
 +           ├─ 3391 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
 +           ├─ 3882 postgres: logger
 +           ├─ 4688 postgres: checkpointer
 +           ├─ 4689 postgres: background writer
 +           ├─ 4690 postgres: walwriter
 +           ├─ 4691 postgres: autovacuum launcher
 +           ├─ 4692 postgres: stats collector
 +           ├─ 4693 postgres: logical replication launcher
 +           ├─11376 postgres: odoo Odoo-12 127.0.0.1(52196) idle
 +           ├─11385 postgres: odoo Odoo-12 127.0.0.1(52208) idle
 +           ├─11388 postgres: odoo Odoo-12 127.0.0.1(52214) idle
 +           └─11389 postgres: odoo Odoo-12 127.0.0.1(52216) idle
 +
 +mai 18 11:15:31 tchana.micronator-dev.org systemd[1]: Starting PostgreSQL 11 database se....
 +mai 18 11:15:43 tchana.micronator-dev.org postmaster[3391]: 2019-05-18 11:15:43.272 EDT …432
 +mai 18 11:15:43 tchana.micronator-dev.org postmaster[3391]: 2019-05-18 11:15:43.764 EDT …2 »
 +mai 18 11:15:45 tchana.micronator-dev.org postmaster[3391]: 2019-05-18 11:15:45.430 EDT …2 »
 +mai 18 11:15:46 tchana.micronator-dev.org postmaster[3391]: 2019-05-18 11:15:46.892 EDT …ces
 +mai 18 11:15:46 tchana.micronator-dev.org postmaster[3391]: 2019-05-18 11:15:46.892 EDT … ».
 +mai 18 11:16:10 tchana.micronator-dev.org systemd[1]: Started PostgreSQL 11 database server.
 +Hint: Some lines were ellipsized, use -l to show in full.
 +[root@tchana ~]#
 +</file>
 +
 +==== Odoo ====
 +
 +On vérifie son statut.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12
 +
 +● odoo12.service - Odoo12
 +   Loaded: loaded (/etc/systemd/system/odoo12.service; enabled; vendor preset: disabled)
 +   Active: active (running) since sam. 2019-05-18 11:16:10 EDT; 5h 33min ago
 + Main PID: 4694 (scl)
 +   CGroup: /system.slice/odoo12.service
 +           ├─4694 /usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /o...
 +           ├─4697 /bin/bash /var/tmp/sclX2bC8i
 +           └─4700 /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/odo...
 +
 +mai 18 11:16:10 tchana.micronator-dev.org systemd[1]: Started Odoo12.
 +[root@tchana ~]#
 +</file>
 +
 +===== Administration d'Odoo =====
 +
 +Pour administrer Odoo, il suffit de se connecter avec le justificatif choisi lors de la [[nethserver_201_cahier_02_odoo_12#Finalisation de l'installation]].\\ 
 +● On se rend à: https://www.odoo.micronator-dev.org.\\ 
 +● On peut aussi utiliser http://www.odoo.micronator-dev.org qui sera transformé en http<wrap em>s</wrap>...
 +
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Le cadenas est __vert__.\\ 
 +<nowiki>-</nowiki> On se connecte.
 +|{{ Images_Cahier-201-02-059.png?400 }}|
 +</WRAP>
 +<WRAP column 60%>
 +\\ 
 +La page d'accueil d'Odoo s'affiche et le cadenas est toujours __vert__.
 +|{{ Images_Cahier-201-02-060.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +===== Fichiers journaux =====
 +
 +==== PostgreSQL ====
 +
 +Le fichier du journal de //PostgreSQL// se trouve dans le répertoire ''/var/lib/pgsql/11/data/log/''.
 +
 +==== Odoo ====
 +
 +Afin de vous assurer que tout ait démarré correctement, on consulte les journaux.
 +
 +● À l'aide de l'interface Web:  **Administration -> Logs -> /var/log/odoo/odoo-server.log**.\\ 
 +● Directement dans les fichiers ''/var/log/messages'' et ''/var/log/odoo/odoo-server.log''.
 +
 +==== Fichier /var/log/odoo/odoo-server.log ====
 +
 +On peut aussi utiliser la console du serveur pour vérifier le journal d'Odoo afin de s'assurer qu'il n'existe pas de modules manquants.
 +
 +<file>
 +[root@tchana ~]# cat /var/log/odoo/odoo-server.log | grep "module is not available"
 +
 +2019-05-29 17:04:13,742 4077 INFO Odoo-12 odoo.addons.sms.wizard.send_sms: The `phonenumbers` Python module is not available. Phone number validation will be skipped. Try `pip3 install phonenumbers` to install it.
 +[root@tchana ~]#
 +</file>
 +
 +On voit que le module //**phonenumbers**// n'est pas disponible.
 +
 +=== Installation du module manquant ===
 +
 +On se substitue à l'utilisateur __odoo__.
 +
 +<file>
 +[root@tchana ~]# su - odoo
 +
 +Dernière connexion : mercredi 22 mai 2019 à 00:12:34 EDT sur pts/1
 +[odoo@tchana ~]$
 +</file>
 +
 +On active //Python36//.
 +
 +<file>
 +[odoo@tchana ~]$ scl enable rh-python36 bash
 +
 +[odoo@tchana ~]$
 +</file>
 +
 +On s'assure que nous sommes dans le répertoire personnel de l'utilisateur __odoo__.
 +
 +<file>
 +[odoo@tchana ~]$ pwd
 +
 +/opt/odoo
 +[odoo@tchana ~]$
 +</file>
 +
 +On active l'environnement virtuel //odoo12-venv//.
 +
 +<file>
 +[odoo@tchana ~]$ source odoo12-venv/bin/activate
 +
 +(odoo12-venv) [odoo@tchana ~]$
 +</file>
 +
 +On installe le module //**phonenumbers**//.
 +
 +<file>
 +(odoo12-venv) [odoo@tchana ~]$ pip3 install phonenumbers
 +
 +Collecting phonenumbers
 +  Downloading https://files.pythonhosted.org/packages/00/13/118a79e417f06a23473d28de65db95f3a14a4548cf39cdf407f8ffb335a1/phonenumbers-8.10.12-py2.py3-none-any.whl (2.6MB)
 +    100% |████████████████████████████████| 2.6MB 359kB/s
 +Installing collected packages: phonenumbers
 +Successfully installed phonenumbers-8.10.12
 +You are using pip version 9.0.1, however version 19.1.1 is available.
 +You should consider upgrading via the 'pip install --upgrade pip' command.
 +(odoo12-venv) [odoo@tchana ~]$
 +</file>
 +
 +On désactive l'environnement virtuel et on quitte.
 +
 +<file>
 +(odoo12-venv) [odoo@tchana ~]$ deactivate && exit
 +
 +exit
 +[odoo@tchana ~]$
 +</file>
 +
 +On vérifie qui nous sommes.
 +
 +<file>
 +[odoo@tchana ~]$ whoami
 +
 +odoo
 +[odoo@tchana ~]$
 +</file>
 +
 +On quitte la substitution d'utilisateur.
 +
 +<file>
 +[odoo@tchana ~]$ exit
 +
 +déconnexion
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie qui nous sommes.
 +
 +<file>
 +[root@tchana ~]# whoami
 +
 +root
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} Le module manquant a été installé.
 +
 +On redémarre Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie le journal.
 +
 +<file>
 +[root@tchana ~]# cat /var/log/odoo/odoo-server.log | grep "module is not available"
 +
 +2019-05-29 17:04:13,742 4077 INFO Odoo-12 odoo.addons.sms.wizard.send_sms: The `phonenumbers` Python module is not available. Phone number validation will be skipped. Try `pip3 install phonenumbers` to install it.
 +[root@tchana ~]#
 +</file>
 +
 +Il n'existe __aucune nouvelle entrée__ indiquant un module manquant.
 +
 +On vérifie pour des erreurs.
 +
 +<file>
 +[root@tchana ~]# cat /var/log/odoo/odoo-server.log | grep -i error
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie pour des avertissements.
 +
 +<file>
 +[root@tchana ~]# cat /var/log/odoo/odoo-server.log | grep -i warning
 +
 +2019-05-29 16:35:20,393 4055 WARNING Odoo-12 odoo.http: CSRF validation failed on path '/web/login'
 +2019-05-29 16:35:36,662 4055 WARNING Odoo-12 odoo.http: CSRF validation failed on path '/web/login'
 +2019-05-29 16:35:58,848 4055 WARNING Odoo-12 odoo.http: CSRF validation failed on path '/web/login'
 +2019-05-29 16:36:10,038 4055 WARNING Odoo-12 odoo.http: CSRF validation failed on path '/web/login'
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} On peut ignorer ces avertissements car il se produisent si vous laissez la page '/web/login' ouverte trop longtemps: le jeton a une durée de vie limitée. Par conséquent, si vous attendez trop longtemps, la connexion peut échouer. Si cela se produit, recharger la page.
 +\\ 
 +\\ 
 +
 +===== Changements de mots de passe =====
 +
 +==== Utilisateur odoo de PostgreSQL ====
 +
 +Vous pouvez trouver le mot de passe de l'utilisateur __odoo de PostgreSQL__ //(l'utilisateur qui gère votre base de données Odoo-12)// dans le fichier de configuration ''/etc/odoo-server.conf''.
 +
 +<file>
 +[root@tchana ~]# cat /etc/odoo-server.conf | grep db_password
 +
 +db_password = fghtbgh
 +[root@tchana ~]#
 +</file>
 +
 +Si le mot de passe a été perdu ou piraté, on doit changer le mot de passe de l'utilisateur __odoo de PostgreSQL__:
 +
 +  * à la console du Serveur NethServer,\\ 
 +  * à la console de PostgreSQL et
 +  * dans le fichier ''/etc/odoo-server.conf''.
 +
 +==== À la console du Serveur NethServer ====
 +
 +On change le __mot de passe Linux__ de l'utilisateur __odoo__.
 +
 +<file>
 +[root@tchana ~]# passwd odoo
 +
 +Changement de mot de passe pour l'utilisateur odoo.
 +Nouveau mot de passe : nouveau-mot-de-passe-pour-odoo
 +MOT DE PASSE INCORRECT : Le mot de passe comporte moins de 8 caractères
 +Retapez le nouveau mot de passe : nouveau-mot-de-passe-pour-odoo
 +passwd : mise à jour réussie de tous les jetons d'authentification.
 +[root@tchana ~]#
 +</file>
 +
 +L'avertissement "MOT DE PASSE INCORRECT : Le mot de passe comporte moins de 8 caractères" est normal dans notre cas, car nous utilisons le mot de passe du fameux Général Toto qui n'a que 7 caractères.
 +
 +{{Images_icone-201-006_Securite.png?25}} Il ne faut pas prendre notre exemple pour un serveur en Production, mais un mot de passe robuste.\\ 
 +{{Images_icone-201-004_Triangle.png?25}} À la console du serveur, NethServer exige seulement une longueur minimum de 8 caractères pour le mot de passe. Dans l'interface Web, il n'exige que 7 caractères, mais le mot de passe doit contenir: au moins 1 chiffre, 1 caractère majuscule, 1 caractère minuscule, 1 caractère spécial, 5 caractères différents, ne pas être présent dans les dictionnaires de mots courants et être différent du nom d'utilisateur. De plus, il est impossible de répéter des motifs formés de 3 caractères ou plus //(par exemple, le mot de passe As<wrap em>1.$</wrap>AS<wrap em>1.$</wrap> n'est pas valide)//.
 +
 +==== A la console de PostgreSQL ====
 +
 +Il faut se substituer au super-utilisateur __postgres__, puis ce dernier change le mot de passe de l'utilisateur __odoo__ de PostgreSQL.
 +
 +À la console du serveur, on se substitue à l'utilisateur __postgres__.
 +
 +<file>
 +[root@tchana ~]# su - postgres
 +
 +-bash-4.2$
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +-bash-4.2$ whoami
 +
 +postgres
 +-bash-4.2$
 +</file>
 +
 +L'utilisateur __postgres__ entre dans la console PostgreSQL.
 +
 +<file>
 +-bash-4.2$ psql
 +
 +psql (11.3))
 +Saisissez « help » pour l'aide.
 +
 +postgres=#
 +</file>
 +
 +On change le mot de passe de l'utilisateur __odoo de PostgreSQL__.
 +
 +<file>
 +postgres=# ALTER ROLE odoo WITH PASSWORD 'nouveau-mot-de-passe';
 +
 +ALTER ROLE
 +postgres=#
 +</file>
 +
 +On quitte la console PostgreSQL.
 +
 +<file>
 +postgres=# \q
 +
 +-bash-4.2$
 +</file>
 +
 +On retourne à l'utilisateur __root__.
 +
 +<file>
 +-bash-4.2$ exit
 +
 +déconnexion
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# whoami
 +
 +root
 +[root@tchana ~]#
 +</file>
 +
 +==== Dans le fichier /etc/odoo-server.conf ====
 +
 +{{Images_icone-201-004_Triangle.png?25}} IMPORTANT. Le changement de mot de passe de l'utilisateur __odoo__ dans PostgreSQL ne modifie pas celui dans le fichier ''/etc/odoo-server.conf''. Il faut éditer ce fichier et changer le mot de passe sur la ligne: ''db<nowiki>_</nowiki>password = nouveau-mot-de-passe''.
 +
 +On édite le fichier ''/etc/odoo-server.conf'' et on change le mot de passe de l'utilisateur __odoo__ de PostgreSQL.
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/odoo-server.conf | grep db_password
 +
 +db_password = fghtbgh
 +[root@tchana ~]#
 +</file>
 +
 +==== Redémarrage de PostgreSQL ====
 +
 +On redémarre le service PostgreSQL.
 +
 +<file>
 +[root@tchana ~]# systemctl restart postgresql-11
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# systemctl status postgresql-11
 +
 +● postgresql-11.service - PostgreSQL 11 database server
 +   Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disabled)
 +   Active: active (running) since dim. 2019-05-19 13:16:36 EDT; 49s ago
 +     Docs: https://www.postgresql.org/docs/11/static/
 +  Process: 7994 ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 + Main PID: 8000 (postmaster)
 +   CGroup: /system.slice/postgresql-11.service
 +           ├─8000 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
 +           ├─8002 postgres: logger
 +           ├─8004 postgres: checkpointer
 +           ├─8005 postgres: background writer
 +           ├─8006 postgres: walwriter
 +           ├─8007 postgres: autovacuum launcher
 +           ├─8008 postgres: stats collector
 +           └─8009 postgres: logical replication launcher
 +
 +mai 19 13:16:36 tchana.micronator-dev.org systemd[1]: Stopped PostgreSQL 11 database server.
 +mai 19 13:16:36 tchana.micronator-dev.org systemd[1]: Starting PostgreSQL 11 database se....
 +mai 19 13:16:36 tchana.micronator-dev.org postmaster[8000]: 2019-05-19 13:16:36.472 EDT …432
 +mai 19 13:16:36 tchana.micronator-dev.org postmaster[8000]: 2019-05-19 13:16:36.475 EDT …2 »
 +mai 19 13:16:36 tchana.micronator-dev.org postmaster[8000]: 2019-05-19 13:16:36.480 EDT …2 »
 +mai 19 13:16:36 tchana.micronator-dev.org postmaster[8000]: 2019-05-19 13:16:36.495 EDT …ces
 +mai 19 13:16:36 tchana.micronator-dev.org postmaster[8000]: 2019-05-19 13:16:36.495 EDT … ».
 +mai 19 13:16:36 tchana.micronator-dev.org systemd[1]: Started PostgreSQL 11 database server.
 +Hint: Some lines were ellipsized, use -l to show in full.
 +[root@tchana ~]#
 +</file>
 +
 +==== Redémarrage d'Odoo ====
 +
 +On redémarre le service Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12
 +
 +● odoo12.service - Odoo12
 +   Loaded: loaded (/etc/systemd/system/odoo12.service; enabled; vendor preset: disabled)
 +   Active: active (running) since dim. 2019-05-19 13:21:24 EDT; 41s ago
 + Main PID: 8324 (scl)
 +   CGroup: /system.slice/odoo12.service
 +           ├─8324 /usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /o...
 +           ├─8325 /bin/bash /var/tmp/sclaw6YFd
 +           └─8328 /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/odo...
 +
 +mai 19 13:21:24 tchana.micronator-dev.org systemd[1]: Stopped Odoo12.
 +mai 19 13:21:24 tchana.micronator-dev.org systemd[1]: Started Odoo12.
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Après un changement de mot de passe, on supprime l'historique du fureteur Internet, on se reconnecte à Odoo et on vérifie quelques pages.
 +
 +==== Super-utilisateur de PostgreSQL ====
 +
 +Si le mot de passe a été perdu ou piraté, on doit changer le mot de passe du super utilisateur PostgreSQL __postgres__.
 +
 +Vous pouvez trouver le mot de passe du super utilisateur PostgreSQL __postgres__ dans le fichier de configuration ''/etc/odoo-server.conf''.
 +
 +<file>
 +[root@tchana ~]# cat /etc/odoo-server.conf | grep admin_passwd
 +
 +admin_passwd = fghtbgh
 +[root@tchana ~]#
 +</file>
 +
 +Si on veut changer le mot de passe du super utilisateur PostgreSQL __postgres__,  il faut aussi le changer:
 +
 +  - à la console du Serveur NethServer,
 +  - à la console de PostgreSQL,
 +  - dans le fichier ''/etc/odoo-server.conf'' et
 +  - dans le fichier ''/var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh'' - pour ce dernier voir la section [[nethserver_201_cahier_02_odoo_12#Script de sauvegarde PostgreSQL]].
 +
 +==== À la console du Serveur NethServer ====
 +
 +On vérifie si nous sommes __root__.
 +
 +<file>
 +root@tchana ~]# whoami
 +
 +root
 +[root@tchana ~]#
 +</file>
 +
 +On change __le mot de passe Linux__ du super-utilisateur __postgres__.
 +
 +<file>
 +[root@tchana ~]# passwd postgres
 +
 +Changement de mot de passe pour l'utilisateur postgres.
 +Entrez le nouveau mot de passe UNIX : nouveau-mot-de-passe-pour-postgres
 +Retapez le nouveau mot de passe UNIX : nouveau-mot-de-passe-pour-postgres
 +passwd : mise à jour réussie de tous les jetons d'authentification.
 +[root@tchana ~]#
 +</file>
 +
 +==== À la console de PostgreSQL ====
 +
 +On se substitue au super-utilisateur __postgres__.
 +
 +<file>
 +[root@tchana ~]# su - postgres
 +
 +Dernière connexion : dimanche 19 mai 2019 à 13:14:13 EDT sur pts/0
 +-bash-4.2$
 +</file>
 +
 +On ouvre la console PostgreSQL.
 +
 +<file>
 +-bash-4.2$ psql
 +
 +psql (11.3)
 +Saisissez « help » pour l'aide.
 +
 +postgres=#
 +</file>
 +
 +On change le mot de passe du super-utilisateur __postgres__.
 +
 +<file>
 +postgres=# \password
 +
 +Saisissez le nouveau mot de passe : nouveau-mot-de-passe-du-super-utilisateur
 +Saisissez-le à nouveau : nouveau-mot-de-passe-du-super-utilisateur
 +postgres=#
 +</file>
 +
 +On sort de la console PostgreSQL.
 +
 +<file>
 +postgres=# \q
 +
 +-bash-4.2$
 +</file>
 +
 +On retourne à l'utilisateur __root__.
 +
 +<file>
 +-bash-4.2$ exit
 +
 +déconnexion
 +[root@tchana ~]#
 +</file>
 +
 +==== Dans le fichier /etc/odoo-server.conf ====
 +
 +On édite le fichier ''/etc/odoo-server.conf'' et on change le mot de passe du super-utilisateur de PostgreSQL.
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/odoo-server.conf | grep admin_passwd
 +
 +admin_passwd = fghtbgh
 +[root@tchana ~]#
 +</file>
 +
 +==== Dans le fichier /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh ====
 +
 +Il faut aussi changer le mot de passe du super-utilisateur __postgres__ dans le script de sauvegarde/récupération de la base de données odoo.
 +
 +On édite le fichier ''/var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh'' //(voir le paragraphe [[nethserver_201_cahier_02_odoo_12#Script de sauvegarde PostgreSQL]])// et on change le mot de passe PostgreSQL de l'utilisateur __postgres__.
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh | grep MDP_SUPER_utilisateur=
 +
 +MDP_SUPER_utilisateur=fghtbgh
 +[root@tchana ~]#
 +</file>
 +
 +==== Réamorçage de PostgreSQL ====
 +
 +On réamorce PostgreSQL.
 +
 +<file>
 +[root@tchana ~]# systemctl restart postgresql-11
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# systemctl status postgresql-11
 +
 +● postgresql-11.service - PostgreSQL 11 database server
 +   Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disabled)
 +   Active: active (running) since dim. 2019-05-19 14:03:45 EDT; 58s ago
 +     Docs: https://www.postgresql.org/docs/11/static/
 +  Process: 11052 ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 + Main PID: 11058 (postmaster)
 +   CGroup: /system.slice/postgresql-11.service
 +           ├─11058 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
 +           ├─11061 postgres: logger
 +           ├─11063 postgres: checkpointer
 +           ├─11064 postgres: background writer
 +           ├─11065 postgres: walwriter
 +           ├─11066 postgres: autovacuum launcher
 +           ├─11067 postgres: stats collector
 +           └─11068 postgres: logical replication launcher
 +
 +mai 19 14:03:45 tchana.micronator-dev.org systemd[1]: Stopped PostgreSQL 11 database server.
 +mai 19 14:03:45 tchana.micronator-dev.org systemd[1]: Starting PostgreSQL 11 database se....
 +mai 19 14:03:45 tchana.micronator-dev.org postmaster[11058]: 2019-05-19 14:03:45.169 EDT…432
 +mai 19 14:03:45 tchana.micronator-dev.org postmaster[11058]: 2019-05-19 14:03:45.172 EDT…2 »
 +mai 19 14:03:45 tchana.micronator-dev.org postmaster[11058]: 2019-05-19 14:03:45.178 EDT…2 »
 +mai 19 14:03:45 tchana.micronator-dev.org postmaster[11058]: 2019-05-19 14:03:45.193 EDT…ces
 +mai 19 14:03:45 tchana.micronator-dev.org postmaster[11058]: 2019-05-19 14:03:45.193 EDT… ».
 +mai 19 14:03:45 tchana.micronator-dev.org systemd[1]: Started PostgreSQL 11 database server.
 +Hint: Some lines were ellipsized, use -l to show in full.
 +[root@tchana ~]#
 +</file>
 +
 +==== Réamorçage d'Odoo ====
 +
 +On réamorce le service Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12
 +
 +● odoo12.service - Odoo12
 +   Loaded: loaded (/etc/systemd/system/odoo12.service; enabled; vendor preset: disabled)
 +   Active: active (running) since dim. 2019-05-19 14:07:58 EDT; 7s ago
 + Main PID: 11343 (scl)
 +   CGroup: /system.slice/odoo12.service
 +           ├─11343 /usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /...
 +           ├─11344 /bin/bash /var/tmp/sclhTImIl
 +           └─11347 /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/od...
 +
 +mai 19 14:07:58 tchana.micronator-dev.org systemd[1]: Stopped Odoo12.
 +mai 19 14:07:58 tchana.micronator-dev.org systemd[1]: Started Odoo12.
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Après un changement de mot de passe, on supprime l'historique du fureteur Internet, on se reconnecte à Odoo et on vérifie quelques pages.
 +\\ 
 +
 +==== Administrateur Odoo ====
 +
 +Si le mot de passe a été perdu ou piraté, on doit changer le mot de passe de l'administrateur d'Odoo en se connectant avec l'adresse courriel/mot de passe de l'administrateur utilisé pour la création de la base de données, lors de la finalisation de l'installation d'Odoo au paragraphe [[nethserver_201_cahier_02_odoo_12#Création d'une nouvelle base de données]].
 +
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-061.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-062.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-063.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +On se déconnecte d'Odoo et on se reconnecte avec le nouveau mot de passe.
 +
 +<WRAP column 20%>
 +|{{ Images_Cahier-201-02-064.png?400 }}|
 +</WRAP>
 +<WRAP column 70%>
 +|{{ Images_Cahier-201-02-065.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +Le nouveau mot de passe de l'administrateur d'Odoo est fonctionnel.
 +\\ 
 +\\ 
 +
 +====== Sauvegarde de la BD - Interface Odoo ======
 +
 +===== Introduction =====
 +
 +On peut faire une sauvegarde/restauration de PostgreSQL directement avec l'interface d'Odoo.
 +
 +===== Sauvegarde =====
 +
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +<nowiki>-</nowiki> On se déconnecte.\\ 
 +<nowiki>-</nowiki> On supprime l'historique du navigateur.\\ 
 +<nowiki>-</nowiki> [[https://www.odoo.micronator-dev.org/]]\\ 
 +<nowiki>-</nowiki> **Manage Databases**.
 +|{{ Images_Cahier-201-02-066.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +\\ 
 +\\ 
 +\\ 
 +**Backup**.
 +|{{ Images_Cahier-201-02-067.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Le nom de la base de donnée //Odoo-12// est déjà affichée.\\ 
 +<nowiki>-</nowiki> **Mot de passe** du super-utilisateur postgres.\\ 
 +<nowiki>-</nowiki> On sélectionne **zip (include filestore)**\\ 
 +<nowiki>-</nowiki> **Backup**.
 +|{{ Images_Cahier-201-02-068.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +**Enregistrer le fichier -> OK**.
 +|{{ Images_Cahier-201-02-069.png?400 }}|
 +</WRAP>
 +<WRAP column 62%>
 +**Enregistrer**.
 +|{{ Images_Cahier-201-02-070.png?600 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +===== Récupération du fichier de la sauvegarde PostgreSQL =====
 +
 +  - Depuis le poste de travail tel que ci-dessus au paragraphe [[nethserver_201_cahier_02_odoo_12#Sauvegarde]].
 +  - Depuis la sauvegarde NethServer décrite à la section [[nethserver_201_cahier_02_odoo_12#Odoo-12.zip depuis une sauvegarde NethServer]]. Après avoir avoir récupéré cette sauvegarde, on la télécharge sur le poste de travail pour qu'Odoo puisse y accéder pour la restauration avec son interface Web.
 +
 +===== Restriction des connexions à Odoo =====
 +
 +{{ Images_Cahier-201-02-071.png?400}}
 +Avant de pouvoir restaurer une sauvegarde PostgreSQL, il faut supprimer la BD actuelle.
 +
 +{{Images_icone-201-006_Securite.png?25}} Vu qu'il n'y aura plus de BD, Odoo présentera l'écran de création de la base de données lorsqu'un utilisateur accédera à l'interface Odoo.
 +
 +{{Images_icone-201-001_doigt.png?22}} Pour remédier à cette situation, il est préférable de restreindre l'accès seulement au poste de travail que vous utilisez pour la récupération de la BD.
 +
 +{{Images_icone-201-002_Lumiere.png?25}} Si vous êtes sur un poste de travail qui n'est pas sur le segment IP LOCAL du Serveur NethServer, il est alors préférable d'utiliser une connexion //TeamViewer// vers une station qui est déjà branchée sur ce segment IP.
 +
 +Pour l'installation de TeamViewer sur un poste de travail, consultez la section __TeamViewer__ du 
 +[[nethserver_101_cahier_02_installations_configurations_logiciels_prerequis#TeamViewer|Cahier-02]]
 +: du "Cours NethServer-101"
 +.
 +
 +{{ Images_Cahier-201-02-072.png?400}}
 +**Interface Web NethServer -> Passerelle -> Proxy inverse ->** onglet **Hôtes virtuels -> Éditer**.
 +
 +//**Accéder depuis les réseaux CIDR**//\\ 
 +On entre l'adresse IP du poste de travail sous le format: xxx.xxx.xxx.xxx/32.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Ce poste sera le seul à pouvoir accéder à Odoo.\\ 
 +Attention à ne pas vous peinturer dans un coin...
 +
 +//**-> SOUMETTRE**//.
 +<WRAP clear></WRAP>
 +\\
 +
 +===== Restauration =====
 +
 +Pour pouvoir restaurer une BD d'Odoo, il faut supprimer l'ancienne.
 +
 +<WRAP column 30%>
 +\\ 
 +<nowiki>-</nowiki> On se déconnecte d'Odoo.\\ 
 +<nowiki>-</nowiki> On se rend à: [[https://www.odoo.micronator-dev.org/|https://www.odoo.micronator-dev.org/]].\\ 
 +<nowiki>-</nowiki> **Manage Databases**.
 +|{{ Images_Cahier-201-02-073.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +\\ 
 +\\ 
 +**Delete**.
 +|{{ Images_Cahier-201-02-074.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +<nowiki>-</nowiki> On entre le mot de passe du super-utilisateur __postgres__.\\ 
 +<nowiki>-</nowiki> Le nom de la base de donnée //**Odoo-12**// est déjà affichée.\\ 
 +<nowiki>-</nowiki> **Delete**.
 +|{{ Images_Cahier-201-02-075.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\ 
 +
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Au retour, vu qu'il n'y a plus de BD, Odoo présente l'écran de création de la base de données.\\ 
 +<nowiki>-</nowiki> On clique **or restore a database**.
 +|{{ Images_Cahier-201-02-076.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +On entre le mot de passe du super-utilisateur __postgres__ **-> Parcourir...**
 +|{{ Images_Cahier-201-02-077.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +On sélectionne la BD à restaurer **-> Ouvrir**.
 +|{{ Images_Cahier-201-02-078.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +<nowiki>-</nowiki> On entre le nom de la BD **-> Continue**.
 +
 +<nowiki>-</nowiki> La BD est restaurée.
 +</WRAP>
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-079.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-080.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +===== Vérification =====
 +
 +==== Interface Odoo ====
 +
 +On se logue à Odoo et on vérifie si tout est tel qu'au moment de la sauvegarde.
 +
 +<WRAP column 32%>
 +|{{ Images_Cahier-201-02-081.png?400 }}|
 +</WRAP>
 +<WRAP column 60%>
 +|{{ Images_Cahier-201-02-082.png?800 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +==== Journal Odoo ====
 +
 +{{ Images_Cahier-201-02-083.png?600}}
 +On vérifie le journal d'Odoo.
 +
 +**Interface Web NethServer -> Administration -> Logs**.
 +
 +On clique **/var/log/odoo/odoo-server.log**.
 +<WRAP clear></WRAP>
 +\\ 
 +
 +On redémarre Odoo pour une vérification finale.
 +
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +On réexamine le fichier journal pour vérifier le redémarrage.
 +
 +<file>
 +[root@tchana ~]# tail -n8 /var/log/odoo/odoo-server.log
 +
 +2019-05-20 03:00:13,394 5225 INFO ? odoo.service.server: Initiating shutdown
 +2019-05-20 03:00:13,395 5225 INFO ? odoo.service.server: Hit CTRL-C again or send a second signal to force the shutdown.
 +2019-05-20 03:00:14,802 6892 INFO ? odoo: Odoo version 12.0
 +2019-05-20 03:00:14,803 6892 INFO ? odoo: Using configuration file at /etc/odoo-server.conf
 +2019-05-20 03:00:14,803 6892 INFO ? odoo: addons paths: ['/opt/odoo/.local/share/Odoo/addons/12.0', '/opt/odoo/odoo12/addons', '/opt/odoo/odoo12/odoo/addons']
 +2019-05-20 03:00:14,805 6892 INFO ? odoo: database: odoo@localhost:5432
 +2019-05-20 03:00:15,092 6892 INFO ? odoo.addons.base.models.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf
 +2019-05-20 03:00:15,458 6892 INFO ? odoo.service.server: HTTP service (werkzeug) running on tchana.micronator-dev.org:8069
 +[root@tchana ~]#
 +</file>
 +\\ 
 +
 +{{ Images_Cahier-201-02-084.png?400}}
 +===== Suppression de la restriction des connexions à Odoo =====
 +
 +**Interface Web NethServer -> Passerelle -> Proxy inverse ->** onglet  **Hôtes virtuels -> Éditer**.
 +
 +//**Accéder depuis les réseaux CIDR**//\\ 
 +On supprime l'adresse entrée précédemment.
 +
 +**-> SOUMETTRE**.
 +\\ 
 +\\ 
 +\\ 
 +
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +\\ 
 +\\ 
 +
 +<WRAP centeralign>**La sauvegarde et la restauration avec l'interface d'Odoo\\
 +fonctionnent correctement.**</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +====== Sauvegarde manuelle de la BD ======
 +
 +===== Description =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} Nous créons un script //Bash// qui générera, dans le répertoire ''/var/lib/pgsql/sauvegarde'', un fichier ZIP de sauvegarde de la BD de PostgreSQL du site Odoo. Le script est alors sécurisé et seul l'utilisateur __root__ pourra le lancer.
 +
 +Ce script sera lancé par une tâche //cron// qui s'exécutera à //02h00//, juste avant la sauvegarde habituelle des données du Serveur NethServer et ainsi, cette dernière inclura la sauvegarde quotidienne de PostgreSQL.
 +\\ 
 +
 +===== Répertoire de sauvegarde =====
 +
 +Tout ce qui a trait à la sauvegarde de la BD //Odoo-12// de PostgreSQL se trouvera dans un répertoire dédié à cette fin uniquement: ''/var/lib/pgsql/sauvegarde/''.
 +
 +  * Le propriétaire et le groupe du répertoire seront //postgres:postgres//.
 +  * Le fichier de la nouvelle sauvegarde:
 +    * sera généré et écrasera la sauvegarde précédente et
 +    * sera sécurisé par le script en changeant le propriétaire et le groupe pour //root:root// et en donnant des droits à root seulement.
 +
 +
 +On crée le répertoire.
 +
 +<file>
 +[root@tchana ~]# mkdir /var/lib/pgsql/sauvegarde
 +
 +[root@tchana ~]#
 +</file>
 +
 +On change le propriétaire et le groupe.
 +
 +<file>
 +[root@tchana ~]# chown postgres:postgres /var/lib/pgsql/sauvegarde
 +
 +[root@tchana ~]#
 +</file>
 +
 +On ajuste tous les droits afin que seul l'utilisateur __postgres__ puisse y accéder.
 +
 +<file>
 +[root@tchana ~]# chmod 700 /var/lib/pgsql/sauvegarde
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -alsd /var/lib/pgsql/sauvegarde
 +
 +0 drwx------ 2 postgres postgres 6 19 mai  16:28 /var/lib/pgsql/sauvegarde
 +[root@tchana ~]#
 +</file>
 +
 +===== Script de sauvegarde PostgreSQL =====
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +cat > /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh <<'EOT'
 +#!/bin/sh
 +
 +# Script pour générer une sauvegarde de la BD PostgreSQL d'Odoo.
 +# Michel-André 2018-09-17_11h16
 +
 +# vars
 +TEMPS_DE_PAUSE=10
 +REP_SAUVEGARDE=/var/lib/pgsql/sauvegarde
 +NOM_BD_ODOO=Odoo-12
 +FORMAT_FICHIER=zip
 +MDP_SUPER_utilisateur=fghtbgh
 +PORT_ODOO=8069
 +
 +# On vérifie qu'odoo-server est en cours d'exécution.
 +if (!(/usr/bin/systemctl status odoo12 | grep "active (running)")); then
 +    # Message au système et à la console
 +    /bin/logger "********************  odoo-server ********************  "
 +    /bin/logger "odoo-server N'EST PAS en cours d'execution..."
 +    /bin/echo "odoo-server N'EST PAS en cours d'execution..."
 +
 +    # On relance server-odoo pour la sauvegarde de la BD $NOM_BD_ODOO
 +    /usr/bin/systemctl start odoo12
 +    /bin/logger "odoo-server est relancé"
 +    /bin/logger "               *****  odoo-server *****"
 +    /bin/echo "odoo-server est relancé"
 +
 +    # Message au système et à la console
 +    /bin/logger "Pause de $TEMPS_DE_PAUSE secondes pour le démarrage d'Odoo"
 +    /bin/echo "Pause de $TEMPS_DE_PAUSE secondes pour le démarrage d'Odoo"
 +
 +    # On fait une pause de $TEMPS_DE_PAUSE secondes pour le démarrage d'Odoo.
 +    /bin/sleep $TEMPS_DE_PAUSE
 +fi
 +
 +/bin/logger "********************  odoo-server ********************  "
 +/bin/logger "odoo-server est en cours d'execution..."
 +/bin/echo "odoo-server est en cours d'execution..."
 +
 +# On sauvegarde la BD dans $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER.
 +# La sauvegarde du jour écrase la sauvegarde du jour précédent.
 +
 +curl -X POST \
 +     -F master_pwd=$MDP_SUPER_utilisateur \
 +     -F name=$NOM_BD_ODOO \
 +     -F backup_format=$FORMAT_FICHIER \
 +     -o $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER \
 +     http://localhost:$PORT_ODOO/web/database/backup
 +
 +# On sécurise le fichier de $NOM_BD_ODOO.$FORMAT_FICHIER.
 +/bin/chown root:root $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER > /dev/null 2>&1
 +/bin/chmod 700 $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER > /dev/null 2>&1
 +
 +# On écrit une entrée dans le journal du système.
 +/bin/logger "La sauvegarde de la BD $NOM_BD_ODOO est dans: $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER"
 +/bin/logger "********************  odoo-server ********************  "
 +/bin/echo "La sauvegarde de la BD $NOM_BD_ODOO est dans: $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER"
 +exit 1
 +
 +EOT
 +
 +
 +</file>
 +
 +
 +On vérifie les sept premières lignes du fichier.
 +
 +<file>
 +[root@tchana ~]# head -n7 /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +#!/bin/sh
 +
 +# Script pour générer une sauvegarde de la BD PostgreSQL d'Odoo.
 +# Michel-André 2018-09-17_11h16
 +
 +# vars
 +TEMPS_DE_PAUSE=10
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Il n'y a pas de ligne vide avant la ligne __#!/bin/sh__. Ci-dessus, nous avons inséré une ligne vide pour faciliter la copie de la commande.
 +
 +On sécurise le fichier en changeant le groupe et le propriétaire.
 +
 +<file>
 +[root@tchana ~]# chown root:root /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +[root@tchana ~]#
 +</file>
 +
 +On ajuste les droits pour rendre le fichier exécutable par l'utilisateur root uniquement.
 +
 +<file>
 +[root@tchana ~]# chmod 700 /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -als /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +4 -rwx------ 1 root root 2308 19 mai   16:37 /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +[root@tchana ~]#
 +</file>
 +
 +===== Sauvegarde =====
 +
 +==== Vérification du script de sauvegarde ====
 +
 +{{Images_icone-201-001_doigt.png?22}} On vérifie le fonctionnement de notre script de sauvegarde en simulant ce que fera ''cron''.
 +
 +<file>
 +[root@tchana ~]# /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +   Active: active (running) since dim. 2019-05-19 15:59:27 EDT; 40min ago
 +odoo-server est en cours d'execution...
 +  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
 +                                 Dload  Upload   Total   Spent    Left  Speed
 +100 2857k    0 2857k  100   357   821k    102  0:00:03  0:00:03 --:--:--  822k
 +La sauvegarde de la BD Odoo-12 est dans: /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie le fichier de sauvegarde pour s'assurer que celle-ci ait réussie.
 +
 +<file>
 +[root@tchana ~]# ls -ls /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +
 +2860 -rwx------ 1 root root 2925903 19 mai   16:40 /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} Comme on le voit, seul __root__ pourra manipuler le fichier de sauvegarde.
 +\\ 
 +
 +==== Journal du Serveur NethServer ====
 +
 +<WRAP box>
 +<file>
 +...
 +May 19 16:40:04 tchana root: ********************  odoo-server ********************
 +May 19 16:40:04 tchana root: odoo-server est en cours d'execution...
 +May 19 16:40:07 tchana root: La sauvegarde de la BD Odoo-12 est dans: /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +May 19 16:40:07 tchana root: ********************  odoo-server ********************
 +...
 +</file>
 +</WRAP>
 +
 +==== Si odoo-server n'est pas en exécution (arrêté) ====
 +
 +{{Images_icone-201-004_Triangle.png?25}} Il en sera exactement de même si //odoo-server// n'est pas en exécution. Le début du script relancera Odoo __mais à la fin, il ne l'arrêtera pas__.
 +
 +==== Vérification ====
 +
 +On affiche le status d'Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12
 +
 +● odoo12.service - Odoo12
 +   Loaded: loaded (/etc/systemd/system/odoo12.service; enabled; vendor preset: disabled)
 +   Active: active (running) since dim. 2019-05-19 15:59:27 EDT; 44min ago
 + Main PID: 3996 (scl)
 +   CGroup: /system.slice/odoo12.service
 +           ├─3996 /usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /o...
 +           ├─4037 /bin/bash /var/tmp/sclbZ8ob8
 +           └─4052 /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/odo...
 +
 +mai 19 15:59:27 tchana.micronator-dev.org systemd[1]: Started Odoo12.
 +[root@tchana ~]#
 +</file>
 +
 +On arrête Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl stop odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12
 +
 +● odoo12.service - Odoo12
 +   Loaded: loaded (/etc/systemd/system/odoo12.service; enabled; vendor preset: disabled)
 +   Active: inactive (dead) since dim. 2019-05-19 16:44:08 EDT; 4s ago
 +  Process: 3996 ExecStart=/usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/odoo-server.conf (code=killed, signal=TERM)
 + Main PID: 3996 (code=killed, signal=TERM)
 +
 +mai 19 15:59:27 tchana.micronator-dev.org systemd[1]: Started Odoo12.
 +mai 19 16:44:07 tchana.micronator-dev.org systemd[1]: Stopping Odoo12...
 +mai 19 16:44:08 tchana.micronator-dev.org systemd[1]: Stopped Odoo12.
 +[root@tchana ~]#
 +</file>
 +
 +On relance le script de sauvegarde.
 +
 +<file>
 +[root@tchana ~]# /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +odoo-server N'EST PAS en cours d'execution...
 +odoo-server est relancé
 +Pause de 10 secondes pour le démarrage d'Odoo
 +odoo-server est en cours d'execution...
 +  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
 +                                 Dload  Upload   Total   Spent    Left  Speed
 +100 2857k    0 2857k  100   357  1169k    146  0:00:02  0:00:02 --:--:-- 1169k
 +La sauvegarde de la BD Odoo-12 est dans: /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie le statut d'Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12
 +
 +● odoo12.service - Odoo12
 +   Loaded: loaded (/etc/systemd/system/odoo12.service; enabled; vendor preset: disabled)
 +   Active: active (running) since dim. 2019-05-19 16:47:46 EDT; 1min 13s ago
 + Main PID: 8269 (scl)
 +   CGroup: /system.slice/odoo12.service
 +           ├─8269 /usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /o...
 +           ├─8271 /bin/bash /var/tmp/sclIPE437
 +           └─8276 /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/odo...
 +
 +mai 19 16:47:46 tchana.micronator-dev.org systemd[1]: Started Odoo12.
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Le script a bien démarré Odoo.
 +\\ 
 +
 +On vérifie le fichier de sauvegarde pour s'assurer que celle-ci ait réussie.
 +
 +<file>
 +[root@tchana ~]# ls -ls /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +
 +2860 -rwx------ 1 root root 2925903 19 mai   16:47 /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +[root@tchana ~]#
 +</file>
 +
 +==== Inclusion du répertoire dans la sauvegarde de NethServer ====
 +
 +{{Images_icone-201-003_Note.png?25}} Le répertoire inclut le script ''sauvegarde-postgres.sh'' et le fichier ''Odoo-12.zip'' de la sauvegarde PostgreSQL.
 +
 +On vérifie si le nom du répertoire ''/var/lib/pgsql/sauvegarde/'' est déjà inséré dans le fichier d'inclusion de la sauvegarde des données: ''/etc/backup-data.d/custom.include'', sinon on l'insère.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +NouvelleInclusion="/var/lib/pgsql/sauvegarde/"
 +if grep -Fxq "$NouvelleInclusion" /etc/backup-data.d/custom.include
 +then
 +    # L'entrée a été trouvée dans custom.include
 +    echo -e "\nLe fichier custom.include contient déjà l'entrée:\n$NouvelleInclusion \n"
 +else
 +    # L'entrée n'a pas été trouvée dans custom.include
 +    echo -e "$NouvelleInclusion" >> /etc/backup-data.d/custom.include
 +    echo -e "\nL'entrée: $NouvelleInclusion a été ajoutée\n"
 +fi
 +
 +
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/backup-data.d/custom.include | grep /var/lib/pgsql/sauvegarde/
 +
 +/var/lib/pgsql/sauvegarde/
 +[root@tchana ~]#
 +</file>
 +
 +Ci-dessus, il n'y a pas de ligne vide avant __/var/lib/pgsql/sauvegarde/__. Nous en avons inséré une afin de faciliter la copie de la commande.
 +\\ 
 +\\ 
 +
 +===== Tâche cron =====
 +
 +On crée une tâche //cron// qui s'exécutera quotidiennement  à //02h00 (0 2 * * *)//, car la sauvegarde régulière des données du Serveur NethServer est programmée pour rouler à //03h00// et nous voulons y inclure la sauvegarde de PostgreSQL.
 +
 +==== Répertoire pour un gabarit personnalisé ====
 +
 +Création du répertoire.\\ 
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +DIR="/etc/e-smith/templates-custom/etc/crontab"
 +for NAME in $DIR
 +do
 +if [ ! -d $NAME ]; then
 +   mkdir -p $NAME
 +   chown odoo.odoo $NAME
 +   chmod 770 $NAME
 +fi
 +done
 +
 +
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -alsd /etc/e-smith/templates-custom/etc/crontab
 +
 +0 drwxrwx--- 2 odoo odoo 6 19 mai   16:59 /etc/e-smith/templates-custom/etc/crontab
 +[root@tchana ~]#
 +</file>
 +
 +==== Création de la tâche cron ====
 +
 +On crée le fichier de la tâche //cron// et on y insère son contenu. Elle s'exécutera __quotidiennement__ à //02h00//.\\ 
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +cat > /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql <<'EOT'
 +SHELL=/bin/bash
 +MAILTO=root
 +#
 +# Tâche cron qui lance /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh afin
 +# de sauvegarder la BD d'Odoo-12. Cette tâche cron roulera quotidiennement à 02h30.
 +
 +# Michel-André, 2018-06-18_11h27
 +
 +# ┌───────────── min (0 - 59) 
 +# │ ┌────────────── heure (0 - 23)
 +# │ │ ┌─────────────── jour du mois (1 - 31)
 +# │ │ │ ┌──────────────── mois (1 - 12)
 +# │ │ │ │ ┌───────────────── jour de la semaine (0 - 6) (0 à 6 sont de dimanche à samedi,
 +# │ │ │ │ │                  7 est dimanche, même que 0)
 +# │ │ │ │ │
 +# * * * * *  [utilisateur] commande à exécuter
 +#
 +0 2 * * * root /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +EOT
 +
 +
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} L'heure peut être choisie à votre entière discrétion.
 +\\ 
 +
 +On vérifie le contenu du fichier de la tâche.
 +
 +<file>
 +[root@tchana ~]# cat /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql
 +
 +SHELL=/bin/bash
 +MAILTO=root
 +#
 +# Tâche cron qui lance /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh afin
 +# de sauvegarder la BD d'Odoo-12. Cette tâche cron roulera quotidiennement à 02h30.
 +
 +# Michel-André, 2018-06-18_11h27
 +
 +# ┌───────────── min (0 - 59)
 +# │ ┌────────────── heure (0 - 23)
 +# │ │ ┌─────────────── jour du mois (1 - 31)
 +# │ │ │ ┌──────────────── mois (1 - 12)
 +# │ │ │ │ ┌───────────────── jour de la semaine (0 - 6) (0 à 6 sont de dimanche à samedi,
 +# │ │ │ │ │                  7 est dimanche, même que 0)
 +# │ │ │ │ │
 +# * * * * *  [utilisateur] commande à exécuter
 +#
 +0 2 * * * root /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Il n'y a pas de ligne vide avant la ligne __SHELL=/bin/bash__. Ci-dessus, nous avons inséré une ligne vide pour faciliter la copie de la commande.
 +
 +On sécurise le fichier.
 +
 +<file>
 +[root@tchana ~]# chmod 700 /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie
 +
 +<file>
 +[root@tchana ~]# ls -ls /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql
 +
 +4 -rwx------ 1 root root 859 19 mai   17:14 /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql
 +[root@tchana ~]#
 +</file>
 +
 +On développe le gabarit personnalisé.
 +
 +<file>
 +[root@tchana ~]# /sbin/e-smith/expand-template /etc/crontab
 +
 +[root@tchana ~]#
 +</file>
 +
 +On redémarre le démon //crond//.
 +
 +<file>
 +[root@tchana ~]# systemctl restart crond
 +
 +[root@tchana ~]#
 +</file>
 +
 +==== Vérification de la tâche cron ====
 +
 +On modifie l'heure de la tâche //cron// pour qu'elle soit lancée __à toutes les minutes__ afin de vérifier son exécution.
 +
 +On change l'heure de la tâche.
 +
 +<file>
 +[root@tchana ~]# sed -i 's/^0 2/\* \*/' /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# tail -n3 /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql
 +
 +#
 +* * * * * root /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +[root@tchana ~]#
 +</file>
 +
 +On développe le gabarit personnalisé.
 +
 +<file>
 +[root@tchana ~]# /sbin/e-smith/expand-template /etc/crontab
 +
 +[root@tchana ~]#
 +</file>
 +
 +On redémarre le démon //crond//.
 +
 +<file>
 +[root@tchana ~]# systemctl restart crond
 +
 +[root@tchana ~]#
 +</file>
 +
 +==== Suivi ====
 +
 +On lance la commande ci-dessous pour suivre toutes les tâches //cron// et on filtre avec ''grep'' celles qui contiendront ''sauvegarde''.
 +
 +<file>
 +[root@tchana ~]# tail -F /var/log/messages | grep sauvegarde
 +
 +
 +</file>
 +
 +À toutes les minutes, on voit notre tâche s'afficher.
 +
 +<WRAP box>
 +<file>
 +...
 +May 19 17:19:03 tchana root: La sauvegarde de la BD Odoo-12 est dans: /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +May 19 17:20:03 tchana root: La sauvegarde de la BD Odoo-12 est dans: /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +May 19 17:21:03 tchana root: La sauvegarde de la BD Odoo-12 est dans: /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +...
 +</file>
 +</WRAP>
 +
 +On arrête la commande tail avec **[CTL]** + **[c]**.
 +
 +<file>
 +...
 +May 19 17:21:03 tchana root: La sauvegarde de la BD Odoo-12 est dans: /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +^C
 +[root@tchana ~]#
 +</file>
 +
 +==== Vérification lorsqu'Odoo est arrêté ====
 +
 +On arrête Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl stop odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +On relance la commande ''tail''.
 +
 +<file>
 +[root@tchana ~]# tail -F /var/log/messages | grep sauvegarde
 +
 +
 +</file>
 +
 +À toutes les minutes, on voit notre tâche s'afficher.
 +
 +<file>
 +...
 +May 19 17:24:03 tchana root: La sauvegarde de la BD Odoo-12 est dans: /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +...
 +</file>
 +
 +On arrête la commande tail avec **[CTL]** + **[c]**.
 +
 +<file>
 +...
 +May 19 17:24:03 tchana root: La sauvegarde de la BD Odoo-12 est dans: /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +^C
 +[root@tchana ~]#
 +</file>
 +
 +On remet l'heure de la tâche //cron// à //02h00//.
 +
 +<file>
 +[root@tchana ~]# sed -i 's/\* \* \* \* \* root/0 2 \* \* \* root/'                       \
 +                        /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# tail -n3 /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql
 +
 +#
 +* 2 * * * * root /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh
 +
 +[root@tchana ~]#
 +</file>
 +
 +On développe le gabarit personnalisé.
 +
 +<file>
 +[root@tchana ~]# /sbin/e-smith/expand-template /etc/crontab
 +
 +[root@tchana ~]#
 +</file>
 +
 +On redémarre le démon //crond//.
 +
 +<file>
 +[root@tchana ~]# systemctl restart crond
 +
 +[root@tchana ~]#
 +</file>
 +
 +==== Courriel de notification ====
 +
 +L'utilisateur __root__ //(admin)// recevra un courriel, semblable à celui ci-dessous, __à la fin__ de la tâche //cron//.
 +
 +On se rend à l'URL: [[https://www.micronator-dev.org/webmail|https://www.micronator-dev.org/webmail]]. On se logue avec l'utilisateur __root__ et son mot de passe.
 +
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-085.png?400 }}|
 +</WRAP>
 +<WRAP column 62%>
 +|{{ Images_Cahier-201-02-086.png?700 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +==== Inclusion du script dans la sauvegarde de NethServer ====
 +
 +On vérifie si le nom du répertoire ''/etc/e-smith/templates-custom/etc/crontab/'' est déjà inséré dans le fichier d'inclusion de la sauvegarde des données: ''/etc/backup-data.d/custom.include'', sinon on l'insère.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Prendre tout le contenu de l'encadré pour la commande.
 +
 +<file>
 +NouvelleInclusion="/etc/e-smith/templates-custom/etc/crontab/"
 +if grep -Fxq "$NouvelleInclusion" /etc/backup-data.d/custom.include
 +then
 +    # L'entrée a été trouvée dans custom.include
 +    echo -e "\nLe fichier custom.include contient déjà l'entrée:\n$NouvelleInclusion \n"
 +else
 +    # L'entrée n'a pas été trouvée dans custom.include
 +    echo -e "$NouvelleInclusion" >> /etc/backup-data.d/custom.include
 +    echo -e "\nL'entrée: $NouvelleInclusion a été ajoutée\n"
 +fi
 +
 +
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# cat /etc/backup-data.d/custom.include | grep crontab
 +
 +/etc/e-smith/templates-custom/etc/crontab/
 +[root@tchana ~]#
 +</file>
 +
 +<WRAP centeralign>**Notre tâche cron pour la sauvegarde automatique de PostgreSQL fonctionne parfaitement.**</WRAP>
 +
 +===== Récupération du fichier de sauvegarde =====
 +
 +On peut choisir le fichier de sauvegarde qu'on veut restaurer.
 +
 +  - ''/var/lib/pgsql/sauvegarde/Odoo-12.zip''
 +  - ''Odoo-12.zip'' depuis une une sauvegarde NethServer
 +
 +==== /var/lib/pgsql/sauvegarde/Odoo-12.zip ====
 +
 +La dernière sauvegarde PostgreSQL est présente dans le répertoire ''/var/lib/pgsql/sauvegarde/''.
 +
 +==== Odoo-12.zip depuis une sauvegarde NethServer ====
 +
 +Si le fichier de sauvegarde stocké sur le poste de travail n'est pas assez récent, on peut récupérer le fichier de sauvegarde PostgreSQL depuis les sauvegardes NethServer .
 +
 +On s'assure que le fichier ''Odoo-12.zip'' est présent dans les sauvegardes NethServer.
 +
 +<file>
 +[root@tchana ~]# /sbin/e-smith/backup-data-list -b backup-data | grep Odoo-12.zip
 +
 +Mon May 20 10:37:07 2019 var/lib/pgsql/sauvegarde/Odoo-12.zip
 +[root@tchana ~]#
 +</file>
 +
 +Le fichier ''Odoo-12.zip'' est présent dans la dernière sauvegarde NethServer, mais on peut le choisir de n'importe quelle sauvegarde.
 +
 +{{ Images_Cahier-201-02-087.png?400}}
 +//**Backup file**//\\ 
 +On choisit la sauvegarde désirée.
 +
 +⦿ //**Restaurer les fichiers dans le chemin original**//\\ 
 +<nowiki>-</nowiki> On peut choisir la destination de la récupération.\\ 
 +
 +//**Sélectionner un ou plusieurs dossiers/fichiers à restaurer**//\\ 
 +On sélectionne le répertoire: ''/var/lib/pgsql/sauvegarde/''
 +
 +//**Dossiers ou fichiers à restaurer**// affiche notre sélection.
 +
 +**-> RESTAURER**.
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-088.png?400}}
 +Le répertoire a été trouvé et restauré à sa position initiale.
 +<WRAP clear></WRAP>
 +\\
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -als /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +
 +2860 -rwx------ 1 root root 2926469 20 mai   10:37 /var/lib/pgsql/sauvegarde/Odoo-12.zip
 +[root@tchana ~]#
 +</file>
 +
 +Le fichier est bien celui de la sauvegarde que nous avons lancée manuellement ce matin.
 +
 +{{Images_icone-201-003_Note.png?25}} On pourrait aussi bien avoir choisi le fichier depuis n'importe quelle sauvegarde NethServer.
 +
 +{{ Images_Cahier-201-02-089.png?600}}
 +Si on veut restaurer la sauvegarde ''Odoo-12.zip'' récupérée de la sauvegarde NethServer, on peut la télécharger sur le poste de travail avant de la restaurer à l'aide de l'Interface Odoo.
 +<WRAP clear></WRAP>
 +\\
 +
 +===== Restriction des connexions =====
 +
 +{{Images_icone-201-001_doigt.png?22}} On restreint les connexions à Odoo selon la section [[nethserver_201_cahier_02_odoo_12#Restriction des connexions à Odoo]].
 +\\ 
 +
 +===== Suppression de la base de données actuelle =====
 +
 +On vérifie si le service est en cours d'exécution.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12
 +
 +● odoo12.service - Odoo12
 +   Loaded: loaded (/etc/systemd/system/odoo12.service; enabled; vendor preset: disabled)
 +   Active: active (running) since lun. 2019-05-20 09:03:22 EDT; 19s ago
 + Main PID: 28231 (scl)
 +   CGroup: /system.slice/odoo12.service
 +           ├─28231 /usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 /...
 +           ├─28232 /bin/bash /var/tmp/sclqm2WW4
 +           └─28235 /opt/odoo/odoo12-venv/bin/python3 /opt/odoo/odoo12/odoo-bin -c /etc/od...
 +
 +mai 20 16:03:22 tchana.micronator-dev.org systemd[1]: Started Odoo12.
 +[root@tchana ~]#
 +</file>
 +
 +On arrête Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl stop odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12 | grep Active
 +
 +   Active: inactive (dead) since lun. 2019-05-20 16:05:48 EDT; 1min 31s ago
 +[root@tchana ~]#
 +</file>
 +
 +On se substitue à l'utilisateur __postgres__.
 +
 +<file>
 +root@tchana ~]# su - postgres
 +
 +Dernière connexion : vendredi 17 mai 2019 à 00:12:36 EDT sur pts/0
 +-bash-4.2$
 +</file>
 +
 +On entre dans la console PostgreSQL.
 +
 +<file>
 +-bash-4.2$ psql
 +
 +psql (11.3)
 +Saisissez « help » pour l'aide.
 +
 +postgres=#
 +</file>
 +
 +On affiche les BD présentes.
 +
 +<file>
 +postgres=#  \list
 +
 +                                  Liste des bases de données
 +    Nom    | Propriétaire | Encodage | Collationnement | Type caract. |    Droits d'accès
 +-----------+--------------+----------+-----------------+--------------+----------------------
 + Odoo-12   | odoo         | UTF8     | C               | fr_FR.utf8   |
 + postgres  | postgres     | UTF8     | fr_FR.utf8      | fr_FR.utf8   |
 + template0 | postgres     | UTF8     | fr_FR.utf8      | fr_FR.utf8   | =c/postgres         +
 +                        |          |                              | postgres=CTc/postgres
 + template1 | postgres     | UTF8     | fr_FR.utf8      | fr_FR.utf8   | =c/postgres         +
 +                        |          |                              | postgres=CTc/postgres
 +(4 lignes)
 +
 +postgres=#
 +</file>
 +
 +On supprime la BD actuelle d'Odoo //(ne pas oublié les apostrophes **<wrap em>' </wrap>**)//.
 +
 +<file>
 +-bash-4.2$ dropdb 'Odoo-12'
 +
 +-bash-4.2$
 +</file>
 +
 +On affiche les BD présentes.
 +
 +<file>
 +postgres=#  \list
 +
 +                                  Liste des bases de données
 +    Nom    | Propriétaire | Encodage | Collationnement | Type caract. |    Droits d'accès
 +-----------+--------------+----------+-----------------+--------------+----------------------
 + postgres  | postgres     | UTF8     | fr_FR.utf8      | fr_FR.utf8   |
 + template0 | postgres     | UTF8     | fr_FR.utf8      | fr_FR.utf8   | =c/postgres         +
 +                        |          |                              | postgres=CTc/postgres
 + template1 | postgres     | UTF8     | fr_FR.utf8      | fr_FR.utf8   | =c/postgres         +
 +                        |          |                              | postgres=CTc/postgres
 +(3 lignes)
 +
 +postgres=#
 +</file>
 +
 +La base de données //Odoo-12// n'est plus présente, elle a bien été supprimée.
 +
 +On quitte la console PostgreSQL.
 +
 +<file>
 +postgres=#  \q
 +
 +-bash-4.2$
 +</file>
 +
 +On revient à l'utilisateur __root__.
 +
 +<file>
 +-bash-4.2$ exit
 +
 +déconnexion
 +root@tchana ~]#
 +</file>
 +
 +On relance Odoo pour pouvoir ré-insérer la bases de données originale.
 +
 +<file>
 +root@tchana ~]# systemctl start odoo12
 +
 +root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12 | grep Active
 +
 +   Active: active (running) since lun. 2019-05-20 16:22:45 EDT; 51s ago
 +[root@tchana ~]#
 +</file>
 +\\ 
 +
 +===== Restauration manuelle =====
 +
 +//Référence:// [[https://linuxize.com/post/how-to-setup-automatic-odoo-backup/|https://linuxize.com/post/how-to-setup-automatic-odoo-backup/]].
 +
 +On lance la restauration. //(Peut prendre quelques instants.)//
 +
 +{{Images_icone-201-004_Triangle.png?25}} <wrap em>Faire attention au mot de passe s'il a été changé</wrap>.
 +
 +<file>
 +[root@tchana ~]#  curl -F 'master_pwd=fghtbgh'                                \
 +                       -F backup_file=@/var/lib/pgsql/sauvegarde/Odoo-12.zip  \
 +                       -F 'copy=true'                                         \
 +                       -F 'name=Odoo-12'                                      \
 +                       http://localhost:8069/web/database/restore
 +
 +<!DOCTYPE html>
 +<html>
 +    <head>
 +        <meta http-equiv="content-type" content="text/html; charset=utf-8">
 +        <title>Odoo</title>
 +        <link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon">
 +...
 +[root@tchana ~]#
 +</file>
 +
 +==== Vérification ====
 +
 +On se logue à Odoo et on vérifie si tout est tel qu'avant la sauvegarde:  [[https://www.odoo.micronator-dev.org|https://www.odoo.micronator-dev.org]].\\ 
 +{{Images_icone-201-002_Lumiere.png?25}} Si on rencontre des difficultés à accéder, on vidange le cache DNS du poste de travail de même que l'historique du navigateur Internet.
 +
 +<WRAP column 32%>
 +|{{ Images_Cahier-201-02-090.png?400 }}|
 +</WRAP>
 +<WRAP column 58%>
 +|{{ Images_Cahier-201-02-091.png?600 }}|
 +
 +<WRAP centeralign>
 +<nowiki>**</nowiki> __Tout est tel qu'auparavant.__ <nowiki>**</nowiki>
 +</WRAP>
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +===== Suppression de la restriction des connexions =====
 +
 +{{Images_icone-201-001_doigt.png?22}} On supprime la restriction des connexions à Odoo selon la section [[nethserver_201_cahier_02_odoo_12#Suppression de la restriction des connexions à Odoo]].
 +\\ 
 +
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +
 +<WRAP centeralign>**La sauvegarde et la restauration manuelle fonctionnent correctement.**</WRAP>
 +\\ 
 +
 +====== Sauvegarde NethServer ======
 +
 +===== Description =====
 +//
 +Référence:// [[http://docs.nethserver.org/en/v7/backup.html|http://docs.nethserver.org/en/v7/backup.html]].
 +
 +La récupération d'une sauvegarde est le seul moyen de restaurer une machine en cas de sinistre. Le système gère deux types de sauvegardes:
 +
 +  - **Sauvegarde de la configuration**\\ Ce type de sauvegarde ne contient que les fichiers de configuration du système. Son objectif est de restaurer rapidement une machine en cas de récupération après sinistre.
 +  - **Sauvegarde des données**\\ Ce type de sauvegarde est activée par l’installation du module "Sauvegarde" et contient, par défaut, toutes les données stockées dans le système //(répertoires des utilisateurs, dossiers partagés, courriels, etc)//. Cette sauvegarde s'exécute une fois par jour et peut être complète ou incrémentielle sur une base hebdomadaire //(six incrémentielles et la septième complète)//. Elle contient également l'archive de la //Sauvegarde de la configuration//. Plusieurs sauvegardes peuvent être configurées pour enregistrer différentes données à des intervalles différents.\\ Lorsque la machine est fonctionnelle, une restauration complète des données peut être effectuée même si la machine est déjà en production.
 +\\ 
 +
 +===== Sauvegarde de la configuration =====
 +
 +//Référence:// [[https://docs.nethserver.org/projects/nethserver-devel/en/latest/nethserver-backup-config.html|https://docs.nethserver.org/projects/nethserver-devel/en/latest/nethserver-backup-config.html]].
 +
 +Depuis la page  **Configuration -> Sauvegarde (configuration)**, la sauvegarde de la configuration du système //(passwd, config databases, etc)// peut être créée, envoyée ou configurée.
 +
 +En outre, une tâche automatisée s'exécute chaque nuit à //00h15// et crée une nouvelle archive, ''/var/lib/nethserver/backup/backup-config.tar.xz'' si un des fichiers à sauvegarder a été modifié au cours des __dernières 24 heures__.
 +
 +==== Config de la sauvegarde de la configuration===
 +
 +**Configuration -> Sauvegarde (configuration) ->** onglet  **Configurer**, on spécifie le nombre de sauvegardes automatiques à conserver.
 +
 +<WRAP column 50%>
 +|{{ Images_Cahier-201-02-092.png?500 }}|
 +</WRAP>
 +<WRAP column 42%>
 +|{{ Images_Cahier-201-02-093.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +{{Images_icone-201-003_Note.png?25}} Ces sauvegardes n'ont que quelques //Ko//; on peut en conserver un assez grand nombre. Elles sont stockées dans le répertoire ''/var/lib/nethserver/backup/history'' et son numérotées de ''c00.tar.xz'' à ''cnn.tar.xz''.
 +
 +La liste des modules installés est incluse dans l'archive de sauvegarde. La procédure de restauration peut télécharger et installer automatiquement les modules énumérés.
 +
 +==== Personnalisation ====
 +
 +=== Inclusion ===
 +
 +Dans la plupart des cas, il n'est pas nécessaire de modifier la //Sauvegarde de la configuration//, mais peut être utile par exemple si vous avez une configuration //httpd personnalisée//. Dans ce cas, vous pouvez ajouter ''/chemin/nom du fichier'' contenant la personnalisation à la liste des fichiers à sauvegarder.
 +
 +Si vous souhaitez ajouter un fichier à la //Sauvegarde de la configuration//, ajoutez une ligne au fichier ''/etc/backup-config.d/custom.include''.
 +
 +=== Exclusion ===
 +
 +Si vous souhaitez exclure un fichier de la //Sauvegarde de la configuration//, ajoutez une ligne au fichier ''/etc/backup-config.d/custom.exclude''.
 +
 +==== Lancement de la Sauvegarde de la configuration ====
 +
 +{{ Images_Cahier-201-02-094.png?500}}
 +**Configuration -> Sauvegarde (configuration) -> CRÉER UNE SAUVEGARDE**.
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 46%>
 +\\ 
 +Si l'écran ne s'affiche pas correctement, on l'agrandit.
 +|{{ Images_Cahier-201-02-095.png?400 }}|
 +</WRAP>
 +<WRAP column 46%>
 +<nowiki>-</nowiki> On entre une Description.\\ 
 +<nowiki>-</nowiki> **CRÉER UN SAUVEGARDE**.
 +|{{ Images_Cahier-201-02-096.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-097.png?600}}
 +La sauvegarde a été créée et on voit sa description, entrée ci-dessus lors de sa création.
 +
 +On peut télécharger la sauvegarde sur le poste de travail en cliquant **Télécharger**.
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +\\ 
 +**Enregistrer le fichier -> OK**.
 +|{{ Images_Cahier-201-02-098.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +**Enregistrer**.
 +|{{ Images_Cahier-201-02-099.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +Ces fichiers ne sont pas très volumineux, quelques //Ko// seulement.
 +|{{ Images_Cahier-201-02-099-A.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +==== Restauration d'une configuration ====
 +
 +On peut récupérer une ancienne sauvegarde stockée sur le poste de travail afin de la restaurer.
 +
 +<WRAP column 22%>
 +\\ 
 +\\ 
 +**Envoyer**.
 +|{{ Images_Cahier-201-02-100.png?400 }}|
 +</WRAP>
 +<WRAP column 22%>
 +\\ 
 +\\ 
 +**Parcourir...**
 +|{{ Images_Cahier-201-02-101.png?400 }}|
 +</WRAP>
 +<WRAP column 22%>
 +<nowiki>-</nowiki> On sélectionne la sauvegarde à récupérer.\\ 
 +<nowiki>-</nowiki> **Ouvrir**.
 +|{{ Images_Cahier-201-02-102.png?400 }}|
 +</WRAP>
 +<WRAP column 22%>
 +\\ 
 +<nowiki>-</nowiki> On entre une description.\\ 
 +<nowiki>-</nowiki> **ENVOYER**.
 +|{{ Images_Cahier-201-02-103.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-104.png?600}}
 +La sauvegarde récupérée apparaît dans la liste et on peut la restaurer en cliquant **Restaurer**.
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +Les différentes paramètres de la sauvegarde récupérée apparaissent ci-dessous.
 +|{{ Images_Cahier-201-02-105.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Si l'option //**Télécharger les modules automatiquement**// est cochée, les modules nécessaires seront téléchargés et installés automatiquement.\\ 
 +<nowiki>-</nowiki> **RESTAURER**.
 +|{{ Images_Cahier-201-02-106.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +\\ 
 +\\ 
 +La restauration est en cours.
 +|{{ Images_Cahier-201-02-107.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\ 
 +
 +{{ Images_Cahier-201-02-108.png?600}}
 +La restauration a réussie.
 +
 +{{Images_icone-201-003_Note.png?25}} Nous aurions pu récupérer directement //**Première sauvegarde**//, car elle est dans la liste de celles qui sont encore stockée sur le Serveur NethServer.
 +<WRAP clear></WRAP>
 +\\
 +
 +===== Sauvegarde des données =====
 +
 +{{Images_icone-201-004_Triangle.png?25}} Les sauvegardes sont conservées dans: ''/var/lib/nethserver/backup/duplicity/backup-data/''.
 +
 +NethServer implémente 2 types de sauvegarde des données:
 +
 +  - **Sauvegarde unique** //(primaire, par défaut, compatible avec les versions antérieures)//
 +  - **Sauvegardes multiples** //(multi-sauvegardes, multi-moteurs)//
 +
 +La sauvegarde des données peut être effectuée à l'aide de différents moteurs:
 +
 +  - Duplicity (défaut) - [[http://duplicity.nongnu.org/|http://duplicity.nongnu.org/]]
 +  - Restic - [[https://restic.net/|https://restic.net/]]
 +  - rsync - [[https://rsync.samba.org/|https://rsync.samba.org/]]
 +
 +==== Duplicity ====
 +
 +Duplicity est le moteur par défaut pour NethServer. Il dispose d'un bon algorithme de compression qui réduira le stockage sur la destination. Duplicity nécessite une sauvegarde complète une fois par semaine. Lorsque le jeu de données est très volumineux, le processus peut prendre plus de 24 heures.
 +
 +{{Images_icone-201-006_Securite.png?25}} NethServer __n’implémente pas le chiffrage des sauvegardes__ si le moteur est Duplicity.
 +
 +Applications dorsales(( **Applications dorsales**: Programme qui, dans une architecture client-serveur, traite les commandes en provenance de l'application frontale. //Référence//: [[http://www.granddictionnaire.com/ficheOqlf.aspx?Id_Fiche=26527120|http://www.granddictionnaire.com/ficheOqlf.aspx?Id_Fiche=26527120]]. \\ \\ )) prises en charge:
 +
 +  - CIFS
 +  - NFS
 +  - USB
 +  - WebDAV //(seulement en cas de sauvegarde unique)//
 +
 +==== Sauvegarde unique ====
 +
 +Il s'agit de la sauvegarde système par défaut pouvant être configurée et restaurée à l'aide de l'interface Web.
 +
 +  - Peut être planifiée une fois par jour.
 +  - Peut inclure les journaux du système.
 +  - Envoie des notifications à l'administrateur du système ou à une adresse courriel externe.
 +
 +==== Répertoire partagé pour les sauvegardes ====
 +
 +  - Nos sauvegardes utiliseront le protocol CIFS //(Common Internet File System)//.
 +  - Elles seront téléversées automatiquement dans un répertoire partagé sur le poste de travail.
 +
 +Il nous faut donc un répertoire partagé sur le poste de travail afin que le Serveur NethServer puisse y déposer les fichiers de la sauvegarde.
 +
 +<WRAP column 30%>
 +<nowiki>-</nowiki> On peut utiliser le répertoire déjà utilisé par les sauvegardes des autres serveurs.\\ 
 +<nowiki>-</nowiki> On peut aussi créer un nouveau répertoire //**Sauvegarde**// sur le disque ''D:\'' du poste de travail.
 +|{{ Images_Cahier-201-02-109.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +Si //**Partager avec**// offre seulement les choix ci-dessous, fermer et ouvrir un autre Explorateur Windows.
 +|{{ Images_Cahier-201-02-110.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +\\ 
 +Dans les menus de l'Explorateur Windows, **Affichage -> Options**.
 +|{{ Images_Cahier-201-02-111.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Onglet **Affichage**.\\ 
 +<nowiki>-</nowiki> Décocher //**Utiliser l'Assistant Partage (recommandé)**//.\\ 
 +<nowiki>-</nowiki> **OK**.
 +|{{ Images_Cahier-201-02-112.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +<nowiki>-</nowiki> On retourne au dossier **Sauvegarde**.\\ 
 +<nowiki>-</nowiki> Clac sur le nom du répertoire **-> Partager avec -> Partage Avancé**.
 +|{{ Images_Cahier-201-02-113.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +\\ 
 +Onglet **Partage -> Partage avancé...**
 +|{{ Images_Cahier-201-02-114.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +Cocher **Partager ce dossier ->** //**Nom du partage:**// **Sauvegarde** apparaît **-> Autorisations**.
 +|{{ Images_Cahier-201-02-115.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +**Ajouter...**
 +|{{ Images_Cahier-201-02-116.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +On entre le nom d'un utilisateur de la machine Windows, ex:  **__michelandre__** **-> Vérifier les noms**.
 +|{{ Images_Cahier-201-02-117.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +\\ 
 +Le nom vérifié apparaît **-> OK**.
 +|{{ Images_Cahier-201-02-118.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +Sélectionner **michelandre ->** cocher toutes les //**Autorisations**//.
 +|{{ Images_Cahier-201-02-119.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +Sélectionner **Tout le monde ->** décocher toutes les //**Autorisations**// **-> OK**.
 +|{{ Images_Cahier-201-02-120.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +<nowiki>-</nowiki> **OK**.
 +
 +<nowiki>-</nowiki> Le répertoire est partagé **-> OK**.
 +</WRAP>
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-121.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-122.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\ 
 +
 +<WRAP column 46%>
 +=== Vérification ===
 +
 +Dans l'Explorateur Windows, l'utilisateur __michelandre__ entre l'adresse du poste de travail: **\\10.10.10.81**.
 +
 +Il voit le répertoire de partage: //**Sauvegarde**//.
 +
 +Tout est bien paramétré.
 +</WRAP>
 +<WRAP column 46%>
 +|{{ Images_Cahier-201-02-123.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +==== Installation du module Sauvegarde ====
 +
 +{{ Images_Cahier-201-02-124.png?600}}
 +**Administration -> Gestionnaire des logiciels ->** on coche **Sauvegarde -> AJOUTER**.
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 46%>
 +**APPLIQUER LES CHANGEMENTS**.
 +|{{ Images_Cahier-201-02-125.png?400 }}|
 +</WRAP>
 +<WRAP column 46%>
 +**Recharger la page** pour afficher les nouveaux menus.
 +|{{ Images_Cahier-201-02-126.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\ 
 +
 +==== Sauvegardes (données) ====
 +
 +<WRAP column 46%>
 +**Configuration -> Sauvegarde (données) ->** onglet **Général ->** on entre les informations demandées.
 +|{{ Images_Cahier-201-02-127.png?400 }}|
 +</WRAP>
 +<WRAP column 46%>
 +\\ 
 +On entre les informations demandées **-> SOUMETTRE**.
 +|{{ Images_Cahier-201-02-128.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 46%>
 +=== Notification ===
 +
 +⦿ //**Notifier**//\\ 
 +On préfère **Toujours** être notifié lorsqu'une sauvegarde est effectuée.
 +
 +⦿ //**Adresse email personnalisée**//\\ 
 +Pour recevoir les courriels, on entre l'adresse courriel de l'administrateur de tous les serveurs de notre site.
 +
 +//**Adresse de l'expéditeur**//\\ 
 +On spécifie l'adresse courriel de l'admin du serveur d'où provient la notification.
 +
 +**-> SOUMETTRE**.
 +</WRAP>
 +<WRAP column 46%>
 +|{{ Images_Cahier-201-02-129.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +==== Vérifications à la ligne de commande ====
 +
 +=== Sauvegarde (configuration) ===
 +
 +On affiche les propriétés de la configuration "//Sauvegarde (configuration)//".
 +
 +<file>
 +[root@tchana ~]# config show backup-config
 +
 +backup-config=configuration
 +    HistoryLength=31
 +    status=enabled
 +[root@tchana ~]#
 +</file>
 +
 +//**HistoryLength:**// la valeur donnée au paramètre //Configuration -> Sauvegarde (Configuration) -> Automatic backups to keep// à la section [[nethserver_201_cahier_02_odoo_12#Config de la sauvegarde de la configuration]].
 +
 +//**status:**// propriété qui active ou désactive la sauvegarde automatique, peut être activée //(enabled)// ou désactivée //(disabled)//. La valeur par défaut est //**activée**//.
 +
 +{{Images_icone-201-003_Note.png?25}} Indépendamment de cette propriété, la sauvegarde est toujours exécutée si elle est démarrée manuellement
 +
 +=== Sauvegarde (données) ===
 +
 +On affiche les propriétés de la configuration "//Sauvegarde (données)//".
 +
 +<file>
 +[root@tchana ~]# config show backup-data
 +
 +backup-data=configuration
 +    IncludeLogs=enabled
 +[root@tchana ~]#
 +</file>
 +
 +//**IncludeLogs:**// nous avons coché  //Configuration -> Sauvegarde (données) -> onglet  Général -> Advanced options -> Include system logs// à la section [[nethserver_201_cahier_02_odoo_12#Sauvegarde (données)]].
 +
 +On affiche les propriétés Sauvegarde (données).
 +
 +<file>
 +[root@tchana ~]# db backups show
 +
 +backup-data=duplicity
 +    BackupTime=0 3 * * *
 +    CleanupOlderThan=56D
 +    FullDay=0
 +    NFSHost=
 +    NFSShare=
 +    Notify=always
 +    NotifyFrom=admin@micronator-dev.org
 +    NotifyTo=michelandre@micronator.org
 +    SMBHost=10.10.10.81
 +    SMBLogin=michelandre
 +    SMBPassword=mot-de-passe
 +    SMBShare=Sauvegarde
 +    Type=incremental
 +    USBLabel=
 +    VFSType=cifs
 +    VolSize=250
 +    WebDAVLogin=
 +    WebDAVPassword=
 +    WebDAVUrl=
 +    status=enabled
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} On vérifie la propriété //**FullDay**// //(dimanche=0, lundi-1, mardi=2...)//
 +\\ 
 +
 +==== Personnalisation ====
 +
 +=== Inclusion de fichiers/répertoires ===
 +
 +On peut inclure des fichiers/répertoires supplémentaires en les spécifiant dans le fichier d'inclusion: ''/etc/backup-data.d/custom.include''.
 +
 +=== Grandeur des fichiers de sauvegarde ===
 +
 +Comme on le voit avec la commande ''db backups show'' à la section [[nethserver_201_cahier_02_odoo_12#Sauvegarde (données)]], la propriété //VolSize=250// donnera des fichiers de sauvegarde de //250 Mo//. Pour une sauvegarde de plusieurs Go, ce paramètre segmentera la sauvegarde en de très nombreux fichiers.
 +
 +Nous ajustons la grandeur des fichiers à **2 Go** //(2048 Mo)// et ainsi facilitons l'examen du répertoire ''Sauvegarde''.
 +
 +<file>
 +[root@tchana ~]# db backups setprop backup-data VolSize 2048
 +
 +[root@tchana ~]#
 +</file>
 +
 +On signale le changement.
 +
 +<file>
 +[root@tchana ~]# signal-event nethserver-backup-data-update
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# db backups show -> grep VolSize
 +
 + VolSize=2048
 +[root@tchana ~]#
 +</file>
 +
 +==== Lancement forcé de la sauvegarde ====
 +
 +=== Première sauvegarde ===
 +
 +On peut forcer le lancement d'une sauvegarde en exécutant la commande ci-dessous.
 +
 +<file>
 +[root@tchana ~]# /sbin/e-smith/backup-data -b backup-data 
 +
 +Backup: backup-data
 +Backup started at 2019-02-08 13:28:03
 +Pre backup scripts status: SUCCESS
 +--------------[ Backup Statistics ]--------------
 +StartTime 1549650495.78 (Fri Feb  8 13:28:15 2019)
 +EndTime 1549650497.91 (Fri Feb  8 13:28:17 2019)
 +ElapsedTime 2.13 (2.13 seconds)
 +SourceFiles 419
 +SourceFileSize 24495192 (23.4 MB)
 +NewFiles 419
 +NewFileSize 24495192 (23.4 MB)
 +DeletedFiles 0
 +ChangedFiles 0
 +ChangedFileSize 0 (0 bytes)
 +ChangedDeltaSize 0 (0 bytes)
 +DeltaEntries 419
 +RawDeltaSize 24467434 (23.3 MB)
 +TotalDestinationSizeChange 1963840 (1.87 MB)
 +Errors 0
 +-------------------------------------------------
 +
 +Action 'backup-data-duplicity backup-data': SUCCESS
 +Post backup scripts status: SUCCESS
 +Backup status: SUCCESS
 +Backup ended at 2019-02-08 13:28:19
 +Time elapsed: 0 hours, 0 minutes, 16 seconds
 +
 +Disk Usage:
 +      Size       Used  Available     Use%
 + 917.83 GB  785.67 GB  132.16 GB    85.6%
 +[root@tchana ~]#
 +</file>
 +
 +{{ Images_Cahier-201-02-130-A.png?600}}
 +Cette sauvegarde //(1 918 Ko)// est complète.
 +<WRAP clear></WRAP>
 +
 +On vérifie la date.
 +
 +<file>
 +[root@tchana ~]# date
 +
 +ven février  8 13:32:59 EDT 2019
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} Même si nous sommes //vendredi// et que nous avons paramétré les sauvegardes complètes pour les //dimanches// seulement, cette sauvegarde est complète, car c'est la première à ce jour.
 +
 +=== Deuxième sauvegarde ===
 +
 +On peut forcer une autre sauvegarde pour générer une incrémentielle.
 +
 +<file>
 +[root@tchana ~]# /sbin/e-smith/backup-data -b backup-data
 +
 +Backup: backup-data
 +Backup started at 2019-02-08 13:35:07
 +Pre backup scripts status: SUCCESS
 +--------------[ Backup Statistics ]--------------
 +StartTime 1549650912.53 (Fri Feb  8 13:35:12 2019)
 +EndTime 1549650912.95 (Fri Feb  8 13:35:12 2019)
 +ElapsedTime 0.42 (0.42 seconds)
 +SourceFiles 422
 +SourceFileSize 24526628 (23.4 MB)
 +NewFiles 9
 +NewFileSize 23980 (23.4 KB)
 +DeletedFiles 0
 +ChangedFiles 70
 +ChangedFileSize 14856835 (14.2 MB)
 +ChangedDeltaSize 0 (0 bytes)
 +DeltaEntries 79
 +RawDeltaSize 457642 (447 KB)
 +TotalDestinationSizeChange 76371 (74.6 KB)
 +Errors 0
 +-------------------------------------------------
 +
 +Les métadonnées locales et distantes sont déjà synchronisées. Aucune synchronisation nécessaire.
 +Date de la dernière sauvegarde complète : Fri Feb 08 13:28:03 2019
 +Aucun ancien jeu de sauvegarde n’a été trouvé, rien n’a été supprimé.
 +Action 'backup-data-duplicity backup-data': SUCCESS
 +Post backup scripts status: SUCCESS
 +Backup status: SUCCESS
 +Backup ended at 2019-02-08 13:35:14
 +Time elapsed: 0 hours, 0 minutes, 7 seconds
 +
 +Disk Usage:
 +      Size       Used  Available     Use%
 + 917.83 GB  785.68 GB  132.15 GB    85.6%
 +[root@tchana ~]#
 +</file>
 +
 +{{ Images_Cahier-201-02-130.png?600}}
 +La deuxième sauvegarde n'est que de //(75 Ko)// et est une incrémentielle, car ce n'est pas la première à ce jour et nous ne sommes pas //dimanche//.
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-131.png?400}}
 +=== Troisième sauvegarde ===
 +
 +Nous changeons la journée des sauvegardes complètes pour qu'elles aient lieu les //vendredis// au lieu des //dimanches// **-> SOUMETTRE**.
 +<WRAP clear></WRAP>
 +\\
 +
 +On force une troisième sauvegarde.
 +
 +<file>
 +[root@tchana ~]# /sbin/e-smith/backup-data -b backup-data
 +
 +Backup: backup-data
 +Backup started at 2019-02-08 13:44:43
 +Pre backup scripts status: SUCCESS
 +--------------[ Backup Statistics ]--------------
 +StartTime 1549651488.35 (Fri Feb  8 13:44:48 2019)
 +EndTime 1549651489.30 (Fri Feb  8 13:44:49 2019)
 +ElapsedTime 0.95 (0.95 seconds)
 +SourceFiles 422
 +SourceFileSize 24547401 (23.4 MB)
 +NewFiles 422
 +NewFileSize 24547401 (23.4 MB)
 +DeletedFiles 0
 +ChangedFiles 0
 +ChangedFileSize 0 (0 bytes)
 +ChangedDeltaSize 0 (0 bytes)
 +DeltaEntries 422
 +RawDeltaSize 24519532 (23.4 MB)
 +TotalDestinationSizeChange 1996425 (1.90 MB)
 +Errors 0
 +-------------------------------------------------
 +
 +Les métadonnées locales et distantes sont déjà synchronisées. Aucune synchronisation nécessaire.
 +Date de la dernière sauvegarde complète : Fri Feb 08 13:28:03 2019
 +Aucun ancien jeu de sauvegarde n’a été trouvé, rien n’a été supprimé.
 +Action 'backup-data-duplicity backup-data': SUCCESS
 +Post backup scripts status: SUCCESS
 +Backup status: SUCCESS
 +Backup ended at 2019-02-08 13:44:51
 +Time elapsed: 0 hours, 0 minutes, 8 seconds
 +
 +Disk Usage:
 +      Size       Used  Available     Use%
 + 917.83 GB  785.68 GB  132.15 GB    85.6%
 +[root@tchana ~]#
 +</file>
 +
 +{{ Images_Cahier-201-02-132.png?600}}
 +La troisième sauvegarde est complète car nous avons paramétré les complètes pour les //vendredis//.
 +
 +Si nous lançons une quatrième sauvegarde, elle sera complète elle aussi, car nous sommes toujours //vendredi//.
 +
 +{{Images_icone-201-004_Triangle.png?25}} On remet le paramètre des sauvegardes complètes pour les //dimanches//.
 +<WRAP clear></WRAP>
 +
 +=== Exemple de récupération du fichier de sauvegarde de la configuration ===
 +
 +{{Images_icone-201-001_doigt.png?22}} Pour une reprise après sinistre, on peut récupérer le fichier d'une sauvegarde de la configuration directement depuis le fichier ''backup-config.tar.xz'' dans le répertoire de stockage - ''Sauvegarde'' du poste de travail.
 +
 +On se rend dans le répertoire de stockage, on claque sur le fichier ''backup-config.tar.xz -> 7-Zip -> Ouvrir archive'' et on navigue jusqu'au répertoire  ''\var/lib\nethserver\backup\history''.
 +
 +<WRAP column 46%>
 +|{{ Images_Cahier-201-02-133.png?400 }}|
 +</WRAP>
 +<WRAP column 46%>
 +|{{ Images_Cahier-201-02-134.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +{{Images_icone-201-003_Note.png?25}} Les sauvegardes de la configuration du serveur sont incluses dans la sauvegarde des données, car nous avons fait ce choix lors de la configuration de la sauvegarde des données.
 +
 +<WRAP column 30%>
 +Clac sur le fichier **xxx.tar.xz -> Copier vers...**
 +|{{ Images_Cahier-201-02-135.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +**OK**.
 +|{{ Images_Cahier-201-02-136.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +Le fichier de la configuration est récupéré de la sauvegarde des données.
 +|{{ Images_Cahier-201-02-137.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +=== Exclusion de fichiers/répertoire ===
 +
 +On peut exclure des fichiers/répertoires en les spécifiant dans le fichier d'exclusion: ''/etc/backup-data.d/custom.exclude''.
 +\\ 
 +\\ 
 +
 +===== Restauration des données =====
 +
 +1) Nous créons un fichier dans le répertoire personnel de __root__.\\ 
 +2) Nous lançons une sauvegarde.\\ 
 +3) Nous supprimons le fichier créé avant la sauvegarde, celui de l' étape 1.\\ 
 +4) Nous récupérons ce fichier contenu dans la dernière sauvegarde.\\ 
 +5) On vérifie la récupération.
 +
 +1) On crée le fichier
 +
 +<file>
 +[root@tchana ~]# touch toto
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -ls toto
 +
 +0 -rw-r--r-- 1 root root 0 Feb  8 13:55 toto
 +[root@tchana ~]#
 +</file>
 +
 +2) On lance une sauvegarde.
 +
 +<file>
 +[root@tchana ~]# /sbin/e-smith/backup-data -b backup-data
 +
 +Backup: backup-data
 +Backup started at 2019-02-08 13:56:09
 +Pre backup scripts status: SUCCESS
 +...
 +Action 'backup-data-duplicity backup-data': SUCCESS
 +Post backup scripts status: SUCCESS
 +Backup status: SUCCESS
 +Backup ended at 2019-02-08 13:56:17
 +Time elapsed: 0 hours, 0 minutes, 8 seconds
 +
 +Disk Usage:
 +      Size       Used  Available     Use%
 + 917.83 GB  785.68 GB  132.15 GB    85.6%
 +[root@tchana ~]#
 +</file>
 +
 +3) Nous supprimons le fichier créé avant la sauvegarde, celui de la première étape.
 +
 +<file>
 +[root@tchana ~]# rm toto
 +
 +rm : supprimer fichier vide « toto » ? y
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -ls toto
 +
 +ls: impossible d'accéder à toto: Aucun fichier ou dossier de ce type
 +[root@tchana ~]#
 +</file>
 +
 +==== Restauration ====
 +
 +4) On récupère le fichier.
 +
 +{{ Images_Cahier-201-02-138.png?500}}
 +**Configuration -> Restaurer les données**.
 +
 +//**Backup file**// \\ 
 +On choisit la dernière sauvegarde.
 +
 +//**Mode de restauration**//\\ 
 +⦿ Restaurer les fichiers dans le chemin original.
 +
 +//**Sélectionner un ou plusieurs dossiers ou fichiers à restaurer**//\\ 
 +On entre **toto**.
 +
 +<nowiki>-</nowiki> Dans l'arborescence, on choisit **/root**, le répertoire contenant le fichier à restaurer.\\ __/root__ apparaît dans: //**Dossiers ou fichiers à restaurer**//.
 + 
 +**-> RESTAURER**.
 +
 +Le message sur fond vert, //**Restauré à la position initiale**// indique que le fichier a été trouvé et restauré.
 +
 +{{Images_icone-201-003_Note.png?25}} __Si nous n'avions rien spécifié__ sous //Sélectionner un ou plusieurs dossiers ou fichiers à restaurer//, c'est tout l'arborescence __/root__ qui aurait été alors restaurée.
 +
 +=== Vérification ===
 +
 +5) On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -ls toto
 +
 +0 -rw-r--r-- 1 root root 0 Feb  8 13:55 toto
 +[root@tchana ~]#
 +</file>
 +
 +Le fichier a été restauré.
 +\\ 
 +
 +==== Recherche de fichiers dans les sauvegardes ====
 +
 +On peut rechercher un fichier dans les sauvegardes //(peut prendre un certain temps)//.
 +
 +<file>
 +[root@tchana ~]# /sbin/e-smith/backup-data-list -b backup-data | grep toto
 +
 +Ven février  8 13:55:22 2019 root/toto
 +[root@tchana ~]#
 +</file>
 +
 +<WRAP centeralign>**La sauvegarde/restauration NethServer est fonctionnelle.**</WRAP>
 +
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +\\ 
 +\\ 
 +
 +===== NethServer & BackupPC =====
 +
 +//Référence:// [[nethserver_101_cahier_11_nethserver_backuppc|NethServer-101, Cahier-11: NethServer & BackupPC]].
 +
 +Cette section décrit la marche à suivre pour créer une sauvegarde d'un Serveur NethServer //(dorgee.micronator-101.org, notre serveur physique principal)// vers une station distante.
 +
 +La sauvegarde se fait en utilisant le protocol CIFS //(Common Internet File System)// vers le répertoire partagé ''D:\Sauvegarde'' sur la station de travail //Win-81//.
 +
 +{{Images_icone-201-003_Note.png?25}} Toutes les sauvegardes/restaurations sur les Serveurs NethServer fonctionnent exactement de la même façon.
 +
 +//BackupPC//, installé sur un Serveur NethServer dédié aux sauvegardes, peut sauvegarder tout Serveur NethServer et il sera alors possible de le restaurer/migrer sans qu'il ne soit nécessaire de réinstaller les //Modules// présents ou les autres logiciels installés sur le serveur; ils seront tous restaurés, car inclus dans la sauvegarde //BackupPC//.
 +
 +==== Description du cahier ====
 +
 +Le [[nethserver_101_cahier_11_nethserver_backuppc|Cahier-11]]: //NethServer & BackupPC// du "Cours NethServer-101" décrit la marche à suivre pour: l’installation de //BackupPC-3.3.1// et sa mise à jour vers //BackupPC-4.3.0//, les prises de sauvegardes de l’hôte de //BackupPC// et du serveur SOURCE et enfin la restauration de la sauvegarde de SOURCE sur DESTINATION pour que ce dernier devienne un clone du premier.
 +
 +Ce cahier est basé sur les pages Web suivantes: 
 +
 +[[https://wiki.nethserver.org/doku.php?id=module:backuppc|https://wiki.nethserver.org/doku.php?id=module:backuppc]]\\ 
 +[[https://www.veritech.net/centos-7-backuppc-installation-guide/|https://www.veritech.net/centos-7-backuppc-installation-guide/]]\\ 
 +[[https://srbu.se/index.php?option=com_content&view=article&id=201:upgrading-backuppc-to-v4-2-1&catid=8&Itemid=121&lang=en|https://srbu.se/index.php?option=com_content&view=article&id=201:upgrading-backuppc-to-v4-2-1&catid=8&Itemid=121&lang=en]]
 +
 +//Page officielle de BackupPC:// [[https://backuppc.github.io/backuppc/|https://backuppc.github.io/backuppc/]].
 +
 +//Référence:// [[https://fr.wikipedia.org/wiki/BackupPC|https://fr.wikipedia.org/wiki/BackupPC]].\\ 
 +//BackupPC// est un logiciel LIBRE, publié sous licence //GPL//, pour la sauvegarde de systèmes de fichiers.\\ 
 +Il est utilisé pour sauvegarder sur disque un ensemble de postes clients et de serveurs, sous: Unix, Linux, Windows ou Mac OS X. Les protocoles utilisables pour les transferts sont: //SMB//, //tar over SSH/rsh/nfs// et //rsync//. Il ne nécessite l'installation d'aucun logiciel client sur les machines à sauvegarder. Il possède une interface Web pour lancer des sauvegardes ou restaurer des fichiers. Il est également possible de sauvegarder des bases de données via un script shell lancé avant la sauvegarde.
 +\\ 
 +
 +<WRAP centeralign>//**But du Cahier-101-11: migrer le serveur SOURCE vers le serveur DESTINATION.**//</WRAP>
 +\\ 
 +
 +{{ Images_Cahier-201-02-139.png?700 }}
 +\\
 +
 +====== Activation du mode développeur d'Odoo ======
 +
 +===== Description =====
 +
 +//Référence:// [[https://riptutorial.com/fr/odoo-8/topic/3311/comment-activer-le-mode-developpeur-openerp|https://riptutorial.com/fr/odoo-8/topic/3311/comment-activer-le-mode-developpeur-openerp]].\\ 
 +Le mode //développeur Odoo// vous permet d'apporter des modifications substantielles à la base de données Odoo, telles que l'ajout de champs à vos documents et vues. Vous modifiez les vues par défaut de vos actions et pouvez même créer des formulaires dynamiques basés sur d'autres champs dans vos modèles.
 +
 +===== Avantage =====
 +
 +Bien qu'Odoo soit un puissant cadre d'application, le cycle de développement peut être brutal pour tester les modifications apportées à votre application. En utilisant le mode développeur, vous pouvez tester des expressions et résoudre de nombreux problèmes fonctionnels sans avoir à redémarrer le serveur encore et encore pour tester des modifications simples.
 +
 +De plus, l'outil de développement Odoo est idéal pour examiner l'architecture des formulaires et des vues afin de voir comment les champs sont liés aux modules, à leurs domaines, contextes et autres attributs.
 +
 +===== Limites =====
 +
 +{{Images_icone-201-004_Triangle.png?25}} Bien qu'il soit très tentant d'utiliser le mode développeur pour apporter certaines modifications à votre application, il existe des inconvénients. Selon ce que vous modifiez, vous pouvez perdre ces modifications avec les futures mises à jour des modules ou lorsque vous installez des applications supplémentaires dans Odoo. Ceci est particulièrement véridique pour les changements de vues.
 +
 +===== Activation par un ajout à l'URL =====
 +
 +{{ Images_Cahier-201-02-161.png?400}}
 +Après s'être logué, pour activer temporairement le mode développeur, on ajoute dans l'URL, après le mot clé __web__, ''?debug='' et on appuie sur **[Entrée]**.
 +
 +{{ Images_Cahier-201-02-162.png?600}}
 +La page sera rechargée et le mode développeur/débogage activé.
 +<WRAP clear></WRAP>
 +\\
 +
 +===== Commandes du mode développeur =====
 +
 +<WRAP column 46%>
 +En cliquant l'icône des **Outils développeur**, un menu se déroule et affiche plusieurs choix de commandes.
 +|{{ Images_Cahier-201-02-163.png?400 }}|
 +\\ 
 +
 +Pour quitter le mode développeur, à la page **Configuration**, on clique l'icône des **Outils développeur  -> Quitter les outils développeur**.
 +|{{ Images_Cahier-201-02-164.png?400 }}|
 +</WRAP>
 +<WRAP column 46%>
 +À la page **Configuration**, on clique **Technique**, un menu se déroule et affiche plusieurs autres choix de commandes.
 +|{{ Images_Cahier-201-02-165.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-166.png?400}}
 +===== Activation par un clic de la souris =====
 +
 +Sur la page **Configuration**, ci-contre dans le cadre //**Partagez l'engouement**//, on peut activer le mode développeur avec ou sans éléments d'actif //(assets)// en cliquant sur un des liens suivants:
 +
 +  - **Activer le mode développeur**.
 +  - **Activer le mode développeur (avec les assets)**.
 +<WRAP clear></WRAP>
 +\\ 
 +\\ 
 +
 +====== Mises à jour ======
 +
 +===== Odoo =====
 +
 +Nous avons utilisé ''git'' pour l'installation d'Odoo-12; il peut donc aussi servir pour la mise à jour du coeur d'Odoo et de ses extensions; puis ensuite on met à jour la base de données PostgreSQL afin qu'elle utilise le code le plus récent.
 +
 +<WRAP column 46%>
 +{{Images_icone-201-002_Lumiere.png?25}} Pour le nom de la BD, voir la section [[nethserver_201_cahier_02_odoo_12#Création d'une nouvelle base de données]] ou se rendre à la page:
 +
 +[[https://www.odoo.micronator-dev.org/web/database/manager|https://www.odoo.micronator-dev.org/web/database/manager]].
 +
 +{{Images_icone-201-001_doigt.png?22}} S'assurer d'avoir une sauvegarde de la base de donnée PostgreSQL avant de réaliser la mise à jour. Voir la section [[nethserver_201_cahier_02_odoo_12#Sauvegarde]].
 +</WRAP>
 +<WRAP column 46%>
 +|{{ Images_Cahier-201-02-140.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +==== Odoo et ses extensions ====
 +
 +//Référence:// https://www.cier.tech/fr_FR/blog/notre-blog-1/post/how-to-update-odoo-from-github-25.
 +
 +On arrête Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl stop odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie l'arrêt.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12  | grep -i Active:
 +
 +   Active: inactive (dead) since mar. 2019-05-21 23:23:22 EDT; 44min ago
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Notez que vous devez faire la mise à jour en tant qu'utilisateur __odoo__.
 +
 +On se substitue à l'utilisateur __odoo__.
 +
 +<file>
 +[root@tchana ~]# su - odoo
 +
 +Dernière connexion : dimanche 19 mai 2019 à 21:23:18 EDT sur pts/0
 +[odoo@tchana ~]$
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[odoo@tchana ~]$ whoami
 +
 +odoo
 +[odoo@tchana ~]$
 +</file>
 +
 +On se rend dans le répertoire ''/opt/odoo/odoo12''.
 +
 +<file>
 +[odoo@tchana ~]$ cd /opt/odoo/odoo12
 +
 +[odoo@tchana odoo12]$
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[odoo@tchana odoo12]$ pwd
 +
 +/opt/odoo/odoo12
 +[odoo@tchana odoo12]$
 +</file>
 +
 +==== Récupération des mises à jour ====
 +
 +On récupère les mises à jour avec ''git''.
 +
 +<file>
 +[odoo@tchana odoo12]$ git fetch origin 12.0 --depth=1
 +
 +remote: Enumerating objects: 2717, done.
 +remote: Counting objects: 100% (2717/2717), done.
 +remote: Compressing objects: 100% (926/926), done.
 +remote: Total 1595 (delta 1226), reused 742 (delta 664), pack-reused 0
 +Receiving objects: 100% (1595/1595), 3.88 MiB | 1.44 MiB/s, done.
 +Resolving deltas: 100% (1226/1226), completed with 1008 local objects.
 +From https://github.com/odoo/odoo
 + * branch            12.0       -> FETCH_HEAD
 +[odoo@tchana odoo12]$
 +</file>
 +
 +==== Application des mises à jour ====
 +
 +Nous avons récupérer toutes les mise à jour et nous devons demander au système de les appliquer. À ce stade, le système sait quelles sont les modifications qui doivent être effectuées, mais nous ne les avons pas encore appliquées; nous pouvons le faire avec ''git reset''.
 +
 +{{Images_icone-201-004_Triangle.png?25}} La commande ''git reset –hard'' appliquera toutes les modifications, peu importe ce qui pourrait survenir.\\ 
 +{{Images_icone-201-001_doigt.png?22}} Si vous avez ajouté du code personnalisé dans des modules déjà existants //(donc dans le code source et non dans un module autonome)//, vous ne devez pas l'utiliser cette commande, car votre code personnalisé sera écrasé! Ajouté du code personnalisé dans des modules originaux est contraire à toutes les règles. Si vous devez ajouter du code, commencez par créer vos propres modules au lieu de modifier le code source.
 +
 +On applique les mises à jour.
 +
 +<file>
 +[odoo@tchana odoo12]$ git reset --hard origin/12.0
 +
 +HEAD is now at c545783 [FIX] account: communication size
 +[odoo@tchana odoo12]$
 +</file>
 +
 +{{Images_icone-201-003_Note.png?25}} On peut voir qu'un bogue a été résolu ''[FIX]''.
 +
 +Le code Odoo est maintenant à jour et a été synchronisé avec les derniers changements apportés.
 +\\ 
 +
 +==== Base de donnée PostgreSQL ====
 +
 +On met à jour la base de données PostgreSQL afin qu'elle prenne note de toutes les modifications et qu'elle se les applique à elle-même.
 +
 +<file>
 +[odoo@tchana odoo12]$ /usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 \
 +                      /opt/odoo/odoo12/odoo-bin  -c /etc/odoo-server.conf                  \
 +                      -u all  -d Odoo-12
 +
 +
 +</file>
 +
 +● //**/usr/bin/scl enable rh-python36**// -- //**/opt/odoo/odoo12-venv/bin/python3**// <wrap em>\</wrap> \\ 
 +Indique au système d'activer la //Collection rh-python36// et d'utiliser la commande ''python3'' de l'environ­nement virtuel ''odoo12-venv''. La commande se poursuit sur la ligne suivante "<wrap em>\</wrap>".
 +
 +● //**/opt/odoo/odoo12/odoo-bin  -c /etc/odoo-server.conf**// <wrap em>\</wrap>\\ 
 +Lance Odoo en utilisant le fichier de __**c**__onfiguration ''/etc/odoo-server.conf'' et la commande se poursuit sur la ligne suivante "<wrap em>\</wrap>".
 +
 +● //**-u all  -d Odoo-12**//\\ 
 +Indique de mettre à jour //(__**u**__pdate)// tous les modules //(all)// de la base de données //(__**d**__atabase)// ''Odoo-12''.
 +
 +Pour une explication des paramètres de la commande ''odoo-bin'', voir: [[https://www.odoo.com/documentation/11.0/reference/cmdline.html|https://www.odoo.com/documentation/11.0/reference/cmdline.html]]
 +\\ 
 +
 +==== Surveillance de la mise à jour de la BD ====
 +
 +On ouvre une __deuxième session PuTTY__, on se connecte en tant que __root__ et on lance la commande suivante pour surveiller la mise à jour de la base de données.
 +
 +<file>
 +[root@tchana ~]# top -d1 | grep python3
 +
 + 7779 odoo      20    340396  39236   8208 R  74,5  1,0   0:00.76 python3
 + 7779 odoo      20    469568  65684  10528 S  81,0  1,7   0:01.57 python3
 +...
 + 7779 odoo      20    489852  77196  11732 S  77,0  2,0   0:19.79 python3
 + 7779 odoo      20    563584  77416  11732 S  41,2  2,0   0:20.33 python3
 + 5926 odoo      20    637460  80352  11672 S   1, 2,1   0:20.78 python3
 + 5926 odoo      20    637460  80352  11672 S   1, 2,1   0:20.79 python3
 + 5926 odoo      20    637460  80352  11672 S   1, 2,1   0:20.80 python3
 +
 +[root@tchana ~]#
 +</file>
 +
 +C'est la commande ''python3'', de l'environnement virtuel ''odoo12-venv'', qui fait tout le travail de la mise à jour de la BD. Pour ce faire, elle utilise une forte proportion du temp CPU.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Lorsque l'utilisation du temp CPU utilisé par ''python3'' redevient normal //(1,0)//, la mise à jour de la BD est terminée.
 +
 +On peut fermer cette deuxième session PuTTY.
 +\\ 
 +
 +==== Arrêt de la commande de mise à jour et redémarrage du service Odoo ====
 +
 +On revient à l'écran original de la session PuTTY.
 +
 +Les paramètres de la mise à jour de la base de données //(-u all  -d Odoo-12)// faisaient partie de la commande du lancement d'Odoo.
 +
 +<WRAP box>
 +<file>
 +[odoo@tchana odoo12]$ /usr/bin/scl enable rh-python36 -- /opt/odoo/odoo12-venv/bin/python3 \
 +                      /opt/odoo/odoo12/odoo-bin  -c /etc/odoo-server.conf                  \
 +                      -u all  -d Odoo-12
 +
 +
 +</file>
 +</WRAP>
 +
 +La mise à jour de la base de données est terminée, mais la commande du lancement d'Odoo continue de rouler.
 +
 +Vu que nous n'avons pas utiliser ''systemctl'' pour lancer Odoo, ce dernier roule donc en tant que __commande__ et non en tant que __service__. Si nous fermons la fenêtre de cette session PuTTY, Odoo s'arrêtera, car la fermeture d'une fenêtre termine toutes les commandes courantes lancées par cette session.
 +
 +On avorte la commande avec un **[CTL]** + **[c]**.
 +
 +<file>
 +^C
 +[odoo@tchana odoo12]$
 +</file>
 +
 +On quitte la substitution d'utilisateur pour retourner à __root__.
 +
 +<file>
 +[odoo@tchana odoo12]$ exit
 +
 +déconnexion
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# whoami
 +
 +root
 +[root@tchana ~]#
 +</file>
 +
 +On redémarre le __service__ Odoo en utilisant ''systemctl''.\\ 
 +{{Images_icone-201-002_Lumiere.png?25}} Contrairement à une commande, un service ne s'arrête pas si on ferme la session qui l'a lancée.
 +
 +<file>
 +[root@tchana ~]# systemctl start odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# systemctl status odoo12 | grep Active:
 +
 +   Active: active (running) since mer. 2019-05-22 01:44:10 EDT; 1min 4s ago
 +[root@tchana ~]#
 +</file>
 +
 +==== Vérification du site Odoo ====
 +
 +{{Images_icone-201-001_doigt.png?22}} On __vidange l'historique__ de notre navigateur et on s'assure que //java script// et les //témoins// soient activés.\\ 
 +On se connecte à Odoo et on vérifie que tout fonctionne correctement tel qu'avant la mise à jour: [[https://www.odoo.micronator-dev.org|https://www.odoo.micronator-dev.org]].
 +\\ 
 +\\ 
 +
 +===== PostgreSQL =====
 +
 +On procède à la mise à jour de PostgreSQL-11.
 +
 +<file>
 +[root@tchana ~]# yum update -y --disablerepo=* --enablerepo=pgdg11          \
 +                               postgresql11         postgresql11-libs       \
 +                               postgresql11-server  postgresql11-contrib    \
 +                               postgresql11-devel   postgresql11-docs       \
 +                               postgresql11-test
 +
 +Modules complémentaires chargés : changelog, fastestmirror, nethserver_events, protectbase
 +Loading mirror speeds from cached hostfile
 +0 packages excluded due to repository protections
 +No packages marked for update
 +[root@tchana ~]#
 +</file>
 +
 +Si des mises à jour étaient disponibles, elles seraient installées et dans ce cas, il faudrait redémarrer PostgreSQL et Odoo.
 +
 +On redémarre le service PostgreSQL.
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# systemctl restart postgresql-11
 +
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +On redémarre le service Odoo.
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +==== Vérification du site Odoo ====
 +
 +{{Images_icone-201-001_doigt.png?22}} On __vidange l'historique__ de notre navigateur et on s'assure que //java script// et les //témoin//s soient activés.\\ 
 +On se rend à notre site et on s'assure que tout fonctionne correctement:  [[https://www.odoo.micronator-dev.org|https://www.odoo.micronator-dev.org]].
 +\\ 
 +\\ 
 +
 +===== RH-Python36 =====
 +
 +Mise à jour de la Collection RH-Python36.
 +
 +<file>
 +[root@tchana ~]# yum update -y --enablerepo=centos-sclo-rh rh-python36*
 +
 +Modules complémentaires chargés : changelog, fastestmirror, nethserver_events, protectbase
 +Loading mirror speeds from cached hostfile
 + * ce-base: mirror.genesisadaptive.com
 + * ce-extras: mirror.genesisadaptive.com
 + * ce-sclo-rh: mirror.genesisadaptive.com
 + * ce-sclo-sclo: mirror.genesisadaptive.com
 + * ce-updates: mirror.genesisadaptive.com
 + * centos-sclo-rh: mirror.csclub.uwaterloo.ca
 + * epel: mirror.csclub.uwaterloo.ca
 + * nethforge: mirror.nethserver.org
 + * nethserver-base: mirror.nethserver.org
 + * nethserver-updates: mirror.nethserver.org
 + * remi-safe: mirror.team-cymru.com
 +1447 packages excluded due to repository protections
 +No packages marked for update
 +[root@tchana ~]#
 +</file>
 +
 +S'il y a eu des mises à jour, on doit redémarrer le service Odoo.
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +==== Vérification du site Odoo ====
 +
 +{{Images_icone-201-001_doigt.png?22}} On __vidange l'historique__ de notre navigateur et on s'assure que //java script// et les //témoins// soient activés.\\ 
 +On se connecte à Odoo et on vérifie que tout fonctionne correctement tel qu'avant la mise à jour de PostgreSQL: [[https://www.odoo.micronator-dev.org|https://www.odoo.micronator-dev.org]].
 +\\ 
 +\\ 
 +
 +===== npm/node =====
 +//
 +Référence:// [[https://fr.wikipedia.org/wiki/Npm|https://fr.wikipedia.org/wiki/Npm]].\\ 
 +L'utilitaire ''npm'' est le gestionnaire officiel des paquets de //Node.js//. Depuis la version //0.6.3// de //Node.js//:
 +
 +  - ''npm'' fait partie de l'environnement et nous l'avons installé comme prérequis d'Odoo.
 +  - ''npm'' fonctionne avec un terminal et gère les dépendances pour une application.
 +  - ''npm'' permet également d'installer des applications //Node.js// disponibles depuis le référentiel [npm].
 +
 +==== Impacts sur less et lessc ====
 +
 +{{Images_icone-201-004_Triangle.png?25}} Lors de l'__installation initiale__ d'__Odoo-11__, il ne fallait pas installer la dernière version de ''npm'', car elle générait une erreur de style dûe à l'utilitaire ''lssc'' qui n'était pas reconnue.
 +
 +<WRAP box>
 +<file>
 +Style error
 +The style compilation failed, see the error below. Your recent actions may be the cause, please try reverting the changes you made.
 +
 +(b'', b'The "--no-js" argument is deprecated, as inline JavaScript is disabled by default. Use "--js" to enable inline JavaScript (not recommended).
 +[TypeError: Object function Object() { [native code] } has no method 'assign']
 +')This error occured while compiling the bundle 'web.assets_common' containing:
 +    - /web/static/lib/bootstrap/less/variables.less
 +...
 +</file>
 +</WRAP>
 +
 +{{Images_icone-201-003_Note.png?25}} Les développeurs d'Odoo ne sont pas renommés pour la compatibilité avec les versions des logiciels prérequis.
 +
 +{{Images_icone-201-001_doigt.png?22}} {{Images_icone-201-002_Lumiere.png?25}} Il est plus que fortement recommandé de toujours utiliser un système de développement pour vérifier les mises à jours du code Odoo et surtout pour les logiciels prérequis.
 +
 +Vous pouvez consulter le document suivant pour la création d'un clone d'un Serveur NethServer:  [[nethserver_101_cahier_11_nethserver_backuppc|Cahier-11]] du "Cours "NethServer-101".
 +
 +On vérifie la version actuelle.
 +
 +<file>
 +[root@tchana ~]# npm --version
 +
 +6.4.1
 +[root@tchana ~]#
 +</file>
 +
 +==== Mise à jour de npm/node ====
 +
 +<file>
 +[root@tchana ~]# npm install -g npm
 +
 +/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
 +/usr/bin/npx -> /usr/lib/node_modules/npm/bin/npx-cli.js
 ++ npm@6.9.0
 +added 54 packages from 9 contributors, removed 15 packages and updated 47 packages in 11.323s
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Une mise à jour a été effectuée //(...updated 47 packages...)//.
 +
 +Vu qu'il y a eu une mise à jour, on doit redémarrer le service Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +==== Vérification du site Odoo ====
 +
 +{{Images_icone-201-001_doigt.png?22}} On __vidange l'historique__ de notre navigateur et on s'assure que //java script// et les //témoins// soient activés.\\ 
 +On se connecte à Odoo et on vérifie que tout fonctionne correctement tel qu'avant la mise à jour de ''npm'': [[https://www.odoo.micronator-dev.org|https://www.odoo.micronator-dev.org]].
 +\\ 
 +
 +==== Retour à la version originalement installée ====
 +
 +Au cas où la nouvelle version occasionnerait des problèmes, on peut retourner à la version originalement installée.
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# npm install -g npm@6.4.1
 +
 +/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
 +/usr/bin/npx -> /usr/lib/node_modules/npm/bin/npx-cli.js
 ++ npm@6.4.1
 +added 15 packages from 11 contributors, removed 54 packages and updated 47 packages in 8.626s
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +On vérifie.
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# npm --version
 +
 +6.4.1
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +Redémarrage du service Odoo.
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +{{Images_icone-201-001_doigt.png?22}} On __vidange l'historique__ de notre navigateur et on s'assure que //java script// et les //témoins// soient activés.\\ 
 +On se connecte à Odoo et on vérifie que tout fonctionne correctement tel qu'avec la version de ''npm'' originalement installée: [[https://www.odoo.micronator-dev.org|https://www.odoo.micronator-dev.org]].
 +\\ 
 +\\ 
 +
 +===== less et less-plugin-clean-css =====
 +
 +On vérifie la version actuelle de ''less''.
 +
 +<file>
 +[root@tchana ~]# less --version
 +
 +less 458 (POSIX regular expressions)
 +Copyright (C) 1984-2012 Mark Nudelman
 +
 +less comes with NO WARRANTY, to the extent permitted by law.
 +For information about the terms of redistribution,
 +see the file named README in the less distribution.
 +Homepage: http://www.greenwoodsoftware.com/less
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie la version actuelle de ''lessc''.
 +
 +<file>
 +[root@tchana ~]# lessc --version
 +
 +lessc 3.9.0 (Less Compiler) [JavaScript]
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-001_doigt.png?22}} Pour éviter les erreurs de certificats SSL et de téléchargement.
 +
 +<file>
 +[root@tchana ~]# npm configset strict-ssl false
 +
 +[root@tchana ~]#
 +</file> 
 +
 +Mise à jour de ''less'' et de ''less-plugin-clean-css''.
 +
 +<file>
 +[root@tchana ~]# npm install -g less less-plugin-clean-css
 +
 +/usr/bin/lessc -> /usr/lib/node_modules/less/bin/lessc
 ++ less@3.9.0
 ++ less-plugin-clean-css@1.5.1
 +updated 2 packages in 3.269s
 +[root@tchana ~]#
 +</file>
 +
 +{{Images_icone-201-004_Triangle.png?25}} Deux paquets ont été mis à jour, on devra redémarrer le service Odoo après la vérification de ''less'' et ''lessc''.
 +
 +On vérifie la version actuelle de ''less''.
 +
 +<file>
 +[root@tchana ~]# less --version
 +
 +less 458 (POSIX regular expressions)
 +Copyright (C) 1984-2012 Mark Nudelman
 +
 +less comes with NO WARRANTY, to the extent permitted by law.
 +For information about the terms of redistribution,
 +see the file named README in the less distribution.
 +Homepage: http://www.greenwoodsoftware.com/less
 +[root@tchana ~]#
 +</file>
 +
 +Il n'y a pas eu de mises à jour de ''less''. S'il y en avait eues, elles auraient été installées.
 +
 +On vérifie la version actuelle de ''lessc''.
 +
 +<file>
 +[root@tchana ~]# lessc --version
 +
 +lessc 3.9.0 (Less Compiler) [JavaScript]
 +[root@tchana ~]#
 +</file>
 +
 +Il n'y a pas eu de mises à jour de ''lessc''. S'il y en avait eues, elles auraient été installées.
 +
 +{{Images_icone-201-004_Triangle.png?25}} Par contre, il y a eu la mise à jour de deux paquets selon le résultat du paragraphe "Mise à jour de ''less'' et de ''less-plugin-clean-css''".
 +
 +Redémarrage du service Odoo.
 +
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +
 +==== Vérification du site Odoo ====
 +
 +{{Images_icone-201-001_doigt.png?22}} On __vidange l'historique__ de notre navigateur et on s'assure que //java script// et les //témoins// soient activés.\\ 
 +On se connecte à Odoo et on vérifie que tout fonctionne correctement tel qu'avant la mise à jour des deux paquets: [[https://www.odoo.micronator-dev.org|https://www.odoo.micronator-dev.org]].
 +\\ 
 +\\ 
 +
 +===== wkhtmltox =====
 +
 +==== Dépendances pour wkhtmltopdf ====
 +
 +Mise à jour des dépendances.
 +
 +<file>
 +[root@tchana ~]# yum update -y fontconfig libpng libX11 libXext libXrender  \
 +                               xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi
 +
 +Modules complémentaires chargés : changelog, fastestmirror, nethserver_events, protectbase
 +Configuration du processus de mise à jour
 +Loading mirror speeds from cached hostfile
 + * base: centos.mirror.ca.planethoster.net
 +...
 +No packages marked for update
 +[root@tchana ~]#
 +</file>
 +
 +==== wkhtmltox ====
 +
 +Pour trouver la dernière version de ''wkhtmltopdf''  on se rend à l'URL ci-dessous: [[https://github.com/wkhtmltopdf/wkhtmltopdf/releases/|https://github.com/wkhtmltopdf/wkhtmltopdf/releases/]].
 +
 +<WRAP column 46%>
 +La dernière version disponible est la même que celle qu'on a installée à la section [[nethserver_201_cahier_02_odoo_12#wkhtmltox]].
 +
 +S'il y avait eu une nouvelle version, nous aurions pu l'installer de la même manière que celle que nous avons déjà installée.
 +</WRAP>
 +<WRAP column 46%>
 +|{{ Images_Cahier-201-02-143.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +Si des mises à jour ont été installées, il nous faut redémarrer Odoo.
 +
 +<WRAP box>
 +<file>
 +[root@tchana ~]# systemctl restart odoo12
 +
 +[root@tchana ~]#
 +</file>
 +</WRAP>
 +
 +==== Vérification du site Odoo ====
 +
 +{{Images_icone-201-001_doigt.png?22}} On __vidange l'historique__ de notre navigateur et on s'assure que //java script// et les //témoins// soient activés.\\ 
 +On se connecte à Odoo et on vérifie que tout fonctionne correctement tel qu'avant la mise à jour: [[https://www.odoo.micronator-dev.org|https://www.odoo.micronator-dev.org]].
 +\\ 
 +\\
 +
 +===== Serveur NethServer =====
 +
 +De temps à autre, il faut mettre à jour le Serveur NethServer pour diverses raisons: suite à des mises à jour des logiciels qui composent NethServer, failles de sécurité découvertes par des utilisateurs ou des développeurs, etc.
 +
 +<WRAP column 50%>
 +<nowiki>-</nowiki> **Administration -> Gestionnaire des logiciels ->** onglet **Mises à jour**.\\ 
 +<nowiki>-</nowiki> **TÉLÉCHARGER ET INSTALLER**.
 +|{{ Images_Cahier-201-02-144.png?500 }}|
 +</WRAP>
 +<WRAP column 42%>
 +\\ 
 +À la fin de la mise à jour, **Recharger la page**.
 +|{{ Images_Cahier-201-02-145.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +{{Images_icone-201-003_Note.png?25}} La mise à jour du Serveur NethServer s'occupe aussi de celle de la //Collection PHP//.
 +
 +==== Vérification du site Odoo ====
 +
 +{{Images_icone-201-001_doigt.png?22}} On __vidange l'historique__ de notre navigateur et on s'assure que //java script// et les //témoins// soient activés.\\ 
 +On se connecte à Odoo et on vérifie que tout fonctionne correctement tel qu'avant la mise à jour NethServer: [[https://www.odoo.micronator-dev.org|https://www.odoo.micronator-dev.org]].
 +\\ 
 +
 +===== Instantané VirtualBox =====
 +
 +{{Images_icone-201-002_Lumiere.png?25}} À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.
 +\\ 
 +\\ 
 +
 +====== Appendices ======
 +
 +===== Fuseau horaire =====
 +
 +Pour le fuseau horaire, il existe un fichier pour //Montréal//.
 +
 +<file>
 +[root@tchana ~]# ls -ls /usr/share/zoneinfo/America/ | grep Montreal
 +
 + 4 -rw-r--r--   3 root root 3477  1 avril 08:27 Montreal
 +[root@tchana ~]#
 +</file>
 +
 +==== Changement du fuseau horaire ====
 +
 +On affiche le fuseau horaire actuel.
 +
 +<file>
 +[root@tchana ~]# ls -l /etc/localtime
 +
 +lrwxrwxrwx 1 root root 37 19 mai   23:48 /etc/localtime -> ../usr/share/zoneinfo/America/Toronto
 +[root@tchana ~]#
 +</file>
 +
 +On change le fuseau horaire pour celui de //Montréal//.
 +
 +<file>
 +[root@tchana ~]# timedatectl set-timezone America/Montreal
 +
 +[root@tchana ~]#
 +</file>
 +
 +On vérifie.
 +
 +<file>
 +[root@tchana ~]# ls -l /etc/localtime
 +
 +lrwxrwxrwx 1 root root 38 22 mai   14:02 /etc/localtime -> ../usr/share/zoneinfo/America/Montreal
 +[root@tchana ~]#
 +</file>
 +
 +Voilà! Le fuseau horaire //Montréal// est récupéré...
 +\\ 
 +\\ 
 +
 +===== Certificat Let's Encrypt =====
 +
 +==== Description ====
 +
 +Un certificat émis par l'autorité de certification Let's Encrypt vous permettra de chiffrer les connexions de notre serveur avec une clé TLS/SSL reconnue mondialement. Les utilisateurs pourront utiliser **http<wrap em>s</wrap>**.
 +
 +//Référence:// [[https://fr.wikipedia.org/wiki/Let's_Encrypt|https://fr.wikipedia.org/wiki/Let's_Encrypt]].\\ 
 +Let's Encrypt est une autorité de certification //(CA)// lancée le 3 décembre 2015 //(Bêta Version Publique)//. Cette autorité fournit des certificats gratuits //X.509// pour le protocole cryptographique TLS au moyen d'un mécanisme automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l'installation et le renouvellement des certificats pour la sécurisation des sites Internet.
 +
 +==== Examen du certificat ====
 +
 +Si la demande d'un certificat a fonctionnée sans erreur, essayez de vous connecter à la page de l'interface Web NethServer. Le certificat devrait incorporer tous les noms d'hôtes que vous avez inclus et être valide pour les quatre-vingt-dix prochains jours.
 +
 +{{Images_icone-201-004_Triangle.png?25}} On examine le certificat émis par Let's Encrypt pour un autre de nos serveurs: //dorgee.micronator-101.org// qui est __directement branché à l'Internet__.
 +
 +On se connecte à l'interface Web: [[https://www.micronator-101.org:980|https://www.micronator-101.org:980]].
 +
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Le cadenas est __vert__.\\ 
 +<nowiki>-</nowiki> On se logue.
 +|{{ Images_Cahier-201-02-146.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +<nowiki>-</nowiki> On clique le cadenas.\\ 
 +<nowiki>-</nowiki> On clique l'icône **<wrap em>></wrap>**.
 +|{{ Images_Cahier-201-02-147.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +**Plus d'informations**.
 +|{{ Images_Cahier-201-02-148.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +<WRAP column 30%>
 +\\ 
 +\\ 
 +<nowiki>-</nowiki> Onglet **Sécurité**.\\ 
 +<nowiki>-</nowiki> **Afficher le certificat**.
 +|{{ Images_Cahier-201-02-149.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +<nowiki>-</nowiki> Onglet **Détails**.\\ 
 +<nowiki>-</nowiki> //**Émis pour**// // micronator-101.org//.\\ 
 +<nowiki>-</nowiki> //**Émis par**//  //Let's Encrypt Authority X3//.\\ 
 +<nowiki>-</nowiki> On voit la date de début et de fin.
 +|{{ Images_Cahier-201-02-150.png?400 }}|
 +</WRAP>
 +<WRAP column 30%>
 +\\ 
 +\\
 +<nowiki>-</nowiki> **Validité -> Pas après**.\\ 
 +<nowiki>-</nowiki> Le certificat est valide pour //90 jours//.
 +|{{ Images_Cahier-201-02-151.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +<WRAP column 30%>
 +- **Nom alternatif du sujet du certificat**.\\ 
 +- Tous nos CNAME choisis lors de la demande du certificat sont affichés.\\ 
 +- **Fermer** toutes les fenêtres du certificat.
 +</WRAP>
 +<WRAP column 30%>
 +|{{ Images_Cahier-201-02-152.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +
 +==== Vérification par Qualsys SSLLabs ====
 +
 +Pour un serveur __branché directement à l'Internet seulement__: une fois que vous avez obtenu votre certificat, testez-le en vous rendant chez Qualsys SSLLabs, [[https://www.ssllabs.com/ssltest/|https://www.ssllabs.com/ssltest/]]. Soumettez le nom FQDN de votre domaine pour vérifier que le certificat fonctionne correctement.
 +
 +<WRAP column 46%>
 +\\ 
 +//**Hostname:**//  **-> micronator-101.org -> Submit**.
 +|{{ Images_Cahier-201-02-153.png?400 }}|
 +</WRAP>
 +<WRAP column 46%>
 +<nowiki>-</nowiki> //**Overall Rating**//  **→**  <wrap em>A</wrap>.\\ 
 +<nowiki>-</nowiki> //**Certificate**//  **→**  <wrap em>100%</wrap>.
 +|{{ Images_Cahier-201-02-154.png?400 }}|
 +</WRAP>
 +<WRAP clear></WRAP>
 +\\
 +
 +{{ Images_Cahier-201-02-155.png?500}}
 +==== Serveur de Production ====
 +
 +Une fois que vous maîtrisez tous les aspects de: //Odoo//, //Let's Encrypt//, //Fail2ban// et de //BackupPC//, vous pouvez créer un réseau de Production incluant un serveur Odoo, un serveur de sauvegardes et un serveur de développement; ce qui est le but ultime que nous vous souhaitons.
 +<WRAP clear></WRAP>
 +\\
 +
 +===== Changement du mot de passe de root =====
 +
 +//Référence:// [[https://www.rootusers.com/how-to-reset-root-user-password-in-centos-rhel-7/|https://www.rootusers.com/how-to-reset-root-user-password-in-centos-rhel-7/]].\\ 
 +Réinitialiser le mot de passe de __root__ est normalement une tâche simple si vous êtes déjà connecté avec les privilèges de __root__. Toutefois, si vous oubliez le mot de passe et devez le changer, les choses deviennent un peu plus difficiles.\\
 +Le processus a changé de la version 6 de CentOS/RHEL //(Red Hat Enterprise Linux)// à la version 7. Auparavant, vous démarriez en **mode mono-utilisateur**, puis changiez le mot de passe en tant qu'utilisateur root. À partir de la version 7, les modes équivalents sont: **mode de secours** et **mode d’urgence**. Cependant, ces modes d'opération nécessitent le mot de passe de __root__ avant de pouvoir faire quoi que ce soit. Cette section va vous guider dans le nouveau processus pour changer le mot de passe perdu de __root__. Cette procédure sera exécutée à la console du système Linux, assurez-vous donc que vous y avez accès avant de commencer.
 +
 +{{Images_icone-201-001_doigt.png?22}}  Comme pour toutes les tâches de maintenance du système, assurez-vous de disposer d'une sauvegarde/instantané du système avant de poursuivre.
 +
 +Si votre système Linux est en cours d'exécution, redémarrez-le. S'il ne roule pas, démarrez-le.
 +
 +Pour **CentOS 7**, le menu de démarrage vous laissera 5 secondes pour sélectionner le noyau du système d’exploitation à démarrer. Ces 5 secondes sont importantes, car elles permettent aux administrateurs de sélectionner différents noyaux ou d’éditer les paramètres du noyau existant avant le démarrage.
 +
 +Dans le menu de démarrage, appuyez sur "**e**" pour modifier le noyau existant tel qu'indiqué ci-dessous.
 +
 +{{ Images_Cahier-201-02-378.png?800 }}
 +\\
 +
 +Dans les options de //**grub**//, recherchez la ligne qui commence par ''linux16'' et allez à la fin. Entrez ''rd.break'' à la fin de cette ligne tel qu'indiqué ci-dessous.
 +
 +<file>
 +rd.break
 +</file>
 +
 +{{ Images_Cahier-201-02-379.png?800 }}
 +\\
 +
 +Appuyez sur **[Ctrl]** + **[x]** pour démarrer avec ces options qui vous amèneront à l'invite //**initramfs**// avec un shell root.
 +
 +{{ Images_Cahier-201-02-380.png?800 }}
 +\\
 +
 +À ce stade, le système de fichiers racine est monté en mode lecture seule //(ro)// dans le répertoire ''/sysroot'' et doit être remonté avec les autorisations de lecture/écriture //(rw)// pour que nous puissions réellement apporter certaines modifications. Ceci est réalisé avec la commande ''mount -o  remount,rw  /sysroot''.
 +
 +<file>
 +switch_root:/# mount -o  remount,rw  /sysroot
 +
 +switch_root:/#
 +</file>
 +
 +{{ Images_Cahier-201-02-381.png?800 }}
 +\\
 +
 +Une fois le système de fichiers remonté, changez-le en une //**prison chroot**// afin que le répertoire ''/sysroot'' soit utilisé comme racine du système de fichiers. Ceci est nécessaire pour que toutes les commandes que nous exécuterons se rapportent à ''/sysroot''. La commande à lancer est ''chroot  /sysroot''.
 +
 +<file>
 +switch_root:/# chroot /sysroot
 +
 +sh-4.2#
 +</file>
 +
 +{{ Images_Cahier-201-02-382.png?800 }}
 +\\
 +
 +À partir d'ici, le mot de passe de __root__ peut être réinitialisé à l’aide de la commande ''passwd''.
 +
 +<file>
 +sh-4.2# passwd
 +
 +Changing password for user root.
 +New password: Nouveau-mot-de-passe-de-root
 +Retype new passwd: Nouveau-mot-de-passe-de-root
 +passwd: all authentification tokens updated successfully.
 +sh-4.2#
 +</file> 
 +
 +{{ Images_Cahier-201-02-383.png?800 }}
 +\\
 +
 +Si vous n'utilisiez pas SELinux, vous pourriez redémarrer à ce stade et tout irait bien. Cependant, par défaut, CentOS/RHEL-7 active SELinux. Nous devons donc corriger le contexte du fichier ''/etc/shadow''. En effet, lorsque la commande ''passwd'' est exécutée, elle crée un nouveau fichier ''/etc/shadow''. SELinux n'étant pas en cours d'exécution dans ce mode, le fichier est créé sans aucun contexte SELinux, ce qui peut entraîner des problèmes lors du redémarrage.
 +
 +On crée le fichier ''/.autorelabel'' à l’aide de ''touch''.
 +
 +<file>
 +sh-4.2# touch  /.autorelabel
 +
 +sh-4.2#
 +</file> 
 +
 +{{Images_icone-201-004_Triangle.png?25}}  La création de ce fichier effectuera automatiquement un ré-étiquetage de tous les fichiers au prochain démarrage. Notez que cela peut prendre un certain temps en fonction de la quantité de fichiers que vous avez. Peut prendre environ **2** minutes pour un serveur CentOS-7 ordinaire.
 +
 +On quitte l'environnement "chroot".
 +
 +<file>
 +sh-4.2# exit
 +
 +exit
 +sh-4.2#
 +</file>  
 +
 +On quitte le shell racine ''initramfs'' //(peut prendre un certain temps, être patient...)//. Le serveur s'amorce.
 +
 +<file>
 +sh-4.2# exit
 +
 +logout
 +...
 +</file>
 +
 +==== Vérification ====
 +
 +__À la console du serveur__, vous devriez pouvoir vous connecter et utiliser le système avec le nouveau mot de passe que vous avez créé.
 +\\ 
 +\\ 
 +{{NS-101_002_Banniere_Victoire.png?50}}  Victoire totale, hissons la bannière de la victoire.
 +\\ 
 +
 +----
 +
 +====== Crédits ======
 +
 +© 2015-2018-2019  RF-232\\ 
 +Auteur: Michel-André\\ 
 +Remerciement: Tous les contributeurs GNU/GPL\\ 
 +Intégré par: Michel-André Robillard CLP\\ 
 +Contact: michelandre at micronator.org
 +
 +Répertoire de ce document: <nowiki>E:\000_DocPourRF232_general\RF-232_NethServer-201\RF-232_Cours_NethServer-201-02_Odoo-12_2019-08-13_18h50.odt</nowiki>.
 +
 +Historique des modifications:
 +
 +^Version^Date^Commentaire^Auteur|
 +|RC-1|2015-01-11|Début.|Michel-André|
 +|0.0.1|2015-01-24|Début.|Michel-André|
 +|0.0.2|2015-02-22|Petites modifications.|Michel-André|
 +|0.0.3|2015-03-13|Correction orthographique.|Michel-André|
 +|0.0.4|2015-04-05|Vérification complète. Changement des propriétés du document dans LibreOffice pour ajuster le titre.|Michel-André|
 +|0.1.0|2018-05-28|Mise à jour vers SME-9.2, PostgreSQL-10.4, RH-PHP70, RH-Python36 et Odoo-12.|Michel-André|
 +|0.2.0|2018-07-21|- Forcer le lien pour l'arrêt de PostgreSQL car le lien créé par l'ins­tal­la­tion n'est pas fonctionnel.\\ - Modifications du chapitre Mises à jour pour inclure: Odoo, PostgreSQL, RH-PHP70, RH-Python36 et le Serveur SME.|Michel-André|
 +|0.3.0|2018-08-08|PostgreSQL, RH-Python36, nodejs et corrections pour la MAJ d'Odoo.|Michel-André|
 +|0.3.1|2018-09-03|Correction de quelques coquilles.|Michel-André|
 +|0.4.0|2018-09-16|Mise à jour complète.|Michel-André|
 +|0.5.0|2019-05-09|Adaptation pour NethServer-7.6.1810.|Michel-André|
 +|0.5.1|2019-08-10|Ajustements pour DokuWiki.|Michel-André|
 +|012345678901| | |012345678901|
 +
 +
 +<html><hr style="width:50%; margin: 0 auto;"></html>
 +
 +===== AVIS DE NON-RESPONSABILITÉ =====
 +
 +Ce document est uniquement destiné à informer. Les informations, ainsi que les contenus et fonctionnalités de ce do­cument sont fournis sans engagement et peuvent être modifiés à tout moment. RF‑232 n'offre aucune garantie quant à l'actualité, la conformité, l'exhaustivité, la qualité et la durabilité des informations, contenus et fonctionnalités de ce document. L'accès et l'utilisation de ce document se font sous la seule responsabilité du lecteur ou de l'utilisateur.
 +
 +RF‑232 ne peut être tenu pour responsable de dommages de quelque nature que ce soit, y compris des dommages di­rects ou indirects, ainsi que des dommages consécutifs résultant de l'accès ou de l'utilisation de ce document ou de son contenu.
 +
 +Chaque internaute doit prendre toutes les mesures appropriées //(mettre à jour régulièrement son logiciel antivirus, ne pas ouvrir des documents suspects de source douteuse ou non connue)// de façon à protéger le contenu de son ordina­teur de la contamination d'éventuels virus circulant sur la Toile.
 +
 +Toute reproduction interdite
 +Vous reconnaissez et acceptez que tout le contenu de ce document, incluant mais sans s’y limiter, le texte et les images, sont protégés par le droit d’auteur, les marques de commerce, les marques de service, les brevets, les secrets industriels et les autres droits de propriété intellectuelle. Sauf autorisation expresse de RF-232, vous acceptez de ne pas vendre, délivrer une licence, louer, modifier, distribuer, copier, reproduire, transmettre, afficher publiquement, exécuter en public, publier, adapter, éditer ou créer d’oeuvres dérivées de ce document et de son contenu.
 +
 +==== Avertissement====
 +
 +Bien que nous utilisions ici un vocabulaire issu des techniques informatiques, nous ne prétendons nullement à la précision technique de tous nos propos dans ce domaine.
 +\\
 +\\