Как обновить один сломанный пакет без обновления ОС (Ubuntu)

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


$ xorriso -indev FreeBSD-12.0-RELEASE-amd64-bootonly.iso -report_el_torito plain -report_system_area plain
...
libisofs: WARNING : Found hidden El-Torito image. Its size could not be figured out, so image modify or boot image patching may lead to bad results.
libisofs: NOTE : Found hidden El-Torito image for EFI.
libisofs: NOTE : EFI image start and size: 20 * 2048, 1600 * 512
...
Boot record  : El Torito, MBR protective-msdos-label cyl-align-off GPT
...
El Torito catalog  : 19  1
El Torito images   :   N  Pltf  B   Emul  Ld_seg  Hdpt  Ldsiz         LBA
El Torito boot img :   1  BIOS  y   none  0x0000  0x00      4         420
El Torito boot img :   2  UEFI  y   none  0x0000  0x00   1600          20
El Torito img blks :   1  1204
El Torito img blks :   2  400
System area options: 0x00000201
System area summary: MBR protective-msdos-label cyl-align-off GPT
ISO image size/512 : 675508
Partition offset   : 0
MBR heads per cyl  : 0
MBR secs per head  : 0
MBR partition table:   N Status  Type        Start       Blocks
MBR partition      :   1   0x00  0xee            1       676107
GPT                :   N  Info
GPT backup problems:      Not a GPT 1.0 header of 92 bytes for 128 bytes per entry
GPT disk GUID      :      7ce0bf52def9e8118c360cc47ad8b808
GPT entry array    :      2  2  separated
GPT lba range      :      3  676105  676107
GPT partition name :   1  
GPT partition GUID :   1  6de0bf52def9e8118c360cc47ad8b808
GPT type GUID      :   1  28732ac11ff8d211ba4b00a0c93ec93b
GPT partition flags:   1  0x0000000000000000
GPT start and size :   1  80  1600
GPT partition name :   2  
GPT partition GUID :   2  73e0bf52def9e8118c360cc47ad8b808
GPT type GUID      :   2  9d6bbd83417fdc11be0b001560b84f0f
GPT partition flags:   2  0x0000000000000000
GPT start and size :   2  3  29

И загрузочный образ BIOS, и системный раздел EFI не являются файлами в ISO, а скорее безымянные области блоков.

Если вы не пойдете по пути добавления сеанса с помощью фиксированных GrowIsofs или


cp FreeBSD-12.0-RELEASE-amd64-bootonly.iso new.iso
xorriso -boot_image any keep \
        -dev new.iso \
        -map /path/to/your_installerconfig /etc/installerconfig
        [other -map commands for files or directory trees...]

затем вам нужно извлечь эти области


dd if=FreeBSD-12.0-RELEASE-amd64-bootonly.iso bs=512 skip=80 count=1600 \
   of=efi_part.img
dd if=FreeBSD-12.0-RELEASE-amd64-bootonly.iso bs=512 skip=1680 count=4816 \
   of=bios_boot.img

(El Torito дает LBA в блоках по 2048, но размеры в блоках по 512. 4 *420 = 1680. Размер образа BIOS 1204 блока по 2048 байт составляет оценивается по наименьшему объекту файловой системы LBA выше 420. Возможно, он меньше, но любое превышение не должно навредить.)

Затем следует код MBR для загрузки BIOS с USB-накопителя:


dd if=FreeBSD-12.0-RELEASE-amd64-bootonly.iso bs=1 count=446 \
   of=mbr_code.img

Если не планируете загружаться через биос, то биос _boot.img и mbr _code.img не нужны.

Создание нового ISO из распакованного и загруженного дерева $HOME/files _для _iso и извлеченные файлы изображений


xorriso -as mkisofs \
        -o new.iso \
        -d -l -r \
        -V "12_0_RELEASE_AMD64_BO" \
        -G mbr_code.img \
        -b /bios_boot.img \
           -no-emul-boot -boot-load-size 4 \
        -eltorito-alt-boot \
        -append_partition 2 0xef efi_part.img \
        -e '--interval:appended_partition_2:all::' \
           -no-emul-boot \
        bios_boot.img $HOME/files_for_iso

Это даст не GPT, а таблицу разделов MBR с двумя разделами. типа 0x83 для файловой системы ISO и 0xef для системного раздела EFI.

(Необходимо проверить, загружается ли BIOS с USB-накопителя. Многие MBR нужна информация, пропатченная, чтобы найти следующий этап загрузки программ.)

0
09.12.2020, 10:16
1 ответ

Если в вашем выпуске нет интересующего вас обновления, «лучшим» вариантом обычно является загрузка исходного пакета (, в частности, .dscи связанных файлов ). ] и пересоберите пакет локально. (См. этот ответ для краткого примера, подробно описывающего, как перестроить пакет.)

Однако это сопряжено с рядом рисков, два основных из которых:

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

В данном конкретном случае CVE -2017 -9525 масштаб уязвимости ограничен, как подробно описано в примечаниях:

I believe that actually exploiting the bug requires updating the cron package. So long as there’s no updates for cron, the vulnerable code doesn’t run. So if we find a second bug in cron then we really should fix the race condition at the same time, but so long as we don’t push a cron update, the vulnerable code just plain doesn’t run. the patch just narrows the time window for the race condition.

Эта уязвимость представляет собой проблему только в том случае, если запускается сценарий после установки пакета, что в большинстве случаев происходит только при обновлении пакета. (Это можно принудительно выполнить вручную с помощью dpkg-reconfigure, но это не произойдет автоматически. )Таким образом, самым безопасным для вас будет оставить пакет в покое.

2
18.03.2021, 22:44

Теги

Похожие вопросы