Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users 中文 (Chinese)
  • Search

a script for emerging world

欢迎来到Gentoo中文论坛。
Post Reply
  • Print view
Advanced search
5 posts • Page 1 of 1
Author
Message
ts
Tux's lil' helper
Tux's lil' helper
Posts: 97
Joined: Wed Dec 15, 2004 4:03 am

a script for emerging world

  • Quote

Post by ts » Sun Apr 16, 2006 7:38 pm

emerge -e world 或 emerge -aDuv world 经常由于编译失败而中途终止,很是浪费时间。于是,最近写了这个脚本来解决这个问题,尤其是当我 emerge -e world 时,节约时间可以以“天”为单位, :lol: 。这里贴出来,希望对您有所帮助。


首先生成该脚本:

Code: Select all

nano -w /usr/local/bin/k4worldmerge

内容如下,简单进行拷贝和粘贴即可:

Code: Select all

#!/bin/bash

## /usr/local/bin/k4worldmerge
## writen by ts in April. 2006
## Report bugs to tearstone@gmail.com

source /sbin/functions.sh

## help info
case "$1" in
    "-h" | "--help" | "h" | "-?" | "?" )
        echo ""
        einfo 'A script for emerging world smoothly, and'
	einfo 'lists of emerge, such as failed packages.'
	echo
	ewarn 'Usage:'
        einfo 'emerge -e world || k4worldmerge'
        einfo 'emerge -Duv world || k4worldmerge'
        echo "" &&
                  exit;;
esac

## check user ID
[ "$UID" -ne "0" ] && eerror "Must be root to run this script." && exit

## check whether emerge fails for error, if true, resume it 
while [[ $(tail /var/log/emerge.log |grep \>\>\> |awk '{print $6}'| \
               sed /[[:alpha:]]/d |sed s/\)// |sed '/^$/d'|sed '$!d') -gt \
                 $(tail /var/log/emerge.log |grep \>\>\> |awk '{print $4}'| \
                     sed /[[:alpha:]]/d |sed s/\(// |sed '/^$/d' |sed '$!d') ]]
do
	[[ ! $( ps aux |grep root| sed /watch/d |sed /grep/d | sed /tail/d |grep emerge ) ]] && \
	echo "emerge is failed! Now, resume it and skipfirst." && \
	emerge  --resume --skipfirst 2>/dev/null

	sleep 5
done

echo 

## parameter for tail to retrieve info of lastest emerged world
logNum4lastWorld=$(awk '/world/{print NR}' /var/log/emerge.log |sed '$!d')
logTotal=$(sed -n '$=' /var/log/emerge.log)
(( n = $logTotal - $logNum4lastWorld ))

## information
echo
einfo get info from \"tail -n\ $n /var/log/emerge.log\"echo
echo
ewarn 'generate lists for emerge -e or -Duv world' 
echo
einfo emerged "  "list: /tmp/failedpkgs/emerged.pkg 
einfo completed list: /tmp/failedpkgs/completed.pkg 
einfo failed "   "list: /tmp/failedpkgs/failed.pkg
echo

## make dir for lists
[[ ! -d /tmp/failedpkgs ]] && mkdir -p /tmp/failedpkgs 

## rm old /tmp/failedpkgs/*.pkg file 
[[ -e /tmp/failedpkgs/emerged.pkg ]] && rm /tmp/failedpkgs/*.pkg 2>/dev/null

## get list for all emerged packages
[[ $(tail /var/log/emerge.log | grep \>\>\> |sed '/(1 of 1)/d'| \
      awk '{print $6}'|sed /[[:alpha:]]/d|sed s/\)//|sed '/^$/d'|sed '$!d') -gt \
         $(tail /var/log/emerge.log | grep \>\>\> |sed '/(1 of 1)/d'|awk '{print $4}'| \
              sed /[[:alpha:]]/d|sed s/\(//|sed '/^$/d'|sed '$!d') ]] && \
tail -n "$n" /var/log/emerge.log | \
	grep \>\>\> |grep emerge| awk '{print $4 " " $5 " " $6 "\t" $7}'|sed '$d' |awk '!($0 in a) {a[$0];print}' \
	>> /tmp/failedpkgs/emerged.pkg || \
tail -n "$n" /var/log/emerge.log | \
        grep \>\>\> |grep emerge| awk '{print $4 " " $5 " " $6 "\t" $7}'|awk '!($0 in a) {a[$0];print}' \
        >> /tmp/failedpkgs/emerged.pkg

## get list for completed packages
tail -n "$n" /var/log/emerge.log | \
	grep \:\:\: |grep emerge| awk '{print $5 " " $6 " " $7 "\t" $8}' | awk '!($0 in a) {a[$0];print}' \
	>> /tmp/failedpkgs/completed.pkg

## build list for failed packages
while read pkgNum to pkgTotal pkgname
	do 
	[[ ! $(grep $pkgname /tmp/failedpkgs/completed.pkg) ]] &&  \
       echo $pkgname >> /tmp/failedpkgs/failed.pkg
done < /tmp/failedpkgs/emerged.pkg

chmod 666 /tmp/failedpkgs/*

## print out fail info
[[ ! -e  /tmp/failedpkgs/failed.pkg ]] || [[ ! $(cat /tmp/failedpkgs/failed.pkg) ]] && \
	einfo no failed packages

[[ -e  /tmp/failedpkgs/failed.pkg ]]  && [[ $(cat /tmp/failedpkgs/failed.pkg) ]] && \
	eerror failed packages && \
	for i in $(cat /tmp/failedpkgs/failed.pkg); \
		do grep $i /tmp/failedpkgs/emerged.pkg |awk '!($0 in a) {a[$0];print}'; \
	done 

echo

让脚本可运行:

Code: Select all

 chmod +x /usr/local/bin/k4worldmerge
脚本用法:

Code: Select all

/usr/local/bin/k4worldmerge --help

Good luck!
Last edited by ts on Mon May 08, 2006 7:20 pm, edited 2 times in total.
Top
Hauser
l33t
l33t
User avatar
Posts: 650
Joined: Sat Dec 27, 2003 9:19 pm
Location: 4-dimensional hyperplane

  • Quote

Post by Hauser » Mon Apr 17, 2006 6:48 am

看看hielvc的emwrap.sh:http://forums.gentoo.org/viewtopic.php?t=282474
AMD Athlon XP 2600+; 512M RAM;
nVidia FX5700LE; Hitachi 120Gb
2.6.9-nitro4, reiser4, linux26-headers+nptl

Do I like to compile everything?
Positive definite!
Top
ts
Tux's lil' helper
Tux's lil' helper
Posts: 97
Joined: Wed Dec 15, 2004 4:03 am

  • Quote

Post by ts » Mon Apr 17, 2006 2:04 pm

我大致看过,没耐心,所以就写个简单的,满足自己的要求就可以了。 :)
Hauser wrote:看看hielvc的emwrap.sh:http://forums.gentoo.org/viewtopic.php?t=282474
Top
kohno
Tux's lil' helper
Tux's lil' helper
Posts: 112
Joined: Sat Aug 28, 2004 4:12 am

  • Quote

Post by kohno » Tue Apr 18, 2006 6:06 am

hielvc的emwrap.sh确实不错,emerge -e world某些包编译失败照样继续,完成之后给你一张列表慢慢处理编译失败的包。emerge --resume一般只能用一次,但emwrap.sh打断多次都可以resume。
Top
ts
Tux's lil' helper
Tux's lil' helper
Posts: 97
Joined: Wed Dec 15, 2004 4:03 am

  • Quote

Post by ts » Fri Apr 28, 2006 2:35 am

不好意思,去纽约开会回来,所以这么晚才回贴。

hielvc的emwrap.sh, 还有那个 tcupdate 及 maguire 的 emwrap,我都大致读过源码,如果说简洁,maguire 的 emwrap 更清爽些。我没用这些脚本,只是觉得功能有些冗余,而且我为自己写过些另外的脚本(主要是为了偷懒),所以就些功能补充了一个简单的。这个脚本的主要用途有二,一是 resume emerge; 二是查看编译失败的软件包,并留下日记以便它用。
kohno wrote:hielvc的emwrap.sh确实不错,emerge -e world某些包编译失败照样继续,完成之后给你一张列表慢慢处理编译失败的包。emerge --resume一般只能用一次,但emwrap.sh打断多次都可以resume。
Top
Post Reply
  • Print view

5 posts • Page 1 of 1

Return to “中文 (Chinese)”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic