制作initrd(6):重做Ubuntu安装盘

  接上篇 制作initrd(5):解剖Ubuntu安装盘 。上一篇主要提到了分解Ubuntu安装盘,这篇是解剖的反过程--合成安装盘iso,内容相对比较少。

    如果仅仅把安装盘拆开看看然后合回去,作为学习目的还可以,但是真的有点浪费篇幅了。其实,拆开的光盘还能塞点东西进去,就是所谓的定制光盘。笔者近期就遇到要把公司的一个客户端软件加密进Ubuntu光盘filesystem.squashfs镜像中,为了兼容amd/intel显卡,需要在initrd中判断系统显卡类型,因此加了个lshwex的程序(扩展Ubuntu lshw命令)。然后由initrd/casper脚本挂载2种不同显卡驱动的filesystem.squashfs。待filesystem.squashfs挂载完毕,需要解密公司的客户端程序。这里笔者写了一个简单的脚本,解决可执行程序依赖库

  1. #!/bin/bash  
  2.   
  3. dep_list=`ldd $1`|awk '{print $3;}'|grep -v "("`  
  4.   
  5. for list_entry in $dep_list;  
  6. do  
  7.     echo $list_entry  
  8.     if [ -f $list_entry ]  
  9.     then  
  10.         cp -f $list_entry $2  
  11.     fi  
  12. done  


脚本接收2个参数,arg1是可执行程序路径 arg2是依赖库拷贝的目标位置。当然是从公版ubuntu发行版拷到定制版ubuntu中。

    一切做完后,当然是要烧写iso,不要以为直接压缩一下就好,那样会丢失isolinux的引导信息。下面是同时支持UEFI/CSM启动模式的打包iso命令:

  1. cd path_to_dir_of_customed_iso  
  2. sudo mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -r -J -o ../xxx.iso .  

注意xxx.iso后面还有空格和一点

posted @   愤怒的企鹅  阅读(294)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示