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
hostnamezgodnie z nazwą hosta podaną w inwentarzu Ansible lub z zmiennej o nazwielocal_hostname - Ustawienia różnych opcji w pliku
config.txtróżnych Pi z zmiennej o nazwieconfig_settings - Dodania autoryzowanych kluczy ssh do użytkownika
pidla logowania bez hasła z zmiennej o nazwieauthorized_keys - Zmiana domyślnego hasła użytkownika
piz 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