From 97520ed5c2e9e3b3fb340329c80a672f112a66cc Mon Sep 17 00:00:00 2001 From: ms Date: Fri, 18 Aug 2006 10:51:18 +0000 Subject: [PATCH] =?utf8?q?Update:=20=20=20*=20Pakfire=20-=20umfassende=20?= =?utf8?q?=C3=84nderungen=20und=20Erweiterungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@249 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8 --- src/pakfire/installed/BASE | 1 + src/pakfire/lib/check_pak.sh | 61 +++++++++++----------------------- src/pakfire/lib/get_base.sh | 26 +++++++++++++++ src/pakfire/lib/get_list.sh | 45 ++++++++----------------- src/pakfire/lib/get_mirror.sh | 27 +++++++++------ src/pakfire/lib/get_pak.sh | 32 ++++++------------ src/pakfire/lib/get_upgrade.sh | 34 +++++++++++++++++++ src/pakfire/lib/test_host.sh | 17 ++++------ src/pakfire/pakfire | 44 ++++++++++++++++++++++-- src/pakfire/pakfire.conf | 35 ++++++++++--------- 10 files changed, 189 insertions(+), 133 deletions(-) create mode 100644 src/pakfire/installed/BASE create mode 100644 src/pakfire/lib/get_base.sh create mode 100644 src/pakfire/lib/get_upgrade.sh diff --git a/src/pakfire/installed/BASE b/src/pakfire/installed/BASE new file mode 100644 index 0000000000..f4386610cf --- /dev/null +++ b/src/pakfire/installed/BASE @@ -0,0 +1 @@ +VER=0 diff --git a/src/pakfire/lib/check_pak.sh b/src/pakfire/lib/check_pak.sh index 0cddbff9be..03f6cc8ef8 100644 --- a/src/pakfire/lib/check_pak.sh +++ b/src/pakfire/lib/check_pak.sh @@ -4,32 +4,20 @@ # IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # ############################################################################################ -# Verzeichnis von Pakman -VERZ=$(get_conf.sh HOME) +check_pak() { -# Update-Verzeichnis -UP_DIR=$(get_conf.sh UP_DIR) - -# Verzeichnis mit nicht Installierten Paketen -NIP_DIR=$(get_conf.sh NIP_DIR) - -# Verzeichnis mit Installierten Paketen -IP_DIR=$(get_conf.sh IP_DIR) - -# Patchliste -PATCH_LIST=$(get_conf.sh DEST_DIR)/$(get_conf.sh LIST_NAME) +#if [ ! -f $PAKHOME/cache/$PACKAGES_LIST ]; then +# exit 1 +#fi # Zerlegte Listen -ZERL_PATCH=$(get_conf.sh DEST_DIR)/zerl_ +ZERL_PATCH=$TMP_DIR/zerl_ -# Listen Verzeichnis -LIST_DIR=$(get_conf.sh DEST_DIR) - -# Zerlegen der Liste erst jede Zeile fuer sich bei maximal 99998 Einträgen -for (( i=1 ; i<99999 ; i++)) +# Zerlegen der Liste erst jede Zeile fuer sich bei maximal 9998 Einträgen +for (( i=1 ; i<9999 ; i++)) do - patch=$(head -${i} ${PATCH_LIST} | tail -1) + patch=$(head -${i} $PAKHOME/cache/${PACKAGE_LIST} | tail -1) echo $patch >${ZERL_PATCH}$i if [ "${patch}" = "###EOF###" ] @@ -38,11 +26,11 @@ do break fi - if [ $i -ge 99999 ] + if [ $i -ge 9999 ] then echo "Defektes Patchfile!!!" /bin/rm -f ${ZERL_PATCH}* - exit 1 + return 1 fi done @@ -51,9 +39,8 @@ done (( i-- )) # Jedes Paket nach Name zerlegen -for list in $(find $LIST_DIR -type f -name "zerl_*") +for list in $(find $TMP_DIR -type f -name "zerl_*") do - # Zeile lesen Zeile zeile=$(cat $list) @@ -62,29 +49,19 @@ do # Auf Version reduzieren vers=${zeile#*-} + vers=${vers%%_*} vers=${vers%% *} - + ipfver=${zeile#*_*} # Testen ob aktuelle Verson schon installiert ist - if [ -e ${IP_DIR}${name}-${vers} ] - then continue - else - # Testen ob eine ältere Version installiert ist - if [ -e ${IP_DIR}${name}-* ] - then - # Erst alte Update Vorschläge löschen - /bin/rm -f ${UO_DIR}${name}-* - /bin/touch ${UP_DIR}${name}-${vers} - else - # Erst alte Paket Vorschläge löschen - /bin/rm -f ${NIP_DIR}${name}-* - /bin/touch ${NIP_DIR}${name}-${vers} - fi - - fi - + # Erst alte Paket Vorschläge löschen + /bin/rm -f $DB_DIR/${name} + /bin/echo "VER=${vers}" > $DB_DIR/${name} + /bin/echo "IPFVER=${ipfver}" >> $DB_DIR/${name} done # Löschen der Hilfslisten /bin/rm -f ${ZERL_PATCH}* +} + ################################### EOF #################################################### diff --git a/src/pakfire/lib/get_base.sh b/src/pakfire/lib/get_base.sh new file mode 100644 index 0000000000..f51dac9a7e --- /dev/null +++ b/src/pakfire/lib/get_base.sh @@ -0,0 +1,26 @@ +#!/bin/bash +############################################################################################ +# Version 0.1a, Copyright (C) 2006 by IPFire.org # +# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # +############################################################################################ + +get_base() { + +. $IP_DIR/BASE + + OLD_VER=$VER + + VER="" + . $DB_DIR/BASE + + if [ "$OLD_VER" -lt "$VER" ]; then + pakfire_logger "There is one ore more updates for the base system!" + for i in `seq $(($OLD_VER+1)) $VER` + do + $PAKHOME/pakfire install BASE-$i + done + fi + +} + +################################### EOF #################################################### diff --git a/src/pakfire/lib/get_list.sh b/src/pakfire/lib/get_list.sh index 1fa815e2fd..968474d18b 100644 --- a/src/pakfire/lib/get_list.sh +++ b/src/pakfire/lib/get_list.sh @@ -4,57 +4,40 @@ # IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # ############################################################################################ -# Verzeichnis von Pakman -VERZ=$(get_conf.sh HOME) - -# Version des IPFire ermitteln -VERS=$(get_conf.sh VERS print) - -# Patch URLs ermitteln -PURL=$(get_conf.sh PURL print) - -# Logfile festlegen -LOG_file=$(get_conf.sh LOG) - -# Listenname -LIST_NAME=$(get_conf.sh LIST_NAME) - -# Ziel Verzeichnis -DEST_DIR=$(get_conf.sh HOME)/list - -# Host Tester -HOST_TEST=$(get_conf.sh HOST_TEST) +get_list () { # Alle URLs durcharbeiten bis erste per ping erreichbar erreichbar -url=$($HOST_TEST "$PURL") +url=$(. $HOST_TEST "$PURL") if [ -n $url ] then URL=${url} fi # Falls URL nicht gesetzt wurde abbruch des Scripts if [ -z $URL ] - then echo "Kann keinen Listenserver finden.">>$LOG_file - exit 1 + then pakfire_logger "Kann keinen Listenserver finden." + return 1 fi # Verzeichnis in Zielverzeichnis wechseln für Download -cd $DEST_DIR +cd $PAKHOME/cache # Pruefen ob bereits ein File vorhanden ist - falls ja, dann wird sie nun gelöscht -if [ -f ${DEST_DIR}/${LIST_NAME} ] - then rm ${DEST_DIR}/${LIST_NAME} +if [ -f $PACKAGE_LIST ] + then rm $PACKAGE_LIST fi # Download der Liste -if /usr/bin/wget -q $URL/${VERS}/${LIST_NAME} >/dev/null 2>&1 +if /usr/bin/wget $URL/$PACKAGE_LIST > /dev/null 2>&1 then cd - - echo "Updateliste heruntergeladen von $URL">>$LOG_file - exit 0 + pakfire_logger "Updateliste heruntergeladen von $URL" + return 0 else cd - - echo "Updateliste konnnte nicht heruntergeladen werden von $URL">>$LOG_file - exit 1 + pakfire_logger "Updateliste konnnte nicht heruntergeladen werden von $URL" + return 1 fi +} + ################################### EOF #################################################### diff --git a/src/pakfire/lib/get_mirror.sh b/src/pakfire/lib/get_mirror.sh index 2a9e9054c8..dd7608d10f 100644 --- a/src/pakfire/lib/get_mirror.sh +++ b/src/pakfire/lib/get_mirror.sh @@ -5,27 +5,32 @@ get_mirror() { -# Testen ob Server erreichbar ist -if ! $HOST_TEST $($URL_ZERL $H_MIRROR get_host) >/dev/null 2>&1 - then exit 1 -fi +# Testen, ob der Server erreichbar ist +#if ! $HOST_TEST $($PAKHOME/lib/url_zerl.sh $H_MIRROR get_host) >/dev/null 2>&1 +# then return 1 +#fi -# Ins Verzeichnis wechseln -cd $HOME +# Ins Cache-Verzeichnis wechseln +cd $PAKHOME/cache # Überprüfen ob File schon vorhanden ist -if [ -e $HOME/$($URL_ZERL $H_MIRROR get_file) ] - then rm $HOME/$($URL_ZERL $H_MIRROR get_file) +if [ -e $PAKHOME/cache/$SERVERS_LIST ] + then rm -f $PAKHOME/cache/$SERVERS_LIST fi # File herunterladen if /usr/bin/wget -q $H_MIRROR >/dev/null 2>&1 - then + then + COUNT=0 + for i in `cat $SERVERS_LIST`; do + COUNT=$(($COUNT+1)) + done + #. $PAKHOME/lib/test_host.sh `cat $SERVERS_LIST` cd - - exit 0 + return 0 else cd - - exit 1 + return 1 fi } diff --git a/src/pakfire/lib/get_pak.sh b/src/pakfire/lib/get_pak.sh index 01c816fc70..eb9f189cc5 100644 --- a/src/pakfire/lib/get_pak.sh +++ b/src/pakfire/lib/get_pak.sh @@ -4,45 +4,35 @@ # IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # ############################################################################################ -# Download Zielverzeichnis -DOWN_DEST=$(get_conf.sh DOWN_DEST) - -# Mirror Liste -PURL=$(get_conf.sh PURL print) - -# Logfile festlegen -LOG_file=$(get_conf.sh LOG) - -# Version des IPFire ermitteln -VERS=$(get_conf.sh VERS print) - -# Host Tester -HOST_TEST=$(get_conf.sh HOST_TEST) +get_pak() { # Alle URLs durcharbeiten bis erste per ping erreichbar erreichbar -URL=$($HOST_TEST "$PURL") +URL=$(. $HOST_TEST "$PURL") # Falls URL nicht gesetzt wurde abbruch des Scripts if [ -z $URL ] - then echo "Kann keinen Patchserver finden">>$LOG_file + then pakfire_logger "Kann keinen Patchserver finden" exit 1 fi # Verzeichnis in Zielverzeichnis wechseln für Download -cd $DOWN_DEST +cd $CACHE_DIR + +. $DB_DIR/$1 -# Download Source festlegen -DOWN_SRC=${URL}/${VERS}/${1}.tar.gz +FILE="$1-${VER}_${IPFVER}.tar.gz" # Paket Downloaden -if /usr/bin/wget -q ${DOWN_SRC} >/dev/null 2>&1 +if /usr/bin/wget $URL/packages/$FILE{,.md5} >> $LOG 2>&1 then cd - exit 0 else cd - - echo "Probleme mit dem Download ${DOWN_SRC}" + pakfire_logger "Cannot download $URL/packages/$FILE" exit 1 fi +} + ################################### EOF #################################################### diff --git a/src/pakfire/lib/get_upgrade.sh b/src/pakfire/lib/get_upgrade.sh new file mode 100644 index 0000000000..8d72a559ff --- /dev/null +++ b/src/pakfire/lib/get_upgrade.sh @@ -0,0 +1,34 @@ +#!/bin/bash +############################################################################################ +# Version 0.1a, Copyright (C) 2006 by IPFire.org # +# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # +############################################################################################ + +get_upgrade() { + +updates="" + +for list in $(find $IP_DIR -type f -name "*") +do + list=$(basename $list) + . $IP_DIR/$list + OLD_VER=$VER + OLD_IPFVER=$IPFVER + + VER="" + IPFVER="" + . $DB_DIR/$list + + if [ "$OLD_IPFVER" -lt "$IPFVER" ]; then + updates="$list $updates" + fi + +done + +for i in $updates +do + pakfire_logger "New version of $i available." +done +} + +################################### EOF #################################################### diff --git a/src/pakfire/lib/test_host.sh b/src/pakfire/lib/test_host.sh index 2e8edb8ce3..237dfa7823 100644 --- a/src/pakfire/lib/test_host.sh +++ b/src/pakfire/lib/test_host.sh @@ -4,12 +4,9 @@ # IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # ############################################################################################ -# URL Zerleger -URL_ZERL=$(get_conf.sh URL_ZERL) - -# Zählen wie viele Host übergeben wurden +# Zählen wie viele Hosts übergeben wurden i=0 -for host in $1 +for host in $PURL do ((i++)) done @@ -29,9 +26,9 @@ do ((i++)) if [ $i -eq $rand ] then - if ping $($URL_ZERL $host get_host) -c 1 -s 0 >/dev/null 2>&1 + if ping $($PAKHOME/lib/url_zerl.sh $host get_host) -c 1 -s 0 >/dev/null 2>&1 then echo $host - exit 0 + return 0 fi fi if [ $i -gt $rand ] @@ -42,13 +39,13 @@ done for host in $1 do - if ping $($URL_ZERL $host get_host) -c 1 -s 0 >/dev/null 2>&1 + if ping $($PAKHOME/lib/url_zerl.sh $host get_host) -c 1 -s 0 >/dev/null 2>&1 then echo $host - exit 0 + return 0 fi done -exit 1 +return 1 ################################### EOF #################################################### diff --git a/src/pakfire/pakfire b/src/pakfire/pakfire index b1c40a9163..c06bad024e 100644 --- a/src/pakfire/pakfire +++ b/src/pakfire/pakfire @@ -5,15 +5,53 @@ ############################################################################################ . /etc/pakfire.conf -. $HOME/lib/get_mirror.sh +. $PAKHOME/lib/get_mirror.sh +. $PAKHOME/lib/get_list.sh +. $PAKHOME/lib/check_pak.sh +. $PAKHOME/lib/get_upgrade.sh +. $PAKHOME/lib/get_base.sh +. $PAKHOME/lib/get_pak.sh case "$1" in - update) get_mirror + update) + get_mirror get_list check_pak ;; - *) echo -e "IPFire - Pakfire\nHilfe:\npakfire install [Paket]\t- Installiert ein neues Paket.\npakfire update\t\t- Lädt die Liste aller Pakete neu.\npakfire remove [Paket]\t- Deinstalliert ein Paket.\npakfire upgrade\t\t- Überprüft nach neuen Updates." + upgrade) + get_upgrade + get_base + ;; + + install) + case "$2" in + BASE-*) + echo $2 + ;; + *) + if [ -e $DB_DIR/$2 ]; then + if [ -e $IP_DIR/$2 ]; then + pakfire_logger "$2 is already installed on this system." + else + get_pak $2 + fi + else + pakfire_logger "There is no paket with this name: $2" + fi + ;; + esac + ;; + + *) + echo -e "IPFire - Pakfire $PAKVER:" + echo -e "===\t===\t===\t===\t===\t===\t===\t===" + echo -e "pakfire install [packet]\t- Installs a new packet." + echo -e "pakfire remove [paket]\t\t- Uninstalls a paket." + echo -e "pakfire update\t\t\t- Reloads the package list." + echo -e "pakfire upgrade\t\t\t- Searches for new updates." + echo -e "===\t===\t===\t===\t===\t===\t===\t===" + ;; esac diff --git a/src/pakfire/pakfire.conf b/src/pakfire/pakfire.conf index d1036368fa..7c59ae7982 100644 --- a/src/pakfire/pakfire.conf +++ b/src/pakfire/pakfire.conf @@ -3,29 +3,31 @@ # IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen; # ############################################################################################ +PAKVER=2.0beta + # Home Verzeichnis von Pakman -HOME=/opt/pakfire +PAKHOME=/opt/pakfire + +SERVERS_LIST=servers.list_$PAKVER +PACKAGE_LIST=packages_list.txt -# Verionsfile von IPFire -VERS=/etc/ipfire_vers +# Haupt-Mirrorliste +H_MIRROR=http://download.ipfire.eu/servers/$SERVERS_LIST # URL Mirrorfile -PURL=/opt/pakfire/patch.http +PURL=`cat /opt/pakfire/cache/$SERVERS_LIST` # LOG_file LOG=/var/log/pakfire.log -# Filename der Patchliste -LIST_NAME=packages_list.txt - -# Zielverzeichnis der Patchliste -DEST_DIR=/opt/pakfire/list/ +# Datenbank +DB_DIR=/opt/pakfire/database # Update Verzeichnis UP_DIR=/opt/pakfire/updates/ -# Verzeichnis mit nicht installierten Paketen -NIP_DIR=/opt/pakfire/notinstalled/ +# temp directory +TMP_DIR=$PAKHOME/tmp # Verzeichnis mit Installierten Paketen IP_DIR=/opt/pakfire/installed/ @@ -33,14 +35,11 @@ IP_DIR=/opt/pakfire/installed/ # Download Zielverzeichnis DOWN_DEST=/opt/pakfire/download/ -# Haupt- Mirrorliste -H_MIRROR=http://mirror.ipfire.org/packages/files.http - # URL Zerlegungs- Script URL_ZERL=/opt/pakfire/url_zerl.sh # Host Tester -HOST_TEST=/opt/pakfire/test_host.sh +HOST_TEST=$PAKHOME/lib/test_host.sh # Paket Filenamen festlegen # Das eigentliche Paket @@ -54,3 +53,9 @@ PAK_UNINST=uninstall.sh # Cacheverzeichnis CACHE_DIR=/opt/pakfire/cache/ + +pakfire_logger() { + +echo "`date -u '+%b %e %T'` $*" | tee -a $LOG + +} \ No newline at end of file -- 2.39.2