Газоанализатор Online. Установка ОС.

Инструментарий
Установка ОС на малинку прозводиться при помощи компа с каким-нибудь линуксом. Если его нет, то можно раскатать на флэшку Ubuntu и загрузить комп (инструментальный) с нее.
Также желательно подключить UART консоль. Это необязательно, но позволит получить больше контроля над процессом установки. Для подключения к компу нужен переходник USB-UART с TTL уровнями (3,3V). Например китайский на CH340. На переходнике скорее всего есть перемычка, переключающая перемычка выходной уровень. Она обязательно должна стоять в положении 3,3V, иначе малинка скорее всего сгорит. Если minicom еще не стоит, то его можно поставить простой командой
$ sudo apt install minicom
Запускается терминал командой
$ minicom --device /dev/tty/USB0 --baudrate 115200
Для проверки можно замкнуть выводы RX и TX переходника USB-UART. Все вводимые символы будут возвращаться в терминал (эхо). На малинке контакты RX/TX находятся в верхнем правом углу.

Подключаем RX (белый) переходника к TX малинки, TX (зеленый) переходника к RX малинки, соединяем земли GND (черный).

Запись ОС на карту
Скачиваем и распаковываем образ системы. Ubuntu для Raspberry Pi образы лежат тут. Рекомендуется выбирать Server LTS, 64 бита.
$ wget https://cdimage.ubuntu.com/releases/20.04.2/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz
Посмотреть как называется устройство карты можно командой lsblk. Называться она должна называть mmcblkN, где N - карты. Скорее всего 0.

Обязательно размонтируем все разделы на карте (на новой карте скорее всего будет один).
$ umount /dev/mmcblk0p1
$ umount /dev/mmcblk0p2
Записываем образ на карту.
$ sudo dd if=ubuntu-20.04.2-preinstalled-server-arm64+raspi.img of=/dev/mmcblk0
Растягиваем второй раздел на карте.
$ sudo parted /dev/mmcblk0 resizepart 2 100%
$ sudo resize2fs /dev/mmcblk0p2
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/mmcblk0p2 to 15580928 (4k) blocks.
The filesystem on /dev/mmcblk0p2 is now 15580928 (4k) blocks long.
Все тоже самое можно сделать графической утилитой Disks из комплекта Ubuntu. Размонтирование карты.

Запись образа на карту.


Растягиваем второй раздел.

Вставляем карту в малинку, подключаем сеть и подаем питание. Если подключена консоль, то увидим лог загрузки и приглашение.

Для поиска машины в сети запускаем nmap
$ sudo nmap -sS -p 22 192.168.1.0/24
Starting Nmap 7.80 ( https://nmap.org ) at 2021-05-02 00:45 MSK
Nmap scan report for _gateway (192.168.1.1)
Host is up (0.0026s latency).
PORT STATE SERVICE
22/tcp open ssh
MAC Address: E8:DE:27:C2:F8:E6 (Tp-link Technologies)
Nmap scan report for 192.168.1.102
Host is up (0.0016s latency).
PORT STATE SERVICE
22/tcp open ssh
MAC Address: E4:5F:01:0B:3D:84 (Unknown)
Nmap scan report for vulpecula (192.168.1.103)
Host is up (0.000088s latency).
PORT STATE SERVICE
22/tcp closed ssh
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.61 seconds
В моем случаи IP полученный малинкой через DHCP 192.168.1.102. Подключаемся через SSH. При первом входе Ubuntu потребует сменить пароль.

NixOS
Тут все интересней. Запись образа осуществляется также как и с Ubuntu (разве что образ нужно распаковывать с помощью unzstd). Общее описание NixOS on ARM/Raspberry Pi 4. Собранные образы лежат на Hydra. Используем последний успешно собранный образ.

Не забываем растянуть второй раздел.
Подключаем монитор и клавиатуру (почему-то при загрузке UART консоль отключается). ОС загружается сразу с логином nixos, без пароля. Для того, чтобы зайти на машинку через ssh пароль нужно установить. На этом шаге стоит подсмотреть IP (ip addr), чтобы не искать малинку в сети при помощи nmap.
$ ssh nixos@192.168.1.101
Генерируем минимальный конфиг.
$ sudo nixos-generate-config
writing /etc/nixos/hardware-configuration.nix...
writing /etc/nixos/configuration.nix...
For more hardware-specific settings, see https://github.com/NixOS/nixos-hardware.
Теперь у нас есть два конфигурационных файла: /etc/nixos/configuration.nix и /etc/nixos/hardware-configuration.nix.
$ cat /etc/nixos/hardware-configuration.nix
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
fsType = "ext4";
};
swapDevices = [ ];
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
}
/etc/nixos/hardware-configuration.nix не трогаем, редактируем /etc/nixos/configuration.nix. У меня он такой:
$ cat /etc/nixos/configuration.nix
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).
{ config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
# Use the extlinux boot loader. (NixOS wants to enable GRUB by default)
boot = {
kernelPackages = pkgs.linuxPackages_rpi4;
tmpOnTmpfs = true;
initrd.availableKernelModules = [
"usbhid"
"usb_storage"
];
kernelParams = [
"console=ttyS0,115200n8"
"console=tty0"
];
loader = {
raspberryPi.enable = true;
raspberryPi.version = 4;
grub.enable = false;
generic-extlinux-compatible.enable = true;
};
};
systemd.additionalUpstreamSystemUnits = [ "tmp.mount" ];
hardware.enableRedistributableFirmware = true;
networking = {
hostName = "nixos-rpi4";
networkmanager.enable = true;
};
users = {
mutableUsers = false;
users.root = {
password = "password";
};
users.nixos = {
isNormalUser = true;
password = "password";
extraGroups = [
"wheel" # Enable sudo
];
};
};
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
nano
wget
];
environment.variables = {
EDITOR = "nano";
};
services.openssh.enable = true;
nixpkgs.config.allowUnfree = true;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It‘s perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "21.03"; # Did you read the comment?
}
Добавляем Unstable канал (пакетов)
$ sudo nix-channel --add https://nixos.org/channels/nixos-unstable nixpkgs
$ sudo nix-channel --update
Установка и перезагрузка
$ sudo nixos-install --root /
$ sudo reboot
Диаграмма GPIO выводов взята из документации на плату. Автор Raspberry Pi Foundation, лицензия Creative Commons Attribution 4.0 International Licence. Ссылка. Автор заглавного изображения lewing@isc.tamu.edu Larry Ewing and The GIMP