Ubuntu安装方法分为五种,wubi安装、硬盘安装、u盘安装、刻盘安装、网络安装。
A. 要安装Ubuntu,当然先要下载iso镜像,Ubuntu安装镜像有以下几种(i386和amd64分别表示32位和64位系统)。
1.desktop镜像也称作livecd,按官方的话说就是可以试用Ubuntu而不改变计算机中的任何内容并可以安装的镜像
2.Alternate镜像,采用文本安装界面的镜像,有更多高级安装选项。
3.DVD镜像,带有附加语言包及更多软件包的镜像
4.mini镜像,用于网络安装的最小镜像,
5.server镜像,Ubuntu号称唯一内置开源云的服务器操作系统
6.Netbook,专门针对上网本进行优化的版本
7.KUbuntu(KDE桌面环境) XUbuntu(Xfce桌面环境)LUbuntu(LXDE桌面环境) Mythbuntu(媒体中心版)
EdUbuntu(教育发行版)Ubuntu Studio(多媒体制作版)Gobuntu(完全自由版)这些衍生版就不多说了
B.国内主要镜像下载地址及官方下载地址
1.搜狐镜像 http://mirrors.sohu.com/Ubuntu-releases/
2.网易镜像 http://mirrors.163.com/Ubuntu-releases/
3.官方镜像 http://cdimage.Ubuntu.com/releases/ dvd版的
Ubuntu 10.04 MD5值 (Lucid Lynx): April 2010 (Supported until April 2013/15)
md5 Hash | Version |
a54366aa72d6b576ee8fc0215f8a13b9 | Ubuntu-10.04-alternate-amd64.iso |
5b2dadacfd692b4f2d5c7cf034539262 | Ubuntu-10.04-alternate-i386.iso |
3e0f72becd63cad79bf784ac2b34b448 | Ubuntu-10.04-desktop-amd64.iso |
d044a2a0c8103fc3e5b7e18b0f7de1c8 | Ubuntu-10.04-desktop-i386.iso |
0b0e0d36050d9980ec995262eb9f2e6b | Ubuntu-10.04-netbook-armel+dove.img |
9e0d6ac7b69bb7912d49369a6807e39d | Ubuntu-10.04-netbook-armel+imx51.img |
712277c7868ab374c4d3c73cff1d95cb | Ubuntu-10.04-netbook-i386.iso |
8ee25c78f4c66610b6872a05ee9ad81b | Ubuntu-10.04-server-amd64.iso |
15342636441181f7a19c65984b44e24c | Ubuntu-10.04-server-i386.iso |
e81f931b1de017520f6d4aa4f78c5c8b | wubi.exe |
f79cede2a3cb74c6d9e028a2bcfc2e28 | kUbuntu-10.04-alternate-amd64.iso |
8def8b39aceae8e27fdcf2af107991cb | kUbuntu-10.04-alternate-i386.iso |
5b256bf515ae49749ac03a1af9d407c0 | kUbuntu-10.04-desktop-amd64.iso |
0ef722fd6b348e9dcf03812d071d68ba | kUbuntu-10.04-desktop-i386.iso |
40972633cea6c8d38ff26dade3eec51e | kUbuntu-10.04-netbook-i386.iso |
d1d2cedc4fdddc9529c8216ecb29e26f | edUbuntu-10.04-dvd-amd64.iso |
5eccab9d5956956c3dc28d5a6c4a2e69 | edUbuntu-10.04-dvd-i386.iso |
a60a2c8e3cf4cb20ba9ca4339bea92cb | xUbuntu-10.04-alternate-amd64.iso |
62b06b14573c2fc5b2bf5a526da15e65 | xUbuntu-10.04-alternate-i386.iso |
49d29d11c3eb51f862641a934c86dd79 | xUbuntu-10.04-desktop-amd64.iso |
7f064bc012025a5307ef6d81b0bc4c87 | xUbuntu-10.04-desktop-i386.iso |
C.安装Ubuntu常用工具软件下载
grub4dos系统引导软件 http://www.linuxidc.com/Linux/2009-01/18027.htm
MD5校验工具WinMD5 1.2 简体中文版 http://www.idcfree.com/index.php/md5-winmd5-1-2/
Ubuntu安装之 wubi安装
A.使用虚拟光驱来进行wubi安装
1.先下载desktop版镜像,虚拟光驱软件daemon tools lite
2.安装虚拟光驱软件,安装好后要重启。用虚拟光驱装载desktop镜像
3.双击wubi,选择第二项 在windows中安装,就进入了有六个选项的对话框
4.因为fat32格式不支持大于4G的单个文件,安装过程时间要长点,
所以目标驱动器最好选ntfs格式的.
5.输入口令 ,Ubuntu是区分大小写的,记住拔掉网线 开始安装。
6.程序复制光盘内文件到C盘的Ubuntu目录下,完成后可重启。
7.重启后选 Ubuntu ,安装程序会自动完成安装并重启。
8.插回网线,再次选Ubuntu, 选择账号,输入密码即可进入Ubuntu
9.在控制面板-添加或删除程序下可卸载 Ubuntu
B.使用winrar或7zip解压缩软件来进行wubi安装
1.从desktop版镜像中只提取wubi文件,不要全部解压缩。
2.将desktop镜像和wubi两个文件放在同一个文件夹或者根目录下。
3.双击wubi,直接就进入有六个选项的对话框
4.因为fat32格式不支持大于4G的单个文件,安装过程时间要长点,所以目标驱动器最好选ntfs格式的.
5.输入口令 ,ubuntu是区分大小写的,记住拔掉网线 开始安装。
6.程序复制光盘内文件到C盘的ubuntu目录下,完成后可重启。
7.重启后选 Ubuntu ,安装程序会自动完成安装并重启。
8.插回网线,再次选Ubuntu, 选择账号,输入密码即可进入ubuntu
9.在控制面板-添加或删除程序下可卸载 ubuntu
ps 如果以上安装方法失败,可以试下将目标驱动器的卷标改为英文,
对目标驱动器进行磁盘查错扫描(右键目标驱动器-属性-工具-查错)
Ubuntu安装之硬盘安装
A.使用虚拟光驱和desktop版镜像来进行硬盘安装
1.先下载desktop版镜像,虚拟光驱软件daemon tools lite免费版
2.安装虚拟光驱软件,安装好后要重启。用虚拟光驱装载desktop镜像
3.双击wubi,选择第一项 演示和完全安装 ,
4.再选择 帮助我从光盘启动 ,点 完成。
5.出现 安装光盘启动帮助程序 ,点 安装 。
6.程序复制光盘内文件到C盘的ubuntu目录下,完成后不要立即重启。
7.用写字板或记事本打开C:\ubuntu\install\boot\grub目录下的grub.cfg文件。
8.在iso-scan/filename=的后面都添加 /ubuntu/install/installation.iso (如果有就不要加了)
10.04版要全部添加iso-scan/filename= /ubuntu/install/installation.iso
保存文件,然后重启电脑。 举例如下
代码:
menuentry “Demo mode” {
linux /ubuntu/install/boot/vmlinuz iso-scan/filename=/ubuntu/install/installation.iso quiet splash boot=casper ro debian-installer/locale=zh_CN.UTF-8 console-setup/layoutcode=us console-setup/variantcode= — rootflags=syncio
initrd /ubuntu/install/boot/initrd.lz
}
9.选择Ubuntu,倒计时按ESC键,有五种安装模式,这里我选Demo mode也就是livecd模式。
这个模式下你可以先试用测试ubuntu再决定是否安装。
10.进入后先按ctrl+alt+F2 ,输入sudo umount -l /isodevice ,再按 ctrl+alt+F7返回
然后双击安装图标就可以开始安装了。
11.安装完成后重启,在ubuntu图标出现时,系统提示要按回车.
12.在控制面板-添加或删除程序下可卸载 ubuntu的安装程序,不卸载也没关系。
13安装完成后无windows选项的 在终端输入
代码:
sudo update-grub
B.使用grub4dos和desktop版镜像来进行硬盘安装
1.先下载desktop版镜像,grub4dos软件。(以ubuntu-10.04-desktop-i386.iso为例)
2.在下载好的ISO镜像中,casper文件夹下,找到vmlinuz、initrd.lz解压,并复制到C盘根目录下,
把ISO镜像也复制到C盘根目录下(也可以是其他盘根目录下)。
3.解压grub4dos软件,将目录中的grldr menu.lst两个文件复制到C盘根目录下。用写字板或记事本打开menu.lst文件,
删除所有内容,复制下面的内容粘贴到menu.lst文件。
代码:
title Install Ubuntu 10.04
find –set-root /vmlinuz
kernel /vmlinuz boot=casper iso-scan/filename=/ubuntu-10.04-desktop-i386.iso ro quiet splash locale=zh_CN.UTF-8
initrd /initrd.lz
4.在XP系统下,右击我的电脑-属性-高级-启动和恢复故障——设置——编辑 即可编辑boot.ini文件
修改boot.ini 在最后加一行 C:\grldr=”Install Ubuntu”
vista或win7下添加 grub4dos 启动项请看此方法
viewtopic.php?f=139&t=202027
win7前有隐藏分区的添加 grub4dos 启动项请看此方法
viewtopic.php?f=77&t=226399&start=0
5.重启 选Install Ubuntu回车进入,出现Install Ubuntu 10.04按回车,进入安装界面,先按ctrl+alt+F2 ,
输入sudo umount -l /isodevice ,再按 ctrl+alt+F7返回。然后双击安装图标就可以开始安装了。
6.安装完成后重启,在ubuntu图标出现时,系统提示要按回车。
7.由于ISO 镜像放在C盘造成默认安装完成后无windows选项的(ISO镜像放在其他盘根目录无此现象),在终端输入
代码:
sudo update-grub
C.使用grub4dos和Alternate镜像来进行硬盘安装
1.先下载Alternate版镜像,grub4dos软件,把ISO镜像复制到C盘根目录下(也可以是其他盘根目录下)。(以ubuntu-10.04-alternate-i386.iso 为例)
2.下载http://mirrors.163.com/ubuntu/dists/lucid/main/installer-i386/current/images/hd-media/目录下的
initrd.gz、vmlinuz , 并复制到C盘根目录下。
3.解压grub4dos软件,将目录中的grldr menu.lst两个文件复制到C盘根目录下。用写字板或记事本打开menu.lst文件,
删除所有内容,复制下面的内容粘贴到menu.lst文件。
代码:
title Install Ubuntu 10.04
find –set-root /vmlinuz
kernel /vmlinuz
initrd /initrd.gz
4.在XP系统下,右击我的电脑-属性-高级-启动和恢复故障——设置——编辑 即可编辑boot.ini文件
修改boot.ini 在最后加一行 C:\grldr=”Install Ubuntu”
vista或win7下添加 grub4dos 启动项请看此方法
viewtopic.php?f=139&t=202027
win7前有隐藏分区的添加 grub4dos 启动项请看此方法
viewtopic.php?f=77&t=226399&start=0
5.重启选Install Ubuntu,出现Install Ubuntu 10.04按回车,就进入文本安装界面了,具体过程这里就不详述了。
6..由于ISO 镜像放在C盘造成默认安装完成后无windows选项的(ISO镜像放在其他盘根目录无此现象),在终端输入
代码:
sudo update-grub
ps 1. 通过路由器上网的用户安装Ubuntu系统时最好断网安装,不然安装过程很慢。
2. 对于品牌机尤其是笔记本用户以上方法安装失败,可能需要调整bios设置尤其是SATA、ACPI这部分。
Ubuntu安装之U盘安装
U盘安装有二种意思,第一种意思是做成LiveUSB作为安装工具使用,
第二种意思是把ubuntu系统装在U盘,使用以上所述安装到硬盘一样的方法,就不详细说了.
首先要确定你的主板支持USB启动,常用USB启动模式有ZIP、HDD。 ZIP模式是指把U盘模拟成ZIP驱动器模式,
HDD模式是指把U盘模拟成硬盘模式。
A.使用unetbootin制作LiveUSB
1.下载desktop版镜像和unetbootin软件
unetbootin下载地址 http://www.linuxidc.com/Linux/2010-03/25036.htm
2.插入容量至少为1G的U 盘,备份一下U盘上的文件,U盘格式化成FAT32格式,不要选择快速格式化。
运行unetbootin,选第二个选项 光盘镜像,选择desktop版镜像所在的路径。
3.类型为 USB驱动器 ,确认 驱动器盘符是否正确,点 确定,完成后重启。
4.进入BIOS选择USB HDD为第一启动顺序,保存并退出BIOS。
不同的BIOS有不同的进入方法,通常会在开机画面有提示 一般按 DEL, F1, F2, F10, F12, Ctrl+Esc,
Alt+Esc, Ctrl+Alt+Esc,Ctrl+Alt+Enter 具体查看主板说明书。有些主板在启动时一般按ESC、TAB 、
F12键可出现一个临时启动项目选择菜单,使用方向键选择USB-HDD临时启动。
5.重启电脑即可启动LIVEUSB,具体安装过程参考论坛图文安装教程
B.使用UltraISO制作LiveUSB
http://www.linuxidc.com/Linux/2010-03/25065.htm
当优盘启动失败时,一些可能有用的小技巧
1. 换成其他的工作模式ZIP或HDD。
2. 主板BIOS设置为出厂默认设置。
3. 查看U盘主分区是否激活。
C.把ubuntu系统装在U盘,使用以上所述安装到硬盘一样的方法,就不详细说了.
注意下安装过程有个高级选项,在高级选项里选择“安装启动引导器的设备”是U盘即可。
Ubuntu安装之刻盘安装
Ubuntu半年发布一个版本,硬盘安装 优盘安装也挺方便,绝大多数情况下都不用刻盘。
不过需要光盘安装的朋友还是有的,而且即将发布的10.04版desktop版有3年支持。
要光盘启动引导安装,需要进入bios进行设置 不同的BIOS有不同的进入方法,
通常会在开机画面有提示 一般按 DEL, F1, F2, F10, F12, Ctrl+Esc, Alt+Esc, Ctrl+Alt+Esc,
Ctrl+Alt+Enter 具体查看主板说明书
有些主板在启动时一般按ESC TAB F12键可出现一个启动项目选择菜单,使用方向键选择CDROM临时以光驱启动
接下来的具体安装过程参考本站(LinuxIDC.com)图文安装教程。
Ubuntu安装之网络安装
网络安装有两种意思,一种是通过路由器上网连接软件源安装Ubuntu,另一种意思是局域网PXE方式安装Ubuntu 。
A.通过路由上网连接软件源安装Ubuntu,这种安装方式又可分两种方法。
以Ubuntu 10.04 i386版本为例,其他版本地址类推。
1.通过使用两个文件initrd.gz、linux和grub4dos来安装Ubuntu
1.1 下载initrd.gz、linux并复制到C盘根目录下
http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/current/images/netboot/ubuntu-installer/i386/
1.2 解压grub4dos软件,将目录中的grldr menu.lst两个文件复制到C盘根目录下。用写字板或记事本打开menu.lst文件,
删除所有内容,复制下面的内容粘贴到menu.lst文件。
title Install Ubuntu 10.04
find –set-root /linux
kernel /linux
initrd /initrd.gz
1.3 在XP系统下,右击我的电脑-属性-高级-启动和恢复故障——设置——编辑 即可编辑boot.ini文件
修改boot.ini 在最后加一行 C:\grldr=”Install Ubuntu”
vista或win7下添加 grub4dos 启动项请看此方法
原本装了XP(装在C盘)和Ubuntu 8.04双系统的,看到Win7公测了,将XP删了,装了Win7(没有分Win7的独立启动分区),结果发现Ubuntu 8.04不能引导了。
解决方法:
1、下载最新的grub4dos,我下的是0.4.4版。
2、解压,将grldr和grldr.mbr这两个文件复制到C盘根目录下。
3、建立boot.ini文件。
代码:
[boot loader]
[operating systems]
c:\grldr.mbr=”Ubuntu 8.04″
grldr.mbr会自动去找ubuntu的。
该方法在我的电脑上可行。
注:在vista或win7下必须要引号。
PS:谢谢各位。文章标题已改,原标题为“Windows7和Ubuntu 8.04双启动成功(超简单的)”
至于一定要引号,这个我没有留意,因为XP下的boot.ini文件里是有引号的,所以就沿用了这个格式。谢谢billbear提醒!
PS:本法和软改 bios 有冲突,请慎用!
win7前有隐藏分区的添加 grub4dos 启动项请看此方法
装上了win7 想装ubuntu 但是win7和xp不同
安装时一直提示 ERRO:FILE IS NOT FOUND
出现 ERRO:FILE IS NOT FOUND的情况是找不到vmlinuz 文件 因为 有些 win7 安装时会出现一个100M左右的分区
所以C盘不一定是在(hd0,0)上~
虽然windows 7 还没有正式发布,但是相信很多人已经用上windows 7 了。今天介绍一下安装windows 7后如何继续硬盘安装ubuntu的方法(以9.04为例)。
首先安装好windows 7(废话一句呵呵)。
装过windows 7的朋友都知道,安装windows 7的时候 ,如果选择建立新的分区,那么在C盘前面还会产生一个隐藏分区。
如果你的电脑上有这个分区的话,进入windows 7的磁盘管理工具,给这个隐藏分区分配一个盘符。
然后去下载Grub4dos 0.4.4。解压出来后,把grldr、grldr.mbr、grub.exe(注意一定要有grldr.mbr,XP就不用了,如果是vista、 win7就一定要有grldr.mbr,切记!)丢到隐藏分区去,然后写一个menu.lst,内容如下
title Install Ubuntu 9.04
find –set-root /vmlinuz
kernel /vmlinuz boot=casper iso-scan/filename=/ubuntu-9.04-desktop-amd64.iso ro quiet splash locale=zh_CN.UTF-8
initrd /initrd.gz
注意红字部分与你的iso文件名一致即可。同样放进隐藏分区。
再写一个boot.ini 文件
内如如下:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=”Microsoft Windows XP Professional” /noexecute=optin /fastdetect
c:\grldr.mbr=”grub”
注意是grldr.mbr,而不是grldr,这与XP是不同的。
而蓝字部分完全可以不写。
这个boot.ini同样丢进隐藏分区去。
完成以上步骤之后,记得把隐藏分区的盘符收回!一定要做,否则可能导致系统无法引导。
后面的步骤与XP时代一致。
Ubuntu 9.04光盘镜像文件到C盘根目录
复制镜像文件中casper目录下的initrd.gz和vmlinuz到C盘根目录
重启即可进行硬盘安装了。
安装完重启后会发现无法进入Windows 7,需要我们进行如下步骤:
Ubuntu,打开终端,输入:sudo gedit /boot/grub/menu.lst
加入如下代码:
title Microsoft Windows 7
root (hd0,0)
makeactive
chainloader +1
还不行 试试 第二行改成root(hd0,1)
一般就OK了
大功告成。
其实windows 7的这个隐藏分区是可以不生成的,即安装时不要选择新建分区(删除原有的XP分区后,直接格式化并安装,不要点新建那个按钮,就不会生成这个隐藏分区了)。
如果你的windows 7 没有这个隐藏分区就更好办了。
把以上原本放进隐藏分区的东西(grldr、grldr.mbr、grub.exe、menu.lst boot.ini)统统丢进C盘即可。
虽然vista和windows 7 不再采用 boot.ini引导,但是对于活动分区的boot.ini 还是可以识别的。
1.4 重启 选Install Ubuntu回车进入,出现Install Ubuntu 10.04按回车,进入安装界面。
2. 下载mini.iso ,刻录成光盘,然后以光盘启动进行安装。具体过程不详细说了。
B.局域网PXE方式安装Ubuntu
要求主板BIOS要能支持PXE启动,Linux内核能够驱动你的网卡,如果使用了路由器,禁用它的dhcp功能。
需要架设一台DHCP、TPFP服务器,默认的PXE安装只能安装alternate版本。
1. windows系统使用TFTPD32做服务器进行的网络安装
在Windows下网络安装Ubuntu
本文档介绍在没有TFTP和DHCP这类LINUX服务器时通过网络安装UBUNTU。对于我这样的LINUX新手,这种方法真的很简单。
概要
想在一台没有移动存储的电脑上面安装UBUNTU,而这台电脑的BIOS要能支持PXE启动。如果你有一个软驱,也可以做一个PXE启动盘,这样即时你的网卡不支持PXE也可以通过网络来启动。启动盘文件可以在这里下载: [1] ,文件名叫network_boot_floppy+cd+hd_540.zip。微软也有PXE启动盘,在Windows 2003企业版系统分区的\windows\system32\dllcache或者是\winnt\ServicePackFiles\i386下的一个叫rbfg.exe的文件。
需求
- 能上网的Windows电脑
- Tftpd32.exe (Windows下的TFTP/DHCP服务器程序)
- Ubuntu网络启动镜像
- 7-Zip,用来解压镜像 (Available Here)
打包文件 Breezy netboot kit (386) Breezy netboot kit (amd64) 单个文件 tftpd32.exe Mirror 1 Hardy Netboot Image (i386) Dapper Netboot Image (i386) Dapper Netboot Image (amd64) Breezy Netboot Image (i386) Breezy Netboot Image (amd64) Hoary Netboot Image (i386) Hoary Netboot Image (amd64)
实施 (Breezy Style)
- 如果你下载的是我提供的7z文件,直接跳到第六步。
- 在Windows下新建cb文件夹
- 把Tftpd32.exe和支持文件放到cb文件夹中
- 将netboot.tar.gz解压到cb下的netboot文件夹中
- 把..\cb\netboot\ubuntu-installer\i386\ 或者 ..\cb\netboot\ubuntu-installer\amd64\ 下的”pxelinux.cfg”, “linux”, and “pxelinux.0”. 复制到 ..\cb\netboot\下面
- 运行Tftpd32.exe并切换到DHCP项
- 在default router中填写网关IP,比如192.168.1.1
- 在ip pool starting address中填写起始IP,比如192.168.1.2
- Size of pool中填写IP池大小,比如10
- 如果你的网络是192.168.1.1这样的,Mask就写255.255.255.0
- 设置Bootfile为pxelinux.0文件路径,比如\netboot\pxelinux.0
- 设置WINS/DNS server为网关IP
- 留空Domain Name,必要时再改
- 点”Save” 然后单击 “settings”
- 勾选以下选项,其余默认即可
- PXE Compatibility
- translate unix file names
- allow / as virtual root
10. 点击 “ok”, 现在局域网内所有支持PXE的机器都能启动了。 一些bugs: 在选择apt-get源时, 如果选的是united states,安装程序会尝试 “http://.archive.ubuntu.com”而不是”http://archive.ubuntu.com”, 连接当然不会成功.你可以尝试选择UK镜像并选择”archive.ubuntu.com”。 AMD64的镜像会因某些原因使用”edubuntu-desktop”安装包而不是”ubuntu-desktop”安装包。我的解决方法是先用服务器安装breezy,然后再用apt-get来安装ubuntu-desktop包。 有时基础系统的安装好像失败了,直接重新安装而不要删掉原来的包,这一般是网络连接失败造成的。
2. Ubuntu系统作服务器进行的网络安装
Ubuntu无盘工作站安装详细步骤
【开宗明义】
首先,请注意本文所述的“无盘工作站”与“无盘终端”的异同:
相同之处是二者的客户端都没有磁盘。
相异之处是,“无盘终端”完全使用服务器端的资源(CPU和磁盘),与直接登录在服务器控制台差别不大,所以适用于客户端是极其老旧的机器,因为,即使用较新的机器则其运算能力同样无法发挥、从而造成资源浪费。
而“无盘工作站”的客户端在登录阶段,将服务器端作为登录服务器(tftp和dhcp),在登录完成后,则主要是把服务器端作为nfs服务器提供磁盘空间,此磁盘空间映射为客户机端的根目录,随后所有的运算工作在客户机端完成、并不占用服务器的CPU资源。所以,“无盘工作站”较适合当今性能中等以上的客户端使用,以平衡服务器、客户机的负载。
从实现的方式来说,Ubuntu自带的ltsp服务属于“无盘终端”,虽然设置简易,但并不适合我们遇到的大多数情况:如今谁还会用一堆256M的586机器去组网呢?有鉴于此,Ubuntu社区曾经试图调和两者,提出了“胖客户机”的概念,是从基本的ltsp延伸出来,详情请见https://help.ubuntu.com/community/UbuntuLTSP/LTSPFatClients
但是说老实话,上述基于ltsp的“无盘工作站”是毫无必要地自找麻烦,比如说里面用到了openLDAP,还要修改一堆脚本,实际操作的难度可想而知,所以:
【注意】
本文并不讨论ltsp“无盘终端”或“ltsp胖客户机”,而是基于Linux系统固有的能力,建构一个可以适用于所有Linux发行版的“无盘工作站”安装方法,而Ubuntu只是作为一个实例使用。
【正文前提示】
从现在开始,请不要再去回顾上述的三个链接,以免混乱。本文已经包含了上述的所有有效内容。
【正文第一部分】服务器端(机器名为ubuntu)准备
首先,本文中的服务器端名为ubuntu(IP是192.168.1.88),而客户机端名为netfs,和“天使之翼”文中的命名方法相同,以方便拷贝相关命令和内容。以下显示为root@ubuntu的即指在服务器端操作,而显示为root@netfs的即指在客户机端操作。
【正文第一部分-1】服务器端三大服务
服务器端需准备tftp、dhcp、nfs这三个服务,其过程如下:
(以下全部来自“天使之翼”原文,仅加了必要的注解)
第一步 安装tftp服务器
1 安装
root@ubuntu:/# apt-get install tftpd-hpa
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
Reading state information… 完成
下列新软件包将被安装:
tftpd-hpa
共升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
需要下载 34.0kB 的软件包。
解压缩后会消耗掉 152kB 的额外空间。
获取:1 http://Ubuntu.cn99.com hardy/main tftpd-hpa 0.43-1.1ubuntu1 [34.0kB]
下载 34.0kB,耗时 5s (5921B/s)
正在预设定软件包 …
选中了曾被取消选择的软件包 tftpd-hpa。
(正在读取数据库 … 系统当前总共安装有 112536 个文件和目录。)
正在解压缩 tftpd-hpa (从 …/tftpd-hpa_0.43-1.1ubuntu1_i386.deb) …
正在设置 tftpd-hpa (0.43-1.1ubuntu1) …
root@ubuntu:/#
2 设置tftpd
root@ubuntu:~# nano /etc/default/tftpd-hpa
#Defaults for tftpd-hpa
RUN_DAEMON=”yes”
#上面这句表示启动守护进程,tftpd工作
OPTIONS=”-l -s /var/lib/tftpboot”
#上面这句表示tftp客户端能取得的文件所存放的位置
3 启动服务
root@ubuntu:/# /etc/init.d/tftpd-hpa start
Starting HPA’s tftpd: in.tftpd.
root@ubuntu:/# ps aux|grep tftp
root 26853 0.0 0.1 2196 288 ? Ss 17:26 0:00 /usr/sbin/in.tftpd -l -s /var/lib/tftpboot
root 26862 0.0 0.2 3180 748 pts/1 R+ 17:27 0:00 grep tftp
root@ubuntu:/#
4 查看服务是否开始工作
root@ubuntu:/# netstat -pna|grep tft
udp 0 0 0.0.0.0:69 0.0.0.0:* 26853/in.tftpd
unix 2 [ ] DGRAM 164700 26853/in.tftpd
root@ubuntu:/#
第二步 安装dhcp服务器
1 服务器环境
root@ubuntu:/# uname -a
Linux ubuntu 2.6.22-14-generic #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686 GNU/Linux
root@ubuntu:/#
2 安装命令
root@ubuntu:/# apt-get install dhcp3-server
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
Reading state information… 完成
dhcp3-server 已经是最新的版本了。
共升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
3 设置dhcpd工作接口
root@ubuntu:~# nano /etc/default/dhcp3-server
# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/dhcp3-server by the maintainer scripts
#
# This is a POSIX shell fragment
#
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. “eth0 eth1”.
# 下面这句用来定义工作接口,如果是多个就中间空格
# 比如INTERFACES=”eth0 eth1 eth2″
INTERFACES=”eth0″
(注*上面一行指明服务器端通过哪一块网卡提供dhcp服务)
4 主要设置
root@ubuntu:~# nano /etc/dhcp3/dhcpd.conf
#
# Sample configuration file for ISC dhcpd for Debian
#
# $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $
#
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages (‘none’, since DHCP v2 didn’t
# have support for DDNS.)
ddns-update-style none;
#下面是全局设置,这里定义的信息全dhcp服务器生效
#我一般注释掉了,下面可以分不同的子网进行设置
# option definitions common to all supported networks…
#option domain-name “apt-get.cn”;
#option domain-name-servers 202.103.0.117, 202.103.24.68;
#default-lease-time 600;
#max-lease-time 7200;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
#subnet 10.152.187.0 netmask 255.255.255.0 {
#}
# This is a very basic subnet declaration.
#subnet 10.254.239.0 netmask 255.255.255.224 {
# range 10.254.239.10 10.254.239.20;
# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
#}
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don’t really recommend.
#subnet 10.254.239.32 netmask 255.255.255.224 {
# range dynamic-bootp 10.254.239.40 10.254.239.60;
# option broadcast-address 10.254.239.31;
# option routers rtr-239-32-1.example.org;
#}
# A slightly different configuration for an internal subnet.
#subnet设置一个子网192.168.1.0/24
#range定义可以分配出去的地址为1.50到1.70
#option domain-name-servers定义dns为202.103.0.117等三个,这里注意每个之间要有个逗号
#option domain-name定义域名称
#option routers定义网关地址
#broadcast-address定义广播地址
#default-lease-time默认租约时间
#max-lease-time 最大租约时间
(注*下面这一段是生效部分,请按照实际情况修改)
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.70;
(注*上行的动态IP范围请不要与系统中已有的dhcp服务器冲突,比如无线路由器上自带的dhcp,但是也不需要把原有的关掉,只要范围不冲突就可以了,因为客户端在启动时会自动使用服务器端的dhcp所分配的地址、而不使用无线路由器上分配的)
option domain-name-servers 202.103.0.117,202.103.24.68,202.103.150.44;
option domain-name “apt-get.cn”;
(注*上行的domain-name在联网系统里会起作用,所以请选择一个你肯定不会去访问的名字、即使你并不知道它是否被注册成为域名)
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 864000;
max-lease-time 86400000;
filename “pxelinux.0”;
(注*上面这一行是要手工加的很关键的信息,实际就是启动无盘工作站网卡的方式,而其中的pxelinux.0其实是一个文件名,下文将谈到这个文件如何生成)
}
# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
#host passacaglia {
# hardware ethernet 0:0:c0:5d:bd:95;
# filename “vmunix.passacaglia”;
# server-name “toccata.fugue.com”;
#}
# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#host fantasia {
# hardware ethernet 08:00:07:26:c0:a5;
# fixed-address fantasia.fugue.com;
#}
# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
#class “foo” {
# match if substring (option vendor-class-identifier, 0, 4) = “SUNW”;
#}
#shared-network 224-29 {
# subnet 10.17.224.0 netmask 255.255.255.0 {
# option routers rtr-224.example.org;
# }
# subnet 10.0.29.0 netmask 255.255.255.0 {
# option routers rtr-29.example.org;
# }
# pool {
# allow members of “foo”;
# range 10.17.224.10 10.17.224.250;
# }
# pool {
# deny members of “foo”;
# range 10.0.29.10 10.0.29.230;
# }
#}
5 启动服务器
root@ubuntu:/# /etc/init.d/dhcp3-server start
* Starting DHCP server dhcpd3 [ OK ]
root@ubuntu:/#
6 查看服务是否已经正常监听
root@ubuntu:/# netstat -aunp|grep dhcp
udp 0 0 0.0.0.0:67 0.0.0.0:* 23011/dhcpd3
已经在67号udp口上开始监听了
第三步 安装配置nfs服务器
1 安装
root@ubuntu:/# apt-get install nfs-common nfs-kernel-server nfs-client
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
Reading state information… 完成
nfs-common 已经是最新的版本了。
nfs-kernel-server 已经是最新的版本了。
注意,我选了 nfs-common 而非 nfs-client
nfs-common 已经是最新的版本了。
共升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
2 配置
root@ubuntu:~# nano /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync) hostname2(ro,sync)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt)
# /srv/nfs4/homes gss/krb5i(rw,sync)
/home/cache/netboot 192.168.1.0/24(rw,no_root_squash,sync)
(注*上面这一行是服务器端提供的磁盘空间的位置,可以是服务器的任一目录,建议将一个单独的磁盘分区挂在这个目录下。但是请注意:这个服务器端的/home/cache/netboot并不是将来客户端的虚拟根目录,因为在/home/cache/netboot下面将会有一个名为root的子目录,而这个/home/cache/netboot/root才是本文中的客户端的虚拟根目录,在启动完成后、实际运行过程中,工作就仅局限在/home/cache/netboot/root中了。建立root的问题下文将会讲到)
3 启动nfs或者重新加载
启动nfs
root@ubuntu:/# /etc/init.d/nfs-kernel-server start
* Exporting directories for NFS kernel daemon…
exportfs: /etc/exports [1]: Neither ‘subtree_check’ or ‘no_subtree_check’ specified for export “192.168.1.0/24:/home/cache/netboot”.
Assuming default behaviour (‘no_subtree_check’).
NOTE: this default has changed since nfs-utils version 1.0.x
…done.
* Starting NFS kernel daemon
…done.
如果是修改了/etc/exports 配置文件,不需要重新启动nfs服务器,只需要刷新一下,命令如下
root@ubuntu:/# exportfs -r
exportfs: /etc/exports [1]: Neither ‘subtree_check’ or ‘no_subtree_check’ specified for export “192.168.1.0/24:/home/cache/netboot”.
Assuming default behaviour (‘no_subtree_check’).
NOTE: this default has changed since nfs-utils version 1.0.x
【正文第一部分-2】服务器端其他必要准备
服务器端还需准备上文提到的pxelinux.0(也即远程启动客户端网卡的核心模块),其过程如下:
(以下全部来自“天使之翼”原文,仅加了必要的注解)
第四步 安装syslinux
1 安装syslinux,其实也就是为了要里面的pxelinux部分的文件
root@ubuntu:/# apt-get install syslinux
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
Reading state information… 完成
syslinux 已经是最新的版本了。
共升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
2 拷贝pxelinux.0文件到tftpboot目录
root@ubuntu:/# cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/
root@ubuntu:/#
(注*本文中将会涉及两个不同的tftpboot目录,这里是其中的第一个,请不要和下文的/home/cache/netboot/tftpboot混淆)
3 在tftpboot目录建立pxelinux.cfg目录,然后在pxelinux.cfg目录下建立default文件
也可以是以某个ip地址为文件名称
root@ubuntu:/# nano /var/lib/tftpboot/pxelinux.cfg/default
(注*所谓default其实是假设系统中只有一台客户端时的简易操作,如果有多台客户端,则需建立多个文件、以客户端各自的IP地址为文件名。服务器也就是通过这种方法来区别不同的客户端,以导入各自不同的虚拟根目录)
DEFAULT ubuntu
LABEL ubuntu
kernel linux
append initrd=initrd.nfs root=/dev/nfs nfsroot=192.168.1.88:/home/cache/netboot/root ip=dhcp rw
(注*注意这一行出现的/home/cache/netboot/root就是上文说到的default客户端将来的虚拟根目录在服务器端上的位置,而非其上级的/home/cache/netboot。当有多个客户端时,其各自的以IP命名的文件中,这一行的目录路径应该是不同的、以此来区别各自独立的虚拟根目录)
PROMPT 1
TIMEOUT 3
【正文第二部分】有盘客户机端(机器名为netfs)安装
按照“天使之翼”的方法,如果客户机端原本是有磁盘的话,那么服务器端的准备工作到上文为止已经准备好了(当然并不意味着不再需要到服务器端上去操作,只是下面到服务器端的操作实际上也是为了准备客户端的文件)。如果您是这种情况,那么请从这里接着阅读、直到完成。
(如果您的情况是和我一样,需要安装一台自始就没有磁盘的客户机端,那么请跳到【正文第三部分】阅读而不要停留于此,否则只会徒增混乱)
在客户端有盘的条件下,整体思路是:在这个磁盘上安装一个适合客户端硬件平台使用的完整的ubuntu系统,然后将根目录整体打包(当然经过一些必要的处理、屏蔽掉某些目录、修改某些文件,下文将详述),再拷贝到服务器端为客户端准备的虚拟根目录下(对于default客户端来说就是/home/cache/netboot/root),然后就可以取下客户端的磁盘,使之作为一个真正的无盘工作站从网络启动。其过程如下:
(以下全部来自“天使之翼”原文,仅加了必要的注解)
第五步 安装一个新的将来用来在无盘机器上运行的linux,我这里安装的是一个ubuntu 7的版本
(注*这里指的是在客户端磁盘上进行一次传统的安装)
1 安装
注意的是
1> 安装好nfs的client
root@netfs:~# apt-get install nfs-client
Reading package lists… Done
Building dependency tree
Reading state information… Done
Note, selecting nfs-common instead of nfs-client
nfs-common is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 14 not upgraded.
2> ip分配需要修改为手动,因为开机器的时候已经分配了ip
(注*这里指的是客户端虽然在网络启动阶段已经从服务器端的dhcp那里获得了一个动态IP,但是当他将来进入自己的虚拟根目录时,前面的动态IP将不再起作用,而需要用interfaces文件定义一个在正常工作阶段使用的IP,所以这一步需要在拔掉磁盘之前先改动好,下文的host、hostname、fstab、mtab的修改其原理同此)
root@netfs:~# nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet manual
3> 编辑fstab文件,把除了proc外的所有都注释掉,udev会自动完成这个工作
(注*因为客户端无盘运行时的挂载当然与现在有盘时的方式不同,鉴于客户端已经从服务器端取得了/home/cache/netboot/root作为自己的根目录,所以另外需要的只剩一个proc)
4> 编辑udev的rules中关于网络借口记录的文件,去掉已经定义了的网络接口,否则无盘启动了有个报错
root@netfs:~# :>/etc/udev/rules.d/70-persistent-net.rules
(注*这一步没有理由,只是“天使之翼”的经验之谈,请照做就是)
2 安装initramfs-tools
(注*这是在网络启动阶段用到的最小系统工具,关键是下文的将启动方式改为nfs,照做就是)
root@netfs:~# apt-get install initramfs-tools
Reading package lists… Done
Building dependency tree
Reading state information… Done
initramfs-tools is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 14 not upgraded.
root@netfs:~#
3 编辑initramfs.conf把BOOT=local改为BOOT=nfs
#
# initramfs.conf
# Configuration file for mkinitramfs.
#
#
# MODULES: [ most | netboot | dep | list ]
#
# most – Add all framebuffer, acpi, filesystem, and harddrive drivers.
#
# dep – Try and guess which modules to load.
#
# netboot – Add the basemodules, network modules, but skip block devices.
#
# list – Only include modules from the ‘additional modules’ list
#
MODULES=most
# BUSYBOX: [ y | n ]
#
# Use busybox if available.
#
BUSYBOX=y
#
# NFS Section of the config.
#
#
# BOOT: [ local | nfs ]
#
# local – Boot off of local media (harddrive, USB stick).
#
# nfs – Boot using an NFS drive as the root of the drive.
#
BOOT=nfs
#
# DEVICE: …
#
# Specify the network interface, like eth0
#
DEVICE=eth0
#
# NFSROOT: [ auto | HOST:MOUNT ]
#
NFSROOT=auto
4 创建支持nfs的initrd.img、vmlinuz文件
首先我们把nfs挂上来,创建的文件直接丢到nfs服务器上去
root@netfs:/# mkdir /netfs
root@netfs:/# mount -t nfs 192.168.1.88:/home/cache/netboot /netfs
建立两目录
root@netfs:/# cd /netfs/;mkdir root tftpboot
(注*这里不要看乱了,“天使之翼”的做法是在客户机端先挂载服务器端的/home/cache/netboot,然后在其下建立两个目录root和tftpboot,此处的操作后果实际都发生在服务器端的磁盘上,这里的root就是我一再强调的客户端将来的真正的虚拟根目录,而这里的tftpboot是本文涉及的第二个tftpboot,不同于服务器端/var/lib下面的那个tftpboot,至于为什么会有两个tftpboot我也没有深究)
创建支持nfs启动的initrd.img文件
root@netfs:/# mkinitramfs -o /netfs/tftpboot/initrd.nfs
拷贝内核到tftpboot目录
root@netfs:/# cp /boot/vmlinuz-2.6.24-16-generic /netfs/tftpboot/linux
(注*上面的两个文件initrd.nfs和linux其结果也都是生成在服务器端的/home/cache/netboot/tftpboot目录下,其作用类似于普通系统里的initrd.gz和vmlinuz,是启动整个系统所必须的两个文件。从这里也可以看出/home/cache/netboot下的两个子目录的分工情况:由tftpboot进行启动,然后交给root,后者就是客户机端实际工作的虚拟根目录)
5 打包ubuntu版本的/为tgz文件,先apt-get update一下,然后apt-get clean
一下,打包的时候请排除掉proc等目录
root@netfs:/etc# apt-get clean
root@netfs:/etc# apt-get autoclean
Reading package lists… Done
Building dependency tree
Reading state information… Done
#用下面的命令打包
root@netfs:/# tar zcvfp /netfs/root/netfs.tgz / –exclude=/sys/* –exclude=/netfs –exclude=mnt/* \
–exclude=/lost+found –exclude=/var/tmp/* —exclude=/proc/*
OK,打包完成了以后,关掉这个机器,到nfs服务器上那个机器去
(注*至此有盘的客户机端工作完成,可以拔掉磁盘)
第六步
1> 在nfs服务器上拷贝内核和initrd.img到到/var/lib/tfptboot/
root@ubuntu:~# cp /home/cache/netboot/tftpboot/* /var/lib/tftpboot/
(注*看似两个tftpboot里都需要启动文件initrd.nfs和linux,有谁知道是为什么吗?)
2> 把刚才压缩的netfs.tgz文件解压缩一份到
/home/cache/netboot/root/
(注*也就是把客户机端将来要用的整个系统拷贝到服务器端的对应虚拟根目录下)
root@ubuntu:/home/cache/netboot/root# ls -lh netfs.tgz
-rw-r–r– 1 root root 96M 2007-12-22 06:03 netfs.tgz
root@ubuntu:/home/cache/netboot/root# cp netfs.tgz /home/cache/
root@ubuntu:/home/cache/netboot/root#
root@ubuntu:/home/cache/netboot/root# tar zxvf netfs.tgz && rm -fr netfs.tgz
root@ubuntu:/home/cache/netboot/root# ls
bin dev home initrd.img media opt root srv tmp var
cdrom etc initrd lib mnt proc sbin sys usr vmlinuz
删除mtab文件
root@ubuntu:/# cd /home/cache/netboot/root/etc/
root@ubuntu:/home/cache/netboot/root/etc# rm mtab
root@ubuntu:/home/cache/netboot/root/etc#
(注*这个删除mtab的目的与上文的修改fstab大体相同,是不是因为客户机端自身还在运行的时候删不掉,所以才留到现在在服务器端做?)
第七步 设置一个客户机从网卡启动
当然你的机器一定要支持网络启动,并且网卡的驱动已经在内核里面了,如果没在,请重新编译内核,找到对应的网卡驱动,然后敲空格选择星号表示把驱动编译到内核里面
(注*现在的主板自带网卡大多数可以支持PXE启动,如果遇到网卡问题请自行寻找参考资料解决,本文不涉及该问题)
【正文第三部分】客户端从没有磁盘开始安装
从这里开始,是本人全新编写的部分,主要参考了“Ubuntu高地”一文中的简要描述,对该文没有讲明的一些细节,下文将着重进行补充。首先让我们回顾一下,在【正文第一部分】服务器端准备完成后,我们已经作了哪些工作:
1、服务器端已经运行了三大服务tftp、dhcp和nfs
2、PXE启动必须的pxelinux.0 已经生成并且放在服务器端var/lib/tftpboot里
3、与每个客户端对应的虚拟根目录位置信息已经在服务器端的/var/lib/tftpboot/pxelinux.cfg/这个目录下的对应文件里配置好
所以说,我们下面要做的,实际就是要在客户机端没有磁盘的情况下,在服务器端的为其已经准备好(即nfs服务已经export)的目录里,生成其可以使用的操作系统,体现为根目录下常见的bin、usr、home……文件结构。对应[正文第二部分]的有盘客户端安装的内容(未阅读该部分也无妨,见下列列表即可),这个系统里必须有:
1、能够作为nfs-client,因为启动后虚拟根目录需要从服务器端nfs出来
2、必须有initramfs-tools,并且initramfs.conf要修改为支持nfs启动
3、修改fstab、mtab、hosts、hostname、interfaces、udev里的rules以符合客户机端正常运行时的情况
以上三条体现于虚拟根目录下,也就是服务器端的/home/cache/netboot/root目录,但是别忘了还有与其平行的/home/cache/netboot/tftpboot下必须有:
4、启动操作系统的两个文件initrd.nfs和linux(是vmlinuz的改名)
所以,以下的工作就是围绕上述1—4这四个目标来做:
【正文第三部分-1】为无盘客户机端建立基本系统而在服务器端进行的工作
第一步 利用debootstrap生成一个基本的可登录系统
因为客户机端一片空白、且没有磁盘,所以这一步要在服务器端进行,目标是在/home/cache/netboot/root下生成一个最基本的可登录系统。首先:
root@ubuntu:/# cd /home/cache/netboot;mkdir root tftpboot创建两个目录
root@ubuntu:/#debootstrap —arch=i386 hardy /home/cache/netboot/root http://debian.nctu.edu.tw/ubuntu
(注意arch前面是连续两个-,而http://debian.nctu.edu.tw/ubuntu是我这里最快的源,也可以改成其他任何一个源)
该命令的结果是在/home/cache/netboot/root里面生成了一个可以字符登录的最基本的系统,该系统不依赖于任何特定的客户机硬件平台,只要是i386芯片的客户机端在接下来都可以登录进去。当然,如果是amd64的芯片,则在上述debootstrap命令后跟的就是—arch=amd64了。
经过检查发现,nfs-client和initramfs-tools的功能已经随着基本的系统而自然生成,下面只需修改/home/cache/netboot/root/etc/initramfs-tools/initramfs.conf:
# nfs – Boot using an NFS drive as the root of the drive.
#
BOOT=nfs
#
此时已经完成了我们四大目标中的1和2
第二步 修改几个重要的配置文件
/home/cache/netboot/root/etc/fstab文件修改成:
proc /proc proc defaults 0 0
192.168.1.88:/home/cache/netboot/root / nfs defaults,rw 0 0
(注意:与上文“天使之翼”只保留proc那一行不同,我在客户端将来的fstab里写明了要用到的nfs根目录,这样更保险)
/home/cache/netboot/root/etc/hosts文件修改成:
127.0.0.1 localhost
127.0.1.1 netfs
(注意:netfs是修改后的结果,在修改前这个位置实际是你现在所在的服务器的名字)
/home/cache/netboot/root/etc/hostname文件修改成:
netfs
(修改前这个位置实际也是你现在所在的服务器的名字ubuntu)
/home/cache/netboot/root/etc/network/interfaces文件修改成:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.28
netmask 255.255.255.0
gateway 192.168.1.1
(注意:与“天使之翼”不同的是我直接指定了客户机的静态IP192.168.1.28,在ubuntu里静态IP的定义好像一定要这样写得很完全)
/home/cache/netboot/root/etc/mtab文件修改成:
192.168.1.88:/home/cache/netboot/root / nfs rw 0 0
proc /proc proc rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
(注意:与“天使之翼”删除mtab不同,原因与上述fstab的修改一样,实践证明可行。特别注意第1行末尾与fstab第一行是不一样的)
/home/cache/netboot/root/etc/udev/rules.d/70-persistent-net.rules文件的修改:
root@ubuntu:/#:>/home/cache/netboot/root/etc/udev/rules.d/70-persistent-net.rules
(这一步其实可以省略,因为在基本的arch系统里这个文件本来就是空的)
除此之外,还有一个很重要的步骤,就是将服务器/etc/apt/sources.list的内容拷贝到/home/cache/netboot/root/etc/apt/sources.list里,否则到时候客户机端的源里只有生成arch-i386时的一条(在本文中就是http://debian.nctu.edu.tw/ubuntu),会导致很多软件包找不到。
这样,我们就完成了四大目标中的3
第三步 创建支持nfs的initrd.nfs、linux(vmlinuz)文件
这一步同样需在服务器端完成,只要服务器端本身具有nfs功能(因为我们在一开头已经配置了服务器端的nfs服务),那么可以通过以下命令生成initrd.nfs:
root@ubuntu:/# mkinitramfs -o /home/cache/netboot/tftpboot/initrd.nfs
至于linux(也就是vmlinuz),其实内核文件随处可见并且是通用的,可以:
#cp /boot/vmlinuz-2.6.24-16-generic /home/cache/netboot/tftpboot/linux
也就是将服务器端本身的vmlinuz拷贝到/home/cache/netboot/tftpboot中并且改名为系统所要求的linux。
当然随后必要忘记把两个文件拷贝到/var/lib里的tftp目录下:
root@ubuntu:~# cp /home/cache/netboot/tftpboot/* /var/lib/tftpboot/
就这样,四大目标中的第4也完成了。如果一切正常,此时无盘的客户机端应该可以通过PXE启动方式,进入一个字符终端���
【正文第三部分-2】完全无盘客户机端的后续安装
此时,我们终于可以来到客户机端进行后续的工作。如果一切正常,客户机端可以用root用户和空口令登入(这个root是无盘客户机端的root,从现在起客户机端的用户系统与服务器端已没有关系),第一步就应该是用#passwd给root建一个口令,否则在后面xsession启动的时候,没有口令的root是无法登录的。
接下来的工作其实有点类似从一个纯字符的ubuntu服务器上建立x windows应用,只不过后者是在本地硬盘上安装文件,而我们的无盘工作站是把文件通过nfs远程安装到服务器端上的虚拟根目录(也就是/home/cache/netboot/root)里。
当然,我们开始工作的这个只有arch的系统,比已经是字符型服务器的系统少了很多东西,所以需要一步步地添加进去。在“Ubuntu高地”一文中,这部分是最容易让人迷惑的,因为文章里看起来很容易,但是如果不是亲自尝试,就很难想象会有那么多细节性的问题,而每一个问题带来的都是字符终端失去反应的后果。
现在让我们按顺序来进行配置:
第一步 安装内核
对,安装内核。arch-i386虽然已经可以登录,但是内核的部分其实还缺很多,所以需要安装,具体来说,装的应该是全功能系统需要的很多库和模块。安装的命令是:
root@netfs:/#apt-get update
root@netfs:/#apt-get dist-upgrade
root@netfs:/#apt-get install linux-image-2.6.24-16-generic
前面两条是更新源、升级发行版,最后1条才是安装内核包。注意:内核一定要用linux-image-2.6.24-16-generic而不能用linux-image-2.6.24-16-386,虽然两者其实是一样的,但是因为两者在/home/cache/netboot/root/lib/modules/里生成的目录名是不同的,只有-generic生成的那个不会带来后续的路径问题。
第二步 安装console-data
root@netfs:/#apt-get install console-data
此处安装过程中会有类似dos那样的彩色字符窗口来设置键盘布局,需要按tab键选择ok等按钮、用方向键选择项目,鼠标此时是不起作用的。
第三步 安装xserver-xorg
root@netfs:/#apt-get install xserver-xorg
第四步 安装ubuntu-desktop
root@netfs:/#apt-get install ubuntu-desktop
注意:按照“Ubuntu高地”的文章,在xserver-xorg完成后就可以安装gnome或者xfce了,但实际上是不行的,如果那样做的话,在gnome安装的最后会停下来报错说找不到fontpath,而fontpath就是在安装ubuntu-desktop的时候自动配置的,所以到时候还是要补充安装ubuntu-desktop。那么按照报错的信息提示,所缺乏的东西应该提前安装好,也就是ubuntu-desktop应该在gnome之前安装。
装完ubuntu-desktop之后,其实已经可以用startx命令进入gnome桌面,但是实际上还缺一些文件,所以最好再继续安装gnome或xfce。
第五步 安装gnome或者xfce
这时候就可以安装真正完整的桌面系统了。我个人建议是安装gnome,因为就像“Ubuntu高地”说的,xfce在我们这种安装方式下会缺少很多包,需要手工补齐,所以不如利用gnome把这些包都装上,在装完gnome之后还是可以继续安装xfce供选用。
安装 gnome的时候,99%可能遇到臭名昭著的“gnome-keyring-manager”问题。解决的方法也很简单,因为我们有服务器端,可以直接在服务器端下载后拷贝到/home/cache/netboot/root下、也就是客户机端此时的根目录下,然后在客户机端用dpkg -i命令手工安装(这一步应该在安装gnome之前就做好)。下载的地址是:
http://packages.debian.org/gnome-keyring-manager
唯一需要注意的是下载的版本,不能下载稳定版的2-16-0版、而只能下载2-20-0的非稳定版,因为这是gnome需要的最低版本。正因为是非稳定版,所以安装这个包的时候会报错,但是其实不影响下面的工作,需要的东西还是会安装。这个问题解决后,就可以:
root@netfs:/#apt-get install gnome
完成后如果还需要xfce,可以继续:
root@netfs:/#apt-get install xubuntu-desktop
第六步 启动xwindows
在gnome或者xfce顺利安装完成后,用以下命令启动x登录界面:
root@netfs:/#startx
然后进入一个英文的xsession,进去后再更改语言、增删其他的软件包等就比较简单了。到此我们的工作可以说是顺利完成了。
【正文第四部分】高阶配置
高阶配置除了nfs的安全性问题,还有多个nfs远程目录的挂载(即除了虚拟根目录外,将服务器的其他目录开放给客户机端),这部分请仔细研究nfs服务本身就很容易解决。
在实际应用中比较重要的高阶配置,就是上文已经提到过的多个客户机端同时存在,此时主要涉及服务器端的dhcp的设置和对应的pxelinux配置文件。在此引用“天使之翼”的补充说明:
常常无盘网络有多个客户端,这个时候我们需要修改dhcp服务器和tftp下的pxelinux.cfg下的设置
我们首先来说一下dhcp3-server的修改
首先我们打开全局设置的部分,统一的设置网关 dns 租约期限等统一的信息
#设置所在域的名称
option domain-name “apt-get.cn”;
#设置dns解析服务器
option domain-name-servers 202.103.0.117, 202.103.24.68;
#下面的时间使用-1表示永久租约
default-lease-time -1;
max-lease-time -1;
然后找到我们先设置的地方
没改的时候如下
# A slightly different configuration for an internal subnet.
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.70;
option domain-name-servers 202.103.0.117,202.103.24.68,202.103.150.44;
option domain-name “apt-get.cn”;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 864000;
max-lease-time 86400000;
filename “pxelinux.0”;
}
修改方式如下
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.50
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
host A01 {
hardware ethernet 00:0c:29:81:bf:41;
option host-name “A001”;
fixed-address 192.168.1.50;
filename “pxelinux.0”;
}
host A02 {
hardware ethernet 00:0c:29:df:38:be;
option host-name “A002”;
fixed-address 192.168.1.51;
filename “pxelinux.0”;
}
}
多客户机的dhcpd的修改方法就是上面这样,下面我们设置一下pxelinux.cfg里面的内容
root@ubuntu:/var/lib/tftpboot/pxelinux.cfg# ls
01-00-0c-29-81-bf-41 01-00-0c-29-df-38-be default
root@ubuntu:/var/lib/tftpboot/pxelinux.cfg#
看一下,把default文件复制一个文件名修改为
01-开头,后面是无盘客户机的mac地址,看清楚中间是-不是: 字母必须是小写,否则启动报错
也可以把名字修改为16进制的数字,比如192.168.1.50
修改为C0A80132
比如192转成了16进制的C0
168转成了16进制的A8
这里必须是大写,小写启动的时候报错
如果启动的时候nfs连接的位置不同,记得修改这个文件里面的内容哦
(注*也就是修改其中的nfsroot=192.168.1.88:/home/cache/netboot/root ip=dhcp rw这一行,用不同客户端的虚拟根目录所在目录更改/home/cache/netboot/root这个default客户端所用的路径,当然前提是在nfs自身的/etc/exports里面已经开放了这个目录的共享。
随后,如果客户机与第一台default是同型号的,可以直接把后者已经生成的虚拟根目录里的文件系统在服务器端完整拷贝到相应的目录的,但是要记得修改hosts、hostname、interfaces等配置文件以适应前者的情况,以免启动后发生IP、机器名冲突等情况)