abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 22:33 | Nová verze

    Oficiálně byl vydán Android 16. Detaily na blogu a stránkách věnovaných vývojářům.

    Ladislav Hagara | Komentářů: 1
    dnes 14:33 | Nová verze

    Byla vydána nová verze 14.3 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    dnes 14:00 | Upozornění

    CSIRT.CZ upozorňuje, že na základě rozhodnutí federálního soudu ve Spojených státech budou veškeré konverzace uživatelů s ChatGPT uchovávány. Včetně těch smazaných.

    Ladislav Hagara | Komentářů: 7
    dnes 13:44 | Pozvánky

    Ač semestr ve škole právě končí, bastlíři ze studentského klubu Silicon Hill neodpočívají a opět se jako každý měsíc hlásí s pravidelným bastlířským setkáním Virtuální Bastlírna, kde si můžete s ostatními techniky popovídat jako u piva o novinkách, o elektronice, softwaru, vědě, technice obecně, ale také o bizarních tématech, která se za poslední měsíc na internetu vyskytla.

    Z novinek za zmínku stojí Maker Faire, kde Pájeníčko předvedlo … více »
    bkralik | Komentářů: 0
    dnes 04:44 | Zajímavý software

    Na WWDC25 byl představen balíček Containerization a nástroj container pro spouštění linuxových kontejnerů na macOS. Jedná se o open source software pod licencí Apache 2.0 napsaný v programovacím jazyce Swift.

    Ladislav Hagara | Komentářů: 1
    dnes 02:00 | IT novinky

    Do 16. června do 19:00 běží na Steamu přehlídka nadcházejících her Festival Steam Next | červen 2025 doplněná demoverzemi, přenosy a dalšími aktivitami. Demoverze lze hrát zdarma.

    Ladislav Hagara | Komentářů: 0
    včera 21:44 | IT novinky

    Apple na své vývojářské konferenci WWDC25 (Worldwide Developers Conference, keynote) představil řadu novinek: designový materiál Liquid Glass, iOS 26, iPadOS 26, macOS Tahoe 26, watchOS 26, visionOS 26, tvOS 26, nové funkce Apple Intelligence, …

    Ladislav Hagara | Komentářů: 1
    včera 20:44 | Komunita

    Organizátoři konference LinuxDays 2025, jež proběhne o víkendu 4. a 5. října 2025 v Praze na FIT ČVUT, spustili přihlašování přednášek (do 31. srpna) a sběr námětů na zlepšení.

    Ladislav Hagara | Komentářů: 0
    včera 19:11 | Nová verze

    Po roce byla vydána nová stabilní verze 25.6.0 svobodného multiplatformního multimediálního přehrávače SMPlayer (Wikipedie).

    Ladislav Hagara | Komentářů: 0
    včera 12:55 | IT novinky

    DNS4EU, tj. evropská infrastruktura služeb DNS založená na vysoce federovaném a distribuovaném ochranném ekosystému, byla spuštěna v testovacím režimu [𝕏]. Na výběr je 5 možností filtrování DNS.

    Ladislav Hagara | Komentářů: 18
    Jaký je váš oblíbený skriptovací jazyk?
     (55%)
     (32%)
     (7%)
     (2%)
     (0%)
     (0%)
     (3%)
    Celkem 242 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Čuňačíme v Mediawiki – Pozor na staré šablony

    11.3.2021 19:55 | Přečteno: 2424× | Za vším hledej Linux | poslední úprava: 11.3.2021 19:55

    Minulý pátek, po 12 letech a 8 měsících jsem změnil doménu u nejstarší, mnou kontinuálně provozované wiki. A nebyla to změna jediná.

    Aktualizace MediaWiki

    Nejprve jsem zvednul verzi MediaWiki z 1.34, které skončil životní cyklus loni na konci listopadu, na aktuální verzi 1.35, s podporou až do září 2023. A s tím byl pochopitelně spojen také upgrade používaných rozšíření.

    Z toho jsem měl poněkud obavy, protože udržovat kód rozšíření tak, aby všechno fungovalo i s aktuální verzí MediaWiki není žádná sranda. Většina jejich tvůrců má svojí práce dost a řeší jiné problémy než zrovna to, jestli rozšíření, které si napsali pro MediaWiki verze 1.12 se dá používat i s verzí 1.35.

    Problémy, spojené s nějakým rozšířením, se po aktualizaci MediaWiki obvykle projeví tak, že server zobrazí nějakou chybu, nebo nic. A řeší se tak, že se nejdřív zakomentují všechna používaná rozšíření, a pak se znovu postupně zapínají, od těch nejdůležitějších po ta méně důležitá, dokud nepřijdete na to, které z nich způsobuje problém.

    Pokud se aktualizujete nějakou starší MediaWiki (viz životní cyklus verzí MediaWiki, tak doporučuji “vyskákat” nejprve na nejbližší LTS verzi a teprve pak aktualizovat dál až po aktuální LTS verzi. I tak si ale nejprve ověřte, jestli lze vámi používaná rozšíření použít. Tyhle informace najdete na vývojářském webu https://www.mediawiki.org, kde má každé rozšíření svou stránku.

    Změna domény a certifikát

    Důvodem pro změnu domény bylo postupné sjednocení domén používaných v rámci FEL ČVUT. Tato fakulta sídlí ve dvou lokalitách. V Dejvicích a na Karlově náměstí, a historicky se tak používaly dvě domény feld.cz a felk.cz.

    Web katedry řídicí techniky, kde jsem v květnu 2008 nastoupil, používal původně doménu dce.felk.cvut.cz proto jsem zvolil pro wiki, která měla za cíl zdokumentovat do té doby panující chaos, doménové jméno support.dce.felk.cvut.cz.

    Peripetie katederního webu jsem naštěstí řešil pouze okrajově. Nastoupil jsem, coby specialista přes virtualizaci v linuxovém prostředí, se základním cílem a předsevzetím – do windows už ani klacíkem. Ovšem v době, kdy už bylo defakto rozhodnuto o tom, že se nový web katedry rozjede na redakčím systému MediaCentrik, které však bylo MS Windows server only – do té doby běžel katederní web na BSD. Proto byl na jeho správu přijat kolega, specialista na MS Windows. Tento takzvaný “nový web katedry” používal doménu www.dce.felk.cvut.cz

    S tímto webem byl ale neustálý oser. Navíc, kolega až jinak fajn kluk to vůbec neuměl s linuxem, takže ho pár let nahradil budoucí šéf SVTI, kterému se podařilo cca po třech letech té MS Win only verze katederního webu konečně zbavit. “Nový nový katederní web” pak měl primární doménu www.dce.cz. Dnes již všechny tyhle domény vedou na https://control.fel.cvut.cz.

    U stroje support jsem s aktualizací a změnou domény (a IP adres) vyčkával až bude po obhajobách, protože se jeho prostřednictvím zveřejňují také bakalářské a diplomové práce studentů. Certifikát končil teď v březnu, takže jsme to spojili s přechodem na Lets' encrypt. Vše proběhlo minulý pátek a pochopitelně se to neobešlo bez problému.

    Chyba 501

    Google umožňuje změnu domény u naindexovaných URL, ale podmínkou k úspěšné realizaci této operace je funkční přesměrování. Než se do toho pustí, kontroluje, jestli se ze všech naindexovaných adres vrací permanent redirect (301). No a v tom byla potíž. Původní certifikát byl vyexpirovaný a nový byl vystaven pouze pro novou doménu, takže veškeré moje pokusy o přesměrování končily na SSL_ERROR_RX_RECORD_TOO_LONG

    Příčina i řešení tohoto problému byla jako obvykle lapidární. Především jsme se s kolegou nepochopili. Nedošlo mi, když mi sděloval že “Lets' encrypt je pro supporta povolený” že tím měl na mysli že je to povolené i pro původní doménu. Ovšem poté co jsme si to vyjasnili, pokus o vygenerování certifikátu pro obě domény stejně selhal. Ukázalo se, že chyběl ještě CAA záznam.

    Po vyřešení přesměrování začal Google konečně přesouvat naindexovaná URL, ovšem asi z 11 tisíc naindexovaných url adres jich asi 20 házelo error 501, což bylo divné. A skutečně, když jsem se pokusil některou z nich otevřít, skončil jsem s bílou plochou prohlížeče.

    Bylo jasné, že za tím vězí nejspíš moje rozšíření AccessControl. To jsem však kompletně přepsal už předloni a pro verzi 3.0.2, až doposud nikdo žádný problém neoznámil. A jak to, že zrovna tyhle stránky? Kdyby nebyly dostupné, tak by je přeci google nenaindexoval.

    Vrtalo mi to v hlavě, ovšem abych se na některou z těch stránek dostal a zjistil v čem je problém, bylo nutné ho rozšíření dočasně vypnout.

    Ukázalo se, že ty problémové stránky natahovaly šablonu Smazat. Poté co jsem zrušil její obsah, a rozšíření znova zapnul byly stránky normálně dostupné. Chyba tedy byla v šabloně. Jenže její obsah nebyl na první pohled ničím výjimečný.

    Používala se jen u stránek určených ke smazání, takže žádná tragédie. Ale přece jen. Proč skončil zacyklením také pokus o otevření stránky s šablonou? Byla to jedna z nejstarších šablon, zkopírovaná v září 2008 z Wikipedie. Tehdy se používala s MediaWiki verze 1.12, ale zrovna tahle šablona se používala jen krátce a to hlavně kolem roku 2014, kdy na údržbě wiki pracovala skupina studentů, takže v té době musela rozhodně fungovat. Souvisel ten problém s MediaWiki verze 1.35, nebo trval delší dobu? To už jsem zpětně ověřit nemohl.

    Příčina

    Ale byla tam ještě jedna problémová stránka – singlepage stránka s manuálem k DjVu. Zjistil jsem, že jedna z inkludovaných stránek používá komplexní šablonu, která na základě předaných parametrů natahuje dvě naprosto jednoduché šablony vytvořené v roce 2015. Ovšem ty už jsem si napsal sám. Se šablonou Smazat měly ale jedno společné – způsob, jakým byly dokumentovány.

    Od roku 2015 používám dokumentaci vkládanou přes šablonu Dokumentace. Ovšem u inkriminovaných šablon byla dokumentace napsaná přímo do šablony a uzavřená do elementu noinclude. A pochopitelně tam byl i ukázkový příklad použití šablony. A to bylo ono!

    Zjistil jsem, že MediaWiki má jednu nepříjemnou chybu, která je ve spojení s rozšířením AccessControl verze 3.x fatální. V roce 2019, během MediaWiki Hackatonu a asi 14 následujících dní jsem tohle rozšíření přepsal pro potřebu Semantic wiki tak, aby bylo možné používat access listy na bázi šablon. Vše jsem důkladně otestoval, takže mě nenapadlo že by mohl někde nastat problém. Jenže jak se ukázalo, problém nastane, pokud se pokud šablona inkluduje sebe sama.

    Nevím sice od kdy, ale od určité doby MediaWiki při náhledu varuje před zasmyčkováním šablony, ale netušil jsem, že takový kód dovolí uložit. Dodatečně, metodou pokus omyl, jsem pak zjistil že ani mému rozšíření to nevadí. Až na jedinou výjimku a tou jsou právě šablony. Tím, že MediaWiki kód nejprve uloží a teprve pak interpretuje, nastane situace kdy vznikne nekonečná smyčka a další editace, která by umožnila chybu opravit, již není možná. Pokud o načtení takové stránky končí s následující chybou:

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8388616 bytes) in /srv/main/wiki/includes/libs/stats/BufferingStatsdDataFactory.php on line 89

    Nejprve jsem tedy kontaktoval Nicholase, na jehož přání jsem změny implementoval, abych ho na případný problém upozornil. A pak jsem začal pracovat na opravě. Bylo nezbytně nutné přidat hook, který by kód ověřil ještě před jeho uložením a v případě self-include jeho uložení zabránil.

    V té době už jsem měl tenhle blogpost prakticky napsaný, ale počkal jsem s jeho uveřejněním na to až bude nová verze 4.0 v git repozitáři MediaWiki. Přijde mi, že jde o natolik zásadní změnu, že si to zasloužilo navýšení verze, byť oprava nebyla z hlediska kódu nijak veliká. I z bezpečnostního hlediska to nebyl nějak zvlášť zásadní problém. Obsah nedostupných stránek nebyl nijak kompromitován. Ale to, že pro vyřešení problému je nutné zabezpečení dočasně vypnout mi přišlo jako hodně velký bezpečnostní problém.

    Už by k němu tedy nemělo dojít. Většina uživatelů na šablony stejně nehrabe. Problém by mohl nastat jedině v případě, že by chtěl někdo záměrně uškodit tím, že by takto zasmyčkoval nějakou hodně používanou šablonu. Ovšem soudný administrátor takové šablony zamyká. Ale hlavně si říkám, jak bych na ten problém vůbec přišel, kdyby mi ho neoznámil google, protože zasmyčkovanou šablonu vyhledávání ignoruje. Nevíte-li o ní, tak to vypadá jako kdyby neexistovala. Jenže ona existuje a jejím použití bezpečně zabetonuje stránku, do které byla vložena.

    Na téma MediaWiki zde ode mne v minulosti vyšlo…

    1. (11.3.2015)MediaWiki - rozšíření Translate - kromě rozšíření Translate zde padla zmínka také o rozšíření AccessControl.
    2. (12. 3.2015) Čuňačíme v MediaWiki - příklad využití rozšíření ExternalRedirect.
    3. (14. 3.2015) Čuňačíme v MediaWiki dál - popisuje, jak v prostředí MediaWiki modifikovat textové zprávy k rozšíření ConfirmAccount.
    4. (15. 3.2015) Od čuňáren ke korektnímu obsahu MediaWiki - popisuje jak u multijazyčné wiki využívat možnosti rozšíření ParserFunctions
    5. ( 1. 4.2015) Čuňačíme v MediaWiki - opět - popisuje jak využít možností rozšíření ParserFunctions MyVariables k modifikaci nabízeného obsahu wiki na základě autentifikace.
    6. ( 2. 4.2015) MediaWiki - dynamicky generované stánky - názorná ukázka využití rozšíření DynamicPageList (third-party) pro dynamicky generované stránky v MediaWiki. Kromě toho se zde objevila zmínka or rozšíření Loops a Variables, které umožňují v šablonách využívat smyčky a uživatelsky definované proměnné.
    7. ( 3. 4.2015) Čuňačíme v MediaWiki - proč? seznámení s tím, jak a proč jsem se dostal k MediaWiki
    8. (17. 8.2018) Čuňačíme v MediaWiki - responzivní obrázky blogpost o tom, jak donutit MediaWiki aby responzivně pracovala s obrázky. Součástí je šablona mé provenience, která využívá kromě již uvedených rozšíření navíc rozšíření ImageSizeInfoFunctions
    9. ( 3. 4.2019) Čuňačíme v Mediawiki – RecentChanges bez javascriptu
    10. (10. 4.2019) MediaWiki.org - překlad dokumentace
    11. (20. 5.2019) Wikimedia Hackaton 2019
    12. (12. 7.2020) Čuňačíme v MediaWiki - výřezy z obrázků
    13. ( 7. 1.2021) Čuňačíme v MediaWiki - responzivní obsah II., o pomocné šabloně I-size
    14. (10. 2.2021) Čuňačíme v MediaWiki - šablony jako nástroj., o pomocných šablonách ToDo, transstat, hop a block
    15. (26. 2.2021) Čuňačíme v MediaWiki - povídání z jiného světa, o šabloně BIO
           

    Hodnocení: 86 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.