install.pl100755 0 0 51231 11225350526 10236 0ustar 0 0 #! /usr/bin/perl -w use strict; use File::Path; use File::Basename; use Getopt::Long; my $FILE_EULA = 'EULA.txt'; my $DOWNLOAD_SERVER = "http://dls.photoprintit.de/"; ## JGE my $KEYACCID = '14615'; my $CLIENTID = '38'; my $HPS_VER = '4.5.4'; my $VENDOR_NAME = 'Fotocompil'; my $APPLICATION_NAME = 'Mon Univers Fotocompil'; my $HAS_PHOTOFUN = 'true'; my $HAS_CANVAS = 'true'; my $HAS_POSTER = 'true'; my $HAS_PREMIUMFOTO = 'true'; my $HAS_BUDGETFOTO = 'true'; my $HAS_CALENDARS = 'true'; my $HAS_FOTOBOOKS = 'true'; my $HAS_THEME_DESIGN = 'true'; my $HAS_THEME_DMBABY = 'false'; my $HAS_THEME_ALB = 'false'; my $PROGRAM_NAME_FOTOSHOW = 'Galerie photo'; ## /JGE my $DESKTOP_ICON_NAME = 'Mon Univers Fotocompil.desktop'; my $DESKTOP_ICON_PATH = '/Resources/keyaccount/32.xpm'; my $SERVICES_XML_PATH = '/Resources/services.xml'; my $AFFILIATE_ID = ''; my $ANSWER_YES = 'oui'; my $ANSWER_NO = 'non'; my $WELCOME = "Le script suivant installera l\'application '$APPLICATION_NAME' sur votre ordinateur, laissez vous guider par l\'assistant.\n\n\n"; my $EULA_READ = "Veuillez lire soigneusement la licence EULA. Ensuite, vous devez l\'accepter.\n\tDans l\'EULA, vous pouvez vous diriger avec les flèches et 'q' pour quitter.\n\t Continuez [Entrée]."; my $EULA_ACCEPT = "\tAcceptez-vous la licence d\'utilisation EULA? [$ANSWER_YES/".uc($ANSWER_NO)."] "; my $EULA_NOTACCEPTED = "\tVous n\'avez pas accepté la licence d\'utilisation .\n L\'application '$APPLICATION_NAME' ne sera donc pas installée.\n\n\n"; my $INSTALL_DIR_QUESTION_FORMAT = "Où voulez-vous installer le logiciel '$APPLICATION_NAME'? [%s] "; my $DOWNLOAD_MSG = "\Voulez-vous continuer l\'installation et télécharger les données nécessaires via Internet? [".uc($ANSWER_YES)."/".$ANSWER_NO."] "; my $DOWNLOAD_MSG_FORMAT = "\tTéléchargment: '%s'\n"; my $UNPACK_MSG = "Les fichiers nécessaires à l\'installation sont maintenant en cours d\'extraction.\n"; my $FINISHED_MSG_FORMAT = "\nFélicitations !\nVous avez installé '$APPLICATION_NAME'.\nPour lancer le logiciel, exécutez l\'application suivante '%s/$APPLICATION_NAME'.\n\nÀ vous de jouer !\n"; my $DOWNLOAD_RETRY = "Voulez-vous à nouveau essayer de télécharger ce fichier? [$ANSWER_YES/".uc($ANSWER_NO)."] "; my $PACKAGE_SIZE_FORMAT = "\t\t%s %s\t%s (%s)\n"; my $TOTAL_DOWNLOAD_SIZE_FORMAT = "\tIl reste encore %.1fMb à télécharger.\n"; my $PRE_PACKAGELIST_MSG = "Pour que l\'installation soit complète, des paquets doivent être encore téléchargés.\n"; my @ANSWER_YES_LIST = ("o", "oui", "y", "yes"); my @ANSWER_NO_LIST = ("n", "non", "no"); ###################################################################################################################### # AB HIER SOLLTE NICHTS MEHR GEAENDERT WERDEN ###################################################################################################################### my $INSTALL_DIR_DEV = "$VENDOR_NAME/$APPLICATION_NAME"; my $INDEX_FILE_PATH_ON_SERVER = "/download/Data/$KEYACCID/hps/$CLIENTID-index-$HPS_VER.txt"; my $LOG_FILE_DIR = '.log'; my @REQUIRED_PROGRAMMS = ("unzip", "md5sum", "less", "wget"); my $DESKTOP_ICON_FORMAT = "[Desktop Entry]\n". "Comment=\n". "Comment[de]=\n". "Encoding=UTF-8\n". "Exec=\"%s/$APPLICATION_NAME\"\n". "Icon=%s$DESKTOP_ICON_PATH\n". "Name=$APPLICATION_NAME\n". "Name[de]=$APPLICATION_NAME\n". "StartupNotify=true\n". "Terminal=false\n". "TerminalOptions=\n". "Type=Application\n"; my $SERVICES_XML_FORMAT = " t856EvnDTL56xD5fHQnWrzqVk6Xj3we4xGYHfShPmkqXtCzbI21eqJ57eIHVViAg SNCxjcl5y86nasXrdmtwTWWbBmFs3j21rZOVvoZT9HleOfGJR7FGgZiXsS623ctV 7iIwPfB9c6TIRuf9SPd7I1j25Pex9atTL9TDepMD6nkAyDliZhvIlJOC2tm9pcyQ %s EQBuKJf7pzVIbNXzz19PlwkVpERC5KfsWJbG4cazpn3PFC5Rtz4O3V87KcWfMgxK 8ksOkroMJFn1Es3zVJyzxJggNaXiMuLKBfPLBtCyek1bZBcTy29gaU7nm75ZYIxz xHuXMWCLmtrwNIBvqVB9BAyPjNpEa9gNuybXU51bKsryDqc2UJxSQXM8yIhbIarq sKTtqevc5EdBSwi3bZkngwl4NSolB8vFc7kPWeAEB4Y1ySgUIgcjJGxKlOll8c8e \n"; ###################################################################################################################### # Variablen ###################################################################################################################### my $indexContent; # Enthält den Inhalt der Index-Datei my @filesToDownload; # Enthält die Dateinamen die heruntergeladen werden müssen my @downloadedFiles; # Enthält die Dateinamen der heruntergeladenen Dateien my @filesToRemove; # Enthält die Dateinamen der Dateien die am Ende des Scriptes gelöscht werden müssen. my $fileName; # Enthält den Namen der aktuell zu bearbeitenden Datei my $update; my $installDir=""; my $sourceDir=""; my $changeInstallDir=1; my $verbose; my $keepPackages=0; ###################################################################################################################### # Zeige einen kleinen Hilfetext an ###################################################################################################################### sub showHelp { print $WELCOME; print "Options de commandes:\n"; print " -h; --help\n"; print " -i; --installdir=\tSpécifier le dossier d\'installation '$APPLICATION_NAME'.\n"; print " -k; --keepPackages\t\tNe pas fermer le paquet après téléchargement afin de l\'utiliser pour une autre installation.\n"; print " -s; --source=\t\tTélécharger les sources.\n"; # print " --update\t\tEine bestehende Installation wird geupdatet. Benötigt --installdir.\n"; print " -v; --verbose\t\tInformations au cours de l\'installation.\n"; print "\n"; print "Le script recherche automatiquement les derniers fichiers à jour. Si le paquet n\'est pas trouvé, il sera directement téléchargé via Internet.\n"; print "\n"; } ###################################################################################################################### # Parse Kommandozeilen Parameter ###################################################################################################################### sub getOptions { $update=0; $verbose=0; $installDir=""; my $help=0; GetOptions("installdir=s" => \$installDir, "update" => \$update, "verbose" => \$verbose, "help" => \$help, "keepPackages" => \$keepPackages, "source=s" => \$sourceDir) || die "Il manque des données."; if($help == 1) { showHelp; exit 0; } if($update == 1) { if($installDir eq "") { print "Aucune installation n\'a été realisée.\n"; exit 1; } } if($installDir ne "") { $changeInstallDir=0; } } ###################################################################################################################### # Prüfe ob benötigte Programme da sind ###################################################################################################################### sub checkProgramms { foreach (@REQUIRED_PROGRAMMS) { my $status=system("which $_ > /dev/null 2>&1"); if(0!=$status) { print "Après l\'export des données le programme sera '$_' nécessaire.\n"; exit 1; } } } ###################################################################################################################### # Zeigt die EULA an ###################################################################################################################### sub showEula { if($FILE_EULA ne "" && $update==0) { if(!open(EULA, "<", $FILE_EULA)) { print "Le fichier ".$FILE_EULA." n\'a pas pu être trouvé.\n"; exit 1; } close EULA; print $EULA_READ; my $answer = ; system("less $FILE_EULA"); print $EULA_ACCEPT; chomp($answer = ); $answer=lc($answer); my $found=0; foreach(@ANSWER_YES_LIST) { if($answer eq $_) { $found=1; last; } } if(0==$found) { print $EULA_NOTACCEPTED; exit; } } } ###################################################################################################################### # Installationsverzeichniss erfragen ###################################################################################################################### sub getInstallDir { if($update == 0 && $changeInstallDir == 1) { if($> == 0) { # Root User $installDir="/opt/".$INSTALL_DIR_DEV; } else { # Normaler Benutzer $installDir=$ENV{"HOME"}."/".$INSTALL_DIR_DEV; } printf $INSTALL_DIR_QUESTION_FORMAT, $installDir; my $answer = ; chomp($answer); if("" ne $answer) { $installDir=$answer; } } } ###################################################################################################################### # Holt die Index-Datei ###################################################################################################################### sub getIndexFile { my $downloaded = 0; my $answer = 1; $fileName = basename($INDEX_FILE_PATH_ON_SERVER); if( -e $sourceDir."/".$fileName) { $fileName=$sourceDir."/".$fileName; } elsif(! -e $fileName) { # Hole Indexdatei aus dem Netz. if(0==$verbose) { $answer = system("wget -q $DOWNLOAD_SERVER$INDEX_FILE_PATH_ON_SERVER"); } else { $answer = system("wget $DOWNLOAD_SERVER$INDEX_FILE_PATH_ON_SERVER"); } if($answer!=0) { print "Le téléchargement des données: ", $DOWNLOAD_SERVER.$INDEX_FILE_PATH_ON_SERVER, " a echoué.\n"; exit 1; } $downloaded=1; } if(!open(INDEX, "<", $fileName)) { print "L\'index ne peut pas être ouvert."; exit 1; } else { while() { $indexContent.=$_; } close(INDEX); if(1==$downloaded && $keepPackages==0) { unlink($fileName); } } } ###################################################################################################################### # Checkt Index-Datei und sucht die herunter zu ladenden Dateien zusammen ###################################################################################################################### sub checkIndexFile { my $totalSize = 0; my $packageString = ""; foreach (split(/[\r\n]+/, $indexContent)) { chomp; if(/^(.*);(.*);(.*);(.*)$/) { my $filePath = $1; my $required = $2; my $what = $3; my $system = $4; if($system eq "l" || $system eq "a") { $fileName = basename($filePath); if(! -e $installDir."/".$LOG_FILE_DIR."/".$fileName.".log") { # Die Datei ist noch nicht installiert. if( -e $sourceDir."/".$fileName) { # Die Datei liegt lokal vor, also brauchen wir sie nicht herunter zu laden push(@downloadedFiles, $sourceDir."/".$fileName); } elsif( -e $fileName ) { # Die Datei liegt lokal vor, also brauchen wir sie nicht herunter zu laden push(@downloadedFiles, $fileName); } else { # Die Datei muss aus dem Netz gezogen werden. Schreiben wir mal raus wie viel da herunter geladen werden muss. my $spider = `export LANG=C;wget --spider $DOWNLOAD_SERVER/$filePath 2>&1`; my ($size, $dummy, $mb, $mime) = $spider=~/Length:\s+([\d,]+)\s+(\(([\d\.]+[MK]?)\))?\s*(\[.*\])/; my $string = sprintf $PACKAGE_SIZE_FORMAT, $what, $mime, $size, $mb; $packageString .= $string; push(@filesToDownload, $_); $size=~s/,//g; $totalSize+=$size; } } } } } if(0!=(scalar @filesToDownload)) { print $PRE_PACKAGELIST_MSG; print $packageString; printf $TOTAL_DOWNLOAD_SIZE_FORMAT, $totalSize/(1024*1024); } } ###################################################################################################################### # Roleback ###################################################################################################################### sub roleback { my ($fileName) = @_; $fileName =~ /^(.*)_.*$/; my $packageName=$1; if(opendir(LOG_FILE_DIR, $installDir."/".$LOG_FILE_DIR)) { my @allFiles=readdir(LOG_FILE_DIR); @allFiles=grep(!/^\./, @allFiles); close(LOG_FILE_DIR); foreach(@allFiles) { $_ =~ /^(.*)_.*$/; if($1 eq $packageName) { removePackage($_); } } } } ###################################################################################################################### # Lösche Dateien aus einem Logfile und das Logfile selbst ###################################################################################################################### sub removePackage { my ($logFile) = @_; my @files; my @dirs; if(open(LOG_FILE, "<", $installDir."/".$LOG_FILE_DIR."/".$logFile)) { while() { if(/^\s*inflating:\s+(.*)/) { my $file=$1; $file =~ s/^\s+|\s+$//; push(@files, $file); } if(/^\s*creating:\s+(.*)\s*$/) { push(@dirs, $1); } } close LOG_FILE; } # Füge das Logfile zur Liste der zu löschenden Dateien hinzu. push (@files, $installDir."/".$LOG_FILE_DIR."/".$logFile); unlink(@files); @dirs = reverse @dirs; foreach(@dirs) { rmdir $_; } } ###################################################################################################################### # Lädt alle Dateien aus der Index-Datei herunter ###################################################################################################################### sub downloadFiles { if(0!=(scalar @filesToDownload)) { if($update == 0) { my $answer; print $DOWNLOAD_MSG; chomp($answer = ); $answer=lc($answer); foreach(@ANSWER_NO_LIST) { if($answer eq $_) { exit 1; last; } } } # Herunterladen der Dateien foreach (@filesToDownload) { chomp; $_ =~ /^(.*);.*;(.*);.*$/; my $filePath = $1; my $what = $2; my $error = 0; my $retry = 1; $fileName = basename($filePath); printf $DOWNLOAD_MSG_FORMAT, $what; while(1==$retry) { my $result=1; if(0==$verbose) { $result=system("wget -q $DOWNLOAD_SERVER/$filePath -O $fileName"); } else { $result=system("wget $DOWNLOAD_SERVER/$filePath -O $fileName"); } if(0==$result) { # Extrahiere MD5 Summe $fileName =~ /^.*_(.*).zip$/; my $md5sum=$1; # Berechne MD5 Summe der Datei $result=`md5sum $fileName`; $result =~ /^(\w*)\s+.*$/; my $fileMd5sum=$1; if($md5sum ne $fileMd5sum) { print "Le checksum du téléchargement du fichier '$fileName' ne correspond pas !\n"; $error=1; } else { push(@downloadedFiles, $fileName); push(@filesToRemove, $fileName); $retry=0; } } else { print "Une erreur est survenue lors du téléchargement.\n"; $error=1; } if(0==$update && 1==$error) { my $answer; print $DOWNLOAD_RETRY; chomp($answer = ); $answer=lc($answer); $retry=0; foreach(@ANSWER_YES_LIST) { if($answer eq $_) { $retry=1; $error=0; last; } } } elsif(1==$update && 1==$error) { # Wir haben keine Konsole und können keine Eingabe entgegen nehmen. # Deshalb brechen wir ab. $retry=0; } } if(1==$error) { print "Le fichier '$fileName' ne peut pas être téléchargé.\n"; unlink $fileName; exit 1; } } } } ###################################################################################################################### # Prüfen und entpacken der Dateien ###################################################################################################################### sub unpackFiles { if(0!=(scalar @downloadedFiles)) { print $UNPACK_MSG; # Installationsverzeichniss anlegen eval { mkpath($installDir."/".$LOG_FILE_DIR) }; if($@) { print "L\'installation ne peut pas se poursuivre correctement."; exit 1; } # Entpacken der Dateien foreach (@downloadedFiles) { $fileName = $_; # Hier können wir eine evtl. installierte Vorgängerversion gelöscht werden. # Die md5 Summen aller Downloads stimmen, also sollten sich alle Pakete entpaken lassen roleback($fileName); my $result=0; my @unzipReturn; @unzipReturn=`unzip -o -d '$installDir' $fileName 2>&1`; foreach(@unzipReturn) { if(/^\s*error:/) { $result=1; } elsif(/cannot find/) { $result=1; } } if(open(OUT, ">", $installDir."/".$LOG_FILE_DIR."/".$fileName.".log")) { print OUT @unzipReturn; close(OUT); } if(0!=$result) { print "Le fichier '$fileName' ne peut pas être décompressé !\n"; exit 1; } } } } ###################################################################################################################### # Desktop Icons erzeugen ###################################################################################################################### sub createDesktopIcons { if($>==0) { #Root User my $homeDir="/home/"; if(opendir(HOME_DIR, $homeDir)) { my @allFiles=readdir(HOME_DIR); # Werfe alle Einträge mit einem Punkt am Anfang weg @allFiles=grep(!/^\./, @allFiles); foreach(@allFiles) { # Test ob es ein Verzeichnis ist if(opendir(SUB_DIR, $homeDir.$_)) { closedir(SUB_DIR); createDesktopIcon($homeDir.$_, $_); } } closedir(HOME_DIR); } } else { # Normaler Benutzer createDesktopIcon($ENV{"HOME"}, $ENV{"USER"}); } } ###################################################################################################################### # Desktop Icon erzeugen ###################################################################################################################### sub createDesktopIcon { my ($dir, $user) = @_; $dir.="/Desktop/"; if(my ($login, $pass, $uid, $gid) = getpwnam($user)) { if(opendir(DIR, $dir)) { closedir(DIR); if(!open(ICON, ">", $dir.$DESKTOP_ICON_NAME)) { print "Le fichier ne peut pas être ouvert.\n"; exit 1; } else { printf ICON $DESKTOP_ICON_FORMAT, $installDir, $installDir; close(ICON); } chown $uid, $gid, $dir.$DESKTOP_ICON_NAME; } } } ###################################################################################################################### # Aufräumen + Abschließende Arbeiten ###################################################################################################################### sub cleanup { # Entferne Installationspakete if($keepPackages==0) { unlink(@filesToRemove); } # Erzeuge Symlinks für Libs if(opendir(INSTALL_DIR, $installDir)) { chdir($installDir); my @allFiles=readdir(INSTALL_DIR); # Werfe alle Einträge mit einem Punkt am Anfang weg @allFiles=grep(!/^\./, @allFiles); my @libFiles=grep(/\w+\.so\.\w*/, @allFiles); foreach(@libFiles) { my $fileName=$_; $fileName =~ /(.+\.so)\.(.*)/; my $baseFileName=$1; my $version=$2; my @v = split(/\./, $version); unlink($baseFileName); symlink($fileName, $baseFileName); foreach(@v) { $baseFileName.=".".$_; if($baseFileName ne $fileName) { unlink($baseFileName); symlink($fileName, $baseFileName); } } } # Ändere Dateirechte my @binarys; push(@binarys, $APPLICATION_NAME); push(@binarys, $PROGRAM_NAME_FOTOSHOW); push(@binarys, "assistant"); chmod 0755, @binarys; closedir(INSTALL_DIR); } if($AFFILIATE_ID ne '') { if(open(SERVICESXML, ">", $installDir.$SERVICES_XML_PATH)) { printf SERVICESXML $SERVICES_XML_FORMAT, $AFFILIATE_ID; close(SERVICESXML); } } eval { mkpath($installDir."/hps") }; if($>==0) { # Root User erlaube schreibenden Zugriff auf das "hps" Unterverzeichniss if(!$@) { chmod 0777, $installDir."/hps"; } } } ###################################################################################################################### # MAIN ###################################################################################################################### # Erzwinge eine Leerung der Puffer nach jeder print()-Operation $| = 1; system("clear"); getOptions(); print $WELCOME; checkProgramms(); showEula(); getInstallDir(); getIndexFile(); checkIndexFile(); downloadFiles(); unpackFiles(); cleanup(); createDesktopIcons(); printf $FINISHED_MSG_FORMAT, $installDir; EULA.txt100644 0 0 11700 11211671455 7516 0ustar 0 0 Contrat de licence du logiciel "Mon Univers Fotocompil" Toute utilisation du logiciel "Mon Univers Fotocompil" est assujettie à ce contrat de licence qui définit les conditions de licence, d'utilisation et d'installation du logiciel. Ce logiciel est un produit et une propriété déposés par CeWe Color AG & Co. OHG (désigné "Auteur"), Meerweg 30-32, 26133 Oldenburg (Allemagne), qui en est également le distributeur. LICENCE UTILISATEUR FINAL LES TERMES ET CONDITIONS GÉNÉRAUX CONSTITUENT LE CONTRAT DE LICENCE ENTRE L´AUTEUR ET L´UTILISATEUR DU LOGICIEL ET EN FIXENT LES CONDITIONS. EN INSTALLANT LE LOGICIEL, VOUS ACCEPTEZ LES CONDITIONS DE LA PRESENTE LICENCE ET CONVENEZ D'Y ETRE LIÉ. LICENCE L´Auteur du logiciel vous octroie une licence non exclusive et gratuite pour l´utilisation de son logiciel. Le logiciel, ainsi que tous les brevets, droits d'Auteur, marques, noms de marque et développements liés au logiciel appartiennent à l'Auteur et sont protégés par les lois applicables. Vous n'êtes pas autorisé à utiliser les droits du propriétaire, sauf dans les conditions stipulées dans le présent contrat. Vous n'êtes pas autorisé à modifier le logiciel, à décompiler, à désassembler, à procéder à une rétro-ingénierie ou à tenter d´extraire le code source, ni à distribuer, vendre, louer ou céder en crédit-bail le logiciel, ou en faire toute autre utilisation commerciale. OBLIGATIONS DU LICENCIÉ Vous consentez à n’utiliser le logiciel que pour les fins suivantes : commander et transférer vos photos numériques à un laboratoire de développement photo, gérer et traiter vos fichiers photos sur un PC. Vous confirmez par la présente être habilité et autorisé à transférer et imprimer les photos que vous transmettez. Vous acceptez l'entière et unique responsabilité du contenu des données transmises à l'aide du logiciel. Vous consentez à ne pas utiliser le logiciel pour transmettre des images de nature pornographique ou comportant des éléments de nudité sexuellement explicites, ou tout autre image illicite. Vous dégagez l'Auteur du logiciel, ses distributeurs autorisés et les autres laboratoires coopérant avec lui, de toute réclamation à ce sujet et vous engagez à les indemniser pour tout préjudice occasionné par le non-respect de cette obligation. GARANTIES ET OBLIGATIONS L'Auteur fera tous les efforts possibles dans la limite du raisonnable pour que vos photos numériques soient transmises par le biais du logiciel au laboratoire ou pour que vous puissiez graver un CD-ROM avec vos photos et les données de votre commande. Le logiciel est fourni "en l'état". L'Auteur et les fournisseurs participants ne garantissent pas l'adéquation du logiciel à tous vos besoins, ni son fonctionnement sans interruption et sans erreur. Sauf faute grave ou négligence grossière, l'Auteur ne pourra en aucun cas être tenu responsable des dommages éventuels, y compris des pertes de marge, pertes financières ou dommages indirects comme la perte ou la destruction de données, les retards de plannings, les réclamations de tiers, ou tout autre dommage spécial, indirect ou accessoire résultant de l'utilisation ou de l'incapacité à utiliser le logiciel. L'Auteur ne donne aucune garantie de l'accessibilité d'Internet ni de son fonctionnement sans interruption et sans erreur. Internet est un réseau ouvert, à l'égard duquel l'Auteur fait tous les efforts possibles pour protéger vos données confidentielles. Cependant, l'Auteur ne peut vous garantir ni la confidentialité de vos photos numériques, ni le maintien de cette confidentialité durant leur transfert, ni vous assurer que des tiers ne pourront accéder à celles-ci et aux informations contenues dans votre commande. Sauf en cas de faute grave ou de négligence grossière, l’Auteur ne pourra être tenu pour responsable des éventuels dommages (y compris mais sans s'y limiter les dommages directs ou indirects) que vous-même ou une autre personne ou entité aurait pu subir, du fait de l'altération, de la perte, de la destruction, du vol ou de toute autre forme d'utilisation abusive des photos numériques que vous avez fournies. RÉSILIATION ET MISE À JOUR DES TERMES ET CONDITIONS GENERAUX Ce Contrat est conclu pour une durée indéterminée et reste en vigueur jusqu'à sa résiliation. Vous êtes en droit de résilier la présente Licence à tout moment en cessant toute utilisation du logiciel et en détruisant toutes les copies du logiciel en votre possession, qu´elles soient intégrales ou partielles. L'Auteur a le droit de mettre à jour les termes et conditions généraux ici cités à tout moment. Vous acceptez dès à présent d’être tenu par ces nouveaux termes et conditions généraux dès réception de l'avis vous informant de leur modification. JURIDICTION ET LOI APPLICABLE Les présentes conditions d´utilisation sont exclusivement soumises au droit allemand, et ce avec exclusion de la Convention de Vienne. (SUB_DIR); createDesktopIcon($homeDir.$_, $_); } } closedir(HOME_DIR); } } else { # Normaler Benutzer createDesktopIcon($ENV{"HOME"}, $ENV{"USER"}); } } ###################################################################################################################### # Desktop Icon erzeugen ###################################################################################################################### sub createDesktopIcon { my ($dir, $user) = @_; $dir.="/Desktop/"; if(my ($login, $pass, $uid, $gid) = getpwnam($user)) { if(opendir(DIR, $dir)) { closedir(DIR); if(!open(ICON, ">", $dir.$DESKTOP_ICON_NAME)) { print "Le fichier ne peut pas être ouvert.\n"; exit 1; } else { printf ICON $DESKTOP_ICON_FORMAT, $installDir, $installDir; close(ICON); } chown $uid, $gid, $dir.$DESKTOP_ICON_NAME; } } } ###################################################################################################################### # Aufräumen + Abschließende Arbeiten ###################################################################################################################### sub cleanup { # Entferne Installationspakete if($keepPackages==0) { unlink(@filesToRemove); } # Erzeuge Symlinks für Libs if(opendir(INSTALL_DIR, $installDir)) { chdir($installDir); my @allFiles=readdir(INSTALL_DIR); # Werfe alle Einträge mit einem Punkt am Anfang weg @allFiles=grep(!/^\./, @allFiles); my @libFiles=grep(/\w+\.so\.\w*/, @allFiles); foreach(@libFiles) { my $fileName=$_; $fileName =~ /(.+\.so)\.(.*)/; my $baseFileName=$1; my $version=$2; my @v = split(/\./, $version); unlink($baseFileName); symlink($fileName, $baseFileName); foreach(@v) { $baseFileName.=".".$_; if($baseFileName ne $fileName) { unlink($baseFileName); symlink($fileName, $baseFileName); } } } # Ändere Dateirechte