将cfengine集成到自己定制的发行版

上一篇文章介绍如何定制自己的发行版,并且完全根据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发行版.

Show Comments