Создать собственный образ initramfs с дополнительными файлами конфигурации

Я хотел бы создать образ initramfs для Debian Stretch, который включает в себя дополнительные файлы конфигурации (скажем, /etc/a.conf).

Что я должен сделать перед запуском mkinitramfs -o initrd.img чтобы изображение включало такие файлы?

2 ответа

Решение

Я решил сделать это с помощью ловушки initramfs, чтобы (если я правильно понял) это изменение сохранялось и при будущих обновлениях ядра. Крюк принимает форму скрипта /etc/initramfs-tools/hooks/copy_etc следующее:

#!/bin/sh -e

if [ "$1" = "prereqs" ]; then exit 0; fi
. /usr/share/initramfs-tools/hook-functions

cp /etc/a.conf $DESTDIR/etc/a.conf

Инструмент, который вы хотите для изменения initrd / initramfs, называется cpio. Вы можете найти множество учебников по этому вопросу в Интернете, теперь, когда вы знаете, что искать. Вот быстрый пример:

mkdir initrd-tmp
cd initrd-tmp
lzma -dc -S .lz /mnt/casper/initrd.lz | cpio -id

И тогда, когда сделано:

find . | cpio --quiet --dereference -o -H newc | lzma -7 > ~/new-initrd.lz

Источник: https://wiki.ubuntu.com/CustomizeLiveInitrd

Обратите внимание, что забавным свойством архивов cpio является то, что вы можете просто добавлять к ним, а более поздние файлы перезаписывают более ранние файлы - возможно, из-за их наследства в качестве файловой системы для архивирования на магнитной ленте. Поэтому, если вы не хотите, чтобы на самом деле распаковывался весь архив (тем более, что для создания таких путей может потребоваться root) /proc), вы можете просто добавить свои файлы настроек к нему. Увидеть:

https://wiki.debian.org/DebianInstaller/NetbootFirmware

Другие вопросы по тегам