Страницы

Показаны сообщения с ярлыком GRUB. Показать все сообщения
Показаны сообщения с ярлыком GRUB. Показать все сообщения

среда, 2 мая 2018 г.

Fedora Workstation 27->28 upgrade fail. Сбой обновления

Ну что же, сегодня день был странный. Начал обновление операционной системы Fedora Workstation, с прежней 27-ой версии, на только что вышедшую 28-ю версию.
И как назло - сбой. После перезагрузки не смог попасть в рабочий стол.
Ладно, надо разбиратся, полез в консоль, после кнопки ресет.

Для загрузки в консоль надо установить runlevel 3, в параметрах загрузки GRUB2.


Обычно указывается в строке linux ...., в конце просто числом 3.

Загрузился в консоль. Вошёл. Нет нормального русского языка. Отображаются квадратики. Ладно. Это видимо вечная проблема. Пропустим.


1. Удаляю группу пакетов GNOME desktop environment.

$ sudo -s
# dnf group remove "GNOME desktop environment"

2. Перемещаю (переименовывая) папки конфигурации .local  и .config в домашней папке пользователя. Сохраняю, так как там все настройки всяких программ. Потом отдельно с каждой разберусь. Если несколько пользователей, соответственно несколько повторов пункта 2.

# mv -r /home/user/.local  /home/user/.local-old
# mv -r /home/user/.config /home/user/.config-old

# reboot

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

3. Также, после удаления среды GNOME (пункт 2) вход в консольный многопользователский режим с поддержкой сети (runlevel 3).

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

# dnf update --refresh



5. Устанавливаю окружение Fedora Workstation (тоже группа пакетов).

# dnf group install "Fedora Workstation"

после успешной установки пакетов - перезагрузка.
# reboot

6. Опять попадаю в консоль. Но, зайдя под пользователем - доступен запуск командой startx.

$ startx

Попадаю на рабочий стол.
Говорит спасибо, что обновились. Пожалуйста.
Осматриваю потери. Фон поменялся. 

7. Перезагружаюсь и опять попадаю в консольный режим. Но тут уже, пробую:


# systemctl enable gdm.service
 Created symlink /etc/systemd/system/display-manager.service → /usr/lib/systemd/system/gdm.service
# systemctl set-default graphical.target
# systemctl restart gdm.service 
# reboot


8. Заработало. Теперь перенос настроек программ, и по возможности их переустановка.

P.S. Много ребутов - это по старой привычке от Windows. Reboot - это святое, прочищает много настроек системы.

P.P.S. Последовательное обновление системы, с версии где-то 24 до 28. Сломалась под тяжестью настроек.

※※※
 

четверг, 7 ноября 2013 г.

Слетел загрузчик grub-efi

На новой системе (кодовое имя для блога - Red box), после обновления установленных дистрибутивов, в какой-то момент испортился загрузчик Grub2. Загрузчик был установлен Grub-efi и загрузка обеспечивалась с помощью встроенного UEFI материнской платы Asrock F2A85X-ITX.
Я оказался перед экраном "минимальный (rescue mode) Grub2". Вещь малопонятная, т.к. ни примеров запуска, ни нормальной справке в интерфейсе этой программы нет и без чтения документации дело дальше не пойдет.
Проблему, с которой я столкнулся, можно обозначить как "Слетел grub efi", "grub не подхатывает конфиг".

Причина, по которой это происходит, не очень понятна. Что это - ошибки создателей и сборщиков пакетов?


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

Заодно и разобраться с командами доступными во встроенной UEFI  shell (что очень удобно), материнской платы Asrock F2A85X-ITX.

Итак, системный ssd-диск разбит на 4 раздела (GPT разметка):
/dev/sda1 - ESP (EFI system partition) 512MiB - FAT32
/dev/sda2 - MSR 128MiB
/dev/sda3 - Ubuntu 13.10 размером с blu-ray диск (46196MiB) - EXT4
/dev/sda4 - остаток
После раздела MSR, перед каждым разделом пустое место 128MiB.

вывод таблицы разделов для диска Intel 330 SSD 60GB

Disk /dev/sda: 117231408 sectors, 55.9 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): xxxx
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 117231374
Partitions will be aligned on 2048-sector boundaries
Total free space is 526302 sectors (257.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  EFI System
   2         1050624         1312767   128.0 MiB   EF02  Microsoft reserved
   3         1574912        96184319   45.1 GiB    8300  Linux filesystem
   4        96446464       117231374   9.9 GiB     8301  Linux reserved


Система ставилась на этот диск с usb-флешки, загруженной через меню UEFI, в режиме UEFI, что показал черный начальный текстовый экран загрузчика Grub.Загрузчик устанавливался на диск /dev/sda.

Также присутствуют другие диски, которые и позволили загрузиться в установленную систему, с резервных загрузчиков, правда в  BIOS Legacy-mode.




Протестировать EFI в системе:

Выполнить в root-терминале:
root@red# [ -d /sys/firmware/efi ] && echo "EFI boot on HDD" || echo "Legacy boot on HDD"

Т.е. при загрузке в EFI режиме появляется каталог /sys/firmware/efi
а в нём:
root@red:~# ls /sys/firmware/efi/
efivars  systab  vars
В обычном BIOS-режиме, этого каталога нет.

Можно ещё посмотреть в dmesg:
#dmesg | grep efi

efi: EFI v2.31 by American Megatrends
Откуда видна версия EFI используемая материнской платой.


Как загрузить Ubuntu в EFI режиме находясь в сломанном загрузчике GRUB2 "Minimal BASH like".

1. Вывод списка устройств и разделов (их grub-идентификаторов), доступных загрузчику GRUB2.

grub> ls
(hd0), (hd0,gpt2), (hd0,gpt1) и т.п.

2. Задание пути к конфигурационному файлу, если он сохранился.
В моём случае: 
grub> configfile (hd0,gpt3)/boot/grub/grub.cfg
либо, что лучше
grub> configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg

Сразу пойдет меню GRUB2 (если поломка небольшая) и можно загрузиться в EFI-режиме.


3. Если конфигурационного файла нет, то надо указать корень файловой системы, ядро и начальный ramdisk (initrd).
set root=(hd0,gpt3)
linux /vmlinuz root=/dev/sda3
initrd /initrd.img


4. Находясь в системе  Ubuntu, обновить загрузчик
root@red:# update-grub
Генерируется grub.cfg …
Найден образ linux: /boot/vmlinuz-3.11.0-7-generic
Найден образ initrd: /boot/initrd.img-3.11.0-7-generic
Найден образ linux: /boot/vmlinuz-3.11.0-6-generic
Найден образ initrd: /boot/initrd.img-3.11.0-6-generic
Adding boot menu entry for EFI firmware configuration
завершено


5. Если пункт 4 не помог, то можно попробовать отредактировать файл grub.cfg расположенный в разделе efi, по адресу: /EFI/ubuntu/grub.cfg
Обычно, это файл переписывается новым установщиком и там прописываются ссылки на новую систему. Такое бывает в многодисковых системах. Т.е. к примеру, я ставил новую ubuntu в режиме uefi на внешний жесткий диск (sdd), в результате, на системном жестком диске (sda) был переписан файл grub.cfg (в EFI разделе) и система стала грузиться с внешнего диска, а с внутреннего - нет.
Этот файл grub.cfg легко вправить, изменив UUID на UUID старой системы, и указав правильные диски и загрузочный (efi) раздел.


Вот его содержимое (для загрузки с sda), скрыт только  UUID:

search.fs_uuid 00000000-0000-0000-0000-0000000000 root hd0,gpt3
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg


UUID корневой системы можно увидеть выполнив команду:

$ blkid

Так вот, после новой установки, и UUID и root указывали на новую систему:
search.fs_uuid 00000000-0000-0000-0000-0000000000 root hd3,gpt4
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

И всё это находилось на диск sda, на системном разделе efi. А системный раздел efi на внешнем диске был пуст. Потом я его заполнил по аналогии, вручную.




Это какой-то баг установщика Ubuntu. Т.к. при установке, я отслеживал этот момент.

5.b. Переустановить загрузчик используя grub-install и тщательно подобранные опции.

Это тоже может не помочь. Можно случайно установить обычный MBR-загрузчик, что есть плохо.



6. Прописка пункта загрузки в UEFI меню материнской платы
- создание собственной метки:
root@red:# efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\grubx64.efi -L "Red box"


EFI-загрузка установленной системы Ubuntu 13.10,  находясь в UEFI shell системной платы:


1. Выполнить просмотр файловой системы первого диска (нумерация с 0, список посмотреть можно по команде map):
shell>fs0:

2. Перейти в каталог загрузчика:
fs0:>cd /EFI/ubuntu
3. Исполнить загрузчик:
либо

fs0:/EFI/ubuntu>grubx64.efi

либо, с полным путем, без предыдущей команды:
fs0:/EFI/ubuntu/grubx64.efi

4. Если обычное меню Grub2 не появилось, то передать конфигурационный файл:
grub> configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg

т.е. в UEFI Shell, можно просто запускать загрузчики (с расширением имени файла, efi) указывая полный путь к ним. Синтаксис почти понятен.




НЕ РАБОТАЕТ на плате Asrock F2A85X-ITX:
Прописка пункта загрузки в UEFI меню материнской платы из под UEFI Shell:
1. Просмотреть список загрузочных опций:
Shell> bcfg boot dump -v
2. Добавить опцию будет отображаться как (Red box):
Shell> bcfg boot add 5 fs0:\EFI\ubuntu\grubx64.efi "Red box"
3. Удалить опцию:
Shell> bcfg boot rm 5


Область, где сохраняются опции загрузки в UEFI, называется UEFI NVRAM.

Опция. Утилита efibootmgr для редактирования опций загрузки в UEFI NVRAM


Чтобы просто посмотреть список опций загрузки:
root@red:# efibootmgr
BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0000,0005,0009
Boot0000* Red box
Boot0005  UEFI: Built-in EFI Shell
Boot0009  Hard Drive



Выводы

UEFI штука хорошая, но малонадежная, т.к. надо очень внимательно вносить изменения в конфигурацию системы, загрузчика и пр. Да и старые навыки управления загрузчиком неадекватны для grub efi.



Ресурсы

- .https://help.ubuntu.com/community/UEFI
- .http://archlinux.org.ru/forum/topic/12327/
- .https://wiki.ubuntu.com/SecurityTeam/SecureBoot
- .http://www.uefi.org/specs/download/UEFI_2.4.pdf

понедельник, 17 сентября 2012 г.

Загрузка по сети. PXE NFSROOT GRUB2

Изготовление окружения сетевой загрузки PXE, для виртуальных машин и контейнеров.


Долгое время, на обычном роутере DD-WRT у меня была доступна загрузка различных образов операционных систем через сеть, на любом компьютере, поддерживающим загрузку по сети.

Решил сделать это же на новом микросервере, но уже для целей виртуальных машин, а также для рабочей системы.

Сетевая загрузка вовлекает много компонентов программного обеспечения - dhcp-сервер, tftp-сервер, загрузчик, клиентский bios.

Замените, в соответствии со своими настройками, строки:
userserver - имя пользователя на сервере
username - имя пользователя на клиенте



Настройка DHCP/TFTP сервера DNSMasq для поддержки сетевой загрузки клиентов

Т.к. сейчас на микросервере используется DNSMasq в качестве DNS/DHCP/TFTP сервера, то укажем его опции настройки.

Опции, относящиеся к DHCP/PXE.
# Указываем загрузчик либо pxelinux.0, либо grub.pxe
dhcp-boot=pxelinux.0
# dhcp-boot=grub.pxe



Опции, относящиеся к настройке TFTP сервера в файле /etc/dnsmasq.conf

# Включение встроенного в dnsmasq TFTP сервера
enable-tftp
# Корень TFTP сервера
tftp-root=/home/userserver/tftproot

Создадим папку tftpboot в домашней папке под простым пользователем сервера "userserver":
userserver@microserver$ mkdir ~/tftproot

Также не забудем установить разрешение на изменение папки всем желающим:

root@microserver# chmod a+rw /home/userserver/tftproot

И для удобства пополнения и редактирования эту папку можно внести в список ресурсов SAMBA либо nfs.

Перезапустить DNSMasq сервис.
# service dnsmasq restart

Настройка PXE меню на основе PXELinux

Для минимальной работоспособности в корне TFTP сервера надо создать папку pxelinux.cfg, а в ней текстовый файл default.

root@microserver:~# ls tftproot/pxelinux.cfg/
default  vesamenu.c32

vesamenu.c32 из комплекта syslinux. Его можно найти на любом загрузочном диске Ubuntu в папке isolinux.

Минимальное содержимое главного меню сетевой загрузки - файл pxelinux.cfg/default. В нём также содержится пункт меню "Ubuntu Livecd 12.10 Gnome Shell Remix" для загрузки CD образа Ubuntu через сеть (см далее по тексту).
root@microserver:~# cat tftproot/pxelinux.cfg/default
DEFAULT vesamenu.c32
MENU title Microserver's network boot menu

LABEL Ubuntu Livecd 12.10 Gnome Shell Remix
MENU DEFAULT
KERNEL ubuntu/livecd/casper/vmlinuz
APPEND root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.3.1:/home/userserver/tftproot/ubuntu/livecd initrd=ubuntu/livecd/casper/initrd.lz  --
# Надо заметить, что параметр KERNEL и указан относительно корня TFTP сервера, также и начальная корневая файловая система initrd.


Сетевая загрузка livecd образа Ubuntu

Сделаем так, что будет возможно загрузить текущий (новейший) образ live cd ubuntu через сеть
Удобство будет заключаться в том, что достаточно будет скачать (а потом, будет автоматом) текущий iso образ и положить в папку. Заменить символическую ссылку и  перезапустить сервисы.

В каталоге tftpboot создадим папку ubuntu, в ней livecd.
userserver@microserver$ mkdir tftproot/ubuntu tftproot/ubuntu/livecd

в нее поместим образы ubuntu в виде файлов iso. и посмотрим:
userserver@microserver$ ls tftproot/ubuntu
ls tftproot/ubuntu/
quantal-ubuntu-gnome-amd64-20120902.iso
current-ubuntu.iso
livecd
где current-ubuntu.iso - символическая ссылка на файл quantal-ubuntu-gnome-amd64-20120902.iso.

На текущий загружаемый образ создадим символическую ссылку (команда ln -s): 
userserver@microserver$ ln -s quantal-ubuntu-gnome-amd64-20120902 current-ubuntu.iso
Примонтируем образ iso, доступный по символической ссылке, под root-пользователем (sudo -s):
root@microserver# mount -t auto -o loop current-ubuntu.iso livecd

Для того, чтобы образы монтировались при загрузке, надо подправить файл /etc/fstab, добавив в него. Все на одной строке, без переноса строк.

# Файлы образов для сетевой загрузки
/home/userserver/tftproot/ubuntu/current-ubuntu.iso /home/userserver/tftproot/ubuntu/livecd udf,iso9660 user,loop,ro 0 0

Т.к. в загрузочный образ Ubuntu встроена возможность загрузки через сеть, то также понадобиться NFS-папка с содержимым cdrom, которая будет монтироваться при сетевой загрузке.

На микросервере в файле /etc/exports указываем:

/home/userserver/tftpboot/ubuntu/livecd/ *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure)

Перезапустим NFS-сервис:
root@microserver# service nfs-kernel-server restart

В меню PXE (pxelinux.cfg/default) добавим пункт меню, соответствующий нашей livecd системе

...
LABEL Ubuntu Livecd 12.10 Gnome Shell Remix
MENU DEFAULT
KERNEL ubuntu/livecd/casper/vmlinuz
INITRD ubuntu/livecd/casper/initrd.lz
APPEND root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.3.1:/home/userserver/tftproot/ubuntu/livecd  --
F1 livecd.txt
...

LABEL - это текстовая строка, видимая в меню
MENU DEFAULT - это меню выбрано по умолчанию.
KERNEL - ссылка на исполняемый код (Linux, иной), в данном случае на ядро Linux, путь к ядру указывается относительно корня TFTP-сервера. "ядро" не обязательно является ядром Linux; оно может быть загрузочным сектором или даже файлом COMBOOT. 
APPEND - параметры передаваемые ядру.

INITRD файл начальной корневой файловой системы, разворачиваемой в памяти.
Начиная с версии 3.71, initrd может быть указан отдельной директивой
(INITRD) вместо части директивы APPEND
F1 livecd.txt - справочная информация вызываемая по клавише F1



Попробуем загрузиться. Для этого в BIOS клиентского компьютера выберем в качестве первого устройства загрузки - сеть.
Обычно, если более менее правильно настроено, клиент может загрузить ядро linux. А вот дальнейшая загрузка может сломаться по различным причинам, уже относящимся к конфигурации системы (образа iso).


Преобразование установленной системы Ubuntu 12.10 на жестком диске - в вариант
сетевой загрузки

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

Во время установки диск разбивается на 4 первичных раздела.
1. swap
2. ext4 - корневая файловая система для обычной загрузки, точка монтирования - /
3  ext4 - будущая корневая файловая система для сетевой загрузки (nfsroot)
4  ext4 - домашняя файловая система, /home

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

Установка производится во второй раздел (например /dev/sda2) и в четвертый. Далее, после загрузки системы со второго раздела, его содержимое копируется на третий раздел. Настраивается загрузчик syslinux для загрузки с третьего раздела.Система загружается с третьего раздела. Вносятся изменения.

Изменения для сетевой загрузки

1. Изменение initramfs - начальной корневой файловой системы

Итак, установленная новая система Ubuntu Gnome Shell Remix 12.10 на жестком диске usb.

- надо загрузиться в систему, c третьего раздела
- надо скопировать каталог /etc/initramfs-tools/ в другое место
root@client# cp -R /etc/initramfs-tools/ /tmp/initramfs-tools

- отредактировать скопированный файл /tmp/initramfs-tools/initramfs.conf, исправляем опции:
BOOT=nfs

- отредактировать /etc/initramfs-tools/modules, внести драйверы сетевых карт, обычно встречающиеся на компьютерах, у меня forcedeth

- надо сгенерировать новый файл initramfs на основе скопированного каталога
например:
root@client# mkinitramfs -d /tmp/initramfs-tools/ -v -o /tmp/initrd.img-3.5.0-13-net
- скопировать в папку /boot третьего раздела, либо на tftp-сервер (непроверял).


. Настройки на сервере
В папке tftproot создадим папки system, system/root, system/home. Это будет папки рабочей системы, доступные через NFS.
Папку tftproot/system/root сделаем доступным через NFS, укажем в файле /etc/exports:


# Папка для сетевой загрузки рабочей системы
# 10 сентября 2012
# root - корневая файловая система
# home - домашний каталог
/home/userserver/tftproot/system/root *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure)
/home/userserver/tftproot/system/home *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure)


. Опции ядра, передаваемые загрузчиком, относящиеся к NFS, указываются в строке APPEND.

root=/dev/nfs - опция, указывает ядру, на то, что надо использовать NFS для монтирования корневой файловой системы, а не обычное блочное устройство

nfsroot=192.168.3.1:/home/userserver/tftproot/system/root, <options>
где <options> - разнообразные опции NFS, через запятую.

nfsrootdebug - включает отладочные сообщения
netboot=nfs - опция casper, указывает ему выполнять монтирование сетевого ресурса.
ip=dhcp - автоконфигурирование ip-адреса.

Сформируем пункт меню "Testing netboot system" для файла меню pxelinux.cfg/default
...

LABEL Testing netboot system
KERNEL system/root/vmlinuz
INITRD system/root/boot/initrd.img-3.5.0-13-net
APPEND root=/dev/nfs nfsroot=192.168.3.1:/home/userservertftproot/system/root ip=dhcp rw noswap nosplash --

...

Если не удается преобразовать существующую систему для загрузки по сети, то возможно имеет смысл использовать debootstrap для установки на NFS том.






Опция. Установка на NFS посредством debootstrap

Debootstrap - стандартный способ установки системы Debian Linux из запущенной системы Linux.




Опция. PXE загрузка с помощью GRUB 2

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

Команда grub-mkimage создает загрузочный образ и этот образ может быть сконфигурирован для использования с PXE.

Чтобы образ был доступен для PXE загрузки, надо указать опции:

root@microserver# grub-mkimage --verbose --format=i386-pc-pxe --output=tftproot/grub.pxe --prefix='(pxe)/boot/grub' pxe pxecmd

Здесь предполагается, что Grub 2 установлен обычным способом в системе. В Ubuntu это так.

Итак, непонятные опции, нам разъяснит руководство по Grub.
--format=i386-pc-pxe, специфический формат загрузчика, для поддержки pxe-загрузки
--output=tftproot/grub.pxe, выходной файл загрузчика, будет сразу расположен в корне TFTP-сервера.

--prefix='(pxe)/boot/grub' pxe pxecmd, (pxe)- псевдоустройство, означающее корень TFTP-сервера. При использовании из конфигурационного файла, позволяет ссылаться на файлы TFTP-сервера.

Далее, надо создать в корне TFTP сервера, структуру папок для поддержки Grub 2. Можно просто скопировать файлы, а можно воспользоваться встроенной в пакет Grub 2 командой grub-mknetdir.
Что копировать?
1. Сам загрузчик grub.pxe, можно положить в корень TFTP сервера
2. Содержимое папки /boot/grub
3. Файл меню /boot/grub.cfg


Настройть dhcp-сервер (в нашем случае - dnsmasq) на выдачу вместо pxelinux.0 файла grub.pxe, в файле /etc/dnsmasq.conf
...
dhcp-boot=grub.pxe
...

Либо выполним команду grub-mknetdir на микросервере (можно и на клиенте):
root@microserver# grub-mknetdir --net-directory=tftproot
т.к. tftproot находится в домашней папке, поэтому полный путь не указывается, в иных конфигурациях, надо указать полный путь. В результате будет сформирован каталог с содержимым /boot/grub/i386-pc/. Не очень удачно, но можно перенести файлы в /boot/grub.

Надо вручную отредактировать файл  tftproot/boot/grub.cfg, т.к. нет возможности создавать его автоматически.
В принципе, можно взять за основу, системный файл /boot/grub/grub.cfg и изменить часть файла, где находятся пункты меню.
Например, вот пункт меню, для загрузки live cd:

...
menuentry 'Remote boot live CD' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
linux  (pxe)/ubuntu/livecd/casper/vmlinuz root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.3.1:/home/userserver/tftproot/ubuntu/livecd ro
initrd (pxe)/ubuntu/livecd/casper/initrd.lz
}
...



После того, как загрузчик стартовал, файлы TFTP-сервера доступны через псевдо-устройство (pxe), относительно корня.




Опция. Расширение системного загрузчика на диске, для загрузки по сети

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

Опция. Пакет syslinux
Последние версии пакета syslinux можно получить по адресу:
http://www.kernel.org/pub/linux/utils/boot/syslinux/

Опция. "Раскраска" меню PXE загрузчика
Берем кисть и ....

Опция. Загрузка iso-образа посредством memdisk (диска в памяти)

Memdisk (входит в состав syslinux, копируем в /tftproot/).
Загрузочный образ копируется в память и загружается.

...
LABEL Test memdisk
KERNEL memdisk
APPEND initrd=ubuntu/current-ubuntu.iso
...

Опция. Загрузка iso-образа посредством Grub II. Loopback booting

Grub 2  умеет загружать iso-образы, находящиеся на любом разделе, с любой файловой системой (практически).

Чтобы освоить данную возможность, надо создать папку, например /opt/boot-images и поместить туда образы дисков.
Далее, в Grub 2 существует файл /etc/grub.d/40_custom, который позволяет добавлять пользовательские пункты меню.

Синтаксис несколько отличается от syslinux и предыдущего Grub I. Возможно использование русских букв, в меню.

menuentry "Локальный образ Ubuntu 12.10" {
 iso_path=/opt/boot-images/ubuntu.iso
 export iso_path
 search --set --file $iso_path
 loopback loop $iso_path
 root=(loop)
 linux  /casper/vmlinuz boot=casper iso-scan/filename=$iso_path quiet splash --
 initrd /casper/initrd.lz
}

menuentry "Локальный образ Ubuntu 12.10 консольный режим" {
 iso_path=/opt/boot-images/ubuntu.iso
 export iso_path
 search --set --file $iso_path
 loopback loop $iso_path
 root=(loop)
 linux  /casper/vmlinuz boot=casper iso-scan/filename=$iso_path text --
 initrd /casper/initrd.lz
}

Для диагностики можно использовать консольный режим (опция text or textonly) и режим отключения граф.загрузки (удалить опции quiet splash).

Потом даем команду:
root@mir#update-grub

Перезагружаемся и выбираем iso-образ в меню Grub II.

Также возможно сделать загрузку iso-образа при использовании PXE загрузчика Grub II.
Например, добавить пункт меню в файл tftproot/boot/grub/grub.cfg:

...
menuentry "Test network boot ISO live CD" --class ubuntu --class gnu-linux --class gnu --class os {
 iso_path=/ubuntu/current-ubuntu.iso
 export iso_path
 search --set --file $iso_path
 loopback loop $iso_path
 root=(loop)
 linux  /casper/vmlinuz boot=casper iso-scan/filename=$iso_path --
 initrd /casper/initrd.lz
}
...
В данном пункте ссылка на iso-образ, уже ранее настроенный для pxelinux загрузчика. 

Недостаток этого способа - очень долгая загрузка образа, без отображения прогресса.
Для небольших образов, вполне работоспособное решение.



Опция. Утилита графической настройки Grub Customizer

Команды для установки:
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer


 Ресурсы
-. http://xgu.ru/wiki/PXE
 - .http://www.3dnews.ru/workshop/625306/print
- . http://www.bog.pp.ru/work/PXE.html
- Netboot TCP/IP DOS disk. http://netbootdisk.com/index.htm
- Руководство по Syslinux. http://greenflash.su/Syslinux/Syslinux.htm
- Конфигурационные параметры syslinux(pxelinux). http://greenflash.su/Syslinux/files/config.htm
Mounting the root filesystem via NFS (nfsroot).  http://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
Ramfs, rootfs and initramfs. http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
- Опции ядра. http://www.kernel.org/doc/Documentation/kernel-parameters.txt
- . http://www.syslinux.org/wiki/index.php/PXELINUX
- Boot firmware. Open-source PXE alternative. http://ipxe.org/
http://www.syslinux.org/wiki/index.php/PXELINUX
- Загрузчик GRUB 2. http://ru.wikibooks.org/wiki/Grub_2
- Загрузчик GRUB 2 в Ubuntu. http://help.ubuntu.ru/wiki/grub
- Grub 2 Network. http://www.gnu.org/software/grub/manual/html_node/Network.html
- Debian GNU/Linux Installation Guide. http://d-i.alioth.debian.org/manual/en.i386/index.html
- Этапы загрузки Linux. http://www.k-max.name/linux/nachalo-etapy-zagruzki-os-linux-v-sxeme/
- Магия загрузки. http://www.xakep.ru/magazine/xa/134/084/1.asp
- Grub customizer. https://launchpad.net/grub-customizer
- Опции каспера. http://manpages.ubuntu.com/manpages/lucid/man7/casper.7.html