Как установить Linux из сети

    Буквально вчера хабраюзер Arceny поведал нам об установке дебиана с USB-flash. В статье он упомянул о возможности установки «С помощью загрузки по сети (PXE boot)», благодаря чему я решил наконец написать материал по созданию сервера pxe boot.

    Повествование будет вестись на примере всё той же ОС — Debian (так что пути и команды у вас могут отличаться).
    Для начала — поставим tftp-сервер. Смотрим доступные варианты (apt-cache search tftp | fgrep server):
    • atftpd
    • dnsmasq
    • tftpd
    • tftpd-hpa
    Сначала я поставил tftpd-hpa, т.к. о нём рассказывалось в мануале, с которого я начинал создание сервера. Затем я перешёл на atftpd, т.к. мне потребовалось логирование. Рассмотрим оба варианта:
    • tftpd-hpa:
      Устанавливаем пакет, редактируем файл /etc/default/tftpd-hpa, дабы демон знал, что ему стоит жить:

      #Defaults for tftpd-hpa
      RUN_DAEMON="yes"
      OPTIONS="-l -s /var/lib/tftpboot"


      Создаём нужный каталог: mkdir /var/lib/tftpboot, и стартуем сервис invoke-rc.d tftpd-hpa start

    • atftpd:
      После установки обнаруживаем, что по-умолчанию этот сервис работает через inetd. Я, почему-то, не фанат этого метода, поэтому первым делом закомментировал соответствующую строку в /etc/inetd.conf. Затем редактируем /etc/default/atftpd:

      USE_INETD=false
      OPTIONS="--daemon --tftpd-timeout 1500 --no-multicast --retry-timeout 20 --logfile /var/log/atftpd.log --maxthread 100 --verbose=5 /var/lib/tftpboot"


      --tftpd-timeout — время жизни потока, при отсутствии запросов
      --retry-timeout — таймаут отдачи файла
      у меня установлены большие таймауты, т.к. сервис транслируется в городскую локальную сеть, которая периодически прогибается от обилия абонентов, и не справляется с потоком запросов.
      Ну и, как и в предыдущем пункте, — создаём нужный каталог: mkdir /var/lib/tftpboot, и стартуем сервис invoke-rc.d atftpd start
    Теперь у нас есть tftp-сервер. Один шаг мы сделали :)
    Далее — настройка dhcp:
    • dhcp3:
      В конфигурационный файл /etc/dhcp3/dhcpd.conf добавляем информацию о загрузке:

      filename "pxelinux.0";
      next-server <tftp-server-ip>;


      Если tftpd установлен на том же сервере, что и dhcpd — директиву next-server можно опустить. И перезапускаем dhcp3-server: invoke-rc.d dhcp3-server restart

    • dnsmasq:
      В конфиг /etc/dnsmasq.conf дописываем:

      dhcp-boot=pxelinux.0,<tftp-server-hostname>,<tftp-server-ip>

      Опять же, если сервера tftp и dhcp совпадают — последние 2 атрибута можно не заполнять. Перезапускаем: invoke-rc.d dnsmasq restart
    Шаг второй пройден. Дальше — непосредственно настройка pxe-boot.
    Идём на ftp.debian.org, выбираем каталог installer-*, соответствующий необходимой архитектуре. Затем переходим в директорию current/images/netboot внутри мы найдём файлы netboot.tar.gz и gtk/netboot.tar.gz — это файлы текстовой и графической установки соответственно. Выбираем понравившийся, качаем и распаковываем в /var/lib/tftpboot.
    Осталось убедиться, что зазрешён доступ на 69 UDP порт, и можно пользоваться прелестями сетевой установки.

    В качестве бонуса прилагаю меню, которое получилось у меня в результате нескольких дней издевательств:
    В текущей конфигурации возможна установка нескольких ОС (установка Debian возможна как в текстовом, так и в графическом режиме), загрузка xUbuntu (через nfs), SystemRescueCD (через http-boot), memtest86 (через tftp). Установка всех ОС возможна для 2 архитектур — x86 и x64. Т.к. у меня лежит внутрисетевое зеркало репозиториев Ubuntu 8.10 и Debian 5.0, то установщики не предлают выбор репозитория, а автоматически сливают всё с него.
    Скриншоты:
    стартовый экран, после нажатия кнопки, меню выбора дистрибутива, вторая часть меню выбора дистрибутива, выбрана установка Ubuntu, Debian, Fedora, SuSE.
    Архив /var/lib/tftpboot (без малого 200мб), а так же — файлы конфигурации для установщиков Ubuntu и Debian: в них указаны репозитории + Ubuntu разбивается на Ubuntu, kUbuntu, xUbuntu, edUbuntu.
    В этой конфигурации есть один большой минус, который мне лень исправить: при открытии меню подгружается порядка 70 файлов, бОльшая часть из которых не нужна пользователю. Что бы избавиться от этого — отображение подменю нужно перевести из подключения меню инклудами в их вызов через ядро vesamenu.c32, которое идёт с pxeboot. Так же — не помешает очистить каталоги меню от дубликатов — большая часть конфигов для меню x64 и x86 совпадает.
    Share post

    Similar posts

    Comments 30

      0
      Спасибо. Очень познавательно. Пошел реализовывать.
        0
        Большое спасибо за статью. Давно искал материал по этой теме в предложенном вами качестве.
        Вот теперь думаю как бы это на FreeNAS прикрутить.
          +1
          Сейчас имею рабочую Генту грузящуюся через РХЕ и монтирующую НФС при загрузке. В итоге имею полностью бездисковую загрузку. Если вы это имели в виду — обращайтесь может подскажу чего)
        • UFO just landed and posted this here
            +1
            хочу мануал, как установить Дебиан с магнитной ленты!
              0
              Вы уверены? а то ведь найдутся умельцы… :)
              • UFO just landed and posted this here
                  0
                  Верчу тут перфокарту 1984-го года… Сам с ними как с перфокартами не работал, но по моим прикидкам тут байт 80 данных будет.
                  Как-то живо представляются целые установочные грузовики )))
                  Debian Install Truck 1, Debian Install Truck 2…
                +1
                В дополнение — при такой установке (а она делается только для массовых случаев, иначе зачем огород городить) неплохо бы поднять в сети approx и при установке в качестве репозитория указывать именно его. Тогда скорость скачивания пакета начиная со второго раза будет равна скорости внутри локалки, а не внешнего канала :)
                Для дальнейших обновлений (которые опять-таки будут массовыми) он тоже не помешает.
                  0
                  Спасибо. Всегда догадывался что должен быть более изящный способ, чем тупое копирование репозитория.
                  +1
                  Ну эта третья вещь которую я делаю на фирме, после настройки DNS и DHCP, надо будет сделать цикл статей о настройки SOHO офисов =)
                    0
                    Было бы здорово!
                      0
                      Ну если раньше не кто не напишет, то можно. Сейчас как всегда проблема со временем, маленький ребенок требует для себя очень много времени =)
                    0
                    ъотите ставить через инет — юзайте генту :)
                      0
                      Отлично :-) Пригодится при развёртывании большого парка машин.
                        0
                        оффтопиком а на чем вы сделали репозиторий? и сколько места тербует?
                          0
                          на дебиане, скриптом debmirror; для i386 и amd64:
                          Debian Lenny — 30G
                          Debian Lenny Security Updates- 199M
                          Ubuntu 8.10 — 39G
                          Ubuntu 9.4 — 35G
                            0
                            А у меня все Ubuntu свалены в одну папку, они между ветками пересекаются довольно сильно и тем самым экономят пространство…

                            Debian точно так же.
                              0
                              хм… а зеркалируете чем? если им же — поведайте, пожалуйста, каким образом объединить дебиан и его апдейты в одну папку.
                              а убунты у меня по разным папкам лежат, потому что на разделе с 8.10 оставалось 7 гигов, когда я зеркало для 9.4 делал — не думаю, что этого бы хватило.
                                0
                                Папка dists соответственно общая. Дебмиррором:

                                Например дебиан с одного из локальных зеркал:

                                debmirror /drive1/lug/debian \
                                --host=10.102.13.182 \
                                --dist=etch,lenny,squeeze,etch-proposed-updates,lenny-proposed-updates,squeeze-proposed-updates,sid,experimental \
                                --arch=i386,amd64 --root=debian --method=http \
                                --section=non-free,main,contrib,main/debian-installer \
                                --ignore-missing-release \
                                --progress --verbose --nosource --pdiff=none

                                70G /drive1/lug/debian

                                И убунту с инета:

                                debmirror /drive1/lug/ubuntu \
                                --host=archive.ubuntu.com \
                                --dist=gutsy,gutsy-updates,gutsy-security,gutsy-proposed,gutsy-backports,\
                                hardy,hardy-backports,hardy-proposed,hardy-security,hardy-updates,\
                                intrepid,intrepid-backports,intrepid-proposed,intrepid-security,intrepid-updates \
                                --arch=i386,amd64 --root=ubuntu --method=http \
                                --section=main,multiverse,restricted,universe \
                                --ignore-missing-release \
                                --progress --verbose --nosource --pdiff=none

                                108G /drive1/lug/ubuntu

                                Ещё есть Gentoo Distfiles, там rsync'ом:

                                rsync -avh --partial --progress --delete-after rsync://mirror.yandex.ru/gentoo-distfiles/distfiles/ /drive1/lug/gentoo-distfiles/distfiles/
                                rsync -avh --partial --progress --delete-after rsync://mirror.yandex.ru/gentoo-distfiles/snapshots/ /drive1/lug/gentoo-distfiles/snapshots/
                                rsync -avh --partial --progress --delete-after rsync://mirror.yandex.ru/gentoo-distfiles/experimental/amd64/ /drive1/lug/gentoo-distfiles/experimental/amd64/
                                rsync -avh --partial --progress --delete-after rsync://mirror.yandex.ru/gentoo-distfiles/experimental/x86/ /drive1/lug/gentoo-distfiles/experimental/x86/
                                rsync -avh --partial --progress --delete-after rsync://mirror.yandex.ru/gentoo-distfiles/releases/amd64/ /drive1/lug/gentoo-distfiles/releases/amd64/
                                rsync -avh --partial --progress --delete-after rsync://mirror.yandex.ru/gentoo-distfiles/releases/x86/ /drive1/lug/gentoo-distfiles/releases/x86/

                                94G /drive1/lug/gentoo-distfiles/
                                  0
                                  дык в том-то и фишка, что dists не общая — дебиан и его обновления (которые безопасности, а не proposed) на разных серверах лежат — ftp.debian.org и security.debian.org — меня вопрос объединения именно этих двух веток интересует. с остальным всё легко и понятно :)
                                    +1
                                    proposed это тот же security но не за всё время, а с момента последнего -rX
                                      0
                                      хм… по моим данным — proposed == security + неоттестированный софт. по крайней мере это следует из whats new для Debian 5.0:
                                      Пакеты могут попасть в proposed-updates двумя путями. Во первых, при решении проблем с безопасностью пакет добавляется в security.debian.org и автоматически также добавляется в proposed-updates. Во-вторых, разработчики Debian GNU/Linux могут закачивать новые пакеты сразу в proposed-updates. Текущий список пакетов можно посмотреть в ftp-master.debian.org/proposed-updates.html.
                                      Если вы хотите помочь в тестировании обновлённых пакетов перед тем как они формально попадут в промежуточный выпуск, добавьте секцию proposed-updates в свой sources.list
                                      0
                                      Конечно, я имел в виду папку pool, а не dists :-))
                            0
                            А у меня такая фигня, что нет ДВД привода, и жечь лень, я ставлю по сети, но через http, достаточно скачать ядро + образ с установщиком (где-то Мб 30), прописать их в загрузку винды через Unetbootin, перезагрузиться, и оппа — можно ставить)) Пробовал на OpenSuse и Ubuntu)) Ставится где-то час, зато не надо жечь (и нечем) и качать.
                              0
                              А как сделать тоже самое, только с условием, что dhcp уже выполняется виндовым контроллером домена?
                              0
                              В каталоге images обнаружился файл update.sh, который обновляет образы Ubuntu и Debian.

                              Чтобы он обновлял до текущих версий, файл понадобилось немного изменить:

                              update.sh
                              #!/bin/sh
                              
                              cd /var/lib/tftpboot/images
                              
                              DEBIAN_CURRENT=stable
                              UBUNTU_CURRENT=raring
                              UBUNTU_MIRROR=mirror.yandex.ru
                              
                              wget ftp://ftp.ru.debian.org/debian/dists/$DEBIAN_CURRENT/main/installer-i386/current/images/netboot/debian-installer/i386/linux -O d86_linux
                              wget ftp://ftp.ru.debian.org/debian/dists/$DEBIAN_CURRENT/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz -O d86_initrd.gz
                              wget ftp://ftp.ru.debian.org/debian/dists/$DEBIAN_CURRENT/main/installer-i386/current/images/netboot/gtk/debian-installer/i386/initrd.gz -O d86_gtk_initrd.gz
                              
                              wget ftp://ftp.ru.debian.org/debian/dists/$DEBIAN_CURRENT/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux -O d64_linux
                              wget ftp://ftp.ru.debian.org/debian/dists/$DEBIAN_CURRENT/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz -O d64_initrd.gz
                              wget ftp://ftp.ru.debian.org/debian/dists/$DEBIAN_CURRENT/main/installer-amd64/current/images/netboot/gtk/debian-installer/amd64/initrd.gz -O d64_gtk_initrd.gz
                              
                              wget http://$UBUNTU_MIRROR/ubuntu/dists/$UBUNTU_CURRENT/main/installer-i386/current/images/netboot/ubuntu-installer/i386/linux -O u86_linux
                              wget http://$UBUNTU_MIRROR/ubuntu/dists/$UBUNTU_CURRENT/main/installer-i386/current/images/netboot/ubuntu-installer/i386/initrd.gz -O u86_initrd.gz
                              
                              wget http://$UBUNTU_MIRROR/ubuntu/dists/$UBUNTU_CURRENT/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux -O u64_linux
                              wget http://$UBUNTU_MIRROR/ubuntu/dists/$UBUNTU_CURRENT/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz -O u64_initrd.gz
                              

                              Ubuntu теперь будет версии raring, а Debian — текущей stable.
                                0
                                Спустя 4 года, после написания статьи :)
                                Спасибо, сегодня добавлю в архив.
                                  0
                                  Я ещё с ним немного колдую — обновил pxelinux до 4.06, появилась ограниченная поддержка загрузки с ISO-файлов, добавил memtest86+. Parted Magic, добавляю SystemRescueCD с загрузкой через TFTP и netboot.me. Как закончу — обязательно выгружу все изменения.

                                  Внезапно, захотелось централизованную загрузку нескольких утилит в локальной сети. И, спустя 4 года, у вас одна из редких толковых и организованных сборок PXE-систем

                                  Что особенно приятно, вся загрузка ведётся со скромного маршрутизатора TP-Link 4300 с OpenWRT и 8ГБ флешкой за 150 рублей.

                                  Кстати, говорят, возможна загрузка и установка Windows ≥XP через PXE. Но там всё очень по-майкрософтовски страшно, не хочется даже начинать.

                              Only users with full accounts can post comments. Log in, please.