+ -
当前位置:首页 → 问答吧 → [毁灭系列] 为 LFS 加入 Debian 支持 (第一部 dpkg)

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

时间:2006-03-29

来源:互联网

使用 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 <[email protected]>
Date Last Updated: 2003-09-17
http://www.linuxfromscratch.org/hint.../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/ma...1.13.17.tar.gz

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

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

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

cp Makefile makefile
nano -w makefile
删除第 95 行 scripts po origins man 的 man
注掉第 225 行 mandir = ${prefix}/man
删除第 250 行 origins \ 的 \
删除第 251 行 的 man (只删除 man,但请保留此行,否则下面的行号不配对)
注掉第 684 行 install-man:
删除第 718 行 install-exec-am install-info install-info-am install-man \ 的 install-man
完成後存档

由於 makefile 比 Makefile 优先,所以无需理会 Makefile,纯绪是作为备份之用
方法二,由终极幻想提供:
代码:
Makefile 的修改,用这个语句就可以了:
sed -i -e '251s/man/\./' Makefile.in
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
代码:
lfslivecd:root | Wed Mar 29 14:04:19 2006 | /var/lib/dpkg
# ll
drwxr-xr-x 2 root root 1 2006.03.28 11:35:37 alternatives
drwxr-xr-x 2 root root 1 2006.03.28 13:14:38 info
drwxr-xr-x 5 root root 1 2006.03.28 11:35:37 methods
drwxr-xr-x 2 root root 1 2006.03.28 11:35:40 parts
drwxr-xr-x 2 root root 1 2006.03.28 13:14:48 updates
-rw-r--r-- 1 root root 2 2006.03.28 13:14:48 available
-rw-r--r-- 1 root root 2 2006.03.28 11:55:04 available-old
lrwxrwxrwx 1 root root 1 2006.03.28 13:16:44 db -> /usr/lib/db
-rw-r----- 1 root root 0 2006.03.28 13:16:20 lock
-rw-r--r-- 1 root root 2 2006.03.28 13:14:48 status
-rw-r--r-- 1 root root 2 2006.03.28 11:55:04 status-old
lfslivecd:root | Wed Mar 29 14:04:21 2006 | /var/lib/dpkg
#
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.org/bbs/showthread.php?t=248937

作者: d00m3d   发布时间: 2006-03-29

看到名字吓我一跳(特别是括号里的)!我以为要毁灭LFS呢!

作者: youbest   发布时间: 2006-03-29

哦!我这是学幻想老大的,马上修改

作者: d00m3d   发布时间: 2006-03-29

据说,Debian非常人能玩!
如果我想在Debian下来一次LFS,老大可有什么忠告?

作者: soslow   发布时间: 2006-03-29

哇,,,这么有创意的名字。。。可惜没看到第一个版本,一开始叫什么来着?嘿嘿。。。。

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!:D 。嘿嘿。

作者: 晨想   发布时间: 2006-03-29

引用:
哇,,,这么有创意的名字。。。可惜没看到第一个版本,一开始叫什么来着?嘿嘿。。。。
我是学你的呀!我写的自然是 [毁灭系列] 了。。。
引用:
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 !

作者: d00m3d   发布时间: 2006-03-30

引用:
作者: soslow
据说,Debian非常人能玩!
在 Sir 里,Debian 跟 RH/FC 的人气长期高据一二位,会有这么多的非常人吗?

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

作者: d00m3d   发布时间: 2006-03-30

不知道第二部什么时候出来呢。。:rolleyes: 。。

作者: 晨想   发布时间: 2006-04-23

不好意思,最近较忙,没有进行调试

问题并非在於编译,主要是系统的协调,我会尽快测试

作者: d00m3d   发布时间: 2006-04-24

不用急,我只是随口问问。

LFS 正在规划自己的包管理呢,以后的这些都要睡觉。嘿嘿。

作者: 晨想   发布时间: 2006-04-24

引用:
作者: 终极幻想
不用急,我只是随口问问。

LFS 正在规划自己的包管理呢,以后的这些都要睡觉。嘿嘿。
你说的是Olive还是LFS?

作者: youbest   发布时间: 2006-04-24

手误,,,,是Olive。

作者: 晨想   发布时间: 2006-04-24

现在变化快啊。dpkg_1.13.17.tar.gz现在也过时,最新的已经13.18了

作者: gentlesoldier   发布时间: 2006-04-27

期待ing第二部

作者: bird00126   发布时间: 2006-09-20

要编译及使用 apt 并不难,难的是如何防止 apt 自动将你系统的包替换,把你亲手建立的 LFS 系统变成真正的 Debian

方法是有的,你可以自己定制一些 dummy package,然後 hold 着它们不让系统更新便行,现在工作太繁忙,无暇去测试,罪过!罪过!

作者: d00m3d   发布时间: 2006-09-20

期待期待,热烈期待!

作者: augustusqing   发布时间: 2006-11-03

我在BLFS中编译dpkg包,编译过程中没有任何错误。
用到的包:
root:~/Desktop/debian# ls -la
total 5724
drwxr-xr-x 7 root root 4096 2006-11-05 12:23 .
drwx------ 3 root root 4096 2006-11-05 10:36 ..
-rw-r--r-- 1 root root 3342417 2006-11-05 10:37 dpkg_1.13.24.tar.gz
-rw-r--r-- 1 root root 367623 2006-11-05 11:10 jade_1.2.1-47.diff.gz
-rw-r--r-- 1 root root 1092062 2006-11-05 11:10 jade_1.2.1.orig.tar.gz
-rw-r--r-- 1 root root 180503 2006-05-21 13:15 Module-Build-0.2801.tar.gz
-rw-r--r-- 1 root root 2925 2006-11-05 10:53 po4a_0.29-1.diff.gz
-rw-r--r-- 1 root root 803454 2006-11-05 10:53 po4a_0.29.orig.tar.gz

作者: chinajz   发布时间: 2006-11-05

请问dpkg运行需要Berkeley DB-4.x 和Berkeley DB-3.x吗?在完全的lfs基础上开始装dpkg和apt,需要额外的装什么包??
我现在dpkg和apt能装上,问题是不知道能不能用。

作者: vagile   发布时间: 2007-03-15

apt 不要随便用,它太自动了,会把它判断为没有装的包自动装上,随之而成的後果就是把你辛苦建立的 LFS 系统用 Debian 的包替换,变成真正的 Debian。。。

现在我也就是把下载回来的 OpenOffice-2.2rc3 用 alien 转成 deb 包後,用 dpkg -i 把它来安装,省却编译过程算了

作者: d00m3d   发布时间: 2007-03-17

毁灭兄,按照你的帖子装上了dpkg-1.13.25,dpkg-1.14.28编译不能通过,看来这两个版本有差别。
然后在安装mrxvt-mini_0.5.3-1_i386.deb的时候提示说:
dpkg:处理 mrxvt-mini_0.5.3-1_i386.deb (--install)时出错:
软件包的体系架构(i386)与本机系统的架构()不符
在处理时有错误发生:
mrxvt-mini_0.5.3-1_i386.deb
换成0.5.2版本的deb也是不行。
试着安装那些openoffice的deb包,都提示的这个错误。
这怎么解决呢?

作者: Dennis.Wang   发布时间: 2008-04-28

引用:
作者: Dennis.Wang
毁灭兄,按照你的帖子装上了dpkg-1.13.25,dpkg-1.14.28编译不能通过,看来这两个版本有差别。
然后在安装mrxvt-mini_0.5.3-1_i386.deb的时候提示说:
dpkg:处理 mrxvt-mini_0.5.3-1_i386.deb (--install)时出错:
软件包的体系架构(i386)与本机系统的架构()不符
在处理时有错误发生:
mrxvt-mini_0.5.3-1_i386.deb
换成0.5.2版本的deb也是不行。
试着安装那些openoffice的deb包,都提示的这个错误。
这怎么解决呢?
兄弟如遇问题请把错误信息贴出来以便分析

我原先已升级为 dpkg-1.14.7,当时未见异常,看见帖子就尝试编译 dpkg-1.14.28,果然有问题,不过很容易解决的 :)

我遇到的问题是 dselect/dselect.h 里要求寻找 ncursesw/curses.h,由於 LFS 的 ncurses (w) 头文件放在 /usr/include 而 Debian 的 libncurses5-dev 会把ncurses 的头文件装到 ncursesw/curses.h,由於 /usr/include/ncursesw/curses.h 不存在於是编译不能通过,另一个问题是 /usr/include/ncursesw/term.h 不存在而出问题

这是因为 Debian 文件目录的差异引起的,所以建两个 symlink 便行:

cd /usr/include
mkdir ncursesw
cd ncursesw
ln -s ../curses.h curses.h
ln -s ../term.h term.h

完成後便一切顺利了

新的 dpkg-1.14.28 跟旧的不同,不用再去修改 Makefile 了,configure 完就即时可以 make 了,多方便!

Good luck!

作者: d00m3d   发布时间: 2008-04-29

dpkg-1.14.28安装成功了,先前出现的错误就是你说的这个。安装mrxvt-mini错误如下:
linfves [ ~/Download ]$ sudo dpkg -i mrxvt-mini_0.5.3-1_i386.deb
dpkg: error processing mrxvt-mini_0.5.3-1_i386.deb (--install):
package architecture (i386) does not match system ()
Errors were encountered while processing:
mrxvt-mini_0.5.3-1_i386.deb

作者: Dennis.Wang   发布时间: 2008-04-29

其实debian的软件包(.deb)就是个ar打包的文件,里面有这样三个文件:
debian-binary, control.tar.gz, data.tar.gz
debian-binary应该是指的.deb包格式的版本,这样以后如果包结构,包格式发生变化的话,可以通过这个来识别
control.tar.gz里面是软件包的信息, 有包名称, 版本号, 适用平台, 依赖关系, 包的描述之类的东西, 还有安装/卸载前后要执行的脚本, 以及配置脚本
data.tar.gz就是包的真实内容了
所以, 直接用
代码:
ar x package_version_arch.deb data.tar.gz
就可以得到data.tar.gz了
或者直接用
代码:
ar p package_version_arch.deb data.tar.gz > package_version_arch.tar.gz
来指定.tar.gz包的名字
要是很确定可以直接安装的话,甚至可以直接把结果给tar, 让tar把data.tar.gz解到根目录下去.
还可以用tee或者重定向把解出来的文件记录下来,以便以后删除

作者: LanEast   发布时间: 2008-04-29

LanEast 兄的方法其实在任何发行版都通用,只不过这样就等於於弃了 Debian 的包管理系统而矣,有时候作为系统急救也行 :)

作者: d00m3d   发布时间: 2008-04-30

引用:
作者: Dennis.Wang
dpkg-1.14.28安装成功了,先前出现的错误就是你说的这个。安装mrxvt-mini错误如下:
linfves [ ~/Download ]$ sudo dpkg -i mrxvt-mini_0.5.3-1_i386.deb
dpkg: error processing mrxvt-mini_0.5.3-1_i386.deb (--install):
package architecture (i386) does not match system ()
Errors were encountered while processing:
mrxvt-mini_0.5.3-1_i386.deb
被误导了,今天为止,dpkg 的最新版只是 1.14.18 :(

Debian 的包有其依赖关系,不是随意用 dpkg -i 就能无痛安装的,这是 dpkg 跟 apt 的最大差异,所以应先行了解依赖是否满足了才能安装

装 mrxvt-mini 要先装 mrxvt-common,然後再用 dpkg -i --force-depends 来装 mrxvt-mini (前面顶帖已有说明)

至於 OpenOffice 的包就解包後再用 dpkg -i --force-depends --force-overwrite *.deb 来装了

话说回来,兄弟出现的问题好像跟依赖无关,dpkg 并非反映依赖出错,而是什麽系统架构不符,会否 /var/lib/dpkg 下的几个空文件及 update-rc.d 等尚未建立?

ls -al /var/lib/dpkg 及 ls -l /usr/sbin/update-rc.d 的结果是?

dpkg --version 或 dpkg -l 有输出否?

作者: d00m3d   发布时间: 2008-04-30

引用:
作者: d00m3d
被误导了,今天为止,dpkg 的最新版只是 1.14.18 :(

Debian 的包有其依赖关系,不是随意用 dpkg -i 就能无痛安装的,这是 dpkg 跟 apt 的最大差异,所以应先行了解依赖是否满足了才能安装

装 mrxvt-mini 要先装 mrxvt-common,然後再用 dpkg -i --force-depends 来装 mrxvt-mini (前面顶帖已有说明)

至於 OpenOffice 的包就解包後再用 dpkg -i --force-depends --force-overwrite *.deb 来装了

话说回来,兄弟出现的问题好像跟依赖无关,dpkg 并非反映依赖出错,而是什麽系统架构不符,会否 /var/lib/dpkg 下的几个空文件及 update-rc.d 等尚未建立?

ls -al /var/lib/dpkg 及 ls -l /usr/sbin/update-rc.d 的结果是?

dpkg --version 或 dpkg -l 有输出否?

呵呵,果然我眼浊了,是1.14.18,非1.14.28。毁灭兄,sorry!
对debian的依赖不熟悉,还请您多多指导。
linfves [ ~/Download ]$ ls -al /var/lib/dpkg/
total 44
drwxr-xr-x 8 root root 4096 2008-04-30 08:44 .
drwxr-xr-x 13 root root 132 2008-04-27 23:29 ..
drwxr-xr-x 2 root root 6 2008-04-27 23:29 alternatives
-rw-r--r-- 1 root root 14344 2008-04-30 08:44 available
-rw-r--r-- 1 root root 14344 2008-04-29 14:49 available-old
drwxr-xr-x 2 root root 86 2008-04-29 14:41 info
-rw-r----- 1 root root 0 2008-04-30 08:44 lock
drwxr-xr-x 5 root root 40 2008-04-27 23:29 methods
drwxr-xr-x 2 root root 6 2008-04-27 23:29 parts
-rw-r--r-- 1 root root 1042 2008-04-30 08:44 status
-rw-r--r-- 1 root root 1042 2008-04-29 14:49 status-old
drwxr-xr-x 2 root root 32 2008-04-29 14:41 triggers
drwxr-xr-x 2 root root 6 2008-04-30 08:44 updates

linfves [ ~/Download ]$ ls -l /usr/sbin/update-rc.d
-rwxr-xr-x 1 root root 0 2008-04-27 23:30 /usr/sbin/update-rc.d

linfves [ ~/Download ]$ dpkg --version
Debian `dpkg' package management program version 1.14.18 ().
This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.
See dpkg --license for copyright and license details.

linfves [ ~/Download ]$ dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii mrxvt-common 0.5.3-1 lightweight multi-tabbed X terminal emulator

作者: Dennis.Wang   发布时间: 2008-04-30

引用:
作者: d00m3d
LanEast 兄的方法其实在任何发行版都通用,只不过这样就等於於弃了 Debian 的包管理系统而矣,有时候作为系统急救也行 :)
原来d00m3d兄是想用dpkg做包管理啊
之前也想过,不过不太喜欢,用debian/ubuntu的包依赖关系烦人,又懒得去学用debian的包管理去做deb包

作者: LanEast   发布时间: 2008-04-30

非也,俺在 LFS 下是用 paco 管理包的,dpkg 只是附助,便於安装哪些不愿意自行编译的怪兽级软件,如 OpenOffice.org 之类而矣

以前我在 Debian 下也会借助 checkinstall 做个 deb 包来用 dpkg 安装,现在也干脆在 Debian 下使用 paco,所以我用的系统都不纯净,哈哈!

俺常言:系统是供人使用的,应该是我玩它,不是它玩我!

作者: d00m3d   发布时间: 2008-05-01

引用:
作者: Dennis.Wang
呵呵,果然我眼浊了,是1.14.18,非1.14.28。毁灭兄,sorry!
对debian的依赖不熟悉,还请您多多指导。
linfves [ ~/Download ]$ ls -al /var/lib/dpkg/
total 44
drwxr-xr-x 8 root root 4096 2008-04-30 08:44 .
drwxr-xr-x 13 root root 132 2008-04-27 23:29 ..
drwxr-xr-x 2 root root 6 2008-04-27 23:29 alternatives
-rw-r--r-- 1 root root 14344 2008-04-30 08:44 available
-rw-r--r-- 1 root root 14344 2008-04-29 14:49 available-old
drwxr-xr-x 2 root root 86 2008-04-29 14:41 info
-rw-r----- 1 root root 0 2008-04-30 08:44 lock
drwxr-xr-x 5 root root 40 2008-04-27 23:29 methods
drwxr-xr-x 2 root root 6 2008-04-27 23:29 parts
-rw-r--r-- 1 root root 1042 2008-04-30 08:44 status
-rw-r--r-- 1 root root 1042 2008-04-29 14:49 status-old
drwxr-xr-x 2 root root 32 2008-04-29 14:41 triggers
drwxr-xr-x 2 root root 6 2008-04-30 08:44 updates

linfves [ ~/Download ]$ ls -l /usr/sbin/update-rc.d
-rwxr-xr-x 1 root root 0 2008-04-27 23:30 /usr/sbin/update-rc.d

linfves [ ~/Download ]$ dpkg --version
Debian `dpkg' package management program version 1.14.18 ().
This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.
See dpkg --license for copyright and license details.

linfves [ ~/Download ]$ dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii mrxvt-common 0.5.3-1 lightweight multi-tabbed X terminal emulator
有点奇怪,貌似要的东西都存在,而且 mrxvt-common 都成功装上了

用 dpkg -i --force-depends mrxvt-mini_0.5.3-1_i386.deb 来安装行不?

还有一问,你现在的系统是 64 位的吗?

作者: d00m3d   发布时间: 2008-05-01

引用:
作者: d00m3d
有点奇怪,貌似要的东西都存在,而且 mrxvt-common 都成功装上了

用 dpkg -i --force-depends mrxvt-mini_0.5.3-1_i386.deb 来安装行不?

还有一问,你现在的系统是 64 位的吗?
linfves [ ~/Download ]$ sudo dpkg -i --force-depends mrxvt-mini_0.5.3-1_i386.deb
dpkg: error processing mrxvt-mini_0.5.3-1_i386.deb (--install):
package architecture (i386) does not match system ()
Errors were encountered while processing:
mrxvt-mini_0.5.3-1_i386.deb

不行啊,就是提示说系统架构不一样,我的是32位的notebook。

作者: Dennis.Wang   发布时间: 2008-05-01

刚我试了一下, dpkg 的 configure 从不知道哪个版本开始, 在没有安装 dpkg 时不能正确检测出系统架构(ARCHITECTURE), 反正 1.10.28 还是正常的, 到了 1.13.25(etch 里面用的版本)就不正常了
你可以在安装完 dpkg 之后再重新编译一次, 然后再安装, 或者在 configure 之后, 手动修改 config.h, 把里面的
代码:
#define ARCHITECTURE ""
改成
代码:
#define ARCHITECTURE "i386"
然后再make, 可以用一个 sed 命令来搞定这个:
代码:
sed -ie 's/#define ARCHITECTURE ""/#define ARCHITECTURE "i386"/' config.h
这里的 i386 要根据自己的情况来设定

在 1.14.18 版里面, dpkg 似乎是带了些 .pm 的文件(perl 的库或者是模块? 不懂perl, 不知道), 安装的时候, 会把这些库错误地放到 prefix 指定的目录下面, 所以安装的时候, 而且 configure 也不像宣称的那样, 支持 PERL_LIBDIR环境变量, 至少我用 LFS LiveCD 编译的时候, 是不行的, 如果不指定 PERL_LIBDIR, configure 似乎是使用 perl -MConfig 来判断的, 这似乎要用到 Config.pm, 这个文件至少在 LFS LiveCD 上是没有的(目前我的机器上还没有 LFS, 不知道 LFS 里面是不是也没有这个文件), 所以安装的时候需要用
代码:
make PERL_LIBDIR=/usr/lib/perl5/5.8.8 install
来安装, 这个地方的 PERL_LIBDIR 要根据你自己的情况来设定, 要是在 LFS 里面有 Config.pm, configure 能正确地判断 PERL_LIBDIR, 那应该就不用了.

除了 d00m3d 兄说的那几个文件要 touch 出来之外, 还需要建立一个目录: /etc/alternatives, 有些软件安装的时候会在下面存放东西 似乎是用来决定例如像 /bin/sh 这样的链接究竟指向 /bin/bash 还是 /bin/dash 的问题时用的, 不太了解 debian, 所以不确定

另外, 在安装完 .deb 的包之后, 再用 dpkg -r 或者 dpkg -P 删除的时候, 删除最后一个 deb 包的时候, 会出现 "cannot remove `/.'" 的错误, 至少我在试着安装了 mrxvt-mini 和 mrxvt-common 之后, 删除这两个的时候, 最后删除的总是出现这样的错误

作者: LanEast   发布时间: 2008-05-01

1.14.18下面没有你说的config.h啊,有config.h.in。我查了config.h.in文件,也没有#define ARCHITECTURE "",我在没有重新编译的情况下,建了你说的那个/etc/alternatives,安装mrxvt-mini的时候,还是提示相同的错误。

作者: Dennis.Wang   发布时间: 2008-05-02

要在运行了 configure 之后,才会产生 config.h 的

作者: LanEast   发布时间: 2008-05-02

首先thx LanEast兄的帮助。
其次,对安装过程做个简单的说明:
1. 对于LanEast兄解答的“make PERL_LIBDIR=/usr/lib/perl5/5.8.8 install”,这个至关重要,不太了解debian,可能情况正如LanEast兄所说的一样。另外对于“#define ARCHITECTURE "i386"”,因为1.14.18在.configure之后,已经自动识别了cpu的架构,config.h不需要再修改。其他的/etc/alternatives目录就如LanEast兄所说做即可。
2. 剩下的如毁灭兄所做即可。
3. 在安装mrxvt-mini的时候,虽然提示了这个包需要libc6和libx11-6的依赖,但不管依赖它也还是安装上了。想必不是我的系统里没有这个包,大概是debian版本识别包的问题了。
4. 在安装openoffice时,没有出现问题,成功安装。为了好用图形化工具管理,在dpkg -i *.deb之后,又用KPackage重新安装了一次,让它有个记录,日后卸载也好管理。
5. 经过测试,目前没有问题。KPackage没有记录下安装过的包记录,不知道这玩意怎么个意思。

作者: Dennis.Wang   发布时间: 2008-05-03

自动识别 CPU 是因为你已经装了一次 dpkg 了, 这就是为什么开始的时候你前一遍安装的 dpkg 在安装程序的时候出现
package architecture (i386) does not match system ()
错误的原因, 就像我上面回的那样, 在不安装 dpkg 的情况下, 安装 dpkg 不能识别系统架构

作者: LanEast   发布时间: 2008-05-03

引用:
作者: LanEast
自动识别 CPU 是因为你已经装了一次 dpkg 了, 这就是为什么开始的时候你前一遍安装的 dpkg 在安装程序的时候出现
package architecture (i386) does not match system ()
错误的原因, 就像我上面回的那样, 在不安装 dpkg 的情况下, 安装 dpkg 不能识别系统架构
我记得提示不匹配系统是在安装mini那个包时才发生的,似乎和编译安装dpkg时是没有关系的吧?具体的也懒得再去追究了,现在能用就好了。

作者: Dennis.Wang   发布时间: 2008-05-03

引用:
作者: d00m3d
非也,俺在 LFS 下是用 paco 管理包的,dpkg 只是附助,便於安装哪些不愿意自行编译的怪兽级软件,如 OpenOffice.org 之类而矣

以前我在 Debian 下也会借助 checkinstall 做个 deb 包来用 dpkg 安装,现在也干脆在 Debian 下使用 paco,所以我用的系统都不纯净,哈哈!

俺常言:系统是供人使用的,应该是我玩它,不是它玩我!
"现在也干脆在 Debian 下使用 paco"----有空把具体步骤列出来,我也想试试,多谢!

作者: jhbfx   发布时间: 2008-05-03

旧版的 paco-1.x 比较简单好装,可是新版就多了很多依赖,特别是 gtkmm,cairomm 之类的,麻烦得很,功能上也不见得有何突破

想简单一点的就用 1.x 好了,基本上看它自带的文档,满足基本的依赖就行了

作者: d00m3d   发布时间: 2008-05-15

引用:
代码:
Makefile 的修改,用这个语句就可以了:
sed -i -e '251s/man/\./' Makefile.in
configure 之前用。我这里测试没问题。
小弟不才,不过我觉得上面的sed语句有问题啊,这个只是编辑了251行而已啊,跟方法一的效果应该是不同的吧!

作者: dangbinghoo   发布时间: 2008-08-10

現在 dpkg 的版本已更新了,不用再修改都能順利通過了

作者: d00m3d   发布时间: 2008-08-10