《Linux安装》(三)发行版制作

Fedora发行版制作的工具主要有revisorpungi两种;
revisor是一个图形化的工具,也可用命令行,但是经常会有bug,而且比较臃肿,感觉是给初级用户用的;
pungi是Fedora官方制作(或叫spin)发行版的工具,命令行,总共也就4、5个python文件;


以下是使用pungi定制(spin)的代码:

#!/bin/bash

echo "Set LANG=en_US.utf8" 
LANG=en_US.utf8

if [ $(getenforce) == Enforcing ]; then
    sudo setenforce 0
    echo "Turning Off SELinux enforcing." 
fi

#echo "removing destdir..." 
#sudo rm -rf `pwd`/work

sudo pungi --force --nosource --nosplitmedia -c `pwd`/ks.cfg --destdir=`pwd`/work   -G -C -B -I "$@"

注:以上代码只保证在F13上运行正常,而且安装pungi时不能使用update等仓库;


ks.cfg(kickstart)文件定义了需要装入ISO中的包的清单(依赖会自动解决),一个简单的KS如下:

repo --name=test --baseurl=http://10.3.4.211/resrc/repo/fedora/releases/13/Everything/i386/os/

%packages --default
@core
@base
anaconda*
kernel
%end
注:repo指向yum源,可以指定多个;示例中的源在本地,为了加快制作速度我使用rsync将服务器的源同步到本地了;ks文件也可使用图形化工具kickstart自动生成——属于system-config-kickstart包;


pungi的工作过程主要分为四个阶段:

  1. -G(Gather stage) 从yum源将ks中列出的包及依赖下载到本地,即包收集阶段
  2. -C(Createrepo stage)将这些包做成一个本地的yum源,即createrepo
  3. -B(BuildInstall stage)生成ISO中的image文件等;F13使用buildinstall脚本——属于anaconda包;
  4. -I (CreateISO stage)将ISO根目录(installtree)做成ISO,即mkisofs


最关键的是buildinstall阶段,即image文件是如何生成的?通过查看log可以看出它就是调用buildinstall脚本而已,可单独执行:

#!/bin/bash

/usr/lib/anaconda-runtime/buildinstall --product Fedora --version 20120319 --release "Fedora 20120319" --output `pwd`/os http://10.3.4.211/resrc/repo/fedora/releases/13/Everything/i386/os/

执行完毕后的工作目录结构如下:

$ tree -a os
os
|-- .discinfo
|-- EFI
|   `-- BOOT
|       |-- BOOT.conf
|       |-- BOOTIA32.conf
|       `-- splash.xpm.gz
|-- images
|   |-- boot.iso
|   |-- efiboot.img
|   |-- efidisk.img
|   |-- install.img
|   |-- pxeboot
|   |   |-- initrd.img
|   |   |-- initrd-PAE.img
|   |   |-- README
|   |   |-- vmlinuz
|   |   `-- vmlinuz-PAE
|   `-- README
|-- isolinux
|   |-- boot.msg
|   |-- grub.conf
|   |-- initrd.img
|   |-- isolinux.bin
|   |-- isolinux.cfg
|   |-- memtest
|   |-- splash.jpg
|   |-- vesamenu.c32
|   `-- vmlinuz
`-- .treeinfo

5 directories, 24 files

可见ISO中的关键文件都是由buildinstall脚本生成的,因此要搞清楚image生成原理只需调试buildinstall即可;





你可能感兴趣的:(构建发行版)