eddy_em: (Костерок)
eddy_em ([personal profile] eddy_em) wrote2015-12-28 06:15 pm

Gentoo на Raspberry Pi

Так как Raspbian подает все "надежды" к скатыванию (вот-вот добавят всякие systemd и прочий поцтерошлак), я решил на "малинку" накатить Gentoo.
Надо сказать, что потратил я на это 4 дня. И 3 из них — из-за собственной невнимательности. Даже тему на SO создал.

Итак, если не быть ССЗБ, то разворачивание генты занимает совсем немного времени. Больше уйдет потом на доустановку нужных пакетов.

Для начала нужно открыть FAQ по генте на "малинке". Разбиваем, как там написано, флешку (я сделал 2 раздела: 200МБ vfat для /boot + остаток — корень, на нелюбимой мною ext4). Далее — самое долгое — скачивание и компиляция ядра. Так как я сделал
git clone https://github.com/raspberrypi/linux.git

ждать пришлось долго. Надо было указывать --depth 1.
Заодно нужно скачать свежий stage3.

Чтобы ядро собралось правильно (я еще и на сборку потратил достаточно времени, указав неправильную архитектуру), лучше сразу сказать
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-none-eabi- bcmrpi_defconfig

а потом уже вызывать
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-none-eabi- menuconfig

для "юстировки" ядра. Ну, а дальше собираем ядро и модули (сначала: mkdir Modules):
make -j4 ARCH=arm CROSS_COMPILE=/usr/bin/arm-none-eabi- Image modules dtbs
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-none-eabi- INSTALL_MOD_PATH=Modules modules_install

Пока оно компилируется, нужно еще содрать firmware:
git clone --depth 1 https://github.com/raspberrypi/firmware.git

По-сути, нам нужна оттуда лишь boot-директория. Почти все файлы оттуда (в принципе, можно и все, а можно лишь те, что указаны в руководстве) нужно скопировать в /boot раздел (который vfat).

После сборки ядра по инструкции распихиваем dtb-файлы, модули, преобразуем ядро из arch/arm/boot/Image при помощи утилиты imagetool-uncompressed.py (https://github.com/raspberrypi/tools.git) в понятный для "малинки" образ. Затем этот образ отправляем в /boot, попутно правя конфигурацию из /boot/config.txt. В файл /boot/cmdline.txt заносим:
ipv6.disable=0 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 roo
tfstype=ext4 elevator=noop rootwait


Для того, чтобы генту можно было собирать на хосте, а не ждать веками, пока она на "малинке" соберется, в /usr/bin генты нужно добавить файл qemu-arm-static (я его выдрал из распбиана). Естественно, этот файл нужно как-то иначе переименовывать при запуске непосредственно на "малинке". Это делают скрипты монтирования/размонтирования, которые я приведу ниже.

После того, как все скопировано, нужно сделать chroot в корень генты и провести окончательную настройку. Для монтирования нужных файлов у меня есть скрипт:
#!/bin/bash
CHRT="ROOT"
if [ $# != 1 ]; then
    echo "usage: $0 /dev/sdb"
    exit 1
fi

function mnt(){
    mount --rbind $1 ${CHRT}$1
}
[ -f /proc/sys/fs/binfmt_misc/arm ] || echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\x
ff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:' > /proc/sys/fs/binfmt_misc/register
mount ${1}2 ${CHRT}
mv ${CHRT}/usr/bin/qemu-arm-static_ ${CHRT}/usr/bin/qemu-arm-static
mount ${1}1 ${CHRT}/boot
mount -o bind linux ${CHRT}/usr/src/linux
#mount -o loop,offset=4194304 $1 chrt_vfat
mnt /dev
mnt /sys
mount -t proc none ${CHRT}/proc
mnt /run
mount -o bind portage ${CHRT}/usr/portage
chroot ${CHRT}

Понятно, что нужно заранее создать директории ROOT (корень для чрута) и portage (там будут лежать portage-файлы, чтобы не засорять флешку). Заодно для сборки некоторых пакетов нам могут понадобиться исходники скомпилированного ядра. Они лежат в директории linux здесь же.

Все, делаем команду ./Chroot (название вышеприведенного скрипта) и попадаем в нашу генту. Дальше — обычные emerge-webrsync, emerge eix, eix-update и emerge -uDN world, после которых нужно доустановить все остальное.
Кстати, не натыкайтесь на пройденные мною грабли: ни в коем случае нельзя менять профиль. Я по-дурости сменил профиль на default/linux/arm/13.0/armv6j/developer и очередной emerge предложил мне установить 177 совершенно ненужных на "малинке" пакетов вроде иксов, культей и прочей дряни.

После обновления и установки (или в процессе) нужно настроить сеть, ntpd. В /etc/fstab написать:
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2

Добавить настройки прокси в /etc/profile.d, задать пароль руту и добавить нужное количество пользователей.

По мере установки софта будут вноситься разные изменения в /etc/portage/make.conf и другие файлы. Скажем, вот так выглядит сейчас мой package.accept_keywords:
sys-boot/raspberrypi-firmware ~arm
net-libs/libwebsockets **


После того, как все готово, выходим из чрута и отмонтируем всē скопом:
#!/bin/bash
CHRT="ROOT"
mv ${CHRT}/usr/bin/qemu-arm-static ${CHRT}/usr/bin/qemu-arm-static_
umount ${CHRT}/boot
umount ${CHRT}/usr/portage/
umount ${CHRT}/usr/src/linux
umount ${CHRT}/proc
umount ${CHRT}/run
umount ${CHRT}/sys
umount ${CHRT}/dev/pts
umount ${CHRT}/dev/shm
umount ${CHRT}/dev
umount ${CHRT}


Вставляем флешку в "малинку" и грузимся. В качестве консоли на первое время я использую долларовый переходничок USB<->UART, подключенный к UART на разъеме GPIO, далее доступ только по сети, а обновления — в чруте.
Здесь тоже есть тонкий момент: БП, которым питаем "малинку", должен быть подключен к ногам питания на разъеме GPIO и уметь выдать не меньше двух Ампер, иначе на этапе загрузки будут появляться всякие непонятные вещи.

[identity profile] 32bit-me.livejournal.com 2015-12-28 05:02 pm (UTC)(link)
Круто!
Однако же есть ещё эпическая операционная система для RPi под названием Pidora, про это тоже нельзя забывать!

[identity profile] eddy-em.livejournal.com 2015-12-28 06:58 pm (UTC)(link)
Не зря она так называется. А учитывая то, что поцтеринг непосредственное отношение к федорке имеет, Pidora действительно для гомосеков получается =D

[identity profile] 32bit-me.livejournal.com 2015-12-29 12:26 am (UTC)(link)
Что такое поцтеринг?

[identity profile] eddy-em.livejournal.com 2015-12-29 05:36 am (UTC)(link)
Чмо, которое загоняет линукс в /dev/null. Еще известен как Лēня Потный.

[identity profile] 32bit-me.livejournal.com 2015-12-29 05:39 am (UTC)(link)
Я не в курсе. Можно ссылку какую-либо?
Edited 2015-12-29 05:39 (UTC)

[identity profile] dimas.livejournal.com 2016-01-02 11:16 pm (UTC)(link)
https://en.wikipedia.org/wiki/Lennart_Poettering

[identity profile] 32bit-me.livejournal.com 2016-01-03 03:19 am (UTC)(link)
ОК

[identity profile] sevasat.livejournal.com 2015-12-28 05:34 pm (UTC)(link)
Всю крутость системд понимаешь только когда попользуешься. Да, все по-другому чем в сисвините, но работает он сатанинки быстро - система на SSD грузится за пару секунд, из-за параллелизации стартовых скриптов. Да, у systemd высокий входной порог, но тот кто осилил - тот на коне.

[identity profile] eddy-em.livejournal.com 2015-12-28 06:58 pm (UTC)(link)
systemd нарушает принципы UNIX-way, поэтому место этому шлаку на свалке!

[identity profile] sevasat.livejournal.com 2015-12-28 11:30 pm (UTC)(link)
Уникс-вей плохо работает в условиях применения в массовом продакшене. И потом, системд - это один из путей принести единство работы и настройки во все дистрибутивы, а то все эти выдумки из спичек и желудей в меру фантазии создателей каждого отдельного дистра уже поднадоели. Чтобы линух развивался - ему надо приходить к единой модели, иначе все забьют, потому что повторяемость результатов очень важна в продакшене. А то в современных дистрах одних директорий с конфигами (одними и теми же!) столько, что хрен проссыш куда что класть. Пора пересмотреть весь этот бардак, наконец.
Edited 2015-12-28 23:33 (UTC)

[identity profile] eddy-em.livejournal.com 2015-12-29 05:37 am (UTC)(link)
"Массовый продакшн" ориентирован на среднестатистического идиота, поэтому неюзабелен ни в коем образе. А линуксу к единой модели ни в коем случае нельзя переходить, иначе получится фекалия вроде мастдайки. И да здравствуют вирусы!

[identity profile] dimas.livejournal.com 2015-12-28 10:20 pm (UTC)(link)
не, если перегружать каждые пять минут, может это и будет значимым преимуществом, за которые можно согласится что оно будет все дальше и дальше пролезать во всю систему ...

[identity profile] sevasat.livejournal.com 2015-12-28 11:35 pm (UTC)(link)
Приемуществом будет то что настраивать и обслуживать малину ты будешь так же как и большие машины с системд, без разбирательств с очередным изобретением красноглазиков.

[identity profile] dimas.livejournal.com 2015-12-28 11:41 pm (UTC)(link)
бугага

можно я пока "большие машины" буду без системд обслуживать? :)

[identity profile] sevasat.livejournal.com 2015-12-28 11:48 pm (UTC)(link)
А я сегодня учу системд, а завтра буду обслуживать эти машины за тебя))
Весь продакшон на дистрах с симтемд, на спецов есть спрос.

[identity profile] dimas.livejournal.com 2015-12-28 11:54 pm (UTC)(link)
А завтра "учащих" заменят девопсы, но мне это будет изопенисуально.

К счастью моя основная работа более интересные вещи делать :) Да и эта поттерингоподелка ни разу не рокетсайнс, нужные вещи делаются просто.

[identity profile] eddy-em.livejournal.com 2015-12-29 05:38 am (UTC)(link)
Сегодня ты учишь сыстымде, а завтра Родину продашь!
Фу!

[identity profile] balmerdx.livejournal.com 2015-12-28 07:27 pm (UTC)(link)
А вот такой интересный (для меня) вопрос. Тоже захотелось много производительности (и сетевой разъем). Rasberry PI сравнительно дорогая (ну и устаревшая чутка). Зато есть дешевая Orange PI и быстрая Cubieboard. Сейчас в раздумьях - что выбрать.

[identity profile] eddy-em.livejournal.com 2015-12-28 07:47 pm (UTC)(link)
Советую кубитрак: и GPIO намного больше, нежели у "малинки", и процессор помощней.

Обычная "малинка" годится лишь для очень небольшого ряда задач. Скажем, у нас будет использоваться для управления 1/2 шаговиками, парой релюшек, опроса пары-тройки концевиков и потокового видео mjpeg'ами (захват с USB-фреймграббера, элементарная обработка и работа с веб-интерфейсом). Управляющий канал и обратная связь через вебсокеты (очень удобно: скажем, можно реализовать без особой нагрузки на сервер индикацию процентажа доезжания подвижек до концевиков и т.д., и т.п.).

P.S. Под кубитрак я тоже генту скомпилял.
Edited 2015-12-28 19:48 (UTC)

[identity profile] dimas.livejournal.com 2015-12-28 10:28 pm (UTC)(link)
Pi 2 тоже устаревшая? :)

Недавно фанаты производительсности (мне бы ваши задачи, я вот наоборот жду когда Zero подошевеет до обещанной пятерки:)

Из производительных помнится хвалили Orange Pi PC H3, но сейчас навскидку не нашел где её взять на али дешево, а ведь было меньше двадцатки ...

[identity profile] eddy-em.livejournal.com 2015-12-29 05:40 am (UTC)(link)
Pi2 по цене как-то не очень.

> я вот наоборот жду когда Zero подошевеет до обещанной пятерки
Я тоже. Но, скорее всего, дешевле тридцатки она никогда не будет.

Производительные одноплатники нужны лишь для обработки изображений. Скажем, при работе со скоростными ПЗСками нам нужен гигабитный cameraLink, с которого нужно успеть считать данные, выполнить первичную обработку и сохранить на SSD. Если бы одноплатники имели достаточные мощи для этого, не нужно было бы таскать громадный промышленный компьютер в стакан первичного фокуса!

[identity profile] dimas.livejournal.com 2015-12-29 08:37 am (UTC)(link)
Ну, ниже сорока уже упала, может и дальше подешевеет ...

Оранж не нравится?

Неее, я думаю после того, как ажиотаж спадет, Зеро таки до десятки подешевеет или ниже ... Все-таки спроса на неё не будет так же много, как на предыдущие модельки ... Да и иначе будет проще А-ку взять.

А всякие одноплатные арм-ы, что пихают в медиаплееры не подешевели ли уже настолько что их будет удобнее для этого использовать? Там и сата должна быть, и остальные штуки?

[identity profile] dimas.livejournal.com 2015-12-28 10:31 pm (UTC)(link)
Нашел ссылку за 18 - http://ru.aliexpress.com/item/Orange-Pi-PC-linux-and-android-mini-PC-Beyond-Raspberry-Pi-2/32448079125.html

[identity profile] sevasat.livejournal.com 2015-12-28 11:27 pm (UTC)(link)
Бери малину. Кубиборда - кусок говна китайского, практически без коммунити и без поддержки. У Малины - огромное коммунити, которое хоть и состоит на 90% из ардуинщиков, тем не менее производит достаточное количество рабочего кода. И с поддержкой все хорошо. А с кубибордой по любому поводу пердолиться приходится, даром что разработка кетайских студентов.

[identity profile] dimas.livejournal.com 2015-12-28 10:18 pm (UTC)(link)
Ну, Raspbian Jessie Lite он как бы уже на systemd (кстати, они наконец выпустили версию Lite без всякой лишней тряхомундии) ...

При всей моей любви к генту (и на работе и дома), но на малине ... зачем? ...

не скрою, я думал об этом, но никак руки не дойдут с qemu разобраться ... мне для моих игрищ пока и распбиана хватает ...

а зачем аж два ампера, неужели переходник столько жреть? у меня пока (тьфуХ3) хватает амперного блока при работе с сетью и usb gsm модемом ... я, правда, цеплял телефизор только один раз - когда перемудрил с fstab`ом, делая конфигурацию, что ничего не пишет на флешку, и немного накосячил ...

[identity profile] sevasat.livejournal.com 2015-12-28 11:42 pm (UTC)(link)
Со старыми малинами (которые с LDO вместо системы питания) наблюдаются такие проблемы. У b+ и последующих моделей, с импульсным DC-DC этих проблем уже сильно меньше, как и проблем с перегревом.

[identity profile] dimas.livejournal.com 2015-12-28 11:43 pm (UTC)(link)
А. У меня то b+ :)

[identity profile] sevasat.livejournal.com 2015-12-28 11:51 pm (UTC)(link)
Да первую ревизию малины дизайнили какие-то хипсторы со смузями походу. Этот LDO с 5 на 3.3 - былинный отказ, она жрет лишних ватт-два и на них же греется в итоге. А если на него еще переферии налепить, то вероятность исхода волшебного дыма растет экспоненциально.

[identity profile] eddy-em.livejournal.com 2015-12-29 05:42 am (UTC)(link)
> зачем?
Затем, что скоро кроме генты, слаки и LFS (хотя его с натяжкой дистром можно называть) не останется линуксов!

Еще один плюс: у меня везде гента, так что удобно, когда и на одноплатнике та же система. Чтобы не было такого, что набираешь emerge-webrsync, пялишься с десяток секунд на command not found и вспоминаешь, что перед тобой дебиан!

[identity profile] dimas.livejournal.com 2015-12-29 08:24 am (UTC)(link)
Я плюнул, сделал себе шпаргалку из всего чем пользуюсь, и изредка туда залезаю :) Благо не так часто что-то там менять приходится, больше со своим самописным развлекаюсь ...