LINUX.ORG.RU

Взять Armbian и вырезать всё лишнее. Работа на одноплатнике.

 ,


0

1

Хочется взять armbian последний-предпоследний, загрузиться с него и на живой системе начать вырезать всякое ненужно. Цель - получить минималистичный дистр, наиболее быстро грузящийся с SD карты на одноплатнике, который ничем особо не занят, кроме отправки бекапов куда-то раз в час и кое-каких фоток с камер видеонаблюдения. Девайс стоит на полке в прихожей, его не трогают.

Хочется оставить:

  • systemd как главный запускатор, возможность запускать примерно какие угодно свои скомпиленные под ARM бинарники написанные на сишечке путём написания привычных .service файлов

  • wi-fi дрова и в принципе «всю сеть», но без NetworkManager, а через /etc/interfaces + /etc/wpa_supplicant + ifup + ifdown - такой стиль работы с сетью

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

  • родной apt, чтобы могло что-то установить-проапдейтить из armbian репы родной

Вопрос в том, каких главных жирных злодеев с системе надо убивать и резать первым делом? Что там работает, что является объективно лютым ненужно с точки рения простых челябинских сибирских мужиков? Всякие там менеджеры-архиваторы логов, сообщатели о краше приложений, apparmor-подобная опердень да? Что ещё?

Или какой алгоритм действий - смотрим на каждый стартанувший сервис, гуглим нафиг он нужен и режем его? Но это мне не даст возможности сократить объём хлама на SD карте, который там может лежать просто втихаря незамеченным.

Я тут нашёл контрольную плату от биткоино-майнера какого-то, там на борту zynq-ПЛИС+ARM два ядра, 512мб ОЗУ и флешка какая-то. Включил, оно заргузилось, по dhcp адрес получило, root по ssh пустило - а там

BusyBox v1.25.1 () built-in shell (ash)

   ____            _ _              ______   _____
  |  _ \          (_|_)            /  __  \ /  ___|
  | |_) |_ __ __ _ _ _ _ __  ___  |  |  |  |  (__
  |  _ <| '__/ _` | | | '_ \/ __| |  |  |  |\__  \
  | |_) | | | (_| | | | | | \__ \ |  |__|  |___)  |
  |____/|_|  \__,_|_|_|_| |_|___/  \______/______/  by Braiins for Slush Pool
 -----------------------------------------------------------------------------
  2022-02-18-0-b63a6c87-22.02-plus
 -----------------------------------------------------------------------------

Круто это конечно, но до такой степени я armbian врядли урежу да и apt там никакого нет встроенного, вдруг захочется какие-то либы поставить libusb-dev например…

Корень у меня вообще как RO монтируется и я живу в рамдиске, чтобы SD-карту не портить, да и как-то привычнее и стабильнее - мало ли какая тварь в корне что испортит, а так хоть гарантия что ты сегодня загрузился с того же, с чем в чера.



Последнее исправление: lesopilorama (всего исправлений: 2)

Вопрос в том, каких главных жирных злодеев

ответ:

systemd как главный запускатор

и получится OpenBSD :)

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

systemd может и жирен, но речь о жироте другого порядка - весь этот ARMbian занял то-ли 450, то-ли 600 мегабайт на флешке. Это явно какой-то жирокомбинат, я точно использую только 5% от этой фигни.

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

Это явно какой-то жирокомбинат, я точно использую только 5% от этой фигни.

Тогда debootstrap ?

sanyo1234
()

Хочется...

Разрешаю.

sparkie ★★★★★
()

Опытным путём отрезай, я так на одноплатнике андроид 4.4 в полтора раза усушил.

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

Кстати, интересно было бы увидеть сравнение системы на systemd и на классических, или альтернативных системах. Вот как бы сейчас, на современных системах всё выглядело?

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

Кстати, интересно было бы увидеть сравнение системы на systemd и на классических, или альтернативных системах. Вот как бы сейчас, на современных системах всё выглядело?

Всё было бы так же. Это не та область, которая на что-то там влияет.

lesopilorama
() автор топика

Ну так собери свой armbian c тем что нужно, sysvinit’ом и без avahi.

Ну и всякие другие дистрибутивы есть, которые намного проще минимизировать. Я вот slackware-arm на OrangePi Zero ставил, например. Очень компактненько вышло.

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

Самое компактное с большим набором архитектур - это IMHO Alpine Linux.

sanyo1234
()

Заходи не со стороны того, что занимает место, а что запущено.

У systemd довольно богатый (но не очень интуитиный) инструментарий по отслеживанию того какие службы на сколько времени задерживают загрузку и т.п. что вообще запускается и от чего зависит. И в отличии от «просто посомтреть в top» ты увидешь о что при старте просто запустилось и отработало. (в лапше обычного init это понять нереально, имел опыт с такой задачей ещё до systemd)

И сокращаешь список используемых юнитов, удаляя предоставляющие их пакеты. Главное записывай куда-нибкдь список удалённого, потом будет проще потворить\автоматизировать создание такого образа.

После очередной итерации самым тюжёлым становится процесс инициализиации ядра. RO корень всё это переживает вполне нормально. Я делал подобное, только начинал не с armbian, а с какой-то ubuntu с вручную добавленным последним ядром от armbian и для моих целей (устройство без wifi) - список получился примерно такой

unneeded rpi firware services: # rpi firmware is managed by another partition
  file.absent:
    - names:
      - /lib/systemd/system/timers.target.wants/systemd-tmpfiles-clean.timer
      - /etc/systemd/system/basic.target.requires/rpi-set-sysconf.service
      - /etc/systemd/system/rpi-set-sysconf.service
      - /etc/systemd/system/rpi-reconfigure-raspi-firmware.service
      - /etc/systemd/system/sysinit.target.requires/rpi-reconfigure-raspi-firmware.service
      - /etc/systemd/system/multi-user.target.requires/rpi-reconfigure-raspi-firmware.service
      - /etc/systemd/system/multi-user.target.wants/networking.service
      - /etc/fstab

unneeded service groups:
  file.absent:
    - names:
      - /etc/systemd/system/timers.target.wants
      - /etc/systemd/system/sysinit.target.wants

unneeded packages:
  pkg.purged:
    - pkgs:
      - systemd-timesyncd
      - wpasupplicant
      - linux-image-arm64
      - raspi-firmware
      - initramfs-tools-core
      - cron
      - cron-daemon-common
      - lightdm
      - apparmor
      - dbus-user-session
      - libpam-systemd

autoremove unused packages:
  module.run:
    - pkg.autoremove:
      - purge: True

unneeded logs: # rpi firmware is managed by another partition
  file.absent:
    - names:
      - /var/log/alternatives.log
      - /var/log/bootstrap.log
      - /var/log/dpkg.log

unneded log-cache dir:
  file.directory:
    - clean: True
    - names:
      - /var/log/apt
      - /var/cache/apt/archives


/etc/fstab:
  file.managed:
    - contents: ''

/usr/lib/modules:
  file.directory

/etc/systemd/network/ether-dhcp.network:
  file.managed:
    - source: salt://ether-dhcp.network

GPFault ★★★
()

Я бы посмотрел в сторону Archlinux for ARM. Или buildroot.

Slavik763
()
Ответ на: комментарий от GPFault

В общем, сегодня полтора часа занимался этим делом, что-то выпиливал. Под нож пошли gcc-12, python3 и прочее там всякое такое, нах не нужное, NetworkManager (перешёл на ifupdown), потом читал dmesg оказалось systemd графику запускать пытается несколько секунд, а мониторов-то нет. Потом ещё дефолтный таргет на multiuser поставил с graphics. Завтра продолжу читать systemd и смотреть кто сколько секунд пожрал и его прибивать, графика пока не побеждена.

Ну и за совет спасибо этот, подумаю.

В корне всё ещё чего-то лежит на гигабайт. /usr/include что-ли потереть нахрен…

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

У меня тут рут 27МБ. Конечно этот велосипед, я не сам делал, а мои предшественники. Но мне нравится (подход), хотя местами лютейший геморрой вызывает.

Ну и чтобы не быть голословным за счет чего все это:

uClibc-ng-1.0.38
busybox-1.34.1
dropbear-2020.8

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

Ну а в целом, рекомендую посмотреть в сторону yocto. Там всё тоже самое только стандартизованное и настраиваемое.

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

У меня тут рут 27МБ. Конечно этот велосипед, я не сам делал, а мои предшественники. Но мне нравится (подход), хотя местами лютейший геморрой вызывает.

Ухх йопта…

lesopilorama
() автор топика
Ответ на: комментарий от Stanson

Мегабайт 100 где-то. Сеть, баш с перлом, опач и всякая мелочь.

По-моему я подошёл к ~600M. Пока что не удалось выпилить /lib/firmware - там мебагайт 100 лежит всякого кала. Возможно надо её целиком дропнуть и потом смотреть что отвалилось. Скорее будет «ничего». Так же, по всяким углам рассовано всякое петушни по 50 мб. Особо меня бесит perl. Нахрена мне сраный пёрл, я что больной дегенерат, на дворе 2025 год уже. Я даже python3 снёс. Кажется perl нужен git-у. Нахрена мне там гит? Вопрос интересный конечно, учитывая что я туда собрался катать сырые бинарники статически скомпилированные под ARM. Ещё есть apt, которому я порубил все кеши, но его lists жрут под 100 мегабайт. Хочется его выпилить, но где же я тогда буду брать пакетики. Есть ещё кажется /lib в которой лежат горы библиотек, не факт что нужные чему-то, что в свою очередь нужно мне.

В общем, пока что успех заключается в том, что:

  • я поизучал систему, что в принципе уже само по себе круто; ощущения, что вернулся куда-то в тёплое ламповое прошлое, когда братаны на районе пилили свои дистрибутивы, это окуенное ощущение; и вообще такие манипуляции дают понимание из чего вообще дистрибутив сделан
  • в .tar.gz вся файловая система уже весит меньше 300 мб и оно грузится. Это хорошо.
lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 4)

Если осилишь Das U-Boot и перенос ядра - ставь Void linux. Богатая пакетная база и ничего лишнего.

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

systemd штука жирная, куда жирней, чем sysvinit. systemd тянет glibc, которая тоже куда жирней, чем musl. Поэтому тут ты не прав.

Если хочешь крохотный rootfs, тебе надо собирать систему без systemd. Я это делал на buildroot, если твоя плата поддерживается, это будет самый простой вариант.

А вообще серьёзные ребята делают на yocto, но там сам чёрт ногу сломит, лично я не осилил.

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

Если осилишь Das U-Boot и перенос ядра - ставь Void linux. Богатая пакетная база и ничего лишнего.

Жалко тебя казнили, но я не понял что такое «осилить U-Boot». Я умею U-Boot из исходников собирать и на флешку записывать по нужному смещению и он работает. Да чё там уметь: git clone, make Cubieboard_default, make и готово.

lesopilorama
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.