Repository 32bit  Forum
Repository 64bit  Wiki

BASH - script per pacchettizzare in serie ;)

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda ZeroUno » ven mag 28, 2010 13:41

danix ha scritto:
Codice: Seleziona tutto
PKG2=$(echo $SPLIT|awk '{print $1}')
OP2=$(echo $SPLIT|awk '{print $2}')
VER2=$(echo $SPLIT|awk '{print $3}')


Codice: Seleziona tutto
Il pacchetto dipende da 'openssl' che sia >= della versione 0.9.8n-i486-1
o, alternativamente, da 'openssl' che sia >= della versione 0.9.8n-i486-1

quindi non mi sembra vada bene...

un piccolo bug:
Codice: Seleziona tutto
PKG2=$(echo $SPLIT|awk '{print $4}')
OP2=$(echo $SPLIT|awk '{print $5}')
VER2=$(echo $SPLIT|awk '{print $6}')



In ogni caso, mi spiegheresti meglio che genere di funzione intendevi per leggere gli slack-required??

funzionalità che legge gli slack-required, li mette assieme per determinare da solo quali pacchetti compilare e in che ordine. e magari anche a determinare se può compilarne qualcuno in parallelo.

che poi vorrei capire una cosa, ma lo slack-required non viene creato dopo che è stato compilato il programma??

teoricamente si, ma al 90% dei casi già ce l'hai, se stai semplicemente ricompilando il repository slacky o altri stabellini-based
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4396
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda danix » ven mag 28, 2010 13:50

ok, mi ricollegavo alla domanda di prima di estrarre anche la versione, quella molto probabilmente non sarà esatta, magari per il nome del file si può anche fare, ma mi chiedevo prima (senza ricevere risposta), nello slack-required le dipendenze sono elencate in che ordine??
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda Blallo » ven mag 28, 2010 14:00

mero ordine alfabetico
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3226
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda danix » ven mag 28, 2010 16:37

jimmy_page_89 ha scritto:mero ordine alfabetico

ok, ma in questo modo non rispetteranno l'ordine corretto e si rischia che una dipendenza venga compilata dopo del pacchetto a cui serve...
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda ZeroUno » ven mag 28, 2010 16:48

danix ha scritto:
jimmy_page_89 ha scritto:mero ordine alfabetico

ok, ma in questo modo non rispetteranno l'ordine corretto e si rischia che una dipendenza venga compilata dopo del pacchetto a cui serve...

questo compito lo deve svolgere lo script:
1) raccogliere tutti slack-required
2) pulirli di tutti i pacchetti già installati
3) verificare che dei rimanenti siano presenti tutti gli slackbuild (e slack-desc ecc) in una direcory
4) determinare l'ordine di compilazione.
5) lanciare la compilazione.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4396
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda danix » ven mag 28, 2010 17:41

più o meno ho capito cosa intendi, ma non credo di essere in grado di scrivere una funzione che estragga l'ordine esatto dai vari required... :(

In ogni caso l'ho provato or ora così com'è (tranne un paio di particolari che mi erano sfuggiti) e sembra funzionare... ho provato con rtorrent e ha funzionato (beh, sulla mia current64 non compila rtorrent, ma questo è un altro discorso, però lo script va benone) :D
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda ZeroUno » ven mag 28, 2010 17:53

e allora modularizziamoci... quella parte la scrivo io e tu la integri.
Potrebbe essere necessario personalizzarlo per adattarlo ai tuoi.

Ti faccio uno script che generi in output un file .queue compatibile con il tuo.

Anche se mi vengono in mente altre idee diverse, per ora il cuore dello script che faccio dovrebbe essere compatibile con un po' tutto.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4396
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda danix » ven mag 28, 2010 17:56

ci sto!! :)

comunque se hai altre idee spara che vediamo che si può fare... anche se io sono abbastanza terra terra con lo scripting (come avrai potuto vedere)... ;)
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda Blallo » ven mag 28, 2010 21:49

non credo serva un ordine delle dipendenze
si può fare che ad ogni dipendenza legga a sua volta il required (e così via ricorsivamente, prima o poi arriverà ad un pacchetto senza dipendenze extra)
così al controllo successivo quella dipendenza poi risulterà comunque installata
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3226
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda ZeroUno » ven mag 28, 2010 22:00

La mia idea è che tu come parametro gli passi solo UN pacchetto da compilare, il resto se li trova lui.
Comunque per ora ho tirato fuori questo (mi sto allargando molto più del necessario)

finddep.sh
Codice: Seleziona tutto
#!/bin/bash

if [ -z "$1" ];then
  echo "usage: $0 <nomesoftware>"
  exit
fi

# Cerca il path di un software
#   output=path del software, retcode: 0=ok, 1=dup, 2=non esiste
function findsw(){
  PT=$(find -name $1.SlackBuild 2>/dev/null)
  if [ -z "$PT" ];then
    return 2
  fi
  if [ $(echo $PT|wc -w) -ne 1 ];then
    return 1
  fi
  echo $(dirname $PT)
  return 0
}
# Determina se un software è installato (non verifica versione)
#   output=niente, retcode: 0=installato, >0 non installato
function isinst(){
  if [ -z "$1" ];then
    echo "errore interno:parametro non specificato a isinst" >&2
    exit 1
  fi
  (cd /var/log/packages/;ls|sed 's/^\(.*\)-[^\-]*-[^\-]*-[^\-]*$/\1/')|grep -q ^$1$
  return $?
}
# rimuove dipenze già soddisfatte da uno slack-required
# se il file non esiste viene considerato come vuoto
#   output=lista dip non sodd, retcode: 0=tutte soffisfatte, >0 no
function striprequired(){
  if [ ! -e $1 ];then
    return 0
  fi
  R=0
  for DEP in $(cat $1|sed -r 's/^([^ ]+)( +([^ ]+) +([^ |]+))?( *\| *([^ ]+)( +([^ ]+) +([^ |]+))?)?.*$/\1|\6/'|sed 's/|$//');do
    D=$(echo $DEP|cut -f1 -d"|")
    if isinst $D;then continue;fi
    D=$(echo $DEP|cut -f2 -d"|")
    if [ ! -z "$D" ];then if isinst $D;then continue;fi;fi
    echo "$DEP"
    R=1
  done
  return $R

}
# aggiunge alla lista da compilare
#  outcode: 2=il pacchetto non è presente, 1=il pacchetto è duplicato, 0=ok o già presente
function addtolist(){
  echo $TOCOMPILE|grep -q " $1 "
  if [ $? -eq 0 ];then
    return 0
  else
    findsw $1 >/dev/null
    ERR=$?
    if [ $ERR -ne 0 ];then
      return $ERR
    fi
    TOCOMPILE=" $1$TOCOMPILE "
    return 0
  fi
}
# aggiunge il pacchetto e le dipendenze
# abortisce se il pacchetto non esiste o se è duplicato
function addpackage(){
  local ND
  if addtolist $1;then
    for ND in $(striprequired $(findsw $1)/slack-required|cut -f1 -d"|");do
      addpackage $ND $1
    done
  else
    findsw $1 # >/dev/null
    if [ $? -eq 1 ];then
      echo "'$1' è presente due o più volte nella directory. ABORT"
    else
      if [ ! -z "$2" ];then
        echo "la dipendenza '$1' richiesta da '$2' non è stata trovata. ABORT"
      else
        echo "'$1' non trovato. ABORT"
      fi
    fi
    exit 1
  fi
}

CWD=$(pwd)


TOCOMPILE=""

for PKG in $*;do
  addpackage $PKG
done

echo $TOCOMPILE


La cosa buona di questo script è che trova i pacchetti anche in una ramificazione (io sul mio hd rispecchio la struttura di slacky)

Codice: Seleziona tutto
# ./finddep.sh bar kmid clamav
la dipendenza 'gus-patches' richiesta da 'timidity++' non è stata trovata. ABORT

# ./finddep.sh bar kmid clamav
clamav gus-patches timidity++ drumstick kmid bar


sto facendo altre aggiunte
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4396
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda danix » sab mag 29, 2010 20:08

ho provato lo script e funziona come da aspettative (Matteo sei un grande), però automatizzando il tutto, si presuppone che gli slackbuild siano già allineati allo standard e così non è, nel senso che bisogna sempre metterci mano prima di lanciarli...
Secondo voi questa è la strada giusta??
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda ZeroUno » sab mag 29, 2010 21:26

Lo script come l'ho postato non va a leggere dentro lo SlackBuild, quindi funziona (unico difetto è se il nome del pacchetto e il nomefile dello slackbuild non coincidono. Se il pacchetto si chiama pippo e PKGNAME è pluto non è importante, l'importante è che il txz finale sia pippo-123-...

La parte che sto elaborando è più complicata e presume alcuni requisiti da parte dello slackbuild e dello slack-desc (per ora), ma effettua un check per vedere se lo SB sia un minimo standard o meno e ne sfrutta le feature in caso positivo.
Allo stato di sviluppo (non sufficiente per essere postato), i controlli non sono molti, infatti mi ha fallito i test sugli slackbuild con nomefile<>$PKGNAME (accetta anche $NAME o $PRGNAM)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4396
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: BASH - script per pacchettizzare in serie ;)

Messaggioda ZeroUno » dom mag 30, 2010 11:08

Questo script e altro li rilascio sotto github:
http://github.com/zuno/slacky
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4396
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite