我的博客已迁移到xdoujiang.com请去那边和我交流FAI(Fully Automatic Installation,完全自动安装)是一种无须交互就可以完成那些重复性枯燥乏味的、常常需要手动完成的Linux安装、自定义以及管理任务的自动化系统。现如今,FAI被用户维护假根环境(chroot environments),虚拟机以及服务器。它可以完成从几个独立系统到基于大规模基础设施和有数千个系统组成的集群系统的部署和安装。系统管理员可以利用配置空间在FAI中定义硬盘布局、文件系统、软件包、键盘布局、时区、用户帐号等等一、基础环境1、角色、ip、版本、内核serverA 192.168.1.20 3.2.0-4-amd64 7.8fai-quickstart 4.0.8isc-dhcp-server 4.2.2tftpd-hpa 5.2-4nfs-kernel-server 1:1.2.6-4apache2 2.2.22-13二、搭建本地源1、安装apache2(其他ftp也可以,这里走apache2)apt-get -y install apache2-mpm-prefork2、配置虚拟主机1)关闭默认站点cd /etc/apache2/sites-available && a2dissite default && a2dissite default-sslSite default disabled.To activate the new configuration, you need to run:  service apache2 reloadSite default-ssl already disabled2)删除默认index.html文件cd /var/www && rm -f index.html3)复制模板cp /etc/apache2/sites-available/default /etc/apache2/sites-available/debian74)开启debian7站点cd /etc/apache2/sites-available && a2ensite debian7Enabling site debian7.To activate the new configuration, you need to run:  service apache2 reload5)网站快捷方式ln -s /opt/debian7/mirror/debian.ustc.edu.cn/debian debian7  6)重启apache2服务/etc/init.d/apache2 restart[....] Restarting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.1.20 for ServerName ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.1.20 for ServerName. ok 3、使用apt-mirror同步镜像源(debian7)1)安装包apt-get -y install apt-mirror2)配置cat /etc/apt/mirror.list set base_path    /opt/debian7set mirror_path  $base_path/mirrorset skel_path    $base_path/skelset var_path     $base_path/varset cleanscript $var_path/clean.shset defaultarch  
set postmirror_script $var_path/postmirror.shset run_postmirror 0set nthreads     20set _tilde 0deb-amd64 http://debian.ustc.edu.cn/debian/ wheezy main contrib non-freedeb-amd64 http://debian.ustc.edu.cn/debian/ wheezy-updates main contrib non-freeclean http://debian.ustc.edu.cn/debian/3)执行同步(时间比较长 大概需要花费1个晚上时间)apt-mirror三、安装fai1、安装fai-quickstart的时候会将nfs-kernel-server tftpd-hpa isc-dhcp-server等服务安装上的apt-get install fai-quickstart -yReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following extra packages will be installed:  debconf-utils debootstrap fai-client fai-doc fai-server genisop_w_picpath isc-dhcp-server libapt-pkg-perl libarchive12 libevent-2.0-5 libfile-copy-recursive-perl libgpgme11  libgraph-perl libgssglue1 libheap-perl libnettle4 libnfsidmap2 libproc-daemon-perl libproc-processtable-perl libpth20 libtirpc1 libxml2 nfs-common nfs-kernel-server openbsd-inetd  python python-minimal python2.7 python2.7-minimal reprepro rpcbind sgml-base tftpd-hpa update-inetd xml-coreSuggested packages:  logtail debmirror grub perl-tk wodim cdrkit-doc isc-dhcp-server-ldap gpgsm gnupg2 open-iscsi watchdog python-doc python-tk python2.7-doc binutils binfmt-support gnupg-agent  inoticoming lzip sgml-base-doc syslinux-common debhelperThe following NEW packages will be installed:  debconf-utils debootstrap fai-client fai-doc fai-quickstart fai-server genisop_w_picpath isc-dhcp-server libapt-pkg-perl libarchive12 libevent-2.0-5 libfile-copy-recursive-perl  libgpgme11 libgraph-perl libgssglue1 libheap-perl libnettle4 libnfsidmap2 libproc-daemon-perl libproc-processtable-perl libpth20 libtirpc1 libxml2 nfs-common nfs-kernel-server  openbsd-inetd python python-minimal python2.7 python2.7-minimal reprepro rpcbind sgml-base tftpd-hpa update-inetd xml-core0 upgraded, 36 newly installed, 0 to remove and 15 not upgraded.Need to get 11.0 MB of archives.After this operation, 30.1 MB of additional disk space will be used.2、配置dhcp1)先备份下原来配置cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak2)修改配置cat /etc/dhcp/dhcpd.confsubnet 192.168.1.0 netmask 255.255.255.0 {   range 192.168.1.22 192.168.1.24;   option routers 192.168.1.1;   default-lease-time 600;   max-lease-time 7200;   next-server 192.168.1.20; filename "fai/pxelinux.0";}3、配置tftp1)备份下配置cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa.ba2)修改配置sed -i 's/0.0.0.0:69/192.168.1.20:69/' /etc/default/tftpd-hpa4、配置fai1)先备份下原来配置cp /etc/fai/apt/sources.list /etc/fai/apt/sources.list.bak2)修改客户端的源echo "deb http://192.168.1.20/debian7 wheezy main contrib non-free" > /etc/fai/apt/sources.list3)先备份下原来配置cp /etc/fai/fai.conf /etc/fai/fai.conf.bak4)修改配置echo "LOGUSER=fai" >> /etc/fai/fai.confecho "FAI_CONFIG_SRC=nfs://192.168.1.20/srv/fai/debian7" >> /etc/fai/fai.conf5)先备份下原来配置cp /etc/fai/nfsroot.conf /etc/fai/nfsroot.conf.bak6)修改配置cat /etc/fai/nfsroot.confFAI_CONFIGDIR=/srv/fai/debian7FAI_DEBOOTSTRAP="wheezy http://192.168.1.20/debian7"FAI_ROOTPW='$1$kBnWcO.E$djxB128U7dMkrltJHPf6d1'NFSROOT_ETC_HOSTS="192.168.1.20"NFSROOT=/srv/fai/nfsrootTFTPROOT=/srv/tftp/faiNFSROOT_HOOKS=/etc/fai/nfsroot-hooks/FAI_DEBOOTSTRAP_OPTS="--exclude=dhcp-client,info"5、改名mv /srv/fai/config/ /srv/fai/debian76、使用fai-setup命令使配置生效fai-setup -vInitializing package states...Writing extended state information...Reading task descriptions...install_packages: executing chroot /srv/fai/nfsroot apt-get cleaninstall_packages: executing chroot /srv/fai/nfsroot dpkg --configure --pendinginstall_packages: executing chroot /srv/fai/nfsroot dpkg -Cinstall_packages: executing chroot /srv/fai/nfsroot apt-get cleaninstall_packages exit code: 0`/srv/fai/nfsroot/boot/vmlinuz-3.2.0-4-amd64' -> `/srv/tftp/fai/vmlinuz-3.2.0-4-amd64'`/srv/fai/nfsroot/boot/initrd.img-3.2.0-4-amd64' -> `/srv/tftp/fai/initrd.img-3.2.0-4-amd64'TFTP environment prepared. To use it, enable the dhcpd and start a TFTP daemon on root /srv/tftp/fai.FAI packages inside the nfsroot:fai-client         4.0.8~deb7u1fai-nfsroot        4.0.8~deb7u1fai-setup-storage  4.0.8~deb7u1FAI related packages inside the nfsroot:dracut             020-2dracut-network     020-2Waiting for background jobs to finish[1]   Done                    nice rm -rf $deldir/../.will-now-be-deleted  (wd: ~)[2]+  Running                 nice xz -q $NFSROOT/var/tmp/base.tar &  (wd: /srv/fai/nfsroot)fai-make-nfsroot finished properly.Log file written to /var/log/fai/fai-make-nfsroot.logAdding line to /etc/exports: /srv/fai/debian7 192.168.1.20/24(async,ro,no_subtree_check)Adding line to /etc/exports: /srv/fai/nfsroot 192.168.1.20/24(async,ro,no_subtree_check,no_root_squash)Re-exporting directories for NFS kernel daemon....FAI setup finished.Log file written to /var/log/fai/fai-setup.log7、接下来生成default文件1)fai-chboot -IBv -u nfs://192.168.1.20/srv/fai/debian7 defaultBooting kernel vmlinuz-3.2.0-4-amd64 append initrd=initrd.img-3.2.0-4-amd64 ip=dhcp     FAI_FLAGS=verbose,sshd,reboot FAI_CONFIG_SRC=nfs://192.168.1.20/srv/fai/debian7default has no IP in hex defaultWriting file /srv/tftp/fai/pxelinux.cfg/default for default2)参数说明-B Set default values for FAI_FLAGS.This is the same as -f verbose,sshd,reboot-I Same as -i but also sets FAI_ACTION=install.So a fully automatic installation will be performed.ATTENTION!This will erase most of the data on the local disks of the install clients.-v Create verbose output.-u URL Set FAI_CONFIG_SRC to URL.If not set the value from fai.conf inside the nfsroot will be used.8、修改default配置文件cat /srv/tftp/fai/pxelinux.cfg/defaultdefault 0prompt 1timeout 60label 0localboot 0label debian7kernel vmlinuz-3.2.0-4-amd64append initrd=initrd.img-3.2.0-4-amd64 ip=dhcp  root=/dev/nfs nfsroot=/srv/fai/nfsroot aufs  FAI_FLAGS=verbose,sshd,reboot FAI_CONFIG_SRC=nfs://192.168.1.20/srv/fai/debian7 FAI_ACTION=install9、添加1个共享目录 这个是nfs的BUGecho "/srv/nfs4       134.95.9.128/25(fsid=0,ro,no_subtree_check)" >> /etc/exports10、定义磁盘分区和启动标记等1)备份配置cp /srv/fai/debian7/disk_config/FAIBASE /srv/fai/debian7/disk_config/FAIBASE.bak2)修改配置cat /srv/fai/debian7/disk_config/FAIBASE# example of new config file for setup-storage## 
 
 
   
 
 
disk_config disk1 disklabel:msdos bootable:1 fstabkey:uuidprimary /      25G      ext4  rw,noatime,errors=remount-rological swap   8G swap  swlogical /opt  100-100%  ext4  rw,noatime,nosuid,nodev createopts="-L home -m 1" tuneopts="-c 0 -i 0"11、定义客户端需要安装的软件包1)备份配置cp /srv/fai/debian7/package_config/FAIBASE /srv/fai/debian7/package_config/FAIBASE.bak2)修改配置cat /srv/fai/debian7/package_config/FAIBASEPACKAGES aptitude DEBIANcrondebconf-utilsfilehdparmlesslinuxlogordateopenssh-client openssh-serverstracetimeprocinfonullmailerejectlocalesconsole-setup kbdpciutils usbutilsvimwget12、修改时区cp /srv/fai/debian7/class/FAIBASE.var /srv/fai/debian7/class/FAIBASE.var.baksed -i "s/TIMEZONE=.*/TIMEZONE=Asia\/Shanghai/g" /srv/fai/debian7/class/FAIBASE.var13、重启所有服务1)重启dhcp服务/etc/init.d/isc-dhcp-server restart[FAIL] Stopping ISC DHCP server: dhcpd failed![ ok ] Starting ISC DHCP server: dhcpd.2)重启tftpd服务/etc/init.d/tftpd-hpa restart[ ok ] Restarting HPAs tftpd: in.tftpd.3)重启nfs/etc/init.d/nfs-kernel-server restart[ ok ] Stopping NFS kernel daemon: mountd nfsd.[ ok ] Unexporting directories for NFS kernel daemon....[....] Exporting directories for NFS kernel daemon...exportfs: Failed to stat /srv/nfs4: No such file or directory. ok [ ok ] Starting NFS kernel daemon: nfsd mountd.四、安装client点F12进入pxe网络引导模式在boot提示下输入debian7开始安装

(默认密码是fai 在cat /srv/fai/debian7/class/FAIBASE.var这个文件中也可以看到默认密码是fai)

五、相关日志1、查看相关日志cat /var/log/syslogOct  8 16:42:15 debian dhcpd: DHCPDISCOVER from 00:0c:29:7a:e6:5f via eth0Oct  8 16:42:15 debian dhcpd: DHCPOFFER on 192.168.1.22 to 00:0c:29:7a:e6:5f ((none)) via eth0Oct  8 16:42:15 debian dhcpd: DHCPREQUEST for 192.168.1.22 (192.168.1.20) from 00:0c:29:7a:e6:5f ((none)) via eth0Oct  8 16:42:15 debian dhcpd: DHCPACK on 192.168.1.22 to 00:0c:29:7a:e6:5f ((none)) via eth0六、参考文章http://fai-project.org/fai-guide.htmlhttp://fai-project.orghttp://fai-project.org/doc/man/fai-chboot.htmlhttps://wiki.debian.org/DebianEdu/HowTo/FaiInstallDebianEdu