目录
第1章. SystemImager介绍 ................................................................................................................................ 1
1.1. SystemImager纵揽 .............................................................................................................................. 1
1.2. 谁应该使用这个向导 ......................................................................................................................... 1
1.3. SystemImager如何工作 ...................................................................................................................... 1
1.3.1. 支持的发行版本 ..................................................................................................................... 1
1.3.2. 系统需求 ................................................................................................................................. 2
1.4. 名词术语 .............................................................................................................................................. 2
第2章.安装SystemImager ................................................................................................................................. 4
2.1. 它是如何工作的? ............................................................................................................................. 4
2.2. 获得SystemImager ............................................................................................................................. 4
2.3. 选一个机器作为镜像服务器............................................................................................................. 4
2.4. 安装一个镜像服务器 ......................................................................................................................... 4
2.5. 选一个机器作为Golden Client ......................................................................................................... 6
2.6. 在Golden Client上制作镜像 ............................................................................................................ 6
2.7. 在Golden Client上安装SystemImager客户端软件 ..................................................................... 6
2.8. 从零开始制作镜像 ............................................................................................................................. 6
2.9. 升级SystemImager ............................................................................................................................. 7
2.9.1. 重新生成自动化安装脚本 .................................................................................................... 7
2.9.2. 移植自定义文件/etc/systemimager/rsyncd.conf到SystemImager 3.0.0 .......................... 7
2.9.3. 重新生成启动媒介 ................................................................................................................. 7
2.9.4. 二进制tar包发生了什么? .................................................................................................... 7
第3章. 使用SystemImager ............................................................................................................................... 8
3.1. 安装过程纵揽...................................................................................................................................... 8
3.1.1. 安装详细说明 ......................................................................................................................... 8
3.1.2. SystemImager工具................................................................................................................ 15
3.1.2.1. si_prepareclient命令 ................................................................................................ 15
3.1.2.2. si_getimage命令 ....................................................................................................... 15
3.1.2.3. 自动执行脚本 .......................................................................................................... 16
3.1.2.4. si_addclients命令和si_clusterconfig命令 ............................................................ 16
3.1.2.5. 附加安装信息 .......................................................................................................... 16
3.1.2.6. 如何更新镜像 .......................................................................................................... 17
第4章. 如何使用BitTorrent进行点对点安装 ............................................................................................. 19
4.1. 安装SystemImager v3.7.4或更高版本 .......................................................................................... 19
4.2. 在镜像服务中配置BitTorrent传输 ............................................................................................... 19
4.3. 配置BitTorrent传输客户端 ............................................................................................................ 20
4.4. 注意事项 ............................................................................................................................................ 20
4.5. 过程的详细步骤 ............................................................................................................................... 21
4.6. 参见 .................................................................................................................................................... 21
第5章. 如何使用Flamethrower进行多重安装 ............................................................................................ 22
5.1. 安装SystemImager v3.2.x或更高版本 .......................................................................................... 22
5.2. 安装Flamethrower包和依赖包 ...................................................................................................... 22
5.3. 执行si_getimage, si_mvimage, or si_cpimage ............................................................................... 22
E-mail:changzi100@yahoo.com.cn IV
5.4. 启动Flamethrower进程 .................................................................................................................. 22
5.5. 让自动安装客户端使用Flamethrower .......................................................................................... 22
5.6. 自动安装客户端 ............................................................................................................................... 22
5.7. 过程的详细步骤 ............................................................................................................................... 22
5.8. 参见 .................................................................................................................................................... 23
第6章. 如何使用OpenSSH进行安全安装 .................................................................................................. 24
6.1. 使用OpenSSH安全安装(需要SystemImager v3.8.x或更高版本) ...................................... 24
6.2. 镜像服务器的配置 ........................................................................................................................... 24
6.3. 客户端驱动方法 ............................................................................................................................... 24
6.4. 用SSH传输配置客户端(客户端驱动) .................................................................................... 25
6.5. 服务器驱动方法 ............................................................................................................................... 25
6.6. 配置客户端使用SSH传输(服务器驱动) ................................................................................ 25
6.7. 等待客户端准备连接SSH .............................................................................................................. 25
第7章. 用SystemImager监控客户端的安装 ............................................................................................... 27
7.1. 总揽 .................................................................................................................................................... 27
7.2. 安装监控服务器 ............................................................................................................................... 27
7.3. 使客户端发送监控数据 ................................................................................................................... 27
7.4. 疑难解答 ............................................................................................................................................ 27
7.4.1. 没有显示客户端 ................................................................................................................... 27
7.4.2. 没有X服务器的话看si_monitortk接口... ....................................................................... 28
第8章.通过SystemImager集群分发配置文件 ............................................................................................. 29
8.1. 安装Install SystemImager v3.9.4或更高版本 .............................................................................. 29
8.2. 总揽 .................................................................................................................................................... 29
8.3. 定义集群拓扑.................................................................................................................................... 29
8.4. 例子 .................................................................................................................................................... 29
8.5. 参见 .................................................................................................................................................... 30
第9章. FAQ (常见问题解答) .................................................................................................................... 31
9.1. 参见 .................................................................................................................................................... 38
第10章. 疑难解答 ............................................................................................................................................ 39
10.1. 什么是“ETHER_SLEEP”变量,什么时候需要调整它? ........................................................ 39
10.2. si_getimage出现“Failed to retrieve /etc/systemimager/mounted_filesystems from <golden .... 39
10.3. 客户端自动安装/更新挂起,崩溃或出奇的慢 .......................................................................... 39
10.4. 我的自动安装CD不能启动 ......................................................................................................... 40
10.5. 我的客户端不能自动安装,当我手工执行rsync命令,它总是用镜像服务器回复 .......... 40
10.6. 客户端出现这个错误:“chroot: cannot execute systemconfigurator: No such file or directory” ..................................................................................................................................................................... 41
10.7. 客户端成功完成自动安装进程,但是重启后出现“Invalid Partition Table”错误,然后Linux就起不来了 ................................................................................................................................................ 41
10.8. 参见 .................................................................................................................................................. 41
E-mail:changzi100@yahoo.com.cn V
例子列表 2-1. 生成新的自动安装脚本............................................................................................................12 3-1. 执行si_mkdhcpserver ................................................................................................................14 3-2. 用“-autoinstall”和“-config”选项执行si_updateclient.............................................................15 3-3. 执行si_getimage.........................................................................................................................15 3-4. si_addclients在/etc/hosts中创建的词条.....................................................................................19 3-5. 从运行系统的硬盘启动自动安装介质....................................................................................20 8-1. 例子 1:向所有节点分发passwd, shadow和group ................................................................35 8-2. 例子 2:分发不同的access.conf给Login和Compute节点......................................................35 8-3. 例子 3:对无权限用户把第2个登录节(node002)点关闭.................................................35
10-1. 将SystemConfigurator安装到镜像服务器中的镜像中..........................................................46
第1章. SystemImager介绍
1.1. SystemImager纵揽
SystemImager,是System Installation Suite的一部份,它能使安装GNU/Linux,软件发行,和生产部署自动进行。 SystemImager的一个主要特征是与发行版本无关并且能支持不同种类的硬件。这允许部署任何种类的GNU/Linux发行版(标准的甚至是自定义的)到任何种类的目标机。这个项目的主要目标是轻松地部署大量的计算机。典型的环境包括计算机实验室和render farms(译者注:视觉农场,很多大片在后期制作所使用的图形渲染的工作站,类似于超级计算机),但是它已经被证实了在集群计算环境中很流行,诸如网格计算和高性能计算。 别一个促进GNU/Linux的发行以及硬件的独立设计特征是SystemImager对基于文件的系统镜像起作用。镜像被存储为目录体系结构的文件,代表了机器的一个全面的快照,包含机器的根文件系统的所有文件及目录。镜像可以以多种方法获得,包括从标本系统(golden client)获得,或直接在SystemImager上生成 制作镜像标准的方法包括克隆一个预装的机器,golden-client。用这种方法,使用者可以根据他的需求定制并调整golden-client的配置,检验它的正常运作,并确保镜像一旦部署,就会同golden-client一样的方式运转。通过同步一个已经更新的golden-client到镜像使增量更新成为可能,然后应用命令si_updateclient同步镜像到部署的机器上。镜像被作为主要部分存储在服务器的中央存储库中,称作image-server,并且应用不同的传输方式可以将镜像在客户中分发,如:rsync(默认),multicast(通过Flamethrower1),SSL加密rsync(应用SSH tunnel),通过BitTorrent。
1.2. 谁应该使用这个向导
这个向导是为在网络环境中安装和配置系统的系统管理员准备的。 ? 使用SystemImager的受益者包括: ? 拥有Internet server farms(译者注:服务器中心,IBM提出的)的机构 ? 管理很多工作站或是服务器的机构 ? 用Linux做超级计算机/集群的机构 ? 含有基于Linux的复杂的网格计算环境的机构 ? 需要维护大量具有相同配置机器的人 ? 必须自动为基于Linux的机器预装软件过程的生产机构。
1.3. SystemImager如何工作
SystemImager允许你从golden client获得一个完整系统的镜像,golden client是手工安装的、定制的机器,对一个镜像服务器来说,它是用来保存和分发系统镜像的机器。可以部署镜像服务器中镜像到任何数量的客户系统中。在初始镜像部署后,可以通过将系统与更新的镜像同步来更新客户系统。更新快速且高效的原因是只有更改过的部分被客户端复制过来。
1.3.1. 支持的发行版本
SystemImager应用SystemConfigurator(http://wiki.systemimager.org/index.php/System_Configurator)来为特殊发行版本自定义配置自动安装的客户端。通过SystemConfigurator,SystemImager支持所有主要的GNU/Linux发行版和大部分其它的系统,包括自定义的或是内部发行版。应用”footprints”, SystemConfigurator是通过基于系统配置类型起作用的而不需要知道发行版的名称。来决定一个系统的footprint,SystemConfigurator识别在
E-mail:changzi100@yahoo.com.cn 2
用的配置文件并将footprint同配置类型结合。然后恰当的安排设置,如主机名或是IP地址,不需要知道发行版的名称。 因此,几乎在所有的范围里SystemImager与发行版本无关。少数除外,所有发行的具体知识存在于SystemConfigurator工具内,支持很大范围的发行版。如果你发现一个发行版不能使用SystemImager,请提出bug报告。
1.3.2. 系统需求
? 你的镜像服务器必须有足够的硬盘空间来容纳将要安装于你的客户端系统(默认存储镜像的目录是/var/lib/systemimager/images)的镜像。 ? 使用相同镜像的所有的客户端应该有相同的硬件设备。硬件可以是不同的容量,硬盘大点儿没问题,太小就有问题了。高级用户可以修改镜像中的/etc/systemimager/autoinstallscript.conf文件来调整镜像,然后用命令si_mkautoinstallscript(8)将镜像安装在有不同硬盘或是不同文件系统配置的客户端中。 ? 对PXE安装,你需要有一个兼容的TFTP服务器跑在boot服务器上,通常这个机器也作为镜像/DHCP服务器。Debian在tftpd-hpa包和atftpd包中提供这样的服务,而Red Hat 7.0和之后的版本在tftp-server包中含有这个服务。H. Peter Anvin维护的tftp-hpa包提供了必需的功能。 ? 另外对兼容的TFTP服务器,PXE基于network的安装仍然需要一个PXE守护进程跑在你的镜像服务器上。这个要求依赖于客户端的固件和你的DHCP服务器的容量。通常,如果镜像服务器使用的是一个最近的发行版本,那就没必要启动一个PXE的守护进程,因为最近的DHCP守护进程中包括了PXE的功能。 ? 要正确的安装boot服务器的话强烈推荐使用si_mkbootserver(8)这个功具。
1.4. 名词术语
image 源自机器的根文件系统的包含文件和目录的快照。 镜像是一个可chroot的文件系统,存储在/var/lib/systemimager/images/$NAME。 例如: ? /var/lib/systemimager/images/RHEL4/ ? /var/lib/systemimager/images/Ubuntu_7_04/ ? /var/lib/systemimager/images/HPC_1.0/ ? ... override Overrides可以用来管理不同的镜像。一个典型的应用就是定制一个“vanilla”(译者注:开源的web论坛软件)镜像加入一些额外的包,但是它们通常通过si_pushoverrides(8)命令来存储和分发配置文件。 Overrides默认被存放在/var/lib/systemimager/overrides/(这个目录可以在配置文件/etc/systemimager.conf中被修改)。所有的override中所定义的文件和目录像照现在的样子被正确的分发,这意味着保存所有的数据和源数据:权限,属主,时间戳等。 例如: ? /var/lib/systemimager/overrides/RHEL4/ ? /var/lib/systemimager/overrides/Compute_config/ ? /var/lib/systemimager/overrides/HPC_1.0_custom/ ? ... image server
E-mail:changzi100@yahoo.com.cn 3
一个拥有所有image和override的可以用来安装的服务器。 client 将要被自动安装(单一)镜像的机器。 golden client 一个手工安装,用来取得镜像来部署客户端系统的定制过的机器。 transport 用来从镜像服务器发布镜像到客户端的协议。可以使用不同的方法,取决于特定的传输应用:push / pull / p2p / ... 例如:rsync, multicast, rsync over SSH, BitTorrent autoinstall media 媒介是用来启动一个自动安装客户端开始自动安装过程。自动安装媒介可以是一个U盘,一个CDROM,网络(通过PXE),或者自动安装客户端的本地硬盘。 autoinstall script 一个或多个同镜像联系起来的脚本,每一个对应一个具体的分区/文件系统/网络配置。si_getimage(8)命令制作一个初始的自动安装脚本,以后也能重新生成,使用si_mkautoinstallscript(8)命令,加上不同的选项。自动安装脚本(也被称为“master script”)被自动安装客户端下载并执行大部分自动安装过程。自动安装脚本的名称以镜像名开始,以.master结束。例如:my_webserver_image_v1.master。 si_getimage(8) 在镜像服务器上执行的一个命令,从golden client将系统镜像拖过来。 si_prepareclient(8) 这个命令要在镜像服务器执行si_getimage(8)之前在golden client上先执行。si_prepareclient(8)准备将golden client相关的信息的镜像取回并创etc/systemimager等目录,如硬盘分区设置。 si_clusterconfig(8) 管理并显示SystemImager集群拓扑的一个工具。通过这个命令可以通知镜像服务器将哪一个image和override安装在自动安装客户端上。 si_mkdhcpserver(8) 用来生成与SystemImager相应的/etc/dhcpd.conf文件的命令。DHCP可以用来给自动安装客户端分配IP。 si_mkdhcpstatic(8) 用来修改/etc/dhcpd.conf文件的命令,基于通过DHCP服务器为这些客户端分配IP地址来为自动安装客户端增加静态入口。 si_mkbootserver(8) 用来为SystemImager安装和配置网络启动的一个很有用的命令。 si_updateclient(8) 更新或是同步客户端系统到一个新的或是已经更新了的镜像的命令,可以分发软件或目录。 si_pushoverrides(8) 更新或是保持同步客户端文件,从镜像服务器推进由si_clusterconfig(8)定义的override。
E-mail:changzi100@yahoo.com.cn 4
第2章.安装SystemImager
2.1. 它是如何工作的?
SystemImager使用一个中央服务器,被称作镜像服务器,它取回一个golden client的整个系统镜像并将其部署到任何不同数量的客户端系统中。golden client系统是你按照自己的喜好定制的。你可以重新编译内核,安装软件,按你的喜好调整任何配置文件。si_getimage(8)命令将golden client镜像备份到镜像服务器中,用来部署其它系统。 一旦你对客户端系统部署了初始的镜像,你可以通过将它们与镜像服务器中更新了的镜像同步来更新或是升级客户端系统。出于快速,高效和确保大量更新或是升级,只有更改过的文件被传到客户端。 注意:除了SystemImager这种工具可以执行自动化安装外,像Red Hat的Kickstart,基于预定义的安装包清单来安装系统,或者用debootstrap从零开始制作基于Debain的系统。然而,这种基于包的安装非常有限,因为它对非安装包的文件没有办法自动化安装,如果重新编译内核,加入了一些非安装包的软件,或者是更改具体的配置文件,基于包安装的方法通常要求你做某种脚本或是编程来处理这些“特殊案例”。
2.2. 获得SystemImager
SystemImager目前以RPM和DEB格式打包。官方软件包可以从http://www.systemimager.org/ (http://www.systemimager.org)下载。
2.3. 选一个机器作为镜像服务器
因为SystemImager应用其它网络服务,如DHCP,用一个提供这些服务的服务器来作镜像服务器通常是一个很好的选择。另外,你选的镜像服务器要有足够的磁盘空间来容纳你要部署的镜像。SystemImager把镜像存储为非压缩的目录结构,所以快速分析golden client上的磁盘使用量将会给你一个对镜像服务器空间需求的很好的估计。如果你计划做多个同步镜像更新,烂处理器的性能将会成为您的镜像服务器的瓶颈。 另一种可扩展且可靠的用来突破镜像服务器的带宽和性能限制的方法就是使用BitTorrent传输。应用 BitTorrent,利用点对点网络的优势,客户端上载带宽可以用来在节点之间分发镜像。更多的信息参考http://wiki.systemimager.org/index.php/BitTorrent
(http://wiki.systemimager.org/index.php/BitTorrent)。
2.4. 安装一个镜像服务器
官方SystemImager包在文件发布系统SourceForge.net上分发,链接如下: https://sourceforge.net/project/platformdownload.php?group_id=259
(https://sourceforge.net/project/platformdownload.php?group_id=259)。 SystemImager依赖于System Configurator包,这个也可以在SourceForge上获得: https://sourceforge.net/project/showfiles.php?group_id=24006
(https://sourceforge.net/project/showfiles.php?group_id=24006)。 快速下载所有需要的包的方法是执行sis-install脚本(你的客户端需要是i386架构)。 $ mkdir systemimager $ cd systemimager $ wget http://download.systemimager.org/pub/sis-install/install
E-mail:changzi100@yahoo.com.cn 5
$ chmod u+x install $ ./install -v --download-only --tag stable --directory . \ > systemconfigurator \ > systemimager-client systemimager-common \ > systemimager-i386boot-standard systemimager-i386initrd_template \ > systemimager-server \ > systemimager-bittorrent systemimager-flamethrower 用./install —help 获得更多信息。 在镜像服务器中安装所有基本的包。在基于RPM包发行版中执行: # rpm -ivh systemconfigurator-*.rpm \ > systemimager-common-*.rpm systemimager-server-*.rpm \ > systemimager-*initrd_template-*.rpm systemimager-*boot-standard-*.rpm 在Debian或类似Debian的发行版中执行: # dpkg -i systemconfigurator-*.deb \ > systemimager-common-*.deb systemimager-server-*.deb \ > systemimager-initrd_template-*.deb systemimager-boot-*-standard-*.deb \ 如果你想应用BitTorrent传输安装还要安装systemimager-bittorrent包。RPM包: # rpm -i systemimager-bittorrent-*.rpm DEB包: # dpkg -i systemimager-bittorrent-*.deb 如果你想多重传输安装还要安装systemimager-flamethrower包。RPM包: # rpm -i systemimager-flamethrower-*.rpm DEB包: # dpkg -i systemimager-flamethrower-*.deb
这个包要求udpcast(http://udpcast.linux.lu/source.html)和Flamethrower(http://freshmeat.net/projects/flamethrower),通常在一般的发行版中都有。 如果你的客户端有多种架构还要下载systemimager-ARCHboot-standard和systemimager-ARCHinitrd_template到你的镜像服务器中。 启动包支持多种配置。因为不同的客户端配置要求不同的驱动,内核版本等,SystemImager允许安装不同的启动包,被称为 “启动风格”。 每个SystemImager版本对每个支持的架构提供”标准”风格。例如,3.9.6版本应该有以下这些包: ? systemimager-boot-i386-standard_3.9.6-1_all.deb, ? systemimager-boot-x86_64-standard_3.9.6-1_all.deb, ? systemimager-boot-ppc64-ps3-standard_3.9.6-1_all.deb, ? ...
SystemImager和它的标准启动风格支持大多数普通硬件的配置。.config文件列出了对这个内核的
E-mail:changzi100@yahoo.com.cn 6
选项。 你可以在任何时候应用其它风格来支持不同的客户配置,多启动风格可以同时安装。
你可以利用UYOK(应用自己的内核)特征制作一个与发行版本完全兼容的自定义风格。标准的风格应用支持大部分硬件设备的一般用途的内核,但明显的是它不可能支持所有出现在用户端(还要看硬件专门的驱动)的设备。由于这个原因,从3.6.x版本UYOK特征为被引进。这个特征允许应用golden client的内核在其它客户端执行安装。这个方法理论上支持所有的硬件设备。如果你发行版本的内核在客户端工作良好的话,安装也会动作良好。更多信息参考http://wiki.systemimager.org/index.php/UYOK 。
2.5. 选一个机器作为Golden Client
golden client是你想要用来做成镜像(克隆)的手工安装且定制了的系统。
2.6. 在Golden Client上制作镜像
为了部署,用SystemImager工具来制作一个镜像,安装配置一个Linux发行版,并且你可以让镜像系统中包含任何你想要的附加软件,就像你使用的golden client一样。你将部署这个系统(或者是golden client)的镜像到其它的机器上。
2.7. 在Golden Client上安装SystemImager客户端软件
要创建golden client,你必须安装systemimager-client包。 1.下载安装systemimager-client包 $ mkdir systemimager $ cd systemimager $ wget http://download.systemimager.org/pub/sis-install/install $ chmod u+x install $ ./install -v --download-only --tag stable --directory . \ > systemconfigurator \ > systemimager-client systemimager-common \ > systemimager-i386initrd_template 用./install —help获得更多的信息。 在镜像服务器中安装所有的基础软件包,在基于RPM的发行版中执行: # rpm -ivh systemconfigurator-*.rpm \ > systemimager-common-*.rpm systemimager-client-*.rpm \ > systemimager-*initrd_template-*.rpm 在Debian或类似Debian的发行版中执行: # dpkg -i systemconfigurator-*.deb \ > systemimager-common-*.deb systemimager-client-*.deb \ > systemimager-initrd_template-*.deb
2.8. 从零开始制作镜像
E-mail:changzi100@yahoo.com.cn 7
另一个制作镜像的方法是将所有需要的软件安装一个目录中。
System Installer,是System Installation Suite的一个组件,属于SystemImager,允许你直接将Linux安装到一个镜像中,绕过golden client这一步。System Installer包和文档可以从http://systeminstaller.sourceforge.net 找到。用SystemInstaller制作镜像可以同用SystemImager工具制作的互换。你甚至可以应用发行版中的一个普通工具制作镜像,而不用SystemInstaller。这个工具必需能将一个发行版安装到一个目录中(如Debain的Debootstrap,Red Hat的kickstart或yum,SuSE的YaST等)。
2.9. 升级SystemImager
虽然大多数方法中SystemImager的升级是自动的,但你必需手工执行一些升级过程来防止丢失用户的定制。
2.9.1. 重新生成自动化安装脚本
对每一个SystemImager版本,用si_mkautoinstallscript命令更新自动安装脚本,它存储在/var/lib/systemimager/scripts中。用旧的脚本可能出问题。
例子 2-1. 生成新的自动安装脚本 # si_mkautoinstallscript -image myimage -post-install reboot -ip-assignment dhcp 如果你要定制你的自动化脚本,编辑目录/var/lib/systemimager/scripts/中恰当的.master文件。
2.9.2. 移植自定义文件/etc/systemimager/rsyncd.conf到SystemImager 3.0.0
在SystemImager 3.0.0版本之前,对/etc/systemimager/rsyncd.conf文件的更改可以直接写到文件中,但是升级容易出现问题。对3.0.0版本可以在一个保存整个升级的独立文件中更改。更多细节看si_mkrsyncd_conf(8)的man page。
2.9.3. 重新生成启动媒介
每次升级Systemimager,你还必需升级用来启动自动安装系统的启动介质。用si_mkautoinstallcd或者si_mkautoinstalldisk重新生成可移动媒介。
2.9.4. 二进制tar包发生了什么?
SystemImager 3.0.0不赞成二进制tar包版本并且引入了启动包特征,要求SystemImager系统的不同组件有相同种类的版本控制。不依赖于包管理系统,版本控制需要做出重大努力,所以SystemImager 3.0.0不支持没有打包的二进制。 然而,基于make构建的系统,可以执行像install_server_all这样的命令等,这是在没有用包管理器安装时的首选方法,虽然你需要手工找出所有的安装依赖性和执行依赖性。
警告 si_mkautoinstallscript重写了先前镜像存在的脚本。如果你对自动安装脚本(也被称做.master脚本)做了任何更改,备份这些脚本来推进移植更改的新版本。
E-mail:changzi100@yahoo.com.cn 8
第3章. 使用SystemImager
3.1. 安装过程纵揽
1. 应用第二章的介召,在选来做镜像服务器的机器上安装SystemImager服务器软件包。 2. 在golden client上安装GNU/Linux并按需求定制。 3. 应用第二章的介召,在golden client中安装SystemImager客户端软件。 4. 在golden client中执行si_prepareclient命令。 5. 对自动安装客户端选择并配置分配IP地址的方法。这些信息在下一步的si_getimage命令中需要;当然,以后可以通过执行si_mkautoinstallscript命令来更改这些设置。 6. 在镜像服务器执行si_getimage命令将golden client复制到镜像服务器。 7. 执行si_clusterconfig -e来定义客户组并分配镜像和override给用户组。si_clusterconfig命令在SystemImager 3.9.4之后的版本中可用。 否则的话可以用命令si_addclients(看一下点)将客户端与镜像联系起来。 8. 如果使用si_clusterconfig的话这步可以跳过去。否则的话在镜像服务器上执行si_addclients来告知哪个客户端将会接收到什么样的镜像并填写镜像服务器的/etc/hosts和/var/lib/systemimager/scripts/hosts文件。 9. 为你的客户端生成一个启动介质。自动安装有四种方法来启动你的客户端: ? 从网络启动(PXE)--见si_mkclientnetboot(8) ? 从自动安装CD启动--见si_mkautoinstallcd(8) ? 从自动安装盘启动(USB设备或内置磁盘)--见si_mkautoinstalldisk(8) ? 从一个运行的系统启动--见si_updateclient(8) 10. 用一个(或多个)生成的启动媒介在其它机器上自动安装镜像。 注意: 工具的详细描述及功能见这章的SystemImager工具选择部分。
3.1.1. 安装详细说明
1. 应用第二章的说明将SystemImager服务包安装在你选来做镜像服务器的机器中。 2. 在golden client上安装Linux并按需要定制。记住,你安装的软件将最终将构成给其它节点进行安装的镜像。第一次不要过多考虑完全正确,可以很轻松的用SystemImager对镜像进行增量更改或是部署这些变更而不用重新安装。 3. 应用第二章的说明,在golden client上安装SystemImager客户端软件。 4. 在golden client上,以root执行si_prepareclient命令。这会在/etc/systemimager目录下生成许多文件,其中包含分区方案,文件系统类型等。si_prepareclient也会启动一个rsync进程来让这些文件传输到服务器上。golden client已经准备好了将它的镜像放入镜像服务器中。
警告 如果你用的不是ssh模式,golden client上所有的文件对于网络中的任何人都可以公开查阅的。一旦将镜像从golden client中复制过来后,rsync进程将会自动停止。取回镜像的过程中万一出现问题,一定要通过手工杀死进行程或重启golden client确保rsync进程停止。重新启动后,rsync服务不会自动开启。在rsync over SSH模式中,rsync通过在镜像服务器到golden client上打开SSH隧道进行交流。
E-mail:changzi100@yahoo.com.cn 9
5. 为自动安装客户端选择并配置分配IP地址的方法。最常用的给客户端分配IP的方法是DHCP。为了简化DHCP配置文件(/etc/dhcpd.conf),SystemImager引入了一个叫si_mkdhcpserver的工具。这个工具会询问它需要的所有信息来创建适合SystemImager安装的DHCP配置文件。安装完,客户端已经启动并收到IP地址后,在正进行的基础上通过执行si_mkdhcpstatic命令,用DHCP来为客户分配静态IP地址。si_mkdhcpstatic会更改镜像服务器上的/etc/dhcpd.conf文件,包括每个主机的静态入口。
另外,你可以将主机名,镜像服务器,网络信息,通过安装参数,以变量=值的形式写入。安装参数可以在/etc/systemimager/pxelinux.cfg/syslinux.cfg中定义或是用附加“STRING”方式作为si_mkautoinstalldisk,si_mkautoinstallcd,或 si_mkclientnetboot的参数传递。更详细的安装参数请参见http://wiki.systemimager.org/index.php/Installation_Parameters(http://wiki.systemimager.org/index.php/Installation_Parameters)。 或者,如果应用正在运行的系统的硬件设备做为启动媒介,可以执行si_updateclient -autoinstall -server <imageserver> -configure-from eth0,在包括现有网络设置的用户硬件设备的根中生成local.cfg文件。当自动安装客户端启动时,它会找这个文件并应用提供的值代替从镜像服务器中的DHCP和/var/lib/systemimager/scripts/hosts文件中获得的值。 例如 3-1. 执行si_mkdhcpserver [root@imageserver]# si_mkdhcpserver 例如 3-2. 用“-autoinstall”和“-config”选项执行si_updateclient 注意选项-autoinstall,-server和-configure-from可以缩写成-a,-s和-c。可以将SystemImager的命令选项缩写成唯一的最小形式。唯一的最小形式即如果一个命令的两个选项相同,如命令si_getimage的选项-image和-ip-assignment可以缩写成-im和-ip。 [root@server7]# si_updateclient -a -s imageserver -c eth0 Retrieving SystemImager kernel... Retrieving SystemImager initial ramdisk... Adding SystemImager entry in /etc/lilo.conf... running /sbin/lilo -d 50 -D systemimager ... Ignoring entry ’delay’ Ignoring entry ’default’ Added linux Added systemimager * <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Below are the contents of your /local.cfg file. Make sure that all the variables are filled in and that they contain the proper values. You may edit the file directly if you need to change any of the values. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # # “SystemImager” # # Copyright (C) 1999-2002 Bald Guy Software <brian.finley@baldguysoftware.com> # # This file is: /local.cfg
E-mail:changzi100@yahoo.com.cn 10
# HOSTNAME=server7 DOMAINNAME=mydomain.com DEVICE=eth0 IPADDR=192.168.1.7 NETMASK=255.255.255.0 NETWORK=192.168.1.0 BROADCAST=192.168.1.255 GATEWAY=192.168.1.254 GATEWAYDEV=eth0 IMAGESERVER=192.168.1.203 6. 在镜像服务器上执行si_getimage,将镜像从golden client复制到镜像服务器。应用si_getimage,镜像服务器从客户文件系统的根目录将所有文件及目录备份成镜像存放于/var/lib/systemimager/images中。 基本的语法是:“si_getimage -golden-client [client_hostname] -image [image_name]” 其中[client_hostname]是golden client的主机名或IP地址,[image_name]是你想要给存储镜像的名称。可以用“man si_getimage”查看更多其它的选项。 例如 3-3. 执行si_getimage [root@imageserver]# si_getimage -golden-client my-golden-client \ > -image web_server_image_v1 si_getimage与golden client联系并请求它的/etc/systemimager/mounted_filesystems文件,其中包括挂载了的文件系统和它们的挂载点。si_getimage排除文件系统中不支持的挂载点并创建一个排除清单。目前SystemImager支持的文件系统有ext2,ext3,reiserfs,xfs,jfs和vfat。其它的文件系统将被忽略,包括proc,nfs,devpts,iso9660等。 7. 执行si_clusterconfig管理SystemImager数据库中的客户组。si_clusterconfig也可以用来显示属于每组客户名单的定义组。在显示模式,命令接受主机名称,主机范围,或主机组作为参数,它在等效主机名单中解析并将它们打印到标准输出。编辑模式可以是互动的(-e选项)或批处理的(-u选项)。在互动的编辑模式下,si_clusterconfig在终端打开一个编辑器,用XML语法可以更改客户组的定义和它们的属性。在批处理编辑模式中它仅剖析预定义的XML配置(/etc/systemimager/cluster.xml)并刷新SystemImager的内部配置文件。
这是一个很受好评的集群例子: <?xml version=’1.0’ standalone=’yes’?>
警告 不要直接编辑/etc/systemimager/cluster.xml。应用si_clusterconfig -e来确保安装进程需要的所有文件严格的同步。
E-mail:changzi100@yahoo.com.cn 11
<!-- ********************************* WARNING ************************************** This file has been generated by si_clusterconfig(8), do not edit manually! ********************************* WARNING ************************************** This is the main configuration file to describe the topology of your clients and your image server informations. This file will be used by all the SystemImager commands to identify the logical groups of your clients and their specific configurations. See comments below for more details. --> <xml> <!-- The image server hostname. --> <master>master1</master> <!-- This is the global name: this name will be used to identify all the hosts defined in this file (the global supergroup). IMPORTANT: this is a mandatory entry!!! --> <name>all</name> <!-- This is the global override: all the files stored in this overrides will be pushed to all the clients. IMPORTANT: this is a mandatory entry!!! If you don’t want to use it do not create the global override in /var/lib/systemimager/overrides/ Multiple overrides can be specified as a list of multiple XML tags: <override>OVERRIDE_NAME_1</override> <override>OVERRIDE_NAME_2</override> ... <override>OVERRIDE_NAME_N</override> The OVERRIDE_NAME_1 ... OVERRIDE_NAME_N will be distributed preserving the same order as they appear in the XML file. This means that in case of file overlaps (more files in multiple overrides that should be distributed to the same target filename) the first hit wins. In this case OVERRIDE_NAME_1 is the most important and OVERRIDE_NAME_N is the least important. --> <override>all</override> <!-- Following there is an example of a “fake” group. The group name is “Local”, it uses the image “Local”, the override in /var/lib/systemimager/overrides/Local and it contains only the localhost server. Totally useless, but it’s there to explain how it works... ;-)
E-mail:changzi100@yahoo.com.cn 12
--> <group> <name>Local</name> <image>Local</image> <override>Local</override> <node>localhost</node> </group> <!-- This is a group that contains two nodes: node001 and node002. The group is called “Login” and it uses the override: The clients node001 and node002 will be auto-installed using the image: /var/lib/systemimager/images/SuSE10 And the override: /var/lib/systemimager/overrides/SuSE10_frontend After the initial installation it will be possible to keep in sync the common files for the Login group creating them into the “SuSE10_frontend” override and using the command si_pushoverride(8). It will be even possible to define host-only files creating an override using the hostname of the target client. For example all the files in /var/lib/systemimager/overrides/node001 will be distributed only to node001 (and in case of overlaps these files will replace the files that come from the group override and from the global override). --> <group> <name>Login</name> <!-- If a client belongs to multiple groups, the group with the higher priority will be used to choose the image for that client; for the overrides the groups will be sorted by group priority: in case of file overlaps first hit wins. In this example node001, that belongs to the group Login and Storage, will be auto-installed with the image SuSE10 and it’ll receive the overrides in the following order (remember that in case of file overlaps first hit wins): SuSE10_frontend, SuSE10, Storage --> <priority>10</priority> <image>SuSE10</image>
E-mail:changzi100@yahoo.com.cn 13
<!-- Also a group can have multiple overrides. The same rules for multiple values of the global overrides are valid also here. --> <override>SuSE10_frontend</override> <override>SuSE10</override> <node>node001,node002</node> </group> <!-- Another example. The group Storage contains 16 nodes (from node1293 up to node1308). They will be auto-installed using the image: /var/lib/systemimager/images/RHEL4 And the override: /var/lib/systemimager/overrides/Storage In general the best practice is to use the same name for the override and the group name (like this group). --> <group> <name>Storage</name> <priority>20</priority> <image>RHEL4</image> <override>Storage</override> <node>node001,node1293-node1308</node> </group> <!-- Define your custom groups below (and remember to remove or comment the previous entries if you don’t want to use them). ... --> </xml> 8. si_addclients为每一个指定的自动安装客户端分配镜像的master脚本创建一个符号链接。si_addclients也填写镜像服务器的/etc/hosts和/var/lib/systemimager/scripts/hosts文件。hosts文件为自动安装客户端查阅他们的主机名提供默认的机制。
警告 如果你使用前一点中所提出的si_clusterconfig方法则可以跳过si_addclients这一步。
E-mail:changzi100@yahoo.com.cn 14
当si_addclients不加参数执行时,你需要三个配置屏幕来交互。
a. 在si_addclients的第一个配置屏幕,需要指出自动安装客户端主机名称样式。一个主机范围的字符串和一个域名服务器来定义自动安装客户端主机名。例如,如果你选择”systemimager.org”做为你的域名,”www07-www11,www20”作为范围,你将定义如下的自动安装客户端。
www07.systemimager.org www08.systemimager.org www09.systemimager.org www10.systemimager.org www11.systemimager.org www20.systemimager.org b. 在第二个配置屏幕,将第一部分写定义的客户端映射到到一个镜像。 Note:注意:si_addclients的每一个援引可以将客户单一的范围映射到一个镜像。如果想将不同的客户端范围映射到不同的镜像,必需多次执行si_addclients命令。 c. 在第三个配置屏幕,si_addclients命令要求一个IP地址范围,这个IP存在于/etc/hosts和 /var/lib/systemimager/scripts/hosts文件中。当自动安装客户端启动时,它会从镜像服务器中检索后面的文件并应用它查找主机名。如果这一步失败了,客户端将会进行反向域名查找。如果有配置每一个自动安装客户端的RTP记录,可以跳过第三个配置这步;然而,为了系统更健壮推荐完成这一步。 例如 3-4. si_addclients在/etc/hosts中创建的词条 如果给si_addclients的IP范围“192.168.1.1-192.168.1.99”,主机名范围“server1-server99”,域名“mydomain.com”,则会创建如下的/etc/hosts文件: 192.168.1.1 server1.mydomain.com server1 192.168.1.2 server2.mydomain.com server2 192.168.1.3 server3.mydomain.com server3 192.168.1.4 server4.mydomain.com server4 192.168.1.5 server5.mydomain.com server5 192.168.1.6 server6.mydomain.com server6 192.168.1.7 server7.mydomain.com server7 192.168.1.8 server8.mydomain.com server8 192.168.1.9 server9.mydomain.com server9 192.168.1.10 server10.mydomain.com server10 192.168.1.11 server11.mydomain.com server11 [ ... etc, etc, etc ... ] 192.168.1.97 server97.mydomain.com server97 192.168.1.98 server98.mydomain.com server98 192.168.1.99 server99.mydomain.com server99 9. 创建启动媒介自动安装客户端 可以用四种方法来自动安装客户端:
E-mail:changzi100@yahoo.com.cn 15
? 从USB磁盘或内置磁盘启动。 执行si_mkautoinstalldisk来创建一个其它机器都可以用的自动安装USB设备(或一个通用磁盘)。 ? 从CDROM启动系统。 执行si_mkautoinstallcd来创建一个可以烧录到CDROM中的ISO镜像。可以用CDROM启动自动安装客户端并在其它机器中使用它。 ? 从一个运行的系统自动安装镜像。 如果客户端已经运行GNU/Linux,可以简单的执行si_updateclient命令并用-autoinstall选项。 例如 3-5. 从运行系统的硬盘启动自动安装介质 [root@server7]# si_updateclient -a -s imageserver -c eth0 ? 从网络启动系统。如果可以从网络启动,以应用PXE为例,可以不同本地介质启动自动安装。 PXE通常可以从BIOS中设置。启动可能不稳定且客户端固件不一至。 SystemImager的si_mkbootserver用来配置PXE服务器。si_mkbootserver的执行是一个交互的过程。它会创建一个tftproot目录,配置tftp服务器,并执行一些测试看看功能是否正常。一旦si_mkbootserver检测出错误,它会宣告失败并生成错误日志。更正错误后,可以重新执行si_mkbootserver,不断重复这个过程直到成功。si_mkbootserver很可以不会在所有的PXE客户端正常工作,如果在你的配置下它不能正常工作,请发邮件至sisuite-users@lists.sourceforge.net(mailto:sisuite-users@lists.sourceforge.net)。 ? 在现是时候来在客户端安装镜像了,用生成的介质来启动它并等待完成自动安装。
3.1.2. SystemImager工具
3.1.2.1. si_prepareclient命令
? 在配置完golden client,执行si_prepareclient命令会将你硬盘的信息一并生成文件存放到/etc/systemimager/autoinstallscript中。 ? si_prepareclient也会分创建一个临时的rsync(1)配置文件(在/tmp中)并在服务模式(rsync —daemon)下开始rsync。这一步服务器端可以将从客户端取得镜像,golden client重启之后并不会重启rsync进程,避免通过rsync从共享的golden client的根文件系统引起安全问题。一旦镜像成功的从golden client上获得,rsync进程会自动停止。
3.1.2.2. si_getimage命令
? 执行si_prepareclient之后,在镜像服务器中执行si_getimage命令。例如:si_getimage -golden-client 192.168.1.1 -image my_webserver_image_v1。 ? si_getimage联系golden client并请求/etc/systemimager/mounted_filesystems文件,其中包含挂载文件系统的清单和挂载的设备。它排除文件系统中不支持的挂载点并创建一个排除清单。目前SystemImager支持的文件系统有ext2,ext3,reiserfs,xfs,jfs和vfat。不支持其它的文件系统,包括proc,nfs,devpts,iso9660等。 ? 之后通过连接运行的golden client中的rsync进程,si_getimage获得golden client的完整的系统镜像,除了在排除清单中的文件系统。客户端所有的文件将被复制过来,在镜像目录中重新创建文件和目录结构。
E-mail:changzi100@yahoo.com.cn 16
? 通过指定一个现有镜像名称,可以用si_getimage更新现有镜像。例如:si_getimage -golden-client 192.168.1.1. -image <imagename>。然后si_getimage更新镜像来匹配golden client中的文件。做这步时,只有不同的文件会被复制。在老镜像中存在的文件却不在golden client中的将会被删除,golden client和镜像中都有的文件如果有改动的话也会更新。然而,这个方法是基于镜像对镜像的修正控制,并不是基于一行行跟踪修正不同的文件。推荐的方法是不要覆盖现存的可用镜像。基于镜像对镜像的修正控制在si_updateclient命令中也可用。默认所有的镜像存储在/var/lib/systemimager/images/的文件夹中,在具有镜像名字的目录里。例如: ? /var/lib/systemimager/images/my_webserver_image_v1/ ? /var/lib/systemimager/images/my_webserver_image_v2/ ? /var/lib/systemimager/images/my_webserver_image_HEAD/ ? ...
3.1.2.3. 自动执行脚本
? 在镜像服务器中以命令si_getimage将获得了的文件存入镜像目录后,它创建一个用来定制镜像的自动安装脚本。在这个例子中自定义安装脚本叫做“my_webserver_image_v1.master”。脚本存放于/var/lib/systemimager/scripts目录。 ? si_prepareclient命令留下的磁盘分区信息中增加需要的命令可重新对自动安装客户端磁盘分区。 ?从镜像中/etc/systemimager/autoinstallscript.conf文件获得的文件系统信息(例如/var/lib/systemimager/images/my_webserver_image_v1 /etc/systemimager/autoinstallscript.conf)用来决定适当创建文件系统的命令并且决定自动安装过程的挂载点。网络信息被加入到基于命令行的选项传递给si_getimage的自动安装脚本中或者它提示你的信息。在自动安装可程中信息以不同的形式加进来,正如自动化安装脚本将会决定一些参数的值,如主机名和IP地址。
3.1.2.4. si_addclients命令和si_clusterconfig命令
? 执行完si_getimage命令,执行si_clusterconfig命令,会打开一个交互式编辑器,可以在其中将你的客户组同镜像进行捆绑限定。 si_addclients命令可以完成同样的操作,它要求你将安装的主机名范围,但是它没有主机组这个概念,所以要指定一个主机范围或唯一主机名(si_clusterconfig命令也可以执行)。si_addclients提示选择将要安装到这些主机中的镜像并为每个主机名创建指向镜像的master自动安装脚本的符号链接。例如:”www3.sh -> web_server_image_v1.master” 如果镜像更新了你也以用si_getimage来更新master自动安装脚本。则每个联系的软链接会指向更新的自动安装脚本。如果主机需要独立的配置,主机的软链接可以删除掉并用可以对主机进行定制的master自动安装脚本替换。定制是手工过程并且要系统管理员来做,强烈建议限制手工定制,在打开新的bug前要反复检查。
3.1.2.5. 附加安装信息
警告 命令si_addclients做的配置可以覆盖si_clusterconfig命令的配置。为了排除未预料到的问题强烈建议只用si_clusterconfig命令,明显这是可行的(这意味着使用SystemImager 3.9.4或高级版本)。
E-mail:changzi100@yahoo.com.cn 17
? 自动化安装过程灵活且几乎可以在任何硬件下执行。也很容易更改适应新的或是指定的硬件。一个小型的Linux发行版叫做Brian’s Own Embedded Linux (BOEL)用来自动安装。它包含了定制的内核和只包括指定的命令和执行安装必需功能的外部ram磁盘。相同内核及初始化ram盘(initrd.img)可以用来从USB磁盘,CDROM,网络或其它运行的Linux系统的本地硬盘中启动。si_mkautoinstalldisk命令和si_mkautoinstallcd命令需要syslinux(2)功能来创建启动SystemImager内核和初始化ram盘的磁盘和CDROM。pxelinux(2),syslinux的姊妹工具,用相同的内核和初始化ram盘从网络启动支持PXE功能的机器。 syslinux和pxelinux都需要配置文件,SystemImager处理后可以让这两个工具使用一个配置文件。 ? The 标准的自动安装内核包括大部份系统所需要的驱动。可以使用UYOK特征生成定制内核来满足指定的磁盘和网络驱动需求。用UYOK并生成golden client的kernel+initrd.img执行下面的命令: # si_prepareclient --server servername --no-rsyncd --my-modules initrd.img将在进行中从initrd_template包(例如systemimager-i386initrd_template)中生成。如果你指定了—no-rsyncd参数,rsync会重启。用—my-modules参数在UYOK initrd可以节省很大空间,因为只有目前golden client中加载的模块被包含进来。没有—my-modules参数则所有可用的模块都会被加入到initrd中,允许你的UYOK kernel+initrd.img应用在不同的客户端。如果一切进行顺利,可以在你的golden client中/etc/systemimager/boot/找到UYOK kernel+initrd.img。从镜像服务器上执行si_getimage(这样的话不用指定—no-rsyncd),UYOK kerne和initrd.img将被传到镜像服务器的/usr/share/systemimager/boot/<arch>/<name_of_your_image>。总的来说,如果有不同的环境(客户端有不同的硬件和组件),最好使用标准的BOEL kernel+initrd,因为标准的内核为了获得最佳表现而进行了大力的优化。其它情况,特别是你有3rd-party(译者注:第三方软件)或定制内核模块,强烈推荐使用UYOK。 ? 一旦内核已经启动,它挂载初始化ram盘作为它的根文件系统。然后内核在已经写入的ram盘中执行初始化脚本来做SystemImager的具体任务。这个脚本使用一个配置文件(/local.cfg),安装参数(由内核启动选项传递,完整的且最新的安装参数清单见http://wiki.systemimager.org/index.php/Installation_Parameters),或者是与DHCP关联和从镜像服务器获得的用来确定自动安装客户端IP地址和主机名信息的/var/lib/systemimager/scripts文件。 如果使用了DHCP,客户端通过解析从镜像服务器中检索的hosts文件来找到它的IP地址并确定它的主机名。最终,客户端基于它的主机名从镜像服务器检索一个自动安装脚本并执行它。自动安装脚本是镜像指定的,决定客户端会检索到哪一个镜像。下面是摘要:IP地址->主机名->镜像,具体的自动安装脚本按主机名命名。
3.1.2.6. 如何更新镜像
? 如果要更新镜像服务器中的镜像,可以下面的两个方法之一: 1. 直接在镜像目录中编辑。这样做最好的方法是chroot到镜像的目录。然后可以把镜像当成运行的机器一样来处理。甚至可以用apt-get,aptitude或者RPM和yum来安装软件包。 2. 再次执行si_getimage命令,指定一个已经按照需求更改过的golden client。只有被更改过的文件会被复制过来。 golden client中删除的东西同样也会在镜像中删除。可以选择更新(推荐)镜像的master自动安装脚本或保留原样。执行i_getimage的好处是可以核实golden client 新的配置及master自动化安装脚本被更新了。
E-mail:changzi100@yahoo.com.cn 18
? 一旦系统已经自动安装,可以用si_updateclient更新客户端系统来匹配新的或已更新镜像服务器中的镜像。例如,你已经安装了你公司的300台web服务器,第二天出了一个安全补丁,你可以简单地更新镜像服务器中的镜像并在每一个web服务器上执行si_updateclient。只有更改过的文件被复制,这样你的站点很快打完补丁。可以创建一个有新版本号的镜像,这就有了一种形式的修正控制。这样,如果你发现打的补丁破坏了整个web farm的话,可以简单地执行si_updateclient恢复到上一个可以正常工作的镜像。
? 也可以加-autoinstall选项用si_updateclient命令来复制自动安装内核和初始化ram盘到正在运行的自动安装客户端的本地硬盘中,但是用这种方法的话镜像需要重新部署。si_updateclient随后更改boot-loader配置来为新的内核和初始化ram盘包括一个恰当的条目,并使这个新的内核成为默认的。下次客户端电脑启动时,加载SystemImager内核与初始化ram盘,开始自动安装过程。因此可以远程部署任何运行的Linux机器而不用插入额外的CD或USB磁盘,对某些有问题的BIOS,也不用重新配置BIOS来启动网络。
警告 建议在任何情况下通过si_updateclient执行更新前停止机器中的生产任务,因为正在执行的应用程序可能会阻止更新或当应用程序正在使用时把它删掉。
E-mail:changzi100@yahoo.com.cn 19
第4章. 如何使用BitTorrent进行点对点安装
4.1. 安装SystemImager v3.7.4或更高版本
下面的几步详细地描述了安装部分。
4.2. 在镜像服务中配置BitTorrent传输
打开文件/etc/systemimager/bittorrent.conf确认配置,特别检查下面的参数: ? BT_INTERFACE=ethi 必须是连到客户节点的正确接口, ? BT_IMAGES=image1,image2,...,imageN 必须包含要通过BT分发的镜像列表,用逗号分隔 ? BT_OVERRIDES=override1,override2,...,overrideM 必须包含要通过BT分发的override列表(可以通过BT分发一个镜像并用rsync或vice-versa分发一个override), 用逗号分隔 ? BT_UPDATE=y|n 置y将在镜像服务器的守护进程每次重启时强制BT数据与镜像及override内容同步, ? BT_COMPRESS=y|n 置y将在部署(仅当你的镜像服务器非常强大时才用这个选项,特别是用较新的CPU)之前把镜像和override进行压缩(用gzip)。 下面是一个典型的配置,用override部署两个镜像(suse10和suse10_frontend) # # “SystemImager” # # Copyright (C) 2006 Andrea Righi <a.righi@cineca.it> # # $Id: bittorrent.conf 3533 2006-04-24 20:25:59Z bli $ # # The bittorrent tracker port. BT_TRACKER_PORT=6969 # Tracker state file. BT_TRACKER_STATE=/tmp/dstate # Tracker log file. BT_TRACKER_LOG=/var/log/systemimager/bittorrent-tracker.log # Interface used to seed files with bittorrent. BT_INTERFACE=eth0 # Set to yes if you want to compress the images before distributing # them via BitTorrent. Set to ’n’ if the image server has an old CPU or # is not powerful in computations. # # Allowed values: y|n BT_COMPRESS=y # Set to yes if you want to always synchronize the BitTorrent images # with the chrootable images on /var/lib/systemimager/images when the # SystemImager BitTorrent daemon starts. # # Allowed values: y|n
E-mail:changzi100@yahoo.com.cn 20
BT_UPDATE=n # Comma separated list of images to distribute with BitTorrent # (ex. BT_IMAGES=RHEL4_base,suse10,frontend,backend...) # IMPORTANT: no spaces between images!!! BT_IMAGES=suse10,suse10_frontend # Comma separated list of overrides to distribute with BitTorrent # (ex. BT_OVERRIDES=RHEL4_base,suse10,frontend,backend...) # IMPORTANT: no spaces between overrides!!! BT_OVERRIDES=suse10,suse10_frontend
4.3. 配置BitTorrent传输客户端
为了让客户端能使用BT传输,需要指定启动参数BITTORRENT=y。可以通过在/etc/systemimager/pxelinux.cfg/syslinux.cfg文件中的内核启动字符串后加上这个选项或者是在命令行通过—append选项来传递(si_mkclientnetboot,si_mkautoinstallcd,si_mkautoinstalldisk)。这有一个典型的syslinux.cfg配置可以让所有的客户端使用BT传输进行自动安装。 DEFAULT systemimager # # Uncomment next line to send pxelinux boot prompt over serial port 0. # NOTE: Be sure your serial port speed is appropriate (57600, 9600, etc.) # #SERIAL 0 57600 DISPLAY message.txt PROMPT 1 TIMEOUT 50 # Add the following to the append line above to use your first serial port # (ttyS0) as a console in addition to your monitor (tty0). NOTE: Be sure # your serial port speed is appropriate (57600, 9600, etc.) # #console=ttyS0,57600 # Add the following to the append line above to increase the size of your tmpfs # filesystem. About 100MB larger than your image size should suffice. # # Other tmpfs mount options are also supported. See the FAQ for details. #tmpfs_size=800M LABEL systemimager KERNEL kernel APPEND vga=extended initrd=initrd.img root=/dev/ram BITTORRENT=y MONITOR_SERVER=172.16.36.1 最后一步包括用适当的自动安装启动介质启动客户端并享用BT进行自动安装。
4.4. 注意事项
E-mail:changzi100@yahoo.com.cn 21
只需要更改/etc/systemimager/bittorrent.conf文件中的BT_UPDATE=y,然后重启BT进程。 # /etc/init.d/systemimager-server-bittorrent restart 如果并不想对每一个重启的守护进程重构库的话可以改成BT_UPDATE=n。 加速服务器端的进程,可以删除镜像的tar包和种子,来代替在配置文件中设置BT_UPDATE=y。这种情况下重启BT进程会重新创建单一镜像的tar包和种子。
4.5. 过程的详细步骤
1. 通过/etc/init.d/systemimager-server-bittorrent start命令在镜像服务器启动BT跟踪。跟踪器准许所有种子发布,种子存放在目录/var/lib/systemimager/torrents中。下一步会创建镜像需要的种子。 2. BT协议设计用来传输常规文件和目录,但是不能用来传输UNIX源数据(metadata)和特殊文件(例如/dev/)。因此将所有镜像中的文件映射成常规文件是必要的。在systemimager-server-bittorrent启动期间,SystemImager为每一个通过传输来分发的镜像和override创建一个tar包和一个”.torrent”文件。tar包存储于/var/lib/systemimager/tarballs,”.torrent”存储于/var/lib/systemimager/torrents。 3. tar包和种子创建后,第一个传播者通过/etc/init.d/systemimager-server-bittorrent脚本在镜像服务器上启动(在跟踪器之后)。第一个传播是者拥有所有从头开始分发到其它节点的文件块的唯一节点。在镜像过程的第一个阶段它构成唯一的瓶颈(就像服务器--客户端的方法),但是当数据块的第一块分发到一些节点(节点设置)后,它们开始共同工作,执行点对点网络的优势并从负载释放镜像服务器。用这种方法,在这个传输阶段后,镜像服务器成为集群中另一个节点,将不再是瓶颈。 4. 客户端同包括BT客户端的启动包(kernel + initrd.img)启动。客户端的第一步是下载需要的种子。这个可以通过rsync协议(相对于镜像来说种子是非常小的,这并是说测量上有问题,同样有大量用户在同一时间下载)。 5. 客户端需要种子时他们可以用BT下载他们需要的。最初通过BT下载的文件是BOEL二进制(以tar包分发,下载后在客户端解压)。在整个自动安装过程中,客户端继续传播(上传)BOEL二进制tar包,当解压完毕,把它们上载带宽给新的客户端。 6. 下载BOEL二进制tar包并初始化第一个系统后,便开始通过BT下载镜像tar包了,这与BOEL二进制分发同样操作。 7. 在客户端文件系统中解压tar包。解压期间,客户端仍然作为tar包的传播者(上传者)。解压完毕,客户端主机将删除镜像的tar包且BT客户端也停止。 8. override以同样的方式下载。 9. 客户端重启,按照安装后的执行。
4.6. 参见
见http://wiki.systemimager.org/index.php/BitTorrent(http://wiki.systemimager.org/index.php/BitTorrent)获得更多信息。
警告 对通过BT安装的镜像或override进行任何改动时,记住要对BT库强制同步。
E-mail:changzi100@yahoo.com.cn 22
第5章. 如何使用Flamethrower进行多重安装
5.1. 安装SystemImager v3.2.x或更高版本
下面的几步详细地描述了安装部分。
5.2. 安装Flamethrower包和依赖包
Debian用户可以用”apt-get update”和”apt-get install flamethrower”。基于RPM的版本可以下载Flamethrower的RPM包(http://sourceforge.net/project/showfiles.php?group_id=259)。
5.3. 执行si_getimage, si_mvimage, or si_cpimage
Flamethrower是一个独立的工具,但是SystemImager维护Flamethrower配置文件(/etc/flamethrower/flamethrower.conf)的一个单独的副本(/etc/systemimager/flamethrower.conf)。这三个命令(si_getimage,si_mvimage, si_cpimage)中的任意一个都可以为指定的镜像在/etc/systemimager/flamethrower.conf中生成适当的条目。如果你觉得有必要的话,可以手工增加条目。看一下flamethrower.conf 的man page,或者配置文件(镜像条目在文件的最底端)中的内容。然而,更简单的做法是: si_mvimage my_image-v1 tmp_name && si_mvimage tmp_name my_image-v1
5.4. 启动Flamethrower进程
编辑/etc/systemimager/flamethrower.conf,设置如下: START_FLAMETHROWER_DAEMON = yes 然后用下面方法重启: /etc/init.d/systemimager-server-flamethrowerd restart
5.5. 让自动安装客户端使用Flamethrower
如果用DHCP,可以把下面两行加入到dhcpd.conf文件: option option-143 code 143 = string; # (only for ISC’s dhcpd v3) option option-143 “9000”; 然后重启DHCP进程,通常是: /etc/init.d/dhcp restart 或 /etc/init.d/dhcpd restart 如果用参数安装的方法,可以把下面一行加入到/etc/systemimager/pxelinux.cfg/syslinux.cfg(执行si_mkclientnetboot)或者用si_mkautoinstalldisk或si_mkautoinstallcd加上--append “STRING”选项: FLAMETHROWER_DIRECTORY_PORTBASE=9000
5.6. 自动安装客户端
从你喜欢的自动安装介质(网络,软盘,CD或硬盘)启动客户端即可。
5.7. 过程的详细步骤
E-mail:changzi100@yahoo.com.cn 23
1. 镜像服务器启动,执行初始脚本/etc/init.d/systemimager-server-flamethrowerd来启动Flamethrower进程(flamethrowerd)。flamethrowerd,反过来,按照/etc/systemimager/flamethrower.conf启动udp发送过程。 2. 用si_getimage获得新的镜像,然后flamethrower.conf中的信息被更新。 3. 在启动每个特性前,flamethrowerd会检查是否flamethrower.conf已经被更新。如果是,它会被重新读出来,这准许动态地创建新的镜像,而不用重启flamethrowerd。 4. 自动安装客户端启动,它检查是否设置了FLAMETHROWER_DIRECTORY_PORTBASE。这可以通过“option-143”来设置,或者通过local.cfg文件中的FLAMETHROWER_DIRECTORY_PORTBASE变量设置。FLAMETHROWER_DIRECTORY_PORTBASE的默认值是9000。 如果FLAMETHROWER_DIRECTORY_PORTBASE设置了,自动安装客户端要从在端口FLAMETHROWER_DIRECTORY_PORTBASE执行的flamethrower进程获得目录信息。镜像服务器等待其它客户端加入目录信息多点传送,然后去除目录信息。目录信息是文件的一个目录,每个模块一个,每个里面都包含用来进入特殊模的块的多点传送的细节。 5. 当客户端接收Flamethrower的目录信息,它会为下面的每一个模块寻找多点传送信息,然后把每一个连续地加入多点传送: a. BOEL二进制(自动安装客户端用来继续安装的附加二进制) b. 整个自动安装脚本的目录 6. 在接收到脚本列表后,它会寻找自动安装脚本,并执行它。自动安装脚本会为适当的镜像通过连续加入多点传送继续进行安装,然后是override的目录。 7. 接收完所有列表,客户端按照boot loader配置的自动安装脚本完成安装,并执行安装后的操作。 8. 当flamethrowerd进程为一个模块完成列表部分,它检查flamethrower.conf文件中的变动,如果需要的话重新读取,然后对这个模块监听要加入到列表的新用户。分开的模块列表可以并行。
5.8. 参见
见http://wiki.systemimager.org/index.php/Multicast (http://wiki.systemimager.org/index.php/Multicast) 获得更多信息。
E-mail:changzi100@yahoo.com.cn 24
第6章. 如何使用OpenSSH进行安全安装
6.1. 使用OpenSSH安全安装(需要SystemImager v3.8.x或更高版本)
SystemImager支持通过ssh获取并安装镜像。如果在一个没有保护的网络中或者通过公网进行安装的话会需要这个特点的。一些可扩展性和安装时间的增加是预料之中的,目前我们还不支持安全多点安装(flamethrower)。
见:http://wiki.systemimager.org/index.php/SSH (http://wiki.systemimager.org/index.php/SSH) 获得更多信息。
6.2. 镜像服务器的配置
将/etc/systemimager/rsync_stubs/10header文件中的下面两行取消注示: #hosts allow = 127.0.0.1 #hosts deny = 0.0.0.0/0 重启执行si_mkrsyncd_conf: # si_mkrsyncd_conf 重启rsync进程: # /etc/init.d/systemimager-server-rsyncd restart 这种方法连接到rsync出口的镜像会拒绝除本地外(在SSL隧道建立后使用sshd)的所有连接。
6.3. 客户端驱动方法
首先要创建启动包(kernel + initrd.img),包括将SSH私钥直接放入initrd.img。这种情况下不赞成通过PXE启动。因为通过TFTP传输到客户端时内核和initrd.img并没有加密。创建BOEL的启动包执行下面的命令: # mkdir /tmp/boot-package # si_mkbootpackage --destination /tmp/boot-package --kernel \ /usr/share/systemimager/boot/i386/standard/kernel --filesystem cramfs \ --ssh-key ~foo/.ssh/id_dsa —yes 记住用客户端的架构取代i386以获得正确的内核(如x86_64)或者如果你想使用UYOK: # mkdir /tmp/boot-package # si_mkbootpackage --destination /tmp/boot-package --image YOUR_IMAGE \ --ssh-key ~foo/.ssh/id_dsa —yes 这个命令会在/tmp/boot-package创建启动包并包括用户”foo”的SSH私钥在initrd中。让”foo”用户可以无密码登录执行命令: $ cat ~foo/.ssh/id_dsa.pub >> ~foo/.ssh/authorized_keys
相同的方法同样可以在golden client上使用--ssh-key与si_prepareclient。这种方式不需要在在镜像
E-mail:changzi100@yahoo.com.cn 25
服务器中创建启动包,简单地通过si_prepareclient生成kernel + initrd.img即可。
6.4. 用SSH传输配置客户端(客户端驱动)
用下面命令创建一个自动安装CD: # si_mkautoinstallcd --out-file /tmp/boot-package/systemimager.iso --kernel \ /tmp/boot-package/kernel --initrd /tmp/boot-package/initrd.img --append \ “MONITOR_SERVER=172.16.36.1 MONITOR_CONSOLE=yes SKIP_LOCAL_CFG=y SSH=y” 记住换回监测服务器(如果你想用它的话)的地址并加上所需要的安装参数。如果你选用自动安装USB设备代替CD的话执行: # si_mkautoinstalldisk --device YOUR_USB_DEVICE --kernel \ /tmp/boot-package/kernel --initrd /tmp/boot-package/initrd.img --append \ “MONITOR_SERVER=172.16.36.1 MONITOR_CONSOLE=yes SKIP_LOCAL_CFG=y SSH=y” \ --yes 然后用自动安装CD或USB设备(客户端用SSH则不推荐使用PXE)启动客户端。
6.5. 服务器驱动方法
同客户端驱动一样,服务驱动方法也需要创建一个客户端启动包。这种情况不需要包含SSH私钥(用来连接服务器),需要的是受权密钥,因为镜像服务器会为客户端打开SSH隧道。用BOEL创建启动包的话在服务器端执行下面的命令: # mkdir /tmp/boot-package # si_mkbootpackage --destination /tmp/boot-package --kernel \ /usr/share/systemimager/boot/i386/standard/kernel --filesystem cramfs \ --authorized-keys ~foo/.ssh/id_dsa.pub —yes 记住用客户端的架构取代i386以获得正确的内核(如x86_64)或者使用UYOK: # mkdir /tmp/uyok-boot-package # si_mkbootpackage --destination /tmp/boot-package --image YOUR_IMAGE \ --authorized-keys ~foo/.ssh/id_dsa.pub --yes 之后会在目标目录(/tmp/boot-package)中发找到kernel+initrd.img。
6.6. 配置客户端使用SSH传输(服务器驱动)
确保在安装参数中定义SSH=y(更多详情参见:http://wiki.systemimager.org/index.php/Installation_Parameters)。重要事项:服务器驱动方法是在客户端部署镜像最安全的方法,因为它并不直接进入镜像服务器。因为这个原因可以阻止任何连入服务器的方法(用hosts deny策略或通过iptables抑或应用你自己的防火墙)。因为只给客户端分发了一个公钥,可以忽略客户端驱动方法不通过PXE启动的警告:这样initrd.img中并不包含私有信息并且不加密传输的话也没有问题。
6.7. 等待客户端准备连接SSH
等下面的信息出现于客户端的控制台中: Started sshd. You must now go to your imageserver and issue
E-mail:changzi100@yahoo.com.cn 26
the following command: si_pushinstall --hosts ${HOST_OR_IP}. 如果没有直接看到客户端的控制台可以应用监控的方法从SystemImager虚拟控制台(参见http://wiki.systemimager.org/index.php/Monitoring获得更多详情)检查这个消息。上面的信息意味着客户端准备好接受从镜像服务器连接SSH,所以运行控制台上推荐的命令。你可以通过si_pushinstall在一次工作中打开所有的SSH通道。例如如果要从节点01到节点20更新镜像执行: # si_pushupdate —hosts node01-node020 然后用自动安装CD或USB设备通过PXE启动客户端并享受安全的自动安装吧。
E-mail:changzi100@yahoo.com.cn 27
第7章. 用SystemImager监控客户端的安装
7.1. 总揽
这个文档展示如何利用SystemImager的监控特性。监控可以观察所有客户端安装过程的细节。监控由两个组件控制: ? si_monitor: 在监控服务器上运行的进行收集客户端数据 ? si_monitortk: 基于perl-Tk的GUI监控。
7.2. 安装监控服务器
在监控服务器(常规上同镜像服务器在一个机器中)上地执行: # /etc/init.d/systemimager-server-monitord start 这会启动si_monitor进程。由客户端发送的数据将被si_monitor收集并存储在XML中/var/lib/systemimager/clients.xml。如果监控服务器中不能执行X程序可以简单地周期性查看监控设备的文件。
然后执行si_monitortk登录GUI监控。
7.3. 使客户端发送监控数据
对客户端内核启动选项定义如下的参数: ? MONITOR_SERVER=IP|HOSTNAME:监控服务器的IP地址或主机名 ? MONITOR_CONSOLE=yes|no:是否能全控制台观看,如果使能的话则监控接口(默认没有)中会跟踪客户端(标准输出和标准错误)所有的安装部分。 通常需要在/etc/systemimager/pxelinux.cfg/syslinux.cfg中定义参数。通过网络安装或自动安装介质(CD,USB盘等)都可以。例如下面的使能监控的配置: LABEL systemimager KERNEL kernel APPEND vga=extended initrd=initrd.img root=/dev/ram MONITOR_SERVER=192.168.1.1 MONITOR_CONSOLE= 记住重新执行si_mkclientnetboot(对PXE启动),si_mkautoinstallcd(对CD启动进行自动安装)或者si_mkautoinstalldisk(对USB设备启动的自动安装)来重新构建配置文件或启动介质以接受上面新定义的参数。
7.4. 疑难解答
7.4.1. 没有显示客户端
警告 千万不要手工执行si_monitor!要用systemimager-server-monitord脚本!
E-mail:changzi100@yahoo.com.cn 28
当启动时若在监控接口中没有看到客户端检查下面的问题: ? 镜像服务器中是否有防火墙在8181端口进行过滤?客户端用这个端口连接镜像服务器。 ? 试着用监控服务器的IP地址代替主机名。 ? 确保客户端使用正确的启动参数?(如果能进入真实的控制台,可以查看/proc/cmdline,则可以直接从客户端检查参数)。 ? 增加si_monitor日志的长度,将/etc/init.d/systemimager-server-monitord中LOGLEVEL=2改成LOGLEVEL=3,重启监控进程(/etc/init.d/systemimager-server-monitord restart);所有的日志存储在/var/log/systemimager/si_monitor.log。
7.4.2. 没有X服务器的话看si_monitortk接口...
如果X服务器不可用的话客户端也可以被监控,例如,如果通过ssh远程连接到了镜像服务器且不能转发X11可以查看/var/lib/systemimager/clients.xml文件。这是一个XML,但是客户端和属性名可记性强。可以周期地显示文件或者写入你自己的控制台监控脚本。如果你写了一个可以自由张贴的漂亮ncurses或者控制台接口,请邮寄补丁包给sisuite-devel列表(发邮件给:sisuite-devel@lists.sourceforge.net)。
E-mail:changzi100@yahoo.com.cn 29
第8章.通过SystemImager集群分发配置文件
8.1. 安装Install SystemImager v3.9.4或更高版本
下面的几步详细地描述了安装部分。
8.2. 总揽
使用SystemImager的overrides,si_pushoverrides是一个用来从镜像服务器到客户端或组分发配置文件的一个工具。命令接受组或节点名的名单做为参数并用服务器驱动的方法并行同步override关联的内容(镜像服务器用rsync通过ssh利用带宽优化和安全的优势复制文件到客户端)。 si_clusterconfig是用来管理并展示集群拓扑的工具。在显示模式命令接受主机名称,主机范围和主机组做为参数, 它用等效的主机名解析它们并打印到标准输出。编辑模式可以是互动的(-e选项)或批处理的(-u选项)。在互动的编辑模式下,si_clusterconfig在终端打开一个编辑器,用XML语法可以更改客户组的定义和它们的属性。在批处理编辑模式中它仅剖析预定义的XML配置(/etc/systemimager/cluster.xml)并刷新SystemImager的内部配置文件。
8.3. 定义集群拓扑
以root执行si_clusterconfig -e命令。override有三个等级: ? 全局override:向所有节点分发, ? 组override:只在组内节点分发, ? 节点override:只在节点上分发。 注意事项:全局override的文件向所有节点分发。如果在组override中有相同路径相同名称的文件,则组override占主导。如果在节点override中有相同路径相同名称的文件,则节点override占主导。 需要的元素是: ? 镜像服务器的名称:<master></master> ? 全局组的名称(确认所有的客户):<name></name> ? 全局override的名称(在所有客户端分发): <override></override>
8.4. 例子
<xml> <master>master1</master> <name>all</name> <override>all</override> <group> <name>Login</name> <image>RHEL5</image> <override>Login</override> <node>node001</node> <node>node002</node> </group> <group>
E-mail:changzi100@yahoo.com.cn 30
<name>Compute</name> <image>Ubuntu_gutsy</image> <override>Compute</override> <node>node003-node010</node> </group> </xml> 这是一个有10个节点的定义。镜像服务器的主机名是master1;集群有2个使用override的登录节点(节点001,节点002)称作Login,有8个使用override的计算节点(节点001,节点002,节点003,节点004,节点005,节点006,节点007,节点008)称作Compute。 例如 8-1. 例子 1:向所有节点分发passwd, shadow和group。 创建文件: # cp -p /etc/passwd /var/lib/systemimager/overrides/all/etc/passwd # cp -p /etc/shadow /var/lib/systemimager/overrides/all/etc/shadow # cp -p /etc/group /var/lib/systemimager/overrides/all/etc/group 从master1执行命令: # si_pushoverrides -v all 基本上当指定了定义在cluster.xml的所有全局override节点,则按照override的等级进行升级。 例如 8-2. 例子 2:分发不同的access.conf给Login和Compute节点 只准许root从本地域登录到”Login”, /var/lib/systemimager/overrides/Login/etc/security/access.conf: -:root:ALL EXCEPT LOCAL .localcluster.domain.org 不准许没有权限的用户登录”Compute”节点, /var/lib/systemimager/overrides/Compute/etc/security/access.conf: -:ALL EXCEPT root wheel:ALL 在master1执行命令: # si_pushoverrides -v Compute Login 例如 8-3. 例子 3:对无权限用户把第2个登录节(node002)点关闭/var/lib/systemimager/overrides/node002/etc/security/access.conf: -:ALL EXCEPT root:ALL -:root:ALL EXCEPT LOCAL .localcluster.domain.org 在master1执行命令: # si_pushoverrides -v node002
8.5. 参见
见http://wiki.systemimager.org/index.php/File_distribution(http://wiki.systemimager.org/index.php/File_distribution) 获得详细信息。
E-mail:changzi100@yahoo.com.cn 31
第9章. FAQ (常见问题解答)
Q: 镜像存储在哪里? A: 存在/var/lib/systemimager/images。 注意: 如果你硬盘的这个分区不够,将目录移到其它分区: mv /var/lib/systemimager/images /home/systemimager_images 然后创建一个软链接到新的目录。 ln -s /home/systemimager_images /var/lib/systemimager/images Q: 我怎样制做一个自动安装CD? A: 在镜像服务器中执行si_mkautoinstallcd命令。 Q: 怎样创建一个自动安装USB盘: A: 在镜像服务器中执行si_mkautoinstalldisk命令。 Q: 当我从dhcp传递参数,客户端出现请使用十六进制数字代替。我该如何用IP地址代替。 A: 十六进行地址实际上是IP地址的十六进制表示(可以用gethostip命令更改)。这通常是引用的问题,在配置文件的IP地址中加上引号。 Q: 我执行了si_netbootmond,但是它没有工作,怎么回事儿? A: 为了让si_netbootmond能正常工作,必须启动rsync进程: “/etc/init.d/systemimager-server-rsyncd start”。 Q: 如何配置服务器可以用网络启动ia-64客户端? A: 1. 在启动服务器中安装tftp(推荐tftp-hpa >= 0.28)。 2. 配置inetd或xinetd使tftp可用。 ? 配置inetd,在/etc/inetd.conf中找到tftp词条,将它修改: tftp dgram udp wait root /usr/sbin/in.tftpd -v -v -v -s /var/lib/tftpboot 如果安装到了不同的目录,将“/usr/sbin/in.tftpd”改tftp服务器的完整路径。 -v并不严格要求,只是让ftp服务器更详细,更容易检测问题。 最后,发送一个HUP信号给inetd(这会重新装载它的配置文件)。# killall -HUP inetd ? 配置xinetd,修改: service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /home/tftp disable = no
E-mail:changzi100@yahoo.com.cn 32
} 改成: service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot -r blksize disable = no } 最终,给xinetd发送一个USR2信号(这会重新装载它的配置文件)。 3. 配置DHCP服务器,它将为客户端提供启动参信息。安装DHCP服务器时要小心--如果它用来解决动态地址并在一个公共子网中,它会给其它网络中的机器发送假信息,可以会损坏那些机器上的数据。如果用网络安装的话推荐在私网内进行。如果可能的话,应该配置DHCP服务器只回答基于MAC地址的已知机器。 为启动客户端在/etc/dhcpd.conf中加入一个词条 host mcmuffin { hardware ethernet 00:30:6e:1e:0e:83; fixed-address 10.0.0.21; filename “elilo.efi”; } 4. 从IA-64机器中复制elilo.efi到你的tftpboot目录,并让它全局可读。这个文件通常在/boot/efi或/usr/lib/elilo子目录中。同样也可在IA-64发行版的elilo包中获得。 必须在tftpboot目录中创建一个elilo.conf文件。样例在/usr/share/doc/systemimager-doc/examples中,或者输入下面的。 5. 编辑/var/lib/tftpboot/elilo.conf: # # Sample elilo.conf for netbooting ia64 systemimager clients # # Inside your tftp directory you may also want to do this: # # mkdir -p ia64/standard # cp /usr/share/systemimager/boot/ia64/standard/* ia64/standard/ # default=systemimager image=ia64/standard/kernel label=systemimager initrd=ia64/standard/initrd.img root=/dev/ram append=“vga=extended ramdisk_blocksize=4096 console=tty0” #
E-mail:changzi100@yahoo.com.cn 33
# Uncomment APPEND line below, and comment out APPEND line above, to use # both monitor (tty0) and first serial port (ttyS0) as console at the # same time. # # NOTE: Be sure your serial port speed is appropriate (57600, 9600, etc.) # #append=“vga=extended ramdisk_blocksize=4096 console=tty0 console=ttyS0,9600n8” read-only 如果ABCDEFGH是客户端十六进制IP地址,elilo.efi将会用下面文件中的第一个。 ? ABCDEFGH.conf ? ABCDEFG.conf ? ABCDEF.conf ? ... ? A.conf ? elilo.conf 可以用ipcalc功能,从syslinux包中可以获得,来计算十六进制的IP地址。 6. 配置客户端支持TFTP启动。 a. 启动到EFI(译者注:可扩展固件接口) b. 进入启动选择维护菜单 c. 加入启动选项 d. 按在出现“Load file [Acpi/.../Mac()]”时按回车 e. 调用Netboot词条或其它相似的 f. 保存并退出,Netboot在启动菜单中可以使用了。 Q: 如何安装自动安装客户端,使得控制台可以通过串口使用。 A: si_mkautoinstallcd和si_mkautoinstalldisk支持-append选项,准许为自动安装内核指定安装参数,包括串口控制台选项。例如: si_mkautoinstallcd -out-file autoinstall.iso -append “console=ttyS0” Q: DHCP服务器必须在镜像服务器上么? A: 不是。如果使用DHCP,可以用“option-140”并对镜像服务器的IP地址设置它的值。如果使用si_mkdhcpstatic来配置dhcpd.conf文件,它会询问镜像服务器的IP地址并加入适当的词条。 因为这不是option-140的官方用法,要么获得一个官方分配的号或应用一个私有范围的号来完成工作。 Q: SystemImager可以用在哪个发行版中? A: SystemImager设计上可以在任何发行版中使用。镜像配置登记由System Configurator处理,它通过使用“footprinting”技术区别使用的系统配置文件类型,并配置网络,启动和其它一些信息。如果你发现哪个发行版本中不能使用SystemImager,请提交问题报告。 Q: 如何在自动安装内核中加入特殊板卡驱动?
A: 如果标准的启动包中不包含你需要驱动的硬件,可以使用UYOK特性自己创建一个定制的启动
E-mail:changzi100@yahoo.com.cn 34
包。见http://wiki.systemimager.org/index.php/UYOK (http://wiki.systemimager.org/index.php/UYOK)。 Q: 我需要对用来获得镜像的客户端准备些什么? A: 当然,要安装systemimager-client包。如果这个包已经安装,只需要在在镜像服务器中执行si_getimage前执行si_prepareclient命令。可以安装任何软件,配置任何文件,按照你的选择对系统进行定制。 Q: 我可以在超过一台机器上使用自动安装磁盘或是自动安装CD么? A: 当然可以。自动安装介质是通用的,可以在任何机器上自动安装。 Q: 如果将镜像送到客户端? A: 用3.8.0版本启动,可以使用si_pushinstall命令,它会从镜像服务器上打开一个SSH通道到客户端。然后每个客户端使用镜像服务器打开的SSH通道进行下载镜像。这是在不安全的网络中进行的最安全的安装客户端的方法。 Q: 如何将镜像拉到客户端? A: 如果你执行si_mkdhcpserver来配置你的dhcp信息,如果回答了所有执行si_getimage时被问的问题,包括主机名和IP地址,然后要做的就是用下面的3种形式的自动安装介质之一启动客户端: 1. 自动安装CD――它启动时间短并且持久性佳,但是必须有刻录机并且客户端可以读CD盘。 2. 自动安装磁盘――启动时间短,但是要求客户端的BIOS支持从USB设备启动。 3. 网络启动――启动时间更短,但是这个方法要求客户端网卡具有PXE功能和服务器端的配置。 见本手册的命令参考章中si_mkautoinstallcd和si_mkautoinstalldisk词条获得更多信息。 Q: 自动安装客户端如何知道要安装哪个镜像? A: 通过读自动安装客户端的步骤来更好的理解这个答案: 1. 启动自动安装介质 2. 从DHCP获得一个IP地址 3. 通过DHCP来决定镜像服务器的IP地址 4. 从镜像服务器要求一个hosts文件 5. 在hosts文件中找到基于IP地址的主机名 6. 从镜像服务器中得到一个基于主机名的(例如:www237.sh)脚本。 7. 执行这个脚本。 正在说的这个脚本是当执行si_getimage时动态创建的$image.master脚本的一个软链接。这个脚本明确地指出从镜像服务器中取得哪个镜像。 这些脚本和$image.master脚本可以在/var/lib/systemimager/scripts中找到。 Q: 如果想给客户端分配静态IP可以么?怎么做? A: 可以。si_getimage会问你是否要用静态IP。 Q: 我想用DHCP来分配静态IP给我的客户端,但是我不想手工输入1000个mac地址。我该怎样做? A: SystemImager有si_mkdhcpstatic功能。启动客户系统,DHCP服务器会连续地分配地址。按照你想要它们接收IP地址的顺序启动系统,你可以确保它们获得你想要给它们分配的IP地址。启动系统后,执行si_mkdhcpstatic。它会重写/etc/dhcpd.conf文件,按照每个客户端的主机名及MAC地址。然后重启DHCP进程。因此,每次客户端要从DHCP获得一个IP地址,它总会被分配到适合的静态IP地址。
E-mail:changzi100@yahoo.com.cn 35
注意:应用客户主机名代替IP地址,所以要更改DHCP服务器(或者DNS,NIS等)中的hosts文件来更改客户端接收到的IP地址。 注意:通过DHCP分配静态IP地址是笔者选择的一种在大量系统中管理IP的好方法。 Q: 我能期望什么样的性能? A: Ole Holm Nielsen,物理系,丹麦技术大学报告:
在我们的SystemImager安装中,我们可以在6分钟内安装1.8G的镜像到18个客户端。请见The NIFLHEIM SystemImager Page(http://www.fysik.dtu.dk/CAMP/Niflheim/systemimager.html)。我们的服务器拥有Gigabit网络,2GB的RAM,dual Intel Xeon 2.4 GHz,客户端是Intel P4和100 Mbit网络。 James Braid 报告: 从一个Celeron 700/512Mb服务器,100Mbit网络,我们做到了7~10分钟安装大概1G的镜像。硬盘是设置了LVM的5x 120Gb Seagate Barracuda V(non striped),文件系统为ReiserFS。 Q: 如何更新镜像服务器中的镜像? A: 有两种方法更新镜像服务器中的镜像: 1. 在客户端进行一些改变然后再次执行si_getimage。 ――指定相同的镜像名称,在当前镜像将要被更新的情况下(只有更改的部分被拷走)。 ――或者你可以指定一个新的镜像名称而且可以进行版本控制(强烈推荐这种方法)。 注意:每次执行si_getimage,重新创建$image.master脚本。如果自定义了$image.master脚本,确保再次执行si_getimage前保存它。 2. 直接更改文件。可以cd到此适当的镜像目录并更改文件,或者(推荐)cd到镜像目录然后执行‘chroot.sh’。这将会改变你工作的根目录到你想要操作镜像的根目录。然后在镜像中执行rpm或是其它命令,并不用担心损坏或是弄混镜像服务器。改完后,输入exit你将会回到正常的shell中。 Q: 如何更新客户端来匹配镜像? A: 一旦更新了镜像服务器中的镜像,就可以更新客户端了。(不需要完全的重新安装)可以在客户端用si_updateclient命令,将镜像服务器的名称和想要更新到客户端的镜像做为命令的参数。执行si_updateclient --help获得更多关于这个命令的信息。推荐使用“如何更新镜像服务器中的镜像?”FAQ中版本控制方法执行完si_updateclient以测试镜像的生产环境恢复到已知状态。(例如,对上一个可以工作的镜像执行si_updateclient)。 客户端/etc/systemimager/updateclient.local.exclude文件是用来从被si_updateclient命令正在更新的文件中排除文件和目录。可以更改它以适应自己的环境。 Q: updateclient.local.exclude这个文件是用来干什么的? A: si_updateclient命令使用它。见”如何更新客户端来匹配镜像?”FAQ获得更多信息。 Q: 如何使用SystemImager更新一小部分文件?例如,我应用了安全补丁,想将所有机器都更新。 A: 在客户端使用si_updateclient命令。
1. 选用下面的一个方法更新服务器中的镜像:
a. 直接在镜像中应用补丁 b. 在一个客户端上应用补丁,然后执行si_getimage指定相同的镜像名(不会花费太长时间更新镜像)
E-mail:changzi100@yahoo.com.cn 36
c. 在一个客户端上应用补丁,然后执行si_getimage指定不同的镜像名。选择这个可以对版本控制。 2. 在想要更新的客户端执行si_updateclient。执行si_updateclient --help来获得语法帮助。 Q: 有没有保存自动安装客户端状态的日志文件? A: 有。SystemImager日志可以在镜像服务器中的/var/log/systemimager中找到。 Q: SystemImager基于其它什么软件? A: SystemImager大部分由Perl编写,要用以下的软件: ? busybox ? bc ? devfsd ? ISC dhcp ? discover ? dosfstools ? e2fsprogs ? jfsutils ? xfsprogs ? Linux kernel ? parted ? pxelinux ? rsync ? syslinux ? raidtools ? reiserfsprogs ? systemconfigurator ? uClibc 为了确定还是看一下System Installation Suite (SIS),其中包括SystemInstaller,SystemImager和System Configurator。SystemInstaller是准许你安装镜像目录到镜像服器中的软件。标准的SystemImager版本中使用System Configurator,执行配置目标机,如IP地址,网卡,安装后用来启动客户端的初始化RAM盘。 Q: 什么是override目录? A: override目录是一个在主镜像传输完后复制到目标机的目录。override目录中所有内容复制到目标机的新文件系统的根目录中。 所有文件的属性被复制,包括目录,权限和属主。这允许对镜像中的文件取代。Overrides目录在/var/lib/systemimager/overrides/。 简单地编辑master自动安装脚本并改变override变量来包含适当的overrides目录。例如,可以改变OVERRIDES=“my_image”为OVERRIDES=“my_image-ide”。 如果所有机器使用相同的override,就没必要更改自动安装脚本。只要把你想要override的文件放到同你的镜像有相同名称的overrides目录中,并执行它。
也可以使用多重override目录,用于你指定的顺序--每一个目录取代前一个目录。可以在多类机器中有少量不同的高度复杂的环境中使用这种方法,但是它们都源于一个镜像。例如,OVERRIDES=
E-mail:changzi100@yahoo.com.cn 37
“my_image-ide web_app”。 Q: 如何扩展文件系统? A: 见“如何更改一个分区的大小?” Q: 如何更改一个分区的大小? A:
1. 用你喜欢的编辑器打开autoinstallscript.conf文件。
注意: 由si_prepareclient创建默认的autoinstallscript.conf文件在你镜像的/etc/systemimager目录。 2. 找到<disk>部分,其中dev设置含有要更改分区信息的磁盘。 3. 找到<part>词条,其中num是我们现在说的分区号。 4. 更改size,改变新分区的大小,如果你分配的空间不足以容纳存储的文件,自动安装将会失败。 注意:每个<disk>部分可以用MB (megabytes)或% (percentages)来指定分区大小。参见man autoinstallscript.conf 获得更多信息。 5. 用新的参数执行si_mkautoinstallscript创建新的自动安装脚本。 注意:默认,si_mkautoinstallscript使用镜像的./etc/systemimager目录中的autoinstallscript.conf文件。参见man si_mkautoinstallscript和man autoinstallscript.conf获得更多信息。 Q: 如可更改文件系统目标机才能使用? A: 1. 确保内核支持你想用的文件系统。 2. 在你喜欢的编辑器中打开autoinstallscript.conf文件。 注意:由si_prepareclient创建默认的autoinstallscript.conf文件存储在镜像的./etc/systemimager目录。 3. 找到<fsinfo>词条,其中mp (mount point)是用来设置想要更改的文件系统。 4. 将fs更改成想使用的文件系统。参见man autoinstallscript.conf查看支持的文件系统列表。 必需明白选择的文件系统的功能。依赖于选择的文件系统,还要更改文件的挂载点,通过options词条来设置。如果选择了不支持的选项,自动安装会失败。 迄今所知道的案例,更改文件系统类型时没有必要更改<disk>部分的fs词条。<disk>部分的fs词条实际上不决定创建于那些分区上的文件系统,而是SystemImager所使用的parted工具创建分区时使用那个参数。 5. 用新的参数执行si_mkautoinstallscript创建一个新的自动安装脚本。默认,si_mkautoinstallscript使用镜像的./etc/systemimager目录中的autoinstallscript.conf文件。参见man si_mkautoinstallscript和man autoinstallscript.conf获得更多信息。 Q: 如何更改磁盘类型目标机才能使用? A: 1. 确保镜像中的内核中包含你想用的磁盘类型的驱动。
E-mail:changzi100@yahoo.com.cn 38
2. 执行si_mkautoinstallscript --autodetect-disks ...创建一个新可以在客户端安装镜像时自动检测硬盘类型的自动安装脚本 3. 另一种方法是手工更改autoinstallscript.conf并重新执行si_mkautoinstallscript。 Q: 对不同的磁盘或分区配置可以使用一个镜像么? A: 可以。如果在客户端有不同的硬盘类型,使用si_getimage或si_mkautoinstallscript时确保使用--autodetect-disks参数,并对你想使用的每个分区表创建不同的autoinstallscript.conf和master脚本
9.1. 参见
参考SystemImager站点中的疑难解答指南 http://wiki.systemimager.org/index.php/Troubleshooting and the online FAQ at (http://wiki.systemimager.org/index.php/FAQ for details)。
E-mail:changzi100@yahoo.com.cn 39
第10章. 疑难解答
10.1. 什么是“ETHER_SLEEP”变量,什么时候需要调整它?
ETHER_SLEEP变量指定自动安装客户端在进行网络通话之前要进行等待的秒数。默认是0,为了使安装更快些,通常不需要暂停。 某一网络设备,著名的交换机,在30多秒钟的延时后,可能拒绝从新出现交换端口的接口上通过传输。这个延时通常是可以设置的选项(如果交换机有这个功能)。不管交换机设置的是供应还是具体地址。 如果在自动安装时遇到问题,例如自动安装客户端不能通过DHCP获得一个IP地址:a)用命令行要求得到一个DHCP地址时,你会得到一个。b)手工配置网络接口然后连接镜像服务器;然后你可以更改ETHER_SLEEP变量。 这些问题都可以解释为手工干预前的30多秒的暂停。 如果你想要更改ETHER_SLEEP变量,大多数情况下这个值是35(ETHER_SLEEP=35)。ETHER_SLEEP变量可以在local.cfg文件中设置或通过更改BOEL源代码中./etc/init.d/rcS脚本。 注意:交换机的30多秒暂停开始于自动安装客户端被激活(驱动装载),没有必要将端口与IP地址捆绑。
10.2. si_getimage出现“Failed to retrieve /etc/systemimager/mounted_filesystems from <golden
client>”消息 两个已知的问题会导致这个错误: 1. 你的防火墙可能阻止了rsync端口。一些Red Hat发行版(其它的发行版也有可能)将防火墙规则作为默认安装的一部分。ipchains和iptables功能加上L参数会打印激活规则列表。 2. rsync依赖于远程机器的反向查寻能力。如果你的集群中没有没有反解DNS,你可以在集群中的每个机器的/etc/hosts文件中加入一个词条。为你的镜像服务器加入一个词条,加在golden client的/etc/hosts文件中,这样就可以正常使用si_getimage了。
10.3. 客户端自动安装/更新挂起,崩溃或出奇的慢
Goran Pocian报告了一个不能接受的si_updateclient执行的案例,他将内核从2.2.17升级到2.2.18时发生的。他还指出,在执行完si_prepareclient如果挂载NFS文件系统,si_getimage将会检索它的内容。这将严重增加网络的负载,同样会引起性能恶化。 Brian Finley执行了另一个可能的原因: 每过一会儿,就有人报告与rsync有关的一些奇怪的挂载或传输中断问题。我有机会与Andrew Tridgell对面讨论这个问题。我们发现引起这个问题的两个原因。一个是已知的内核问题,一个是rsync问题。内核的问题在2.4.x系列的内核中已经解决了,(SystemImager并没有用2.4.x内核进行“官方测试”)也不会在所有的2.2.x系列的内核中出现(我这样认为)。rsync的bug在2.4.7版本解决了。rsync的bug由过多的错误占满了错误队列,因此引发竞争状态。然而,到rsync的2.4.7版本有一段时间了,我仍然推荐使用2.4.6的版本除非你明确地经历了这些问题。
E-mail:changzi100@yahoo.com.cn 40
似乎有一个苦工为Chris Black工作。在<image>.master脚本中每个rsync命令”rsync”后面加上”--bwlimit=10000”。 更改:“rsync -av --numeric-ids $IMAGESERVER::web_server_image_v1/ /a/” 改成:“rsync --bwlimit=10000 -av —numeric-ids $IMAGESERVER::web_server_image_v1/ /a/” 这是几个在检查问题上的技巧: ? 如果你的错误日志/var/log/messages中有看起来像: Jan 23 08:49:42 mybox rsyncd[19347]: transfer interrupted (code 30) at io.c(65) 你可以看一下errcode.h文件中的代码号,在这里会找到rsync源代码。 ? 判断内核bug:执行netstat -tn。这有一些样例输出(来自正常工作的系统) $ netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 1 0 192.168.1.149:1094 216.62.20.226:80 CLOSE_WAIT tcp 1 0 192.168.1.149:1090 216.62.20.226:80 CLOSE_WAIT tcp 1 0 192.168.1.149:1089 216.62.20.226:80 CLOSE_WAIT tcp 0 0 127.0.0.1:16001 127.0.0.1:1029 ESTABLISHED tcp 0 0 127.0.0.1:1029 127.0.0.1:16001 ESTABLISHED tcp 0 0 127.0.0.1:16001 127.0.0.1:1028 ESTABLISHED tcp 0 0 127.0.0.1:1028 127.0.0.1:16001 ESTABLISHED 问题是: ? 机器A在Send-Q中有数据 ? 机器B在Recv-Q中没有数据 ? 机器A的Send-Q并没有减少 发生了这样的情况: 1. 一个或两个内核不尊敬另一个的发送/接收设置(这些是动态计算的)。 2. 结果是内核不从机器A到机器B中取得数据 3. Rsync,因此,在接收端不获得数据 4. 进程持挂起。 ? rsync的bug细节: 发生了什么: 1. 大最的错误日志在接收端和生成端阻塞 2. 所有的进程停止 3. 再一次,进程出现挂起。 希望这些信息有所帮助... 一个可能的解决方法,Robert Berkowitz建议的,在rsync的脚本里rsync选项加上--bwlimit=10000。
10.4. 我的自动安装CD不能启动
下载并安装一个新的syslinuxRPM包。
10.5. 我的客户端不能自动安装,当我手工执行rsync命令,它总是用镜像服务器回复
E-mail:changzi100@yahoo.com.cn 41
确保镜像服务器可以在IP地址的基础上找到主机名。最简单的方法是为客户端系统获得镜像服务器的/etc/hosts文件中的这个词条。
10.6. 客户端出现这个错误:“chroot: cannot execute systemconfigurator: No such file or directory”
这个失败最有可能与用来创建镜像的SystemImager版本和用来创建相应的.master脚本的SystemImager不匹配联系起来。 如SystemImager 2.0,SystemConfigurator用来制作对镜像更改的最终配置。SystemConfigurator从在镜像内部执行,所以它必须安装于镜像服务器的镜像中。确保这个,在从golden client中获得镜像前,SystemConfigurator必须安装在任意的golden client中。如果你从一个没有安装SystemConfigurator的golden clients中获得镜像,可以直接在镜像服务器中的镜像里安装SystemConfigurator。 例如:10-1,将SystemConfigurator安装到镜像服务器中的镜像中 1. 从http://sourceforge.net/projects/systemconfig下载最新的SystemConfigurator包。 2. 复制SystemConfigurator包到镜像的目录。例如: # cp systemconfigurator-1.10-1.noarch.rpm /var/lib/systemimager/images/my_image/tmp 3. Chroot到镜像目录并安装包。 # chroot /var/lib/systemimager/images/my_image bash # rpm -Uvh /tmp/systemconfigurator-1.10-1.noarch.rpm # exit
10.7. 客户端成功完成自动安装进程,但是重启后出现“Invalid Partition Table”错误,然后Linux就起不来了
SystemImager 2.0.x和早期的版本在分区表中没有可启动标志。在大多数情况下都可以,但是在一些情况下这导致不能启动系统。为了解决这个问题,从rescue介质启动系统,然后用cfdisk或者其它分区工具在你的启动分区设置可启动标志。如果准许启动系统,必须升级SystemImager并重新生成自动安装脚本。如果因为某些原因不能升级,那么检查下面: ? 确保使用最新版本的SystemImager并使用同这个版本一起的自动安装磁盘。注意版本号可能不匹配。参见VERSION文件。
10.8. 参见
参考SystemImager站点中的疑难解答指南
http://wiki.systemimager.org/index.php/Troubleshooting获得详细信息。