CentOS6下 build CentOS5的Docker镜像

     2015年01月17日       江南兔子哥       运维笔记->系统管理       docker images centos5 

在CentOS6下制作CentOS5的镜像

安装镜像制作工具febootstrap

yum -y install febootstrap

使用febootstrap 制作CentOS5镜像目录

febootstrap -i bash \
-i wget -i yum -i iputils -i iproute -i man -i vim-minimal \
-i openssh-server -i openssh-clients -i cronie-anacron -i crontabs \
centos5 centos5-image http://mirrors.aliyun.com/centos/5/os/x86_64/

将镜像导入到Docker

cd centos5-image && tar -c . | docker import - centos5-base

好,下面开始验证镜像,查看镜像列表是否包含centos5-base

docker images

运行简单的bash

docker run -t -i centos5-base /bin/bash

看起来已经搞好了,不过接下来发现了一个严重的问题。

严重的问题

centos5的镜像执行rpm -qa的时候报错

bash-3.2# rpm -qa
rpmdb: /var/lib/rpm/Packages: unsupported hash version: 9
error: cannot open Packages index using db3 - Invalid argument (22)
error: cannot open Packages database in /var/lib/rpm

解决方法

为什么会出现rpmdb的报错?
因为我们使用centos6的yum安装包,导致镜像里的 /var/lib/rpm/Packages 文件的DB格式不能被老的centos5的rpm读取

我们需要重建 /var/lib/rpm/Packages 文件,方法如下:

  1. 运行一个容器,然后执行以下命令
    # Fix up RPM database
    rm /var/lib/rpm/*
    rpm --initdb
    rpm -i --justdb '/var/cache/yum/*/packages/*.rpm'
  2. 将容器commit 为镜像
    docker commit 容器id centos5-base-fixed
  3. 删掉老的centos5的镜像
    docker images rm centos5-base

最后补充一句,如果在CentOS5下用febootstrap 应该不能有这样的问题。不过在CentOS5下 febootstrap 好像没那么好用

参考文档

http://lists.centos.org/pipermail/centos/2012-December/130752.html