LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1872|回复: 11

如何装了个软件,然后将它及其依赖包移除。

[复制链接]
发表于 2004-11-23 01:54:21 | 显示全部楼层 |阅读模式
例如心血来潮想试下audacity,你可以先:
# emerge -pv audacity | tee /root/audacity
# cat  /root/audacity
可以看到:
  1. These are the packages that I would merge, in order:

  2. Calculating dependencies  ...done!
  3. [ebuild  N    ] dev-libs/fftw-3.0.1  -3dnow -debug -mpi -sse 1,900 kB
  4. [ebuild  N    ] media-libs/libsamplerate-0.1.1-r1  -sndfile -static 683 kB
  5. [ebuild  N    ] media-libs/ladspa-sdk-1.12-r2  69 kB
  6. [ebuild  N    ] media-sound/audacity-1.2.1  +encode -flac +mad +oggvorbis 2,678 kB

  7. Total size of downloads: 5,331 kB
复制代码

等你装完之后,觉得不好用想删了它,当然可以emerge -C audacity,但这样只能删除audacity却不能删除它的依赖包(可能此时你已忘了装了哪些依赖包了)。这时/root/audacity这个档案便提供了应有的信息让你可以把刚装的那几个包一个个的删除。
发表于 2004-11-23 04:42:04 | 显示全部楼层
emerge -pv depclean
emerge -v depclean
发表于 2004-11-23 09:29:26 | 显示全部楼层
最初由 meteo 发表
emerge -pv depclean
emerge -v depclean


 楼主| 发表于 2004-11-23 10:52:14 | 显示全部楼层
最初由 meteo 发表
emerge -pv depclean
emerge -v depclean

我试了,但portage要移除ttf-bitstream-vera啊,怎么回事?
发表于 2004-11-23 11:49:15 | 显示全部楼层
gentoo的forum上有个thread,讲怎么处理这个问题的。不过现在没有时间给找出这个帖子。等我再发现了,给翻译出来给大家看看。
发表于 2004-11-23 18:23:10 | 显示全部楼层
最初由 torres 发表
我试了,但portage要移除ttf-bitstream-vera啊,怎么回事?

# echo 'media-fonts/ttf-bitstream-vera' >> /var/lib/portage/world
 楼主| 发表于 2004-11-24 01:39:24 | 显示全部楼层
最初由 Fleta 发表
# echo 'media-fonts/ttf-bitstream-vera' >> /var/lib/portage/world

谢了!
发表于 2004-11-24 02:21:31 | 显示全部楼层
不用翻译了,我以前发过一篇解释这个问题的,好像记得收到精华区了,我找一找有没有相关连接。
发表于 2004-11-24 02:55:39 | 显示全部楼层
好像没留下来,记得那时候刚发了没几天,linuxsir被黑了,不过后来我记得是恢复了的,可能给丢了。
大略的说,gentoo安装的软件分两类,一类是会记到world里的,另一类不会。也就是说world是你用emerge xxx手动安装的所有包的列表。但是哪些包不会被装到world里呢,包括这些:
1,通过依赖关系而安装上的包,比如你安装a,用了emerge a,可是a还需要安装b,这时候emerge会自动把b安装上,可是这个b并不记到world里。
2,通过emerge --oneshot xxx安装上的包,这个--oneshot开关能阻止emerge把你安装的包xxx记到world里
3,直接emerge xxx.ebuild安装上的包,所有通过直接emerge xxx.ebuild文件安装上的包都不会被记到world里,gentoo的文档不鼓励这么做,据说在以后会取消这个功能。
现在很多地方都说如果某个软件包的keyword是~x86,可以通过ACCEPT_KEYWORD="~x86" emerge xxx来安装,这种做法是gentoo文档不鼓励的,对系统的维护很有害。正确的做法应该是在/etc/目录下建立一个目录portage,在/etc/portage/目录下建立一个文件package.keywords,然后
echo 'yyy/xxx ~x86'>>/etc/portage/package.keywords.
至于为什么前一种做法对维护系统有害,是因为gentoo在更新升级的过程中,有的包可能会因为一些bug而被降级,为了保证这些包能正确被降级,更新的时候必须使用-u开关而不是-U开关,当使用-u开关的时候,由于使用了ACCEPT_KEYWORD="~x86"前缀安装的包没有被记录在案,不能被区别对待,所以会发现系统会把这些包卸载或者是降级(很多人遇到这种情况,就直接使用-U开关防止降级,正如前面说的,这是很粗暴的做法)
同样,对于被mask的包,也不应该直接用emerge xxx.ebuild的方法安装,它的毛病一是系统对这种包的特殊性没有照顾,会导致更新的时候被降级或者卸载,二就是我前面说的,在world文件里也没有记录,导致不能用emerge -uDv world更新。
正确的做法是echo 'yyy/xxx' >>/etc/portage/package.unmask
然后再emerge xxx
有了前面的准备,就可以再来谈emerge -v depclean的问题了。emerge -v depclean的作用,是把所有world没有记录在案的孤立的包删除。也就是world里记录的包不会被删除,他们所依赖的包也不会被删除,而world没有并且也不依赖的包就会被删除。比如你emerge a装了a以及a依赖的包b,这时候world里记录了a,没记录b,但是因为b被a所依赖,a属于world,emerge -pv depclean不会把a,也不会把b删除。这时候你emerge unmerge a,a被删除,并且从world里被删除,再emerge -v depclean的时候,因为a已经被删除,b没有任何软件需要它,并且b也不在world里,emerge就会把b删除,也就达到了我们的目的。

总结:
1,不应该通过ACCEPT_KEYWORD="~x86"前缀的办法安装带~x86关键字的包,而应该通过先echo 'yyy/xxx ~x86'>>/etc/portage/package.keywords
再emerge xxx的方法安装包
2,不应该通过emerge xxx.ebuild的方式安装包,因为这样安装,在world文件里没有记录,会给后来的维护带来不便。如果遇到被屏蔽的包,可以通过先
echo 'yyy/xxx'>>/etc/portage/package.unmask
再emerge xxx的方法安装
3,如果某个软件是你需要的,你不希望它被depclean删除,可以把这个软件包写到/var/lib/portage/world里。
4,保持前面的习惯的前提下,升级系统的过程是这样的
emerge sync
emerge -uDpv world
emerge -uDv world
emerge -pv depclean
emerge -v depclean
revdep-rebuild -pv
revdep-rebuild -v
dispatch-conf
注意其中用的是-u开关,而不是-U开关。刚开始这样做的时候要小心,因为可能以前因为不好的emerge习惯,导致很多包不能被emerge正确的处理,这时候要注意观察emerge -pv depclean的输出结果做相应处理再emerge -v depclean。更新过一次以后,以后系统就能很稳定而且能够保证你整个系统没有安装任何冗余的包。
 楼主| 发表于 2004-11-24 10:14:26 | 显示全部楼层
感谢meteo:thank
我等gentoo新手还有很多要学啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表