SPARQL Protocol and RDF Query Language/Travail pratique/Installer Linux
Introduction
[modifier | modifier le wikicode]Pourquoi Linux ?
[modifier | modifier le wikicode]La grande majorité des triplestores utilisent les librairies de Redland (librdf.org). Ces librairies ne sont maintenues que sous Linux. C'est la raison pour laquelle tous les serveurs SPARQL performants ne fonctionnent que sous Linux.
Pourquoi utiliser Docker ?
[modifier | modifier le wikicode]J’ai entendu à plusieurs reprises des étudiants ne désirant pas modifier la configuration de leur ordinateur. De nos jours, les installations Linux cohabitent parfaitement avec un système Windows et donc avec leurs jeux préférés ;)
Docker est une plate-forme ouverte pour développer, partager et exécuter des applications en dissociant les applications du système qu'il l’exécute. Docker permet également de tester des systèmes d'exploitation et se rapproche ainsi de solution comme OpenStack. Docker permet de tester des scripts d'installation comme si on les utilisait sur un serveur en situation réel.
Nous utiliserons Docker afin de simuler l’installation réelle de services SPARQL sur un serveur CentOS via un accès SSH. Il est indispensable qu'au moins une fois, un développeur soit confronté à l'installation d'un logiciel via SSH.
Installation d'une instance CentOS via Docker
[modifier | modifier le wikicode]Si vous ne savez pas ce qu'est Docker, je vous conseille d'aller lire quelques introductions à Docker sur le Web avant de poursuivre.
Installation de Docker Community Edition (CE)
[modifier | modifier le wikicode]Choisissez la plateforme que vous utilisez puis il suffit de suivre les instructions[1]. Si vous utilisez déjà Linux, il faut préférer l'installation via un package (en fonction de votre distribution Linux via yum, dnf, apt-get, etc.)
Ensuite pour vérifier votre installation, vous utiliserez ces commandes :
## List Docker CLI commands
docker
docker container --help
## Display Docker version and info
docker --version
docker version
docker info
## Execute Docker image
docker run hello-world
## List Docker images
docker image ls
## List Docker containers (running, all, all in quiet mode)
docker container ls
docker container ls --all
docker container ls -aq
Créer le projet Docker pour CentOS
[modifier | modifier le wikicode]Les images des conteneurs peuvent être téléchargées et partagées sur https://hub.docker.com/explore/, ou générées à partir d'un fichier nommé Dokerfile par défaut (sinon il faudra préciser son nom dans les commandes avec l'argument "-f").
Nous allons durant les TP travailler sur une instance de CentOS7 dans un conteneur Docker en passant par un service SSH comme si c'était un vrai serveur. Cependant, il faut comprendre que Docker n'est pas un outil de mise en production. Il sert à tester des logiciels ou à les développer comme nous allons le faire.
Le fichier Dokerfile qui permettra de construire l'image de notre serveur CentOS 7.
Si vous avez Git, vous pouvez utiliser Git pour télécharger le projet directement :
git clone https://github.com/BorderCloud/CentOS7-SSHD-Docker.git
Sinon créer le fichier Dokerfile en y insérant le texte suivant :
FROM centos/systemd
#update the server
RUN yum -y update; yum clean all;
#INSTALL SSHD
RUN yum -y install openssh-server passwd sudo vim wget curl; yum clean all
EXPOSE 22
# Init the root's password : centos
# Create a sudo user : centos with password centos
RUN echo -e "centos\ncentos" | passwd ; \
useradd centos ; \
SSH_USERPASS=centos ;\
echo -e "centos\ncentos" | (passwd --stdin centos) ; \
usermod -aG wheel centos
# HERE INSERT OTHER SCRIPTS
CMD ["/usr/sbin/init"]
Construire l’image Docker pour CentOS
[modifier | modifier le wikicode]Dans le répertoire où se trouve votre fichier Dockerfile, exécuter cette commande pour construire l'image Docker :
docker build -t centos7 .
Construire le conteneur et démarrer CentOS
[modifier | modifier le wikicode]CentOS a besoin quelque fois de certains droits d'accès (avec systemctl par exemple) et l'option "privileged" devient nécessaire. La ligne de commande a relancer à chaque changement de script est la suivante :
docker run --privileged --name instance.centos7 -h centos7 -d centos7
Si vous voulez supprimer le conteneur pour la reconstruire.
docker stop instance.centos7
docker rm instance.centos7
# docker start instance.centos7
Accéder votre instance CentOS en mode root
[modifier | modifier le wikicode]Classiquement pour ouvrir un shell en mode root, vous n’avez pas besoin de passer par ssh. Via cette commande :
docker exec -it instance.centos7 bash
Cependant, le service SSH dans votre container va nous permettre d'apprendre à configurer votre PC pour accéder aux services que vous allez installer durant le TP.
Accéder via SSH à votre instance CentOS
[modifier | modifier le wikicode]En fonction de votre installation, l'accès aux conteneurs est différent. Via les installateurs Windows et Mac de Docker CE, il faut créer des passerelles entre les ports du conteneurs et ceux de votre système. Sous Linux, on peut accéder aux conteneurs directement via des adresses réseaux locales.
Mot de passe
[modifier | modifier le wikicode]Le mot de passe est "centos" pour l'utilisateur centos et root.
Pour passer en mode root sous CentOS, utiliser la commande :
su -
Vous pouvez aussi utiliser la commande sudo.
Sur Windows ou Mac
[modifier | modifier le wikicode]Vous devez installer Kitematic via le menu de Docker CE et lire sa documentation.
Quand le conteneur fonctionne, vous allez pourvoir via Kitematic (onglet settings) préciser que le port 22 du conteneur sera accessible via le port 23 de votre PC (le port 22 semble ne pas fonctionner pour tout le monde).
Quand cela sera fait, vous pourrez ensuite utiliser Putty ou autre pour accéder à votre conteneur SSH (via le port 23) comme s'il s'agissait d'un serveur distant.
Sur Linux
[modifier | modifier le wikicode]Lorsqu'on démarre un conteneur sous Linux, Docker alloue une IP dynamiquement. Vous pouvez connaitre l'IP de votre conteneur avec cette commande :
docker network inspect bridge
En général, c'est l'adresse "172.17.0.2" qui est utilisé quand il n'y a pas d'autres conteneurs en activité.
Ensuite, vous pouvez utiliser la commande ssh :
ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" centos@172.17.0.2
Les options servent à éviter les avertissements qui apparaissent à chaque reconstruction du conteneur.
Autres commandes utiles avec Docker
[modifier | modifier le wikicode]# Démarrer le conteneur
docker start instance.centos7
# Arrêter le conteneur
docker stop instance.centos7
# Supprimer le conteneur
docker rm instance.centos7
# Supprimer les images qui n'ont plus aucun conteneur associé (pour récupérer des gigas de mémoire morte)
docker image prune -a
docker image prune -a peut effacer des images utilisées par les conteneurs lancés.
|
Docker-compose
[modifier | modifier le wikicode]La commande docker-compose
est un utilitaire généralement fourni avec Docker, permettant d'orchestrer plusieurs images et conteneurs avec la même commande[2]. Pour ce faire, les paramétrages de l’ensemble des conteneurs doit être définit dans le fichier docker-compose.yml à la racine du projet.
Exemple de docker-compose.yml contenant un seul conteneur CentOS :
version: '3.2'
services:
centos:
hostname: centos
container_name: centos
image: 'centos/systemd'
Ensuite pour relancer le conteneur :
sudo docker-compose stop; sudo docker-compose build; sudo docker-compose up -d
Pour utiliser le conteneur, on peut rentrer dedans :
sudo docker-compose run centos bash
Ou exécuter une seule commande shell dedans avant de revenir à la machine hôte :
sudo docker exec centos sh -c 'ls -alh'
Logs
[modifier | modifier le wikicode]Pour voir les logs de tous les conteneurs en live :
docker-compose logs -f
Pour supprimer ces logs :
find /var/lib/docker/containers/ -type f -name "*.log" -delete
Puis redémarrer les conteneurs pour qu'ils recréent des logs.
Problèmes connus
[modifier | modifier le wikicode]Si un conteneur ne se lance pas
[modifier | modifier le wikicode]Investiguer avec :
sudo docker logs nom_du_conteneur
Réinitialiser les conteneurs à zéro
[modifier | modifier le wikicode]sudo docker rm -f $(sudo docker ps -a -q); docker rmi -f $(sudo docker images -q); docker network rm $(sudo docker network ls -q)
Récupérer l'IP d'un conteneur
[modifier | modifier le wikicode]sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nom_du_conteneur
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
[modifier | modifier le wikicode]Relancer docker en administrateur.
Installation native de Linux avec Ubuntu (si vous n'utilisez pas Docker)
[modifier | modifier le wikicode]Les TP peuvent se dérouler sous Ubuntu.
La communauté française d’Ubuntu est très développée et il ne faut pas hésiter à poser des questions via les forums en cas de difficultés.
Si c’est la première fois que vous touchez à Linux. Il faut prendre son temps et essayer de lire en détail le guide d'installation pour comprendre au maximum ce que vous êtes en train de faire.
Obtenir un CD-ROM d'installation d'Ubuntu
[modifier | modifier le wikicode]Le guide d'installation du site ubuntu-fr.org étant une référence, ce TP se limitera à vous indiquer les pages du guide à lire et à suivre. Graver un CD-ROM d'installation d'Ubuntu :
Amorçage de l'ordinateur sur le CD-ROM d'installation d'Ubuntu
[modifier | modifier le wikicode]Amorcer le CD sur l'ordinateur à installer
Installer Ubuntu avec le CD-ROM d'installation
[modifier | modifier le wikicode]Après l'installation
[modifier | modifier le wikicode]Configurer votre firewall ainsi que votre connexion Internet
Références
[modifier | modifier le wikicode]