无头 VNC 安装碟

描述

这个提示会示范如何修改开机碟,好让安装程序引导后会连接到一个接听的 VNC 查看器。这张碟本的作用很简单 --> 就是容许在不连接键盘/鼠标/显示器的情况下安装 CentOS 系统。只要插上电源及乙太网便行了(假设系统能使用光盘开机)。

已测试的 ISO

我已经亲身在下列 ISO 里作出修改:

*CentOS 4.2 服务器光盘

*CentOS 5.1/5.2 网络安装碟

*CentOS 5.2 光盘(只须首张碟,因为连接已完成)

*CentOS 5.3 DVD

*CentOS 6.3 minimal 安装 CD(在制作中)。暂时未能 100% 运作。它不会略过碟本验证。

—— 我见不到有原因会导致这个方法不适用於任何一个 ISO 档。我只是将亲自测试过的列出来。

下载 ISO

你首先需要的就是 CentOS 镜像内的其中一个 ISO 档。由这点起,不论你下载了哪一个 ISO 档,我都会称呼它为 centos.iso。

- 将 centos.iso 下载到你的主目录。

# cd /home/yourDirectory
# wget http://dom.com/path/to/centos.iso

挂载 ISO 档并准备编辑

现在我们会挂载下载了的 centos.iso,好让我们能复制文件到我们的文件系统来进行所需的编辑,藉此达至目标。

- 执行所须的指令来抽取 ISO 内的文件到你的硬盘。

# mount -oloop centos.iso /mnt
# mkdir /tmp/installDisk
# cp -a /mnt/* /tmp/installDisk/
# cp /mnt/.* /tmp/installDisk/
# cd /tmp/installDisk

编辑 isolinux.cfg

既然我们已经复制了 ISO 内的文件到我们的硬盘上,现我们便须要编辑 isolinux.cfg 这个文件并加入我们的修改。我们将会改动光盘引导时传送给安装程序的「开机选项」。

- 利用你喜欢的编辑器打开文件。

# vi isolinux/isolinux.cfg

# nano isolinux/isolinux.cfg

现时文件会有以下的模样: —— CentOS 6x 似乎对选项作出了少量改动。

default linux
prompt 1
timeout 600
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label linux
  kernel vmlinuz
  append initrd=initrd.img ramdisk_size=8192
label text
  kernel vmlinuz
  append initrd=initrd.img text ramdisk_size=8192
label expert
  kernel vmlinuz
  append expert initrd=initrd.img ramdisk_size=8192
label ks
  kernel vmlinuz
  append ks initrd=initrd.img ramdisk_size=8192
label lowres
  kernel vmlinuz
  append initrd=initrd.img lowres ramdisk_size=8192
label local
  localboot 1
label memtest86
  kernel memtest
  append -

- 加入改动令它使用我们所需的设置。主要改动包括:

* prompt

* timeout

* 附属於 "label linux" 的 append 行

—— 切记将 IP 修改为拥有接听 VNC 查看器的工作台的 IP。分派固定 IP 给这个工作台是一个好主意,因为这个 IP 将会被烧录在光盘上。

—— CentOS 6x 似乎对选项作出了少量改动。我只修改了 PROMPT、TIMEOUT 及 APPEND 行。在 CentOS6.x 下是没有 ramdisk_size 的,因此我略过了它。

- 为一般的 CD/DVD(采用 DHCP),请令文件与下列吻合:

default linux
prompt 0
timeout 0
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label linux
  kernel vmlinuz
  append initrd=initrd.img ramdisk_size=8192 vnc vncconnect=192.168.0.100 headless ip=dhcp ksdevice=eth0 method=cdrom lang=en_US keymap=us
label text
  kernel vmlinuz
  append initrd=initrd.img text ramdisk_size=8192
label expert
  kernel vmlinuz
  append expert initrd=initrd.img ramdisk_size=8192
label ks
  kernel vmlinuz
  append ks initrd=initrd.img ramdisk_size=8192
label lowres
  kernel vmlinuz
  append initrd=initrd.img lowres ramdisk_size=8192
label local
  localboot 1
label memtest86
  kernel memtest
  append -

- CentOS 6 样例(亦可简单地应用于下列例子中):

default linux-vnc
prompt 0
timeout 0

display boot.msg

menu background splash.jpg
menu title Welcome to CentOS 6.3!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000

label linux-vnc
  menu label ^Install over VNC
  menu default
  kernel vmlinuz
  append initrd=initrd.img vnc vncconnect=192.168.254.1 headless ip=dhcp ksdevice=eth0 method=cdrom lang=en_US keymap=us
label linux
  menu label ^Install or upgrade an existing system
  kernel vmlinuz
  append initrd=initrd.img
label vesa
  menu label Install system with ^basic video driver
  kernel vmlinuz
  append initrd=initrd.img xdriver=vesa nomodeset
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
  menu label Boot from ^local drive
  localboot 0xffff
label memtest86
  menu label ^Memory test
  kernel memtest
  append -

- 如果碰巧你安装时没有一个可用的 DHCP 服务器,下面是为一般 CD/DVD(采用固定网络设置)而设:

—— 切记代入适合你的网络的设置(例如:IP、网络掩码、网关、DNS 等)。

default linux
prompt 0
timeout 0
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label linux
  kernel vmlinuz
  append initrd=initrd.img ramdisk_size=8192 vnc vncconnect=192.168.0.100 headless ip=192.168.0.10 gateway=192.168.0.254 netmask=255.255.255.0 dns=192.168.0.254 ksdevice=eth0 method=cdrom lang=en_US keymap=us
label text
  kernel vmlinuz
  append initrd=initrd.img text ramdisk_size=8192
label expert
  kernel vmlinuz
  append expert initrd=initrd.img ramdisk_size=8192
label ks
  kernel vmlinuz
  append ks initrd=initrd.img ramdisk_size=8192
label lowres
  kernel vmlinuz
  append initrd=initrd.img lowres ramdisk_size=8192
label local
  localboot 1
label memtest86
  kernel memtest
  append -

- 又或者设置一张网络开机光盘(采用 DHCP)

—— 我们须要指定一个 URL 来取得概述文件。这个设置与一般光盘版本只有少许差异。

default linux
prompt 0
timeout 0
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label linux
  kernel vmlinuz
  append initrd=initrd.img ramdisk_size=8192 vnc vncconnect=192.168.0.100 headless ip=dhcp ksdevice=eth0 method=http://mirror.centos.org/centos/5.2/os/i386 lang=en_US keymap=us
label text
  kernel vmlinuz
  append initrd=initrd.img text ramdisk_size=8192
label expert
  kernel vmlinuz
  append expert initrd=initrd.img ramdisk_size=8192
label ks
  kernel vmlinuz
  append ks initrd=initrd.img ramdisk_size=8192
label lowres
  kernel vmlinuz
  append initrd=initrd.img lowres ramdisk_size=8192
label local
  localboot 1
label memtest86
  kernel memtest
  append -

—— 如果你使用网络开机光盘,利用一个本地(位於你的内联网里)的组件来源会较为礼貎(就带宽而言)。当然这样亦较为高速。

—— 明显地,你可以合并固定 IP 的样例及网络开机的样例来装作一个不需 DHCP 服务器的网络开机版本。

- 切记存储你的改动及离开编辑器。

从上可见我作了一些轻微的改动,例如将 prompt 及 timeout 设为 "0"。这是由於我不希望须要用键盘来作出交互,亦不能在画面上看见这些提示符串。这张光盘单单是为 VNC 安装而设。因此提示及计时都被删除。另外我亦修改了缺省的开机选项。如你所见,我加入了选项令缺省开机时会向 192.168.0.100 上的接听查看器进行 VNC 连接。明显地你必须修改它来配合所需的网络。有一个 vnc 参数(在开机选项中)可用来设置安装程序里的 VNC 服务器的口令 —— 但既然我使用一个位於防火墙后面的私人网络 —— 算了吧。用不著它。关注安全性的读者或许会想加入这个参数。其它选项是用来自动填入所需的数值 —— 否则你便会收到填写它们的提示。但再一次 —— 没有键盘/鼠标/显示器。因此我们在这里传入所需数据。请按你的首选修改其它设置,例如选用另一种语言。此外,你的网络上必须有一台 DHCP 服务器为进行安装的目的机器分派 IP。

- 用下面这个指令矫正一些权限……

chmod u+w isolinux/*

创建新的 ISO

现在我们会创建一个新的 ISO 档来烧录在新碟上。

—— 我的 ISO 档最后称为 "vncCentOS.iso" —— 请按你的首选随意命名。

# mkisofs -o ../vncCentOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T .

删除 ISO 的媒体检查

我们需要从光盘删除媒体检查,否则安装永远不会引导。这个方法确实是一流。

- 检查你是否已经安装了 anaconda-runtime。

# yum list | grep anaconda-runtime

以上的输出应告诉你它是否已被安装。

- 假若你需要安装它,请执行:

# yum install anaconda-runtime

—— 这个组件是 centos 软件库里的一部份。至於那个工具,它名叫 implantisomd5。这个工具被安装 /usr/lib/anaconda-runtime/ 内。

—— CentOS 6.x 下的位置有所改动。此工具位于 “/usr/bin/implantisomd5”。

- 删除媒体检查:

# /usr/lib/anaconda-runtime/./implantisomd5 --supported-iso ../vncCentOS.iso

- 在 CentOS 6.x

# /usr/bin/implantisomd5 --supported-iso ../vncCentOS.iso

—— 如果你的 ISO 有另一个名称,切记要修改以上的指令。

- 利用你所喜欢的光盘烧录软件烧录 ISO 档

- 以接听模式打开你的 vnc 查看器(在工作台上)

- 在你要安装 CentOS 的机器上放入光盘并开机,然后按正常步骤安装操作系统。

希望这对你有帮助。总括来说这不是一个很复杂的程序。最困难的事情是从不同资源搜罗数据,以及我欠缺使用 anaconda 进行非缺省安装的经验。

—— 切记要首先在一个显示上器测试你的光盘,因为我们已经停用媒体检查。

—— VNC 服务器连接到查看器可能会需要一点时间(约 1-5 分钟)。

请享受。

Translation of revision 17

zh/TipsAndTricks/VncHeadlessInstall (last edited 2012-08-17 00:12:41 by TimothyLee)