• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]Die MIME-Typen koennen nicht gefunden werden

hallo communiy,

ich verwende openSuSE Leap 42.1
KDE Plasma Vers. 5.5.5
Kernel Vers. 4.1.27-27-default
64 Bit Vesion

Nachdem ich mit Rootrechten im Verzeichnis /opt/dm/dm-Fotowelt
das Programm dm-Fotowelt installiert habe,
erhalte ich nach Aufruf des Intenetbrowsers (Firefox oder Konqueror)
in einem aufpopenden Fenster nachfolgende Fehlermeldungen :
Code:
Die Mime-Typen können nicht gefunden werden:
"Inode/directory"
"Inode/blockdevice"
"Inode/chardevice"
"Inode/socket"
"Inode/fifo"
"application/x-shellscript"
"application/x-executable"
"application/x-desktop"
Wird das Fenster mit dem ok Button quittiert popt ein weiteres Fenster mit nachfolgender Meldung auf:
Code:
Der Mime-Typ "application/octet-stream" kann nicht gefunden werden.

Ein Restart des System bewirkt keine Fehlerbehebung. :igitt:

Ich würde mich über einen Tipp von Euch sehr freuen. :thumbs:

viele grüsse aus dem vorherbstlichen Oberbayern
vom bayernherz
 

susejunky

Moderator
Teammitglied
Hallo bayernherz,

bayernherz schrieb:
... Nachdem ich mit Rootrechten im Verzeichnis /opt/dm/dm-Fotowelt
das Programm dm-Fotowelt installiert habe,
Wie hast Du diese Installation durchgeführt (YaST2, rpm, make install, ...)?
bayernherz schrieb:
... erhalte ich nach Aufruf des Intenetbrowsers (Firefox oder Konqueror) in einem aufpopenden Fenster ...
Kannst Du Firefox/Konqueror danach bzw. nach der zweiten Fehlermeldung weiter nutzen oder beenden sie sich?
bayernherz schrieb:
... nachfolgende Fehlermeldungen :
Code:
Die Mime-Typen können nicht gefunden werden:
"Inode/directory"
"Inode/blockdevice"
"Inode/chardevice"
"Inode/socket"
"Inode/fifo"
"application/x-shellscript"
"application/x-executable"
"application/x-desktop"
Kannst Du diese Mime-Types unter "Systemeinstellungen -> Anwendungen -> Dateizuordnungen" finden?

Viele Grüße

susejunky
 
OP
B

bayernherz

Hacker
Wie hast Du diese Installation durchgeführt (YaST2, rpm, make install, ...)?
Die Installation wurde im Root-Terminal mit dem Perl-Script
install.pl durchgeführt.
Inhalt des Scripts
Code:
#! /usr/bin/perl -w
######################################################################################################################
#
# Linux Installations Script
#
# $Id: install-linux.pl 132269 2012-11-26 13:13:10Z dfrohn $
#
######################################################################################################################

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.com";
my $KEYACCID = '1320';
my $CLIENTID = '38';
my $HPS_VER = '6.1.5';
my $VENDOR_NAME = 'dm';
my $APPLICATION_NAME = 'dm-Fotowelt';
my $INSTALL_DIR_DEFAULT = 'dm-Fotowelt';
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 = 'CEWE FOTOSCHAU';
my $PROGRAM_NAME_FOTOIMPORTER = 'CEWE FOTOIMPORTER';


######################################################################################################################
# Einige Konstanten
######################################################################################################################
my $MIME_TYPE = 'application/x-hps-mcf';
my $APP_ICON_FILE_NAME = 'hps-'.$KEYACCID;
my $DESKTOP_FILE_NAME = $APP_ICON_FILE_NAME.".desktop";
my $DESKTOP_ICON_PATH = '/Resources/keyaccount/32.ico';
my $SERVICES_XML_PATH = '/Resources/services.xml';
my $AFFILIATE_ID = 'x_x_x_x_1320_x_1609030O5grRXDi0OA5                              ';


######################################################################################################################
# Texte
######################################################################################################################
my @TRANSLATABLE;
my @TRANSLATABLE_ERRORS;

$TRANSLATABLE[0]  = "ja";
$TRANSLATABLE[1]  = "j";
$TRANSLATABLE[2]  = "nein";
$TRANSLATABLE[3]  = "n";
$TRANSLATABLE[4]  = "Dieses Script ist Ihnen bei der Installation von '\033[1m%1\$s\033[0m' auf Ihrem Rechner behilflich und leitet Sie Schritt für Schritt durch den Installationsprozess.\n\n\n";
$TRANSLATABLE[5]  = "Bitte lesen Sie die EULA (End User License Agreement) sorgfältig durch. Im Anschluss daran müssen Sie die EULA akzeptieren.\n\tInnerhalb der EULA können Sie mit den Pfeiltasten navigieren. Durch drücken der Taste '\033[1mq\033[0m' verlassen Sie die EULA.\n\tWeiter mit <CR>.";
$TRANSLATABLE[6]  = "\tAkzeptieren Sie die EULA? [%1\$s/\033[1m%2\$s\033[0m] ";
$TRANSLATABLE[7]  = "\033[0m\033[1m'%1\$s'\033[0m kann leider nicht auf Ihrem Rechner installiert werden.\n\n\n";
$TRANSLATABLE[8]  = "Wo soll '\033[1m%1\$s\033[0m' installiert werden? [\033[1m%2\$s\033[0m] ";
$TRANSLATABLE[9]  = "\tWollen Sie die Installation fortsetzen und die benötigten Daten aus dem Internet herunter laden? [\033[1m%1\$s\033[0m/%2\$s] ";
$TRANSLATABLE[10] = "\tDownloading: '%1\$s'\n";
$TRANSLATABLE[11] = "Die benötigten Dateien werden nun in das Installationsverzeichnis entpackt.\n";
$TRANSLATABLE[12] = "\nHerzlichen Glückwunsch!\nSie haben erfolgreich \033[1m'%1\$s'\033[0m auf Ihrem Rechner installiert.\nZum Starten führen Sie bitte die Datei '%2\$s' aus.\n\nViel Spaß!\n";
$TRANSLATABLE[13] = "Soll erneut versucht werden die Datei herunter zu laden? [%1\$s/\033[1m%2\$s\033[0m] ";
$TRANSLATABLE[14] = "\t    %1\$-18s %2\$20s %3\$9s (%4\$5s)\n";
$TRANSLATABLE[15] = "\tEs müssen noch insgesamt %1\$.2fMB Daten aus dem Internet heruntergeladen werden.\n";
$TRANSLATABLE[16] = "Für eine erfolgreiche Installation müssen noch die folgenden Pakete aus dem Internet herunter geladen werden.\n";
$TRANSLATABLE[17] = "Die herunter geladenen Installationspakete wurden nach der Installation nicht gelöscht und befinden sich im aktuellen Verzeichnis.";
$TRANSLATABLE[18] = "Die herunter geladenen Installationspakete wurden nach der Installation nicht gelöscht und wurden zusammen mit diesem Installationsscript nach %1\$s kopiert.";
$TRANSLATABLE[19] = "Das angegebene Verzeichnis existiert nicht. Soll es angelegt werden? [\033[1m%1\$s\033[0m/%2\$s] ";
$TRANSLATABLE[20] = "Kommandozeilenoptionen:\n   -h; --help\n   -i; --installDir=<DIR>\tDas Verzeichnis in das '%1\$s' installiert werden soll.\n   -k; --keepPackages\t\tDie heruntergeladenen Pakete werden nicht gelöscht und können für eine weitere Installation benutzt werden.\n   -w; --workingDir=<DIR>\tDas Verzeichnis in dem temporäre Dateien abgelegt werden können.\n   -v; --verbose\t\tGibt Informationen beim Download aus.\n\nDas Script sucht im aktuellen Verzeichnis nach den Installationspaketen. Werden die Pakete dort nicht gefunden\nso werden sie aus dem Internet heruntergeladen\nTemporäre Dateien werden in das aktuelle oder das mit --workingDir angegebene Verzeichnis gespeichert. Ist das, wegen fehlender Berechtigungen, nicht möglich werden die temporären Dateien nach /tmp gespeichert.\n";

$TRANSLATABLE_ERRORS[0]  = "Für die Kommandozeilenoptionen '--installDir' und '--workingDir' ist die Angabe eines Verzeichnisses zwingend erforderlich!\n";
$TRANSLATABLE_ERRORS[1]  = "Bei einem Update ist die Angabe des Installationsverzeichnisses mit '--installDir' zwingend erforderlich!\n";
$TRANSLATABLE_ERRORS[2]  = "Das angegebene Arbeitsverzeichnis '%1\$s' existiert nicht!\n";
$TRANSLATABLE_ERRORS[3]  = "Das Arbeitsverzeichnis konnte nicht ermittelt werden!\n";
$TRANSLATABLE_ERRORS[4]  = "Für die korrekte Ausführung des Scriptes wird das Programm '%1\$s' benötigt!\n";
$TRANSLATABLE_ERRORS[5]  = "Die Datei '%1\$s' kann nicht gefunden werden!\n";
$TRANSLATABLE_ERRORS[6]  = "\tSie haben die EULA nicht akzeptiert!\n\t%1\$s";
$TRANSLATABLE_ERRORS[7]  = "Im angegebenen Verzeichnis können keine symbolischen Links angelegt werden. Dies ist aber für die Installation von '%1\$s' zwingend erforderlich!\n";
$TRANSLATABLE_ERRORS[8]  = "Das Herunterladen der Datei '%1\$s' ist fehlgeschlagen!\n";
$TRANSLATABLE_ERRORS[9]  = "Die Datei '%1\$s' kann nicht geöffnet werden!\n";
$TRANSLATABLE_ERRORS[10] = "Die Plattform konnte nicht ermittelt werden! 'uname -m' liefert weder 'i686' noch 'x86_64' sondern '%1\$s'.\n";
$TRANSLATABLE_ERRORS[11] = "Die Datei '%1\$s' konnte nicht heruntergeladen werden!\n";
$TRANSLATABLE_ERRORS[12] = "Das Verzeichnis '%1\$s' konnte nicht angelegt werden.\n";
$TRANSLATABLE_ERRORS[13] = "Die Datei '%1\$s' kann nicht entpackt werden!\n";
$TRANSLATABLE_ERRORS[14] = "Die Datei '%1\$s' konnte nicht nach '%2\$s' kopiert werden!\n";
$TRANSLATABLE_ERRORS[15] = "Die Prüfsumme der heruntergeladenen Datei '%1\$s' stimmt nicht!\n";
$TRANSLATABLE_ERRORS[16] = "Die Datei '%1\$s' konnte nicht nach '%2\$s' herunter geladen werden!\n";
$TRANSLATABLE_ERRORS[17] = "Die benötigten Pakete konnten nicht ermittelt werden!\n";

my @ANSWER_YES_LIST = ($TRANSLATABLE[0], $TRANSLATABLE[1]);
my @ANSWER_NO_LIST  = ($TRANSLATABLE[2], $TRANSLATABLE[3]);


######################################################################################################################
# AB HIER SOLLTE NICHTS MEHR GEAENDERT WERDEN
######################################################################################################################
my $INSTALL_DIR_DEF = "$VENDOR_NAME/$INSTALL_DIR_DEFAULT";
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_FILE_FORMAT = "[Desktop Entry]\n".
						"Version=1.0\n".
						"Encoding=UTF-8\n".
						"Name=$APPLICATION_NAME\n".
						"Name[de]=$APPLICATION_NAME\n".
						"Exec=\"%s/$APPLICATION_NAME\"\n".
						"Path=%s\n".
						"StartupNotify=true\n".
						"Terminal=false\n".
						"Type=Application\n".
						"Icon=$APP_ICON_FILE_NAME\n".
						"Categories=Graphics;\n".
						"MimeType=$MIME_TYPE\n";
my $MIME_TYPE_FILE_FORMAT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
						"<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>\n".
						"<mime-type type=\"%s\">\n".
						"<comment>%s</comment>\n".
						"<glob pattern=\"*.mcf\"/>\n".
						"</mime-type>\n".
						"</mime-info>";
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.com/api/feedback/$KEYACCID/hps/<update>downloadstart.$AFFILIATE_ID/linux";
my $DOWNLOAD_COMPLETE_URL="http://dls.photoprintit.com/api/feedback/$KEYACCID/hps/<update>downloadcomplete.$AFFILIATE_ID/linux";
my $INSTALLATION_COMPLETE_URL="http://dls.photoprintit.com/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 {
	printf ($TRANSLATABLE[4], $APPLICATION_NAME);
	printf ($TRANSLATABLE[20], $APPLICATION_NAME);

	exit(0);
}



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

	GetOptions("installdir=s" => \$installDir,
			"update" => \$update,
			"upgrade" => \$upgrade,
			"verbose" => \$verbose,
			"help" => \$showHelp,
			"keepPackages" => \$keepPackages,
			"workingdir=s" => \$workingDir) || abort($TRANSLATABLE_ERRORS[0]);

	if($showHelp == 1) {
		showHelp();
	}

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

	if($update == 1
	   && $installDir eq "") {
		abort($TRANSLATABLE_ERRORS[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)) {
			abort($TRANSLATABLE_ERRORS[2], $workingDir);
		} else {
			closedir(DIR);
		}
		$testFilePath = $workingDir."/".$testFileName;
	}

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

		if(!open(TEST_FILE, ">", $testFilePath)) {
			abort($TRANSLATABLE_ERRORS[3]);
		} 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($status != 0) {
			abort($TRANSLATABLE_ERRORS[4], $_);
		}
	}
}



######################################################################################################################
# Zeigt die EULA an
######################################################################################################################
sub showEula {
	if($FILE_EULA ne "" && $update == 0) {
		if(!open(EULA, "<", $FILE_EULA)) {
			abort($TRANSLATABLE_ERRORS[5], $FILE_EULA);
		}
		close EULA;
		printf($TRANSLATABLE[5]);
		my $answer = <STDIN>;

		system("less $FILE_EULA");

		printf($TRANSLATABLE[6], $TRANSLATABLE[0], uc($TRANSLATABLE[2]));
		chomp($answer = <STDIN>);
		$answer=lc($answer);

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

		if($found == 0) {
			abort($TRANSLATABLE_ERRORS[6], sprintf($TRANSLATABLE[7], $APPLICATION_NAME));
		}
	}
}



######################################################################################################################
# Installationsverzeichniss erfragen
######################################################################################################################
sub getInstallDir {
	if($update == 0 && $changeInstallDir == 1) {
		while(1) {
			if($> == 0) {
				# Root User
				$installDir = "/opt/".$INSTALL_DIR_DEF;
			} else {
				# Normaler Benutzer
				$installDir = $ENV{"HOME"}."/".$INSTALL_DIR_DEF;
			}

			printf($TRANSLATABLE[8], $APPLICATION_NAME, $installDir);
			my $answer = <STDIN>;
			chomp($answer);

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

			# vorne und hinten Leerzeichen abschneiden
			$installDir =~ s/^\s+//;
			$installDir =~ s/\s+$//;

			# Jetzt ersetzen wir noch die Tilde durch das Home-Verzeichnis
			$installDir =~ s/^~/$ENV{"HOME"}/;

			# einen relativen Pfad um den aktuellen Pfad erweitern
			if($installDir =~ m/^[^\/]/) {
				$installDir = $ENV{"PWD"}."/".$installDir;
			}

			my $dirCreated = 0;
			if(! -e $installDir) {
				printf($TRANSLATABLE[19], uc($TRANSLATABLE[0]), $TRANSLATABLE[2]);
				my $createAnswer = <STDIN>;
				chomp($createAnswer);
				$createAnswer=lc($createAnswer);

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

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

					$dirCreated = 1;

					if($@) {
						printf(red($TRANSLATABLE_ERRORS[12]), $installDir);
						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);
				}
				abort($TRANSLATABLE_ERRORS[7], $APPLICATION_NAME);
			}
		}
	}
}



######################################################################################################################
# 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($verbose == 0) {
			$answer = system("wget -T 60 -t 1 -q $DOWNLOAD_SERVER$INDEX_FILE_PATH_ON_SERVER -O $fileName");
		} else {
			$answer = system("wget -T 60 -t 1 $DOWNLOAD_SERVER$INDEX_FILE_PATH_ON_SERVER -O $fileName");
		}

		if($answer != 0
			|| -s $fileName == 0) {
			unlink($fileName);
			abort($TRANSLATABLE_ERRORS[8], $DOWNLOAD_SERVER.$INDEX_FILE_PATH_ON_SERVER);
		}

		$downloaded = 1;
	}

	if(!open(INDEX, "<", $fileName)) {
		abort($TRANSLATABLE_ERRORS[9], $fileName);
	} else {
		while(<INDEX>) {
			$indexContent.=$_;
		}

		close(INDEX);

		if($downloaded == 1 && $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") {
		$machineType = "l64";
	} else {
		abort($TRANSLATABLE_ERRORS[10], $machineType);
	}

	if(length($indexContent) == 0) {
		abort($TRANSLATABLE_ERRORS[17]);
	}

	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;export LC_MESSAGES=C;wget --spider $file2get 2>&1`;
						my ($size, $dummy, $mb, $mime)	= $spider=~/Length:\s+([\d\.,]+)\s+(\(([\d\.,]+[MK]?)\))?\s*(\[.*\])/;
						my $string = sprintf($TRANSLATABLE[14], $what, $mime, $size, $mb);
						$packageString .= $string;
						push(@filesToDownload, $_);
						$size=~s/[\.,]//g;
						$totalSize += $size;
					}
				}
			}
		}
	}

	if((scalar @filesToDownload) != 0) {
		printf($TRANSLATABLE[16]);
		printf($packageString);
		printf($TRANSLATABLE[15], $totalSize/(1024*1024));
	}
}



######################################################################################################################
# Roleback
######################################################################################################################
sub roleback {
	my ($fileName) = @_;
	$fileName =~ /^$CLIENTID-(.*)_.*$/;
	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) {
			$_ =~ /^$CLIENTID-(.*)_.*$/;

			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((scalar @filesToDownload) != 0) {
		if($update == 0) {
			my $answer;

			printf($TRANSLATABLE[9], uc($TRANSLATABLE[0]), $TRANSLATABLE[2]);

			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($TRANSLATABLE[10], $what);

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

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


				if($verbose == 0) {
					$result = system("wget -q $file2get -O $fileName");
				} else {
					$result = system("wget $file2get -O $fileName");
				}

				if($result == 0) {
					# 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) {
						printf(red($TRANSLATABLE_ERRORS[15]), $fileName);
						$error = 1;
					} else {
						push(@downloadedFiles, $fileName);
						push(@filesToRemove, $fileName);
						$retry = 0;
					}
				} else {
					printf(red($TRANSLATABLE_ERRORS[16]), $file2get, $fileName);
					$error = 1;
				}

				if($update == 0 && $error == 1) {
					my $answer;
					printf($TRANSLATABLE[13], $TRANSLATABLE[0], uc($TRANSLATABLE[2]));
					chomp($answer = <STDIN>);
					$answer = lc($answer);

					$retry = 0;
					foreach(@ANSWER_YES_LIST) {
						if($answer eq $_) {
							$retry = 1;
							$error = 0;
							last;
						}
					}
				} elsif($update == 1 && $error == 1) {
					# Wir haben keine Konsole und können keine Eingabe entgegen nehmen.
					# Deshalb brechen wir ab.
					$retry = 0;
				}
			}

			if($error == 1) {
				unlink $fileName;
				abort($TRANSLATABLE_ERRORS[11], $fileName);
			}
		}

		triggerCountPixel($DOWNLOAD_COMPLETE_URL);
	}
}



######################################################################################################################
# Prüfen und entpacken der Dateien
######################################################################################################################
sub unpackFiles {
	if((scalar @downloadedFiles) != 0) {
		printf($TRANSLATABLE[11]);

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

		if($@) {
			abort($TRANSLATABLE_ERRORS[12], $installDir);
		}

		# 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($result != 0) {
				abort($TRANSLATABLE_ERRORS[13], $fileName);
			}
		}
	}
}



######################################################################################################################
# Icons für Mimetyp und Application erzeugen
######################################################################################################################
sub createIcons {
	my $mimeTypeFileName = $MIME_TYPE;
	$mimeTypeFileName =~ tr:/:-:;

	my @sizes = (16, 22, 24, 32, 48, 64, 128);

	system("\"$installDir/IconExtractor\" \"$installDir$DESKTOP_ICON_PATH\" @sizes > /dev/null 2>&1");

	foreach(@sizes) {
		my $iconFileName = "cewe_".$_.".png";
		system("xdg-icon-resource install --noupdate --theme hicolor --context apps --size $_ $iconFileName $APP_ICON_FILE_NAME");
		system("xdg-icon-resource install --noupdate --theme hicolor --context mimetypes --size $_ $iconFileName $mimeTypeFileName");
		unlink($iconFileName);
	}

	system("xdg-icon-resource forceupdate");
}



######################################################################################################################
# Informationen zum Mimetyp erzeugen.
######################################################################################################################
sub createMimeType()
{
	my $mimeTypeFileName = $MIME_TYPE.'.xml';
	$mimeTypeFileName =~ tr:/:-:;

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

	if(!open(MIME_TYPE_FILE, ">", "$mimeTypeFileName")) {
		abort($TRANSLATABLE_ERRORS[9], $mimeTypeFileName);
	} else {
		printf(MIME_TYPE_FILE $MIME_TYPE_FILE_FORMAT, $MIME_TYPE, $APPLICATION_NAME);
		close(MIME_TYPE_FILE);

		system("xdg-mime install \"$mimeTypeFileName\"");
	}

	unlink($mimeTypeFileName);
}



######################################################################################################################
# Einträge im Startmenü erzeugen
######################################################################################################################
sub createDesktopShortcuts {
	my $desktopFileName = $DESKTOP_FILE_NAME;
	$desktopFileName =~ tr:/:-:;

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

	if(!open(DESKTOP_FILE, ">", $desktopFileName)) {
		abort($TRANSLATABLE_ERRORS[9], $desktopFileName);
	} else {
		printf(DESKTOP_FILE $DESKTOP_FILE_FORMAT, $installDir, $installDir);
		close(DESKTOP_FILE);

		system("xdg-desktop-menu install --novendor \"$desktopFileName\"");
		system("xdg-desktop-icon install --novendor \"$desktopFileName\"");
	}

	unlink($desktopFileName);
}



######################################################################################################################
# Pfade zu den gerade installierten Executables in die Registry eintragen.
######################################################################################################################
sub registerExecutables {
	system("\"$installDir/regedit\" \"$installDir/$PROGRAM_NAME_FOTOSHOW\" \"$installDir/$PROGRAM_NAME_FOTOIMPORTER\" \"$installDir/$APPLICATION_NAME\" > /dev/null 2>&1");
}



######################################################################################################################
# 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."/".$_)) {
					printf($TRANSLATABLE_ERRORS[14], $_, $workingDir."/".$_);
				}
			}
			printf($TRANSLATABLE[18], $workingDir);
		} else {
			printf($TRANSLATABLE[17]);
		}
	}

	# Erzeuge Symlinks für Libs
	if(opendir(INSTALL_DIR, $installDir)) {
		chdir($installDir);
		my @allFiles=sort{ $a cmp $b } 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, $PROGRAM_NAME_FOTOIMPORTER);
		push(@binarys, "facedetection");
		push(@binarys, "gpuprobe");
		push(@binarys, "IconExtractor");
		push(@binarys, "regedit");
		push(@binarys, "QtWebEngineProcess");
		push(@binarys, "QtWebPluginProcess");
		push(@binarys, "QtWebProcess");
		
		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
}



######################################################################################################################
# Meldung in rot.
######################################################################################################################
sub red {
	my $message = $_[0];
	my $retVal  = sprintf("\033[31m%s\033[0m", $message);
	return $retVal;
}



######################################################################################################################
# Fehlermeldung ausgeben und abbrechen
######################################################################################################################
sub abort {
	my $message = shift(@_);

	printf(red($message), @_);

	exit 1;
}



######################################################################################################################
# Übersetzungen laden
######################################################################################################################
sub loadTranslations {
	if(open(TRANSLATIONS, "<", "install-linux-translations.pl")) {
		my $translationCode;

		while(<TRANSLATIONS>) {
			$translationCode.=$_;
		}

		close(TRANSLATIONS);

		eval($translationCode);

		@ANSWER_YES_LIST = ($TRANSLATABLE[0], $TRANSLATABLE[1]);
		@ANSWER_NO_LIST  = ($TRANSLATABLE[2], $TRANSLATABLE[3]);
	}
}


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

system("clear");

loadTranslations();
getOptions();
printf($TRANSLATABLE[4], $APPLICATION_NAME);
checkWorkingDir();
checkProgramms();
showEula();
getInstallDir();
getIndexFile();
checkIndexFile();
downloadFiles();
unpackFiles();
cleanup();
createIcons();
createMimeType();
createDesktopShortcuts();
registerExecutables();
triggerCountPixel($INSTALLATION_COMPLETE_URL);
printf($TRANSLATABLE[12], $APPLICATION_NAME, $installDir."/".$APPLICATION_NAME);
Das Programm wurde nach Abfrage im Verzeichnis
/opt/dm/dm-Fotowelt/ installiert.

Kannst Du Firefox/Konqueror danach bzw. nach der zweiten Fehlermeldung weiter nutzen oder beenden sie sich?
Wenn ich das zweite Fenster beim Firefox mit ok quittiere
wird der Dialog geschlossen und ich kann eine url eingeben u. die Seite ordnungsgemäss aufrufen.
Nach Schliessen u. erneutem Aufruf läuft das gleiche Spielchen wieder ab.
Beim Konqueror sieht das etwas anders, aber lassen wir das erstmal aussenvor.

Weiter Diagnose von mir.
Eröffne ich einen neuen Benutzeraccount zeigt sich der Fehler genauso.
Arbeite ich mit dem Root-Account funktioniert alles.

D.h. für mich die dm-Fotowelt hat die MIME-Typen Defination verbogen.

Kannst Du diese Mime-Types unter "Systemeinstellungen -> Anwendungen -> Dateizuordnungen" finden?
Wenn ich unter "Systemeinstellungen -> Anwendungen -> Dateizuordnungen" nach Mime-Types
suche wird der Menue-Pkt Application eingeblendet, worin ich Mime-Types nicht finden kann.

:irre:

viele grüsse aus dem abendlichen Oberbayern
vom bayernherz :thumbs:
 

susejunky

Moderator
Teammitglied
Hallo bayernherz,

bayernherz schrieb:
... Inhalt des Scripts
Code:
#! /usr/bin/perl -w
######################################################################################################################
#
# Linux Installations Script
#
# $Id: install-linux.pl 132269 2012-11-26 13:13:10Z dfrohn $
#
######################################################################################################################

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.com";
my $KEYACCID = '1320';
my $CLIENTID = '38';
my $HPS_VER = '6.1.5';
my $VENDOR_NAME = 'dm';
my $APPLICATION_NAME = 'dm-Fotowelt';
my $INSTALL_DIR_DEFAULT = 'dm-Fotowelt';
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 = 'CEWE FOTOSCHAU';
my $PROGRAM_NAME_FOTOIMPORTER = 'CEWE FOTOIMPORTER';


######################################################################################################################
# Einige Konstanten
######################################################################################################################
my $MIME_TYPE = 'application/x-hps-mcf';
my $APP_ICON_FILE_NAME = 'hps-'.$KEYACCID;
my $DESKTOP_FILE_NAME = $APP_ICON_FILE_NAME.".desktop";
my $DESKTOP_ICON_PATH = '/Resources/keyaccount/32.ico';
my $SERVICES_XML_PATH = '/Resources/services.xml';
my $AFFILIATE_ID = 'x_x_x_x_1320_x_1609030O5grRXDi0OA5                              ';


######################################################################################################################
# Texte
######################################################################################################################
my @TRANSLATABLE;
my @TRANSLATABLE_ERRORS;

$TRANSLATABLE[0]  = "ja";
$TRANSLATABLE[1]  = "j";
$TRANSLATABLE[2]  = "nein";
$TRANSLATABLE[3]  = "n";
$TRANSLATABLE[4]  = "Dieses Script ist Ihnen bei der Installation von '\033[1m%1\$s\033[0m' auf Ihrem Rechner behilflich und leitet Sie Schritt für Schritt durch den Installationsprozess.\n\n\n";
$TRANSLATABLE[5]  = "Bitte lesen Sie die EULA (End User License Agreement) sorgfältig durch. Im Anschluss daran müssen Sie die EULA akzeptieren.\n\tInnerhalb der EULA können Sie mit den Pfeiltasten navigieren. Durch drücken der Taste '\033[1mq\033[0m' verlassen Sie die EULA.\n\tWeiter mit <CR>.";
$TRANSLATABLE[6]  = "\tAkzeptieren Sie die EULA? [%1\$s/\033[1m%2\$s\033[0m] ";
$TRANSLATABLE[7]  = "\033[0m\033[1m'%1\$s'\033[0m kann leider nicht auf Ihrem Rechner installiert werden.\n\n\n";
$TRANSLATABLE[8]  = "Wo soll '\033[1m%1\$s\033[0m' installiert werden? [\033[1m%2\$s\033[0m] ";
$TRANSLATABLE[9]  = "\tWollen Sie die Installation fortsetzen und die benötigten Daten aus dem Internet herunter laden? [\033[1m%1\$s\033[0m/%2\$s] ";
$TRANSLATABLE[10] = "\tDownloading: '%1\$s'\n";
$TRANSLATABLE[11] = "Die benötigten Dateien werden nun in das Installationsverzeichnis entpackt.\n";
$TRANSLATABLE[12] = "\nHerzlichen Glückwunsch!\nSie haben erfolgreich \033[1m'%1\$s'\033[0m auf Ihrem Rechner installiert.\nZum Starten führen Sie bitte die Datei '%2\$s' aus.\n\nViel Spaß!\n";
$TRANSLATABLE[13] = "Soll erneut versucht werden die Datei herunter zu laden? [%1\$s/\033[1m%2\$s\033[0m] ";
$TRANSLATABLE[14] = "\t    %1\$-18s %2\$20s %3\$9s (%4\$5s)\n";
$TRANSLATABLE[15] = "\tEs müssen noch insgesamt %1\$.2fMB Daten aus dem Internet heruntergeladen werden.\n";
$TRANSLATABLE[16] = "Für eine erfolgreiche Installation müssen noch die folgenden Pakete aus dem Internet herunter geladen werden.\n";
$TRANSLATABLE[17] = "Die herunter geladenen Installationspakete wurden nach der Installation nicht gelöscht und befinden sich im aktuellen Verzeichnis.";
$TRANSLATABLE[18] = "Die herunter geladenen Installationspakete wurden nach der Installation nicht gelöscht und wurden zusammen mit diesem Installationsscript nach %1\$s kopiert.";
$TRANSLATABLE[19] = "Das angegebene Verzeichnis existiert nicht. Soll es angelegt werden? [\033[1m%1\$s\033[0m/%2\$s] ";
$TRANSLATABLE[20] = "Kommandozeilenoptionen:\n   -h; --help\n   -i; --installDir=<DIR>\tDas Verzeichnis in das '%1\$s' installiert werden soll.\n   -k; --keepPackages\t\tDie heruntergeladenen Pakete werden nicht gelöscht und können für eine weitere Installation benutzt werden.\n   -w; --workingDir=<DIR>\tDas Verzeichnis in dem temporäre Dateien abgelegt werden können.\n   -v; --verbose\t\tGibt Informationen beim Download aus.\n\nDas Script sucht im aktuellen Verzeichnis nach den Installationspaketen. Werden die Pakete dort nicht gefunden\nso werden sie aus dem Internet heruntergeladen\nTemporäre Dateien werden in das aktuelle oder das mit --workingDir angegebene Verzeichnis gespeichert. Ist das, wegen fehlender Berechtigungen, nicht möglich werden die temporären Dateien nach /tmp gespeichert.\n";

$TRANSLATABLE_ERRORS[0]  = "Für die Kommandozeilenoptionen '--installDir' und '--workingDir' ist die Angabe eines Verzeichnisses zwingend erforderlich!\n";
$TRANSLATABLE_ERRORS[1]  = "Bei einem Update ist die Angabe des Installationsverzeichnisses mit '--installDir' zwingend erforderlich!\n";
$TRANSLATABLE_ERRORS[2]  = "Das angegebene Arbeitsverzeichnis '%1\$s' existiert nicht!\n";
$TRANSLATABLE_ERRORS[3]  = "Das Arbeitsverzeichnis konnte nicht ermittelt werden!\n";
$TRANSLATABLE_ERRORS[4]  = "Für die korrekte Ausführung des Scriptes wird das Programm '%1\$s' benötigt!\n";
$TRANSLATABLE_ERRORS[5]  = "Die Datei '%1\$s' kann nicht gefunden werden!\n";
$TRANSLATABLE_ERRORS[6]  = "\tSie haben die EULA nicht akzeptiert!\n\t%1\$s";
$TRANSLATABLE_ERRORS[7]  = "Im angegebenen Verzeichnis können keine symbolischen Links angelegt werden. Dies ist aber für die Installation von '%1\$s' zwingend erforderlich!\n";
$TRANSLATABLE_ERRORS[8]  = "Das Herunterladen der Datei '%1\$s' ist fehlgeschlagen!\n";
$TRANSLATABLE_ERRORS[9]  = "Die Datei '%1\$s' kann nicht geöffnet werden!\n";
$TRANSLATABLE_ERRORS[10] = "Die Plattform konnte nicht ermittelt werden! 'uname -m' liefert weder 'i686' noch 'x86_64' sondern '%1\$s'.\n";
$TRANSLATABLE_ERRORS[11] = "Die Datei '%1\$s' konnte nicht heruntergeladen werden!\n";
$TRANSLATABLE_ERRORS[12] = "Das Verzeichnis '%1\$s' konnte nicht angelegt werden.\n";
$TRANSLATABLE_ERRORS[13] = "Die Datei '%1\$s' kann nicht entpackt werden!\n";
$TRANSLATABLE_ERRORS[14] = "Die Datei '%1\$s' konnte nicht nach '%2\$s' kopiert werden!\n";
$TRANSLATABLE_ERRORS[15] = "Die Prüfsumme der heruntergeladenen Datei '%1\$s' stimmt nicht!\n";
$TRANSLATABLE_ERRORS[16] = "Die Datei '%1\$s' konnte nicht nach '%2\$s' herunter geladen werden!\n";
$TRANSLATABLE_ERRORS[17] = "Die benötigten Pakete konnten nicht ermittelt werden!\n";

my @ANSWER_YES_LIST = ($TRANSLATABLE[0], $TRANSLATABLE[1]);
my @ANSWER_NO_LIST  = ($TRANSLATABLE[2], $TRANSLATABLE[3]);


######################################################################################################################
# AB HIER SOLLTE NICHTS MEHR GEAENDERT WERDEN
######################################################################################################################
my $INSTALL_DIR_DEF = "$VENDOR_NAME/$INSTALL_DIR_DEFAULT";
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_FILE_FORMAT = "[Desktop Entry]\n".
						"Version=1.0\n".
						"Encoding=UTF-8\n".
						"Name=$APPLICATION_NAME\n".
						"Name[de]=$APPLICATION_NAME\n".
						"Exec=\"%s/$APPLICATION_NAME\"\n".
						"Path=%s\n".
						"StartupNotify=true\n".
						"Terminal=false\n".
						"Type=Application\n".
						"Icon=$APP_ICON_FILE_NAME\n".
						"Categories=Graphics;\n".
						"MimeType=$MIME_TYPE\n";
my $MIME_TYPE_FILE_FORMAT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
						"<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>\n".
						"<mime-type type=\"%s\">\n".
						"<comment>%s</comment>\n".
						"<glob pattern=\"*.mcf\"/>\n".
						"</mime-type>\n".
						"</mime-info>";
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.com/api/feedback/$KEYACCID/hps/<update>downloadstart.$AFFILIATE_ID/linux";
my $DOWNLOAD_COMPLETE_URL="http://dls.photoprintit.com/api/feedback/$KEYACCID/hps/<update>downloadcomplete.$AFFILIATE_ID/linux";
my $INSTALLATION_COMPLETE_URL="http://dls.photoprintit.com/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 {
	printf ($TRANSLATABLE[4], $APPLICATION_NAME);
	printf ($TRANSLATABLE[20], $APPLICATION_NAME);

	exit(0);
}



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

	GetOptions("installdir=s" => \$installDir,
			"update" => \$update,
			"upgrade" => \$upgrade,
			"verbose" => \$verbose,
			"help" => \$showHelp,
			"keepPackages" => \$keepPackages,
			"workingdir=s" => \$workingDir) || abort($TRANSLATABLE_ERRORS[0]);

	if($showHelp == 1) {
		showHelp();
	}

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

	if($update == 1
	   && $installDir eq "") {
		abort($TRANSLATABLE_ERRORS[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)) {
			abort($TRANSLATABLE_ERRORS[2], $workingDir);
		} else {
			closedir(DIR);
		}
		$testFilePath = $workingDir."/".$testFileName;
	}

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

		if(!open(TEST_FILE, ">", $testFilePath)) {
			abort($TRANSLATABLE_ERRORS[3]);
		} 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($status != 0) {
			abort($TRANSLATABLE_ERRORS[4], $_);
		}
	}
}



######################################################################################################################
# Zeigt die EULA an
######################################################################################################################
sub showEula {
	if($FILE_EULA ne "" && $update == 0) {
		if(!open(EULA, "<", $FILE_EULA)) {
			abort($TRANSLATABLE_ERRORS[5], $FILE_EULA);
		}
		close EULA;
		printf($TRANSLATABLE[5]);
		my $answer = <STDIN>;

		system("less $FILE_EULA");

		printf($TRANSLATABLE[6], $TRANSLATABLE[0], uc($TRANSLATABLE[2]));
		chomp($answer = <STDIN>);
		$answer=lc($answer);

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

		if($found == 0) {
			abort($TRANSLATABLE_ERRORS[6], sprintf($TRANSLATABLE[7], $APPLICATION_NAME));
		}
	}
}



######################################################################################################################
# Installationsverzeichniss erfragen
######################################################################################################################
sub getInstallDir {
	if($update == 0 && $changeInstallDir == 1) {
		while(1) {
			if($> == 0) {
				# Root User
				$installDir = "/opt/".$INSTALL_DIR_DEF;
			} else {
				# Normaler Benutzer
				$installDir = $ENV{"HOME"}."/".$INSTALL_DIR_DEF;
			}

			printf($TRANSLATABLE[8], $APPLICATION_NAME, $installDir);
			my $answer = <STDIN>;
			chomp($answer);

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

			# vorne und hinten Leerzeichen abschneiden
			$installDir =~ s/^\s+//;
			$installDir =~ s/\s+$//;

			# Jetzt ersetzen wir noch die Tilde durch das Home-Verzeichnis
			$installDir =~ s/^~/$ENV{"HOME"}/;

			# einen relativen Pfad um den aktuellen Pfad erweitern
			if($installDir =~ m/^[^\/]/) {
				$installDir = $ENV{"PWD"}."/".$installDir;
			}

			my $dirCreated = 0;
			if(! -e $installDir) {
				printf($TRANSLATABLE[19], uc($TRANSLATABLE[0]), $TRANSLATABLE[2]);
				my $createAnswer = <STDIN>;
				chomp($createAnswer);
				$createAnswer=lc($createAnswer);

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

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

					$dirCreated = 1;

					if($@) {
						printf(red($TRANSLATABLE_ERRORS[12]), $installDir);
						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);
				}
				abort($TRANSLATABLE_ERRORS[7], $APPLICATION_NAME);
			}
		}
	}
}



######################################################################################################################
# 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($verbose == 0) {
			$answer = system("wget -T 60 -t 1 -q $DOWNLOAD_SERVER$INDEX_FILE_PATH_ON_SERVER -O $fileName");
		} else {
			$answer = system("wget -T 60 -t 1 $DOWNLOAD_SERVER$INDEX_FILE_PATH_ON_SERVER -O $fileName");
		}

		if($answer != 0
			|| -s $fileName == 0) {
			unlink($fileName);
			abort($TRANSLATABLE_ERRORS[8], $DOWNLOAD_SERVER.$INDEX_FILE_PATH_ON_SERVER);
		}

		$downloaded = 1;
	}

	if(!open(INDEX, "<", $fileName)) {
		abort($TRANSLATABLE_ERRORS[9], $fileName);
	} else {
		while(<INDEX>) {
			$indexContent.=$_;
		}

		close(INDEX);

		if($downloaded == 1 && $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") {
		$machineType = "l64";
	} else {
		abort($TRANSLATABLE_ERRORS[10], $machineType);
	}

	if(length($indexContent) == 0) {
		abort($TRANSLATABLE_ERRORS[17]);
	}

	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;export LC_MESSAGES=C;wget --spider $file2get 2>&1`;
						my ($size, $dummy, $mb, $mime)	= $spider=~/Length:\s+([\d\.,]+)\s+(\(([\d\.,]+[MK]?)\))?\s*(\[.*\])/;
						my $string = sprintf($TRANSLATABLE[14], $what, $mime, $size, $mb);
						$packageString .= $string;
						push(@filesToDownload, $_);
						$size=~s/[\.,]//g;
						$totalSize += $size;
					}
				}
			}
		}
	}

	if((scalar @filesToDownload) != 0) {
		printf($TRANSLATABLE[16]);
		printf($packageString);
		printf($TRANSLATABLE[15], $totalSize/(1024*1024));
	}
}



######################################################################################################################
# Roleback
######################################################################################################################
sub roleback {
	my ($fileName) = @_;
	$fileName =~ /^$CLIENTID-(.*)_.*$/;
	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) {
			$_ =~ /^$CLIENTID-(.*)_.*$/;

			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((scalar @filesToDownload) != 0) {
		if($update == 0) {
			my $answer;

			printf($TRANSLATABLE[9], uc($TRANSLATABLE[0]), $TRANSLATABLE[2]);

			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($TRANSLATABLE[10], $what);

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

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


				if($verbose == 0) {
					$result = system("wget -q $file2get -O $fileName");
				} else {
					$result = system("wget $file2get -O $fileName");
				}

				if($result == 0) {
					# 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) {
						printf(red($TRANSLATABLE_ERRORS[15]), $fileName);
						$error = 1;
					} else {
						push(@downloadedFiles, $fileName);
						push(@filesToRemove, $fileName);
						$retry = 0;
					}
				} else {
					printf(red($TRANSLATABLE_ERRORS[16]), $file2get, $fileName);
					$error = 1;
				}

				if($update == 0 && $error == 1) {
					my $answer;
					printf($TRANSLATABLE[13], $TRANSLATABLE[0], uc($TRANSLATABLE[2]));
					chomp($answer = <STDIN>);
					$answer = lc($answer);

					$retry = 0;
					foreach(@ANSWER_YES_LIST) {
						if($answer eq $_) {
							$retry = 1;
							$error = 0;
							last;
						}
					}
				} elsif($update == 1 && $error == 1) {
					# Wir haben keine Konsole und können keine Eingabe entgegen nehmen.
					# Deshalb brechen wir ab.
					$retry = 0;
				}
			}

			if($error == 1) {
				unlink $fileName;
				abort($TRANSLATABLE_ERRORS[11], $fileName);
			}
		}

		triggerCountPixel($DOWNLOAD_COMPLETE_URL);
	}
}



######################################################################################################################
# Prüfen und entpacken der Dateien
######################################################################################################################
sub unpackFiles {
	if((scalar @downloadedFiles) != 0) {
		printf($TRANSLATABLE[11]);

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

		if($@) {
			abort($TRANSLATABLE_ERRORS[12], $installDir);
		}

		# 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($result != 0) {
				abort($TRANSLATABLE_ERRORS[13], $fileName);
			}
		}
	}
}



######################################################################################################################
# Icons für Mimetyp und Application erzeugen
######################################################################################################################
sub createIcons {
	my $mimeTypeFileName = $MIME_TYPE;
	$mimeTypeFileName =~ tr:/:-:;

	my @sizes = (16, 22, 24, 32, 48, 64, 128);

	system("\"$installDir/IconExtractor\" \"$installDir$DESKTOP_ICON_PATH\" @sizes > /dev/null 2>&1");

	foreach(@sizes) {
		my $iconFileName = "cewe_".$_.".png";
		system("xdg-icon-resource install --noupdate --theme hicolor --context apps --size $_ $iconFileName $APP_ICON_FILE_NAME");
		system("xdg-icon-resource install --noupdate --theme hicolor --context mimetypes --size $_ $iconFileName $mimeTypeFileName");
		unlink($iconFileName);
	}

	system("xdg-icon-resource forceupdate");
}



######################################################################################################################
# Informationen zum Mimetyp erzeugen.
######################################################################################################################
sub createMimeType()
{
	my $mimeTypeFileName = $MIME_TYPE.'.xml';
	$mimeTypeFileName =~ tr:/:-:;

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

	if(!open(MIME_TYPE_FILE, ">", "$mimeTypeFileName")) {
		abort($TRANSLATABLE_ERRORS[9], $mimeTypeFileName);
	} else {
		printf(MIME_TYPE_FILE $MIME_TYPE_FILE_FORMAT, $MIME_TYPE, $APPLICATION_NAME);
		close(MIME_TYPE_FILE);

		system("xdg-mime install \"$mimeTypeFileName\"");
	}

	unlink($mimeTypeFileName);
}



######################################################################################################################
# Einträge im Startmenü erzeugen
######################################################################################################################
sub createDesktopShortcuts {
	my $desktopFileName = $DESKTOP_FILE_NAME;
	$desktopFileName =~ tr:/:-:;

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

	if(!open(DESKTOP_FILE, ">", $desktopFileName)) {
		abort($TRANSLATABLE_ERRORS[9], $desktopFileName);
	} else {
		printf(DESKTOP_FILE $DESKTOP_FILE_FORMAT, $installDir, $installDir);
		close(DESKTOP_FILE);

		system("xdg-desktop-menu install --novendor \"$desktopFileName\"");
		system("xdg-desktop-icon install --novendor \"$desktopFileName\"");
	}

	unlink($desktopFileName);
}



######################################################################################################################
# Pfade zu den gerade installierten Executables in die Registry eintragen.
######################################################################################################################
sub registerExecutables {
	system("\"$installDir/regedit\" \"$installDir/$PROGRAM_NAME_FOTOSHOW\" \"$installDir/$PROGRAM_NAME_FOTOIMPORTER\" \"$installDir/$APPLICATION_NAME\" > /dev/null 2>&1");
}



######################################################################################################################
# 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."/".$_)) {
					printf($TRANSLATABLE_ERRORS[14], $_, $workingDir."/".$_);
				}
			}
			printf($TRANSLATABLE[18], $workingDir);
		} else {
			printf($TRANSLATABLE[17]);
		}
	}

	# Erzeuge Symlinks für Libs
	if(opendir(INSTALL_DIR, $installDir)) {
		chdir($installDir);
		my @allFiles=sort{ $a cmp $b } 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, $PROGRAM_NAME_FOTOIMPORTER);
		push(@binarys, "facedetection");
		push(@binarys, "gpuprobe");
		push(@binarys, "IconExtractor");
		push(@binarys, "regedit");
		push(@binarys, "QtWebEngineProcess");
		push(@binarys, "QtWebPluginProcess");
		push(@binarys, "QtWebProcess");
		
		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
}



######################################################################################################################
# Meldung in rot.
######################################################################################################################
sub red {
	my $message = $_[0];
	my $retVal  = sprintf("\033[31m%s\033[0m", $message);
	return $retVal;
}



######################################################################################################################
# Fehlermeldung ausgeben und abbrechen
######################################################################################################################
sub abort {
	my $message = shift(@_);

	printf(red($message), @_);

	exit 1;
}



######################################################################################################################
# Übersetzungen laden
######################################################################################################################
sub loadTranslations {
	if(open(TRANSLATIONS, "<", "install-linux-translations.pl")) {
		my $translationCode;

		while(<TRANSLATIONS>) {
			$translationCode.=$_;
		}

		close(TRANSLATIONS);

		eval($translationCode);

		@ANSWER_YES_LIST = ($TRANSLATABLE[0], $TRANSLATABLE[1]);
		@ANSWER_NO_LIST  = ($TRANSLATABLE[2], $TRANSLATABLE[3]);
	}
}


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

system("clear");

loadTranslations();
getOptions();
printf($TRANSLATABLE[4], $APPLICATION_NAME);
checkWorkingDir();
checkProgramms();
showEula();
getInstallDir();
getIndexFile();
checkIndexFile();
downloadFiles();
unpackFiles();
cleanup();
createIcons();
createMimeType();
createDesktopShortcuts();
registerExecutables();
triggerCountPixel($INSTALLATION_COMPLETE_URL);
printf($TRANSLATABLE[12], $APPLICATION_NAME, $installDir."/".$APPLICATION_NAME);
Hast Du das schon einmal analysiert, ob - und wenn ja wie - es die MIME-Datenbank manipuliert?

bayernherz schrieb:
... Wenn ich unter "Systemeinstellungen -> Anwendungen -> Dateizuordnungen" nach Mime-Types
suche wird der Menue-Pkt Application eingeblendet, worin ich Mime-Types nicht finden kann.
Ich bin mir nicht sicher, ob ich Dich hier richtig verstehe:

Du hast also unter "Systemeinstellungen -> Anwendungen -> Dateizuordnungen" die Mime-Typen
Code:
"Inode/directory"
"Inode/blockdevice"
"Inode/chardevice"
"Inode/socket"
"Inode/fifo"
"application/x-shellscript"
"application/x-executable"
"application/x-desktop"
"application/octet-stream"
nicht gefunden?

Kannst Du diese Mime-Typen noch in der Datei "/usr/share/applications/mimeinfo.cache" finden?

Viele Grüße

susejunky
 

josef-wien

Ultimate Guru
bayernherz schrieb:
Wenn ich unter "Systemeinstellungen -> Anwendungen -> Dateizuordnungen" nach Mime-Types suche
Du sollst dort auch nicht diesen Suchbegriff eingeben, sondern z. B. shellscript. Oder Du öffnest die Eintragung application und schaust nach, ob x-shellscript in der Liste auftaucht. Aber der vorgeschlagene Weg, die Datei /usr/share/applications/mimeinfo.cache anzusehen, führt wohl schneller zum Ziel.

Kann es sein, daß dieses Programm die genannten Dateitypen in den Definitionen des web browsers braucht (wo unter "Anwendungen" wohl nicht alle enthalten sind)?
 
OP
B

bayernherz

Hacker
hallo community,

... Inhalt des Scripts
Hast Du das schon einmal analysiert, ob - und wenn ja wie - es die MIME-Datenbank manipuliert?
Nein, ich habe keine Doktorarbeit von Linux geschrieben, wegen den Details komme ich ja zu Euch.

Kannst Du diese Mime-Typen noch in der Datei "/usr/share/applications/mimeinfo.cache" finden?
Es ist nur noch dies vorhanden.
Code:
inode/directory=org.kde.dolphin.desktop;org.kde.dolphinsu.desktop;kde4-gwenview.desktop;kde4-kfmclient_dir.desktop;kde4-cervisia.desktop;

Nachfolgend die vorhandenen Einstellungen unter:
Systemeinstellungen, Persönliche Informationen, Anwendungen, Dateizuordnungen

Inode/directory
http://img4web.com/view/N2NC8L
Inode/blockdevice
http://img4web.com/view/PLVMZB
Inode/chardevice
http://img4web.com/view/6NC4V6
application/x-shellscript
http://img4web.com/view/U5RVW3
Inode/socket
http://img4web.com/view/CWSR2S
Inode/fifo
http://img4web.com/view/UU4LR7
application/octet-stream
http://img4web.com/view/18TWC5
application/x-executable
http://img4web.com/view/438MZP
application/x-desktop
http://img4web.com/view/2FEEKF

Was ich nochmals anmerken möchte im Root-Account funktioniert alles 100% ig.

Kann es sein, daß dieses Programm die genannten Dateitypen in den Definitionen des web browsers braucht (wo unter "Anwendungen" wohl nicht alle enthalten sind)?
Sag mir wie ich es analysieren kann und ich sende Dir das Ergebnis.

Es muss doch eine Möglichkeit geben die MIME-Types zu reinitialisieren. :eek:ps:

viele grüsse aus dem nachmittaglichen Oberbayern
vom bayernherz :thumbs:
 
OP
B

bayernherz

Hacker
hallo community,

josef-wien hat geschrieben
update-desktop-database
Im root Terminal
Code:
xxx-xxx:/home/bayernherz # update-desktop-database
xxx-xxx:/home/bayernherz #
Im user Terminal
Code:
bayernherz@xxx-xxx:~> update-desktop-database
Could not parse file "/usr/share/applications/hps-1320.desktop": Permission denied
The databases in [/usr/share/applications] could not be updated.

Benutzerrechte desktop-database
/usr/share/applications/hps-1320.desktop
Benutzer: root
Gruppe: root

Zugangsberechtigungen:
Eigentumer: rw-
Gruppe: r--

Und ich behaupte immer noch, das der user account keinen Zugriff auf die desktop-database hat,
da der root account 100% ig funktioniert.

viele grüsse aus dem abendlichen Oberbayern
vom bayernherz :thumbs:
 

josef-wien

Ultimate Guru
bayernherz schrieb:
Im user Terminal
Code:
The databases in [/usr/share/applications] could not be updated.
Das ist ja logisch, daß das ein normaler Benutzer nicht darf. Ob nach der Aktion von root die Datei /usr/share/applications/mimeinfo.cache einen vernünftigen Inhalt hat, erzählst Du uns leider nicht.

bayernherz schrieb:
/usr/share/applications/hps-1320.desktop
Wenn diese Datei für den Rest der Welt nicht lesbar ist, läuft etwas falsch, mehr dazu (und zur Frage, ob /usr/share/applications das einzige zu bearbeitende Verzeichnis ist) kann ich mangels openSUSE nicht sagen. Wie sieht es bei den anderen Dateien in diesem Verzeichnis aus?
 
OP
B

bayernherz

Hacker
hallo community,

josef-wien hat geschrieben:
bayernherz hat geschrieben:
/usr/share/applications/hps-1320.desktop

Wenn diese Datei für den Rest der Welt nicht lesbar ist, läuft etwas falsch, mehr dazu (und zur Frage, ob /usr/share/applications das einzige zu bearbeitende Verzeichnis ist) kann ich mangels openSUSE nicht sagen.
Auch mit root-Rechten kann ich die Zugangsgerechtigungen von /usr/share/applications/hps-1320.desktop nicht ändern.

josef-wie hat geschrieben:
Ob nach der Aktion von root die Datei /usr/share/applications/mimeinfo.cache einen vernünftigen Inhalt hat, erzählst Du uns leider nicht.
Da ich es nicht beurteilen kann nachfolgend den mimeinfo.cache
Code:
[MIME Cache]
application/atom+xml=kde4-akregator.desktop;
application/clarisworks=writer.desktop;calc.desktop;draw.desktop;
application/csv=calc.desktop;
application/epub+zip=kde4-active-documentviewer_epub.desktop;kde4-okularApplication_epub.desktop;
application/excel=calc.desktop;
application/macwriteii=writer.desktop;
application/mathml+xml=math.desktop;
application/mbox=kde4-kmail_view.desktop;
application/metalink+xml=kde4-kget.desktop;
application/msexcel=calc.desktop;
application/mspowerpoint=impress.desktop;
application/msword=writer.desktop;
application/ogg=ghb.desktop;kde4-amarok_containers.desktop;kde4-kaffeine.desktop;
application/oxps=kde4-active-documentviewer_xps.desktop;kde4-okularApplication_xps.desktop;
application/pdf=gimp.desktop;kde4-active-documentviewer_pdf.desktop;kde4-okularApplication_pdf.desktop;
application/pgp-encrypted=kde4-kgpg.desktop;
application/pgp-keys=kde4-kleopatra_import.desktop;kde4-kgpg.desktop;
application/pgp-signature=kde4-kgpg.desktop;
application/pkcs10=gcr-viewer.desktop;
application/pkcs10+pem=gcr-viewer.desktop;
application/pkcs12=gcr-viewer.desktop;
application/pkcs12+pem=gcr-viewer.desktop;
application/pkcs7-mime=kde4-kleopatra_import.desktop;gcr-viewer.desktop;
application/pkcs7-mime+pem=gcr-viewer.desktop;
application/pkcs8=gcr-viewer.desktop;
application/pkcs8+pem=gcr-viewer.desktop;
application/pkix-cert=gcr-viewer.desktop;
application/pkix-cert+pem=gcr-viewer.desktop;
application/pkix-crl=gcr-viewer.desktop;
application/pkix-crl+pem=gcr-viewer.desktop;
application/postscript=gimp.desktop;kde4-okularApplication_ghostview.desktop;kde4-active-documentviewer_ghostview.desktop;
application/prs.plucker=writer.desktop;kde4-active-documentviewer_plucker.desktop;kde4-okularApplication_plucker.desktop;
application/ram=kde4-kaffeine.desktop;
application/rdf+xml=kde4-akregator.desktop;
application/rss+xml=kde4-akregator.desktop;
application/rtf=writer.desktop;
application/tab-separated-values=calc.desktop;
application/vnd.corel-draw=draw.desktop;
application/vnd.google-earth.kml+xml=marble_kml.desktop;
application/vnd.google-earth.kmz=marble_kmz.desktop;
application/vnd.kde.bluedevil-sendfile=org.kde.bluedevilsendfile.desktop;
application/vnd.kde.fontspackage=org.kde.kfontview.desktop;
application/vnd.kde.kpatience.savedstate=org.kde.kpat.desktop;
application/vnd.kde.okular-archive=kde4-okular.desktop;
application/vnd.lotus-1-2-3=calc.desktop;
application/vnd.lotus-wordpro=writer.desktop;
application/vnd.mozilla.xul+xml=firefox.desktop;
application/vnd.ms-cab-compressed=org.kde.ark.desktop;
application/vnd.ms-excel=calc.desktop;
application/vnd.ms-excel.sheet.binary.macroenabled.12=calc.desktop;
application/vnd.ms-excel.sheet.macroenabled.12=calc.desktop;
application/vnd.ms-excel.template.macroenabled.12=calc.desktop;
application/vnd.ms-powerpoint=impress.desktop;
application/vnd.ms-powerpoint.presentation.macroenabled.12=impress.desktop;
application/vnd.ms-powerpoint.slideshow.macroEnabled.12=impress.desktop;
application/vnd.ms-powerpoint.template.macroenabled.12=impress.desktop;
application/vnd.ms-publisher=draw.desktop;
application/vnd.ms-word=writer.desktop;
application/vnd.ms-word.document.macroenabled.12=writer.desktop;
application/vnd.ms-word.template.macroenabled.12=writer.desktop;
application/vnd.ms-works=writer.desktop;calc.desktop;
application/vnd.ms-xpsdocument=kde4-active-documentviewer_xps.desktop;kde4-okularApplication_xps.desktop;
application/vnd.nokia.qt.qmakeprofile=qtcreator.desktop;
application/vnd.nokia.xml.qt.resource=qtcreator.desktop;
application/vnd.oasis.opendocument.chart=calc.desktop;
application/vnd.oasis.opendocument.chart-template=calc.desktop;
application/vnd.oasis.opendocument.database=base.desktop;
application/vnd.oasis.opendocument.formula=math.desktop;
application/vnd.oasis.opendocument.formula-template=math.desktop;
application/vnd.oasis.opendocument.graphics=draw.desktop;
application/vnd.oasis.opendocument.graphics-flat-xml=draw.desktop;xsltfilter.desktop;
application/vnd.oasis.opendocument.graphics-template=draw.desktop;
application/vnd.oasis.opendocument.presentation=impress.desktop;
application/vnd.oasis.opendocument.presentation-flat-xml=impress.desktop;xsltfilter.desktop;
application/vnd.oasis.opendocument.presentation-template=impress.desktop;
application/vnd.oasis.opendocument.spreadsheet=calc.desktop;
application/vnd.oasis.opendocument.spreadsheet-flat-xml=calc.desktop;xsltfilter.desktop;
application/vnd.oasis.opendocument.spreadsheet-template=calc.desktop;
application/vnd.oasis.opendocument.text=writer.desktop;kde4-active-documentviewer_ooo.desktop;kde4-okularApplication_ooo.desktop;
application/vnd.oasis.opendocument.text-flat-xml=writer.desktop;xsltfilter.desktop;
application/vnd.oasis.opendocument.text-master=writer.desktop;
application/vnd.oasis.opendocument.text-master-template=writer.desktop;
application/vnd.oasis.opendocument.text-template=writer.desktop;
application/vnd.oasis.opendocument.text-web=writer.desktop;
application/vnd.openofficeorg.extension=startcenter.desktop;
application/vnd.openxmlformats-officedocument.presentationml.presentation=impress.desktop;
application/vnd.openxmlformats-officedocument.presentationml.slide=impress.desktop;
application/vnd.openxmlformats-officedocument.presentationml.slideshow=impress.desktop;
application/vnd.openxmlformats-officedocument.presentationml.template=impress.desktop;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=calc.desktop;
application/vnd.openxmlformats-officedocument.spreadsheetml.template=calc.desktop;
application/vnd.openxmlformats-officedocument.wordprocessingml.document=writer.desktop;
application/vnd.openxmlformats-officedocument.wordprocessingml.template=writer.desktop;
application/vnd.palm=writer.desktop;
application/vnd.rn-realmedia=kde4-kaffeine.desktop;
application/vnd.stardivision.writer-global=writer.desktop;
application/vnd.sun.xml.base=base.desktop;
application/vnd.sun.xml.calc=calc.desktop;
application/vnd.sun.xml.calc.template=calc.desktop;
application/vnd.sun.xml.draw=draw.desktop;
application/vnd.sun.xml.draw.template=draw.desktop;
application/vnd.sun.xml.impress=impress.desktop;
application/vnd.sun.xml.impress.template=impress.desktop;
application/vnd.sun.xml.math=math.desktop;
application/vnd.sun.xml.writer=writer.desktop;
application/vnd.sun.xml.writer.global=writer.desktop;
application/vnd.sun.xml.writer.template=writer.desktop;
application/vnd.tcpdump.pcap=wireshark.desktop;
application/vnd.visio=draw.desktop;
application/vnd.wordperfect=writer.desktop;
application/wordperfect=writer.desktop;
application/x-123=calc.desktop;
application/x-5view=wireshark.desktop;
application/x-7z-compressed=org.kde.ark.desktop;
application/x-abiword=writer.desktop;
application/x-accountwizard-package=kde4-accountwizard.desktop;
application/x-aportisdoc=writer.desktop;
application/x-assistant=assistant5.desktop;
application/x-bcpio=org.kde.ark.desktop;
application/x-bittorrent=kde4-kget.desktop;kde4-ktorrent.desktop;
application/x-bzdvi=kde4-okularApplication_dvi.desktop;kde4-active-documentviewer_dvi.desktop;
application/x-bzip=org.kde.ark.desktop;
application/x-bzip-compressed-tar=org.kde.ark.desktop;
application/x-bzip2=org.kde.ark.desktop;
application/x-bzpdf=kde4-active-documentviewer_pdf.desktop;kde4-okularApplication_pdf.desktop;
application/x-bzpostscript=kde4-okularApplication_ghostview.desktop;kde4-active-documentviewer_ghostview.desktop;
application/x-cbr=kde4-okularApplication_comicbook.desktop;
application/x-cbt=kde4-okularApplication_comicbook.desktop;
application/x-cbz=kde4-okularApplication_comicbook.desktop;
application/x-cd-image=org.kde.dragonplayer.desktop;kde4-k3b.desktop;imagewriter.desktop;org.kde.ark.desktop;
application/x-chm=kde4-active-documentviewer_chm.desktop;kde4-okularApplication_chm.desktop;kde4-active-documentviewer_comicbook.desktop;
application/x-compress=org.kde.ark.desktop;
application/x-compressed-tar=org.kde.ark.desktop;
application/x-cpio=org.kde.ark.desktop;
application/x-cpio-compressed=org.kde.ark.desktop;
application/x-cue=kde4-k3b.desktop;
application/x-dbase=calc.desktop;
application/x-dbf=calc.desktop;
application/x-deb=org.kde.ark.desktop;
application/x-designer=qtcreator.desktop;designer5.desktop;designer4.desktop;
application/x-doc=writer.desktop;
application/x-dos_ms_excel=calc.desktop;
application/x-dvi=kde4-okularApplication_dvi.desktop;kde4-active-documentviewer_dvi.desktop;
application/x-etherpeek=wireshark.desktop;
application/x-excel=calc.desktop;
application/x-extension-mp4=ghb.desktop;
application/x-extension-txt=writer.desktop;
application/x-fictionbook+xml=writer.desktop;kde4-active-documentviewer_fb.desktop;kde4-okularApplication_fb.desktop;
application/x-flac=ghb.desktop;
application/x-font-bdf=org.kde.kfontview.desktop;
application/x-font-otf=org.kde.kfontview.desktop;
application/x-font-pcf=org.kde.kfontview.desktop;
application/x-font-ttf=org.kde.kfontview.desktop;
application/x-font-type1=org.kde.kfontview.desktop;
application/x-gpx+xml=marble_gpx.desktop;
application/x-gzdvi=kde4-okularApplication_dvi.desktop;kde4-active-documentviewer_dvi.desktop;
application/x-gzip=org.kde.ark.desktop;
application/x-gzpdf=kde4-active-documentviewer_pdf.desktop;kde4-okularApplication_pdf.desktop;
application/x-gzpostscript=kde4-okularApplication_ghostview.desktop;kde4-active-documentviewer_ghostview.desktop;
application/x-hps-mcf=hps-1320.desktop;
application/x-hwp=writer.desktop;
application/x-icq=kde4-kopete.desktop;
application/x-iptrace=wireshark.desktop;
application/x-iso=kde4-k3b.desktop;
application/x-iwork-keynote-sffkey=impress.desktop;
application/x-iwork-numbers-sffnumbers=calc.desktop;
application/x-iwork-pages-sffpages=writer.desktop;
application/x-java-archive=org.kde.ark.desktop;
application/x-java-jnlp-file=javaws.desktop;
application/x-k3b=kde4-k3b.desktop;
application/x-kcachegrind=kde4-kcachegrind.desktop;
application/x-kdenlive=org.kde.kdenlive.desktop;
application/x-kdevelop=kde4-kdevelop.desktop;kde4-kdevelop_ps.desktop;
application/x-kopete-emoticons=kde4-kopete.desktop;
application/x-ksysguard=org.kde.ksysguard.desktop;
application/x-kwallet=org.kde.kwalletmanager5.desktop;kde4-kwalletmanager.desktop;
application/x-lanalyzer=wireshark.desktop;
application/x-lha=org.kde.ark.desktop;
application/x-linguist=linguist5.desktop;linguist4.desktop;
application/x-lokalize-project=org.kde.lokalize.desktop;
application/x-lzma=org.kde.ark.desktop;
application/x-lzma-compressed-tar=org.kde.ark.desktop;
application/x-matroska=ghb.desktop;
application/x-mimearchive=kde4-kmail_view.desktop;
application/x-mobipocket-ebook=kde4-okularApplication_mobi.desktop;
application/x-ms-excel=calc.desktop;
application/x-msexcel=calc.desktop;
application/x-mswrite=writer.desktop;
application/x-netinstobserver=wireshark.desktop;
application/x-nettl=wireshark.desktop;
application/x-ogg=ghb.desktop;
application/x-ogm-audio=kde4-amarok.desktop;
application/x-osm+xml=marble_osm.desktop;
application/x-pagemaker=draw.desktop;
application/x-pcapng=wireshark.desktop;
application/x-pem-file=gcr-viewer.desktop;
application/x-pem-key=gcr-viewer.desktop;
application/x-pkcs12=kde4-kleopatra_import.desktop;gcr-viewer.desktop;
application/x-pkcs7-certificates=gcr-viewer.desktop;
application/x-ptoptimizer-script=PTBatcherGUI.desktop;hugin.desktop;
application/x-quattropro=calc.desktop;
application/x-quicktime-media-link=kde4-kaffeine.desktop;
application/x-radcom=wireshark.desktop;
application/x-rar=org.kde.ark.desktop;
application/x-raw-disk-image=imagewriter.desktop;
application/x-redhat-package-manager=yast2-packager.desktop;
application/x-rpm=yast2-packager.desktop;org.kde.ark.desktop;
application/x-shockwave-flash=flashplayer.desktop;
application/x-shorten=kde4-kaffeine.desktop;
application/x-snoop=wireshark.desktop;
application/x-sony-bbeb=writer.desktop;
application/x-source-rpm=org.kde.ark.desktop;
application/x-spkac=gcr-viewer.desktop;
application/x-spkac+base64=gcr-viewer.desktop;
application/x-sv4cpio=org.kde.ark.desktop;
application/x-sv4crc=org.kde.ark.desktop;
application/x-t602=writer.desktop;
application/x-tar=org.kde.ark.desktop;
application/x-tarz=org.kde.ark.desktop;
application/x-torrent=kde4-ktorrent.desktop;
application/x-uml=kde4-umbrello.desktop;
application/x-visualnetworks=wireshark.desktop;
application/x-webarchive=kde4-kfmclient_war.desktop;
application/x-wpg=draw.desktop;
application/x-wwf=kde4-active-documentviewer_pdf.desktop;kde4-okularApplication_pdf.desktop;
application/x-x509-ca-cert=kde4-kleopatra_import.desktop;gcr-viewer.desktop;
application/x-x509-user-cert=gcr-viewer.desktop;
application/x-xliff=org.kde.lokalize.desktop;
application/x-xpinstall=firefox.desktop;
application/x-xz=org.kde.ark.desktop;
application/x-xz-compressed-tar=org.kde.ark.desktop;
application/xhtml+xml=firefox.desktop;kde4-kfmclient_html.desktop;
application/xml=kde4-kfmclient_html.desktop;
application/xspf+xml=kde4-kaffeine.desktop;
application/zip=org.kde.ark.desktop;
audio/aac=kde4-amarok.desktop;
audio/ac3=ghb.desktop;kde4-kaffeine.desktop;
audio/basic=kde4-kaffeine.desktop;
audio/flac=kde4-amarok.desktop;
audio/mp4=ghb.desktop;kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/mpeg=ghb.desktop;kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/mpegurl=kde4-amarok.desktop;
audio/ogg=ghb.desktop;kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/vnd.rn-realaudio=kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/vorbis=kde4-amarok.desktop;
audio/webm=kde4-kaffeine.desktop;
audio/x-aiff=kde4-kaffeine.desktop;
audio/x-amzxml=clamz.desktop;
audio/x-flac=ghb.desktop;kde4-kaffeine.desktop;
audio/x-it=kde4-kaffeine.desktop;
audio/x-m4b=kde4-kaffeine.desktop;
audio/x-matroska=ghb.desktop;kde4-kaffeine.desktop;
audio/x-mod=kde4-kaffeine.desktop;
audio/x-mp3=ghb.desktop;kde4-amarok.desktop;
audio/x-mpeg=ghb.desktop;
audio/x-mpegurl=kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/x-ms-asx=kde4-kaffeine.desktop;
audio/x-ms-wma=kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/x-musepack=kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/x-oggflac=kde4-amarok.desktop;
audio/x-pn-realaudio=kde4-amarok.desktop;
audio/x-s3m=kde4-kaffeine.desktop;
audio/x-scpls=kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/x-speex=kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/x-stm=kde4-kaffeine.desktop;
audio/x-tta=kde4-kaffeine.desktop;
audio/x-voc=kde4-kaffeine.desktop;
audio/x-vorbis=ghb.desktop;kde4-amarok.desktop;
audio/x-vorbis+ogg=kde4-amarok.desktop;
audio/x-wav=kde4-amarok.desktop;kde4-kaffeine.desktop;
audio/x-wavpack=kde4-kaffeine.desktop;
audio/x-xm=kde4-kaffeine.desktop;
image/bmp=gimp.desktop;kde4-gwenview.desktop;
image/fax-g3=kde4-active-documentviewer_fax.desktop;kde4-okularApplication_fax.desktop;
image/g3fax=gimp.desktop;kde4-active-documentviewer_fax.desktop;kde4-okularApplication_fax.desktop;
image/gif=gimp.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;
image/jp2=gimp.desktop;
image/jpeg=gimp.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;pto_gen.desktop;
image/jpeg2000=gimp.desktop;
image/jpx=gimp.desktop;
image/png=gimp.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;
image/svg+xml=gimp.desktop;
image/tiff=gimp.desktop;kde4-okularApplication_tiff.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;kde4-active-documentviewer_tiff.desktop;pto_gen.desktop;
image/vnd.djvu=kde4-okularApplication_djvu.desktop;kde4-active-documentviewer_djvu.desktop;
image/x-bmp=kde4-showfoto.desktop;
image/x-bzeps=kde4-okularApplication_ghostview.desktop;kde4-active-documentviewer_ghostview.desktop;
image/x-compressed-xcf=gimp.desktop;
image/x-dcraw=kde4-dngconverter.desktop;kde4-showfoto.desktop;
image/x-eps=kde4-okularApplication_ghostview.desktop;kde4-gwenview.desktop;kde4-active-documentviewer_ghostview.desktop;
image/x-fits=gimp.desktop;
image/x-freehand=draw.desktop;
image/x-gimp-gbr=gimp.desktop;
image/x-gimp-gih=gimp.desktop;
image/x-gimp-pat=gimp.desktop;
image/x-gzeps=kde4-okularApplication_ghostview.desktop;kde4-active-documentviewer_ghostview.desktop;
image/x-ico=kde4-gwenview.desktop;
image/x-icon=gimp.desktop;
image/x-pcx=gimp.desktop;
image/x-portable-anymap=gimp.desktop;
image/x-portable-bitmap=gimp.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;
image/x-portable-graymap=gimp.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;
image/x-portable-pixmap=gimp.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;
image/x-psd=gimp.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;
image/x-psp=gimp.desktop;
image/x-sgi=gimp.desktop;
image/x-tga=gimp.desktop;
image/x-webp=kde4-gwenview.desktop;
image/x-wmf=gimp.desktop;
image/x-xbitmap=gimp.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;
image/x-xcf=gimp.desktop;
image/x-xcursor=gimp.desktop;
image/x-xpixmap=gimp.desktop;kde4-gwenview.desktop;kde4-showfoto.desktop;
image/x-xwindowdump=gimp.desktop;
inode/directory=org.kde.dolphin.desktop;org.kde.dolphinsu.desktop;kde4-gwenview.desktop;kde4-kfmclient_dir.desktop;kde4-cervisia.desktop;
message/rfc822=kde4-kmail_view.desktop;
text/calendar=kde4-korganizer.desktop;
text/comma-separated-values=calc.desktop;
text/csv=calc.desktop;
text/html=firefox.desktop;kde4-kfmclient_html.desktop;
text/mathml=math.desktop;
text/mml=firefox.desktop;
text/plain=writer.desktop;kde4-active-documentviewer_txt.desktop;kde4-okularApplication_txt.desktop;org.kde.kate.desktop;org.kde.kwrite.desktop;
text/rtf=writer.desktop;
text/spreadsheet=calc.desktop;
text/tab-separated-values=calc.desktop;
text/x-c++hdr=qtcreator.desktop;
text/x-c++src=qtcreator.desktop;
text/x-comma-separated-values=calc.desktop;
text/x-csv=calc.desktop;
text/x-gettext-translation=org.kde.lokalize.desktop;
text/x-patch=org.kde.kompare.desktop;
text/x-qml=qtcreator.desktop;
text/x-qt.qbs=qtcreator.desktop;
text/x-qt.qml=qtcreator.desktop;
text/x-suse-ymp=yast2-metapackage-handler.desktop;
text/x-suse-ymu=yast2-metapackage-handler-ymu.desktop;
text/x-xmi=kde4-umbrello.desktop;
text/x-xsrc=qtcreator.desktop;
text/xml=firefox.desktop;
video/avi=org.kde.dragonplayer.desktop;
video/dv=kde4-kaffeine.desktop;
video/mp2t=kde4-kaffeine.desktop;
video/mp4=org.kde.dragonplayer.desktop;ghb.desktop;kde4-kaffeine.desktop;
video/mp4v-es=ghb.desktop;
video/mpeg=org.kde.dragonplayer.desktop;ghb.desktop;kde4-kaffeine.desktop;
video/msvideo=ghb.desktop;
video/ogg=org.kde.dragonplayer.desktop;ghb.desktop;kde4-kaffeine.desktop;
video/quicktime=org.kde.dragonplayer.desktop;ghb.desktop;kde4-kaffeine.desktop;
video/vnd.divx=ghb.desktop;
video/vnd.rn-realvideo=org.kde.dragonplayer.desktop;kde4-kaffeine.desktop;
video/webm=org.kde.dragonplayer.desktop;
video/x-anim=kde4-kaffeine.desktop;
video/x-avi=ghb.desktop;
video/x-flic=org.kde.dragonplayer.desktop;kde4-kaffeine.desktop;
video/x-flv=org.kde.dragonplayer.desktop;kde4-kaffeine.desktop;
video/x-m4v=ghb.desktop;
video/x-matroska=org.kde.dragonplayer.desktop;ghb.desktop;kde4-kaffeine.desktop;
video/x-mng=kde4-kaffeine.desktop;
video/x-mpeg=ghb.desktop;
video/x-ms-asf=org.kde.dragonplayer.desktop;kde4-amarok_containers.desktop;kde4-kaffeine.desktop;
video/x-ms-wmv=org.kde.dragonplayer.desktop;kde4-kaffeine.desktop;
video/x-msvideo=org.kde.dragonplayer.desktop;kde4-kaffeine.desktop;
video/x-nsv=kde4-kaffeine.desktop;
video/x-ogm+ogg=org.kde.dragonplayer.desktop;ghb.desktop;kde4-kaffeine.desktop;
video/x-theora+ogg=org.kde.dragonplayer.desktop;ghb.desktop;kde4-kaffeine.desktop;
x-content/blank-bd=kde4-k3b.desktop;
x-content/blank-cd=kde4-k3b.desktop;
x-content/blank-dvd=kde4-k3b.desktop;
x-content/blank-hddvd=kde4-k3b.desktop;
x-content/image-dcf=kde4-digikam.desktop;
x-content/image-picturecd=kde4-digikam.desktop;
x-content/video-dvd=ghb.desktop;
x-content/video-svcd=ghb.desktop;
x-content/video-vcd=ghb.desktop;
x-scheme-handler/ftp=firefox.desktop;
x-scheme-handler/geo=marble_geo.desktop;
x-scheme-handler/http=firefox.desktop;
x-scheme-handler/https=firefox.desktop;
x-scheme-handler/irc=org.kde.konversation.desktop;
x-scheme-handler/ircs=org.kde.konversation.desktop;
x-scheme-handler/magnet=kde4-ktorrent.desktop;
x-scheme-handler/mailto=kmailservice5.desktop;kde4-kmailservice.desktop;kde4-KMail2.desktop;
x-scheme-handler/rlogin=ktelnetservice5.desktop;kde4-ktelnetservice.desktop;
x-scheme-handler/ssh=ktelnetservice5.desktop;kde4-ktelnetservice.desktop;
x-scheme-handler/telnet=ktelnetservice5.desktop;kde4-ktelnetservice.desktop;
x-scheme-handler/vnd.libreoffice.cmis=startcenter.desktop;
x-scheme-handler/worldwind=marble_worldwind.desktop;
Zugangsberechtigungen:
Benutzer: root
Gruppe: root

Eigentumer: rw-
Gruppe: r--
Sonstige: ---

Die Fehlersynthome bei Aufruf von z.B. firefox bleiben wie gehabt.
Nach Aufruf popt ein Dialog mit nachflgendem Inhalt auf:
Die MIMI-Typen können nicht gefunden werden:
Inode/directory
Inode/blockdevice
Inode/chardevice
Inode/socket
Inode/fifo
application/x-shellscript
application/x-executable
application/x-desktop

wird das Fenster quittiert, popt ein weiteres auf:
Der Mime-Typ "application/octet-stream" kann nicht gefunden werden

Wird dieser Dialog quittiert, öffnet sich Firefox u. kann bedingt benutzt werden.

Es ist auch nicht möglich mittels Dolphin eine PDF-Datei oder eine JPG-Datei sichtbar zu machen.

Und nocheinmal: Im Root-Account funktioniert alles 100% ig.
Das riecht doch nach fehlenden Zugangsrechten für die MIME-Types im user account.

viele grüsse aus dem morgendliche Oberbayern
vom bayernherz :thumbs:
 
OP
B

bayernherz

Hacker
hallo community,

marce hat geschrieben:
hier bei mir, kein OpenSuse - root:root, rw-r--r--
Zugangsberechtigungen mimeinfo.cache:
habe ich geändert auf:
Benutzer: root
Gruppe: root
Eigentumer: rw-
Gruppe: r--
Sonstige: r--

Fazit: Gleiches Fehlerbild !
Code:
update-desktop-database
setzt die Zugangsrechte wieder auf:
Benutzer: root
Gruppe: root
Eigentumer: rw-
Gruppe: r--
Sonstige: ---

Da muss noch etwas anderes sein. :-?
Und nocheinmal: Im Root-Account funktioniert alles 100% ig.

viele grüsse aus dem mittaglichen Oberbayern
vom bayernherz :thumbs:
 

josef-wien

Ultimate Guru
Was ergibt als root:
Code:
cd /usr/share/applications; lsattr hps-1320.desktop; getfacl hps-1320.desktop mimeinfo.cache .; umask
 
OP
B

bayernherz

Hacker
hallo community,

Code:
cd /usr/share/applications; lsattr hps-1320.desktop; getfacl hps-1320.desktop mimeinfo.cache .; umask
-------------e-- hps-1320.desktop
# file: hps-1320.desktop
# owner: root
# group: root
user::rw-
group::r--
other::---

# file: mimeinfo.cache
# owner: root
# group: root
user::rw-
group::rw-
other::r--

# file: .
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

0007
Hinweis: :wink:
mineinfo.cache habe ich per Hand zum Test auf r-- gesetzt.
Nach jedem
Code:
update-desktop-database
steht es auf ---

viele grüsse aus den sonnigen Oberbayern
vom bayernherz :thumbs:
 

josef-wien

Ultimate Guru
bayernherz schrieb:
Ich kann mir nicht vorstellen, daß das bei 42.1 die Grundeinstellung ist. Da muß wohl jemand am Werk gewesen sein. Wenn für alle von root geschriebenen Dateien die Schreibberechtigung für Besitzer und Gruppe vergeben wird, während der Rest der Welt keinen Zugriff hat, werden Probleme förmlich herbeigesehnt. Das wird wohl schwer rückgängig zu machen sein, denn wer will wissen, bei welchen Dateien diese kontraproduktive Berechtigung vergeben wurde.

bayernherz schrieb:
Auch mit root-Rechten kann ich die Zugangsgerechtigungen von /usr/share/applications/hps-1320.desktop nicht ändern.
Dafür sehe ich keine Begründung.
 
OP
B

bayernherz

Hacker
Hallo community,

josef-wien hat geschrieben:
umask 0007
Ich kann mir nicht vorstellen, daß das bei 42.1 die Grundeinstellung ist. Da muß wohl jemand am Werk gewesen sein. Wenn für alle von root geschriebenen Dateien die Schreibberechtigung für Besitzer und Gruppe vergeben wird, während der Rest der Welt keinen Zugriff hat, werden Probleme förmlich herbeigesehnt. Das wird wohl schwer rückgängig zu machen sein, denn wer will wissen, bei welchen Dateien diese kontraproduktive Berechtigung vergeben wurde.
Es scheint so, als hätte ich da ins Klo gefasst ! :-x
Was heisst das für mich ?
Neuinstallation von openSuSE Leap oder gibt es da eine Lösung ??
Ich würde mich über einen Tipp von Euch sehr freuen.

viele grüsse aus dem abendlichen Oberbayern
vom bayernherz :thumbs:
 
OP
B

bayernherz

Hacker
hallo community,

ich möchte mich ganz herzlich für Euere bisherige Unterstützung bedanken.
josef-wien hat geschieben:
Ich kann mir nicht vorstellen, daß das bei 42.1 die Grundeinstellung ist. Da muß wohl jemand am Werk gewesen sein. Wenn für alle von root geschriebenen Dateien die Schreibberechtigung für Besitzer und Gruppe vergeben wird, während der Rest der Welt keinen Zugriff hat, werden Probleme förmlich herbeigesehnt. Das wird wohl schwer rückgängig zu machen sein, denn wer will wissen, bei welchen Dateien diese kontraproduktive Berechtigung vergeben wurde.

Hierzu habe ich noch eine eindringliche Frage:
Lässt sich das System noch reparieren, oder ist eine Neuinstallation angesagt.
Ich würde mich über eine Antwort von Euch sehr freuen, da mir das System fehlt.
Ich bnötige es dringend für Bildbearbeitung, die ich mit meinem Laptop nicht durchführen kann.
Daher kann ich monentan meine fotografischen Tätigkeiten nicht mehr durchführen.

Ich möchte Euch daher um einen eindeutigen Ratschlag bitten:
Reparatur möglich oder Neuinstallation unumgänglich.

Vielen Dank.

viele grüsse aus dem morgendliche Oberbayern
vom bayernherz :thumbs:
 

josef-wien

Ultimate Guru
Ich weiß keinen Weg, die falsch berechtigten Dateien herauszufinden, zumal einzelne von root und anderen Systembenutzern angelegte Dateien nach dem Schreiben gezielt so berechtigt worden sein könnten.

P. S. Mit welcher der zahlreichen Möglichkeiten hast Du Deine umask-Definition getroffen?
 
OP
B

bayernherz

Hacker
hallo community,

josef-wien hat geschrieben:
P. S. Mit welcher der zahlreichen Möglichkeiten hast Du Deine umask-Definition getroffen?
Kann ich Dir genau sagen und auch zu welchem Zeitpunkt.
Ich habe nach einer Möglichkeit gesucht um einer selbstdefinierten Benutzergrupper die UMASK 0007 zu vergeben.
Bisher gibt es nur einen user-account auf dem System.
Dazu habe ich in der /etc/profile die UMASK von 0022 auf 0007 gesetzt.
Code:
#
# The user file-creation mask
#
# The global umask value is stored in /etc/login.defs and
# will be set by pam_umask.so (see "man pam_umask").
#umask 022
umask 0007
Weiterhin in etc/login.defs die UMASK von 030 auf 0007 gesetzt.
Code:
# Default initial "umask" value used by login on non-PAM enabled systems.
# Default "umask" value for pam_umask on PAM enabled systems.
# UMASK is also used by useradd and newusers to set the mode of new home
# directories.
# 022 is the default value, but 027, or even 077, could be considered
# better for privacy. There is no One True Answer here: each sysadmin
# must make up her mind.
UMASK		0007
# UMASK		030
Leider habe ich die Rechte von root nicht ausgetestet, daher der fatale Fehler.
Das ganze wurde am 13.06.2016 durchgeführt.
Das System lief bis zur Installation von dm-Fotowelt fehlerfrei.

Würde mich freuen, wenn wir das System noch retten könnten, da ich es auch erst Anfang Juni 2016 installiert habe. :wink:

viele Grüsse aus dem abendlichen Oberbayern
vom bayernherz :thumbs:
 

josef-wien

Ultimate Guru
bayernherz schrieb:
um einer selbstdefinierten Benutzergrupper die UMASK 0007 zu vergeben
Und warum hast Du das dann nicht so realisiert?

Ein Ratschlag nach der Neuinstallation: Laß die Finger von den Dateien /etc/login.defs und /etc/profile. Systemweite Definitionen gehören in eine Datei irgendetwas.sh unter /etc/profile.d/ (bei openSUSE gehen wahrscheinlich zusätzlich immer noch /etc/profile.local und /etc/bash.bashrc.local), aber abhängig von Eigenschaften eines menschlichen Benutzers (z. B. if test $UID -ge 1000 ..., if test $(id -g) -eq 100 ...). Jeder Benutzer kann seine individuelle Einstellung in ~/.bashrc festlegen.
 
Oben