Installer un serveur linux

De Documentation
Aller à la navigationAller à la recherche

Notes pour l'installation d'un serveur linux dédié à pmb

Installation du serveur

Notes obsolètes

 * La version de pmb compatible avec php7 est annoncée début 2018. 
 * Une version "niglybuild" est disponible sur leur forge. En attendant une version officielle, j'ai installé pmb5 sur un serveur Ubuntu17 avec apache2, MariaDB10 et php5.6 /Fail2ban et UrBackup. Pour permettre aux élèves d'accéder à l'opac, j'ai importé leurs identifiants et mdp par csv. 
 https://linuxhint.com/install-php5-ubuntu/
 Télécharger ubuntu serveur i386
 http://old-releases.ubuntu.com/releases/17.10/ubuntu-17.10-server-i386.iso

On reprend ici

Préparer une clé d'installation : https://sourceforge.net/projects/win32diskimager/

Démarrer sur la clé usb

Ne pas indiquer de proxy, le faire à la main par la suite si nécessaire
(pour apt, éditer ou créer le fichier /etc/apt/apt.conf -> Acquire::http::proxy "http://adresse:port/";)

Notes ligne de commande

Pour passer en root :

 # sudo -i

Vérifier la présence d'un paquet :

 # dpkg -l |grep nomDuPaquet (ii si installé)

Suite de l'installation du serveur

Installations supplémentaires

Configuration du clavier (si nécessaire)
 # loadkeys fr
 # dpkg-reconfigure keyboard-configuration
vim
 # apt-get install vim

Fichier de config : /etc/vim/vimrc

Outils réseau

(si absents lors de l'instal du serveur :)

 # apt-get install net-tools
Configurer la carte réseau

(ou laisser en dhcp et fixer l'adresse à partir du routeur)

 # vim /etc/network/interfaces

terminer par les serveurs de dns (si nécessaire) : dns-nameserver 8.8.8.8 8.8.4.4

 # service networking restart
Serveur ssh
 # apt-install openssh-server

Configuration : /etc/ssh/sshd_config
Renseigner le port d'écoute
Configurer le routeur (NAT)
Se connecter à une machine distante et tester l'accès par ssh :

 # ssh (utilisateur)@(adresse_ip) -p (numport)
Serveur ftp
 # apt-get install vsftpd

Configuration : /etc/vsftpd.conf

 anonymous_enable=NO
 write_enable=YES
 # /etc/init.d/vsftp restart

Installation de LAMP

apache - Php - MariaDB

installation mariadb

 # apt-get install mariadb-server mariadb-client

Pour les versions obsolètes de php

Ajout du dépôt

 # apt install software-properties-common
 # add-apt-repository ppa:ondrej/php
 # apt-get update

support php5.6 (mbstring pour phpmyadmin, xsl pour pmb) :

 # apt-get install php5.6 php5.6-mysql php5.6-mbstring php5.6-xsl

Définir le mot de passe root

 # service mysql start

A ce stade, on peut entrer en tapant #mysql

 # mysql_secure_installation 

permet aussi de redéfinir le mot de passe root en cas d'oubli

 # service apache2 start

A ce stade, la page d'info Apache est visible dans le navigateur

Paramétrer mysqldump

 # vim  /etc/mysql/conf.d/mysqldump.cnf

Modifier la ligne :

 max_allowed_packet = 256M

Installation de phpMyAdmin

 # apt-get install phpmyadmin

Rendre phpmyadmin accessible

Dans /etc/apache2/apache2.conf, ajouter à la fin : Include /etc/phpmyadmin/apache.conf

 # echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf
 # service apache2 restart

Ajout d'un utilisateur mysql

(remplacer login_util et pass_util par des valeurs au choix)
 # mysql
 CREATE USER 'login_util'@'%' IDENTIFIED BY 'pass_util';
 GRANT ALL PRIVILEGES ON *.* TO 'login_util'@'%' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

(Ctrl-d pour sortir)

A ce stade, il doit être possible de se connecter à phpmyadmin

Installation de pmb

Voir : https://doc.ubuntu-fr.org/pmb

Installation de yaz (recherche externe des notices)

 # apt-get install yaz
 # apt-get install libyaz5-dev php5.6-dev
 # pecl install yaz

Activer l'extension yaz

 # vim /etc/php/5.6/apache2/php.ini

Sous [PHP], ajouter

 extension=yaz.so

Enregistrer, puis :

 # service apache2 reload

Créer un fichier php pour l'affichage des infos

  1. vim /var/www/html/pmb/php-info.php
<?php 
     phpinfo(); 
?>

ou

 # echo "<?php phpinfo(); ?>" >> /var/www/html/phpinfo.php

Vérifier l'activation des extensions dans un navigateur : http://(adresse serveur)/pmb/phpinfo.php

Installer et les extensions nécessaires au fonctionnement de pmb

  1. apt-get install zip (pour décompresser les fichiers)

Copie de la dernière version de pmb dans le dossier /tmp/ Décompression de l'archive dans /var/www/html :

  1. unzip /tmp/pmb5.0.3.zip -d /var/www/html/

Modifier le propriétaire et le groupe, changer les droits :

  1. chown -R www-data:www-data /var/www/html/pmb
  2. chmod -R 770 /var/www/html/pmb

Supprimer le fichier zip :

  1. rm /tmp/pmb5.0.3.zip

Configurer le routeur pour l'accès extérieur (NAT port 80)

Suivre la procédure d'installation de pmb (http://adresse_serveur/pmb/tables/install.php)

          • facultatif : pour migrer à partir de l'amonecole

importer les données :

Sur l'amonecole : (si necessaire, redéfinir le mdp root : # mysql_pwd.py)

  1. ssh bdd
  2. mysqldump -u root -p -single-transaction pmb > /tmp/dump_pmb.sql
  3. Ctrl-d (sortie du conteneur)
  4. mv /opt/lxc/bdd/rootfs/tmp/dump_pmb.sql /tmp/

Sur le serveur pmb :

  1. scp root@adresse_amonecole:/tmp/dump_pmb.sql /tmp/
  2. mysql -u (utilisateurRootMysql) -p pmb < /tmp/dump_pmb.sql

On peut effacer le fichier :

  1. rm /tmp/dump_pmb.sql

Si nouvelle instal, renseigner les fichiers /includes/db_param.inc.php et /opac_css/opac_db_param.inc.php (voir readme_first.txt et readme.txt)

Pas d'affichage des vignettes : vérifier la présence de la biliothèque gd (php(version)-gd)

          • fin migration

première connection : admin/admin Faire les différentes mises à jour successives (ne met que la base à jour)

Si l'affichage dans l'onglet "Circulation" reste vierge : Administration Outils > paramètres > ldap > accessible : non (0)

Changer le mot de passe admin Tester le fonctionnement en lançant une recherche...

                                                                                          • fin pmb

Solution réseau retenue : Serveur pmb parallèle au serveur amonecole, ip par dhcp fixée par le routeur NAT ports classiques vers le serveur pmb, 500xx vers l'amonecole

                                      • Importation des lecteurs

Accès LDAP : aucune des solutions testées n'a abouti -> import des lecteurs par csv :

Création d'une feuille OOCalc : num/nom/pnom/sexe/anaiss/classe/login Copie des données à partir des fichiers d'importation annuelle de l'amonecole

Formules utiles :

  • Pour les mots de passe :

1. Trier la feuille qui contient les mdp 2. première cellule : =RECHERCHEV(G2;Sheet1.D$2:E$171;2;0) où G2 contient le login à rechercher Sheet1 : feuille contenant login et mdp D$2:E$71 : matrice login/mdp de la feuille dans laquelle s'effectue la recherche 2 : nḞ de la colonne qui contient la valeur de retour (1Ḟ colonne de la matrice=1) 0 : la matrice est déjà triée 3. Recopier vers le bas

  • Extraction de l'année à partir de la date :

= ANNEE()

  • Remplacer sexe : M->1, F ->2

Si(...)

Export de la feuille au format csv (Editer les paramètres du filtre) : SANS EN-TÊTE DE COLONNE - UTF-8 - Séparateur = ; - Séparateur de texte : aucun (effacer ")

Dans l'interface d'administration de pmb : administration > lecteurs > import Renseigner les numéros de colonnes pour avoir un affichage correct Terminer la procédure d'importation

A ce stade, les mots de passe ne fonctionnent pas (!) ils apparaissent en clair dans phpmyadmin : Vérifier url_base dans : administration > paramètres > paramètres généraux > url_base

Encoder les mots de passe : administration > outils > nettoyage de base : Encoder les mots de passe lecteurs... (celle-là, il fallait la trouver !)

Tester l'accès à l'OPAC pour un utilisateur enregistré.

                                                                            • fin importation des lecteurs

Sécurisation du serveur : Ne pas autoriser l'accès en ssh ou ftp à root ou admin

Installation fail2ban (exclusion d'adresses)

doc à : https://wiki.debian-fr.xyz/Fail2ban#fail2ban.conf

  1. apt-get install fail2ban

Configurer pour filtrer ftp (ssh configuré par défaut) : voir doc Dans /etc/fail2ban/jail.conf > bantime = 604800 (1 semaine)

                                        • fin fail2ban

installation de certbot pour les certificats let's encrypt (accès HTTPS)

Voir : https://certbot.eff.org/lets-encrypt/ubuntufocal-apache

                                        • fin certbot

Automatiser la sauvegardes des bases de données

en root Créer le dossier /root/scripts

  1. mkdir /root/scripts

copier le script dans /root/scripts/sav_bdd.sh (sauvegarde toutes les bdd hors celles listées dans databases_exclude list) :

  1. !/bin/bash
  2. Script de sauvegarde des bases de données mysql/mariadb
  3. Les valeurs à paramétrer sont en fin de script dans la fonction main()

get_databases_to_backup() {

   mysql_command=$(command -v mysql)
   databases_list=$($mysql_command --defaults-file=/etc/mysql/debian.cnf -Bse 'show databases')
   for exclude in $databases_exclude_list
   do
      databases_list=${databases_list//$exclude/}
   done
  1. databases_list="pmb_bosquets"

} dump_databases() {

   ext=".sql.gz"
   mysqldump_command=$(command -v mysqldump)
   compress_command=$(command -v gzip)
   current_date=$(date +%F_%Hh%M)
   cd "${backup_folder}" || exit
   for database in $databases_list
   do
       $mysqldump_command --defaults-file=/etc/mysql/debian.cnf "$database" | ${compress_command}  > ${database}"_"${current_date}${ext}
       echo "Sauvegarde de la base (ou des bases) : ${database}…"
   done
   echo "$(date +%c): Sauvegarde complete effectuée !"

} delete_old_backups() {

   find_command=$(command -v find)
   cd "${backup_folder}" || exit
   $find_command ./ -mtime +"${delete_backups_older_than_days}" -type f -exec rm -v {}  \;

}

main() {

   # toujours exclure information_schema performance_schema de la sauvegarde sinon le script générera des erreurs
   databases_exclude_list="mysql phpmyadmin information_schema performance_schema"
   # choix du dossier de destination des sauvegardes à ajuster à vos besoins
   backup_folder="/media/sf_PartageVM/sav_pmb"
   if [ ! -d "$backup_folder" ] ; then
       mkdir -p "$backup_folder"
   fi
   get_databases_to_backup
   dump_databases
   # nombre de jours pendant lesquels il faut conserver les sauvegardes, -1 si illimité
   delete_backups_older_than_days=30
   if [ $delete_backups_older_than_days != "-1" ] ; then
       delete_old_backups
   fi

}

main

Rendre le fichier lisible/modifiable/executable pour root uniquement :

  1. chmod 700 /root/scripts/sav_bdd.sh

Automatiser l'execution tous les mercredis et dimanches à 3h00 du matin : Ecditer crontab :

  1. crontab -e

ajouter la ligne : (lance le script et envoie la sortie dans sav.log : créer le ficier et adapter le chemin) 0 3 * * wed,sun /root/scripts/sav_bdd.sh >> /media/sf_PartageVM/sav_pmb/log/sav.log

enregistrer et relancer le service :

  1. systemctl restart cron

Pour lister les tâches :

  1. crontab -l

Pour tester le fonctionnement, on pet ajouter une ligne pour exécuter la tâche dans les minutes qui suivent. La supprimer par la suite.

                                        • fin sauvegardes

Mies à jour de sécurités automatique

voir : https://geekeries.org/2016/04/mises-a-jour-automatiques-de-debian/?cn-reloaded=1 et surtout : https://wiki.deimos.fr/Cron-apt_:_Installation_des_mises_%C3%A0_jour_de_s%C3%A9curit%C3%A9_automatique.html

Installer cron-apt

Créer le fichier /etc/cron-apt/action.d/5-security et y coller le contenu upgrade -y -o APT::Get::Show-Upgraded=true

  1. Ajouter l'option "-d" pour télécharger uniquement - utilse pour les tests

éditer /etc/apt/sources.list

Copier les lignes contenant 'security' deb http://fr.archive.ubuntu.com/ubuntu focal-security main restricted

  1. deb-src http://fr.archive.ubuntu.com/ubuntu focal-security main restricted

deb http://fr.archive.ubuntu.com/ubuntu focal-security universe

  1. deb-src http://fr.archive.ubuntu.com/ubuntu focal-security universe

deb http://fr.archive.ubuntu.com/ubuntu focal-security multiverse

  1. deb-src http://fr.archive.ubuntu.com/ubuntu focal-security multiverse

et les placer dans un nouveau fichier /etc/apt/sources.list.d/security.list. (On peut les commenter dans le fichier d'origine pour éviter les redondances)

Automatiser la mise à jour -> créer le fichier /etc/cron-apt/config.d/5-security et y coller le contenu OPTIONS="-o quiet=1 -o APT::Get::List-Cleanup=false -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts=\"/dev/null\""

Vérifier le fonctionnement : - Forcer l'exécution : # cron-apt - vérifier : # cat /var/log/cron-apt/log - à comparer avec : # #apt list upgradable

Automatiser les mises à jour : Editer le fichier /etc/cron.d/cron-apt et vérifier la présence des lignes

  1. Every night at 4 o'clock.

0 4 * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt (ou les modifier pour changer les paramètres)

                                        • fin Mises à jour de sécurité automatiques

Installation d'urbackup (sauvegarde automatique de type client-serveur : ici on installe les 2 sur la même machine physique)

doc à : https://www.urbackup.org/index.html Préparer le chemin de sauvegarde :

  1. mkdir /var/sauvegarde (ou /mnt/sauvegarde, ou autre...)

Peut servir de point de montage pour un HD externe...

ajout du dépôt et de la clé :

  1. echo 'deb http://download.opensuse.org/repositories/home:/uroni/Debian_9.0/ /' > /etc/apt/sources.list.d/urbackup-server.list
  2. wget -nv https://download.opensuse.org/repositories/home:uroni/Debian_9.0/Release.key -O Release.key
  3. apt-key add - < Release.key
      • Installation de la partie serveur :
  1. apt-get update
  2. apt-get install urbackup-server

Le serveur est accessible à l'adresse : http://(adresse du serveur):55414

Réglages > Utilisateur Ajouter un utilisateur administrateur pour limiter les accès

      • Installation de la partie client :
  1. TF=`mktemp` && wget "https://hndl.urbackup.org/Client/2.1.17/UrBackup%20Client%20Linux%202.1.17.sh" -O $TF && sh $TF; rm $TF

(snapshot mechanism = pas LVM ici)

Le client est visible immédiatement dans la console de gestion. (Etats : rafraîchir l'affichage)

      • Configuration de la sauvegarde de la base de données :

Dans /usr/local/etc/urbackup/mariadbdump.conf, mettre MARIA_DUMP_ENABLED=1

      • Modification du script pour ne sauver que la base pmb (vérifier la pérénité lors d'une mise à jour...) :

dans /usr/local/share/urbackup/scripts/mariadbdump : changer --all-databses -> pmb (ou nom de la base de données)

      • Configuration retenue (enregistrer avant de changer d'onglet) :

Régalges > Général

  • Serveur

Désactiver la sauvegarde d'image disque coché Le reste par défaut

  • Sauvegarde de fichiers (à adapter à l'usage) :

Intervalle pour la sauvegarde incrémentale de fichers : 72 ...complète : 30 Nbre max de sauvegardes de fichiers incrémentielles : 30 Nbre min... 10 Nbre max de sauvegarde de fichers complètes : 3 Nmbre min... 2 Répertoires par défaut à sauvegarder : /var/www/html/pmb/opac_css Seule l'appli pmb nous intéresse ici

Sauvegarde de Volume : Intervalle pour les images système Désactiver Intervalle pour la sauvegarde image complète Désactiver

Droits : par défaut Client : Intervalle de sauvegarde : -> plus de détails ...incrémentielles de fichiers : 1-7/3-4 (tous les jours de 3h à 4h) ...complètes de fichiers : 6-7/3-4 (sa-di, de 3h à 4h)

Le reste par défaut

Réglages > Email (paramétrage à revoir)

                                                                            • fin configuration retenue

Lancer une sauvegarde complète

Etats > Menu déroulant sous le client -> Sauvegarde complète Suivre la progression dans Activités Vérifier la sauvegarde dans /var/sauvegarde Suivre la progression : journaux (ouvre un nouvel onglet) : Warning : Missing checksum for script ouput for command "mariadbdump.sql" -> normal, le script a été modifié... 203Mo en 3 min Pour naviguer dans la sauvegarde / télécharger : Menu Sauvegardes