View previous topic :: View next topic |
Author |
Message |
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Tue Feb 07, 2006 11:56 pm Post subject: |
|
|
nuova versione. Dovrebbe essere semidecente, ora
L'ho aggiornata nell'ultimo post.
Coda |
|
Back to top |
|
|
.:chrome:. Advocate
Joined: 19 Feb 2005 Posts: 4588 Location: Brescia, Italy
|
Posted: Wed Mar 08, 2006 5:12 pm Post subject: |
|
|
credo di avere trovato un difettino:
Code: | forcekeymask -fm =x11-base/xorg-x11-7.0-r1
--- Invalid atom in /etc/portage/package.unmask: x11-base/xorg-x11 # required by x11-base/xorg-x11-7.0-r1
* Please Wait...
* x11-base/xorg-x11 [HARD]
* x11-base/xorg-x11 [HARD]
* x11-base/xorg-x11 [HARD]
* x11-base/xorg-x11 [HARD]
* x11-base/xorg-x11 [HARD]
* x11-base/xorg-x11 [HARD]
* x11-base/xorg-x11 [HARD]
* x11-base/xorg-x11 [HARD]
* x11-base/xorg-x11 [HARD]
* x11-base/xorg-x11 [HARD] |
e così via... fino al fatidico ^C |
|
Back to top |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Wed Mar 08, 2006 6:17 pm Post subject: |
|
|
si', a quanto pare dentro il file package.unmask (quello per gl'HM) non é possibile mettere nemmeno un commento dopo la riga.
ho rimodificato il file nel post prova con questa nuova versione.
Coda |
|
Back to top |
|
|
Luca89 Advocate
Joined: 27 Apr 2005 Posts: 2107 Location: Agrigento (Italy)
|
Posted: Wed Mar 08, 2006 7:57 pm Post subject: |
|
|
Ho notato all'inizio queste righe qua:
Code: | emerge --info | grep '="' > /etc/portinfo
source /etc/portinfo
|
Se è un file che rigeneri ogni volta non è meglio metterlo in /tmp ? Non credo sia necessario tenere spazzatura in /etc. Inoltre per quanto riguarda il keyword maske non è necessario aggiungere "~x86" in package.keywords, se portage non trova nulla assume direttamente "~arch". Quindi basta metetre il nome del pacchetto e basta.
Code: | echo "$CLEAN_NAME ~$ACCEPT_KEYWORDS" >> /etc/portage/package.keywords "# required by $REQUIRED_BY"
ACTION_STRING=$ACTION_STRING$YELLOW"[KEYWORD]"$NORMAL
|
Il requiredby non va inserito nel file? quindi dovrebbe essere:
Code: | echo "$CLEAN_NAME # required by $REQUIRED_BY" >> /etc/portage/package.keywords
ACTION_STRING=$ACTION_STRING$YELLOW"[KEYWORD]"$NORMAL
|
Ho tolto anche l'accept_keywords perchè come ho detto sopra non serve se stai smascherando con ~arch. _________________ Running Fast! |
|
Back to top |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Wed Mar 08, 2006 8:41 pm Post subject: |
|
|
Luca89 wrote: | Ho notato all'inizio queste righe qua:
Code: | emerge --info | grep '="' > /etc/portinfo
source /etc/portinfo
|
Se è un file che rigeneri ogni volta non è meglio metterlo in /tmp ? Non credo sia necessario tenere spazzatura in /etc. Inoltre per quanto riguarda il keyword maske non è necessario aggiungere "~x86" in package.keywords, se portage non trova nulla assume direttamente "~arch". Quindi basta metetre il nome del pacchetto e basta.
|
l'ho messo in /etc/ perché é un file di configrazione, e lo rigenero ogni volta perché potresti aver modificato alcune variabili in make.conf tra un uso e l'altro. Resta che puoi metterlo dove ti pare
Per quel che riguarda ~x86 é un retaggio della versione scritta da xchris e fedeliallalinea... dovresti chiedere a loro
Quote: | Il requiredby non va inserito nel file? |
t'assicuro che anche scritto cosi' il required by finisce come commento dentro il file. Anche qui, liberissimo di modificarlo
Coda |
|
Back to top |
|
|
.:chrome:. Advocate
Joined: 19 Feb 2005 Posts: 4588 Location: Brescia, Italy
|
Posted: Wed Mar 08, 2006 10:32 pm Post subject: |
|
|
io lo metterei in /usr/local/etc |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4809 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Fri Mar 17, 2006 5:40 pm Post subject: |
|
|
Ho avuto un piccolo problemino:
Code: |
s939 ~ # forcekeymask -fm x11-libs/libXfont
/usr/local/bin/forcekeymask: line 99: [: amd64: binary operator expected
* Please Wait...
* x11-proto/fontsproto [HARD]
* x11-libs/libfontenc [HARD]
* x11-proto/fontcacheproto [HARD]
* x11-libs/xtrans [HARD]
* Your ebuild is emergeable!
|
Alla fine, comunque, il programma ha funzioanto correttamente.
Ma come mai quel messaggio di errore all'inizio? _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
Luca89 Advocate
Joined: 27 Apr 2005 Posts: 2107 Location: Agrigento (Italy)
|
Posted: Fri Mar 17, 2006 8:41 pm Post subject: |
|
|
La riga 99 è questa: Code: | [ -s $ACCEPT_KEYWORDS ] && echo "Problem with your profile. No ARCH variable present!" && exit
|
Modificala in:
Code: | [ -s "$ACCEPT_KEYWORDS" ] && echo "Problem with your profile. No ARCH variable present!" && exit
|
_________________ Running Fast! |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4809 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sat Mar 18, 2006 6:16 pm Post subject: |
|
|
Luca89 wrote: | La riga 99 è questa: Code: | [ -s $ACCEPT_KEYWORDS ] && echo "Problem with your profile. No ARCH variable present!" && exit
|
Modificala in:
Code: | [ -s "$ACCEPT_KEYWORDS" ] && echo "Problem with your profile. No ARCH variable present!" && exit
|
|
Thx. cosa può fare una virgoletta! _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4809 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sat Mar 18, 2006 6:33 pm Post subject: |
|
|
Coda. Mi meraviglio di te.
Il tuo programmino ha una simpatia spiccata per i caratteri proprietari:
Code: |
s939 ~ # forcekeymask -fm =x11-base/xorg-x11-7.0-r1
* Please Wait...
* x11-libs/libXft [HARD]
* x11-proto/fixesproto [HARD]
* x11-drivers/xf86-input-summa [HARD]
* x11-drivers/xf86-video-vga [HARD]
* x11-drivers/xf86-input-elo2300 [HARD]
* x11-drivers/xf86-video-vmware [HARD]
* x11-drivers/xf86-input-elographics [HARD]
* x11-drivers/xf86-input-jamstudio [HARD]
* x11-drivers/xf86-video-s3virge [HARD]
* x11-drivers/xf86-input-magictouch [HARD]
* x11-drivers/xf86-input-palmax [HARD]
* x11-drivers/xf86-input-dynapro [HARD]
* x11-libs/libXcomposite [HARD]
* x11-libs/libXfixes [HARD]
* x11-drivers/xf86-video-glint [HARD]
* x11-drivers/xf86-input-ur98 [HARD]
* x11-drivers/xf86-video-neomagic [HARD]
* x11-drivers/xf86-video-cirrus [HARD]
* x11-drivers/xf86-input-evdev [HARD]
* media-fonts/font-bitstream-type1 [HARD]
* x11-drivers/xf86-video-sisusb [HARD]
* x11-drivers/xf86-video-vesa [HARD]
* x11-drivers/xf86-video-tga [HARD]
* x11-drivers/xf86-input-citron [HARD]
* media-fonts/font-adobe [HARD]
* media-fonts/font-adobe [HARD]
* media-fonts/font-adobe [HARD]
* media-fonts/font-adobe [HARD]
* media-fonts/font-adobe [HARD]
* media-fonts/font-adobe [HARD]
* media-fonts/font-adobe [HARD]
* media-fonts/font-adobe [HARD]
* media-fonts/font-adobe [HARD]
* media-fonts/font-adobe [HARD]
[taglio ... (pietoso)]
|
Cosa vuoi dire in tua discolpa?
Probabilmente c'è un problema con la sintassi troppo complessa di quei pacchetti.
Infatti, il paccehtto che dovrebbe scrivere sarebbe:
Code: |
s939 ~ # emerge -pv xorg-x11
These are the packages that would be merged, in order:
Calculating dependencies |
!!! All ebuilds that could satisfy ">=media-fonts/font-adobe-100dpi-1" have been masked.
|
Dove, purtroppo, il -100dpi costituisce parte integrante del nome, anzichè della versione del pacchetto.
Infatti, corretto a mano quell'unico pacchetto, tutto è andato a posto:
Code: |
...
* Your ebuild is emergeable!
...
|
_________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Sun Mar 19, 2006 11:17 am Post subject: |
|
|
confermo, il problema é dovuto al fatto che il nome del pacchetto non é portage compliant: in pratica parte di quello che é in realtà il nome viene tagliato via dalle regole (piu' che corrette) di cut scritte già nella prima versione di forcekeymask
Coda |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4809 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sun Mar 19, 2006 11:31 am Post subject: |
|
|
Ho scoperto un altro casino.
In una configurazione molto spinta, ad un certo punto non riuscivo più a fare `emerge -uDpv world` per problemi di pacchetti mascherati.
Il messaggio finale dava la colpa alle dipendenze di kde-base/quanta (3.5.1).
Però un `forcekeymask -fm =kde-base/quanta-3.5.1` usciva senza risultati.
Alla fine, ho risolto modificando ancora lo script con un volgare:
Code: |
sed -i -e 's/emerge -p/emerge -uDp/g' /usr/local/bin/forcekeymask
|
Naturalmente non è una soluzione consigliabile in assoluto.
Servirebbe un'opzione apposita per distinguere lo smaschermento normale da quello profondo. _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Sun Mar 19, 2006 1:24 pm Post subject: |
|
|
cloc3 wrote: | Ho scoperto un altro casino.
In una configurazione molto spinta, ad un certo punto non riuscivo più a fare `emerge -uDpv world` per problemi di pacchetti mascherati.
Il messaggio finale dava la colpa alle dipendenze di kde-base/quanta (3.5.1).
Però un `forcekeymask -fm =kde-base/quanta-3.5.1` usciva senza risultati.
Alla fine, ho risolto modificando ancora lo script con un volgare:
Code: |
sed -i -e 's/emerge -p/emerge -uDp/g' /usr/local/bin/forcekeymask
|
Naturalmente non è una soluzione consigliabile in assoluto.
Servirebbe un'opzione apposita per distinguere lo smaschermento normale da quello profondo. |
Beh, tieni presente che zorro esegue un emerge -p volutamente. Se il sistema é pulito, tu devi poter emergere senza chiedere -uD .
La soluzione, nel tuo caso, avrebbe potuto essere, credo:
Code: | # emerge -uDpvt --newuse world && revdep-rebuild
# zorro -p
# emerge -uDpvt --newuse world |
dove l'ultimo emerge avrebbe dovuto riportarti uno 0
Coda |
|
Back to top |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Sun Mar 19, 2006 1:32 pm Post subject: |
|
|
nuova versione, sostanzialmente una risistemazione, e l'accoglienza di qualche suggerimento:
zorro64-0.4: | #!/bin/bash
# Grazie a:
# xchris, che l'ha scritto >>> xchris, who did it
# fedeliallalinea, che l'ha curato >>> fedeliallalinea, who take care of it
# mouser, che ha scritto il cuore della modifica >>> mouser, who did the hack
# lorenzo, che ha riassunto la modifica >>> lorenzo, who stripped out the hack
# andrea, che aveva bisogno della modifica >>> andrea, who needed the hack
HILITE="\033[1m"
NORMAL="\033[0m"
RED='\E[31;01m'
GREEN='\E[32;01m'
YELLOW='\E[33;01m'
function usage {
echo -e "\nUsage: forcekeymask [OPTION] [FILE]\n"
echo -e ""
echo -e "\nOption:"
echo -e " -fm, --force-merge"
echo -e " -p, --purge\n"
echo -e "\nExample:"
echo -e " # forcekeymask -fm =xfce-base/xfce4-4.1.90"
echo -e " # forcekeymask -p"
echo -e ""
exit 1
}
emerge --info | grep '="' > /tmp/portinfo
source /tmp/portinfo
function purge {
source /sbin/functions.sh
FILE=$1
[ ! -s "${FILE}" ] && echo "Your ${FILE} needs no change!" && return 0
END=`wc -l ${FILE} | awk '{print $1}'`
[ -s ${FILE}.new ] && rm ${FILE}.new
for i in `seq 1 ${END}`;
do
LINE=`cat ${FILE} | head -n ${i} | tail -n 1`
COMMENT=`echo ${LINE} | head -c 1`
if [ -z "${LINE}" ] || [ "${COMMENT}" = "#" ]
then
echo ${LINE} >> ${FILE}.new
else
CLEAN=`echo "${LINE}" | awk '{print $1}' | sed -e 's/-[0-9]/*/g' | cut -d* -f1 | sed -e 's/[<|>|=]/*/g' | tr -d "*"`
if [ -s /var/db/pkg/${CLEAN}* ]
then
echo ${LINE} >> ${FILE}.new
else
einfo "${LINE} ${RED}removed${NORMAL} from new list"
fi
fi
done
DIFFERENCES=`diff ${FILE} ${FILE}.new`
if [ -s "${DIFFERENCES}" ]
then
rm ${FILE}.new
echo "Your ${FILE} needs no change!"
else
echo ""
echo ${DIFFERENCES}
echo ""
echo "1) Update ${FILE}"
echo "2) Discard changes"
echo "3) Don't update,save changes in ${FILE}.new"
echo -n "Select: "
read ANSWER
echo ""
case $ANSWER in
"1")
mv ${FILE}.new ${FILE}
echo "${FILE} Updated!" ;;
"2")
rm ${FILE}.new
echo "Changes dirscarded!" ;;
"3")
echo "Changes saved in ${FILE}.new" ;;
*)
echo "Option not valid!" ;;
esac
echo ""
fi
}
function force_merge {
source /sbin/functions.sh
DONE=1
PACKAGES=$1
[ -s $ACCEPT_KEYWORDS ] && echo "Problem with your profile. No ARCH variable present!" && exit
echo && einfo "Please Wait...\n"
[ ! `/usr/bin/whoami` = 'root' ] && echo && einfo "Program require root access!" && echo && exit
PRELIMINARY_CHECK=`emerge -p ${PACKAGES} 2>&1 | grep "no ebuilds to satisfy"`
PRELIMINARY_CHECK1=`emerge -p ${PACKAGES} 2>&1 | grep "(try adding an '=')"`
PRELIMINARY_CHECK2=`echo "$1" | head -c 1 --`
[ "$PRELIMINARY_CHECK" ] && echo && einfo "No ebuild found!" && echo && exit
[ "$PRELIMINARY_CHECK1" ] && echo && einfo "Specific key requires an operator (xfce-base/xfce4-4.1.90) (try adding an '=')" && echo && exit
[ "$PRELIMINARY_CHECK2" = "-" ] && echo && einfo "No ebuild found!" && echo && exit
[ ! -e "/etc/portage" ] && einfo "Creating /etc/portage directory\n" && { mkdir /etc/portage || { einfo "ERROR...Quiting" && exit ;} }
while [ $DONE ]
do
RESULT=`emerge -p ${PACKAGES} 2>&1 | grep "(masked" | head -n 1`
if [ "$RESULT" ]
then
ACTION_STRING=
RESULT_FILTERED=`echo $RESULT | cut -d":" -f2`
KEYWORD_MASKED=`echo $RESULT | cut -d":" -f2 | grep "~"`
HARD_MASKED=`echo $RESULT | cut -d":" -f2 | grep "package.mask"`
MISSING_MASKED=`echo $RESULT | cut -d":" -f2 | grep "missing"`
CLEAN_NAME=`echo $RESULT | cut -d" " -f2 | sed -e 's/-[0-9]/*/g' | cut -d"*" -f1`
if [ "$MISSING_MASKED" = "$RESULT_FILTERED" ]
then
echo && einfo "Package masked by missing keyword.. adding right keyword.. " && echo &&
[ ! -e "$PORTDIR_OVERLAY" ] && einfo "creating PORTDIR_OVERLAY Tree.." &&
{ mkdir -p $PORTDIR_OVERLAY || { einfo echo "ERROR...(no portage overlay defined ?) Quitting" && exit ;} }
[ ! -e "$PORTDIR_OVERLAY/$CLEAN_NAME" ] &&
{ mkdir -p $PORTDIR_OVERLAY/$CLEAN_NAME ||{ einfo echo "ERROR...(no write permissions ?) Quitting";} }
[ -e "$PORTDIR" ] && einfo "overlaying ebuild.." &&
{ cp -r /usr/portage/$CLEAN_NAME/ $PORTDIR_OVERLAY/$CLEAN_NAME/../ &&
echo || { einfo echo "ERROR...(no portage tree ?) Quitting" && echo && exit ;} }
for EBUILD in `ls -R1 $PORTDIR_OVERLAY/$CLEAN_NAME | grep ebuild`; do
cd $PORTDIR_OVERLAY/$CLEAN_NAME/
cat $EBUILD | sed 's/\(KEYWORDS=\".*\)\(\"\)/\1 ~'$ACCEPT_KEYWORDS'\2/' > $EBUILD
echo && einfo "creating digest up to date..for ${EBUILD}" && echo && /usr/sbin/ebuild ${EBUILD} digest
done
RESULT=`emerge -p ${PACKAGES} 2>&1 | grep "(masked" | head -n 1`
fi
fi
if [ "$RESULT" ]
then
ACTION_STRING=
RESULT_FILTERED=`echo $RESULT | cut -d":" -f2`
KEYWORD_MASKED=`echo $RESULT | cut -d":" -f2 | grep "~"`
HARD_MASKED=`echo $RESULT | cut -d":" -f2 | grep "package.mask"`
MISSING_MASKED=`echo $RESULT | cut -d":" -f2 | grep "missing"`
CLEAN_NAME=`echo $RESULT | cut -d" " -f2 | sed -e 's/-[0-9]/*/g' | cut -d"*" -f1`
REQUIRED_BY=`echo $1`
if [ "$HARD_MASKED" = "$RESULT_FILTERED" ]
then
echo "$CLEAN_NAME" >> /etc/portage/package.unmask
ACTION_STRING=$RED"[HARD]"$NORMAL
fi
if [ "$KEYWORD_MASKED" = "$RESULT_FILTERED" ]
then
echo "$CLEAN_NAME ~$ACCEPT_KEYWORDS # required by $1" >> /etc/portage/package.keywords
ACTION_STRING=$ACTION_STRING$YELLOW"[KEYWORD]"$NORMAL
fi
if [ ! "$ACTION_STRING" ]
then
echo && einfo "Don't know how to handle.. sorry!" && echo
exit
else
echo -e $GREEN"*$NORMAL $CLEAN_NAME "$ACTION_STRING
fi
else
echo && einfo "Your ebuild is emergeable!" && echo
DONE=
fi
done
}
case $1 in
-fm|--force-merge)
[ $# -eq 1 ] && echo -e "\nSpecify one or more packages\n" && exit
PACKAGES=`echo $* | cut -d " " -f2-`
force_merge ${PACKAGES}
;;
-p|--purge)
purge "/etc/portage/package.keywords"
purge "/etc/portage/package.unmask"
;;
-h|--help)
usage
;;
*)
echo "No valid option specified. Discarding changes..."
;;
esac |
Coda |
|
Back to top |
|
|
Cristian75 Apprentice
Joined: 30 Nov 2005 Posts: 234
|
Posted: Wed May 03, 2006 8:25 am Post subject: |
|
|
hem scusate ma come si usa questo tools ? help me
ho provato a creare un file di testo è a renderlo eseguibila ma non funge
sicuramente non so fare io mi potete spiegare come devo fare
grazie _________________ La musica che ascolto : http://www.last.fm/user/Cristian75/
La mia Webradio ---> http://95.211.15.229:8000/
utente numero 381833 su Linux Counter
http://counter.li.org.
Coltiva Linux che tanto Windows si pianta da solo |
|
Back to top |
|
|
Onip Advocate
Joined: 02 Sep 2004 Posts: 2912 Location: Parma (Italy)
|
Posted: Wed May 03, 2006 9:42 am Post subject: |
|
|
per lanciare un eseguibile che non sia nel $PATH devi specificare anche la dir in cui si trova.
ad es. se è nella stessa dir dove sei anche tu puoi fare così
Byez _________________ Linux Registered User n. 373835
Titus Lucretius Carus, De Rerum Natura - Tantum religio potuit suadere malorum |
|
Back to top |
|
|
f0llia l33t
Joined: 22 Apr 2003 Posts: 873
|
Posted: Thu May 04, 2006 7:50 am Post subject: |
|
|
ciao a tutti,
lo script fin ora ha funzionato ottimamente ma :
Code: |
forcekeymask -fm =x11-misc/engage-9999
* Please Wait...
* Don't know how to handle.. sorry!
|
Come posso fare ? |
|
Back to top |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Thu May 04, 2006 10:07 pm Post subject: |
|
|
Code: | echo "=x11-misc/engage-9999" >>/etc/portage/package.keywords |
zorro non capisce i pacchetti con nomi non standard
Coda |
|
Back to top |
|
|
Luca89 Advocate
Joined: 27 Apr 2005 Posts: 2107 Location: Agrigento (Italy)
|
Posted: Thu Jun 15, 2006 12:40 pm Post subject: |
|
|
Ho modificato un po' la versione di codadilupo, ecco quello che mi è venuto fuori:
Code: | #!/bin/bash
# Grazie a:
# xchris, che l'ha scritto
# fedeliallalinea, che l'ha curato
# mouser, che ha scritto il cuore della modifica
# andrea, che aveva bisogno della modifica
# lorenzo, che ha riassunto la modifica
# luca, che ha modificato per supportare le directory /etc/portage/package.*/
emerge --info | grep '="' > /tmp/portinfo
source /tmp/portinfo
HILITE="\033[1m"
NORMAL="\033[0m"
RED='\E[31;01m'
GREEN='\E[32;01m'
YELLOW='\E[33;01m'
function usage {
echo -e "\nUsage: forcekeymask [OPTION] [PKG]\n"
echo -e ""
echo -e "\nOption:"
echo -e " -fm, --force-merge"
echo -e " -p, --purge\n"
echo -e "\nExample:"
echo -e " # forcekeymask -fm =xfce-base/xfce4-4.1.90"
echo -e " # forcekeymask -p"
echo -e ""
exit 1
}
function purge {
source /sbin/functions.sh
FILE=$1
[ ! -s "${FILE}" ] && echo "Your ${FILE} needs no change!" && return 0
END=`wc -l ${FILE} | awk '{print $1}'`
[ -s ${FILE}.new ] && rm ${FILE}.new
for i in `seq 1 ${END}`;
do
LINE=`cat ${FILE} | head -n ${i} | tail -n 1`
#echo ${LINE}
COMMENT=`echo ${LINE} | head -c 1`
# Riporta le newline e i commenti
if [ -z "${LINE}" ] || [ "${COMMENT}" = "#" ]
then
echo ${LINE} >> ${FILE}.new
else
# elimina versione e simboli del pacchetto
CLEAN=`echo "${LINE}" | awk '{print $1}' | sed -e 's/-[0-9]/*/g' | cut -d* -f1 | sed -e 's/[<|>|=]/*/g' | tr -d "*"`
# se esiste rimettilo nella lista se no rimuovi
if [ -e "/var/db/pkg/${CLEAN}*" ]
then
echo ${LINE} >> ${FILE}.new
else
einfo "${LINE} ${RED}removed${NORMAL} from new list"
fi
fi
done
DIFFERENCES=`diff ${FILE} ${FILE}.new`
if [ -s "${DIFFERENCES}" ]
then
rm ${FILE}.new
echo "Your ${FILE} needs no change!"
else
echo ""
echo ${DIFFERENCES}
echo ""
echo "1) Update ${FILE}"
echo "2) Discard changes"
echo "3) Don't update,save changes in ${FILE}.new"
echo -n "Select: "
read ANSWER
echo ""
case $ANSWER in
"1")
mv ${FILE}.new ${FILE}
echo "${FILE} Updated!" ;;
"2")
rm ${FILE}.new
echo "Changes dirscarded!" ;;
"3")
echo "Changes saved in ${FILE}.new" ;;
*)
echo "Option not valid!" ;;
esac
echo ""
fi
}
function check_if_dir {
# Controlla se il file indicato è una directory e se non viene specificato il
# file all'interno della directory restituisce errore
# Parametri: $1 => suffisso del file package.*
# Restituisce ${1}_file => file dove inserire i pacchetti
if [ -d /etc/portage/package.$1 ]; then
while [ -z $res ]; do
echo "Your /etc/portage/package.$1 is a directory."
echo -n "Specify the file name where you want to insert packages: "
read res
echo
done
export eval ${1}_file="/etc/portage/package.$1/$res"
else
export eval ${1}_file="/etc/portage/package.$1"
fi
}
function force_merge {
source /sbin/functions.sh
DONE=1
PACKAGES=$1
[ -s $ACCEPT_KEYWORDS ] && echo "Problem with your profile. No ARCH variable present!" && exit 1
echo && einfo "Please Wait...\n"
[ ! `/usr/bin/whoami` = 'root' ] && echo && einfo "Program require root access!" && echo && exit 1
PRELIMINARY_CHECK=`emerge -p ${PACKAGES} 2>&1 | grep "no ebuilds to satisfy"`
PRELIMINARY_CHECK1=`emerge -p ${PACKAGES} 2>&1 | grep "(try adding an '=')"`
PRELIMINARY_CHECK2=`echo "$1" | head -c 1 --`
[ "$PRELIMINARY_CHECK" ] && echo && einfo "No ebuild found!" && echo && exit 1
[ "$PRELIMINARY_CHECK1" ] && echo && einfo "Specific key requires an operator (xfce-base/xfce4-4.1.90) (try adding an '=')" && echo && exit 1
[ "$PRELIMINARY_CHECK2" = "-" ] && echo && einfo "No ebuild found!" && echo && exit 1
[ ! -e "/etc/portage" ] && einfo "Creating /etc/portage directory\n" && { mkdir /etc/portage || { einfo "ERROR...Quiting" && exit 1;} }
while [ $DONE ]
do
RESULT=`emerge -p ${PACKAGES} 2>&1 | grep "(masked" | head -n 1`
if [ "$RESULT" ]
then
ACTION_STRING=
RESULT_FILTERED=`echo $RESULT | cut -d":" -f2`
KEYWORD_MASKED=`echo $RESULT | cut -d":" -f2 | grep "~"`
HARD_MASKED=`echo $RESULT | cut -d":" -f2 | grep "package.mask"`
MISSING_MASKED=`echo $RESULT | cut -d":" -f2 | grep "missing"`
CLEAN_NAME=`echo $RESULT | cut -d" " -f2 | sed -e 's/-[0-9]/*/g' | cut -d"*" -f1`
if [ "$MISSING_MASKED" = "$RESULT_FILTERED" ]
then
echo && einfo "Package masked by missing keyword.. adding right keyword.. " && echo &&
[ ! -e "$PORTDIR_OVERLAY" ] && einfo "creating PORTDIR_OVERLAY Tree.." && { mkdir -p $PORTDIR_OVERLAY || { einfo echo "ERROR...(no portage overlay defined ?) Quitting" && exit ;} }
[ ! -e "$PORTDIR_OVERLAY/$CLEAN_NAME" ] && { mkdir -p $PORTDIR_OVERLAY/$CLEAN_NAME ||{ einfo echo "ERROR...(no write permissions ?) Quitting";} }
[ -e "$PORTDIR" ] && einfo "overlaying ebuild.." && { cp -r /usr/portage/$CLEAN_NAME/ $PORTDIR_OVERLAY/$CLEAN_NAME/../ && echo || { einfo echo "ERROR...(no portage tree ?) Quitting" && echo && exit ;} }
for EBUILD in `ls -R1 $PORTDIR_OVERLAY/$CLEAN_NAME | grep ebuild`; do
cd $PORTDIR_OVERLAY/$CLEAN_NAME/
sed -i -e 's/\(KEYWORDS=\".*\)\(\"\)/\1 ~'$ACCEPT_KEYWORDS'\2/' $EBUILD
echo && einfo "creating digest up to date..for ${EBUILD}" && echo && /usr/sbin/ebuild ${EBUILD} digest
done
RESULT=`emerge -p ${PACKAGES} 2>&1 | grep "(masked" | head -n 1`
fi
fi
if [ "$RESULT" ]
then
ACTION_STRING=
RESULT_FILTERED=`echo $RESULT | cut -d":" -f2`
KEYWORD_MASKED=`echo $RESULT | cut -d":" -f2 | grep "~"`
HARD_MASKED=`echo $RESULT | cut -d":" -f2 | grep "package.mask"`
MISSING_MASKED=`echo $RESULT | cut -d":" -f2 | grep "missing"`
CLEAN_NAME=`echo $RESULT | cut -d" " -f2 | sed -e 's/-[0-9]/*/g' | cut -d"*" -f1`
REQUIRED_BY=`echo $RESULT | cut -d" " -f2`
if [ "$HARD_MASKED" = "$RESULT_FILTERED" ]
then
[ -z $unmask_file ] && check_if_dir unmask
echo "$CLEAN_NAME" >> $unmask_file
ACTION_STRING=$RED"[HARD]"$NORMAL
fi
if [ "$KEYWORD_MASKED" = "$RESULT_FILTERED" ]
then
[ -z $keywords_file ] && check_if_dir keywords
echo "$CLEAN_NAME" >> $keywords_file
ACTION_STRING=$ACTION_STRING$YELLOW"[KEYWORD]"$NORMAL
fi
if [ ! "$ACTION_STRING" ]
then
echo && einfo "Don't know how to handle.. sorry!" && echo
exit
else
echo -e $GREEN"*$NORMAL $CLEAN_NAME "$ACTION_STRING
fi
else
echo && einfo "Your ebuild is emergeable!" && echo
DONE=
fi
done
}
case $1 in
-fm|--force-merge)
[ $# -eq 1 ] && echo -e "\nSpecify one or more packages\n" && exit 1
PACKAGES=`echo $* | cut -d " " -f2-`
force_merge ${PACKAGES}
;;
-p|--purge)
purge "/etc/portage/package.keywords"
purge "/etc/portage/package.unmask"
;;
-h|--help)
usage
;;
*)
echo "No valid option specified. Discarding changes..."
#usage
;;
esac
|
Modifiche effettuate:
- Non inserisce in package.keywords ~arch, perchè non è necessario.
- Può gestire /etc/portage/package.{keywords,unmask}/ come directory, infatti il nuovo portage permette di far diventare ad esempio package.keywords una directory e inserire i pacchetti in file separati all'interno della directory.
_________________ Running Fast! |
|
Back to top |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Thu Jun 15, 2006 1:59 pm Post subject: |
|
|
figo!
Coda |
|
Back to top |
|
|
Scen Retired Dev
Joined: 29 Jul 2003 Posts: 2470 Location: Padova, Italy
|
Posted: Fri Jun 16, 2006 12:37 pm Post subject: |
|
|
Luca89 wrote: |
Può gestire /etc/portage/package.{keywords,unmask}/ come directory, infatti il nuovo portage permette di far diventare ad esempio package.keywords una directory e inserire i pacchetti in file separati all'interno della directory.
|
Azz! Questa non la sapevo!
Corro a documentarmi _________________ I was born in a deep forest/I wish I could live here all my life/I am made from stones and roots/My home, these woods and roads
All my life I loved this sound/Of the woods all around/Eagles flies where the winds blows free
Journey is my destiny |
|
Back to top |
|
|
Luca89 Advocate
Joined: 27 Apr 2005 Posts: 2107 Location: Agrigento (Italy)
|
Posted: Fri Jun 16, 2006 6:04 pm Post subject: |
|
|
Scen wrote: | Azz! Questa non la sapevo!
Corro a documentarmi |
Ha fatto furore questa nuova feature di portage _________________ Running Fast! |
|
Back to top |
|
|
Luca89 Advocate
Joined: 27 Apr 2005 Posts: 2107 Location: Agrigento (Italy)
|
Posted: Tue Jul 18, 2006 6:18 pm Post subject: |
|
|
Salve,
Ho lavorato un altro po su forcekeymask e ho cambiato un po di cose, in particolare:
- codice più pulito e ottimizzato (migliorata anche l'indentazione)
- supporto anche a pacchetti del tipo: media-fonts/font-adobe-utopia-100dpi-1.0.1-r3 (ovvero con una stringa del tipo '-[0-9]*' nel nome).
- pieno supporto alle directory /etc/portage/package.* anche nella funzione purge
- maggiore utilizzo di /sbin/functions.sh (ebegin,einfo,ewarn,eerror)
- aggiunto header licenza GPL-2
- se presente, utilizza ekeyword (app-portage/gentoolkit-dev) per aggiungere la keyword negli ebuild
Visto che consta di parecchie righe l'ho messo su un servizio nopaste, lo trovate qui _________________ Running Fast!
Last edited by Luca89 on Mon Jul 24, 2006 3:26 pm; edited 1 time in total |
|
Back to top |
|
|
fedeliallalinea Administrator
Joined: 08 Mar 2003 Posts: 31345 Location: here
|
Posted: Fri Jul 21, 2006 6:51 am Post subject: |
|
|
Luca89 wrote: | Visto che consta di parecchie righe lo messo su un servizio nopaste, lo trovate qui |
Not Found
The requested document was not found on this server. _________________ Questions are guaranteed in life; Answers aren't. |
|
Back to top |
|
|
Onip Advocate
Joined: 02 Sep 2004 Posts: 2912 Location: Parma (Italy)
|
Posted: Fri Jul 21, 2006 10:43 am Post subject: |
|
|
@fedeliallalinea
Eccolo _________________ Linux Registered User n. 373835
Titus Lucretius Carus, De Rerum Natura - Tantum religio potuit suadere malorum |
|
Back to top |
|
|
|