Andreas Korthaus: aktualisieren (PHP/PERL/Apache/MySQL)

Hallo!

Man findet zu den oben genannten Programmen ja immer ausführliche Informationen zu dessen Instalation, aber was wenn man eines der Programme mal auf eine neue Version updaten will? Bisher habe ich das immer so gemacht, ich habe die conf-Files gesichert, das Programm deinstalliert, neu installiert und dann die neue conf-File mit der alten überschreiben. Das geht soweit ganz gut, nur weiß ich kein bisschen wie man das über die Kommandozeile macht! Wenn ich jetzt auf Linux von Apache 1.3 auf 2.0 aktualisieren will, wie mache ich das über die Shell? Wie kann ich da deinstallieren? Und woher weiß ich, ob ich ein Programm aktualisieren kann oder ob ich es neu installieren muß? Und wenn - wie _akualisiere_ ich z.B. den Apache(jetzt bei einem kleineren Versionsschritt)?
Bei PHP ist das ja etwas anders, das wird ja gar nicht installiert, sondern soweit ich das weiß nur in das Verzsichnis geschreiben, und nur die php.ini und die php in spezielle Verzeichnisse geschreiben. Kann ich da nicht einfach alle Dateien überschreiben und es müßte gehen? Wie ist das aber dann mit Modulen? Wenn ich z.B. in meiner aktuellen Version CURL-Support einkompiliert habe, dann muß ich das vermutlich mit der neuen Version alles nochmal neu machen, oder? Selbiges mit PERL-Modulen, oder?
Kann ich an dieser Stelle also keine RPMs verwenden, oder?
Vielleicht kann mal jemand ganz grob beschreiben wie man sowas remote (also von einem entfernten Rechner aus) macht(bei Linux[Redhat]).
Oder vielleicht kennt jemand auch was nettes zu lesen (_kein_ Buch bitte - wenn ich mir alle Bücher kaufen würde die mir so empfohlen werden würde ich nur noch für neue Bücher arbeiten! Ich kauf mir auch Bücher - aber in Maßen ;-) ).

Vielen Dank im voraus!

Viele Grüße
Andreas

  1. use Mosche;

    Man findet zu den oben genannten Programmen ja immer ausführliche Informationen zu dessen Instalation, aber was wenn man eines der Programme mal auf eine neue Version updaten will? Bisher habe ich das immer so gemacht, ich habe die conf-Files gesichert, das Programm deinstalliert, neu installiert und dann die neue conf-File mit der alten überschreiben. Das geht soweit ganz gut, nur weiß ich kein bisschen wie man das über die Kommandozeile macht! Wenn ich jetzt auf Linux von Apache 1.3 auf 2.0 aktualisieren will, wie mache ich das über die Shell? Wie kann ich da deinstallieren? Und woher weiß ich, ob ich ein Programm aktualisieren kann oder ob ich es neu installieren muß? Und wenn - wie _akualisiere_ ich z.B. den Apache(jetzt bei einem kleineren Versionsschritt)?

    Du hast dazu mehrere Möglichkeiten:

    a) Wenn du einen Paketmanager (rpm, apt-get) benutzt ist das ganze doch recht einfach. Mit dem Paketmanager alte Version deinstallieren und neues Paket ziehen. Das ist meistens der Fall, wenn du eine Distribution wie Debia, RedHat, Suse ... verwendest.

    b) Apache stoppen und alle apache-spezifischen Dateien händisch löschen (ist einfacher, wenn du alles in ein Verzeichnis installiert hast).

    c) Tipp zum Apache installieren: installier alles in ein Verzeichnis (also nicht confs nach /etc/httpd/, bins nach /usr/bin, uswusf, sondern alles unter /opt/apache (wie ich) oder /usr/local (Default)).

    Aktualisieren: ich habe einfach drüberinstalliert :-). Konfigurationsoptionen sollte man sich merken, und dann musst du wahrscheinlich alle Module neu installieren (musste ich jedenfalls bei mod_perl).

    use Tschoe qw(Matti);

    --
    $a=n(1001010);print chr($a+=$_)for(0,43,-2,1,-84,65,13,1,5,
    -12,-3,13,-82,48,21,13,-6,-76,72,-7,2,8,-6,13,-104);sub n{
    $b=0;$_=0;for($c=length$_[0];$c;--$c){$_+=_($b)if substr$_
    [0],$c-1,1;$b++;}$_}sub _{($d)=@_;for($e=1;$d--;$e*=2){}$e}
    1. Hallo!

      Du hast dazu mehrere Möglichkeiten:

      a) Wenn du einen Paketmanager (rpm, apt-get) benutzt ist das ganze doch recht einfach. Mit dem Paketmanager alte Version deinstallieren und neues Paket ziehen. Das ist meistens der Fall, wenn du eine Distribution wie Debia, RedHat, Suse ... verwendest.

      Ich verwende RedHat, daher bietet sich RPM eigentlich an. Aber die conf-file sollte ich doch trotzdem manuell sichern, oder? Hatte gar nicht dran gedacht das man mit RPM auch deinstallieren kann. *schäm*

      c) Tipp zum Apache installieren: installier alles in ein Verzeichnis (also nicht confs nach /etc/httpd/, bins nach /usr/bin, uswusf, sondern alles unter /opt/apache (wie ich) oder /usr/local (Default)).

      Nur das geht wohl schlecht mit RPM, wenn ich das selbst kompiliere kann ich das vermutlich beeinflussen oder? Und wenn ich das aber mit RPM mache, dann reicht es ja nur die conf-file manuell zu überschreiben.

      Aktualisieren: ich habe einfach drüberinstalliert :-). Konfigurationsoptionen sollte man sich merken, und dann musst du wahrscheinlich alle Module neu installieren (musste ich jedenfalls bei mod_perl).

      Solang man da nicht alles vorher einkompilieren muss ja nicht weiter wild.
      Danke Dir!

      Grüße
      Andreas

      1. use Mosche;

        a) Wenn du einen Paketmanager (rpm, apt-get) benutzt ist das ganze doch recht einfach. Mit dem Paketmanager alte Version deinstallieren und neues Paket ziehen. Das ist meistens der Fall, wenn du eine Distribution wie Debia, RedHat, Suse ... verwendest.
        Ich verwende RedHat, daher bietet sich RPM eigentlich an. Aber die conf-file sollte ich doch trotzdem manuell sichern, oder? Hatte gar nicht dran gedacht das man mit RPM auch deinstallieren kann. *schäm*

        Manuell sichern ist nie schlecht, so auch in diesem Fall.

        c) Tipp zum Apache installieren: installier alles in ein Verzeichnis (also nicht confs nach /etc/httpd/, bins nach /usr/bin, uswusf, sondern alles unter /opt/apache (wie ich) oder /usr/local (Default)).
        Nur das geht wohl schlecht mit RPM, wenn ich das selbst kompiliere kann ich das vermutlich beeinflussen oder? Und wenn ich das aber mit RPM mache, dann reicht es ja nur die conf-file manuell zu überschreiben.

        Wenn du es mit rpm machst, ist dieser Tipp überflüssig. Dann speichert die RPM-Datenbank, welche Dateien zu einem bestimmten Paket gehören, und deinstalliert diese dann auch richtig. Auch aktualisieren geht dann auch ganz einfach mit 'rpm -U ...'.

        Ich für mich persönlich habe meinen Apache (und alle größeren Programme wie zB vim, postgresql usw.) selbst kompiliert, weil ich genau verstehen wollte, wo was wie abläuft (und auch, weil mir die Aufteilung, die mir SuSE vorgab, zu unübersichtlich war). Jetzt habe ich Sachen wie apache, postgresql schön in jeweils einem Verzeichnis unter /opt (andere machen da /usr/local, ist mir persönlich aber zu lang :-)) und finde da alle Konfigurationsmöglichkeiten zu einer bestimmten Software an einem Platz.

        use Tschoe qw(Matti);

        --
        $a=n(1001010);print chr($a+=$_)for(0,43,-2,1,-84,65,13,1,5,
        -12,-3,13,-82,48,21,13,-6,-76,72,-7,2,8,-6,13,-104);sub n{
        $b=0;$_=0;for($c=length$_[0];$c;--$c){$_+=_($b)if substr$_
        [0],$c-1,1;$b++;}$_}sub _{($d)=@_;for($e=1;$d--;$e*=2){}$e}
  2. Hi Andreas,

    meine Antwort setzt UNIX als Plattform voraus - unter Windows wird einiges von dem, was Du willst, nicht so einfach funktionieren.

    Man findet zu den oben genannten Programmen ja immer ausführliche Informationen zu dessen Instalation, aber was wenn man eines der Programme mal auf eine neue Version updaten will?

    nach Möglichkeit jede Installation so durchführen, daß sie koexistenzfähig mit anderen Installationen desselben Produkts auf derselben Maschine ist. Das mache ich bei Apache immer so - jedenfalls unter UNIX, weil es seit Apache 1.3.17 unter Windows leider nichit mehr funktioniert.

    Bisher habe ich das immer so gemacht, ich habe die conf-Files gesichert, das Programm deinstalliert, neu installiert und dann die neue conf-File mit der alten überschreiben.

    Und was ist, wenn das nicht funktioniert? Alles wieder rückgängig machen? Nein danke.

    Ich installiere mir einen zweiten Apache _neben_ den ersten (/usr/local/apache/<versionsnummer>).
    "/usr/local/apache" ist ein symbolic link auf diejenige Version, die ich aktuell als "die produktive" betreibe. Das ist also auch der Pfad, der beispielsweise verwendet wird, wenn der Apache beim Booten der Maschine automatisch gestartet werden soll usw.

    Die Apache-Konfigurationsdatei httpd.conf besteht bei mir aus genau zwei Zeilen:
       port 80
       include ../common/httpd.conf
    Die Konfiguration ist _nicht_ Bestandteil einer bestimmten Version des Apache.
    Installiere ich einen neuen Apache, dann bekommt der auch wieder so einen Zweizeiler, allerdings mit einer anderen Portnummer. So kann ich beide Apaches parallel nebeneinander laufen lassen.

    Sobald ich dem neuen Apache "traue", ändere ich die Port-Angaben, setze ihn also auf Port 80, und schalte den symbolic link um - fertig. War das eine zu optimistische Entscheidung, dann mache ich genau diese beiden Handgriffe rückgängig.
    Ich kann sogar beide Apaches auf Port 80 laufen lassen - allerdings nicht gleichzeitig. In diesem Falle haben dann beide dieselbe httpd.conf und ich starte jeweils einen von ihnen per Hand; in diesem Zustand brauche ich jeweils nur den symbolic link umzusetzen, um zwischen beiden Versionen hin- und her zu schalten. Da ich dann allerdings nicht beide Apaches simultan laufen lassen kann, muß ich zum Testen ein erhöhtes Risiko eingehen - deshalb gefällt mir die Methode mit den verschiedenen Portnummern besser.

    Das geht soweit ganz gut, nur weiß ich kein bisschen wie man das über die Kommandozeile macht! Wenn ich jetzt auf Linux von Apache 1.3 auf 2.0 aktualisieren will,

    Genau das solltest Du eben nicht wollen. Es gibt keinen Grund, Dir den Rückweg zuzunageln. Und ganz nebenbei gibt es keineswegs für Apache 2.0 alle Module, die es für Apache 1.3 gibt ... (die mod_gzip-Versionen sind beispielsweise ziemlich heftig unterschiedlich)

    Unter Windows sind laut meinen Informationen Apache 1.3 und 2.0 koexistenzfähig - allerdings wohl jeweils nur maximal je eine Version dieser beiden Produkte.

    wie mache ich das über die Shell?

    Installiere Apache 2.0 so, daß Apache 1.3 weiterhin lauffähig bleibt - also in ein neues Verzeichnis.

    Wie kann ich da deinstallieren?

    Wieso solltest Du das tun wollen?

    Irgendwann, wenn Du die alte Version definitiv nicht mehr brauchst, löschst Du einfach deren Verzeichnisbaum mit "rm -rf" ... das kann aber ein paar Wochen nach dem Versionsumstieg sein.

    Und woher weiß ich, ob ich ein Programm aktualisieren kann oder ob ich es neu installieren muß?

    Du solltest es immer neu installieren, wenn Du meinem Ansatz folgen willst.

    Und wenn - wie _akualisiere_ ich z.B. den Apache(jetzt bei einem kleineren Versionsschritt)?

    So wie von mir oben beschrieben: Du installierst ihn einfach genau wie den vorherigen, nur eben in ein neues Verzeichnis.

    Bei PHP ist das ja etwas anders, das wird ja gar nicht installiert, sondern soweit ich das weiß nur in das Verzsichnis geschreiben

    Und wo soll das der Unterschied sein? "Installation" hat nichts mit "Registry" oder ähnlichem Unfug zu tun - jedenfalls unter UNIX.

    Kann ich da nicht einfach alle Dateien überschreiben und es müßte gehen?

    Du _willst_ das gar nicht ausprobieren, sofern die Change besteht, daß es _nicht_ geht.
    Und Du willst definitiv nicht Dateien überschreiben, in denen Du selbst Änderungen vorgenommen hast - weißt Du das so gut auswendig?

    Wie ist das aber dann mit Modulen? Wenn ich z.B. in meiner aktuellen Version CURL-Support einkompiliert habe, dann muß ich das vermutlich mit der neuen Version alles nochmal neu machen, oder? Selbiges mit PERL-Modulen, oder?

    Ja, richtig.

    Deshalb automatisierst Du den Installationsvorgang der vorherigen Version über ein kleines shell-Skript. Bei mir heißt das "install_apache.sh", und es enthält etwa fünf Zeilen:
      INSTALLDIR=<pfadname>
      make clean
      configure (mit sehr langer Parameterliste)
      make
      echo "make install (manuell ausführen)"
    Wenn dieses Skript hinreichend flexibel geschrieben ist, dann funktioniert es sogar für beliebige andere Versionen; es würde reichen, wenn das Skript beispielsweise die Versionsnummer des Apache als Parameter übergeben bekommt und sich daraus alle benötigten Pfadnamen ausrechnet. Ich habe aber lieber eine Kopie dieses Skripts pro Apache-Version ... und ich mag auch ein automatisches "make install" nicht - ich könnte ja vergessen haben, das INSTALLDIR anzupassen oder was auch immer.

    Kann ich an dieser Stelle also keine RPMs verwenden, oder?

    Willst Du eine packager-proprietäre Lösung oder eine, die funktioniert? ;-)

    Vielleicht kann mal jemand ganz grob beschreiben wie man sowas remote (also von einem entfernten Rechner aus) macht(bei Linux[Redhat]).

    Apaches installiert man laut Apache Group mit "configure" aus einer shell - eine beliebige Dialog-Verbindung a la telnet reicht aus.
    Die Datei INSTALL ist sehr ausführlich, was die Parameter von "configure" betrifft.

    Viele Grüße
          Michael

    --
    T'Pol: I meant no insult.
    V'Lar: Of course not. You're simply speaking your mind ... as you always have.
    1. HAllo Michael!

      meine Antwort setzt UNIX als Plattform voraus

      dafür ist es auch gedacht, genauer RedHat Linux.

      nach Möglichkeit jede Installation so durchführen, daß sie koexistenzfähig mit anderen Installationen desselben Produkts auf derselben Maschine ist. Das mache ich bei Apache immer so - jedenfalls unter UNIX, weil es seit Apache 1.3.17 unter Windows leider nichit mehr funktioniert.

      Dann kann ich aber kein rpm mehr verwenden sondern muß das ganze manuell kompilieren, linken und konfigurieren, oder? Sowas habe ich noch nie gemacht ;-)
      Außerdem wid der Rechner noch nicht produktiv eingesetzt, also muß ich nicht innerhalb von Sekunden den alten  Zustanmd wieder herstellen können, aber Du hast schon Recht und ich würde es gerne probieren.

      Ich installiere mir einen zweiten Apache _neben_ den ersten (/usr/local/apache/<versionsnummer>).
      "/usr/local/apache" ist ein symbolic link auf diejenige Version, die ich aktuell als "die produktive" betreibe. Das ist also auch der Pfad, der beispielsweise verwendet wird, wenn der Apache beim Booten der Maschine automatisch gestartet werden soll usw.

      Die Apache-Konfigurationsdatei httpd.conf besteht bei mir aus genau zwei Zeilen:
         port 80
         include ../common/httpd.conf

      Was ist denn das? Das ist doch keine Bash-Datei oder sowas, wer oder was interpretiert diese Anweisungen? Include bindet vermutlich nur dei aktuelle httpd.conf so wie sie da original vorliegt ein, aber wieso dann noch port? In meiner httpd.conf steht da nichts von port 80, da steht nur Listen *:80, wozu braucht man dann die erste Anweisung? Und überschreibt die 2. nicht die 1.?

      Die Konfiguration ist _nicht_ Bestandteil einer bestimmten Version des Apache.
      Installiere ich einen neuen Apache, dann bekommt der auch wieder so einen Zweizeiler, allerdings mit einer anderen Portnummer. So kann ich beide Apaches parallel nebeneinander laufen lassen.

      Das hört sich schlau an.

      Installiere Apache 2.0 so, daß Apache 1.3 weiterhin lauffähig bleibt - also in ein neues Verzeichnis.

      Leichter gesagt als getan, hab mir jetzt einmal die Anleituzng auf Apache.org angesehen, da gibt es ja 2 Wge, einmal APACI und einmal traditional, was würdest Du verwenden? Udn wie es aussieht muß man PERL _vorher_ installiert haben, oder?
      Und wie ist das mit den Modulen, sind wenn ich das so mauell mache _gar_keine_ Module dabei? Also muß ich vorher wissne welches Modul ich jemanls brauchen werde und die dann alle mit einkompilieren, oder kannman auch noch welche nachinstallieren?
      Z.B. mod_php wird doch wenn immer nachträglich installiert, oder? Und was ist mit mod_perl, ist das unabhüngig von der eigentlichen PERL-Installation zu sehen?

      Und wo soll das der Unterschied sein? "Installation" hat nichts mit "Registry" oder ähnlichem Unfug zu tun - jedenfalls unter UNIX.

      Das habe ich halt noch nichzt so verinnerlicht, bei Windows ist das alles etwas anders geregelt. Bei Unix habe ich also im Normalfall nur 3 Orte, also einmal wo das eigentliche Programm "hinkopiert" wird, einmal wo eien bin zum starten des Programmes hinloopiert wird, also /usr/local/bin oder sowas und dann noch die conf-File unter /etc/blabla/, oder? Dazu kommen dann nur noch der Eintrag in einem Start-script und in einem Shutdown-Script(welche nehme ich da wohl unter Linux für den Apachen?), und das wars eigentlich, oder?

      Deshalb automatisierst Du den Installationsvorgang der vorherigen Version über ein kleines shell-Skript. Bei mir heißt das "install_apache.sh", und es enthält etwa fünf Zeilen:

      braucht man da kein #!/usr/bin/bash oder sowas in der 1. Zeile?

      INSTALLDIR=<pfadname>

      Wofür definierst Du das hier wenn Du es nachher nicht verwendest?

      make clean

      Was heißt das? Das verzeichnis leeren oder sowas?

      configure (mit sehr langer Parameterliste)

      Dann mit den ganzen Apache-Modulen und Einstellungen, oder?

      make

      Woher weiß make was genau gemact werden soll? Hier sind ja keine Parameter!

      Kann ich an dieser Stelle also keine RPMs verwenden, oder?

      Willst Du eine packager-proprietäre Lösung oder eine, die funktioniert? ;-)

      RPM ist von Readhat und funktioniert gerade dort recht gut. Aber ich werde sowieso nicht um das eigene kompilieren drum rum kommen, da ich ja keine "Standard-Installation" wünsche sondern zum einen verschiedene Module, udn des weiteren paralle Installationen.
      Machst Du das so auch mit andere Software wie mysql, postgres, php und perl, oder gelten hier andere Gesetze als für den Apachen?

      Apaches installiert man laut Apache Group mit "configure" aus einer shell - eine beliebige Dialog-Verbindung a la telnet reicht aus.

      dabei ist "configure" ein Script aus dem Apache source oder was?

      Die Datei INSTALL ist sehr ausführlich, was die Parameter von "configure" betrifft.

      Muß ich mir mal durchlesen. Irgendwann muß ich da sowieso mal durch, je eher desto besser.

      Vielen Dank für die Hilfe!

      Grüße
      Andreas