Debian 维护工具之 Dpkg

etony C.F.AN etony@tom.com IXPUB技术博客yQWl6X,|"TS+ukXE
v0.0.1, 2006-3-24
x ^/A*^ K? H:m"/Fr0--------------------------------------------------------------------------------
C9@-f@J,j:d,Q0本文的对Debian GNU/Linux 的Dpkg工具做了较为详细的描述, 希望Linux用户对于Debian 有个较为深刻的了解.
'yU` v+p?0-------------------------------------------------------------------------------- IXPUB技术博客%p8j1Mu-v9Z.BK&G
IXPUB技术博客n&R X @(t;O/A
1. 声明
%H7Q1z /+[Bc.c0 IXPUB技术博客.Sr~j9A
版本信息:
ZuCxE0本文档的最新版本将张贴于: LinuxSir.Org论坛 Debian发行版讨论区 ;
A&|6V?l(L4^2o c0 IXPUB技术博客'r~r8Y5fm+{N
也可以从 http://debian.linuxsir.org/获取. IXPUB技术博客 mcq a2i:B w

.P'u/hM%NqY(f-e0反馈: IXPUB技术博客8V3K*PW�~-f#v%|
所有评论, 错误报告, 其他信息以及批评, 请邮寄到 etony@tom.com;
Fr%i,kmZ"k%x@�G0 IXPUB技术博客+Z`(HGjT.oi
或在LinuxSir.Org论坛 Debian发行版讨论区 张贴.
2x2?^'YDfL7v0 IXPUB技术博客*Wn)[ A]$~(S7^
版权信息: IXPUB技术博客RS(kT1]J#Y[
本文档的版权(c)2006-2007 归 etony C.F.AN 所有. IXPUB技术博客r B Y;c1}�e}u/c2Ro
IXPUB技术博客s]$wxP7OjG'dG
转载请注明源自 http://debian.linuxsir.org/. IXPUB技术博客qsojzIiU.S^

1{Le-l3_5d0
pQ!}aU b.D02. dpkg 概述
B nH}+/,|z7y0在其 manpage 中, 这样描述:
HvU9B Ql0
~I0Mh9h B7s0 IXPUB技术博客+w L'^ mV1[5s
dpkg - a medium-level package manager for Debian. IXPUB技术博客{D h0D p5A `(][~
dpkg - Debian 的中级软件包管理器. IXPUB技术博客0o2S(@+v,W
IXPUB技术博客Z9G'X7V/vH1@5`
IXPUB技术博客t!WVJJ&g G(Eq-I
dpkg 是 Debian 软件包管理系统的中流砥柱, 负责安装卸载软件包, 配置, 以及维护已安装的软件包. 也是Debian系统中众多软件包管理工具的后端. 有关 dpkg 的更多介绍请参阅: http://www.dpkg.org
,{!m1m2NJF0
tW2h/rw(t@.Q.yj0dpkg 通过数据库来维护系统中软件, 这包括文件清单, 依赖关系, 软件状态, 等等详细的内容, 通常在/var/lib/dpkg目录下. 并确保系统与数据库的情况相一致.因此,dpkg在处理程序时非常健壮,和优秀.
#pS HP,@Q ]2j0
/s4SKQSS:Fj0dpkg 在处理软件包时, 首先要判断是否会引起系统的混乱, 当发现可能出现时, dpkg 将拒绝安装此软件, 而不是自作主张将软件装入系统, 然后把烂摊子扔给用户了之.
E{M"F.L/0
n*j7d)rJ s [u7a$P;x0dpkg是一个庞大的家族, 不仅提供了大量的参数选项, 同时也提供了许多子命令比如: IXPUB技术博客1i YiX7e5v&xuK/M

0G-QA {3pY `n9VT0dpkg-deb IXPUB技术博客$G0/ N`1Q.| Yc
IXPUB技术博客4^3uJ)zBm
dpkg-divert
9o!a~${?Eb0 IXPUB技术博客z[2e$H:T9P9~m
dpkg-query
KP*| c,vZI$K|F#t0 IXPUB技术博客tl Q!`KJ3h
dpkg-split
:y7R%M$NsHu0 IXPUB技术博客@)I y OA gBV6y
dpkg-statoverride IXPUB技术博客;utio u@AC
IXPUB技术博客;B9sn:a6D2^+y)q
start-stop-daemon IXPUB技术博客O3eDe7N$z.JS

7gra~}0... IXPUB技术博客r T*Tc.qt
IXPUB技术博客"U h[&m;D[*uJ
本文档不是 dpkg 的 manpage, 将不会对所有的参数和子命令加以介绍, 同时记住所有参数也是相当痛苦的事情, 在这里只对常用参数和命令做示例性介绍. IXPUB技术博客HezU[ V']vt
IXPUB技术博客 f1yK:XF4fE2NxU
dpkg 涵盖了 dpkg 家族的大部分功能, 因此dpkg可以作为一个多合一(ALL-IN-ONE)的软件使用,以更好的使用 dpkg 家族的全部功能.
+I9d~sT�d-yUo0
!r+e6CNL9t S03. deb软件包命名规则: IXPUB技术博客a(]T/S~M t
Debian软件包命名遵循下列约定: <软件包名称>_<版本>-<修订号>_<平台>.deb
{!z/.tdZ5|fx:`j~0 IXPUB技术博客#VW/J+{J8yrV

y"x/L$L],@0|0软件包名称(Package Name): IXPUB技术博客mrH,Q�Q(Jj"{
版本(Version Number):
,K$hASau�oy0修订号(Build Number):
!d G3Q!{)D.V8kq0平台(Architecture): IXPUB技术博客D$y7Ju"Xd{
i386
'w}3y?o3_KH0all: 平台无关. 即适用于所有平台.比如文本, 网页, 图片, 媒体, pdf 等.
&tW/PH's0
FU"`p Qg2RA0例如
"mi(c8I3~q] B0 IXPUB技术博客G_cb%W
IXPUB技术博客.s0sf3lMBkdv&/N
nano_1.3.10-2_i386.deb
%I3P7Hq8@0软件包名称: nano
"~;]8w;O.P,c0版本: 1.3.10
4OB H@8EB Pun @0修订号: 2
.m'hc.U~'`2^0平台: i386
A.L$C|4L0U @mJt0 IXPUB技术博客|!|mWW A
4. 软件包处理
,u6P2F1u F~`+[0(注:本文的中的操作以nano为例) IXPUB技术博客#s4xq x,j2Ew

B"MUp/mB;L1[0dpkg-deb : 用于处理本地Debian软件包. 可以提取从.deb文件中提取软件包信息和数据. 详细信息,请参阅 dpkg-deb 的联机手册.
S pK5A*a!D$y%tw.v0 IXPUB技术博客1DyG1NdS-}Kb XU
IXPUB技术博客u` s8`_o
列出软件包的内容: IXPUB技术博客3vV~&jdq;f,]ol
IXPUB技术博客5yS4h w'A&`-v
tony@tony:~/doc/dpkg$ dpkg-deb -c nano_1.3.10-2_i386.deb |more IXPUB技术博客KY-`/_5}D(r DV
drwxr-xr-x root/root       0 2006-02-05 00:29:18 ./
"gj,]5@&{$`*`5y%Up0drwxr-xr-x root/root       0 2006-02-05 00:29:07 ./etc/ IXPUB技术博客OF,I&bw~{U
-rw-r--r-- root/root   11887 2006-02-05 00:29:07 ./etc/nanorc IXPUB技术博客j%PLL{GAAF5]h
drwxr-xr-x root/root       0 2006-02-05 00:29:14 ./usr/ IXPUB技术博客 TR&l|*e9/ m)C!v
drwxr-xr-x root/root       0 2006-02-05 00:29:12 ./usr/share/
+T-f/9P0p*xG+|0drwxr-xr-x root/root       0 2006-02-05 00:29:01 ./usr/share/doc/ IXPUB技术博客fB }S-{q}JB
drwxr-xr-x root/root       0 2006-02-05 00:29:15 ./usr/share/doc/nano/
dr#@(_go+w0-rw-r--r-- root/root     1847 2005-08-30 02:29:02 ./usr/share/doc/nano/AUTHORS
%d/m:}7W(S/gL7n/n s0-rw-r--r-- root/root     2338 2005-03-20 05:33:13 ./usr/share/doc/nano/README IXPUB技术博客s5sU*S,OZAW
-rw-r--r-- root/root     3175 2005-11-21 17:36:11 ./usr/share/doc/nano/THANKS
'oB V.LzN0-rw-r--r-- root/root     2206 2005-06-08 10:28:06 ./usr/share/doc/nano/TODO
2l.Z,s ~+p9w0-rw-r--r-- root/root     1066 2003-03-24 21:09:26 ./usr/share/doc/nano/UPGRADE
0A?'nx bG x0-rw-r--r-- root/root   35996 2005-11-22 05:45:07 ./usr/share/doc/nano/faq.html IXPUB技术博客6E,eu k@n'`
... ...
HQ9^#K6a/bC0
AtA?$_+lb4P0 IXPUB技术博客ij%@HE4m
查看软件包的信息 IXPUB技术博客4Q)KDwt5P+I#B

4dvS y8zRp�]0tony@tony:~/doc/dpkg$ dpkg-deb -I nano_1.3.10-2_i386.deb
a a&|+}]E0new debian package, version 2.0. IXPUB技术博客y8N�qMh0z,QXi
size 477372 bytes: control archive= 2656 bytes.
~/,kga7F u0    12 bytes,   1 lines     conffiles         IXPUB技术博客4TQ4ms"`*krLz
  714 bytes,   18 lines     control         IXPUB技术博客 x bABY(~.z(n |s
  3529 bytes,   51 lines     md5sums        
/)L*f2G P0  613 bytes,   21 lines   * postinst         #!/bin/sh
O4g!I!P B"E0  160 bytes,   5 lines   * postrm           #!/bin/sh
Y qSQg/._X0s0  379 bytes,   20 lines   * preinst         #!/bin/sh
.wK'?{ IC#u!?8Q0  288 bytes,   14 lines   * prerm           #!/bin/sh
h2[ ^C(rm6K0Package: nano IXPUB技术博客g7nJ{ }$b vsa
Version: 1.3.10-2
5v-M$ISh W0Section: editors
L8EQ,H-`-y0Priority: important
u(r1]!n"qkY-_/l%S0Architecture: i386 IXPUB技术博客QE6m9F3M)Z/^W!w
Depends: libc6 (>= 2.3.5-1), libncursesw5 (>= 5.4-5) IXPUB技术博客8d,`%Bu.zU7y`!f
Suggests: spell
A+d)]7`(n?0Conflicts: nano-tiny (<= 1.0.0-1), pico IXPUB技术博客|y,V8Y`;q�x S /~'Y5i
Replaces: pico IXPUB技术博客l0~/y$l
Provides: editor IXPUB技术博客w k hF:|8LJ"eX
Installed-Size: 1108 IXPUB技术博客S;g0`;t1g
Maintainer: Jordi Mallach < jordi@debian.org>
"JC'_r:d f/g0Description: free Pico clone with some new features
`Y { Z8k�S�m;/ /0GNU nano is a free replacement for Pico, the default Pine editor. Pine is IXPUB技术博客}jW;@Y.J{0j8_
copyrighted under a restrictive licence, that makes it unsuitable for
B:/9/$J5S0f @ L0Debian's main section. GNU nano is an effort to provide a Pico-like
b@s#k DMV0editor, but also includes some features that were missing in the original, IXPUB技术博客uEv Pe&g4S
such as 'search and replace', 'goto line' or internationalization support.
n/E3`2h}4h0
,B*^0?5`B@%j!uc^0 IXPUB技术博客%H7T([6f8H/gW?
重新构建软件包 IXPUB技术博客 AEY5iFPH
比如nano(1.3.10)需要满足以下依赖关系:
4R*gef$e9y0n"af'N0 IXPUB技术博客(`�h eh Aq.M}
IXPUB技术博客y'a(Txb PG"L*U
$ dpkg-deb -f nano_1.3.10-2_i386.deb depends         //depends 为对应查询段
2Kd5tv8? }*/7Yz0 IXPUB技术博客5y?&dM(z:|A4wq
libc6 (>= 2.3.5-1), libncursesw5 (>= 5.4-5) IXPUB技术博客1pb9X1e)C4S
IXPUB技术博客 Z1c+^kL

'lkP0mf5{0当系统不能满足依赖关系, 比如不能满足里来版本, 可以通过下边的方法处理, 当然这种情况下安装的nano并不一定运行正常, 这种方法可以应用于某些软件的变通安装. IXPUB技术博客 fK t#V-U*iC
IXPUB技术博客�xiA.b"w)k~}
$ mkdir nano //创建nano目录
R(V)|YA;Coz1~vu5i0 IXPUB技术博客t;wlb7uA2O!?{%T
$ dpkg-deb -e ./nano_1.3.10-2_i386.deb ./nano/DEBIAN   //解压控制文件 IXPUB技术博客{9gu"[r0p1e"g

C2EL/h:b:/:JU0$ dpkg-deb -x ./nano_1.3.10-2_i386.deb ./nano       //解压程序文件 IXPUB技术博客 C*lg6t1i9~

$N1r:s/N%Li*[0$ vi ./nano/DEBIAN/control                     //修改控制信息 IXPUB技术博客~c^q%`l^8X3u
IXPUB技术博客.Vx�L2R*B5?
$ dpkg-deb -b nano nano_1.3.10-2_ill.deb           //重新打包
Rn aq�q�TNO0
e:fag9m�to(d0
(cq+I z ec0
3ERv;C[KA05. 数据库查询
['V.K h0h;b1_0当 前版本的 dpkg 使用文本文件来作为数据库.通称在 /var/lib/dpkg 目录下. 通称在 status 文件中存储软件状态,和控制信息. 在 info/ 目录下备份控制文件, 并在其下的 .list 文件中记录安装文件清单, 其下的 .mdasums 保存文件的 MD5 编码. IXPUB技术博客2]Ez,ec`x S
IXPUB技术博客[2~ oM4d+p|}%P
体验使用数据库的时刻到了:
/o#N+WO:c0 IXPUB技术博客!U4k7p9B%i:v5h

6ug0J{egv!T8r0$ dpkg -l
7J6gt*V8X%r+Atu3U]0Desired=Unknown/Install/Remove/Purge/Hold
C9R%F,}?s0| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed IXPUB技术博客5T:A,@u�A t7r
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) IXPUB技术博客]/]�~:n:a%q8f*_
||/ Name     Version       Description
&e J2d[5T$ZA0B'z0+++-===========-================-======================================== IXPUB技术博客R n;PPqOH
ii aalib1   1.4p5-28       ascii art library - transitional package
!mFbp7ix;XD0ii adduser   3.85         Add and remove users and groups IXPUB技术博客(n0MXI/u8Rd'a+F)M7rc
ii alien     .63           install non-native packages with dpkg IXPUB技术博客s6Gx P3Io
... ... IXPUB技术博客3[SP5mY:`

#Q'[,j q1J/S0 IXPUB技术博客O2l3At CS /
每条记录对应一个软件包, 注意每条记录的第一, 二, 三个字符. 这就是软件包的状态标识, 后边依此是软件包名称, 版本号, 和简单描述.
J/9o#{7k5M~*Cw0 IXPUB技术博客4wdKT+Bp

7QXy[[P-Rd0第一字符为期望值,它包括:
:w@lKI@0u 状态未知,这意味着软件包未安装,并且用户也未发出安装请求.
J1D~ C0Sr/}0i 用户请求安装软件包.
S!^/a'Sd2DV0r 用户请求卸载软件包.
qxq.rf0p 用户请求清除软件包.
Q$VqoO i0]2z�_,J0h 用户请求保持软件包版本锁定. IXPUB技术博客Rj L_t1}A6k
第二列,是软件包的当前状态.此列包括软件包的六种状态. IXPUB技术博客g!a#j6m;Iy@Y X"G
n 软件包未安装. IXPUB技术博客 T-v/^PK3U*R,S8n
i 软件包安装并完成配置.
,I,n{4[~0c 软件包以前安装过,现在删除了,但是它的配置文件还留在系统中. IXPUB技术博客(M eDX1dPZ
u 软件包被解包,但还未配置.
!YRzt(C3o;B2apF0f 试图配置软件包,但是失败了. IXPUB技术博客kG(Gs'V9l
h 软件包安装,但是但是没有 成功.
,B)s'C S(M0第三列标识错误状态,可以总结为四种状态. 第一种状态标识没有问题,为空. 其它三种符号则标识相应问题.
c`-Sr W E}(u2n@$l|z0h 软件包被强制保持,因为有其它软件包依赖需求,无法升级. IXPUB技术博客-Tj4e2}D
r 软件包被破坏,可能需要重新安装才能正常使用(包括删除).
&fS s2j[z(W'Z0x 软包件被破坏,并且被强制保持.
&pmf5wU9w1oy0
4QUM n UnS-C'FQ:/;a0也可以以统配符模式进行模糊查询, 比如我要查找以nano字符开始的所有软件包:
0k%d�R aQ0
o2`%r5]�b"M0
vEX1n}(ebd0$ dpkg -l nano*
V y A].hVJ0Desired=Unknown/Install/Remove/Purge/Hold
7C9F(M;^&}9oxb)K7P0| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed IXPUB技术博客f;/9G `zkjP
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) IXPUB技术博客 mhH /#}!y
||/ Name       Version     Description
.z&K1z%Nvp0+++-==============-==============-============================================
P5`!Uozn%ol,j1c0ii nano       1.3.10-2     free Pico clone with some new features IXPUB技术博客I!h6QfkJ&h
pn nano-tiny     <none>       (no description available)
|q,CANSrWyb0un nanoblogger   <none>       (no description available)
7I&Uxb"q.U4b0
d)`1fH-vx{N(d0 IXPUB技术博客 P b)Mo,W%I[
以上状态说明: 系统中安装了 nano 版本为 1.3.10-2;安装过 nano-tiny, 后来又清除了; 从未安装过nanoblogger. IXPUB技术博客B)L�n g${Y

X7M.r?0I!~c0如果觉得 dpkg 的参数过多, 不利于记忆的话, 完全可以使用 dpkg-query 进行 dpkg 数据库查询.
V7z~+t�P-n s&U*A0 IXPUB技术博客.W_.tx7A W5y P
应用范例: IXPUB技术博客lI5G'@~g|s
IXPUB技术博客l"`*u,x&wSnm
IXPUB技术博客7XIx7cVq2O};P];?B
查询系统中属于nano的文件: IXPUB技术博客qt1jU&K8O
$ dpkg --listfiles nano
JL M7KgA)uU0or
D7S1ZT2s�U1a0$ dpkg-query -L nano IXPUB技术博客K�D lNc*q(k
查看软件nano的详细信息: IXPUB技术博客/K#h)Q Kjx
$ dpkg -s nano
kU!w%SO!Y0or
C9x0D'C}/|'@ K}Z0$ dpkg-query -s nano
%A p D;he/O�I!xsaP0查看系统中软件包状态, 支持模糊查询:
Pa|KX;VF4MT0$ dpkg -l IXPUB技术博客G iWT%]c/f
or IXPUB技术博客]8p.YrOF
$dpkg-query -l
R7OV4Q$g0查看某个文件的归属包: IXPUB技术博客2GvV!p1a
$ dpkg-query -S nano IXPUB技术博客4TC8m"ri)/1DbT
or IXPUB技术博客`�{6~�_{ B3L.l.X9zj/c
$ dpkg -S nano
-TV I+])CCu0
,J%E[k&r-F#yp#bU'ap,|06. 安装软件包 IXPUB技术博客'w+^ p+Db7GN ]
运行下面的命令: IXPUB技术博客SZ-w3E+PKw
IXPUB技术博客:Xwn4o {:mdc

s6iN&q}DT#J0$dpkg -l nano
+/A8}3O{1n }V^0un nano     <none>     (no description available)
"rJ&j#|)fYztF6J0 IXPUB技术博客6Tf|!S5s2aa"~
IXPUB技术博客 p+sO[_DFs0v;E
当前 nano 的状态说明在系统中从未安装过 nano 软件包, 可以通过以下命令安装本地的 nano 包: IXPUB技术博客g(BP3[#ONH
IXPUB技术博客ZBZ{M2@M

/q�kQmW%eMg0$dpkg-deb -e ./nano_1.3.10-2_i386.deb IXPUB技术博客�] t+LfP!|3y3`LN o
IXPUB技术博客fm-Q K [w_.h
IXPUB技术博客r:ek0cm&jC
当 使用 dpkg 安装软件包时, 主要分为两个阶段: 首先解包; 然后运行postinst控制脚本(如果有的话),这就是所谓的配置阶段. 当完成软件包当解包后, dpkg 的--intall选项自动调用配置阶段. 注意, 操作时应当指定 .deb 文件的实际路径, 仅仅给出文件名无法找到对应文件.
xObr4kXf;Dbg0
g(dO5R-Y0M?2qW:a8V�Y-C0这样, 软件的安装就可被拆分为两个对立的过程: IXPUB技术博客 A I8p2DP1t C
IXPUB技术博客�kAb9~5M+?Q(z

3B T0Bs1xmd#D]0dpkg --unpack IXPUB技术博客 I;r6L)[�VD
dpkg --configure
/~|N*Nm3v"[)S T`+L0
-|~C c#mT*Ml%B4S0解包
K.KF1cf G_:w0 IXPUB技术博客i*Q'{?*H8Sq Z
运行
+X0^-H[#d*Y0 IXPUB技术博客3@B-p#EO4r1e

.gXv-?Ue0#dpkg --unpack nano_1.3.10-2_i386.deb IXPUB技术博客%K0v^/B%jK
IXPUB技术博客!{.~} @&Yz
IXPUB技术博客(_o+ER)@8{N
IXPUB技术博客3cAVZ B/
然后
KW9W2Ax7L0
t3|-HD ];m1j[X(R'^0
-?y R [ x*U&]0[I7S0$ dpkg -l nano IXPUB技术博客imRT3wJ
iU nano       1.3.10-2     free Pico clone with some new features IXPUB技术博客${j M%U|-I+@-t
IXPUB技术博客G9b)QQ0I7gW3Ca
IXPUB技术博客4O3qvPU)x*M[
说明此时系统中安装了nano 包, 但是未经配置. IXPUB技术博客Suo0u-~;P,}zWH"p+O
IXPUB技术博客3n9n?(n;_(b#~
解包可能包括一下步骤: IXPUB技术博客gN*V(bz;ol0rk*Il
IXPUB技术博客5PR*L#m!NgzSo/(h
IXPUB技术博客 dj#?/e"N r&t5X bY
将控制文件解压到临时目录.
!r5U0^�g:?�}0运行 preinst(如果有的话). 通常为停止相关服务. IXPUB技术博客9? g3`'d$w5Mo-xuh(P
解压配置文件到 /etc 目录, 并添加.dpkg-new 后缀, 以防止冲突.
)l f/A T ~7Om/E.O0K;W0解压 data.tar.gz 到系统根目录,(--root=dir). IXPUB技术博客In3l3@e8e5PR
将控制文件解压到 /var/lib/dpkg/info 目录并添加软件名前缀. 对数据库进行更新. IXPUB技术博客x:Vw.K}1d ]2U
数据库中将软件包的状态设置为"unpacked". IXPUB技术博客1_|W3] F|+Vo%l
IXPUB技术博客0C1SE*qT&S|0U'WQ
仅仅解包, 并不能确保软件可以正常运行.
-p7BKp6UEcYM0 IXPUB技术博客+V |6A}z-IBJ#}/
配置 IXPUB技术博客P:]h%Bs2R

S4~V7m/{0j5ct:a5ci0 IXPUB技术博客}+`)rN-t
#dpkg --configure nano
RJo3tVa^M0
]A0iQi0$ dpkg -l nano IXPUB技术博客9J {!Z c@ n
ii nano       1.3.10-2     free Pico clone with some new features IXPUB技术博客4MmK3|!{5b7o

]nSAVq0 IXPUB技术博客0r;n1v H5z#vA2n4U7jR
如输出所示, nano 已经正常安装.
{o7N)BB0
Hs$l~.m7e,I0软件解包后, 还需要对其进行调整, 比如根据实际情况对配置文件进行修改. 这一步通常是在安装过程中自动进行的, 当然可以手动调用, 这次用到的是软件名, 而不是deb文件名.
F9LZ[9A0
!CgL7R3B9_ocp0通过命令 dpkg -L nano 可以得以验证 IXPUB技术博客F yu)Okn^r+t
IXPUB技术博客 nfs4XE
这一过程可能包括一下步骤: IXPUB技术博客 ?%d0t(l9Q#SDe'z1f,UU

-_| r)?CN+oGkIx0
j D5`.iY/Z0询问对配置文件的处理方法, 覆盖当前版本, 还是不做处理.(当软件升级时会碰到这种情况) IXPUB技术博客T6M.V)W I'pW8d
运行 postinst 脚本 IXPUB技术博客HqZQ7|
将软件包标记为 "installed" IXPUB技术博客tiT m&^3h J-`7uX1d

,Z@a"V p'zL1_,`[0如果想再次修改配置选项, 可以运行:
(]-CqtR%k#t4d0
]+LX,q0F|G0 IXPUB技术博客�M eIO;]p;/}
#dpkg-reconfigure nano IXPUB技术博客"SH&a:T[t
IXPUB技术博客*l.cL0bXWeB
7. 软件卸载 IXPUB技术博客 YH3cv'`"y:aG@3j6Jm
在Debian 中卸载和清除软件包是两个不同的概念. 不同之处在于软件包被删除(卸载)后,它的配置文件仍会留在系统中,只有清除时才会删除它们. 默认情况下, Debian 仅会做删除操作, 除非你明确指出, 才会将配置文件删除. 如果要清除软件包, 则在清除前将会隐含地执行删除操作. IXPUB技术博客z"I9y+jw.Kg` xH
IXPUB技术博客z9J1D!E N$Ky4{
要删除一个软件包,dpkg需要使用--remove选项将软件包卸载.与安装不同,删除只需要软件包名,而不是实际的deb文件名.
8h&~ ]m6?L)P BX0
yKw$^*[0删除 IXPUB技术博客 rfW Eewm^;wj

#ekp jH+Jr:y&T3q0 IXPUB技术博客Y0Uo;I gh |
#dpkg -r nano
tZ-cB{tX0 IXPUB技术博客T9x| nv2z#N

LQeom:G0首先运行 prerm 脚本(如果有的话). IXPUB技术博客x@S8wM:AA-Y
然后, 保留配置文件, 其他文件全部删除. IXPUB技术博客.W$dxSGw @Z
删除 /var/lib/dpkg/info 目录下软件包的所有配置文件, 保留postrm和list文件.
*za9VS jl0最后, dpkg 在数据库中将软件状态修改为删除. IXPUB技术博客g�Ze2aG7c{];t-Il
IXPUB技术博客 z M:b4Ih#F2v
运行
E.I!qvz"u{U[e0
Ce&q C{+Z5i0
1y%gr tS9Y0$dpkg -l nano IXPUB技术博客^P W"^V$l

+v+}.J.O7m)]E1l0rc nano   1.3.10-2   free Pico clone with some new features
m0Y]B9v0
*U1A2Q1J$W0
4w:o-a7NE3b Sh0清除
;@;B9Y'l/x@7t)X0
k|dn7q*j0 IXPUB技术博客`o&jP!C
#dpkg -P nano IXPUB技术博客:m:z7o e_X(fp8n
IXPUB技术博客I&ES_$vx8US n

$XK*b?AM3]P2X8I0删除所有的文件. 所有的文件都被解除了(从系统中删除了).
7V zZW w@&p&I0运行postrm脚本.如果还存在,运行postrm脚本.
/e1j-X#^"Kq+ER)l0删除 postrm 和 list 文件.保留的两个文件,从系统中解除postfix.postrm和postfix.files. IXPUB技术博客*A&Y;`(NlL7l
在dpkg的数据库中将软件包标记为未安装 IXPUB技术博客Jk;h(M `E+y d

;Q.ZX:s-e1S8@_)j0 IXPUB技术博客YlJ.@9^vY w a2n
$dpkg -l nano IXPUB技术博客{2S!?5GXm
pn nano               <none>             (no description available)
hj*^r4N%d2v0
m!J J:YvI0
{#iC%_8W r0注意输出的状态: pn 这意味着软件包实际上是被清除了,但是在数据库中还有这个软件包的记录.因此,pn 明确指出以前安装过 nano, 在软件包数据库中出现过,并且现在已被完全清除. IXPUB技术博客)K Rz)F6]4w+U

!]0q2IF�X(H$Vf08. 异常处理 IXPUB技术博客u8b7P&jNt3]O
有时,因为不能满足依赖关系, 或存在冲突, 文件会被覆盖, 或控制脚本中存在错误而安装失败. 在 stable 发行版中从不会存在这类问题(这被视为重大错误). 但是, 在运行 unstable 发行版的系统中,有时却是难免的.
7X @ ~j/0 IXPUB技术博客z7C'Wz8rXU&|Y
处理文件冲突 IXPUB技术博客Tf1F0e(Et4aN$`
IXPUB技术博客W0B#ESFN;f_k w
dpkg 不会允许一个软件包覆盖属于其它软件包的文件.可以强制dpkg覆盖属于其它软件包的软件(使用 --force-overwrite), 但是这样做十分危险. 如果这只是暂时的冲突(在 unstable 中, 这种情况常有), 覆盖没有太大问题. 请注意, 遇到这种情况应该向软件包的维护者提交相关错误报告. IXPUB技术博客&[wK4}Td
IXPUB技术博客1C bmt'JvM
如果你使用的是非官方包, 或是通过 alien 或 checkinstall自己构建的软件包, 那么应该对包内文件改名, 或者放弃使用这类软件包.
$ZL3n'xU'@3A1N4?0
2^"Yj!AC;k0处理在安装过程中控制脚本脚本出现了问题. 问题脚本是出现问题的另一原因. 如果, 软件包的 postinst 控制文件中有错误,那么就无法用 dpkg 完成对这个软件包的配置. IXPUB技术博客 C.m*Md!S
IXPUB技术博客 r)vA!H T*m/l
这种错误一定要作为严重问题向错误跟踪系统提交报告.象这种脚本的问题,自己对其进行调试, 以判断问题所在, 比如您可以简单的在脚本的第一行以后插入 set -x, 对其运行情况进行跟踪.除非必要, 您也应该拒绝使用这类软件包. IXPUB技术博客g2[+T3e!{(N#_ W4WC
IXPUB技术博客L;Yp C*k$v L$WO
处理卸载过程中损坏的控制文件 IXPUB技术博客 A/w {r9Jdd
IXPUB技术博客td c-gL1Z
当 软件包的卸载脚本出现问题时.即使您可以强制删除控制脚本没有清除干净的文件,这也会妨碍dpkg正确的维护您的系统,从而有可能在系统中留下垃圾文件. 对于这类问题, 还没有太好的处理方法(强烈建议您提交错误报告), 唯有等待软件更新(或自行对软件包包修复). 然后借助更新包将相关文件卸载.
.X:j6?(GY,y,x:Y0@;u0
}A!SoS.^$UUT09. dpkg vs rpm
(@2A#ek2Q0 IXPUB技术博客S-i8[U X5Cx
列出系统中安装的软件包 IXPUB技术博客~%J @qr-R+A0Ye)^+Y
rpm -qa
-i-gE:B|%BG#js-j&W0dpkg --list
U.O L4_$n4Q0列出软件包信息 IXPUB技术博客Y#Q.o(OA{#C*KGA1FyK
rpm -qi pkgname
O/m fw2K#V0dpkg --status pkgname IXPUB技术博客k&n$U!Qxf?
列出一个包所安装的文件 IXPUB技术博客!]�grS o
rpm -ql pkgname
(D!zi{1E1RG0dpkg --listfiles pkgname
$A4o$D(B bn0列出本地包文件的信息
U*V,A5k)F%k6~ S0rpm -qpi file.rpm IXPUB技术博客8h#Pc5W$~Mu�y3T
dpkg --info file.deb IXPUB技术博客 wT%m:z;u0YK9I
列出本地包文件所含文件
L%g.gg/Yk0rpm -qpl file.rpm
J|Jv�y{0dpkg --contents file.deb IXPUB技术博客;AG�W)v[ |ft#r u1U
安装本地包
8] Mc1wk;mQ0rpm -i file.rpm
2K@1d(T}w.Z]7e%]0dpkg --install file.deb
&b.p+]#Z+U![^4b~0从系统中清除包
[US5_$ZB'G;m hB�z0rpm -E pkgname IXPUB技术博客2eu9R@R"s`P)X
dpkg --purge pkgname IXPUB技术博客R;c G#Nr Q[.~F
查询文件归属
4BI*uwJ'ax0rpm -qf file IXPUB技术博客5dN-u'C)F$b
dpkg --search file
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值