помогите найти баг в скрипте обновления бинарников
Добавлено: 2007-11-09 11:36:03
Доброго дня Уважаемым.
Помогите плз. найти багу в скрипте.
Вобщем все просто должно быть по замыслу -
1) печатаем хедер Update {name}..............................
2) если есть бекап {name}.old - удаляем, если есть {name} - делаем его {name}.old
3) wget'ом грузим новые бинарники
4) если все удачно - удаляем {name}.old, ставим овнера и права.
если неудачно - из {name}.old востанавливаем старый бинарник
5) печатаем хедер [ DONE | FAIL ]
/usr - read only.. соответственно вначале маунтим -uw в конце -ur
на постоянные
RESP=$( .............. 2>&1 ) ;
не смотреть. По заказу ничего кроме пунктов 1) и 5) на консоль выводится не должно под страхом смертной казни..
вот..
Теперь проблемы:
работа скрипта всегда завершается варнингом
после работы скрипта 'fsck /usr' выдает во множестве такое
эту конструкцию для удаленного обновления бинарников использую давно и раньше проблем небыло.
небыло библиотек. Посему есть подозрение что бага происходит ввиду того что обновляемые библиотеки уже загружены в память и чето там не стыкуется.
ldconfig -r грит что либы таки загружены.. тока как их предварительно выгрузить х.з.
man ldconfig ниче не грит за выгрузку
Присоветуйте плз. куда рыть и чито курить.
Заранее спасибо.
Помогите плз. найти багу в скрипте.
Вобщем все просто должно быть по замыслу -
1) печатаем хедер Update {name}..............................
2) если есть бекап {name}.old - удаляем, если есть {name} - делаем его {name}.old
3) wget'ом грузим новые бинарники
4) если все удачно - удаляем {name}.old, ставим овнера и права.
если неудачно - из {name}.old востанавливаем старый бинарник
5) печатаем хедер [ DONE | FAIL ]
/usr - read only.. соответственно вначале маунтим -uw в конце -ur
на постоянные
RESP=$( .............. 2>&1 ) ;
не смотреть. По заказу ничего кроме пунктов 1) и 5) на консоль выводится не должно под страхом смертной казни..
Код: Выделить всё
expr='/bin/expr' ;
cp='/bin/cp -R -p' ;
rm='/bin/rm -f' ;
echo='/bin/echo' ;
chown='/usr/sbin/chown' ;
chmod='/bin/chmod' ;
grep='/usr/bin/grep' ;
awk='/usr/bin/awk' ;
printf='/usr/bin/printf' ;
mount='/sbin/mount' ;
wget='/usr/bin/wget' ;
U_SRV='192.168.221.4' ;
U_PATH='/update/zebra' ;
U_USR='caks' ;
U_PAS='update' ;
LocalExePath='/usr/local/bin' ;
LocalLibPath='/usr/local/lib' ;
LocalEtcPath='/tmp/etc' ;
Services=" zebra
ospfd
hdlcd
" ;
Libraries=" libzebra.a
libzebra.lai
libzebra.so.0
libzebra.la
libospf.a
libospf.lai
libospf.so.0
libospf.la
" ;
R_STR="";
#------------------------------------------------------------------------------
PrintDotHeader()
{
S_HEAD="$1" ;
STR_LEN=${#S_HEAD} ;
i="$STR_LEN";
while [ "$i" -lt 50 ]
do
S_HEAD="$S_HEAD""." ;
i=`${expr} $i + 1` ;
done ;
S_HEAD="$S_HEAD"" " ;
${echo} -n "$S_HEAD" ;
return 0 ;
}
PreGetAction()
{
File="$1" ;
if [ -f "$File" ]; then
if [ -f "$File.old" ]; then
RESP=$( ${rm} "$File.old" ) ;
fi ;
RESP=$( ${cp} "$File" "$File.old" ) ;
RESP=$( ${rm} "$File" ) ;
fi ;
return 0 ;
}
PostGetAction()
{
File="$1" ;
if [ -f "$File" ]; then
RESP=$( ${chmod} 0555 "$File" ) ;
RESP=$( ${chown} caks "$File" ) ;
if [ -f "$File.old" ]; then
RESP=$( ${rm} "$File.old" ) ;
fi ;
return 0 ;
else
if [ -f "$File.old" ]; then
RESP=$( ${cp} "$File.old" "$File" ) ;
RESP=$( ${rm} "$File.old" ) ;
fi ;
return 1 ;
fi ;
}
${mount} -uw /usr ;
${echo} "UPDATING SERVICES:"
for Item in ${Services}
do
R_STR="[ FAIL ]" ;
PrintDotHeader "Update $Item" ;
PreGetAction "$LocalExePath/$Item" ;
RESP=$( ${wget} -P"$LocalExePath" --ftp-user="$U_USR" --ftp-password="$U_PAS" --no-proxy ftp://"$U_SRV"/"$U_PATH"/"$Item" 2>&1 ) ;
PostGetAction "$LocalExePath/$Item" ;
if [ "$?" = "0" ]; then R_STR="[ DONE ]" ;
fi ;
echo $R_STR ;
done ;
${echo} "UPDATING LIBRARIES:"
for Item in ${Libraries}
do
R_STR="[ FAIL ]" ;
PrintDotHeader "Update $Item" ;
PreGetAction "$LocalLibPath/$Item" ;
RESP=$( ${wget} -P"$LocalLibPath" --ftp-user="$U_USR" --ftp-password="$U_PAS" --no-proxy ftp://"$U_SRV"/"$U_PATH"/"$Item" 2>&1 ) ;
PostGetAction "$LocalLibPath/$Item" ;
if [ "$?" = "0" ]; then R_STR="[ DONE ]" ;
fi ;
echo $R_STR ;
done ;
${mount} -ur /usr ;
Теперь проблемы:
работа скрипта всегда завершается варнингом
Код: Выделить всё
softdep_waitidle: Failed to flush worklist for 0xc2558a60
Код: Выделить всё
UNREF FILE I=8132 OWNER=caks MODE=100555
SIZE=202427 MTIME=Jan 1 02:09 2003
небыло библиотек. Посему есть подозрение что бага происходит ввиду того что обновляемые библиотеки уже загружены в память и чето там не стыкуется.
ldconfig -r грит что либы таки загружены.. тока как их предварительно выгрузить х.з.
man ldconfig ниче не грит за выгрузку
Присоветуйте плз. куда рыть и чито курить.
Заранее спасибо.