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

 # vim /var/www/html/pmb/php-info.php

Recopier les lignes :

<?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)

Installer pmb

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

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

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

 # chown -R www-data:www-data /var/www/html/pmb
 # chmod -R 770 /var/www/html/pmb

Supprimer le fichier zip :

 # 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)

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

Sur le serveur pmb :

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

On peut effacer le fichier :

 # 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)

Se connecter à pmb

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...

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 : 
 # Trier la feuille qui contient les mdp
 # 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

 # 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