From: ms Date: Fri, 4 May 2007 13:09:57 +0000 (+0000) Subject: Unser Paketmanager... X-Git-Tag: v2.3-beta1~734 X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=commitdiff_plain;h=1bd42c892ccaa879d6a06e762a10c6934f177f7f Unser Paketmanager... git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@525 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8 --- diff --git a/doc/language_issues.de b/doc/language_issues.de index 80f7f95d32..478b1ed675 100644 --- a/doc/language_issues.de +++ b/doc/language_issues.de @@ -321,6 +321,7 @@ WARNING: untranslated string: dial profile WARNING: untranslated string: down WARNING: untranslated string: firewall graphs WARNING: untranslated string: help +WARNING: untranslated string: install WARNING: untranslated string: intrusion detection system rules WARNING: untranslated string: invalid input for keepalive 1:2 WARNING: untranslated string: openvpn log diff --git a/doc/language_issues.en b/doc/language_issues.en index 6cc7bcfc49..34c1846936 100644 --- a/doc/language_issues.en +++ b/doc/language_issues.en @@ -324,6 +324,7 @@ WARNING: untranslated string: down WARNING: untranslated string: firewall logs ip WARNING: untranslated string: firewall logs port WARNING: untranslated string: help +WARNING: untranslated string: install WARNING: untranslated string: intrusion detection system rules WARNING: untranslated string: openvpn log WARNING: untranslated string: otherip diff --git a/html/cgi-bin/pakfire.cgi b/html/cgi-bin/pakfire.cgi index 733b3e996d..83a0524c41 100644 --- a/html/cgi-bin/pakfire.cgi +++ b/html/cgi-bin/pakfire.cgi @@ -14,12 +14,13 @@ use strict; # enable only the following on debugging purpose -#use warnings; -#use CGI::Carp 'fatalsToBrowser'; +use warnings; +use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; +require "/opt/pakfire/lib/functions.pl"; my %pakfiresettings=(); my $errormessage = ''; @@ -29,15 +30,37 @@ my $errormessage = ''; $pakfiresettings{'ACTION'} = ''; $pakfiresettings{'VALID'} = ''; -$pakfiresettings{'INSTALLED'} = ''; -$pakfiresettings{'AVAIL'} = ''; -$pakfiresettings{'AUTOUPD'} = ''; +$pakfiresettings{'INSPAKS'} = ''; +$pakfiresettings{'DELPAKS'} = ''; +$pakfiresettings{'AUTOUPDATE'} = ''; &Header::getcgihash(\%pakfiresettings); -if ($pakfiresettings{'ACTION'} eq $Lang::tr{'save'}) -{ +&Header::openpage($Lang::tr{'pakfire configuration'}, 1); +&Header::openbigbox('100%', 'left', '', $errormessage); +if ($pakfiresettings{'ACTION'} eq 'install') +{ + my @inspaks = split(/\|/, "$pakfiresettings{'INSPAKS'}"); + &General::writehash("${General::swroot}/pakfire/settings", \%pakfiresettings); + my @deps = ""; + foreach (@inspaks) { + push(@deps, $_); + my @add = split(/ /, `/usr/local/bin/pakfire resolvedeps $_`); + foreach (@add) { push(@deps, $_); } + } + &Header::openbox("100%", "center", "Pakfire"); + print "Wenn sie die Pakete @inspaks installieren wollen müssen sie auch folgende Pakete installieren: @deps"; + &Header::closebox(); + exit 0; +} +elsif ($pakfiresettings{'ACTION'} eq 'remove') +{ + $errormessage = "$pakfiresettings{'DELPAKS'}"; + &General::writehash("${General::swroot}/pakfire/settings", \%pakfiresettings); +} elsif ($pakfiresettings{'ACTION'} eq "$Lang::tr{'save'}") +{ + &General::writehash("${General::swroot}/pakfire/settings", \%pakfiresettings); } &General::readhash("${General::swroot}/pakfire/settings", \%pakfiresettings); @@ -46,13 +69,9 @@ if ($pakfiresettings{'ACTION'} eq $Lang::tr{'save'}) my %selected=(); my %checked=(); -$checked{'AUTOUPD'}{'off'} = ''; -$checked{'AUTOUPD'}{'on'} = ''; -$checked{'AUTOUPD'}{$pakfiresettings{'AUTOUPD'}} = "checked='checked'"; - -&Header::openpage($Lang::tr{'pakfire configuration'}, 1); - -&Header::openbigbox('100%', 'left', '', $errormessage); +$checked{'AUTOUPDATE'}{'off'} = ''; +$checked{'AUTOUPDATE'}{'on'} = ''; +$checked{'AUTOUPDATE'}{$pakfiresettings{'AUTOUPDATE'}} = "checked='checked'"; # DPC move error message to top so it is seen! if ($errormessage) { @@ -61,6 +80,49 @@ if ($errormessage) { &Header::closebox(); } +&Header::openbox("100%", "center", "Pakfire"); + +print < + Verfuegbare Addons:
+
+ + +

+ +
+
+
+ +
+ + + + Installierte Addons:
+ +
+


+
+ +
Automatische Updates taeglich ausfuehren: + + Test: + +
+
+
+END + &Header::closebox(); &Header::closebigbox(); diff --git a/lfs/pakfire b/lfs/pakfire index 14c34f7d99..d7a15abc39 100644 --- a/lfs/pakfire +++ b/lfs/pakfire @@ -51,9 +51,10 @@ md5 : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) + -mkdir -p /opt/pakfire/{cache,db/{meta,lists,rootfiles},etc,lib,logs,tmp} cd $(DIR_SRC) && cp -fRv src/pakfire $(DIR_APP) - cd $(DIR_APP) && mv -vf pakfire.conf /etc - cd $(DIR_APP) && chown root.root $(DIR_APP) -R && chmod 755 pakfire lib/* + cd $(DIR_APP) && mv -vf pakfire.conf /opt/pakfire/etc + cd $(DIR_APP) && chown root.root $(DIR_APP) -R -cd $(DIR_APP) && find $(DIR_APP) -name .svn -exec rm -rf {} \; @$(POSTBUILD) diff --git a/src/pakfire/installed/BASE b/src/pakfire/installed/BASE deleted file mode 100644 index f4386610cf..0000000000 --- a/src/pakfire/installed/BASE +++ /dev/null @@ -1 +0,0 @@ -VER=0 diff --git a/src/pakfire/lib/check_pak.sh b/src/pakfire/lib/check_pak.sh deleted file mode 100644 index 3f5c0830ba..0000000000 --- a/src/pakfire/lib/check_pak.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/sh -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -check_pak() { - -#if [ ! -f $PAKHOME/cache/$PACKAGES_LIST ]; then -# exit 1 -#fi - -# Zerlegte Listen -ZERL_PATCH=$TMP_DIR/zerl_ - -# Zerlegen der Liste erst jede Zeile fuer sich bei maximal 9998 Einträgen -for (( i=1 ; i<9999 ; i++)) -do - - patch=$(head -${i} $PAKHOME/cache/${PACKAGE_LIST} | tail -1) - echo $patch >${ZERL_PATCH}$i - - if [ "${patch}" = "###EOF###" ] - then - rm ${ZERL_PATCH}$i - break - fi - - if [ $i -ge 9999 ] - then - echo "Defektes Patchfile!!!" - /bin/rm -f ${ZERL_PATCH}* - return 1 - fi - -done - -# Errechnen wieviele Patches eingetragen sind -(( i-- )) - -# Jedes Paket nach Name zerlegen -for list in $(find $TMP_DIR -type f -name "zerl_*") -do - # Zeile lesen Zeile - zeile=$(cat $list) - - # Auf Namen reduzieren - name=${zeile%%-*} - - # Auf Version reduzieren - vers=${zeile#*-} - vers=${vers%%_*} - vers=${vers%% *} - ipfver=${zeile#*_*} - /bin/rm -f $DB_DIR/${name} - /bin/echo -e VER=\"${vers}\" > $DB_DIR/${name} - /bin/echo -e IPFVER=\"${ipfver}\" >> $DB_DIR/${name} - cat $DB_DIR/${name} | tr -d "\015" > $DB_DIR/${name} -done - -# Löschen der Hilfslisten -/bin/rm -f ${ZERL_PATCH}* >/dev/null 2>&1 - -} - -################################### EOF #################################################### diff --git a/src/pakfire/lib/functions.pl b/src/pakfire/lib/functions.pl new file mode 100644 index 0000000000..aa609cbbce --- /dev/null +++ b/src/pakfire/lib/functions.pl @@ -0,0 +1,464 @@ +#!/usr/bin/perl -w + +require "/opt/pakfire/etc/pakfire.conf"; + +use File::Basename; +use File::Copy; +use LWP::UserAgent; +use Net::Ping; + +package Pakfire; + +sub message { + my $message = shift; + print "$message\n"; + logger("$message"); +} + +sub logger { + my $log = shift; + system("logger -t pakfire \"$log\""); +} + +sub pinghost { + my $host = shift; + + $p = Net::Ping->new(); + if ($p->ping($host)) { + logger("$host is alive."); + return 1; + } else { + logger("$host is dead."); + return 0; + } + $p->close(); +} + +sub fetchfile { + my $file = shift; + my $host = shift; + my (@server, $proto); + + use File::Basename; + + if ("$host" eq "") { + @server = selectmirror(); + $proto = $server[0]; + $host = $server[1]; + $file = "$server[2]/$file"; + } + + logger("Trying to get $file from $host ($proto)."); + + $bfile = basename("$file"); + + my $ua = LWP::UserAgent->new; + $ua->agent('Pakfire/2.1'); + #$ua->timeout(5); + #$ua->env_proxy; + + my $response = $ua->get("http://$host/$file"); + if ($response->is_success) { + if (open(FILE, ">$Conf::cachedir/$bfile")) { + print FILE $response->content; + close(FILE); + } else { + message("Could not open $Conf::cachedir/$bfile for writing."); + } + logger("$host sends file: $file."); + return 1; + } + else { + my $log = $response->status_line; + logger("$log"); + return 0; + } +} + +sub testhost { + my $host = shift; + + my $ua = LWP::UserAgent->new; + $ua->agent('Pakfire/2.1'); + $ua->timeout(5); + # $ua->env_proxy; + + my $response = $ua->get("http://$host/dummy"); + if ($response->is_success) { + logger("$host answers my request."); + return 1; + } + else { + my $log = $response->status_line; + logger("Server does not work properly: $log"); + return 0; + } +} + +sub getmirrors { + use File::Copy; + + logger("Try to get a mirror list."); + + fetchfile("lists/$Conf::version-server-list", "$Conf::mainserver"); + move("$Conf::cachedir/$Conf::version-server-list", "$Conf::dbdir/lists/$Conf::version-server-list"); +} + +sub selectmirror { + ### Check if there is a current server list and read it. + # If there is no list try to get one. + my $count = 0; + while (!(open(FILE, "<$Conf::dbdir/lists/$Conf::version-server-list")) && ($count lt 5)) { + $count++; + getmirrors(); + } + if ($count == 5) { + message("Could not find or download a server list."); + exit 1; + } + my @lines = ; + close(FILE); + + ### Count the number of the servers in the list + my $scount = 0; + foreach (@lines) { + $scount++; + } + logger("$scount servers found in list."); + + ### Choose a random server and test if it is online + # If the check fails try a new server. + # This will never give up. + my $found = 0; + my $servers = 0; + while ($found == 0) { + $server = int(rand($scount) + 1); + $servers = 0; + my ($line, $proto, $path, $host); + my @templine; + foreach $line (@lines) { + $servers++; + if ($servers eq $server) { + @templine = split(/\;/, $line); + $proto = $templine[0]; + $host = $templine[1]; + $path = $templine[2]; + if ((pinghost("$host")) && testhost("$host") ) { + $found = 1; + return ($proto, $host, $path); + } + } + } + } +} + +sub dbgetlist { + ### Update the database if the file is older than one day. + # If you pass &Pakfire::dbgetlist(force) the list will be downloaded. + # Usage is always with an argument. + my $force = shift; + my $age; + + use File::Copy; + + if ( -e "$Conf::dbdir/lists/packages_list.db" ) { + my @stat = stat("$Conf::dbdir/lists/packages_list.db"); + my $time = time(); + $age = $time - $stat[9]; + } else { + # Force an update. + $age = "86401"; + } + + if (("$age" gt 86400) || ("$force" eq "force")) { + cleanup(); + fetchfile("lists/packages_list.db", ""); + move("$Conf::cachedir/packages_list.db", "$Conf::dbdir/lists/packages_list.db"); + } +} + +sub dblist { + ### This subroutine lists the packages. + # You may also pass a filter: &Pakfire::dblist(filter) + # Usage is always with two arguments. + # filter may be: all, notinstalled, installed + my $filter = shift; + my $forweb = shift; + + ### Make sure that the list is not outdated. + dbgetlist("noforce"); + + open(FILE, "<$Conf::dbdir/lists/packages_list.db"); + my @db = ; + close(FILE); + + my $line; + my @templine; + foreach $line (sort @db) { + @templine = split(/\;/,$line); + ### filter here... + if ("$forweb" eq "forweb") { + print "\n"; + } else { + print "$templine[0] $templine[1]\n"; + } + } +} + +sub resolvedeps { + my $pak = shift; + + getmetafile("$pak"); + + message("\n## Resolving dependencies for $pak..."); + + open(FILE, "<$Conf::dbdir/meta/meta-$pak"); + my @file = ; + close(FILE); + + my $line; + my (@templine, @deps, @tempdeps); + foreach $line (@file) { + @templine = split(/\: /,$line); + if ("$templine[0]" eq "Dependencies") { + @deps = split(/ /, $templine[1]); + } + } + chomp (@deps); + foreach (@deps) { + if ($_) { + message("### Found dependency: $_"); + push(@tempdeps,$_); + } + } + + #my @tempdeps = @deps; + foreach (@tempdeps) { + if ($_) { + my @newdeps = resolvedeps("$_"); + foreach(@newdeps) { + unless (($_ eq " ") || ($_ eq "")) { + message("### Found dependency: $_"); + push(@deps,$_); + } + } + } + } + chomp (@deps); + return @deps; +} + +sub cleanup { + my $dir = shift; + my $path; + + if ( "$dir" eq "meta" ) { + $path = "$Conf::dbdir/meta"; + } elsif ( "$dir" eq "tmp" ) { + $path = "$Conf::tmpdir"; + } + chdir("$path"); + opendir(DIR,"."); + my @files = readdir(DIR); + closedir(DIR); + foreach (@files) { + unless (($_ eq ".") || ($_ eq "..")) { + system("rm -rf $_"); + } + } +} + +sub getmetafile { + my $pak = shift; + + logger("Going to download meta-$pak."); + + unless ( -e "$Conf::dbdir/meta/meta-$pak") { + fetchfile("meta/meta-$pak", ""); + move("$Conf::cachedir/meta-$pak", "$Conf::dbdir/meta/meta-$pak"); + } + + open(FILE, "<$Conf::dbdir/meta/meta-$pak"); + my @line = ; + close(FILE); + + open(FILE, ">$Conf::dbdir/meta/meta-$pak"); + foreach (@line) { + my $string = $_; + $string =~ s/\r\n/\n/g; + print FILE $string; + } + close(FILE); + return 1; +} + +sub getsize { + my $pak = shift; + + getmetafile("$pak"); + + open(FILE, "<$Conf::dbdir/meta/meta-$pak"); + my @file = ; + close(FILE); + + my $line; + my @templine; + foreach $line (@file) { + @templine = split(/\: /,$line); + if ("$templine[0]" eq "Size") { + chomp($templine[1]); + return $templine[1]; + } + } +} + +sub addsizes { + my @paks = shift; + + my @sizes; + foreach (@paks) { + my $paksize = getsize("$_"); + push(@sizes, $paksize); + } + + my $totalsize = 0; + foreach (@sizes) { + $totalsize += $_; + } + return $totalsize; +} + +sub decryptpak { + my $pak = shift; + + cleanup("tmp"); + + my $file = getpak("$pak", "noforce"); + + my $return = system("gpg -d < $Conf::cachedir/$file | tar xj -C $Conf::tmpdir/"); + + logger("Decryption process returned the following: $return"); + if ($return == 1) { exit 1; } +} + +sub getpak { + my $pak = shift; + my $force = shift; + + getmetafile("$pak"); + + open(FILE, "<$Conf::dbdir/meta/meta-$pak"); + my @file = ; + close(FILE); + + my $line; + my $file; + my @templine; + foreach $line (@file) { + @templine = split(/\: /,$line); + if ("$templine[0]" eq "File") { + chomp($templine[1]); + $file = $templine[1]; + } + } + + unless ($file) { + message("No filename given in meta-file. Please phone the developers."); + exit 1; + } + + message("\n## Downloading $file..."); + + unless ( "$force" eq "force" ) { + if ( -e "$Conf::cachedir/$file" ) { + message("$file is already there. Skipping download."); + return $file; + } + } + + fetchfile("paks/$file", ""); + return $file; +} + +sub setuppak { + my $pak = shift; + + message("We are going to install: $pak"); + + decryptpak("$pak"); + + my $return = system("cd $Conf::tmpdir && ./install.sh >> $Conf::logdir/install-$pak.log 2>&1"); + if ($return == 0) { + move("$Conf::tmpdir/ROOTFILES", "$Conf::dbdir/rootfiles/$pak"); + cleanup("tmp"); + message("Setup completed. Congratulations!"); + } else { + message("Setup returned: $return. Sorry. Please search our forum to find a solution for this problem."); + exit $return; + } + + exit $return; +} + +sub updatepak { + my $pak = shift; + + message("We are going to update: $pak"); + + decryptpak("$pak"); + + my $return = system("cd $Conf::tmpdir && ./update.sh >> $Conf::logdir/update-$pak.log 2>&1"); + if ($return == 0) { + move("$Conf::tmpdir/ROOTFILES", "$Conf::dbdir/rootfiles/$pak"); + cleanup("tmp"); + message("Update completed. Congratulations!"); + } else { + message("Setup returned: $return. Sorry. Please search our forum to find a solution for this problem."); + exit $return; + } + + exit $return; +} + +sub removepak { + my $pak = shift; + + message("We are going to uninstall: $pak"); + + decryptpak("$pak"); + + my $return = system("cd $Conf::tmpdir && ./uninstall.sh >> $Conf::logdir/uninstall-$pak.log 2>&1"); + if ($return == 0) { + open(FILE, "<$Conf::dbdir/rootfiles/$pak"); + my @file = ; + close(FILE); + foreach (@file) { + my $line = $_; + chomp($line); + system("echo \"Removing: $line\" >> $Conf::logdir/uninstall-$pak.log 2>&1"); + system("cd / && rm -rf $line >> $Conf::logdir/uninstall-$pak.log 2>&1"); + } + unlink("$Conf::dbdir/rootfiles/$pak"); + cleanup("tmp"); + message("Uninstall completed. Congratulations!"); + } else { + message("Setup returned: $return. Sorry. Please search our forum to find a solution for this problem."); + exit $return; + } + + exit $return; +} + +sub beautifysize { + my $size = shift; + + if ($size > 1023) { + my $newsize = $size / 1024; + return "$newsize MB"; + } else { + return "$size KB"; + } +} + + +1; diff --git a/src/pakfire/lib/get_base.sh b/src/pakfire/lib/get_base.sh deleted file mode 100644 index f51dac9a7e..0000000000 --- a/src/pakfire/lib/get_base.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/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_conf.sh b/src/pakfire/lib/get_conf.sh deleted file mode 100644 index 0d61f1a574..0000000000 --- a/src/pakfire/lib/get_conf.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -# Conf File festlegen -CONF_FILE=/etc/pakfire.conf - -if [ -r $CONF_FILE ] -then - STRI=$(grep $1 $CONF_FILE) - STRI=${STRI#*=} -fi - -if [ -z $2 ] - then echo "$STRI" - else cat $STRI -fi - -################################### EOF #################################################### diff --git a/src/pakfire/lib/get_list.sh b/src/pakfire/lib/get_list.sh deleted file mode 100644 index 6277550dc9..0000000000 --- a/src/pakfire/lib/get_list.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -get_list () { - -PURL=`cat ${CACHE_DIR}$SERVERS_LIST` - -if [ "$PURL" ]; then - url=$(. $HOST_TEST "$PURL") - if [ -n $url ] - then URL=${url} - fi -else - echo "No server-address available. Exiting..." - exit 1 -fi - -if [ -z $URL ] - then pakfire_logger "Cannot find a working mirror." - return 1 -fi - -cd $PAKHOME/cache - -if [ -f $PACKAGE_LIST ] - then rm $PACKAGE_LIST -fi - -if /usr/bin/wget $URL/$PACKAGE_LIST > /dev/null 2>&1 - then - cd - - pakfire_logger "Updateliste heruntergeladen von $URL" - return 0 - else - cd - - 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 deleted file mode 100644 index bf90268308..0000000000 --- a/src/pakfire/lib/get_mirror.sh +++ /dev/null @@ -1,26 +0,0 @@ -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -get_mirror() { - -cd $PAKHOME/cache - -if [ -e $PAKHOME/cache/$SERVERS_LIST ] - then rm -f $PAKHOME/cache/$SERVERS_LIST -fi - -if /usr/bin/wget $H_MIRROR >$LOG 2>&1 - then - pakfire_logger "Got servers!" - cd - - return 0 - else - pakfire_logger "Got no servers!" - cd - - return 1 -fi - -} -################################### EOF #################################################### diff --git a/src/pakfire/lib/get_pak.sh b/src/pakfire/lib/get_pak.sh deleted file mode 100644 index 13b4920884..0000000000 --- a/src/pakfire/lib/get_pak.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -get_pak() { - -URL=$(. $HOST_TEST "$PURL") - -if [ -z $URL ] - then pakfire_logger "Cannot find a mirror." - exit 1 -fi - -. $DB_DIR/$1 - -FILE="$1-${VER}_${IPFVER}.ipfire" - -if [ ! -f $CACHE_DIR/$FILE ]; then - cd /var/tmp - pakfire_logger "Downloading $FILE from $URL..." - if /usr/bin/wget $URL/packages/$FILE{,.md5} >> $LOG 2>&1 - then - if [ "`md5sum $FILE`" = "`cat ${FILE}.md5`" ]; then - mv -f /var/tmp/$FILE{,.md5} $CACHE_DIR - pakfire_logger "MD5 sum OK in $FILE!" - else - pakfire_logger "Wrong MD5 sum in $FILE." - rm -f /var/tmp/$FILE{,.md5} - exit 1 - fi - cd - - else - cd - - pakfire_logger "Cannot download $URL/packages/$FILE" - exit 1 - fi -else - pakfire_logger "No need to download $FILE." -fi - -} - -################################### EOF #################################################### diff --git a/src/pakfire/lib/get_pakname.sh b/src/pakfire/lib/get_pakname.sh deleted file mode 100644 index f78dbd7480..0000000000 --- a/src/pakfire/lib/get_pakname.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -# Update Verzeichnis -UP_DIR=$(get_conf.sh UP_DIR) - -# Installierten Verzeichnis -IP_DIR=$(get_conf.sh IP_DIR) - -# Nicht Installierten Verzeichnis -NIP_DIR=$(get_conf.sh NIP_DIR) - -# $1 = update|install|uninstall|reinstall -# $2 = paketname - -case "$1" in - - update) - if /bin/ls ${UP_DIR}${2}* >/dev/null 2>&1 - then name=$(/bin/ls ${UP_DIR}${2}*) - name=$(/bin/basename $name) - echo $name - exit 0 - else exit 1 - fi - ;; - install) - if /bin/ls ${NIP_DIR}${2}* >/dev/null 2>&1 - then name=$(/bin/ls ${NIP_DIR}${2}*) - name=$(/bin/basename $name) - echo $name - exit 0 - else exit 1 - fi - ;; - uninstall) - if /bin/ls ${IP_DIR}${2}* >/dev/null 2>&1 - then name=$(/bin/ls ${IP_DIR}${2}*) - name=$(/bin/basename $name) - echo $name - exit 0 - else exit 1 - fi - ;; - reinstall) - if /bin/ls ${IP_DIR}${2}* >/dev/null 2>&1 - then name=$(/bin/ls ${IP_DIR}${2}*) - name=$(/bin/basename $name) - echo $name - exit 0 - else exit 1 - fi - ;; - *) exit 2 -esac - - -################################### EOF #################################################### diff --git a/src/pakfire/lib/get_upgrade.sh b/src/pakfire/lib/get_upgrade.sh deleted file mode 100644 index 8d72a559ff..0000000000 --- a/src/pakfire/lib/get_upgrade.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/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/install_pak.sh b/src/pakfire/lib/install_pak.sh deleted file mode 100644 index d716b33346..0000000000 --- a/src/pakfire/lib/install_pak.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -install_pak() { - -cd $CACHE_DIR - -. $DB_DIR/$1 -FILE="$1-${VER}_${IPFVER}.tar.gz" - -pakfire_logger "Unpaking $FILE..." -mkdir $TMP_DIR/$1 -tar xfz $CACHE_DIR/$FILE -C $TMP_DIR/$1 - -$PAKHOME/lib/resolv_deps.sh $TMP_DIR/$1/$DEPS - -cd $TMP_DIR/$1 -$TMP_DIR/$1/$INSTALL - -cp -f ROOTFILES $IP_DIR/$1 - -} - -################################### EOF #################################################### diff --git a/src/pakfire/lib/resolv_deps.sh b/src/pakfire/lib/resolv_deps.sh deleted file mode 100644 index be0417f106..0000000000 --- a/src/pakfire/lib/resolv_deps.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -. /etc/pakfire.conf - -for i in `cat $1`; do - if [ ! -f $IP_DIR/$i ]; then - pakfire_logger "Dependency $i is not installed yet. Trying..." - $PAKHOME/pakfire install $i - else - pakfire_logger "Dependency $i is already installed." - fi -done diff --git a/src/pakfire/lib/test.sh b/src/pakfire/lib/test.sh deleted file mode 100644 index c7f6763ff6..0000000000 --- a/src/pakfire/lib/test.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -echo $? -echo $$ -echo $0 -echo $1 -echo $# -echo $% diff --git a/src/pakfire/lib/test_host.sh b/src/pakfire/lib/test_host.sh deleted file mode 100644 index 237dfa7823..0000000000 --- a/src/pakfire/lib/test_host.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -# Zählen wie viele Hosts übergeben wurden -i=0 -for host in $PURL -do - ((i++)) -done - -# Random Zahl auslesen -rand=$RANDOM - -# Random Zahl herunterbrechen -while [ $rand -gt $i ] -do ((rand=rand/2)) -done - -# Versuche Randomserver zu erreichen -i=0 -for host in $1 -do - ((i++)) - if [ $i -eq $rand ] - then - if ping $($PAKHOME/lib/url_zerl.sh $host get_host) -c 1 -s 0 >/dev/null 2>&1 - then echo $host - return 0 - fi - fi - if [ $i -gt $rand ] - then - break - fi -done - -for host in $1 -do - if ping $($PAKHOME/lib/url_zerl.sh $host get_host) -c 1 -s 0 >/dev/null 2>&1 - then - echo $host - return 0 - fi -done - -return 1 - -################################### EOF #################################################### diff --git a/src/pakfire/lib/unpak_pak.sh b/src/pakfire/lib/unpak_pak.sh deleted file mode 100644 index 8140c9e303..0000000000 --- a/src/pakfire/lib/unpak_pak.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -# Source Verzeichnis -DOWN_DEST=$(get_conf.sh DOWN_DEST) - -# Logfile festlegen -LOG_file=$(get_conf.sh LOG) - -# Programmpaket -PAK_PROG=$(get_conf.sh PAK_PROG) - -# Abhängigkeitsliste -PAK_ABH=$(get_conf.sh PAK_ABH) - -# Installations Script -PAK_INST=$(get_conf.sh PAK_INST) - -# Uninstallations Script -PAK_UNINST=$(get_conf.sh PAK_UNINST) - -# Cache Verzeichnis -CACHE_DIR=$(get_conf.sh CACHE_DIR) - -# Überprüfen ob Hauptpaket angegeben wurde -if [ -z $1 ] - then - echo "$(/bin/date) | $0 | kein Paketnamen angegeben">>$LOG_file - exit 1 -fi - -# Überprüfe ob Paket vorhanden -if [ ! -e ${DOWN_DEST}${1}.tar.gz ] - then - echo "$(/bin/date) | $0 | Paket nicht vorhanden">>$LOG_file - exit 1 -fi - -# Überprüfe ob das Paket richtig geschnürt wurde -tester=$(/bin/tar -tzf ${DOWN_DEST}${1}.tar.gz) -if [ ! 0 -lt $(echo $tester | grep $PAK_PROG | wc -l) ] - then - echo "$(/bin/date) | $0 | Programm im Paket nichtvorhanden">>$LOG_file - exit 1 -fi -if [ ! 0 -lt $(echo $tester | grep $PAK_ABH | wc -l) ] - then - echo "$(/bin/date) | $0 | Abhängigkeit im Paket nichtvorhanden">>$LOG_file - exit 1 -fi -if [ ! 0 -lt $(echo $tester | grep $PAK_INST | wc -l) ] - then - echo "$(/bin/date) | $0 | Installations-Script im Paket nichtvorhanden">>$LOG_file - exit 1 -fi -if [ ! 0 -lt $(echo $tester | grep $PAK_UNINST | wc -l) ] - then - echo "$(/bin/date) | $0 | Uninstallatoins-Script im Paket nichtvorhanden">>$LOG_file - exit 1 -fi - -# Cache leeren -rm -f ${CACHE_DIR}$PAK_PROG -rm -f ${CACHE_DIR}$PAK_ABH -rm -f ${CACHE_DIR}$PAK_INST -rm -f ${CACHE_DIR}$PAK_UNINST - -# Entpaken des Hauptpaketes -/bin/tar -xzf ${DOWN_DEST}${1}.tar.gz -C $CACHE_DIR - -# Files neu benennen -/bin/mv ${CACHE_DIR}$PAK_PROG ${CACHE_DIR}${1}_$PAK_PROG -/bin/mv ${CACHE_DIR}$PAK_ABH ${CACHE_DIR}${1}_$PAK_ABH -/bin/mv ${CACHE_DIR}$PAK_INST ${CACHE_DIR}${1}_$PAK_INST -/bin/mv ${CACHE_DIR}$PAK_UNINST ${CACHE_DIR}${1}_$PAK_UNINST - -################################### EOF #################################################### diff --git a/src/pakfire/lib/url_zerl.sh b/src/pakfire/lib/url_zerl.sh deleted file mode 100644 index 91db43d492..0000000000 --- a/src/pakfire/lib/url_zerl.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ - -protokoll=${1%%:*} - -rest=${1#*'//'} - -if grep @ </dev/null -$rest -EOF -then -# User heraus suchen -user=${rest%%:*} -rest=${rest#*:} -pass=${rest%%@*} -rest=${rest#*@} -fi - -host=${rest%%/*} -rest=${rest#*/} - -if grep / </dev/null -$rest -EOF -then -dir=${rest%/*} -rest=${rest##*/} -fi - -file=$rest - -case "$2" in - get_proto) - echo $protokoll - ;; - get_user) - echo $user - ;; - get_pass) - echo $pass - ;; - get_host) - echo $host - ;; - get_dir) - echo $dir - ;; - get_file) - echo $file - ;; - *) exit 1 -esac - -################################### EOF #################################################### diff --git a/src/pakfire/pakfire b/src/pakfire/pakfire index f0ef46e257..8a00c7c5ed 100644 --- a/src/pakfire/pakfire +++ b/src/pakfire/pakfire @@ -1,67 +1,82 @@ -#!/bin/bash -############################################################################################ -# Version 0.1a, Copyright (C) 2006 by IPFire.org # -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen. # -############################################################################################ +#!/usr/bin/perl -w -. /etc/pakfire.conf + require "/opt/pakfire/lib/functions.pl"; + + my $interactive = 1; + + &Pakfire::message("### Welcome to IPFire Pakfire $Conf::version!"); -case "$1" in - update) - . $PAKHOME/lib/get_mirror.sh - . $PAKHOME/lib/get_list.sh - . $PAKHOME/lib/check_pak.sh - get_mirror - get_list - check_pak - ;; + ### Check if we are running as root + # + my $user = qx(whoami); + chomp($user); + unless ( "$user" eq "root" ) { + &Pakfire::message("You must run pakfire as user root!"); + exit 1; + } + + unless (@ARGV) { + &Pakfire::message("Usage: pakfire "); + &Pakfire::message(" "); + &Pakfire::message(" "); + exit 1; + } - upgrade) - . $PAKHOME/lib/get_upgrade.sh - . $PAKHOME/lib/get_base.sh - get_upgrade - get_base - ;; + if ("$ARGV[0]" eq "install") { + shift; + my @deps = (); + my @paks = @ARGV; + foreach (@ARGV) { + @deps = &Pakfire::resolvedeps("$_"); + } + + my @all = (); + foreach (@paks) { + push(@all,$_); + } + foreach (@deps) { + push(@all,$_); + } - install) - . $PAKHOME/lib/get_pak.sh - . $PAKHOME/lib/install_pak.sh - case "$2" in - "") - pakfire_logger "No package name given. Exiting..." - ;; - 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 - install_pak $2 - rm -rf $TMP_DIR/* - fi - else - pakfire_logger "There is no paket with this name: $2" - fi - ;; - esac - ;; + &Pakfire::message("\n\n### Packages to install:"); + foreach (@paks) { + my $size = &Pakfire::getsize("$_"); + $size = &Pakfire::beautifysize($size); + &Pakfire::message("# $_ \t\t - $size"); + } + + &Pakfire::message("\n### Packages to install for dependencies:"); + foreach (@deps) { + my $size = &Pakfire::getsize("$_"); + $size = &Pakfire::beautifysize($size); + &Pakfire::message("# $_ \t\t - $size"); + } - clean) - rm -rf $CACHE_DIR/* $TMP_DIR/* $DB_DIR/* - ;; - *) - 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===" - ;; + my $totalsize = &Pakfire::addsizes(@all); + $totalsize = &Pakfire::beautifysize($totalsize); + &Pakfire::message("\n### Download size: \t ~ $totalsize"); + + if ($interactive) { + &Pakfire::message("Is this okay? [y/N]"); + my $ret = ; + chomp($ret); + &Pakfire::logger("Answer: $ret"); + if ( $ret ne "y" ) { + &Pakfire::message("Installation aborted."); + exit 1; + } + } + + &Pakfire::message("### Installing all packages:"); -esac + foreach (@all) { + &Pakfire::setuppak("$_"); + } -################################### EOF #################################################### + + } elsif ("$ARGV[0]" eq "remove") { + + + } elsif ("$ARGV[0]" eq "update") { + + } diff --git a/src/pakfire/pakfire.conf b/src/pakfire/pakfire.conf index 2cb9c5dcbf..e3f02869d7 100644 --- a/src/pakfire/pakfire.conf +++ b/src/pakfire/pakfire.conf @@ -1,61 +1,14 @@ -############################################################################################ -# Version 0.1a, Copyright (C) 2006 Peter Schaelchli Für IPFire besteht KEINERLEI GARANTIE;# -# IPFire ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen; # -############################################################################################ +#!/usr/bin/perl -w -PAKVER=2.0beta +package Conf; -# Home Verzeichnis von Pakman -PAKHOME=/opt/pakfire +$version = "2.0b1"; -SERVERS_LIST=servers.list_$PAKVER -PACKAGE_LIST=packages_list.txt +$mainserver = "pakfire.ipfire.org"; -# Haupt-Mirrorliste -H_MIRROR=http://download.ipfire.eu/servers/$SERVERS_LIST +$cachedir = "/opt/pakfire/cache"; +$dbdir = "/opt/pakfire/db"; +$tmpdir = "/opt/pakfire/tmp"; +$logdir = "/opt/pakfire/logs"; -# URL Mirrorfile -PURL=`cat /opt/pakfire/cache/$SERVERS_LIST 2>/dev/null` - -# LOG_file -LOG=/var/log/pakfire.log - -# Datenbank -DB_DIR=/opt/pakfire/database - -# Update Verzeichnis -UP_DIR=/opt/pakfire/updates/ - -# temp directory -TMP_DIR=$PAKHOME/tmp - -# Verzeichnis mit Installierten Paketen -IP_DIR=/opt/pakfire/installed/ - -# Download Zielverzeichnis -DOWN_DEST=/opt/pakfire/download/ - -# URL Zerlegungs- Script -URL_ZERL=/opt/pakfire/url_zerl.sh - -# Host Tester -HOST_TEST=$PAKHOME/lib/test_host.sh - -# Paket Filenamen festlegen -# Das eigentliche Paket -PAK_FILES=files.tgz -# Abhängigkeits Liste -DEPS=depends.txt -# Installer Script -INSTALL=install.sh -# Uninstaller Script -UNINSTALL=uninstall.sh - -# Cacheverzeichnis -CACHE_DIR=/opt/pakfire/cache/ - -### DO NOT CHANGE ANYTHING AFTER THIS LINE!!! ### - -pakfire_logger() { - echo "`date -u '+%b %e %T'` $*" | tee -a $LOG -} \ No newline at end of file +1;