raspi_setup
ansible-role-raspi-setup
Роль Ansible для базовой настройки группы хостов Raspberry Pi, предназначенная для работы с безголовыми машинами.
Когда эта роль запускается на свежей установке Raspberry Pi OS с включенным только ssh (добавьте пустой файл с именем ssh
в раздел boot
на SD-карте перед первым запуском!), она может использоваться для:
- Установки
hostname
в соответствии с именем хоста, указанным в инвентаре Ansible или из переменной с именемlocal_hostname
- Настройки различных параметров в
config.txt
разных Pi из переменной с именемconfig_settings
- Добавления авторизованных ssh-ключей пользователю
pi
для входа без пароля из переменной с именемauthorized_keys
- Изменения пароля по умолчанию для пользователя
pi
из переменной с именемpi_password
Чтобы пропустить любой из шагов, просто оставьте соответствующую переменную неустановленной.
Я рекомендую комбинировать это с dev-sec.ssh-hardening
, который ограничит доступ по ssh и запретит вход с паролем для повышения безопасности, а также внесет другие улучшения в стандартные настройки sshd.
Кроме того, вы можете использовать geerlingguy.swap
, чтобы настроить файл подкачки, если это необходимо!
Пример плейбука
Основной плейбук playbook.yml
- hosts: raspis
roles:
# Эта роль автоматически настроит вход без пароля для заданных ключей
# и изменит любые настройки config.txt, переданные через инвентарь хостов.
- role: fpiesche.raspi_setup
vars:
# Эти значения будут являться значениями по умолчанию для всех Pi, но могут быть
# переопределены для каждого хоста отдельно.
authorized_keys: ["{{ lookup('file', lookup('env', 'HOME') + '/.ssh/id_rsa.pub') }}",
"/home/otheruser/.ssh/id_rsa.pub",
"ssh-rsa ..."]
# Переменная `pi_password` должна быть хэшированным паролем.
pi_password: "{{ raspberry | password_hash('sha512') }}"
# РЕКОМЕНДУЕТСЯ: Эта роль ограничит доступ по ssh и запретит вход с паролем
# и внесет другие улучшения безопасности в стандартные настройки ssh.
# https://github.com/dev-sec/ansible-ssh-hardening
- role: dev-sec.ssh-hardening
become: yes
# НЕОБЯЗАТЕЛЬНО: Настройте файл подкачки, используя хост-переменную `swap_megabytes`
# https://github.com/geerlingguy/ansible-role-swap
- role: geerlingguy.swap
become: yes
Инвентарь hosts.yml
Вот часть файла hosts.yml, который я использую для своего кластера Docker с различными версиями Pi:
---
all:
children:
raspis:
vars:
ansible_python_interpreter: /usr/bin/python3
ansible_user: pi
ansible_password: raspberry
hosts:
pi-1-a.local:
# Установите другой пароль для пользователя `pi` на этом Pi
pi_password: "{{ pi1-password | password_hash('sha512') }}"
# Все, что в разделе config_settings, будет автоматически
# установлено в config.txt этого Pi, и система будет перезагружена.
config_settings:
- name: "gpu_mem"
value: 16
# Настройки разгона для Raspberry Pi 1 взяты из
# 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
# Это используется ролью `geerlingguy.swap` для настройки файла подкачки в 1 ГБ.
# 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
# Настройки разгона для Raspberry Pi 2 взяты из
# 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/ansible-role-raspi-setup