Skip navigation.

crocodile's blog

a python lover

Posts tagged with "apt"

Ubuntu使用apt来进行包裹管理

,

介绍
首先,.tar.gz.的用户如果希望在自己的GNU/Linux 系统下使用这些软件必须编译每个项目。Debian的诞生,使人们有理由相信这个系统拥有一种管理安装包裹(package)的方法,使得这些包裹可以安装到机器上。这个系统被叫做dpkg。由此安装包裹(package)第一次被引入到了GNU/Linux上,而此时的红帽子自己的’rpm’系统还在酝酿之中。

一个新的难题挡在了GNU/Linux的设计者面前。他们需要一个快速,实效性强,并且有效率的方式来安装这些安装包裹,并且希望它能够在升级时自动而独立的配置这些安装包裹升级中的文件。在这里重申一下,Debian直接导致了APT的诞生,即 Advanced Packaging Tool。 从那时起它就和rpm一起被使用在Conectiva中,同时它也被不少其他的分布式系统所采用。


怎样使用Debian的APT

可使用的命令
所有的这些命令都需要sudo!

apt-get update - 在改变了/etc/apt/sources.list或者/etc/apt/preferences之后运行。你也应该定期的运行它以保证你的source list是最新的。

apt-get install packagename - 安装一个新的安装包裹(参见下面的aptitude行)

apt-get remove packagename - 移除一个已经安装了的安装包裹(运行后configfiles仍然会留下来)

apt-get --purge remove packagename - 移除一个已经安装了的安装包裹(运行后configfiles也会被删除)

apt-get upgrade - 更新所有已经安装了的安装包裹

apt-get dist-upgrade - 更新整个系统到一个更新的发行版本

apt-cache search string - 在一系列已知的安装包裹中找寻字符串

dpkg -l package-name-pattern - 列出匹配模式的安装包裹

aptitude - 详细的查看已经安装或者可以使用的安装包裹。 Aptitude能够使用和apt-get相类似的方式用在命令行中,但是只有一些命令可用-最常用的安装和移除命令。但是因为aptitude比起 apt-get来保留了更多的跟踪信息,它在安装和移除系统时拥有更好的表现。

apt-cache showpkg pkgs - 显示安装包裹的信息。

apt-cache dumpavail - 打印一个可用的安装包裹名单。

apt-cache show pkgs - 显示安装包裹的记录,和dpkg –print-avail功能相似。

apt-cache pkgnames - 快速列出每个在系统中的安装包裹。

dpkg -S file - 哪个已经安装的安装包裹包含这个文件。

dpkg -L package - 列出在这个包裹中所有文件。

apt-file search filename - 查找包含此文件名的安装包裹(不需要是已经安装的)。apt-file是一个包含自身的安装包裹。你必须先用apt-get install来安装,然后还需要运行apt-file update。如果apt-file search filename一次显示了过多的内容,使用apt-file search filename|grep –w filename(这样只会显示包含文件名字的内容)或者使用apt-file search filename|grep /bin/ 那些在固定文件夹中的文件,比如/bin或者/usr/bin,如果你查找一个特殊的执行文件的话,这会非常有帮助)。

apt-get autoclean - 定期运行这个命令来清除那些已经不在你的系统中的安装包裹中的.deb文件夹。你通过这个方式能够重新获得不少的磁盘空间。如果你狂热的对磁盘空间有需求的话,apt-get clean是十分激进的,它甚至会移除那些现在已经安装了的安装包裹中的.deb文件。但是大部分的时间你不需要.debs,所以如果你为磁盘空间感到焦头烂额,运行它还是很值得的。

其余的安装包裹
deborphan和debfoster是查找可以被移除的没有什么用处的安装包裹的良好工具。

注意
通过编辑/etc/apt/sources.list你能够调出一个不同的库。具体的方法是替换其中的’stable’为’unstable’(或者其他什么文字)然后运行/apt-get update。但是这种方法是一种老方法,更新的办法是pinning(销连接)。下面是一个unstable配置文件的例子。

用命令行来加速我们的工作吧,^_^
命令行是很有有效,不过打字太慢了,所以把你的命令变得更小巧吧。你最好把以下的内容输入*~/.bashrc*

alias acs='apt-cache search' alias agu='sudo apt-get update' alias agg='sudo apt-get upgrade' alias agd='sudo apt-get dist-upgrade' alias agi='sudo apt-get install' alias agr='sudo apt-get remove'
但是看看上面有关aptitude的介绍,我们有理由使用alias agi='sudo aptitude install'来替代alias agi='sudo apt-get install'

APT and Dpkg 快速参考表

,

普通 APT 用法
apt-get install <package>
下载 <package> 以及所有倚赖的包裹,同时进行包裹的安装或升级。如果某个包裹被设置了 hold (停止标志,就会被搁在一边(即不会被升级)。更多 hold 细节请看下面。

apt-get remove [--purge] <package>
移除 <package> 以及任何倚赖这个包裹的其它包裹。
--purge 指明这个包裹应该被完全清除 (purged) ,更多信息请看 dpkg -P。

apt-get update
升级来自 Debian 镜像的包裹列表,如果你想安装当天的任何软件,至少每天运行一次,而且每次修改了
/etc/apt/sources.list 后,必须执行。

apt-get upgrade [-u]
升级所以已经安装的包裹为最新可用版本。不会安装新的或移除老的包裹。如果一个包改变了倚赖关系而需要安装一个新的包裹,那么它将不会被升级,而是标志为 hold。apt-get update 不会升级被标志为 hold 的包裹 (这个也就是 hold 的意思)。请看下文如何手动设置包裹为 hold。我建议同时使用 '-u' 选项,因为这样你就能看到哪些包裹将会被升级。

apt-get dist-upgrade [-u]
和 apt-get upgrade 类似,除了 dist-upgrade 会安装和移除包裹来满足倚赖关系。因此具有一定的危险性。

apt-cache search <pattern>
搜索满足 <pattern> 的包裹和描述。

apt-cache show <package>
显示 <package> 的完整的描述。

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

dselect
console-apt
aptitude
gnome-apt
APT 的几个图形前端(其中一些在使用前得先安装)。这里 dselect 无疑是最强大的,也是最古老,最难驾驭。
普通 Dpkg 用法
dpkg -i <package.deb>
安装一个 Debian 包裹文件,如你手动下载的文件。

dpkg -c <package.deb>
列出 <package.deb> 的内容。

dpkg -I <package.deb>
从 <package.deb> 中提取包裹信息。

dpkg -r <package>
移除一个已安装的包裹。

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

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

dpkg -s <package>
显示已安装包裹的信息。同时请看 apt-cache 显示 Debian 存档中的包裹信息,以及 dpkg -I 来显示从一个 .deb 文件中提取的包裹信息。

dpkg-reconfigure <package>
重新配制一个已经安装的包裹,如果它使用的是 debconf (debconf 为包裹安装提供了一个统一的配制界面)。你能够重新配制 debconf 它本身,如你想改变它的前端或提问的优先权。例如,重新配制 debconf,使用一个 dialog 前端,简单运行:

dpkg-reconfigure --frontend=dialog debconf (如果你安装时选错了,这里可以改回来哟:)

echo "<package> hold" | dpkg --set-selections
设置 <package> 的状态为 hlod (命令行方式)

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

支持通配符,如:
Debian:~# dpkg --get-selections *wine*
libwine hold
libwine-alsa hold
libwine-arts hold
libwine-dev hold
libwine-nas hold
libwine-print hold
libwine-twain hold
wine hold
wine+ hold
wine-doc hold
wine-utils hold

例如:
大家现在用的都是 gaim-0.58 + QQ-plugin,为了防止 gaim 被升级,我们可以采用如下方法:

方法一:
Debian:~# echo "gaim hold" | dpkg --set-selections
然后用下面命令检查一下:
Debian:~# dpkg --get-selections "gaim"
gaim hold
现在的状态标志是 hold,就不能被升级了。

如果想恢复怎么办呢?
Debian:~# echo "gaim install" | dpkg --set-selections
Debian:~# dpkg --get-selections "gaim"
gaim install
这时状态标志又被重置为 install,可以继续升级了。

同志们会问,哪个这些状态标志都写在哪个文件中呢?
在 /var/lib/dpkg/status 里,你也可以通过修改这个文件实现 hold。

有时你会发现有的软件状态标志是 purge,不要奇怪。
如:事先已经安装了 amsn,然后把它卸了。
apt-get remove --purge amsn
那么状态标志就从 install 变成 purge。

方法二:
在/etc/apt 下手动建一个 preferences 文件
内容:
Package: gaim
Pin: version 0.58*
保存
更详细内容请看:
http://linuxsir.com/bbs/showthread.php?s=&threadid=22601

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


从源码建立

deb packagesapt-get source [-b] <package> 下载一个源码的包并解开。
你必须在你的 /etc/apt/sources.list 文件里写入一条 deb-src 的记录才能完成这项工作。
如果你输入了一个 -b 参数,并且是以 root 的身份,deb 包会被自动的创建。
apt-get build-dep <package>
自动下载并安装通过源码创建 <package> 时需要的包。
只有apt 0.5以上版本才支持这个功能。现在woody和以上版本包含了这个功能。
如果你使有一个旧版本的apt,
查找依赖性最简单的方法是查看源码包中 debian/control 这个文件,
注意这个路径是相对的,是包内的路径。
普通的用法,结合 apt-get source -b,
例子 (as root):apt-get build-dep <package>apt-get source -b <package>会下载源码包,
建立依赖性,然后尝试编译源码。
dpkg-source -x <package.dsc>
如果你手工下载了一个程序的源码包,其中包含了几个类似 .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。

修正倚赖关系

dpkg --configure --pending
如果 dpkg 在 apt-get install upgrade dist-uptradeing 的时候出错退出,
尝试使用此命令来配置已经 unpack 的包。
然后再用 apt-get install,upgrade,
或者 dist-upgrade -f,
然后再用 apt-get install,upgrade,
或者 dist-upgrade。可能会重复多次,
这样通常可以解决大多数的依赖性问题。
(同时,如果提示由于某种原因需要某个特定的包裹,你可以常识安装或卸载这个包)
apt-get install -f
apt-get upgrade -f
apt-get dist-upgrade -f
尝试修正上述过程中出现依赖性关系注意 apt-get install -f 不需要 <package> 作为参数。
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31