Browsed by
月份:2013年11月

How to build ipxelinux.0

How to build ipxelinux.0

I’ve recently been asked by people using gpxelinux.0 how they can build it with the newer iPXE instead of the stagnant gPXE. ipxelinux.0 is basically iPXE with an embedded boot script that starts an embedded version of pxelinux.0.

Then install the required dependencies using your distribution’s packaging tools. Chances are high you already have everything you need installed except git.

# On Ubuntu or Debian-based systems this should work
sudo apt-get install build-essential binutils perl git nasm

Then clone the iPXE git repo as described on the iPXE download page and the SYSLINUX git repo as described on the SYSLINUX development page side-by-side.

#!/bin/sh
git clone git://git.ipxe.org/ipxe.git
git clone git://git.kernel.org/pub/scm/boot/syslinux/syslinux.git

Next up is to build pxelinux.0, which is part of syslinux, so we can embed it into iPXE:

cd syslinux
make

Verify that the file named core/pxelinux.0 exists and is approx. 26KB. Then you should change directory to the ipxe checkout and create a file named ipxelinux.ipxe with this content:

#!ipxe
dhcp
chain pxelinux.0

Finally we can build a chainloadable version of iPXE with the above script and pxelinux.0 embedded:

cd src
make bin/undionly.kkkpxe EMBED=../ipxelinux.ipxe,../../syslinux/core/pxelinux.0

The last thing to do is to install it onto your TFTP server.

sudo install -v -m 0644 -g root -o root bin/undionly.kkkpxe /srv/tftp/ipxelinux.0

If you haven’t already set up your ISC DHCP server for network booting, make sure you include this snippet in your subnet declaration. If you already have an entry for pxelinux.0 in there, you can just rename the file. The file name is not magical and can be anything you like. Calling it something.0 is just a convention.

next-server 1.2.3.4;
filename "ipxelinux.0";

You’re done!

I also want to tell you that iPXE has had a text-based menu system since March 2012, so if you’re not too invested in your PXELINUX setup, you might want to look into how things can be done without PXELINUX. Take a look at the iPXE menu documentation and my iPXE menu example that shows the menu I use in my home network.

If this made you curious, please join us on #ipxe on irc.freenode.net to learn more.

iPXE: Boot iPXE Linux kernel via PXELinux

iPXE: Boot iPXE Linux kernel via PXELinux

iPXE Linux kernel (ipxe.lkrn) may chain loaded by PXELinux:

default boot

label boot
        kernel ipxe.lkrn

Both iPXE firmware (undionly.kpxe) or iPXE kernel image (ipxe.lkrn) has same functions.  All usage of iPXE commands / scripts remain the same for both firmware and kernel.

Problem with Dell Vostro notebook

All the time I use PC with iPXE firmware (undionly.kpxe) with WinPE and SanBoot without problem.  If I boot Dell Vostro notebook with the same booting steps as PC, the WinPE or SanBoot doesn’t work at all.  The reason remain unknown.  Here are my booting steps:

Scenario A

  1. Switch on machine
  2. DHCP –> undionly.kpxe (undionly.0)
  3. Chain to load WinPE image
  4. Show blank screen after WinPE image

Scenario B

  1. Switch on machine
  2. DHCP –> undionly.kpxe (undionly.0)
  3. sanboot iSCSI target
  4. Machine hang while booting

Both scenario A and B works fine on PC but doesn’t work on Dell Vostro notebook.

I suspect the problem is related to:

  1. iPXE firmware
  2. Notebook network card’s firmware doesn’t work well with iPXE firmware.

Dell Vostro notebook work with iPXE kernel

While trying to find solution solving the mystery problem with Dell Vostro notebook, I found that iPXE kernel works.  I may load WinPE image or SanBoot a Windows ISCSI target with iPXE kernel chain loaded by PXELinux.

  1. Prepare ipxe.lkrn
    -bash-4.1$ git clone git://git.ipxe.org/ipxe.git
    -bash-4.1$ cd ipxe
    -bash-4.1$ make src/bin/ipxe.lkrn
  2. Copy src/bin/ipxe.lkrn to TFTP boot directory.
    # cp src/bin/ipxe.lkrn /var/lib/tftpboot
  3. Update dhcp configuration file: /etc/dhcp/dhcpd.conf to prevent infinite iPXE boot when ipxe.lkrn boot:
            if exists user-class and option user-class = "iPXE" {
                    filename "http://<ip-address>/boot.ipxe";
            } else {
                    filename "pxelinux.0";
            }
  4. Load ipxe.lkrn after PXELinux boot:
    # cat pxelinux.cfg/default
    default boot
    
    label boot
            kernel ipxe.lkrn
  5. iPXE kernel will query DHCP server again, DHCP will send boot.ipxe script file via HTTP to the machine:
    #!ipxe
    set 209:string pxelinux.cfg/boot
    set 210:string http://<ip-address>/
    chain ${210:string}pxelinux.0
  6. boot.ipxe will chain load pxelinux.0 with new configuration file: pxelinux.cfg/boot:
    # cat pxelinux.cfg/boot
    default menu.c32
    prompt 0
    
    LABEL boot_local
            menu label ^Boot Local System
            menu default
            localboot 0
            timeout 50
    
    LABEL boot_san
            menu label Boot ^Storage Area Network
            com32 syslinux/gpxecmd.c32
            append sanboot iscsi:<iscsi-host>::::iqn.example.com:win7
    
    LABEL WINDOWS_PE
            menu label ^Windows Preinstallation Exnvironment
            kernel windows.pe/pxeboot.0
  7. Both SanBoot and Window PE image works with Dell Vostro notebook now.
使用PXE服务无盘安装WINDOWS操作系统

使用PXE服务无盘安装WINDOWS操作系统

阅读本文的时候,你需要以下基础知识
1、DOS下NIC网卡驱动安装,使用经验
2、硬件IO方面的知道
3、驱动INF知识
4、FREEBSD安装使用知识
5、PYTHON编程调试知识
6、系统引导知识(DOS,LINUX,WINDOWS),MBR方面的知识,至少至少你会备份MBR吧
7、LINUX,freebsd ,windows的文件体系系统知识
8、DHCP 协议,及各CODE的定义含义
9、SYSLINUX的基础知识,PXELINUX的基础知识
10、WINPE的制作经验

有时候,做为了一个维护人员,一手好的维护工具很重要
光盘,NO,那不停更新的驱动,就让你烦死
PXE安装LINUX,那太简单了,BSD?那还是很简单,做个DOS维护工具,那也很简单
我们今天讲的是BSD或LINUX下做PXE服务器,是安装WINDOWS的服务器,这个想来有点难度

难度在
1、RIS服务
RIS服务是WINDOWS安装的前期需要一个NIC网卡驱动来驱动客户端连接服务器进行剩下的文件的安装
NIC网卡,可以在你的主板驱动里提取出来,你可以找到RIS目录里面应有三个文件,提取XXX.INF XXX.SYS
要不在驱动的XP X32,NO X64目录里提取

2、WINDOWS使用的路径是\符号,而不是类UNIX系统下的/
WINDOWS使用一个路径可能是WINDOWS\I386\DX.SYS,而在TFTP服务器上却是WINDOWS/I386/DX.SYS
所以TFTP服务器必须支持路径改写,及大小改写,才能正确识别出一个文件,在WINDOWS服务器上不存在这样的问题
所以关健在:把所有文件拷贝到FREEBSD服务器上的时候文件全部改成小写,使用TFTP把识别的下载请求路径改\写成/,大写文件名称改写成小写

OK,下面进行FREEBSD下的案例

mkdir -p /data/tftp/winxp

 

cd /usr/ports/ftp/tftp-hpa/ && make install clean
cd /usr/ports/net/ris/ && make install clean
cd /usr/ports/net/isc-dhcp42-server/ && make install clean

修改tftp的规则,使其支持WINDOWS的路径请求,及所有的带大写文件的请求变成小写

ee /usr/local/share/ris/tftp.map

 

ri ^[a-z]: # Remove M-b~@~\drive lettersM-b~@~]
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
rg \ /
r ^/(.*) \1
r .* \L\0

使当前目录下所有文件及目录全部变成小写的脚本

find ./ -depth | perl -ne 'chomp;m</[^/]*$>;$d=$`;$_=$f=$&;''s/([\x80-\xFF].)|(\w)/$1\l$2/g;system "mv",$d.$f,$d.$_ if $f ne $_'

 

ee /etc/inetd.conf

 

tftp    dgram   udp     wait    root    /usr/local/libexec/in.tftpd     in.tftpd -v -m /usr/local/share/ris/tftp.map -s /data/tftp

 

ee /usr/local/etc/dhcpd.conf

 

subnet 192.168.1.0 netmask 255.255.255.0 {
  range dynamic-bootp 192.168.1.40 192.168.1.60;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.254;
  option root-path "192.168.1.253:/";
  next-server 192.168.1.253;
  filename "pxelinux.0";
}

#DHCP设定,pxelinux.0为启动文件
#192.168.1.253为TFTP服务器

 

ee /etc/rc.conf

 

dhcpd_enable="YES"
inetd_enable="YES"

至此,一个可用的PXE服务器已经建成,下面我们要完成支持WINDOWS远程安装部分

1、把WINDOWS XP的安装光盘里的I386目录拷贝至/data/tftp/winxp目录下

2、 将i386下的文件startrom.n1_ 使用winrar解压得到文件startrom.n12,移动到目录/data/tftp,并改名为winxp.0 ,记得一定要改成.0后缀,因为有很多地方是约定成俗的,不要给自已增加麻烦
3、 将i386下的文件setupldr.ex_ 使用winrar解压得到文件setupldr.exe,将此文件更名为NTLDR,移动到目录/data/tftp
*4、将i386下的文件ntdetect.com拷贝到/data/tftp

记得这三个文件一定在TFTP服务的根目录下!!·!!!!

 

cd /usr/ports/net/samba4 && make install clean

 

ee /usr/local/etc/smb.conf

 

[TFTP]
Comment = TFTP Dir
path = /data/tftp
guest ok = yes
writable= no
printable = no

 

·

ee /etc/rc.conf

 

binlsrv_enable="YES"
binlsrv_infdir="/data/tftp/winxp/i386/"

samba_enable="YES"

至此,所有的服务都到位,记得把目录及文件全部转成小写的!!!!!!

OK,我们要让系统自已安装,需要写个WINNT.SIF文件

ee /data/tftp/winnt.sif

 

[data]
AutoPartition = "0"
floppyless = "1"
msdosinitiated = "1"
UnattendedInstall = "Yes"
OriSrc = "\\192.168.1.253\tftp\winxp\i386"
OriTyp = "4"
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1

[SetupData]
OsLoadOptions = "/fastdetect"
; Needed for first stage
SetupSourceDevice = "\Device\LanmanRedirector\192.168.1.253\tftp\winxp"

[RemoteInstall]
; Avoid automatic format/repartition
Repartition = No
UseWholeDisk = No

[UserData]
    FullName="vipAAAAA"
    OrgName="xsjbbbbbb"
    ComputerName = *
    ProductID=MRX3F-47B9T-2487J-KWKMF-RPWBY

[TapiLocation]
    AreaCode=021

[RegionalSettings]
    LanguageGroup=10
    Language=00000804

现在OK了

如何增加NIC网卡驱动,你只需要把你的网卡驱动,放到/data/tftp/winxp/i386目录下,然后重启binlsrv服务就OK了,因为binlsrv的指定目录为/data/tftp/winxp/i386

据说需要把i386的driver.cab里的文件全部解压到i386目录下,可以解决好多网卡问题,大家试一下吧

写的很简单,中间会有很多很多问题,需要你用专业的知识去解决,框架就是这样

freebsd 竟然支持RIS

freebsd 竟然支持RIS

cd  /usr/ports/net/ris && make install clean

 

 binlsrv_enable (bool): Set to "NO" by default.
                        Set it to "YES" to enable binlsrv.

 binlsrv_infdir (path): Set to "/usr/local/share/ris/inf" by default.
                        Set it to your directory with inf files.

 Put all *.inf files into ${binlsrv_infdir} and start binlsrv.

 You can use the following parameters on /etc/inetd.conf:

 tftp dgram udp wait root /usr/local/libexec/in.tftpd in.tftpd -v -m /usr/local/share/ris/tftp.map -s /tftpboot

 See http://oss.netfarm.it/guides/ for more details.

 

Linux下让tftp忽略大小写

Linux下让tftp忽略大小写

由于需要实现pxe启动winpe,而在windows下实现没出什么问题,可是在Linux服务端上就有问题了,原因是启动所需的文件大小写不一致,导致linux服务端无法提供正确的文件而无法启动pe,下面我们来进行以下操作,让Linux下的tftp忽略大小写:

首先,创建规则文件,来让所有tftp的文件请求中的所有字符都变成小写创建如下文件

#cat /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

再输入:wq保存退出,然后修改tftp配置文件

#cat /etc/xinetd.d/tftp    
service tftp      
{      
        disable = no      
        socket_type             = dgram      
        protocol                = udp      
        wait                    = yes      
        user                    = root      
        server                  = /usr/sbin/in.tftpd      
        server_args             = -m /tftpboot/rules -s /tftpboot      
        per_source              = 11      
        cps                     = 100 2      
        flags                   = IPv4      
}

Freebsd 下直接修改/etc/inetd.conf

注:实际上就是在server_args里增加“ -m /tftpboot/rules”这个参数

好啦,这个时候重新启动xinetd服务即可

 

 

非微软的RIS解决方案, PXE安装Windows

非微软的RIS解决方案, PXE安装Windows

最近研究了使用PXE来通过网络启动安装操作系统WinXP的方式。非微软的RIS解决方案,跟微软的相比较,有更多的灵活性。
(安装Windows2003的步骤完全相同)

* 利用tftpd32配置DHCP服务器和TFTP服务器, 并配置PXEboot环境
* 配置安装windows的开机image和相关文件
* 配置网络匿名共享
* 配置Binl Server

1. 利用tftpd32配置DHCP服务器和TFTP服务器, 并配置PXEboot环境

DHCP服务器的作用是当目标机启动后,向目标机分配IP地址,并告知目标机启动文件所在的服务器和启动文件名。然后目标机使用TFTP协议从TFTP服务器获取启动文件。

工具TFTPD32, 在WINDOWS下运行,并可以同时提供DHCP和TFTP服务,执行文件只有200K左右,而且非常配置简单。
将解压后的文件放到一个目录,我的是e:\tftp。本文以后说到e:\tftp时都是指我自己配置时使用的目录,可以根据你自己的情况修改。

IP poolstarting address是分配给目标机的IP地址
Size of pool         有多少连续的IP地址可以分配
Boot File            启动文件名,单系统安装就使用startrom.n12 ,多系统安装,需要用到pxelinux.0
WINS/DNS Server       你所在网络的DNS服务器IP地址
Default route     默认网关
Mask              子网掩码

多系统安装情况下,.\tftproot\pxelinux.cfg\default 文件内容:
# prompt 1
# default win2003
# timeout 1
label winxp
kernel winxp.0
label win2003
kernel wi2k3.0
label hd
localboot 0x80

2. 配置安装windows的开机image

在e:\tftp目录建立子目录winxp,将windows安装光盘上的i386目录拷贝到e:\tftp\winxp目录,这样就有了目录e:\tftp\winxp\i386目录。

2.1 创建单系统情况下的PXE启动文件:
* 将i386下的文件startrom.n1_ 使用winrar解压得到文件startrom.n12,移动到目录e:\tftp
* 将i386下的文件setupldr.ex_ 使用winrar解压得到文件setupldr.exe,将此文件更名为NTLDR,移动到目录e:\tftp
* 将i386下的文件ntdetect.com拷贝到e:\tftp

2.2 创建多系统情况下的PXE启动文件:
http://oss.netfarm.it/guides/ris-linux.php

***For Windows XP
– Windows command:(使用windows自带命令,解压文件)
expand -r <Source dir>/i386/startrom.n1_ <tftproot\winxp>
expand -r <Source dir>/i386/setupldr.ex_ <tftproot\winxp>
copy <Source dir>/i386/ntdetect.com <tftproot\winxp>

– Linux command:(使用Linux命令,以二进制方式,修改文件;当然也可以用UltraEdit等工具修改)
sed -i -e ‘s/NTLDR/XPLDR/gi’ startrom.n12
sed -i -e ‘s/winnt\.sif/winxp\.sif/gi’ setupldr.exe
sed -i -e ‘s/ntdetect\.com/ntdetect\.wxp/gi’ setupldr.exe
mv startrom.n12 winxp.0
mv setupldr.exe XPLDR
mv NTDETECT.COM ntdetect.wxp

———————-
***For Windows 2003
– Windows command:(使用windows自带命令,解压文件)
expand -r <Source dir>/i386/startrom.n1_ <tftproot\win2003>
expand -r <Source dir>/i386/setupldr.ex_ <tftproot\win2003>
copy <Source dir>/i386/ntdetect.com <tftproot\win2003>

– Linux command:(使用Linux命令,以二进制方式,修改文件;当然也可以用UltraEdit等工具修改)
—- for windows 2003 i386
sed -i -e ‘s/NTLDR/W2K3L/gi’ startrom.n12
sed -i -e ‘s/winnt\.sif/wi2k3\.sif/gi’ setupldr.exe
sed -i -e ‘s/ntdetect\.com/ntdetect\.2k3/gi’ setupldr.exe
mv startrom.n12 wi2k3.0
mv setupldr.exe W2K3L
mv NTDETECT.COM ntdetect.2k3
— for windows 2003 x64
sed -i -e ‘s/NTLDR/W2K4L/gi’ startrom.n12
sed -i -e ‘s/winnt\.sif/wi2k4\.sif/gi’ setupldr.exe
sed -i -e ‘s/ntdetect\.com/ntdetect\.2k4/gi’ setupldr.exe
mv startrom.n12 wi2k4.0
mv setupldr.exe W2K4L
mv NTDETECT.COM ntdetect.2k4

3. 在 e:\tftp目录下建立文件winnt.sif,内容如下(注意修改其中的IP为你服务器的IP; 并根据上面的步骤2,将Windows XP 与Windows 2003的对应winnt.sif文件, 分别改名为winxp.sif、wi2k3.sif):
* 此步骤,可以用Windows光盘内的Deploy工具,建立完整的自动应答文件;这里仅考虑最简单情况.

[data]
floppyless = “1”
msdosinitiated = “1”
; Needed for second stage
OriSrc=”http://zjwsk.blog.163.com/blog/\\192.168.5.21\RemInst\winxp\i386″
OriTyp = “4”
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1

[SetupData]
OsLoadOptions = “/fastdetect”
; Needed for first stage
SetupSourceDevice = “\Device\LanmanRedirector\192.168.5.21\RemInst\winxp”

[RemoteInstall]
; Avoid automatic format/repartition
Repartition = No
UseWholeDisk = No

[UserData]
ComputerName = *
ProductID=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

3. 配置网络匿名共享
目标机启动了WINXP的安装程序后,XP的安装文件需要通过网络共享的方式拷贝过去。这时需要配置你的WINDOWS机器开启匿名共享。步骤如下:

3.1  将e:\tftp目录共享,共享名为reminst。 注意共享权限中加入everyone,如果为NTFS分区,同时还要注意此目录的读写权限中也加入everyone;
3.2 启动guest用户,并将guest用户密码置空;
3.3 从控制面板->管理工具进入“本地安全策略”,在本地策略->用户权利指派下找到“拒绝从网络访问这台计算机”(Deny access to this computer from the network),从中删除guest用户;
3.4 从控制面板->管理工具进入“本地安全策略”,在本地策略->安全选项下找到“让每个人权限应用于匿名用户”(Network access: Let Everyone permissions apply to anonymous users),将其启用;
3.5 从控制面板->管理工具进入“本地安全策略”,在本地策略->安全选项下找到“可匿名访问的共享”(Network access: Shares that can be accessed anonymously),在其中加入reminst;

4. 配置Binl Server
4.1 从http://oss.netfarm.it/guides 下载文件ris-linux-0.X.tar.gz,解压到目录e:\tftp\ris-linux-0.X,此程序的作用是搜索适合目标机的网卡驱动程序并发送给目标机。

4.2 从http://www.python.org/ftp/python 下载软件包 python-2.5.x.msi,然后安装。此软件包用来支持python语言,因为ris-linux-0.x是用python语言和C语言写的。

4.3 从http://ris-autoinst.googlecode.com/files/ 下载软件包 ris-autoinst-0.6.1.tar.gz(这是一个完整的Linux下实现RIS的解决方案,过程不在本例讨论之列,仅利用其收集的网卡驱动 程序;当然你也可自己添加你当前环境的网卡驱动,主要是两个文件xxx.inf、xxx.sys),解压之后,将其内部的 winxpsys.tar.gz、winxpinf.tar.gz 解压至e:\tftp\winxp\i386目录内;
网络上说的要将WindowsXP光盘内的drivers.cab解压至 winxp\i386目录内,充当网卡驱动文件的做法,我的虚拟机环境内没有成功;

进入命令提示符模式,运行:
cd e:\tftp\ris-linux-0.x
.\infparser.py e:\tftp\winxp\i386
.\binlsrv.exe

*  binlsrv.exe会一直运行,不要关闭它。

—————-
【以在Windows 2003上加载SCSI驱动为例子】 —http://technet.microsoft.com/en-us/library/cc720099(WS.10).aspx

1. 在RIS镜像文件夹中加上下面的FOLDER
–%RIS_IMAGE_FOLDER%\$OEM$
–%RIS_IMAGE_FOLDER%\$OEM$\TEXTMODE

2. 把你要添加的驱动文件COPY到TEXTMODE下,修改你添加的驱动文件 txtsetup.OEM , 里面[DISKS]一段, 修改里面的值定向到新的驱动源.
[Disks]
# d1 = “Adaptec AAR-1420SA Serial ATA HostRAID Driver for Windows x64 Edition (EM64T/AMD64)”, \hraidsk1, \amd64
d1 = “Adaptec AAR-1420SA Serial ATA HostRAID Driver for Windows x64 Edition (EM64T/AMD64)”, \, \

3. 将驱动文件copy至对应的I386目录;

4. 修改winnt.sif文件加入MASS STORAGE驱动:
[Unattended]
OemPnPDriversPath=”\\192.168.1.2\RemInst\Win2003\$OEM$\textmode”
DUDisable=no
DriverSigningPolicy=ignore

[MassStorageDrivers]
“Adaptec HOSTRAID driver for Windows XP/2003 x64 Edition”=”OEM”
◆此处的名字,copy自RAID卡驱动文件中的txtsetup.oem内的SCSI字段里面,如: s2 = “Adaptec HOSTRAID driver for Windows XP/2003 x64 Edition”

[OEMBootFiles]
*.cat
*.inf
*.sys
*.oem

——————–
【怎样为RIS安装添加第三方网卡驱动】 —http://www.intel.com/support/network/sb/CS-028856.htm#XP

Note: 此步驟中一定要注意LAN driver 必須是For RIS driver,存在于NIC drivers当中RIS 文件夹里 ,README.TXT 文件当中一般会有说明如何增加NIC RIS 驱动, 。

Add client end driver in PXE SERVER.
1.Create an [IMAGE_ROOT]\$oem$\$1\Drivers\ directory if one does not already exist.
2.At above “Drivers” directory, create three file folders “NIC”,”AUDIO”,”VGA”,and “MODEM”.
3.Copy clients’LAN, Audio, VGA and Modem drivers to the above related folders.
4.Copy all .SYS files to the [IMAGE_ROOT]\i386 directory. Do NOT copy the .INF files to this directory.
*5.Copy The NIC RIS/PXE/WINPE Driver’s .NIF file to the [IMAGE_ROOT]\i386 directory.
6.Make the following changes to the .SIF file that is used for this image installation.
(located in the [IMAGE_ROOT]\I386\Templates directory):
[Unattended]
OemPreinstall = yes
OemPnPDriversPath = Drivers\NIC;Drivers\Video
7.Use ris-linux-0.4.tar.gz to Create “BinlSrv”

◆相关说明:
RIS安装使用到的自动应答文件的参数说明,不用在网络上郁闷的搜索了。在你的Windows XP光盘内X:\SUPPORT\TOOLS\DEPLOY.CAB,有事无巨细的说明!
TFTPD32:http://tftpd32.jounin.net/tftpd32_download.html
File pxelinux.0 in software syslinux: http://linux2.onlinedown.net/down/syslinux-3.86.tar.zip
ris-linux-0.X.tar.gz: http://oss.netfarm.it/guides
python-2.5.x: http://www.python.org/ftp/python

Samba常用配置[权限设定]

Samba常用配置[权限设定]

其中[]里面的MyShare指定共享名,一般就是网络邻居里面可以看见的文件夹的名字。

comment指的是对改共享的备注。
path指定共享的路径,其中可以配合samba变量使用。比如你可以指定path=/data/%m,这样如果一台机器的NETBIOS名字是 grind,它访问MyShare这个共享的时候就是进入/data/grind目录,而对于NETBIOS名是glass的机器,则进入/data /glass目录。
allow hosts和deny hosts和前面的全局设置的方法一样这里不再提及。
writeable指定了这个目录缺省是否可写,也可以用readonly = no来设置可写。
user设置所有可能使用该共享资源的用户,也可以用@group代表group这个组的所有成员,不同的项目之间用空格或者逗号隔开。
valid users指定能够使用该共享资源的用户和组。
invalid users指定不能够使用该共享资源的用户和组。
read list 指定只能读取该共享资源的用户和组。
write list指定能读取和写该共享资源的用户和组。
admin list指定能管理该共享资源(包括读写和权限赋予等)的用户和组。
public指明该共享资源是否能给游客帐号访问,这个开关有时候也叫guest ok,所以有的配置文件中出现guest ok = yes其实和public = yes是一样的。
hide dot files指明是不是像unix那样隐藏以“.”号开头的文件。
create mode指明新建立的文件的属性,一般是0755。
directory mode指明新建立的目录的属性,一般是0755。
sync always指明对该共享资源进行写操作后是否进行同步操作。
short preserve case指明不管文件名大小写。
preserve case指明保持大小写。
case sensitive指明是否对大小写敏感,一般选no,不然可能引起错误。
mangle case指明混合大小写。
default case指明缺省的文件名是全部大写还是小写。
force user强制把建立文件的属主是谁。如果我有一个目录,让guest可以写,那么guest就可以删除,如果我用force user= grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除了。
wide links指明是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置wide links = no将使该连接不可用。
max connections = n设定同时连接数是n。
delete readonly指明能否删除共享资源里面已经被定义为只读的文件。

cpio文件打包和解包

cpio文件打包和解包

设文件名initramfs.cpio.gz

 

打包操作:

find . | cpio -o -H newc | gzip > ${myDIR}/initramfs.cpio.gz

 

解包操作:

gunzip initramfs.cpio.gz

cpio -idmv < initramfs.cpio

 

解压cpio文件
cpio -idmv < filename.cpio
同样可以解压img文件:
cpio -idmv < filename.img
cpio 备份命令
备份:cpio -covB > [file|device] 将数据备份到文件或设备上
还原:cpio -icduv < [file|device} 将数据还原到系统中
常用参数:
-o   :将数据copy到文件或设备上
-i    :将数据从文件或设备上还原到系统中
-t    :查看cpio建立的文件或设备内容
-c   :一种比较新的portable format方式存储
-v   :在屏幕上显示备份过程中的文件名
-B   :让预设的blocks可以增加到5120bytes,默认是512bytes,这样可以使备份速度加快
-d   :自动建立目录,这样还原时才不会出现找不到路径的问题
-u   :更新,用较新的文件覆盖旧的文件
cpio常与find 配合使用

ISO整体启动、解开启动、PXE启动部署三合一,拷贝式安装

ISO整体启动、解开启动、PXE启动部署三合一,拷贝式安装

ISO整体启动、解开启动、PXE启动部署三合一,自动检测启动方式,基本上是拷贝式安装。

三合一需要解决一系列问题,包括:
1、组件的存放位置。一个组件(例如外置硬盘控制器驱动包),可能存放在硬盘任一分区,可能在U盘、光盘(包括量产的U盘),可能在ISO文件里,还可能 在远程PXE服务器上。要能自动找到它。其中,最常见的是找外置应用程序包,即使量产、PXE启动情形,也应找到外置应用程序包,为它们建立快捷方式。
2、组件的缺失处理。组件可有可无,自动实现有则用之,无则忽略,对重要不好忽略的采用替换方案(例如借助XP系统资源解决磁盘控制器驱动、一级、二级扩展组件缺失)。增减组件一般不用修改配置文件。
3、支持混合部署。例如,引导文件在PXE服务器,驱动在硬盘,外置应用工具在U盘。
4、减少PXE启动网络传输量。例如不传全部驱动,不传全部外置应用程序,但要用也能用。
5、目录结构一致。ISO整体启动、解开启动、PXE启动的文件目录结构保持一致。用同一个ISO文件,其内容同时适应三种启动,包括混合启动。
6、引导文件统一。同一个grldr文件,既能引导整个0PE.ISO,也能引导从0PE.ISO中取出的东西,还能混合引导两者。同一个grldr文件,既能作本地引导,也能作远程PXE引导,还能作本地+远程混合快速引导。
7、外观清爽。其中,引导文件应单文件化,再看不到其它引导相关的大堆文件。另外众多外露的配置文件也会导致不清爽,应妥善处理。
8、安装简单一致,基本上是拷贝式绿色安装。例如安装PXE服务器只需拷贝文件。从一种启动转换为另一种启动应简单自然。
9、启动效果一致。例如PXE启动与本地启动效果一致。
等等。

 

解释一下
1、ISO整体启动与解开启动

整体启动使用整个iso镜像文件,通过grub4dos仿真为光盘启动。

优点一:简洁清爽

盘上只有一个iso镜像文件(外加一个引导文件grldr),iso镜像文件可放在U盘、硬盘任意分区。
如果多个pe合放在一个U盘,每个pe一个iso镜像文件,集中在一个目录,或者一个镜像一个目录,
显得简洁清爽。U盘除了放PE,还可储存其它日常文件,它们容易与PE的文件区隔开来。

D:\
│  grldr(唯一引导文件,多用途,可隐藏)

└─0PE(可隐藏)

└─0PE.ISO
图1 0PE.ISO整体启动的部署例

优点二:保持原味

作者提供的原版往往是一个iso镜像文件,不能整体启动的话,就得将其内容展开来使用,然后
iso镜像不知放那里好,也许删了丢了,以后用展开了的东西能还原出可启动的iso镜像文件吗?
能保持与原镜像文件MD5不变相同吗?整体启动最能保持原版汁味。

优点三:只读防毒

主要缺点:耗内存

仿真光盘启动要求将iso镜像文件在磁盘上连续存放,或者整个载入内存,这样耗内存,启动速度可能慢。
所以一般整体启动的iso镜像不宜太大。通常可将一些组件取出放在外面来减少镜像体积。

困扰:找不到外置组件

整体启动典型困扰之一是可能找不到外置组件。PE启动后,仿真光盘就失效了,PE中只看到一个iso镜像文件,
镜像内的外置组件看不见,找不到。

不少PE都有这个问题。想整体启动,会被告知,必须将外置程序内置于iso镜像内某个img或is_内,
以便全部载入内存虚拟X盘,就可以找到了。但这样耗内存,且严重破坏原版文件。或被告知,须将外置程序
目录取出放在镜像外面。那么能不能放在里面?能不能里外各放一些?其必曰:不可。

由此角度看,不少PE并不是设计为原生支持整体启动iso镜像的。有的也许支持整体启动了,但解开启动
与整体启动是两套,比如用于两种启动的grldr、menu.lst等各不相同。尤其是整体启动与解开启动之间切换
应该随时可行,东西放里外都行,不用为此修改任何配置,才算“合一”。

解开启动时,盘上有多个文件,为什么要多个文件?答:既然分为多个文件,自有其用意,一般表明它们是
积木式组件,可有可无,方便取舍,否则早并在一起了。

这就带来一个问题,这些组件的分解有依据吗?能自动感知组件的有无吗?重要组件缺了有补救措施吗?

0PE的新全外置体系结构将PE合理地多级分解,并把其它PE中通常作为核心的东西处理为便于单独维护的外置
组件模块,较好地解决了上述问题。哪些文件分解,哪些合并,有其道理,语义明确。增减组件一般不用改
配置。就算只剩下2M左右的东西,依然有存在价值,并在一定条件下还具有丰富的功能。0PE还采用ZIP格式
压缩打包磁盘控制器驱动等组件,为的是方便独立维护。

D:\
│  grldr(唯一引导文件,多用途)

├─0PE(PE主要目录,可隐藏)
│  │  EXT2.WIM(二级扩展,可进入桌面,可选组件)
│  │  EXT1.ZIP(一级扩展,可进入Windows CMD,可选组件)
│  │  EXT0.ZIP(内核补充,构成零体积PE,必选组件)
│  │  KERNEL.GZ(微型内核,可进入DOS,必须)
│  │
│  ├─NET(网卡驱动包存放目录,也可放显卡、声卡驱动,可选)
│  │      DLink.CAB
│  │      Marvell.CAB
│  │      ……
│  │      NVIDIA.CAB
│  │
│  ├─SRS(磁盘控制器驱动目录,可选)
│  │      SRS1.ZIP(常用库)
│  │      SRS2.ZIP(备用库)
│  │      F6.ZIP(厂商驱动直接打包)
│  │
│  └─AUTORUNS(加入此目录的组件启动时自动挂载,可选)

└─PETOOLS(外置应用程序目录,自动创建快捷方式,可选)

├─镜像工具

├─系统工具
│  ……

└─PXE服务器
tftpd32.exe
tftpd32.ini
启动Server.cmd(运行它即成服务器端)

图2 0PE.ISO的内容及解开启动、PXE启动部署例

2、本地启动与PXE启动

不少PE没有考虑支持PXE启动。用于PXE启动时,需从iso镜像中取出其中包含的一个img或iso镜像,自己架设
pxe服务器、准备引导文件和引导菜单,服务器端安装部署麻烦。启动后只是无外置程序、不能上网的裸PE。

有的PE能PXE启动,但与本地启动是两套机制,比如用于两种启动的grldr、menu.lst等各不相同,用户使用感觉
不一致等。

0PE就一个0PE.ISO文件,量产、刻盘、装硬盘、U盘都用它,不分什么硬盘版、量产版的。公用一个grldr(这个
grldr就在0PE.ISO内有),支持多种启动及混合启动,几种启动和谐一致。在XP中把0PE.ISO虚拟成光盘,或将其
内容拷贝到硬盘/U盘,也可启动PE,网通后运行“启动PXE服务器.cmd”即成PXE服务器端。拷贝式安装,零配置。

客户端可以什么不装,以PXE方式启动后能上网,远程服务器上的外置工具宛如在本地。0PE还支持远程+本地快速
混合启动,这时服务器端和客户端全部是拷贝式安装、零配置。

几种启动和谐一致,才算“合一”。

困扰:如何减少网络传输量,如何获取服务器IP,如何使客户端可上网,服务器端、客户端目录结构如何统一,
如何支持混合启动等。
pxe.jpg
图3 4M版PXE方式启动与本地启动效果一致(本地硬盘有XP)

3、单一引导文件

SETUPLDR.BIN、NTDETECT.COM、WINNT.XPE、AVLDR、PELDR、BOOTFONT.BIN、EZBOOT、grub.exe、grldr、
menu.lst、fonts.gz等引导相关文件,最好不要让用户看见。引导是PE内部事,弄那么多文件对用户没意义,
用户U盘还准备放PE之外的日常文件,最好清爽点。不要本地引导一套,PXE启动又一套的,搞得引导相关
文件一大堆,用户看不顺搞不懂可能给删了。另外,关于配置文件,尽量不需要用户改,真要改时应该方便改,
配置文件别一大堆看着烦。

使用0PE一般用不着修改配置文件,例如添加外置工具会自动生成快捷方式。用户几乎看不到配置文件,面向
用户的配置文件(.ini等)封装在ZIP文件里,要改也很方便,ZIP格式嘛。

4、实现技术

关键技术之一是灵活运用grub4dos的强大功能,特别是一系列新功能。〇peZip版(09.02.15发帖)对grub4dos
功能使用之多、之复杂也许是空前的。其中某些功能直接向不点兄提出需求,第一时间运用到0PE中,在此特别
感谢不点兄大力支持。

部分参考资料:
1、pseudo:【原创】★新型全外置结构:《零体积全能可扩展PE》ZIP版(测试)
2、pseudo:【创新】U盘PE启动新法
3、pseudo:对grub4dos的功能需求
4、pseudo:Sending the pxe server ip to MS DOS 7.1
5、pseudo:Sending the selected menu item number to DOS
6、pseudo:0PE的手自一体grub菜单
7、chenall:[原创]支持外置硬盘控制器驱动,可任意方式启动的PE[09-02-28测试]
8、chenall:[分享]GRUB4DOS一个比较变态的用法
9、不点:有关PXE启动0PE128.ISO
10、nn2nn:(已实现)PE外置形式——开放式PE外置架构设想 01.23更新