LINUX.ORG.RU

man mkinitcpio.conf

COMPRESSION_OPTIONS
    Defines an array of additional options to be passed to the compression program. This option is
    generally not used. It can be potentially dangerous and may cause invalid images to be generated
    without any sign of an error.
rassol
()
Ответ на: комментарий от rmu

Никак, судя по всему. Во всяком случае, пробежавшись по mkinitcpio (это обычный bash-скрипт), я такой возможности не увидел. Чем тебя этот файл не устраивает? Если не хочешь вносить глобальные изменения, создай файл mkinitcpio-rmu.conf, добавь всё, что нужно, и укажи в своём preset-файле в качестве конфига через ALL_config (для всех preset) или default_config (для конкретного).

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

Ну я так и делал. Только зачем добавлять в пакет ядра отдельный конфигуратор, если, например, можно сделать то же самое, дописав подходящий аргумент в preset-файл? В документации об этом ни слова, на буржуйских форумах такой темы не встретилось.

Спасибо, что mkinitcpio просмотрел!

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

Попробуй такую штуку (можешь другие опции указать):

default_options="-z lz4"
export COMPRESSION_OPTIONS='-9'

Вроде работает, но это грязный хак и лучше такое не использовать, потому что есть вероятность проблем с preset, которые будут обрабатываться после этого. Короче, можешь потестить, но на свой страх и риск.

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

Я пробовал так делать. Если записать туда другие параметры сжатия, кроме -9,то вываливаются ошибки. initcpio не может нормально обработать такое. А если вынести в conf файл, то работает. Не знаю почему так.

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

Понял свой косяк: я не писал команду export. Спасибо, что вник в тему!

Вопрос решён.

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

У тебя lz4 нормально работает? Моё ядро ругается: Initramfs unpacking failed: Decoding failed. Хотя все нужные параметры в конфиге ядра выставил.

Перешёл на lzo.

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

На ванильном и zen ядрах всё нормально.

Хотя все нужные параметры в конфиге ядра выставил.

Очевидных вариантов несколько:

  • неподходящие опции для lz4, например -m или -r, которые отключают опцию -l (mkinitcpio сам её добавляет);
  • всё-таки проблемы с конфигом ядра;
  • проблемы с загрузчиком.

Попробуй свой образ с ванильным ядром: в конфиге загрузчика подмени у ванильного ядра образ на сгенерированный тобой.

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

Не могу найти причину, почему lz4 не работает. Опции RD_LZ4, LZ4_COMPRESS, DECOMPRESS_LZ4, LZ4_DECOMPRESS, KERNEL_LZ4 выставлены в ‘y’. Всё равно появляется ошибка Initramfs unpacking failed: Decoding failed.

Запускал ванильное ядро с моим образом – оно вообще не грузится, потому что нет модулей. lsinitcpio показывает содержимое правильно, значит ошибок сжатия нет.

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

Попробуй сделать, как тут. Насколько я понимаю, за это отвечает CONFIG_RD_LZ4. Сейчас заметил, что он у тебя всё-таки включён, но всё равно проверь через menuconfig, например.

Запускал ванильное ядро с моим образом – оно вообще не грузится, потому что нет модулей.

С родным initramfs оно грузится? Если грузится с родным и ругается на твой initramfs из-за отсутствия модулей, то, видимо, распаковка происходит всё-таки?

Без COMPRESSION_OPTIONS тоже не работает? Если сгенерировать образ для ванильного ядра с lz4, оно загружается?

Гадание на кофейной гуще, но нужно как-то локализовать проблему.

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

всё равно проверь через menuconfig, например

Точно включен. Я пробовал компилить с разными методами сжатия initrd: со всеми работает, и только с lz4 нет. Ядро 5.3.7.

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

без COMPRESSION_OPTIONS

Пробовал. И без, и с опциями — всё равно выдаёт ошибку и грузится без initrd.

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

М. б. initrd вообще отключить? У меня компьютер, когда не может подключить образ в lz4,грузится на 1,5 секунды быстрее. Образ держу только для того, чтобы когда начнёт что-то отваливаться, я мог через шелл разобраться что к чему, как-то исправить проблему. Хуков только 2: base & systemd.

Можно ли busybox включить в ядро?

Как вариант, думаю вкомпилить initrd в ядро без сжатия (всё равно ядро само сжимается).

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

М. б. initrd вообще отключить?

Можно, особенно если ты это ядро не будешь на разные машины ставить.

У меня компьютер, когда не может подключить образ в lz4,грузится на 1,5 секунды быстрее.

Чем с работающим нормальным initramfs? Может быть, потому что не запускается fsck?

Образ держу только для того, чтобы…

Я для этого держу дефолтное ядро с дефолтным initramfs.

Хуков только 2: base & systemd.

У меня с такими хуками странная проблема вылезла после предпоследнего обновления systemd: после установки пакета или после редактирования файлов, например, в /etc после перезагрузки что-то ломается в systemd-logind и иксы не могут стартануть (по логам ругань была из-за гибридной графики).

Можно ли busybox включить в ядро?

Вроде можно, но, насколько я понял, нужно сперва его сгенерировать, потом распаковать в папку /usr/src/initramfs (как в примере) или куда удобно.

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

Может быть, потому что не запускается fsck?

Да, не запускается, потому что оно в образе. Правильно говоришь, без fsck грузить систему плохо, диск надо проверять. Буду добавлять initrd прямо в ядро. А чтоб избежать поломок с обновлением systemd оставлю образ только с хуком base.

Я также держу дефолтное, но с ним всё равно не найти причину поломки кастомного – инструменты отладки нужны в нём самом.

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

Сейчас скомпилил ck-ядро 5.2.21-1. Всё работает.

Я не могу пользоваться более ранними ядрами, потому что intel наконец-то закрыли многолетний баг в модуле i915 (неоткачиваемые фризы) только в ядре 5.3. Теперь ноут работает как у людей :)

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

Правильно говоришь, без fsck грузить систему плохо, диск надо проверять.

Вообще, есть два варианта:

  • использовать fsck и в параметрах ядра указать rw;
  • либо не использовать fsck и в параметрах ядра указать ro, тогда systemd запустит systemd-fsck-root.service и сам проверит.

А чтоб избежать поломок с обновлением systemd оставлю образ только с хуком base.

Я так и сделал:

MODULES=(ext4 ahci sd_mod)
HOOKS=(base)
COMPRESSION="cat"

У меня три модуля, без которых система не загрузится. Вместо хука fsck использую systemd-fsck-root.

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

Слишком много времени уже потратил на возможность сжимать initrd в lz4. Вкомпиленный образ не подключается. При этом с остальными алгоритмами сжатия всё норм.

Думаю, что в моём случае с lz4 не моя ошибка. Подожду выход следующей мажорной версии ядра и попробую скомпилять его.

Большое спасибо за участие.

rmu ★★
() автор топика
20 декабря 2019 г.
Ответ на: комментарий от rassol

Собрал ядро 5.4 – lz4 сжатие init-образа заработало.
В конфиге initcpio указываю

COMPRESSION="lz4"
COMPRESSION_OPTIONS="-12 --favor-decSpeed"
rmu ★★
() автор топика
Ответ на: комментарий от rmu

Поздравляю, что всё получилось. Я в итоге тоже понял, как собрать образ с хуком systemd, чтобы не было проблем с загрузкой (early KMS start):

MODULES=(ext4 ahci sd_mod radeon)
BINARIES=(fsck fsck.ext4)
HOOKS=(systemd)
COMPRESSION="lz4"
rassol
()
Ответ на: комментарий от rmu

Да. Насколько я понял, если использовать хук systemd и не добавлять модуль radeon, то в некоторых случаях logind захватывает drm master и иксы не могут стартануть.

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

У меня эта проблема вылезла ещё в начале осени и на иксах, и на вяленом (сперва подумал, что какие-то баги из-за гибридной графики). Так как разбираться было лень, я собрал образ на хуке base. Месяц назад я решил всё-таки разобраться и нашёл несколько упоминаний этой проблемы (и некоторых схожих): у всех (у меня тоже) она решалась с помощью раннего запуска KMS.

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

Обычно компиляю i915 не как модуль, поэтому проблем с logind не замечаю.

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

Есть ещё и такое наблюдение – в моём случае добавить MODULES=(i915) понадобилось только для мобильного i3-4010U. В случае десктопного i3-4160 пока иксы загружаются и без этого.

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.