# 9front на rpi4 как терапия
hugeping(ping,1) — All
2021-03-01 14:16:23


Специально для 9front (форк Plan9) я заказал себе вторую "малинку". На данный момент система работает и я ей пользуюсь. Но путь был непростым, поэтому я решил составить памятку по основным, скажем так, нюансам.

## Plan9, 9Front и golang

На самом деле, кроме 9front на rpi4 можно поставить "ванильный" Plan9 с патчами от Дэвида Миллера. Скачать образ можно здесь: https://9p.io/wiki/plan9/download/ Забегая вперёд скажу, что ванильный Plan9 есть только для архитектуры arm32, в то время как 9front образ -- это arm64. Забавно, что даже rPI OS до сих пор поставляется в виде 32-битных сборок. И вроде бы хорошо, что 9front такой крутой. Но только на данный момент golang не поддерживает цель plan9/arm64, поэтому установка Plan9 для rpi4 от Миллера -- единственный путь получить golang. Ещё одно отличие -- драйвер wifi, который есть только в сборке Миллера.

Я думал уже поставить "чистый" Plan-9 но... Но потом понял, что если у Plan-9 и есть будущее, то оно за 9front. Так что ставил именно его.

## Заполняем всю карту

Проблемы начинаются с того, что записанный образ на карту имеет фиксированный размер. Поэтому вся карточка будет недоступна. Я пошёл следующим путём:

* Поставил в qemu 9front;
* Собрал в нём версию для arm64 (описано в разделе J руководства. С поправкой "arm32->arm64");
* Заменил скрипт inst/mountcwfs чтобы ставиться без worm http://docs.a-b.xyz/cwfs.html ;
* Ещё я поменял в скрипте inst/copydist строчку с disk/mkfs, заменив allproto на distproto;
* Включил export файловой системы;
* Записал образ на sd карту малинки. Во время загрузки выбрал загрузку не с карты, а по сети с 9front на qemu;
* Провёл процедуру инсталляции.

В итоге, у меня получилось занять всю sd карточку и без WORM раздела!

## Видео

Сначала я явно задал режим для своего монитора, отредактировав config.txt:

9fs pidos
acme /n/pidos/config.txt

Далее, заглянув в исходники ядра, я убедился что включается 16 битный режим. Я задал 24-битный (отредактировав config.txt и cmdline.txt). На мой взгляд, он работал быстрее! Однако каналы R и B были перепутаны. Тогда я просто поменял это в исходном коде и пересобрал ядро. Заработало!

## Шрифты

В этот раз я решил заморочится с шрифтами. Потому что дефолтный вид браузеров на русскоязычных ресурсах был категорически страшен. Оказалось, что для Plan9 есть утилита: ttf2subf, которая может перегонять ttf шрифт в битмап формат Plan9.

Взять её можно из extra 9front:

9fs 9front;
ls /n/extra | grep ttf2subf

Я скачал шрифты Go и перегнал размеры: 13,14,16,18,20 для каждого из начертаний (выбирал режим antialias). С помощью fontsel (тоже есть в extra) посмотрел на шрифты. Мне понравилось. До кучи прогнал ещё для любимой Iosevka. Попатчил: netfront, acme, mothra на шрифты Go и... результатом был очень доволен! Вот такой веб мне по душе!

## Почта

При настройке почты по мануалу 9front снова натолкнулся на грабли о которых забываю уже второй раз. В мануале не написано, что /mail/lib/rewrite нужно заменить файлом /mail/lib/rewrite.gateway. Без этого инструкции бесполезны. При отправке письма вы будете получать 'Invalid address.'. Не благодарите. Тем более, что вы вряд-ли будете заниматься тем же, что сделал я. :) Кроме того попатчил upas, чтобы не требовал проверки подлинности сертификатов. Да, это плохо. Но google меняет их постоянно, а в 9front нет нормальной проверки цепочки сертификатов.

## Русская раскладка

Тут я воспользовался своими патчами с https://github.com/gl00my/plan9hacks -- caps переключает раскладку.

## ruspell

Собрал lua из ports. Только там нужно собрать не только lua библиотеки, но и сам интерпретатор. Для этого там есть специальный mk файл. После этого заработал мой ruspell на lua.

## А что же с go?

Без go тяжело. Я пытался дописать plan9/arm64 цель. Даже написал реализацию системных вызовов. Но на этапе линковки под цель -- падает линкер. Пока я не разобрался в чём тут дело и отложил задачу. Но у меня есть вторая малинка, на которой крутится Linux. И на которой, кстати, сейчас находитесь вы (если читаете эту статью с https://hugeping.tk или gemini://hugeping.tk ). Так что я решил проблему своих утилит для чистого веба просто запуском их по ssh.

## Да, а как с gemini?

Собрал castor9. Но он неправильно работает с UTF-8. Делает узкими русскоязычные ресурсы. Запатчил. Ну и текстовый gemnine тоже есть.

## Зачем весь этот кошмар?

А вот тут начинается самое интересное. Моя тяга к минимализму постепенно прогрессирует и всё это время я пытался найти ей объяснение. Да, как оказалось, в этом я совсем не одинок. Например, Drew DeVault -- автор sway, основатель sourcehut. Недавно сообщил о том, что открывает хостинг в gemini: gemini://drewdevault.com/2021/02/20/Free-gemini-hosting.gm

А Алан Кокс уже довольно давно сделал Fuzix OS -- UNIX-систему для древних процессоров. Знаете какой у неё слоган? "Fuzix: Because Small Is Beautiful".

И таких примеров немало. Что происходит?

Похоже, у этой странной формы луддизма явно не технические, а человеческие причины. Вопрос ставится уже не в форме "а может ли ваша X делать Y?" Нет, выглядит это как "руки прочь от меня! Я не продукт. Здесь нет ничего, что тебя заинтересует!" Это уже напоминает панк-движение или что-то в этом духе.

Когда я собрал себе "машинку" на rpi4, поставил 9front, подключил дешёвый монитор и механическую клавиатуру на синих свитчах в голову неожиданно пришла ассоциация. Да это же просто печатная машинка! Да. Я испытываю умиротворение работая с простой системой. Это, в каком-то смысле, информационная аскетика -- выбросить мусор из головы, ограничить себя. Ограничить потоки информации, поступающие через органы чувств. Разгрузить мозг. На rpi4 в 9front не работает даже звук! Сначала у меня была мысль написать драйвер. Потом я подумал. Нет звука? Что же, это прекрасно! Поработаю в тишине.

Как то раз я отправил письмо из gmail (через веб почту) в рассылку 9front. Через пару минут пришёл ответ от робота. Извини, мы не принимаем письма в html. "Пошёл вон, Вавилон!" (c)

Я давно занимаюсь IT-технологиями. И я зависим от информации, как и многие из нас. Телефон всегда со мной ("моя прелесть!"). Чаты. Новости. Меня сделали зависимым от информации. Не без моего согласия, конечно. Но я всё ещё помню аналоговый мир и мне хочется верить, что изменения во мне обратимы. Надо выбираться из этих сетей! Пытаться. Начинать с малого. Например, не смотреть в свой телефон на прогулке... Не смотреть в свой телефон на прогулке! НЕ СМОТРЕТЬ В СВОЙ ТЕЛЕФОН! НЕ СМОТРИ В СВОЙ ЧЁРТОВ ТЕЛЕФОН!!!

До встречи! :)