Был обычный рабочий день: я усердно делил пиццу на равные части. Все шло гладко, как вдруг прилетает тикет с крайне необычным багом - в virtualbox ломается рендер рабочего стола... И это происходит в момент работы с загрузчиком ОС.
Надо что-то делать, т.к. впечатления после такого, скажем, не очень.
Немного помозговав, было принято решение вскрыть ISO образ и подменить несколько бинарников для проверки работоспособности предыдущих версий.
Почему нельзя просто обновить пакеты после установки ОС? Баг воспроизводился в очень специфических условиях, исключительно при первом запуске live образа.
Честно говоря, ранее я не особо вникал в структуру iso-шников и это был первый опыт их пересборки. Сейчас расскажу о нескольких фейлах.
Первое время я пытался подменить deb пакет, т.к. думал, что именно он будет распакован в момент первого запуска. Подменил и как же удивился, когда ничего не поменялось и "dpkg -l" показал изначальную версию))
Оказалось, что пакеты распаковываются, но не сразу, а когда система выполняет финальную "доустановку".
Далее я осмелился посмотреть через "ls -l" расширенные параметры бинарника и увидел, что он не только что поставлен, а был вшит в образ еще на этапе сборки.
И тут я задался вопросом: "Стоп, а как в iso образе представлена файловая система для live пользователя, от которого мы выполняем базовую настройку системы?". В процессе страшного ресерча до меня дошло, что она сжата в:
./live/filesystem.squashfs
И если мы "разожмем" ее через:
$ unsquashfs filesystem.squashfs
То увидим внутри что-то очень знакомое:
bin etc initrd.img lib media opt
...
Именно тут-то и сидели те самые бинари, которые изначально требовалось подменить. Дальше пазл примерно сложился, я обратно собрал всю эту иерархию в ".squashfs":
$ mksquashfs squashfs-root filesystem.squashfs
После упаковал новый iso образ, отладил багу и проработал фикс. На всякий, сразу приложу команду, которой готовил образы:
$ sudo mkisofs -o ~/Загрузки/new.iso -quiet -R -b boot/grub/bios.img -no-emul-boot -boot-load-size 4 -boot-info-table ./
В общем, вот такой интересный опыт был получен. Как вы, вообще, хотите больше поговорить о файловых системах, внутрянке iso образов, grub?
LinuxCamp | #story