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
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
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 = '';
$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);
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) {
&Header::closebox();
}
+&Header::openbox("100%", "center", "Pakfire");
+
+print <<END;
+ <table width='100%'>
+ <tr><td width='40%' align="center">Verfuegbare Addons:<br />
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <select name="INSPAKS" size="10" multiple>
+END
+ &Pakfire::dblist("notinstalled", "forweb");
+
+print <<END;
+ </select>
+ </td>
+ <td width='20%' align="center">
+ <input type='hidden' name='ACTION' value='install' />
+ <input type='image' alt='$Lang::tr{'install'}' src='/images/list-add.png' />
+ </form><br />
+
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <input type='submit' value='Liste aktualisieren' /><br />
+ </form>
+
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <input type='hidden' name='ACTION' value='remove' />
+ <input type='image' alt='$Lang::tr{'remove'}' src='/images/list-remove.png' />
+ </td>
+ <td width='40%' align="center">Installierte Addons:<br />
+ <select name="DELPAKS" size="10" multiple>
+ <option value="postfix">Postfix v2.4.0-1</option>
+ </select>
+ </table></form>
+ <br /><hr /><br />
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <table width='100%'>
+ <tr><td width='40%' align="right">Automatische Updates taeglich ausfuehren:
+ <td width='10%' align="left"><input type="checkbox" name="AUTOUPDATE" $checked{'AUTOUPDATE'}{'on'} />
+ <td width='40%' align="right">Test:
+ <td width='10%' align="left"><input type="checkbox" name="AUTOUPDATE" $checked{'AUTOUPDATE'}{'on'} />
+ <tr><td width='100%' colspan="4" align="right"><input type="submit" name="ACTION" value="$Lang::tr{'save'}" />
+ </table>
+ </form>
+END
+
&Header::closebox();
&Header::closebigbox();
$(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)
+++ /dev/null
-#!/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 ####################################################
--- /dev/null
+#!/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 = <FILE>;
+ 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 = <FILE>;
+ close(FILE);
+
+ my $line;
+ my @templine;
+ foreach $line (sort @db) {
+ @templine = split(/\;/,$line);
+ ### filter here...
+ if ("$forweb" eq "forweb") {
+ print "<option value=\"$templine[0]\">$templine[1]</option>\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 = <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 = <FILE>;
+ 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 = <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 = <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 = <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;
+++ /dev/null
-#!/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 ####################################################
+++ /dev/null
-#!/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 ####################################################
+++ /dev/null
-#!/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 ####################################################
+++ /dev/null
-############################################################################################
-# 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 ####################################################
+++ /dev/null
-#!/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 ####################################################
+++ /dev/null
-#!/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 ####################################################
+++ /dev/null
-#!/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 ####################################################
+++ /dev/null
-#!/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 ####################################################
+++ /dev/null
-#!/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
+++ /dev/null
-#!/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 $%
+++ /dev/null
-#!/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 ####################################################
+++ /dev/null
-#!/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 ####################################################
+++ /dev/null
-#!/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 @ <<EOF >/dev/null
-$rest
-EOF
-then
-# User heraus suchen
-user=${rest%%:*}
-rest=${rest#*:}
-pass=${rest%%@*}
-rest=${rest#*@}
-fi
-
-host=${rest%%/*}
-rest=${rest#*/}
-
-if grep / <<EOF >/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 ####################################################
-#!/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 <install|remove> <pak(s)>");
+ &Pakfire::message(" <update>");
+ &Pakfire::message(" <upgrade>");
+ 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 = <STDIN>;
+ 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") {
+
+ }
-############################################################################################
-# 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;