Debian软件包管理详解.docx
- 文档编号:8471001
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:14
- 大小:24.10KB
Debian软件包管理详解.docx
《Debian软件包管理详解.docx》由会员分享,可在线阅读,更多相关《Debian软件包管理详解.docx(14页珍藏版)》请在冰豆网上搜索。
Debian软件包管理详解
一篇关于Debian/GNU软件配置工具介绍的文章
主要工具
dselect---使用菜单界面的软件包管理工具(最上层的包管理工具)
dpkg---安装软件包(管理软件包中的文件)
apt-get---安装软件包(管理软件包,CLIAPT)
tasksel---安装任务套件(管理面向某方面任务的一套软件包)
aptitude---安装软件包(管理软件包和任务套件,ncursesAPT)
deity---另一种ncursesAPT
synaptic,gsynaptic---另一种GUIAPT
它们不是同级的工具。
`dselect'运行于APT(命令行命令是`apt-get')和`dpkg'之上。
APT使用`/var/lib/apt/lists/*'来跟踪可用的软件包,而`dpkg'使用的是`/var/lib/dpkg/available'。
如果直接用`apt-get'或同类工具如`aptitude'等来安装软件包,千万别忘了更新`/var/lib/dpkg/available'文件,可以使用dselect的`[U]pdate'选项或在运行`dselect
update'、`tasksel'或`dpkg-l'前执行shell命令行“`dselectupdate'”。
在理关联软件包的方式上,`apt-get'会自动搜索下载_depends_类软件包,但不会理睬_recommends_和_suggests_类软件包,而`dselect'在软件包的选择方面采用菜单方式操作,对_depends_、_recommends_和_suggests_三类相关软件包均给出提示。
`aptitude'则提供了选项下载安装所有_depends_、_recommends_和_suggests_类软件包。
方便的工具
apt-cache-在本地缓冲区检查包文件
dpkg-reconfigure-重新配置已安装的软件包(如果它是使用debconf进行配置的)
dpkg-source-管理源码包
dpkg-buildpackage-自动生成包文件
...
Debian软件包管理基础
地安装软件包称之为_task_,还可以使用软件包管理工具逐个地安装软件包或升级系统。
使用`tasksel'或`aptitude'进行_task_安装
`tasksel'是_Debian的任务安装器_,系统安装过程中它为用户提供了一种`简易'软件包选择方式。
如果你希望完装的某项常规功能包含了许多软件包,最好的办法就是使用它来安装。
运行如下命令:
#dselectupdate
#tasksel
`aptitude'亦可访问_task_。
用它不仅可以选择_tasks_还可以对_task_选项菜单中的软件包进行逐个取舍。
设置APT系统
使用`testing'发布版的用户,有时需要对系统进行有选择性地升级
首先,在`/etc/apt/sources.list'中添加`stable'、`testing'和`unstable'镜像源,接着编辑`/etc/apt/preferences',设置合适的Pin-Priority。
[1]
Package:
*
Pin:
releasea=stable
Pin-Priority:
500
Package:
*
Pin:
releasea=testing
Pin-Priority:
600
Package:
*
Pin:
releasea=unstable
Pin-Priority:
50
[1]Ikeptthedescriptionaroundhereasistomaintainconsistencywith
otherparts.Ifyouarereallytracking`testing'or`unstable',you
shouldactuallyremovereferencesto`stable'in
`/etc/apt/sources.list'and`/etc/apt/preferences'.Thisisbecause
`testing'startsasacopyof`stable'.
用dselect代替apt:
`dselect'会自动选上所有“Required”、“Important”和“Standard”类软件包,在Potato系统中,某些大型应用程序如TeX和Emacs处于这些分类中,在初次安装系统时最好手工取消对它们的选择(输入“_”)。
在Woody稳定版中,这些大型应用程序被移入“Optional”类软件包。
`dselect'的用户界面有点怪。
有4个相似命令(注意是大写字母!
):
Key-strokeAction
Q退出。
确认当前的选择然后退出。
(overridedependencies)
R恢复!
我放弃我做出的选择
D不管它!
我不管dselect有什么建议,照我说的做!
U照系统的建议做
使用`D'和`Q'可以选择有冲突的选项,你要自负风险,所以使用这些命令要小心。
当前`dselect'是一款成熟的菜单驱动式工具,在对_suggests_和_recommends_类软件包的选择控制方面,它提供相当棒的微操作能力。
在`/etc/dpkg/dselect.cfg'中加上一行包含“expert”选项以减少干扰。
对于速度慢的机器,请在其它速度快的机器上运行`dselect'选好软件包,然后用`apt-get
install'安装它们。
对于没有定义Pin-Priority的软件包,`dselect'不会访问它们。
使用aptitude程序:
`aptitude'是一款新的菜单驱动式软件包安装工具,与`dselect'很相似。
它亦可作为命令行工具`apt-get'的替代品。
`aptitude'可接受单字符命令,通常是小写字母。
Key-strokeAction
F10菜单
?
键盘命令帮助
u更新软件包信息
g下载并安装选定的软件包
q保存修改并退出当前屏幕
x放弃修改并退出当前屏幕
Enter浏览某软件包的相关信息
`aptitude'提供了选项可自动选取所有_depends_、_recommends_和_suggests_类软件包。
可在`F10
->Options->Dependencyhandling'菜单中设置它。
通过`aptitude'可访问某软件包的所有版本。
apt-cache和apt-get命令
还是以上面使用`testing'发布版的用户为例,可使用下列命令管理系统:
*`apt-get-uupgrade'
跟踪`testing'发布版的更新情况,对系统上所有软件包进行升级并从`testing'处安装关联软件包。
*`apt-get-udist-upgrade'
跟踪`testing'发布版的更新情况,对系统上所有软件包进行升级并从`testing'处重新分析关联关系并安装关联包。
*`apt-get-udselect-upgrade'
跟踪`testing'发布版的更新情况,对系统上所有在`dselect'中选定了的软件包进行升级。
*`apt-get-uinstall'
从`testing'处安装及其关联包。
*`apt-get-uinstall/unstable'
从`unstable'处安装并从`testing'处安装关联包。
*`apt-get-uinstall-tunstable'
从`unstable'处安装及其关联包。
注意须设置`unstable'的Pin-Priority为990。
*`apt-cachepolicy'
检查软件包的状态。
*`apt-cacheshow|less'
查看软件包的有关信息。
*`apt-getinstall'
安装软件包的特定版本<2.2.4-1>。
*`apt-get-uinstall'
安装软件包并删除软件包。
*`apt-getremove'
删除软件包,但保留其配置文件。
*`apt-getremove--purge'
删除软件包及其配置文件。
在上面的例子中用`-u'选项的作用是在实际升级之前将所有将要升级的软件包列出,并提示用户确认。
下面的操作可将`-u'设置为默认行为:
$cat>>/etc/apt/apt.conf<<.
//Alwaysshowpackagestobeupgraded(-u)
APT:
:
Get:
:
Show-Upgraded"true";
.
使用`-s'可进行模拟升级,并不进行真正的升级行为。
跟踪某Debian发行版
根据个人的喜好,选择要跟踪的Debian发行版
`设置APT系统'的样例文件`/etc/apt/preferences':
trackstable:
将testing的Pin-Priority改为50
tracktesting:
保持上面的设置不变
tracktesting(unstable):
将unstable的Pin-Priority改为500
trackunstable(testing):
将unstable的Pin-Priority改为800
有关如何选定Pin-Priority的说明:
在上表中,从上而下代表了某个版本
从上个版本刚刚发布之后到下一版进入冻结期之前这段时间经历的各个阶段。
请注意,跟踪`testing'发行版的Debian有一个负面影响,安全补丁的更新很慢。
请注意,如果将Debian各版本混合,例如将`testing'混入`stable'或将`unstable'混入`stable',这会造成众多关键软件包不自觉地从`testing'处或`unstable'处获得,结果引起许多麻烦。
如何对`/etc/apt/preferences'进行设置,将某些关键包锁定在成熟版本,而让其它非关键包跟踪不太成熟的新版本,可参考样例目录
(http:
//www.debian.org/doc/manuals/debian-reference/examples/)中的`preferences.testing'和`preferences.unstable'文件。
另一方面,`preferences.stable'强制所有软件包降级到“stable”。
将所有软件包降级到`stable'
要将所有软件包降级到`stable',可按下面的方法编辑`/etc/apt/preferences':
Package:
*
Pin:
releasea=stable
Pin-Priority:
1001
然后运行“`apt-getupgrade'”,由于Pin-priority>
1000而引起强制降级。
注意,该操作可能会在关联性方面发生一点问题。
/etc/apt/preferences概述
`设置APT系统'中展示的`/etc/apt/preferences'样例文件里,首行`Package:
*'表示该段落指令作用于所有软件包。
可以通过指定软件包名称来为某个特定的软件包设置指定的Pin-Priority。
接下来的一行是`Pin:
releasea=stable'表示`apt-get'从包含`Archive:
stable'节的`Release'文件所在的目录获得`Packages.gz'文件。
最后一行`Pin-Priority:
500'指定Pin-Priority为500。
如果多个软件包同名,系统通常会安装拥有最高Pin-Priority的软件包。
在此,Pin-Priority表示:
*1001及以上:
可降级优先级。
Pin-Priority处于该范围的软件包允许降级操作。
*100到1000:
标准优先级。
不允许降级。
几个keyPin-Priority的值:
*990:
由`--target-release'或apt-get(8)`-t'选项设置的优先级。
*500:
所有默认软件包文件的优先级。
*100:
当前安装软件包文件的优先级。
*0到99:
非自动优先级。
(仅用于软件包没有安装或没有别的可用版本时。
)
*小于0:
决不选择该版本。
按下面的方法设置`/etc/apt/apt.conf'可获得与`--target-release'一样的效果:
#echo'APT:
efault-Release"testing";'>>/etc/apt/apt.conf
命令行选项`--target-release'和`/etc/apt/apt.conf'中的设置会顶替`/etc/apt/preferences'的设置。
在玩`/etc/apt/preferences'的时候小心两者冲突。
检测程序错误寻求帮助
如你使用某个软件包出现问题,在寻求帮助或发送错误报告之前请确认查看过下列站点(`lynx'、`links'和`w3m'同样好用):
$lynxhttp:
//bugs.debian.org/
$lynxhttp:
//bugs.debian.org/#如果你知道软件包名称
$lynxhttp:
//bugs.debian.org/#如果你知道错误序号
如有疑问,可阅读帮助文件。
设置`CDPATH'如下:
exportCDPATH=.:
/usr/local:
/usr/share/doc
然后输入
$cd$pagerREADME.Debian#ifthisexists
$mc
APT升级错误及解决方法
从`unstable'/`testing'进行升级时可能出现第5.3节,
`升级Debian系统'中提到的软件包关联问题。
多数情况下,是因为升级的软件包所需的新增的关联包没有安装。
可使用如下方法解决:
#apt-getdist-upgrade
如果这招无效,可以重复下面的方法至到问题解决:
#apt-getupgrade-f#continueupgradeevenaftererror
...或
#apt-getdist-upgrade-f#continuedist-upgradeevenaftererror
一些的确存在问题的升级脚本会引起持续出错。
最好的解决方法是检查该软件包的安装脚本`/var/lib/dpkg/info/packagename.<>'然后运行:
#dpkg--configure-a#配置所有未完成安装的软件包
如果脚本报告缺少配置文件,查看一下`/etc'中相关的配置文件。
如果配置文件有`.new'扩展名(或其它类似的扩展名),去掉(`mv')它的扩展名。
从unstable/testing进行升级时可能出现软件包关联问题。
可用这个方法智取:
#apt-getinstall-f#重载坏关联
使用dpkg救助
如果系统的`dselect'(APT)受损无法完成安装,可使用`dpkg'来恢复:
#cd/var/cache/apt/archives
#dpkg-ilibc6*libdb2*perl*
#dpkg-iapt*dpkg*debconf*
#dpkg-i*#直至不再出错
如果软件包丢失,用下述方法从镜像源
(http:
//www.debian.org/mirror/)下载:
#mc#use"FTPlink"pointingtoDebianFTPserver
现在,在HTTP/FTP服务器上,软件包的真正位置不再是传统的`/dist'目录而是新的`/pool'目录。
然后开始安装:
#dpkg-i/var/cache/apt/archives/
对于坏关联,可这样解决:
#dpkg--ignore-depends=,...-i#dpkg--force-depends-i#dpkg--force-depends--purge#dpkg--force-confmiss-i#Installmissingconffile
恢复软件包选择状态的数据
如果`/var/lib/dpkg/status'因为某种原因坏掉了,Debian系统将会完全丢失软件包选择状态的数据。
赶快到`/var/lib/dpkg/status-old'或`/var/backups/dpkg.status.*'下找找旧的`/var/lib/dpkg/status'文件。
将`/var/backups/'放在其它的分区是个好习惯,因为该目录包含了许多非常重要的系统数据。
如果旧的`/var/lib/dpkg/status'文件也坏了,仍可以从`/usr/share/doc/'下的目录进行恢复这些信息。
#ls/usr/share/doc|
grep-v[A-Z]|
grep-v'^texmf$'|
grep-v'^debian$'|
awk'{print"install"}'|
dpkg--set-selections
#dselect--expert#reinstallsystem,de-selectasneeded
/var被删除后如何恢复系统
`/var'目录包含着定时更新的数据如mail,它们很容易遭破坏。
将目录放到别的分区可降低风险,如果最坏的事情发生了,可以通过重建`/var'目录来挽救Debian系统。
从相同或旧版本的最简Debian系统中取得`/var'目录的内容框架,例如var.tar.gz
(http:
//people.debian.org/~osamu/pub...膔oot目录,接着
#cd/
#mvvarvar-old#如果剩有有用内容
#tarxvzfvar.tar.gz#使用Woody框架文件
#aptitude#或用dselect
上述步骤可使系统恢复工作。
`恢复软件包选择状态的数据'中描述的技术加速软件包选择数据的恢复。
([FIXME]:
该过程需要更多的实践来检验)
为无法启动的系统安装软件包
使用Debian急救软盘/CD或从多启动Linux系统其它分区启动。
`启动系统'.
将无法启动的系统挂载到`/target'并使用`dpkg'的chroot安装模式。
#dpkg--root/target-i
接下来就可以着手配置并解决问题。
如是只是由于`lilo'损坏而造系统无法启动,可使用标准Debian急救盘启动。
假设你的root分区位于`/dev/hda12'且想使用runlevel
3,在启动提示符输入:
boot:
rescueroot=/dev/3
这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。
(可能丢失某些内核特性或模块)
如果dpkg命令出错该怎么办
如果`dpkg'损坏就不能安装任何`.deb'文件。
下面的操作可帮助你修复这种状况。
(在第一行,你可将“links”替换成你喜欢的浏览器。
)
$linkshttp:
///debian/pool/main/d/dpkg/
...下载完好的dpkg__.deb
$su
password:
*****
#arxdpkg__.deb
#mvdata.tar.gz/data.tar.gz
#cd/
#tarxzfvdata.tar.gz
对`i386',亦可用`http:
//packages.debian.org/dpkg'作为URL。
文件信息
查找特定文件所属的软件包:
$dpkgpattern#searchforpatternininstalledpackages
$wgethttp:
//ftp.us.debian.org/debian/dists//
$zgrep-epattern
#findfilename-patternoffilesinthedebianarchive
或使用专门的软件包命令:
#apt-getinstalldlocate
#conflictswithslocate(secureversionoflocate)
$dlocate#fastalternativetodpkg-Landdpkg-S
...
#apt-getinstallauto-apt#on-demandpackageinstallationtool
#auto-aptupdate#createdbfileforauto-apt
$auto-aptsearch#searchforpatterninallpackages,installedornot
软件包信息
搜索并显示包文件的信息。
编辑`/etc/apt/sources.list',让APT指向正确的包文件。
如果想了解testing/unstable中的相应软件包与当前系统安装的软件包有何差别,使用`apt-cache
policy'---更好。
#apt-getcheck#更新缓冲区并检查损坏的软件包
$apt-cachesearch#按文本描述搜索软件包
$apt-cachepolicy#软件包的priority/dists信息
$apt-cacheshow-a#显示所有dists中软件包描述信息
$apt-cacheshowsrc#显示相应源码包的信息
$apt-cacheshowpkg#软件包调试信息
#dpkg--audit|-C#搜索未完成安装的软件包
$dpkg...#已安装软件包描述
$dpkg-l...#已安装软件包的状态(每个占一行)
$dpkg-L...#列出软件包安装的文件的名称
如果是Woody发布版没有为`apt-cacheshowsrc'建档,但该命令可用
你也这可这样查看软件包信息(我用`mc'浏览):
/var/lib/apt/lists/*
/var/lib/dpkg/available
比较下面的文件可以确切了解最近的安装过程对系统造成了那些改变。
/var/lib/dpkg/status
/var/backups/dpkg.status*
使用APT进行全自动系统安装
进行全自动安装,要在`/etc/apt/apt.conf'中加上一行:
Dpkg:
:
Options
另一种等阶的方法是运行`apt-get-q-y
'。
这种方法可能产生严重的负作用,所以使用起来要小心。
参阅apt.conf(5)和dpkg
(1)。
安装完毕以后重新配置已安装软件包'中的方法配置特定的软件包。
重新配置已安装软件包
使用下列方法重新配置已安装软件包。
#dpkg-reconfigure--priority=[...]
#dpkg-reconfigure--all#重新配置所有的软件包
#dpkg-reconfigurelocales#生成别的locales
#dpkg-reconfig
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Debian 软件包 管理 详解