LINUX.ORG.RU
решено ФорумTalks

browser-based distro - на чём пилить?

 , , , ,


0

3

Итак, после длинных срачей на тему браузерных ос ваш покорный слуга, вдохновленный идеей товарища init_6 о dwbOS и осознающий плачевность ситуации с дистрами подобного типа (сейчас остались в живых только Chromium OS, с которого и пишу, и Webconverger, который хоть и на фаерфоксе, но куда более анально огороженный, ибо автор настолько хитрожоп, что даже настройки соединения заставляет хранить исключительно в облаке (!) и за бабло (!)), решил зопилить что-то подобное для легковесного вебкитного браузера, например, surf(+ пропатченный dmenu) или того же dwb(+, в принципе, тот же пропатченный dmenu).

Следовательно, возникают вопросы:

  • На чём лучше базироваться, дабы размер дистра не превышал гига, в крайнем случае двух? Лфс, генту и прочие source-based не предлагать - главный таргет есть загрузочная флэшка (т.е. должно грузиться на абсолютно разных конфигурациях), да и компилёж вебкита - занятие не из приятных. Пока что думаю над арчем, но в нём даже базовая система какая-то слишком жЫрная изначально. Alpine Linux - в принципе, вариант (всё на μClibc), но там шаг влево/вправо от существующих пакетов - амбец.
  • Что использовать в качестве менеджера сетевых соединений (главным образом WiFi и главным образом WPA2)? Поскольку упор на легковесность, всякие networkManager тащить не хочется.
  • Как обеспечить быструю загрузку с флэшки, если хочется еще и сжатие (squashfs)?

Ответ на: комментарий от border-radius

Имхо цикл по /sys/class/net/* проще, чем три грепа в цепочке.

Хотя да, можно просто for iface in /sys/class/net/* (и вручную проверять, не lo ли это), а не find'ом.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

// как говорят, с помощью | while read line можно сделать всё =)

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Ну ладно, уговорил. Остаётся только надеяться, что разрабам не стукнет что-то крепкое в голову и не взбрендит перенести /sys/class/net в другое место и вообще переписать драйвер sysfs на жабу.

border-radius
() автор топика
Ответ на: комментарий от intelfx

Отлично. Ну, примерно скрипт генерации профиля и переключения на него накидал, щас буду разбираться с dwb дальше.

border-radius
() автор топика
Ответ на: комментарий от intelfx

Так-с, пишу из асгарда, пока под проводным соединением (скрипт для вифи ещё надо отлаживать, судя по всему). Сделал настройку раскладок по :kblayout (: переводит dwb в командный режим), например, kblayout us,ru,ua, переключение захардил на Alt+Shift. Сделал запуск неинтерактивных команд по :run, а вот коннект будет :connect [wireless|ethernet] [none|wep|wpa] <SSID> <PASS>. Шрифты пока впилил только ttf-liberation. Всё довольно шустро. Да, скриншотер тоже впилил, :run scrot работает. :)

border-radius
() автор топика
Ответ на: комментарий от intelfx

Ты ж понимаешь, что 1) лучше что-то из официальных реп арча (не хочется в проприетарщину влезать), 2) вследствие того косяка с mke2fs особо на зоопарк шрифтов не разгуляешься (если и выберу, то что-то одно, типа тех же pt, ttf-droid или ttf-ubuntu-font-family).

PS. Причем моноширинный либерейшн ещё збс смотрится, а вот санс уныло донельзя, и чем крупнее, тем унылей.

border-radius
() автор топика
Ответ на: комментарий от border-radius

Предлагаю всё же впилить в connect режим «menu» (connect wireless menu или просто connect menu), который будет запускать терминал с wifi-menu. Вводить параметры руками, конечно, сурово и брутально, но часто неудобно (напр., хот-споты).

Ещё можно предусмотреть ключевое слово «edit», при наличии которого последним параметром запускается редактор, в котором открыт файл только что сгенерированного, но ещё не задействованного профиля. (Это достаточно дешёвый способ поддержать не-DHCP сети, не устраивая из скрипта адъ и Израиль.)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Блин, впиливать внешний терминал и вообще какие-то внешние окна - это последнее дело, ящитаю. Но, видимо, придется впилить какой-то xterm хотя бы для отладки того же скрипта uniconn (генерит по введенной инфе профиль и переключает на него netctl).

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

PT Sans не проприетарный

Я в курсе.

А моноширинный лучше вообще Терминус...

Не хочется ставить больше одного пакета. Если бубунта - бубунта, если пт - пт, если либерейшн - либерейшн. Только freefonts не понравились, у них санс какой-то слишком жирный.

border-radius
() автор топика
Ответ на: комментарий от intelfx

Вообще, круто.

А вот теперь круто!

Впилил ttf-droid - идеально подошли. Щас пишу с асгарда, опять же. Единственное, курсив какой-то невтемный. Но это всё неважно, главное, uniconn свой и соответственно команду connect отладил. Таким образом, своих команд, встроенных в асгардовский dwb, теперь трое и они реально работают:

  • :run <command> - запуск произвольной команды с выводом последней строки stdout в левый статусбар (есть xterm, есть scrot, например)
  • :kblayout <раскладка1>,<раскладка2>... - выбор списка раскладок, переключаемых по Alt+Shift
  • :connect <ethernet|wireless> <none|wep|wpa> <SSID><PASS> - соединение по проводной/беспроводной связи, когда скрипт отработает и установит соединение, тоже выведет уведомление в левый статусбар. Пока что только DHCP, ну и если сетевой кабель был воткнут до включения, то при включении арч сам подымет сеть.
border-radius
() автор топика
Ответ на: комментарий от border-radius

Блин, не могу редактировать сообщения, а перенабирать теги влом. Короче, между <SSID> и <PASS> там пробел, естественно.

border-radius
() автор топика
Ответ на: комментарий от border-radius

если сетевой кабель был воткнут до включения, то при включении арч сам подымет сеть

Ты же в курсе, да, что это происходит без участия netctl, и в этом случае при попытке сделать :connect ethernet произойдёт UB?

переключаемых по Alt+Shift

Не хочешь, опять же, добавить в :kblayout фичу следующего типа — если вторым параметром указано что-то из alt_shift, ctrl_shift или caps, то добавить grp:${2}_toggle в опции xkb?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Ты же в курсе, да, что это происходит без участия netctl, и в этом случае при попытке сделать :connect ethernet произойдёт UB?

Что-что произойдёт? У меня перед включением динамически сгенерированного профиля сначала netctl stop-all делается.

Не хочешь, опять же, добавить в :kblayout фичу следующего типа — если вторым параметром указано что-то из alt_shift, ctrl_shift или caps, то добавить grp:${2}_toggle в опции xkb?

Думаю об этом, кстати. Просто у меня lwin_toggle уже как-то зафейлился, я подумал, что его dwb перехватывает, вот и забил на эту фичу. Но в следующем билде запилю.

Щас думаю над тем, что называется болгенинг. :) Как заменить лого в загрузочном экране syslinux, и еще есть ли в арче что-то типа /etc/issue дебиана?

border-radius
() автор топика
Ответ на: комментарий от border-radius

Что-что произойдёт?

Undefined Behavior. DHCP-клиент из dhcpcd@<iface>.service (если ты о нём говоришь) конфликтнёт с DHCP-клиентом, запущенным из netctl.

netctl stop-all здесь не поможет.

заменить лого в загрузочном экране syslinux

В собранном образе они лежат в /boot/syslinux/*.png. А как заменить при сборке — ну, наверное, впилить нужные команды в build.sh непосредственно перед созданием ISO-образа.

есть ли в арче что-то типа /etc/issue

/etc/issue в арче есть. Это фича agetty.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

netctl stop-all здесь не поможет.

ЕМНИП, при старте используется тот же netctl?

В собранном образе они лежат в /boot/syslinux/*.png

Щапосмотрим.

/etc/issue в арче есть. Это фича agetty.

Да ну? Интересно...

P.S. Насчет раскладок - в силу специфики передачи аргументов скриптам там всё немного иначе, но сложнее на +1 строку. :)

border-radius
() автор топика
Ответ на: комментарий от border-radius

ЕМНИП, при старте используется тот же netctl?

ЕМНИП, нет. =) Там для этих целей есть отдельный юнит, dhcpcd@.service, а кто его запускает — не знаю (вполне возможно, что ещё один специально написанный юнит, но может быть и udev-правило).

Да ну?

Ну вот у меня он точно есть. filesystem 2014.07-1, util-linux 2.24.2-1.

Кстати, если ты ещё болгенируешь, то взгляни на /lib/os-release. Его содержимое используется при выводе «Welcome to %s» при старте системы.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

dhcpcd@.service

А, нет. Скорее всего, просто включен dhcpcd.service — у него в Description написано следующее: «dhcpcd on all interfaces». Но всё равно это не netctl.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

А как заменить при сборке — ну, наверное, впилить нужные команды в build.sh непосредственно перед созданием ISO-образа.

Да я и так уже перелопачивал и build.sh, и сам archiso. Если я правильно понял, заменять надо 640x480 work/iso/arch/boot/syslinux/splash.png и соответственно пункты меню в конфиге в work/iso/arch/boot/syslinux/syslinux.cfg, или достаточно сделать такие изменения в root-image/boot/syslinux/, а дальше эта хрень и в образ подтянется?

border-radius
() автор топика
Ответ на: комментарий от intelfx

Дай угадаю — всё в одном аргументе?

Именно. Но read решает.

А, нет. Скорее всего, просто включен dhcpcd.service — у него в Description написано следующее: «dhcpcd on all interfaces». Но всё равно это не netctl.

То есть на всякий случай надо написать что? systemctl stop dhcpcd.service?

Кстати, если ты ещё болгенируешь, то взгляни на /lib/os-release. Его содержимое используется при выводе «Welcome to %s» при старте системы.

Ага, спс.

border-radius
() автор топика
Ответ на: комментарий от border-radius

Судя по скрипту, конфигурация syslinux (включая картинку) лежит в директории syslinux относительно корня сборки (того места, где лежит build.sh).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от border-radius

systemctl stop dhcpcd.service

Стой. Я рекурсивно слажал. Я сейчас всё-таки посмотрел в archiso — и там на самом деле используется dhcpcd@.service и udev-правило, которое запускает его для каждого ethernet-интерфейса.

Оно лежит в root-image/etc/udev/rules.d/81-dhcpcd.rules. Его можно либо удалить и написать собственный юнит, который запустит аналог твоего connect ethernet при старте системы (я бы сделал именно так), либо в самом connect перед запуском netctl делать systemctl stop dhcpcd@<выбранный интерфейс>.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

либо в самом connect перед запуском netctl делать systemctl stop dhcpcd@<выбранный интерфейс>.

А я бы сделал именно так, поскольку ситуация редкая и только для проводных.

Судя по скрипту, конфигурация syslinux (включая картинку) лежит в директории syslinux относительно корня сборки (того места, где лежит build.sh).

А вот здесь я рекурсивно протупил. Вот оно же, точно, прямо в releng валяется.

border-radius
() автор топика
Ответ на: комментарий от border-radius

А я бы сделал именно так, поскольку ситуация редкая и только для проводных.

Тогда можно просто скипать поднятие соединения для интерфейса, если этот юнит уже активен (проверяется командой systemctl is-active dhcpcd@<интерфейс>).

intelfx ★★★★★
()
Ответ на: комментарий от border-radius

Насчёт /etc/issue — предлагаю положить изменённый issue в root-image/etc/issue (с os-release аналогично). Эта директория, по-видимому, используется как раз для кастомизации.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Спасибо, кэп! Я это сделал 20 минут назад :) Это же и есть оверлей, туда всё кладётся (для юзерских профилей - в root/image/etc/skel, естественно).

border-radius
() автор топика
Ответ на: комментарий от intelfx

Я нашел способ кастомизировать даже base (путем запуска на этапе установки base пропатченной версии archiso), вот только не пойму, какая хрень из оставшихся всё равно тащит в зависимости перлоту ещё при установке base, если саму перлоту и gettext я исключил из базовых.

Вообще, у меня исключения из base сейчас такие: ^7-8 ^12-14 ^21-22 ^27-30 ^33 ^36-40 ^46 ^49-51 (не то чтобы это действительно важно, но удобного копипаста для :))

P.S. Кстати, на этом самом ноуте асгард с флэшки работает шустрее хромоси с винта.

border-radius
() автор топика
Ответ на: комментарий от intelfx

Кстати. Пользуясь случаем, объясняю, что такое жЫрная базовая система в арче. Вот комплектация пакета base:

1) bash  2) bzip2  3) coreutils  4) cryptsetup  5) device-mapper  6) dhcpcd  7) diffutils  8) e2fsprogs  9) file  10) filesystem  11) findutils
12) gawk  13) gcc-libs  14) gettext  15) glibc  16) grep  17) gzip  18) inetutils  19) iproute2  20) iputils  21) jfsutils  22) less
23) libutil-linux  24) licenses  25) linux  26) logrotate  27) lvm2  28) man-db  29) man-pages  30) mdadm  31) nano  32) netctl  33) pacman
34) pciutils  35) pcmciautils  36) perl  37) procps-ng  38) psmisc  39) reiserfsprogs  40) s-nail  41) sed  42) shadow  43) sysfsutils
44) systemd-sysvcompat  45) tar  46) texinfo  47) usbutils  48) util-linux  49) vi  50) which  51) xfsprogs
Ладно, маны и дрова для всяких экзотических ФС могут кому-то понадобиться (я их исключил, как и много чего ещё). Но нафейхоа в базовой (!) системе нужно джва(!) текстовых редактора, агент доставки почты, перлота, джва (!) просмотрщика манов, gettext, mdadm? Это base или bloat, блин?

border-radius
() автор топика
Ответ на: комментарий от intelfx

Короче, сделал предохранитель, он уже работает - если загрузиться при воткнутом сетевом кабеле и сделать :connect ethernet, то сразу в статусбар выдаст "Connection on the wired interface en82nyoklmn already established". Только вот, блин, вопрос - а не может быть такой ситуации, когда чел просто захотел переключиться с проводного соединения на беспроводное? Может, какой-то :disconnect предусмотреть?

border-radius
() автор топика

Итак, промежуточные итоги:

  • Дистр и система сборки выбраны: Arch и чуток перепиленные скрипты archiso соответственно. Формула кастомизации base-группы арча (во избежание той самой жЫрноты) пока что такова: ^4 ^7-8 ^12-14 ^21-22 ^27-30 ^33 ^36-40 ^42 ^46 ^49-51.
  • Кодовое имя - Asgard.
  • Комплектация - dwb со своими командами (юзерскриптами на баше) в качестве единственно доступной оболочки, свой фронтенд к netctl для вызова из dwb-скрипта connect (uniconn), а также xterm + nano для отладки и scrot, куда же без него.
  • Система дистрибуции - гибридный liveCD/liveUSB (от сквоша никуда не денешься).
  • Вопросы с менеджером соединений и раскладкой решены, остались мелкие нюансы.
  • Кастомные dwb-команды на данный момент: :run - запуск любой команды, :connect - сетевое соединение, :kblayout - параметры раскладки клавиатуры. В ближайших планах - :disconnect и что-то буду думать с управлением громкостью звука.
  • Начат процесс болгенирования (кастомизации внешнего вида). Из масштабных планов - сплэш для syslinux и юзерстили для dwb (в частности, переделка унылого скроллбара)

На новую тему пока не тянет, но эту отмечаю как решенную. Разумеется, обсуждение можно пока продолжать здесь.

border-radius
() автор топика
Ответ на: комментарий от border-radius

Кстати, состав base может иногда меняться. Не лучше ли явно указать список пакетов, которые тебе _нужны_ из base?

intelfx ★★★★★
()
Ответ на: комментарий от border-radius

Забыл упомянуть: шрифты - всё-таки ttf-droid оставил, ну и mpg123 впилил, чтоб можно было потоковое радио слушать, а-ля :run mpg123 http://streams.getmyip.com, а останавливать пока что :run killall mpg123 :) (может, ещё mpd впилю и навороченный командный фейс управления mpd из dwb, но это в одну из самых последних очередей)

border-radius
() автор топика
Ответ на: комментарий от intelfx

Ага, так и сделаю, наверное, только выделю в отдельный скрипт, а то запускать же ж через sudo надо.

Кстати, состав base может иногда меняться. Не лучше ли явно указать список пакетов, которые тебе _нужны_ из base?

Он не меняется каждые 3 дня, верно? Перед Ъ-релизом сделаю иначе, сейчас это всё равно не автоматизировано.

border-radius
() автор топика
Ответ на: комментарий от intelfx

Щас собираю образ с :disconnect (сделал немного не так), :playmp3 <uri|path>, :stopmp3 и :volctl, который таки да, запускает xterm -e alsamixer. Думаю, может, сделать ещё просто что-то типа vol 50, которым можно будет ставить просто громкость на Master.

border-radius
() автор топика
Ответ на: комментарий от intelfx

Ну это опять копать archiso надо, может, и займусь.

Кстати, впилил же ж второй параметр в kblayout, так вот kblayout <раскладки> lwin работает, то был какой-то другой баг.

Но блин, щас надо найти способ правильно указать дроид-шрифты в dwb по умолчанию (как fallback-шрифты serif, sans-serif, monospace, cursive, fantasy). А то я как зашел на гитхаб, как прозрел от масштабируемого pcf-ШГ, подхваченного вместо дроидов...

border-radius
() автор топика
Ответ на: комментарий от border-radius

Кстати, да, косяк с гитхабом (точнее, косяк гитхаба) даже вынесен отдельно в статью по dwb на archwiki, видимо, остальные не страдают таким наркомазмом. :)

border-radius
() автор топика
Ответ на: комментарий от border-radius

Всё, вопрос с ШГ в гитхабе решил кардинальным образом (глобальный юзерстиль в /opt/asgard/asgard-style.css, в котором гарнитура clean подменяется на тот же Droid Sans; этот же юзерстиль будет использоваться для установки кастомного -webkit-scrollbar). Как раз начал пилить на гитхабе мануалку. Скринота с последними командами asgard-dwb.

border-radius
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.