IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    RancherOS iPXE 启动以及ISO重新打包的方法

    shendao发表于 2016-06-12 16:31:43
    love 0

    VER: 1

    RancherOS iPXE 启动以及ISO重新打包的方法

    意义

    最近一直在尝试自己写一服务器平台方便自己和别人开发的,能把流程做进去最好了。 但是万事开头难,在尝试了CoreOS iPXE 启动方法之后发现Image太大大概要200mb+的样子。 Boot2Docker始终没找到正确的看文档的方式,这种方法我个人预估也只能是Docker ToolBox使用比较靠谱了。 然后开始尝试RancherOS的IPXE启动操作系统但是但是很不稳定,有的时候Cloud-init下载不了。 大概2次就有一次无法启动不能忍,但是不用cloud-init还好,但是也是去了在我这里使用的意义。 这种只适合大规模的集群部署。不得不说他们的工作真的很赞。

    那么要满足我的需求:

    1. Image 要小
    2. 开机迅速,可定制。各种系统配置。
    3. 稳定不容易出错。
    4. 自动持久化。
    5. 可以持续集成打包。

    那么就只有一个路线syslinux使用 mkisofs 这个工具重新打包RancherOS最后我自己打包的结果30mb 比官方的还小1mb还可以对docker 进行自动持久化。方便在不同系统种分发Docker daemon

    iPXE 启动的方法:

    VirtualBox参考启动:

    VBoxManage createvm --name "service" --register VBoxManage modifyvm "service" --memory 512 --acpi on --boot1 dvd VBoxManage modifyvm "service" --nic1 hostonly --hostonlyadapter1 vboxnet0 --nicpromisc1 allow-all VBoxManage modifyvm "service" --nic2 nat  --natnet2 "192.168/16" --natpf2 "guestssh,tcp,,2222,,22" --nicpromisc2 allow-all VBoxManage modifyvm "service" --ostype Linux  VBoxManage createhd --filename /mnt/vdis/io.vdi --size 10000 VBoxManage storagectl "service" --name "IDE Controller" --add ide VBoxManage storageattach "service" --storagectl "IDE Controller"  /     --port 0 --device 0 --type hdd --medium /mnt/vdis/io.vdi VBoxManage storageattach "service" --storagectl "IDE Controller" /     --port 1 --device 0 --type dvddrive --medium /mnt/git/ipxe/src/bin/ipxe.iso 

    因为总是需要重新启动调试所以这里把所有的VBOX操作都自动化。提升调试速度。

    ipxe.iso 重新打包

    因为要针对我们的using case使用,我们需要自动化boot一个固定的操作系统 所以这里要针对我们的脚本重新打包。

    iso重新打包命令如下

    git clone git://git.ipxe.org/ipxe.git cd ipxe/src make bin/ipxe.iso EMBED=bootscript 

    打包依赖:

    gcc (version 3 or later) binutils (version 2.18 or later) make perl syslinux (for isolinux, only needed for building .iso images) liblzma or xz header files 

    bootscript 的内容:

    #!ipxe  dhcp chain http://192.168.56.1:8089/boot.html 

    注意: boot的时候请求的整个地址返回的内容为启动脚本。

    启动脚本内容:

    #!ipxe # Boot a persistent RancherOS to RAM  # Location of Kernel/Initrd images set base-url http://192.168.56.1:8089  kernel ${base-url}/vmlinuz044 rancher.state.formatzero=true rancher.state.autoformat=[/dev/sda] rancher.cloud_init.datasources=['url:http://192.168.56.1:8089/rancheros.yml'] initrd ${base-url}/initrd044 boot 

    然后就可以启动RancherOS了。

    启动流程说明: 虚拟机启动->启动ipxe DVD->Chain load 请求 boot.html -> iPXE 根据boot.html下载 vmlinuz initrd -> 带入参数启动Linux(其实PE之类的也都好使)

    参考文档:

    • 代码下载以及编译参考
    • iso重新打包,嵌入脚本参考
    • 所有的BuildCFG参考

    重新打包RancherOS 系统image

    虽然官方提供了 Release下载 但是这里面的iso对于我的使用场景来说还远远不够。 首先默认密码不能是固定的rancher,另外Docker 自动持久化的部分并没有做,另外就是Docker启动参数我不想用默认的我需要有一定的调整。这些原因通过iPXE.iso重新打包的方法学习之后促成了这一想法虽然简单,但是kernel参数的调整的确花费了我至少2-3小时的时间。为了避免自己再次踩坑来写一些说明。

    VBOX 调试脚本

    VBoxManage createvm --name "service" --register VBoxManage modifyvm "service" --memory 512 --acpi on --boot1 dvd VBoxManage modifyvm "service" --nic1 hostonly --hostonlyadapter1 vboxnet0 --nicpromisc1 allow-all VBoxManage modifyvm "service" --nic2 nat  --natnet2 "192.168/16" --natpf2 "guestssh,tcp,,2222,,22" --nicpromisc2 allow-all VBoxManage modifyvm "service" --ostype Linux  VBoxManage createhd --filename /mnt/vdis/io.vdi --size 10000 VBoxManage storagectl "service" --name "IDE Controller" --add ide VBoxManage storageattach "service" --storagectl "IDE Controller"  /     --port 0 --device 0 --type hdd --medium /mnt/vdis/io.vdi VBoxManage storageattach "service" --storagectl "IDE Controller" /     --port 1 --device 0 --type dvddrive --medium /mnt/git/rancheros.iso 

    打包命令(build.sh):

    mkisofs -o ros.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table rosiso/ 

    打包后结果

    ├── build.sh ├── rosiso │   ├── initrd │   ├── isolinux │   │   └── isolinux.bin │   ├── isolinux.cfg │   └── vmlinuz └── ros.iso 

    文件来源:

    • initrd 以及vmlinuz 从rancheros release 页面获取
    • isolinux.bin 如果是ubuntu文件的位置在: /usr/lib/syslinux/isolinux.bin
    • boot.cat 是自动生成的
    • ros.iso 生成的系统镜像

    isolinux.cfg 启动参数定制

    default rancheros label rancheros     kernel /vmlinuz     initrd /initrd     append quiet rancher.password=rancher rancher.state.autoformat=[/dev/sda] rancher.state.formatzero=true  

    参数解释:(从quiet之后开始)

    • rancher.password 设置默认账户密码。
    • rancher.state.autoformat 自动格式化磁盘。
    • Starts with 1 megabyte of zeros and rancher.state.formatzero is true.
    • 参数顺序会影响系统稳定性。
    • 所有参数查看需要等启动之后sudo ros c export -f > cfg.yml 几乎所有参数都可以调整,另外单独一个参数里面不能有空格kernel的参数检查比cloud-init模块本身严格多了。
    • 上面这种方式为cmdline 操作系统源码 在GetDatasources 函数这里。

    参考文档:

    • ISOLINUX
    • 对我就是从RancherOS官方启动参考

    Windows 启动参考

    "C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" createvm --name "service" --register "C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" modifyvm "service" --memory 512 --acpi on --boot1 dvd "C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" modifyvm "service" --nic1 hostonly --hostonlyadapter1 "VirtualBox Host-Only Ethernet Adapter" --nicpromisc1 allow-all "C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" modifyvm "service" --nic2 nat  --natnet2 "192.168/16" --natpf2 "guestssh,tcp,,2222,,22" --nicpromisc2 allow-all "C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" modifyvm "service" --ostype Linux  "C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" createhd --filename D:/io.vdi --size 10000 "C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" storagectl "service" --name "IDE Controller" --add ide "C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" storageattach "service" --storagectl "IDE Controller"  --port 0 --device 0 --type hdd --medium D:/io.vdi "C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" storageattach "service" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium D:/ros.iso 

    注意: hostonly 网卡名字

    vboxmanage 踩坑

    查看所有hostonly网卡:

    VBoxManage list hostonlyifs

    创建网卡并配置DHCP

    VBoxManage hostonlyif create VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 VBoxManage dhcpserver add --ifname vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0 --lowerip 192.168.56.254 --upperip 192.168.56.200 VBoxManage dhcpserver modify --ifname vboxnet0 --enable 

    注意上面如果是windows注意换网卡名字

    总结

    • 新打包好的系统大小30MB
    • 启动时间10s左右(机械硬盘)
    • 强制关机,重新启动10次以上无错误。每次测试都有不同的小操作。

    转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » RancherOS iPXE 启动以及ISO重新打包的方法



沪ICP备19023445号-2号
友情链接