admin 管理员组

文章数量: 887021


2024年3月18日发(作者:virtualbox为什么启动不了)

《完全无人值守安装debian》

【前言】

本系统可以实现对服务器的完全无人工干预安装,一个新机器只要支持PXE启

动(Dell,HP都是开机按F12进入PXE启动模式),插上网线跟FAI server能够通信,

可以装上一个自己需要的系统。并能根据自己的需要给目标机做任何初始化配置。

本系统能同时安装百台以上的目标机,已在几家大,中型网站公司稳定使用半

年到一年,曾给一家公司安装过几百台Dell 2850,Dell 2950,Dell 6850,HP 380g5,

HP 580等等。对于需要经常安装debian的用户能节省很多时间/人力成本。

部署过程如有创新或者疑问,欢迎跟我交流。

Email: # 请将Email地址中的#换成@

【一】FAI系统原理和实现步骤

Debian 安装程序支持使用预先配置的文件进行自动安装。预配置文件可以从网

络或移动介质上加载,并自动回答安装过程中的问题。用

HTTP(FTP)+DHCP+TFTP+PXElinux

来实现Debian的网络自动分发安装。首先通过dhcp到一些初始信息,得到了引导

镜像的

位置,找到了这个引导镜像,通过tftp得到这个镜像,并控制客户机找到apt server

的安装控制程序,利用这个程序,通过预先设置好的预配置文件指导安装。

Dhcp server用来检测客户机(以下称待安装的机器为客户机,待安装的系统为

目标系统),分配给目标机器ip,并告诉目标机器引导镜像的位置。

Tftp server提供给客户机引导镜像,并提供给客户机的安装过程中的内核参数

和目标系统的配置。

APT server提供了安装过程所需要的软件包,目标系统通过APT server进行网络

安装。

【二】创建FAI系统环境

一:APT Server

FAI系统需要APT mirror提供安装源,现在网上有很多安装源,其实可以不必自

己动手搭建。因此这些操作可以忽略。可以直接使用我搭建的APT源。每天跟一级主

战完

全镜像。

202.108.12.69/debian

也可以自己搭建一个,未必要完全镜像。

andy:~# mkdir /data/mirror

andy:~# vi /data/filter

编辑输入以下内容:

*_

*_

*_

*_ *_

*_

*_

*_

*_

*-alpha

*-arm

*-hppa

*-s390

*-m68k

*-mips

*-mipsel

*-powerpc

安装rsync,镜像一个已存在的apt server

*-sparc

andy:~# apt-get install rsync

andy:~# rsync -vzrtopg --recursive --links --hard-links --times --delete

--delete-after

/data/mirror/debian

-exclude-from=/data/filter ::debian/

注:只选择我需要的i386和ia64包,所以除去

alpha,,s390,m68k,mips,mipsel,powerpc,sparc等包。

二:TFTP Server

当处于某局域网的机器启动的时候,它将发出广播检测网内的DHCP Server,并

收到DHCP发送的信息包,包括IP,和boot image的存放地址。TFTP Server提供

boot

image。

首先安装tftpd-hpa,xinetd。注意不能用tftpd包,它不支持bootp协议,无法正

确导入boot image,自动安装会卡住。

tftp服务以super daemon守护方式运行,我们用xinetd。

andy:~# apt-get install tftpd-hpa xinetd

andy:~# vi /etc/xinetd.d/tftp

编辑输入以下:

service tftp

{

disable = no

socket_type = dgram

protocol = udp

wait = yes

user = root

server = /usr/sbin/

server_args = -s /data/tftpboot

}

可在server-args那一行选择你的tftp服务根目录。

此时tftp服务已经启用,服务于69端口。

从apt server下载一个包到tftp根目录,当前目录下解压缩

andy:/data/tftpboot#

wget 202.108.12.69/debian/dists/etch/main/installer-i386/current/images/

netboot/

andy:/data/tftpboot# tar -zxvf

解压缩后得到一个debian-installer文件夹,和prelinux.0,两个连接,

分别指向debian-installer文件夹里的两个文件。

andy:/data/tftpboot# vi .//default

将LABEL install改为:

LABEL install

kernel debian-installer/i386/linux

append initrd=debian-installer/i386/

rw

ramdisk_size=12094

root=/dev/rd/0 preseed/url=192.168.41.3/

console-keymaps-at/keymap=us debian-installer/locale=en_US

netcfg/choose_interface=auto netcfg/get_hostname=h netcfg/get_domain=d --

修改后的文件全部内容如下:

DISPLAY debian-installer/i386/boot-screens/

F1 debian-installer/i386/boot-screens/

F2 debian-installer/i386/boot-screens/

F3 debian-installer/i386/boot-screens/

F4 debian-installer/i386/boot-screens/

F5 debian-installer/i386/boot-screens/

F6 debian-installer/i386/boot-screens/

F7 debian-installer/i386/boot-screens/

F8 debian-installer/i386/boot-screens/

F9 debian-installer/i386/boot-screens/

F0 debian-installer/i386/boot-screens/

DEFAULT install

LABEL install24

kernel debian-installer/i386/linux

append vga=normal initrd=debian-installer/i386/

ramdisk_size=10214 root=/dev/rd/0 rw --

LABEL expert24

kernel debian-installer/i386/linux

append DEBCONF_PRIORITY=low vga=normal

initrd=debian-installer/i386/ ramdisk_size=10214 root=/dev/rd/0 rw --

LABEL install

kernel debian-installer/i386/linux

append initrd=debian-installer/i386/

rw

ramdisk_size=12094

root=/dev/rd/0 preseed/url=192.168.41.3/

console-keymaps-at/keymap=us debian-installer/locale=en_US

netcfg/choose_interface=auto netcfg/get_hostname=h netcfg/get_domain=d --

LABEL linux

kernel debian-installer/i386/2.6/linux

append vga=normal initrd=debian-installer/i386/2.6/

ramdisk_size=12094 root=/dev/rd/0 rw --

LABEL install26

kernel debian-installer/i386/2.6/linux

append vga=normal initrd=debian-installer/i386/2.6/

ramdisk_size=12094 root=/dev/rd/0 rw --

LABEL linux26

kernel debian-installer/i386/2.6/linux

append vga=normal initrd=debian-installer/i386/2.6/

ramdisk_size=12094 root=/dev/rd/0 rw --

LABEL expert

kernel debian-installer/i386/2.6/linux

append DEBCONF_PRIORITY=low

ramdisk_size=12094

vga=normal

root=/dev/rd/0 initrd=debian-installer/i386/2.6/

rw --

LABEL expert26

kernel debian-installer/i386/2.6/linux

append DEBCONF_PRIORITY=low

ramdisk_size=12094

vga=normal

root=/dev/rd/0 initrd=debian-installer/i386/2.6/

rw --

LABEL rescue

kernel debian-installer/i386/2.6/linux

append vga=normal initrd=debian-installer/i386/2.6/

ramdisk_size=12094 root=/dev/rd/0 rw rescue/enable=true --

LABEL rescue24

kernel debian-installer/i386/linux

append vga=normal initrd=debian-installer/i386/

ramdisk_size=10214 root=/dev/rd/0 rw rescue/enable=true --

LABEL rescue26

kernel debian-installer/i386/2.6/linux

append vga=normal initrd=debian-installer/i386/2.6/

ramdisk_size=12094 root=/dev/rd/0 rw rescue/enable=true --

PROMPT 1

TIMEOUT 1

注:append为一行。

此文件default install那一行决定了只有LABEL install这行标签有用。它指定了

kernel,initrd,ramdisk等各个内核参数。

需注意preseed/url=192.168.41.3/参数!它指定了最重要的安装控制

文件的位置。

这里有个cmdline命令行的256字节的限制问题,即安装控制程序在控制客户机自动

安装的过程中,在客户机的/proc/cmdline中最大容量为256字节,所以如果有更多的参

数,将无法传递进去,当然如果在d-i程序引导网卡之后才读的参数,我们完全可以写进

。这也导致了后面只能用一个比较笨的办法解决dhcp超时问题,而不能直接将

dhcp-timeout参数传递进去。问题产生的原因和解决办法后面皆有阐述。

这个问题理论上应该可以通过重新编译内核解决,然而我下载了一个新内核的源码包,

将./include/asm-i386下的setup.h和param.h中的#define COMMAND_LINE_SIZE

256改为#define COMMAND_LINE_SIZE 1024,重新编译后却仍然有这个限制。清楚

CMDLINE这部分内核代码实现的达人们如果明白这个问题,欢迎指教。

下面解决一个因为网络中存在cisco交换机而引起的dhcp超时问题。系统网络启动

之后交换机网口有30秒钟的自适应阶段,此时数据不通,从而造成自动安装过程中dhcp

配置网络超时。我们将dhcp-timeout参数值设为60秒传给内核,就可以解决此问题。

andy:/data/tftpboot# mkdir tmp

andy:/data/tftpboot# cp ./debian-installer/i386/ ./tmp/

andy:/data/tftpboot# cd tmp

解压缩

andy:/data/tftpboot/tmp# gunzip

将initrd挂载于某目录

andy:/data/tftpboot/tmp# mkdir tmp

andy:/data/tftpboot/tmp# mount -o loop ./initrd ./tmp

andy:/data/tftpboot/tmp# cd tmp

andy:/data/tftpboot/tmp/tmp# vi ./sbin/debian-installer

将此脚本set -e后面添加一行内容如下:

/bin/debconf-set netcfg/dhcp_timeout 60

保存退出,再将此initrd文件以最大压缩率压缩成.gz包即可替换原来的。

andy:/data/tftpboot/tmp/tmp# cd ..

andy:/data/tftpboot/tmp# umount ./tmp

andy:/data/tftpboot/tmp# gzip -9 -c initrd

> ../debian-installer/i386/

重启xinet

andy:/data/tftpboot/tmp# /etc/init.d/xinetd restart

注:因为本文档发布的时候,FAI系统的initrd早已改进成cpio格式。关于处理cpio

格式的initrd,详见refresh_.

需要特别指出的是,FAI的分发功能可以在此控制实现。

举例说明:客户机的mac为00:14:22:16:66:05,DHCP到的ip为192.168.41.72,16

进制ip为c0a82940,则文件检测顺序为:

/tftpboot// 00:14:22:16:66:05

/tftpboot//C0A82940

/tftpboot//C0A8294

/tftpboot//C0A828

/tftpboot//C0A82

/tftpboot//C0A8

/tftpboot//C0A

/tftpboot//C0

/tftpboot//C

/tftpboot//default

如果我们知道了客户机网卡的mac,那么只需要在/tftpboot/下建立不

同的预配置文件,即可给不同的mac客户机分发各自需要的系统,只需要建立不同文件名

的文本文件,指向各自需要的目标系统预配置文件。

DHCP Server

客户机从DHCP Server得到TFTP Server地址和PXE boot image的filename

andy:~# apt-get install dhcp3-server

本例中DHCP Server的配置很简单,要想在此实现更多控制功能,请自行查阅dhcp

服务配置文档。本例配置文件如下:

andy:~# vi /etc/dhcp3/

ddns-update-style none;

subnet 192.168.41.0 netmask 255.255.255.0 {

range 192.168.41.10 192.168.41.110;

option subnet-mask 255.255.255.0;

option broadcast-address 192.168.41.255;

option routers 192.168.41.3;

option domain-name-servers 192.168.41.3;

option domain-name "";

option host-name "KingSword";

allow unknown-clients;

filename "pxelinux.0";

next-server 192.168.41.3;

}

上面的配置文件得根据您所处的网络环境确定,比如domain-name-server;或者您的

喜好自行设定,比如你可以自己决定要分配的ip范围。

dhcp server为独立进程。启动之:

andy:~# /etc/dhcpd3/dhcpd start

预配置文件分析:

安装过程是debian的自动安装程序通过一个预配置文件控制的。 下面对比较重要的

一些行说明一下,因为写文档到现在debian升级了很多东西,所以具体的配置以附件

为准

d-i netcfg/wireless_wep string

#此为apt mirror的信息。注意hostname若为域名,则服务器必须提供域名解析服

务,或者#做nat服务通过eth0转发。

d-i mirror/country string enter information manually

d-i mirror/http/hostname string 192.168.41.3

d-i mirror/http/directory string /debian

d-i mirror/suite string testing

d-i mirror/http/proxy string

#选择要分区的硬盘。

d-i partman-auto/disk string /dev/discs/disc0/disc

# 标配分区。前面已有叙述。各个变量的含义请自行搜索partman-aoto等关键字。

d-i partman-auto/expert_recipe string boot-root :: 64 128 128 reiserfs

$primary{ } $bootable{ } method{ format } format{ } use_filesystem{ }

filesystem{ reiserfs } mountpoint{ /boot } . 512 2048 4096 linux-swap

method{ swap } format{ } . 512 1000 2048 reiserfs $primary{ } method{ format }

format{ } use_filesystem{ } filesystem{ reiserfs } mountpoint{ / } . 500 1000 2048

reiserfs method{ format } format{ } use_filesystem{ }

filesystem{ reiserfs } mountpoint{ /usr } . 500 1000 2048 reiserfs method{ format }

format{ } use_filesystem{ } filesystem{ reiserfs } mountpoint{ /var } . 500 1024

2048 reiserfs method{ format } format{ } use_filesystem{ } filesystem{ reiserfs }

mountpoint{ /usr/local } . 500 1000 1000000000 reiserfs method{ format }

format{ } use_filesystem{ } filesystem{ reiserfs } mountpoint{ /data } .

# 使得自动安装不需要手动确认。

d-i partman/confirm_write_new_label boolean true

d-i partman/choose_partition select Finish partitioning and write changes to

disk

d-i partman/confirm boolean true

# 时区选择。

base-config time/zone Asia/Shanghai

base-config clock-setup/utc Boolean true

#使grub自动安装到MBR,更加安全

d-i grub-installer/only_debian boolean true

# 消除安装完成的信息

d-i prebaseconfig/reboot_in_progress note

# 安装完成后,要求系统完成的shell指令。可以看到我们安装了很多软件包,解决

了2.6

# 的内核的raid驱动不能用的问题,更新了2.6的多支持cpu的内核,自动安装完成

后重

# 启即能应用,可大大提高系统运行速度

base-config base-config/late_command string

apt-install vim openssh-server;

# 消除介绍信息

base-config base-config/intro note

# 消除最后的信息

base-config base-config/login note

# 控制硬件时钟是否设置成UTC时间

base-config tzconfig/gmt boolean true

base-config tzconfig/choose_country_zone/US select Eastern

#设置root密码

passwd passwd/root-password password 123456

passwd passwd/root-password-again password 123456

#控制是否添加普通用户,注释掉,则为添加普通用户

#passwd passwd/make-user boolean false

#添加普通用户,密码

passwd passwd/user-fullname string KingSword

passwd passwd/username string KingSword

passwd passwd/user-password password 123456

passwd passwd/user-password-again password 123456

# 选择目标系统apt源

base-config apt-setup/uri_type select http

base-config apt-setup/country select enter information manually

base-config apt-setup/hostname string

base-config apt-setup/directory string /debian

base-config apt-setup/another boolean false

#使安全更新生效

base-config apt-setup/security-updates boolean false

#不参与debian软件包流行度调查

d-i popularity-contest/participate boolean false

#只要一个基本系统的软件集合

tasksel tasksel/first multiselect Standard system

更多信息请看后附的预配置文件实例。预配置文件非常强大,它几乎可以设

置任何在光盘安装过程中能手动做的设置。它也很容易出问题,某一行配置出错,则

自动安装就会挂掉。

PXE启动:

当机器开机后,DHCP Server将分给机器一个IP和PXE Boot Image的路径。

系统将通过/tftpboot//目录里的文件参数进行PXE启动。

PXE是RPL的升级品,它是Preboot Execution Environment的缩写,采用动态路

由,基于TCP/IP协议,网络连接高效而可靠。它的启动过程如下:客户机开机后 , 在

TCP/IP Bootrom 获得控制权之前先做自我测试,然后 Bootprom 送出 BOOTP/DHCP

要求以取得 IP。 如果服务器收到客户机的请求 , 就会送回 BOOTP/DHCP 回应,内容包

括 客户端的 IP 地址, 预设网关, 及开机影像文件。 Bootprom 由 TFTP 协议从服务器

下载开机影像文件,开机影像文件包括 kernel loader 及压缩过的 kernel。客户机通过这

个开机影像文件启动。

第三部分:Troubleshooting

在安装过程中

F1控制台显示安装进度

F2控制台提供一个简易shell

F3,F4控制台显示安装日志

如果自动安装不能进行下去,可以通过F3,F4控制台看到卡住的位置,因为整个安装

指导基本以bash script实现,可以自行读脚本确定问题并解决。

--

有时我感觉失落感觉自己象一颗草

有时我陷入空虚可我不知道为什么

时光流走了而我依然在这儿

我已掉进深深的旋涡

我们永远是这美丽世界的孤儿

※ 修改:·KingSword 于 Jun 26 16:32:36 修改本文·[FROM: 219.142.202.*]

※ 来源:·水木社区 ·[FROM: 219.142.202.*]

附件(3.3KB)

附件(4.3KB) refresh_


本文标签: 安装 系统 文件 问题 自动