CMS Installer

Das Board für alle Fragen und Diskussionen, die keinen direkten Bezug zu CMS made simple haben
Post Reply
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

CMS Installer

Post by nockenfell »

Vor längerem habe ich mal in einem Thread (http://forum.cmsmadesimple.org/index.php/topic,40691.msg195320.html) geschrieben, dass ich daran bin, ein Script zur einfachen Installation / Update von CMS Made Simple zu schreiben. Idee dahinter ist, dass mittels eines Script die nötigen Dateien heruntergeladen, entpackt, der Installer von CMS Made Simple aufgerufen und am Schluss die nötigen Dateien gelöscht werden.

Nun habe ich eine erste Version fertig gestellt.

Features:

- Login mit User aus dem CMS Datenbank (nur bei Update)
- Backup der Daten und der Datenbank vor dem Update
- Auswahl der Sprachdateien (welche sollen installilert werden)
- Download und Entpacken der aktuellen Version von CMSMS
- Öffnen des /install Tools von CMSMS mittels Lightbox
- Löschen der ausgewählten Dateien (/install)

Konfiguration:

Folgende Möglichkeiten gibt es derzeit zur Konfiguration:

Code: Select all

// CMSMS Downloadseite
$btcfg['cmsDlPage'] = "http://dev.cmsmadesimple.org/project/files/6";

// Files und Ordner die nach der Installation gelöscht werden sollen
$btcfg['delfiles']	= array('favicon_cms.ico');
$btcfg['delfolder']	= array('doc','uploads/NCleanBlue','uploads/ngrey');
Folgendes muss beachtet werden
- Der Installer läuft komplett Standalone. Es braucht keine weiteren Daten für eine Installation
- Die Dateien werden mit dem User des Webservers gespeichert.
- Das entpacken der Daten funktioniert mit der gleichen Class wie auch im FileManager gebraucht


Getestet ist der CMS Installer bisher unter Windows mit xampp sowie auf einem Linux Webserver mit installiertem suPHP (hier läuft PHP mit der UID des Webspace-Users)

Ausschau auf neue Features:
- Auswahl welche Version von CMSMS installiert werden soll (z.B. Problematik 1.7.0 / 1.6.7)
- robots.txt und gsitemap.php automatisch installieren
- CMSMS Security .htaccess Files automatisch installieren
- Upload der Backupfiles nach dropbox.com
- Bugfixes
- Wünsche von euch?

Viel Spass beim testen.
Attachments

[The extension txt has been deactivated and can no longer be displayed.]

Last edited by nockenfell on Fri Apr 23, 2010 8:20 am, edited 1 time in total.
[this message is written with 100% recycled bits]
NaN

Re: CMS Installer

Post by NaN »

Ersteinmal besten Dank dafür.
Das könnte wirklich vielen Usern eine Menge Arbeit ersparen und sollte evtl. mit in den Core von CMSms aufgenommen werden.

Allerdings hab ich da mal eine ganz blöde Frage: Wie benutzt man dieses Ding?

(Ich frage jetzt mal stellvertretend für alle DAUs die sich die gleiche Frage stellen werden ;) )
Last edited by NaN on Fri Apr 23, 2010 1:43 pm, edited 1 time in total.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

Re: CMS Installer

Post by nockenfell »

NaN wrote:
Ersteinmal besten Dank dafür.
Das könnte wirklich vielen Usern eine Menge Arbeit ersparen und sollte evtl. mit in den Core von CMSms aufgenommen werden.

Allerdings hab ich da mal eine ganz blöde Frage: Wie benutzt man dieses Ding?

:P
Die Anleitung fehlt...  :-[

Du musst die angehängte txt Datei als php Datei speichern. Danach speicherst du diese im Root-Verzeichnis deiner Webseite und rufst sie mit www.deineseite.com/cmsinstaller.php (oder auch www.deineseite.com/cms/cmsinstaller) auf.

Neu-Installation
Bei einer Neu-Installation wird nun die aktuelle Version von CMS Made Simple angezeigt. Mit Klicken"installieren" geht es auf die nächste Seite. Hier werden alle Sprachdateien zur Auswahl gegeben. Du kannst nun die benötigten Sprachen selektieren. Danach unten auf "Herunterladen und entpacken" klicken. Nun werden die Base Datei sowie die gewählten Sprachdateien heruntergeladen und entpackt. (Dazu werden Meldungen angezeigt). Nun geht es mit "Zum CMS Install Tool" weiter. Hier bekommst du einen Link um in einer Lightbox den Installer von CMSMS (/install) öffnen und die Seite installieren.
Zum Schluss gehst du auf "Installation bereinigen". Hier werden alle überflüssigen oder in der Config gewünschten Files gelöscht.

Update einer bestehenden Version
Zuerst musst du dich einloggen. Hierzu meldest du dich mit einem Backend-Usernamen an (der User muss Admin sein). Nach dem erfolgreichen einloggen, kommst du zur Startseite des Installers. Hier wird die aktuelle installierte Version wie auch die aktuelle Version von CMSMS angezeigt.
Mit "Backup des bestehenden Systems" wird nun ein Backup der Datenbank wie auch der Daten angefertigt. Die erzeugten Files können heruntergeladen werden.
Mit "CMS herunterladen" geht es wie bei der Neuinstallation weiter. (Sprachdateien auswählen, danach Herunterladen und entpacken)
Danach geht es mit "Zum CMS Install Tool" weiter. Hier bekommst du zwei Links (normalen Installer oder Upgrade Installer) um in einer Lightbox den Installer von CMSMS (/install) öffnen und die Seite installieren.
Zum Schluss gehst du auf "Installation bereinigen". Hier werden alle überflüssigen oder in der Config gewünschten Files gelöscht.

Soweit die Anleitung dazu. Wenn weitere Fragen dazu da sind, diese nur stellen.
[this message is written with 100% recycled bits]
mike-r

Re: CMS Installer

Post by mike-r »

Spitzentool! Ich bin zwar noch am Testen, aber möchte schon mal kleine Anregungen geben.

- labels für die Sprachauswahl wäre fein (erstinstallation)
-- Evtl. sogar noch die Sprache des Browser abfragen und vorauswählen.
- installiere ich mit dem Tool mache ich mich davon (bzw. vom CMSMS-Backend) abhängig, da die Dateien keine FTP-Rechte bekommen. Muss ich den Installer irgendwie chmodden, oder ist dieses Problem nicht zu umgehen? (Oder hab ich ein Brett vorm Kopf?)

Aktuell habe ich das Problem, dass ich vom Installer erstellte Ordner nicht per FTP löschen kann. Auch einige Dateien sind dabei.

Bei der Installation bekomme ich nach dem Download etwa 1 Dillion Zeilen:

Code: Select all

Warning: chown() [function.chown]: Operation not permitted in /.../cmsinstaller.php on line 787
Hängt wohl mit den Rechten zusammen:

Code: Select all

chown($file['name'], $file['stat'][4]);l
Ganz unten dann:

Code: Select all

Das Datei cmsmadesimple-1.7-base.tar.gz wurde mit folgenden Meldungen entpackt: 
Could not open ././@LongLink for writing.
Die Datei cmsmadesimple-1.7-langpack-de_DE.tar.gz wurde erfolgreich entpackt

Kann man da was machen? Würde gern in Zukunft den Installer verwenden.
Last edited by mike-r on Tue Apr 27, 2010 9:00 pm, edited 1 time in total.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

Re: CMS Installer

Post by nockenfell »

mike-r wrote: Spitzentool! Ich bin zwar noch am Testen, aber möchte schon mal kleine Anregungen geben.

- labels für die Sprachauswahl wäre fein (erstinstallation)
Was meinst du mit Label?
-- Evtl. sogar noch die Sprache des Browser abfragen und vorauswählen.
Das kann ich einbauen. Werde ich in den nächsten Tagen machen
- installiere ich mit dem Tool mache ich mich davon (bzw. vom CMSMS-Backend) abhängig, da die Dateien keine FTP-Rechte bekommen. Muss ich den Installer irgendwie chmodden, oder ist dieses Problem nicht zu umgehen? (Oder hab ich ein Brett vorm Kopf?)
Aktuell habe ich das Problem, dass ich vom Installer erstellte Ordner nicht per FTP löschen kann. Auch einige Dateien sind dabei.
Das ist derzeit ein Problem. Es ist das gleiche wie du auch im uploads Ordner hast. Eine Lösung habe ich im Moment noch nicht. Ich muss mal schauen wie Wordpress dies löst. Dort kannst du Plugins oder auch das ganze Wordpress per Klick updaten. Da ich keinen Webserver habe auf dem der Webserver-User mit einem anderen User läuft als der FTP User, kann ich das schlecht testen.
Bei der Installation bekomme ich nach dem Download etwa 1 Dillion Zeilen:

Code: Select all

Warning: chown() [function.chown]: Operation not permitted in /.../cmsinstaller.php on line 787
Hängt wohl mit den Rechten zusammen:

Code: Select all

chown($file['name'], $file['stat'][4]);l
Muss ich mir anschauen. Könnte mit den rechten zusammenhängen. Hast du eine jungfräuliche Installation gemacht oder ein Update?
Ganz unten dann:

Code: Select all

Das Datei cmsmadesimple-1.7-base.tar.gz wurde mit folgenden Meldungen entpackt: 
Could not open ././@LongLink for writing.
Die Datei cmsmadesimple-1.7-langpack-de_DE.tar.gz wurde erfolgreich entpackt
Wenn du in die Datei reinschaust, findest du folgendes (poste wenn was anderes steht):

Code: Select all

./modules/TinyMCE/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif 
Ich bekomme diesen Fehler z.T. auch. Ich denke hier kann er ev eine Datei nicht schreiben. Den Grund muss ich noch herausfinden.
Kann man da was machen? Würde gern in Zukunft den Installer verwenden.
Aber sicher, hoffe ich doch stark. Eine Lösung gibt es immer. Wenn einer einen Lösungsansatz für ein Problem hat, mir bitte eine DM oder hier im Forum posten.
[this message is written with 100% recycled bits]
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

Re: CMS Installer

Post by nockenfell »

Weiss einer wie man in CMSMS die installierten Sprachen heraus findet?
[this message is written with 100% recycled bits]
geraldo
Forum Members
Forum Members
Posts: 10
Joined: Fri Dec 12, 2008 10:38 am
Location: Calheta de S. Miguel, Ilha de Santiago, Cabo Verde

Re: CMS Installer

Post by geraldo »

nockenfell wrote: Ausschau auf neue Features:
- Wünsche von euch?
Supersache, lokal funzt es prima

Eine Anregung: Kannst Du auch abfragen, ob curl installiert ist, sonst gibt es - zumindestens bei einer Default-Installation von XAMPP einen "

Code: Select all

function getFile($url)
{
	$filename = basename($url);
	$ch = curl_init();

Fatal error: Call to undefined function curl_init() in E:\WebDEV\xampp\htdocs\cmsms\cmsinstaller.php on line 1106 = function getFile($url)
"

Sowas muesste imho ins Core integriert werden
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

Re: CMS Installer

Post by nockenfell »

Hallo Geraldo

Danke für das Feedback. Ich bin in der letzten Zeit nicht faul gewesen und habe den CMSInstaller weiter entwickelt. Mittlerweile bin ich bei der Version 0.3.2 angelangt.

Hier gibt es die aktuelle Version:
http://dl.dropbox.com/u/1392406/cmsinst ... taller.php

Die Anregung von dir habe ich integriert. Ich schau mal, dass ich eine alternative zu Curl einbaue. Mal schauen ob es einen dritten Weg zwischen Curl und file_get_contents. Curl ist nicht immer geladen und file_get_contents hat ein Problem mit url_allow_fopen.

Hier das Changelog:

/*-----------------------------------------------------------
| Changelog
|
| v0.3.2
| Fehlermeldung wenn curl nicht eingebunden ist
| Warnhinweis wenn exec nicht aktiv ist
| Einbinden von Meldungsfenstern für Hinweise, Erfolg, etc.
| Backup Zip per exec erstellen (kein Memory Problem mehr)
| API-Key zum externen Abfragen der installierten CMS Version
| Sicherheitseinstellungen zum Unterbinden des Downloads einer Backup Datei in die .htaccess schreiben
| verfeinerte Auswahl was nach der Installation gelöscht werden soll
| Download der bestehenden Backupfiles direkt auf der Startseite
|
| v0.3.1
| chmod Problem nach dem entpacken gelöst. (chmod in der archive Class deaktiviert)
| Secure Download der Backupfiles (Files können im .htaccess gesperrt werden)
| Hinweis wie das .htaccess File zum Schutz der Backups erweitert werden muss
| loading Grafik eingebunden während dem Laden der Seite
| beim Backup werden nur die CMS spezifischen Ordner ohne "uploads" gesichert
| jquery direkt im File integriert, damit eine Fremdladezeit weniger
|
| v0.3
| Dropbox Upload des Backups
| Auswahl der Version des Updates (>= aktuell installierte Version)
| Checkbox ob Default-Template Dateien beim Bereinigen gelöscht werden sollen
| Bei Update und Installation admin Ordner umbenennen können
| Beim Backup werden nur die CMSMS spezifischen Ordner gesichert
|
| v0.2.1
| Betriebsystem Erkennung -> exec funktioniert unter Win nicht
| Admin-Ordner während der Installation umbenennen
|
| v0.2
| Entpacken des tar.gz Archivs mittels exec wenn diese Funktion 
| zur Verfügung steht -> Derzeit Probleme mit den Berechtigungen
| beim entpacken mittels archive_class
|
| v0.1
| Initial Release
+----------------------------------------------------------*/

In der aktuellen Version habe ich die Möglichkeit geschaffen die installierte CMS Version von extern abzufragen. Dazu habe ich folgendes Plugin geschrieben:

function.cmsinstallerapi.php
http://dl.dropbox.com/u/1392406/cmsinst ... lerapi.php

Code: Select all

<?php

class getInstalledCMSVersion {
	protected $url;
	protected $apikey;
	protected $errors = array();
	
	public function __construct($url, $apikey) {
	    if (strpos($this->url,"/cmsinstaller.php") === FALSE)
	    	$this->url = $url."/cmsinstaller.php"; 
	    else 
	    	$this->url = $url;	

	    if (strpos($this->url ,"http://") === FALSE)
	    	$this->url = "http://".$this->url;

	    $this->apikey = $apikey;
	}
	
	public function getVersion()
	{
		$version = $this->getData();
		
		$retval  = "<p><strong>". parse_url($this->url, PHP_URL_HOST)."</strong><br />\n";
		$retval .= "Version: " . $version . "<br />\n";
		$retval .= "<a href=\"".$this->url."\" target=\"_blank\">zum CMSInstaller</a></p>\n";
		
		if (count($this->errors) > 0) {
			echo "<p><strong>Fehler - ". parse_url($this->url, PHP_URL_HOST)."<strong><br />\n";
			print_r($this->errors);
			foreach ($this->errors as $error) {
				echo $error . "<br />\n";
			}	
			return;
		}
		
		echo $retval;
	}
	
	protected function getData() {
		
		if ($this-url == "") {
			$this->errors[] = "Es ist keine URL definiert";
			return;
		}
		if (strlen($this->apikey) != 40) {
			$this->errors[] = "Der API Key muss 40 Zeichen enthalten";
			return;
		}
		
		$getData = array();
		$getData = array('get' => 'version', 'api' => $this->apikey);
		
		$ch = curl_init();
		curl_setopt($ch,CURLOPT_URL,$this->url."?get=version&api=".$this->apikey);
		curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
		curl_setopt($ch,CURLOPT_BINARYTRANSFER,1);
		curl_setopt($ch,CURLOPT_HEADER,0);
		$output = curl_exec($ch);
		$len = curl_getinfo($ch,CURLINFO_SIZE_DOWNLOAD);
		if ($len == 0) {
			$this->errors[] = "Die Version konnte nicht ermittelt werden - ".$this->url."?get=version&api=".$this->apikey."\n";
			return "";
		}
		return $output;	
	}
	
}


function smarty_cms_function_cmsinstallerapi($params, &$smarty)
{
	$cmsinstaller= new getInstalledCMSVersion($params['url'],$params['apikey']);
	$cmsinstaller->getVersion();
}

function smarty_cms_help_function_cmsinstallerapi() {
?>
<h3>What does this do?</h3>
<p>Display the Version of a CMS Version by cmsinstaller.php. </p>
<h3>How do I use it?</h3>
<p>Just insert the tag into your template/page like <code>{cmsinstallerapi url="" apikey=""}</code>.</p>
<h3>What parameters does it take?</h3>
<p>
<ul>
<li><em>(require)</em> <tt>url</tt> - of the CMSMS Installation</li>
<li><em>(require)</em> <tt>apikey</tt> - the apikey from cmsinstaller.php.</li>
</ul>
</p>
<?php
}

function smarty_cms_about_function_cmsinstallerapi() {
?>
<p>Author: Lukas Blatter <<a href="mailto:lukas.blatter@gmail.com">lukas.blatter@gmail.com</a>>
</p>
<p>Version 0.1</p>
<p>Change History:<br />
0.1 - Alpha version released.
</p>
<?php
}
?>
Das ganze kann z.B. auf einer geschützten Seite des eigenen CMS eingebunden werden. Damit hat man in der Übersicht welche Version bei den verschiedenen Installationen genutzt wird und ist schneller im Updaten.
[this message is written with 100% recycled bits]
geraldo
Forum Members
Forum Members
Posts: 10
Joined: Fri Dec 12, 2008 10:38 am
Location: Calheta de S. Miguel, Ilha de Santiago, Cabo Verde

Re: CMS Installer - SQL et al

Post by geraldo »

Was Die DB-Sicherung betrifft, bin ich inzwischen wieder weg von Deiner Lösung
und habe stattdessen erfolgreich MySQLDumper eingesetzt (siehe u.a. die verschiedensten Hinweise von Cyberman et al).

Bei Dir hatte ich (beim Editieren unter WIN mit UltraEdit) z.T. Probleme mit Umlauten. Vor allem aber bei Zeilenwechseln in den Sourcen. wurde zu  [NichtDarstellbares Sonderzeichen]\n statt \r\n (Quelle Unix-Web Ziel XP/XAMPP)

Gefühlsmäßig vermute ich, dass von Dir der Zeichensatz (UTF8) nicht richtig berücksichtigt wird.
http://forum.mysqldumper.de/die-umlautp ... t2313.html
"Seit MySQL 4.1.2. benutzt MySQL intern zum Speichern von Daten utf8."
Damit muss aber zwingend ein Verfahren eingesetzt werden, dass diesen Sachverhalt korrekt berücksichtigt, wenn ich Daniel Schlichtholz von MySQLDumper richtig verstanden habe:
"Davon interessieren uns vor allem die Einträge zu character_set_client und character_set_connection, die in der Regel gleich sind."

Erlaube mir noch eine allgemeine Bemerkung: Ich finde Deinen sequentiellen Aufbau im Skript unglücklich gewählt. So ist der Schritt C nur nach erfolgreicher Ausführung von A und B in der gleichen Session erlaubt.

Geraldo
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

Re: CMS Installer - SQL et al

Post by nockenfell »

Danke für's Feedback
geraldo wrote: Was Die DB-Sicherung betrifft, bin ich inzwischen wieder weg von Deiner Lösung
und habe stattdessen erfolgreich MySQLDumper eingesetzt (siehe u.a. die verschiedensten Hinweise von Cyberman et al).
Schaue ich mir an. Da ich einiges über exec laufen lasse, ist meine Idee hier das mysql Backup über mysqldump zu machen. Funktioniert aber nicht auf Windows. Werde mich in nächster Zeit mit dem MySQLDumper auseinander setzen. Mal schauen ob ich einen Teil davon einbauen kann.
Erlaube mir noch eine allgemeine Bemerkung: Ich finde Deinen sequentiellen Aufbau im Skript unglücklich gewählt. So ist der Schritt C nur nach erfolgreicher Ausführung von A und B in der gleichen Session erlaubt.
Es hat sein gutes und sein schlechtes...

Ich bin derzeit daran einiges an Ajax zu integrieren. Zudem habe ich ein Breadcrumbs mit den einzelnen Schritten gemacht. Damit wird es möglich werden, die ersten beiden Schritte zu überspringen oder auch gleich direkt zum Bereinigen der Installation zu springen. Dauert aber noch ein wenig bis ich damit fertig bin.
[this message is written with 100% recycled bits]
cyberman

Re: CMS Installer

Post by cyberman »

Klingt echt spannend! Schon was neues?
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

Re: CMS Installer

Post by nockenfell »

cyberman wrote: Klingt echt spannend! Schon was neues?
Ja und Nein. Leider bin ich in letzter Zeit nicht mehr zum programmieren gekommen.

Teils sind noch nicht alle Erweiterungen die ich rein programmiert habe, fertig. Die Grundfunktionen laufen jedoch nun alle Reibungslos und mit Ajax.

Über ein Feedback der aktuellen Beta-Version freue ich mich natürlich:

http://dl.dropbox.com/u/1392406/cmsinst ... -0.3.3.php
[this message is written with 100% recycled bits]
Post Reply

Return to “Stammtisch”