fpiesche.raspi_setup
ansible-role-raspi-setup
Rola Ansible do podstawowej konfiguracji grupy urządzeń Raspberry Pi, przeznaczona do użycia z maszynami bez interfejsu graficznego.
Po uruchomieniu na nowej instalacji systemu Raspberry Pi OS, z włączonym tylko ssh (dodaj pusty plik o nazwie ssh
do partycji boot
na karcie SD przed pierwszym uruchomieniem!), ta rola może być używana do:
- Ustawienia
hostname
zgodnie z nazwą hosta podaną w inwentarzu Ansible lub z zmiennej o nazwielocal_hostname
- Ustawienia różnych opcji w pliku
config.txt
różnych Pi z zmiennej o nazwieconfig_settings
- Dodania autoryzowanych kluczy ssh do użytkownika
pi
dla logowania bez hasła z zmiennej o nazwieauthorized_keys
- Zmiana domyślnego hasła użytkownika
pi
z zmiennej o nazwiepi_password
Aby pominąć jakikolwiek krok, wystarczy zostawić odpowiednią zmienną niewypełnioną.
Zalecam połączenie tego z dev-sec.ssh-hardening
, co zablokuje dostęp ssh na logowanie hasłem dla bezpieczeństwa oraz wprowadzi szereg innych poprawek do domyślnej konfiguracji sshd.
Dodatkowo można użyć geerlingguy.swap
, aby ustawić plik wymiany, jeśli zajdzie taka potrzeba!
Przykładowy playbook
Główny playbook playbook.yml
- hosts: raspis
roles:
# Ta rola automatycznie skonfiguruje bezhasłowe SSH dla podanych kluczy
# i dostosuje wszelkie ustawienia config.txt przekazane w inwentarzu hostów.
- role: fpiesche.raspi_setup
vars:
# Te wartości będą domyślnymi dla wszystkich Pi, ale mogą być
# nadpisywane na poziomie pojedynczego hosta.
authorized_keys: ["{{ lookup('file', lookup('env', 'HOME') + '/.ssh/id_rsa.pub') }}",
"/home/otheruser/.ssh/id_rsa.pub",
"ssh-rsa ..."]
# Zmienna `pi_password` musi być hasłem w postaci skrótu.
pi_password: "{{ raspberry | password_hash('sha512') }}"
# ZALECANE: Ta rola zablokuje dostęp ssh, aby uniemożliwić logowanie hasłem
# oraz wprowadzi inne poprawki bezpieczeństwa do domyślnej konfiguracji ssh.
# https://github.com/dev-sec/ansible-ssh-hardening
- role: dev-sec.ssh-hardening
become: yes
# OPCJONALNE: Ustawienie pliku wymiany przy użyciu zmiennej hosta `swap_megabytes`
# https://github.com/geerlingguy/ansible-role-swap
- role: geerlingguy.swap
become: yes
Inwentarz hosts.yml
Oto fragment hosts.yml, którego używam dla mojego klastra Docker z różnymi wersjami Pi:
---
all:
children:
raspis:
vars:
ansible_python_interpreter: /usr/bin/python3
ansible_user: pi
ansible_password: raspberry
hosts:
pi-1-a.local:
# Ustawienie innego hasła dla użytkownika `pi` na tym Pi
pi_password: "{{ pi1-password | password_hash('sha512') }}"
# Wszystko w sekcji config_settings będzie automatycznie ustawione
# w pliku config.txt tego Pi, a system zostanie uruchomiony ponownie.
config_settings:
- name: "gpu_mem"
value: 16
# Ustawienia podkręcania Raspberry Pi 1 pochodzące z
# 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
# Jest to używane przez rolę `geerlingguy.swap` Jeffa Geerlinga do ustawienia pliku wymiany 1GB.
# 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
# Ustawienia podkręcania Raspberry Pi 2 pochodzące z
# 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