如何从源代码开始一个Fedora

来自LoongsonWiki

跳转到: 导航, 搜索

Fedora上的软件包管理是基于rpm以及后来从YDL偷来的yum进行管理的,官方的Fedora 仅支持i386, ppc, ppc64, s390, s390x, x86_64,没有mips,这里就让我们从0开始作一个Fedora For Loongson吧,希望是一个pure-64的版本;

在已经有gentoo debian slackware 等的前提下,为什么还要坚持做一个fedora的版本呢?

有几个原因 1. fedora 相关的书多; 2. fedora(redhat) 培训和认证作的比较好; 3. 我目前有一个 ibook 的fedora-ppc 用着,没发现不好的地方; 4. 这是个体力挑战,而我习惯没事就鼓捣一下make, 索性就 make world 一把; 5. 谣传 fedora 9 中将支持 emerge apt rpm 等数种包管理模式; 6.以前工作中用了很多次redhat,欠它的;7. 还需要理由么?

首先,给出需要参考的网络资源:

此处是一个先行者

CLFS For mips64

BLFS也是需要的

Fedora最新的软件包

有时CentOS的代码包会比较好

linux-mips 之前支持的一个Fedora版本

我还有个参考包,但是忘记来源了, mips-malta-fc5-srpms

[千里之行第0步] 要先完成CLFS的chroot环境。在这个环境前提下,结合blfs的内容进一步增加emacs,python,rpm这三个包。 python应该很顺利; emacs-22.1-6.fc8.src.rpm 的SRPM包中不支持mips64el, 需要把configure 文件中的:

mips-*-linux-gnu* | mipsel-*-linux-gnu* )

改成 mips64el-*-linux-gnu*

在这之前chroot 环境里的rpm还都不能用,那只好用debian的 cpio了,这样操作

       rpm2cpio  emacs-22.1-6-fc8.src.rpm > e1.cpio
       mkdir emacs-build;cd emacs-build
       cpio -idmv < ../e1.cpio

然后就可以 tar 解开 emacs-22.1.tar.gz 在 /usr/src/redhat/SPECS/emacs.spec 里提示仅一个patch 文件,Patch0: glibc-open-macro.patch 直接可以 patch -p1 < 打进去。

由于这时候chroot环境里还没有x等大基础包,需要 configure --without-x --without-gtk etc.

clfs 中已经perl就位了,模块安装,在网络连通的情况下:

        perl -MCPAN -e shell

指定一个cpan 的源, http://mirrors.kernel.org/cpan/ 在 CPAN shell 中可以通过

        o conf 查看CPAN配置;
        o conf  urllist shift  杀除配置;
        o conf  urllist push  http:/....../  更新配置;
        o conf  commit 保存配置;
        install IO::File 安装模块。

以rpm-4.2.2-3 为例,开始 rpmbuild 的过程。 假设 rpmbuild --rebuild ./rpm-4.4.2.2-3.fc8.src.rpm 会出现类似提示,就要分别先把提示的包装好。 error: Failed build dependencies:

       elfutils-devel >= 0.112 is needed by rpm-4.4.2.2-3.fc8.mipsel
       elfutils-libelf-devel-static is needed by rpm-4.4.2.2-3.fc8.mipsel
       beecrypt-devel >= 4.1.2 is needed by rpm-4.4.2.2-3.fc8.mipsel
       popt-devel >= 1.10.2 is needed by rpm-4.4.2.2-3.fc8.mipsel
       popt-static >= 1.10.2 is needed by rpm-4.4.2.2-3.fc8.mipsel
       python-devel >= 2.5 is needed by rpm-4.4.2.2-3.fc8.mipsel
       doxygen is needed by rpm-4.4.2.2-3.fc8.mipsel

如果看rpm.spec可以知道,以下BuildRequires是必须的:

       BuildRequires: redhat-rpm-config
       BuildRequires: gawk
       BuildRequires: elfutils-devel >= 0.112
       BuildRequires: elfutils-libelf-devel-static
       BuildRequires: readline-devel zlib-devel
       BuildRequires: beecrypt-devel >= 4.1.2
       # The popt versions here just document an older known-good version, not
       # necessarily accurate
       BuildRequires: popt-devel >= 1.10.2, popt-static >= 1.10.2
       BuildRequires: sqlite-devel
       BuildRequires: gettext-devel
       BuildRequires: libselinux-devel
       BuildRequires: ncurses-devel
       BuildRequires: bzip2-devel >= 0.9.0c-2
       BuildRequires: python-devel >= %{with_python_version}


[千里之行第一步]

  在LFS chroot 环境中,初始化 rpm db, 
       mkdir -p /var/lib/rpm
       rpm --root=/ --initdb
       echo "/usr/src/redhat" > $HOME/.rpmmacros
       mkdir /usr/src/redhat
       cd /usr/src/redhat
       mkdir BUILD  RPMS  SOURCES  SPECS  SRPMS
       cd /usr/src/redhat/RPMS
       mkdir noarch mipsel

[正式上路]

rpmbuild --rebuild basesystem-8.1-1.src.rpm

rpm -i /usr/src/redhat/RPMS/noarch/basesystem-8.1-1.noarch.rpm

rpmbuild --rebuild setup-2.6.10-1.fc8.src.rpm

rpm -i /usr/src/redhat/RPMS/noarch/setup-2.6.10-1.noarch.rpm

rpmbuild --rebuild ./filesystem-2.4.11-1.fc8.src.rpm

rpm -i /usr/src/redhat/mipsel/filesystem-2.4.11-1.mipsel.rpm

至此正式开始 fedora 的rpmbuild 过程了。

[fedora 的包依赖] 关系会形成循环依赖,总结起来,有这样的几类包:

       无依赖关系
       安全类,其核心节点是 audit selinux 
       图形类,其核心节点是 X11 Qt gtk2
       文本格式类环,核心是doxygen
       基类环,其核心是 gmp
       ....??......

fedora 的诡异之处 从fedora的包管理中,可以发现有几人使用了多个不同的环境,主要证据就是 autoconf 和 automake 需要多准备几个版本,automake 从1.4 到 1.10 都可能用到。:(

rpm工程接龙

个人工具箱