Zencafe Lokal Repositori Part 2

Pada posting saya kemarin tentang Zencafe Lokal Repositori masih terdapat kekurangan yaitu dalam proses pembuatan file PACKAGES.TXT masih harus dilakukan secara manual oleh user. Bayangkan jika misalkan anda mempunyai 100 packages dan terdapat pada sebuah direktori xx, bagaimana anda mau menuliskan file PACKAGES.TXT yang dibutuhkan oleh repository lokal mirror di Zencafe tersebut ? Yang jelas pasti capek karena anda mengulang-ulang proses ekstrak packages dan mengkopi isi dari file slack-desc kemudian mem-paste-nya pada file PACKAGES.TXT :)

Pada posting kali ini, saya sudah membuatkan sebuah script yang saya beri nama zcrepo dan tugasnya adalah untuk meng-otomatis-kan proses pembuatan file PACKAGES.TXT dan PACKAGES.TXT.gz :) tersebut, selain meng-otomatis-kan proses pembuatan kedua file PACKAGES.TXT dan PACKAGES.TXT.gz saya juga menambahkan proses pembuatan file berbentuk iso-nya sekalian sehingga nanti user hanya tinggal mem-burning file iso tersebut :)


Sekalian untuk memudahkan para pengguna pemula distro GNU/Linux Zencafe, saya juga sudah membuatkan package binary-nya supaya lebih mudah digunakan dan lebih mudah di install :) Sedangkan untuk dapat menggunakan script zcrepo tersebut, langkah pertama download atau unduhlah dahulu dengan menggunakan wget package binary-nya disini seperti dibawah ini:

operatore[~]$ wget -c http://www.martinusadyh.web.id/download/zcrepo-1.0-i486-mrt.tgz
--21:19:15--  http://www.martinusadyh.web.id/download/zcrepo-1.0-i486-mrt.tgz
           => `zcrepo-1.0-i486-mrt.tgz'
Resolving www.martinusadyh.web.id... 216.240.157.43
Connecting to www.martinusadyh.web.id|216.240.157.43|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3,270 (3.2K) [application/x-tar]

100%[========================================================>] 3,270         --.--K/s

21:19:20 (363.23 KB/s) - `zcrepo-1.0-i486-mrt.tgz' saved [3270/3270]

operatore[~]$

Setelah tersimpan pada komputer anda, langkah selanjutnya adalah mulai-lah meng-install script tersebut pada komputer anda dengan cara mengetikkan installpkg zcrepo-1.0-i486-mrt.tgz dengan akses root seperti dibawah ini:

operatore[Documents]$ su
Password:
root[Documents]# installpkg zcrepo-1.0-i486-mrt.tgz
Installing package zcrepo-1.0-i486-mrt...
PACKAGE DESCRIPTION:
zcrepo: zcrepo-1.0-i486-mrt.tgz
zcrepo:
zcrepo: zcrepo is a script builder for local repository in GNU/Linux Zencafe,
zcrepo: if you don't know how to usage this script, please feel free to read
zcrepo: my manual howto at http://martinusadyh.web.id/
zcrepo:
zcrepo: This version tested run well on GNU/Linux Zencafe 1.0 and 1.2
zcrepo: by Martinus Ady H < mrt.itnewbies@gmail.com >

Karena script zcrepo hanya berfungsi untuk membuatkan file PACKAGES.TXT, PACKAGES.TXT.gz dan file ISO maka cara penggunaannya sangat mudah sekali. Disini saya menganggap bahwa anda mempunyai beberapa kumpulan packages untuk distro Zenwalk, Slackware atau Zencafe (Perhatian: Sesuaikan dahulu versi dari distro Zenwalk atau Slackware dengan distro Zencafe jika packages-nya ingin berjalan dengan baik di distro Zencafe. Saran saya tanyakan dahulu ke teman-teman di channel #awali@DALnet atau di http://forum.linux.or.id/ pada thread Slackware, atau jika anda bingung harus bertanya kemana silahkan lihat pada halaman support di http://jatim.awali.or.id/support/) pada sebuah direktori bernama myPackages seperti gambar dibawah ini:
gambar_direktori_package
Click To Large

setelah itu langkah selanjutnya adalah anda hanya perlu mengetikkan perintah zcrepo create-meta untuk membuat meta-file dan zcrepo create-iso untuk membuat file iso dari direktori kumpulan packages anda tersebut seperti dibawah ini:

  • Untuk membuat file-meta dari direktori myPackages:
    operatore[Documents]$ zcrepo create-meta myPackages/
    Creating Meta-file
    Finding packages in myPackages/ directory ...
    Found 4 packages in myPackages/ directory ...
    Building meta-packages ...
    creating meta in myPackages/ ...
    Processing xap/k3b-1.0rc5-i486-1kjz.tgz packages                        [ OK ]
    Processing xap/graveman-0.3.12.5-i486-44.1.tgz packages                 [ OK ]
    Processing xap/pidgin-2.0.0-i486-1zc1.tgz packages                      [ OK ]
    Processing bc-1.06-i486-46.1.tgz packages                       [ OK ]
    [4] Total Packages      [4] Packages Successfully       [0] Packages Failed
    Saving meta-file in '/home/operatore/Documents/myPackages//PACKAGES.TXT'
    operatore[Documents]$
    
  • Untuk membuat file iso dari direktori myPackages:
    operatore[Documents]$ zcrepo create-iso myPackages/
    Creating iso from myPackages/ directory ...
    Creating Meta-file
    Finding packages in myPackages/ directory ...
    Found 4 packages in myPackages/ directory ...
    Building meta-packages ...
    creating meta in myPackages/ ...
    Processing xap/k3b-1.0rc5-i486-1kjz.tgz packages                        [ OK ]
    Processing xap/graveman-0.3.12.5-i486-44.1.tgz packages                 [ OK ]
    Processing xap/pidgin-2.0.0-i486-1zc1.tgz packages                      [ OK ]
    Processing bc-1.06-i486-46.1.tgz packages                       [ OK ]
    [4] Total Packages      [4] Packages Successfully       [0] Packages Failed
    Begining creating iso file from myPackages/ directory
     74.07% done, estimate finish Fri Nov  2 20:33:24 2007
    Total translation table size: 0
    Total rockridge attributes bytes: 939
    Total directory bytes: 2048
    Path table size(bytes): 22
    Max brk space used 21000
    6769 extents written (13 MB)
    Done.
    Saving iso file in '/home/operatore/Documents/ZC_Lokal_Mirror.iso'
    Now, you can burn this iso file into CD Blank or DVD Blank with
    your favorite software like k3b or graveman ;-)
    operatore[Documents]$
    

Mudah bukan ? Setelah selesai melakukan proses diatas, sekarang anda dapat melanjutkan proses konfigurasi pada file netpkg.conf seperti pada posting saya tentang Zencafe Lokal Repositori kemarin cuma bedanya adalah sekarang anda sudah tidak perlu membuat file-meta dan file iso secara manual lagi :) karena semuanya sudah dikerjakan oleh script zcrepo :)

Jika anda merasa bingung atau mempunyai masalah dengan cara kerja script zcrepo ini, jangan malu-malu untuk memberitahu saya lewat e-mail maupun lewat comment pada posting ini :) Masukkan dari teman-teman sangat-sangat saya tunggu. Sedangkan buat yang sudah paham dengan cara kerja script zcrepo ini, ayo mari sama-sama di-oprek supaya Zencafe ke-depannya lebih mudah digunakan dan lebih banyak fitur-fitur-nya :)

Referensi:
- Download zcrepo-1.0-i486-mrt.tgz

8 Responses to “Zencafe Lokal Repositori Part 2”

  1. klik says:

    Saya udah coba pakai script dibawah ini bisa untuk buat packages.txt
    tapi untuk edit netpkg versi 4.6.5 blok yg mana yg diedit??

    nih script tuk buat PACKAGES.TXT dari txz,tgz,tlz,tbz

    #!/bin/bash

    # The directory of the Slackware package repository:
    REPOSROOT=${REPOSROOT:-”/home/umum/Downloads/zenwalk/”}

    # Under what URL is the repository accessible:
    DL_URL=${DL_URL:-”file://home/umum/Downloads/zenwalk/”}

    #
    # pkgcomp
    #
    function pkgcomp {
    # Return the compression utility used for this package,
    # based on the package’s extension.
    # Determine extension:
    PEXT=”$( echo $1 | rev | cut -f 1 -d . | rev)”
    # Determine compression used:
    case $PEXT in
    ‘tgz’ )
    COMP=gzip
    ;;
    ‘tbz’ )
    COMP=bzip2
    ;;
    ‘tlz’ )
    COMP=lzma
    ;;
    ‘txz’ )
    COMP=xz
    ;;
    esac
    echo ${COMP:-”gzip”}
    }

    #
    # addpkg
    #
    function addpkg {
    # ———————————————–
    # Functionality used from the slapt-get FAQ#17 at
    # http://software.jaos.org/BUILD/slapt-get/FAQ :
    # ———————————————–
    # Generate a package’s metafile if missing, and add the content of
    # this metafile to the PACKAGES.TXT
    # Argument #1 : full path to a package
    # Argument #2 : full path to PACKAGES.TXT file/

    if [ ! -f "$1" -o ! -f "$2" ]; then
    echo “Required arguments ‘$1′ and/or ‘$2′ are invalid files!”
    exit 1
    fi
    PKG=$1
    PACKAGESFILE=$2

    if [ "$(echo $PKG|grep -E '(.*{1,})\-(.*[\.\-].*[\.\-].*).t[blxg]z[ ]{0,}$’)” == “” ];
    then
    return;
    fi

    NAME=$(echo $PKG|sed -re “s/(.*\/)(.*.t[blxg]z)$/\2/”)
    LOCATION=$(echo $PKG|sed -re “s/(.*)\/(.*.t[blxg]z)$/\1/”)
    METAFILE=${NAME%t[blxg]z}meta
    TXTFILE=${NAME%t[blxg]z}txt

    if [ "$FORCEPKG" == "yes" -o ! -f $LOCATION/$METAFILE ]; then
    echo “–> Generating .meta file for $NAME”

    # Determine the compression tool used for this package:
    COMPEXE=$( pkgcomp $PKG )

    SIZE=$(du -s $PKG | cut -f 1)

    if [ "$COMPEXE" = "xz" ]; then
    # xz does not support the “-l” switch yet:
    cat $PKG | $COMPEXE -dc | dd 1> /dev/null 2> $HOME/.temp.uncomp.$$
    USIZE=”$(expr $(cat $HOME/.temp.uncomp.$$ | head -n 1 | cut -f1 -d+) / 2)”
    rm -f $HOME/.temp.uncomp.$$
    else
    USIZE=$( expr $(gunzip -l $PKG |tail -1|awk ‘{print $2}’) / 1024 )
    fi

    if [ $FOR_SLAPTGET -eq 1 ]; then
    REQUIRED=$($COMPEXE -cd $PKG | tar xOf – install/slack-required 2>/dev/null|tr -d ‘ ‘|xargs -r -iZ echo -n “Z,”|sed -e “s/,$//”)
    CONFLICTS=$($COMPEXE -cd $PKG | tar xOf – install/slack-conflicts 2>/dev/null|tr -d ‘ ‘|xargs -r -iZ echo -n “Z,”|sed -e “s/,$//”)
    SUGGESTS=$($COMPEXE -cd $PKG | tar xOf – install/slack-suggests 2>/dev/null|xargs -r )
    fi

    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
    if [ $FOR_SLAPTGET -eq 1 ]; then
    echo “PACKAGE REQUIRED: $REQUIRED” >> $LOCATION/$METAFILE
    echo “PACKAGE CONFLICTS: $CONFLICTS” >> $LOCATION/$METAFILE
    echo “PACKAGE SUGGESTS: $SUGGESTS” >> $LOCATION/$METAFILE
    fi
    echo “PACKAGE DESCRIPTION:” >> $LOCATION/$METAFILE
    $COMPEXE -cd $PKG | tar xOf – install/slack-desc | sed -n ‘/^#/d;/:/p’ >> $LOCATION/$METAFILE
    echo “” >> $LOCATION/$METAFILE
    fi
    touch -r $PKG $LOCATION/$METAFILE

    if [ "$FORCEPKG" == "yes" -o ! -f $LOCATION/$TXTFILE ]; then
    # This is a courtesy service:
    echo “–> Generating .txt file for $NAME”
    $COMPEXE -cd $PKG | tar xOf – install/slack-desc |grep -v ‘^#’ > $LOCATION/$TXTFILE
    touch -r $PKG $LOCATION/$TXTFILE
    fi

    cat $LOCATION/$METAFILE >> $PACKAGESFILE
    } # end of function ‘addpkg’

    #
    # addman
    #
    function addman {
    # Add a package’s content to the MANIFEST file
    # Argument #1 : full path to a package
    # Argument #2 : full path to MANIFEST file

    if [ ! -f "$1" -o ! -f "$2" ]; then
    echo “Required arguments ‘$1′ and/or ‘$2′ are invalid files!”
    exit 1
    fi
    PKG=$1
    MANIFESTFILE=$2

    if [ "$(echo $PKG|grep -E '(.*{1,})\-(.*[\.\-].*[\.\-].*).t[blxg]z[ ]{0,}$’)” == “” ];
    then
    return;
    fi

    NAME=$(echo $PKG|sed -re “s/(.*\/)(.*.t[blxg]z)$/\2/”)
    LOCATION=$(echo $PKG|sed -re “s/(.*)\/(.*.t[blxg]z)$/\1/”)

    # Determine the compression tool used for this package:
    COMPEXE=$( pkgcomp $PKG )

    cat <> $MANIFESTFILE
    ++========================================
    ||
    || Package: $PKG
    ||
    ++========================================
    EOF

    $COMPEXE -cd $PKG | tar -tvvf – >> $MANIFESTFILE
    echo “” >> $MANIFESTFILE
    echo “” >> $MANIFESTFILE

    } # end of function ‘addman’

    #
    # genmd5
    #
    function genmd5 {
    # Generate a package’s MD5SUM (*.md5 file) if missing,
    # and add the md5sum to the CHECKSUMS.md5 file
    # Argument #1 : full path to a package
    # Argument #2 : full path to CHECKSUMS.md5 file

    if [ ! -f "$1" -o ! -f "$2" ]; then
    echo “Required arguments ‘$1′ and/or ‘$2′ are invalid files!”
    exit 1
    fi
    PKG=$1
    MD5SUMS=$2

    NAME=$(echo $PKG|sed -re “s/(.*\/)(.*.t[blxg]z)$/\2/”)
    LOCATION=$(echo $PKG|sed -re “s/(.*)\/(.*.t[blxg]z)$/\1/”)
    MD5FILE=${NAME}.md5

    if [ "$FORCEMD5" == "yes" -o ! -f $LOCATION/$MD5FILE ]; then
    echo “–> Generating .md5 file for $NAME”
    (cd $LOCATION
    md5sum $NAME > $MD5FILE
    )
    touch -r $PKG $LOCATION/$MD5FILE
    fi

    MD5=$(cat $LOCATION/$MD5FILE | cut -d ‘ ‘ -f 1)
    echo “$MD5 $PKG” >> $MD5SUMS
    } # end of function ‘genmd5′

    #
    # genasc
    #
    function genasc {
    # Generate a package’s GPG signature (*.asc file) if missing,
    # Argument #1 : full path to a package

    if [ ! -f "$1" ]; then
    echo “Required argument ‘$1′ is invalid filename!”
    exit 1
    fi
    PKG=$1

    NAME=$(echo $PKG|sed -re “s/(.*\/)(.*.t[blxg]z)$/\2/”)
    LOCATION=$(echo $PKG|sed -re “s/(.*)\/(.*.t[blxg]z)$/\1/”)
    ASCFILE=${NAME}.asc

    if [ "$FORCEASC" == "yes" -o ! -f $LOCATION/$ASCFILE ]; then
    echo “–> Generating .asc file for $NAME”
    (cd $LOCATION
    rm -f $ASCFILE
    gpg_sign $NAME
    )
    touch -r $PKG $LOCATION/$ASCFILE
    fi

    } # end of function ‘genasc’

    #
    # gen_filelist
    #
    function gen_filelist {
    # Argument #1 : full path to a directory
    # Argument #2 : output filename (defaults to FILELIST.TXT) will be
    # created in directory $1 (overwriting existing file).

    if [ ! -d "$1" ]; then
    echo “Required argument ‘$1′ must be a directory!”
    exit 1
    fi
    DIR=$1
    LISTFILE=${2:-FILELIST.TXT}

    ( cd ${DIR}
    cat < ${LISTFILE}
    $(LC_ALL=C date -u)

    Here is the file list for ${DL_URL} ,
    maintained by ${REPOSOWNER} .
    If you are using a mirror site and find missing or extra files
    in the subdirectories, please have the archive administrator
    refresh the mirror.

    EOT
    find . | sort | xargs ls -nld >> ${LISTFILE}
    )
    } # end of function ‘gen_filelist’

    #
    # upd_changelog
    #
    function upd_changelog {
    # Update the ChangeLog.txt with a new entry
    # – written at the beginning of the file.
    # Argument #1 : full path to a directory
    # Argument #2 : a filename (defaults to ‘ChangeLog.txt’)

    if [ ! -d "$1" ]; then
    echo “Required argument ‘$1′ must be an existing directory!”
    exit 1
    fi
    DIR=$1
    CHANGELOG=${2:-ChangeLog.txt}
    if [ -e $DIR/$CHANGELOG -a ! -w $DIR/$CHANGELOG ]; then
    echo “Can not write to file ${DIR}/${CHANGELOG}!”
    exit 1
    fi

    MAXLINE=78 # Lines will be wrapped at MAXLINE characters.
    LOGTEXT=”"
    i=0

    # Ask for a new ChangeLog entry
    read -er -p “Enter ChangeLog.txt description: ”

    if [ "$REPLY" == "" ]; then
    echo “No input, so I won’t update your $CHANGELOG”
    return
    fi

    LOGTXT=”"
    for WORD in $REPLY ; do
    # The word ‘NEWLINE’ forces a… newline in the output.
    # The word ‘LINEFEED’ also signals the start of a new line, but indented.
    if [ "${WORD}" == "NEWLINE" ]; then
    LOGLINE[$i]=”$LOGTXT”
    LOGTXT=”"
    i=$(( $i+1 ))
    elif [ "${WORD}" == "LINEFEED" ]; then
    LOGLINE[$i]=”$LOGTXT”
    LOGTXT=” ”
    i=$(( $i+1 ))
    elif [ $(( ${#LOGTXT}+1+${#WORD} )) -gt $MAXLINE ]; then
    LOGLINE[$i]=”$LOGTXT”
    LOGTXT=” ${WORD}” # indent the text two spaces.
    i=$(( $i+1 ))
    else
    [ "$LOGTXT" != "" ] && LOGTXT=”${LOGTXT} ${WORD}” || LOGTXT=”${WORD}”
    fi
    done
    LOGLINE[$i]=”$LOGTXT”

    cat < ${DIR}/.${CHANGELOG}
    +————————–+
    $(LC_ALL=C date -u)
    EOT

    for IND in $(seq 0 $i); do
    echo “${LOGLINE[$IND]}” >> ${DIR}/.${CHANGELOG}
    done
    echo “” >> ${DIR}/.${CHANGELOG}
    if [ -f "${DIR}/${CHANGELOG}" ]; then
    cat ${DIR}/${CHANGELOG} >> ${DIR}/.${CHANGELOG}
    fi
    mv -f ${DIR}/.${CHANGELOG} ${DIR}/${CHANGELOG}
    }

    #
    # gpg_sign
    #
    function gpg_sign {
    # Create a gpg signature for a file. Use either gpg or gpg2 and optionally
    # let gpg-agent provide the passphrase.
    if [ $USE_GPGAGENT -eq 1 ]; then
    $GPGBIN -bas –batch –quiet $1
    else
    echo $TRASK | $GPGBIN -bas –passphrase-fd 0 –batch –quiet $1
    fi
    return $?
    }

    #
    # rss_changelog
    #
    function rss_changelog {
    # Create a RSS feed out of the ChangeLog.txt
    # Argument #1 : full path to a directory
    # Argument #2 : a filename (defaults to ‘ChangeLog.txt’)
    # Argument #2 : a filename (defaults to ‘ChangeLog.rss’)

    if [ ! -d "$1" ]; then
    echo “Required argument ‘$1′ must be an existing directory!”
    exit 1
    fi
    DIR=$1
    INFILE=${DIR}/${2:-ChangeLog.txt}
    RSSFILE=${DIR}/${3:-ChangeLog.rss}
    if [ -e $RSSFILE -a ! -w $RSSFILE ]; then
    echo “Can not write to RSS file ${RSSFILE}!”
    exit 1
    fi

    # These values are all set in the beginning (can be user-overridden):
    TITLE=”$RSS_TITLE”
    LINK=”$RSS_LINK”
    ICON=”$RSS_ICON”
    CLURL=”$RSS_CLURL”
    DESCRIPTION=”$RSS_DESCRIPTION”
    FEEDMAX=$RSS_FEEDMAX
    UUID=”$RSS_UUID”

    PUBDATE=”"
    LASTBUILDDATE=$(LC_ALL=C TZ=GMT date +”%a, %e %b %Y %H:%M:%S GMT”)
    # The ‘date -R’ RFC-2822 compliant string
    # does not work for Thunderbird!
    counter=0

    # Parse the input file
    cat ${INFILE} | while IFS= read cline ; do
    if [ "$PUBDATE" == "" ]; then
    # PUBDATE is empty, means we’re reading the first line of input.
    # The first line contains the most recent pubdate.
    # For backward compatibility, if the file starts with
    # “+————————–+” then we just skip that.
    [ "$cline" == "+--------------------------+" ] && read cline
    PUBDATE=$(LC_ALL=C TZ=GMT date +”%a, %e %b %Y %H:%M:%S GMT” -d “$cline”)
    cat < ${RSSFILE}

    ${TITLE}
    ${LINK}

    ${TITLE}
    ${ICON}
    ${LINK}

    ${DESCRIPTION}
    en-us
    urn:uuid:${UUID}
    ${PUBDATE}
    ${LASTBUILDDATE}
    ${BASENAME} v ${REV}

    ${PUBDATE}
    ${CLURL}
    ${PUBDATE}
    $(LC_ALL=C date -d “${PUBDATE}” +%Y%m%d%H%M%S)

    <![CDATA[

    	_EOT_
        elif [ "$cline" == "+--------------------------+" ]; then
          # This line masrks the start of a new entry.
          # Only dump a certain amount of recent entries.
          [ $counter -gt $FEEDMAX ] && break
    
          # Close the previous entry:
          cat <> ${RSSFILE}
    	           

    ]]>

    _EOT_

    # Next line is the pubdate for the next entry:
    read PUBDATE
    PUBDATE=$(LC_ALL=C TZ=GMT date +"%a, %e %b %Y %H:%M:%S GMT" -d "$PUBDATE")

    # Write the header for the next entry:
    cat <> ${RSSFILE}

    ${PUBDATE}
    ${CLURL}
    ${PUBDATE}
    $(LC_ALL=C date -d "${PUBDATE}" +%Y%m%d%H%M%S)

    <![CDATA[

    	_EOT_
    
          counter=$(( ${counter}+1 ))
        else
          # Add a line of description
          [ "${cline}" != "" ] && echo "${cline}" >> ${RSSFILE}
        fi
      done
    
      # Close the last entry:
      cat <> ${RSSFILE}
    	           

    ]]>

    _EOT_

    # Close the XML output:
    cat <> ${RSSFILE}

    _EOT_
    }

    #
    # --- MAIN ------------------------------------------------------------------
    #

    echo "Generating repository metadata for $REPOSROOT ....."
    echo "Lagi mau buat file PACKAGES.TXT dan lainnya "
    echo "Tulis nama perubahannya misal...testrepo "

    # We will test correctness of the GPG passphrase against a temp file:
    TESTTMP=$(mktemp)

    # Update ChangeLog.txt with a new entry
    upd_changelog $REPOSROOT

    # Write a RSS file for the ChangeLog.txt
    rss_changelog $REPOSROOT

    # Change directory to the root of the repository, so all generated
    # information is relative to here:
    cd $REPOSROOT

    # Create temporary MANIFEST PACKAGES.TXT and CHECKSUMS.md5 files:
    cat /dev/null > .MANIFEST
    cat /dev/null > .PACKAGES.TXT
    cat /dev/null > .CHECKSUMS.md5

    # This tries to look for filenames with the Slackware package name format:
    PKGS=$( find . -type f -name '*-*-*-*.t[blxg]z' -print | sort )
    for pkg in $PKGS; do
    # Found a filename with matching format, is it really a slackpack?
    COMPEXE=$( pkgcomp $pkg )
    if $COMPEXE -cd $pkg | tar tOf - install/slack-desc 1>/dev/null 2>&1 ; then
    # We need to run addpkg for every package, to populate PACKAGES.TXT:
    addpkg $pkg ${REPOSROOT}/.PACKAGES.TXT

    # We need to run addman for every package, to populate MANIFEST
    addman $pkg ${REPOSROOT}/.MANIFEST

    if [ "x$NOTOLDER" != "x" ]; then
    # When to generate md5sum/gpg signature if we have a $NOTOLDER value:
    # 'date +%s' gives the current time in seconds since the Epoch;
    # 'stat -c %Z $pkg' gives the ctime of $pkg file in seconds since Epoch;
    # The difference of these two divided by 3600 is the file age in hours.
    # '24 * $NOTOLDER' gives the maximum allowed age of the file in hours.
    # If the package is too old, we do not try to create md5sum/gpg sig.
    if [ $(( ( $(LC_ALL=C date +%s) - $(stat -c %Z $pkg) ) / 3600 )) -lt $(( 24 * $NOTOLDER )) ]; then
    genmd5 $pkg ${REPOSROOT}/.CHECKSUMS.md5
    [ "$USEGPG" == "yes" ] && genasc $pkg
    else
    [ $DEBUG -eq 1 ] && echo " - Skipping md5/gpg calculation for $(basename $pkg)"
    fi
    else
    genmd5 $pkg ${REPOSROOT}/.CHECKSUMS.md5
    [ "$USEGPG" == "yes" ] && genasc $pkg
    fi
    else
    echo "*** Warning: $pkg does not contain a slack-desc file. ***"
    fi
    done

    # Make the changes visible:
    echo "PACKAGES.TXT; $(LC_ALL=C date -u)" > PACKAGES.TXT
    echo "" >> PACKAGES.TXT
    cat .PACKAGES.TXT >> PACKAGES.TXT
    cat .CHECKSUMS.md5 > CHECKSUMS.md5
    cat .MANIFEST > MANIFEST

    bzip2 -9f MANIFEST
    gzip -9cf PACKAGES.TXT > PACKAGES.TXT.gz
    gzip -9cf CHECKSUMS.md5 > CHECKSUMS.md5.gz
    gzip -9cf ChangeLog.txt > ChangeLog.txt.gz

    rm -f CHECKSUMS.md5.asc CHECKSUMS.md5.gz.asc

    if [ "$USEGPG" == "yes" ]; then
    # The CHECKSUMS.md5* files need a gpg signature:
    gpg_sign CHECKSUMS.md5
    gpg_sign CHECKSUMS.md5.gz
    fi

    # Clean up:
    rm -f .MANIFEST
    rm -f .PACKAGES.TXT
    rm -f .CHECKSUMS.md5
    TRASK=""

    # Finally, generate the FILELIST.TXT:
    gen_filelist ${REPOSROOT}

    # Clean up test files:
    rm -f ${TESTTMP}*

    # Done.

  2. klik says:

    kalau untuk format txz gimana ?? saya pakai zenwalk 6.4 trus netpkgnya gimana??

  3. hendy says:

    for linkexchange just click :::{here}:::

  4. Memurut saya Zencafe adalah distro yang paling cocok buat warnet di Indonesia

    http://nyambut.blogspot.com

  5. Itu udah include koq om ;) Kalau ga mau diinstal yah cukup ekstrak ajah ;) Smua source code ada di dalam, kalau om mau bongkar ya silahkan ajah :)

    Kalau referensi, coba googling dengan keyword ABS (Advanced Bash Scripting) programming guide soalnya referensi saya dari situ juga :)

  6. riesal says:

    seeep.. btw, scriptnya beserta source codenya gak? mau belajar juga nih, atau mas ada referensinya?

    salam.

Leave a Reply

[+] adsenseid emoticons by Martinus Ady H. Modified from nartzco source code.