Ubuntu/Debain 网络安装

前言

Ubuntu 16.04 GA kernel 网络安装,自动配置

工作目录
/data/netboot/1604

下载并解压

axel -n 16 -a http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/netboot/netboot.tar.gz
tar -zxvf netboot.tar.gz -C /data/netboot/1604/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
├── ldlinux.c32 -> ubuntu-installer/amd64/boot-screens/ldlinux.c32
├── preseed.cfg
├── pxelinux.0 -> ubuntu-installer/amd64/pxelinux.0
├── pxelinux.cfg -> ubuntu-installer/amd64/pxelinux.cfg
├── ubuntu-installer
│   └── amd64
│   ├── boot-screens
│   │   ├── adtxt.cfg
│   │   ├── exithelp.cfg
│   │   ├── f10.txt
│   │   ├── f1.txt
│   │   ├── f2.txt
│   │   ├── f3.txt
│   │   ├── f4.txt
│   │   ├── f5.txt
│   │   ├── f6.txt
│   │   ├── f7.txt
│   │   ├── f8.txt
│   │   ├── f9.txt
│   │   ├── ldlinux.c32
│   │   ├── libcom32.c32
│   │   ├── libutil.c32
│   │   ├── menu.cfg
│   │   ├── prompt.cfg
│   │   ├── rqtxt.cfg
│   │   ├── splash.png
│   │   ├── stdmenu.cfg
│   │   ├── syslinux.cfg
│   │   ├── txt.cfg
│   │   └── vesamenu.c32
│   ├── initrd.gz
│   ├── linux
│   ├── pxelinux.0
│   └── pxelinux.cfg
│   └── default -> ../boot-screens/syslinux.cfg
└── version.info
5 directories, 31 files

设置目录权限

chown -R root:nogroup /data/netboot/1604
chmod -R 0755 /data/netboot/1604

配置 isc-dhcp-server

可以在现有DHCP的环境中给dhcp server 配置中添加tftp server 指向
添加下面两个参数
tftp-server-name : tftp server 的ip地址
bootfile-name : 连接tftp server后pxe程序下载的文件名

例子:

1
2
3
4
5
6
7
8
subnet 192.168.122.0 netmask 255.255.255.0 {
range 192.168.122.100 192.168.122.120;
option routers 192.168.122.1;
option tftp-server-name "192.168.122.102";
option bootfile-name "pxelinux.0";
option domain-name-servers 114.114.114.114;
default-lease-time 3600;
}

配置tftp server

tftp server 使用tftpd-hpa 包
apt install tftpd-hpa

默认配置文件在 /etc/default/tftpd-hpa
编辑配置文件

1
2
3
4
5
6
7
8
9
10
11
12
# /etc/default/tftpd-hpa
RUN_DAEMON="yes"
# 以tftp用户运行
TFTP_USERNAME="tftp"
# tftp根目录
TFTP_DIRECTORY="/data/netboot/1604"
# 监听端口UDP
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
# 必选参数不然根目录指定无效
OPTIONS="-l -s /data/netboot/1604"

配置好重启systemctl restart tftpd-hpa
建议先使用tftp client 测试一下

配置http server

部署http server 是因为需要在网络安装启动时grub里指定下载preseed文件的url路径
这里就用nginx为例,方便测试使用nginx默认站点
安装nginx:apt install nginx
默认站点配置文件路径:/etc/nginx/sites-available/default
只需要修改 root 那一行

1
sed -i 's/root \/var\/www\/html.*/root \/data\/netboot\/1604' /etc/nginx/sites-available/default

重启nginx systemctl restart nginx
测试preseed.cfg文件能否正常下载
wget http://x.x.x.x/preseed.cfg

编辑preseed.cfg文件

vim /data/netboot/1604/preseed.cfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
d-i debian-installer/locale string en_US
d-i debian-installer/language string en
d-i debian-installer/country string CN
d-i debian-installer/locale string en_US.UTF-8
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select us
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string ubuntu
d-i netcfg/get_domain string ubuntu
d-i mirror/country string manual
d-i mirror/http/hostname string http://cn.archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string
d-i mirror/http/mirror select cn.archive.ubuntu.com
d-i apt-setup/use_mirror boolean true
d-i mirror/suite string xenial
d-i mirror/udeb/suite string xenial
d-i clock-setup/utc boolean true
d-i time/zone string Asia/Shanghai
d-i clock-setup/ntp boolean false
d-i partman-auto/method string regular
d-i partman-auto/confirm boolean true
d-i partman-auto/expert_recipe string \
root :: \
8192 8241 16384 linux-swap \
$primary{ } \
method{ swap } format{ } \
. \
30720 16386 51200 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
61440 8241 -1 ext4 \
$primary{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /data } \
.
d-i partman/default_filesystem string ext4
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i cdrom-detect/eject boolean false
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
d-i pkgsel/include string openssh-server vim build-essential apt-transport-https
d-i grub-installer/bootdev string /dev/[sv]da
d-i finish-install/reboot_in_progress note
d-i passwd/root-login boolean true
d-i passwd/make-user boolean false
d-i passwd/root-password-crypted password $6$KOx4LUUk./PwPyJA$y3I0Z.EDDkQ/C5PAg4vayyWXp2w1faCbnAS3OXzSeCD44joVzpilm9VuSsDX2iUU6U9SsGrfuYmTUgoLtNd3y0
d-i preseed/late_command string \
sed -i '/^PermitRootLogin/c PermitRootLogin yes' /target/etc/ssh/sshd_config ; \
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=""/' /target/etc/default/grub ; \
in-target update-grub

注:
例子分了三个区,分区没有使用lvm

  1. 单位按MB算
  2. 以例子中的/分区为例
    30720 16386 51200
    第一个关键字代表最小空间
    第二个关键字代表优先级
    第三个关键字代表最大空间
  3. /data 分区,-1 表示使用剩下所有的空间

编辑网络引导grub文件

文件路径:/data/netboot/1604/ubuntu-installer/amd64/boot-screens/syslinux.cfg
例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
path ubuntu-installer/amd64/boot-screens/
include ubuntu-installer/amd64/boot-screens/menu.cfg
default ubuntu-installer/amd64/boot-screens/vesamenu.c32
prompt 0
timeout 5
label install
menu label ^Install Ubuntu 16.04 GA kernel PXE
menu default
kernel ubuntu-installer/amd64/linux
append auto=true priority=critical vga=788 initrd=ubuntu-installer/amd64/initrd.gz preseed/url=http://192.168.122.102/preseed.cfg locale=en_US interface=auto

文章目录
  1. 1. 前言
  2. 2. 下载并解压
  3. 3. 设置目录权限
  4. 4. 配置 isc-dhcp-server
  5. 5. 配置tftp server
  6. 6. 配置http server
  7. 7. 编辑preseed.cfg文件
  8. 8. 编辑网络引导grub文件
|