Odroid C4: configurer armbian

Rédigé par Alexandre le 31/12/2020

Mis à jour le 03/03/2021

#auto-hébergement #debian #loisir

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.