Chinaunix首页 | 论坛 | 博客
  • 博客访问: 490018
  • 博文数量: 115
  • 博客积分: 5016
  • 博客等级: 大校
  • 技术积分: 1401
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-21 16:03
文章分类

全部博文(115)

文章存档

2013年(1)

2010年(17)

2009年(76)

2008年(21)

我的朋友

分类: LINUX

2009-02-17 13:46:15

2007-12-26 20:42
apt-cache search # ------(package 搜索包)
apt-cache show #------(package 获取包的相关信息,如说明、大小、版本等)
sudo apt-get install # ------(package 安装包)
sudo apt-get install # -----(package - - reinstall 重新安装包)
sudo apt-get -f install # -----(强制安装?#"-f = --fix-missing"当是修复安装吧...)
sudo apt-get remove #-----(package 删除包)
sudo apt-get remove - - purge # ------(package 删除包,包括删除配置文件等)
sudo apt-get autoremove --purge # ----(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
sudo apt-get update #------更新源
sudo apt-get upgrade #------更新已安装的包
sudo apt-get dist-upgrade # ---------升级系统
sudo apt-get dselect-upgrade #------使用 dselect 升级
apt-cache depends #-------(package 了解使用依赖)
apt-cache rdepends # ------(package 了解某个具体的依赖?#当是查看该包被哪些包依赖吧...)
sudo apt-get build-dep # ------(package 安装相关的编译环境)
apt-get source #------(package 下载该包的源代码)
sudo apt-get clean && sudo apt-get autoclean # --------清理下载文件的存档 && 只清理过时的包
sudo apt-get check #-------检查是否有损坏的依赖

类别:debian&ubuntu | 评论(0) | 浏览(42)
 
2007-11-03 16:07

使用 dpkg,首先导出软件包选择列表:

dpkg --get-selections \* > selections.txt

接着编辑文件 selections.txt,修改想要恢复的软件所在的行,例如 libc6,则将:

libc6                       install

改为:

libc6                       hold

保存文件,将它装入 dpkg 数据库:

dpkg --set-selections < selections.txt

或者,如果你知道要恢复的软件包名称,执行:

echo libc6 hold | dpkg --set-selections

这个命令将在每个软件包安装过程中保持该软件包不变。

使用 dselect 也可以达到同样的效果。进入 [S]elect 屏幕,找到想阻止其升级的软件包,按“=”键(或者“H”)。更改在你退出 [S]elect 屏幕后立即生效。

2007-10-31 20:25
etony C.F.AN

v0.0.1, 2006-3-30 本文档是针对 Debian GNU/Linux 的 APT 工具做一般性介绍, 希望 Linux 用户对于 Debian 有个较为深刻的了解.

1. 声明

* 版本信息:

本文档的最新版本将张贴于: LinuxSir.Org论坛 Debian发行版讨论区 ;

也可以从 获取.
* 反馈:

所有评论, 错误报告, 其他信息以及批评, 请邮寄到 ;

或在LinuxSir.Org论坛 Debian发行版讨论区 张贴.
* 版权信息:

本文档的版权(c)2006-2007 归 etony C.F.AN 所有.

转载请注明源自 .

2. 基本概念

dpkg 功能十分的强大, 是它保证了系统的稳定性. 但是随着 GNU/Linux 的日益普及, Debian 操作系统的广泛应用, dpkg 在操作上日益显示出它的不足之处. APT (高级软件包工具 Advanced Package Tool)很好的解决了这一难题, 它功过抽取软件包中的相关信息, 给出相关操作的优化方案, 确定解决请求所需软件包, 从资源库下载, 根据需求在本地系统安装和删除软件包.

dpkg 采取的方式较为保守, 当发现进一步操作可能会将问题引入系统时(比如使系统中出现了不能满足依赖关系的软件), 将拒绝执行这一操作(默认方式), APT则会根据出现的问题, 智能的给出解决方案, 并继续进行操作. 比如,安装操作出现依赖关系时, dpkg 会拒绝操作, APT 则不同, 将会自动安装这些依赖包以完成安装请求.

APT 提供另一个简单的命令行方式, 与 dpkg 不同, 其本身不会处理 .deb 文件, 而是智能从资源库下载, 然后调用 dpkg 仅此处理. APT 是 dpkg 的一个智能前端.
3. 基本配置

apt 通过名称和版本来在确定一个软件包, 这些信息通常是通过资源库中提供的 Packages.gz (如果是源代码则是 Source.gz)来抽取来的(通过 apt-get update 获取). 通常如果出现重复的软件包, 则第一个有效. 这些资源库在 etc/apt/sources.list/ 中定义.
3.1 自动配置

在基本系统中提供了一个用于自动配置资源列表的工具: apt-setup. 由 base-config(现在仅在 sarge 中提供) 软件包中, 可以通过

#base-config

调用, 或者直接运行

#apt-setup

进行配置.
3.2 手动配置

资源库在 /etc/apt/sources.list 中用就象如下行定义:

deb sarge main contrib
deb-src sarge main contrib


与网站有如下对应关系:

...
...
------------------------ ----- | |
\___ / | |
add: \ / | |
------------------------ ----- | |
deb sarge main contrib

当然上边的网站是假设的, 不可用的. 应当选择您连接速度最快的镜像地址替换. Debian 官方镜像列表可以 从 处获取, 也可从 /var/lib/apt-spy/mirrors.txt(apt-spy 提供)得到. 至于私有资源则需要通过别的途径获取.

在 /etc/apt/sources.list 中, 每行为一条记录, 定义一个资源库. 其具体语法在 sources.list(5) 联机手册中有详细介绍.每条记录至少包括三个字段, 共同组成资源定位. 这些字段是:

软件包类型

deb 指二进制软件包. 要访问软件包源代码, 则必需用 deb-src 代替.
资源URI

统一资源标识符(URI)用于指定资源库, 可以使用下边任意一种方式访问:

cdrom, file, copy, http, ftp, ssh
发行版(distribution)

在标准的镜像中, 这一字段使用规范名称(如 stable )或代号(如 sarge )来关联 Debian 的发行版.
构成

用于关联一个发行版的组成部分, 对应官方镜像,相当于软件库(如 每个条目的其余部分用于关联一个发行版提供的组成部分.对于官方镜像,这相当于软件库(如 main, contrib), 对于非官方资源库, 组成部分的关联方式可以由管理员自己定义. APT会为每个构成创建单独的 URI. 因此, 正常的发行版至少需要一个组成部分.

在修改 sources.list 后或安装软件前, 需要对APT进行更新, 就是运行 apt-get uodpate 获取各种 Packages 文件, 它的位置是通过 /etc/apt/sources.list 中的记录来指定的.每个提到构成都有一个对应的 Packages 文件.
3.3 优化资源

apt-spy 方式

Debian 在互联网上有庞大的镜像群, 有超过 100 个提供了全部 Debian 归档库的官方镜像. 另外, 还有很多大学和机构提供非官方镜像, 因此使用附近的还是不错的. 我们将哪些镜像加入我们的 sources.list 文件呢? 当然是速度最快的! Debian 为我们提供了一个用户测试镜像速度的工具 apt-spy (由 apt-spy 提供). 这样有利于有效的利用带宽, 节省下载时间.

可以从 (由于某种原因, 您可能无法访问)处获取获取完整的镜像列表. 也可以从 tt /var/lib/apt-spy/mirrors.txt / ( apt-spy 提供)找到一个副本.

apt-spy 通过对列表进行测试, 根据带宽和回应速度, 找出其中最快的一个, 并将结果自动保存到 /ect/apt/sources.list 中.

#apt-get install apt-spy

#mv sources.list sources.list.bak //backup

#man apt-spy //获取详细的使用方法

#apt-spy update //更新您的镜像列表文件 /var/lib/apt-spy/mirrors.txt

可将测试限制在一个国家或区域内, 提供限制测试服务器个数的选项, 等等. 另外, 区域也可以在 /etc/apt-spy.conf 中定义. 可以通过下边的命令找出亚洲区速度最快的镜像,并生成针对 testing 的记录:

# apt-spy -d testing -a Asia

上边的测试大概每个服务器需要用一分钟的时间, 这个也可以使用 -t 选项控制. 有关这一选项的详细信息请阅读 apt-spy(8) 联机手册.

netselect-apt 方式

netselect-apt 会创建一个更完整的 sources.list 文件, 但它使用更落后的方法来选择镜像站点:

#apt-get install netselect-apt

#mv sources.list sources.list.bak //backup

#man netselect-apt //获取详细的使用方法

# netselect-apt -s testing

//下载 , 并根据其内容测试网络, 生成 sources.list

也可将下载 手动下载到本地, 并同过参数 -i 指定. 同样可以通过 -o 参数指定输出文件而不是默认的 sources.list
4. APT 的配置

APT 的很多方面都是可以定制的.事实上,在 /etc/apt/apt.conf 文件中, 您可以修改大多数命令行选项的默认值. 配置参数使用 名称 - 值 对,根据用途被分为几组. 组名在参数前边用 "::" 分割.tt apt.conf(5) 联机手册有相关语法介绍. 其它项目在对应命令的联机手册中有所描述(如 tt apt.get(1) 和 tt apt-cache(1) ). 比如:

APT:efault-Release "testing";

//在使用混合系统时, 设定默认下载的版本

APT::Get::Assume-Yes "true";

//如果在安装/卸载过程中出现询问, 应答为 y

如果在使用aptitude、apt-get 或 dpkg 时出现如下错误

E: Dynamic MMap ran out of room

可以在apt.conf中加入:

APT::Cache-Limit "12500000";

以重新设定缓存区大小.

访问资源库需要代理, 则可以加入类似下边的内容:

Acquire::http:roxy "ass@xxx.xxx.xxx.xxxort";
Acquire::ftp:roxy "ftp://userass@xxx.xxx.xxx.xxxort";

APT还提供了三个钩子程序, 用于在 dpkg 阶段调用.它们分别是 Pre-Invoke, Post-Invoke, Pre-Install-Pkgs.

DPkg::Pre-Invoke {"mount -o remount,rw /usr";};
DPkg::Post-Invoke {"mount -o remount,ro /usr";};
DPkg::Pre-Install-Pkgs {"dpkg-preconfigure --apt --priority=low --frontend=dialog";};

/usr/share/doc/apt/examples/apt.conf, /usr/share/doc/apt/examples/configure-index.gz 中给出详细的例子, 可以用于参照.
5. 安装

当发出安装请求时,apt 会根据其优化算法, 求解出最佳安装方案, 来完成用户的请求. 比如:

debian:~# apt-get install xchat
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
defoma fontconfig libatk1.0-0 libfontconfig1 libgtk2.0-0 libgtk2.0-bin
libgtk2.0-common libpango1.0-0 libpango1.0-common libperl5.8 libtiff4
libx11-6 libxcursor1 libxext6 libxft2 libxi6 libxrandr2 libxrender1 tcl8.4
ttf-bitstream-vera xchat-common xfree86-common xlibs-data
Suggested packages:
defoma-doc psfontmgr x-ttcidfont-conf dfontmgr ttf-kochi-gothic
ttf-kochi-mincho ttf-thryomanes ttf-baekmuk ttf-arphic-gbsn00lp
ttf-arphic-bsmi00lp ttf-arphic-gkai00mp ttf-arphic-bkai00mp tclreadline
libnet-google-perl x-window-system-core x-window-system
Recommended packages:
libft-perl libatk1.0-data hicolor-icon-theme
The following NEW packages will be installed:
defoma fontconfig libatk1.0-0 libfontconfig1 libgtk2.0-0 libgtk2.0-bin
libgtk2.0-common libpango1.0-0 libpango1.0-common libperl5.8 libtiff4
libx11-6 libxcursor1 libxext6 libxft2 libxi6 libxrandr2 libxrender1 tcl8.4
ttf-bitstream-vera xchat xchat-common xfree86-common xlibs-data
0 upgraded, 24 newly installed, 0 to remove and 1 not upgraded.
Need to get 12.5MB of archives.
After unpacking 39.1MB of additional disk space will be used.
Do you want to continue? [Y/n]

APT 下载软件时是根据 /var/lib/apt/lists 下的 _Packages 文件, 来获取软件的详细定位的, 而这些 _Packages 文件是通过命令:

#apt-get update

命令从 sources.list 中声明的顺序从资源库中获取的. 这一命令将对 Packages 索引文件进行更新. 因此, 在安装软件前, 或在修改 sources.list 后, 应该进行 apt-get update 操作.

每天运行, 或经常运行这一命令, 是个良好的习惯. APT 同时会清除/var/lib/apt/lists 目录下没有在 /etc/apt/sources.list 中声明的资源文件. 如果你使用 --no-list-cleanup(APT::Get::List-Cleanup),APT 将会保留这些文件,如果您只是在 sources.list 中临时禁用一条资源, 这样还是比较方便的; 当再次启用这条资源时, 就不需要重复下载 APT 的资源文件了.

在安装的时候您可以通过使用 --print-uris 选项将这些信息输出到屏幕. 比如:

#apt-get install --print-uris nano-tiny
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
nano-tiny
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 87.8kB of archives.
After unpacking 123kB of additional disk space will be used.
''
nano-tiny_1.2.4-5_i386.deb 87786 07794bf630d1a9dffdf85917a9e39968

注意 后边的 07794bf630d1a9dffdf85917a9e39968 这是 nano-tiny_1.2.4-5_i386.deb 的 MD5 编码, 将用跟从 Packages 中获取的对应 MD5 编码相比对. 只有 MD5 编码相匹配时, 才会安装. 当出现不一致时, APT 会报告 MD5 不匹配,并拒绝安装或升级软件包.

您也可以仅仅模拟一下, 而不是真正的安装:

#apt-get install nano-tiny -s(--simulate)

如果您仅需要获取 .deb, 而不是装, 则可以

#apt-get install nano-tiny -d(--download-only)

假如你不小心损坏了已安装的软件包而想修复它, 或者仅仅想安装软件包中某些文件的最新版本, 这是可以做到的, 你可以用 --reinstall 选项:

# apt-get --reinstall install nano

如果您使用的是混合源, 也可指定发行版安装:

# apt-get install nano/testing

解决依赖问题

当出现依赖问题时, APT 会努力做出最好的的选择. 作为解决依赖问题的一部分, APT 为了尽可能的完成用户的请求, 会首先卸载已经安装的冲突的软件包. 无论何时, 在进行用户请求的附加操作时, apt-get 在提示了对所选择软件包将要做的的变更后, 都会请求用户的确认. 这是为了防止不小心卸载了冲突的软件包, 或引入更严重的依赖问题. 如果不需要额外的操作, APT 将不会给出提示.

通过设置 APT::Get::Show-Upgradeed 为 true ,可以让APT每次都提示确认. 同样, 设置 APT::Get::Assum-Yes 为 true, 或在APT的命令行指定 -y 选项, APT 将绕过确认, 继续操作. 请避免使用这一选项;确认对于生产应用系统来说是个好事情. 有时, 一个软件包会依赖于其它一组软件包中的任意一个. 比如:

debian:~# apt-cache depends mailx
mailx
Depends: libc6
Depends: liblockfile1
|Depends: exim4
Depends:
courier-mta
esmtp-run
exim
masqmail
nullmailer
postfix
sendmail-bin
ssmtp
xmail
exim4-daemon-heavy
exim4-daemon-light
Depends: base-files
Conflicts:

mailx 依赖于能够提供 邮件传输代理的任一个软件包, 在默认情况下会安装 exim4, 除非您明确指定:

#apt-get install mailx postfix

6. 查询

到目前为止, 一切感觉都还不错, 只要您知道了软件包名称, 使用APT安装简直就是小菜一碟. 当我们需要安装一个软件, 而又没有确切的知道其名称时, 就需要求助于 apt 提供的另一个命令 apt-cache (详细的使用方法, 请查阅 apt-cache(8) 联机手册). 它可以用于查询您的软件包数据库, 包括软件包描述, 就象这样:

debian:~# apt-cache search mysql-server
mysql-server - mysql database server (current version)
mysql-server-4.1 - mysql database server binaries
mysql-server-5.0 - mysql database server binaries
phpbb2-conf-mysql - Automatic configurator for phpbb2 on
scoop - Web-based collaborative media application
webmin-mysql - mysql-server control module for webmin

我们找到了几个相关的软件包, 以及有关的简单描述. 想进一步获得某个软件包的详细信息, 你可以运行:

#apt-cache show mysql-server
Package: mysql-server
Priority: optional
Section: misc
Installed-Size: 8344
Maintainer: Christian Hammers
Architecture: i386
Source: mysql-dfsg
Version: 4.0.24-10sarge1
Provides: virtual-mysql-server
Depends: mysql-common (>= 4.0.24-10sarge1), mysql-client (>= 4.0.24-10sarge1),
ebconf (>= 1.2.9), libdbi-perl, perl (>= 5.6), libc6 (>= 2.3.2.ds1-21), libgcc
(>= 1:3.4.1-3), libmysqlclient12, libstdc++5 (>= 1:3.3.4-1), libwrap0, zlib1g
= 1:1.2.1), adduser (>= 3.40), psmisc, passwd, mailx
Conflicts: mysql-server-4.1
Filename: pool/updates/main/m/mysql-dfsg/mysql-server_4.0.24-10sarge1_i386.deb
Size: 3645680
MD5sum: b1877cc602daf4b3aeffd350ced6f6a7
Description: mysql database server binaries
MySQL is a fast, stable and true multi-user, multi-threaded SQL database
server. SQL (Structured Query Language) is the most popular database query
language in the world. The main goals of MySQL are speed, robustness and
ease of use.
.
This package includes the server binaries for the 4.0 branch.

如果仅想了解某软件包的与哪些软件包关联, 可运行:

debian:~# apt-cache depends mysql-server
mysql-server
Depends: mysql-common
Depends: mysql-client
Depends: debconf
Depends: libdbi-perl
Depends: perl
Depends: libc6
Depends: libgcc1
Depends: libmysqlclient12
Depends: libstdc++5
Depends: libwrap0
Depends: zlib1g
Depends: adduser
Depends: psmisc
Depends: passwd
Depends: mailx
mailutils
Conflicts: mysql-server-4.1

而命令

debian: # apt-cache rdepends mysql-server

则会查询哪些包依赖于mysql-server. 如果要将这两种查询信息合并到一起, 则可以使用:

debian: # apt-cache showpkg mysql-server

apt-cache search 的参数可以使用正则表达式, 如果指定了多个参数, 则输出的软件包必需同时包含这它们这些内容. 也可以使用 --name-only 选项( APT::Cache::NameOlny true ),只搜索软件包名. 当指定 --full 选项(APT::Cache::ShowFull true )时, 将会显示软件包的所有信息.
7. 高级查询

如果你想安装某个软件包, 但用 apt-cache 查不出它的名称,不过你知道这个程序的文件名, 或这个软件包中某些文件的文件名, 那么你可以用 apt-file 来查找软件包名称. 这个工具由同名软件包提供. apt-file 事实上是一个 APT 软件库中提供的 Contents 文件的接口. 每个发行版都提供这样的文件, 包括了某个发行版所要安装的所有文件的列表. 在使用 apt-file 前, 需要首先获取用户要查询的 Contents 文件. 运行 apt-file update 将会这个文件下载到 /var/cache/apt 目录. 这样就可以使用 apt-file 查询这个文件了. apt-file 的主要用途是确定某个文件是由哪个软件包提供的.

$ apt-file search filename

用这个命令, 你可以列出软件包的内容:

$ apt-file list packagename

和 apt-get 一样, 这个数据库也需要实时更新, 完成更新可以运行:

# apt-file update

8. 卸载和清除

如果你不再使用某些软件包, 你可以用 APT 将其从系统中删除. 要删除软件包只需输入: apt-get remove package. 如下所示:

debian:~# apt-get remove vim
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
vim vim-common
0 upgraded, 0 newly installed, 2 to remove and 1 not upgraded.
Need to get 0B of archives.
After unpacking 15.1MB disk space will be freed.
Do you want to continue? [Y/n]

可以注意到, 在请求删除 vim 时, vim-common 也会同时卸载, 因为 APT 会关注那些与被删除的软件包有依赖关系的软件包. 使用 APT 删除一个软件包将会连带删除那些与该软件包有依赖关系的软件包. 但是它们的配置文件, 如果有的话, 会完好无损地保留在系统里. 如果想彻底删除这些包及其配置文件,运行:

debian:~# apt-get remove vim --purge
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
vim* vim-common*
0 upgraded, 0 newly installed, 2 to remove and 1 not upgraded.
Need to get 0B of archives.
After unpacking 15.1MB disk space will be freed.
Do you want to continue? [Y/n]

注意软件包后的星号, 这表示将要被清除, 而不是简单的删除.

您也可以在安装的同时进行软件卸载, 比如:

debian:~# apt-get install nano-tiny nano-
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
nano
The following NEW packages will be installed:
nano-tiny
0 upgraded, 1 newly installed, 1 to remove and 1 not upgraded.
Need to get 0B/87.8kB of archives.
After unpacking 913kB disk space will be freed.
Do you want to continue? [Y/n]

注意 nano 后边的 "-", 它提示在安装 nano-tiny 的同时将nano 卸载掉.

当然也可以用 dpkg 进行软件包删除, 但是它并不能自动解决依赖问题.
9. 系统升级
9.1 软件升级

Debian 的一个强大之处就是它的对软件包的无缝升级. 无论是请求APT将一个持续相当长时间的的 woody 服务器升级到 sarge, 还是对当前 stable 发行版升级一些软件包,APT 都不会有问题. 升级软件包就是指一个软件包版本号比当前安装的版本号要高. 从 Debian 的一个发行版升级到另一个, 软件包的版本号都作了刻意的增加,而 stable 内部的升级则是因为安全问题, 和重大补丁修正, 而不可能是功能调整. 如果新的上游版本修正了某个安全问题, 则安全修正仍会使用 stable 版中的版本号, 以尽量减少变动. Debian/stable 要确保系统的稳定性.

一个 stable 版本所包含的软件包列表可能从不会改变, 但是一个新的发行版通常会引入等多的软件包. 因此, stable 内部的依赖关系从不会发生变化, 但是新的发行版中可能会包含更名, 或拆分的软件包, 因此需要修改软件包之间的依赖关系.

版本内升级, 只需一条命令即可完成更新:

#apt-get upgrade

运行该命令时加上 -u 选项很有用. 这个选项让 APT 显示完整的可更新软件包列表. APT 会下载每个软件包的最新更新版本, 然后以合理的次序安装它们. 注意在运行该命令前应先运行 apt-get update 更新数据库. 定时顺序执行 update/upgrade, 可以保持系统运行平稳和安全. 也可以使用 cron 自动升级系统.
9.2 升级到新版本

不同的版本之间, 提供的软件包的数目, 以及软件包间的依赖关系会有很大差异, 如果更改新的版本, 比如将系统从 stable 升级到 testing, update/upgrade 不会安装没有在系统中出现的软件包; 只会对现存软件包进行升级. 并且如果现有软件新版本依赖关系发生而来变化, 那么将无法对其升级:

debian:~# apt-get upgrade
Reading Package Lists...
Building Dependency Tree...
The following packages have been kept back:
adduser apache apache-common apache2-utils apt apt-utils aptitude bc
...

The following packages will be upgraded:
base-files base-passwd bash binutils bitchx bootcd bootcd-i386 bsdmainutils
...

142 upgraded, 0 newly installed, 0 to remove and 83 not upgraded.
Need to get 51.8MB of archives.
After unpacking 12.5MB of additional disk space will be used.
Do you want to continue? [Y/n]

我们看到有些包被阻止更新(kept back), 现在我们就用使用APT的智能升级机制: apt-get dist-upgrade

debian:~# apt-get dist-upgrade
Reading Package Lists...
Building Dependency Tree...
The following packages will be REMOVED:
libgssapi1-heimdal libroken16-kerberos4kth libsp1 mysql-common-4.1
postfix-tls
The following NEW packages will be installed:
apache2-common apache2-mpm-prefork cpp-4.0 dmidecode gcc-4.0 gcc-4.0-base
...
The following packages will be upgraded:
adduser apache apache-common apache2-utils apt apt-utils aptitude base-files
...
225 upgraded, 42 newly installed, 5 to remove and 0 not upgraded.
Need to get 132MB of archives.
After unpacking 70.6MB of additional disk space will be used.
Do you want to continue? [Y/n]

当 apt-get dist-upgrade 时, APT 会安装新软件包,甚至会删除废弃的软件包. 实际的新软件包的安装, 或删除旧软件包, 仍是由 dpkg 完成的.

几分钟(也可能是几个小时, 这和你 的带宽和升级的软件包的多少有关)后, APT 就完成了系统从 stable 到 testing 的升级.因为仍是有 dpkg 来响应实际的安装, 您精心调整的配置文件并不会被修改(除非您选择安装新的版本). 当新版的软件包需要修改调整文件时, Debian 的维护者将会提供不同的软件包, 这样您就不必花费整个下午的时间来调整您的软件恢复正常了.
10. 解决问题

* 如何将本地光盘加入安装源列表:

这可以求助于 apt-cdrom add

* 如何降级一个系统(比如将 sid 降级为 testing)

在 /etc/apt/preferences文件中加入:

Package: *
Pin: release a=testing
Pin-Priority: 1001

修改 /etc/apt/sources.list, 将资源库由 sid 改为 testing 分支, 然后运行:

#apt-get update

#apt-get -u dist-upgrade

注: 降级处理存在一定的风险, 谨慎使用

* 如果在安装过程中出现中断, 然后你发现该软件包既不能重装又不能删除, 试试下面两个命令:

# apt-get -f install

# dpkg --configure -a

* 如何清除下载到本地的软件库

#apt-get clean

//将删除 /var/cache/apt/archives/ 目录和 /var/cache/apt/archives/partial/ 目录下的所有文件,除了被锁定的文件.

apt-get autoclean

//仅删除那些不需要再次下载的文件.

* 如何查看一个软件的编译依赖库

#apt-cache showsrc packagename|grep Build-Depends

注: sources.list 中应该有 deb-src 源

* 下载软件的源代码

#apt-get source packagename

注: sources.list 中应该有 deb-src 源

* 安装软件包源码的同时, 安装其编译环境

#apt-get build-dep packagename

注: sources.list 中应该有 deb-src 源

* 检查软件包的状态

#apt-cache policy packagename

2007-10-31 20:15
以Debian的方式系列(IN THE DEBIAN WAY):

Debian 维护工具之 Dpkg
etony C.F.AN
v0.0.1, 2006-3-24 本文的对Debian GNU/Linux 的Dpkg工具做了较为详细的描述, 希望Linux用户对于Debian 有个较为深刻的了解.
1. 声明

* 版本信息:

本文档的最新版本将张贴于: LinuxSir.Org论坛 Debian发行版讨论区 ;

也可以从 获取.
* 反馈:

所有评论, 错误报告, 其他信息以及批评, 请邮寄到 ;

或在LinuxSir.Org论坛 Debian发行版讨论区 张贴.
* 版权信息:

本文档的版权(c)2006-2007 归 etony C.F.AN 所有.

转载请注明源自 .

2. dpkg 概述

在其 manpage 中, 这样描述:

dpkg - a medium-level package manager for Debian.

dpkg - Debian 的中级软件包管理器.

dpkg 是 Debian 软件包管理系统的中流砥柱, 负责安装卸载软件包, 配置, 以及维护已安装的软件包. 也是Debian系统中众多软件包管理工具的后端. 有关 dpkg 的更多介绍请参阅:

dpkg 通过数据库来维护系统中软件, 这包括文件清单, 依赖关系, 软件状态, 等等详细的内容, 通常在/var/lib/dpkg目录下. 并确保系统与数据库的情况相一致.因此,dpkg在处理程序时非常健壮,和优秀.

dpkg 在处理软件包时, 首先要判断是否会引起系统的混乱, 当发现可能出现时, dpkg 将拒绝安装此软件, 而不是自作主张将软件装入系统, 然后把烂摊子扔给用户了之.

dpkg是一个庞大的家族, 不仅提供了大量的参数选项, 同时也提供了许多子命令比如:

dpkg-deb

dpkg-divert

dpkg-query

dpkg-split

dpkg-statoverride

start-stop-daemon

...

本文档不是 dpkg 的 manpage, 将不会对所有的参数和子命令加以介绍, 同时记住所有参数也是相当痛苦的事情, 在这里只对常用参数和命令做示例性介绍.

dpkg 涵盖了 dpkg 家族的大部分功能, 因此dpkg可以作为一个多合一(ALL-IN-ONE)的软件使用,以更好的使用 dpkg 家族的全部功能.
3. deb软件包命名规则:

Debian软件包命名遵循下列约定: <软件包名称>_<版本>-<修订号>_<平台>.deb

* 软件包名称(Package Name):
* 版本(Version Number):
* 修订号(Build Number):
* 平台(Architecture):
o i386
o all: 平台无关. 即适用于所有平台.比如文本, 网页, 图片, 媒体, pdf 等.

例如

* nano_1.3.10-2_i386.deb
o 软件包名称: nano
o 版本: 1.3.10
o 修订号: 2
o 平台: i386

4. 软件包处理

(注:本文的中的操作以nano为例)

dpkg-deb : 用于处理本地Debian软件包. 可以提取从.deb文件中提取软件包信息和数据. 详细信息,请参阅 dpkg-deb 的联机手册.

* 列出软件包的内容:

tony@tony:~/doc/dpkg$ dpkg-deb -c nano_1.3.10-2_i386.deb |more
drwxr-xr-x root/root 0 2006-02-05 00:29:18 ./
drwxr-xr-x root/root 0 2006-02-05 00:29:07 ./etc/
-rw-r--r-- root/root 11887 2006-02-05 00:29:07 ./etc/nanorc
drwxr-xr-x root/root 0 2006-02-05 00:29:14 ./usr/
drwxr-xr-x root/root 0 2006-02-05 00:29:12 ./usr/share/
drwxr-xr-x root/root 0 2006-02-05 00:29:01 ./usr/share/doc/
drwxr-xr-x root/root 0 2006-02-05 00:29:15 ./usr/share/doc/nano/
-rw-r--r-- root/root 1847 2005-08-30 02:29:02 ./usr/share/doc/nano/AUTHORS
-rw-r--r-- root/root 2338 2005-03-20 05:33:13 ./usr/share/doc/nano/README
-rw-r--r-- root/root 3175 2005-11-21 17:36:11 ./usr/share/doc/nano/THANKS
-rw-r--r-- root/root 2206 2005-06-08 10:28:06 ./usr/share/doc/nano/TODO
-rw-r--r-- root/root 1066 2003-03-24 21:09:26 ./usr/share/doc/nano/UPGRADE
-rw-r--r-- root/root 35996 2005-11-22 05:45:07 ./usr/share/doc/nano/faq.html
... ...

* 查看软件包的信息

tony@tony:~/doc/dpkg$ dpkg-deb -I nano_1.3.10-2_i386.deb
new debian package, version 2.0.
size 477372 bytes: control archive= 2656 bytes.
12 bytes, 1 lines conffiles
714 bytes, 18 lines control
3529 bytes, 51 lines md5sums
613 bytes, 21 lines * postinst #!/bin/sh
160 bytes, 5 lines * postrm #!/bin/sh
379 bytes, 20 lines * preinst #!/bin/sh
288 bytes, 14 lines * prerm #!/bin/sh
Package: nano
Version: 1.3.10-2
Section: editors
Priority: important
Architecture: i386
Depends: libc6 (>= 2.3.5-1), libncursesw5 (>= 5.4-5)
Suggests: spell
Conflicts: nano-tiny (<= 1.0.0-1), pico
Replaces: pico
Provides: editor
Installed-Size: 1108
Maintainer: Jordi Mallach
Description: free Pico clone with some new features
GNU nano is a free replacement for Pico, the default Pine editor. Pine is
copyrighted under a restrictive licence, that makes it unsuitable for
Debian's main section. GNU nano is an effort to provide a Pico-like
editor, but also includes some features that were missing in the original,
such as 'search and replace', 'goto line' or internationalization support.

* 重新构建软件包

比如nano(1.3.10)需要满足以下依赖关系:

$ dpkg-deb -f nano_1.3.10-2_i386.deb depends //depends 为对应查询段

libc6 (>= 2.3.5-1), libncursesw5 (>= 5.4-5)

当系统不能满足依赖关系, 比如不能满足里来版本, 可以通过下边的方法处理, 当然这种情况下安装的nano并不一定运行正常, 这种方法可以应用于某些软件的变通安装.

$ mkdir nano //创建nano目录

$ dpkg-deb -e ./nano_1.3.10-2_i386.deb ./nano/DEBIAN //解压控制文件

$ dpkg-deb -x ./nano_1.3.10-2_i386.deb ./nano //解压程序文件

$ vi ./nano/DEBIAN/control //修改控制信息

$ dpkg-deb -b nano nano_1.3.10-2_ill.deb //重新打包

5. 数据库查询

当前版本的 dpkg 使用文本文件来作为数据库.通称在 /var/lib/dpkg 目录下. 通称在 status 文件中存储软件状态,和控制信息. 在 info/ 目录下备份控制文件, 并在其下的 .list 文件中记录安装文件清单, 其下的 .mdasums 保存文件的 MD5 编码.

体验使用数据库的时刻到了:

$ dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-===========-================-========================================
ii aalib1 1.4p5-28 ascii art library - transitional package
ii adduser 3.85 Add and remove users and groups
ii alien .63 install non-native packages with dpkg
... ...

每条记录对应一个软件包, 注意每条记录的第一, 二, 三个字符. 这就是软件包的状态标识, 后边依此是软件包名称, 版本号, 和简单描述.

* 第一字符为期望值,它包括:
o u 状态未知,这意味着软件包未安装,并且用户也未发出安装请求.
o i 用户请求安装软件包.
o r 用户请求卸载软件包.
o p 用户请求清除软件包.
o h 用户请求保持软件包版本锁定.
* 第二列,是软件包的当前状态.此列包括软件包的六种状态.
o n 软件包未安装.
o i 软件包安装并完成配置.
o c 软件包以前安装过,现在删除了,但是它的配置文件还留在系统中.
o u 软件包被解包,但还未配置.
o f 试图配置软件包,但是失败了.
o h 软件包安装,但是但是没有成功.
* 第三列标识错误状态,可以总结为四种状态. 第一种状态标识没有问题,为空. 其它三种符号则标识相应问题.
o h 软件包被强制保持,因为有其它软件包依赖需求,无法升级.
o r 软件包被破坏,可能需要重新安装才能正常使用(包括删除).
o x 软包件被破坏,并且被强制保持.

也可以以统配符模式进行模糊查询, 比如我要查找以nano字符开始的所有软件包:

$ dpkg -l nano*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii nano 1.3.10-2 free Pico clone with some new features
pn nano-tiny (no description available)
un nanoblogger (no description available)

以上状态说明: 系统中安装了 nano 版本为 1.3.10-2;安装过 nano-tiny, 后来又清除了; 从未安装过nanoblogger.

如果觉得 dpkg 的参数过多, 不利于记忆的话, 完全可以使用 dpkg-query 进行 dpkg 数据库查询.

应用范例:

* 查询系统中属于nano的文件:

$ dpkg --listfiles nano

or

$ dpkg-query -L nano

* 查看软件nano的详细信息:

$ dpkg -s nano

or

$ dpkg-query -s nano

* 查看系统中软件包状态, 支持模糊查询:

$ dpkg -l

or

$dpkg-query -l

* 查看某个文件的归属包:

$ dpkg-query -S nano

or

$ dpkg -S nano

6. 安装软件包

运行下面的命令:

$dpkg -l nano
un nano (no description available)

当前 nano 的状态说明在系统中从未安装过 nano 软件包, 可以通过以下命令安装本地的 nano 包:

$dpkg-deb -e ./nano_1.3.10-2_i386.deb

当使用 dpkg 安装软件包时, 主要分为两个阶段: 首先解包; 然后运行postinst控制脚本(如果有的话),这就是所谓的配置阶段. 当完成软件包当解包后, dpkg 的--intall选项自动调用配置阶段. 注意, 操作时应当指定 .deb 文件的实际路径, 仅仅给出文件名无法找到对应文件.

这样, 软件的安装就可被拆分为两个对立的过程:

* dpkg --unpack
* dpkg --configure

解包

运行

#dpkg --unpack nano_1.3.10-2_i386.deb


然后

$ dpkg -l nano
iU nano 1.3.10-2 free Pico clone with some new features

说明此时系统中安装了nano 包, 但是未经配置.

解包可能包括一下步骤:

* 将控制文件解压到临时目录.
* 运行 preinst(如果有的话). 通常为停止相关服务.
* 解压配置文件到 /etc 目录, 并添加.dpkg-new 后缀, 以防止冲突.
* 解压 data.tar.gz 到系统根目录,(--root=dir).
* 将控制文件解压到 /var/lib/dpkg/info 目录并添加软件名前缀. 对数据库进行更新.
* 数据库中将软件包的状态设置为"unpacked".

仅仅解包, 并不能确保软件可以正常运行.

配置

#dpkg --configure nano

$ dpkg -l nano
ii nano 1.3.10-2 free Pico clone with some new features

如输出所示, nano 已经正常安装.

软件解包后, 还需要对其进行调整, 比如根据实际情况对配置文件进行修改. 这一步通常是在安装过程中自动进行的, 当然可以手动调用, 这次用到的是软件名, 而不是deb文件名.

通过命令 dpkg -L nano 可以得以验证

这一过程可能包括一下步骤:

* 询问对配置文件的处理方法, 覆盖当前版本, 还是不做处理.(当软件升级时会碰到这种情况)
* 运行 postinst 脚本
* 将软件包标记为 "installed"

如果想再次修改配置选项, 可以运行:

#dpkg-reconfigure nano

7. 软件卸载

在Debian中卸载和清除软件包是两个不同的概念. 不同之处在于软件包被删除(卸载)后,它的配置文件仍会留在系统中,只有清除时才会删除它们. 默认情况下, Debian 仅会做删除操作, 除非你明确指出, 才会将配置文件删除. 如果要清除软件包, 则在清除前将会隐含地执行删除操作.

要删除一个软件包,dpkg需要使用--remove选项将软件包卸载.与安装不同,删除只需要软件包名,而不是实际的deb文件名.

删除

#dpkg -r nano

* 首先运行 prerm 脚本(如果有的话).
* 然后, 保留配置文件, 其他文件全部删除.
* 删除 /var/lib/dpkg/info 目录下软件包的所有配置文件, 保留postrm和list文件.
* 最后, dpkg 在数据库中将软件状态修改为删除.

运行

$dpkg -l nano

rc nano 1.3.10-2 free Pico clone with some new features

清除

#dpkg -P nano

* 删除所有的文件. 所有的文件都被解除了(从系统中删除了).
* 运行postrm脚本.如果还存在,运行postrm脚本.
* 删除 postrm 和 list 文件.保留的两个文件,从系统中解除postfix.postrm和postfix.files.
* 在dpkg的数据库中将软件包标记为未安装

$dpkg -l nano
pn nano (no description available)

注意输出的状态: pn 这意味着软件包实际上是被清除了,但是在数据库中还有这个软件包的记录.因此,pn 明确指出以前安装过 nano, 在软件包数据库中出现过,并且现在已被完全清除.
8. 异常处理

有时,因为不能满足依赖关系, 或存在冲突, 文件会被覆盖, 或控制脚本中存在错误而安装失败. 在 stable 发行版中从不会存在这类问题(这被视为重大错误). 但是, 在运行 unstable 发行版的系统中,有时却是难免的.

处理文件冲突

dpkg 不会允许一个软件包覆盖属于其它软件包的文件.可以强制dpkg覆盖属于其它软件包的软件(使用 --force-overwrite), 但是这样做十分危险. 如果这只是暂时的冲突(在 unstable 中, 这种情况常有), 覆盖没有太大问题. 请注意, 遇到这种情况应该向软件包的维护者提交相关错误报告.

如果你使用的是非官方包, 或是通过 alien 或 checkinstall自己构建的软件包, 那么应该对包内文件改名, 或者放弃使用这类软件包.

处理在安装过程中控制脚本脚本出现了问题. 问题脚本是出现问题的另一原因. 如果, 软件包的 postinst 控制文件中有错误,那么就无法用 dpkg 完成对这个软件包的配置.

这种错误一定要作为严重问题向错误跟踪系统提交报告.象这种脚本的问题,自己对其进行调试, 以判断问题所在, 比如您可以简单的在脚本的第一行以后插入 set -x, 对其运行情况进行跟踪.除非必要, 您也应该拒绝使用这类软件包.

处理卸载过程中损坏的控制文件

当软件包的卸载脚本出现问题时.即使您可以强制删除控制脚本没有清除干净的文件,这也会妨碍dpkg正确的维护您的系统,从而有可能在系统中留下垃圾文 件.对于这类问题, 还没有太好的处理方法(强烈建议您提交错误报告), 唯有等待软件更新(或自行对软件包包修复). 然后借助更新包将相关文件卸载.
9. dpkg vs rpm

* 列出系统中安装的软件包
o rpm -qa
o dpkg --list
* 列出软件包信息
o rpm -qi pkgname
o dpkg --status pkgname
* 列出一个包所安装的文件
o rpm -ql pkgname
o dpkg --listfiles pkgname
* 列出本地包文件的信息
o rpm -qpi file.rpm
o dpkg --info file.deb
* 列出本地包文件所含文件
o rpm -qpl file.rpm
o dpkg --contents file.deb
* 安装本地包
o rpm -i file.rpm
o dpkg --install file.deb
* 从系统中清除包
o rpm -E pkgname
o dpkg --purge pkgname
* 查询文件归属
o rpm -qf file
o dpkg --search file
 
2005-07-31 00:24

更改gdm的登录界面为英文
编辑/etc/default/gdm
LANG=en_US.UTF-8

设置gtk1, gtk2程序的theme
#apt-get install gtk-theme-switch 好像arch,gentoo下不是这个玩意吧

先试试用lftp登录一下FTP,几乎都是乱码(因为绝大多数的FTP用的是GBK编码)
编辑~/.lftp/rc
set ftp:charset "gbk"
set file:charset "UTF-8"
好了,再登录一下,一切OK
设置代理(如果需要)
set http:proxy
set hftp:proxy hftp://ip:port

编辑/etc/environment
LANGUAGE="en_CN:en_US:en_GB:en"
LANG=en_US.UTF-8

修改配置文件 /etc/profile 增加如下内容:

export LANG=zh_CN.GB2312
export LC_ALL=zh_CN.GB2312

#dpkg-reconfigure locales 这招在gentoo,arch下对应的是vim /etc/locale.gen #locale-gen生成

设置APT代理,有两种方法
#export http_proxy=(临时)
或者修改/etc/apt/apt.conf,添加
Acquire::http::proxy ""; (注意最后面必须用“;”结束)

gentoo : qfile foo

debian: dpkg -S foo

apt-file 这个鸟东东有点历害

apt-cache search keyword 查找指定软件包信息

apt-cache show package_name 详细显示指定软件包的信息

dpkg-reconfigure xserver-xfree86 # 重新配置X参数.重要. 这个不知道怎么对应gentoo的

tzconfig # 修改系统默认时区 GENTOO下 ln ro cp Asia/Shanghai /etc/localtime 然后对应修改环境变量将时区调整为上海,但debian下对应哪个文件呢?

# 安装软件包并且自动检测并安装相关软件.
aptitude -R -G install Package

# 检测软件包的相关资料.
# 这里将检测 Package 软件包的信息.
aptitude show Package

# 安装指定软件并且指定安装该软件的版本.
# 这里将安装 Packge 软件.版本是2.2.5.
aptitude install Package=2.2.5

# 删除指定软件.但是不会删除配置文件.
aptitude remove

# 删除软件包以及所有配置文件. [完全删除]
# 推荐使用.这个命令会自动检测依赖关系.
aptitude purge

/etc/network/interfaces 网络配制   gentoo--> /etc/conf.d/net_xxx

linux调整系统时间和时区的方法
1) 找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai

用这个文件替换当前的/etc/localtime文件。

2) 修改/etc/sysconfig/clock文件,修改为:

ZONE="Asia/Shanghai"
UTC=false
ARC=false

3)
时间设定成2005年8月30日的命令如下:
#date -s 08/30/2005

将系统时间设定成下午6点40分0秒的命令如下。
#date -s 18:40:00

4)
同步BIOS时钟,强制把系统时间写入CMOS,命令如下:
#clock -w

更改root用户不能直接远程登录问题:
cd /etc
cd pam.d
vi login
注释掉这行
#auth       required    pam_securetty.so   //该行注释掉

更改Linux启动时用图形界面还是字符界面 (以前以为对所有发行版有效,结果。。自己体会吧)
cd /etc
vi inittab
将id:5:initdefault: 其中5表示默认图形界面
改id:3: initdefault: 3表示字符界面

配置smb可以被哪些IP所用.
cd /etc/samba
Vi smb.conf
找到hosts allow = 192.168.1. 192.168.2. 127.
修改其为哪些机器所用,注意IP之间用逗号分开
举例:
hosts allow =192.168.1.110,192.168.1.120

禁止在后台使用CTRL-ALT-DELETE重起机器
cd /etc/inittab
vi inittab 在文件找到下面一行
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now   (注释掉这一行)
如: # Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now  

屏蔽主机的ping 命令,是被别人无法ping你的机器
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

不让显示器休眠
setterm –blank 0

更改控制台的分辨率(grub)
vi /boot/grub/grub.conf
在kernel /vmlinuz-2.4.20-8smp ro root=LABEL=/ 一行后面添加参数vga=792成为
kernel /vmlinuz-2.4.20-8smp ro root=LABEL=/ vga=792
最后的vga=792表示1024x768,16色
具体参数为:
depth    640x480    800x600    1024x768    1280x1024
8bit       769           771           773               775
15bit     784          787            790               793
16bit     785          788            791                794
24bit     786          789            792                 795

apt-cache show
显示 的完整的描述.

apt-cache showpkg
显示 许多细节,以及和其它包裹的关系.

普通 Dpkg 用法
dpkg -i
安装一个 Debian 包裹文件;如你手动下载的文件.

dpkg -c
列出 的内容.

dpkg -I
中提取包裹信息.

dpkg -r
移除一个已安装的包裹.

dpkg -P
完全清除一个已安装的包裹.和 remove 不同的是, remove 只是删掉数据和可执行文件, purge 另外还删除所有的配制文件.

dpkg -L
列出 安装的所有文件清单.同时请看 dpkg -c 来检查一个 .deb 文件的内容.

dpkg -s
显示已安装包裹的信息.同时请看 apt-cache 显示 Debian 存档中的包裹信息,以及 dpkg -I 来显示从一个
.deb 文件中提取的包裹信息.
echo " hold" | dpkg --set-selections
设置 的状态为 hlod (命令行方式)

dpkg --get-selections ""
取的 的当前状态 (命令行方式)

dpkg -S
在包裹数据库中查找 ,并告诉你哪个包裹包含了这个文件.(注:查找的是事先已经安装的包裹)

从源码建立deb packages

apt-get source [-b]
下载一个源码的包并解开。
你必须在你的/etc/apt/sources.list文件里写入一条 deb-src 的记录才能完成这项工作。
如果你输入了一个-b参数,并且是以root的身份,deb包会被自动的创建。

apt-get build-dep
自动下载并安装通过源码创建 时需要的包。
只有apt 0.5以上版本才支持这个功能。
现在woody和以上版本包含了这个功能。
如果你使有一个旧版本的apt,查找依赖性最简单的方法是查看源码包中 debian/control 这个文件,
注意这个路径是相对的,是包内的路径。

普通的用法,结合 apt-get source -b,例子 (as root):

apt-get build-dep
apt-get source -b

会下载源码包,建立依赖性,然后尝试编译源码。

dpkg-source -x
如果你手工下载了一个程序的源码包,其中包含了几个类似 .orig.tar.gz , .dsc ,
以及 .diff.gz 之类的文件,
那么你就可以对 .dsc 文件使用这个命令来 unpack 源码包。

dpkg-buildpackage
从 Debian 源码树建立一个deb包。你必须在source tree的主目录才能生效。例如:

dpkg-buildpackage -rfakeroot -uc -b

这里 '-rfakeroot' 指定命令使用 fakeroot 程序来模仿 root 权限 (来实现所有者(ownership)目的),
'-uc' 表示 "Don't cryptographically sign the changelog", '-b' 代表只建立二进制包.

debuild
一个快速打包脚本类似 dpkg-buildpackage ,能自动的识别是否使用 fakeroot,
同时为你运行 lintian 和 gpg

.如何维持一个混合的系统
鉴于testing版unstable版本比稳定,又比stable版本要新 ,很多人使用testing,可是有些人想运行某个软件的最新版,却又不愿把这个系统升级为unstable,即想使用一个混合的系统,那么可以这样做:
在 /etc/apt/apt.conf 加入:
APT::Default-Release "testing";
当要安装unstable软件时 加 -t 参数:
# apt-get -t unstable install packagename
注:不要忘记在/etc/apt/sources.list中加入相应的源

9.从一个特定的debian版本升级软
# apt-get install `apt-show-versions -u -b | grep unstable`件

10.如何在软件升级时避免特定软件不会被升级
如果你使用的bebian版本在2.2以上,仅仅需要修改/etc/apt/preferences 文件
格式非常简单:
Package:
Pin:
Priority:

例如我要保持gaim的0.58版本 只需加上:
Package: gaim
Pin: version 0.58*
统配符 * 指锁定以0.58开头的所有版本 这就是说即使存在0.58-1 或类似 也不会被安装
Priority(优先级)是可选项 默认 989
<0 此软件永不会被安装
0~100 软件不被安装,不是有效的版本
>100 此软件会被安装 即 如果有更新版本,软件会被升级
100~1000 软件不会被降级安装,例如:我安装的gaim 0.59 , 锁定gaim 0.58 ,优先级为999
那么0.58就不会被安装 ,如果要降级安装 则优先级许大于 1000


# apt-get check # 更新缓冲区并检查损坏的软件包
$ apt-cache search # 按文本描述搜索软件包
$ apt-cache policy # 软件包的priority/dists信息
$ apt-cache show -a # 显示所有dists中软件包描述信息
$ apt-cache showsrc # 显示相应源码包的信息
$ apt-cache showpkg # 软件包调试信息
# dpkg --audit|-C # 搜索未完成安装的软件包
$ dpkg {-s|--status} ... # 已安装软件包描述
$ dpkg -l ... # 已安装软件包的状态(每个占一行)
$ dpkg -L ... # 列出软件包安装的文件的名称


阅读(3211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~