ipxe中menu.c32和vesamenu.c32的用法

在做pxelinux启动的过程中,不可避免的会用到菜单选项。有两个选择,menu.c32 和 vesamenu.c32。 效果如下: menu.c32 vesamenu.c32 区别就是一个地方,我们看一下配置文件: default vesamenu.c32 PROMPT 0 NOESCAPE 0 ALLOWOPTIONS 0 TIMEOUT 200 MENU TITLE Boot Menu LABEL Ghost_Client_UNDI MENU LABEL ^1. Ghost Client UNDI MENU DEFAULT kernel memdisk append keeppxe initrd=imz/Client_undi.imz LABEL Ghost_Client_NDIS MENU LABEL ^2. Ghost Client NDIS kernel memdisk APPEND keeppxe initrd=imz/Client_ndis.IMZ LABEL WinPE MENU LABEL ^3. WinPE 2.0 KERNEL boot/pxeboot.0 LABEL PartedMagic MENU LABEL ^4. Parted Magic kernel utils/pmagic/bzImage LABEL Local_Drive MENU LABEL ^5. Boot Local Drive # localboot 0 KERNEL chain.c32 APPEND hd0 0 区别就是第一行: ...

2024年01月18日 · 1 分钟 · 108 字 · 八戒

ipxe启动Dos 6.22

太古老的命题了,如果想玩Dos 6.22之下的游戏,那就需要引动一个Dos系统了。 系统文件倒是现成的,Dos6.22.img。 如何做个ipxe的启动呢? 简单,依样画葫芦,修改boot2.php case '\52:54:00:7f:65:bb': echo "initrd http://172.16.8.1/ks/dos/Dos6.22.img\n"; echo "chain http://172.16.8.1/ks/dos/memdisk\n"; break; memdisk是从syslinux中拷贝的,也是神器。 其实可以用sanboot来启动的,但是那样起动起来的系统对C盘无写权限,因为dos下没有san的驱动可用。 所以改用memdisk,这样权限变为可写的了。

2024年01月18日 · 1 分钟 · 17 字 · 八戒

ipxe与aoe启动

先普及一下,aoe(ata over ethernet),跟iscsi差不多,不过是硬盘协议走在了以太网上。iscsi是3层的协议,aoe是二层的协议。 因为是二层的,所以没有网关、路由等等,相对强制的,客户端和服务器端必须是位于同一子网内。 先装服务端vblade: yum install vblade 然后准备存储空间,像lv、raw文件、硬盘(/dev/sdb)、硬盘分区(/dev/sdb1)或者raid磁盘/dev/md0都可以用作储存。 做一块20G的raw文件存储空间: mkdir /storage dd if=/dev/zero of=/storage/storage1.img bs=1024k count=20000 做一块aoe硬盘: vbladed 65535 255 eth0 /storage/storage1.img 解释一下 vbladed 后面跟了2个数字,第一个是主序列号,可以从 0-65535,第二个是次序列号,可以从0-255。然后跟发布的网卡,最后是存储空间。 最好把vbladed放入/etc/rc.d/rc.local vi /etc/rc.local vbladed 65535 255 eth0 /storage/storage1.img ok,服务器端的工作就完成了,大家看到了,基本什么也没设,因为是走在二层么。 然后ipxe部分就简单了,依样画葫芦修改boot2.php: case '\52:54:00:d9:fe:43': echo "set keep-san 1\n"; echo "sanboot aoe:e65535.255\n"; break; 搞定

2024年01月18日 · 1 分钟 · 48 字 · 八戒

ipxe远程启动iscsi上面的克隆卷

按上一篇所说,我们已经弄了个iscsi上面的win7卷,其实就是把萝卜花园的win7 clone到了一个10G的文件卷上。 引申问题: 大家其实可以用qcow2的文件格式保存的: qemu-img create -f qcow2 /export/iscsi/windows7.qcow2 60G vi /etc/tgt/targets.conf <target iqn.2016-07.com.renhe:renhe-16-8-6.disk03> backing-store /export/iscsi/disk03.img backing-store /export/iscsi/windows7.qcow2 write-cache off </target> tgt-admin --execute 那么,我们如何让ipxe直接起动这个iscsi卷呢? 还是编辑boot2.php即可: case '\52:54:00:d9:fe:43': echo "sanboot iscsi:172.16.8.6::3260:1:iqn.2016-07.iscsi:disk03\n"; break; 注意啊,查遍很多网上资料: sanboot的参数都是iscsi:ip::::iqn,实际无论是实体机的pxe,还是kvm虚拟机的pxe,都无法启动。以下格式才是正确的: iscsi:ip::3260:1:iqn 这样装个win7就简单了,拷贝一下disk03.img这个模板,启动pxe即可 #!/bin/bash virt-install \ --name=pxe-16-11-8 \ --vcpu=2 \ --ram=4096 \ --nodisks \ --boot network \ --os-type=windows \ --os-variant=win7 \ --network bridge=br0 \ --vnc --vnclisten=0.0.0.0 --vncport=5910 以后就可以用这个办法瞬间弄出一堆win虚机了,用完就删除

2024年01月18日 · 1 分钟 · 60 字 · 八戒

kvm使用iscsi作为存储池安装win

最近都在研究ipxe和iscsi,那么如何让kvm使用存储在iscsi上面的文件卷呢? 假设我们已经按之前的文章架好了iscsi: 造个10G文件: dd if=/dev/zero of=/export/iscsi/disk03.img count=0 bs=1 seek=10G 服务端增加iscsi target vi /etc/tgt/targets.conf <target iqn.2016-07.com.renhe:renhe-16-8-6.disk03> backing-store /export/iscsi/disk03.img write-cache off </target> tgt-admin --execute isci准备好了,然后我们去kvm定义池子:myiscsi virsh virsh# pool-define-as myiscsi 172.16.8.6 - iqn.2016-07.com.renhe:renhe-16-8-6.disk03 - /dev/disk/by-path virsh# pool-start myiscsi Name State Autostart ----------------------------------------- myiscsi active no virsh# pool-autostart myiscsi virsh # pool-list Name State Autostart ----------------------------------------- myiscsi active yes virsh# vol-list myiscsi Name Path ----------------------------------------- unit:0:0:1 /dev/disk/by-path/ip-172.16.8.6:3260-iscsi-iqn.2016-07.com.renhe:renhe-16-8-6.disk03-lun-1 ok,记下来这个Name:unit:0:0:1 然后我们来安装win的kvm吧,直接clone输出到硬盘 virt-install \ --name=iscsi-16-11-9 \ --vcpu=2 \ --ram=4096 \ --cdrom=/export/kvm/iso/Luobo_Ghost_Win7_SP1_x86_2015_0904.iso \ --boot network,cdrom,hd,menu=on \ --disk vol=myiscsi/unit:0:0:1 \ --os-type=windows \ --os-variant=win7 \ --network bridge=br0 \ --vnc --vnclisten=0.0.0.0 --vncport=5911 注意上面disk的参数,myiscsi/unit:0:0:1 ...

2024年01月18日 · 1 分钟 · 95 字 · 八戒

IPXE万能工具hiren.iso的启动方式

我们希望有紧急情况出现的时候,ipxe可以用systemrecuecd救急,可能也希望机器上架前测测内存、分区、起个winpe等等。这时候就要用到hiren这个工具了,这个东西就是国外的老毛桃工具箱! 很简单,修改boot2.php case '\52:54:00:a7:ef:5d': echo "initrd http://172.16.8.1/ks/winpe/Hiren.iso\n"; echo "chain http://172.16.8.1/ks/winpe/memdisk iso raw\n"; break; memdisk从syslinux里面拷贝即可。 这样就有一个万用工具可用了,iso启动都可以采用这种方式哦。

2024年01月18日 · 1 分钟 · 15 字 · 八戒

IPXE远程运行sysrecuecd系统

既然用到ipxe,就试试远程运行systemrecuecd。万一系统出毛病,可以用来恢复或者急救。 下载cd wget http://downloads.sourceforge.net/project/systemrescuecd/sysresccd-x86/4.7.3/systemrescuecd-x86-4.7.3.iso 装进 http://172.168.8.1/ks/sysrcd目录中 mount -o loop systemrescuecd-x86-4.7.3.iso /mnt/iso mkdir -p /var/www/html/ks/sysrcd cp -r /mnt/iso/* /var/www/html/ks/sysrcd 重头戏,依然按前面的方法修改boot2.php即可 case '\ec:f4:bb:d9:96:40': $ip="172.16.36.2:172.16.37.254:255.255.254.0:myhost-16-36-2"; $ipa=explode(':',$ip); echo "ifopen net0\n"; echo "set net0/ip $ipa[0]\n"; echo "set net0/netmask $ipa[2]\n"; echo "set net0/gateway $ipa[1]\n"; echo "set net0/dns $dns\n"; echo "set base-url http://172.16.8.1/ks/sysrcd\n"; echo "kernel \${base-url}/isolinux/rescue32 netboot=\${base-url}/sysrcd.dat nodhcp eth0=172.16.36.2/23 dns=172.16.8.1 gateway=172.16.37.254 rootpass=xxxxxxxx vncserver=1:password nameif=eth0:ec:f4:bb:d9:96:40\n"; echo "initrd ${base-url}/isolinux/initram.igz\n"; echo "boot\n"; break; 注意上面,静态ip的设置部分,还有同时设置了sshd和vncserver,方便远程操作。

2024年01月18日 · 1 分钟 · 64 字 · 八戒

用IPXE启动个Ubuntu桌面

有了上篇IPXE的启动方法,我们来启动一个Ubuntu来玩: 简单的修改boot2.php即可: case '\ec:f4:bb:d9:96:40': $ip="172.16.36.2:172.16.37.254:255.255.254.0:myhost-16-36-2"; $ipa=explode(':',$ip); echo "ifopen net0\n"; echo "set net0/ip $ipa[0]\n"; echo "set net0/netmask $ipa[2]\n"; echo "set net0/gateway $ipa[1]\n"; echo "set net0/dns $dns\n"; echo "kernel http://172.16.8.1/ks/ubuntu/vmlinuz.efi root=/dev/nfs boot=casper netboot=nfs nfsroot=172.16.11.6:/root/ubuntu ip=172.16.36.2::172.16.37.254:255.255.254.0:renhe-16-36-2:eno1 ro\n"; echo "initrd http://172.16.8.1/ks/ubuntu/initrd.lz\n"; echo "boot\n"; break; 注意:变的就是kernel和init那两行,netboot支持nfs和cifs,不支持http啊,试了半天!另外ip那一行,如果是动态的,ip=dhcp,如果是静态的,格式如下: ip=客户端ip:服务器端ip:网关:掩码:主机名:网卡 服务器端ip不填,主机名也可以不填。 首先我们要去下个ISO wget http://mirrors.163.com/ubuntu-releases/16.04/ubuntu-16.04-desktop-amd64.iso 然后把vmlinuz.efi和initrd.lz弄出来,放到[http://172.16.8.1/ks/ubuntu]目录下 mount -o loop ubuntu-16.04-desktop-amd64.iso /mnt/iso cp /mnt/iso/casper/vmlinuz.efi /var/www/html/ks/ubuntu cp /mnt/iso/casper/initrd.lz /var/www/html/ks/ubuntu 然后建立nfs,把iso里的东西都弄到nfs共享里去: mkdir -p /export/ubuntu vi /etc/exports /export/ubuntu *(rw,sync,no_subtree_check,fsid=0,no_root_squash) yum install -y nfs-utils rpcbind service nfs start ok,启动pxe,就看到桌面了。

2024年01月18日 · 1 分钟 · 75 字 · 八戒

IPXE kickstart安装CentOS的方法

这些年IDC物理机装机的大法也在不断衍进,从最早的手动装一堆tftp/dhcp/syslinux/httpd,到cobbler的一统江湖,到现在的dnsmasq轻量级安装,nocps安装,一直在不断进化着。 因为cobbler实在太重,不得不专门起一个kvm虚机来运行,完全不喜欢啊。所以一直也在研究终极安装服务器的大法。 折腾服务器无数回,找出了个自己比较喜欢的方式。 首先介绍一下背景知识: PXE 可以通过网络给计算机安装操作系统。 PXE协议大致上结合了DHCP和TFTP。 gPXE gPXE是PXE的一个开源实现(更早的实现是Etherboot)。通过gPXE能让网卡直接支持网络启动,而不依赖于网卡自带的PXE固件。同时相比PXE,gPXE支持更多的协议。 传统的PXE只能通过TFTP进行传输,而gPXE支持HTTP,iSCSI和ATA over Ethernet(AoE),甚至支持wifi链接。 iPXE iPXE表示 it doesn’t PXE。iPXE是gPXE的原班人马写的(他们从Etherboot开始),作为官方的gPXE的替代品。 gPXE扩展的功能在iPXE中都得到支持。 之所以不再使用gPXE是由于存在版权纠纷,iPXE从2010年4月开始,基于同一个代码库开始开发。 PXELINUX Syslinux是一个优秀的系统启动加载器(bootloader),可引导自硬盘、光盘、和通过PXE的网络启动。 PXELINUX派生自Syslinux,用来使支持PXE的网卡从网络引导启动Linux。PXELINUX程序不是烧在网卡里,而是存储在TFTP服务器上。 Chainloading iPXE 可以把iPXE当作固件刷进计算机网卡的ROM里替换掉自带的PXE,但更为常见的是通过chainloading的方式进入iPXE。 有点晕是吧,总结一下,pxe包含了gpxe/ipxe/pxelinux,ipxe是最新的,gpxe/ipxe/pxelinux可以通过chain的方式顶替网卡原生的pxe。 推荐的装机方式: 客户机启动网卡自带的固件pxe,然后去服务器拉一个gpxe/ipxe,然后启动这个gpxe/ipxe,再去服务器拉具体的启动文件,这种就是chain方式了。我们就可以用到http/iscsi/wifi等各种先进方式启动了。 我们第一步先要准备一个gpxe的boot文件。 解释一下,文件后缀有.pxe/.kpxe/.kkpxe,这是个递进关系,.pxe是最原生的网卡驱动,.kpxe包含了调用原生网卡的UNDI驱动(无网卡驱动),.kkpxe更进一步,包含了UNDI+PXE原生网卡的驱动。 当然选择.kpxe了,我们的目的就是通过这个ipxe调用原生网卡上的驱动即可,如果是你自己要烧网卡的bootroom片子,就得选择所有驱动了。 这样我们会得到一个 gpxe-1.0.1-undionly.kpxe 的文件,保存备用。 然后我们来设置Dnsmasq: log-dhcp dhcp-no-override enable-tftp tftp-root = /tftpboot dhcp-range=tftp,172.16.36.100,172.16.36.105 dhcp-match=gpxe,175 dhcp-boot=net:#gpxe,gpxe-1.0.1-undionly.kpxe,gxe/bootserver,172.16.36.1 dhcp-boot=http://172.16.8.1/ks/boot.txt 注意:gpxe-1.0.1-undionly.kpxe是放在/tftpboot/gpxe/之下的 上面有很多玄机,dhcp-range是随便设一个地址池,因为最终实际是gpxe来决定地址,所以第一次dhcp得到的地址反而不重要了。dhcp-no-override一定要有,否则gpxe有bug,无法启动。 其次匹配gpxe,凡是175的都是gpxe,为什么要匹配呢?看下面,有两个dhcp-boot启动选项,#pxe,#表示不是,这行意思是:不是gpxe启动的话用/tftp/gpxe/gpxe-1.0.1-undionly.kpxe来启动,dhcp的server是172.16.36.1。第二行如果是gpxe启动的话,就chain到[http://172.16.8.1/ks/boot.txt]去启动 呵呵,如果不这么设置,就用一行的话: dhcp-boot=gpxe-1.0.1-undionly.kpxe,gxe/bootserver,172.16.36.1 就会陷入死循环,首先pxe启动,抓了个gpxe,gpxe又启动抓了个gpxe,又抓gpxe,循环往复没玩没了。所以必须标记gpxe,并跳出这个循环。 我们在172.16.8.1上面建立/centos7的yum安装源,同时建立/ks目录。准备boot.txt,boot2.php,boot3.php,centos7.ks四个文件,下面一个一个解释: 首先是boot.txt cat boot.txt #!gpxe chain http://172.16.8.1/ks/boot2.php?uuid=\${uuid}&mac=\${mac}&busid=\${busid}&ip=\${ip}&hostname=\${hostname:uristring}&serial=\${serial:uristring}&asset=\${asset:uristring}&manufacturer=\${manufacturer:uristring}&product=\${product:uristring} 大家看上面,boot.txt是个gpxe脚本,实际是让gpxe向boot2.php传输了一些数据过来,有机器的uuid/mac/busid/hostname/serial/product等等。给个具体的例子,从access.log看到实际发过来的请求如下: "GET /ks/boot2.php?uuid=%5C44454c4c-5600-1054-8042-b1c04f433532&mac=%5Cec%3Af4%3Abb%3Ad9%3A96%3A40&busid=%5C01%3A80%3A86%3A15%3A21&ip=%5C172.16.36.100&hostname=%5C&serial=%5C1VTBC52&asset=%5C&manufacturer=%5CDell%20Inc.&product=%5CPowerEdge%20R730 HTTP/1.0" 200 46 "-" "gPXE/1.0.1" "-" 看上面,有很多信息,网卡的物理地址,还有serial,对应dell就是svc tag号,还有机器类别PowerEdge R730,这是个好东西啊。 我们购买机器的时候肯定有序列号,上架到机房的时候,可以让idc抄下来机柜和序列号,然后我们让网管规划好ip,再这里就可以利用serial来确定机器应该按哪个模板安装。 ...

2024年01月18日 · 2 分钟 · 365 字 · 八戒

kickstart安装脚本中如何同时配置bridge和bond

如何在kickstart脚本中既配置br,又配置bonding呢? 基本篇: 以Dell R730为例,物理网卡名称是em1/em2/em3/em4 network --device=br0 --noipv6 --onboot=yes --bridgeslaves=bond0 --gateway=172.16.37.254 --ip=172.16.36.2 --nameserver=172.16.8.1 --netmask=255.255.254.0 --activate network --device=bond0 --noipv6 --onboot=yes --bondslaves=em1,em2 --bondopts=mode=active-backup,balance-rr;primary=em1,miimon=80,updelay=60000 --activate network --device=em1 --noipv6 --nodns --onboot=yes --activate network --device=em2 --noipv6 --nodns --onboot=yes --activate network --device=em3 --noipv6 --nodns --onboot=yes --activate network --device=em4 --noipv6 --nodns --onboot=yes --activate network --hostname=myhost-16-36-2 注意以上,是只做了 em1 和 em2 绑定成为 bond0 ,然后 br0 启动在 bond0 之上。 进阶篇: 基本篇的做法固然是做了四网卡绑定和桥接,副作用也是很可怕的。 大家去看/etc/sysconfig/network-scripts, 里面有一堆的ifcfg-br0-slave_1,ifcfg-bond0-slave_1, ifcfg-bond0-slave_2,更可恶的是进程中跑着好几个dhcp-client,一想就明白了,这是NetworkManager搞得。em3和em4不断去启停端口,试图获得地址,导致交换机端口忽断忽通。 这个试图自动化网络的东西在服务器跑上实在是太无聊了。 所以上面的做法摒弃。在%post把网络搞好: ... %packages @compat-libraries @core wget net-tools chrony bridge-utils %end ... network --bootproto=static --device=em1 --noipv6 --nodns --onboot=yes --gateway=172.16.37.254 --ip=172.16.36.2 --nameserver=172.16.8.1 --netmask=255.255.254.0 network --bootproto=dhcp --device=em2 --noipv6 --nodns --onboot=no network --bootproto=dhcp --device=em3 --noipv6 --nodns --onboot=no network --bootproto=dhcp --device=em4 --noipv6 --nodns --onboot=no network --hostname=myhost-16-36-2 ... %post yum -y erase NetworkManager cat </etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTPROTO=static ONBOOT=yes IPADDR=172.16.36.2 NETMASK=255.255.254.0 GATEWAY=172.16.37.254 EOF cat < /etc/modprobe.d/bonding.conf alias bond0 bonding BONDING_OPTS="miimon=100 mode=1 primary=em1" EOF cat < /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 ONBOOT=yes USERCTL=no BRIDGE=br0 EOF cat < /etc/sysconfig/network-scripts/ifcfg-em1 DEVICE=em1 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BRIDGE="br0" EOF cat < /etc/sysconfig/network-scripts/ifcfg-em2 DEVICE=em2 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BRIDGE="br0" EOF %end 注意上面,安装包必须安装bridge-utils,否则没有brctl,无法启动br0。 ...

2024年01月18日 · 1 分钟 · 163 字 · 八戒