Установка Ubuntu по сети. Установка Windows по сети с Linux-сервера Установка linux по локальной сети

В статье он упомянул о возможности установки «С помощью загрузки по сети (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 ;

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

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

    Dhcp-boot=pxelinux.0,,

    Опять же, если сервера 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, то установщики не предлают выбор репозитория, а автоматически сливают всё с него.
Скриншоты.

В статье он упомянул о возможности установки «С помощью загрузки по сети (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 ;

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

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

    Dhcp-boot=pxelinux.0,,

    Опять же, если сервера 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, то установщики не предлают выбор репозитория, а автоматически сливают всё с него.
Скриншоты.

Сегодня автоматизируется все больше задач, для максимальной отдачи серверов все шире используют виртуализацию. Но устанавливать операционки по-прежнему приходится. Каждый делает это по-своему: у кого-то полные карманы различных образов на все случаи жизни, кто-то по старинке носит с собой «барсетку» с дисками, а то и две. Как правило, администраторы выполняют эту работу с невеликим удовольствием. Давай посмотрим, как сократить время на тривиальные задачи, как научить компьютеры устанавливать системы самостоятельно, вообще без участия админа, используя при этом только локальную сеть.

Итак, сегодня мы научимся: устанавливать Windows и Linux по сети, грузить небольшие ISO-образы, полезный софт (всяких там Касперских, Акронис, WinPE, мемтесты), разворачивать тонкие клиенты и рулить ими. Чтобы, например, бухгалтер, работающая с 1С по RDP, не прибила тебя за то, что у нее слетела винда, а отчет нужно было подготовить еще вчера... Или скупой начальник, который не хочет обновлять свой комп, восхитился твоим профессионализмом, когда увидит, как на стареньких компах летает Windows 8... В достижении наших коварных целей нам поможет сервер, предоставляющий загрузку по сети (PXE).

У любого системного администратора в заначке есть универсальный USB-диск для экстренной реанимации компьютера. Согласись, было бы куда лучше иметь ту же функциональность, используя одну лишь сетевую карту. Нельзя при этом не отметить возможность одновременной работы с несколькими узлами сразу. Итак, исходя из наших потребностей у нас есть два пути решения: использовать PXE или LTSP.

LTSP нам не очень подходит: он призван грузить по сети ОС, установленную на самом сервере, что позволяет использовать приложения сервера LTSP. Это не совсем то, что нам нужно. PXE - инструмент для загрузки компьютера по сети без использования локальных носителей данных, так же как и LTSP. PXE позволяет организовать мультизагрузочное меню загрузки, аналогичное универсальному «USB-реаниматору».


Что будем реализовывать?

Началось все с необходимости иметь под рукой инструмент для удаленной установки Ubuntu/Debian Server по сети, с возможностью загрузки Live CD маленькой системы, вроде SliTaz или Kolibri OS.
Как говорится, аппетит приходит во время еды: намеченное не успели реализовать, а к плану добавился еще ряд «хотелок». В итоге список получился весьма внушительным.

  1. Тонкие клиенты на базе Thinstation Linux.
  2. Раздел Linux.
    1. Установка Ubuntu 14.04 x86.
    2. Установка Ubuntu 14.04 x64.
    3. Установка Ubuntu 12.04 x86.
    4. Установка Ubuntu 12.04 x64.
  3. Раздел Windows.
    1. Установка Windows 2012.
    2. Установка Windows 7.
  4. Acronis.
    1. Windows PE с пакетом полезного ПО.
    2. Acronis True Image.
      1. Legacy BIOS.
      2. UEFI.
    3. Acronis Disk Director.
      1. Legacy BIOS.
      2. UEFI.
  5. Касперский Rescue v 10.
  6. ERD Commander от 5 до 8 через ISO-образ.
  7. Memtest.

Собираем все в кучу и взлетаем

В качестве дистрибутива для сервера выбор пал на Ubuntu Server 14.04.2 LTS. Можно остановиться на любой другой ОС, разница будет только в синтаксисе. Итак, приступим. Нам потребуется TFTP, DHCP (необязательно установленный на этом же сервере, в роли DHCP-сервера может выступить роутер), сервис для организации сетевой файловой системы NFS. Рассматривать будем только те настройки, которые нас интересуют в рамках темы. Первым делом установим все необходимое, предварительно сделав все обновления:

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

Каждому, кто хоть изредка промышляет администрированием хотя бы раз нужно было установить операционку на комп. И зачастую происходит всё так: скачивается образ, записывается на диск или флешку, грузимся и ставим. Но может оказаться что ни флешки ни диска под рукой нет, а установку нужно выполнить на вчера... Тогда можно загрузится по сети, и с линуксом в этом плане особо проблем нет. Типичная конфигурация - это связка DHCP , TFTP и NFS . Но у меня под рукой не было настроенного NFS , зато была Samba . Поэтому пришлось разобраться как использовать Samba вместо NFS .

Вроде бы ничего такого, поменял настройки и всё, но что-то не работало поначалу, пришлось шаманить...

Но я тут начну с самого начала. Итак для начала нужно обзавестись дистрибутивом. Так как ставим мы Linux Mint , ищем свежий образ . Скачиваем дистрибутив, подходящий именно нам (я ставил тот, что с MATE , но очевидно это не имеет особого значения). Скачав образ, нужно получить доступ к файлам образа. В некоторых руководствах рекомендуют распаковать образ, но я не вижу в этом смыла, поэтому поддерживаю мнение, которое заключается в том, чтобы смонтировать образ как loop . Чтобы не вмешиваться в существующий порядок, просто создаём новый каталог, куда и монтируем образ:

# mkdir /mnt/mint
# mount -o loop /home/user/download/linuxmint-17-mate-64bit-v2.iso /mnt/mint

Далее нужно сделать файлы доступными по сети для чтения установщиком. Как я говорил выше, у меня для этого служит Samba . Поэтому открываем файл конфигурации и добавляем новую шару, добавив такую секцию:


path = /mnt/mint
available = yes
browsable = yes
public = yes
writable = no

Должно работать поверх дефолтных настроек Samba . Если же не работает, то скорее всего вы что-то меняли сами, а значит найдёте как решить проблему. Итак мы добавили шару mint , через которую можно с сети получить файлы для установки. Не забудьте перезапустить Samba для принятия новых настроек.

Для Archlinux :

# systemctl restart smbd
# systemctl restart nmbd

Для Gentoo :

# /etc/init.d/samba restart

Далее нужно подготовить сетевой загрузчик. В этом нам поможет программа tftp-hpa . В Archlinux и в Gentoo пакет называется именно так. Нужно расположить файлы загрузчика в рабочем каталоге ftp-сервера (в арче /srv/tftp ). Копируем туда ядро и initrd со смонтированного образа:

# cp /mnt/mint/casper/{vmlinux,initrd.lz} /srv/http

# cp /usr/lib/syslinux/bios/{pxelinux.0,menu.c32,ldlinux.c32,libutil.c32} /srv/http

DEFAULT menu.c32
LABEL LinuxMint
KERNEL vmlinuz
APPEND showmounts toram root=/dev/cifs boot=casper netboot=cifs nfsroot=//192.168.0.1/mint NFSOPTS=-oguest,ro initrd=initrd.lz nosplash

Где 192.168.0.1 - наш IP-адрес относительно машины, на которую быдем ставить. Ах да, и про nfs там - это не опечатка, в режиме работы с cifs, нужно передавать опции типа как для nfs, не могу сказать почему. Особое внимание нужно обратить на опцию toram, поскольку без неё всё отваливается на полпути и загрузится мы не можем (может это особенности самбы). Но с этой опцией нужно помнить о том, что на целевой машине должно быть достаточно оперативки, чтобы скопировать туда установщик. TFTP-сервер нужно запустить. Для Archlinux :

# systemctl tftpd.socket start

Для Gentoo :

# /etc/init.d/in.tftpd start

Теперь нужно биосу целевой машины как-то сказать откуда грузится. В этом нам поможет dnsmasq (хотя не обязательно, можно использовать и другой DHCP сервер, здесь описываю то, что было под рукой). Настраиваем раздачу IP (опция dhcp-range ) на своё усмотрение, под свою "сеть" между машинами. Для установки нам важны лишь три опции:

Dhcp-boot=/pxelinux.0
dhcp-option=vendor:PXEClient,6,2b
pxe-service=x86PC, "Install Linux", pxelinux

Их нужно добавить к конфигурации dnsmasq , ну и естественно запустить его (или перезапустить).

Для Archlinux :

# systemctl start dnsmasq

Для Gentoo :

# /etc/init.d/dnsmasq start

Помните, чтобы всё заработало необходимо, чтобы порты на DHCP (UDP 67,68), TFTP (UDP 69), Samba (UDP 137,138, TCP 139,445) должны быть обязательно открыты, обязательно учтите это в конфигурации своего фаерволла. Если же фаерволла нет или полностью открыт интерфейс - ну и ладно, должно работать.

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

Уже довольно давно, мной была написана статья о сетевой установке Ubuntu, по локальной сети, без использования различных носителей, только загрузка по PXE и все. В этот раз я решил обновить статью и сделать ее ближе к современным реалиям, а главное, расширить функционал. Все будет выполняться на примере Ubuntu 14.04!

Под разные требования, должны быть и разные решения, главная загвоздка в том, что зачастую, нам требуется не одна операционная система, а несколько. Вот я и решил написать на эту тему статью. С предыдущей статьей, можно ознакомиться по ссылке, .
Главная идея заключаться в том что у нас появится возможность, выбирать какую операционную систему мы будем устанавливать, а также ее разрядность, фактически, у нас появится меню загрузки, после загрузки системы по локальной сети.
Все это мы реализуем, на примере, только что вышедшей Ubuntu 14.04

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

Ubuntu_14.04x86
Ubuntu_14.04amd64
Для работы нам понадобится:
Обязательно!
1) Настроенный шлюз, для примера, воспользуйтесь статьей:
2) DHCP сервер, для примера, можно воспользоваться статьёй:
3) Настроенный TFTP сервер, загружающий PXE загрузчик, воспользоваться статьёй:

Опционально!
3) Дополнительным, но не обязательным моментом, может быть настроенный DNS сервер, пример есть в статье

Предполагается что у вас настроен шлюз, DHCP, TFTP севрер, а также добавлено меню загрузки PXE т.к. на этом моменте я останавливаться не буду.

Переходим к настройке инсталлируемой системы.
Для начала мы создадим пункт установки для Ubuntu 14.04x86, для чего нам понадобится установочный диск соответствующей разрядности. Нам его необходим скачать и примонтировать, для того чтобы извлечь файлы загрузчика инасталятора системы.
Т.к. файл сетевого загрузчика у нас лежат в директории директории /var/lib/tftpboot/ откуда они и подтягиваются TFTP сервером, то в ней нам нужно создать директорию Ubuntu, чтобы в нее сложить файлы с дисков установки, сделаем это:
mkdir /var/lib/tftpboot/ubuntu
В директории Uubntu мы создаем дополнительные директории для файлов загрузчика инсталлятора ОС для x86 разрядных систем и ADM64-соответсвенно.
mkdir /var/lib/tftpboot/ubuntu/x86 mkdir /var/lib/tftpboot/ubuntu/amd64

Теперь нам требуется скачать установочный диск посмотреть можно тут mirror.yandex.ru/ubuntu-releases/14.04/
Мы качнем версию х86 для сервера т.к. она меньше весит
wget http://mirror.yandex.ru/ubuntu-releases/14.04/ubuntu-14.04-server-i386.iso
После завершения закачки ISO образа, нам нужно его смонтировать, чтобы извлечь нужные нам файлы, а для этого, в директории /media мы создадим директорию iso , давайте сделаем это:

Mkdir /media/iso
Монтируем образ диска в эту директорию:
sudo su
mount ubuntu-14.04-server-i386.iso /media/iso/
Система выдаст что диск смонтирован в режиме чтения:

mount: warning: /media/iso/ seems to be mounted read-only.
Идем забирать загрузчик и ядро инсталятора:
cd /media/iso/install/netboot/ubuntu-installer/i386/

Нас интересуют 2 файла linux и initrd.gz , которые нам нужно забрать и перенести в директорию /var/lib/tftpboot/ubuntu/x86
давайте скопируем их:
cp linux /var/lib/tftpboot/ubuntu/x86 cp initrd.gz /var/lib/tftpboot/ubuntu/x86

Все, установочный образ нам больше не нужен, для начала отмонтируем его из директории iso:
umount /media/iso/

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

Wget http://mirror.yandex.ru/ubuntu-releases/14.04/ubuntu-14.04-server-amd64.iso

Mount ubuntu-14.04-server-amd64.iso /media/iso/

Cd /media/iso/install/netboot/ubuntu-installer/amd64/

Cp linux /var/lib/tftpboot/ubuntu/amd64 cp initrd.gz /var/lib/tftpboot/ubuntu/amd64

Umount /media/iso/

С файлами установки закончили, теперь настроим PXE меню загрузки.

Настройка меню загрузки PXE
Для начала добавим пункт меню с названием Linux Install , для этого нам нужно отредактировать файл:
nano /var/lib/tftpboot/pxelinux.cfg/default

В конец файла добавим запись:
LABEL Linux Install MENU LABEL ^Linux Install KERNEL vesamenu.c32 APPEND pxelinux.cfg/linux.menu

Как видно из записи, у нас будет другая страница с выбором дисирибутивов для установки, создадим ее:

Nano /var/lib/tftpboot/pxelinux.cfg/linux.menu

Добавим в нее названия пунктов для загрузки с возможностью выбора операционной системы для установки, пока это будет Ubuntu 14.04 x86 и amd64 архитектуры:
LABEL Install Ubuntu 14.04x86 MENU label ^Ubuntu 14.04x86 KERNEL ubuntu/x86/linux APPEND initrd=ubuntu/x86/initrd.gz LABEL Install Ubuntu 14.04amd64 MENU label ^Ubuntu 14.04amd64 KERNEL ubuntu/amd64/linux APPEND initrd=ubuntu/amd64/initrd.gz

На этом настройка закончена, можно подключать клиентскую машину и пытаться загрузиться по PXE, в результате после загрузки системы по сети, у нас появится меню такого вида:

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