Сетевая установка и сетевая загрузка
...Харе-харе!
Постановка задачи
Решение
На сервере
Самый очевидный — и, по-видимому, правильный — путь решения состоит в том, чтобы заставить рабочую станцию загружать и устанавливать операционную систему с сервера посредством локальной сети, а не с отдельного носителя. Более точно: надо изыскать способ загрузить по сети установщик «Альт Линукс Ковчег 5.0 Рабочая Станция» и указать ему хранилище пакетов для «чистой» установки пакетов.
Здесь нас подстерегает тщательно подготовленная удача: именно такая возможность встроена в дистрибутивы Пятой платформы! В конфигураторе сервера
![]() |
Ковчег. Пожалуйста, зарегистрируйтесь |
![]() |
Волшебный горшочек? |
![]() |
Добавим диск «Альт Линукс Ковчег 5.0 Рабочая Станция» |
![]() |
Полузащитник обрабатывает мяч... обрабатывает его... обрабатывает... |
![]() |
...обработал! |
На клиентской машине
Большинство современных сетевых карт, в том числе интегрированных в системные платы, поддерживают загрузку специального вида программ по сети посредством семейства протоколов PXE. На отдельных, не интегрированных, устройствах можно иногда заметить ряды неиспользуемых контактов или колодки для подключения микросхем. Это верный признак того, что устройство не поддерживает сетевую загрузку. Обычно возможность загрузки по сети обозначена в BIOS (где-нибудь в разделе «Boot priority»), либо самостоятельно анонсируется сетевой картой при включении компьютера.
В некоторых версиях BIOS даже есть возможность не меняяя настроек BIOS разово выбрать иное учстройство для загрузки:
![]() |
Спасибо тебе |
Иногда в этих меню пишут ключевое слово «PXE», иногда «int 18», иногда показывают модель сетевого устройства, а иногда без затей предлгают «загрузку по сети»:
![]() |
Выбор сетевой загрузки |
Сетевая карта самостоятельно обращается к DHCP-серверу, и требует у него два вида информации: сетевый настройки и имя файла с программой, которую следует загрузить по сети (испльзуетеся протокол TFTP) и запустить; адрес TFTP-сервера также предварительно запрашивается:
![]() |
Сетевая загрузка: DHCP |
Загрузчик (в нашем слкчае он называется pxelinux.0), в свою очередь, скачивает с сервера конфигурвационный файл:
![]() |
Сетевая загрузка: PXE-загрузчик |
Так или иначе, конфигурацонный файл загружен; можно выбирать разные профили загрузки, если ничего не трогать, будет использован профиль по умолчанию:
![]() |
Сетевая загрузка: меню выбора |
Загрузчик, опять-таки по SFTP, добудет ядро Linux и стартовый виртуальный диск
![]() |
Сетевая загрузка: ядро и стартовый виртуальный диск |
![]() |
Старт установщика по сети |
![]() |
Задача сведена к уже решённой! |
![]() |
Не забыть зарегистрироваться в домене |
![]() |
Загрузка профиля «live» |
![]() |
Отсутствие DNS при загрузке по сети |
Первые шаги: шаг вправо, шаг влево, прыжок на месте
[root@host-15 ~]# cat /etc/dhcp/dhcpd.conf . . . subnet 10.30.50.0 netmask 255.255.255.0 { next-server 10.30.50.1; filename "pxelinux.0"; option root-path "/var/srv/public/netinst/current"; option routers 10.30.50.1; option domain-name-servers 10.30.50.1; option domain-name "office"; default-lease-time 86400; max-lease-time 86400; range 10.30.50.10 10.30.50.100; }
[root@host-15 ~]# ls /var/lib/tftpboot/ pxelinux.0 pxelinux.cfg syslinux
[root@host-15 ~]# ls /var/lib/tftpboot/syslinux/ 16x16.fnt da.hlp fi.tr init lt.tr pt.tr timer_a.jpg af.tr da.tr fr.hlp isolinux.bin memtest pt_BR.tr tr.tr alt0 de.tr fr.tr isolinux.cfg mr.hlp ro.hlp uk.hlp ar.hlp el.hlp gfxboot.cfg it.hlp mr.tr ro.tr uk.tr ar.tr el.tr gl.hlp it.tr nb.hlp ru.hlp wa.tr back.jpg en.hlp gl.tr ja.tr nb.tr ru.tr xh.tr bg.tr en.tlk gu.hlp ka.tr nl.hlp sk.hlp zh_CN.hlp boot.cat en.tr gu.tr ko.hlp nl.tr sk.tr zh_CN.tr bootlogo es.hlp hi.tr ko.tr pa.hlp sl.tr zh_TW.hlp ca.hlp es.tr hr.tr kroete.dat pa.tr sr.tr zh_TW.tr ca.tr et.hlp hu.hlp lang pl.hlp sv.hlp zu.tr cs.hlp et.tr hu.tr languages pl.tr sv.tr cs.tr fi.hlp id.tr lt.hlp pt.hlp ta.tr
[root@host-15 ~]# ls /var/lib/tftpboot/syslinux/alt0/ full.cz vmlinuz
[root@host-15 ~]# cat /var/lib/tftpboot/pxelinux.cfg/default.orig default linux prompt 1 timeout 100 gfxboot syslinux/bootlogo display syslinux/boot.msg implicit 1 label harddisk localboot 0x80 label linux kernel syslinux/alt0/vmlinuz append initrd=syslinux/alt0/full.cz changedisk ramdisk_size=65536 lang=ru_RU vga=0x314 splash=silent splashcount=17 xdriver=auto showopts automatic=method:nfs,network:dhcp tz=Europe/Moscow . . . label live kernel syslinux/alt0/vmlinuz append initrd=syslinux/alt0/full.cz live fastboot vga=0x314 splash=silent splashcount=17 stagename=live showopts automatic=method:nfs,network:dhcp tz=Europe/Moscow . . .
[root@host-15 ~]# cat /etc/exports /srv/public -ro,insecure,no_subtree_check,no_root_squash * /srv/share -rw,insecure,fsid=0,sec=krb5 *
Загрузка с LiveCD на сервере
![]() |
1217-13_32_51 |
[root@localhost ~]# cat /etc/fstab proc /proc proc nosuid,noexec,gid=proc 0 0 devpts /dev/pts devpts nosuid,noexec,gid=tty,mode=620 0 0 tmpfs /tmp tmpfs nosuid 0 0 /dev/root / auto defaults,ro 0 0 UUID=b391cc0a-59c0-4313-b6f2-31f9096b6ba4 swap swap defaults 0 0 UUID=e40fc352-f031-4827-ab7c-a7ebe12ecc5e /mnt/hda2 ext3 noauto 0 0 UUID=2a86bf2b-5d8c-4c04-9acf-0f47448ea45c /mnt/hda5 ext3 noauto 0 0 UUID=a12e05b3-671f-4914-9d5e-f07cefd2570c /mnt/hda6 ext3 noauto 0 0
[root@localhost ~]# mount /mnt/hda5 [root@localhost ~]# ls /mnt/hda5/ adm avahi empty local lost+found nobody resolv srv yp aquota.group cache ftp lock mail opt run tmp aquota.user db lib log nis preserve spool www
[root@localhost ~]# mount -t squashfs -o loop /image/live /mnt/hda2 [root@localhost ~]# cp -a /mnt/hda2 /mnt/hda5/srv/public/netinst
[root@localhost ~]# mkdir /mnt/hda5/srv/public/netinst/livefs [root@localhost ~]# cd /image [root@localhost image]# cp -a .??* [^l]* lic* /mnt/hda5/srv/public/netinst/livefs/
Настройка сервера
[root@host-15 ~]# diff -u /srv/public/netinst/livefs/live/etc/init.d/livecd-fstab{.orig,} --- /srv/public/netinst/livefs/live/etc/init.d/livecd-fstab.orig 2009-12-17 21:52:20 +0300 +++ /srv/public/netinst/livefs/live/etc/init.d/livecd-fstab 2009-12-17 21:52:51 +0300 @@ -16,9 +16,9 @@ MNT_PREFIX="/mnt" FSTAB="/etc/fstab" UDEVADM="/sbin/udevadm" -MOUNT_OPTIONS_VFAT="users,noatime,codepage=866,shortname=winnt,iocharset=utf8,gid=0100,fmask=111,dmask=0000" -MOUNT_OPTIONS_NTFS3G="users,locale=ru_RU.utf8,gid=100,fmask=111,force,dmask=000" # force -MOUNT_OPTIONS_OTHER="noauto" +MOUNT_OPTIONS_VFAT="users,ro,noatime,codepage=866,shortname=winnt,iocharset=utf8,gid=0100,fmask=111,dmask=0000" +MOUNT_OPTIONS_NTFS3G="users,ro,locale=ru_RU.utf8,gid=100,fmask=111,force,dmask=000" # force +MOUNT_OPTIONS_OTHER="noauto,ro" log() { initlog $INITLOG_ARGS -n $0 -s "$1"
[root@host-15 ~]# cat /etc/exports /srv/public -ro,insecure,no_subtree_check,no_root_squash * /srv/share -rw,insecure,fsid=0,sec=krb5 *
[root@host-15 ~]# service nfs restart Stopping NFS mount service: [ DONE ] Stopping NFS daemon: [ DONE ] Stopping NFS svcgssd service: [ DONE ] Stopping NFS quotas service: [ DONE ] Unexporting NFS file systems: [ DONE ] Exporting NFS file systems: [ DONE ] Starting NFS quotas service: [ DONE ] Starting NFS svcgssd service: [ DONE ] Starting NFS daemon: [ DONE ] Starting NFS mount service: [ DONE ] Stopping rpc.idmapd service: [ DONE ] Starting rpc.idmapd service: [ DONE ]
[root@host-15 ~]# cd /srv/public/netinst/ [root@host-15 netinst]# mv hda2 livefs/live [root@host-15 netinst]# chmod 755 hda2/
[root@host-15 ~]# cat /var/lib/tftpboot/pxelinux.cfg/default default live prompt 0 timeout 0 noescape 1 label live kernel syslinux/alt0/vmlinuz append initrd=syslinux/alt0/full.cz live fastboot lang=ru_RU vga=0x314 splash=silent splashcount=17 stagename=live showopts automatic=method:nfs,network:dhcp tz=Europe/Moscow
[root@host-15 ~]# ln -sf livefs /srv/public/netinst/current [root@host-15 ~]# l /srv/public/netinst/ total 2630452 drwxr-xr-x 5 root _ahttpd 4096 Dec 18 15:45 ./ lrwxrwxrwx 1 root root 6 Dec 18 15:45 current -> livefs/ drwxr-xr-x 8 root root 4096 Dec 17 21:01 livefs/ drwxr-xr-x 3 root root 4096 Dec 17 21:00 ../ drwxr-xr-x 2 root root 4096 Dec 17 20:35 mnt/ drwxr-xr-x 2 root _ahttpd 4096 Dec 17 20:35 download/ -rw-r--r-- 1 root root 67 Dec 17 20:34 list -rw-r--r-- 1 root root 2690922496 Dec 17 20:34 1.img
Настройка файловой системы клиента
[root@host-15 ~]# chroot /srv/public/netinst/livefs/live/ [root@host-15 /]# cat > /etc/rc.d/rc.local #!/bin/sh dhcpcd -p eth0 ^D [root@host-15 /]# chmod +x /etc/rc.d/rc.local [root@host-15 /]# { echo "P@sSw0RD" ; echo "P@sSw0RD" ; } | passwd --stdin root
[root@host-15 ~]# diff -u /srv/public/netinst/livefs/live/etc/init.d/livecd-save-nfs{.orig,} --- /srv/public/netinst/livefs/live/etc/init.d/livecd-save-nfs.orig 2009-12-18 15:39:55 +0300 +++ /srv/public/netinst/livefs/live/etc/init.d/livecd-save-nfs 2009-12-18 15:39:57 +0300 @@ -16,6 +16,7 @@ { if ip -o a | grep -q 'eth.*UP' ; then iface=$(ip -o a | grep 'eth.*UP' | cut -f 2 -d' ' | tr -d ':') + ls /etc/net/ifaces > /dev/null mkdir -p /etc/net/ifaces/$iface echo 'NM_CONTROLLED=no' >> /etc/net/ifaces/$iface/options echo 'BOOTPROTO=dhcp' >> /etc/net/ifaces/$iface/options
LiveCD по сети:
- Загрузиться с Livecd на сервере
- смонтировать /image/live на /mnt/sda2
- смонтировать /mnt/sda5
- скопировать /mnt/sda2 на /mnt/sda5/srv/public/netinst
- загрузить сервер
- создать /srv/public/netinst/livefs
- скопировать /srv/public/netinst/mnt/* (всё, кроме live и ALTLinux) на /srv/public/netinst/livefs
- mv /srv/public/netinst/sda2 /srv/public/netinst/livefs/live
- chroot /srv/public/netinst/livefs
- chkconfig chkconfig livecd-save-nfs off
- NM_CONTROLLED=no в /etc/net/ifaces/default/options
echo "#!/bin/sh\ndhcpcd eth0" > /etc/rc/rc.local; chmod +x /etc/rc/rc.local
- установить пароль оута
- убрать монтирование левых разделов
- ln -sf livefs current