Linux网络安装Centos/windows 2003/xp 并且启动winpe系统

 

以前已经实现在Windows 2003上无人职守安装XP,SERVER2003,也解决了驱动等各种问题,主要是用2003自带的Windows ris做的,但是有一个问题是,在局域网中,既想安装Windows,又想安装centos,Windows安装需要启动Windows的tftp引导文件,Linux就需要启动pxelinux.0才能启动,所以如果想同时安装,就不能兼顾,需要不停的修改dhcp引导文件,非常麻烦,所以最近花时间学习了Linux的无人职守安装centos,但是能不同在Linux 上实现同时安

装Windows呢,那就需要ris-linux了。既然Linux能安装XP,那也可以通过pxe启动winpe了,原理都差不多,所以继续研究,也实现了linux启动winpe系统。那就不需要经常带个U盘在身上了,也不担心U盘损坏或者丢失了。

Pxe启动顺序如下:

pxelinux.0—> default—> pxe loader(w2k3.0, startrom.n12)—>setup loader(w2k3l, setupldr.exe) —> ntdetect.com(ntdetect.2k3) and winnt.sif(wi2k3.sif) 这个原理一定要了解清楚,否则在设置启动的时候,遇到很多麻烦都很难解决。

实施方案图如下:

┌────────┐

           │    Boot Server   │

           │(DHCP TFTP samba)│

           └───┬────┘

                     │

           ┌───┴───┐

           │     Switch  │

           └───┬───┘

                     │

       ┌─────┴──────┐

       │                             │

┌──┴───┐         ┌───┴───┐

│Client(PxE) |       │Client(PxE) │

 

一、配置服务器

DHCP配置

1、安装DHCP

#yum install –y dhcp

2、编辑dhcp配置文件

#vim /etc/dhcpd.conf

内容如下:

ddns-update-style interim;

ignore client-updates;

allow booting;

allow bootp;

filename                "/pxelinux.0";

next-server             192.168.11.1;

subnet 192.168.11.0 netmask 255.255.255.0 {

range 192.168.11.11 192.168.11.100;

option routers 192.168.11.1;

option subnet-mask 255.255.255.0;

option domain-name "benet.com";

option domain-name-servers 172.16.1.5,172.16.1.7;

#option broadcast-address 192.168.11.1;

default-lease-time 86400;

max-lease-time 172800;

}

注:

一般参数基本一样,下面我说以下几个重要,平时作为dhcp服务器,不常用的几个参数

allow booting;allow bootp;这两句话的意思是能作为pxe的启动服务器,给他们分配ip地址,next-server作用是指定tftp服务器的地址,filename,找到tftp服务器后找下载那个启动文件。

3、启动DHCP服务

#/etc/init.d/dhcpd start

4、配置DHCP为开机启动

#chkconfig –level 345 dhcpd on

 

TFTP配置

1、安装tftp

#yum install xinetd* -y

2、编辑tftp配置文件

#vim /etc/xinetd.d/tftp

内容如下:

service tftp

{

        socket_type             = dgram

        protocol                = udp

        wait                    = yes

        user                    = root

        server                  = /usr/sbin/in.tftpd

        server_args             = -v -m /tftpboot/rules -s /tftpboot

        disable                 = no

#       per_source              = 11

#       cps                     = 100 2

#       flags                   = IPv4

}

注:

这里选定了/tftpboot为TFTP 服务器的根目录位置。

-m /tftpboot/rules 这里指定一个规则文件,这个文件的作用下文中指出,

-v的作用是把tftp的log详细输出,log文件为/var/log/message,作用为便于调试。

3、建立/tftpboot/rules文件

#vim /tftpboot/rules

内容如下:

ri ^[a-z]: # Remove “drive letters”

rg \\ / # Convert backslashes to slashes

rg \# @ # Convert hash marks to @ signs

rg /../ /..no../ # Convert /../ to /..no../

rg A a

rg B b

rg C c

rg D d

rg E e

rg F f

rg G g

rg H h

rg I i

rg J j

rg K k

rg L l

rg M m

rg N n

rg O o

rg P p

rg Q q

rg R r

rg S s

rg T t

rg U u

rg V v

rg W w

rg X x

rg Y y

rg Z z

r ^/(.*) \1

这个文件的作用是把所有的查找大写的内容转为小写,由于windows不区分大小写,故统一改成小写。

并且要设置可执行权限

#chmod +x /tftpboot/rules

我刚开始光盘拷贝过去文件,一直不能自动转换成小写,搞的我走了很多弯路,后来在网上一直文章中无义看到,说这个文件需要可执行权限才行。后来加上去之后,真的搞定了。

如果是单独安装centos,上面那个文件可以不需要,但是需要安装WINDOWS就必须添加。

4、启动tftp服务

# /etc/init.d/xinetd start

http配置

http主要是为了安装centos,我这边安装centos是用的http方式,但是也可以使用其他的方式共享。

1、安装http

#yum install –y httpd

2、按默认的配置,HTTP 的根目录是 /var/www/html,在里面创建一个目录用来放置CentOS的安装源:

#mkdir -p /var/www/html/centos/5.5/os/x86_64

指明x86_64架构,便于与i386架构的区分。

3、放入光盘,并且挂载

#mount /dev/cdrom /mnt

4、复制光盘数据到x86_64目录下。

#cp –rf /mnt/* /var/www/html/centos/5.5/os/x86_64

5、启动http

#/etc/init.d/httpd start

准备Linux安装介质

首先是 TFTP。在上面 tftp 配置章节中,我们指定了 /tftpboot 作为 tftp 的要目录,如果没有则创建之:

#mkdir /tftpboot

把 pxelinux.0 复制到 /tftpboot 里:

#cp /usr/lib/syslinux/pxelinux.0 /tftpboot

把第一张光盘里的 /p_w_picpath/pxeboot/initrd.img 和 vmlinux 复制到 /tftpboot 里:

#cp /mnt/p_w_picpath/pxeboot/initrd.img /tftpboot

#cp /mnt/p_w_picpath/pxeboot/vmlinux /tftpboot

再在 /tftpboot 里创建一个 pxelinux.cfg 目录:

#mkdir /tftpboot/pxelinux.cfg

#cp /mnt/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default

修改 /tftpboot/pxelinux.cfg/default 文件:

#vim /tftpboot/pxelinux.cfg/default

内容:

 

prompt 1

timeout 100

default 0

 

display boot.msg

F1 boot.msg

F2 options.msg

F3 general.msg

F4 param.msg

F5 rescue.msg

 

label 0

        localboot 1

 

label 1

        kernel memtest

        append -

 

label 2

        kernel vmlinuz

        append ks=http://192.168.11.1/ks.cfg initrd=initrd.img ksdevice=eth0

label 5

        kernel w2k3.0

 

label 6

        kernel winxp.0

 

label 7

  kernel vmlinuz

  append initrd=initrd.img text

 

label 8

        kernel winpe.0

 

编辑boot.msg文件

#vim /tftpboot/boot.msg

内容如下:

^L

^Xsplash.lss

                ========== Linux Install ==========

 

0.  Local Disk Boot

 

1. Centos5.5-x86-32     2. Centos5.5-x86-64      3. Centos6.2-x86-32

4. Centos6.2-x86-64     5. windows-2003-32      6. windows-XP-32

7. Linux-Test           8. windows-pe

 

^O0f[F1-Linux] [F2-Tools]^O07

 

/tftpboot目录下,必须要要有这个几个文件,没有就从光盘里面拷贝过来。Boot.msg;initrd.img;param.msg;splash.lss;vmlinuz。

 

Linux自动安装应答文件设置

编辑ks.cfg文件

ks.cfg:

# For CentOS 5.5

# Kickstart file automatically generated by anaconda.

 

 

install

url --url http://192.168.11.1/centos/5.5/os/x86_64

#url --url http://centos.ustc.edu.cn/centos/5.5/os/x86_64

lang zh_CN.UTF-8

langsupport --default=zh_CN.UTF-8 zh_HK.UTF-8 zh_CN.UTF-8 zh_SG.UTF-8 zh_TW.UTF-8 en_US.UTF-8

keyboard us

skipx

network --onboot yes --bootproto dhcp

rootpw --iscrypted $1$469e8jRa$0UsjnjgUqWOhd/8oLDvsw0

user --name=xia

firewall --enabled --port=5901:tcp --ssh --http --smtp

firstboot --disable

authconfig --enableshadow --enablemd5

selinux --enforcing

services --disabled bluetooth,autofs,cups,haldaemon,hidd,kudzu,netfs,nfslock,pcscd,portmap,rawdevices,rpcgssd,rpcidmapd,sendmail --enabled ntpd

timezone Asia/Shanghai

bootloader --location=mbr --driveorder=sda --append="rhgb quiet" --md5pass=$1$kuVpr/$lp6vc5MhJx40q1f3AGJxR.

reboot

zerombr

 

# The following is the partition information you requested

# Note that any partitions you deleted are not expressed

# here so unless you clear all partitions first, this is

# not guaranteed to work

## 这里适合只有一个硬盘

#clearpart --all --drives=sda

#part /boot --fstype ext3 --size=100 --ondisk=sda

#part pv.7 --size=0 --grow --ondisk=sda

#volgroup VolGroup00 --pesize=32768 pv.7

#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=10240 --grow

#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=4096

## 这里适合两个硬盘需要组成一个软件Raid1的情况

clearpart --all

part raid.0 --size=100 --ondisk=sda

part raid.1 --size=100 --ondisk=sdb

part raid.2 --size=10240 --grow --ondisk=sda

part raid.3 --size=10240 --grow --ondisk=sdb

raid /boot --fstype ext3 --level=RAID1 --device=md0 raid.0 raid.1

raid pv.4 --fstype "physical volume (LVM)" --level=RAID1 --device=md1 raid.2 raid.3

volgroup VolGroup00 --pesize=32768 pv.4

logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=10240 --grow

logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=4096

 

%packages

@editors

@text-internet

@chinese-support

@core

@base

vnc-server

twm

xterm

screen

sysstat

keyutils

trousers

fipscheck

device-mapper-multipath

ntp

-rwho

-rusers

yum-fastestmirror

 

#%post

#(# Note that in this example we run the entire %post section as a subshell for logging.

#wget http://192.168.11.1/init/init.sh -O /root/init.sh

#chmod +x /root/init.sh

#/root/init.sh

#chmod -x /root/init.sh

#) 1>/root/post_install.lg 2>&1

如果你有其它分区方案可根据自己的需要修改,切勿复制至你的配置里面。

把配置好的 ks.cfg  文件复制到 /var/www/html 目录。

刚开始ks.cfg文件也弄的我头大,但是要想Linux自动安装就全靠它了,详细文档,可以网上找找,我这里给一个链接:我以前放入空间的一个文档。

http://user.qzone.qq.com/369986957/infocenter#!app=2&via=QZ.HashRefresh&pos=1344397309

 

现在Linux可以从网络安装了,客户端从pxe启动,选择菜单栏,选择自己需要安装的系统,但是现在还不能实现安装Windows,启动pe,如果需要,继续看文档。Linux可以自己添加不同的OS进去。

 

配置网络Windows 2003 ,XP

 

安装Linux是用http的模式,但是安装Windows,就必须要用共享方式了。

配置samba服务器

1、安装samba服务器

#yum install –y samba*

2、编辑samba配置文件

#vim /etc/samba/smb.conf

内容如下:

[global]

null passwords = true

workgroup = BENET

server string = Samba Server

security = share

load printers = no

disable spoolss = yes

debug level = 2

log file = /var/log/samba/%m.log

max log size = 0

dns proxy = no

load printers = no

printing = bsd

printcap name = /dev/null

disable spoolss = yes

[wininstall]

path = /tftpboot

browsable = true

read only = yes

writable = yes

guest ok = Yes

3、启动服务器

#/etc/init.d/smb restart

 

在windows下可以通过expand解压缩光盘中的文件,由于linux下面没有这个工具,但是有人写了一个叫cabextract的工具可以解压windows光盘中的压缩文件,具体可以在http://www.cabextract.org.uk/下载到你所需的版本,

由于我采用的centos 5.5 64位版,为简单着想我安装的是rpm包,具体操作如下

1)下载

#wget http://www.cabextract.org.uk/cabextract-1.2-1.i386.rpm

2)安装

#rpm -ivh cabextract-1.2-1.i386.rpm

上传windows 2003,XP的iso镜像或者光盘中的内容到服务器的一个目录,这里我采用上传一个windows 2003的iso镜像到tftpboot目录下。并把光盘挂载到/tftpboot的win2k3与winxp目录下

 

1)分别建立win2k3目录与winxp

#mkdir /tftpboot/win2k3

#mkdir /tftpboot/winxp

2)挂载iso文件到/mnt目录下

#mount  /dev/cdrom /mnt

记得先将刚才的Linux光盘先卸载掉。

3)为方便我们往后面往里面添加驱动或者添加启动后的脚本文件,我们把光盘中的内容复制到/tftpboot下的win2k3目录下

#cp -r /mnt/* /tftpboot/win2k3

拷贝完成之后,也想XP光盘数据也拷贝winxp目下。

#cp -r /mnt/* /tftpboot/winxp

 

 

如下引导文件是根据我实际情况修改的, 具体可以查阅:

http://oss.netfarm.it/guides/ris-linux.php

 

分别配置windows 2003与XP的引导。

Windows 2003配置如下:一行一个命令

cd /tftpboot

cabextract win2k3/i386/startrom.n1_

sed -i -e 's/NTLDR/W2K3L/gi' startrom.n12

mv startrom.n12 /tftpboot/w2k3.0

cabextract win2k3/i386/setupldr.ex_

sed -i -e 's/winnt\.sif/wi2k3\.sif/gi' setupldr.exe

sed -i -e 's/ntdetect\.com/ntdetect\.2k3/gi' setupldr.exe

mv setupldr.exe /tftpboot/w2k3l

cp win2k3/i386/ntdetect.com /tftpboot/ntdetect.2k3

 

Windows XP配置如下:一行一个命令

cd /tftpboot

cabextract winxp/i386/startrom.n1_

sed -i -e 's/NTLDR/XPLDR/gi' startrom.n12

mv startrom.n12 /tftpboot/winxp.0

cabextract winxp/i386/setupldr.ex_

sed -i -e 's/winnt\.sif/winxp\.sif/gi' setupldr.exe

sed -i -e 's/ntdetect\.com/ntdetect\.wxp/gi' setupldr.exe

mv setupldr.exe /tftpboot/XPLDR

cp win2k3/i386/ntdetect.com /tftpboot/ntdetect.wxp

 

引导文件搞定了之后,那就需要配置应答文件了,如果不需要自动安装XP,2003,配置如下就可以引导蓝色界面了。 (编辑wi2k3.sif)

[data]

floppyless = "1"

msdosinitiated = "1"

; Needed for second stage

OriSrc = "\\YOUR_SERVER_NAME\YOUR_SHARE_NAME\win2k3\i386"

OriTyp = "4"

LocalSourceOnCD = 1

DisableAdminAccountOnDomainJoin = 1

 

[SetupData]

OsLoadOptions = "/fastdetect"

; Needed for first stage

SetupSourceDevice = "\Device\LanmanRedirector\YOUR_SERVER_NAME\YOUR_SERVER_SHARE\win2k3"

 

[UserData]

ComputerName = *

; if needed

;ProductID=

 

但是要想实现驱动问题,自动分区,自动输入序列号等,就可以按我的下面的就可以了。

#vim wi2k3.sif

[data]

AutoPartition = "1"

floppyless = "1"

msdosinitiated = "1"

; Needed for second stage

OriSrc = "\\192.168.11.1\wininstall\win2k3\I386"

OriTyp = "4"

LocalSourceOnCD = "1"

DisableAdminAccountOnDomainJoin = "1"

 

[SetupData]

OsLoadOptions = "/fastdetect"

SetupSourceDevice = "\Device\LanmanRedirector\192.168.11.1\wininstall\win2k3"

 

[Unattended]

    UnattendMode=FullUnattended

    OemSkipEula=Yes

    DriverSigningPolicy=Ignore

    NonDriverSigningPolicy=Igonre

    OemPreinstall=no

    TargetPath=\WINDOWS

    FileSystem=LeaveAlone

    NtUpgrade=No

    OverwriteOemFilesOnUpgrade=No

 

[GuiUnattended]

    AdminPassword=*************

    EncryptedAdminPassword=No

    OEMSkipRegional=1

    TimeZone="220"

    OemSkipWelcome=1

 

[UserData]

    ProductKey=JCGMJ-TC669-KCBG7-HB8X2-FXG7M

    FullName="He Haijun"

    OrgName="LEG3S"

    ComputerName=*

 

[LicenseFilePrintData]

    AutoMode=PerServer

    AutoUsers=999

 

[RegionalSettings]

    LanguageGroup=9,10

 

[SetupMgr]

    DistFolder=C:\windist

    DistShare=windist

 

[Identification]

JoinWorkgroup=benet

 

[Networking]

    InstallDefaultComponents=Yes

    ProcessPageSections=Yes

 

[RemoteInstall]

Repartition=Yes

 

 

上面是WINDOWS 2003的自动应答文件,如下是XP的自动应答文件。

#vim winxp.sif

[data]

    AutoPartition= "1"

    MsDosInitiated= "1"

;    UnattendedInstall="Yes"

    floppyless="1"

    OriSrc= "\\192.168.11.1\wininstall\winxp\i386"

    OriTyp= "4"

    LocalSourceOnCD= 1

 

[SetupData]

    OsLoadOptions= "/fastdetect"

    SetupSourceDevice= "\Device\LanmanRedirector\192.168.11.1\wininstall\winxp"

 

[Unattended]

    UnattendMode=FullUnattended

    OemSkipEula=Yes

    DriverSigningPolicy=Ignore

    NonDriverSigningPolicy=Igonre

;    OemPreinstall=YES

;OemPnpDriversPath="Drivers\NIC;Drivers\Audio\ADI;Drivers\Audio\ALI;Drivers\Audio\Media;Drivers\Audio\Conexant;Drivers\Audio\Creative;Drivers\Audio\HDAudio;Drivers\Audio\nVIDIA;Drivers\Audio\Other;Drivers\Audio\Realtek;Drivers\Audio\Sigmatel;Drivers\Audio\SiS;Drivers\Audio\VIA;Drivers\Camera;Drivers\Chipset;Drivers\MassSto;Drivers\Modem;Drivers\Others;Drivers\Display"

    TargetPath=\WINDOWS

    FileSystem=LeaveAlone

    NtUpgrade=No

    OverwriteOemFilesOnUpgrade=No

UnattendSwitch=yes

WaitForReboot=No

 

[Display]

BitsPerPel=32

Xresolution=800

Yresolution=600

 

[Components]

msmsgs=off

msnexplr=off

freecell=off

hearts=off

minesweeper=off

pinball=off

solitaire=off

spider=off

zonegames=off

 

[GuiRunOnce]

 

[Shell]

DefaultStartPanelOff=Yes

 

[GuiUnattended]

AdminPassword="**************"

    EncryptedAdminPassword=NO

    OEMSkipRegional=1

    TimeZone=%TIMEZONE%

    OemSkipWelcome=1

 

[UserData]

    ProductKey=DG8FV-B9TKY-FRT9J-6CRCC-XPQ4G

    FullName="He Haijun"

    OrgName="LEG3S"

    ComputerName=%MACHINENAME%

 

[TapiLocation]

    CountryCode=86

    Dialing=Pulse

    AreaCode=755

    LongDistanceAccess="99"

 

[RegionalSettings]

    LanguageGroup=9,10

    Language=00000804

 

[SetupMgr]

    DistFolder=C:\windist

    DistShare=windist

 

[Identification]

    JoinWorkgroup=benet

    DoOldStyleDomainJoin=no

 

[Networking]

    InstallDefaultComponents=Yes

    ProcessPageSections=Yes

 

[RemoteInstall]

Repartition=Yes

 

如上二个自动应答文件具体的意思,我这里不多说,应该涉及的东西太多了,自己可以网上查阅,其实Linux跟Windows的自动应答文件差不多,直接拷贝过来修改小地方是可以直接用的,因为我原来的Windows ris已经能实现自动安装系统,所以我直接拷贝到Linux里面也是可以直接用了。

 

经过上面的步骤,发现到了蓝色界面一会之后就又报错了,提示找不到网卡驱动,那OK,如下是需要将网卡驱动加载进去。

由于要驱动网卡,需要一个binlserver, BINL读取所有新的与网络接口卡相关的 .inf 文件,并在映像中创建 .pnf 文件。

配置binl server,用来加载网卡驱动

1)服务器下载

wget http://oss.netfarm.it/guides/ris-linux-0.4.tar.gz

2)解压

tar xf ris-linux-0.4.tar.gz

3)执行

#cd ris-linux-0.4

#./infparser.py /tftpboot/win2k3/i386/

#./binlsrv.py –d

记得一定要讲驱动文件拷贝到I386目录里面去,而且XP也是要做同样的操作。

 

现在可以网络安装了,但是安装完成之后,没有任何驱动,这时跟Windows一样,在I386同一个目录下建立$oem$文件夹,并且里面拷贝所有的驱动过来,然后修改sif应答文件就可以了。

现在就已经实现网络安装Windows 2003跟XP了,如下是实现PXE启动winpe系统。

 

Linux PXE启动winpe

Pxe网络启动需要如下5个文件就可。

Ntdetect.com

Ntldr

Startrom.n12

Winnt.sif

Winpe.iso

 

网上还有很多其他版本说可以启动pe,我这边测试了,都可能是引导文件有错,一直都报错,最终失败,如上的这几个文件我试验过,是可以的,如果有需要的,联系我,我将单独打包发给你们。

将如上5个文件通过ftp上传到tftpboot目录下。并且编辑winnt.sif文件。

 

 

备注:有部分语句跟代码是直接copy网上或者从服务器上拷贝出来的。请见谅。

 

 

需要合作交流的可以加QQ群:163935235