Arch Linux на Raspberry Pi

в 12:36, , рубрики: Raspberry Pi

После довольно продолжительно использования Raspberry Pi совместно с Raspbian решил попробовать установить Arch Linux ARM. Что из этого получилось рассмотрено в статье.

image

Так как в месте установки 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:

image

Нужно подключить к ним 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.

Ссылки на использованные ресурсы

Автор: dmitriy5181

Источник

Поделиться

* - обязательные к заполнению поля