_index.md 4.85 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
---
title: Installation d'un système
---

Les hôtes sont basés sur Debian stretch, dont le guide d'installation sert
de base à ce document.

Contrainte non négligeable : les machines employées sont nécessairement
préinstallées par le fournisseur de services IaaS. En conséquence, les
options d'installation ne correspondent pas exactement aux attentes et des
ajustements doivent être effectués.

Partitionnement
---------------

Le partitionnement par défaut convient plutôt :

- un RAID1 software entre les deux disques ;
- une partition système de 25G ;
- une partition de données pour le reste ;
- pas de swap (par sécurité).

Première connexion, gestion des utilisateurs
--------------------------------------------

A la première connexion, on s'assure :

 - que seul l'utilisateur root est activé ;
 - que la connexion SSH est autorisée exclusivement grâce aux clés ;
 - que le mot de passe de root est réinitialisé pour l'accès console.

Chez online par exemple, après s'être connecté en tant qu'utilisateur :

```
sudo su
mkdir ~/.ssh
echo "..." > ~/.ssh/authorized_keys
userdel tedomum
rm -rf /home/tedomum
```

... puis reconnexion directement en tant que root.

Gestion des paquets et nettoyage du système
-------------------------------------------

Mettre à jour le sources.list :

```
deb http://ftp.fr.debian.org/debian stretch main
deb http://security.debian.org/ stretch/updates main
deb http://apt.dockerproject.org/repo debian-stretch main
```

Puis supprimer les paquets superflus :

```
apt autoremove -y exim4-base exim4-config bind9 exim4-config nfs-common pinentry-gtk2
```

Enfin, installer les outils de base :

```
apt install docker-engine cryptsetup btrfs-tools
```

On désactive le démon Docker par défaut afin que celui-ci ne démarre pas avant que LUKS ne soit monté :

```
systemctl disable docker
```

On installe Docker Compose depuis le site officiel (téléchargement via Github).

Partition de données
--------------------

On complète en chiffrant la partition de données :

```
cryptsetup luksFormat /dev/md1
cryptsetup luksOpen /dev/md1 data
mkfs.btrfs /dev/mapper/data

```

On adapte en conséquence le fstab :

```
# /etc/fstab: static file system information.
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/md0	/               ext4    errors=remount-ro 0       1
/dev/mapper/data /srv           btrfs   defaults,noauto   0       2
```

Récupération de la configuration
--------------------------------

La configuration est stockée sur un dépôt Git. On génère d'abord les clés SSH de l'hôte :

```
ssh-keygen -b 4096
```

On installe la clé publique sur le dépôt Git et on clône le dépôt en activant le sparse-checkout :

```
mount /srv
cd /srv
git init .
git remote add origin git@git.tedomum.net:tedomum/documentation.git
git config core.sparseCheckout true
echo core >> .git/info/sparse-checkout
echo other >> .git/info/sparse-checkout
git pull origin master
```

Configuration réseau
--------------------

La configuration réseau est particulièrement simple. Les bridges sont créés par Docker. On copie et on adapte le fichier de configuration fourni :

```
cp /srv/other/interfaces /etc/network/interfaces
vim /etc/network/interfaces
```

Le fichier hôtes doit contenir quelques références :

```
2001:bc8:212d:121::12   logs.local # Adresse du serveur de logs
2001:bc8:212d:101::1    docker.local # Adresse du bridge Docker
2001:bc8:212d:1ff::1    services.local # Adresse où sont exposés les services
212.129.34.247          services.local
2001:bc8:212d:100::1    admin.local # Adresse d'administration
62.210.182.192          admin.local
```

Configuration docker
--------------------

Docker est configuré directement dans `/etc/docker/daemon.json`, on copie la configuration :

```
cp /srv/other/docker/daemon.json /etc/docker/
```

La configuration désactive notamment le support iptables et le support du proxy userland, pour
permettre au script nftables de fonctionner. Toutefois, Docker ne supporte pas encore la
désactivation complète de iptables.

On force la désactivation des modules iptables :

```
cp /srv/other/modprobe.conf /etc/modprobe.d/iptables.conf
```

On installe ensuite le paquet de compatibilité iptables :

```
apt install iptables-nftables-compat
ln -s /sbin/iptables-compat /usr/local/sbin/iptables
```

On redémarre, puis on démarre Docker et crée le réseau par défaut (en adaptant les adresses IP) :

```
systemctl start docker
docker network create --ipv6 --subnet 172.18.0.0/16 --gateway 172.18.0.1 --subnet 2001:bc8:212d:101::/64 --gateway 2001:bc8:212d:101::1
```

Configuration des services mutualisés
-------------------------------------

Dans `/srv/core`, on crée un fichier `.env` contenant les adresses publiques pour les service HTTP :

```
ipv4=1.2.3.4
ipv6=2001:bc8:212d:1ff::1
```

On démarre ensuite les service mutualisés :

```
docker-compose up -d
```