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_
版权声明:本文标题:完全无人值守安装debian 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1710754870h573672.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论