Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/04/2011, à 18:01

Lesuperdu81

fichier introuvables

bonjour ou bonsoir,
Depuis quelque temps, je rencontre un probleme chez les programmes que je veux installer via un script perl ou python ou avec wine,
le programme d'installation ne trouve pas les fichiers necessaires a son installation,
par exemple j'achete un logiciel sur cd qui s'appelle "machin" il y est ecrit qu'il est installable sous linux,
il y a un fichier perl dessus (install.pl) ,pour fonctionner il a besoin du fichier "truc.txt"
"truc.txt" est juste a cote de install.pl; je lance le script perl en console et celui-ci me repond que le fichier truc.txt est introuvable alors qu'il est juste à cote, ca me fait la meme choses avec tout les programmes qui ont des fichiers d'installations (meme avec wine)
c'est enervant !
merci


Napoleon Bonaparte: "Dans les révolutions, il y a 2 types de gens, ceux qui la font et ceux qui en parle"
Linux est une revolution ; nous la faisons et nous en parlons

Hors ligne

#2 Le 21/04/2011, à 18:16

Lesuperdu81

Re : fichier introuvables

personne ne peut m'aider ? UP,PLEASE,UP


Napoleon Bonaparte: "Dans les révolutions, il y a 2 types de gens, ceux qui la font et ceux qui en parle"
Linux est une revolution ; nous la faisons et nous en parlons

Hors ligne

#3 Le 22/04/2011, à 14:40

DEoT

Re : fichier introuvables

Manque d'information : donne nous au moins le contenu de install.pl, les erreurs consoles, etc...

Si je te décris pas précisément ton problème, personne ne peut t'aider.


"Les jeux vidéos n'affectent pas les enfants : je veux dire si Pac-Man nous avait influencé étant enfant, nous devrions tous courrir en rond dans des pièces sombres, en gobant des pillules magiques tout en écoutant de la musique répétitive."

Hors ligne

#4 Le 05/05/2011, à 15:07

Lesuperdu81

Re : fichier introuvables

Le contenu de install.pl, c'est un exemple parmi tant d'autre.
Et ce que m'affiche les consoles ou les programmes, c'est files not found ou fichiers introuvables.

De +, pour les fichiers scripts py ou sh ou perl , je ne peux pas les ouvrir directement, en gros je dois ouvrir un terminal et mettre
sudo (repertoire du fichier)
je suis sous ubuntu 10.1

De +, quand je veux ouvrir un fichier avec une console (par exemple xorg.conf) je suis obligé de preciser le repertoire:
sudo nano xorg.conf , erreur fichier introuvable
sudo nano etc/X11/xorg.conf , ca marche

Dernière modification par Lesuperdu81 (Le 05/05/2011, à 15:12)


Napoleon Bonaparte: "Dans les révolutions, il y a 2 types de gens, ceux qui la font et ceux qui en parle"
Linux est une revolution ; nous la faisons et nous en parlons

Hors ligne

#5 Le 05/05/2011, à 15:52

RegisBurin

Re : fichier introuvables

Lesuperdu81 a écrit :

De +, quand je veux ouvrir un fichier avec une console (par exemple xorg.conf) je suis obligé de preciser le repertoire:
sudo nano xorg.conf , erreur fichier introuvable
sudo nano etc/X11/xorg.conf , ca marche

Ca, c'est normal... quand tu ouvres un terminal, par défaut il te place dans ton dossier utilisateur (cf la fin de la ligne d'invite):

Lesuperdu81@PCdusuperdu81:~$

(le ~ veut dire que tu te trouve dans ton home)

La commande pour se déplacer dans les dossiers est 'cd' (Change Directory):

Lesuperdu81@PCdusuperdu81:~$cd Documents/

Lesuperdu81@PCdusuperdu81:~/Documents$

Allez, un peu de lecture (j'ai l'impression que c'est ce qu'il te manque):
http://doc.ubuntu-fr.org/console
http://doc.ubuntu-fr.org/tutoriel/conso … de_base#cd
http://doc.ubuntu-fr.org/permissions
http://doc.ubuntu-fr.org/tutoriel/conso … ande#chmod
...

@+

Edit: Sans exemples précis et documentés, il sera tout bonnement impossible de t'aider...

Dernière modification par RegisBurin (Le 05/05/2011, à 15:55)


Config (M-AUDIO Delta44/Wacom CTH661-Phone ZTE OpenC-FFOS2.1) | BabyBox[WIP]
Moi sur le web / Moi, IRL mais sur le web / Ma maison sur le web

Hors ligne

#6 Le 06/05/2011, à 16:41

Lesuperdu81

Re : fichier introuvables

Merci pour  ces informations qui m'ont depanner de plusieurs operations
Mais utiliser la console n'est pas mon principal problemes,
C'est vraiment ces fichiers d'installations !
Je vais essayer d'afficher le contenu d'un fichier perl d'un logiciel sur cd qui a foiré sur mon ordinateur mais qui a marché sur d'autres
Mais il va falloir retrouver le cd et ca, ca va etre dur ! roll

Et pour la console, c'est bizarre parce que quand j'etais sous des versions precedentes d'ubuntu, je n'etais pas obligé de preciser le repertoire

Dernière modification par Lesuperdu81 (Le 06/05/2011, à 16:48)


Napoleon Bonaparte: "Dans les révolutions, il y a 2 types de gens, ceux qui la font et ceux qui en parle"
Linux est une revolution ; nous la faisons et nous en parlons

Hors ligne

#7 Le 06/05/2011, à 16:54

Lesuperdu81

Re : fichier introuvables

J'ai retrouvé le cd, voici le contenu du fichier perl pour info, le fichier introuvable est EULA.txt (il est juste a cote de install.pl):
#! /usr/bin/perl -w
######################################################################################################################
#
# Linux Installations Script
#
# $Id: linuxinstall-mainpart.pl,v 1.4 2010-11-01 10:49:00 mpetro Exp $
#
######################################################################################################################

use strict;
use File::Path;
use File::Basename;
use File::Copy;
use Getopt::Long;

######################################################################################################################
# Einige Konfigurationskonstanten
######################################################################################################################
my $FILE_EULA = 'EULA.txt';
my $DOWNLOAD_SERVER = "http://dls.photoprintit.eu/";
my $KEYACCID = '7884';
my $CLIENTID = '38';
my $HPS_VER = '4.6.7';
my $VENDOR_NAME = 'Photocite Collection 4.6';
my $APPLICATION_NAME = 'Photocite Collection 4.6';
my $HAS_PHOTOFUN = 'false';
my $HAS_CANVAS = 'false';
my $HAS_POSTER = 'false';
my $HAS_PREMIUMFOTO = 'false';
my $HAS_BUDGETFOTO = 'false';
my $HAS_CALENDARS = 'false';
my $HAS_FOTOBOOKS = 'false';
my $HAS_THEME_DESIGN = 'true';
my $HAS_THEME_DMBABY = 'false';
my $HAS_THEME_ALB = 'true';
my $PROGRAM_NAME_FOTOSHOW = 'Ma Galerie Photo';


######################################################################################################################
# Einige Konstanten
######################################################################################################################
my $DESKTOP_ICON_NAME = $APPLICATION_NAME.'_'.$HPS_VER.'.desktop';
my $DESKTOP_ICON_PATH = '/Resources/keyaccount/32.xpm';
my $SERVICES_XML_PATH = '/Resources/services.xml';
my $AFFILIATE_ID = '';


######################################################################################################################
# Texte
######################################################################################################################
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");

my $KEEP_MSG = "Les packet d\'installation téléchargés ne seront pas effacés après l\'installation, vous les trouverez dans le répertoire d\'installation.";
my $KEEP_AFTER_COPY_MSG_FORMAT = "Les packet d\'installation téléchargés ne seront pas effacés après l\'installation et seront copié vers %s avec le script d\'installation.";
my $NO_SYMLINKS_POSSIBLE = "Dans l'emplacement spécifé aucun chemin symbolique n\'est connu. Ceci est néanmoins nécessaire à l\'installation de '$APPLICATION_NAME'.\n";
my $CREATE_INSTALL_DIR = "Le répertoire n\'existe pas. Voulez-vous le créer ? [\033[1m".uc($ANSWER_YES)."\033[0m/".$ANSWER_NO."] ";
my $UNABLE_TO_CREATE_INSTALL_DIR = "Le répertoire de d\'installation n\'a pas pu être crée";

######################################################################################################################
# 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", "uname");
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".
              "Path=%s\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 = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<services>
<service name=\"a\">t856EvnDTL56xD5fHQnWrzqVk6Xj3we4xGYHfShPmkqXtCzbI21eqJ57eIHVViAg</service>
<service name=\"b\">SNCxjcl5y86nasXrdmtwTWWbBmFs3j21rZOVvoZT9HleOfGJR7FGgZiXsS623ctV</service>
<service name=\"c\">7iIwPfB9c6TIRuf9SPd7I1j25Pex9atTL9TDepMD6nkAyDliZhvIlJOC2tm9pcyQ</service>
<service name=\"d\">%s</service>
<service name=\"e\">EQBuKJf7pzVIbNXzz19PlwkVpERC5KfsWJbG4cazpn3PFC5Rtz4O3V87KcWfMgxK</service>
<service name=\"f\">8ksOkroMJFn1Es3zVJyzxJggNaXiMuLKBfPLBtCyek1bZBcTy29gaU7nm75ZYIxz</service>
<service name=\"g\">xHuXMWCLmtrwNIBvqVB9BAyPjNpEa9gNuybXU51bKsryDqc2UJxSQXM8yIhbIarq</service>
<service name=\"h\">sKTtqevc5EdBSwi3bZkngwl4NSolB8vFc7kPWeAEB4Y1ySgUIgcjJGxKlOll8c8e</service>
</services>\n";

my $DOWNLOAD_START_URL="http://dls.photoprintit.eu/api/feedback/$KEYACCID/hps/<update>downloadstart.$AFFILIATE_ID/linux";
my $DOWNLOAD_COMPLETE_URL="http://dls.photoprintit.eu/api/feedback/$KEYACCID/hps/<update>downloadcomplete.$AFFILIATE_ID/linux";
my $INSTALLATION_COMPLETE_URL="http://dls.photoprintit.eu/api/feedback/$KEYACCID/hps/<update>installationcomplete.$AFFILIATE_ID/linux";



######################################################################################################################
# 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 $upgrade;
my $installDir="";
my $sourceDir="";
my $changeInstallDir=1;
my $verbose;
my $keepPackages=0;
my $workingDir="";



######################################################################################################################
# Zeige einen kleinen Hilfetext an
######################################################################################################################
sub showHelp {
    print $WELCOME;
    print "Options d\'installation:\n";
    print "   -h; --help\n";
    print "   -i; --installdir=<DIR>\tSpécifier le dossier d\'installation '$APPLICATION_NAME'.\n";
    print "   -k; --keepPackages\t\tNe pas effacer le paquet après téléchargement afin de l\'utiliser pour une autre installation.\n";
    print "   -w; --workingDir=<DIR>\tLes fichiers seront stockés dans un répertoire temporaire.\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 "Les données Temporaires seront sauvegardées dans le répertoire de travail --workingDir. Les données temporaire /tmp non nécessaires après l'installation seront effacées.";
    print "\n";
}



######################################################################################################################
# Parse Kommandozeilen Parameter
######################################################################################################################
sub getOptions {
    $update=0;
    $upgrade=0;
    $verbose=0;
    $installDir="";
    $workingDir="";
    my $help=0;

    GetOptions("installdir=s" => \$installDir,
            "update" => \$update,
            "upgrade" => \$upgrade,
            "verbose" => \$verbose,
            "help" => \$help,
            "keepPackages" => \$keepPackages,
            "workingdir=s" => \$workingDir) || die "Il manque des données.";

    if($help == 1) {
        showHelp;
        exit 0;
    }

    if($upgrade == 1) {
        $update = 1;
    }

    if($update == 1) {
        if($installDir eq "") {
            printErrorMessage("Aucun répertoire de travail spécifié.\n");
            exit 1;
        }
    }

    if($installDir ne "") {
        $changeInstallDir=0;
    }
}



######################################################################################################################
# Prüft das Arbeitsverzeichnis
######################################################################################################################
sub checkWorkingDir {
    my $testFileName = "test";
    my $testFilePath = $testFileName;

    if($workingDir ne "") {
        if(!opendir(DIR, $workingDir)) {
            printErrorMessage("Le répertoire de travail ".$workingDir." est introuvable.\n");
            exit 1;
        } else {
            closedir(DIR);
        }
        $testFilePath = $workingDir."/".$testFileName;
    }

    if(!open(TEST_FILE, ">", $testFilePath)) {
        $workingDir   = "/tmp";
        $testFilePath = $workingDir."/".$testFileName;

        if(!open(TEST_FILE, ">", $testFilePath)) {
            printErrorMessage("Aucune installation n\'a été realisée.\n");
            exit 1;
        } else {
            close(TEST_FILE);
            unlink($testFilePath);
        }
    } else {
        close(TEST_FILE);
        unlink($testFilePath);
    }
}



######################################################################################################################
# Prüfe ob benötigte Programme da sind
######################################################################################################################
sub checkProgramms {
    foreach (@REQUIRED_PROGRAMMS) {
        my $status=system("which $_ > /dev/null 2>&1");

        if(0!=$status) {
            printErrorMessage("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)) {
            printErrorMessage("Le fichier ".$FILE_EULA." n\'a pas pu être trouvé.\n");
            exit 1;
        }
        close EULA;
        print $EULA_READ;
        my $answer = <STDIN>;

        system("less $FILE_EULA");

        print $EULA_ACCEPT;
        chomp($answer = <STDIN>);
        $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) {
    while(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 = <STDIN>;
        chomp($answer);

        if("" ne $answer) {
            $installDir=$answer;
        }

        # Jetzt ersetzen wir noch die Tilde durch das Home-Verzeichnis
    $installDir =~ s/~/$ENV{"HOME"}/;       
       
            my $dirCreated = 0;
            if(! -e $installDir) {
                print $CREATE_INSTALL_DIR;
                my $createAnswer = <STDIN>;
                chomp($createAnswer);

                my $found=1;
                foreach(@ANSWER_NO_LIST) {
                    if($createAnswer eq $_) {
                        $found=0;
                        last;
                    }
                }

                if(1==$found) {
                    # Installationsverzeichniss anlegen
                    eval { mkpath($installDir."/".$LOG_FILE_DIR) };

                    $dirCreated = 1;

                    if($@) {
                        printErrorMessage($UNABLE_TO_CREATE_INSTALL_DIR);
                        next;
                    }
                } else {
                    next;
                }
            }

            my $symlinkTestFile = $installDir."/symlinks_possible";
            my $symlinks_possible = symlink($symlinkTestFile, $symlinkTestFile);

            if($symlinks_possible) {
                unlink $symlinkTestFile;
                last;
            } else {
                if($dirCreated == 1) {
                    rmtree($installDir);
                }
                printErrorMessage($NO_SYMLINKS_POSSIBLE);
            }
        }
    }
}



######################################################################################################################
# Holt die Index-Datei
######################################################################################################################
sub getIndexFile {
    my $downloaded    = 0;
    my $answer    = 1;

    $fileName    = basename($INDEX_FILE_PATH_ON_SERVER);

if(! -e $fileName
        || -s $fileName == 0) {
        # Hole Indexdatei aus dem Netz.

        # Wenn wir ein Arbeitsverzeichnis haben schreiben wir dahin.
        if($workingDir ne "") {
            $fileName = $workingDir."/".$fileName;
        }

        if(0==$verbose) {
            $answer = system("wget -q $DOWNLOAD_SERVER$INDEX_FILE_PATH_ON_SERVER -O $fileName");
        } else {
            $answer = system("wget $DOWNLOAD_SERVER$INDEX_FILE_PATH_ON_SERVER -O $fileName");
        }

        if($answer!=0
        || -s $fileName == 0) {
            printErrorMessage("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)) {
        printErrorMessage("L\'index ne peut pas être ouvert.");
        exit 1;
    } else {
        while(<INDEX>) {
            $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    = "";
    my $machineType   = `uname -m`;
      
chomp($machineType);

if($machineType eq "i686") {
    $machineType = "l";
} elsif($machineType eq "x86_64") {
    # Für 64Bit Systeme hier evtl. anderes Kürzel eintragen.
    $machineType = "l";
} else {
    print "Plateforme inconnue. 'uname -m' ne peut être installé que sur 'i686' ou 'x86_64' sondern '".$machineType."'.\n";
}

    foreach (split(/[\r\n]+/, $indexContent)) {
        chomp;
        if(/^(.*);(.*);(.*);(.*)$/) {
            my $filePath = $1;
            my $required = $2;
            my $what     = $3;
            my $system   = $4;

            if($system eq $machineType || $system eq "a") {
                $fileName    = basename($filePath);

                if(! -e $installDir."/".$LOG_FILE_DIR."/".$fileName.".log") {
                    # Die Datei ist noch nicht installiert.
                    if( -e $fileName ) {
                        # Die Datei liegt lokal vor, also brauchen wir sie nicht herunter zu laden
                        push(@downloadedFiles, $fileName);
                    } else {
                        my $file2get;
                        if($filePath =~ m/^http:/) {
                           $file2get = $filePath;
                        } else {
                           $file2get = $DOWNLOAD_SERVER."/".$filePath;
                        }
                        # 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 $file2get 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 =~ /^3\d-(.*)_.*$/;
    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) {
            $_ =~ /^3\d-(.*)_.*$/;

            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(<LOG_FILE>) {
            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 = <STDIN>);
            $answer=lc($answer);

            foreach(@ANSWER_NO_LIST) {
                if($answer eq $_) {
                    exit 1;
                    last;
                }
            }
        }

        triggerCountPixel($DOWNLOAD_START_URL);

        # Herunterladen der Dateien
        foreach (@filesToDownload) {
            chomp;
            $_ =~ /^(.*);.*;(.*);.*$/;
            my $filePath    = $1;
            my $what    = $2;
            my $error    = 0;
            my $retry    = 1;

            $fileName    = basename($filePath);

            if($workingDir ne "") {
                $fileName = $workingDir."/".$fileName;
            }

            printf $DOWNLOAD_MSG_FORMAT, $what;

            while(1==$retry) {
                my $result=1;
                my $file2get;

                if( $filePath =~ m/^http:/) {
                   $file2get=$filePath;
                } else {
                   $file2get = $DOWNLOAD_SERVER."/".$filePath;
                }


                if(0==$verbose) {
                    $result=system("wget -q $file2get -O $fileName");
                } else {
                    $result=system("wget $file2get -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) {
                        printErrorMessge("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 {
                    printErrorMessage("Une erreur est survenue lors du téléchargement.\n");
                    $error=1;
                }

                if(0==$update && 1==$error) {
                    my $answer;
                    print $DOWNLOAD_RETRY;
                    chomp($answer = <STDIN>);
                    $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) {
                printErrorMessage("Le fichier '$fileName' ne peut pas être téléchargé.\n");
                unlink $fileName;
                exit 1;
            }
        }

        triggerCountPixel($DOWNLOAD_COMPLETE_URL);
    }
}



######################################################################################################################
# Prüfen und entpacken der Dateien
######################################################################################################################
sub unpackFiles {
    if(0!=(scalar @downloadedFiles)) {
        print $UNPACK_MSG;

        # Installationsverzeichniss anlegen
        eval { mkpath($installDir."/".$LOG_FILE_DIR) };

        if($@) {
            printErrorMessage($UNABLE_TO_CREATE_INSTALL_DIR);
            exit 1;
        }

        # Entpacken der Dateien
        foreach (@downloadedFiles) {
            $fileName     = $_;
            my $fileBaseName = basename($fileName);

            # Hier können wir eine evtl. installierte Vorgängerversion löschen.
            # Die md5 Summen aller Downloads stimmen, also sollten sich alle Pakete entpaken lassen
            roleback($fileBaseName);

            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."/".$fileBaseName.".log")) {
                print OUT  @unzipReturn;
                close(OUT);
            }

            if(0!=$result) {
                printErrorMessage("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)) {
                printErrorMessage("Le fichier icône n'a pas pu être ouvert.\n");
                exit 1;
            } else {
                printf ICON $DESKTOP_ICON_FORMAT, $installDir, $installDir, $installDir;
                close(ICON);
            }

            chown $uid, $gid, $dir.$DESKTOP_ICON_NAME;
                # Gnome will das Icon ausführbar haben.
            chmod 0755, $dir.$DESKTOP_ICON_NAME;
        }
    }
}



######################################################################################################################
# Aufräumen + Abschließende Arbeiten
######################################################################################################################
sub cleanup {
    # Entferne Installationspakete
    if($keepPackages==0) {
        unlink(@filesToRemove);
    } else {
        if($workingDir ne "") {
            # Script und EULA auch dahin kopieren.
            my @installerFiles;
            push(@installerFiles, "install.pl");
            push(@installerFiles, $FILE_EULA);
            push(@installerFiles, basename($INDEX_FILE_PATH_ON_SERVER));

            foreach(@installerFiles) {
                if(!copy($_, $workingDir."/".$_)) {
                    print("La copie n\'a pas pu aboutir".$!);
                }
            }
            printf($KEEP_AFTER_COPY_MSG_FORMAT, $workingDir);
        } else {
            print($KEEP_MSG);
        }
    }

    # 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(/.+\.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");
        push(@binarys, "Reconnaissance faciale");
        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);
        }
    }
}



######################################################################################################################
# Zählpixel URL aufrufen und die dabei heruntergeladene Datei löschen.
######################################################################################################################
sub triggerCountPixel {
    my $pixelFile = "pixel";

    if($upgrade == 1) {
        $_[0] =~ s/<update>/genericupgrade/;
    } elsif($update == 1) {
        $_[0] =~ s/<update>/update/;
    } else {
        $_[0] =~ s/<update>//;
    }

    if($workingDir ne "") {
        $pixelFile = $workingDir."/".$pixelFile;
    }

    system("wget -q $_[0] -O $pixelFile");
    unlink $pixelFile
}



######################################################################################################################
# Fehlermeldung ausgeben
######################################################################################################################
sub printErrorMessage {
    my ($message) = @_;

    print "\033[31m".$message."\033[0m";
}



######################################################################################################################
# MAIN
######################################################################################################################
# Erzwinge eine Leerung der Puffer nach jeder print()-Operation
$| = 1;

system("clear");

getOptions();

print $WELCOME;

checkWorkingDir();

checkProgramms();

showEula();

getInstallDir();

getIndexFile();

checkIndexFile();

downloadFiles();

unpackFiles();

cleanup();

createDesktopIcons();

triggerCountPixel($INSTALLATION_COMPLETE_URL);

printf $FINISHED_MSG_FORMAT, $installDir;

PS:Je pense avoir mis des lignes en trop, mais je ne suis pas super doué en lignes de commandes

Dernière modification par Lesuperdu81 (Le 06/05/2011, à 16:58)


Napoleon Bonaparte: "Dans les révolutions, il y a 2 types de gens, ceux qui la font et ceux qui en parle"
Linux est une revolution ; nous la faisons et nous en parlons

Hors ligne

#8 Le 06/05/2011, à 22:19

RegisBurin

Re : fichier introuvables

Yep

Aucune idée, par contre, utilise les balises codes STP (<>)

bon courage
@+


Config (M-AUDIO Delta44/Wacom CTH661-Phone ZTE OpenC-FFOS2.1) | BabyBox[WIP]
Moi sur le web / Moi, IRL mais sur le web / Ma maison sur le web

Hors ligne

#9 Le 08/05/2011, à 15:12

Lesuperdu81

Re : fichier introuvables

D'accord, mais merci quand meme


Napoleon Bonaparte: "Dans les révolutions, il y a 2 types de gens, ceux qui la font et ceux qui en parle"
Linux est une revolution ; nous la faisons et nous en parlons

Hors ligne