После довольно продолжительно использования 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.
Для вывода на последовательный порт загрузочных сообщений необходимо добавить в файл /boot/cmdline.txt параметр loglevel=5.
Разрешаем работу getty на последовательном порту командой:
Заменяем созданную ссылку (почему это необходимо):
Сигналы UART выведены на GPIO разъем Raspberry Pi:

Нужно подключить к ним USB-UART конвертер и указать в терминальной программе следующие параметры подключения: скорость 115200, 8 бит данных, 1 стоп бит, без проверки четности, без управления потоком. Подробнее как использовать PuTTY для работы через последовательный порт здесь.
Копируем и редактируем нужный профиль, указав в нем имя сети и пароль:
Профиль:
Активируем созданный профиль и разрешаем его запуск при включении:
В ArchLinux для Raspberry Pi есть поддержка аппаратного генератора случайных чисел, но демону rngd нужно указать, как его найти. Для это необходимо отредактировать файл /etc/conf.d/rngd следующим образом:
И перезапустить rngd:
Удаляем часовой пояс, назначенный по умолчанию и устанавливаем нужный:
Запускаем ntpd и разрешаем его работу при включении:
Просто запускаем команду:
Запускаем fdisk и выводим существующую таблицу разделов:
На SD-карте, как видно, есть основной (mmcblk0p1) и дополнительный (mmcblk0p2) разделы. Дополнительный, в свою очередь, содержит один логический (mmcblk0p5) раздел. Раздел mmcblk0p1 имеет небольшой размер, монтируется как /boot и используется при загрузке. Его модифицировать не нужно. Расширить нужно раздел mmcblk0p5, который монтируется как /.
Удаляем раздел mmcblk0p2 (при этом раздел mmcblk0p5 также удалится):
Теперь нужно создать новый дополнительный раздел, занимающий все доступное свободное пространство:
После этого внутри дополнительного, нужно создать логический раздел, так же занимающий все доступное пространство:
Проверяем, что разделы созданы правильно:
Стартовые блоки созданных разделов должны быть такими же как до внесения изменений, а общее количество блоков увеличиться.
Сохраняем изменения и выполняем перезагрузку:
После перезагрузки нужно увеличить размер файловой системы на созданном логического разделе. Текущий размер:
Увеличиваем размер:
Новый размер:
Имеет смысл для уменьшения количества операций записи на SD-карту установить в файле /etc/fstab параметр noatime для корневого раздела:
Добавляем пользователя и устанавливаем пароль:
Устанавливаем sudo:
Открыв с помощью команды visudo конфигурацию раскомментируем следующую строку:
Добавляем созданного ранее пользователя pi в группу wheel:
Это позволит пользователю pi использовать sudo для выполнения команд, требующих повышенных полномочий.
Так как SSH-ключи у меня уже были, останавливаться на их создании я не буду. Как их создать можно прочитать здесь.
Копируем публичный ключ на RPi:
Открываем файл конфигурации sshd:
Устанавливаем в нем запрет входить по ssh пользователю root и отключаем аутентификацию по паролю:
Перезапускаем sshd:
В результате выполнения перечисленных шагов получаем RPi подключенный к WiFi сети, синхронизирующий время через интернет. На RPi можно зайти через SSH как непривилегированный пользователь имея при этом возможность вызова системных команд через sudo.

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