Arch Linux на Raspberry Pi

  • Tutorial
После довольно продолжительно использования 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.

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



AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 17

    0
    Есть ли какие-то явные преимущества в сравнении с Raspbian?
      0
      Те же что и у обычного Arch по сравнению с Debian: lightweight and flexible + KISS
        +1
        Кроме KISS можно еще добавить более свежие версии программ в репозитории. Чем дольше имеешь дело с Raspbian тем больше это начинает напрягать.

        У Arch базовая установка более компактная, меньше запущенных сервисов. Но в администрировании Arch конечно более трудозатратный.
          +2
          В администрировании Arch ничем не отличается от любого другого linux IMHO.
            –1
            Не отличается ровно до первого обновления, ломающего что-нибудь важное, и требующего выполнения странных телодвижений для починки, которые в нормальном дистрибутиве бы автоматически выполнились при установке пакета. Так что поиграться можно, а в продакшн ни-ни.
              –1
              Arch больше образовательный проект (как и RPi). Идеологически он ближе к Linux From Scratch и для промышленного применения не особо подходит (как и RPi).
                0
                Не сложно использовать Arch в Production, на мой взгляд. И, как и в любой production системе, обновления должны быть проверенные и содержать только bug fix'ы.
                И да, Arch требует от администратора чуть большего понимания о том что он делает, но это и есть пресловутый Arch Way. Выбирая Arch ты с этим соглашаешься или выбираешь другой linux.
          +1
          Главным преимуществом, как мне кажется, является модель — rolling release, при которой вы всегда имеете (можете иметь) систему в актуальном состоянии. При этом не надо обновлять всю систему раз в год/пол года.
            0
            Обожаю арч и сижу на нем довольно давно, однако преимущество rolling release в случае с серьезными продакшын системами далеко не примущество, а, скорее, наоборот. Несколько раз наживал себе проблем, после чего стараюсь на критических машинах использовать что-то наподобие debian. Плачу, глядя на uname -r, выдающий 2.6.*.*, но ничего иного не остается.
          0
          Я бы еще добавил fake-hwclock в инструкцию для восстановления времени после перезапуска.
            0
            О! Спасибо за подсказку. А то меня немного нервируют сообщения о том, что система была запущена 44 года назад. А прицепить хардварные RTC всё руки не доходят.
            +3
            Сначала Pidora, теперь Pidarch?
              +2
              а откуда взялась буква D?
              0
              >подключенный к WiFi сети, синхронизирующий время через интернет
              А можно system.d заставить запускать определённую программу/служба только после того, как время будет реально синхронизованно (а не просто запущенна служба ntp), но чтобы при этом эта программа/служба имела статус «respawn» (или как оно тут зовётся), т.е. её нельзя было завершить и она перезапускалась бы при падении с ошибками?
                0
                Думаю, можно. Кроме запуска основной программы запускать принудительно синхронизацию времени. Если синхронизация завершилась с ошибкой то делать перезапуск. Подробнее здесь. Параметры ExecStart, Restart, RestartSec.
                0
                Какое время загрузки данной системы на Raspberry? Сколько секунд с момента включения питания до возможности использовать консоль?
                  0
                  а вы пробовали Buildroot? Говорят проще уже просто некуда, и это не дистрибутив как Arch, а custom linux. Мне интересно что проще реализовать было бы на той же распебри и что бы быстрее и надёжнее работало.

                  Only users with full accounts can post comments. Log in, please.