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.
Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da ZeroUno »

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
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da danix »

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??
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da Blallo »

mero ordine alfabetico

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da danix »

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...
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da ZeroUno »

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
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da danix »

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
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da ZeroUno »

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
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da danix »

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)... ;)
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da Blallo »

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

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da ZeroUno »

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
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da danix »

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??
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da ZeroUno »

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: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: BASH - script per pacchettizzare in serie ;)

Messaggio da ZeroUno »

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

Rispondi