я расковырял uInitrd от системы armbian...но что-то особо не понял, что та должно быть.. вроде какое-то микро ядро... но что оно должно делать и как такое-же собрать со своими параметрами - не ясно..
Вадим Алиев, Это не микроядро - ядро так одно и то же, это скорее "микросистема", которая должна проверить железо и запустить нужные дрова. Если есть уже разобранный initrd - можно тупо заменить в нем что надо и запаковать обратно, только паковать тем пакером, который ядро поддерживает, а то не распакуется :)
Распаковка и упаковка файлов initrd/initramfs
initrd - это просто cpio-архив, упакованый одним из компрессоров (GZip, Zstd, XZ, LZMA и т.д.) или же неупакованный ничем. Тип компрессии определяется командой file:
# file initramfs-2.6.32-754.11.1.el6.centos.plus.x86_64.img
initramfs-2.6.32-754.11.1.el6.centos.plus.x86_64.img: gzip compressed data, from Unix, last modified: Wed Mar 6 15:55:52 2019, max compression
# file initramfs-5.10.22-calculate.img
initramfs-5.10.22-calculate.img: ASCII cpio archive (SVR4 with no CRC)
# file initramfs-5.10.32-calculate.img
initramfs-5.10.32-calculate.img: Zstandard compressed data (v0.8+), Dictionary ID: None
# file initramfs-4.19.34-calculate.img
initramfs-4.19.34-calculate.img: XZ compressed data
Для распаковки используется конвейер, где первым элементом будет распаковщик компрессора, который использовался для упаковки, а вторым - собственно распаковка через cpio :
-i - команда распаковки. Обязательный параметр.
-d - создать подкаталоги
-m - сохранить время модификации, записанное в архиве (а иначе будет проставлено текущее)
-v - выводить подробную информацию при распаковке)
Если при распаковке выдается сообщение об ошибке - это означает, что перед нами "новый" формат initramfs, в начале которого записан небольшой stub, который обычно пропускается программой skipcpio:
(Если образ упаковывался не gzip, то для распаковки вместо zcat указать соответствующий декомпрессор!)
После распаковки в том каталоге, где находился файл образа будет создана структура каталогов, заложенная в образе, использующая текущий каталог в качестве корневого, поэтому обычно файл образа распаковывают в создаваемом для этого пустом каталоге. Сейчас можно вносить изменения. При внесении изменений не следует забывать того, что в каталоге /sbin образа обязательно должен находиться файл ld-linux-_архитектура_.so.*N*, где архитектура - это x86-64 для Intel/AMD и aarch64 для ARM64, а N можно узнать по команде file на любом исполняемом файле внутри распакованной структуры:
# file bash
bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped
# file dmesg
dmesg: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, stripped
Этот файл должен указывать на находящийся тут же файл загрузчика:
Если данного линка не будет, он будет указывать на несуществующий загрузчик либо загрузчик будет недоступен - возникнет kernel panic с диагностикой error -2 failed to execute /init.
После внесения исправлений образ следует запаковать обратно. Это можно сделать следующим образом:
Здесь используется компрессор Zstd, для использования GZIP заменить zstd -10 жирным на gzip -9, для использования других компрессоров (XZ, LZMA) - соответствующим образом изменить командную строку. Кроме того, следует убедиться, что при сборке ядра в него был включен соответствующий компрессор/декомпрессор:
Вадим Алиев, В прошлом году бодался с запуском Байкала, написал небольшую заметочку про initrd. На самом деле версия initrd и ядра - они особо могут и не коррелировать - я был немало удивлен, когда обнаружил, что в некоторых инитах попадаются даже "куски" systemd! :)
Ядро 6.x еще ни разу не запускал, не знаю, но вполне может быть.
CityCat4, получилось запустить вчера Kali Rolling на моем Orange PI PC с Linux 6.0.1-ядром.. очень тернистый путь ко всему этому лежал и многое еще не ясно ...
CityCat4, без systemd мне кажется уже нету линуксов )) даже в таких простых как Initramfs, где всякая мультизадачность и не нужна особо )))видимо для упрощения запуска каких-то команд он там))
Вадим Алиев, есть :) systemd был придуман вовсе не для упрощения жизни - а наоборот для ее усложнения. Правда, сейчас, когда жизнь вдруг усложнилась сама по себе - возможно от него будут отказываться как от целого, будут резать на куски и по кускам внедрять то немногое полезное, что из него можно взять.
logind, sessiond, tmpfiles.d - это еще можно исполльзовать, хотя даже это на сервере сомнительно (но на рабочей станции пойдет). Главное зло - это инициатор задач и бинарные логи. Люди теряют понимание того, как работает система, как она стартует задачи и их вынуждают использовать какие-то сторонние инструменты для работы с логами.
CityCat4, ну я новичек конечно... по крайней мере инструменты systemctl, journalctl мне очень понравились и очень удобны... хотя в данном случае, скорее всего речь о чем-то высшем идет :)) простите за глупость, я пока мало соображаю в этом...