Мультизагрузочный CD с помощью mkisofs

Все вопросы по установке, обновлению и эксплуатации FreeBSD: конфигурация и сопровождение.

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
leha
проходил мимо

Мультизагрузочный CD с помощью mkisofs

Непрочитанное сообщение leha » 2010-01-12 16:14:48

Хотел сделать мультизагрузочный CD во FreeBSD. Почитал хэндбук.
Нашел в описание mkisofs указание на параметр -b. Попробовал.
Делает в "каталоге загрузочных записей" (точно не знаю как это называется) две записи:
validate и default (этого для загрузки достаточно) и диск успешно грузиться.
Но когда использую параметр -eltorito-alt-boot, то следующие загрузочные записи
добавляются непосредственно за default и в результате диск грузится с записи default
а меню для выбора загрузочного образа не выдает... :unknown:

СОБСТВЕННО ВОПРОС:
Может кто знает как попросить mkisofs группировать загрузочные записи в группы
(простите за тофтологию), а то что-то я и в исходниках покопался (может плохо...)
не нашел там упоминания о записях "групп загрузочных записей".

А пока делаю так:

1. Перешел в каталог с образами

Код: Выделить всё

#cd /root/_work/bootcd/1
#ls
memtest.img     new2.bif        vica
2. Создаем образ

Код: Выделить всё

mybook# mkisofs -b memtest.img -eltorito-alt-boot -b new2.bif -eltorito-alt-boot -b vica -o ../cd_89.iso ./
Size of boot image is 2880 sectors -> Emulating a 1440 kB floppy
Size of boot image is 2880 sectors -> Emulating a 1440 kB floppy
Size of boot image is 2880 sectors -> Emulating a 1440 kB floppy
Total translation table size: 2048
Total rockridge attributes bytes: 0
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 0
2336 extents written (4 MB)
mybook#

3.Посмотрим на "каталоге загрузочных записей"

Код: Выделить всё

mybook# hd -s 0xc800 -n 512 /root/_work/bootcd/cd_89.iso
0000c800  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0000c810  00 00 00 00 00 00 00 00  00 00 00 00 aa 55 55 aa  |............кUUк|
0000c820  88 02 00 00 00 00 01 00  1a 00 00 00 00 00 00 00  |...............|
0000c830  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0000c840  88 02 00 00 00 00 01 00  ea 02 00 00 00 00 00 00  |.......ъ.......|
0000c850  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0000c860  88 02 00 00 00 00 01 00  ba 05 00 00 00 00 00 00  |.......?.......|
0000c870  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0000ca00

Как видим "групп" не видно.

4.Запускаю скрипт (решил перл попробовать - мутная штука, но вроде работает)

Код: Выделить всё

mybook# ../m_b cd_89.iso
5. Смотрим

Код: Выделить всё

mybook# hd -s 0xc800 -n 512 /root/_work/bootcd/cd_89.iso
0000c800  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0000c810  00 00 00 00 00 00 00 00  00 00 00 00 aa 55 55 aa  |............кUUк|
0000c820  88 02 00 00 00 00 01 00  1a 00 00 00 00 00 00 00  |...............|
0000c830  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0000c840  91 00 02 00 00 00 00 00  00 00 00 00 00 00 00 00  |...............|
0000c850  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0000c860  88 02 00 00 00 00 01 00  ea 02 00 00 00 00 00 00  |.......ъ.......|
0000c870  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0000c880  88 02 00 00 00 00 01 00  ba 05 00 00 00 00 00 00  |.......?.......|
0000c890  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0000ca00

Все в порядке!

6. Стираем RW

mybook# burncd blank
blanking CD - 100 % done

7. ПИшем

Код: Выделить всё

mybook# cdrecord dev=1,0,0 driveropts=burnfree ../cd_89.iso
cdrecord: No write mode specified.
cdrecord: Asuming -tao mode.
cdrecord: Future versions of cdrecord may have different drive dependent defaults.
cdrecord: Continuing in 5 seconds...
Cdrecord-Clone 2.01 (i386-unknown-freebsd7.1) Copyright (C) 1995-2004 JЎrg Schilling
scsidev: '1,0,0'
scsibus: 1 target: 0 lun: 0
Using libscg version 'schily-0.8'.
Device type    : Removable CD-ROM
Version        : 0
Response Format: 2
Capabilities   :
Vendor_info    : 'HL-DT-ST'
Identifikation : 'DVDRAM GSA-T20N '
Revision       : 'WA03'
Device seems to be: Generic mmc2 DVD-R/DVD-RW.
cdrecord: This version of cdrecord does not include DVD-R/DVD-RW support code.
cdrecord: If you need DVD-R/DVD-RW support, ask the Author for cdrecord-ProDVD.
cdrecord: Free test versions and free keys for personal use are at ftp://ftp.berlios.de/pub/cdrecord
/ProDVD/
Using generic SCSI-3/mmc   CD-R/CD-RW driver (mmc_cdr).
Driver flags   : MMC-3 SWABAUDIO BURNFREE
Supported modes: TAO PACKET SAO SAO/R96P SAO/R96R RAW/R16 RAW/R96P RAW/R96R
cdrecord: DMA speed too slow (OK for 6x). Cannot write at speed 16x.
Starting to write CD/DVD at speed 16 in real TAO mode for single session.
Last chance to quit, starting real write    0 seconds. Operation starts.
Track 01: Total bytes read/written: 4784128/4784128 (2336 sectors).

После перезагрузки выскакивает меню для выбора образа...

А ВОПРОС ТОТ ЖЕ:
Может кто знает как попросить mkisofs группировать загрузочные записи в группы
(простите за тофтологию), а то что-то я и в исходниках покопался (может плохо...)
не нашел там упоминания о записях "групп загрузочных записей".

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

_пусконаладочные_работы
проходил мимо

Re: Мультизагрузочный CD с помощью mkisofs

Непрочитанное сообщение _пусконаладочные_работы » 2010-01-12 17:10:43

Вариант где есть список загрузки, вот тока mkisofs там все-лишь один из инструментов:
Создание мультизагрузочного CD с мини-версиями Linux и FreeBSD

leha
проходил мимо

Re: Мультизагрузочный CD с помощью mkisofs

Непрочитанное сообщение leha » 2010-01-13 12:20:02

Спасибо за ссылку, еще где-то натыкался на подобный способ, но с использованием GRUB.

Но ведь mkisofs МОЖЕТ делать несколько загрузочных записей, но это БЕСПОЛЕЗНО, если нельзя
при загрузке выбрать нужную! Видимо разработчики подразумевали, что это будет использоваться!

Но вот как!?

Может кто-то знает?

Кстати, если кому скрипт нужен - выложу, только строго не судите - это мой второй скрипт на перле...

_lesom_polem
проходил мимо

Re: Мультизагрузочный CD с помощью mkisofs

Непрочитанное сообщение _lesom_polem » 2010-01-13 12:32:28

полезные чужие скрипты нужны всегда, пость сюда:
[Perl] полезные решения, скрипты, cgi mod_perl catalyst cpan

leha
проходил мимо

Re: Мультизагрузочный CD с помощью mkisofs

Непрочитанное сообщение leha » 2010-01-22 8:19:45

Прошу прощения за долгое молчание.

Скрипт в отрыве от вышесказанного лишен смысла, поэтому привожу здесь

Код: Выделить всё

#!/usr/bin/perl
#-d
$arg = @ARGV[0];
if(!$arg)
{#если параметров нет
    print "use: multi_boot <iso_file>\n\n";
    exit 0;
}
open(InFile,"+<$arg");#открыли для чтения и записи
binmode(InFile);

#==========================================#
    sub tag
    {
        $pos=$_[0];
        $frm=$_[1];
        $len=$_[2];
        sysseek(InFile,$pos,0);
        $result = sysread(InFile, $Var, $len);
        $pos=$pos+$result;
        $res1 = unpack($frm, $Var);
        return $res1;
    }#sub tag
#==========================================#

#Идентификатор
    $pos=0x8807;
    $res=&tag($pos,"a*",0x017);
    print "<$res>\n";
#номер сектора где загрузочная информация
    $pos=0x8847;
    $res=&tag($pos,"H*",1);
    print "<$res> - Номер сектора загрузочного каталога\n";

    $v1=pack("H*",$res);
    $v2=unpack("c*",$v1);

    $pos=2048*$v2;
    $res=&tag($pos,"H*",0x020);

    $v1=pack("H*",$res);
    @v2=unpack("v*",$v1); # слово!

    for ($i=1;$i<16;$i++)
        { @v2[0]=@v2[0]+@v2[$i]; }
    $v1=$v2[0] & 0xFFFF;
    if($v1!=0){ print "$v1 - сумма\n "; die; }
    # дальше идут загр записи - читаем их все
    # и объединяем в группу т.е.
    # перед ними вставляем запись группы

    $pos_b_b=$pos; # позиция начала загрузочных записей
    $m_sum=1;
    $ii=0;
    while ($m_sum > 0)
    {#если сумма байтов в записи = 0,
    # то запись пуста - выходим!
        $res=&tag($pos,"H*",0x020);

        $v1=pack("H*",$res);
        @v2=unpack("C*",$v1); # слово!
        #добавляем елемент массива
        @b_r = (@b_r,$v1);
        $ii++;
        for ($i=1;$i<0x20;$i++)
        {#суммируем все сова в записи
            @v2[0]=@v2[0]+@v2[$i];
        }
        $m_sum=$v2[0];
    }
    $ii--;#последняя итерация не считается, т.к. запись была пустая

#==========================================#
    sub tag_w
    {# выводим в файл данные
        $pos=$_[0];
        $Var=$_[1];
        $len=$_[2];
        sysseek(InFile,$pos,0);
        $result = syswrite(InFile, $Var, $len);
        $pos=$pos+$result;
        return $result;
    }#sub tag_w
#==========================================#
    $pos_b_b=$pos_b_b+0x20;# пропустим первый
    $pos=$pos_b_b;
    #печатаем последний (пустой) - затираем то, что было
    $res=&tag_w($pos,@b_r[$ii],0x020);

    for ($i=1;$i<$ii;$i++)
    {#выводим остальные
        $res=&tag_w($pos,@b_r[$i],0x020);
    }

    $pos=$pos_b_b;
    $ii--;#т.к. первый не печатаем то количество уменьшаем

    $v1=pack(C3,0x91,0,$ii);
    $res=&tag_w($pos,$v1,3);

    close(InFile);
    print ("Ok!\n");

    exit 0;

P.S. Еще раз прошу, строго не судите за качество написания скрипта.
Но за подсказки как сделать лучше заранее благодарен.

Всем удачи!

P.P.S. Может все-таки кто-нибудь знает !?

leha
проходил мимо

Re: Мультизагрузочный CD с помощью mkisofs

Непрочитанное сообщение leha » 2010-02-08 16:59:17

Наткнулся вот на что - не все мамки предлагают выбор варианта загрузки...
Похоже некоторые просто грузят первый встретившийся образ...

Видимо возможность нескольких образов не прижилась еще и по причине "некрасивости" интерфейса выбора образа...

Вывод - чтобы не проколоться нужно делать один загрузчик (один видимо все понимают), а уже в нем мутить возможность загрузки чего другого...

Тема думаю закрыта...