Ubuntu上配置PXE服务器

本文详细介绍如何使用PXE进行网络安装,包括配置DHCP、TFTP、PXE、NFS等服务,以及创建启动镜像和kickstart文件的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自这里

准备

  1. 安装好 Ubuntu 14.04 系统的机器
  2. 支持DHCP的路由器一个
  3. 支持pxe启动的目标机器
  4. Ubuntu机器和目标机器已经通过交换机连到同一个网络

配置网卡

/etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8

重启网络服务

sudo /etc/init.d/networking restart

这一步未必起效。ifconfig 命令可能ip没有改变, 可以从 System Settings –> Network –> 去设置静态IP
由于配置静态IP了,可能会导致无法连接外网。配置网络可以等到apt-get install的步骤之后来配置。或者Ubuntu的机器配置双网卡,一个连接外网,另一个连接交换机。

安装DHCP, TFTP,PXE, NFS 服务

sudo apt-get update
sudo apt-get install -y isc-dhcp-Server inetutils-inetd tftpd-hpa syslinux nfs-kernel-Server
sudo apt-get install -y apache2

配置DHCP

/etc/default/dhcp-server

INTERFACES="eth0"

/etc/dhcp/dhcpd.conf

default-lease-time 600;
max-lease-time 7200;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.21 192.168.1.240;
option subnet-mask 255.255.255.0;
option routers 192.168.1.20;
option broadcast-address 192.168.1.255;
filename "pxelinux.0";
next-Server 192.168.1.20;
}

重启DHCP服务

sudo /etc/init.d/isc-dhcp-server start

配置TFTP服务

/etc/inetd.conf

tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot

/etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="[:0.0.0.0:]:69"
TFTP_OPTIONS="--secure"
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

开机启动 tftp

sudo update-inetd --enable BOOT
sudo service tftpd-hpa start

检查状态

sudo netstat -lu | grep tftp

配置pxe 启动文件

sudo mkdir /var/lib/tftpboot
sudo mkdir /var/lib/tftpboot/pxelinux.cfg
sudo mkdir -p /var/lib/tftpboot/Ubuntu/14.04/amd64/
sudo cp /usr/lib/syslinux/vesamenu.c32 /var/lib/tftpboot/
sudo cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/

/var/lib/tftpboot/pxelinux.cfg/default

DEFAULT vesamenu.c32
TIMEOUT 100
PROMPT 0
MENU INCLUDE pxelinux.cfg/pxe.conf
NOESCAPE 1

LABEL Try Ubuntu 14.04 Desktop
MENU LABEL Try Ubuntu 14.04 Desktop
kernel Ubuntu/vmlinuz
append boot=casper netboot=nfs nfsroot=192.168.1.20:/var/lib/tftpboot/Ubuntu/14.04/amd64 initrd=Ubuntu/initrd.lz quiet splash
ENDTEXT

LABEL Install Ubuntu 14.04 Desktop
MENU LABEL Install Ubuntu 14.04 Desktop
kernel Ubuntu/vmlinuz
append boot=casper automatic-ubiquity netboot=nfs nfsroot=192.168.1.20:/var/lib/tftpboot/Ubuntu/14.04/amd64 initrd=Ubuntu/initrd.lz quiet splash
ENDTEXT

/var/lib/tftpboot/pxelinux.cfg/pxe.conf

MENU TITLE PXE Server
NOESCAPE 1
ALLOWOPTIONS 1
PROMPT 0
MENU WIDTH 80
MENU ROWS 14
MENU TABMSGROW 24
MENU MARGIN 10
MENU COLOR border 30;44 #ffffffff #00000000 std

添加启动镜像

1.下载镜像

sudo wget http://releases.ubuntu.com/14.04/ubuntu-14.04.3-desktop-amd64.iso

2.挂载

sudo mount -o loop /mnt/ubuntu-14.04.3-desktop-amd64.iso /media/
sudo cp -r /media/* /var/lib/tftpboot/Ubuntu/14.04/amd64/
sudo cp -r /media/.disk /var/lib/tftpboot/Ubuntu/14.04/amd64/
sudo cp /media/casper/initrd.lz /media/casper/vmlinuz /var/lib/tftpboot/Ubuntu/

配置nfs

/etc/exports

/var/lib/tftpboot/Ubuntu/14.04/amd64 *(ro,async,no_root_squash,no_subtree_check)

重启nfs服务

sudo /etc/init.d/nfs-kernel-server start

安装

  1. 要在目标机器上 设置pxe启动。 现在的机器一般都支持pxe启动

kickstart 自动安装

/var/lib/tftpboot/pxelinux.cfg/default

DEFAULT vesamenu.c32
TIMEOUT 100
PROMPT 0
MENU INCLUDE pxelinux.cfg/PXE.conf
NOESCAPE 1

LABEL local
MENU LABEL Boot from local driver
MENU DEFAULT
localboot 0

LABEL Try Ubuntu 14.04 Desktop
MENU LABEL Try Ubuntu 14.04 Desktop
kernel Ubuntu/vmlinuz
append boot=casper netboot=nfs nfsroot=192.168.1.20:/var/lib/tftpboot/Ubuntu/14.04/amd64 initrd=Ubuntu/initrd.lz quiet splash
ENDTEXT

LABEL Install Ubuntu 14.04 Desktop
MENU LABEL Install Ubuntu 14.04 Desktop
kernel Ubuntu/vmlinuz
append boot=casper automatic-ubiquity netboot=nfs nfsroot=192.168.1.20:/var/lib/tftpboot/Ubuntu/14.04/amd64 initrd=Ubuntu/initrd.lz quiet splash
ENDTEXT

LABEL Install Auto Ubuntu 14.04 Desktop
MENU LABEL Auto Install Ubuntu 14.04 Desktop
kernel Ubuntu/vmlinuz
append boot=casper automatic-ubiquity netboot=nfs nfsroot=192.168.1.20:/var/lib/tftpboot/Ubuntu/14.04/amd64 initrd=Ubuntu/initrd.lz quiet splash ks=nfs:192.168.1.20:/var/lib/tftpboot/Ubuntu/14.04/amd64/ubuntu.ks.cfg
ENDTEXT


LABEL Install CentOS6.5 
MENU LABEL Auto Install CentOS 6.5 
kernel CentOS/6.5/vmlinuz
append boot=casper automatic-ubiquity netboot=nfs nfsroot=192.168.1.20:/var/lib/tftpboot/CentOS/6.5/x86_64 initrd=CentOS/6.5/initrd.img splash ks=nfs:192.168.1.20:/var/lib/tftpboot/CentOS/6.5/auto.ks
ENDTEXT

LABEL Install CentOS7.2
MENU LABEL Auto Install CentOS 7.2
kernel CentOS/7.2/vmlinuz
append initrd=CentOS/7.2/initrd.img method=nfs:192.168.1.20:/var/lib/tftpboot/CentOS/7.2/x86_64 devfs=nomount ks=nfs:192.168.1.20:/var/lib/tftpboot/CentOS/7.2/auto.ks
ENDTEXT

centos6 的kickstart文件

# Kickstart file automatically generated by anaconda.

#version=DEVEL
install
reboot
nfs --server=192.168.1.20 --dir=/var/lib/tftpboot/CentOS/6.4/x86_64
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$6hnmkS6Oqv8n2bnD$pBfBL3XoZW/wXJGHdOtVlFd61xrzK7QJ0SgoC0jeCYJupp1.9o.RsGC34svfvrssiMiLnXoZP.wQ3jt2qwaFw0
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
user --name=media --password=$6$UfwmGiXeGli2r3v0$E/3eldZ9Jkt5UrSN42wWIWBymcho5kWS..73T.B8EEB1rrU0CC56YETjt8aAd7EDIyk1nq8MHuqPBtaBUSDfL1 --iscrypted --gecos="media"
xconfig  --startxonboot

ignoredisk --only-use=sda
# Partition clearing information
clearpart --all --initlabel --drives=sda
part /boot --fstype ext4 --size 500
part swap --recommended
part / --fstype ext4 --size 120000 --grow


bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --all --drives=sda

#part /boot --fstype=ext4 --size=500
#part pv.008002 --grow --size=1
#volgroup vg_mediapxetest --pesize=4096 pv.008002
#logvol /home --fstype=ext4 --name=lv_home --vgname=vg_mediapxetest --grow --size=100
#logvol / --fstype=ext4 --name=lv_root --vgname=vg_mediapxetest --grow --size=1024 --maxsize=51200
#logvol swap --name=lv_swap --vgname=vg_mediapxetest --grow --size=7760 --maxsize=7760


repo --name="CentOS"  --baseurl=nfs:192.168.1.20:/var/lib/tftpboot/CentOS/6.4/x86_64 --cost=100

%packages
@base
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@general-desktop
@graphical-admin-tools
@input-methods
@internet-applications
@internet-browser
@java-platform
@legacy-x
@network-file-system-client
@office-suite
@print-client
@remote-desktop-clients
@server-platform
@server-policy
@x11
mtools
pax
oddjob
wodim
sgpio
genisoimage
device-mapper-persistent-data
abrt-gui
samba-winbind
certmonger
pam_krb5
krb5-workstation
libXmu
%end

centos7

#version=RHEL7
# System authorization information
auth --enableshadow --passalgo=sha512
# Install OS instead of upgrade
install
# Reboot after installation
reboot
# Use NFS installation media
nfs --server=192.168.1.20 --dir=/var/lib/tftpboot/CentOS/7.0/x86_64
# Firewall configuration
firewall --enabled --service=ssh
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=eth0 --noipv6
network  --hostname=localhost.localdomain
# Root password
rootpw --iscrypted $6$6hnmkS6Oqv8n2bnD$pBfBL3XoZW/wXJGHdOtVlFd61xrzK7QJ0SgoC0jeCYJupp1.9o.RsGC34svfvrssiMiLnXoZP.wQ3jt2qwaFw0
# SELinux configuration
selinux --disabled
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc
user --name=media --password=$6$UfwmGiXeGli2r3v0$E/3eldZ9Jkt5UrSN42wWIWBymcho5kWS..73T.B8EEB1rrU0CC56YETjt8aAd7EDIyk1nq8MHuqPBtaBUSDfL1 --iscrypted --gecos="media"
# X Window System configuration information
xconfig  --startxonboot
# System bootloader configuration
bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda" --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel --drives=sda
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --size=500
part pv.49 --fstype="lvmpv" --ondisk=sda --size=228435
volgroup centos --pesize=4096 pv.49
logvol /  --fstype="xfs" --grow --maxsize=51200 --size=1024 --name=root --vgname=centos
logvol swap  --fstype="swap" --size=7824 --name=swap --vgname=centos
logvol /home  --fstype="xfs" --grow --size=500 --name=home --vgname=centos

%packages
@^gnome-desktop-environment
@base
@compat-libraries
@core
@desktop-debugging
@development
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@print-client
@security-tools
@x11
chrony
kexec-tools

%end

KICKSTART 语法参考
CentOS6 和 CentOS7 有点配置不同, Ubuntu 我还没有配置起来

### Ubuntu 上设置 PXE 服务器 #### 安装必要的软件包 为了实现 PXE 启动功能,需要安装 TFTP 和 DHCP 服务。以下是具体操作: 通过命令 `sudo apt install tftpd-hpa` 可以完成 TFTP 服务端的安装[^2]。 对于 DHCP 服务,则可以运行以下命令来安装: ```bash sudo apt-get install isc-dhcp-server ``` #### 配置 TFTP-HPA TFTP 是 PXE 的核心组件之一,用于传输引导镜像文件给客户端设备。按照如下方式配置 TFTP: 创建并编辑 `/etc/default/tftpd-hpa` 文件,确保其内容类似于下面这样: ```plaintext RUN_DAEMON="yes" OPTIONS="-l -s /var/lib/tftpboot/" ``` 上述路径 `/var/lib/tftpboot/` 将作为 TFTP 根目录存储所有必需的启动文件[^1]。 接着重启 TFTP 服务使更改生效: ```bash sudo systemctl restart tftpd-hpa ``` #### 复制 PXE 启动所需文件至指定位置 执行下列指令把 syslinux 提供的标准 pxelinux.0 引导程序放置于 TFTP 跟目录下: ```bash sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/ ``` 此步骤已在引用材料中有提及^。 另外还需要将 netboot 文件夹中的全部数据迁移过来以便支持网络安装过程[^4]: ```bash cp -r /path/to/netboot/* /var/lib/tftpboot/ ``` #### 设置 GRUB EFI 环境 (可选) 如果目标环境涉及 UEFI 模式的计算机,则可能需要用到 signed 版本的 GRUB 来加载操作系统内核。可以通过解压预构建好的 deb 包获取这些资源[^3]: ```bash dpkg-deb -xv grub-efi-amd64-signed*.deb ./grub_efi_files ``` 之后再把这些提取出来的二进制对象上传到对应的共享区域比如 HTTP 或者 NFS 中去提供下载链接地址。 #### 配置 DHCP 服务 为了让客户机能自动发现可用的 PXE 选项,需调整 dhcpd.conf 如下所示片段为例说明基本参数设定方法: ```plaintext subnet 192.168.1.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.1.100 192.168.1.200; option routers 192.168.1.1; filename "pxelinux.0"; } ``` 最后记得重新载入 dhcp server 让新规则立即应用起来即可: ```bash sudo service isc-dhcp-server reload ``` 至此整个基于 Ubuntu 平台下的简单版 PXE Server 架构就完成了! ```python print("PXE setup complete.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值