上一篇文章介绍如何定制自己的发行版,并且完全根据CentOS进行定制,我们看到了用cfengine管理Linux系统的优势,如何快速部署cfengine呢,我们把cfengine集成到自己的定制的Linux中. 本文根据编译好的cfengine来进行定制,大家都知道编译之前会有很多依赖,所以我们需要安装系统的时候把依赖装好,然后把编译好的二进制文件复制到当前系统中.
本文完全根据上一篇文章而来,挂载光驱安装工具等等这里就不介绍了.
首先.记录cfengine依赖包的依赖关系,然后把这些包复制到定制发行版的目录下,cfengine所依赖的包如下:
# 把依赖包添加到cfpkgs.list
vi cfpkgs.list
# 添加如下内容
keyutils-libs-devel
zlib-devel
e2fsprogs-devel
libsepol-devel
libselinux-devel
db4-devel
pcre-devel
krb5-devel
flex
openssl-devel
# 然后根据cfpkgs.list把包复制到发行版的CentOS目录下:
for i in `cat cfpkgs.list `:; do file=`echo $i ¦ sed 's/://g'`; cp /mnt/CentOS/$file* /usr/cold/CentOS/; done
复制完包之后就需要编辑comps.xml,
cd /usr/cold/
# 编辑comps.xml
vi repodata/comps.xml
向comps.xml添加这几个包group节点
<group>
<id>cfengine</id>
<name>Cfengine</name>
<name xml:lang="en_GB">Cfengine</name>
<description>Cfengine </description>
<description xml:lang="en_GB">Cfengine</description>
<default>true</default>
<uservisible>false</uservisible>
<packagelist>
<packagereq type="default">keyutils-libs-devel</packagereq>
<packagereq type="default">zlib-devel</packagereq>
<packagereq type="default">e2fsprogs-devel </packagereq>
<packagereq type="default">libsepol-devel</packagereq>
<packagereq type="default">libselinux-devel</packagereq>
<packagereq type="default">db4-devel</packagereq>
<packagereq type="default">pcre-devel</packagereq>
<packagereq type="default">krb5-devel</packagereq>
<packagereq type="default">flex</packagereq>
<packagereq type="default">openssl-devel </packagereq>
</packagelist>
</group>
然后通过命令创建源:
createrepo -g repodata/comps.xml CentOS/
计算comps.xml的sha值
sha1sum repodata/comps.xml
f6f086a3c2b7eee2050580aa3e74c841dd406dfc repodata/comps.xml
编辑repomd.xml
vi repodata/repomd.xml
将新的sha值更新到repomd.xml
<data type="group">
<location href="repodata/comps.xml"/>
<checksum type="sha">f6f086a3c2b7eee2050580aa3e74c841dd406dfc</checksum>
<timestamp>1272586365</timestamp>
</data>
接下来把我们编译好的cfengine(根据安装配置cfengine实现自动化配置Linux/Unix服务器)复制到定制的发行版的目录下:
cp -r /usr/local/cfengine/ /usr/cold/
然后编辑ks文件:
vi isolinux/ks.cfg
# 在末尾添加如下内容
%packages
@core
@useful
@cfengine # 添加cfengine软件组
# %post是安装后执行的脚本,
# 还有一种标记 %pre是安装前执行的脚本,但不推荐使用这种脚本,
# 因为脚本出错会导致安装失败
# --nochroot是不切换根目录,这时候安装好的系统会挂载在 /mnt/sysimage下
%post --nochroot
# 创建cfengine的工作目录
mkdir -p /mnt/sysimage/var/cfengine/masterfiles
mkdir -p /mnt/sysimage/var/cfengine/inputs
mkdir -p /mnt/sysimage/var/cfengine/outputs
mkdir -p /mnt/sysimage/var/cfengine/bin
mkdir /a
mount /tmp/cdrom /a
# 复制二进制文件和cfengine
cp /a/cfengine/sbin/cf-* /mnt/sysimage/var/cfengine/bin/
cp -r /a/cfengine /mnt/sysimage/usr/local/
然后制作镜像:
mkisofs -R -J -T -r -l -d -allow-multidot -allow-leading-dots -no-bak -o /usr/ColdOS-0.1-i386.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .
然后把镜像下载下来进行安装,安装完成后执行
/var/cfengine/bin/cf-key # 生成认证证书
/var/cfengine/bin/cf-agent --bootstrap --policy-server cfhubip
/var/cfengine/bin/cf-agent # 执行承诺
即可从cfhubip那里下载承诺文件执行承诺,根据cfhub进行本地配置 还可以根据%post更加自由的定制自己的系统,比如最小化安装后会无法使用本地镜像来使用yum可以定义一个局域网yum,在%post --nochroot添加如下内容:
cat <<__EOF__ > /mnt/sysimage/etc/yum.repos.d/CentOS-Media.repo
# CentOS-Media.repo
# yum --disablerepo=\* --enablerepo=cold [command]
[cold]
name=CentOS-$releasever - Media
baseurl=http://192.168.0.254/CentOS
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
__EOF__
mv /mnt/sysimage/etc/yum.repos.d/CentOS-Base.repo /mnt/sysimage/etc/yum.repos.d/CentOS-Base.repo.bak
这里就不详细介绍,大家可根据这个更加自由的来定制自己的Linux发行版.