...

понедельник, 14 апреля 2014 г.

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 '""<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.


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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий