Какая связь между vmlinuz и ISO-образом (netboot )?

Правильный способ сделать это — создать массив, в котором хранится сопоставление имени тега со значением(f[]ниже ), а затем просто печатать нужные значения в конце каждой записи, например.:

$ cat tst.awk
BEGIN { OFS=";" }
{
    sub(/\r$/,"")
    tag = val = $0
    sub(/[[:space:]]*:.*/,"",tag)
    sub(/[^:]+[[:space:]]*:[[:space:]]*/,"",val)
    f[tag] = val
}
/^=/ && (cnt++)%2 {
    print f["Computer Name"], f["Product Name"], f["Product Key"]
    delete f
}

$ awk -f tst.awk file
PC-000-0;Microsoft Office Professional 2013;00000-00000-00000-00000-00000
PC-000-0;Windows 10 Pro;00000-00000-00000-00000-00000

При таком же подходе можно легко преобразовать весь входной файл в CSV, если хотите.:

$ cat tst.awk
BEGIN { OFS=";" }
!/^=/ {
    sub(/\r$/,"")
    tag = val = $0
    sub(/[[:space:]]*:.*/,"",tag)
    sub(/[^:]+[[:space:]]*:[[:space:]]*/,"",val)
    if ( !seen[tag]++ ) {
        tags[++numTags] = tag
    }
    f[tag] = val
}
/^=/ && (cnt++)%2 {
    if ( !doneHdr++ ) {
        for (tagNr=1; tagNr<=numTags; tagNr++) {
            tag = tags[tagNr]
            printf "\"%s\"%s", tag, (tagNr<numTags ? OFS : ORS)
        }
    }

    for (tagNr=1; tagNr<=numTags; tagNr++) {
        tag = tags[tagNr]
        printf "\"%s\"%s", f[tag], (tagNr<numTags ? OFS : ORS)
    }

    delete f
}

$ awk -f tst.awk file
"Product Name";"Product ID";"Product Key";"Installation Folder";"Service Pack";"Build Number";"Computer Name";"Modified Time"
"Microsoft Office Professional 2013";"00000-00000-00000-00000";"00000-00000-00000-00000-00000";"C:\Program Files\Microsoft Office\Office15\";"";"";"PC-000-0";"06.12.2018 14:03:44"
"Windows 10 Pro";"00000-00000-00000-00000";"00000-00000-00000-00000-00000";"C:\Windows";"";"17763";"PC-000-0";"18.07.2019 09:50:37";""

Измените OFS=";"на OFS=",", и на выходе будет файл, который можно дважды -щелкнуть в Windows, чтобы он правильно отображался в Excel.

0
08.10.2021, 10:13
2 ответа

Что ж, vmlinuz и initrd находятся внутри образа ISO (независимо от того, используете ли вы образ ISO для сетевой загрузки или чего-то еще ).

Таким образом, ISO-образ сетевой загрузки для версии 5.4 будет содержать файлы vmlinuz и initrd из версии 5.4.

Если вам нужны vmlinuz и initrd из версии 5.11, вам потребуется ISO-образ сетевой загрузки, созданный из файлов из версии 5.11. Если вы не можете загрузить его, вам нужно создать его (в Google, должен быть стандартный процесс, как сделать его для Ubuntu ).

0
08.10.2021, 13:30

Хотя файл initrd часто включает несколько модулей ядра, он обычно не содержит их всех.

Образ сетевой загрузки устанавливает более полную корневую файловую систему, которая включает полное дерево каталогов /lib/modules/:если вы используете более новое ядро, соответствующий каталог /lib/modules/<kernel-version-number>/для него не будет существовать в образе, и поэтому любые попытки загрузки модулей ядра после фазы загрузки initramfs потерпят неудачу, если только модули не были специально подготовлены со «слабыми зависимостями» и в ABI ядра не было несовместимых изменений.

Это, в свою очередь, будет означать, что ядро ​​не поддерживает «несущественное -необходимое» оборудование или аппаратное обеспечение, которое -подключается позже, или какие-либо файловые системы и другие функции ядра, которые поставляются в виде модулей и не загружается на этапе загрузки initramfs.

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

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


В ISO-образе сетевой загрузки Ubuntu модули ядра упакованы в виде отдельных образов squashfs в ISO-образе(casper/extras/modules.squashfs-genericи casper/extras/modules.squashfs-generic-hweвubuntu-20.04.3-live-server-amd64.iso). modules.squashfs-genericсодержит модули для упакованного ядра 5.4.0-81-generic, а modules.squashfs-generic-hweсодержит модули для ядра 5.11.0-27-genericHardWare Enablement (! ).

Существуют даже соответствующие файлы hwe-vmlinuzи hwe-initrd, доступные в каталоге casperISO :, если вы используете их вместо обычных файлов vmlinuzи initrdв конфигурации загрузки PXE, вы фактически получите версию ядра 5.11.0-27-generic. Просто часто распространяемые инструкции по сетевой загрузке Ubuntu не упоминают о существовании этой опции.

Если это не достаточно ново для вас, можно создать настраиваемый ISO-образ сетевой загрузки, добавив файл casper/extras/modules.squashfs-*, содержащий модули более нового ядра, и используя его вместо стандартного. Необходимые настройки, если таковые имеются, в файле initrd «будут оставлены в качестве упражнения для читателя». (перевод :Я этого не делал, но кажется, что это должно быть возможно при разумных усилиях.)

0
08.10.2021, 13:30

Теги

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