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:

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


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.
kalau untuk format txz gimana ?? saya pakai zenwalk 6.4 trus netpkgnya gimana??
for linkexchange just click :::{here}:::
Memurut saya Zencafe adalah distro yang paling cocok buat warnet di Indonesia
http://nyambut.blogspot.com
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
seeep.. btw, scriptnya beserta source codenya gak? mau belajar juga nih, atau mas ada referensinya?
salam.