Comment modifier le nom d’hôte d’un serveur sous Proxmox

Suite à mon acquisition d’un micro-serveur (HP Proliant Gen 8) sur lequel a été pré-installé le serveur Proxmox, je vais me lancer dans la partie de modification du nom de Node, c’est à dire le nom de l’hôte du serveur Debian, qui est la base du système Proxmox.

Les commandes que je vais suivre n’ont rien d’exceptonnelles à part l’application directe des informations fournies par le site officiel ainsi qu’une petite partie de troubleshoot.

1. Assurez vous d’avoir éteint toutes les machines virtuelles. Faites de même pour les différents containers si vous en avez installés.

20170514-220419

2. Editez les fichiers /etc/hostname et /etc/hosts ainsi que /etc/postfix/main.cf, pour y remplacer le nom de l’ancien hôte par le nouveau. Vous devriez avoir quelque chose de similaire à ci-dessous.

# vim /etc/host
127.0.0.1 localhost.localdomain localhost
192.168.X.X <nouveauNode> pvelocalhost

# vim /etc/hostname
<nouveauNode>

# vim /etc/postfix/main.cf
myhostname=<nouveauNode>.monServeur.lab

3. Vérifier que dbus est installé sur votre serveur

20170514-215500

Puis lancer la commande

# hostnamectl set-hostname <nouveauNode>

Cette commande ne marche qu’avec systemd.

4. Redémarrer ensuite les différents services proxmox

# service pveproxy restart

# service pvedaemon restart

5. Vous devriez maintenant voir deux Nodes au lieu d’un, l’ancien et le nouveau, dans la liste de menu du Datacenter. Ces nodes sont déconnectés, mais il n’y a pas de quoi s’inquiéter, on va les reconnecter plus tard.

20170514-223724

 

6. Déplacer ensuite les machines virtuelles ainsi que les différents containers s’il y en a, vers le dossier du nouveau Node

# mv /etc/pve/nodes/<ancienNode>/qemu-server/<VM>.conf /etc/pve/nodes/<nouveauNode>/qemu-server/

Dans le cas où vous ne pouvez pas accéder au contenu de /etc/pve, et que vous avez un message d’erreur de type « proxmox pvce transport endpoint is not connected »,

20170514-223813

 

Démonter /etc/pve puis redémarrer le service pve-cluster

# umount -l /etc/pve
# service pve-cluster restart

7. Supprimer ensuite la référence à l’ancien node

# rm -rf /etc/pve/nodes/<ancienNode>
# service pveproxy restart

8. Si malgré celà, vous avez toujours une croix rouge au niveau du nom de votre node, il ne vous reste plus qu’à redémarrer complètement le serveur

9. Après redémarrage, n’oublier pas de relier vos disques au nouveau node

20170514-234246

Noter qu’il est préférable de ne pas mettre de majuscules dans les noms d’hôtes de serveurs sous Linux.

Sources:

Proxmox node name change
HowToChangeHostname
How to set the hostname for a Debian Jessie system?

SDB:Why should username, hostname and domainname be written

Let’s Encrypt (LE)

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web Owncloud à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 7. Let’s Encrypt (LE)

Certificats & CA

Dans un des chapitres précédents, je vous ai fait installé un Certificat auto-signé (self-signed certificate). Ce qui fait qu’à chaque fois que vous vous connectez à votre page, vous auvez droit à un message d’avertissement comme ci-dessous.

036

Pour éviter ce genre de désagrément, il vous faudra un certificat signé par une autorité de certification (CA). Malgré le fait qu’un site présente un certificat auto-signé ou signé par un CA, garder en tête que rien ne prouve que le site visité est bel et bien émis par son propriétaire. Cependant, la présence de certificats apporte une assurance que les communications avec le serveur sont chiffrées.

Let’s Encrypt est un très bon choix de CA, puisque ce dernier offre des certificats gratuits qui de plus, ssont reconnus par la plupart des navigateurs internets, etc, sans oublier que le projet est soutenu par pas mal d’entreprises de poids, dont la liste se trouve ici.

Installation et configuration de Let’s Encrypt

Letsencrypt se trouve dans le dépot Jessie-backport de debian, mais nous n’allons pas l’installer avec la méthode conventionnelle.

Il faut savoir qu’une fois lestencrypt installé et, surtout en fonction des options d’installation choisies, ce dernier peut modifier les configurations de vos différents serveurs (serveur web, serveur owncloud, etc.) en fonction de ces besoins. Deuxième point à prendre en compte, c’est que cette application étant toujours en mode Béta, si vous n’êtes pas confortable avec l’utilisation de logiciels ou d’applications en mode Béta, passer votre chemin.

Le plugin Webroot, anciennement appelé simplefs, est la meilleure option à choisir, pour pouvoir garder entièrement le contrôle sur chacun de nos serveurs, sans que letsencrypt s’y mèle lors de l’installation, et même après. Avec ce plugin, le client letsencrypt ne fera rien de plus que ce qu’on lui demande de faire, c’est à dire de créer/ renouveller/révoquer un certificat.

Allons-y pour l’installation.

1. Créer un dossier pour l’installation de letsencrypt

$ sudo mkdir -p /var/www/html/owncloud/letsencrypt/.well-known/acme-challenge

Vérifier les permissions, puis restreindre au maximum ce qu’on peut.

$ ls -l /var/www/html/owncloud/
drwxr-xr-x 3 root root 4096 Apr 8 16:58 letsencrypt

$ sudo chown -R www-data:www-data /var/www/html/owncloud/letsencrypt

$ sudo chmod -R 750 /var/www/html/owncloud/letsencrypt

2. Lancer l’installation

Installer le paquet « git » dans un premier temps, qu’on utilisera pour télécharger le client Let’s Encrypt par la suite.

$ sudo apt-get install git

Télécharger une copie conforme du dossier officiel Let’s Encrypt à partir de github, à placer dans le dossier /opt.

Petite note concernant le dossier /opt, sur un système à base de debian, on y place généralement les logiciels tierces, non compris dans les dépôts officiels, dans ce dossier.

$ cd /opt

$ sudo git clone https://github.com/letsencrypt/letsencrypt

$ ls /opt/letsencrypt
  acme
  letshelp-letsencrypt
  CHANGES.rst                     LICENSE.txt
  CONTRIBUTING.md                 linter_plugin.py
  docker-compose.yml              MANIFEST.in
  Dockerfile                      pep8.travis.sh
  Dockerfile-dev                  README.rst
  docs                            readthedocs.org.requirements.txt
  examples                        setup.cfg
  letsencrypt                     setup.py
  letsencrypt-apache              tests
  letsencrypt-auto                tools
  letsencrypt-auto-source         tox.cover.sh
  letsencrypt-compatibility-test  tox.ini
  letsencrypt-nginx               Vagrantfile

Avant d’aller plus loin, vérifions que la commande letsencrypt-auto fonctionne correctement, en lançant la commande de demande d’aide par exemple (« letsencrypt-auto –help » ou « letsencrypt-auto –help all »).

/opt/letsencrypt$ sudo ./letsencrypt-auto --help [all]
!---Tronquée---!
ca-certificates is already the newest version.
gcc is already the newest version.
gcc set to manually installed.
python is already the newest version.
The following extra packages will be installed:
  dh-python libexpat1-dev libmpdec2 libpython-dev libpython2.7-dev
  libpython3-stdlib libpython3.4-minimal libpython3.4-stdlib
  python-chardet-whl python-colorama-whl python-distlib-whl
  python-html5lib-whl python-pip-whl python-pkg-resources
  python-requests-whl python-setuptools-whl python-six-whl
  python-urllib3-whl python2.7-dev python3 python3-minimal
  python3-pkg-resources python3-virtualenv python3.4 python3.4-minimal
Suggested packages:
  augeas-doc augeas-tools python-distribute python-distribute-doc
  python3-doc python3-tk python3-venv python3-setuptools python3.4-venv
  python3.4-doc binfmt-support
Recommended packages:
  libssl-doc
!---Tronquée---!
Installing Python packages...
Installation succeeded.

Comme vous pouvez le constater, letsencrypt installe automatiquement toutes les dépendances dont il a besoin.

L’option « all » après l’instruction « –help », est optionnel, mais nous fournit plus d’information concernant les options disponibles avec la commande lestencrypt.
Si vous avez un résultat comme ci-dessus avec l’option « –help » ou « –help all », c’est que vous êtes bon pour poursuivre la procédure d’obtention de certificats signés par le CA, Let’s Encrypt.

3. letsencrypt-auto

Letsencrypt est un progamme écrit en python, qui se charge d’installer et de mettre à jour automatiquement tous les outils dont il a besoin comme on l’a vu plus haut. Pour l’utiliser, il suffit juste de se placer dans le dossier /opt/letsencrypt, puis de lancer la commande « ./letsencrypt-auto ».
Pour information, durant la phase Béta, le nombre de certificats émis par le CA (Let’s Encrypt), est assez limité. De ce fait, avant de lancer votre requête, faites un test pour vérifié que votre requête serait accordée ou non.

N’oubliez pas de désactiver la redirection http vers https, sinon vous allez avoir droit un message d’erreur du type:

044

Pour ce faire, ajouter un dièse ‘#’ devant l’instruction de redirection.

$ sudo vim /etc/apache2/site-availables/owncloud.conf

  ServerName linuxintosh.nsupdate.info
# Redirect permanent / https://.nsupdate.info

  LogLevel info ssl:warn

  ErrorLog /var/log/apache2/error.log
  CustomLog /var/log/apache2/access.log combined

N’oubliez pas de réactiver la redirection, une fois le certificat final obtenu. Ne vous inquiétez pas, je vais vous le rappeler un peu plus tard dans ce chapitre.

4. Test de vérification avant installation du certificat

Poursuivons notre aventure! Faisons un test de requête de certificat.

/opt/letsencrypt$ sudo letsencrypt-auto certonly --test-cert

Selectionner l’option 2 « Place files in webroot directory (webroot)

038

Entrez votre adresse email

039

Accepter les conditions d’utilisation

040

Entrer l’URL, .netlib.re par exemple, pour accéder à votre serveur Owncloud

041

Entrer le chemin du webroot, /var/www/html (sur Debian par défaut)

042

043

Vérifier le résultat

045

# ls /etc/letsencrypt/live/.netlib.re
  cert.pem chain.pem fullchain.pem privkey.pem

Si tout est bon et que le résultat de ce test vous convient, lancer maintenant l’installation.

5. Installation du certificat

Rappeler vous que je me suis enregistré sur deux domaines différents (netlib.re, et nsupdate.info qui est l’alias du premier). Il me faut donc un seul certificat qui serait valide pour ces deux domaines à la fois.

Afin d’automatiser un peu plus les la demande de certificat et d’éviter de retaper toutes les informations comme lors du test, j’ai ajouté d’autres paramètres à la commande letsencrypt-auto.

/opt/letsencrypt$ sudo ./letsencrypt-auto certonly \
  --agree-tos \
  --webroot \
  --webroot-path /var/www/html/ \
  --email admin@example.com \
  --domains .netlib.re \
  --domains .nsupdate.info

Pour une version allégée de la même commande,

/opt/letsencrypt $ sudo ./letsencrypt-auto certonly \
  --agree-tos \
  --webroot \
  -w /var/www/html/ \
  -m admin@example.com \
  -d .netlib.re \
  -d .nsupdate.info

046

Le message dit que vous avez déjà un certificat associé au même nom de domaine que celui entré manuellement, puis nous demande ce qu’on veut faire. J’ai choisi l’option 2, qui va remplacer/renouveller le certificat existant.

Si tout s’est bien passé, vous devriez avoir un message avec la date d’expiration de votre certificat, comme ci-dessous.

047

Le certificat signé par le CA va se placer ensuite dans le dossier /etc/letsencrypt/live/.

6. Vérification

Vérifions justement le contenu du dossier /etc/letsencrypt/live/, dans lequel doit se trouver toutes les clés générées par les commandes ‘letsencrypt’ ou ‘letsencrypt-auto’.

$ sudo ls -a /etc/letsencrypt/live/.netlib.re/
  . .. cert.pem chain.pem fullchain.pem privkey.pem
  • privkey.pem – clé privée à ne jamais partager avec personne
  • cert.pem – certificat du serveur uniquement
  • chain.pem – certificat pour root et intermédiaire uniquement
  • fullchain.pem – ensemble de tous les certificats (chain.pem + cert.pem)
$ sudo ls -l /etc/letsencrypt/live/.netlib.re/
  total 0
  lrwxrwxrwx 1 root root 45 Apr 19 22:58 cert.pem -> ../../archive/linuxintosh.netlib.re/cert3.pem
  lrwxrwxrwx 1 root root 46 Apr 19 22:58 chain.pem -> ../../archive/linuxintosh.netlib.re/chain3.pem
  lrwxrwxrwx 1 root root 50 Apr 19 22:58 fullchain.pem -> ../../archive/linuxintosh.netlib.re/fullchain3.pem
  lrwxrwxrwx 1 root root 48 Apr 19 22:58 privkey.pem -> ../../archive/linuxintosh.netlib.re/privkey3.pem 

$ sudo ls -l /etc/letsencrypt/archive/.netlib.re/
  total 48
  -rw-r--r-- 1 root root 1870 Apr 8 19:11 cert1.pem
  -rw-r--r-- 1 root root 1850 Apr 8 19:51 cert2.pem
  -rw-r--r-- 1 root root 1850 Apr 19 22:58 cert3.pem
  -rw-r--r-- 1 root root 1675 Apr 8 19:11 chain1.pem
  -rw-r--r-- 1 root root 1647 Apr 8 19:51 chain2.pem
  -rw-r--r-- 1 root root 1647 Apr 19 22:58 chain3.pem
  -rw-r--r-- 1 root root 3545 Apr 8 19:11 fullchain1.pem
  -rw-r--r-- 1 root root 3497 Apr 8 19:51 fullchain2.pem
  -rw-r--r-- 1 root root 3497 Apr 19 22:58 fullchain3.pem
  -rw-r--r-- 1 root root 1704 Apr 8 19:11 privkey1.pem
  -rw-r--r-- 1 root root 1704 Apr 8 19:51 privkey2.pem
  -rw-r--r-- 1 root root 1708 Apr 19 22:58 privkey3.pem 

$ sudo ls -l /etc/letsencrypt/keys/
  total 12
  -rw------- 1 root root 1704 Apr  8 19:11 0000_key-letsencrypt.pem
  -rw------- 1 root root 1704 Apr  8 19:51 0001_key-letsencrypt.pem
  -rw------- 1 root root 1708 Apr 19 22:58 0002_key-letsencrypt.pem

Pour information, /etc/letsencrypt/archive et /etc/letsencrypt/keys contiennent toutes les anciennes clés et certificats, par contre /etc/letsencrypt/live n’en contient que la dernière version.

Vérifier ensuite qu’il n’y a pas de fichiers qui traine dans le dossier .well-known/acme-challenge/. Si c’est le cas, supprimer tout ce qu’il contient comme information.

$ sudo -s
# rm /var/www/owncloud/letsencrypt/.well-known/acme-challenge/*

 

Mise-à-jour des informations de Owncloud

1. Réactiver la redirection HTTP vers HTTPS

Une fois que votre certificat émis, supprimer le dièse ‘#’ devant « Redirect » afin de pouvoir rediriger de nouveau, les traffics HTTP vers HTTPs.

$ sudo vim /etc/apache2/site-availables/owncloud.conf

  ServerName linuxintosh.nsupdate.info
  Redirect permanent / https://.nsupdate.info

  LogLevel info ssl:warn

  ErrorLog /var/log/apache2/error.log
  CustomLog /var/log/apache2/access.log combined

2. Mettre à jour les informations du vHost avec le nouveau certificat signé

Désactiver les certificats auto-signés puisqu’on n’en a plus besoin, puis ajouter le chemin d’accès aux clés et chaînes généré par Let’s Encrypt, dans le fichier de configuration de owncloud.

$ sudo vim /etc/apache2/sites-available/ownCloud.conf

  # Self-signed certificate
  #
  #SSLCertificateFile /etc/ssl/localcerts/owncloud.pem
  #SSLCertificateKeyFile /etc/ssl/localcerts/owncloud.key

  # Let's Encrypt certificate
  #
  SSLCertificateFile /etc/letsencrypt/live/.netlib.re/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/.netlib.re/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/.netlib.re/fullchain.pem

  # Certificate signed by CA
  #
  #SSLCACertificateFile /Path/to/CA/Certificate
  #SSLVerifyDepth 2

3. Vérifier l’état de connection à votre page

Vous devriez pouvoir accéder directement à votre page, sans avoir à valider quoi que ce soit.

048
Navigateur – Chromium

049

 Navigateur – Firefox

4. Un petit test de plus!

Une fois n’est pas coutume, lancer de nouveau un test sur Qualys SSL Labs et voyer le résultat.

060
Cette fois ci, le test passe et j’obtient un A+ comme note. Youpiii!

Quelques informations supplémentaires

1. Renouvellement du certificat

Le certificat signé par Let’s Encrypt n’est valide que pour une durée de 90jours maximum. Il est donc préférable de s’y prendre un peu à l’avance pour mettre à jour notre certificat. Vous pouvez le faire de façon manuelle ou automatique.

Avec la méthode manuelle, taper dans une console,

/opt/letsencrypt$ sudo ./letsencrypt-auto renew
  Checking for new version...
  Requesting root privileges to run letsencrypt...
  sudo /home/USERNAME/.local/share/letsencrypt/bin/letsencrypt renew

  -------------------------------------------------------------------------------
  Processing /etc/letsencrypt/renewal/.netlib.re.conf
  -------------------------------------------------------------------------------

  The following certs are not due for renewal yet:
  /etc/letsencrypt/live/.netlib.re/fullchain.pem (skipped)
  No renewals were attempted.

Par contre je n’ai pas réussi à faire fonctionner le renouvellement automatique avec CRON. J’ai essayé plusieurs fois, mais j’ai des doutes sur la fonctionnalité de la commande ci-dessous, bien qu’en théorie, çà devrait marcher.

$ sudo crontab -e
  #Minute Hour Day of Month Month Day of Week Command
  #(0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat)

  crontab
  * * */1 * * /opt/letsencrypt/letsencrypt-auto renew >> /var/log/apache2/letsencrypt-renew.log 2>&1

Ici, Cron doit exécuter la commande « letsencrypt-auto renew » une fois par jour. A chaque exécution de cette commande, je devrais avoir une information dans le fichier /var/log/apache2/letsencrypt-renew.log, ainsi qu’un email doit être envoyé du serveur, mais nada.
J’ai noté qu’en y apportant une petite modification dans la commande, comme par exemple, si je veux effectuer une requête de renouvellement de certificats à la minute, la commande semble fonctionner après quelques bidouilles. Je ne vais pas trop tarder dessus. Je pense avoir effectué suffisament de test pour vérifier que la commande de renouvellement de certificat fonctionne sans problème, mais couplée avec cron, rien ne va plus!

Voici ce que j’ai réussi à récupérer dans les logs quand çà fonctionne.

/var/log/apache2$ cat letsencrypt-renew.log
  Checking for new version...
  Requesting root privileges to run letsencrypt...
  /root/.local/share/letsencrypt/bin/letsencrypt renew

  -------------------------------------------------------------------------------
  Processing /etc/letsencrypt/renewal/.netlib.re.conf
  -------------------------------------------------------------------------------

  The following certs are not due for renewal yet:
  /etc/letsencrypt/live/.netlib.re/fullchain.pem (skipped)
  No renewals were attempted.

Dans les notes sur la page officielle de Let’s Encrypt, il est dit qu’ils vont sortir un script bientôt pour automatiser la tâche de renouvellement des certificats.

Sinon, utiliser l’installeur Apache ou Nginx au lieu de Webroot comme j’ai procédé dans cet article. Ces installeurs vont gérer directement le renouvellement des certificats, sans que vous ayez à vous soucier de quoi que ce soit.

2. Révocation du certificat

Si pour une raison quelconque, vous souhaitez révoquer votre certificat de Let’s Encrypt, taper la commande ci-dessous en précisant le nom de domaine concerné.

/opt/letsencrypt$ sudo ./letsencrypt-auto revoke --cert-path /etc/letsencrypt/live/.netlib.re/cert.pem
  Checking for new version...
  Requesting root privileges to run letsencrypt...
  /root/.local/share/letsencrypt/bin/letsencrypt revoke --cert-path /etc/letsencrypt/live/.netlib.re/cert.pem

Vous n’aurez pas de confirmation de révocation du certificat. Par contre, si vous retaper exactement la même commande, vous allez avoir un message vous prévenant que le certificat a déjà été révoqué.

/opt/letsencrypt$ sudo ./letsencrypt-auto revoke --cert-path /etc/letsencrypt/live/linuxintosh.netlib.re/cert.pem
  Checking for new version...
  Requesting root privileges to run letsencrypt...
  /root/.local/share/letsencrypt/bin/letsencrypt revoke --cert-path /etc/letsencrypt/live/.netlib.re/cert.pem
  An unexpected error occurred:
  The request message was malformed :: Certificate already revoked
  Please see the logfiles in /var/log/letsencrypt for more details.

Vous pouvez le vérifier en accédant à votre page.

061

3. Mise-à-jour du client letsencrypt

Pour mettre à jour le client letsencrypt, accéder au dossier /opt/letsencrypt, puis taper la commande « git pull ».

$ cd /opt/letsencrypt
$ sudo git pull

N’oubliez pas que le client Let’s Encrypt est toujours en mode Béta. Prennez donc le temps de visiter la page officielle de Let’s Encrypt pour lire les informations sur les dernières mise-à-jour.

Les articles ci-dessous sont très intéressants. Je ne peux que vous le recommander. Si l’anglais vous rébute, utilisez l’outil itool de Google pour traduire ces pages.

Why Use a Certificate?
Fishing for Hackers: Analysis of a Linux Server Attack

Sources et Références

User script location in Debian
Fully automate Let’s Encrypt certificate on Debian using central webroot Folder
Client certificate authentication
Apache directives
Set server wide ssl configuration
Install Let’s Encrypt to Create SSL Certificates
Crontab generator
Missing Docs for cert.pem, chain.pem, fullchain.pem, etc #608
Where are my certificates?

Installation de OwnCloud sur un Raspberry Pi

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web server à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 2. Installation de OwnCloud sur un Raspberry Pi

I. Installation de OwnCloud

Pour l’installation de OwnCloud, il nous faut trois choses:

  • Un système de gestion de base de données (MariDB)
  • Un serveur PHP
  • Un serveur Web (Apache HTTP Server, ou tout simplement Apache).

Avant d’aller plus loin, je tiens à préciser que j’ai préféré MariaDB à MySQL, de la même manière que je préfère libreOffice à OpenOffice. Ensuite, mon choix d’installer un serveur Apache à la place d’un serveur Nginx, est plutôt par commodité.

Ce tutoriel se base sur un système Raspbian 8.0, avec pour but d’installer la version 8.x de Owncloud.
Deux méthodes au choix, mais je vais en favoriser une:

  • Installation à partir des dépots officielles de Debian, que je vais qualifier d’installation “automatique”
  • Installation de type manuelle, puisqu’il nous faut installer un par un, tout ce dont on aura besoin pour une utilisation fonctionnelle de notre OwnCloud.

La méthode manuelle est celle qui est vivement conseillée au vue de la correction des problèmes de sécurité, mais aussi pour une facilitée de migration du dossier OwnCloud vers un autre support, sans casser le système.

Je tiens à préciser qu’il ne faut pas appliquer ces deux méthodes à la fois. Soit vous faites une installation manuelle, soit une en automatique sinon, bonjour les dégats. Ci-dessous un example où je ne pouvais pas du tout accéder à mon serveur tant que j’ai pas résolu ce problème.

downgrading

Downgrading is not supported and is likely to cause unpredictable issues (from 8.2.1 to 8.1.5.2)
Traduction: Le downgrade n’est pas pris en charge et est susceptible de provoquer des problèmes imprévisibles (de 8.2.1 à 8.1.5.2)

Ceci est certainement du au fait que la version du dépôt dans Debian est moins récent.

Méthode automatique, installation à partir des dépots

Vérifions les informations concernant les paquets ownClouds disponibles

# apt-cache search owncloud
# apt-cache show owncloud

133804

Configurer un dépôt Debian pour ownCloud

1. Ajouter le dépôt ownCloud dans /etc/apt/sources.d/

Parmi toutes les méthodes, je préconise l’utilisation de la console, sans avoir à utiliser un éditeur de texte.

$ sudo su
# echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_8.0/ /' >> /etc/apt/sources.list.d/owncloud.list

Une autre option, sans avoir à se connecter comme super utilisateur:

$ echo “deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_8.0/ /” |sudo tee -a /etc/apt/sources.list.d/owncloud.list

2. Installation de la clef du dépôt officiel de Owncloud

$ cd /tmp
$ wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_8.0/Release.key
$ sudo apt-key add - < Release.key

3. Installation de ownCloud

$ sudo apt-get update
$ sudo apt-get install owncloud

Le paquet Owncloud sera installé avec toutes ces dépendances (apache2, mysql, php-*, etc…).

Méthode manuelle, installation paquet par paquet

Pour plus de détails concernant l’installation des differents serveurs, je vous réfère au manuel de l’administrateur Owncloud.

Etape 1. Installation du serveur Web Apache

$ sudo apt-get install apache2

Dans un navigateur, taper l’adresse IP (ou http://localhost) de l’appareil sur lequel vous faites l’installation. Si vous voyez une page sur laquelle est affichée “It Works !”, alors le serveur Apache fonctionne correctement.

141525

Etape 2. Installation de MySQL/MariaDB

$ sudo apt-get install mariadb-server

Il vous sera demandé d’entrer un mot de passe pour l’utilisateur root de MariaDB, puis de le reconfirmer. Notez bien votre mot de passe puisqu’on n’en aura besoin pour plus tard.

142049

# service mysql status

Si le service n’apparaît pas actif, il faut le démarrer avec la commande,

# service mysql start

Etape 3. Installation de PHP5

Les paquets suivants sont les paquets principaux pour un bon fonctionnement de ownCloud. En rouge, quelques paquets qui peuvent être très utiles par la suite.

$ sudo apt-get install php5 php5-gd php5-mysql curl libcurl3-dev php5-curl php5-intl php5-mcrypt php5-imagick

Pour vérifier que le serveur PHP fonctionne correctement, il faut créer un fichier phpinfo.php dans le dossier /var/www/html, avec les informations suivantes:


Ne supprimer pas ce fichier, même si vous pensez que vous n’en avez plus besoin. Il nous sera toujours utile par la suite.

Dans un navigateur internet, entrer l’adresse localhost/phpinfo.php. Vous devriez avoir les informations concernant le serveur PHP.

php-version

Etape 4. Installation de Owncloud

Ici, on ne va pas parler d’installation à proprement parler, puisqu’il nous faut copier la version en tarball de Owncloud à partir du site officiel, que l’on va placer dans notre dossier /var/www/html.

Je ne vais pas surcharger ce blog d’étapes supplémentaires, pour une explication sur le comment et pourquoi placer le tarball dans un dossier autre que celui par défaut. Cependant, je tiens à préciser que c’est un excellent choix de le faire, en plus de modifier le nom du dossier owncloud par un autre, pour donner un peu plus de mal aux pirates qui essayent de subtiliser des informations de vos serveurs.

Récupérons la version stable actuelle disponible de owncloud (version 8.2.2), que l’on va placer dans le dossier /var/www/html.

$ sudo wget https://download.owncloud.org/community/owncloud-8.2.2.tar.bz2

$ sudo tar -xvf owncloud-8.2.2.tar.bz2
$ ls -l
total 28256
 drwxr-xr-x 13 nobody nogroup 4096 Dec 21 12:50 owncloud
 -rw-r--r-- 1 root root 28922075 Dec 21 13:00 owncloud-8.2.2.tar.bz2

Modifier les permissions pour le dossier owncloud, en changeant le propriétaire par l’utilisateur HTTP (www-data).

pi@raspberrypi:~ $ sudo chown -R www-data:www-data /var/www/html/owncloud/
pi@raspberrypi:~ $ ls -l /var/www/html
total 28260
 drwxr-xr-x 2 root root 4096 Dec 27 10:36 html
 drwxr-xr-x 15 www-data www-data 4096 Dec 27 10:54 owncloud
 -rw-r--r-- 1 root root 28922075 Dec 21 13:00 owncloud-8.2.2.tar.bz2
pi@raspberrypi:~ $

Maintenant qu’on a tout ce qu’il nous faut pour l’utilisation de Owncloud, il nous reste encore quelques paramètres à configurer.

II. Configuration des différents serveurs de OwnCloud

Configuration du serveur Web Apache

Nous allons nous intéresser particulièrement à deux fichiers de configuration du serveur Apache:
/etc/apache2/apache2.conf
/etc/apache2/sites-available/owncloud.conf
Le deuxième fichier n’existant pas, il va falloir le créer, et doit avoir les informations suivantes:

$ sudo vim /etc/apache2/sites-available/owncloud.conf
/var/www/html/owncloud/>
  Options +FollowSymlinks
  AllowOverride All

 
  Dav off
 

 SetEnv HOME /var/www/html/owncloud
 SetEnv HTTP_HOME /var/www/html/owncloud

Si vous n’avez pas installé owncloud dans /var/www/html/owncloud/, ou que vous avez modifié le nom du dossier, je vous propose de suivre les instructions proposées dans le manuel officiel pour les différentes configurations à prendre en compte.

Activer ensuite votre page Owncloud. Pour ce faire, on vous proposera généralement de créer directement un lien symbolique avec « ln -s ». Cependant, Debian a sa propre outil pour le faire.

$ sudo a2ensite owncloud.conf

De même, pour désactiver le site (vous n’en avez pas besoin dans l’immédiat)

$ sudo a2dissite owncloud.

Lors de votre accès à Owncloud à partir de votre navigateur internet, et que vous rencontrez un message du type: “.htaccess does not work”, c’est que .htaccess n’est pas activé.

095106

Je tiens à préciser qu’il est recommandé d’activer .htaccess pour bénéficier d’une meilleure sécurité pour votre serveur. Par défaut, .htaccess est désactivée sur les serveurs Apaches.
Pour le faire, remplacer ‘AllowOverride None’ par ‘AllowOverride All’ dans du fichier /etc/apache2/apache2.conf.

N’oubliez surtout pas d’effectuer des sauvegardes de vos fichiers de configuration avant toutes modifications.

$ sudo cp /etc/apache2/sites-available/owncloud.conf /etc/apache2/sites-available/owncloud.conf.bak

$ sudo cp -p /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak
$ vim /etc/apache2/apache2.conf
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted

Pour que ownCloud fonctionne correctement, il faut activer le module mod_rewrite.

$ sudo a2enmod rewrite

Il est aussi recommandé d’activer les différents modules ci-dessous.

$ sudo a2enmod headers
$ sudo a2enmod env
$ sudo a2enmod dir
$ sudo a2enmod mime

Les trois derniers modules devraient être déjà activés par défaut.

Configuration de php.ini

Ce qu’il faut savoir, vu qu’on veut utiliser ce serveur avec pour objectif d’échanger des fichiers, c’est qu’il faut modifier manuellement soit dans /var/www/html/owncloud/.htaccess du fichier fourni avec ownCloud, soit le fichier /etc/php5/apach2/php.ini, la taille maximale des fichiers à faire passer sur le server.
Pour savoir lequel des ses deux fichiers il faut modifier, ouvrez dans un navigateur localhost/phpinfo.php, puis retrouver la ligne “Loaded Configuration File”.

phpini

A partir de cette page, ou dans le fichier /etc/php5/apache2/php.ini, vous devriez retrouver les informations ci-dessous, que vous pouvez modifier à votre souhait. Les valeurs par défaut étant,

upload_max_filesize = 2M #Maximum allowed size for uploaded files
post_max_size = 8M #Must be greater than or equal to upload_max_filesize

N’oubliez pas d’effectuer une copie de ce fichier avant modification.

$ sudo cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.bak

$ sudo vim /etc/php5/apache2/php.ini

Vous pouvez augmenter cette limite, avec pour example une valeur de 2GB comme taille maximale de fichier à échanger, comme ci-dessous:

upload_max_filesize = 2G
post_max_size = 2G

Une fois les modifications effectuées, sauvegarder le fichier php.ini, puis vérifier de nouveaux que vous avez les bonnes informations dans localhost/phpinfo.ini après redémarrage du serveur Apache.

Si vous souhaitez savoir comment faire la même chose en modifiant le fichier .htaccess, je vous renvoie à ce lien.

Redémarrer apache2

$ sudo service apache2 restart

Création de la base de donnée MySQL/MariaDB

Commençons par modifier les options de sécurité de MySQL/MariaDB.

$ sudo mysql_secure_installation
Enter current pasword for root, taper le mot de passe root de MariaDB, qui devrait être le même que celui lors de l'installation du service
Change root password, taper “n” pour NON
Remove anonymous users, taper “y” pour OUI
Disallow root login remotely, taper “y” pour OUI
Remove test database and access to it, taper “y” pour OUI
Reload privilege tables no, taper “y” pour OUI

Entrez maintenant dans MySQL/MariaDB pour gérer la base de donnée.

$ sudo mysql -u root -p
Enter password: (taper le mot de passe root de MariaDB)

MariaDB [(none)]> CREATE USER 'ownclouduser'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS owncloud;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON owncloud.* TO 'ownclouduser'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> quit

Les valeurs en couleurs peuvent être personnalisées.

Voici quelques commandes utiles pour MySQL/MariaDB:

Show Database Users: SELECT User,Host FROM mysql.user;
Show available Databases: SHOW DATABASES;
Show ownCloud Tables in Database: USE owncloud; SHOW TABLES;
Quit Database: quit

Petite précision, il n’y a rien à modifier dans ces commandes. Entrez les directement telle qu’elles.

III. Accès à OwnCloud

On est presqu’au bout du chemin. Il ne reste plus qu’à entrer les informations ci-dessous, lorsque vous rentrez dans la page localhost/owncloud (ou encore adresse_IP/owncloud).

Create an admin account
* Username: choisissez de préférence un nom, autre que « admin, administrateur, etc. »
* Password: choissisez un mot de passe complexe

Storage & database
* Data folder: ne pas modifier, sauf si owncloud est installé ailleurs
* Configure database: MySQL/MariaDB est la seule option disponible
* Database user: ownclouduser
* Database password: le mot de passe de ownclouduser
* Database name: owncloud
* Hostname: localhost

095652

Et pour finir, activons le SSL/TLS pour sécuriser les traffics entre notre serveur et les différents ordinateurs distants.

Pour ce faire, il suffit d’activer les deux modes ci-dessous:

$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
$ sudo service apache2 reload

Et voilà, nous pouvons avoir une connection sécurisée vers le serveur Owncloud.

110650   110738
Référence:
ownCloud 8.2 Server Administration Manual
Manual Installation on Linux
Installing ownCloud From the Command Line
Database Configuration

Prise en main du RPi et installation de Mate sur un Raspbian

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web server à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian

I. Installation de Raspbian sur un RPi(2)

Avant de se lancer dans l’installation, il faut absolument être sur et certain que la carte SSD est reconnue, et que vous avez pu l’identifiée dans votre liste de partition.

Première chose à faire serait de lancer la commande “df” quand la carte SD n’est pas insérée, puis de refaire la même manipulation après l’avoir inséré et de comparer les résultats.

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 14G 4.0G 78% /
udev 10M 0 10M 0% /dev
tmpfs 766M 9.3M 756M 2% /run
tmpfs 1.9G 92K 1.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda5 433G 117G 294G 29% /home
tmpfs 383M 4.0K 383M 1% /run/user/118
tmpfs 383M 20K 383M 1% /run/user/1000
/dev/sdb1 60M 20M 41M 34% /media/matakasi/boot
 /dev/sdb2 7.2G 2.5G 4.5G 36% /media/matakasi/c7f58a52-6b71-4cea-9338-65f3b8af27bf

Ici, les deux dernières lignes se sont ajoutées. De ce fait, ma carte se trouve dans dans la partition /dev/sdb.

On peut avoir les mêmes résultats avec la commande fdisk, à la différence qu’il faut être un super utilisateur pour pouvoir la lancer la commande.

$ sudo fdisk -l

Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 24575 20480 10M Linux filesystem
/dev/sda3 24576 39282687 39258112 18.7G Linux filesystem
/dev/sda4 39282688 55492607 16209920 7.7G Linux swap
/dev/sda5 55492608 976771071 921278464 439.3G Linux filesystem

Device Boot Start End Sectors Size Id Type
/dev/sdb1 8192 131071 122880 60M c W95 FAT32 (LBA)
 /dev/sdb2 131072 15523839 15392768 7.3G 83 Linux

Ceux qui ont acheté leurs raspberry avec la carte SD de 8Go, devraient avoir NOOB préinstallé dessus. Si c’est le cas, vous devriez avoir comme point de montage, pareil à la photo ci-dessous.

https://linuxintosh.files.wordpress.com/2015/07/003.jpg?w=545

Une fois que vous avez identifié la carte SD, démontez ensuite toutes les partitions concernées avec la commande umount. Ici, j’ai deux partition dans /dev/sdb (/dev/sdb1 et /dev/sdb2).

$ sudo umount /dev/sdb1
$ sudo umount /dev/sdb2

Vous pouvez toujours vérifier que tous les points de montages de la carte SD ont bien été démontés. Si vous avec déjà NOOB préinstallé, il vous faut donc démonter de /dev/sdb1 à /dev/sdb6.

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 14G 4.0G 78% /
udev 10M 0 10M 0% /dev
tmpfs 766M 9.3M 756M 2% /run
tmpfs 1.9G 92K 1.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda5 433G 117G 294G 29% /home
tmpfs 383M 4.0K 383M 1% /run/user/118
tmpfs 383M 20K 383M 1% /run/user/1000
$

Placez vous ensuite dans le répertoire contenant l’image raspbian. Ici, j’ai téléchargé la version Lite.

$ls
2015-11-21-raspbian-jessie-lite.img

Maintenant, copier l’image du raspbian téléchargée, vers la carte SD. Pour rappel, ma carte SD se trouve sur la partition /dev/sdb. Il faut que vous adaptez la commande ci-dessous par rapport à l’emplacement de votre carte, qui peut ne pas se trouver forcement dans /dev/sdb.

La commande par défaut pour copier une image étant dd, cependant je préfère la commande dcfldd qui indique l’avancement de la copie contrairement à dd.

$ sudo apt install dcfldd
$ sudo dcfldd if=2015-11-21-raspbian-jessie-lite.img of=/dev/sdb bs=1M
1280 blocks (1280Mb) written.
1326+0 records in
1326+0 records out
$sync

II. Configuration du Raspbian

Une fois l’installation terminée, vous pouvez insérer la carte SD dans le lecteur du Raspberry Pi, puis brancher ce dernier à un moniteur (ou écran télé avec prise HDMI). Une fois le Raspberry pi lancé, l’identifiant par défaut pour s’authentifier est pi, avec pour mot de passe raspberry.

raspberrypi login: pi
password: raspberry

Ne paniquez pas s’il n’y a pas d’interface graphique, puisqu’on va en installer un, un peu plus tard.

Il vient ensuite la partie de configuration du réseau. Si vous taper « ip add show », vous devriez avoir une adresse IP de type APIPA, c’est à dire, une adresse IP qui commence par 169.254.X.X. C’est l’adresse IP assignée automatiquement à tout ordinateur qui n’a pas pu récupérer une adresse du serveur DHCP.

De ce fait, il faudrait assigner une adresse ip statique, de préférence pour les serveurs, à notre Raspberry pi. Je propose de garder les configuration dans /etc/network/interfaces, telle qu’elles.

$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

# iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
$

Notez bien que j’ai commenté la ligne « iface eth0 inet manual »!!

Ensuite, de créer un nouveau fichier /etc/network/interfaces.d/eth0, avec les informations qu’on souhaite lui apporter. Je vais en profiter de ce chapitre pour vous faire découvrir une autre façon de créer un fichier et d’y ajouter des informations dedans.

Si vous avez des doutes sur le comment configurer une interface statique, je vous renvoie à la page officielle de debian et de ubuntu.

$ sudo cat >  /etc/network/interfaces.d/eth0 << eof
> auto eth0
>
> iface eth0 inet static
>     address 172.16.1.16
>      netmask 255.255.255.0
>      gateway 172.16.1.1
> eof

Redémarrer ensuite l’interface eth0.

# ifdown eth0

# ifup eth0

Comme vous pouvez le constater, je n’ai pas rajouté d’adresse DNS dans ce fichier. Pour ce faire, il y a plusieurs méthode, mais je préfère ne pas utiliser l’outil resolvconf, qui peut être installé à partir du dépôt de Debian. Par contre, je vais mettre à jour le fichier /etc/resolv.conf en y ajouter le ou les adresses des serveurs DNS. Par contre, cette option ne permet pas de garder les informations du fichier après redémarrage du Raspberry Pi à cause d’une mise à jour dymanique attendu de l’application resolvconf, qui n’arrivera jamais vu qu’on ne l’a pas installé. Il faut donc bloquer cette mise-à-jour en utilisant la commande chattr.

L’option +i de cette commande désactive la mise-à-jour, par contre l’option -i fait l’inverse.

# vi /etc/resolv.conf
# Generated by resolvconf
nameserver 8.8.8.8
nameserver 8.8.4.4

# chattr +i /etc/resolv.conf 

Suite à l’application de cette commande, le fichier se trouve en mode lecture uniquement.

# vi /etc/resolv.conf
# Generated by resolvconf
nameserver 8.8.8.8
nameserver 8.8.4.4
"/etc/resolv.conf" [readonly] 3 lines, 64 characters

Je vous propose ensuite d’effectuer les mises à jour de votre système et d’installer VIM.

$ sudo apt update
$ sudo apt upgrade

$ sudo apt install vim

Accéder à l’interface de configuration votre raspberry pour effectuer les manipulations suivantes:

$ sudo raspi-config
  1. Utiliser tout l’espace de la carte SD (la commande dd ne monte que la taille de l’image raspbian). Par défaut, l’espace disponible et utilisée sur votre carte est de même taille que l’image de votre raspbian. Ici, sur une carte de 8Go, l’espace disponible n’est que de 1,3Go
    pi@raspberrypi:~ $ df -h
    Filesystem Size Used Avail Use% Mounted on
     /dev/root 1.3G 1.1G 160M 87% /
     devtmpfs 459M 0 459M 0% /dev
     tmpfs 463M 0 463M 0% /dev/shm
     tmpfs 463M 12M 451M 3% /run
     tmpfs 5.0M 4.0K 5.0M 1% /run/lock
     tmpfs 463M 0 463M 0% /sys/fs/cgroup
     /dev/mmcblk0p1 60M 20M 41M 34% /boot

    Sélectionner “Expand Filesystem”, puis la taille du disque sera mise a jour après redémarrage

  2. Modifier le mot de passe de l’utilisateur pi, qui est l’utilisateur par defaut
  3. Activer le SSH sur le raspberry pi, si ce n’est pas déjà fait. Il faut aller dans “Advanced Options>SSH>Enable”
  4. Optionnellement, vous pouvez installer le paquet XRDP, pour l’accès en RDP vers le raspberry.
    $ sudo apt install xrdp
  5. Redémarrer le système:
    $ sudo reboot

III. Installation de Mate sure un Raspbian

L’installation d’une interface graphique n’est pas une priorité pour moi, vu que je vais créer un serveur owncloud. Mais pour curiosite, je vais le faire quand même avec l’aide de cet article.

Récupérer l’adresse ip de votre RPi avec la commande

$ ip add show

Puis accéder en SSH ou avec Remmina installé à partir d’un ordinateur distant, vers le RPi. Si vous n’y avez pas accès, pinger le RPi sinon, vérifier que votre ordinatuer et le RPi sont sur le même réseau.

ordinateur$ ssh pi@172.16.1.16

Une fois connectée à votre RPi, effectuer une petite vérification avant d’installer quoi que ce soit:

pi@raspberrypi:~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.2G 1.1G 5.9G 15% /
devtmpfs 459M 0 459M 0% /dev
tmpfs 463M 0 463M 0% /dev/shm
tmpfs 463M 6.2M 457M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 463M 0 463M 0% /sys/fs/cgroup
/dev/mmcblk0p1 60M 20M 41M 34% /boot

Ici, j’ai bien les 8Go d’espace de ma carte SD. Si vous vous lancer dans l’installation de Mate ou d’un autre programme qui nécessite beaucoup d’espace, alors que vous n’en avez pas assez, vous risquez d’avoir quelques soucis.

Maintenant qu’on est sur d’avoir assez d’espace, on peut commencer l’installation de Mate.

pi@raspberrypi:~ $ echo "deb http://archive.raspbian.org/mate jessie main" |sudo tee -a /etc/apt/sources.list.d/mate.list

pi@raspberrypi:~ $ cat /etc/apt/sources.list.d/mate.list
deb http://archive.raspbian.org/mate jessie main

pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt upgrade
pi@raspberrypi:~ $ sudo apt install mate-core mate-desktop-environment

pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt lightdm

Une fois notre DE (environement de bureau) installé, je vais changer la configuration du RPi pour l’obliger à se lancer en mode console à chaque démarrage. Pour se faire, lancer encore une fois la commande:

$ sudo raspi-config

Dans boot Options, sélectionner Console Autologin. N’ayez crainte, le RPi restera toujours joignable en RDP sur lequel on pourra avoir l’environement de bureau récemment installé.

Si vous êtes satisfait de votre configuration sur le RPi, je vous recommande vivement d’effectuer une copie de votre image, dans le but de le cloner sur un autre appareil, ou juste commeune image de sauvegarde à réutiliser plus tard.

Raspian en version Lite est assez dépourvu de plusieurs applications. Ce n’est pas très mauvais en soit, puisqu’il ne vous reste plus qu’à installer ce qui vous intéresse. Entre autre, je vous conseille d’installer vim et iceweasel.

IV. Sauvegarde/Clone de la configuration

Comme précédement, dans un premier temps, repérer la partition où est montée la carte SD, puis démontez toutes les partitions dessus.

$ sudo umount /dev/sdb1
$ sudo umount /dev/sdb2

Placer vous dans un repértoire de votre ordinateur, dans lequel vous souhaitez récupérer l’image du disque. Ici, j’ai créer un dossier Backup,

$ cd ~/Backup

Puis lancer la commande:

$ sudo dd if=/dev/sdb of=sd.img bs=4M

ou encore

$ sudo dcfldd if=/dev/sdb of=sd.img bs=4M

Faites attention aux options IF (Input File), qui est la source, et OF (Output File), qui est la destination. La valeur de dd n’a pas de grande importance, que ce soit 512k, 1M ou 4M. Plus cette valeur est grande, plus la copie est rapide, mais avec des risques.

Référence:

Installing Operating System Images on Linux
RPi Easy SD Card Setup

I. Cross-Compilation: Création du noyau

Tentative d’installation d’un Debian sur un serveur NAS Buffalo LS-XL

Il y a quatre étapes pour l’installation d’un système Debian sur un serveur NAS Buffalo LS-XL. Je précise que j’utilise aussi Debian sur le système hôte.

Dans un premier temps, il faut créer deux modules, un noyau et un initramfs (ou initrd), pour pouvoir démarrer le serveur NAS avec nos propres configurations. Ceux installés sur le serveur ne nous permet pas d’installer un autre système d’exploitation que celui livré par défaut.

Ensuite il nous faut un serveur TFTP pour y placer tout ce dont on a besoin pour l’amorçage du serveur à partir du réseau. Bien entendu, il y aura besoin d’un système hôte pour accéder à distance au contenu du serveur, et y installer le système d’exploitation.

En dernier, il nous faut de nouveau créer un nouveau noyau pour pouvoir commencer cette fois ci, l’installation de Debian sur le serveur NAS puisqu’il n’y en a pas de noyau sur mesure pour les serveurs LS-XL sur le site officiel de Debian.

Avant de commencer les manipulations, je vous propose de lire entièrement cet article, puis de comprendre ce qu’il faut faire et ensuite. Les étapes intermédiaires, comme par exemple accéder à un dossier, ne seraient pas toujours affichés dans la liste des commandes à taper. Cependant, pour vous aider à vous situer dans les différents répertoires, j’ai placé leurs noms avant chaque commande (ex. /opt/nasbuild# ). Le dièse “#” implique que les commandes doivent être effectuées en mode root.

Je tiens à préciser qu’on ne partira pas d’un construction d’un noyau à partir de rien. Le noyau sur lequel on va se baser serait la version 3.3.4 disponible sur le site officiel de Buffalo, et qui devrait être compatible avec les serveurs LS-XL.

I. Cross-Compilation: compilation du noyau

Dans cet article, je vais parler de la préparation d’un noyau linux compatible ARM9, à lancer lors du démarrage du serveur NAS.

Avant de parler de cross-compilation, il faut comprendre ce que c’est qu’une compilation. Si je peux le résumer ainsi, une compilation est le fait de transformer un langage compréhensible par l’homme en un langage compréhensible par une machine, en utilisant un Compilateur. Un compilateur transforme les codes sources en codes exécutables spécifique à une machine.

On parle de cross-compilation quand la machine cible, celle qui va recevoir les instructions de compilation, n’a pas la même architecture que la machine hôte, celle sur laquelle vous effectuez la compilation. Ici, je vais compiler un noyaux linux à partir d’un ordinateur MAC Intel (hôte), avec la version 3.3.4 du noyau linux, pour architecture ARM.

Dans ce qui suit, on va plutôt parler de Toolchain (chaîne de compilation), dont le compilateur n’en est qu’un élément.

Etape 1: Téléchargement de tous les tarballs nécessaire à la compilation

Les logiciels tierces, c’est à dire ceux qui ne font pas parties des logiciels par défaut dans Debian, devraient être placés dans /opt.

Note: J’ai du rajouter un tiret devant les liens en http pour éviter d’avoir des hyperliens dans les commandes à exécuter.

# cd /opt
/opt# mkdir nasbuild
/opt/nasbuild# wget _http://buffalo.jp/php/los.php?to=gpl/storage/ls-x/165/linux-3.3.4.tar.gz -O linux-3.3.4.tar.gz

Le noyaux linux fourni par Buffalo ne peut démarrer qu’avec le cross-compilateur gcc CodeSourcery arm-2007q3.

/opt/nasbuild# wget _http://downloads.nas-central.org/LSPro_ARM9/DevelopmentTools/CrossToolchains/CodeSourcery/arm-2007q3-53-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

Téléchargement de Mkimage, qui est un utilitaire pour nous permettre de créer les images du noyau et de l’initrd dont on aura besoin pour la suite. On en reparlera dans un autre chapitre.

/opt/nasbuild# wget _http://downloads.nas-central.org/LSPro_ARM9/DevelopmentTools/CrossToolchains/mkimage

Etape 2: Préparation de l’environnement

Préparer l’environement en installant le compilateur et le mkimage.

/opt/nasbuild# tar -jxvf arm-2007q3-53-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

/opt/nasbuild# cd arm-2007q3

/opt/nasbuild/arm-2007q3# ls -a
. .. arm-none-eabi bin include lib libexec share

/opt/nasbuild/arm-2007q3# cd bin

/opt/nasbuild/arm-2007q3/bin# cp ../../mkimage .

/opt/nasbuild/arm-2007q3/bin# chmod a+x mkimage

Copier mkimage dans /bin, rendez ce fichier exécutable, puis ajouter à la variable PATH le chemin pour y accéder.

/opt/nasbuild/arm-2007q3/bin# ls
arm-none-eabi-addr2line arm-none-eabi-gcov arm-none-eabi-readelf
arm-none-eabi-ar arm-none-eabi-gdb arm-none-eabi-run
arm-none-eabi-as arm-none-eabi-gdbtui arm-none-eabi-size
arm-none-eabi-c++ arm-none-eabi-gprof arm-none-eabi-sprite
arm-none-eabi-c++filt arm-none-eabi-ld arm-none-eabi-strings
arm-none-eabi-cpp arm-none-eabi-nm arm-none-eabi-strip
arm-none-eabi-g++ arm-none-eabi-objcopy mkimage
arm-none-eabi-gcc arm-none-eabi-objdump
arm-none-eabi-gcc-4.2.1 arm-none-eabi-ranlib

/opt/nasbuild/arm-2007q3/bin# echo “$PATH”
“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”

/opt/nasbuild/arm-2007q3/bin# export PATH=$PATH:`pwd`

On peut avoir le même résultat avec la commande: export PATH=$PATH:$PWD.

/opt/nasbuild/arm-2007q3/bin# echo “$PATH”
“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/nasbuild/arm-2007q3/bin

Vérifier que l’on peut lancer n’importe quelle commande située de /opt/nasbuild/arm-2007q3/bin, ceci afin de nous assurer qu’on peut lancer directement la commande mkimage plus tard dans l’article.

# arm-none-eabi-gcc –version
arm-none-eabi-gcc (CodeSourcery Sourcery G++ Lite 2007q3-53) 4.2.1
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Note: il y a deux tirets « — » devant « version ».

/opt/nasbuild# wget http://buffalo.jp/php/los.php?to=gpl/storage/ls-x/165/linux-3.3.4.tar.gz -O linux-3.3.4.tar.gz

/opt/nasbuild# tar -zxvf linux-3.3.4.tar.gz

Etape 3: Compilation du Noyau

C’est le moment de créer l’image de boot (uImage) qu’on utilisera pour démarrer le serveur NAS via le réseau.

/opt/nasbuild# cd linux-3.3.4

Dans le fichier Makefile, remplacer arm-none-linux-gnueabi- par le préfixe du compilateur arm-2007q3-53-arm-none-eabi-i686-pc-linux-gnu.tar.bz2, puis vérifier bien que “arm” est la valeur associée à ARCH.

/opt/nasbuild/linux-3.3.4# vim Makefile
!——–Tronquée————!
ARCH ?= arm
#CROSS_COMPILE ?= arm-none-linux-gnueabi-
CROSS_COMPILE ?= arm-none-eabi-
!——–Tronquée————!

Comme valeur associée au CROSS_COMPILE, on peut aussi lui donner le chemin absolue vers le toolchain ARM Linux comme suit:

CROSS_COMPILE ?= /opt/nasbuild/linux-3.3.4/bin/arm-none-eabi-

Importer, puis si nécessaire éditer les scripts Configure (./config). Deux options pour le faire:

1. Copier le fichier de configuration du noyau buffalo_nas_fw_88f6281.config dans le dossier /opt/nasbuild/linux-3.3.4.

/opt/nasbuild/linux-3.3.4# ls buffalo/configs/
buffalo_hswdhtgl_arm_100.config buffalo_nas_fw_88f6281.config
buffalo_lsgl_arm_100.config buffalo_nas_fw_88f6281_tsxel.config
buffalo_lsgl_arm_101.config buffalo_nas_fw_atom_d510_101.config
buffalo_lsgl_arm_102.config buffalo_nas_fw_atom_d510.config
buffalo_lsgl_hs_arm_100.config buffalo_nas_fw_kiri.config
buffalo_lsqgl_arm_200.config buffalo_tshtgl_arm_100.config
buffalo_lswsgl_arm_100.config buffalo_tshtgl_arm_110.config
buffalo_lswsgl_arm_200.config buffalo_tsxl_arm_100.config
buffalo_lswtgl_arm_100.config kirkwood.config
buffalo_lswtgl_arm_200.config marvell_config100.config
buffalo_lswwn_arm_200.config marvell_lsgl_100.config
buffalo_nas_fw_200.config marvell_tshtgl_100.config

Le choix du fichier de configuration buffalo_nass_fw_88f6281 n’est pas anodin. Les deux processeurs Marvell Kirkwood 88F6192 (celui de notre serveur NAS) et 88F6281, sont de la même famille et ont pratiquement les mêmes caractéristiques.

/opt/nasbuild/linux-3.3.4# cp buffalo/configs/buffalo_nas_fw_88f6281.config .config
/opt/nasbuild/linux-3.3.4# vim .config

Ci-dessous les informations qui devraient être dans le script configure, en rouge le plus important.

#CONFIG_CMDLINE
CONFIG_CMDLINE= »console=ttyS0,115200 root=/dev/ram0 panic=5 lowmem=1″
# CONFIG_CMDLINE_FROM_BOOTLOADER is not set
# CONFIG_CMDLINE_EXTEND is not set
CONFIG_CMDLINE_FORCE=y

#CONFIG_DEVTMPFS
CONFIG_DEVTMPFS=y

#CONFIG_PHONE
# CONFIG_PHONE is not set

#CONFIG_LEGACY_PTYS
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=16

#CONFIG_IP_ROUTE_CLASSID
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_ROUTE_CLASSID=y

#CONFIG_HID_SUPPORT
# CONFIG_HID_SUPPORT is not set

#CONFIG_USB_SUPPORT
# CONFIG_USB_SUPPORT is not set

Metter en commentaire tout ce qui suit, c’est à dire, aux lignes contenant CONFIG_USB, il faut y ajouter un # devant:

# CONFIG_USB_

#CONFIG_RTC_CLASS
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE= »rtc0″

CONFIG_RTC_DRV_MV=y

Mettez en commentaire les autres lignes contenant CONFIG_RTC_* , et même ceux cités ci-dessus, si vous n’en voyez pas l’utilité.

En option, vous pouvez aussi ajouter les informations ci-dessous dans le même ficher .config.

#CONFIG_TEXTSEARCH
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m

2. Une autre option, au lieu d’éditer le fichier buffalo_nas_fw_88f6281.config, serait d’importer les scripts Configure disponibles ici (lsxl-install.config) ou (kernel_.config_for_ls-xl.txt ).

/opt/nasbuild/linux-3.3.4# mv lsxl-install.config .config
/opt/nasbuild/linux-3.3.4# make oldconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf –oldconfig Kconfig
#
# configuration written to .config
#

La commande MAKE s’utilise généralement avec l’option -jN (N = nombres de processeurs/core sur la machine hôte x 2), afin d’optimiser la compilation en utilisant tous les processeurs de la machine hôte.

La commande LSPCU permet d’afficher le nombre de processeurs présent sur l’ordinateur (CPU = 4). On a donc, N = 8 (4CPU x 2).

$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Model name: Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz
Stepping: 5
CPU MHz: 1197.000
CPU max MHz: 2395.0000
CPU min MHz: 1197.0000
BogoMIPS: 4788.41
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3

/opt/nasbuild/linux-3.3.4# make -j8 uImage
(durée de la compilation: 3 minutes)

uImage est l’image du noyau dans un format compatible u-boot.

/opt/nasbuild/linux-3.3.4# make -j8 modules
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[1]: ‘include/generated/mach-types.h’ is up to date.
CALL scripts/checksyscalls.sh
!——–Tronquée————!
Building modules, stage 2.
MODPOST 67 modules
!——–Tronquée————!
(durée de la compilation: 1 minute)

Ces deux dernières commandes permettent de compiler le noyau ainsi que ces modules, et que l’on peut fusionner en une seule commande “make -j8 uImage modules”.

Le noyau et module nouvellement créés, sont maintenant disponible dans /opt/nasbuild/linux-3.3.4/arch/arm/boot.

/opt# tree -L 3
.
├── nasbuild
│   ├── arm-2007q3
│   │   ├── arm-none-eabi
│   │   ├── bin
│   │   ├── include
│   │   ├── lib
│   │   ├── libexec
│   │   └── share
│   ├── arm-2007q3-53-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
│   ├── linux-3.3.4
│   │   ├── arch
│   │   ├── binaries
│   │   ├── block
│   │   ├── buffalo
│   │   ├── cesa
│   │   ├── COPYING
│   │   ├── CREDITS
│   │   ├── crypto
│   │   ├── Documentation
│   │   ├── drivers
│   │   ├── firmware
│   │   ├── fs
│   │   ├── include
│   │   ├── init
│   │   ├── ipc
│   │   ├── Kbuild
│   │   ├── Kconfig
│   │   ├── kernel
│   │   ├── lib
│   │   ├── LspReadme.txt
│   │   ├── LspReleaseNotes_KW.txt
│   │   ├── MAINTAINERS
│   │   ├── Makefile
│   │   ├── Makefile.88f6281
│   │   ├── Makefile.atom_d510
│   │   ├── Makefile.mv78100
│   │   ├── mm
│   │   ├── modules.builtin
│   │   ├── modules.order
│   │   ├── Module.symvers
│   │   ├── net
│   │   ├── README
│   │   ├── REPORTING-BUGS
│   │   ├── samples
│   │   ├── scripts
│   │   ├── security
│   │   ├── sound
│   │   ├── System.map
│   │   ├── tools
│   │   ├── usr
│   │   ├── virt
│   │   ├── vmlinux
│   │   └── vmlinux.o
│   ├── linux-3.3.4.tar.gz
│   └── mkimage

La prochaine étape serait de configurer initrd (initramfs) afin d’avoir les pilotes nécessaire au démarrage du serveur NAS.

 Résumé des différentes étapes de la création du Noyau

Etape 1: Téléchargement de tous les tarballs nécessaire à la compilation

/opt/nasbuild# wget _http://buffalo.jp/php/los.php?to=gpl/storage/ls-x/165/linux-3.3.4.tar.gz -O linux-3.3.4.tar.gz

/opt/nasbuild# wget _http://downloads.nas-central.org/LSPro_ARM9/DevelopmentTools/CrossToolchains/CodeSourcery/arm-2007q3-53-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

/opt/nasbuild# wget _http://downloads.nas-central.org/LSPro_ARM9/DevelopmentTools/CrossToolchains/mkimage

Etape 2: Préparation de l’environnement

/opt/nasbuild# tar -jxvf arm-2007q3-53-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

/opt/nasbuild/arm-2007q3/bin# cp ../../mkimage .

/opt/nasbuild/arm-2007q3# chmod a+x mkimage

/opt/nasbuild/arm-2007q3# export PATH=$PATH:`pwd`

/opt/nasbuild# wget _http://buffalo.jp/php/los.php?to=gpl/storage/ls-x/165/linux-3.3.4.tar.gz -O linux-3.3.4.tar.gz

/opt/nasbuild# tar -zxvf linux-3.3.4.tar.gz

Etape 3: Compilation du Noyau

/opt/nasbuild/linux-3.3.4# vim Makefile
!——–Tronquée————!
ARCH ?= arm
#CROSS_COMPILE ?= arm-none-linux-gnueabi-
CROSS_COMPILE ?= arm-none-eabi-
!——–Tronquée————!

Copier les scripts Configure disponibles ici (lsxl-install.config) ou (kernel_.config_for_ls-xl.txt) dans .config.

/opt/nasbuild/linux-3.3.4# mv lsxl-install.config .config
/opt/nasbuild/linux-3.3.4# make oldconfig

/opt/nasbuild/linux-3.3.4# make -j8 uImage modules

Annexe: commande MAKE

Ci-dessous, en non-grisée, la liste des options utilisées pour construire notre noyau.

# make help
Cleaning targets:
clean – Remove most generated files but keep the config and
enough build support to build external modules
mrproper – Remove all generated files + config + various backup files
distclean – mrproper + remove editor backup and patch files

Configuration targets:
config – Update current config utilising a line-oriented program
nconfig – Update current config utilising a ncurses menu based program
menuconfig – Update current config utilising a menu based program
xconfig – Update current config utilising a QT based front-end
gconfig – Update current config utilising a GTK based front-end
oldconfig – Update current config utilising a provided .config as base
localmodconfig – Update current config disabling modules not loaded
localyesconfig – Update current config converting local mods to core
silentoldconfig – Same as oldconfig, but quietly, additionally update deps
defconfig – New config with default from ARCH supplied defconfig
savedefconfig – Save current config as ./defconfig (minimal config)
allnoconfig – New config where all options are answered with no
allyesconfig – New config where all options are accepted with yes
allmodconfig – New config selecting modules when possible
alldefconfig – New config with all symbols set to default
randconfig – New config with random answer to all options
listnewconfig – List new options
oldnoconfig – Same as silentoldconfig but set new symbols to n (unset)

Other generic targets:
all – Build all targets marked with [*]
* vmlinux – Build the bare kernel
* modules – Build all modules
modules_install – Install all modules to INSTALL_MOD_PATH (default: /)
firmware_install- Install all firmware to INSTALL_FW_PATH
(default: $(INSTALL_MOD_PATH)/lib/firmware)
dir/ – Build all files in dir and below
dir/file.[oisS] – Build specified target only
dir/file.lst – Build specified mixed source/assembly target only
(requires a recent binutils and recent build (System.map))
dir/file.ko – Build module including final link
modules_prepare – Set up for building external modules
tags/TAGS – Generate tags file for editors
cscope – Generate cscope index
gtags – Generate GNU GLOBAL index
kernelrelease – Output the release version string
kernelversion – Output the version stored in Makefile
headers_install – Install sanitised kernel headers to INSTALL_HDR_PATH
(default: /opt/nasbuild/linux-3.3.4/usr)
!——–Tronquée————!
Architecture specific targets (arm):
* zImage – Compressed kernel image (arch/arm/boot/zImage)
Image – Uncompressed kernel image (arch/arm/boot/Image)
* xipImage – XIP kernel image, if configured (arch/arm/boot/xipImage)
uImage – U-Boot wrapped zImage
bootpImage – Combined zImage and initial RAM disk
(supply initrd image via make variable INITRD=)
dtbs – Build device tree blobs for enabled boards
install – Install uncompressed kernel
zinstall – Install compressed kernel
uinstall – Install U-Boot wrapped compressed kernel
Install using (your) ~/bin/installkernel or
(distribution) /sbin/installkernel or
install to $(INSTALL_PATH) and run lilo
!——–Tronquée————!

Si vous avez oublié de rajouter au $PATH le chemin vers les binaires que vous avez crées, vous allez avoir un messages

# make help
make: arm-none-eabi-gcc: Command not found

Notes:

Kernel Compilation
Introduction to cross-compiling for Linux
Linux Kernel in a Nutshell
Linux Kernel Driver DataBase
Compiling a new Kernel (and Reiser4)Debian : Compiler un noyau avec « kernel-package »
Noyau Linux, modules, et initrd

Utilisation du Wifi sans Network Manager

Il est peu courant, voire même impensable, le fait de s’en passer d’un outil comme Network Manager sur des ordinateurs portables. J’avoue que ce n’est pas très pratique, surtout lorsqu’on se déplace régulièrement. L’utilité de vouloir s’en passer de cet outil, ou de tout autre outil graphic avec les mêmes fonctionnalitées, se limite donc aux ordinateurs du bureau. Au niveau sécurité, je ne vois pas l’intérêt d’utiliser le wifi sur un serveur, surtout si ce dernier est en production. Par contre, sur un serveur utilisé en lab, je peux encore comprendre.

Avant d’aller plus loin, j’espère que vous avez installé les pilotes pour votre carte wifi. Si vous ne savez pas quel est le modèle de votre carte, vous « lspci » est la commande à connaitre.

$ lspci | grep Network
03:00.0 Network controller [0280]: Broadcom Corporation BCM43224 802.11a/b/g/n [14e4:4353] (rev 01)

La commande « /sbin/iw dev » (ou « sudo iw dev »), vous donnera l’information sur le nom de l’interface wifi à configurer sur votre ordinateur.

$ sudo iw dev
phy#0
Interface wlan0
ifindex 3
wdev 0x1
addr c8:xx:xx:xx:xx:95
type managed

1. Installation du packet wpasupplicant

$ aptitude search wpasupplicant
i wpasupplicant – client support for WPA and WPA2 (IEEE 802.11i)
p wpasupplicant:i386 – client support for WPA and WPA2 (IEEE 802.11i)

Le « i » devant « wpasupplicant », indique que le packet est déjà installé. Si ce n’est pas le cas, vous pouvez toujours l’installer avec la commande

$ apt-get install wpasupplicant

Ce paquet contient ce qu’il faut pour démarrer ou arrêter une interface (ifup <interface_wifi>, ifdown <interface_wifi> ou encore ifquery <interface_wifi>). Un peu plus loin dans ce chapitre, je vais aussi vous montrer comment générer une clef en hexadécimal en utilisant cet outil, pour ne pas enregistrer le mot de passe du wifi en clair dans votre fichier de configuration.

Bref, pour faire très simple sans rentrer dans les détails, cet outil va permettre à un utilisateur de se connecter sur un réseau sans fil, à partir de moment où on arrive à s’authentifier.

2. Vérification de l’état de la carte wifi

$ ip addr show wlan0
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether c8:xx:xx:xx:xx:95 brd ff:ff:ff:ff:ff:ff

La commande « ip addr » peut se simplifier par « ip a », qui nous donnera exactement le même résultat.

$ ip link show wlan0
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether c8:xx:xx:xx:xx:95 brd ff:ff:ff:ff:ff:ff

Les commandes « ip addr » et « ip link » peuvent s’utiliser avec des options comme « show <nom de l’interface> », pour afficher juste ce qu’il nous faut comme information. Ce sont des commandes iproute2, auquelles il faut commencer à s’habituer.

Une autre commande, qui nous servira plus tard pour vérifier si on est bien connecté au wifi.

# iwconfig wlan0
wlan0 IEEE 802.11abgn ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=19 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off

3. Configuration manuelle de l’accès au wifi

Dans un premier temps, il faut arrêter Network Manager.

# /etc/init.d/network-manager stop

Sinon, vous pouvez aussi le supprimer définitivement.

Créer ensuite un fichier pour la configuration de l’interface wifi. Personnellement, je préfere un fichier séparé de celui du /etc/network/interfaces.

# touch /etc/network/interfaces/wlan0
# chmod 600 /etc/network/interfaces.d/wlan0

L’intérêt de la modification des droits d’accès à ce fichier, est de ne pas afficher votre clé wifi aux utilisateurs autre que Root.

Maintenant, on peut commencer le scan puis d’ajouter les informations nécessaires pour se connecter au réseau.

# iwlist scan
eth0 Interface doesn’t support scanning.
wlan0 Interface doesn’t support scanning : Network is down
lo Interface doesn’t support scanning.

La tentative de scan ne peut qu’échouer, puisque l’interface wlan0 n’est pas activée. Pour l’activer,

# ip link set wlan0 up

Si, avec cette commande, vous n’arrivez toujours pas à scanner votre réseau, passer à la commande suivante.

# ifup wlan0

On peut refaire un test de scan du réseau.

# iwlist scan
eth0 Interface doesn’t support scanning.
wlan0 Scan completed :
Cell 01 – Address: E8:XX:XX:XX:XX:AE
Channel:1
Frequency:2.412 GHz (Channel 1)
Quality=42/70 Signal level=-68 dBm
Encryption key:on
ESSID: »Mon_reseau_wifi« 
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s
Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
36 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
!————————!
Cell 02 – Address: EA:40:F2:A0:70:A0
Channel:1
Frequency:2.412 GHz (Channel 1)
!————————!

Une fois que vous avez repérer votre réseau wifi, générer un clé hexadécimale à partir du mot de passe pour y accéder. Il n’est pas nécessaire de copier la sortie de la commande « wpa_passphrase » dans un quelconque fichier, sauf pour la valeur du PSK. Généralement, sur certains blogs, on vous propose de copier justement ces informations dans le fichier /etc/wpa_supplicant.conf, mais cela affichera le mot de passe de votre wifi en clair.

$ wpa_passphrase Mon_reseau_wifi Mon_mot_de_passe_wifi
network={
ssid= »Mon_reseau_wifi« 
#psk= »Mon_mot_de_passe_wifi« 
psk=567xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx920
}

4. Configurer le fichier wlan0

Vous pouvez utiliser n’importe quel outil pour configurer ce fichier, mais je préfère utiliser VIM. Ci-dessous un outil que j’ai essayé par curiosité, mais qui ne fait rien de plus que de vous laisser le choix de l’éditeur de fichier. Par défaut, on vous propose nano.

# sensible-editor /etc/network/interfaces.d/wlan0
Select an editor. To change later, run ‘select-editor’.
1. /bin/nano <—- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
Choose 1-3 [1]: 2

# The wireless network interface with dhcp
auto wlan0
iface wlan0 inet dhcp
wpa-ssid Mon_reseau_wifi
wpa-psk 567xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx920

Copier les informations à partir de « auto wlan0 » comme ci-dessus, dans votre fichier wlan0, et avec les bonnes informations.

5. Tester la connection à internet

# ping google.com
ping: unknown host google.com

$ ip link show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether c8:xx:xx:xx:xx:95 brd ff:ff:ff:ff:ff:ff

# ifdown wlan0
Killed old client process
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/wlan0/c8:xx:xx:xx:xx:95
Sending on LPF/wlan0/c8:xx:xx:xx:xx:95
Sending on Socket/fallback
DHCPRELEASE on wlan0 to 192.168.1.1 port 67

# ifup wlan0
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/wlan0/c8:xx:xx:xx:xx:95
Sending on LPF/wlan0/c8:xx:xx:xx:xx:95
Sending on Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 7
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 12
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 11
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPOFFER from 192.168.1.1
DHCPACK from 192.168.1.1
bound to 192.168.1.10 — renewal in 1679 seconds.

# iw wlan0 link
Connected to e8:xx:xx:xx:xx:ae (on wlan0)
SSID: Mon_reseau_wifi
freq: 2412
RX: 811158 bytes (5944 packets)
TX: 135869 bytes (1041 packets)
signal: -65 dBm
tx bitrate: 78.0 MBit/s MCS 12

bss flags: short-preamble short-slot-time
dtim period: 0
beacon int: 100

# ping google.com
PING google.com (74.125.24.102) 56(84) bytes of data.
64 bytes from de-in-f102.1e100.net (74.125.24.102): icmp_seq=1 ttl=51 time=14.4 ms
64 bytes from de-in-f102.1e100.net (74.125.24.102): icmp_seq=2 ttl=51 time=13.3 ms
64 bytes from de-in-f102.1e100.net (74.125.24.102): icmp_seq=3 ttl=51 time=16.3 ms
64 bytes from de-in-f102.1e100.net (74.125.24.102): icmp_seq=4 ttl=51 time=14.4 ms
64 bytes from de-in-f102.1e100.net (74.125.24.102): icmp_seq=5 ttl=51 time=13.5 ms
64 bytes from de-in-f102.1e100.net (74.125.24.102): icmp_seq=6 ttl=51 time=15.3 ms
64 bytes from de-in-f102.1e100.net (74.125.24.102): icmp_seq=7 ttl=51 time=13.9 ms
^C
— google.com ping statistics —
7 packets transmitted, 7 received, 0% packet loss, time 6008ms
rtt min/avg/max/mdev = 13.368/14.500/16.382/1.000 ms

$ ip a show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether c8:xx:xx:xx:xx:95 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::cabc:c8ff:fecc:4e95/64 scope link
valid_lft forever preferred_lft forever

Noter que je n’ai pas utiliser /etc/init.d/networking {stop/start/restart}; puisque cette commande redémarre toutes les interfaces sans exeption. Or, ce qui m’intéresse, c’est de ne redémarrer qu’une interface spécifique. De ce fait, le meilleur choix est d’utiliser « {ifdown|ifup} <interface> ».

6. Troubleshoot

Il n’y en a pas beaucoup de commandes à connaître. Ci-dessous un bref résumé des commandes que j’ai le plus utilisées.

ip link
ip link show wlan0

sudo ifconfig -a

iwlist scan

ifdown wlan0
ifup wlan0

iw wlan0 link

dhclient -v -r wlan0
dhclient -v wlan0

7. Les logs

Si jamais vous avez des problèmes de réseau, le mieux c’est de voir ce qui se passe dans les logs. Voir les quelaues exemples ci-dessous:

# ifup wlan0
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/wlan0/c8:xx:xx:xx:xx:95
Sending on LPF/wlan0/c8:xx:xx:xx:xx:95
Sending on Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 7
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 12
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 11
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPOFFER from 192.168.1.1
DHCPACK from 192.168.1.1
bound to 192.168.1.10 — renewal in 1679 seconds.

# cat /var/log/syslog | grep wlan0
Jul 18 08:06:43 nunux kernel: [ 373.279111] IPv6: ADDRCONF(NETDEV_UP): wlan: link is not ready
Jul 18 08:06:44 nunux dhclient: Listening on LPF/wlan0/c8:xx:xx:xx:xx:95
Jul 18 08:06:44 nunux dhclient: Sending on LPF/wlan0/c8:xx:xx:xx:xx:95
Jul 18 08:06:44 nunux dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8
Jul 18 08:06:53 nunux dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 12
Jul 18 08:06:53 nunux wpa_supplicant[3476]: wlan0: CTRL-EVENT-REGDOM-CHANGE init=BEACON_HINT type=UNKNOWN
Jul 18 08:06:55 nunux wpa_supplicant[3476]: wlan0: SME: Trying to authenticate with E8:XX:XX:XX:XX:AE (SSID=’Mon_reseau_wifi‘ freq=2412 MHz)
Jul 18 08:06:55 nunux kernel: [ 385.221724] wlan0: authenticate with E8:XX:XX:XX:XX:AE
Jul 18 08:06:55 nunux kernel: [ 385.231415] wlan0: direct probe to E8:XX:XX:XX:XX:AE (try 1/3)
Jul 18 08:06:55 nunux kernel: [ 385.433241] wlan0: send auth to E8:XX:XX:XX:XX:AE (try 2/3)
Jul 18 08:06:56 nunux wpa_supplicant[3476]: wlan0: Trying to associate with E8:XX:XX:XX:XX:AE (SSID=’Mon_reseau_wifi‘ freq=2412 MHz)
Jul 18 08:06:56 nunux kernel: [ 385.817935] wlan0: authenticated
Jul 18 08:06:56 nunux kernel: [ 385.821490] wlan0: associate with E8:XX:XX:XX:XX:AE (try 1/3)
Jul 18 08:06:56 nunux wpa_supplicant[3476]: wlan0: Associated with E8:XX:XX:XX:XX:AE
Jul 18 08:06:56 nunux kernel: [ 386.376264] wlan0: RX AssocResp from E8:XX:XX:XX:XX:AE (capab=0x411 status=0 aid=1)
Jul 18 08:06:56 nunux kernel: [ 386.376716] wlan0: associated
Jul 18 08:06:56 nunux kernel: [ 386.376751] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Jul 18 08:06:57 nunux wpa_supplicant[3476]: wlan0: WPA: Key negotiation completed with E8:XX:XX:XX:XX:AE [PTK=CCMP GTK=CCMP]
Jul 18 08:06:57 nunux wpa_supplicant[3476]: wlan0: CTRL-EVENT-CONNECTED – Connection to E8:XX:XX:XX:XX:AE completed [id=0 id_str=]
Jul 18 08:06:58 nunux avahi-daemon[2501]: Joining mDNS multicast group on interface wlan0.IPv6 with address fe80::cabc:c8ff:fecc:4e95.
Jul 18 08:06:58 nunux avahi-daemon[2501]: New relevant interface wlan0.IPv6 for mDNS.
Jul 18 08:06:58 nunux avahi-daemon[2501]: Registering new address record for fe80::cabc:c8ff:fecc:4e95 on wlan0.*.
Jul 18 08:07:05 nunux dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 21
Jul 18 08:07:08 nunux dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Jul 18 08:07:12 nunux dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Jul 18 08:07:12 nunux avahi-daemon[2501]: Joining mDNS multicast group on interface wlan0.IPv4 with address 192.168.1.10.
Jul 18 08:07:12 nunux avahi-daemon[2501]: New relevant interface wlan0.IPv4 for mDNS.
Jul 18 08:07:12 nunux avahi-daemon[2501]: Registering new address record for 192.168.1.10 on wlan0.IPv4.
Jul 18 08:08:17 nunux wpa_supplicant[3476]: wlan0: WPA: Group rekeying completed
!——————————!
Jul 18 08:33:59 nunux dhclient: DHCPREQUEST on wlan0 to 192.168.1.1 port 67
Jul 18 08:34:17 nunux wpa_supplicant[3476]: wlan0: WPA: Group rekeying completed with E8:XX:XX:XX:XX:AE [GTK=CCMP]

# dmesg
007

Sources:

How to use a WiFi interface (Debian)
How To Connect To A WPA Wifi Using Command Lines On Debian
Debian Linux Configure Wireless Networking With WPA2
Connect to WiFi network from command line in Linux
How to connect to a WPA/WPA2 WiFi network using Linux command line
WiFi HowTo(Ubuntu)
Network configuration (Debian)
Linux Force DHCP Client (dhclient) to Renew IP Address

Conky

Le fond d’écran de Debian Jessie est très beau. Mais malgré celà, une petite touche de « je-ne-sais-quoi » ne serait pas de trop. C’est pour cela que j’ai installé le paquet Conky.

003

Pour ce faire,

$ sudo apt-get install conky lm-sensors hddtemp

Créez ensuite un fichier caché « .conkyrc », à placer dans le dossier home de l’utilisateur. Ci-dessous mon fichier ~/.conkyrc.

## Conky sample configuration
#

## Create own window instead of using desktop (required in nautilus)
## Own window type:
#own_window_type override
#own_window_type desktop
##’own_window_type normal’ if you want a nice shadow to appear around conky
## ‘own_window_hints below’ Set conky on the bottom of all other applications
## If ‘own_window_transparent no’, you can set the background colour with:
#own_window_colour hotpink
own_window yes
own_window_type desktop
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

## ‘background yes’ if you want Conky to be forked in the background
background yes

## Text
## ‘uppercase yes’ all text will be in uppercase
alignment top_right
font Sans:size=8
uppercase no

## Fiddle with window
use_spacer none
use_xft yes

## X font when Xft is disabled, you can pick one with program xfontsel
#font 5×7
#font 6×10
#font 7×13
#font 8×13
#font 9×15
#font *mintsmild.se*
#font -*-*-*-*-*-*-34-*-*-*-*-*-*-*

## Text alpha when using Xft
## xftfont use example:
#xftfont Bitstream Vera Sans Mono:size=8
#xftfont HandelGotD:size=8
xftfont DejaVu Sans:size=8
xftalpha 0.8
text_buffer_size 2048

## Minimum size of text area
minimum_size 210 5
maximum_width 211

## Update interval in seconds
update_interval 5.0

## This is the number of times Conky will update before quitting
## Set to zero to run forever
total_run_times 0

## Buffers
## Use double buffering (reduces flicker, may not work for everyone)
## ‘no_buffers yes’ Subtract file system buffers from used memory
double_buffer yes
no_buffers yes

## Draw
## ‘draw_outline yes’ amplifies text
## ‘alignment bottom_right’ align the box
# ‘draw_borders yes’ Draw borders around text
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes

## Border
## Stippled borders? Default value seems to be 0
#stippled_borders 3
## Border margins
#border_margin 5
## Border width
#border_width 1

## Default colors and also border colors, ‘grey90 == #E5E5E5’
default_color A4A4A4
default_shade_color black
default_outline_color grey

## Gap between borders of screen and text
# same thing as passing -x at command line
gap_x 12
gap_y 48

## number of cpu/net samples to average
## set to 1 to disable averaging
cpu_avg_samples 2
net_avg_samples 1

## Force UTF8?
## Note that UTF8 support required XFT
override_utf8_locale no

# Add spaces to keep things from moving about? This only affects certain objects
use_spacer none

## Allow for the creation of at least this number of port monitors (if 0 or not set, default is 16)
# min_port_monitors 16

## Allow each port monitor to track at least this many connections (if 0 or not set, default is 256)
# min_port_monitor_connections 256

## Variable is given either in format $variable or in ${variable}. Latter
## allows characters right after the variable and must be used in network
## stuff because of an argument


## Stuff after ‘TEXT’ will be formatted on screen

TEXT
${font Bitstream Charter:bold:size=11}${color #AEB404}Date: ${color }${alignr}${time %B %e, %G}
${color #AEB404}Time: ${color }${alignr}${time %I:%M:%S %P}
${color #AEB404}Weekday: ${color }${alignr}${time %A}
${color #AEB404}Up Time: ${color }${alignr}$uptime
   
${color #AEB404}Processes: ${color }$processes ${alignr}${color #AEB404}Running: ${color }$running_processes

${font Sans:bold:size=8}${color #AEB404}CPU$font$color  ${hr 1}
   $alignc ${color #AEB404}Intel Core i5$color
   ${freq_g 1}GHz ${cpu cpu1}% ${cpubar cpu1}
   ${freq_g 2}GHz ${cpu cpu2}% ${cpubar cpu2}
${freq_g 3}GHz ${cpu cpu3}% ${cpubar cpu3}
${freq_g 4}GHz ${cpu cpu4}% ${cpubar cpu4}
   ${color #AEB404}Load: $color $loadavg
   ${color #AEB404}Top Processes$alignr -PID-  CPU%  MEM%$color
   ${top name 1}$alignr${top pid 1}${top cpu 1}   ${top mem 1}
   ${top name 2}$alignr${top pid 2}${top cpu 2}   ${top mem 2}
   ${top name 3}$alignr${top pid 3}${top cpu 3}   ${top mem 3}
   ${top name 4}$alignr${top pid 4}${top cpu 4}   ${top mem 4}
   ${top name 5}$alignr${top pid 5}${top cpu 5}   ${top mem 5}

${font Sans:bold:size=8}${color #AEB404}RAM$font  $color${hr 1}
   ${color #AEB404}RAM$color $alignc $mem / $memmax $alignr$memperc%
   $membar

${font Sans:bold:size=8}${color #AEB404}HDD$font  $color${hr 1}
   ${color #AEB404}ROOT $color $alignc ${fs_used /} / ${fs_size /} $alignr${fs_used_perc /}%
   ${fs_bar /}
   ${color #AEB404}HOME $color $alignc ${fs_used /home} / ${fs_size /home} $alignr${fs_used_perc /home}%
   ${fs_bar /home}
   ${color #AEB404}SWAP $color $alignc ${swap} / ${swapmax} $alignr${swapperc}%
   ${swapbar}
  ${color #AEB404}HD I/O $color  ${diskiograph 19}

${font Sans:bold:size=8}${color #AEB404}Network$font  $color${hr 1}
   ${color #AEB404}IP: $color${addr wlan0}$alignr
   ${color #AEB404}Down: ${color #A4A4A4}${downspeed wlan0}k/s ${alignr}${color #AEB404}Up: ${color #A4A4A4}${upspeed wlan0}k/s
   ${downspeedgraph wlan0 25,100} ${alignr}${upspeedgraph wlan0 25,100}
   ${color #AEB404}Total: ${color #A4A4A4}${totaldown wlan0} ${alignr}${color #AEB404}Total:  ${color #A4A4A4}${totalup wlan0}
   ${color #AEB404}Inbound: ${color #A4A4A4}${tcp_portmon 1 32767 count}$alignr${color #AEB404}Outbound: ${color #A4A4A4}${tcp_portmon 32768 61000 count}

   ${color #AEB404}IP: $color${addr eth0}$alignr
   ${color #AEB404}Down: ${color #A4A4A4}${downspeed eth0}k/s ${alignr}${color #AEB404}Up: ${color #A4A4A4}${upspeed wlan0}k/s
   ${downspeedgraph eth0 25,100} ${alignr}${upspeedgraph eth0 25,100}
   ${color #AEB404}Total: ${color #A4A4A4}${totaldown wlan0} ${alignr}${color #AEB404}Total:  ${color #A4A4A4}${totalup wlan0}
   ${color #AEB404}Inbound: ${color #A4A4A4}${tcp_portmon 1 32767 count}$alignr${color #AEB404}Outbound: ${color #A4A4A4}${tcp_portmon 32768 61000 count}

Maintenant que vous avez ce qu’il faut pour l’améliorer, n’hésitez surtout pas à partager vos oeuvres ;).

Pour le lancer automatiquement à chaque démarrage, il faut ajouter la commande ci-dessous dans « Menu > Preferences > Startup Applications » si vous utilisez Cinnamon. Avec les autres environnement de bureau, çà devrait être plus ou moins pareil.

Les liens qui m’ont donnés les inspirations:

HOW TO: A Beginners Guide to Setting up Conky
Setting Up Conky
15+ Beautiful Conky Configs for Linux Desktops