之前介绍的
/t/330321 这个系统现在可以无盘启动了
简单来说就是通过网络加载镜像文件到内存后启动,现在实验的这几十台机器是通过 http 和 https 进行加载的,
由于主要是加载一个一百多兆镜像文件,感觉用 tcp 协议比 udp 协议效果好很多。尤其是很多台机器同时启动的时候,
使用 udp 的 tftp 时总会有一些失败的,换过不同的 tftp 服务器都是这样,而且单台启动的时候不能跑满带宽。
换成 nginx 当 http 服务器的时候就没碰到过这种问题,单台启动能跑满带宽,很多台同时启动也都能慢慢加载完。
可能用组播方式会更好吧,但没细研究组播,感觉现在的 http(s)的方案对我来说够用了。
在就是得益于系统镜像体积还算小,可以就这么直接无盘运行, 150MB 内存开销完全可以接受,这样还有个好处是
更新的时候只动服务器上的镜像就可以了,要更新的机器直接重启就行了。
加载到本机内存相比通过网络挂载根文件系统的方式在延迟的和稳定性上好太多了,尤其是机器很多的时候。毕竟不受断网影响。
无盘方式有个问题就是数据怎么回写,方案非常多,为了简单起见用了个非常粗暴的方式解决了我的问题。
对于我这的情况,就是怎么让不同机器加载不同配置,根本不需要什么回写,那解决起来就简单多了:
每台机器除了加载共用的镜像再根据各自的标识加载一个 tar 包解压叠加到根文件系统上就行了。
同时为了能自动初始化或者自动安装,如果文件服务器上没有那个标识符的文件,还会尝试加载一个默认的 tar 包,满足不同环境的制定。
前面废话一大堆,现在说下怎么用吧。
在已经运行支持 https 的 iPXE 情况下,在 iPXE 命令行输入下面两条命令之一就能启动这个系统了。
chain
https://sourceforge.net/projects/lfsp200/files/netboot/boot.ipxe chain
https://l-lfsp200.rhcloud.com/netboot/boot.ipxe注意你的网络环境要良好,这可是从大陆以外加载 150MB 左右的文件,自己计算下时间吧。
有的地区可能会遇到 iPXE 网络加载证书时被打断的情况,这时就不能加载 https 文件了。这个问题研究了很久,分明那个 boot.ipxe 能下载嘛。
下载过程有个百分比进度,不出意外加载完很快就能启动了。同事说很神奇,有透明计算的感觉。其实这都是 iPXE 的功劳。
通过公网加载确实是比较慢的,实际用的话还是要自己部署的。下面说下具体怎么操作。
由于是网络启动,至少要两台机器或者用虚拟机。(在 openwrt/lede 这样的路由器上配置也是可以的)
首先在一台机器上安装 iPXE 启动环境,这里不需要对主路由器或者提供 dhcp 的机器做任何改动即可完成。
安装 dnsmasq-2.77test4, 其他版本应该也行,但是我用这个做的实验。
下载
http://www.thekelleys.org.uk/dnsmasq/test-releases/dnsmasq-2.77test4.tar.xz 并解包
make BINDIR=/usr/bin PREFIX=/usr
make BINDIR=/usr/bin PREFIX=/usr install
建立文件 dnsmasq.proxydhcp 内容如下
########begin########
no-daemon
port=0
log-dhcp
log-queries
dhcp-range=192.168.1.0,proxy #改成你的网段
leasefile-ro
dhcp-match=ipxe,175
dhcp-boot=net:ipxe,http://<文件服务器 ip 或域名>/netboot/boot.ipxe
pxe-service=x86PC,"iPXE for 200M linux",undionly_menu.kpxe
enable-tftp
tftp-root=/srv/tftp
########end##########
运行
sudo dnsmasq -C dnsmasq.proxydhcp
这样安装 dnsmasq 是有些粗糙,下个版本的 200M linux 会内置 dnsmasq ,能通过服务启动。
还有替代 dnsmasq 的 tftp 功能的性能好一些的 tftp-hpa 也会内置。
这时用网络启动同一子网的其他机器能看到一个 iPXE for 200M linux 的菜单,但实际不能真实启动,这一步就算成功了。
然后下载
https://l-lfsp200.rhcloud.com/netboot/undionly_menu.kpxe 保存到 /srv/tftp 下面。
这时再网络启动其他机器,正常的话能看到一个菜单,其中有两个菜单是用前面的网址启动系统的。
最后一步下载镜像文件
在 web 服务器文件目录下面建立文件夹 netboot
再把
https://l-lfsp200.rhcloud.com/netboot/ 下面的所有文件下载到 netboot 目录里面。
这一步有个脚本能方便操作
wget
https://l-lfsp200.rhcloud.com/netboot/netboot_dl.sh sh
netboot_dl.sh #这个脚本是从 sourceforge 下载文件,可编辑改成从 rhcloud 下载,看那个快吧。
再次网络启动其他机器,正常的话会直接启动系统,看不到刚才那个菜单了。
然后就是怎么让加载额外的配置文件了。
无盘系统启动后,进行所需的设置(参考一下之前的帖子介绍),然后进入 /mnt/tmpfs
有一个一串字符的目录, 忽略.work 后缀的那个。这个目录就是配置文件了,
把它 tar 成一个 <原来的一串字符>.tar.xz 的文件,放到文件服务器 netboot/ovl 目录下面。
这台机器再次启动的时候就能加载这个文件了。
为了减少体积,可把这个 .tar.xz 解压到别处删除一些临时文件日志文件重新打包的。
如果要把这个文件当作共用的模板,解压后重命名成 default 再打包成 default.tar.xz 放到 netboot/ovl 下面即可。
罗哩罗嗦算是写完了,可能说的不太明白,等下次发布的时候弄个脚本自动设置吧。感觉看脚本更清晰。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/343188
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.