如何从源代码开始一个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. 还需要理由么?
首先,给出需要参考的网络资源:
我还有个参考包,但是忘记来源了, 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 都可能用到。:(

