Leitfaden Update der Wiki-Software

Leitfaden zur Aktualisierung der mediawiki-Software von SkipperGuide

1. Vorbereitung und Backup

1.1. Standard-Sicherung Datenbank und Webverzeichnis

 SSH> ./dumpdb
 SSH> ./dumpwebsites

1.2. Sicherung des aktuellen Version als Referenz

 SSH> cp -R www_skipperguide_de/* backup_skipperguide_de

1.3. Vorbereiten Testsystem

1.3.1. Kopieren der aktuellen Programmversion

Kopieren der Programmdateien

 SSH> cp -R www_skipperguide_de/* test_skipperguide_de

1.3.2. Anpassen DB-Connection

 Anpassen von 
 - LocalSettings.php
 - LocalDBSettings.php
 - AdminSettings.php
 DB-Präfix: "sg2_" --> "test_sg2_"

1.3.3. Anlegen Test-Datenbank

(Sofern die Testdatenbank nicht auf aktuellem Stand der mediawiki-Version ist)

Überblick Tabellen

sg2_archive
sg2_categorylinks
sg2_externallinks
sg2_filearchive
sg2_hitcounter
sg2_image
sg2_imagelinks
sg2_interwiki
sg2_ipblocks
sg2_ipblocks_old
sg2_job
sg2_langlinks
sg2_logging
sg2_math
sg2_objectcache
sg2_oldimage
sg2_page
sg2_pagelinks
sg2_page_restrictions
sg2_querycache
sg2_querycachetwo
sg2_querycache_info
sg2_recentchanges
sg2_redirect
sg2_revision
sg2_searchindex
sg2_site_stats
sg2_templatelinks
sg2_text
sg2_trackbacks
sg2_transcache
sg2_user
sg2_user_groups
sg2_user_newtalk
sg2_validate
sg2_watchlist

1.3.3.1. Kopieren der Tabellen

für jede Tabelle

 SQL> CREATE TABLE test_<TBL_NAME> AS SELECT * FROM <TBL_NAME>

1.3.3.2. Anlegen der Indizes

wichtig, weil das mediawiki-update-Skript sonst bei "DROP INDEX" Fehler meldet

Erzeugen des SQL-Statements zur Index-Erstellung auf Basis von "sg2_*":

 SELECT
     CONCAT(
         ‘ALTER TABLE `’,
         TABLE_NAME,
         ‘` ‘,
         ‘ADD ‘,
         IF(NON_UNIQUE = 1,
             CASE UPPER(INDEX_TYPE)
                 WHEN ‘FULLTEXT’ THEN ‘FULLTEXT INDEX’
                 WHEN ‘SPATIAL’ THEN ‘SPATIAL INDEX’
                 ELSE CONCAT(‘INDEX `’,
                             INDEX_NAME,
                             ‘` USING ‘,
                             INDEX_TYPE
                     )
             END,
             IF(UPPER(INDEX_NAME) = ‘PRIMARY’,
                 CONCAT(‘PRIMARY KEY USING ‘,
                         INDEX_TYPE
                 ),
                 CONCAT(‘UNIQUE INDEX `’,
                         INDEX_NAME,
                         ‘` USING ‘,
                         INDEX_TYPE
                 )
             )
         ),
         ‘(’,
         GROUP_CONCAT(
             DISTINCT
                 CONCAT(‘`’, COLUMN_NAME, ‘`’)
             ORDER BY SEQ_IN_INDEX ASC
             SEPARATOR ‘, ‘
         ),
         ‘);’
      ) AS ‘Show_Add_Indexes’
 FROM information_schema.STATISTICS
 WHERE TABLE_SCHEMA like ’sg2_%’
 GROUP BY TABLE_NAME, INDEX_NAME
 ORDER BY TABLE_NAME ASC, INDEX_NAME ASC

Generierte Liste SQL

(Auf Basis mediawiki-1.10.)

 ALTER TABLE test_sg2_archive ADD INDEX name_title_timestamp USING BTREE(ar_namespace, ar_title, ar_timestamp);
 ALTER TABLE test_sg2_categorylinks ADD UNIQUE INDEX cl_from USING BTREE(cl_from, cl_to);
 ALTER TABLE test_sg2_categorylinks ADD INDEX cl_sortkey USING BTREE(cl_to, cl_sortkey);
 ALTER TABLE test_sg2_categorylinks ADD INDEX cl_timestamp USING BTREE(cl_to, cl_timestamp);
 ALTER TABLE test_sg2_externallinks ADD INDEX el_from USING BTREE(el_from, el_to);
 ALTER TABLE test_sg2_externallinks ADD INDEX el_index USING BTREE(el_index);
 ALTER TABLE test_sg2_externallinks ADD INDEX el_to USING BTREE(el_to, el_from);
 ALTER TABLE test_sg2_filearchive ADD INDEX fa_deleted_timestamp USING BTREE(fa_deleted_timestamp);
 ALTER TABLE test_sg2_filearchive ADD INDEX fa_deleted_user USING BTREE(fa_deleted_user);
 ALTER TABLE test_sg2_filearchive ADD INDEX fa_name USING BTREE(fa_name, fa_timestamp);
 ALTER TABLE test_sg2_filearchive ADD INDEX fa_storage_group USING BTREE(fa_storage_group, fa_storage_key);   
 ALTER TABLE test_sg2_filearchive ADD PRIMARY KEY USING BTREE(fa_id);              
 ALTER TABLE test_sg2_image ADD INDEX img_size USING BTREE(img_size);             
 ALTER TABLE test_sg2_image ADD INDEX img_timestamp USING BTREE(img_timestamp);
 ALTER TABLE test_sg2_image ADD PRIMARY KEY USING BTREE(img_name);               
 ALTER TABLE test_sg2_imagelinks ADD UNIQUE INDEX il_from USING BTREE(il_from, il_to);
 ALTER TABLE test_sg2_imagelinks ADD INDEX il_to USING BTREE(il_to, il_from);
 ALTER TABLE test_sg2_interwiki ADD UNIQUE INDEX iw_prefix USING BTREE(iw_prefix);
 ALTER TABLE test_sg2_ipblocks ADD UNIQUE INDEX ipb_address_unique USING BTREE(ipb_address, ipb_user, ipb_auto);  
 ALTER TABLE test_sg2_ipblocks ADD INDEX ipb_expiry USING BTREE(ipb_expiry);            
 ALTER TABLE test_sg2_ipblocks ADD INDEX ipb_range USING BTREE(ipb_range_start, ipb_range_end);      
 ALTER TABLE test_sg2_ipblocks ADD INDEX ipb_timestamp USING BTREE(ipb_timestamp);          
 ALTER TABLE test_sg2_ipblocks ADD INDEX ipb_user USING BTREE(ipb_user);
 ALTER TABLE test_sg2_ipblocks ADD PRIMARY KEY USING BTREE(ipb_id);              
 ALTER TABLE test_sg2_ipblocks_old ADD INDEX ipb_address USING BTREE(ipb_address);          
 ALTER TABLE test_sg2_ipblocks_old ADD INDEX ipb_range USING BTREE(ipb_range_start, ipb_range_end);     
 ALTER TABLE test_sg2_ipblocks_old ADD INDEX ipb_user USING BTREE(ipb_user);            
 ALTER TABLE test_sg2_ipblocks_old ADD PRIMARY KEY USING BTREE(ipb_id);             
 ALTER TABLE test_sg2_job ADD INDEX job_cmd USING BTREE(job_cmd, job_namespace, job_title);       
 ALTER TABLE test_sg2_job ADD PRIMARY KEY USING BTREE(job_id);                
 ALTER TABLE test_sg2_langlinks ADD UNIQUE INDEX ll_from USING BTREE(ll_from, ll_lang);        
 ALTER TABLE test_sg2_langlinks ADD INDEX ll_lang USING BTREE(ll_lang, ll_title);          
 ALTER TABLE test_sg2_logging ADD INDEX page_time USING BTREE(log_namespace, log_title, log_timestamp);    
 ALTER TABLE test_sg2_logging ADD PRIMARY KEY USING BTREE(log_id);               
 ALTER TABLE test_sg2_logging ADD INDEX times USING BTREE(log_timestamp);            
 ALTER TABLE test_sg2_logging ADD INDEX type_time USING BTREE(log_type, log_timestamp);        
 ALTER TABLE test_sg2_logging ADD INDEX user_time USING BTREE(log_user, log_timestamp);        
 ALTER TABLE test_sg2_math ADD UNIQUE INDEX math_inputhash USING BTREE(math_inputhash);
 ALTER TABLE test_sg2_objectcache ADD INDEX exptime USING BTREE(exptime);
 ALTER TABLE test_sg2_objectcache ADD UNIQUE INDEX keyname USING BTREE(keyname);
 ALTER TABLE test_sg2_oldimage ADD INDEX oi_name USING BTREE(oi_name);
 ALTER TABLE test_sg2_page ADD UNIQUE INDEX name_title USING BTREE(page_namespace, page_title);      
 ALTER TABLE test_sg2_page ADD INDEX page_len USING BTREE(page_len);              
 ALTER TABLE test_sg2_page ADD INDEX page_random USING BTREE(page_random);            
 ALTER TABLE test_sg2_page ADD PRIMARY KEY USING BTREE(page_id);               
 ALTER TABLE test_sg2_pagelinks ADD UNIQUE INDEX pl_from USING BTREE(pl_from, pl_namespace, pl_title);    
 ALTER TABLE test_sg2_pagelinks ADD INDEX pl_namespace USING BTREE(pl_namespace, pl_title, pl_from);     
 ALTER TABLE test_sg2_page_restrictions ADD PRIMARY KEY USING BTREE(pr_page, pr_type);         
 ALTER TABLE test_sg2_page_restrictions ADD INDEX pr_cascade USING BTREE(pr_cascade);         
 ALTER TABLE test_sg2_page_restrictions ADD UNIQUE INDEX pr_id USING BTREE(pr_id);          
 ALTER TABLE test_sg2_page_restrictions ADD INDEX pr_level USING BTREE(pr_level);          
 ALTER TABLE test_sg2_page_restrictions ADD INDEX pr_page USING BTREE(pr_page);
 ALTER TABLE test_sg2_page_restrictions ADD INDEX pr_typelevel USING BTREE(pr_type, pr_level);
 ALTER TABLE test_sg2_querycache ADD INDEX qc_type USING BTREE(qc_type, qc_value);          
 ALTER TABLE test_sg2_querycachetwo ADD INDEX qcc_title USING BTREE(qcc_type, qcc_namespace, qcc_title);    
 ALTER TABLE test_sg2_querycachetwo ADD INDEX qcc_titletwo USING BTREE(qcc_type, qcc_namespacetwo, qcc_titletwo); 
 ALTER TABLE test_sg2_querycachetwo ADD INDEX qcc_type USING BTREE(qcc_type, qcc_value);
 ALTER TABLE test_sg2_querycache_info ADD UNIQUE INDEX qci_type USING BTREE(qci_type);         
 ALTER TABLE test_sg2_recentchanges ADD INDEX new_name_timestamp USING BTREE(rc_new, rc_namespace, rc_timestamp); 
 ALTER TABLE test_sg2_recentchanges ADD PRIMARY KEY USING BTREE(rc_id);             
 ALTER TABLE test_sg2_recentchanges ADD INDEX rc_cur_id USING BTREE(rc_cur_id);           
 ALTER TABLE test_sg2_recentchanges ADD INDEX rc_ip USING BTREE(rc_ip);             
 ALTER TABLE test_sg2_recentchanges ADD INDEX rc_namespace_title USING BTREE(rc_namespace, rc_title);     
 ALTER TABLE test_sg2_recentchanges ADD INDEX rc_ns_usertext USING BTREE(rc_namespace, rc_user_text);     
 ALTER TABLE test_sg2_recentchanges ADD INDEX rc_timestamp USING BTREE(rc_timestamp);         
 ALTER TABLE test_sg2_recentchanges ADD INDEX rc_user_text USING BTREE(rc_user_text, rc_timestamp);     
 ALTER TABLE test_sg2_redirect ADD PRIMARY KEY USING BTREE(rd_from);              
 ALTER TABLE test_sg2_redirect ADD INDEX rd_ns_title USING BTREE(rd_namespace, rd_title, rd_from);     
 ALTER TABLE test_sg2_revision ADD INDEX page_timestamp USING BTREE(rev_page, rev_timestamp);       
 ALTER TABLE test_sg2_revision ADD PRIMARY KEY USING BTREE(rev_page, rev_id);
 ALTER TABLE test_sg2_revision ADD UNIQUE INDEX rev_id USING BTREE(rev_id);            
 ALTER TABLE test_sg2_revision ADD INDEX rev_timestamp USING BTREE(rev_timestamp);          
 ALTER TABLE test_sg2_revision ADD INDEX usertext_timestamp USING BTREE(rev_user_text, rev_timestamp);     
 ALTER TABLE test_sg2_revision ADD INDEX user_timestamp USING BTREE(rev_user, rev_timestamp);       
 ALTER TABLE test_sg2_searchindex ADD UNIQUE INDEX si_page USING BTREE(si_page);           
 ALTER TABLE test_sg2_searchindex ADD FULLTEXT INDEX(si_text);                
 ALTER TABLE test_sg2_searchindex ADD FULLTEXT INDEX(si_title);               
 ALTER TABLE test_sg2_site_stats ADD UNIQUE INDEX ss_row_id USING BTREE(ss_row_id);          
 ALTER TABLE test_sg2_templatelinks ADD UNIQUE INDEX tl_from USING BTREE(tl_from, tl_namespace, tl_title);   
 ALTER TABLE test_sg2_templatelinks ADD INDEX tl_namespace USING BTREE(tl_namespace, tl_title, tl_from);    
 ALTER TABLE test_sg2_text ADD PRIMARY KEY USING BTREE(old_id);               
 ALTER TABLE test_sg2_trackbacks ADD PRIMARY KEY USING BTREE(tb_id);              
 ALTER TABLE test_sg2_trackbacks ADD INDEX tb_page USING BTREE(tb_page);             
 ALTER TABLE test_sg2_transcache ADD UNIQUE INDEX tc_url_idx USING BTREE(tc_url);          
 ALTER TABLE test_sg2_user ADD PRIMARY KEY USING BTREE(user_id);               
 ALTER TABLE test_sg2_user ADD INDEX user_email_token USING BTREE(user_email_token);          
 ALTER TABLE test_sg2_user ADD UNIQUE INDEX user_name USING BTREE(user_name);           
 ALTER TABLE test_sg2_user_groups ADD PRIMARY KEY USING BTREE(ug_user, ug_group);          
 ALTER TABLE test_sg2_user_groups ADD INDEX ug_group USING BTREE(ug_group);            
 ALTER TABLE test_sg2_user_newtalk ADD INDEX user_id USING BTREE(user_id);            
 ALTER TABLE test_sg2_user_newtalk ADD INDEX user_ip USING BTREE(user_ip);            
 ALTER TABLE test_sg2_validate ADD INDEX val_user USING BTREE(val_user, val_revision);         
 ALTER TABLE test_sg2_watchlist ADD INDEX namespace_title USING BTREE(wl_namespace, wl_title);
 ALTER TABLE test_sg2_watchlist ADD UNIQUE INDEX wl_user USING BTREE(wl_user, wl_namespace, wl_title);    
 ALTER TABLE sgtmp_transcache ADD UNIQUE INDEX tc_url_idx USING BTREE(tc_url);          
 ALTER TABLE test_test_sg2_archive ADD INDEX name_title_timestamp USING BTREE(ar_namespace, ar_title, ar_timestamp); 
 ALTER TABLE test_test_sg2_categorylinks ADD UNIQUE INDEX cl_from USING BTREE(cl_from, cl_to);       
 ALTER TABLE test_test_sg2_categorylinks ADD INDEX cl_sortkey USING BTREE(cl_to, cl_sortkey);       
 ALTER TABLE test_test_sg2_categorylinks ADD INDEX cl_timestamp USING BTREE(cl_to, cl_timestamp);      
 ALTER TABLE test_test_sg2_externallinks ADD INDEX el_from USING BTREE(el_from, el_to);        
 ALTER TABLE test_test_sg2_externallinks ADD INDEX el_index USING BTREE(el_index);
 ALTER TABLE test_test_sg2_externallinks ADD INDEX el_to USING BTREE(el_to, el_from);
 ALTER TABLE test_test_sg2_image ADD UNIQUE INDEX img_name USING BTREE(img_name);

1.3.3.3. Anlegen Auto-Inkrements

Ohne das kommt es zu Fehlern beim Berarbeiten von Artikeln (z.B.: old_id cannot be NULL)

 ALTER TABLE `test_sg2_categorylinks` CHANGE `cl_timestamp` `cl_timestamp` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP;
 ALTER TABLE `test_sg2_ipblocks` CHANGE `ipb_id` `ipb_id` INT( 8 ) NOT NULL AUTO_INCREMENT;
 ALTER TABLE `test_sg2_job` CHANGE `job_id` `job_id` INT( 9 ) UNSIGNED NOT NULL AUTO_INCREMENT;
 ALTER TABLE `test_sg2_page` CHANGE `page_id` `page_id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT;
 ALTER TABLE `test_sg2_recentchanges` CHANGE `rc_id` `rc_id` INT( 8 ) NOT NULL AUTO_INCREMENT;
 ALTER TABLE `test_sg2_revision` CHANGE `rev_id` `rev_id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT;
 ALTER TABLE `test_sg2_text` CHANGE `old_id` `old_id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT;
 ALTER TABLE `test_sg2_trackbacks` CHANGE `tb_id` `tb_id` INT( 11 ) NOT NULL AUTO_INCREMENT;
 ALTER TABLE `test_sg2_user` CHANGE `user_id` `user_id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT;
 ALTER TABLE `test_sg2_logging` CHANGE `log_id` `log_id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT;

1.3.3.4. Test der Testinstallation

Testen der Anwendung über test.skipperguide.de. Folgende Schnelltests durchführen:

 1. Anzeigen von Artikeln ohne Bilder
 2. Anzeigen von Artikeln mit Bildern
 3. Anzeigen der Änderungshistorie (entspricht sie der Standard-Installation?)
 4. Bearbeiten eines Artikels
 5. Anzeigen der Änderungdshistorie, prüfen, dass diese Änderung *nicht* in der Änderungshistorie der Standardinstallation auftaucht.


2. Update

2.1. Download aktuelle mediawiki-Version

 SSH> cd test_skipperguide_de/tmp
 SSH> lynx http://<mediawiki-website>, Download aktuelle mediawiki-Version

2.2. Entpacken und installieren

Das tar kommt im Verzeichnis "mediawiki-<VERSION>". Der Server kennt -in Abweichung zur Installationsanleitung mediawiki- die Option "ignore-path=1" nicht.

Daher das tar in ein Unterverzeichnis entpacken, ohne Hauptverzeichnis neu packen und dann in das mediawiki-Verzeichnis der Installation einspielen:

 SSH> cd test_skipperguide_de/tmp

Entpacken

 1. SSH> tar xvfz <mediawiki-XY.tar.gz>

Neu Packen:

 2. SSH> cd mediawiki-XY
 3. SSH> tar cvf tmp.tar *

Ins Installationsverzeichnis entpacken:

 4. SSH> mv tmp.tar ../../mediawiki
 5. SSH> cd ../../mediawiki
 6. SSH> tar xvf tmp.tar

2.3. Updateskripte durchführen

2.3.1. AdminSettings.php kontrollieren

Kontrollieren, dass in der AdminSettings.php die korrekte Datenbankconnection und das korrekte DB-Präfix (test_sg2_) eingestellt ist!

2.3.2. Ausführen der Updateskripte

Anleitung der mediawiki-Updateanleitung folgen. Hinweis: Statt "php" muss in der Kommandozeile "php5" verwendet werden!!

Bisher:

 1. SSH> cd test_skipperguide_de/mediawiki/maintenance
 2. SSH> php5 update.php -akonf ../AdminSettings.php

2.3.3. Kontrollieren Update

Kontrolle des korrekten Updates der Programmversion

 1. Prüfen von http://test.skipperguide.de/wiki/Spezial:Version
 2. Anzeigen von Artikeln, Bearbeiten von Artikeln, Anlegen von Artikeln

2.3.4. Kontrolle der korrekten Funktionsweise der Zusatzfeatures/Extensions

Manuelle Prüfung, ob die Extensions wie GoogleMaps, CharInsert, etc funktionieren. Hierzu die Liste unter "Spezial:Version" vergleichen.

Bei Bedarf einzelne Extensions neu installieren (Vorher bitte Schritt 3 durchführen!).

Hinweis: es kann grundsätzlich nach dem Update zu CSS-Problemen kommen. Daher zuerst die SkipperGuide spezifischen Anpassungen durchführen, bevor die Funktionsweise der Extensions endgültig beurteilt werden kann.

3. Anpassung der SkipperGuide-spezifischen Features

Es gibt ein paar SkipperGuide-spezifische Anpassungen, die nach einem Update wahrscheinlich aktualisiert werden müssen, weil sie in den mediawiki-Sourcen eingebaut wurden.

Im einzelnen handelt es sich um

Es gab in der Vergangenheit Probleme mit dem Seitentemplate, dem CSS und JavaScript, wo einige Erweitungen nicht standardkonform eingebaut werden konnten (Siehe auch EMails mit Erik, Stichwort "wikibits.js"

3.1. Anzeige Bearbeiter in Footer

Betroffene Dateien:

 includes/Article.php
 includes/Skin.php

Details siehe SkipperGuide:Interne_Dokumentation/Seitenfooter

3.2. Stats

Betroffene Dateien:

 index.php

Details siehe SkipperGuide:Interne_Dokumentation

3.3. Externe Links in neuem Fenster

Betroffene Dateien

 includes/Linker.php

Details siehe SkipperGuide:Interne_Dokumentation/Externe_Links_im_neuen_Fenster

4. Übernahme aus dem Testsystem ins Produktivsystem

Nach ausführlichen Tests muss die Installation auf dem Produktivsystem durchgeführt werden. Hierzu wird das tmp.tar ins Produktivverzeichnis übernommen, der normale Update-Vorgang gestartet und abschließend die Dateien aus dem Testsystem ins Produktivsystem kopiert

Vorbereitung: nochmal den Schritt #1.2. Sicherung des aktuellen Version als Referenz durchführen, um den aktuellsten Stand zu sichern! (z.B. wegen dem image-Verzeichnissen)

4.1. Einspielen der aktualisierten Programmversion

Übernehmen des tmp.tars ins Produktivsystem. Grund: die Update-Skripte für die Datenbank müssen auf dem Produktivsystem ausgeführt werden! Es kann nicht ausgeschlossen werden, dass die Update-Skripte auch Dateien verändern, so dass ein sauberer Pre-Update-Stand geschaffen werden muss.

 1. SSH> cd www_skipperguide_de/mediawiki
 2. SSH> cp ../../test_skipperguide_de/mediawiki/tmp.tar .
 3. SSH> tar xvf tmp.tar

4.2. Update-Skripte

Vorher: korrekte Config in AdminSettings.php prüfen (Datenbank-Präfix muss "sg2_" sein!

Weiteres Vorgehen: siehe #2.3. Updateskripte durchführen

4.3. Update der Programmdateien

Kopieren des Dateisystems aus dem Testsystem ins Produktivverzeichnis:

 SSH> cp -R test_skipperguide_de/mediawiki/* www_skipperguide_de/mediawiki

Aktualisieren von

 AdminSettings.php
 LocalSettings.php
 LocalDBSettings.php

--> Datenbank-Präfix von "test_sg2_" nach "sg2_" ändern

4.4. Kontrolle des Produktivsystems

Ausführliche Kontrolle des Produktivsystems und aller Plugins!