If your running portage-2.1.2-r1 or maybe r1-rc3 and above, as I said above, portage didnt even blink. It ran emerge system -uDp an gave the above list with NO /var/db/pkg. I leave it to you to test. The one thing you can do with script is give a date such as " nov 5 2006" or "Nov 06 2006" or epoch date from emerge.log " 1162971562 " and it will list everything built since then. It accepts -p , pretend and -d to make /var/db/pkg , then the date string if you want to. No flags an it prints usage. EX: rcvr_var_db_pkg.sh -p nov 2 2006 . It will list everything on and from Nov 2. Oh if you dont know you can name it whatever you want and then chmod a+x <name>.NO /var/db/pkg
emerge system -uDp|wc
120 748 7647 ==> 120 new pkgs
After running the script UPDATED 1-12-06
emerge system -uDpq
[ebuild NS ] sys-devel/autoconf-wrapper-3.2-r2
[ebuild NS ] sys-devel/autoconf-2.60
[ebuild NS ] sys-devel/automake-1.9.6-r2
[ebuild NS ] sys-apps/coreutils-6.4
[ebuild N ] sys-apps/man-1.6d
[ebuild NS ] net-misc/openssh-4.4_p1-r5
[ebuild NS ] sys-apps/kbd-1.12-r8
After putting the org /var/db/pkg listing back
emerge system -uDqp
[ebuild U ] sys-devel/autoconf-wrapper-3.2-r2 [3.2]
[ebuild U ] sys-devel/autoconf-2.60 [2.59-r7]
[ebuild U ] sys-apps/coreutils-6.4 [5.94-r1]
[ebuild U ] net-misc/openssh-4.4_p1-r5 [4.3_p2-r5]
[ebuild U ] sys-apps/kbd-1.12-r8 [1.12-r7]
[ebuild NS ] sys-devel/automake-1.5
Code: Select all
#!/bin/bash
# hielvc 11-11-06 as usual use at ye own risk. It works for me but not
# always for the right reason, right heavyjoost ;^)
# An attempt at a /var/db/pkg recovwery tool useing /var/log/emerge.log
# with the portage-2.1.2 appears not to be needed but you can use to see
# pkg's built since date.
# 11-15 set date_regx to default date april 1 2002
# 1-12-07 Added an unmerge filter, it helps to pick unmerged packages out
# and keep sloted versions
# 9-29-07 added the date exclusion to unmerge list
# 10-1-07 changed unmerge and fix script to actually out put to /var/db/pkg .
# empty pkg_atom.lst & tmp
:>pkg_atom.lst ; :>cat_pkg.lst ; :>tmp
date_regx="" ; day="" ; pkg=""
usage(){
cat<<-END
USAGE: rcv_pkg_db.sh [options] (optonal date=> Jul 7 2006)
Run with "-p" for pretend. Output goes to screen.
Use "-d" to do the deed, write to /var/db/pkg/ . If
you did a world --emptytree recently then look through
your emerge.log and find the date. Enter the date as
Aug 13 2006. The script will then only use files from
that date on.
Opitons
-p for pretend. Outputs to screen
-d to populate /var/db/pkg/
END
echo
exit
}
# Added a usage, pretend and "really do the deed"
if [ "$1" == "" ];then
usage
elif [ "$1" == "-p" ]; then
test="p"
elif [ "$1" == "-d" ]; then
test="d"
else
usage
fi
# Added date fetching
# Check # of agrcs if 2 then epoch time ?
if [ $# -eq 1 ];then
date_regx="1017648000" # april 1 2002
elif [ $# -eq 2 ];then
date_regx="$1"
else
shift
day="$@"
date_regx="$(date -d "$day" +%s)" #convert to epoch time
fi
# the below gets a list of all pkgs merged and the time stamp >= date_regx
# sample "1162267626 x11-misc/xscreensaver-5.01-r1"
awk '/completed/ && !/Sync/ {print $1, $8}' /var/log/emerge.log|sed 's/://'| \
awk '$1 >= '"$date_regx"' {print $1, $2}'>emerge.lst
# To get list of unmerged pkgs.9-29 added date regex
awk '/unmerge/ && !/Nothing/ {print $5}' /var/log/emerge.log|sed 's/://'| \
awk '$1 >= '"$date_regx"' {print $1}'>unmerge.lst
# now remove the unmerged
for i in $(< unmerge.lst);do
grep -v "$i" emerge.lst>tmp ; mv tmp emerge.lst
done
# Now get cat/pkg from list,and remove timestamp
# Chaned to keep version as it makes a more precise match.
#awk -F / '{print $2}' emerge.lst |sed 's/-[0-9].*//'|sort -u >pkg_atom.lst
awk -F / '{print $2}' emerge.lst | sort -u >pkg_atom.lst
# Now get "timestamp cat/pkg-version" and compare timestamps
# use cat/pkg to get all the timestamp's and get the latest version,
# useing the timestamp. It should be the one currently in use.
for pkg in $(< pkg_atom.lst); do
TS_empty="yes" ; T_newest="0" ; ALL_TS=""
# timestamp for matching pkg's
ALL_TS=$(awk '/'"$pkg"'/ {print $1}' emerge.lst)
# Now sort by newest,largest,timestamp
for T in $(echo $ALL_TS);do
# Checking timestamp age
if [ "$T_empty" == "yes" ]; then
T_newest=$T ; T_empty="no"
elif [ "$T" -gt "$T_newest" ]; then
T_newest=$T
fi
done
# Now find the newest merged cat/pkg useing the timestamp and
# put the matching cat/pkg-ver in cat_pkg.lst
awk '$1 ~ /'"$T_newest"'/ {print $2}' emerge.lst>>cat_pkg.lst
done
# Added -u to cut out double entries
cat_pkg=$(sort -u cat_pkg.lst)
if [ "$test" == "p" ]; then
echo "$cat_pkg"
elif [ "$test" == "d" ]; then
# Now make /var/db/pkg/$cat/pkg. Expanded $cat_pkg in a loop 10-1.
for cp in ${cat_pkg} ; do
mkdir -p /var/db/pkg/$cp
done
else echo "$pkg"
echo " And ow de ell id gya get ere"
fi
#clean up
rm cat_pkg.lst pkg_atom.lst emerge.lst unmerge.lst
localhost master # cd /var/db/pkg/hielvc wrote:Code: Select all
#!/bin/bash # hielvc 11-11-06 as usual use at ye own risk. It works for me but not # always for the right reason, right heavyjoost ;^) # An attempt at a /var/db/pkg recovwery tool useing /var/log/emerge.log # with the portage-2.1.2 appears not to be needed but you can use to see # pkg's built since date. # 11-15 set date_regx to default date april 1 2002 # 1-12-06 Added an unmerge filter, it helps to pick unmerged packages out # and keep sloted versions # empty pkg_atom.lst & tmp :>pkg_atom.lst ; :>cat_pkg.lst ; :>tmp date_regx="" ; day="" ; pkg="" usage(){ cat<<-END USAGE: rcv_pkg_db.sh [options] (optonal date=> Jul 7 2006) Run with "-p" for pretend. Output goes to screen. Use "-d" to do the deed, write to /var/db/pkg/ . If you did a world --emptytree recently then look through your emerge.log and find the date. Enter the date as Aug 13 2006. The script will then only use files from that date on. Opitons -p for pretend. Outputs to screen -d to populate /var/db/pkg/ END echo exit } # Added a usage, pretend and "really do the deed" if [ "$1" == "" ];then usage elif [ "$1" == "-p" ]; then test="p" elif [ "$1" == "-d" ]; then test="d" else usage fi # Added date fetching # Check # of agrcs if 2 then epoch time ? if [ $# -eq 1 ];then date_regx="1017648000" # april 1 2002 elif [ $# -eq 2 ];then date_regx="$1" else shift day="$@" date_regx="$(date -d "$day" +%s)" #convert to epoch time fi # the below gets a list of all pkgs merged and the time stamp >= date_regx # sample "1162267626 x11-misc/xscreensaver-5.01-r1" awk '/completed/ && !/Sync/ {print $1, $8}' /var/log/emerge.log|sed 's/://'| \ awk '$1 >= '"$date_regx"' {print $1, $2}'>emerge.lst # To get list of unmerged pkgs awk '/unmerge/ && !/Nothing/ {print $5}' /var/log/emerge.log >unmerge.lst # now remove the umerged for i in $(awk -F "/" '{print $2}' unmerge.lst);do grep -v "$i" emerge.lst>tmp;mv tmp emerge.lst done # Now get cat/pkg from list,and remove version and timestamp # Had get just pkg as cat/pkg was considered division 8-( awk '{print $2 }' emerge.lst |sed 's/-[0-9].*//'| \ awk -F / '{print $2}'|sort -u >pkg_atom.lst # Now get "timestamp cat/pkg-version" and compare timestamps # use cat/pkg to get all the timestamp's and get the latest version, # useing the timestamp. It should be the one currently in use. for pkg in $(< pkg_atom.lst); do TS_empty="yes" ; T_newest="0" ; ALL_TS="" # timestamp for matching pkg's ALL_TS=$(awk '/'"$pkg"'/ {print $1}' emerge.lst) # Now sort by newest,largest,timestamp for T in $(echo $ALL_TS);do # Checking timestamp age if [ "$T_empty" == "yes" ]; then T_newest=$T ; T_empty="no" elif [ "$T" -gt "$T_newest" ]; then T_newest=$T fi done # Now find the newest merged cat/pkg useing the timestamp and # put the matching cat/pkg-ver in cat_pkg.lst awk '$1 ~ /'"$T_newest"'/ {print $2}' emerge.lst>>cat_pkg.lst done # Added -u to cut out double entries cat_pkg=$(sort -u cat_pkg.lst) if [ "$test" == "p" ]; then echo "$cat_pkg" elif [ "$test" == "d" ]; then # Now make /var/db/pkg/$cat/pkg mkdir -p /var/db/pkg/$cat_pkg else echo "$pkg" echo " And ow de ell id yaa get ere" fi rm cat_pkg.lst pkg_atom.lst emerge.lst unmerge.lst
Code: Select all
localhost pkg # emerge -e system
Calculating system dependencies /Traceback (most recent call last):
File "/usr/bin/emerge", line 5254, in ?
retval = emerge_main()
File "/usr/bin/emerge", line 5249, in emerge_main
myopts, myaction, myfiles, spinner)
File "/usr/bin/emerge", line 4564, in action_build
if not mydepgraph.xcreate(myaction):
File "/usr/bin/emerge", line 2150, in xcreate
if not self.validate_blockers():
File "/usr/bin/emerge", line 1830, in validate_blockers
counter = long(vardb.aux_get(pkg, ["COUNTER"])[0])
ValueError: invalid literal for long():
localhost pkg #
Code: Select all
localhost pkg # emerge world -e
Calculating world dependencies |Traceback (most recent call last):
File "/usr/bin/emerge", line 5254, in ?
retval = emerge_main()
File "/usr/bin/emerge", line 5249, in emerge_main
myopts, myaction, myfiles, spinner)
File "/usr/bin/emerge", line 4564, in action_build
if not mydepgraph.xcreate(myaction):
File "/usr/bin/emerge", line 2150, in xcreate
if not self.validate_blockers():
File "/usr/bin/emerge", line 1830, in validate_blockers
counter = long(vardb.aux_get(pkg, ["COUNTER"])[0])
ValueError: invalid literal for long():
localhost pkg #
Code: Select all
localhost pkg # ls /var/db/pkg
app-admin app-mobilephone dev-java games-fps media-plugins net-ftp net-proxy sys-fs x11-drivers
app-arch app-office dev-lang gnome-base media-sound net-im net-wireless sys-kernel x11-libs
app-cdr app-portage dev-libs gnome-extra media-tv net-irc net-www sys-libs x11-misc
app-crypt app-shells dev-ml kde-base media-video net-libs perl-core sys-process x11-plugins
app-dicts app-text dev-perl kde-misc net-analyzer net-mail pkg_atom.lst tmp x11-proto
app-doc app-vim dev-php5 mail-filter net-dialup net-misc sci-libs virtual x11-terms
app-editors app-xemacs dev-python media-fonts net-dns net-nds sys-apps www-client x11-themes
app-i18n cat_pkg.lst dev-ruby media-gfx net-firewall net-p2p sys-boot x11-apps x11-wm
app-misc dev-db dev-util media-libs net-fs net-print sys-devel x11-base
localhost pkg #
Code: Select all
localhost pkg # emerge -e system
Calculating system dependencies /Traceback (most recent call last):
File "/usr/bin/emerge", line 5254, in ?
retval = emerge_main()
File "/usr/bin/emerge", line 5249, in emerge_main
myopts, myaction, myfiles, spinner)
File "/usr/bin/emerge", line 4564, in action_build
if not mydepgraph.xcreate(myaction):
File "/usr/bin/emerge", line 2150, in xcreate
if not self.validate_blockers():
File "/usr/bin/emerge", line 1830, in validate_blockers
counter = long(vardb.aux_get(pkg, ["COUNTER"])[0])
ValueError: invalid literal for long():
localhost pkg #
Code: Select all
localhost master # ls /var/db/pkg/app-admin/perl-cleaner-1.01
ASFLAGS CDEPEND COUNTER DEPEND EXTRA_EMAKE LDFLAGS PDEPEND PROVIDE USE
CATEGORY CFLAGS CTARGET environment.bz2 FEATURES LIBCFLAGS perl-cleaner-1.01.ebuild RDEPEND
CBUILD CHOST CXX EXTRA_ECONF INHERITED LIBCXXFLAGS PF RESTRICT
CC CONTENTS CXXFLAGS EXTRA_EINSTALL IUSE LICENSE PKGUSE SLOT
localhost master #
Code: Select all
localhost master # ls /var/db/pkg/app-admin/perl-cleaner-1.04.3
localhost master #
Code: Select all
#!/bin/bash
mkdir -p /var/db/pkg
cd /var/db/pkg
# empty pkg_atom.lst & tmp
:>pkg_atom.lst ; :>cat_pkg.lst ; :>tmp
date_regx="" ; day="" ; pkg=""
usage(){
cat<<-END
USAGE: rcv_pkg_db_mod.sh [options] (optonal date=> Jul 7 2006)
Run with "-p" for pretend. Output goes to screen
Use "-d" to do the deed, write to /var/db/pkg/ . If
you did a world --emptytree recently then look through
your emerge.log and find the date. Enter the date as
Aug 13 2006. The script will then only use files from
that date on.
Opitons
-p for pretend. Outputs to screen
-d to populate /var/db/pkg/
END
echo
exit
}
# Added a usage, pretend and "really do the deed"
if [ "$1" == "" ];then
usage
elif [ "$1" == "-p" ]; then
test="p"
elif [ "$1" == "-d" ]; then
test="d"
else
usage
fi
# Added date fetching
# Check # of agrcs if 2 then epoch time ?
if [ $# -eq 1 ];then
date_regx="1017648000" # april 1 2002
elif [ $# -eq 2 ];then
date_regx="$1"
else
shift
day="$@"
date_regx="$(date -d "$day" +%s)" #convert to epoch time
fi
echo " Recovery pkg dbase begin..."
awk '/completed/ && !/Sync/ {print $1, $8}' /var/log/emerge.log|sed 's/://'| awk '$1 >= '"$date_regx"' {print $1, $2}'>emerge.lst
echo "step1..."
awk '/unmerge/ && !/Nothing/ {print $1, $5}' /var/log/emerge.log |sed 's/://'>unmerge.lst
cat unmerge.lst |grep / > tmpu
mv tmpu unmerge.lst
awk '{print $2}' emerge.lst > emerge.opt
awk '{print $2}' unmerge.lst > unmerge.opt
sort -u emerge.opt > emerge.optim
sort -u unmerge.opt > unmerge.optim
cp emerge.optim emerge.backup
cp unmerge.optim unmerge.backup
cp emerge.lst emergelst.backup
cp unmerge.lst unmergelst.backup
for i in $(awk '{print}' unmerge.optim);do
grep -vx "$i" emerge.optim>tmp;mv tmp emerge.optim #optim1 �� �������� � optim
done
cp emerge.optim emerge.optim1
cp emerge.backup emerge.optim
for i in $(awk '{print}' emerge.optim1);do
grep -vx "$i" emerge.optim>tmp;mv tmp emerge.optim #optim2 == unmerge
done
cp emerge.optim emerge.optim2
cp emerge.backup emerge.optim
echo "step2..."
for i in $(awk '{print}' emerge.optim2);do
grep -vx "$i" unmerge.optim>tmp;mv tmp unmerge.optim #unmerge.optim1
done
cp unmerge.optim unmerge.optim1
cp unmerge.backup unmerge.optim
for i in $(awk '{print}' unmerge.optim1);do
grep -vx "$i" unmerge.optim>tmp;mv tmp unmerge.optim #unmerge.optim2 ��� emerge
done
cp unmerge.optim unmerge.optim2
cp unmerge.backup unmerge.optim
cp emerge.optim2 emerge.backup2
echo "step3..."
for i in $(awk '{print}' unmerge.optim2);do
grep -vx "$i" emerge.optim2 >tmp;mv tmp emerge.optim2 #unmerge.optim2 ��� emerge
done
cp emerge.optim2 unmerge.optim2
cp emerge.backup2 emerge.optim2
for i in $(awk '{print}' emerge.optim2);do
grep -v "$i$" unmerge.lst>tmp;mv tmp unmerge.lst #unmerge.lst1 ��� ����� ���� ���������� (��� �� ��������������� �������)!!!!!!!!
done
cp unmerge.lst unmerge.lst1
cp unmergelst.backup unmerge.lst
echo "step4..."
for i in $(awk '{print}' unmerge.lst1);do
grep -v "$i$" unmerge.lst>tmp;mv tmp unmerge.lst #unmerge.lst2 ��� emerge
done
cp unmerge.lst unmerge.lst2
cp unmergelst.backup unmerge.lst
for i in $(awk '{print}' emerge.optim2);do
grep -v "$i$" emerge.lst>tmp;mv tmp emerge.lst #emerge.lst1
done
cp emerge.lst emerge.lst1
cp emergelst.backup emerge.lst
for i in $(awk '{print}' emerge.lst1);do
grep -v "$i$" emerge.lst>tmp;mv tmp emerge.lst #emerge.lst2
done
cp emerge.lst emerge.lst2
cp emergelst.backup emerge.lst
kol=$(cat emerge.lst2 -n |awk '{print $1}'|tail --lines=1)
echo "step5..."
for ix in `seq $kol -1 1`;
do
for i in $(awk 'NR=='$ix' {print}' emerge.optim2);do
grep "$i$" emerge.lst2 >>tmp
grep "$i$" unmerge.lst2 >>tmp1
done
done
kol1=$(cat tmp -n |awk '{print $1}'|tail --lines=1)
for ix in `seq $kol1 -1 1`;do
i=$(awk 'NR=='$ix' {print}' tmp) #��������� � ����������
echo "$i" >>tmp0
done
kol2=$(cat tmp1 -n |awk '{print $1}'|tail --lines=1)
for ix in `seq $kol2 -1 1`;do
i=$(awk 'NR=='$ix' {print}' tmp1) #��������� � ����������
echo "$i" >>tmp01
done
echo "step6..."
kol3=$(cat tmp0 -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 1 $kol3`;
do
for i in $(awk 'NR=='$ix' {print}' emerge.optim2);do
grep "$i$" tmp0 -m 1 >>tmp3 #emerge
grep "$i$" tmp01 -m 1 >>tmp4
done
done
kol4=$(cat tmp3 -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 $kol4`;
do
a=$(awk 'NR=='$ix' {print $1}' tmp3)
b=$(awk 'NR=='$ix' {print $1}' tmp4)
if [ $a -gt $b ]
then
for i in $(awk 'NR=='$ix' {print}' tmp3);do
grep "$i$" tmp3 >>tmp7 #������ ������� ���� � �������, �.� ������� ����� ��������
done
fi
done
awk '{print $2}' tmp7 >em
cat emerge.optim1 > cat_pkg.lst
cat em >> cat_pkg.lst
awk '{print $0"/COUNTER"}' cat_pkg.lst > cat_pkg1.lst
`sed 's/COUNTER/SLOT/' cat_pkg1.lst > cat_pkg2.lst`
cat_pkg=$(sort -u cat_pkg.lst)
cat_pkg1=$(sort -u cat_pkg1.lst)
cat_pkg2=$(sort -u cat_pkg2.lst)
if [ "$test" == "p" ]; then
echo "Printing packets..."
echo "$cat_pkg"
cd /var/db/pkg
dir -p1 /var/db/pkg |grep -v / >ex
sed 's/^/rm \/var\/db\/pkg\//' ex >ex1
echo "rm /var/db/pkg/ex1" >>ex1
echo "rm /var/db/pkg/ex" >>ex1
chmod +x ex1
./ex1
elif [ "$test" == "d" ]; then
mkdir -p /var/db/pkg/$cat_pkg
touch /var/db/pkg/$cat_pkg1
touch /var/db/pkg/$cat_pkg2
echo " Write dbase folders OK"
else echo "$pkg"
echo " Write dbase folders OK"
fi
if [ "$test" == "p" ]; then
echo "end"
elif [ "$test" == "d" ]; then
`find ./ -name COUNTER > 5`
`sed 's/^/echo "1" > /' 5 > 55`
`chmod +x 55 && ./55`
`find ./ -name SLOT > 51`
`sed 's/^/echo "0" > /' 51 > 551`
`chmod +x 551 && ./551`
echo " Analize /usr/portage... This may take some times"
for i in /usr/portage/*/*/*;
do
grep -L 'SLOT' $i >>12345
done
cat 12345|grep -v 'dev-db/mysql' >123456
cat 123456|grep -v 'x11-base/xorg-server' >12345
#new
for i in /usr/portage/*/*/*;
do
grep -l 'SLOT="${' $i >>12345
done
#new
cat 12345| grep ebuild >1234
cat 1234|awk -F "/" '{print $4"/"$5}'|sort -u >1
echo "step7..."
kol5=$(cat 1 -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 1 $kol5`;
do
for i in $(awk 'NR=='$ix' {print}' 1);do
grep "$i" cat_pkg.lst >>90 #�������� ������ ������, �� ������ � ������� ��� ��� SLOT
done
done
#cat default | awk -F "-0" '{print $1}'|awk -F "-1" '{print $1}'| awk -F "-2" '{print $1}'|awk -F "-3" '{print $1}' | awk -F "-4" '{print $1}'|awk -F "-5" '{print $1}' | awk -F "-6" '{print $1}'|awk -F "-7" '{print $1}' | awk -F "-8" '{print $1}'|awk -F "-9" '{print $1}' > 901 #��� ����� ��� ������
cat 90|grep -v 'media-fonts/font-adobe-[0-9]' > 90a
cat 90a | awk -F "-0" '{print $1}'|awk -F "-1" '{print $1}'| awk -F "-2" '{print $1}'|awk -F "-3" '{print $1}' | awk -F "-4" '{print $1}'|awk -F "-5" '{print $1}' | awk -F "-6" '{print $1}'|awk -F "-7" '{print $1}' | awk -F "-8" '{print $1}'|awk -F "-9" '{print $1}' >901a
cat 90|grep 'media-fonts/font-adobe-[0-9]'| awk -F "i-" '{print $1"i"}' >>901a
#echo "sys-devel/automake" >>901a
cat 90|grep -v 'media-fonts/font-adobe-[0-9]' > 90a
cat 90|grep 'media-fonts/font-adobe-[0-9]' >>90a
kol6=$(cat 901a -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 1 $kol6`;
do
cat 901a|awk 'NR=='$ix' {print}'|sed 's/[/]/[\/]/' >>902 #������� x11-proto[/]printproto
done
for ix1 in `seq 1 1 211`;
do
w=$(cat 902|awk 'NR=='$ix1' {print}')
sed 's/'$w'-//' 90a|awk 'NR=='$ix1' {print}' >> a4 #������ ������
done
echo "step8..."
kol7=$(cat a4 -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 1 $kol7`;
do
awk -F "." 'NR=='$ix' {print $1"."$2}' a4|awk -F "-" '{print $1}'|awk -F "_" '{print $1}'|sed 's/\.$//' >>vers
done
kol8=$(cat 90a -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 1 $kol8`;
do
w=$(cat vers |awk 'NR=='$ix' {print}')
w1=$(cat 90a |awk 'NR=='$ix' {print $0"/SLOT"}')
w2=$(cat 90a |awk 'NR=='$ix' {print $0"/SLOT1"}')
echo $w >$w1
sed '/^$/d' $w1 > $w2
rm $w1
mv $w2 $w1
done
echo " Analize /usr/portage... This may take some times"
echo -e "SLOT=\"1\"\nSLOT=\"2\"\nSLOT=\"3\"\nSLOT=\"4\"\nSLOT=\"5\"\nSLOT=\"6\"\nSLOT=\"7\"\nSLOT=\"8\"\nSLOT=\"9\"" > search
for i in /usr/portage/*/*/*;
do
grep -lf search $i >>opa
done
cat opa| grep ebuild >opa1
cat opa1|awk -F "/" '{print $4"/"$5}'|sort -u >h1
echo "step9..."
kol9=$(cat h1 -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 1 $kol9`;
do
for i in $(awk 'NR=='$ix' {print}' h1);do
grep "$i" cat_pkg.lst >>sup1 #�������� ������ ������, �� ������ � ������� ��� est' SLOT="2"
done
done
cat sup1|grep -v 'media-fonts/font-adobe-[0-9]' > sup1a
cat sup1a | awk -F "-0" '{print $1}'|awk -F "-1" '{print $1}'| awk -F "-2" '{print $1}'|awk -F "-3" '{print $1}' | awk -F "-4" '{print $1}'|awk -F "-5" '{print $1}' | awk -F "-6" '{print $1}'|awk -F "-7" '{print $1}' | awk -F "-8" '{print $1}'|awk -F "-9" '{print $1}' >sup11a
cat sup1|grep 'media-fonts/font-adobe-[0-9]'| awk -F "i-" '{print $1"i"}' >>sup11a
#echo "sys-devel/automake" >>901a
cat sup1|grep -v 'media-fonts/font-adobe-[0-9]' > sup1a
cat sup1|grep 'media-fonts/font-adobe-[0-9]' >>sup1a
kol10=$(cat sup11a -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 1 $kol10`;
do
cat sup11a|awk 'NR=='$ix' {print}'|sed 's/[/]/[\/]/' >>sup22 #������� x11-proto[/]printproto
done
for ix1 in `seq 1 1 211`;
do
w=$(cat sup22|awk 'NR=='$ix1' {print}')
sed 's/'$w'-//' sup1a|awk 'NR=='$ix1' {print}' >> hok #������ ������
done
#cat h1 | awk -F "." '{print $1}'| awk -F "-" '{print $2}' > hok #versii files
echo "step10..."
kol11=$(cat hok -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 1 $kol11`;
do
awk -F "." 'NR=='$ix' {print $1}' hok|awk -F "-" '{print $1}'|awk -F "_" '{print $1}'|sed 's/\.$//' >>hokvers
done
kol12=$(cat sup1a -n |awk '{print $1}'|tail --lines=1)
for ix in `seq 1 1 $kol12`;
do
w=$(cat hokvers |awk 'NR=='$ix' {print}')
w1=$(cat sup1a |awk 'NR=='$ix' {print $0"/SLOT"}')
w2=$(cat sup1a |awk 'NR=='$ix' {print $0"/SLOT1"}')
echo $w >$w1
sed '/^$/d' $w1 > $w2
rm $w1
mv $w2 $w1
done
cd /var/db/pkg
dir -p1 /var/db/pkg |grep -v / >ex
sed 's/^/rm \/var\/db\/pkg\//' ex >ex1
echo "rm /var/db/pkg/ex1" >>ex1
chmod +x ex1
./ex1
echo " Recovery pkg dbase end OK!"
echo " * Please run \"emaint --check world\" and make by hand /var/db/pkg/* lack packets"
echo " * run \"emerge -pve world|grep NS\" and check this packets, if you think that it is not true, fix it by analize /usr/portage and write true info in /var/db/pkg/<*>/<doubt packet>/SLOT, theses packets not many :)"
echo " * run \"equery list --duplicates\" this show info packets in slot, not spare rebuild this packets"
echo " * if you get message about block packets, check /var/db/pkg/<*>/<*>/SLOT and fix it"
echo " * run \"emerge -e system\""
echo " * run \"emerge -e world\""
fi
# emerge --info
Portage 2.1.2 (default-linux/x86/2006.1/desktop, gcc-4.1.1, glibc-2.4-r4, 2.6.18-gentoo-r6 i686)
=================================================================
Code: Select all
#!/bin/sh
find /var/db/pkg/*/*/SLOT > 1
sed 's/SLOT/CONTENTS/' 1 >2
w=$(cat 2)
touch $w
Code: Select all
Traceback (most recent call last):
File "/usr/bin/emerge", line 5270, in ?
retval = emerge_main()
File "/usr/bin/emerge", line 5265, in emerge_main
myopts, myaction, myfiles, spinner)
File "/usr/bin/emerge", line 4732, in action_build
retval = mergetask.merge(pkglist, favorites, mtimedb)
File "/usr/bin/emerge", line 3068, in merge
"clean", [xsplit[0]], ldpath_mtimes)
File "/usr/bin/emerge", line 3325, in unmerge
slotmap[myslot][localtree.dbapi.cpv_counter(mypkg)]=mypkg
File "/usr/lib/portage/pym/portage.py", line 4920, in cpv_counter
return long(self.aux_get(mycpv, ["COUNTER"])[0])
ValueError: invalid literal for long():
Code: Select all
# cat /var/db/pkg/*/*/COUNTER
1
1
1
1
1
1
1
........