Unser Paketmanager...

git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@525 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8
This commit is contained in:
ms
2007-05-04 13:09:57 +00:00
parent 46dff71309
commit 1bd42c892c
22 changed files with 629 additions and 700 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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 <<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();

View File

@@ -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)

View File

@@ -1 +0,0 @@
VER=0

View File

@@ -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<74>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 ####################################################

View File

@@ -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 = <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;

View File

@@ -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 ####################################################

View File

@@ -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 ####################################################

View File

@@ -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 ####################################################

View File

@@ -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 ####################################################

View File

@@ -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 ####################################################

View File

@@ -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 ####################################################

View File

@@ -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 ####################################################

View File

@@ -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 ####################################################

View File

@@ -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

View File

@@ -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 $%

View File

@@ -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 <20>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 ####################################################

View File

@@ -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<62>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)
# <20>berpr<70>fen ob Hauptpaket angegeben wurde
if [ -z $1 ]
then
echo "$(/bin/date) | $0 | kein Paketnamen angegeben">>$LOG_file
exit 1
fi
# <20>berpr<70>fe ob Paket vorhanden
if [ ! -e ${DOWN_DEST}${1}.tar.gz ]
then
echo "$(/bin/date) | $0 | Paket nicht vorhanden">>$LOG_file
exit 1
fi
# <20>berpr<70>fe ob das Paket richtig geschn<68>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<62>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 ####################################################

View File

@@ -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 @ <<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 ####################################################

View File

@@ -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 <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") {
}

View File

@@ -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<62>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
}
1;