После довольно продолжительно использования Raspberry Pi совместно с Raspbian решил попробовать установить Arch Linux ARM. Что из этого получилось рассмотрено в статье.
Так как в месте установки RPi подключать что-либо к разъемам HDMI или RCA Video и LAN мне неудобно, я использую WiFi-подключение к сети и USB-UART для терминального доступа. Поэтому некоторые описанные шаги я отметил как необязательные.
Использованное оборудование: ноутбук с Windows, Raspberry Pi Model B, SD-карта объемом 4GB, WiFi-адаптер, UART-адаптер.
Загружаем и записываем на SD-карту образ операционной системы. В моем случае это был ArchLinuxARM-2014.01-rpi.img, запись выполнялась при помощи Win32DiskImager 0.9.5.
После установки войти в систему можно как root, пароль root. Это можно сделать как через локальный терминал так и через LAN, используя SSH.
Запуск getty на ttyAMA0 (необязательно)
Для вывода на последовательный порт загрузочных сообщений необходимо добавить в файл /boot/cmdline.txt параметр loglevel=5.
Разрешаем работу getty на последовательном порту командой:
[root@alarmpi ~]# systemctl enable getty@ttyAMA0
Заменяем созданную ссылку (почему это необходимо):
[root@alarmpi ~]# rm /etc/systemd/system/getty.target.wants/getty@ttyAMA0.service
[root@alarmpi ~]# ln -s /usr/lib/systemd/system/serial-getty@.service
/etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service
Сигналы UART выведены на GPIO разъем Raspberry Pi:
Нужно подключить к ним USB-UART конвертер и указать в терминальной программе следующие параметры подключения: скорость 115200, 8 бит данных, 1 стоп бит, без проверки четности, без управления потоком. Подробнее как использовать PuTTY для работы через последовательный порт здесь.
Настройка беспроводной сети (необязательно)
Копируем и редактируем нужный профиль, указав в нем имя сети и пароль:
[root@alarmpi ~]# cd /etc/netctl/
[root@alarmpi ~]# install -m640 examples/wireless-wpa wireless-home
Профиль:
Description='A simple WPA encrypted wireless connection'
Interface=wlan0
Connection=wireless
Security=wpa
IP=dhcp
ESSID='<имя сети>'
# Prepend hexadecimal keys with "
# If your key starts with ", write it as '""<key>"'
# See also: the section on special quoting rules in netctl.profile(5)
Key='<пароль>'
# Uncomment this if your ssid is hidden
#Hidden=yes
Активируем созданный профиль и разрешаем его запуск при включении:
[root@alarmpi ~]# netctl start wireless-home
[root@alarmpi ~]# netctl enable wireless-home
Аппаратный генератор случайных чисел
В ArchLinux для Raspberry Pi есть поддержка аппаратного генератора случайных чисел, но демону rngd нужно указать, как его найти. Для это необходимо отредактировать файл /etc/conf.d/rngd следующим образом:
RNGD_OPTS="-o /dev/random -r /dev/hwrng"
И перезапустить rngd:
[root@alarmpi ~]# systemctl restart rngd
Часовой пояс и синхронизация времени
Удаляем часовой пояс, назначенный по умолчанию и устанавливаем нужный:
[root@alarmpi ~]# rm /etc/localtime
[root@alarmpi ~]# ln -s /usr/share/zoneinfo/<местоположение> /etc/localtime
Запускаем ntpd и разрешаем его работу при включении:
[root@alarmpi ~]# systemctl start ntpd
[root@alarmpi ~]# systemctl enable ntpd
Обновление системы
Просто запускаем команду:
[root@alarmpi ~]# pacman -Syu
Расширение корневого раздела
Запускаем fdisk и выводим существующую таблицу разделов:
[root@alarmpi ~]# fdisk /dev/mmcblk0
Welcome to fdisk (util-linux 2.24.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/mmcblk0: 3.8 GiB, 4072669184 bytes, 7954432 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x417ee54b
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 2048 186367 92160 c W95 FAT32 (LBA)
/dev/mmcblk0p2 186368 3667967 1740800 5 Extended
/dev/mmcblk0p5 188416 3667967 1739776 83 Linux
На SD-карте, как видно, есть основной (mmcblk0p1) и дополнительный (mmcblk0p2) разделы. Дополнительный, в свою очередь, содержит один логический (mmcblk0p5) раздел. Раздел mmcblk0p1 имеет небольшой размер, монтируется как /boot и используется при загрузке. Его модифицировать не нужно. Расширить нужно раздел mmcblk0p5, который монтируется как /.
Удаляем раздел mmcblk0p2 (при этом раздел mmcblk0p5 также удалится):
Command (m for help): d
Partition number (1,2,5, default 5): 2
Partition 2 has been deleted.
Теперь нужно создать новый дополнительный раздел, занимающий все доступное свободное пространство:
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e
Partition number (2-4, default 2):
First sector (186368-7954431, default 186368):
Last sector, +sectors or +size{K,M,G,T,P} (186368-7954431, default 7954431):
Created a new partition 2 of type 'Extended' and of size 3.7 GiB.
После этого внутри дополнительного, нужно создать логический раздел, так же занимающий все доступное пространство:
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (188416-7954431, default 188416):
Last sector, +sectors or +size{K,M,G,T,P} (188416-7954431, default 7954431):
Created a new partition 5 of type 'Linux' and of size 3.7 GiB.
Проверяем, что разделы созданы правильно:
Command (m for help): p
Disk /dev/mmcblk0: 3.8 GiB, 4072669184 bytes, 7954432 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x417ee54b
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 2048 186367 92160 c W95 FAT32 (LBA)
/dev/mmcblk0p2 186368 7954431 3884032 5 Extended
/dev/mmcblk0p5 188416 7954431 3883008 83 Linux
Стартовые блоки созданных разделов должны быть такими же как до внесения изменений, а общее количество блоков увеличиться.
Сохраняем изменения и выполняем перезагрузку:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
The kernel still uses the old table. The new table will be used at the next
reboot or after you run partprobe(8) or kpartx(8).
[root@alarmpi ~]# reboot
После перезагрузки нужно увеличить размер файловой системы на созданном логического разделе. Текущий размер:
[root@alarmpi ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/root 1.7G 536M 1005M 35% /
Увеличиваем размер:
[root@alarmpi ~]# resize2fs /dev/mmcblk0p5
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mmcblk0p5 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p5 is now 970752 blocks long.
Новый размер:
[root@alarmpi ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/root 3.7G 536M 3.0G 16% /
Имеет смысл для уменьшения количества операций записи на SD-карту установить в файле /etc/fstab параметр noatime для корневого раздела:
/dev/mmcblk0p5 / ext4 defaults,noatime 0 1
Добавление непривилегированного пользователя
Добавляем пользователя и устанавливаем пароль:
[root@alarmpi ~]# useradd -m pi
[root@alarmpi ~]# passwd pi
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Установка и настройка sudo
Устанавливаем sudo:
[root@alarmpi ~]# pacman -S sudo
Открыв с помощью команды visudo конфигурацию раскомментируем следующую строку:
%wheel ALL=(ALL) NOPASSWD: ALL
Добавляем созданного ранее пользователя pi в группу wheel:
[root@alarmpi ~]# usermod -aG wheel pi
Это позволит пользователю pi использовать sudo для выполнения команд, требующих повышенных полномочий.
Настройка ssh
Так как SSH-ключи у меня уже были, останавливаться на их создании я не буду. Как их создать можно прочитать здесь.
Копируем публичный ключ на RPi:
$ ssh-copy-id pi@192.168.1.103
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are
prompted now it is to install the new keys
pi@192.168.1.103's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'pi@192.168.1.103'"
and check to make sure that only the key(s) you wanted were added.
Открываем файл конфигурации sshd:
[root@alarmpi ~]# nano /etc/ssh/sshd_config
Устанавливаем в нем запрет входить по ssh пользователю root и отключаем аутентификацию по паролю:
PermitRootLogin no
PasswordAuthentication no
Перезапускаем sshd:
[root@alarmpi ~]# systemctl restart sshd
Заключение
В результате выполнения перечисленных шагов получаем RPi подключенный к WiFi сети, синхронизирующий время через интернет. На RPi можно зайти через SSH как непривилегированный пользователь имея при этом возможностью вызова системных команд через sudo.
Ссылки на использованные ресурсы
- elinux.org/ArchLinuxInstallGuide
- wiki.archlinux.org/index.php/Raspberry_Pi
- wiki.archlinux.org/index.php/netctl
- jan.alphadev.net/post/53594241659/growing-the-rpi-root-partition
- wiki.archlinux.org/index.php/Secure_Shell
- wiki.archlinux.org/index.php/SSH_Keys
Автор: dmitriy5181