Моя система домашней автоматики. Создание образа операционной системы

Вводная часть
Установка системы на Raspberry Pi 2,3

Я опишу самый простой, на мой взгляд, способ для начинающих.
Всё действие будет происходить в Ubuntu 18.04
для справки по командам служит команда «man» + нужная команда.

man ls


Или нужная команда с ключём --help

ls --help


1. Установка операционной системы Raspbian Stretch Lite на microSD карту.

MicroSD карта должна быть 10 класса и ёмкостью от 8 гигабайт.
Вставьте SD карту в компьютер и введите команду:

lsblk


litiy47g_6lk1faubuj78odw3vi.png
В примере карта определяется как mmcblk0, далее я буду использовать это имя.
Затем, чтобы очистить карту от записанной ранее информации (потом мы будем делать образ диска) нужно её стереть командой:

dd if=/dev/zero of=/dev/mmcblk0


Данная команда требует прав суперпользователя, для этого необходимо добавить в начале ключевое слово «sudo». Здесь и далее я привожу команды без sudo. При вводе команд используйте автодополнение (клавиша Tab) это нужно для контроля правильности ввода команд и путей к файлам. Пока выполняется команда можно скачать свежий дистрибутив операционной системы.
Скачиваем отсюда: raspberrypi.org
Нам нужен Raspbian Stretch Lite. Распаковываем скачанный zip, нам нужен файл с расширением img — это образ диска который мы будем копировать на карту. Итак, если мы имеем образ диска и команда dd заавершилась, то идем дальше.
Копируем образ на карту:

dd if=/path/to/raspbian.img of=/dev/mmcblk0 bs=4M status=progress


после завершения вводим команду:

sync


Вынимаем карту и вставляем обратно.
Создаем пустой файл на диске boot нашей карты:

touch /media/$USER/boot/ssh


Это нужно для того чтобы на Raspberry запускался ssh сервер.
Карту нужно безопасно извлечь, вставить в Raspberry, подключить проводную сеть и подать питание. Если нет блока питания на 2 апмера, то запитать можно от компьютера имеещего USB3. При первой загрузке система увеличит размер дисков до размеров карты, это займет некоторое время.
Для того чтобы узнать IP адрес нашей RPi можно использовать утилиту «arp-scan». Если она не установлена — ставим:

apt install arp-scan


Узнаём имя нашей сетевой карты:

ip a


или

netstat -i


sgkr6wb793k2l4dmscvleeo_4pa.png
У меня wifi карта с именем wlp1s0
Запускаем arp-scan:

arp-scan -I wlp1s0 -l


vkfzohdrqybskrape13_qijsf8e.png
Мне нужен RPi c IP 192.168.0.114 адрес присваивается по DHCP и может быть любым.
Заходим на RPi по ssh:

ssh pi@192.168.0.114


нужно ввести yes при первой идентификации, затем ввести пароль пользователя pi — raspberry.
Если нам удалось зайти на Raspberry, вводим команду:

init 0


Эта команда выключает RPi
Нужно снова вставить карту в компьютер. Сейчас понадобится программа «gparted», если она не установлена — ставим:

apt install gparted


Запускаем gparted, нужно изменить размер диска mmcblk0p2 оставьте в конце неразмеченную область 300–500 мегабайт или 2–3% от размера карты, это нужно для того чтобы наш образ помещался на карты разных производителей, а они могут различаться по размеру. В результате должно получиться примерно так:
pigqy1qfzik2laujmitutxwzn8g.png
После завершения работы с gparted можно сделать резервную копию карты, чтобы в случае проблем в дальнейших экспериментах иметь уже готовый образ.

dd if=/dev/mmcblk0 | bzip2 > raspbian.bz2


теперь мы всегда можем восстановить наш диск командой:

bzcat raspbian.bz2 | dd bs=4M of=/dev/mmcblk0


В результате мы имеем microSD карту с готовой к работе операционной системой и её резервную копию.

2. Настройка Raspbian Stretch Lite.

Заходим на RPi по ыыр ssh. Для настройки статических адресов проводной сети и wifi нужно в конец файла /etc/dhcpcd.conf добавить следующие настройки:
interface eth0
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8, 8.8.4.4
interface wlan0
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8, 8.8.4.4

С данными настройками RPi будет иметь одинаковый IP по проводной или wifi сети.

Файл для настройки wifi — /etc/wpa_supplicant/wpa_supplicant.conf
добавляем в него следующие настройки:
network={
ssid=«NAME»
psk=«PASS»
}

где NAME и PASS имя и пароль от wifi сети. Если заранее неизвестно где предстоит использовать нашу RPi, то имя и пароль можно будет вписать потом.

Добавим задачи в программу cron

crontab -e


При первом запуске нужно будет выбрать текстовый редактор, nano — будет самым привычным.
kidranxamlfdaux2i76x5c0vjf4.png
Для того чтобы работали расписания добавим следующие настройки:
PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash

И сами задачи, будем записывать время каждой загрузки и продолжительность непрерывной работы, это будет полезной информацией в дальнейшем.
reboot sleep 60 && date >> my-reboot.txt
@weekly uptime >> my-uptime.txt

Для выхода комбинация клавиш Ctrl+x, Y, Enter

Настройка часового пояса производится командой

dpkg-reconfigure tzdata


Для увеличения ресурса SD карты можно остановить логирование и удалить swapfile:
(Я думаю это должно уменьшить вероятность выхода из строя SD карты или порче данных при внезапных отключениях RPi в процессе эксплуатации)

apt update
apt purge dphys-swapfile
apt autoremove --purge
apt install busybox-syslogd
dpkg --purge rsyslog


Установка программ:

apt install mosquitto mosquitto-clients sqlite3 libsqlite3-dev mc htop arp-scan vim supervisor python-pip python3-pip python-virtualenv python-dev
pip install psutil paho-mqtt
pip3 install psutil paho-mqtt 


Для homekit2mqtt нужно установить nodejs:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
apt-get install -y nodejs


Проверяем установленную версию

node -v
nodejs -v


Установка node-red:

npm install -g --unsafe-perm node-red


Запускаем

node-red


m7esjjrer1ip2vflmp_bgqagxle.png

В адресной строке браузера наберите IP адрес RPi 192.168.0.10:1880
kiu_qkhawjr3-za-urpaetmamj4.png

Завершаем node-red жмем Ctrl+c, переходим в директорию .node-red

cd .node-red


И устанавливаем пакеты для node-red, они могут понадобится для тестирования, настройки и коммуникации различных устройств.

npm i node-red-dashboard node-red-contrib-sonos node-red-contrib-knx node-red-node-serialport node-red-contrib-globalcache node-red-contrib-counter 


Возвращаемся в домашний каталог

cd


Установка homekit2mqtt:

apt install libavahi-compat-libdnssd-dev
npm install -g homekit2mqtt --unsafe-perm


Можно попробовать запустить homekit командой

homekit2mqtt


o_nrwbgde08t8wxz1f40goswfhc.png
Он запустится с настройками по умолчанию и можно добавить новое устройство в программе «Дом» на вашем iPhone или iPad

Пароль пользователя pi оставим текущий.
Теперь, когда всё установлено и проверено нужно сделать резервную копию нашей SD карты тем же способом что и ранее. Сейчас всё готово для установки системы автоматики.

© Habrahabr.ru