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 字 · 八戒

Dell idrac 重启机器进入单次pxe安装

用Dell idrac的脚本来使服务器进入单次pxe安装进程。 脚本如下: sshpass -p "xxxxxxxx" ssh -oStrictHostKeyChecking=no root@172.16.17.1 racadm set iDRAC.ServerBoot.BootOnce 1 sshpass -p "xxxxxxxx" ssh -oStrictHostKeyChecking=no root@172.16.17.1 racadm set iDRAC.ServerBoot.FirstBootDevice PXE sshpass -p "xxxxxxxx" ssh -oStrictHostKeyChecking=no root@172.16.17.1 racadm serveraction powercycle

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

nxlog推送数据到elasticsearch

其实rsyslog、syslog-ng、nxlog这三种东西真的是都差不多。随便选一个用都没问题。 比较喜欢nxlog的route和json以及箭头的功能,很简洁,所以用它来推数据到elasticsearch 方法一、用om_elasticsearch推: ... <Input in> Module im_tcp Host 0.0.0.0 Port 1514 InputType Binary </Input> <Output es> Module om_elasticsearch URL http://localhost:9200/_bulk FlushInterval 2 FlushLimit 100 # Create an index daily Index strftime($EventTime, "nxlog-%Y%m%d") IndexType "My logs" # Use the following if you don't have $EventTime set #Index strftime(now(),"nxlog-%Y%m%d") </Output> <Route r> Path in => es </Route> ... 方法二、用om_http推: ... <Output elasticsearch> Module om_http URL http://elasticsearch:9200 ContentType application/json Exec set_http_request_path(strftime($EventTime, "/nxlog-%Y%m%d/" + $SourceModuleName)); rename_field("timestamp","@timestamp"); to_json(); </Output> ... 我们生产上是将各个机器上的日志通过rsyslog发到nxlog,再由nxlog导入elasticsearch,然后用kinaba看。 ...

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

F5-bigip的Load balance告警邮件设置

F5-Bigip负载均衡设备,在我们的生产环境,用于分发前端的请求,如果后端的成员离线了,需要及时得到通知。 规则是:load balance池子里的成员如果离线,就发送告警邮件,如果又恢复了,也发告警邮件。 首先我们需要在内网中设置一个邮件发送服务器,我们用的是qq的企业邮箱,如何设置在之前说过,这里设置的是内网用这台服务器发邮件不需要验证,但是发送者必须是monit@company.com。 先来确认f5的版本,不同的版本不一定通用撒。这里版本是11.5.3才可以。 登录F5(ip是172.16.0.1),查看版本,是不是11.5.3 $ ssh user@172.16.0.1 # tmsh show /sys version ... Product BIG-IP Version 11.5.3 ... # quit 编辑/etc/ssmtp/ssmtp.conf,设置邮件服务器 # vi /etc/ssmtp/ssmtp.conf mailhub=192.168.0.1 # 如果没有安装内网的邮件服务器,可以在这里设置。安装了就不用设 FromLineOverride=YES UseTLS=yes AuthUser=smtp_account AuthPass=password 设置告警内容: alert BIGIP_MCPD_MCPDERR_POOL_MEMBER_MON_DOWN "Pool (.*?) member (.*?):(.*?) monitor status down." { email toaddress="user01@company.com,user02@company.com" fromaddress="monit@company.com" body="A pool member went down" } alert BIGIP_MCPD_MCPDERR_POOL_MEMBER_MON_UP "Pool (.*?) member (.*?):(.*?) monitor status up." { email toaddress="user01@company.com,user02@company.com" fromaddress="monit@company.com" body="A pool member went up" } ok,搞定。不用重启什么的啊,即时生效。 ...

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

在Ubuntu上装个plsql通过远程桌面访问oracle

这真是个无比古怪的审计需求,需要让一些同事能访问oracle,但是不允许他们通过剪切板拷贝数据。 这只能是kvm+Ubuntu+xrdp+wine+plsql来实现了(CentOS应该也没问题) 首先准备ubuntu的iso,选精简的server版,桌面手动装: wget http://mirrors.163.com/ubuntu-releases/12.04/ubuntu-12.04.5-server-i386.iso 生成kvm虚机磁盘: qemu-img create -f qcow2 /home/kvm/ubuntu.qcow2 20G 安装kvm虚机: virt-install \ --name=ubuntu \ --vcpu=1 \ --ram=2048 \ --disk path=/home/kvm/ubuntu.qcow2,format=qcow2,size=20 \ --cdrom=/home/kvm/ubuntu-12.04.5-server-i386.iso \ --os-type=linux \ --network bridge=br0 \ --vnc --vnclisten=0.0.0.0 --vncport=5901 这时候就要连到实机的vnc 5901端口,开始安装。反正是只要用plsql的,所以缺省都可。记住要装上sshd server,便于远程管理。 装ubuntu时会提示生成一个非root用户,就叫plsql好了。 安装不表,安装好了以后因为装了sshd,所以就可以ssh远程操作了。 安装wine: sudo apt-get install software-properties-common sudo add-apt-repository ppa:ubuntu-wine/ppa sudo apt-get update sudo apt-get install wine 安装xrdp和gnome-shell以及输入法: sudo apt-get install xrdp sudo apt-get install gnome-shell sudo apt-get install ibus sudo apt-get install fcitx-table-wbpy 设置xrdp由gnome-session控制: ...

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

设置git ssh代理

万万没想到啊,github被封轮到自己头上了。 这个博客是在windows下用Typora写的,然后hugo生成,直接用git for windows提交,今天git无法提交了。 必须设置一下git ssh的代理了,我用的是socks5。 在C:\Users\username\.ssh\config文件中添加相关配置,如果没有config文件需要手动创建,connect命令是git Windows客户端git for windows自带的, 位于<Git-install-path>\mingw64\bin\connect.exe socks代理添加以下配置 Host github.com(改成你的站点) ProxyCommand connect -S 127.0.0.1:1080 %h %p 可以配置多个网站Host Host github.com(改成你的站点) ProxyCommand connect -S 127.0.0.1:1080 %h %p Host bitbucket.org(改成你的站点) ProxyCommand connect -S 127.0.0.1:1080 %h %p 如果Host设置为*,代理会对所有未配置的Host起作用。以下有三项配置,访问github使用第二项配置,访问bitbucket使用第三项配置,其它网站使用第一项配置 Host * ProxyCommand "C:/Program Files/Git/mingw64/bin/connect.exe" -H 127.0.0.1:1080 %h %p IdentityFile "C:/Users/bybon/.ssh/id_rsa" TCPKeepAlive yes IdentitiesOnly yes Host github.com ProxyCommand connect -S 127.0.0.1:1080 %h %p Host bitbucket.com ProxyCommand connect -S 127.0.0.1:1080 %h %p

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

Postfix和Sendmail设置所有邮件都收到一个邮件用户下

Postfix设置所有邮件都收到一个邮件用户下 申请了一个yi.zapto.org的免费域名,想把*@yi.zapto.org的邮件地址都送到zrr@yi.zapto.org这个地址去。 用Postfix来做: 编辑main.cf,设置邮件的域名,对了,最好在/etc/hosts中增加yi.zapto.org域名的解析。 # vi /etc/postfix/main.cf ... inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, yi.zapto.org virtual_alias_maps = hash:/etc/postfix/virtual ... 编辑virtual,设置全域邮件转发到zrr # vi /etc/postfix/virtual @yi.zapto.org zrr # postmap /etc/virtual 如果有多个域名,那么在mydestination最后依次添加,并且修改virtual并重新hash即可。 ok,重启postfix service postfix restart Sendmail设置所有邮件都收到一个邮件用户下 用Sendmail来做: 编辑local-host-names,设置邮件的域名,对了,最好在/etc/hosts中增加yi.zapto.org的解析,否则sendmail启动时会反解,速度很慢。 # vi /etc/mail/local-host-names yi.zapto.org 编辑virtusertable,设置全域邮件转发到zrr # vi /etc/virtusertable @yi.zapto.org zrr # rm /etc/virtusertable.db # cd /etc/mail # make 编辑sendmail.cf,增加信任用户nobody # vi /etc/mail/sendmail.cf ... ##################### # Trusted users # ##################### # this is equivalent to setting class "t" Ft/etc/mail/trusted-users Troot Tdaemon Tuucp Tnobody ... 这样所有发过来的邮件都会自动转发到zrr这个账号下。 ...

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

更新jar包或者jar包中的文件

jar包可以当作一个zip包来看待。 jar文件:/home/resin.jar 需要更新包中com/caucho/server/port/Port.class类文件 方法1,直接更新: 查看jar包的文件目录结构 jar tf resin.jar 更新指定内容 jar uf resin.jar com/caucho/server/port/Port.class jar uf testRedis-33.jar redis.properties 方法2,解压替换后再打包: 解压包: mkdir new cd new jar xvf ../testRedis-33.jar 进行修改 vi redis.properties 重新压包 jar cmvf META-INF/MANIFEST.MF t.jar *

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

怀念永远的freshmeat.net

怀念永远的freashmeat 这个网站是从一开站就关注的,基本上天天都看,有10几年了。 持续到2014年6月18日,永久的封站了。 时不时的,仍会打开这个网页,逡巡良久!!!,时光荏苒,2024年了,关站都要10年了。纪念一下!

2024年01月16日 · 1 分钟 · 4 字 · 八戒