txz e packages.txt

Postate qui se avete consigli per migliorare i pacchetti disponibili in questo sito o se avete problemi con installazione, funzionamento o altro.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il nome del pacchetto.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
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.
Rispondi
Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

txz e packages.txt

Messaggio da conraid »

Per creare packages.txt su slackers.it uso lo script di Alien Bob leggermente modificato

Codice: Seleziona tutto

for pkg in $(find . -type f -name '*cf.tgz' -print)
do                                                  
            NAME=$(echo $pkg|sed -re "s/(.*\/)(.*.tgz)$/\2/")                                     
            LOCATION=$(echo $pkg|sed -re "s/(.*)\/(.*.tgz)$/\1/")                                 
            SIZE=$( expr $(gunzip -l $pkg |tail -1|awk '{print $1}') / 1024 )                     
            USIZE=$( expr $(gunzip -l $pkg |tail -1|awk '{print $2}') / 1024 )                    
            REQUIRED=""                                                                           
            CONFLICTS=""                                                                          
            SUGGESTS=""                                                                           
            METAFILE=${NAME%tgz}meta                                                              
            echo "PACKAGE NAME:  $NAME" > $LOCATION/$METAFILE                                     
            if [ -n "$DL_URL" ]; then                                                             
                echo "PACKAGE MIRROR:  $DL_URL" >> $LOCATION/$METAFILE                            
            fi                                                                                    
            echo "PACKAGE LOCATION:  $LOCATION" >> $LOCATION/$METAFILE                            
            echo "PACKAGE SIZE (compressed):  $SIZE K" >> $LOCATION/$METAFILE                     
            echo "PACKAGE SIZE (uncompressed):  $USIZE K" >> $LOCATION/$METAFILE                  
                   
            echo "PACKAGE DESCRIPTION:" >> $LOCATION/$METAFILE                                    
            echo $NAME                                                                            
            tar xzfO $pkg install/slack-desc |grep -E '\w+\:'|grep -v '^#' >> $LOCATION/$METAFILE 
            echo "" >> $LOCATION/$METAFILE                                                        
done
per i file txz come potrei fare?

xz -l purtroppo non è ancora abilitato

Codice: Seleziona tutto

# xz -l
xz: --list is not implemented yet.
Ho provato una cosa come questa (prendendo spunto dai tool del team che ha creato xz), ma non riesco a farla funzionare

Codice: Seleziona tutto

SIZE=$(expr $(ls -lL $pkg | tr -s ' ' | cut -f 5 -d ' ') / 1024 )                     
mknod "$TMP/fifo" p                                                                   
( xz -c "$1" | tee "$TMP/fifo" | $TAR xf - -C "$TMP" install > /dev/null 2> /dev/null ) & USIZE=$(wc -c < "$TMP/fifo" | tr -d ' ')                                                                                                              
USIZE=$((USIZE / 1024))                                                                                           
 rm -f "$TMP/fifo"                                                                                                 
mi date una mano a trovare la dimensione del pacchetto decompresso, praticamente a tradurre questa riga

Codice: Seleziona tutto

   USIZE=$( expr $(gunzip -l $pkg |tail -1|awk '{print $2}') / 1024 )    
meglio ancora sarebbe fare un'unca sezione che prende sia i tgz sia i txz

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: txz e packages.txt

Messaggio da d4z_c0nf »

Eh infatti stavo pensando, che per SIZE si poteva usare tranquillamente ls,
per USIZE ci penso...
rock

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: txz e packages.txt

Messaggio da targzeta »

La domanda spontanea è:"ora alien come fa?"

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: txz e packages.txt

Messaggio da conraid »

spina ha scritto:La domanda spontanea è:"ora alien come fa?"
e come fa Pat anche. Boh
Alien nel suo repository usa sempre tgz e non ha modificato gli script

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: txz e packages.txt

Messaggio da targzeta »

A meno di non decomprimerlo in memoria bisognerebbe vedere gli script di Pat, ma se li nasconde? E' quasi un ora che cerco di trovare qualcosa con google e non trovo niente. Tra l'altro anche Fred Emmot ha aggiornato e quindi anche lui usa uno script analogo a quello di Pat, visto che ora usa gli xz.
Da quello che ho visto sembra che nel file xz ci sia scritta la dimensione del file non compressa, così come quella del file compresso. Se vuoi puoi dare una lettura qui:
/usr/doc/xz-4.999.8beta/file-format.txt

Quindi si potrebbe scrivere un piccolo programma in C che produce queste info in output. Solo che da quello che ho capito con uno sguardo veloce, implica scandire tutto il file, perchè dovrebbe essere diviso in blocchi, e ogni blocco si porta dietre le informazioni relative solo alla sua parte.

Non so se mi sono spiegato bene,
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: txz e packages.txt

Messaggio da conraid »

spina ha scritto: Non so se mi sono spiegato bene,

se guardi gli autori di xz, producono anche pkgtool per Slackware che supporta però i file tlz (lzma prima di xz) e lo mette proprio in memoria. Da li ho preso spunto per quell'esempio che ho mostrato, ma non riesco a farlo funziona con xz
Quando metteranno xz -l con compatibilità gzip sarà semplice :-(

Ora scrivo a Pat, anche se è da un anno che non mi caca

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: txz e packages.txt

Messaggio da targzeta »

conraid ha scritto:...
se guardi gli autori di xz, producono anche pkgtool per Slackware che supporta però i file tlz (lzma prima di xz) e lo mette proprio in memoria. Da li ho preso spunto per quell'esempio che ho mostrato, ma non riesco a farlo funziona con xz...
Non ho capito che vuoi dire, io mi sto guardando i sorgenti di xz per vedere cosa si può fare. Il tuo script dovresti modificarlo per cercare tutti i t.z e non solo i tgz. Poi si dovrebbe parametrizzare il comando da eseguire per prelevare le info.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: txz e packages.txt

Messaggio da d4z_c0nf »

Conraid io ho fatto un attimo una prova con un mio tgz, trovando delle dicordanze:

Codice: Seleziona tutto

USIZE_tuo=9240
USIZE_mio=8972
In questa fase il mio usize è stato calcolato facendo questi passi:

Codice: Seleziona tutto

a=`tar -tvf amsn-0.97.2-athlon64-2sl.tgz | tr -s ' ' | cut -f 3 -d ' ' | sed -r 's/^0$/4096/' `
il sed è perchè tar -tvf le directory le valuta 0 byte, non so perchè

for per sommare tutti i valori di a

Codice: Seleziona tutto

for i in $a; do b=$((b+i)); done
e poi

Codice: Seleziona tutto

b=$((b/1024))

per la conversione in Kb.

Per l'xz
a sarebbe del tipo

Codice: Seleziona tutto

a=`xz -dc $pkg | tar -tv | tr -s ' ' | cut -f 3 -d ' ' | sed -r 's/^0$/4096/' `
e b calcolato nello stesso modo.
Ci sta una differenza di 300k su un pacchetto intorno ai 10mega, quindi una tolleranza del 3%.

In ogni caso ho provato anche a scompattare il tgz e fare un procedimento simile per il calcolo della dimensione, in questo caso la discordanza con il valore calcolato scompattandolo è di 76k (facendo un ls ricorsivo e sommando tutte le dimensioni dei file mi viene 8896K che è comunque molto lontano dal "tuo" USIZE). Devo aver fatto qualche errore concettuale, comunque segnalo sta cosa perchè magari può essere uno spunto.
rock

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: txz e packages.txt

Messaggio da conraid »

spina ha scritto:
conraid ha scritto:...
se guardi gli autori di xz, producono anche pkgtool per Slackware che supporta però i file tlz (lzma prima di xz) e lo mette proprio in memoria. Da li ho preso spunto per quell'esempio che ho mostrato, ma non riesco a farlo funziona con xz...
Non ho capito che vuoi dire, io mi sto guardando i sorgenti di xz per vedere cosa si può fare. Il tuo script dovresti modificarlo per cercare tutti i t.z e non solo i tgz. Poi si dovrebbe parametrizzare il comando da eseguire per prelevare le info.
Fin li ci sono emanuale, per desso mi basta anche fare due sezioni distinte, tanto quelle parti creano i file .meta (che poi cancello) e da li poi nasce il packages.txt

Intendo questi script
http://tukaani.org/pkgtools/
esiste un makerepo che fa quel che chiedo, ma ancora senza txz, loro usano i tlz, che erano una delle opzioni di Pat quando ha scelto il metodo di compressione. Cioè utilizzano lzma utils, che sono le vecchie xz utils


La funziona è questa

Codice: Seleziona tutto

# PACKAGES.TXT
create_packagestxt() {
  local I DIRNAME     
  echo                
  echo "Creating $1/PACKAGES.TXT"
  DIRNAME=${1##*/}               

  # Cache file:
  if [ "$NO_CACHE" = 1 ]; then
    : > "$TMP/cache"          
  elif [ -f "$1/PACKAGES.TXT" ]; then
    cat "$1/PACKAGES.TXT" > "$TMP/cache"
  elif [ -f "$1/PACKAGES.TXT.gz" ]; then
    gunzip -c "$1/PACKAGES.TXT.gz" > "$TMP/cache"
  fi                                             
  # Create the list of valid package names:      
  create_safelist "$1"                           

  # Create the new PACKAGES.TXT with requested fields:
  for I in $(cat "$TMP/pkglist.$DIRNAME"); do         
    # A kind of progress indicator:                   
    printf "%-60s" "$I:"                              
    # Package may be already in PACKAGES.TXT. We save a lot of time
    # by reusing that information:                                 
    unset P_NAME P_MIRROR P_LOCATION P_CSIZE P_USIZE P_MD5SUM P_SHA1SUM \
        P_REQUIRED P_CONFLICTS P_SUGGESTS P_DESC                         
    if [ -s "$TMP/cache" ]; then                                         
      packagestxt_parse "$TMP/cache" "$I"                                
    else                                                                 
      examine_package_contents "$I"                                      
    fi                                                                   
    # Set the variables:                                                 
    [ -z "$P_NAME" ] && P_NAME=${I##*/}                                  
    # Refresh P_LOCATION since the package may be moved:                 
    P_LOCATION="./${I%/*}"                                               
    [ "$P_LOCATION" = "./$I" ] && P_LOCATION=.                           
    P_CSIZE=${P_CSIZE:-"$(($(ls -lL "$I" | tr -s ' ' | cut -f 5 -d ' ') / 1024))"}
    [ -z "$P_USIZE" ] && examine_package_contents "$I"                            
    # Optional fields:                                                            
    if [ $O_MD5SUM = 1 -a ${#P_MD5SUM} != 32 ];then                               
      echo -n " MD5"                                                              
      P_MD5SUM=$(md5sum < "$I" | cut -f 1 -d ' ')                                 
    fi                                                                            
    if [ $O_SHA1SUM = 1 -a ${#P_SHA1SUM} != 40 ]; then                            
      echo -n " SHA1"                                                             
      P_SHA1SUM=$(sha1sum < "$I" | cut -f 1 -d ' ')                               
    fi                                                                            
    if [ $O_SLAPT = 1 -a \( -z "$P_REQUIRED" -o -z "$P_CONFLICTS" \               
        -o -z "$P_SUGGESTS" \) ]; then                                            
      examine_package_contents "$I"                                               
    fi                                                                            
    # Set mirror after all examine_pakcage_contents commands because we want      
    # this to be overridable by a command line option:                            
    P_MIRROR=${MIRROR:-"$P_MIRROR"}                                               
    # Write the entry to a preliminary PACKAGES.TXT file:                         
    {                                                                             
      echo "PACKAGE NAME:                 $P_NAME"                                
      [ $O_MIRROR = 1 ] && echo "PACKAGE MIRROR:  $P_MIRROR"                      
      echo "PACKAGE LOCATION:             $P_LOCATION"                            
      printf "PACKAGE SIZE (compressed):    %6d K\n" "$P_CSIZE"                   
      printf "PACKAGE SIZE (uncompressed):  %6d K\n" "$P_USIZE"                   
      [ $O_MD5SUM = 1 ] && echo "PACKAGE MD5 SUM:              $P_MD5SUM"         
      [ $O_SHA1SUM = 1 ] && echo "PACKAGE SHA1 SUM:             $P_SHA1SUM"       
      if [ $O_SLAPT = 1 ]; then                                                   
        echo "PACKAGE REQUIRED:  $P_REQUIRED"                                     
        echo "PACKAGE CONFLICTS:  $P_CONFLICTS"                                   
        echo "PACKAGE SUGGESTS:  $P_SUGGESTS"                                     
      fi                                                                          
      echo "$P_DESC"                                                              
      # Empty line works as a separator:                                          
      echo                                                                        
    } >> "$TMP/txt"                                                               
    # Collect statistics:                                                         
    TOTAL_CSIZE=$((TOTAL_CSIZE + P_CSIZE))                                        
    TOTAL_USIZE=$((TOTAL_USIZE + P_USIZE))                                        
    echo " OK"                                                                    
  done                                                                            

  # Convert from KiB to MiB:
  TOTAL_CSIZE=$((TOTAL_CSIZE / 1024))
  TOTAL_USIZE=$((TOTAL_USIZE / 1024))

  # Add the header information:
  cat << EOF > "$TMP/PACKAGES.TXT"

PACKAGES.TXT;  $(date)

This file provides details on the packages found
in the $1/ directory.                           

EOF
  printf "Total size of all packages (compressed) :    %5d MB\n" "$TOTAL_CSIZE" >> "$TMP/PACKAGES.TXT"
  printf "Total size of all packages (uncompressed) :  %5d MB\n" "$TOTAL_USIZE" >> "$TMP/PACKAGES.TXT"
  echo >> "$TMP/PACKAGES.TXT"                                                                         
  echo >> "$TMP/PACKAGES.TXT"                                                                         

  # Remove trailing spaces and append to the final PACKAGES.TXT:
  sed 's/ *$//' "$TMP/txt" >> "$TMP/PACKAGES.TXT"               
  rm -f "$TMP/txt"                                              
}   
lasciando perdere create_safelist (crea la lista dei pacchetti, io uso find) le funzioni utili sono

Codice: Seleziona tutto

examine_package_contents() {
  echo -n " uncompress"     
  mknod "$TMP/fifo" p       
  ( uncompress_pkg "$1" | tee "$TMP/fifo" | $TAR xf - -C "$TMP" install \
        > /dev/null 2> /dev/null ) &                                     
  P_USIZE=$(wc -c < "$TMP/fifo" | tr -d ' ')                             
  P_USIZE=$((P_USIZE / 1024))                                            
  rm -f "$TMP/fifo"                                                      
  wait # Wait for tar.                                                   
  # Nice trick to avoid blank lines in P_DESC:                           
  P_DESC=$(echo; grep "^$(package_basename "$1"):" "$TMP/install/slack-desc" 2> /dev/null)
  P_DESC="PACKAGE DESCRIPTION:$P_DESC"                                                    
  if [ $O_SLAPT = 1 ]; then                                                               
    # See packagestxt_parse() for reasoning of the extra space.                           
    P_REQUIRED="$(slapt_extract "$TMP/install/slack-required") "                          
    P_CONFLICTS="$(slapt_extract "$TMP/install/slack-conflicts") "                        
    P_SUGGESTS="$(slapt_extract "$TMP/install/slack-suggests") "                          
  fi                                                                                      
  rm -rf "$TMP/install"                                                                   
}      

Codice: Seleziona tutto

uncompress_pkg() {            
  case "$1" in                
    *.tlz|*.lzma)             
      # Reset PKGTOOLS_LZMA if we are installing/upgrading
      # the lzma package:                                 
      case "$1" in (lzma-*) PKGTOOLS_LZMA= ;; esac        
      # Check which lzma command we are using:            
      [ -z "$PKGTOOLS_LZMA" ] && check_cmd_lzma           
      case "$PKGTOOLS_LZMA" in                            
                # -d is only temporarily here             
        new)    unlzma -dc "$1" 2> /dev/null ;;           
        old)    lzma d -si -so < "$1" 2> /dev/null ;;     
        *)      echo 'BUG in uncompress_pkg!' 1>&2 ;;     
      esac                                                
      ;;                                                  
    *.tbz|*.bz2)                                          
      # Use bunzip2 instead of bzip2 for BusyBox compatibility:
      bunzip2 -c "$1" 2> /dev/null                             
      ;;                                                       
    *.tar)                                                     
      cat "$1" 2> /dev/null                                    
      ;;                                                       
    *)                                                         
      # For explodepkg compatibility we default to tgz.        
      # Do no add -f as it does not work with busybox.         
      gunzip -c "$1" 2> /dev/null                              
      ;;                                                       
  esac                                                         
}   



In pratica per un tgz per esempio tutto diventerebbe

Codice: Seleziona tutto

 mknod "$TMP/fifo" p       
  ( gunzip -c "$1" | tee "$TMP/fifo" | $TAR xf - -C "$TMP" install \
        > /dev/null 2> /dev/null ) &                                     
  P_USIZE=$(wc -c < "$TMP/fifo" | tr -d ' ')                             
  P_USIZE=$((P_USIZE / 1024))                                            
  rm -f "$TMP/fifo"         


siccome esiste xz -c pensavo di fare la stessa cosa, ma mi da errore
sicuramente sbaglio qualcosa io

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: txz e packages.txt

Messaggio da conraid »

Ora guardo d4z_c0nf, ma lo script non è "mio", come ti dicevo uso quello di Alien Bob (ho scritto anche a lui, speriamo almeno lui risponda)

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: txz e packages.txt

Messaggio da d4z_c0nf »

conraid ha scritto:Ora guardo d4z_c0nf, ma lo script non è "mio", come ti dicevo uso quello di Alien Bob (ho scritto anche a lui, speriamo almeno lui risponda)
Sì lo so che non è tuo, ho scritto tuo per comodità.
Se vuoi edito e scrivo USIZE_ALIEN :tongue: :tongue: :tongue:
rock

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: txz e packages.txt

Messaggio da conraid »

Alien risponde subito :-)
Hi Corrado

For my own repository I am not planning to switch to .txz and therefore I
have not yet modified my repository generator script to support .txz yet.
The script is found at
http://www.slackware.com/~alien/tools/g ... s_files.sh and it should not
be hard to expand it to also look at .txz packages.

Cheers, Eric

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: txz e packages.txt

Messaggio da conraid »

d4z_c0nf ha scritto: Sì lo so che non è tuo, ho scritto tuo per comodità.
Se vuoi edito e scrivo USIZE_ALIEN :tongue: :tongue: :tongue:
rock
:-)
era per dire che non arrivo a tanto :-)

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: txz e packages.txt

Messaggio da targzeta »

Sarà che non è difficile, ma senza l'opzione -l di xz si deve decomprimere il file in memoria. Non lo so, sto guardando lo script che mi hai postato ma...

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: txz e packages.txt

Messaggio da conraid »

spina ha scritto:Sarà che non è difficile, ma senza l'opzione -l di xz si deve decomprimere il file in memoria. Non lo so, sto guardando lo script che mi hai postato ma...
è quello che gli ho risposto, vediamo

Se rispondesse Pat... grrrrrrrr

Comunque questo indica che Alien segue Slackware64, ma poi il tutto lo tiene Pat ugualmente

Rispondi