LINUX.ORG.RU

PXE загрузка живого образа linux

 , ,


0

1

Здравствуйте!

Пытаюсь сделать pxe-загрузку по сети ubuntu live cd. Настроил isc-dhcp-server. Пробовал syslinux, grub2. Результат пока что один - после опроса оборудования компьютера оказываюсь в busybox.

В сети куча руководств, в которых предлагается ипользовать NFS, но хочется обойтись без нее.Текущие настройки у меня следующие.

isc-dhxp-server:

subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.10 192.168.2.30;
  option domain-name-servers 192.168.2.1;
  option domain-name "internal.example.org";
  option routers 192.168.2.1;
  option broadcast-address 192.168.2.255;
  default-lease-time 600;
  max-lease-time 7200;
          class "pxeclients" {
                 match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
                 #filename   "/boot/grub/i386-pc/core.0";
                 #next-server 192.168.2.2;
                 filename "pxelinux.0";
         }

}
Файл pxelinux.cfg/default:
default menu.c32

label xubuntu-13.04-iso
    menu xubuntu 13.04 i386 iso
    kernel memdisk
    append iso initrd=xubuntu-13.04-desktop-i386.iso raw splash=verbose

label xubuntu-13.04
    menu xubuntu 13.04 i386
    kernel ubuntu-files/casper/vmlinuz
    append initrd=ubuntu-files/casper/initrd.lz splash=verbose
В корне tftp находится iso-образ xubuntu-13.04-desktop-i386.iso, который также смонтирован в каталог ubuntu-files.

Если использовать grub, то все немножко по другому. Вот boot/grub/grub.cfg:

menuentry "ISO Ubuntu 12.10" {

 set isofile="/xubuntu-13.04-desktop-i386.iso"
 loopback loop (pxe)$isofile
 linux  (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile
 initrd (loop)/casper/initrd.lz
}

menuentry "Ubuntu 12.10" {
        set root=(pxe)
        linux   /ubuntu-files/casper/vmlinuz
        initrd  /ubuntu-files/casper/initrd.lz
}

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


Вам нужно посредством NFS расшарить файлы в ISO образе и указать в параметрах ядра адрес этого NFS сервера.

kostik87 ★★★★★ ()
Ответ на: комментарий от gard

можно ли как то обойтись без nfs?

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

xigmanid ()
Ответ на: комментарий от nanoolinux

я бы даже спросил - а из bisybox видно, что сеть доступна? Ну там, сетевая карточка определилась? tftp-клиент запускается?

xigmanid ()

append iso initrd=xubuntu-13.04-desktop-i386.iso

Ты не понимаешь, что это такое. Абсолютно. Как класс.

В обоих случаях результат один - busybox после опроса оборудования.

Ээээ, а что ты ожидал? Я знаю только один способ передачи данных, который работает без носителей: это молитва. Все остальные требуют что-то...

odii ()
Ответ на: комментарий от xigmanid

В busybox довольно много команд, ifconfig показывает сетевые карточки. Я в этом далеко не спец, но выглядит это так, будто сам линукс загружен, не загружены только дополнительные пакеты и пользовательское окружение.

gard ()
Ответ на: комментарий от gard

Вот почитайте официальную документацию по сетевой загрузке Ubuntu LiveCD: https://wiki.ubuntu.com/LiveCDNetboot

Если вы хотите использовать только tftp, то вам нужно редактировать init сценарий в initrd, добавив в него функционал по загрузке в память с tftp сервера iso образа Ubuntu LiveCD, ну или хотя бы sqaushfs образа корневой файловой системы LiveCD системы и дальнейшего монтирования этого squashfs образа из памяти. С учётом того, что squashfs образ размером примерно 700 Мб у вас будут ограничения на минимально требуемый размер оперативной памяти и ввиду того, что нужно предварительно эти 700 Мб скачать по сети, довольно длительное время запуска.

Вот поэтому и нужен nfs, в любом случае там ничего сложного нет.

Читайте официальную документацию, настраивайте.

Ну и ответьте на вопрос чем вас так пугает nfs?

kostik87 ★★★★★ ()
Ответ на: комментарий от gard

busybox - это утилита, которая включает в себе минимально необходимые команды для подключения в частности реальной корневой системы.

В общем, в initrd находится минимальная система, которая нужна для монтирования реальной корневой файловой системы и последующее переключение в эту файловую систему. Т.е. на этапе загрузки в начале в качестве корневой файловой системы монтируется файловая система в initrd, затем сценарий в initrd монтирует другую файловую систему, которая в последствии станет корневой, а если нужно, то предварительно и файловую систему, например, nfs, на которой находится образ корневой файловой системы, а затем вызывается команда по переключению корневой файловой системы, например pivot_root или switch_root.

Так что раз, как вы пишете, вы не спец, то просто последуйте официальной документации, ссылку на которую я вам привёл, а именно настройте доступ к файлам в iso образе посредством NFS.

Удачи.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

Вот поэтому и нужен nfs

nfs нужен для записи.

Потому аргумент «нужно скачивать целиком» не работает - архив можно на сервере разархивировать и пересылать только нужные файлы по tftp.

xigmanid ()
Ответ на: комментарий от xigmanid

nfs нужен для записи.

Нет, nfs нужен для простого доступа к squashfs образу корневой файловой системы Ubuntu LiveCD. К тому же для монтирования squashfs образа его не нужно целиком скачивать по сети, он просто монтируется с смонтированной nfs напрямую.

Потому аргумент «нужно скачивать целиком» не работает - архив можно на сервере разархивировать и пересылать только нужные файлы по tftp.

Как раз таки при использовании tftp, как вы предлагаете, для того, что бы смонтировать squashfs образ корневой файловой системы, его нужно предварительно загрузить целиком в память, ибо tftp - это не файловая системы, а протокол передачи данных. А squashfs образ Live CD системы Ubuntu размером примерно 700 Мб, так что загрузка по сети такой системы будет занимать довольно длительное время. К тому же tftp передаёт пакеты не по tcp, а по udp протоколу, который не гарантирует доставки данных, с учётом этого шанс скачать «битый» squashfs образ возрастает. К тому же ТС придётся по вашим рекомендациям распаковать initrd образ Ubuntu LiveCD, внести правки в init сценарий, добавив код для скачивания по tftp образа squahsfs в память, а затем его смонтировать, ну и потом опять же запаковать initrd.

Вот и получается, что проще, удобнее и надёжнее использовать nfs.

Не надо давать вредные советы, если сами этого не делали, а лишь примерно понимаете как это работает в теории.

Тем более есть официальная документация по сетевой загрузке Ubuntu Live.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Всем спасибо за ответы! Теперь стало понятнее. Попробую покурить в сторону smb, а не nfs, так как самба уже настроена и работает. Посмотрим, если не выйдет буду смотреть в сторону nfs или nbd.

gard ()
Ответ на: комментарий от gard

Попробую почитать документацию по smb

держи нас в курсе результатов опытов.

xigmanid ()
Ответ на: комментарий от xigmanid

Нет конечно ), все уже придумано за нас. С nfs оказалось сильно проще, но с самбой тоже можно все организовать. Судя по этому http://manpages.ubuntu.com/manpages/hardy/man7/casper.7.html загрузку можно осуществлять и с nfs и с cifs файловой системы (параметр netboot). Но трудности возникли с правами на шару.

Сделал я в самбе такую шару:

[Share]
        path = /srv/tftp
        guest ok = yes
        read only = No
        browseable = yes
В глобальных параметрах у меня стоит
        map to guest = Bad User
        guest account = nobody
В общем все, не прошедшие аутентификацию считаются гостем, которому соответствует unix-аккаунт nobody. На каталоге /srv/tftp заданы права 775. Скачал диск убунту 14.04, смонтировал, скопировал файлы с диска в /srv/tftp/ubuntu. PXE загрузчик использовал от grub2, но в syslinux все аналогично, вот мой конфиг загрузчика:
root@area51:/srv/tftp# cat boot/grub/grub.cfg 
menuentry "Ubuntu 14.04" {
        set root=(pxe)
        linux   /ubuntu/casper/vmlinuz root=/dev/cifs ip=dhcp netboot=cifs nfsroot=//192.168.2.2/Share/ubuntu NFSOPTS=-ouser=user,password=passwd,ro ro boot=casper locale=ru_RU splash=verbose  
        initrd  /ubuntu/casper/initrd.lz
}
Все параметры, которые передаются ядру тут чисто специфичны для Убунты (я это не сразу понял из манов в сети и думал что ж за параметры такие). Тут важно вот что. Если не указать NFSOPTS (именно заглавными буквами - иначе игнорируется), то придется выставлять на шару права 777 или указывать имя и пароль существующего пользователя, имеющего право на запись. Я здесь указал фиктивные имя пользователя и пароль (что автоматически при моем конфиге самбы позволит зайти под гостем), плюс опция ro (readonly), которая и дает возможность не выставлять на шару права 777, так как загружаемая система уже знает, что запись туда невозможна.

В общем все оказалось довольно просто, почти так же как с NFS, но тонкости с правами, заглавными буквами и пр.. и опять же это чисто для Убунты, с другими системами все может быть по другому, к примеру арч у меня запускался прямо из .iso-образа, причем довольно шустро, образ сам по себе небольшой.

ps: мне сетевая загрузка убунты или арча (или еще чего) нужна только для того, чтобы сесть за любой компьютер, загрузиться из сети, разметить на компьютере диск (gparted, parted, ntfsprogs)и распаковать на него образ винды (ntfsclone). Вот такие дела.

gard ()
Ответ на: комментарий от gard

А вы уверены, что в initrd есть поддержка cifs? Маловероятно, но вы можете распаковать initrd, внести самостоятельно правки в init сценарий для поддержки cifs, запаковать его обратно. К тому же для монтирования samba (cifs) вам нужен в initrd cifs-client (samba-client), к тому же его собрать статически не получится, поэтому вам придётся так же в initrd поместить libc и прочие зависимости, а так же файл mount.cifs, которым как раз и производится монтирование.

Поэтому для вас проще всего, как я вам уже сказал, использовать nfs.

Чем он вас пугает?

Это будет самый простой для вас способ.

UPD: Если судя по приведённой документации поддержка cifs (samba) есть, пробуйте. Но вы сами уже увидели, что nfs проще.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Да, вы сказали все правильно. С nfs оказалось реально проще.

gard ()
Ответ на: комментарий от gard

мне сетевая загрузка убунты или арча (или еще чего) нужна только для того, чтобы сесть за любой компьютер, загрузиться из сети, разметить на компьютере диск (gparted, parted, ntfsprogs)и распаковать на него образ винды (ntfsclone).

Clonezilla не подойдёт?

dhameoelin ★★★★★ ()
Ответ на: комментарий от dhameoelin

clonezilla-live выглядит подходящей, но меня сейчас и так устраивает =)

gard ()
Ответ на: комментарий от gard

Весь комплекс проще заюзать. Или хотя бы доку по нему прочитать ;)

dhameoelin ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.