Rock64: configurer armbian
Rédigé par Alexandre le 2020-05-19
Mis à jour le 02/03/2021
Avec le déménagement qui approche, cela fait presque deux mois que je n'ai rien publié. Ce n'est pas la plus longue période d'inactivité, mais aujourd'hui je viens justement vous prouver que je n'ai pas été inactif. En effet, avec le déménagement, je vais enfin avoir une vraie place pour un projet que j'ai en tête depuis un moment : l'auto-hébergement à domicile.
Toute l'impatience qui me caractérise m'a fait acheter un Rock64. Ce mini-ordinateur de type Rapsberry Pi est le tout premier d'une ferme de trois permettant, à terme, d'héberger l'ensemble de mes services.
En lisant la suite de cet article, vous trouverez une documentation sur ma façon de configurer la Debian 10 dédiée au Rock64. Cette documentation va servir de base à un playbook Ansible me permettant de configurer à l'identique l'ensemble des trois hôtes de mon futur cluster.
Cette documentation a été rédigée et testée sur Armbian_21.02.1_Rock64_buster_current_5.10.12.img.xz. Le contenu de cette documentation peut être modifié à tout moment afin de coller avec mes besoins.
Installer
Cette documentation ne donne pas les détails sur l'installation de armbian sur la carte SD ou l'eMMC, toutefois voici comment je procède :
- Télécharger la dernière version Debian de armbian sur le site officiel
- Vérifier l'intégrité de l'image téléchargée
- Positionner l'eMMC sur la clef USB permettant de la connecter à un ordinateur
- Ouvrir gnome-disk-utility
- Sélectionner l'eMMC
- Utiliser le menu des trois points verticaux (tout en haut à droite)
- Choisir Restaurer l'image disque...
- Chercher l'image d'armbian en cliquant sur (Aucun)
- Lancer en utilisant le bouton Démarrer la restauration...
- Une fois la restauration terminée, éjecter l'eMMC via le bouton adéquat (en haut à droite)
- Remettre l'eMMC dans le rock64
Premier démarrage
Une fois le système démarré, il faut trouver son IP. Personnellement je cherche dans la liste des baux DHCP de ma box internet et tente le SSH sur chaque IP dont je ne connais pas le périphérique. Dans mon cas, le DHCP a attribué l'IP 192.168.1.208.
Se connecter via SSH :
ssh root@192.168.1.208
Le mot de passe par défaut est indiqué ici. Après l'avoir saisi, nous sommes invité à le changer :
New root password: *********
Repeat password: *********
Nous sommes maintenant invité à changer les options régionales :
1) bash
2) zsh
Shell: BASH
Pour finir, il nous est proposé de créer un utilisateur, ce que je ne fais pas.
Configuration
Réseau
Définir la configuration réseau afin d'avoir une IP statique :
sudo tee /etc/network/interfaces <<EOF
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.5/24
gateway 192.168.1.254
dns-nameservers 80.67.169.12 80.67.169.40
EOF
NB : je ne configure pas d'IPv6 parce que celle-ci est amenée à changer lors du redémarrage de ma box internet.
Faire le ménage dans les paquets liés au réseau :
sudo apt purge --autoremove network-manager iperf3 ifenslave ethtool fping iputils-arping isc-dhcp-client netcat-openbsd build-essential aptitude* autoconf automake autotools-dev avahi-autoipd bind9-*
Gestionnaire de paquets
Créer un fichier personnel de configuration d'apt :
sudo tee --append /etc/apt/apt.conf.d/99custom <<EOF
APT::Install-Recommends "false";
APT::Install-Suggests "false";
APT::Get::Show-Versions "true";
APT::Get::Show-Upgraded "true";
APT::Get::Purge "true";
APT::Get::List-Cleanup "true";
EOF
Nettoyer les dépôts inutiles et utiliser les serveurs français :
sudo tee /etc/apt/sources.list <<EOF
deb https://deb.debian.org/debian/ buster main
deb http://security.debian.org/debian-security buster/updates main
deb https://deb.debian.org/debian/ buster-updates main
deb https://deb.debian.org/debian/ buster-backports main
EOF
Désactiver la source desktop :
sudo sed -i 's/ buster-desktop//g' /etc/apt/sources.list.d/armbian.list
Prendre en compte les changements :
sudo apt update
Supprimer les paquets inutiles :
sudo apt purge --autoremove alsa-utils aptitude* autoconf automake bison bsdmainutils bsdextrautils build-essential bzip2 chrony console-setup* command-not-found cpufrequtils cracklib-runtime crda device-tree-compiler dialog dirmngr distro-info-data dnsutils dosfstools dpkg-dev evtest expect fbset f2fs-tools f3 figlet flex fuse g++* gir1.2* gnupg* gpg gpg-* gpgconf gpgsm hdparm hostapd html2text htop iotop iozone3 iptables iso-codes iw jq keyboard-configuration kbd lsb-release lsof m4 make man-db mailcap mmc-utils ncurses-term net-tools networkd-dispatcher nocache ntfs-3g parted patch pciutils pinentry-curses policykit-1 psmisc pv qrencode rfkill selinux-utils screen software-properties-common stress sunxi-tools sysfsutils tcl-expect tcl8.6 tmux toilet* unicode-data unzip usb.ids usbutils vim* vlan wget wireless* wireguard* wpasupplicant xkb-data xxd xz-utils zsh*
Un brin de ménage au niveau fichier :
sudo rm -R /etc/NetworkManager /usr/lib/chromium-browser /var/log/unattended-upgrades /root/.oh-my-zsh /root/.config /root/.zshrc
Supprimer les paquets orphelins :
sudo apt install -y apt-transport-https deborphan dialog && sudo apt purge -y --autoremove $(deborphan)
Mettre à jour le système :
sudo apt full-upgrade
Installer les paquets habituels :
sudo apt install btrfs-progs manpages nano htop locate locales ca-certificates msmtp msmtp-mta curl sudo rsync tmux git dbus nftables
NB : ignorer les messages qui disent que les paquets sont déjà installés.
Redémarrer :
sudo reboot
Après le redémarrage, se connecter via la nouvelle IP :
ssh root@192.168.1.5
Options régionales
Configurer la langue du système :
sudo rm /etc/default/locale &&\
sudo locale-gen fr_FR.UTF-8 &&\
sudo dpkg-reconfigure locales
Dans la fenêtre qui s'ouvre :
- Chercher
fr_FR.UTF-8
- Cocher en appuyant sur la barre espace
- Valider avec la touche
Entrée
- Choisir
fr_FR.UTF-8
- Terminer avec la touche
Entrée
Configurer le fuseau horaire :
sudo dpkg-reconfigure tzdata
Dans la fenêtre qui s'ouvre :
- Sélectionner
Europe
- Valider avec la touche
Entrée
- Chercher
Paris
- Terminer avec la touche
Entrée
Nom d'hôte
Définir un nom d'hôte :
newHostname="nyx"
Modifier le nom d'hôte :
hostnamectl set-hostname $newHostname; \
sudo sed -i "s#rock64#$newHostname#g" /etc/hosts
Protocole de temps réseau
Garder son serveur à l'heure en utilisant systemd :
sudo tee /etc/systemd/timesyncd.conf <<EOF
[Time]
NTP=0.fr.pool.ntp.org 1.fr.pool.ntp.org 2.fr.pool.ntp.org 3.fr.pool.ntp.org
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
EOF
Activer la synchronisation de l'heure via systemd
:
sudo timedatectl set-ntp true
Pare-feu
Créer les règles du pare-feu (ici on autorise SSH sur le port 22) :
sudo tee /etc/nftables.conf <<EOF
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
# accept any localhost traffic
iif lo accept
# accept traffic originated from us
ct state established,related accept
# accept neighbour discovery otherwise IPv6 connectivity breaks.
ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept
## Custom
# Allow SSH from ANY
tcp dport 22 accept
# count and drop any other traffic
counter drop
}
}
EOF
Activer le pare-feu :
sudo systemctl start nftables
Tester une connexion en SSH via un autre terminal. Si cela ne fonctionne pas, utiliser l'interface de Kimsufi pour redémarrer le serveur et corriger le fichier de configuration du pare-feu. Si cela fonctionne, activer le pare-feu au démarrage :
sudo systemctl enable nftables
Utilisateur
Définir le nom de l'utilisateur :
newUser="alexandre"
Créer un compte utilisateur :
adduser $newUser
Ajouter le nouvel utilisateur au groupe sudo afin de permettre une élévation de privilèges :
adduser $newUser sudo
Se connecter en SSH via ce nouvel utilisateur :
ssh alexandre@192.168.1.5
Personnaliser bash :
tee --append ~/.bashrc <<EOF
# custom
PS1='\${debian_chroot:+($debian_chroot)}\[\033[0;36m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
alias ls='ls --color=auto -lah --group-directories-first'
alias df='df -h --exclude-type=tmpfs --exclude-type=devtmpfs'
EOF
Prendre en compte les changements :
source ~/.bashrc
SSH
Réinstaller le serveur SSH :
sudo apt purge --autoremove --assume-yes openssh-server && sudo rm -r /etc/ssh/; sudo apt install --assume-yes openssh-server
Configurer SSH afin de pouvoir se connecter en SSH via une paire de clefs.
Complément
Suite à l'installation, haveged ne démarre pas :
sudo systemctl list-units --failed
UNIT LOAD ACTIVE SUB DESCRIPTION
● haveged.service loaded failed failed Entropy daemon using the HAVEGE algorithm
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
1 loaded units listed.
Cela se corrige très facilement avec la ligne suivante :
sudo sed -i 's/1024/2048 -d16/g' /etc/default/haveged &&\
sudo systemctl restart haveged &&\
sudo systemctl status haveged
Conclusion
La machine est maintenant prête à recevoir vos services.