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
把第一張光盤裏的 /image/pxeboot/initrd.img 和 vmlinux 複製到 /tftpboot 裏:
#cp /mnt/image/pxeboot/initrd.img /tftpboot
#cp /mnt/image/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