{"id":654,"date":"2010-05-16T20:40:03","date_gmt":"2010-05-16T18:40:03","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=654"},"modified":"2010-05-25T00:08:34","modified_gmt":"2010-05-24T22:08:34","slug":"katastrophen-recovery-mit-ispcp","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=654","title":{"rendered":"Katastrophen-Recovery mit ispCP"},"content":{"rendered":"<p>Heute gibt es von meiner Seite einmal einen der Beitr\u00e4ge, die man am liebsten nie brauchen w\u00f6llte: Wie stelle ich aus minimalen Daten ein ispCP wieder her, falls es am alten Sytem zu Problemen kam. Und auch wenn ich schreibe, Katastrophen-Recovery: Alles, was \u00fcber einen gewissen Grad an Problemen hinaus geht, wird auch mit dieser Anleitung nicht zu beheben gehen. Von daher eine kurze Checkliste:<\/p>\n<ol>\n<li>Habt ihr ein Backup ALLER Server-Dateien? Wenn ja, reicht im Wesentlichen <a href=\"http:\/\/isp-control.net\/documentation\/howto:miscellaneous:migrate_from_one_to_another_ispcp_server\">die Migrationsanleitung von der ispCP-Homepage<\/a>. Dennoch empfehle ich einen Blick weiter unten zu Hinweisen w\u00e4hrend man dies erledigt.<\/li>\n<li>Habt ihr ein Backup aller Userdaten UND folgenden Dinge:\n<ol>\n<li>die Datenbank ispcp des alten Systems (Bin\u00e4rkopie ausreichend!)<\/li>\n<li>die Datenbank mysql des alten Systems (Bin\u00e4rkopie ausreichend!)<\/li>\n<li>die ispcp.conf des alten Systems<\/li>\n<li>\/var\/www\/ispcp\/gui\/include\/ispcp-db-keys.php<\/li>\n<li>\/var\/www\/ispcp\/engine\/ispcp-db-keys.pl<\/li>\n<\/ol>\n<p>\t\tSollten von den letzten beiden Dateien nur eine verf\u00fcgbar sein, so kann die jeweils andere aus dieser Datei erzeugt werden. Fehlen beide, kann nur versucht werden, mit Hilfe des <a href=\"http:\/\/isp-control.net\/documentation\/howto:ispcp:change_db_pass\">Howtos zum Setzen des MySQL-Passwortes f\u00fcr ispCP<\/a> diese Dateien zu erzeugen. Dies muss nach dem Wiederherstellen der MySQL-Nutzer-Datenbank und vor Aufruf des Setup-Skripts geschehen. DATABASE_USER und DATABASE_PASSWORD m\u00fcssen f\u00fcr diesen Fall nach Aufruf des Passwort-Skriptes aus der ispcp.conf in die ispcp.old.conf \u00fcbertragen werden, da ispCP sonst mit den falschen Schl\u00fcsseln ein Login probiert.<\/li>\n<li>Habt ihr vom alten System genug Daten, um die im vorigen Punkt n\u00f6tigen Daten der zweiten Subliste zusammenzukratzen. Wenn nicht, gilt auch hier: Bei\u00dft in saure \u00c4pfel, der Todesgott eurer Installation mag die.<\/li>\n<\/ol>\n<p>Okay: Eines vorweg: Wenn ihr mindestens einen Punkt der obigen Liste bejahen konntet, bestehen berechtigte Hoffnungen, dass ihr um eine <a href=\"http:\/\/isp-control.net\/documentation\/start:installation\">vollst\u00e4ndige Neuinstallation<\/a> herumkommt. Eine Garantie gibt es hierbei aber nicht, da die n\u00e4chsten Schritte mit extrem vielen M\u00f6glichkeiten f\u00fcr Fehler verbunden sind und ich es selber beim Erarbeiten dieser Liste geschafft habe, so nahezu JEDE Fehlermeldung, die ispCP bietet auch einmal zu erhalten. Wer also nicht allzu frusttolerant ist, sollte es vor dem Fortfahren mit geeigneten Antidepressiva probieren. Ihr wurdet gewarnt.<!--more--><\/p>\n<p>Ferner noch eine kleine Anmerkung f\u00fcr Voreilige: Bitte fangt nicht gleich am Anfang an, wild Dateien umherzukopieren. Ich werde an den entsprechenden Stellen darauf hinweisen, wenn Daten zu Kopieren sind. Zus\u00e4tzlich sollte man w\u00e4hrend der gesamten Arbeit so flei\u00dfig mit Backups arbeiten, um Datenverlust so gut wie m\u00f6glich vermeiden zu k\u00f6nnen.<\/p>\n<p>Fangen wir also an. Als ersten Schritt sollte <strong>dringend<\/strong> ein <strong>gerade neu installiertes, frisches und blankes System<\/strong> derjenigen Distribution installiert werden, die auch auf dem alten System lief. Weder die Neuinstallation noch die gleiche Distribution sind hierbei verpflichtend, vereinfachen aber die sp\u00e4tere Arbeit wesentlich. Wer also von Anfang an auf seinem System Seppuku begehen m\u00f6chte, darf sich auch eine Fremddistribution aus dem Gebrauchtinstallationsladen holen, sollte sich aber \u00fcber Nebeneffekte nicht wundern. Keinesfalls darf zu diesem Zeitpunkt aber ispCP installiert sein, da im Zuge dieser Anleitung eine bestehende ispCP-Installation r\u00fccksichtslos \u00fcberschrieben werden wird. Zum Zusammenf\u00fchren mehrerer Installationen ist diese Anleitung <strong>ausdr\u00fccklich nicht geeignet<\/strong>.<\/p>\n<p>Der n\u00e4chste Schritt in dieser Anleitung betrifft eine Vorbereitung, die auch f\u00fcr <a href=\"http:\/\/isp-control.net\/documentation\/howto:miscellaneous:migrate_from_one_to_another_ispcp_server\">eine normale Migration<\/a> von Vorteil ist, da sie eine Eigenheit der Installation des Postfix-Servers behandelt. Dieser ist sp\u00e4ter f\u00fcr die Installation von ispCP n\u00f6tig, f\u00fchrt aber unweigerlich zu <strong>Datenverlust beim Mailempfang<\/strong>, wenn er zu lange ohne Konfiguration verbleibt. Daher gibt es zwei M\u00f6glichkeiten, die je nach Situation unterschiedliche Vorz\u00fcge haben:<\/p>\n<ol>\n<li>DNS-Eintr\u00e4ge f\u00fcr ALLE Domains, die das neue System zeigen ins Nirvana umleiten\/entfernen\n<p>\t\tDiese Variante ist, wenn auch die bessere Wahl, die mit wesentlich mehr Aufwand verbundene Umsetzung. Damit diese Variante funktioniert, sollte man bereits im Vorfeld (etwa 24 bis 48 Stunden!) den Umzug der DNS-Records veranlassen. Zu beachten ist hierf\u00fcr insbesondere, dass hierbei keine Garantie f\u00fcr das korrekte Funktionieren gegeben ist, weil durch widersp\u00e4nstige DNS-Caches noch veraltete Daten ausgeliefert werden k\u00f6nnen. In jedem Fall reduziert dieser Schritt aber eindeutig die Last auf dem Mailserver und kann somit unterst\u00fctzend zum zweiten Schritt in Erw\u00e4gung gezogen werden.<\/li>\n<li>Postfix bis zur Einrichtung seiner Konfiguration deaktiviert lassen\n<p>\t\tOkay, diese Variante ist zwar Quick&#038;Dirty, aber bietet gegen\u00fcber der vorigen Variante einen sehr gro\u00dfen Vorteil: Wenn die Last auf dem Mailserver klein genug ist, (&lt;10 Mails\/min) hat man sehr gute Chancen mit sehr guter Reaktion die Anzahl verlorener Mails auf 0 zu halten. Zudem sind f\u00fcr diese Vorgehensweise keine externen Vorbereitungen n\u00f6tig, was das Recovery beschleunigen kann. Dennoch erfordert diese Methode eine gewisse Aufmerksamkeit, um das versehentliche Starten von Postfix schnell abstellen zu k\u00f6nnen.<\/li>\n<\/ol>\n<p>Nach dem nun beide Vorgehensweisen aufgef\u00fchrt worden, eine Reihe von Details zu den Hintergr\u00fcnden. Bei der Auslieferung von Emails wird vom Absender einer Mail (oder besser gesagt dessen Mailserver) nachgeschaut, wohin diese Mail geliefert werden soll. Diese Information findet sich in den sogennannten MX-Resource-Records einer Domain. Fehlen diese, so wird alternativ die Liste der A-Resource-Records zum Versand von Mails herangezogen. Innerhalb eines MX-Records wird nun neben der Adresse eines Mailservers auch eine Priorit\u00e4t definiert. Diese wird genutzt, um eine Reihenfolge f\u00fcr das Anfragen der Mailserver zu definieren. F\u00e4llt nun ein Mailserver in dieser Liste aus, so wird ein weiterer Mailserver aus der Liste der Mailserver probiert. Gibt es keinen weiteren, geht es irgendwann einfach wieder beim ersten Mailserver los.<\/p>\n<p>Dieser gut gemeinte Fallback-Mechanismus hat im Falle des Postfix nun einen kleinen Haken, da dieser in seiner Standard-Konfiguration jegliche eintreffende Mails mit einem Hard-Error (554 5.7.1: Relay Access Denied) ablehnt, da Postfix nur Mails f\u00fcr Domains annimmt, f\u00fcr die er beauftragt ist. In der Standard-Konfiguration sind das au\u00dfer localhost keine, was die Ablehnung zwar korrekt, aber f\u00fcr unseren Fall vollst\u00e4ndig kontraproduktiv macht. Denn w\u00e4hrend bei einem nicht erreichbaren Mailserver ein Softerror generiert wird (Mailserver nicht erreichbar; Mailversand wird sp\u00e4ter nochmals probiert), besagt ein Hard-Error, dass die Mail verworfen werden soll UND an den Absender eine unzustellbarkeitsmitteilung (DSN = Delivery Status Notification) gesendet werden soll.<\/p>\n<p>Daher sollte die L\u00f6sung sein: Solange Postfix noch nicht konfiguriert ist, d\u00fcrfen ihn keine Mails erreichen. Und obige beiden Vorgehensweisen bieten ideale Erfolgsaussichten hierf\u00fcr. Wenn es schnellgehen muss und nicht viele Mails anliegen, reicht Variante 2, hat man einen High-Volume-Mailserver mit hohem Traffic, sollte man sich f\u00fcr 1. mit Absicherung durch 2. entscheiden und sofern verf\u00fcgbar, einen Backup-Mailserver verwenden (der jedoch vorerst noch keine Mails final zustellt).<\/p>\n<p>Da wir nun Postfix abgehakt haben, k\u00f6nnen wir weiter voranschreiten und ispCP konfigurieren. Als Kurzbeschreibung hierf\u00fcr kann mit wenigen Worten &#8222;Neuinstall, Konfig wiederherstellen, Update&#8220; verwendet werden, wobei aber auch hier der Teufel im Detail steckt. War bis hierhin alles ohne gro\u00dfe Konzentration m\u00f6glich, k\u00f6nnen alle nun folgenden Schritte zu extrem schwer zu lokalisierenden Fehlern f\u00fchren.<\/p>\n<p>Setzen wir also erst einmal mit der Installation von MySQL fort, denn auch hier gibt es ein wenig was zu beachten. Oben habe ich ja bereits erw\u00e4hnt, dass wir von MySQL sowohl die Datenbank ispcp wie auch die Datenbank mysql ben\u00f6tigen. W\u00e4hrend dies Grundlegend erst einmal auch stimmt, ist es aber auch hier nicht die ganze Wahrheit, da die Datenbank mysql allein f\u00fcr die Authentifizierung der Datenbank-Nutzer zust\u00e4ndig ist. Fehlt einem diese Datenbank, ist zwar nicht partout Schluss, ABER man wird beim R\u00fcckspielen von ispCP erheblichen Aufwand bekommen. Wer also nicht allzu viel Erfahrung damit hat, in fremden Skripten sich Passw\u00f6rter rauszudebuggen, sei hiermit w\u00e4rmstens empfohlen, nach der mysql-Datenbank zu suchen, bevor er fortsetzt. Ist diese wirklich nicht auffindbar, buss anhand der ispCP-Keyfiles und einem Hack in den ispCP-Skripts im sp\u00e4teren Verlauf das entschl\u00fcsselte Passwort abgefangen werden. Gleiches gilt zudem f\u00fcr die Datei \/etc\/mysql\/debian.cnf (oder analoge, je nach Distribution), in der die Maintainer-Passw\u00f6rter f\u00fcr den Datenbank-Zugang enthalten sind. Auch hier gilt: Ist diese nicht auffindbar, muss man nach dem R\u00fcckspielen der mysql-Datenbank ein wenig mehr Aufwand treiben, indem man MySQL ohne Beachtung der Authentifikationstabellen startet<\/p>\n<pre lang=\"bash\">mysqld --skip-grant-tables<\/pre>\n<p>und nach dem setzen eines neuen Passwortes f\u00fcr den Maintainer-Zugang die entsprechende Konfigurationsdatei von Hand ausf\u00fcllt. Der Inhalt sollte dabei wie Folgt aussehen:<\/p>\n<pre lang=\"ini\"># Automatically generated for Debian scripts. DO NOT TOUCH!\r\n[client]\r\nhost     = localhost\r\nuser     = debian-sys-maint\r\npassword = #password#\r\nsocket   = \/var\/run\/mysqld\/mysqld.sock\r\n[mysql_upgrade]\r\nuser     = debian-sys-maint\r\npassword = #password#\r\nsocket   = \/var\/run\/mysqld\/mysqld.sock\r\nbasedir  = \/usr<\/pre>\n<p>Hierbei muss statt #password# das Klartext-Passwort verwendet werden, was soeben in der Datenbank gesetzt wurde. Ich werden nachher aber noch einmal auf diesen Punkt zur\u00fcckkommen.<\/p>\n<p>Denn erst einmal k\u00f6nnen wir uns mit einer relativ einfachen Aufgabe besch\u00e4ftigen: eine &#8222;Dummy-Installation&#8220; von ispCP. Diese ist notwendig, um ein lauff\u00e4higes ispCP auf das System zu bekommen. Dieser Schritt ist auch einer der Gr\u00fcnde, warum keine Installation vorhanden sein darf: Diese w\u00e4re durch diesen Schritt das erste Mail \u00fcberschrieben und wird nachher noch ein weiteres Mal \u00fcberschrieben. F\u00fcr die Installation von ispCP kann nach den ergangenen Vorbereitungen mit Postfix mit der normalen Anleitung f\u00fcr die Installation einer frischen Version von ispCP vorgegangen werden. Es empfiehlt sich in diesem Schritt, gleich mit einer aktuellen ispCP-Version anzufangen, selbst wenn auf dem alten Server nicht die aktuelle Version von ispCP lief. Dieser Schritt wird implizit durch einen sp\u00e4ter noch zu besprechenden Schritt nachgeholt. Vorsicht sollte aber auch hier wieder in Bezug auf Postfix gelten: Dieser sollte auch hier wieder vom Empfang  und Ablehnen von Mails abgehalten werden. Dies ist AFAIR am Ende des Setup-Prozesses der Fall; es kann aber auch nicht schaden, mit htop ein Auge auf die aktuelle Prozessliste des Servers w\u00e4hrend der gesamten Arbeiten zu werfen.<\/p>\n<p>Ist man bis hierhin gekommen, hat man den Einfachen Teil der Arbeiten geschafft. Ab nun an beginnt ein wenig forensische Arbeit, die eine Menge Fingerspitzengef\u00fchl erfordert. Als n\u00e4chstes gilt es, die beiden Hauptdatenbanken von ispCP (n\u00e4mlich genau die bereits erw\u00e4hnten beiden) wieder einzupflegen. Hierzu beenden wir den MySQL-Server mit<\/p>\n<pre lang=\"bash\">\/etc\/init.d\/mysql stop<\/pre>\n<p>bzw. mit einem nicht ganz so sanften<\/p>\n<pre lang=\"bash\">killall mysqld<\/pre>\n<p>sollte sich dieser weigern auf Gehei\u00df des Startskriptes herunterzufahren.<\/p>\n<p>Und nun kommt die angek\u00fcndigte forensische Arbeit: Im n\u00e4chsten Schritt m\u00fcssen die Datenbanken ispcp und mysql zur\u00fcckkopiert werden. Diese m\u00fcssen unter \/var\/lib\/mysql die beiden vorhandenen Ordner ersetzen. Wer Backups haben m\u00f6chte, braucht diese beiden Ordner lediglich umzubenennen und kann dann wie gehabt auf diese von MySQL aus zugreifen. Hat man die beiden Ordner aus seinem Backup wiederhergestellt, gilt es zudem, die Berechtigungen f\u00fcr alle Dateien unter \/var\/lib\/mysql zu korrigieren. Diese m\u00fcssen auf den Owner mysql mit Gruppe mysql lauten. Am besten man erledigt dies kurz von der Kommandozeile:<\/p>\n<pre lang=\"bash\">cd \/var\/lib\/mysql\r\nchown -R mysql:mysql *\/<\/pre>\n<p>Womit wir auch wieder bei dem oben genannten Punkt w\u00e4ren: Hat man die Maintainer-Zug\u00e4nge des alten Systems, so m\u00fcssten diese <strong>jetzt<\/strong> unter \/etc\/mysql zur\u00fcckgespielt werden. Hat man diese nicht, muss <strong>jetzt<\/strong> die entsprechende Korrektur der Passworte vorgenommen werden. f\u00fcr ispCP kann man sich diesen Schritt jedoch noch etwas aufheben, weil zu einem sp\u00e4teren Zeitpunkt wir eh auf diese Zug\u00e4nge zur\u00fcckkommen werden.<\/p>\n<p>Apropos Zug\u00e4nge: Dieser Moment ist glaube ein wundererbarer Moment, die Nutzer in der \/etc\/passwd, \/etc\/shadow sowie \/etc\/group und \/etc\/gshadow wiederherzustellen. Wer diese Dateien hat, muss aus jeder Datei folgende Dinge in sein neues System \u00fcbernehmen:<\/p>\n<ul>\n<li>vu* &#8211; Alle Virtuellen Nutzer von ispCP<\/li>\n<li>vmail &#8211; Der Mailnutzer. <strong>ACHTUNG:<\/strong> Dieser muss <strong>UID 1000<\/strong> haben, da ansonsten der Courier-Mailserver wahrscheinlich in einem sp\u00e4teren Schritt spinnt<\/li>\n<li>mail &#8211; Die Gruppe f\u00fcr den Mailverkehr. Diese sollte aber genauso wie der Nutzer vmail bereits angelegt worden sein. Hier gilt <strong>GID 8<\/strong><\/li>\n<\/ul>\n<p>Nachdem nun die ispCP-Datenbank wieder eingerichtet ist und alle wesentlichen Nutzer wieder existieren, kann man nun auch die restlichen Nutzerdaten zur\u00fcckspielen. Unter \/var\/www\/virtual m\u00fcssen die Nutzerberechtigungen dabei noch nicht hundertprozentig stimmen, da dies nachher gleich von ispCP korrigiert wird. unter \/var\/mail\/virtual sollte aber <strong>zwingend<\/strong> auf <strong>UID 1000\/GID 8<\/strong> (UID vmail + GID mail) f\u00fcr ALLE Dateien und Verzeichnisse geachtet werden.<\/p>\n<p>Sind auch diese wieder eingespielt und am richtigen Platz, m\u00fcssen wir bevor wir mit ispCP fortfahren k\u00f6nnen noch f\u00fcr einen g\u00fcltigen Datenbank-Zugang des FTP-Servers sorgen. hier gibt es nun zwei M\u00f6glichkeiten:<\/p>\n<ol>\n<li>Man besitzt die alte \/etc\/proftpd.conf noch<\/li>\n<li>Man besitzt sie nicht mehr<\/li>\n<\/ol>\n<p>Besitzt man sie noch, stellt man sie wieder her, besitzt man sie nicht mehr, muss man f\u00fcr den Account vftp das Zugangspasswort des MySQL auf das in der vorhandenen Konfiguration genannte \u00e4ndern. In jedem Falle muss das Passwort in der Konfiguration mit dem Zugang zur Datenbank \u00fcbereinstimmen. Und damit es nicht zu einfach wird, haben wir auch hier einen kleinen Stolperstein: ispCP sucht das Passwort f\u00fcr den FTP in seiner Arbeitskopie, d.h. unter \/etc\/ispcp\/proftpd\/working\/proftpd.conf. Somit m\u00fcssen \/etc\/proftpd.conf (System) und \/etc\/ispcp\/proftpd\/proftpd.conf (ispCP) in Bezug auf das Passwort synchron sein. Anderweitig gibt es keinen Zwang, an beiden Stellen den gleichen Dateiinhalt zu haben, auch wenn es eine Reihe von Fehlerquellen eliminiert.<\/p>\n<p>Womit wir bei einem Stolperstein w\u00e4hren, der mich eine Menge Zeit gekostet hat: ab diesem Zeitpunkt sollte man sicherstellen, dass die beiden Key-Files vom ispCP die Schl\u00fcssel des alten Systems repr\u00e4sentieren. Dazu sucht man sich diese aus seinem Backup heraus und ersetzt die Dateien \/var\/www\/ispcp\/gui\/include\/ispcp-db-keys.php und \/var\/www\/ispcp\/engine\/ispcp-db-keys.pl durch die jeweiligen Versionen des Backups. Fehlt einem eine dieser Dateien, so kann die jeweils andere durch \u00dcbernehmen der String-Daten erzeugt werden. Vergisst man dies, wird sich ispCP sp\u00e4ter beim Update \u00fcber nicht funktionierende Login-Zug\u00e4nge zur Datenbank beschweren oder auf der Weboberfl\u00e4che einen Verbindungsfehler zur Datenbank melden.<\/p>\n<p>Je nach Gr\u00f6\u00dfe der ispCP-Installation gibt es nun u.U. den Wunsch, den Update-Prozess etwas zu beschleunigen, da ispCP gleich jegliche Verwaltungsstrukturen neu aufbauen wird. Da einige der hierzu notwendigen Teilschritte aber nur Bruchteile von Sekunden dauern und durch eine Feinheit im Source unn\u00f6tig ausgebremst werden, kann man sich \u00fcberlegen, ob man in vier der Management-Skripte von ispCP einen kurzen Patch (jeweils Auskommentieren einer Zeile, leicht zu finden) vornimmt. Details dazu gibt es im <a href=\"http:\/\/isp-control.net\/ispcp\/ticket\/2331\">ispCP-Bugtracker<\/a>, der zudem die Richtigkeit dieses Vorgehens best\u00e4tigt. Zur Durchf\u00fchrung suche man unter \/var\/www\/ispcp\/engine in allen Skripten ispcp-*-mgr nach einer Zeile mit<\/p>\n<pre lang=\"perl\">    sleep(1);<\/pre>\n<p>und kommentiere diese durch Erg\u00e4nzung einer Raute aus:<\/p>\n<pre lang=\"perl\">    #sleep(1);<\/pre>\n<p>Welche Skripte das betrifft, findet man am schnellsten mit Hilfe von<\/p>\n<pre lang=\"bash\">grep sleep ispcp-*-mgr<\/pre>\n<p>Diese \u00c4nderung f\u00fchrt dazu, dass f\u00fcr ein mittleres System (25 Domains, 100 Subdomains, 500 Postf\u00e4cher) die im folgenden Schritt ben\u00f6tigte Zeit von etwa 15 Minuten auf etwa 1-2 Minuten reduziert wird, was insbesondere vor dem Hintergrund, dass der n\u00e4chste Schritt mit wahrscheinlichkeit mehrfach angegangen werden muss, stark von Vorteil ist.<\/p>\n<p>Nachdem unser System nun soweit vorbereitet ist, vielleicht noch ein letzter Hinweis, der einem bei der Fehlersuche gleich sehr gut helfen wird: in der Datei \/etc\/ispcp\/ispcp.conf sollte man am Ende die Zeile<\/p>\n<pre lang=\"ini\">DEBUG = 0<\/pre>\n<p>auf<\/p>\n<pre lang=\"ini\">DEBUG = 1<\/pre>\n<p>\u00e4ndern. Dies schaltet w\u00e4hrend des Updates eine Reihe zus\u00e4tzliche Anzeigen ein, die im Falle von Fehlern schneller den Weg zur Ursache weisen. Zus\u00e4tzlich muss man in die ispcp.conf die Passwort-Kennungen seines alten Systems eintragen. Zus\u00e4tzlich muss unter ispcp.old.conf in \/etc\/ispcp\/ die ispcp.conf des alten Systems liegen. <\/p>\n<p>Hat man diese Vorbereitungen unter \/etc\/ispcp getroffen, ruft man <strong>das Update-Skript<\/strong> (EXTREM wichtig, sonst darf man die H\u00e4lfte der Arbeit noch mals erledigen ;-)) auf:<\/p>\n<pre lang=\"bash\">cd \/var\/www\/ispcp\/engine\/setup\r\n.\/ispcp-update<\/pre>\n<p>Ist das Update von ispCP erfolgreich durchgelaufen, ist man, au\u00dfer einer Reihe von Aufr\u00e4umarbeiten, die man noch erledigen muss, mit dem Recovery soweit fertig. Schlegt das Update fehl, beginnt die im Wesentlichen auf Trial-and-Error (mit mehr letzterem) verbundene Fehlersuche. Alternativ kann an dieser Stelle auch das <a href=\"http:\/\/isp-control.net\/documentation\/howto:ispcp:regenerate_config\">Howto zur Regenerierung der Konfiguration<\/a> verwendet werden, was aber im Grunde analog zu einem DB-Update funktioniert. Dies sollte man aber nur tun, wenn das alte System bereits auf dem aktuellen Stand war. Ansonsten sollte man DRINGEND <strong>die Finger von dieser Variante lassen<\/strong>!<\/p>\n<p>Ferner noch eine Anmerkung zum Update-Prozess. W\u00e4hrend des Prozesses fragt ispCP ggf. nach dem vftp-Passwort. In diesem Falle sollte man \u00fcberpr\u00fcfen, ob der MySQL l\u00e4uft UND ob das in der Konfiguration des proFTPd gegebene Login stimmt. Sollten sich au\u00dferdem einige Daten des Servers (Domainname, IP) ge\u00e4ndert haben, sind diese vor dem Update in der Datenbank von ispCP anzupassen (Siehe Migrationsanleitung).<\/p>\n<p>Sollte nach dem &#8222;erfolgreichen&#8220; Lauf des Update-Scripts der Apache nicht starten, m\u00fcssen noch alle Nutzer-Accounts im System registriert werden. Dies geht am einfachsten nach <a href=\"http:\/\/isp-control.net\/forum\/thread-5610-post-44961.html#pid44961\">dieser Anleitung<\/a>. Wichtig ist der Teil bzgl. des Skripts groups.sh:<\/p>\n<pre lang=\"bash\">#!\/bin\/false\r\n#Coming soon. This will differ in some points from the script given at the forums!<\/pre>\n<p>Dieses sollte nach Anlegen einer Datei my.cnf im Home-Verzeichnis des Root-Users gestartet werden. Die my.cnf hat dabei das oben genannte Format.<\/p>\n<pre lang=\"ini\">[client]\r\nuser=root\r\npassword=#password#<\/pre>\n<p>Dieses Script legt mit useradd alle ggf. fehlenden Accounts an und setzt nochmals die richtigen Berechtigungen auf allen Ordnern (incl. den FCGI-Konfigurationen der Nutzer). Um dabei etwas Arbeit zu sparen liest es die Daten direkt aus der Datenbank von ispCP, da dort alle n\u00f6tigen Daten bereits enthalten sind. Ggf. vorhandene Doppelbelegungen von User- und Gruppen-IDs sollte man vorher manuell beheben oder nachtr\u00e4glich anpassen (d.h. bei betroffenen Programmen korrigieren).<\/p>\n<p>Sollte ich einen Punkt \u00fcbersehen oder vergessen haben, oder gibt es sonst Fragen zu diesem Vorgehen, k\u00f6nnen diese gerne in den Kommentaren gestellt werden.<\/p>\n<p>P.S.: Danke an <a href=\"http:\/\/blog.chems-chaos.de\/\">beshig<\/a> f\u00fcr&#8217;s Betatesten.<\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=654&amp;md5=f9a0fa9ecf10766533d5afd2c649e48d\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Heute gibt es von meiner Seite einmal einen der Beitr\u00e4ge, die man am liebsten nie brauchen w\u00f6llte: Wie stelle ich aus minimalen Daten ein ispCP wieder her, falls es am alten Sytem zu Problemen kam. Und auch wenn ich schreibe, Katastrophen-Recovery: Alles, was \u00fcber einen gewissen Grad an Problemen hinaus geht, wird auch mit dieser [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[156,14,10,48,133,81,53,21,204,346,80,20],"class_list":["post-654","post","type-post","status-publish","format-standard","hentry","category-server","tag-apache","tag-bugs","tag-debian","tag-dns","tag-grundgesetz","tag-ispcp","tag-perl","tag-php","tag-postfix","tag-server","tag-umzug","tag-update"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=654"}],"version-history":[{"count":9,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/654\/revisions"}],"predecessor-version":[{"id":657,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/654\/revisions\/657"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}