Oi lista.
Fiz um slackbuild pro kernel do linux, que atende bem as minhas
necessidades. Ele faz tudo o que eu preciso, meu unico trabalho eh
alterar alguns parametros quando aparece nova versao para download.
Esse slackbuild adiciona ao sistema alguns scripts, que automatizam o
download, configuracao, compilacao e instalacao dos modulos cdfs,
svgalib_helper e os modulos do vmware.
O doinst.sh que o slackbuild gera executa esses scripts e mais algumas
acoes, quando da instalacao do pacote. Vou coloca-lo abaixo, para terem
uma nocao. As linhas estao mal quebradas, mas nao vem ao caso.
O problema eh que o doinst eh executados DUAS vezes, quando uso o
comando upgradepkg. Uma quando ele faz a pre-instalacao, e outra quando
instala realmente.
Isso eh um bug ou uma caracteristica do upgradepkg? Fiz um script que
varre uma lista de nomes de pacotes, que podem ou nao estar instalados,
e, se estiverem instalados, podem ou nao estar desatualizados.
Entao, uso o comando 'upgradepkg --install-new', para nao precisar
primeiro testar se o pacote ja se encontra instalado para entao decidir
se uso o comando installpkg ou upgradepkg.
Mas, esse comportamento do upgradepkg me incomoda, ja que uma das
operacoes do doinst eh descompactar o fonte do kernel, uma operacao meio
lenta, ja que o arquivo eh pego por nfs.
Uma solucao seria fazer o doinst detectar se esta sendo executado na
instalacao ou na pre-instalacao, e entao executar ou nao suas acoes, mas
isso me parece funcao do gerenciador de pacotes, nao do doinst.
Alguem tem alguma informacao sobre isso? Se for um bug, posso tentar
resolver, e mandar a solucao para o responsavel pelo pacote pkgtools.
[]'s
-- BOF ----------------------------------------
( cd lib/modules/2.6.24.3.ark1 ; rm -rf source )
( cd lib/modules/2.6.24.3.ark1 ; ln -sf /usr/src/linux-2.6.24.3 source )
( cd lib/modules/2.6.24.3.ark1 ; rm -rf build )
( cd lib/modules/2.6.24.3.ark1 ; ln -sf /usr/src/linux-2.6.24.3 build )
config()
# usage: config $ROOT/<path_to>/<config_file>.new
{
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
if [ ! -r $OLD ]
# if there's no config file by that name
then
mv $NEW $OLD # mv it over
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]
# else, if new config is equal to old config
then
rm $NEW # toss the redundant copy
else
: # otherwise, leave the new copy for the admin to consider
fi
}
if ! df | grep -q /proc
then
mkdir -p /proc
mount -t proc proc /proc
UMOUNT=1
fi
# Constants in boot managers config files
parts=$(sfdisk -l 2> /dev/null | grep ^/dev | sed "s/*//;s/ */\t/g")
boot=$(echo "$parts" | cut -f1 | awk -F[0-9] '{print$1}' | sort | uniq
| head -1)
lroot=$(cat $ROOT/etc/fstab | grep -E "[[:space:]]/[[:space:]]" | awk
-F[[:space:]] '{print$1}')
wroot=$(echo "$parts" | cut -f1,6 | grep c | sort | head -1 | cut -f1)
lin=$(echo "$lroot" | cut -d/ -f3)
win=$(echo "$wroot" | cut -d/ -f3)
if [ ! "$wroot" ]
then
wroot="_WROOT_"
win="_WIN_"
fi
sed_code="
s|_BOOT_|$boot|
s|_LROOT_|$lroot|
s|_WROOT_|$wroot|
s|_LIN_|$lin|
s|_WIN_|$win|
"
for i in etc/lilo.conf boot/grub/menu.lst boot/grub/menu/advanced.lst
do
cat $ROOT/$i.new | sed "$sed_code" >| $ROOT/$i.new.tmp
mv $ROOT/$i.new.tmp $ROOT/$i.new
done
# Default kernel in lilo.conf
cf=$ROOT/etc/lilo.conf
er1="[[:space:]]*"
er2="default$er1=$er1"
def=$(cat $cf | grep -E "^$er1$er2" | tr -d [:space:] | awk
-F[=#] '{print$2}')
new_def=$(cat $cf.new | grep -E "^$er1$er2" | tr -d [:space:] | awk
-F[=#] '{print$2}')
sed_code="
s|^$er1\($er2$new_def\b\)|#\1|
s|^$er1#\($er1$er2$def\b\)| \1|
"
if [ "$new_def" != "$def" ]
then
cat $cf.new | sed "$sed_code" >| $cf.new.tmp
mv $cf.new.tmp $cf.new
fi
# TODO: Default kernel in menu.lst
# Default mode for rc.bg
rc=$ROOT/etc/rc.d/rc.bg
[ ! -e $rc -o -x $rc ] && chmod +x $rc.new
config $rc.new
ignoreeof=0
chroot $ROOT/ << EOS
KERNEL=2.6.24.3.ark1 mkprepare
KERNEL=2.6.24.3.ark1 mkcdfs -nodepmod
KERNEL=2.6.24.3.ark1 mksvgalib_helper -nodepmod
depmod -ae -F /boot/kernel/2.6/24.3.ark1/System.map -b / -r 2.6.24.3.ark1
EOS
if [ "" = 1 ]
then
umount /proc
fi
unset i parts boot lroot wroot lin win sed_code UMOUNT
-- EOF ----------------------------------------
--
------------------------ __o [EMAIL PROTECTED] ----.-----------
[EMAIL PROTECTED] Roberto Bagatini _`\<, www.ceat.net/~arkanon \
-=---=---==---=---=- (_)/(_) Phone +55 51 3748 7000 `--------
Lajeado - RS - Brasil --------- ICQ 34 789 30 - LinuxUser 102.514
---------------------------------------------------------------------
--~--~---------~--~----~------------~-------~--~----~
GUS-BR - Grupo de Usuários de Slackware Brasil
http://www.slackwarebrasil.org/
http://groups.google.com/group/slack-users-br
-~----------~----~----~----~------~----~------~--~---