天天看点

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

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

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

#!/bin/bash

dep_list=`ldd $1`|awk '{print $3;}'|grep -v "("`

for list_entry in $dep_list;
do
  echo $list_entry
  if [ -f $list_entry ]
  then
    cp -f $list_entry $2
  fi
done      

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

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

cd path_to_dir_of_customed_iso
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 .      

继续阅读