LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
 
主题工具
旧 08-12-28, 21:44 第 1 帖
pjq 帅哥
 
 
 
注册会员  
  注册日期: Apr 2008
  帖子: 223
  精华: 1
 

标题: 一个clean up world file脚本


每次清理world file都要去找那一堆命令,之前找到英文版的在这里

现在我将主要过程写在一个脚本里了,下次只要执行一下这个脚本就行了。
用wgetpaste贴在了这里

主要会执行如下步骤:
代码:
echo "***********************************************" echo "The system will do the follow steps automaticly:" echo "1.cp /var/lib/portage/world ~ && >/var/lib/portage/world" echo "2.regenworld" echo "3.emerge --depclean -p" echo "4.emerge --depclean" echo "5.emerge -uDN world -pv" echo "6.emerge -uDN world" echo "7.revdep-rebuild" echo "8.eclean-dist -d" echo "***********************************************"

脚本代码:
代码:
pjq@Gentoo-PJQ ~ $ cat clwd.sh ######################################################################### # Author: pengjianqing@sina.com # Created Time: Sun 28 Dec 2008 07:50:48 PM CST # File Name: clwd.sh # Description: # This file is used to clean your world file. #USAGE: # ./clwd.sh -y,Clean your world file automaticly. # ./clwd.sh -n,You need to answer the question by yourself. ######################################################################### #!/bin/bash cleanworld() { echo "***********************************************" read -p "Back up the world file and regenerate the world file?[y/n]:" ANSWER if [ "y" = $ANSWER ];then echo "cp /var/lib/portage/world ~ && >/var/lib/portage/world" cp /var/lib/portage/world ~ && >/var/lib/portage/world echo "regenworld" regenworld fi echo "***********************************************" read -p "Execute emerge --depclean -p?[y/n]:" ANSWER if [ "y" = $ANSWER ];then emerge --depclean -p fi echo "***********************************************" read -p "Execute emerge --depclean ?[y/n]:" ANSWER if [ "y" = $ANSWER ];then emerge --depclean fi echo "***********************************************" read -p "Execute emerge -uDN world -pv?[y/n]:" ANSWER if [ "y" = $ANSWER ];then emerge -uDN world -pv fi echo "***********************************************" read -p "Execute emerge -uDN world ?[y/n]:" ANSWER if [ "y" = $ANSWER ];then emerge -uDN world fi echo "***********************************************" read -p "Execute revdep-rebuild?[y/n]:" ANSWER if [ "y" = $ANSWER ];then revdep-rebuild fi echo "***********************************************" } autocleanworld() { echo "***********************************************" echo "The system will do the follow steps automaticly:" echo "1.cp /var/lib/portage/world ~ && >/var/lib/portage/world" echo "2.regenworld" echo "3.emerge --depclean -p" echo "4.emerge --depclean" echo "5.emerge -uDN world -pv" echo "6.emerge -uDN world" echo "7.revdep-rebuild" echo "***********************************************" read -p "Are you sure?[y/n]:" ANSWER if [ "y" = $ANSWER ];then echo "***********************************************" cp /var/lib/portage/world ~ && >/var/lib/portage/world echo "***********************************************" regenworld echo "***********************************************" emerge --depclean -p echo "***********************************************" emerge --depclean echo "***********************************************" emerge -uDN world -pv echo "***********************************************" emerge -uDN world echo "***********************************************" revdep-rebuild echo "***********************************************" fi } help() { echo "***********************************************" echo "-h:help" echo "-y:do the clean world automaticly." echo "-n:you need to answer the question one by one." echo "***********************************************" exit 0; } myexit() { echo "Unknown parameter,exit" exit 0; } STARTTIME=`date|cut -d " " -f4` echo "***********************************************" echo "This is used to clean your world file" echo "USAGE:" echo "-h:help" echo "-y:do the clean world automaticly." echo "-n:you need to answer the question one bye one." echo "***********************************************" case "$1" in -y ) autocleanworld;; -n ) cleanworld;; -h ) help;; * ) myexit;; esac read -p "Do you want to delete the independency files in /usr/portage/distfiles/?[y/n]:" ANSWER if [ "y" = $ANSWER ];then eclean-dist -d -p fi if [ "y" = $ANSWER ];then read -p "Are you sure to delete those files?[y/n]:" ANSWER if [ "y" = $ANSWER ];then eclean-dist -d fi fi FINISHEDTIME=`date|cut -d " " -f4` echo "***********************************************" echo "OK,All done!Enjoy your clean world:)" echo "***********************************************" echo Start at:$STARTTIME echo Finished at:$FINISHEDTIME echo "***********************************************"







__________________
http://www.impjq.net
http://blog.impjq.net

此帖于 08-12-28 22:06 被 pjq 编辑. 原因: 更正: exit 0;
  pjq 当前离线   回复时引用此帖
旧 08-12-28, 21:57 第 2 帖
tlze
 
 
 
注册会员  
  注册日期: Jan 2008
  帖子: 581
  精华: 0
 

高手,留记号,方便使用。
  tlze 当前离线   回复时引用此帖
旧 08-12-29, 00:24 第 3 帖
zxuan
 
zxuan 的头像
 
 
注册会员  
  注册日期: Dec 2003
  帖子: 267
  精华: 0
 

感谢分享,请教楼主,这个脚本的目的是否是把某些不属于world但是又手工emerge过的包从world中去除呢?
  zxuan 当前离线   回复时引用此帖
旧 08-12-29, 08:56 第 4 帖
pjq 帅哥
 
 
 
注册会员  
  注册日期: Apr 2008
  帖子: 223
  精华: 1
 

引用:
作者: zxuan
感谢分享,请教楼主,这个脚本的目的是否是把某些不属于world但是又手工emerge过的包从world中去除呢?
是的,可以这么说,它会重新产生你的world 档,然后按照新产生的world去clean你的系统,那些不属于world的就会被删掉,还有那些没有依赖关系的也会被clean掉.

revdep-rebuild会修复你系统中的依赖错误.

整个过程执行完后,你的系统就clean up了.

如果你有时间你还可以执行emerge -e world 来重新编译你的系统.
  pjq 当前离线   回复时引用此帖
旧 08-12-29, 09:40 第 5 帖
Hosanna 帅哥
 
Hosanna 的头像
 
 
注册会员  
  注册日期: Apr 2007
  我的住址: 广西-->流浪
  帖子: 512
  精华: 0
 

不错,又可以偷懒了~~







__________________
Laptop: Lenovo C510 | Intel Pentium Dual-Core(Merom) T2390 | Intel PM965+ICH8M | 1G DDRII 667 | 250G SATA | nVidia Geforce 8400M | Realtek HD Audio | Broadcom BCM4311 802.11g | Broadcom NetLink BCM5906M
软件: Gentoo(x86_64)+FVWM+Rox

缘来缘去原是空,花开花落化归尘.既是无缘,为何相识?既是有缘,为何相离?
Blog: http://nofool.info
  Hosanna 当前离线   回复时引用此帖
旧 08-12-29, 09:50 第 6 帖
wd_afei 帅哥
 
wd_afei 的头像
 
 
注册会员  
  注册日期: Jul 2003
  我的住址: Beijing
  帖子: 2,191
  精华: 5
 

不明白清理 word 是什么意思。。。
word 里面的东西不都是你自己需要才安装的么?







__________________
wd
irc.oftc.net/6667 #chat-cn, #openbox-cn
  wd_afei 当前离线   回复时引用此帖
旧 08-12-29, 13:51 第 7 帖
zxuan
 
zxuan 的头像
 
 
注册会员  
  注册日期: Dec 2003
  帖子: 267
  精华: 0
 

引用:
作者: wd_afei
不明白清理 word 是什么意思。。。
word 里面的东西不都是你自己需要才安装的么?
有时候会不注意重复emerge了里面某些应该由依赖安装的包,而且没有加上-1参数,导致world里面记录了不必要的一个包。
  zxuan 当前离线   回复时引用此帖
旧 08-12-29, 17:37 第 8 帖
pjq 帅哥
 
 
 
注册会员  
  注册日期: Apr 2008
  帖子: 223
  精华: 1
 

引用:
作者: wd_afei
不明白清理 word 是什么意思。。。
word 里面的东西不都是你自己需要才安装的么?
你可以先备份你的world文件,然后重新生成,再比较一下,就可以看出差别了.
  pjq 当前离线   回复时引用此帖
旧 08-12-29, 17:48 第 9 帖
wd_afei 帅哥
 
wd_afei 的头像
 
 
注册会员  
  注册日期: Jul 2003
  我的住址: Beijing
  帖子: 2,191
  精华: 5
 

引用:
作者: zxuan
有时候会不注意重复emerge了里面某些应该由依赖安装的包,而且没有加上-1参数,导致world里面记录了不必要的一个包。
这个。。。
你自己直接修改那个 world 文件不得了?
/var/lib/portage/world
把里面你不需要的 删掉 ,然后 emerge --depclean , revdep-rebuild 不就可以了?
  wd_afei 当前离线   回复时引用此帖
旧 08-12-29, 17:48 第 10 帖
Blahster
 
Blahster 的头像
 
 
注册会员  
  注册日期: Nov 2004
  帖子: 649
  精华: 0
 

regenworld是根据/var/log/emerge.log生成world,所以并不安全/牢靠,建议少用。







__________________
Thinkpad R60 9460LR1
Exherbo Linux
  Blahster 当前离线   回复时引用此帖
旧 08-12-30, 00:40 第 11 帖
8pm 帅哥
 
8pm 的头像
 
 
注册会员  
  注册日期: Aug 2005
  我的住址: 地球
  帖子: 210
  精华: 1
 

我用 python 写过一个
分析 emerge -pvq --depclean 的輸出
得到所有已安装包的依赖
然后重新排列出依赖树中最顶端的包
这样确实能让 world 里的项少很多
而且能保证满足依赖,也就是不需要重新 revdep-rebuild
不过有些小细节比较麻烦
比如,软件包名字的分析中,版本号的去除,想用正则,但没找到个规律,不是表面上 -x.y.z 这么简单的
(update: 忽然想到一个可能可以解决这个问题的方法,没时间,不會去试了)
比如,我是通过过滤掉所有依赖里不是仅仅有 world 的包来得出最终的 world 文件,这样会可能得到做过头的结果,例如最后只剩下,XX-plugin 包,而 XX 软件就没了,因为 XX-plugin 依赖这个 XX,当然,改動一下可以更灵活,我觉得没太大必要
再比如,上面提到的过滤方式有个致命的弱点,就是一些完全循环的依赖,会最终被过滤掉,一个明显的例子是用了 restrict-javascript 这个 USE 的 mozilla-firefox,x11-plugins/noscript 会依赖 www-client/mozilla-firefox,反之亦然,最终产生的 world 文件有可能还需要手工修改,加上解决循环依赖的代码对于这个小东西又不值
随作罢







__________________
Registered Linux User #385191

main(O){return(-11<O&&O<2)?putchar("T3.f~?5?~&'."[-main(O-1)+1]^'^'),O+1:O+1;}

Laptop:
HP Pavilion dv6711TX - Intel® Core™2 Duo T7500 - 3G - 250G
w/ gentoo : gnome + compiz-fusion +5 more

Desktop:
Intel® Pentium® 4 2.6 - 512M - 120G+160G
w/ gentoo: xfce + compiz-fusion | e16

Desktops for my dad:
Intel® Pentium® Dual Core E2160 - 2G - 400G w/ ubuntu 8.04
: gnome compiz-fusion locale=zh_CN.UTF-8
AMD Sempron™ 2300+ - 192M - 80+500G w/ debian testing

此帖于 08-12-30 00:53 被 8pm 编辑.
  8pm 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 22:25


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org