Archive

Posts Tagged ‘linux’

Linux, Docker

juillet 18, 2017 Laisser un commentaire

Mon petit cluster commence à ressembler à quelque-chose :

Bien sûr, on peut améliorer les choses :

  • passer en adressage IP V6 au lieu de l’IP V4 actuelle
  • Sécuriser le cluster, par exemple en supprimant l’accès distant à internet
  • Sécuriser l’accès nfs, pour le moment ouvert à tous vents.

L’aspect sécurité est le plus important, et les solutions sont en cours d’évaluation. Par contre l’IP V6 peut encore attendre un peu.

J’ai donc un cluster presque utilisable, mais où presque tout reste à faire pour y faire tourner des applications sans trop avoir à se casser la tête.

La solution qui m’intéresse le plus est Docker, et c’est bien le but de cette série d’articles. Commençons donc par l’installer sur chacun des noeuds.

Installation de Docker

Mes machines tournent sous Debian Linux, en mode headless (sans clavier, souris ni écran), en accès ssh. L’installation se fait donc via une interface chaise-clavier à coups de commandes apt sur chacun des nœuds du cluster:

  1. Activer les backports. Ceux-ci permettent d’installer des paquets en principe non prévus pour la version actuelle de Debian (8 dans mon cas, 9 pour les courageux), mais portés depuis une version plus récente de Debian.
  2. Installer quelques paquets nécessaires
  3. Installer Docker
  4. Créer un groupe unix docker et y ajouter le compte utilisateur unix
  5. Tester l’installation

J’ai utilisé les commandes suivantes (à adapter à votre cas) sous le compte root sur chacune des machines du cluster :

# Ajouter les backports au sources.list du noeud
echo '' >> /etc/apt/sources.list
echo '# Backport needed by Docker' >> /etc/apt/sources.list
echo 'deb http://ftp.debian.org/debian jessie-backports main' >> /etc/apt/sources.list

# Mettre à jour la liste des paquets disponibles
apt-get update

# Installer quelques paquets utiles
apt-get -y install apt-transport-https ca-certificates
apt-get -y install curl software-properties-common

# Ajouter la clef et le repository des paquets de Docker
curl -fsSL https://download.docker.com/linux/debian/gpg \
| apt-key add -
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable"

# Mettre à nouveau à jour la liste des paquets disponibles 
apt-get update  

# Télécharger et installer docker 
apt-get -y install docker-ce 

# Démarrer le service docker 
service docker start

Création du groupe docker

Ce groupe unix évite de devoir se connecter en root pour démarrer des conteneurs. Ceci se fait à nouveau sous le compte root.

# Créer le groupe docker.
groupadd docker

# Ajouter un compte (ici user1 sur le noeud island1)
usermod -aG docker user1

Test de l’installation

Si tout se passe bien, on peut passer au test classique du « hello world! »

docker run hello-world

Le résultat devrait ressembler à ceci :

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/

Etat des lieux

Jusqu’ici, les nœuds étaient reliés en un cluster unix où chaque machine faisait ce que l’on voulait bien y lancer au travers d’une connexion ssh.

Après les manipulations indiquées plus haut, chaque nœud fait fonctionner son instance indépendante de Docker, et il « suffit » d’y lancer des applications dans des conteneurs au fur et à mesure des besoins.

London docks c1909

« Suffit » est entre guillemets car plusieurs limites apparaissent très vite :

  • Si une machine « meurt » (carte réseau ou disque HS par exemple), les applications qui y tournaient, ainsi que leurs données, sont perdues, le temps de remplacer le matériel fautif, et de restaurer applications et données.
  • Il faut se souvenir sur quelle machine tourne chaque application …
  • … et que la machine en question soit démarrée.

Ces limites ont plusieurs solutions, dont le mode « Swarm » de Docker.

Autres billets sur le sujet :

Creative Commons License

Catégories :linux Étiquettes :

Linux, réseau, ssh

juin 20, 2017 3 commentaires

Mes trois machines sont maintenant en réseau, et chacune sait être accédée depuis les autres. Idem depuis mon PC de travail.

Se connecter sur l’une ou l’autre demande d’y connaître un compte et de pouvoir en fournir le mot de passe via une interface chaise-clavier. Outre ajouter une couche de sécurité relative, ssh permet, sous certaines conditions, de se passer de mot de passe en utilisant le principe des clefs publiques et privées.

Pour le moment, l’aspect sécurité est secondaire en ce qui concerne mon cluster, mais je changerai certainement d’avis plus tard. Un pas à la fois.

Les manipulations sont faites depuis mon PC, et les paquets ssh-server et client sont déjà installés sur les nœuds du cluster ainsi que sur le PC

Création et copie des clefs

Rien de bien compliqué, il suffit de suivre l’un des nombreux tutoriaux disponibles sur le web, en adaptant les commandes si besoin.

1 – Créer un répertoire de travail et s’y placer

mkdir ~/src/islandscluster-ssh-key
cd ~/src/islandscluster-ssh-key

2 – Créer les clefs

ssh-keygen -f  id_rsa -q -N ""

3 – Créer le fichier des clef autorisées

cp id_rsa.pub authorized_keys

4 – Ajouter la clef publique du PC de travail

cat ~/.ssh/id_rsa.pub >> authorized_keys

5 – Copier les clefs sur le noeud island1 du cluster. Le mot de passe de user1 est demandé

scp -r . user1@island1:~/.ssh

6 – Tester la connexion

$ ssh user1@island1
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Mar 11 20:05:11 2017 from 192.168.0.41
user1@island1:~$

Voilà, le premier nœud est accessible sans mot de passe depuis le PC de travail.

Il reste à  réitérer la commande scp pour les deux autres nœuds du cluster, puis à tester les accès mutuels entre eux.

Un peu de sécurité : ssh et root

Il est généralement conseillé de désactiver l’accès à une machine via ssh sous le compte root. Il suffit, sous le compte root, de modifier dans le fichier /etc/ssh/sshd_config le paramètre PermitRootLogin à no :

PermitRootLogin no

puis de redémarrer le serveur sshd sur la machine :

/etc/init.d/sshd restart

Prochaine étape

La prochaine étape consiste à installer Docker sur chacun des nœuds, puis d’activer le mode swarm. Cela mérite bien un billet ad-hoc.

 

Autres billets sur le sujet :

Creative Commons License

Catégories :linux Étiquettes :

Linux, réseau local

juin 6, 2017 3 commentaires

More Spaghetti, I Say (95916146)

Mon projet de cluster avance un peu à la fois. Les marchés aux puces étant de saison, j’ai acheté à très bon prix quelques barrettes de mémoire pour gonfler deux des trois PC que je compte utiliser. Le troisième utilisant des barrettes un peu spéciales (ECC ou un truc du genre), c’est un peu plus compliqué.

Pour rappel, mon but premier est de découvrir et utiliser Docker, et notamment Docker Swarm.

Y arriver n’est pas très compliqué, si j’en crois les documentations disponibles.

Commençons par le début : l’installation du système et la connexion en réseau. Les pratiques varient en fonction de l’historique de chacun, mais ce qui suit (à part la photo)  fonctionne chez-moi.

 

Installation du système

Chacun des ordinateurs du futur cluster doit avoir son système d’exploitation. J’ai choisi Debian Stable. Un écran, un clavier, une clef USB d’installation (merci unetbootin) et on commence par le premier PC.

L’installation est relativement rapide, pour peu qu’on ait une connexion internet rapide. Ici, avec 200 kbps en pointe, il vaut mieux être patient.

Je n’ai installé que le système de base, plus quelques paquets bien utiles, comme gvim, ssh-client et ssh-server.

PC suivant… et PC suivant.

Après quelques tests, on peut passer à la suite.

Mise en réseau avec adresses IP fixes

Par défaut, mon routeur attribue aux ordinateurs des adresses en 192.168.0.* . C’est bien pratique en usage classique (bureautique, développement ou jeu), mais beaucoup moins pour des serveur où on aime bien savoir qui (quelle machine) est où (sur quelle adresse IP).

Un serveur DNS ou un bail DHCP très long sont deux solutions, mais je préfère fixer les choses. Mes trois machines auront pour adresses IP 192.168.0.11 à 13. J’ai donc configuré mon routeur pour que la plage d’adresses de 192.168.0.11 à 20 me soit réservée.

Reste à assigner un nom et une adresse IP à chaque machine. D’habitude, mes machines portent le nom d’une ville, mais là j’ai fait au plus court : island1, 2, et 3 .

Reste à modifier les fichier /etc/network/interfaces comme suit :

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.10.11
netmask 255.255.255.0
gateway 192.168.1.1

La ligne « address » doit être modifiée sur chaque machine : 192.168.0.11 sur la machine island1, 192.168.0.12 sur island 2 et ainsi de suite.

Chacune des machine du futur cluster devant connaître les autres, le ficheir /etc/hosts doit contenir les lignes suivantes :

192.168.0.11 island1
192.168.0.12 island2
192.168.0.13 island3

Un petit reboot ou /etc/init.D/networking restart plus loin, la partie réseau proprement dite est terminée.

On peut tester que chaque machine sait parler aux autres, par exemple avec la commande ping suivie de l’adresse IP ou du nom d’une des autres machines.

Un peu de sécurité électrique

Mes trois machines sont alimentées via une multiprise qui ne servira qu’à ça. Même si leur consommation électrique est raisonnable, il est hors de question d’y brancher un fer à repasser ou un four à micro-ondes ou même une lampe de bureau. L’idéal serait une multiprise dotée d’un disjoncteur intégré. On n’est jamais trop prudent.

 

Autres billets sur le sujet :

Creative Commons License

Catégories :linux, Uncategorized Étiquettes :

Linux, cluster, Docker, …

avril 4, 2017 3 commentaires

Hé oui, je me fais mon petit cluster perso… Ça me faisait envie depuis longtemps.

Pourquoi ? Par curiosité technique, par curiosité tout court, pour utiliser la petite pile de vieilles brêles qui traînent chez-moi, et pour voir ce que je peux en faire.

Le matériel

J’ai dans mon tas trois PC anciens, mais fonctionnels :

  • Intel Dual Core ou AMD 64×2 +/-2GHz
  • RAM 1 ou 2 GO
  • Disque 240 GO ou plus
  • Port Ethernet

La dessus, ajouter un écran, clavier, souris et lecteur DVD pour l’installation du système d’exploitation, et un switch 10/100 pour interconnecter tout ça.

Les disques vérifiés avec SmartmonTools n’ont pour le moment aucun défaut.

Le système d’exploitation

Je pourrais, ou même devrais peut-être utiliser net/free/PC BDS ou une autre variante, mais je suis plus à l’aise avec Linux, pour le moment du moins.

Debian version 8 a été préféré aux Ubuntu Server et autres distributions courantes.

Une installation minimale n’occupe qu’une toute petite partie du disque et de la mémoire. IIRC, ça passait sur un AMDx2 avec seulement 512 MO de mémoire et ça tenait largement sur un disque de 80 GO.

En plus des outils de base, j’ai installé quelques packages intéressants, à mon sens, comme vim, ssh-server et client et d’autres petites fioritures qui ne mangent pas de pain.

Que faire avec un si petit cluster ?

Vu le peu de mémoire de chaque machine, exit les applications les plus gourmandes, par exemple à base de java, exit hadoop, exit MPI, Beowulf & Co, encore que j’ai lu des articles sur des clusters à base de Raspberry pi. On se rassure comme on peut ,d’ailleurs, je vais l’appeler le « Pourquoi pas? »

Ça tombe bien, je n’ai pas besoin d’une grosse base de données, je n’ai pas de masses de données à calculer, pas de craquage de clés RSA en vue…

Par contre, j’aurais bien besoin d’un NAS, s’un serveur Mercurial, d’une machine de build et de tests, d’une petite base de données, … Le cas du NAS mis à part, tout cela tiendrait sur mon PC principal, mais outre surcharger la babasse, je n’apprendrais rien de vraiment neuf dans l’opération.

Docker, Swarm

La conteneurisation, Docker sont des sujets à la « mode » en ce moment. Pour résumer, il s’agit d’isoler les applications – base de données, serveur web, CMS, etc – dans des containers qu’il « suffit » de déployer sur l’un ou l’autre nœud d’un cluster pour les rendre disponibles. Swarm permet d’automatiser le déploiement et l’exécution des containers sur le cluster

En principe, ça devrait tenir sur mes machines. Reste à s’y mettre.

Les prochaines étapes

Pour résumer :

  • Installer Debian Linux sur les trois machines (ou nœuds) du cluster
  • Connecter les trois nœuds sur le réseau local, et y accéder par ssh
  • Installer docker sur chaque nœud
  • Sélectionner un nœud « maître » du swarm
  • Ajouter les autres nœuds au swarm

Même si ça n’a pas l’air très compliqué, ça ne va pas se faire tout seul, et il va falloir y passer du temps. Entre le camp NaNoWriMo d’Avril (je récidive), le potager (je récidive aussi), et tout le reste, on va y aller étape par étape, en documentant au fur et à mesure.

 

Autres billets sur le sujet :

(Licence Creative Commons France | Faire sans contrefaire No$ Share Alike, (c) )

Catégories :linux Étiquettes :

Linux, sort, ou comment saturer /tmp

mars 21, 2017 Laisser un commentaire

Allez, un petit article dans le ton de feu opl32.com ( 2000/2001/2002, ça ne nous rajeunit pas) , mais dans le domaine linux.

Le problème

Besoin de trier un gros fichier sous Linux ? Pas de problème, la commande sort est là pour ça, et propose même une option -u pour supprimer les doublons.

Allez Go : 

sort -u < big_mega_fichier > resultat

No space left on device !??

Explication sommaire (mais suffisante)

La commande « sort » par défaut utilise la mémoire puis, si le volume à trier devient trop important, crée des fichiers temporaires dans le répertoire /tmp.

Que /tmp soit le montage d’un filesystem séparé (conseillé sur une machine de production ou un serveur), ou un simple répertoire du disque racine (monté sur /), la place disponible est limitée. On peut se retrouver avec une message du type « No space left on device » , voire parfois même empêcher certains traitements (batch, système, ou autres) de s’exécuter.

C’est très rare, mais si ça arrive sur une machine de production …

Une solution

La commande sort accepte deux options qui peuvent nous faciliter la vie

  • -T spécifie de stocker les fichiers temporaires dans le répertoire mon_repertoire_tmp
  • –compress-program spécifie de compresser les fichiers temporaires. Cette option ralentit la commande sort, mais permet de s’accommoder de filesystems plus petits ou de volumes à trier plus grands.

Exemple
sort -T ~/tmp –compress-program=gzip -u < big_mega_fichier > resultat

Conclusions

  • Ne jamais présumer que tout se passe en mémoire
  • Les commandes info et man sont nos amis
  • On peut bloquer – même quelques secondes – une machine de production sans avoir l’air d’y toucher
Catégories :linux Étiquettes :

Migration Linux Mint 14 vers 17

septembre 9, 2014 Laisser un commentaire

Linux Mint  version  14 Alias « Nadia » n’est plus maintenue. Mon PC de bureau a donc nécessité une mise à jour. J’ai ciblé la version 17 « Qiana » sensée être LTS (support longue durée).

Plutôt que de réinstaller le système, j’ai tenté une mise à jour à l’ancienne, pensant gagner du temps et faciliter les choses. Le passage de la théorie à la pratique m’a rappelé l’un des principes fondamentaux de l’informatique,  interprété à ma sauce : « Keep It Simple, Stupid » que je traduirai par « Va au plus simple, hé banane! », mais procédons dans l’ordre.

De la théorie …

Mint ne permet pas « d’usine » de pratiquer des upgrades de distribution, contrairement à Ubuntu et Debian par exemple.

Le site officiel conseille une réinstallation « à blanc », mais il existe plusieurs méthodes pour se forcer un passage vers les dernières versions. Les tutoriels sont plutôt nombreux, par exemple:

Il s’agit de modifier un ou plusieurs fichiers dans le répertoire /etc/apt , en y remplaçant les anciens noms de distribution utilisés par Mint 14 par ceux de la nouvelle version.

Les commandes fournies par ces tutoriels fonctionnent très bien. Il suffit de copier / coller et après quelques commandes apt-get classiques dans un environnement de type Debian, l’on devrait se retrouver avec une Linux Mint à jour.

… à la pratique.

J’ai dit « devrait » car dans mon cas cela ne s’est pas tout-à-fait passé comme prévu. En effet, après redémarrage de la machine :

  • Le gestionnaire de connexion ne se lance pas
  • Après quelques manipulations sans trop de rapport, le gestionnaire de connexion a enfin daigné fonctionner, mais l’interface graphique est réduite à un xterm
  • Les temps de réponse permettraient presque de détartrer la cafetière, pétrir le pain et se préparer un thé le temps que ça se passe

J’ai fini par remplacer le répertoire /etc/apt de ma machine par celui de mon netbook, en Mint version 16 et relancé les commandes de mise à jour Le système a alors retrouvé une certaine stabilité, même si d’autres problèmes sont apparus, et le passage vers la version 17 n’a pas arrangé grand-chose.

Cette ribambelle de surprises s’explique, entre autres par diverses bidouilles de modules faites il y a pas mal de temps, pour tester des programmes de musique, sans jamais avoir pu faire un retour arrière par la suite. Les installations depuis les sources sont souvent amusantes, parfois surprenantes, mais tout a un prix.

« Va au plus simple, hé banane! »

Je me suis finalement rangé aux conseils du site officiel : une installation à blanc, avec reformatage de la partition système.

Après quelques applications supplémentaires – rsync, htop, gvim, calibre, eog, remmina et autres rdp, dosemu, wine, gpodder – installées à coups de apt-get install , mon pc était fin prêt, et mes réglages et préférences directement utilisables, sans avoir besoin de tout re-paramétrer. Mes données sont sur une partition séparée et n’ont pas donc été compromises. Au pire, il m’aurait fallu restaurer une sauvegarde.

Petit plus, le PC va un peu plus vite, même s’il ne sera jamais une bête de course à faire baver un hardcore gamer.

Ma Remington restera pour l’heure en version 16 qui est bien suffisante . Je le migrerai après la NaNoWriMo 2014

 

Creative Commons License

Catégories :informatique, linux Étiquettes : ,

Récupérer un dossier personnel crypté sous Linux

janvier 18, 2013 Laisser un commentaire

Le disque dur de mon PC m’a lâchement abandonné peu avant la nouvelle année. Il a donc été remplacé il y a quelques jours, et a reçu un nouveau système avant restauration des données sauvegardées.

L’ancien disque a bien voulu démarrer une dernière fois (depuis, c’est RIP) et j’en ai profité pour récupérer ce qui pouvait l’être, principalement mes dernières archives mail.

Mon ancien système cryptait mon répertoire personnel (choix peu judicieux lors de l’installation) avec ecryptfs. Linux étant bien fait, la commande ecryptfs-recover-private vient à la rescousse.

Lancée depuis un compte d’administration, ou via sudo, ecryptfs-recover-private pose quelques questions auxquelles il suffit de répondre, à condition évidemment de se souvenir du mot de passe utilisé lors du cryptage :

$ sudo ecryptfs-recover-private
INFO: Searching for encrypted private directories (this might take a while)...
INFO: Found [/mnt/old_home/.ecryptfs/jb/.Private].
Try to recover this directory? [Y/n]:
INFO: Found your wrapped-passphrase
Do you know your LOGIN passphrase? [Y/n]
INFO: Enter your LOGIN passphrase...
Passphrase:
Inserted auth tok with sig [6d4b174437f6ec16] into the user session keyring
INFO: Success!  Private data mounted read-only at [/tmp/ecryptfs.JEwuNfuD].
$

Et voilà! Le dossier crypté est accessible en lecture seule depuis un répertoire créé sous /tmp, et il n’y a plus qu’à se servir.

En passant, exit Ubuntu Linux, mon PC est maintenant sous Linux Mint, bien plus plaisant et pratique que Unity and Co.

Creative Commons License

Catégories :linux Étiquettes :
%d blogueurs aiment cette page :