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

Установка Gentoo linux на Raspberry Pi

Итак, у меня появилась такая игрушка, как Raspberry Pi, и желание использовать её как девайс для управления освещением, для начала. Логика проста - она почти не потребляет энергии, в отличие от "обычного" компьютера, и на неё вполне можно "навесить" файлохранилище (подключив обычные SATA-жёсткие диски через преобразователь usb-sata (типа такого - http://chinawebshop.ru/product_44388.html )), да и мультимедийные функции, типа проигрывания интернет-радио, или музыки через mpd, она потянет на "ура". К слову, управление mpd вполне возможно с android-платформы, что даёт нам возможность управлять музыкой дома с телефона или планшета. Заманчиво? Тогда приступим!



Сразу сделаю две оговорки:
1) Компиляция будет выполнятся только силами самого Pi. "Полноценный" компьютер нужен будет только для подачи команд через ssh.
2) Это эксперимент, и результат его может быть отрицательным. Дело в том, что в процессе компиляции будет производится большое число операций "чтение-запись", что может убить flash-карту (ресурс одной ячейки ограничен где-то 10000 операций чтение-запись, что совсем немного). В будущем можно будет попробовать подлкючить к Pi жёсткий диск, и использовать его как корневой раздел, но это - планы на будущее.

Для начала работы нам потребуется монитор с HDMI-входом (либо переходник HDMI-DVI), HDMI-кабель, USB-клавиатура и SD-карта, размером от 2 Гб. В моём случае использовается 8Гб-карта Kingston, работает вполне удовлетворительно.

Ставить саму систему будем по вот этой доке: http://wiki.gentoo.org/wiki/Raspberry_Pi , вплоть до параграфа Compiling the kernel. Важно - при создании разделов обязательно создайте в конце раздел подкачки (swap) на 512М...1Гб, без него толком работать микрокомпьютер не будет - оперативки в некоторых случаях может нехватать. Компиляцию ядра, в отличие от той доки, будем производить на самой Pi. (Пока что у меня не получилось подобрать конфиг актуального на сегодня ядра так, чтобы оно грузилось и работало. В будущем, может, доковыряю. В принципе, работает всё, кроме аудио - но пока оно не особо-то и нужно мне...)

После выполнения инструкций из доки - имеем работоспособную, но голую систему.

Установим необходимый для работы софт:
emerge syslog-ng vixie-cron cpufrequtils app-misc/mc ntp logrotate

Добавим софт в автозапуск:
rc-update add vixie-cron default
rc-update add ntp-client default
rc-update add syslog-ng default

И обязательно скопируем текущую временную зону в /etc/localtime:
cp /usr/share/zoneinfo/Asia/Yekaterinbourg /etc/localtime. Это даст возможность ntp-client'у устанавливать правильное время при загрузке системы (т.к. часов реального времени на плате нет, после запуска она будет думать, что надворе 1970 год, пока ntp-client не получит актуальное время).

Для настройки сети нужно прописать следующее:

cat /etc/conf.d/net
# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d.  To create a more complete configuration,
# please review /usr/share/doc/openrc*/net.example* and save your configuration
# in /etc/conf.d/net (this file :]!).
config_eth0=("192.168.0.98 netmask 255.255.255.0")
routes_eth0=("default via 192.168.1.1")

Правим fstab

/dev/mmcblk0p1          /boot           vfat            none    0 0
/dev/mmcblk0p2          /               ext3            noatime         0 1
/dev/mmcblk0p3          none            swap         sw        0 0

Не забудьте создать "обычного" пользователя, добавить его в группу wheel и задать пароль на root'a, чтобы после перезапуска можно было уже работать только удалённо.
После этого можно перезапустить машинку, должно бы работать.

Я с самого начала не создал swap-раздел, а выделил всё доступное место под данные. Если Вы допустили ту же оплошность, её можно поправить:
1) Ресайзим текущий раздельчик
-fdisc /dev/mmcblk0, жмём p и смотрим текущую картину разделов:


 Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/mmcblk0p1   *        8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    15564799     7720960   83  Linux

Отсюда нам пригодятся начало и конец области mmcblk0p2.


-resize2fs /dev/mmcblk0p2 6800M (для карты на 8 Гб, для другого объёма вычитаем из объёма карты в мегабайтах где-то 700-1000 Мб)
-fsck -fy /dev/mmcblk0p2 - проверка изменённой файловой системы.
Теперь создаём новую разметку диска:
fdisc /dev/mmcblk0. Размер(в секторах) новой области высчитываем так- новый раздел размера (6800М) умножаем два раза на 1024, потом делим на 512. Для получения конечного адреса вычитаем из этого начальный адрес (122880), и округляем в большую сторону, и создаём раздел. Должно получится так:

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1   *        8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    14122880     7000000+  83  Linux
/dev/mmcblk0p3        14122900    15564799      720950   82  Linux swap / Solaris
(третий раздел - уже созданный своп).

После этого правим /etc/fstab, прописывая в нём собственно своп:
/dev/mmcblk0p1 /boot vfat noauto 0 0
/dev/mmcblk0p2 / ext3 noatime 0 1
/dev/mmcblk0p3 none swap sw 0 0


Вуаля, должно бы работать!



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

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