Odroid C4: configurer armbian
Rédigé par Alexandre le 2020-12-31
Mis à jour le 03/03/2021
Noël est passé et, avec lui, son lot de cadeaux. L'un de ces cadeaux est un Odroid C4, offert par ma pacs'moiselle (on est pacsé). Bref, ce cadeau arrive à point nommé et va me permettre de jouer un peu plus avec LXD.
Avant d'y mettre des conteneurs, il convient d'installer et configurer un système d'exploitation. Dans cet article, je documente les étapes que j'ai réalisé pour arriver à un système relativement propre et répondant à mes besoins.
Cette documentation a été rédigée et testée sur Armbian_21.02.1_Odroidc4_bullseye_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 la machine
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.221.
Se connecter via SSH :
ssh root@192.168.1.221
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.6/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 /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/ bullseye main
#deb http://security.debian.org/debian-security bullseye/updates main
deb https://deb.debian.org/debian/ bullseye-updates main
deb https://deb.debian.org/debian/ bullseye-backports main
EOF
Désactiver la source desktop :
sudo sed -i 's/ bullseye-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 --assume-yes deborphan dialog &&\
sudo apt purge --assume-yes --autoremove $(deborphan)
Mettre à jour le système :
sudo apt full-upgrade
Installer les paquets habituels :
sudo apt install nano htop locales ca-certificates curl sudo rsync tmux git nftables
NB : ignorer les messages qui disent que les paquets sont déjà installés.
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="erebe"
Modifier le nom d'hôte :
hostnamectl set-hostname $newHostname; \
sudo sed -i "s#odroidc4#$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
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.221
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 clef.
Redémarrer :
sudo rm /etc/resolv.conf &&\
cd /etc && sudo ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf &&\
sudo reboot
Après le redémarrage, se connecter via la nouvelle IP :
ssh alexandre@192.168.1.6
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
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 :
echo "DAEMON_ARGS=\"-w 2048 -d16\"" | sudo tee /etc/default/haveged &&\
sudo systemctl restart haveged &&\
sudo systemctl status haveged
Conclusion
La machine est maintenant prête à recevoir vos services.