LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 12567|回复: 43

[毁灭系列] 为 LFS 加入 Debian 支持 (第一部 dpkg)

[复制链接]
发表于 2006-3-28 23:30:04 | 显示全部楼层 |阅读模式
使用 Debian 的朋友相信对 apt-get 及 dpkg 不会陌生,可有想过在你自己的系统,例如 LFS 内加入相关的支持?试想,一些很难从源码升级的软件(e.g. glibc),某些不容易编译成功的软件 (e.g. Firefox) 又或者那些怪兽级的软件比如 OpenOffice,KDE,Gnome之类,若能使用 Debian 庞大的软件仓库以省略自行编译之苦,岂不快哉?

也许各位阅读 LFS 的 Hints 会发现有篇关於 apt-get 及 dpkg 的 hint

Compiling apt-get and dpkg, and getting them to work
Author(s): Ben Roberts <benr@wam.umd.edu>
Date Last Updated: 2003-09-17
http://www.linuxfromscratch.org/hints/downloads/files/apt.txt

这正是 apt.txt 的作者的目的,可是我发现这篇文章已发表多时而未有更新,真的依照 apt.txt 内的方法进行的话,会发现很多问题,难以继续。

因此,撰写本文有几个目的:

1. 籍 apt.txt 的思路,探索在发行版加入 Debian 支持的方法及可行性,如 LFS 系统能行,相信在其他发行版也能行
2. 为 Olive 的理想铺路 (希望 Olive 不会变为幻想或泡影)
3. 在下并非 Debian developer,也不是 Debian 专家,错误难免,因此抱砖引玉,希望四方高人能提供指引或宝贵意见

正文
====

Hints 的 apt.txt 之所以不适用,原因:

1. 文中提及的 dpkg_1.9.21.tar.gz 及 apt_0.5.4.tar.gz 同属 Debian 3.0 (Woody) 时代的产物,一方面已经过时,另一方面,Woody 年代是用 gcc-2.95 的,这些包用新版 gcc 是无法通过编译的
2. 用新版的 dpkg 及 apt,其编译方法跟 apt.txt 内有少许不同
3. 原文的 dpkg 执行 configure 有个错误

第一部 令系统应识 dpkg

笔者打算用 gcc-4.0.x 来编译,因为现时 gcc-4.0.x 已是主流,有见及此,源码应该从 Debian Unstable 里提取,因为 gcc-4.0.x 已是 Debian unstable branch 的默认 compiler,成功机会较高

先找最新的 dpkg,到下载 Debian unstable 的 dpkg_1.13.17.tar.gz
http://ftp.debian.org/debian/pool/main/d/dpkg/dpkg_1.13.17.tar.gz

解压後,转到 dpkg-1.13.17 目录再执行
./configure --prefix=/usr --[color="Red"]with-admindir=/var/lib/dpkg (原文漏掉了 --with)

若然你马上 make,系统会不久便会报错,说哪些 man page 不能编译。要令编译顺利通过,只好编辑 Makefile 令编译时略过 man page 的部份。

方法一:
  1. 在下不才,不懂 sed 语法,只会用手功笨方法去改 Makefile 的内容,部骤如下:

  2. cp Makefile makefile
  3. nano -w makefile
  4. 删除第 95 行 scripts po origins [color="Red"]man [/color]的 man
  5. 注掉第 225 行 mandir = ${prefix}/man
  6. 删除第 250 行 origins[color="Red"] \ [/color]的 \
  7. 删除第 251 行 的 [color="Red"]man [/color](只删除 man,但请保留此行,否则下面的行号不配对)
  8. 注掉第 684 行 install-man:
  9. 删除第 718 行 install-exec-am install-info install-info-am [color="Red"]install-man[/color] \ 的 install-man
  10. 完成後存档

  11. 由於 makefile 比 Makefile 优先,所以无需理会 Makefile,纯绪是作为备份之用
复制代码

方法二,由终极幻想提供:
  1. Makefile 的修改,用这个语句就可以了:
  2. sed -i -e '251s/man/\./' Makefile.in
  3. configure 之前用。我这里测试没问题。
复制代码

make -j3
再用 root 来 make install 来完成安装

再以 root 身分,执行下面四条命令:

touch /var/lib/dpkg/status
touch /var/lib/dpkg/available
touch /usr/sbin/update-rc.d
chmod 755 /usr/sbin/update-rc.d

Remarks:
1. status 及 available 两个文件是供 dpkg 作为 database 之用,主要是记载安装过的包以便日後来判断包的依赖,权限是 644
  1. lfslivecd:root | Wed Mar 29 14:04:19 2006 | /var/lib/dpkg
  2. # ll
  3. drwxr-xr-x 2 root root 1 2006.03.28 11:35:37 alternatives
  4. drwxr-xr-x 2 root root 1 2006.03.28 13:14:38 info
  5. drwxr-xr-x 5 root root 1 2006.03.28 11:35:37 methods
  6. drwxr-xr-x 2 root root 1 2006.03.28 11:35:40 parts
  7. drwxr-xr-x 2 root root 1 2006.03.28 13:14:48 updates
  8. [color="Red"]-rw-r--r-- 1 root root 2 2006.03.28 13:14:48 available[/color]
  9. -rw-r--r-- 1 root root 2 2006.03.28 11:55:04 available-old
  10. lrwxrwxrwx 1 root root 1 2006.03.28 13:16:44 db -> /usr/lib/db
  11. -rw-r----- 1 root root 0 2006.03.28 13:16:20 lock
  12. [color="Red"]-rw-r--r-- 1 root root 2 2006.03.28 13:14:48 status[/color]
  13. -rw-r--r-- 1 root root 2 2006.03.28 11:55:04 status-old
  14. lfslivecd:root | Wed Mar 29 14:04:21 2006 | /var/lib/dpkg
  15. #
复制代码

2. update-rc.d 是属於 sysv-rc 这个包的,它提供 Debian 系统的 SysV 派系的 run level 模式,没有 update-rc.d 在路径上,dpkg 会在安装软件包的时候报错。LFS 系统已提供了相关的结构,现在的测试暂时不需要真正的 update-rc.d,因此,我们可以临时做个空的 update-rc.d 来瞒遍 dpkg

为测试起见,我准备安装 mrxvt-mini 这个 multi-tab 的终端模拟器。 mrxvt-mini 其实就是 mrxvt,只不过是 Debian 的 maintainer 把原来的 mrxvt 精简化了。这只是试验性质,因为自行编译 mrxvt 是极之容易的。

言归正传,先到 http://packages.debian.org/ 去 search mrxvt,很容易就找到 mrxvt-mini,我们看 unstable branch, http://packages.debian.org/unstable/x11/mrxvt-mini

这里有供下载的连结,而且发现它的依赖关系。当中 libc6 就是 glibc,而 libx11-6 是 X11R6 的库(由 xorg 提供)或者 xlibs (由 XFree86 提供),也就是说,在一个带有 BLFS 的系统,这些其实系统都已经存在了。即是说,真正需要的包是 mrxvt-common 及 mrxvt-mini 自身,先要把它们都下载回来。

Debian 下的 glibc 包叫作 libc6 这个名字,由於系统其实已有 glibc,只是 dpkg 的 database 内没有记录而视为系统没有安装 libc,故此,要麽就是修改 /var/lib/dpkg/ 的 status 及 available,欺遍系统,要麽就是安装时命令系统跳过依赖。

现在我暂不打算修改 status 及 available,只是测试性质,所以安装时用以下命令:

dpkg -i mrxvt-common*.deb
dpkg -i --force-depends mrxvt-mini*deb

这样便可以运行 mrxvt 了。

呵呵,使用无误,安装成功!

用是能用了,可是 Debian 的软件包都有很复杂的依赖关系,mrxvt-mini 只是非常简单的软件,用 dpkg 来装东西意味要逐一下载软件包来安装,别人都说,单纯用 dpkg 来装软件过份自虐,最好是能自动解决依赖及安装软件,这就是 Advanced Package Tool (apt) 的作用了。。。

(第二部 apt)
调试中。。。

友情连结:
THE DEBIAN WAY: Debian 维护工具之 Dpkg
http://www.linuxsir.cn/bbs/showthread.php?t=248937
发表于 2006-3-28 23:51:38 | 显示全部楼层
看到名字吓我一跳(特别是括号里的)!我以为要毁灭LFS呢!:eek:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-28 23:58:24 | 显示全部楼层
哦!我这是学幻想老大的,马上修改:beat
回复 支持 反对

使用道具 举报

发表于 2006-3-29 09:38:03 | 显示全部楼层
据说,Debian非常人能玩!
如果我想在Debian下来一次LFS,老大可有什么忠告?
回复 支持 反对

使用道具 举报

发表于 2006-3-29 10:14:36 | 显示全部楼层
哇,,,这么有创意的名字。。。可惜没看到第一个版本,一开始叫什么来着?嘿嘿。。。。

Makefile 的修改,用这个语句就可以了:
sed -i -e '251s/man/\./' Makefile.in
configure 之前用。我这里测试没问题。


还有,
touch /var/lib/dpkg/status
touch /var/lib/dpkg/available
touch /usr/sbin/update-rc.d
chmod 755 /usr/sbin/update-rc.d

这几个文件,你能否贴出权限( ls -al )?这样就可以用 install 命令创建。
有的人的 umask 也许不那么 normal 的。嘿嘿。我的是 027。。啦啦。


谢谢 毁灭公爵 的大作。以后不叫你 d00m3d 了,叫你 公爵 吧,这个比较cool! 。嘿嘿。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-29 22:46:00 | 显示全部楼层
哇,,,这么有创意的名字。。。可惜没看到第一个版本,一开始叫什么来着?嘿嘿。。。。
我是学你的呀!我写的自然是 [毁灭系列] 了。。。
Makefile 的修改,用这个语句就可以了:
sed -i -e '251s/man/\./' Makefile.in
configure 之前用。我这里测试没问题。
谢谢!加入文章内
还有,
touch /var/lib/dpkg/status
touch /var/lib/dpkg/available
touch /usr/sbin/update-rc.d
chmod 755 /usr/sbin/update-rc.d
其实我试验这玩意的时候是用 LFS 的 LiveCD-6.2pre3 来进行的,我没用 umask,status 及 available 都是 644 的。
这几个文件,你能否贴出权限( ls -al )?这样就可以用 install 命令创建。
有的人的 umask 也许不那么 normal 的。嘿嘿。我的是 027。。啦啦。
怎样用 install 命令创建?
谢谢 毁灭公爵 的大作。以后不叫你 d00m3d 了,叫你 公爵 吧,这个比较cool! 。嘿嘿。
别开这种玩笑,不要其他的,只要 d00m3d !
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-29 23:15:01 | 显示全部楼层
Post by soslow
据说,Debian非常人能玩!
在 Sir 里,Debian 跟 RH/FC 的人气长期高据一二位,会有这么多的非常人吗?

又有些活在 M$ 世界的人常说 Linux 非常人能玩,你说呢?
如果我想在Debian下来一次LFS,老大可有什么忠告?
你找找先前的贴子,有些包要特别注意的。做 LFS,最容易成功的还是用 LFS 自己的 LiveCD!
回复 支持 反对

使用道具 举报

发表于 2006-4-23 09:29:04 | 显示全部楼层
不知道第二部什么时候出来呢。。:rolleyes: 。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-24 08:14:12 | 显示全部楼层
不好意思,最近较忙,没有进行调试:p

问题并非在於编译,主要是系统的协调,我会尽快测试
回复 支持 反对

使用道具 举报

发表于 2006-4-24 08:57:04 | 显示全部楼层
不用急,我只是随口问问。

LFS 正在规划自己的包管理呢,以后的这些都要睡觉。嘿嘿。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表