Configuration d’un serveur DNS-DHCP avec Zentyal

La configuration de Zentyal comme serveur DNS/DHCP est assez intéressante, surtout si l’on opère sur son propre réseau local qui est en même temps son réseau domestique. Par « intéressante », je veux dire que c’est un petit « challenge ». Avant de parler des soucis que j’ai rencontrés en adoptant cette configuration, je vais tout d’abord vous expliquer le contexte.

Je me suis acheté un micro-serveur pour créer un lab « VMware » pour me préparer à leurs certifications. Cependant, pour me simplifier la vie, mon lab se trouve dans le même réseau que mes autres appareils connectés à internet. Et oui, c’est pas malin! Mais par contre, c’est pratique puisqu’il n’y a pas moyen de créer une route statique via le routeur de mon FAI. Et plus tard, une fois tout configuré, je déplacerai le lab vers la DMZ.
Le serveur DNS, je l’utiliserai surtout pour résoudre les noms de domaine en local, mais surtout pour en profiter pleinement de la fonctionnalité de « recherche de domaine » qui me permet de ne pas taper le nom de domaine entier (http://monserveur.mylab.local), mais juste son alias (http://monserveur). Par la même occasion, il est possible de faire un ping vers le nom d’hôte directement à partir du même réseau, sans passer donc ni par l’adresse IP ni le nom de domaine.

Ne confondez pas « nom d’hôte » et « alias ». Je vais vous montrer où il faut configurer l’alias dans Zentyal, un peu plus loin dans ce chapitre.

Si vous n’êtes pas habitué à configurer un serveur DNS, vous risquez de foutre le bordel sur votre réseau, mais ce n’est pas si grave que çà. Au pire, le temps de résolution d’un nom de domaine peut être très lent, ou peut ne pas se faire du tout. Petit conseil pour vous prémunir contre ce genre d’inconvénience, c’est d’ajouter manuellement un serveur DNS fonctionnel dans les configurations de réseau de vos machines directement connectées à internet. Pour les autres machines qui doivent se connecter au lab, il n’y a rien à faire.

Avant d’avancer dans la configuration de Zentyal comme serveur DNS/DHCP, je tiens à préciser que je n’ai pas réussi à installer l’OS à partir du CD d’installation téléchargé sur le site. Ceci probablement du au fait que je l’installe comme machine virtuelle, malgré plusieurs tentative de modification des différents paramètres comme le type de disque, etc. Du coup, je suis parti sur une base Ubuntu 16.04.

I. Préparation de la machine virtuelle

OS
Type: Linux 4.X/3.X/2.6 Kernel

Hard Disk
Bus/Device: VirtIO
Disk1 size: 8GB
Disk2 size: 20GB

CPU
Sockets: 1
Cores: 1
Type: Default (kvm64)

Memory
Use fixed size memory: 2048MB

Network
Bridged mode
Model: VirtIO (paravirtualized)

Configuration du serveur Zentyal

Installer Ubuntu 16.04, puis créer un fichier /etc/apt/sources.list/zentyal.list pour y ajouter un lien vers l’archive du site.

$ sudo vim /etc/apt/sources.list.d/zentyal.list
deb http://archive.zentyal.org/zentyal 5.0 main

Récupérer la clé publique

$ wget -q http://keys.zentyal.org/zentyal-5.0-archive.asc -O- | sudo apt-key add -

Procéder ensuite à l’installation de zentyal et de ces différents modules. Ceux qui m’intéressent sont zentyal-dns, zentyal-dhcp puis zentyal-ntp.

$ sudo apt update
$ sudo apt upgrade

$ sudo apt install zentyal

$ sudo apt install zentyal-ntp zentyal-dhcp zentyal-dns zentyal-common

Note: pendant l’installation, vous devrez donner un mot de passe pour l’administrateur Root de MySQL. Gardez bien ce mot de passe quelque part, puisque vous ne risquez pas de l’utiliser tant que vous n’avez pas de problèmes de bases de données.

II. Configuration du DNS et du DHCP

  1. Activer les modules DNS et DHCP
  2. Configurer l’interface en mode statique
    Note: ne cochez surtout pas l’option WAN, sinon vous n’aurez pas accès à cette interface ensuite via le réseau LAN
  3. Configurez votre gateway, qui est l’adresse IP locale du routeur de votre FAI, si vous faites une connection directe
  4. Ajouter votre nom de domaine
  5. Configurer le serveur DNS

    Ici, je trouve que cette page n’est pas du tout ergonomique, puisqu’il n’y a pas moyen de vérifier visuellement ce qu’on a configuré sans cliquer sur le bouton de configuration. De plus, il n’y a pas de bouton pour revenir à la page précédente une fois les informations de configuration ajoutées. Bref, voici mes options.

    Domain: mylab.local (le nom de domaine que j’ai choisi à l’étape 4)
    Domain IP Address: 192.168.1.20 (l’adresse IP du serveur, cf. étape 2)
    Hostname: xxx (ici, il faut rentrer un nom que vous avez choisi pour identifier une serveur. Ce nom peut être le même que celui de l’hote, mais ce n’est pas une obligation)


    Dans cet exemple, vous devriez pouvoir accéder à l’interface de configuration de Zentyal via son nom d’hôte https://dc-zentyal.mylab.local ou son alias https://zentyal.mylab.local.

  6. Configurer le server DHCP

    Dans l’onglet « Common options »Dans l’onglet « Dynamic DNS options »
    Dans l’onglet « Advanced options », il n’y a pas grand chose à modifier.

III. Configuration du routeur FAI et vérification


Comme je le disais au tout début de cet article, afin d’éviter d’avoir des problèmes d’accès à internet à cause d’un problème de résolution de nom, mieux vaut ajouter par précaution d’autres serveurs DNS comme 8.8.8.8 et 8.8.4.4, qui sont des serveurs DNS de google.
Concernant l’ajout d’un deuxième serveur DHCP, la règle c’est celui qui répond en premier à une requête DHCP qui attribuera une adresse IP à la machine qui en fait la demande. Du coup, il n’y pas pas de soucis à avoir deux serveurs DHCP sur le même réseau.

Pour finir, effectuons une petite vérification pour voir que le DNS fonctionne correctement.

Pour en savoir un peu plus sur la configuration de Zentyal, je vous renvoie à leur wiki.

Références:

En/5.0/Zentyal 5.0 Official Documentation
Zentyal installation (Ubuntu documentation)

Information sur le matériel – HP Proliant Gen8

Pour résumé, voici l’essentiel de ce qu’il faut savoir de mon nouveau micro-serveur HP Proliant Gen8.

  • CPU : Intel Xeon E3 1265L Dual-core
  • 16 Go DDR3 ECC
  • 3 Disques durs SCSI

Cependant, je vais en profiter de cette page pour vous faire découvrir quelques commandes utiles pour avoir les informations sur votre système.

Commençons par les commandes pour avoir les informations sur la mémoire RAM.

~# cat /proc/meminfo
MemTotal: 16257496 kB
MemFree: 9012728 kB
MemAvailable: 10773580 kB

~# free -m
total used free shared buff/cache available
Mem: 15876 4947 8800 99 2128 10520
Swap: 10239 0 10239
~# free -h
total used free shared buff/cache available
Mem: 15G 4.9G 8.5G 99M 2.1G 10G
Swap: 9G 0B 9G

Pour avoir les informations sur les mémoires physiques, je n’ai pas trouvé mieux qu’avec la commande « dmidecode -t 17 ». D’autres exemples avec cette seront abordées un peu plus loin.

Puis vient ensuite la série des « ls », comme lscpu pour avoir des informations sur le processeur, lspci pour avoir la liste des bus PCI et des composants qui y sont attachés, etc. D’autres commandes comme lshw, pour avoir une information détaillée sur tout le système, ou encore lsscsi ne font pas parties des commandes de bases. Il faut les installer pour pouvoir les utiliser.

Pour avoir la liste des commandes « ls* », il faut commencer par trouver le dossier dans lequel ces commandes sont placées.

~# which lscpu
/usr/bin/lscpu
~# whereis lscpu
lscpu: /usr/bin/lscpu /usr/share/man/man1/lscpu.1.gz

Ensuite, il suffit de lister le contenu de ce dossier.

~# ls /usr/bin/ | grep ^ls
lsattr
lscpu
lshw
lsinitramfs
lsipc
lslocks
lslogins
lsns
lsof
lspci
lspgpot
lsscsi
lsusb

Voici plus ou moins, ce que vous devriez avoir avec ces commandes. J’ai supprimé les informations inutiles pour ne pas trop charger cette page.

# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Model name: Intel(R) Xeon(R) CPU E3-1265L V2 @ 2.50GHz
CPU MHz: 2500.000
Virtualization: VT-x
NUMA node0 CPU(s): 0-7

~# lsscsi
[0:0:0:0] disk ATA Samsung SSD 850 2B6Q /dev/sda
[1:0:0:0] disk ATA Samsung SSD 850 2B6Q /dev/sdb
[2:0:0:0] disk ATA SanDisk SDSSDP12 0 /dev/sdc
[6:0:0:0] disk HP iLO LUN 00 Media 0 2.10 /dev/sdd

~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 238.5G 0 disk /mnt/850Pro
sdb 8:16 0 238.5G 0 disk /mnt/850Pro2
sdc 8:32 0 117.4G 0 disk
├─sdc1 8:33 0 1M 0 part
├─sdc2 8:34 0 256M 0 part
└─sdc3 8:35 0 117.1G 0 part
├─pve-swap 253:0 0 10G 0 lvm [SWAP]
├─pve-root 253:1 0 29.3G 0 lvm /
├─pve-data_tmeta 253:2 0 64M 0 lvm
│ └─pve-data 253:4 0 63.3G 0 lvm
└─pve-data_tdata 253:3 0 63.3G 0 lvm
└─pve-data 253:4 0 63.3G 0 lvm
sdd 8:48 0 256M 1 disk
└─sdd1 8:49 0 251M 1 part

~# lspci
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v2/Ivy Bridge DRAM Controller (rev 09)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09)
00:06.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09)
00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 (rev b5)
00:1c.4 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 5 (rev b5)
00:1c.6 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 7 (rev b5)
00:1c.7 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 8 (rev b5)
00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev a5)
00:1f.0 ISA bridge: Intel Corporation C204 Chipset Family LPC Controller (rev 05)
00:1f.2 RAID bus controller: Intel Corporation 6 Series/C200 Series Chipset Family SATA RAID Controller (rev 05)
01:00.0 System peripheral: Hewlett-Packard Company Integrated Lights-Out Standard Slave Instrumentation & System Support (rev 05)
01:00.1 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200EH
01:00.2 System peripheral: Hewlett-Packard Company Integrated Lights-Out Standard Management Processor Support and Messaging (rev 05)
01:00.4 USB controller: Hewlett-Packard Company Integrated Lights-Out Standard Virtual USB Controller (rev 02)
02:00.0 Memory controller: Hewlett Packard Enterprise Device 005f
03:00.0 Ethernet controller: Broadcom Limited NetXtreme BCM5720 Gigabit Ethernet PCIe
03:00.1 Ethernet controller: Broadcom Limited NetXtreme BCM5720 Gigabit Ethernet PCIe
04:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03)

Puis vient ensuite la super commande « lshw ».

~# lshw
description: Tower Computer
product: ProLiant MicroServer Gen8 (712317-421)
vendor: HP
*-cpu
description: CPU
product: Intel(R) Xeon(R) CPU E3-1265L V2 @ 2.50GHz

*-memory
description: System Memory
size: 16GiB
capabilities: ecc

*-scsi:0
logical name: scsi0
capabilities: emulated
*-disk
description: EXT4 volume
product: Samsung SSD 850
logical name: /dev/sda
logical name: /mnt/850Pro
size: 238GiB

Une version plus concise de lshw serait,

~# lshw -short
H/W path Device Class Description
============================================================
system ProLiant MicroServer Gen8 (712317-421)
/0 bus Motherboard
/0/0 memory 64KiB BIOS
/0/400 processor Intel(R) Xeon(R) CPU E3-1265L V2 @ 2.50GHz
/0/400/710 memory 128KiB L1 cache
/0/400/720 memory 1MiB L2 cache
/0/400/730 memory 8MiB L3 cache
/0/1000 memory 16GiB System Memory
/0/1000/0 memory 8GiB DIMM DDR3 Synchronous Unbuffered (Unregistered) 1333 MHz (0.8 ns)
/0/1000/1 memory 8GiB DIMM DDR3 Synchronous Unbuffered (Unregistered) 1333 MHz (0.8 ns)
/0/100 bridge Xeon E3-1200 v2/Ivy Bridge DRAM Controller
/0/100/1 bridge Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port
/0/100/6 bridge Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port
/0/100/6/0 memory Memory controller
/0/100/1a bus 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2
/0/100/1a/1 usb1 bus EHCI Host Controller
/0/100/1a/1/1 bus Integrated Rate Matching Hub
/0/100/1c bridge 6 Series/C200 Series Chipset Family PCI Express Root Port 1
/0/100/1c.4 bridge 6 Series/C200 Series Chipset Family PCI Express Root Port 5
/0/100/1c.4/0 eno1 network NetXtreme BCM5720 Gigabit Ethernet PCIe
/0/100/1c.4/0.1 eno2 network NetXtreme BCM5720 Gigabit Ethernet PCIe
/0/100/1c.6 bridge 6 Series/C200 Series Chipset Family PCI Express Root Port 7
/0/100/1c.6/0 bus uPD720201 USB 3.0 Host Controller
/0/100/1c.6/0/0 usb4 bus xHCI Host Controller
/0/100/1c.6/0/1 usb5 bus xHCI Host Controller
/0/100/1c.7 bridge 6 Series/C200 Series Chipset Family PCI Express Root Port 8
/0/100/1c.7/0 generic Integrated Lights-Out Standard Slave Instrumentation & System Support
/0/100/1c.7/0.1 display MGA G200EH
/0/100/1c.7/0.2 generic Integrated Lights-Out Standard Management Processor Support and Messaging
/0/100/1c.7/0.4 bus Integrated Lights-Out Standard Virtual USB Controller
/0/100/1c.7/0.4/1 usb3 bus UHCI Host Controller
/0/100/1d bus 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1
/0/100/1d/1 usb2 bus EHCI Host Controller
/0/100/1d/1/1 bus Integrated Rate Matching Hub
/0/100/1d/1/1/3 bus Hub
/0/100/1d/1/1/3/1 scsi6 storage Ultra Fast Media Reader
/0/100/1d/1/1/3/1/0.0.0 /dev/sdd disk 268MB LUN 00 Media 0
/0/100/1d/1/1/3/1/0.0.0/1 /dev/sdd1 volume 255MiB Windows FAT volume
/0/100/1e bridge 82801 PCI Bridge
/0/100/1f bridge C204 Chipset Family LPC Controller
/0/100/1f.2 storage 6 Series/C200 Series Chipset Family SATA RAID Controller
/0/1 scsi0 storage
/0/1/0.0.0 /dev/sda volume 238GiB Samsung SSD 850
/0/2 scsi1 storage
/0/2/0.0.0 /dev/sdb volume 238GiB Samsung SSD 850
/0/3 scsi2 storage
/0/3/0.0.0 /dev/sdc disk 126GB SanDisk SDSSDP12
/0/3/0.0.0/1 /dev/sdc1 volume 1023KiB BIOS Boot partition
/0/3/0.0.0/2 /dev/sdc2 volume 255MiB Windows FAT volume
/0/3/0.0.0/3 /dev/sdc3 volume 117GiB LVM Physical Volume
/1 power Power Supply 1
/2 vmbr0 network Ethernet interface
/3 tap104i0 network Ethernet interface
/4 tap102i0 network Ethernet interface

Une autre commande que je trouve très intéressante serait « dmidecode ».

~# dmidecode -t
dmidecode: option requires an argument -- 't'
Type number or keyword expected
Valid type keywords are:
bios
system
baseboard
chassis
processor
memory
cache
connector
slot

Dmidecode nécessite qu’on lui fournisse le type (« -t ») d’information à récupérer en option. Cette option peut être un nom, ou un numéro. La commande « dmidecode -t 1 » donne le même résultat que « dmidecode -t system ». Voyez dans le manuel pour plus d’information.

~# man dmidecode
DMI TYPES
The SMBIOS specification defines the following DMI types:

Type Information
────────────────────────────────────────────
0 BIOS
1 System
...

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