Installation

De Wiki de Jordan LE NUFF
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour objet de décrire comment installer la solution Squash.

Préambule

Cette section s'appuie sur la documentation officielle de Squash TM et se fait sur un serveur CentOS 7.

Prérequis

Les prérequis présentés sont ceux recommandés par l'éditeur de la solution :

  • Nombre de CPU
    • 2
  • RAM
    • 2 Go
  • Espace disque
    • 5 Go
  • OS
    • CentOS 7 minimum
  • Java Virtual Machine
    • version 1.8
  • Serveur d'application
    • Aucun, Squash TM embarque son propre serveur d'application : Tomcat
  • Base de données
    • MySQL 5.7.17 minimum
    • Modes NO_ENGINE_SUBSTITUTION et STRICT_TRANS_TABLES activés
  • ulimit
    • Nombre maximum de descripteurs de fichiers ouverts défini à 60000

Installation d'Apache

Installation des paquets nécessaires à la compilation d'Apache :

mkdir /local/builds
yum install gcc glibc-devel glibc-headers kernel-headers libmpc mpfr           
yum install pcre-devel
yum install expat-devel
yum install systemd-devel

Création d'un user/groupe www pour tout ce qui est outil web :

groupadd www
mkdir -p /data/www
chown :www /data/www

Création de l'arborescence d'Apache :

mkdir -p /local/httpd/httpd-2.4.43
ln -s httpd-2.4.43 /local/httpd/current

Récupération des sources Apache et décompression de l'archive :

wget https://downloads.apache.org//httpd/httpd-2.4.43.tar.gz
tar -zxf httpd-2.4.43.tar.gz -C /local/builds

Récupération des sources APR et APR-Utils nécessaires à Apache et décompression des archives :

wget http://mirrors.standaloneinstaller.com/apache//apr/apr-1.7.0.tar.gz
tar -zxf apr-1.7.0.tar.gz
mv apr-1.7.0 /local/builds/httpd-2.4.43/srclib/apr
wget http://mirrors.standaloneinstaller.com/apache//apr/apr-util-1.6.1.tar.gz
tar -zxf apr-util-1.6.1.tar.gz
mv apr-util-1.6.1 /local/builds/httpd-2.4.43/srclib/apr-util

Positionnement dans le dossier de build et lancement de la compilation :

cd /local/builds/httpd-2.4.43
./configure \
--prefix=/local/httpd/current \
--sysconfdir=/local/httpd/conf \
--enable-proxy \
--enable-proxy-http \
--enable-proxy-wstunnel \
--enable-proxy-fcgi \
--enable-rewrite \
--enable-authz-host \
--enable-mime \
--enable-static-support \
--enable-remoteip \
--enable-status \
--enable-systemd \
--enable-mods-static="proxy rewrite authz-core authz-host log-config alias dir unixd mime remoteip status systemd" \
--disable-so \
--disable-proxy-connect \
--disable-proxy-ftp \
--disable-proxy-scgi \
--disable-proxy-uwsgi \
--disable-proxy-fdpass \
--disable-proxy-ajp \
--disable-proxy-balancer \
--disable-proxy-express \
--disable-proxy-hcheck \
--disable-access-compat \
--disable-auth \
--disable-auth-basic \
--disable-authn-core \
--disable-authn-file \
--disable-authz-groupfile \
--disable-authz-user \
--disable-autoindex \
--disable-env \
--disable-filter \
--disable-reqtimeout \
--disable-setenvif \
--disable-version \
--disable-authn-dbm \
--disable-authn-anon \
--disable-authn-dbd \
--disable-authn-socache \
--disable-authz-dbm \
--disable-authz-owner \
--disable-authz-dbd \
--disable-auth-form \
--disable-auth-digest \
--disable-allowmethods \
--disable-cache \
--disable-file-cache \
--disable-headers \
--disable-cache-disk \
--disable-cache-socache \
--disable-socache-dbm \
--disable-socache-memcache \
--disable-socache-redis \
--disable-socache-shmcb

Compilation et installation :

make -j2
make install

Création de l'utilisateur et groupe Apache et ajout dans le groupe www :

useradd -r apache
usermod -aG www apache

Correction et affectation des droits à Apache :

chown -R root:apache /local/httpd

Ajout des binaires Apache dans le PATH du serveur :

echo "export PATH=\$PATH:/local/httpd/current/bin" >> /etc/profile.d/sh.local

Création du service http.service :

vi /usr/lib/systemd/system/http.service

Le contenu du fichier /usr/lib/systemd/system/http.service doit être le suivant :

[Unit]
Description=The Apache HTTP Server
After=network.target

[Service]
Type=notify
ExecStart=/local/httpd/current/bin/httpd -D FOREGROUND -k start
ExecReload=/local/httpd/current/bin/httpd -k graceful
KillMode=mixed
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target

Prise en compte du nouveau service :

systemctl daemon-reload

Activation du service au démarrage du serveur :

systemctl enable http

Démarrage du service :

systemctl start http

Ajout du port 80 dans le pare-feu (service http de firewalld) :

firewall-cmd --add-service=http
firewall-cmd --add-service=http --permanent

Création des dossiers et fichiers de logs et affectation des droits d'accès :

mkdir -p /data/logs/{localhost,mygreatserver}
chmod o+rx /data
touch /data/logs/localhost/localhost_http_{error,access}.log
touch /data/logs/mygreatserver/mygreatserver_http_{error,access}.log

Création du dossier hébergeant la configuration des vhosts à venir :

mkdir /local/httpd/conf/vhosts

Edition de la configuration Apache de base dans le fichier /local/httpd/conf/httpd.conf :

User apache
Group apache
ServerName localhost:80
<Directory "/local/httpd/current/htdocs">
...
    Require all denied
</Directory>
ErrorLog "|/local/httpd/current/bin/rotatelogs -t -l -n 15 /data/logs/localhost/localhost_http_error.log 10M"
    CustomLog "|/local/httpd/current/bin/rotatelogs -t -l -n 15 /data/logs/localhost/localhost_http_access.log 10M" combined
<Directory "/local/httpd/current/cgi-bin">
...
    Require all denied
Include /local/httpd/conf/extra/httpd-mpm.conf

Ajout d'options supplémentaires dans le fichier /local/httpd/conf/httpd.conf :

###################################
## Ajout d'options personnalisée ##
###################################

# Ajout du reverse Proxy
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 192.168.0.254

# Ajout du dossier vhosts
IncludeOptional /local/httpd/conf/vhosts/*.conf

# Activation d'informations supplémentaires pour "server-status"
ExtendedStatus On

Installation de MySQL

Récupération du lien de téléchargement du repository MySQL sur le site https://www.mysql.com/downloads/ :

wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

Récupération du contenu de la clé GPG publique de MySQL sur https://dev.mysql.com/doc/refman/8.0/en/checking-gpg-signature.html et copie de cette dernière dans un fichier mysql_pubkey.asc.

Import de la clé GPG publique de MySQL:

gpg --import mysql_pubkey.asc

Import de la clé GPG publique de MySQL dans RPM :

rpm --import mysql_pubkey.asc

Vérification de la signature du paquet téléchargé :

rpm --checksig mysql80-community-release-el7-3.noarch.rpm

Installation des repos MySQL :

rpm -i mysql80-community-release-el7-3.noarch.rpm

Lister les repositories MySQl :

yum repolist all | grep mysql

Lister les repositories MySQL activés :

yum repolist enabled | grep "mysql.*-community.*"

Désactiver le repository MySQL 8.0 :

yum-config-manager --disable mysql80-community

Activer le repository MySQL 5.7 :

yum-config-manager --enable mysql57-community

Installer le serveur MySQL :

yum install mysql-community-server

Activer l'activation du service MySQL au démarrage du serveur :

systemctl enable mysqld

Lancer une première fois le service MySQL :

systemctl start mysqld

Cela permet de générer un mot de passe pour l'utilisateur root.

Arrêter le service MySQL et ajouter les options validate_password_policy et validate_password_length pour baisser le niveau d'exigence du mot de passe :

systemctl stop mysqld
echo "bind-address=0.0.0.0" >> /etc/my.cnf
echo "validate_password_policy=LOW" >> /etc/my.cnf
echo "validate_password_length=6" >> /etc/my.cnf

Lancer à nouveau le service MySQL :

systemctl start mysqld

Lancement de la commande suivante pour récupérer le mot de passe temporaire :

grep 'temporary password' /var/log/mysqld.log

Se connecter à MySQL en tant que root avec le mot de passe précédemment récupéré et le changer :

mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '*******';

Ajout d'un utilisateur root capable de se connecter depuis la machine mysecondgreatserver pour PhpMyAdmin :

CREATE USER 'root'@'mysecondgreatserver.mydomain.local' IDENTIFIED WITH mysql_native_password BY '*******';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'mysecondgreatserver.mydomain.local' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Ajout de l'autorisation dans le pare-feu :

firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent

MySQL est installé.

Prérequis MySQL

Par défaut, sur la version 5.7.31 de MySQL :

  • le moteur de stockage est InnoDB
  • le mode SQL comprend les options NO_ENGINE_SUBSTITUTION et STRICT_TRANS_TABLES

Par conséquent, les prérequis Squash TM sont respectés.

Toutefois, il ne faut pas que l'option ONLY_FULL_GROUP_BY soit présente sinon une erreur de ce genre surviendra lors de l'import des données dans la base de données :

ERROR 1055 (42000) at line 4430: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'squashtm_db.TCLN_RELATIONSHIP_CLOSURE.DEPTH' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Redéfinition de la variable sql_mode avec :

echo "sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" >> /etc/my.cnf

Redémarrage de MySQL pour prise en compte

systemctl restart mysqld

Configuration MySQL

Se connecter en tant que root à MySQL :

mysql -uroot -p

Créer la base de données squashtm_db pour Squash TM :

CREATE DATABASE IF NOT EXISTS squashtm_db CHARACTER SET utf8 COLLATE utf8_bin;

Créer l'utilisateur squashtm_user pour Squash TM ainsi que son mot de passe :

CREATE USER 'squashtm_user'@'localhost' IDENTIFIED BY '********';

Donner les droits à l'utilisateur squashtm_user sur la base de données squashtm_db :

GRANT ALL ON squashtm_db.* TO 'squashtm_user'@'localhost';
FLUSH PRIVILEGES;

Installation de Java

Lancer la commande :

yum install java-11-openjdk

Retour de la commande :

Putty icon.png Console SSH

Configuration vhost Apache

Pour une utilisation plus conviviale et sur un port standard, il faut configurer un vhost Apache qui redirigera les requêtes vers Squash TM en interne.

Création du dossier et des fichiers de log :

mkdir /data/logs/squashtm.mydomain.com
touch mkdir /data/logs/squashtm.mydomain.com/squashtm.mydomain.com_http_{access,error}.log
chown -R apache:www /data/logs/squashtm.mydomain.com

Edition du fichier /local/httpd/conf/vhosts/squashtm.mydomain.com.conf et insertion du contenu suivant :

Define app_name squashtm.mydomain.com
# Instance de production
<VirtualHost *:80>
	Define url_app ${app_name}
	ServerName ${url_app}
	ErrorLog "|/local/httpd/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
	CustomLog "|/local/httpd/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
	LogLevel warn

	ProxyPreserveHost On
	ProxyPass / http://localhost:8080/
	ProxyPassReverse / http://localhost:8080/
	
	UnDefine url_app
</VirtualHost>
UnDefine app_name

Relance d'Apache pour prise en compte :

systemctl restart http

Installation de Squash TM

Ajout du repository Squash TM en éditant le fichier /etc/yum.repos.d/squashtest.repo :

vi /etc/yum.repos.d/squashtest.repo

Son contenu doit être le suivant :

[squashtest]
name=Squashtest
baseurl=http://repo.squashtest.org/redhat/7/
gpgcheck=1

Importer la clé GPG du repo nouvellement ajouté :

rpm --import http://repo.squashtest.org/repo.squashtest.org.gpg.key

Installer le paquet squash-tm :

yum install squash-tm

Création des tables de Squash TM dans la base de données précédemment créée à cet effet :

mysql -usquashtm_user -p squashtm_db < /usr/share/doc/squash-tm/database-scripts/mysql-full-install-version-1.21.1.RELEASE.sql

Edition du fichier /etc/sysconfig/squash-tm pour y renseigner les informations de base de données :

vi /etc/sysconfig/squash-tm

Ainsi, le fichier ressemble à ceci :

# Default settings for Squash. This file is sourced by /bin/bash.

# Extra arguments passed to JVM
JAVA_ARGS="-Xms128m -Xmx1024m -XX:MaxPermSize=256m -Djava.awt.headless=true"

# Port for HTTP connector
HTTP_PORT=8080

# DataBase parameters
DB_URL="jdbc:mysql://localhost:3306/squashtm_db"
DB_TYPE="mysql"
DB_USERNAME="squashtm_user"
DB_PASSWORD="*********"

Edition du fichier /etc/squash-tm/squash.tm.cfg.properties pour y ajouter la variable server.servlet.context-path qui permet de définir le nom du sous-dossier dans lequel sera publié Squash TM (en l'occurence, il s'agit ici de ne pas avoir /squash à la fin de l'URL) :

vi /etc/squash-tm/squash.tm.cfg.properties

Ainsi, le fichier ressemble à ceci :

28 ...
29 # EMBEDDED SERVER CONFIGURATION
30 ###############################
31 
32 #server.servlet.session.timeout=3600
33 #server.tomcat.accesslog.enabled=true
34 #server.tomcat.basedir=${squash.path.root}/tomcat-work
35 
36 # Custom additionnal param in order to modify/remove the trailing "/squash" in URL
37 ###############################
38 server.servlet.context-path=
39 
40 # SECURITY
41 ###############################
42 ...

Connexion à la base de données et modification de l'URL d'accès directement en table :

mysql -usquashtm_user -p
INSERT INTO squashtm_db.CORE_CONFIG (STR_KEY, VALUE) VALUES ('squashtest.tm.callbackurl', 'http://squashtm.mydomain.com');

Lancement de Squash TM :

systemctl start squash-tm.service

Se rendre sur l'URL http://squashtm.mydomain.com :

Squash TM - Page de connexion

Depuis la page d'accueil, aller sur Mon compte (admin) pour modifier le mot de passe :

Squash TM - Accueil

Cliquer sur Mot de passe local :

Squash TM - Mon compte

Modifier le mot de passe :

Squash TM - Mot de passe

Mot de passe modifié avec succès :

Squash TM - Mot de passe modifié

Squash TM est installé et prêt à être utilisé.