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
fedeliallalinea
Administrator
Administrator


Joined: 08 Mar 2003
Posts: 30822
Location: here

PostPosted: Tue Feb 22, 2005 7:46 am    Post subject: Reply with quote

Dovrei rivederlo questo programmama ora non ho tempo. Appena finisco gli esami mi ci metto
_________________
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
f0llia
l33t
l33t


Joined: 22 Apr 2003
Posts: 873

PostPosted: Tue Feb 22, 2005 8:36 am    Post subject: Reply with quote

fedeliallalinea wrote:
Dovrei rivederlo questo programmama ora non ho tempo. Appena finisco gli esami mi ci metto

Non ti preoccupare, niente fretta. :)
Back to top
View user's profile Send private message
Onip
Advocate
Advocate


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

PostPosted: Tue Feb 22, 2005 12:11 pm    Post subject: Reply with quote

Nessun problema, era solo una segnalazione..... :wink:

p.s. Io gli esami gli ho finiti oggi pappappero......
_________________
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
Dhaki
Guru
Guru


Joined: 16 Jun 2004
Posts: 325
Location: Ticino - CH

PostPosted: Tue Feb 22, 2005 2:39 pm    Post subject: Reply with quote

Secondo me bisognorebbe andare verso un package.* manager con piu funzioni. Certo, forcekeymask fa il suo lavoro, ma senza nulla togliere al lavoro che é stato fatto per farlo e senza voler offendere nessuno, secondo me una cosa fatta in python, che possa servire a smascherare (~ e M), mascherare, iniettare, cambiare le use per certi pacchetti, vedere i contenuti dei file, poterli pulire (cosa che fa gia forcekeymask), eccetera, potrebbe essere interessante. È vero, alla fin fine basterebbe fare un "nano /etc/portage/package.*" e si potrebbero fare le stesse cose... ma dato che l'importante é la scelta secondo me c'é chi potrebbe, per comodità o altro, voler poter usare un tool. Io sinceramente non potrei aiutare molto temo... bash scripting me la cavo (un pochino...), sto cominciando con il C, quindi non ho ancora le capacità. Dite che é una cosa inutile del tutto o che ci si può fare un pensierino?
Back to top
View user's profile Send private message
mrfree
Veteran
Veteran


Joined: 15 Mar 2003
Posts: 1303
Location: Europe.Italy.Sulmona

PostPosted: Sat Mar 12, 2005 6:11 pm    Post subject: Reply with quote

In attesa che venga rilasciata una nuova versione con i vari miglioramenti e considerando che non posso più resistere all'emersione di gnome 2.10, ho realizzato questo VBH (Very Bad Hack) al forcekeymask :D
Code:
--- forcekeymask        2004-12-05 22:24:40.000000000 +0100
+++ forcekeymask.mrfree 2005-03-12 19:02:08.672850288 +0100
@@ -1,6 +1,7 @@
 #!/bin/bash
 # ARCH -> x86 ppc sparc alpha hppa mips ia64 amd64
-ARCH=`cat /etc/make.profile/make.defaults | grep "ACCEPT_KEYWORDS" | awk -F\" '{ print $2 }'`
+#ARCH=`cat /etc/make.profile/make.defaults | grep "ACCEPT_KEYWORDS" | awk -F\" '{ print $2 }'`
+ARCH="x86"
 #####################
 HILITE="\033[1m"
 NORMAL="\033[0m"
@@ -111,6 +112,7 @@
          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`
+         CLEAN_EXACT_NAME=`echo $RESULT | cut -d" " -f2`
          if [ "$HARD_MASKED" = "$RESULT_FILTERED" ]
          then
              echo "$CLEAN_NAME" >> /etc/portage/package.unmask
@@ -118,7 +120,7 @@
          fi
          if [ "$KEYWORD_MASKED" = "$RESULT_FILTERED" ]
          then
-             echo "$CLEAN_NAME ~$ARCH" >> /etc/portage/package.keywords
+             echo "=$CLEAN_EXACT_NAME ~$ARCH" >> /etc/portage/package.keywords
              ACTION_STRING=$ACTION_STRING$YELLOW"[KEYWORD]"$NORMAL
          fi
          if [ "$MISSING_MASKED" = "$RESULT_FILTERED" ]

-) Specifica nel file /etc/portage/package.keywords la versione esatta del pacchetto da smascherare
Code:
[...]
=app-arch/file-roller-2.10.0 ~x86
=media-video/totem-1.0 ~x86
=media-plugins/gst-plugins-flac-0.8.8 ~x86
=media-libs/flac-1.1.1 ~x86
[...]

-) Forza x86 come architettura hardware


Spero sia utile a qualche altro utente impaziente come me :)


Edit: per applicare la patch è sufficiente salvare il codice in un file (ad es.: mrforce.patch) ed eseguire
Code:
cat mrforce.patch | patch forcekeymask

_________________
Please EU, pimp my country!

ICE: /etc/init.d/iptables panic
Back to top
View user's profile Send private message
Dhaki
Guru
Guru


Joined: 16 Jun 2004
Posts: 325
Location: Ticino - CH

PostPosted: Wed Jul 13, 2005 9:51 am    Post subject: Reply with quote

Error 404.

C'é qualcuno che potrebbe uploadare forcekeymask? Grazie
Back to top
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824

PostPosted: Wed Jul 13, 2005 12:04 pm    Post subject: Reply with quote

http://fedeliallalinea.tilug.ch/projects/forcekeymask

ora vedo di fare upload anche sul mio sitino
ciao
_________________
while True:Gentoo()
Back to top
View user's profile Send private message
Dhaki
Guru
Guru


Joined: 16 Jun 2004
Posts: 325
Location: Ticino - CH

PostPosted: Wed Jul 13, 2005 5:43 pm    Post subject: Reply with quote

xchris wrote:
http://fedeliallalinea.tilug.ch/projects/forcekeymask

ora vedo di fare upload anche sul mio sitino
ciao

Ok grazie!
Back to top
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Wed Aug 10, 2005 2:04 pm    Post subject: Reply with quote

scusate ma lo script risulta irrepereibile presso i link postati nel thread. non è che potreste ri-renderlo disponibile?

grazie,
tek
Back to top
View user's profile Send private message
neon
l33t
l33t


Joined: 04 Aug 2003
Posts: 759
Location: Catania, Italy, Europe

PostPosted: Wed Aug 10, 2005 2:37 pm    Post subject: Reply with quote

sul sito di xchris si trova questo, non so che versione sia ma almeno c'e': http://www.xchris.net/download.php?file=files/forcekeymask.gz
_________________
Io credo che le tecnologie siano moralmente neutrali fino a quando non le utilizziamo - William Gibson

LINEE GUIDA DEL FORUM
Back to top
View user's profile Send private message
Pancu
l33t
l33t


Joined: 16 Feb 2005
Posts: 612
Location: Cesena

PostPosted: Fri Jan 06, 2006 1:13 pm    Post subject: Reply with quote

Ragazzi ho un problema con forcekeymask.
Devo installare gnome-2.12.
Faccio un
Code:
forcekeymask -fm gnome-base/gnome-2.12
Please Wait ...
Your ebuild is emergeable!

Ma quando vado a controllare nei file package.keywords, package.unmask e package mask non mi è stato scritto niente :( :(
Back to top
View user's profile Send private message
lavish
Bodhisattva
Bodhisattva


Joined: 13 Sep 2004
Posts: 4296

PostPosted: Fri Jan 06, 2006 1:37 pm    Post subject: Reply with quote

Spostato da Forum italiano (Italian) a Documentazione italiana ;)
_________________
minimalblue.com | secgroup.github.io/
Back to top
View user's profile Send private message
Pancu
l33t
l33t


Joined: 16 Feb 2005
Posts: 612
Location: Cesena

PostPosted: Fri Jan 06, 2006 2:03 pm    Post subject: Reply with quote

Pancu wrote:
Ragazzi ho un problema con forcekeymask.
Devo installare gnome-2.12.
Faccio un
Code:
forcekeymask -fm gnome-base/gnome-2.12
Please Wait ...
Your ebuild is emergeable!

Ma quando vado a controllare nei file package.keywords, package.unmask e package mask non mi è stato scritto niente :( :(

Ragazzi nessuno può aiutarmi??
Vorrei installare gnome entro domani :( :(
Back to top
View user's profile Send private message
lavish
Bodhisattva
Bodhisattva


Joined: 13 Sep 2004
Posts: 4296

PostPosted: Fri Jan 06, 2006 2:10 pm    Post subject: Reply with quote

Pancu wrote:
Ragazzi nessuno può aiutarmi??
Vorrei installare gnome entro domani :( :(

Ma per favore! Non è passata nemmeno un'ora dal tuo precedente post! Questo non è un help desk!
Se qualcuno ha tempo/sa/vuole aiutarti lo farà comunque, senza solleciti orari! Ad ogni modo la netiquette prevede un'attesa di minimo 24h prima di fare un "up"
_________________
minimalblue.com | secgroup.github.io/
Back to top
View user's profile Send private message
Onip
Advocate
Advocate


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

PostPosted: Fri Jan 06, 2006 2:55 pm    Post subject: Reply with quote

prova con
Code:
forcekeymask -fm =gnome-base/gnome-2.12

_________________
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
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3135

PostPosted: Sun Feb 05, 2006 4:01 am    Post subject: Reply with quote

Ok, nessuno me ne voglia, ma ho tentato di rimaneggiare il forcekeymask. Avevo bisogno di gestire anche i missing keywords perché m'ero rotto le balle di gestirli a mano per i 2600 pacchetti 'missing' dei ppc64 ;-)
Ovviamente non l'ho fatto da solo, mica ero capace ;-)

Questo ottimo software, trasformato in un paciugo dal sottoscritto é opera di:

xchris: il primo alchimista
fedeliallalinea: quello che mette ordine
mouser: il codice piu' veloce di tutta l'IM
codadilupo: la colla

;-)

ecco a voi: zorro64

Code:
#!/bin/bash
# ARCH -> x86 ppc sparc alpha hppa mips ia64 amd64 ppc64
ARCH="ppc64"
OVERLAY=`cat /etc/make.conf | grep "PORTDIR_OVERLAY" | awk -F\" '{ print $2 }'`

#####################
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
}

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 [ -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 $ARCH ] && 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
       mkdir -p $OVERLAY/$CLEAN_NAME/ && echo && einfo "creating PORTDIR_OVERLAY Tree.." && echo
             cp -r /usr/portage/$CLEAN_NAME/ $OVERLAY/$CLEAN_NAME/../
      cd $OVERLAY/$CLEAN_NAME/ echo && einfo "overlaying ebuild.." && echo
   for EBUILD in `find $OVERLAY/$CLEAN_NAME -iname *.ebuild`; do
      cat $EBUILD | nl -b a > /tmp/temp.ebuild
      RIGA=`cat /tmp/temp.ebuild | grep KEYWORDS | awk '{print $1}'`
      PREV=`expr $RIGA - 1`
      NEXT=`expr $RIGA + 1`
      cat /tmp/temp.ebuild | head -n $PREV | cut -b8- > $EBUILD
      cat /tmp/temp.ebuild | grep KEYWORDS | cut -b8- | sed -e 's/\"\ *$/\ ~ppc64\"/g' >> $EBUILD
      cat /tmp/temp.ebuild | tail -n $NEXT | cut -b8- >> $EBUILD && echo && einfo "updating ebuild.." && echo
      rm -f /tmp/temp.ebuild
   done
   for EBUILD in `find $OVERLAY/$CLEAN_NAME -iname *.ebuild`; do
      echo && einfo "creating digest up to date.." && echo && ebuild ${PACKAGES}*.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`
     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 ~$ARCH" >> /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..."
   #usage
   ;;
esac


ovviamente laddove il codice risulta un pugno in un occhio é tutta colpa mia (e puo' essere rifutato in luogo di qualcosa di serio ;-))

Coda


Last edited by codadilupo on Mon Feb 06, 2006 3:33 pm; edited 1 time in total
Back to top
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824

PostPosted: Mon Feb 06, 2006 1:58 pm    Post subject: Reply with quote

a dire il vero il primo alchimista e' stato xchris :lol:
poi fedeli l'ha sistemato un po'...

ciao e complimenti per l'idea ;)
ciao
_________________
while True:Gentoo()
Back to top
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3135

PostPosted: Mon Feb 06, 2006 2:52 pm    Post subject: Reply with quote

xchris wrote:
a dire il vero il primo alchimista e' stato xchris :lol:
poi fedeli l'ha sistemato un po'...

ciao e complimenti per l'idea ;)
ciao


azz! Convinto del contrario, da come era cominciato il topic ;-)

Coda
Back to top
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824

PostPosted: Mon Feb 06, 2006 3:02 pm    Post subject: Reply with quote

questo non era il post originale...
prima si chiamava zorro :)

ciao
_________________
while True:Gentoo()
Back to top
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3135

PostPosted: Mon Feb 06, 2006 3:29 pm    Post subject: Reply with quote

xchris wrote:
questo non era il post originale...
prima si chiamava zorro :)

ciao


ehehe, capito ;-)

Ad ogni modo, lo sto già modificando. Per qualche strana ragione sono presente due bachi:

1) i due find funzionano se il programma gira su x86. Se lo faccio girare su ppc64 (il motivo per cui nasce il tentativo) mi riportano:

"path must preceed expression"... che non ha senso, visto che il path precede effettivamente l'espressione. Ma qui ho risolto non usando il find ;-)

2) pare che se gl'ebuild sono piu' di uno, alcuni vengano ricostruiti troncati, con conseguende fallimento del digest. Ci sto ancora lavorando ;-)

Coda
Back to top
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824

PostPosted: Mon Feb 06, 2006 3:37 pm    Post subject: Reply with quote

in bocca al lupo codadilupo :lol:

buon lavoro...
gia' che ci sei metti anche le features che erano state richieste tempo fa.. (scorri il thread)
;)

ciao
_________________
while True:Gentoo()
Back to top
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3135

PostPosted: Mon Feb 06, 2006 5:05 pm    Post subject: Reply with quote

per aggiungere il pacchetto richiedente penso basti sostituire:

Code:
     CLEAN_NAME=`echo $RESULT | cut -d" " -f2 | sed -e 's/-[0-9]/*/g' | cut -d"*" -f1`

con
Code:
     CLEAN_NAME=`echo $RESULT | cut -d" " -f2 | sed -e 's/-[0-9]/*/g' | cut -d"*" -f1`
     CLEAN_EXACT_NAME=`echo $RESULT | cut -d" " -f2`


e

Code:
         echo "$CLEAN_NAME ~$ARCH" >> /etc/portage/package.keywords

con
Code:
         echo "$CLEAN_NAME ~$ARCH" >> /etc/portage/package.keywords "# required by $CLEAN_EXACT_NAME"


Per il primo problema, smascherare la versione esatta oppure l'intero pacchetto, é piu' complicato, perché uno potrebbe scrivere:

Code:
forcekeymask -fm autorun

come
Code:
forcekeymask -fm sys-fs/autorun

come
Code:
forcekeymask -fm =autorun-3.15

come
Code:
forcekeymask -fm =sys-fs/autorun-3.15


ed é un casino ;-)

Cioe', se si decide di mettere solo e soltanto la versione precisa, ok. Ma alternativamente, dobbiamo prima verificare cosa viene richiesto, ovvero prendere $PACKAGES, tagliare via l'uguale, tagliare la categoria (se esiste!) e verificare se corrisponde alla variabile CLEAN_EXACT_NAME moncata della categoria. Nel caso corrisponda scriviamo il pacchetto conpreso di versione, altrimenti senza... é oltre le mie possibilità al momento ;-)

Coda
Back to top
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3135

PostPosted: Mon Feb 06, 2006 9:56 pm    Post subject: Reply with quote

nuova versione: 0.4

- aggiunto il commento 'required` per ogni pacchetto
- migliorato l'output dei messaggi (un pochino piu' chiaro, spero)
- aggiunti un paio di controlli (se non hai PORTDIR_OVERLAY come faccio a lavorare ;-) ?)
- rimosso il find in luogo di ls (vai a capire perché i ppc64 non lo capiscono... bah!)
- corretto un baco che eseguiva ripetutamente gli stessi digest (ma quanto so' pirla ;-))
- le variabili di sistema ora vengono tutte recuperate automagicamente
- corretto il baco che troncava alcuni ebuild durante l'aggiunta della missing keywords
- codice ottimizzato

TODO: rendere disponibile la scelta tra singola versione o tutte le versioni masked... chi si offre :roll: ?

esempio:

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

emerge --info | grep '="' > /etc/portinfo
source /etc/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] [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
}

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 [ -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 $RESULT | cut -d" " -f2`
     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" >> /etc/portage/package.keywords "# required by $REQUIRED_BY"
         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..."
   #usage
   ;;
esac


Coda


Last edited by codadilupo on Wed Mar 08, 2006 6:18 pm; edited 5 times in total
Back to top
View user's profile Send private message
fedeliallalinea
Administrator
Administrator


Joined: 08 Mar 2003
Posts: 30822
Location: here

PostPosted: Tue Feb 07, 2006 8:09 am    Post subject: Reply with quote

Ti amo coda metto subito in /bin :D
_________________
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3135

PostPosted: Tue Feb 07, 2006 10:23 am    Post subject: Reply with quote

fedeliallalinea wrote:
Ti amo coda metto subito in /bin :D


eh, esagerato ;-)
Prima provalo, che é notoriamente bacato :roll:

Coda
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 2 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