本文记录了使用PXE无人值守网络安装Ubuntu server14.04,并自动安装JDK、Hadoop、Mahout的过程。

1、PXE介绍

预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

PXE当初是作为Intel的有线管理体系的一部分,Intel 和 Systemsoft于1999年9月20日公布其规格(版本2.1)。通过使用像网际协议(IP)、用户数据报协议(UDP)、动态主机设定协定(DHCP)、小型文件传输协议(TFTP)等几种网络协议和全局唯一标识符(GUID)、通用网络驱动接口(UNDI)、通用唯一识别码(UUID)的概念并通过对客户机(通过PXE自检的电脑)固件扩展预设的API来实现目的。

——维基百科“预启动执行环境”

PXE的大概过程就是:设置从LAN启动,主机从DHCP服务器获取到IP,访问服务器通过TFTP协议获取内核加载文件,在本文中还自动获取了安装系统的相关配置,然后从HTTP服务器下载完整的系统镜像在本地按照写好的配置安装。安装完了自动重启就进入到系统了。

2、所需环境

一台服务器和若干台需要安装系统的主机,安装系统的主机主板BIOS需要支持PXE安装。主机需要能通过网络访问服务器。在我的操作中将我自己的笔记本作为了服务器,系统为Ubuntu14.04桌面版。通过上面的PXE介绍也可以看到服务器需要安装DHCP服务、TFTP服务、HTTP服务,还需要编写配置文件。

3、安装配置DNSmasq

DNSmasq实际上就是一个集成工具,包含了DNS、DHCP、TFTP服务器。安装这个就省的分别去安装了。

直接从源安装: sudo apt-get install dnsmasq ,如果找不到那就update一下。

配置DNSmasq

文件中包含了详细的注释,可以自己看看官方解释。一下是我的配置,可直接复制到文件结尾,并按照自己情况修改相关配置。

配置TFTP服务器

TFTP的配置已经包含在dnsmasq中了,下面创建TFTP目录、

最后启动dnsmasq服务: sudo service dnsmasq start

注意如果是重启以后tftp连接出问题需要使用sudo重启一下。

4、安装配置Nginx

本文中提到的软件均有替代方案,比如Nginx你也可以用Apache等都可以。

直接从源安装: sudo apt-get install nginx

编辑配置文件: vim /etc/nginx/sites-available/default

注释掉 # try_files $uri $uri/ =404; 这一行。(这里出自William Sang[1]。这个配置项是文件路径选择顺序。我认为这一行由于=404的存在,而原文是查找index.html,所以可能不注释也可以,没有测试,存疑。)

开启nginx服务: sudo service nginx start

打开浏览器输入http://127.0.0.1测试nginx是否打开,页面中显示welcome to nginx那就可以了。

5、创建启动文件,准备镜像

在http服务器目录新建ubuntu文件夹用来放镜像,将下载的ubuntu-server14.04的镜像挂在到http服务器下面:

把安装需要的引导加载文件放到tftp目录:

放了文件就可以测试一下tftp能不能用了。需要安装tftp客户端: sudo apt-get install tftp

连接本地ip,获取version.info文件看看能否获取。这里和Nginx都容易出现文件夹权限问题和防火墙端口问题,出问题查一下。

tftp使用

6、安装kickstart并配置ks.cfg文件

安装不废话直接源: sudo apt-get install system-config-kickstart

ks.cfg这个文件是无人值守中重要的一步,其中保存的是安装系统过程中默认的系统配置。没有这个文件就需要安装中手动设置。kickstart则是方便编辑这个文件的,不用它的话也可以手工编辑……

然后终端运行system-config-kickstart打开kickstart的图形界面,用来编辑ks.cfg。

kickstart的图形界面

kickstart的图形界面

编辑完成后保存文件,然后拷贝到http服务器目录下:

7、配置ubuntu-server.seed文件

ubuntu-server.seed文件也是安装系统的默认配置文件。在ubuntu系统的安装中,ks.cfg文件部分配置不会读取而是从这个文件里面读取。特别是在安装Ubuntu12.10及以后的版本时,这个文件尤为重要。[2]在Ubuntu12.10后增加了一个文件系统的预配置文件“filesystem.squashfs”,其文件在镜像中的“/install/filesystem.squashfs”,在通过网络安装系统的时候需要指定这个默认文件系统。否则系统会安装出错。

这个文件不需要自己从零编写,只需要从镜像中的preseed/文件夹拷贝即可,然后由于上面说的文件系统的原因,需要在最后加一行,其中路径需要根据情况修改:

编辑完成后同样放到http服务器目录下:

8、配置支持PXE启动

前面已经放置了加载安装的文件。其中指定的pxelinux.0文件在执行过程中会读取配置文件来决定他载入什么Linux内核文件来运行。所有的配置文件都放在启动服务器tftp配置目录的/pxelinux.cfg/目录下(/var/lib/tftpboot/pxelinux.cfg/)。pxelinux.0根据一定的规则来搜索合适的配置文件名,如果搜索不到那么就加载默认的配置文件default。[3]

这个配置文件在ubuntu中是一个软连接,链接到了/var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/syslinux.cfg 文件。这两个文件修改哪个都行,只不过修改软连接的话需要使用强制保存,所以还是建议修改源文件吧。

修改文件内容如下,其中需要根据自己ip修改相应url:

9、安装系统

最后确保服务器上服务都开启了。然后需要手动进入需要安装系统的主机的BIOS设置LAN启动为打开,设置PXE安装为允许。由于安装系统之后会自动重启,为了不出现循环安装,所以不要将LAN启动放在第一启动项。所有主机保存BIOS后开机选择LAN启动,接下来你就可以干别的事情了,安装时间会比本地安装久很多,可能大概超过1小时……

安装完成后ubuntu系统的source.list也就是更新源会设置成部署系统的这个服务器ip,需要自行修改。下一篇发几个自动化配置脚本以及自动安装hadoop那些东西的脚本吧。

 

评论

电子邮件地址不会被公开。 必填项已用*标注

你可以使用以下 HTML 标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">