|
|
hehe,别误会,还是用gentoo,不过过去我都是用emerge -UDp world和emerge -UDv world更新系统,这两天在这个贴的煽动下改弦易辙了
http://forums.gentoo.org/viewtop ... =asc&highlight=
具体来说,这个升级方法就是
emerge sync
emerge -uDpv world
emerge -uDv world
emerge -pv depclean
emerge -v depclean
revdep-rebuild -pv
revdep-rebuild -v
dispatch-conf
我觉得如果如果大家既想不断升级自己的系统,又希望自己的系统干净稳定,这个贴可以连上去看一看
我开始看到的时候,吓了一跳,居然敢用depclean,不过用过一次以后改变了原来的很多看法。
首先是如果可能,尽量要避免emerge -UDp world,这是因为在gentoo的发布里,有时候会有已经发布的包,因为有问题而被撤掉的情况,如果用emerge -UDv world一路往前冲,迟早有一天会严重危害系统的。hehe,我后面的内容都是在承认了这个基础上进行的讨论。
过去之所以会用emerge -UDv world,往往是因为有很多包,关键字是~x86的,如果我不想把系统改成~x86的不稳定版,而我又希望升级,如果用emerge -uDv world,就会发现那些用~x86装的包会被downgrade成稳定版本的,这样往往不是我们所希望的。
能够既不用updateonly,又可以装这些包的方法,就是利用/etc/portage/package.keywords文件,这种方案要比ACCEPT_KEYWORDS="~x86"和直接emerge 那个ebuild文件要好。最主要的优点是通过package.keywords(实际上还有一堆,package.mask package.unmask等等,用man portage可以看到介绍),你可以保留一份记录,就是你的机器上有哪些软件包是装的不稳定版本。这样emerge -uDv world,就可以保持这些包。而另外一些你所不知道的,有可能需要downgrade的包,就会照常被降级不象用-U参数的时候,它们会被保持不变。
一般装~x86的包和被mask的包,还有一个常用的方法是直接emerge 在portage树里的ebuild文件,这种方法比起ACCEPT_KEYWORDS方法来说,在安全上是一个更不好的方案。首先就是和ACCEPT_KEYWORDS的方法一样,它没有记录下来哪些包是不稳定版本,所以会导致不能用emerge -uDv world升级。我发现还有一个很糟糕的现象是,直接用ebuild文件进行的emerge,不会把软件包记录到world里面去,也就是说,你甚至在几个月以后根本就不记得你装过这个软件。其实这个道理很象是开支票,我记得刚出来的时候,开支票不知道留记录,结果后来发现帐面上一团乱麻,根本就不知道那些支票是干什么的。后来学乖了,不管是开支票还是兑现支票,都留个底,这样做好处是非常多的。
也就是说,如需要装的软件里关键字是“~x86”,那么比较恰当的方法是在/etc/portage/package.keywords文件里加上一个条目,下面是几个例子
=sys-kernel/linux-headers-2.6.5 -*
dev-tex/latex-beamer ~x86
sys-libs/glibc ~x86
dev-tex/xcolor ~x86
dev-tex/pgf ~x86
=app-office/openoffice-ximian-1.1.57 ~x86
用等号的时候是你只想对某个版本的包用~x86关键字的时候。
对于有的被mask的包,处理的方法也类似,是在
/etc/portage/package.unmask里面加上相应的条目
另外一个看法上的改变就是emerge depclean的使用,过去我是把emerge depclean看成洪水猛兽的,因为有太多血的教训了。可是现在发现,emerge depclean有它的好处,它的使用也不是那么可怕。一个重要的一点,就是安装包的时候,一定要用我上面说的方法。
至于为什么,其实我在上面说的方法,都是通过/etc/portage/package.xxx文件的配置,最终都保证你的包是直接用emerge -v abc(abc是包的名字)安装的,这样的安装,会在world文件里留下安装的记录。emerge depclean就是通过检查world和system,world里不依赖的包去掉来实现的,通过直接emerge -v abc安装的包,它所依赖的包都不会被删除。也就是说这样能够更有效的保证删除的是不需要的包。我帮人装gentoo的时候,还发现,用/etc/portage/package.xxx文件配置不稳定包的安装还有一个非常大的好处,就是它能保留住你当初安装的时候的一些经验。比如有的包必须用某个USE开关才能安装,你通过修改/etc/portage/package.use文件把它安装上了。到新的机器上,只要把/etc/portage/目录下的文件都拷贝过来,所有的包就都能正常安装。要不然你又遇到同样的问题的时候,很多时候会忘了你当初是怎么解决的。我的/etc/portage/package.use文件是这样的
=x11-libs/gtk+-1* -nls
sys-apps/coreutils -acl
其中gtk如果加上nls标志总是不能安装,过去还有过mplayer如果用gtk2参数安装,对话框就会不认中文的情况,现在不需要了,但是也可以这样解决。
扯远了,回到emerge depclean上面来。用emerge depclean之前,一定要检查一下emerge -p depclean的输出结果,一般对于以前经常用emerge ...ebuild来安装软件的,第一次执行emerge -p depclean会看到很多你认为有用的软件,把这些软件加到/var/cache/edb/world文件里,然后再emerge -p depclean,就会看到这些软件以及和它们有依赖关系的软件都会从删除的list里去掉。
最后是执行emerge depclean之前的严重提醒!!!首先是acl版本的coreutils会依赖于两个和acl有关的库文件,而这两个库文件,由于emerge depclean的bug,会被删除,从而导致所有的ls, rm等等命令都不能用了。所以在emerge depclean之前,一定要用-acl的参数把coreutils重新编译一遍,当然方法就是在/etc/portage/package.use里加上-acl这一条。
另外一个提醒!!如果在list里看到了devfsd,那么出于安全,要把devfsd加到world文件里去。从而保证emerge depclean不会删除devfsd,不然会死得很难看的。
如果以前都是用的emerge -UDv world和ACCEPT_KEYWORDS="~x86" emerge ..方法安装的软件,那么第一次用emerge depclean的时候要小心,过了这个第一次,以后坚持用/etc/portage目录配置软件包的安装,emerge depclean就会省事得多。
好了,现在就可以用revdep-rebuild来检查和修正动态链接库的依赖关系,这个命令很安全,可以放心使用。
前面的几个命令里dispatch-conf好像是用来备份config的,最好是先给系统装一个rcs,然后在/etc目录下建立一个config-archive目录,然后再执行dispatch-conf
在gentoo上,并不是所有的包在安装了新版本后会删除老版本的,这一般是出于安全的考虑,可是这也导致了gentoo的使用时间越长,gentoo的体积越大。我用glsa-check -f all的时候,发现系统居然跑去更新kde-3.1,后来发现我升级到kde 3.2的时候,3.1根本就没删除。不过目前我没找到很有效的方法来解决这种情况,我就是用qpkg -d -nc -v > dlist做个列表,看里面有不需要的,就试着unmerge,删除以后用emerge -uDv world再把系统更新一遍,主要是防止有的老的包的确是需要的,然后用revdep-rebuild。
不过提醒大家的是,在执行emerge depclean和emerge unmerge的时候,一定一定要知道自己在做什么,至少心里有谱,知道可能会有什么影响。 |
|