diff options
author | rhatto <rhatto@04377dda-e619-0410-9926-eae83683ac58> | 2006-09-19 16:56:25 +0000 |
---|---|---|
committer | rhatto <rhatto@04377dda-e619-0410-9926-eae83683ac58> | 2006-09-19 16:56:25 +0000 |
commit | 397f31fcb0b47000c6e5c5c4aaf441970ce06e3a (patch) | |
tree | 0df0e0bbc0ef9d4f2a388d4bd634e8683e9a36af /simplaret | |
parent | a5ad04283516a7ff72cfd33f3221cfd3c10c3b5b (diff) | |
download | simplepkg-397f31fcb0b47000c6e5c5c4aaf441970ce06e3a.tar.gz simplepkg-397f31fcb0b47000c6e5c5c4aaf441970ce06e3a.tar.bz2 |
simplepkg 0.4.9pre2
git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@5 04377dda-e619-0410-9926-eae83683ac58
Diffstat (limited to 'simplaret')
-rwxr-xr-x | simplaret | 482 |
1 files changed, 0 insertions, 482 deletions
diff --git a/simplaret b/simplaret deleted file mode 100755 index ed98402..0000000 --- a/simplaret +++ /dev/null @@ -1,482 +0,0 @@ -#!/bin/bash -# -# simplaret v0.1.1: simplepkg's package grabber -# feedback: rhatto at riseup.net | gpl -# -# Simplaret is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or any later version. -# -# Simplaret is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 59 Temple -# Place - Suite 330, Boston, MA 02111-1307, USA -# -# config file simplepkg.conf: -# -# DEFAULT_ARCH="i386" -# DEFAULT=VERSION="10.2" -# STORAGE="/storage/packages" -# PASSIVE_FTP="1" -# -# config file repos.conf: -# -# ROOT-i386="http://slack.sarava.org/packages/slackware" -# REPOS-i386-10.2="slack.sarava.org%http://slack.sarava.org/packages/slackware/slackware-10.2/" -# ROOT-x86_64="http://darkstar.ist.utl.pt/pub/slamd64/" -# REPOS-x86_64-10.2="slack.sarava.org%http://slack.sarava.org/packages/slamd64/slamd64-10.2/" -# -# usage: -# -# --update: baixa lista de pacotes de cada repositorio -# --search: busca -# --get [-a]: baixa um unico pacote -# --get-pacthes: baixa os patches e faz o checksum / gpg -# --purge [-w N]: remove o cache -# -# precedence: -# -# - checa antes o repositorio raiz, caso o pacote nao seja encontrado segue na ordem das -# definicoes REPOS do arquivo de configuracao -# - -SIMPLARET_CONF="/etc/simplepkg/simplepkg.conf" -REPOS_CONF="/etc/simplepkg/repos.conf" -COMMON="/usr/libexec/simplepkg/common.sh" - -function simplaret_usage { - - echo "usage: [ARCH=otherarch] [VERSION=otherversion] `basename $0` <OPTION> package-name" - echo -e "\t OPTIONS: --update, --search, --get, --get-patches" - exit 1 - -} - -function simplaret_eval_config { - - if grep -qe "^DEFAULT_ARCH=" $SIMPLARET_CONF; then - DEFAULT_ARCH="`grep -e "^DEFAULT_ARCH=" $SIMPLARET_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1`" - else - DEFAULT_ARCH="i386" - fi - - if grep -qe "^DEFAULT_VERSION=" $SIMPLARET_CONF; then - DEFAULT_VERSION="`grep -e "^DEFAULT_VERSION=" $SIMPLARET_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1`" - else - DEFAULT_VERSION="10.2" - fi - - if grep -qe "^STORAGE=" $SIMPLARET_CONF; then - STORAGE="`grep -e "^STORAGE=" $SIMPLARET_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1`" - else - STORAGE="/var/simplaret" - fi - - if grep -qe "^PASSIVE_FTP=" $SIMPLARET_CONF; then - PASSIVE_FTP="`grep -e "^PASSIVE_FTP=" $SIMPLARET_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1`" - else - PASSIVE_FTP="0" - fi - - if grep -qe "^WARNING=" $SIMPLARET_CONF; then - WARNING="`grep -e "^WARNING=" $SIMPLARET_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1`" - else - WARNING="0" - fi - -} - -function simplaret_get_index { - - for file in FILELIST.TXT CHECKSUMS.md5 CHECKSUMS.md5.asc; do - simplaret_download $1 $file $2 - done - -} - -function simplaret_backup_index { - - for file in FILELIST.TXT CHECKSUMS.md5 CHECKSUMS.md5.asc; do - if [ -f "$1/$file" ]; then - mv $1/$file $1/$file.old - fi - done - -} - -function simplaret_check_index { - - for file in FILELIST.TXT CHECKSUMS.md5 CHECKSUMS.md5.asc; do - if [ ! -f "$1/$file" ] && [ -f "$1/$file" ]; then - echo restoring old $file to $1... - mv $1/$file.old $1/$file - else - rm -f $1/$file.old - fi - done - -} - -function simplaret_download { - - # downloads a file from a repo to a folder - # usage: simplaret <repos_url> <package> <destination-folder> - - protocol="`echo $1 | cut -d : -f 1`" - - if [ ! -d "$3" ]; then - mkdir -p $3 - fi - - if [ "$protocol" == "http" ]; then - (cd $3 && wget $1/$2) - elif [ "$protocol" == "ftp" ]; then - if [ "$PASSIVE_FTP" == "1" ]; then - passive_ftp="--passive-ftp" - fi - (cd $3 && wget $passive_ftp $1/$2) - elif [ "$protocol" == "file" ]; then - url="`echo $1 | sed -e 's/file:\/\///'`" - cp $url/$2 $3 2> /dev/null - fi - -} - -function simplaret_repos_name { - - if echo $repos | grep -qe %; then - repos_name="`echo $repos | cut -d % -f 1`" - if [ -z "$repos_name" ]; then - echo you should set a name for the repository $repos for arch $ARCH and version $VERSION - echo please correct your $REPOS_CONF so this repository definition looks like this: - echo REPOS-$ARCH-$VERSION=\"repository-name%repository-url\" - exit 1 - fi - else - echo you should set a name for the repository $repos for arch $ARCH and version $VERSION - echo please correct your $REPOS_CONF so this repository definition looks like this: - echo REPOS-$ARCH-$VERSION=\"repository-name%$repos_url\" - exit 1 - fi - -} - -function simplaret_repos_url { - - if echo $repos | grep -qe %; then - repos_url="`echo $repos | cut -d % -f 2`" - if [ -z "$repos_url" ]; then - echo you should set a url for the repository $repos for arch $ARCH and version $VERSION - echo please correct your $REPOS_CONF so this repository definition looks like this: - echo REPOS-$ARCH-$VERSION=\"repository-name%repository-url\" - exit 1 - fi - else - echo you should set a url for the repository $repos for arch $ARCH and version $VERSION - echo please correct your $REPOS_CONF so this repository definition looks like this: - echo REPOS-$ARCH-$VERSION=\"repository-name%repository-url\" - exit 1 - fi - -} - -function simplaret_root_url { - - root_url="`grep -e "^ROOT-$ARCH=" $REPOS_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1`" - -} - -function simplaret_update { - - echo updating package information for arch $ARCH and version $VERSION... - - if [ ! -d "$STORAGE/$ARCH/$VERSION" ]; then - mkdir -p $STORAGE/$ARCH/$VERSION - else - simplaret_backup_index $STORAGE/$ARCH/$VERSION - fi - - simplaret_root_url - simplaret_get_index "$root_url/$DISTRO_FOLDER/$extra_folder" $STORAGE/$ARCH/$VERSION - simplaret_check_index $STORAGE/$ARCH/$VERSION - - for repos in `grep -e "^REPOS-$ARCH-$VERSION=" $REPOS_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1`; do - - simplaret_repos_name - simplaret_repos_url - - if [ ! -d "$STORAGE/$ARCH/$VERSION/$repos_name" ]; then - mkdir -p $STORAGE/$ARCH/$VERSION/$repos_name - else - simplaret_backup_index $STORAGE/$ARCH/$VERSION/$repos_name - fi - - simplaret_get_index $repos_url $STORAGE/$ARCH/$VERSION/$repos_name - simplaret_check_index $STORAGE/$ARCH/$VERSION/$repos_name - - unset repos_name repos_url repos_protocol - - done - -} - -function simplaret_search { - - if [ ! -f "$STORAGE/$ARCH/$VERSION/FILELIST.TXT" ]; then - if [ "$WARNING" != "0" ] || [ ! -z "$SILENT" ]; then - echo warning: no file list for root repository on arch $ARCH version $VERSION, please do a simplaret --update - fi - else - for file in `grep $1 $STORAGE/$ARCH/$VERSION/FILELIST.TXT | awk '{ print $8 }' | grep -e ".tgz$"`; do - if echo $file | grep -q "patches"; then - patch="(patch)" - fi - if [ "$2" == "-silent" ]; then - echo `basename $file` - else - echo root repos, arch: $ARCH, version: $VERSION: `basename $file` $patch - fi - unset patch - done - fi - - for repos in `grep -e "^REPOS-$ARCH-$VERSION=" $REPOS_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1`; do - - simplaret_repos_name - - if [ ! -f "$STORAGE/$ARCH/$VERSION/$repos_name/FILELIST.TXT" ]; then - if [ "$WARNING" != "0" ] || [ ! -z "$SILENT" ]; then - echo warning: no file list for $repos_name repository on arch $ARCH version $VERSION, please do a simplaret --update - fi - else - for file in `grep $1 $STORAGE/$ARCH/$VERSION/$repos_name/FILELIST.TXT | awk '{ print $8 }' | grep -e ".tgz$"`; do - if echo $file | grep -q "patches"; then - patch="(patch)" - fi - if [ "$2" == "-silent" ]; then - echo `basename $file` - else - echo $repos_name, arch: $ARCH, version: $VERSION: `basename $file` $patch - fi - done - fi - - done - -} - -function simplaret_purge { - - if [ "$2" == "-w" ] && [ ! -z "$3" ]; then - if [ -z "$SILENT" ]; then - echo purging all packages older than $3 weeks for arch $ARCH and version $VERSION - fi - mtime="`echo "$3*7" | bc -l`" - for file in `find $STORAGE/$ARCH/$VERSION/ -mtime +$mtime | bc -l 2> /dev/null`; do - for extension in tgz asc; do - if echo $file | grep -qe ".$extension$"; then - rm $file - fi - done - done - else - if [ -z "$SILENT" ]; then - echo purging all packages for arch $ARCH and version $VERSION - fi - for file in `find $STORAGE/$ARCH/$VERSION/ 2> /dev/null`; do - for extension in tgz asc; do - if echo $file | grep -qe ".$extension$"; then - rm $file - fi - done - done - fi - - if [ -z "$SILENT" ]; then - echo done purging simplaret cache, please run simplaret --update to retrieve new package listings on this arch and version - fi - -} - -function simplaret_get { - - # search for an already downloaded package - for file in `find $STORAGE/$ARCH/$VERSION/ -name $1*tgz 2> /dev/null`; do - candidate="`basename $file`" - if [ "`package_name $candidate`" == "$1" ]; then - echo package $candidate already downloaded and stored at `dirname $file` - exit 0 - fi - done - - # first search for the package in the root repository - if [ ! -f "$STORAGE/$ARCH/$VERSION/FILELIST.TXT" ]; then - if [ "$WARNING" != "0" ] || [ ! -z "$SILENT" ]; then - echo warning: no file list for root repository on arch $ARCH version $VERSION, please do a simplaret --update - fi - else - for file in `grep $1 $STORAGE/$ARCH/$VERSION/FILELIST.TXT | awk '{ print $8 }' | grep -e ".tgz$"`; do - candidate="`basename $file`" - if [ "`package_name $candidate`" == "$1" ]; then - simplaret_root_url - simplaret_download $root_url/$DISTRO_FOLDER/$extra_folder $file $STORAGE/$ARCH/$VERSION - if [ ! -f "$STORAGE/$ARCH/$VERSION/$candidate" ]; then - echo error downloading $candidate from root repository $root_url, please check your settings - exit 1 - else - echo package $candidate stored at $STORAGE/$ARCH/$VERSION - simplaret_checksum $STORAGE/$ARCH/$VERSION/CHECKSUMS.md5 $STORAGE/$ARCH/$VERSION/$candidate - exit 0 - fi - fi - done - fi - - # then search for the package in contrib repos - for repos in `grep -e "^REPOS-$ARCH-$VERSION=" $REPOS_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1`; do - simplaret_repos_name - simplaret_repos_url - if [ ! -f "$STORAGE/$ARCH/$VERSION/$repos_name/FILELIST.TXT" ]; then - if [ "$WARNING" != "0" ] || [ ! -z "$SILENT" ]; then - echo warning: no file list for $repos_name repository on arch $ARCH version $VERSION, please do a simplaret --update - fi - else - for file in `grep $1 $STORAGE/$ARCH/$VERSION/$repos_name/FILELIST.TXT | awk '{ print $8 }' | grep -e ".tgz$"`; do - candidate="`basename $file`" - if [ "`package_name $candidate`" == "$1" ]; then - simplaret_download $repos_url $file $STORAGE/$ARCH/$VERSION/$repos_name - if [ ! -f "$STORAGE/$ARCH/$VERSION/$repos_name/$candidate" ]; then - echo error downloading $candidate from repository $repos_url, please check your settings - echo will try to fetch from the next repo, if exists... - else - echo package $candidate stored at $STORAGE/$ARCH/$VERSION/$repos_name - simplaret_checksum $STORAGE/$ARCH/$VERSION/$repos_name/CHECKSUMS.md5 $STORAGE/$ARCH/$VERSION/$repos_name/$candidate - exit 0 - fi - fi - done - fi - done - -} - -function simplaret_get_patches { - - if [ ! -d "$PATCHES_DIR/$ARCH/$VERSION" ]; then - mkdir -p $PATCHES_DIR/$ARCH/$VERSION - fi - - echo fetching patches for arch $ARCH and version $VERSION... - - # check for the downloaded patches - for patch in `ls $PATCHES_DIR/$ARCH/$VERSION/*tgz 2> /dev/null`; do - file="`find $STORAGE/$ARCH/$VERSION/ -name $patch 2> /dev/null`" - if [ ! -f "$file" ]; then - rm $patch - else - ln -sf $file $PATCHES_DIR/$ARCH/$VERSION/ - fi - done - - # grab new patches - for patch in `simplaret_search patches -silent`; do - simplaret --get `package_name $patch` - file="`find $STORAGE/$ARCH/$VERSION/ | grep "$patch" 2> /dev/null`" - if [ ! -f "$file" ]; then - echo error downloading package $file - exit 1 - else - ln -sf $file $PATCHES_DIR/$ARCH/$VERSION/ - echo patch stored as a symlink on $PATCHES_DIR/$ARCH/$VERSION/ - fi - done - -} - -function simplaret_checksum { - - # simplaret_checksum <md5file> <file-name> - - if [ ! -f "$1" ] || [ ! -f "$2" ]; then - echo checksum error: file not found - exit 1 - fi - - pack="`basename $2`" - checksum="`grep -e "$pack\$" $1 | awk '{ print $1 }'`" - - if [ -z "$checksum" ]; then - echo file $2 not in checksum $1 - exit 1 - elif [ "$checksum" != "`md5sum $2 | awk '{ print $1 }'`" ]; then - echo checksum mismatch for file `basename $file` - else - echo checksum ok for file `basename $file` - fi - -} - -if [ -f "$COMMON" ]; then - source $COMMON -else - echo "error: file $COMMON found, check your `basename $0` installation" - exit 1 -fi - -if [ -z "$1" ]; then - simplaret_usage - exit 1 -else - server="$1" - eval_config `basename $0` - simplaret_eval_config -fi - -if [ ! -d "$STORAGE" ]; then - mkdir -p $STORAGE -fi - -if [ -z "$ARCH" ]; then - ARCH="$DEFAULT_ARCH" -fi - -if [ -z "$VERSION" ]; then - VERSION="$DEFAULT_VERSION" -fi - -if [ "$ARCH" == "i386" ]; then - DISTRO="slackware" - DISTRO_FOLDER="$DISTRO-$VERSION" -elif [ "$ARCH" == "x86_64" ]; then - # extra_folder="tree" - DISTRO="slamd64" - DISTRO_FOLDER="$DISTRO-$VERSION" -elif [ "$ARCH" == "s390" ]; then - DISTRO="slack390" - DISTRO_FOLDER="$DISTRO-$VERSION" -elif [ "$ARCH" == "x86_uclibc" ]; then - DISTRO="ucslack" - DISTRO_FOLDER="$DISTRO-$VERSION" -elif [ "$ARCH" == "arm" ]; then - DISTRO="armedslack" - DISTRO_FOLDER="$DISTRO-$VERSION" -elif [ "$ARCH" == "powerpc" ]; then - DISTRO="slackintosh" - DISTRO_FOLDER="$VERSION" -elif [ "$ARCH" == "sparc" ]; then - DISTRO="splack" - DISTRO_FOLDER="tree-$VERSION" -fi - -case $1 in - --update) simplaret_update ;; - --search) simplaret_search $2 ;; - --get) simplaret_get $2 ;; - --get-patches) simplaret_get_patches ;; - --purge) simplaret_purge ;; - *) simplaret_usage ;; -esac - |