fpiesche.raspi_setup
ansible-role-raspi-setup
Un rôle Ansible pour effectuer une configuration de base sur un groupe d'hôtes Raspberry Pi, destiné à être utilisé avec des machines sans écran.
Lorsqu'il est exécuté sur une installation fraîche de Raspberry Pi OS avec uniquement ssh activé (ajoutez un fichier vide appelé ssh
à la partition boot
de la carte SD avant le premier démarrage pour faire cela !), ce rôle peut être utilisé pour :
- Définir le
hostname
pour qu'il corresponde au nom d'hôte donné dans l'inventaire Ansible ou à une variable appeléelocal_hostname
- Définir diverses options dans le
config.txt
de différents Pi à partir d'une variable appeléeconfig_settings
- Ajouter des clés SSH autorisées à l'utilisateur
pi
pour une connexion sans mot de passe à partir d'une variable appeléeauthorized_keys
- Changer le mot de passe par défaut de l'utilisateur
pi
à partir d'une variable appeléepi_password
Pour sauter une étape, il suffit de ne pas définir la variable correspondante.
Je recommande de combiner cela avec le dev-sec.ssh-hardening
, qui verrouillera l'accès ssh pour interdire la connexion par mot de passe pour des raisons de sécurité, ainsi que d'apporter une série d'autres améliorations de sécurité à la configuration par défaut de sshd.
De plus, vous pouvez utiliser le geerlingguy.swap
pour configurer un fichier d'échange si nécessaire !
Exemple de playbook
Playbook principal playbook.yml
- hosts: raspis
roles:
# Ce rôle configurera automatiquement SSH sans mot de passe pour les clés fournies
# et personnalisera tous les paramètres config.txt passés via l'inventaire des hôtes.
- role: fpiesche.raspi_setup
vars:
# Ces valeurs seront les valeurs par défaut pour tous les Pi, mais peuvent être
# remplacées au cas par cas.
authorized_keys: ["{{ lookup('file', lookup('env', 'HOME') + '/.ssh/id_rsa.pub') }}",
"/home/otheruser/.ssh/id_rsa.pub",
"ssh-rsa ..."]
# La variable `pi_password` doit être un mot de passe haché.
pi_password: "{{ raspberry | password_hash('sha512') }}"
# RECOMMANDÉ : Ce rôle verrouillera l'accès ssh pour interdire la connexion par mot de passe
# et améliorera la sécurité de la configuration ssh par défaut.
# https://github.com/dev-sec/ansible-ssh-hardening
- role: dev-sec.ssh-hardening
become: yes
# OPTIONNEL : Configurer un fichier d'échange à l'aide de la variable hôte `swap_megabytes`
# https://github.com/geerlingguy/ansible-role-swap
- role: geerlingguy.swap
become: yes
Inventaire hosts.yml
Voici un extrait du hosts.yml que j'utilise pour mon cluster Docker avec différentes versions de Pi :
---
all:
children:
raspis:
vars:
ansible_python_interpreter: /usr/bin/python3
ansible_user: pi
ansible_password: raspberry
hosts:
pi-1-a.local:
# Définir un mot de passe différent pour l'utilisateur `pi` sur ce Pi
pi_password: "{{ pi1-password | password_hash('sha512') }}"
# Tout ce qui dans la section config_settings sera automatiquement configuré
# dans le config.txt de ce Pi et le système redémarré par la suite.
config_settings:
- name: "gpu_mem"
value: 16
# Paramètres d'overclocking du Raspberry Pi 1 pris de
# https://haydenjames.io/raspberry-pi-safe-overclocking-settings/
- name: "arm_freq"
value: 1000
- name: "sdram_freq"
value: 500
- name: "core_freq"
value: 500
- name: "over_voltage"
value: 6
- name: "temp_limit"
value: 75
# Ceci est utilisé par le rôle `geerlingguy.swap` de Jeff Geerling pour configurer un fichier d'échange de 1 Go.
# https://github.com/geerlingguy/ansible-role-swap
swap_file_size_mb: 1024
pi-2.local:
pi_password: "{{ pi2-password | password_hash('sha512') }}"
local_hostname: that-other-one
config_settings:
- name: "gpu_mem"
value: 16
# Paramètres d'overclocking du Raspberry Pi 2 pris de
# https://wiki.debian.org/RaspberryPi#Overclocking_Pi_2
- name: "arm_freq"
value: 1000
- name: "core_freq"
value: 500
- name: "sdram_freq"
value: 400
- name: "over_voltage"
value: 0
- name: "over_voltage_sdram_p"
value: 0
- name: "over_voltage_sdram_i"
value: 0
- name: "over_voltage_sdram_c"
value: 0
- name: "temp_limit"
value: 75
swap_file_size_mb: 1024
Perform basic setup for headless use on newly deployed Raspberry Pi OS installations
ansible-galaxy install fpiesche.raspi_setup