User Tools

Site Tools


doc:appunti:linux:sa:mediawiki

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:mediawiki [2014/02/01 15:58] – [Bug PDF thumbnail] niccolodoc:appunti:linux:sa:mediawiki [2018/02/07 15:51] (current) – [Configurazione di un dominio apposito per il mobile] niccolo
Line 27: Line 27:
 ===== Bug PostgreSQL metadata "type bytea" ===== ===== Bug PostgreSQL metadata "type bytea" =====
  
-Il bug [[https://bugzilla.wikimedia.org/show_bug.cgi?id=52017|52017]] impedisce di caricare file che abbiano un backslash nei metadati, mostrando l'errore **invalid input syntax for type bytea**.+Il bug [[https://bugzilla.wikimedia.org/show_bug.cgi?id=52017|52017]] (risolto nella versione 1.22.5) impedisce di caricare file che abbiano un backslash nei metadati, mostrando l'errore **invalid input syntax for type bytea**.
  
 Modificare il file **''includes/filerepo/file/LocalFile.php''**, sostituendo le occorrenze di Modificare il file **''includes/filerepo/file/LocalFile.php''**, sostituendo le occorrenze di
Line 41: Line 41:
 </code> </code>
  
-===== Bug PDF thumbnail =====+===== Problema thumbnail PDF =====
  
 Durante l'upload di file PDF si può ottenere l'errore: //Errore nella creazione della miniatura: gs: error while loading shared libraries: librt.so.1: failed to map segment from shared object: Cannot allocate memory//. Durante l'upload di file PDF si può ottenere l'errore: //Errore nella creazione della miniatura: gs: error while loading shared libraries: librt.so.1: failed to map segment from shared object: Cannot allocate memory//.
Line 56: Line 56:
 // Maximum amount of virtual memory available to shell processes under Linux, in KB. // Maximum amount of virtual memory available to shell processes under Linux, in KB.
 $wgMaxShellMemory = '262144'; $wgMaxShellMemory = '262144';
- +// Maximum file size created by shell processes under Linux, in KB.
-// Maximum file size created by shell processes under linux, in KB.+
 $wgMaxShellFileSize = '102400'; $wgMaxShellFileSize = '102400';
 </code> </code>
Line 70: Line 69:
 <code php> <code php>
 require_once "$IP/extensions/MobileFrontend/MobileFrontend.php"; require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";
 +$wgMobileFrontendLogo = "$wgScriptPath/logo-mobile.png";
 +// Mobile/desktop autodetection is incompatible with front-end cache.
 $wgMFAutodetectMobileView = true; $wgMFAutodetectMobileView = true;
-$wgUseFileCache = false; // otherwise autodetection won't be reliable+// Disable cache if $wgMFAutodetectMobileView is true. 
 +$wgUseFileCache = false;
 </code> </code>
  
Line 91: Line 93:
 ==== Configurazione di un dominio apposito per il mobile ==== ==== Configurazione di un dominio apposito per il mobile ====
  
-I siti della WikiMedia Foundation (Wikipedia) utilizzano un trucco per fornire la versione desktop e mobile contemporaneamente: attivano un dominio apposito per il mobile (ad esempio **''it.m.wikipedia.org''**) e su quello forzano l'output per dispositivo mobile. Il trucco si basa su un header HTTP che viene aggiunto dal server web (in Apache occorre il modulo **mod_headers**) e che l'estensione MobileFrontend intercetta. L'header da aggiungere è ''X-Device'', che deve avere uno dei valori indicati in questo [[https://git.wikimedia.org/blob/mediawiki%2Fextensions%2FMobileFrontend/caeaa8073e5faf8934b8e713764108ca18eb90bb/includes%2FDeviceDetection.php|file]] (si consiglia il generico ''mobi''). Questi i passaggi per la configurazione:+**ATTENZIONE**: Questa ricetta va bene per **MediaWiki 1.22**, con MobileFrontend opportuno (**aprile 2014**). Nelle versioni più recenti (es. **MediaWiki 1.30** e MobileFrontend di **febbraio 2018**) **non esiste più la gestione dell'header speciale**, tutto sembra più semplice e automatico. 
 + 
 +I siti della WikiMedia Foundation (Wikipedia) utilizzano un trucco per fornire la versione desktop e mobile contemporaneamente: attivano un dominio apposito per il mobile (ad esempio **''it.m.wikipedia.org''**) e su quello forzano l'output per dispositivo mobile. Il trucco si basa su un header HTTP che viene aggiunto dal server web (in Apache occorre il modulo **mod_headers**) e che l'estensione MobileFrontend intercetta. Il cookie ''stopMobileRedirect'' dovrebbe garantire che il sito si presenta sempre nella veste preferita, dopo che l'utente ha cliccato sul link versione mobile o versione desktop. 
 + 
 +L'header da aggiungere è ''X-WAP''. Questi i passaggi per la configurazione:
  
   - Aggiungere un nome al DNS, ad esempio per il dominio ''%%www.mydomain.org%%'' si può usare ''%%www.m.mydomain.org%%'' (dove //m// sta per mobile).   - Aggiungere un nome al DNS, ad esempio per il dominio ''%%www.mydomain.org%%'' si può usare ''%%www.m.mydomain.org%%'' (dove //m// sta per mobile).
-  - Definire in **''LocalSettings.php''** la variabile [[http://www.mediawiki.org/wiki/Extension:MobileFrontend/Configuring_browser_auto-detection|$wgMobileUrlTemplate]]: <code php>$wgMobileUrlTemplate = '%h0.m.%h1.%h2';</code> FIXME **Attenzione al bug [[https://bugzilla.wikimedia.org/show_bug.cgi?id=58321|58321]]!** la variabile deve inizare con un segnaposto **''%h''** altrimenti non viene usata correttamente! +  - Definire in **''LocalSettings.php''** la variabile [[http://www.mediawiki.org/wiki/Extension:MobileFrontend/Configuring_browser_auto-detection|$wgMobileUrlTemplate]] e disabilitare l'autodetect (sarà poi possibile abilitare la cache): <code php>$wgMobileUrlTemplate = '%h0.m.%h1.%h2'
-  - Configurare il ''VirtualHost'' in Apache per il dominio mobile, in esso impostare l'header **''X-Device''**. Apache aggiungerà l'header alla richiesta di una pagina dal dominio mobile e l'estensione di MediaWiki servirà la versione opportuna (con Apache 2.4 si potrebbe sfruttare la direttiva ''%%<If>%%''): <file><ifModule mod_headers.c>+$wgMFAutodetectMobileView = false;</code> **Attenzione al bug [[https://bugzilla.wikimedia.org/show_bug.cgi?id=58321|58321]]!** la variabile deve inizare con un segnaposto **''%h''** altrimenti non viene usata correttamente! 
 +  - Configurare il ''VirtualHost'' in Apache per il dominio mobile, in esso impostare l'header **''X-WAP''**. Apache aggiungerà l'header alla richiesta di una pagina dal dominio mobile e l'estensione di MediaWiki servirà la versione opportuna (con Apache 2.4 si potrebbe sfruttare la direttiva ''%%<If>%%'' invece di avere un VirtualHost dedicato): <file><ifModule mod_headers.c>
   <VirtualHost *:80>   <VirtualHost *:80>
     ServerName www.m.mydomain.org     ServerName www.m.mydomain.org
-    RequestHeader set X-Device "mobi"+    RequestHeader set X-WAP "no"
     ...     ...
   </VirtualHost>   </VirtualHost>
 </ifModule></file> </ifModule></file>
  
-FIXME C'è un problema (versioniMediaWiki 1.21.3, MobileFrontend 30dad7e). Avendo attivato il dominio specifico per il mobile (come descritto sopra), il link in basso per passare dalla versione normale a quella mobile non contiene il parametro **''mobileaction''**, ma si basa solo sulla richiesta del dominio //mobile//. Purtroppo il cookie **''stopMobileRedirect''** inibisce il cambio e si ottiene la versione desktop anche sul dominio mobileUn fix può essere quello di forzare l'aggiunta del parametro, modificando il file **''extensions/MobileFrontend/includes/MobileFrontend.hooks.php''**:+**ATTENZIONE:** L'utilizzo dell'header **''X-WAP''** può generare confusione, ma tant'è! Si sono verificati i sorgenti e si è verificato che funziona con la versione 2e0af84 REL1_22In qualche vecchia documentazione è scritto di utilizzare l'header ''X-Device'', ma questo non risulta dai sorgenti né funziona.
  
-<code> +Questa soluzione dovrebbe essere compatibile con ''$wgUseFileCache''.
-115c115 +
-< $queryString =  strlen( $wgMobileUrlTemplate ) ? '' : 'mobileaction=toggle_view_mobile'; +
---- +
-> $queryString =  'mobileaction=toggle_view_mobile'; +
-</code> +
- +
-FIXME Questa soluzione non è ancora compatibile con ''$wgUseFileCache''. Alcune pagine mobile vengono generate con uno stile sbagliato (titoli non cliccabili e quindi sezione non espandibile), indagare se si tratta di un problema legato a ''$wgMFAutodetectMobileView'' oppure al fatto che la cache non viene effettivamente popolata.+
 ===== Attivazione cache ===== ===== Attivazione cache =====
  
-FIXME Vedere come si attiva e se è compatibile con tutte le altre estensioni, soprattutto con l'autodetect del dispositivo mobile/desktop.+FIXME Vedere come attivare la [[http://www.mediawiki.org/wiki/Manual:File_cache|cache]] e se è compatibile con tutte le altre estensioni, soprattutto con l'autodetect del dispositivo mobile/desktop.
  
 ===== Estensione Pdf Export ===== ===== Estensione Pdf Export =====
 +
 +**NOTA:** Questa estensione è stata scartata in favore della [[#Estensione PDF Writer]].
  
 **NOTA:** qualora si utilizzi il backend HTMLDoc questa soluzione è fortemente penalizzata dall'impossibilità di utilizzare gli stili. Installando altri backend (es. MWLib) si possono utilizzare altre estensioni, forse più flessibili. **NOTA:** qualora si utilizzi il backend HTMLDoc questa soluzione è fortemente penalizzata dall'impossibilità di utilizzare gli stili. Installando altri backend (es. MWLib) si possono utilizzare altre estensioni, forse più flessibili.
Line 126: Line 128:
   * Effettua una conversione in HTML e poi chiama un backend a scelta tra HTMLDoc, DomPdf, MWlib, MPdf, e PrinceXML.   * Effettua una conversione in HTML e poi chiama un backend a scelta tra HTMLDoc, DomPdf, MWlib, MPdf, e PrinceXML.
  
-Anzitutto abbiamo avuto un problema con lo snapshot 13c60af scaricato dal **[[http://www.mediawiki.org/wiki/Special:ExtensionDistributor/PdfExport|download snapshow]]**, perché in realtà quello non è compatibile con MediaWiki 1.21.3. Come si legge da questo [[http://www.mediawiki.org/wiki/Extension_talk:Pdf_Export#MWlib_issues_28541|post]], si è dovuto sostituire tutte le occorrenze di ''wfLoadExtensionMessages()'' in  **''PdfExport.php''** e **''PdfExport_body.php''** con+Anzitutto abbiamo avuto un problema con lo snapshot 13c60af scaricato dal **[[http://www.mediawiki.org/wiki/Special:ExtensionDistributor/PdfExport|download snapshot]]**, perché in realtà quello non è compatibile con MediaWiki 1.21.3. Come si legge da questo [[http://www.mediawiki.org/wiki/Extension_talk:Pdf_Export#MWlib_issues_28541|post]], si è dovuto sostituire tutte le occorrenze di ''wfLoadExtensionMessages()'' in  **''PdfExport.php''** e **''PdfExport_body.php''** con
  
 <code php> <code php>
Line 159: Line 161:
 </code> </code>
  
-Con la Collection installata si ha già la funzione //Scarica come PDF//, che però si appoggia per il rendering su un servizio gratuito di PediaPress.+Nella sezione **//Stampa/esporta//** del menu a sinistra compare la voce **//Crea un libro//** e **//Scarica come PDF//**. Quest'ultima funzione è disponibile anche con la sola estensione Collectionma in quel caso si appoggia per il rendering ad un servizio gratuito di PediaPress.
  
 Problemi: Problemi:
Line 184: Line 186:
 FIXME Nonostante che il MediaWiki sia configurato con **''%%$wgLanguageCode = "it";%%''**, l'utente collegato con Facebook viene accolto con la lingua inglese se ha impostato tale lingua su Facebook. Anche se cambia tale impostazione nelle preferenze, al successivo login la lingua viene nuovamente reimpostata. FIXME Nonostante che il MediaWiki sia configurato con **''%%$wgLanguageCode = "it";%%''**, l'utente collegato con Facebook viene accolto con la lingua inglese se ha impostato tale lingua su Facebook. Anche se cambia tale impostazione nelle preferenze, al successivo login la lingua viene nuovamente reimpostata.
  
 +Nel database di MediaWiki si possono trovare le tabelle relative alla relazione tra utenti MediaWiki e utenti Facebook:
 +
 +<code sql>
 +SELECT * FROM mediawiki.user_fbconnect ;
 +SELECT user_id,user_name FROM mediawiki.mwuser;
 +</code>
 ===== Rimozione utenti ===== ===== Rimozione utenti =====
  
Line 195: Line 203:
  
 Attenzione che alcune informazioni restano in altre tabelle e non sono collegate, ad esempio un eventuale blocco impostato su quell'utente resta ed è riferito al nome utente non all'ID. Attenzione che alcune informazioni restano in altre tabelle e non sono collegate, ad esempio un eventuale blocco impostato su quell'utente resta ed è riferito al nome utente non all'ID.
 +
 +===== Combattere lo SPAM e rimuovere gli utenti =====
 +
 +Seza le opportune precauzioni è possibile ritrovarsi decine di migliaia di utenti registrati a causa di bot automatici. Alcuni addirittura dopo aver scavalcato le protezioni contro la registrazione automatica (es. **ConfirmEdit** con ReCaptcha) mandano anche la mail di conferma. In pratica sembra che l'unica politica efficace sia quella di confermare i nuovi in modo manuale, con l'estensione **ConfirmAccount**.
 +
 +Nel caso in cui il danno sia già fatto è opportuno rimuovere gli account fake creati, che spesso restano dormienti fino al momento in cui verranno utilizzati. Sembra che lo strumento più efficace sia l'estensione **[[http://www.mediawiki.org/wiki/Extension:UserMerge|UserMerge]]**.
 +
 +Con questa estensione si può fare il merge di un utente fasullo nell'account **Anonymous**, e quindi cancellarlo. Al termine di questa procedura è possibile eventualmente eliminare tutti i contributi fasulli con l'estensione built-in **Nuke**.
 +
 +Ecco come avere l'elenco degli account non confermati via mail:
 +
 +<code sql>
 +SELECT user_name FROM mwuser WHERE user_email_authenticated IS NOT NULL;
 +</code>
 +
 +Se si tratta di migliaia di utenti sarebbe necessario un sistema per automatizzare la procedura di UserMerge.
 ===== Permessi ===== ===== Permessi =====
  
Line 232: Line 256:
 $wgShowExceptionDetails = true; $wgShowExceptionDetails = true;
 </code> </code>
 +===== Estensione ConfirmAccount =====
 +
 +Il problema dello SPAM non si ferma: nonostante il plugin **ConfirmEdit** che richiede un utente registrato e confermato (con invio di mail) prima di editare una pagina e nonostante l'uso di **ReCaptcha** che vuole la lettura di due immagini prima di effettuare la registrazine di un utente, si contano decine e decine di registrazioni fasulle al giorno, alcune di queste vengono anche confermate con la mail e quindi possono vandalizzare o creare nuove pagine.
 +
 +Si è deciso di attivare l'esetensione [[http://www.mediawiki.org/wiki/Extension%3aConfirmAccount|ConfirmAccount]], ogni utente deve essere autorizzato da un burocrate prima di essere registrato.
 +
 +Si scompatta l'archivio in ''extensions/ConfirmAccount'', quindi si aggiunge in ''LocalSettings.php'':
 +
 +<code php>
 +require_once( "$IP/extensions/ConfirmAccount/ConfirmAccount.php");
 +</code>
 +
 +Infine si aggiorna il database:
 +
 +<code>
 +cd maintenance
 +php update.php
 +</code>
 +
 ===== Estensioni varie ===== ===== Estensioni varie =====
  
Line 506: Line 549:
 ====== Aggiornamento versione ====== ====== Aggiornamento versione ======
  
-Durante l'aggiornamento può essere utile impostare in **''LocalSettings.php''** le seguenti variabili:+**ATTENZIONE:** La procedura di aggiornamento del database può essere eseguita via web oppure da riga di comando, l'esperienza insegna che conviene farla da riga di comando, in modo da aver maggior controllo su eventuali messaggi di errore, ecc. 
 + 
 +In generale l'aggiornamento può essere fatto con il sito on-line. Anche la procedura web di aggiornamento del database è protetta contro l'esecuzione accidentale perché richiede di inserire una chiave apposita **''$wgUpgradeKey''** in **''LocalSettings.php''**. 
 + 
 +Ad ogni modo durante l'aggiornamento si può impostare in **''LocalSettings.php''** le seguenti variabili:
  
 <code php> <code php>
Line 514: Line 561:
  
 La prima stringa viene mostrata all'inizio di ogni pagina, la seconda viene mostrata quando si tenta di modificare una pagina. La prima stringa viene mostrata all'inizio di ogni pagina, la seconda viene mostrata quando si tenta di modificare una pagina.
 +
 +Questa la procedura generica di aggiornamento sicuro:
 +
 +  - Fare un backup dei file e del database.
 +  - Scompattare l'archivio in una nuova directory (es. ''wiki.new'').
 +  - Preparare le directory copiandoci il vecchio ''LocalSettings.php'', le ''extensions'', le eventuali skin.
 +  - Vedere le release notes se ci sono cambiamenti da fare al ''LocalSettings.php''.
 +  - Mettere in read only aggiungendo in ''LocalSettings.php'' qualcosa del genere:\\ ''$wgReadOnly = 'Upgrading to MediaWiki 1.22.5';''.
 +  - eseguire da riga di comando nella nuova directory:\\ ''cd maintenance''\\ ''php ./update.php''
 +  - Copiare la directory ''images'' dalla vecchia installazione.
 +  - Scambiare la vecchia con la nuova directory..
 +
 ===== Da MediaWiki 1.9.2 a 1.13.0 ===== ===== Da MediaWiki 1.9.2 a 1.13.0 =====
  
doc/appunti/linux/sa/mediawiki.1391266738.txt.gz · Last modified: 2014/02/01 15:58 by niccolo