Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[TOOL] forcekeymask (new zorro)
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

Goto page Previous  1, 2, 3, 4  Next  
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3134

PostPosted: Tue Feb 07, 2006 11:56 pm    Post subject: Reply with quote

nuova versione. Dovrebbe essere semidecente, ora ;-)
L'ho aggiornata nell'ultimo post.

Coda
_________________
# emerge -C gelmini
Back to top
View user's profile Send private message
.:chrome:.
Advocate
Advocate


Joined: 19 Feb 2005
Posts: 4588
Location: Brescia, Italy

PostPosted: Wed Mar 08, 2006 5:12 pm    Post subject: Reply with quote

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
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3134

PostPosted: Wed Mar 08, 2006 6:17 pm    Post subject: Reply with quote

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
_________________
# emerge -C gelmini
Back to top
View user's profile Send private message
Luca89
Advocate
Advocate


Joined: 27 Apr 2005
Posts: 2107
Location: Agrigento (Italy)

PostPosted: Wed Mar 08, 2006 7:57 pm    Post subject: Reply with quote

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
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3134

PostPosted: Wed Mar 08, 2006 8:41 pm    Post subject: Reply with quote

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
_________________
# emerge -C gelmini
Back to top
View user's profile Send private message
.:chrome:.
Advocate
Advocate


Joined: 19 Feb 2005
Posts: 4588
Location: Brescia, Italy

PostPosted: Wed Mar 08, 2006 10:32 pm    Post subject: Reply with quote

io lo metterei in /usr/local/etc
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4498
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Fri Mar 17, 2006 5:40 pm    Post subject: Reply with quote

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
View user's profile Send private message
Luca89
Advocate
Advocate


Joined: 27 Apr 2005
Posts: 2107
Location: Agrigento (Italy)

PostPosted: Fri Mar 17, 2006 8:41 pm    Post subject: Reply with quote

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
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4498
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sat Mar 18, 2006 6:16 pm    Post subject: Reply with quote

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
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4498
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sat Mar 18, 2006 6:33 pm    Post subject: Reply with quote

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?

:P :P :P :P :lol: :lol: :lol: :lol:

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
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3134

PostPosted: Sun Mar 19, 2006 11:17 am    Post subject: Reply with quote

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
_________________
# emerge -C gelmini
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4498
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sun Mar 19, 2006 11:31 am    Post subject: Reply with quote

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
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3134

PostPosted: Sun Mar 19, 2006 1:24 pm    Post subject: Reply with quote

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
_________________
# emerge -C gelmini
Back to top
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3134

PostPosted: Sun Mar 19, 2006 1:32 pm    Post subject: Reply with quote

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
_________________
# emerge -C gelmini
Back to top
View user's profile Send private message
Cristian75
Apprentice
Apprentice


Joined: 30 Nov 2005
Posts: 234

PostPosted: Wed May 03, 2006 8:25 am    Post subject: Reply with quote

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
View user's profile Send private message
Onip
Advocate
Advocate


Joined: 02 Sep 2004
Posts: 2893
Location: Parma (Italy)

PostPosted: Wed May 03, 2006 9:42 am    Post subject: Reply with quote

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ì
Code:
# ./nome_script


Byez
_________________
Linux Registered User n. 373835

Titus Lucretius Carus, De Rerum Natura - Tantum religio potuit suadere malorum
Back to top
View user's profile Send private message
f0llia
l33t
l33t


Joined: 22 Apr 2003
Posts: 873

PostPosted: Thu May 04, 2006 7:50 am    Post subject: Reply with quote

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
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3134

PostPosted: Thu May 04, 2006 10:07 pm    Post subject: Reply with quote

Code:
echo "=x11-misc/engage-9999" >>/etc/portage/package.keywords


zorro non capisce i pacchetti con nomi non standard

Coda
_________________
# emerge -C gelmini
Back to top
View user's profile Send private message
Luca89
Advocate
Advocate


Joined: 27 Apr 2005
Posts: 2107
Location: Agrigento (Italy)

PostPosted: Thu Jun 15, 2006 12:40 pm    Post subject: Reply with quote

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:

  1. Non inserisce in package.keywords ~arch, perchè non è necessario.
  2. 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
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3134

PostPosted: Thu Jun 15, 2006 1:59 pm    Post subject: Reply with quote

figo!

Coda
_________________
# emerge -C gelmini
Back to top
View user's profile Send private message
Scen
Retired Dev
Retired Dev


Joined: 29 Jul 2003
Posts: 2470
Location: Padova, Italy

PostPosted: Fri Jun 16, 2006 12:37 pm    Post subject: Reply with quote

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! 8O 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
View user's profile Send private message
Luca89
Advocate
Advocate


Joined: 27 Apr 2005
Posts: 2107
Location: Agrigento (Italy)

PostPosted: Fri Jun 16, 2006 6:04 pm    Post subject: Reply with quote

Scen wrote:
Azz! 8O Questa non la sapevo!
Corro a documentarmi :)


Ha fatto furore questa nuova feature di portage :-D
_________________
Running Fast!
Back to top
View user's profile Send private message
Luca89
Advocate
Advocate


Joined: 27 Apr 2005
Posts: 2107
Location: Agrigento (Italy)

PostPosted: Tue Jul 18, 2006 6:18 pm    Post subject: Reply with quote

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
View user's profile Send private message
fedeliallalinea
Bodhisattva
Bodhisattva


Joined: 08 Mar 2003
Posts: 13200
Location: here

PostPosted: Fri Jul 21, 2006 6:51 am    Post subject: Reply with quote

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.
_________________
"aspetto un'emozione sempre più indefinibile"
- CCCP -
"la libertà un doveroso pericolo in verità"
- PGR -
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
Onip
Advocate
Advocate


Joined: 02 Sep 2004
Posts: 2893
Location: Parma (Italy)

PostPosted: Fri Jul 21, 2006 10:43 am    Post subject: Reply with quote

@fedeliallalinea
Eccolo
_________________
Linux Registered User n. 373835

Titus Lucretius Carus, De Rerum Natura - Tantum religio potuit suadere malorum
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Goto page Previous  1, 2, 3, 4  Next
Page 3 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum