Arch Linux на 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 '»»' # 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: 0×417ee54b

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: 0×417ee54b

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.

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

© Habrahabr.ru