VM architektura a jiné bláznivé nápady #290

Closed
opened 2018-09-06 17:23:35 +02:00 by Podhorecky · 14 comments
Podhorecky commented 2018-09-06 17:23:35 +02:00 (Migrated from git.spotter.cz)

dotaz:
Na základě předchozího návrhu na oddělenou strukturu vrstev VM a systém aplikačních kontejnerů se chci zeptat jestli se tím ta architektura stane výrazně univerzálnější, nebo jestli jen usnadní operace s našimi konkrétními apps? Chápu že to je dost jednoduchá otázka a složitá odpověď... nicméně proč se ptám:
Bylo by praktické do takového řešení vkládat i upe cizí (tj. ne vámi) připravené kontejnery?
Ušetřil by se tím čas, energie, peníze, problémy? Nebo spíš ne?

Tohle je zrovna konkrétní případ... stálezelené téma ofline mapového serveru OSM
https://store.docker.com/images/openmaptiles-openstreetmap-maps

Lze spekulovat, že v případě potřeby by si někdo přilepil do VM i tento docker s vektorovými mapami? Trochu skriptování navíc? A pak by asi bylo na nastavení některých aplikací, zda VMS dokáží využít offline?

Toto není jeden jediný případ, vybral jsem ho že už jsme to diskutovali a vždycky to skončilo na tom, že nejsou lidi kteří to umí rozchodit.

Pochopitelně je tématem budoucnosti i vlastnosti a konkrétní fungování toho serveru, který byste pro tyto kontejnery připravil... Nicméně to můžeme pokračovat do jiné issue.

Celé to vnímám jako dobrý systemový rozvoj hvězdoletu. Což teda není myšlenka vůbec unikátní, ale zaměření na humanitární oblast zatím ještě není běžná.
Cíl mám pořád stejný... humanitární SW... jenže jak oba vidíme, tak se některé aplikace rychle rozvíjí, jiné rychle umírají.

Můžete mne tedy jen potěšit, že v případě zájmu by šel přilepit jiný kontejner? Otevřeli bychom si tím cestu do světa , nebo spíš díru do pekla?


poslední poznámka pod čarou je jen o tom, že znám člověka, který se živí jako frontendový designer v Praze. Něco málo o mém projektu ví, ale ne příliš. Nedávno změnil práci a naznačil mi, že jeho zaměstnavatel má důležitého klienta v ČR, který pracuje na "čemsi" co je podobné mému projektu. Víc mi neřekl, protože NDA. Akorát poznamenal, že je to byznys za velký peníze, ale že ten můj přístup k věci mu přijde jako "systemovější" a víc z nadhledu.

O tom píšu proto, abyste pochopil jaké info se ke mě dostávají a jak se ty info občas spojují. Naprosto nepochybuji, že někdo někde pracuje na komerčních zakázkách s nějakým možná podobným záměrem. A že to může být supr byznys, pro konkrétního zadavatele. Za 3 měsíce hotový, hurá funguje to...

A já chci aby mě tahle konkurence netrápila, protože proti ní od začátku nemám šanci uspět u těch komerčních zákazníků. Takže proto budu hledat cokoliv, abych se jí vyhnul. To znamená hledat nějaký jiný rámec než je "konkrétní kšeft" a v tom rámci používat to, co by komerční firma spíš nepoužila. Jestli bude ten nadhled kvalitní, tak se prosadí i moje VM.

dotaz: Na základě předchozího návrhu na oddělenou strukturu vrstev VM a systém aplikačních kontejnerů se chci zeptat jestli se tím ta architektura stane výrazně univerzálnější, nebo jestli jen usnadní operace s našimi konkrétními apps? Chápu že to je dost jednoduchá otázka a složitá odpověď... nicméně proč se ptám: Bylo by praktické do takového řešení vkládat i upe cizí (tj. ne vámi) připravené kontejnery? Ušetřil by se tím čas, energie, peníze, problémy? Nebo spíš ne? Tohle je zrovna konkrétní případ... stálezelené téma ofline mapového serveru OSM https://store.docker.com/images/openmaptiles-openstreetmap-maps Lze spekulovat, že v případě potřeby by si někdo přilepil do VM i tento docker s vektorovými mapami? Trochu skriptování navíc? A pak by asi bylo na nastavení některých aplikací, zda VMS dokáží využít offline? Toto není jeden jediný případ, vybral jsem ho že už jsme to diskutovali a vždycky to skončilo na tom, že nejsou lidi kteří to umí rozchodit. Pochopitelně je tématem budoucnosti i vlastnosti a konkrétní fungování toho serveru, který byste pro tyto kontejnery připravil... Nicméně to můžeme pokračovat do jiné issue. Celé to vnímám jako dobrý systemový rozvoj hvězdoletu. Což teda není myšlenka vůbec unikátní, ale zaměření na humanitární oblast zatím ještě není běžná. Cíl mám pořád stejný... humanitární SW... jenže jak oba vidíme, tak se některé aplikace rychle rozvíjí, jiné rychle umírají. Můžete mne tedy jen potěšit, že v případě zájmu by šel přilepit jiný kontejner? Otevřeli bychom si tím cestu do světa , nebo spíš díru do pekla? ----------------- poslední poznámka pod čarou je jen o tom, že znám člověka, který se živí jako frontendový designer v Praze. Něco málo o mém projektu ví, ale ne příliš. Nedávno změnil práci a naznačil mi, že jeho zaměstnavatel má důležitého klienta v ČR, který pracuje na "čemsi" co je podobné mému projektu. Víc mi neřekl, protože NDA. Akorát poznamenal, že je to byznys za velký peníze, ale že ten můj přístup k věci mu přijde jako "systemovější" a víc z nadhledu. O tom píšu proto, abyste pochopil jaké info se ke mě dostávají a jak se ty info občas spojují. Naprosto nepochybuji, že někdo někde pracuje na komerčních zakázkách s nějakým možná podobným záměrem. A že to může být supr byznys, pro konkrétního zadavatele. Za 3 měsíce hotový, hurá funguje to... A já chci aby mě tahle konkurence netrápila, protože proti ní od začátku nemám šanci uspět u těch komerčních zákazníků. Takže proto budu hledat cokoliv, abych se jí vyhnul. To znamená hledat nějaký jiný rámec než je "konkrétní kšeft" a v tom rámci používat to, co by komerční firma spíš nepoužila. Jestli bude ten nadhled kvalitní, tak se prosadí i moje VM.
Podhorecky commented 2018-09-06 20:32:19 +02:00 (Migrated from git.spotter.cz)

changed the description

changed the description
Disassembler commented 2018-09-07 07:33:08 +02:00 (Migrated from git.spotter.cz)

Ano, architektura se stane výrazně univerzálnější a kdokoliv si do VM bude moci nainstalovat cokoliv, pokud to cokoliv bude mít na nějakém distribučním serveru, který se bude dát nastavit, a pokud to cokoliv bude mít odpovídající formu, která bude patřičně zdokumentovaná.

Hrubý nápad je takový, že na distribučním serveru bude existovat nějaký index, kde bude řečeno, jaké vrstvy (aplikace / archivy / balíky) se na něm nachází a jaké závislosti mají. Např. že CKAN potřebuje ActiveMQ, Solr, postgres a že ActiveMQ i Solr potřebují Javu. Pak tam budou ty jednotlivé archivy s danou vrstvou (kontejnery používají jednotlivé diskové vrstvy, které se při spuštění splácají přes sebe - tzv. overlay, čímž se šetří místo, pokud těch kontejnerů máte kýbl nebo pokud spouštíte více instancí téhož image) a pak tam bude malý archivek pro prvotní instalaci daného image. Např. skript pro konfiguraci CKAN databáze v kontejneru s postgresem, registraci Solr jádra, ActiveMQ front a vytvoření služby pro samotný CKAN kontejner. Tento skript bude v budoucnu sloužit i pro upgrade. Je to celé vlastně úplně stejný systém jako používají balíčkovací manažery na linuxech nebo Homebrew na Macu nebo Chocolatey na Windows. Pokud bude administrátor distribučního serveru lenoch, nemusí závislosti řešit vůbec a bude prostě distribuovat úplné obrazy se vším všudy.

Uživatel si tak v rozhraní najede do instalační nabídky, přihlásí se, pokud to distribuční server vyžaduje a klikne si, že chce instalovat CKAN. Aplikační manažer si na serveru přečte, jaké všechny závislostí k němu musí stáhnout, postahuje všechny archivy s obrazy a skripty, které uživatel ještě nemá, rozbalí, poskládá si strom závislostí a spustí ke všem nově staženým obrazům instalační skript. Upgrade bude později probíhat úplně stejným způsobem. Uživatel si klikne v rozhraní, že chce aktualizovat, stáhne se aktualizovaná vrstva včetně instalačního skriptu, zastaví se běžící instance daného kontejneru, nahradí se vrstva, spustí se skript který dostane informaci o tom, ze které verze na kterou se aktualizuje a provede patřičné akce, pokud jsou nějaké potřeba.

Takže ano, ve výsledku se klidně může stát, že někdo vezme dockerový kontejner z hotového úplně cizího projektu, dopíše si k němu instalační skript (v současnosti ty naše skripty mají délku mezi 5 a 20 řádky), zaindexuje si na distribučním serveru (to se dá později automatizovat) a může vesele instalovat.

Celé to zní krásně, ale zrovna Docker nám v něčem takovém dost háže klacky pod nohy, protože nedovoluje volně manipulovat s vrstavmi a neumožňuje nastavit vlastní distribuční server. Důvody, které k tomu autoři uvádí jsou IMHO dost debilní, takže teď ještě experimentuji s LXC, které má daleko méně abstrakce a umí vše, co potřebujeme. Všichni frikulíni ale bohužel distribuují aplikace v Dockeru, takže by pak použití naší platformy vyžadovalo trochu více skillu než jen tupé copy-paste.

Ano, architektura se stane výrazně univerzálnější a kdokoliv si do VM bude moci nainstalovat cokoliv, pokud to *cokoliv* bude mít na nějakém distribučním serveru, který se bude dát nastavit, a pokud to *cokoliv* bude mít odpovídající formu, která bude patřičně zdokumentovaná. Hrubý nápad je takový, že na distribučním serveru bude existovat nějaký index, kde bude řečeno, jaké vrstvy (aplikace / archivy / balíky) se na něm nachází a jaké závislosti mají. Např. že CKAN potřebuje ActiveMQ, Solr, postgres a že ActiveMQ i Solr potřebují Javu. Pak tam budou ty jednotlivé archivy s danou vrstvou (kontejnery používají jednotlivé diskové vrstvy, které se při spuštění splácají přes sebe - tzv. *overlay*, čímž se šetří místo, pokud těch kontejnerů máte kýbl nebo pokud spouštíte více instancí téhož image) a pak tam bude malý archivek pro prvotní instalaci daného image. Např. skript pro konfiguraci CKAN databáze v kontejneru s postgresem, registraci Solr jádra, ActiveMQ front a vytvoření služby pro samotný CKAN kontejner. Tento skript bude v budoucnu sloužit i pro upgrade. Je to celé vlastně úplně stejný systém jako používají balíčkovací manažery na linuxech nebo Homebrew na Macu nebo Chocolatey na Windows. Pokud bude administrátor distribučního serveru lenoch, nemusí závislosti řešit vůbec a bude prostě distribuovat úplné obrazy se vším všudy. Uživatel si tak v rozhraní najede do instalační nabídky, přihlásí se, pokud to distribuční server vyžaduje a klikne si, že chce instalovat CKAN. Aplikační manažer si na serveru přečte, jaké všechny závislostí k němu musí stáhnout, postahuje všechny archivy s obrazy a skripty, které uživatel ještě nemá, rozbalí, poskládá si strom závislostí a spustí ke všem nově staženým obrazům instalační skript. Upgrade bude později probíhat úplně stejným způsobem. Uživatel si klikne v rozhraní, že chce aktualizovat, stáhne se aktualizovaná vrstva včetně instalačního skriptu, zastaví se běžící instance daného kontejneru, nahradí se vrstva, spustí se skript který dostane informaci o tom, ze které verze na kterou se aktualizuje a provede patřičné akce, pokud jsou nějaké potřeba. Takže ano, ve výsledku se klidně může stát, že někdo vezme dockerový kontejner z hotového úplně cizího projektu, dopíše si k němu instalační skript (v současnosti ty naše skripty mají délku mezi 5 a 20 řádky), zaindexuje si na distribučním serveru (to se dá později automatizovat) a může vesele instalovat. Celé to zní krásně, ale zrovna Docker nám v něčem takovém dost háže klacky pod nohy, protože nedovoluje volně manipulovat s vrstavmi a neumožňuje nastavit vlastní distribuční server. Důvody, které k tomu autoři uvádí jsou IMHO dost debilní, takže teď ještě experimentuji s LXC, které má daleko méně abstrakce a umí vše, co potřebujeme. Všichni frikulíni ale bohužel distribuují aplikace v Dockeru, takže by pak použití naší platformy vyžadovalo trochu více skillu než jen tupé copy-paste.
Disassembler commented 2018-10-06 09:53:02 +02:00 (Migrated from git.spotter.cz)

Stav implementace k 5. říjnu 2018.

Kontejnery a vrstvy:
Aplikace běží v LXC kontejneru. Kontejner v tomto případě znamená konfigurační soubor ve kterém je nastaveno

  • Typ sítě (virtuální rozhraní)
  • Diskové vrstvy (vysvětlím níže)
  • Mounty, tj. jaká umístění z hostitele se mají objevit v kontejneru - používáme pro persistentní ukládání konfigurací a dat.
  • Aplikace, tj. jaká binárka se má při startu kontejneru spustit s jakým uživatelským účtem, jakým prostředím a jakým způsobem (signálem) se má zastavit
  • Logování v hostiteli, omezení schopností kontejneru (např. že nemůže vypnout celého hostitele) a další podružnosti, aby to celé fungovalo.

Dále kontejner zahrnuje alespoň jednu diskovou vrstvu. Pojem "vrstva" je zde použit proto, že naše kontejnery používají souborový systém překryvných vrstev OverlayFS. To znamená, že můžeme mít například jednu diskovou vrstvu pouze se základním systémem, jednu vrstvu s python runtime a jednu vrstvu se samotnou aplikací. V konfiguraci kontejneru tyhle tři vrstvy pak splácneme dohromady, takže nemusíme mít kopii systému a kopii pythonu v image každé aplikace, která je vyžaduje a ušetříme tak hromadu místa. Docker dělá něco podobného, ale je životně závislý na přesném pořadí příkazů v Dockerfile souboru pro výstavbu kontejneru. Takže pokud máme jeden kontejner, kde potřebujeme systém, python a javu a druhý, kde potřebujeme systém, javu a nodejs, bude společný pouze systém, ale java už nikoliv, protože pořadí je odlišné. S LXC máme plnou kontrolu nad tím, jaké vrstvy spojujeme, takže na pořadí nejsme závislí a musíme si jen pohlídat, aby si jednotlivé vrstvy nepřepsaly něco, co přepsat nechceme, což se díky návrhu Alpine linuxu neděje.

Výstupem tohoto návrhu jsou tedy jednotlivé překryvné vrstvy, které budou následně baleny do samostatných balíků. Ke každé aplikaci (tedy jen k takovým překryvným vrstvám, které obsahují koncovou webovou aplikaci a nikoliv jen závislosti) bude ještě přibalen konfigurační soubor jejího kontejneru a skripty pro instalaci, např. vytvoření databáze, nastavení hostname, mailu a Google maps API klíče v konfiguraci atd. Například k tomu, abych nainstaloval CKAN kontejner potřebuji balíky

  • Sdílený základní systém (pouze překryvná vrstva)
  • Sdílené knihovny pro práci s XML (pouze překryvná vrstva)
  • Sdílené python2 runtime prostředí (pouze překryvná vrstva)
  • CKAN (překryvná vrstva, konfigurace kontejneru a instalační skripty)

Balíkovací sytém:
Výše vystavěné balíky jsou pak zkomprimovány pomocí kompresního algoritmu LZMA/LZMA2 (xz), který je jedním z nejefektivnějších. K tomu, aby byl balík distribuovatelným, potřebuje ještě metadata. Ta jsou drženy mimo obsah balíku a jsou známy distribučnímu serveru (a následně i klientovi, pokud se jej rozhodne stáhnout). Mezi metadata mimo jiné patří

  • Strojově čitelný název balíku
  • Lidsky čitelný název a popis balíku (bude vidět ve webovém rozhraní)
  • Verze balíku
  • Závislosti na ostatních balících, včetně ostatních kontejnerů (např. že CKAN vyžaduje python2 runtime, k tomu, aby sestavil kontejner, ale zároveň i, že CKAN vyžaduje PostgreSQL k instalaci a k tomu, aby se aplikace vůbec rozjela).
  • SHA512 hash komprimovaného souboru obsahem balíku

Distribuční server pak nabízí:

  • Souhrnný soubor metadat
  • Soubor s podepsaným SHA512 hashem souboru metadat
  • Jednotlivé soubory s komprimovaným obsahem balíků

Při výstavbě balíku tato metadata poskytuje builder, který si zároveň drží kompletní aktuální kopii metadat distribučního serveru (samotné balíky mít nemusí). Zároveň musí vlastnit soukromý podpisový klíč (momentálně používáme ECDSA s křivkou P-384, ale může být použit libovolný jiný), pomocí kterého při změně souboru s metadaty vytvoří nový podepsaný hash. Tento soukromý klíč není uložen na distribučním serveru ani jím distribuční server nijak nedisponuje, takže i v případě jeho napadení nebude možné podvrhnout metadata nebo obsah balíků. Vytváření nového balíku probíhá následovně:

  1. Výstavba překryvné vrstvy.
  2. Přidání konfiguračního souboru kontejneru a instalačních skriptů, pokud se jedná o koncovou aplikační vrstvu.
  3. Zabalení souborů do komprimovaného archivu.
  4. Vypočtení kontrolního součtu (SHA512) komprimovaného archivu.
  5. Přidání metadat do souhrnného souboru metadat.
  6. Vypočtení kontrolního součtu (SHA512) souboru metadat a následné podepsání podpisovým klíčem (vytvoří samostatný soubor s podepsaným hashem).
  7. Upload komprimovaného archivu, souboru metadat a souboru s podepsaným hashem na distribuční server.

Instalace ze strany klienta:
Klient má v základní instalaci nainstalován veřejný klíč, který pasuje k soukromému podpisovému klíči, kterým je podepisován soubor metadat. Zároveň má klient nakonfigurovanou adresu distribučního serveru. Tím je zajištěna kompletní integrita distribučního kanálu. Při jakékoliv akci s balíky, která vyžaduje účast distribučního serveru (tj. instalace, zjištění nejnovější verze balíků a upgrade), klient nejprve stáhne soubor s metadaty a jeho podepsaný hash a ověří podpis s pomocí předinstalovaného veřejného klíče. Pokud podpis nesedí, operaci ihned ukončí. Díky použití asymetrické kryptografie je podpis nefalšovatelný a jediné dva případy, jak se tento mechanismus dá obejít, jsou ukradení soukromého klíče z počítače buildera nebo injektování škodlivého veřejného klíče do VM klienta a zároveň použití jiného druhu útoku, např. podvržení DNS záznamu nebo průnik do skutečného distribučního serveru.

Klient tedy stáhne a ověří metadata a po úspěšném ověření z nich vyčte, které balíky musí stáhnout a nainstalovat k tomu, aby mohla proběhnout i instalace balíku požadovaného uživatelem. Sestaví tedy strom závislostí a ten pak porovná se souborem metadat lokálně uloženém u klienta, který obsahuje informace pouze o již nainstalovaných balících. Ty balíky, které klient ještě nemá, balíčkovací systém postupně stáhne a u staženého souboru ověří SHA512 hash uvedený v podepsaném souboru s metadaty z distribučního serveru (tzn. opět není jednoduše možné soubor podvrhnout, protože by nesouhlasil hash a není možné podvrhnout hash, protože je soubor s metadaty podepsaný). Pokud hash souhlasí, balík rozbalí a je-li přítomen instalační skript, spustí jej.

Takže například k tomu, abych nainstaloval CKAN aplikaci potřebuji balíky

  • CKAN, který vyžaduje
    • Sdílené python2 runtime prostředí, které vyžaduje
      • Sdílené knihovny pro práci s XML, které vyžadují
        • Sdílený základní systém
    • CKAN-DataPusher, který vyžaduje
      • Sdílené python2 runtime prostředí, které vyžaduje
        • Sdílené knihovny pro práci s XML, které vyžadují
          • Sdílený základní systém
    • PosgreSQL, které vyžaduje
      • Sdílený základní systém
    • Redis, které vyžaduje
      • Sdílený základní systém
    • Solr, které vyžaduje
      • Sdílené Java runtime, které vyžaduje
        • Sdílený základní systém

Balíkovací systém tento strom závislostí splácne, zjistí, že základní systém, python2, xml a PosgreSQL už mám nainstalovány kvůli jiným aplikacím, a tak stáhne a rozbalí jen Java runtime, Solr, Redis, CKAN DataPusher a nakonec samotný kýžený CKAN.

Proces upgrade stávajících balíků zatím implementovaný nemám, ale principiálně to bude vypadat úplně stejně.

Veškeré procesy, praktiky a postupy jsou okoukány z existujících balíkovacích systémů, nejvíc jsem se inspiroval asi u Debianího dpkg. Nemělo by na tom být nic tajného nebo obskurního, takže klidně můžete zkonzultovat s třetí stranou, jestli jsem na něco nezapomněl nebo nezjednodušil do míry, která by učinila bezpečnost neúčinnou.

Stav implementace k 5. říjnu 2018. **Kontejnery a vrstvy:** Aplikace běží v LXC kontejneru. Kontejner v tomto případě znamená konfigurační soubor ve kterém je nastaveno - Typ sítě (virtuální rozhraní) - Diskové vrstvy (vysvětlím níže) - Mounty, tj. jaká umístění z hostitele se mají objevit v kontejneru - používáme pro persistentní ukládání konfigurací a dat. - Aplikace, tj. jaká binárka se má při startu kontejneru spustit s jakým uživatelským účtem, jakým prostředím a jakým způsobem (signálem) se má zastavit - Logování v hostiteli, omezení schopností kontejneru (např. že nemůže vypnout celého hostitele) a další podružnosti, aby to celé fungovalo. Dále kontejner zahrnuje alespoň jednu diskovou vrstvu. Pojem "vrstva" je zde použit proto, že naše kontejnery používají souborový systém překryvných vrstev *OverlayFS*. To znamená, že můžeme mít například jednu diskovou vrstvu pouze se základním systémem, jednu vrstvu s python runtime a jednu vrstvu se samotnou aplikací. V konfiguraci kontejneru tyhle tři vrstvy pak splácneme dohromady, takže nemusíme mít kopii systému a kopii pythonu v image každé aplikace, která je vyžaduje a ušetříme tak hromadu místa. Docker dělá něco podobného, ale je životně závislý na přesném pořadí příkazů v `Dockerfile` souboru pro výstavbu kontejneru. Takže pokud máme jeden kontejner, kde potřebujeme systém, python a javu a druhý, kde potřebujeme systém, javu a nodejs, bude společný pouze systém, ale java už nikoliv, protože pořadí je odlišné. S LXC máme plnou kontrolu nad tím, jaké vrstvy spojujeme, takže na pořadí nejsme závislí a musíme si jen pohlídat, aby si jednotlivé vrstvy nepřepsaly něco, co přepsat nechceme, což se díky návrhu Alpine linuxu neděje. Výstupem tohoto návrhu jsou tedy jednotlivé překryvné vrstvy, které budou následně baleny do samostatných balíků. Ke každé *aplikaci* (tedy jen k takovým překryvným vrstvám, které obsahují koncovou webovou aplikaci a nikoliv jen závislosti) bude ještě přibalen konfigurační soubor jejího kontejneru a skripty pro instalaci, např. vytvoření databáze, nastavení hostname, mailu a Google maps API klíče v konfiguraci atd. Například k tomu, abych nainstaloval CKAN *kontejner* potřebuji balíky - Sdílený základní systém (pouze překryvná vrstva) - Sdílené knihovny pro práci s XML (pouze překryvná vrstva) - Sdílené python2 runtime prostředí (pouze překryvná vrstva) - CKAN (překryvná vrstva, konfigurace kontejneru a instalační skripty) **Balíkovací sytém:** Výše vystavěné balíky jsou pak zkomprimovány pomocí kompresního algoritmu LZMA/LZMA2 (xz), který je jedním z nejefektivnějších. K tomu, aby byl balík distribuovatelným, potřebuje ještě metadata. Ta jsou drženy mimo obsah balíku a jsou známy distribučnímu serveru (a následně i klientovi, pokud se jej rozhodne stáhnout). Mezi metadata mimo jiné patří - Strojově čitelný název balíku - Lidsky čitelný název a popis balíku (bude vidět ve webovém rozhraní) - Verze balíku - Závislosti na ostatních balících, včetně ostatních kontejnerů (např. že CKAN vyžaduje python2 runtime, k tomu, aby sestavil kontejner, ale zároveň i, že CKAN vyžaduje PostgreSQL k instalaci a k tomu, aby se aplikace vůbec rozjela). - SHA512 hash komprimovaného souboru obsahem balíku Distribuční server pak nabízí: - Souhrnný soubor metadat - Soubor s podepsaným SHA512 hashem souboru metadat - Jednotlivé soubory s komprimovaným obsahem balíků Při výstavbě balíku tato metadata poskytuje builder, který si zároveň drží kompletní aktuální kopii metadat distribučního serveru (samotné balíky mít nemusí). Zároveň musí vlastnit soukromý podpisový klíč (momentálně používáme ECDSA s křivkou P-384, ale může být použit libovolný jiný), pomocí kterého při změně souboru s metadaty vytvoří nový podepsaný hash. Tento soukromý klíč **není** uložen na distribučním serveru ani jím distribuční server nijak nedisponuje, takže i v případě jeho napadení nebude možné podvrhnout metadata nebo obsah balíků. Vytváření nového balíku probíhá následovně: 1. Výstavba překryvné vrstvy. 2. Přidání konfiguračního souboru kontejneru a instalačních skriptů, pokud se jedná o koncovou aplikační vrstvu. 3. Zabalení souborů do komprimovaného archivu. 4. Vypočtení kontrolního součtu (SHA512) komprimovaného archivu. 5. Přidání metadat do souhrnného souboru metadat. 6. Vypočtení kontrolního součtu (SHA512) souboru metadat a následné podepsání podpisovým klíčem (vytvoří samostatný soubor s podepsaným hashem). 7. Upload komprimovaného archivu, souboru metadat a souboru s podepsaným hashem na distribuční server. **Instalace ze strany klienta:** Klient má v základní instalaci nainstalován veřejný klíč, který pasuje k soukromému podpisovému klíči, kterým je podepisován soubor metadat. Zároveň má klient nakonfigurovanou adresu distribučního serveru. Tím je zajištěna kompletní integrita distribučního kanálu. Při jakékoliv akci s balíky, která vyžaduje účast distribučního serveru (tj. instalace, zjištění nejnovější verze balíků a upgrade), klient nejprve stáhne soubor s metadaty a jeho podepsaný hash a ověří podpis s pomocí předinstalovaného veřejného klíče. Pokud podpis nesedí, operaci ihned ukončí. Díky použití asymetrické kryptografie je podpis nefalšovatelný a jediné dva případy, jak se tento mechanismus dá obejít, jsou ukradení soukromého klíče z počítače buildera nebo injektování škodlivého veřejného klíče do VM klienta *a zároveň* použití jiného druhu útoku, např. podvržení DNS záznamu nebo průnik do skutečného distribučního serveru. Klient tedy stáhne a ověří metadata a po úspěšném ověření z nich vyčte, které balíky musí stáhnout a nainstalovat k tomu, aby mohla proběhnout i instalace balíku požadovaného uživatelem. Sestaví tedy strom závislostí a ten pak porovná se souborem metadat lokálně uloženém u klienta, který obsahuje informace pouze o již nainstalovaných balících. Ty balíky, které klient ještě nemá, balíčkovací systém postupně stáhne a u staženého souboru ověří SHA512 hash uvedený v podepsaném souboru s metadaty z distribučního serveru (tzn. opět není jednoduše možné soubor podvrhnout, protože by nesouhlasil hash a není možné podvrhnout hash, protože je soubor s metadaty podepsaný). Pokud hash souhlasí, balík rozbalí a je-li přítomen instalační skript, spustí jej. Takže například k tomu, abych nainstaloval CKAN *aplikaci* potřebuji balíky - CKAN, který vyžaduje - Sdílené python2 runtime prostředí, které vyžaduje - Sdílené knihovny pro práci s XML, které vyžadují - Sdílený základní systém - CKAN-DataPusher, který vyžaduje - Sdílené python2 runtime prostředí, které vyžaduje - Sdílené knihovny pro práci s XML, které vyžadují - Sdílený základní systém - PosgreSQL, které vyžaduje - Sdílený základní systém - Redis, které vyžaduje - Sdílený základní systém - Solr, které vyžaduje - Sdílené Java runtime, které vyžaduje - Sdílený základní systém Balíkovací systém tento strom závislostí splácne, zjistí, že základní systém, python2, xml a PosgreSQL už mám nainstalovány kvůli jiným aplikacím, a tak stáhne a rozbalí jen Java runtime, Solr, Redis, CKAN DataPusher a nakonec samotný kýžený CKAN. Proces upgrade stávajících balíků zatím implementovaný nemám, ale principiálně to bude vypadat úplně stejně. Veškeré procesy, praktiky a postupy jsou okoukány z existujících balíkovacích systémů, nejvíc jsem se inspiroval asi u Debianího `dpkg`. Nemělo by na tom být nic tajného nebo obskurního, takže klidně můžete zkonzultovat s třetí stranou, jestli jsem na něco nezapomněl nebo nezjednodušil do míry, která by učinila bezpečnost neúčinnou.
Disassembler commented 2018-10-06 10:08:31 +02:00 (Migrated from git.spotter.cz)

mentioned in issue #301

mentioned in issue #301
Disassembler commented 2019-02-20 20:00:45 +01:00 (Migrated from git.spotter.cz)

Potřebuji exekutivní rozhodnutí.

Z 99% jsem dokončil transformaci balíčkovacího backendu na APK (nativní Alpine linux systém), jak jsme řešili po mailech na konci října a začátku listopadu. Čím víc jej testuji, tím méně se mi to celé líbí.

Na jednu stranu je fajn, že nemusíme řešit věci jako

  • kryptografii a zabezpečení přenosu
  • ověření integrity balíku
  • sestavení stromu závislostí balíku
  • logiku kolem porovnávání verzí balíků u updatů

Na druhou stranu ale

  • Ztrácíme přehled nad tím, co se děje. Jsem schopen spolehlivě zobrazit pouze procentuální progress, ale už nevím která komponenta je zrovna zpracovávána a jestli se stahuje nebo instaluje. Vidím pouze transakci jako celek.
  • V případě selhání instalace není možné jednoznačně určit která komponenta selhala a instalaci vyčistit a zopakovat. APK sice odstranit chybu umí, ale udělá to tak, že balík přeinstaluje stejným způsobem jako by ho updatoval, tím pádem se spouští sada skriptů pro post-update úkoly a nikoliv pro post-install. Dá se řešit relativně snadno, ale komplikuje přehlednost.
  • Porozumění instalačnímu systému není úplně triviální, protože se jedná o kombinaci vlastního a Alpiního systému, kde Alpine balíčky obsahují naše balíčky a Alpine skripty volají naše skripty. Je tam dost abstrakce, která, byť je důkladně zdokumentovaná, nemusí místy dávat úplně smysl a rozhodně není očividná.
  • Stažené balíky zůstávají na disku v nerozbalené podobě a zabírají místo. To se případně dá prodat jako featura - možnost kompletně resetovat aplikaci do "továrního nastavení" bez nutnosti být online.
  • Metadata jsou roztříštěná do části, která je důležitá pro Alpine (umístění, závislosti atd.) a části, která je důležitá pro frontend a uživatele (popisy, hostname pro subdoménu atd.), některé jsou duplicitní a celé to působí poněkud neuspořádaným a roztříštěným dojmem.

Možné směry, kterými se vydat:

a) Pokračovat ve výstavbě nad Alpine systémem bez podrobného přehledu dění a selhání komponent řešit logikou ve vlastních skriptech (v post-upgrade kontrolovat zda aplikace byla vůbec někdy nainstalována a pokud ne, tak místo zbytku post-upgrade provést post-install). - Nejméně pracné, ale náchylné k neočekávaným chybám.

b) Pokračovat ve výstavbě nad Alpine systémem, ale postavit si vlastní abstrakci pro zjišťování, stahování a instalaci závislostí - tj. místo workflow "zadej instalaci balíku aplikace a nech APK ať se o vše postará -> počkej na dokončení instalace nebo chybu" bude "zjisti závislosti balíku aplikace -> po jednom stáhni instalační balíky pro Alpine -> po jednom zadej instalace lokálně stažených balíku". Tím si zlepšíme viditelnost a kontrolu nad tím, co se děje, takže i odolnost proti chybám. - Středně složité, ale už z toho děláme rovnák na vohejbák na rovnák na vohejbák.

c) Alpine balíky zahodit a vrátit se zpět k vlastnímu řešení. Všechno si budeme muset řešit sami, ale budeme mít úplnou svobodu nad tím, jak to bude vypadat a úplnou kontrolu nad tím co a v jakém pořadí se bude dít. Většinu už máme napsanou a otestovanou. - Středně složité, se zvyšující se složitostí s postupným přidáváním featur.

Osobně bych byl samozřejmě pro možnost c) a pokračování ve vlastním řešení, ale já už jsem takovej, že si vždycky chci dělat všechno po svém, což mnohdy nemusí být vyhovující pro všechny zúčastněné, takže se radši ptám. Ta problematika je samozřejmě trochu hlubší, takže pokud máte nějaké dotazy na funkce, údržbu nebo další rozdíly, rád je zodpovím, abychom se dobrali nějakého pevného směru.

Potřebuji exekutivní rozhodnutí. Z 99% jsem dokončil transformaci balíčkovacího backendu na APK (nativní Alpine linux systém), jak jsme řešili po mailech na konci října a začátku listopadu. Čím víc jej testuji, tím méně se mi to celé líbí. Na jednu stranu je fajn, že nemusíme řešit věci jako - kryptografii a zabezpečení přenosu - ověření integrity balíku - sestavení stromu závislostí balíku - logiku kolem porovnávání verzí balíků u updatů Na druhou stranu ale - Ztrácíme přehled nad tím, co se děje. Jsem schopen spolehlivě zobrazit pouze procentuální progress, ale už nevím která komponenta je zrovna zpracovávána a jestli se stahuje nebo instaluje. Vidím pouze transakci jako celek. - V případě selhání instalace není možné jednoznačně určit která komponenta selhala a instalaci vyčistit a zopakovat. APK sice odstranit chybu umí, ale udělá to tak, že balík přeinstaluje stejným způsobem jako by ho updatoval, tím pádem se spouští sada skriptů pro post-update úkoly a nikoliv pro post-install. Dá se řešit relativně snadno, ale komplikuje přehlednost. - Porozumění instalačnímu systému není úplně triviální, protože se jedná o kombinaci vlastního a Alpiního systému, kde Alpine balíčky obsahují naše balíčky a Alpine skripty volají naše skripty. Je tam dost abstrakce, která, byť je důkladně zdokumentovaná, nemusí místy dávat úplně smysl a rozhodně není očividná. - Stažené balíky zůstávají na disku v nerozbalené podobě a zabírají místo. To se případně dá prodat jako featura - možnost kompletně resetovat aplikaci do "továrního nastavení" bez nutnosti být online. - Metadata jsou roztříštěná do části, která je důležitá pro Alpine (umístění, závislosti atd.) a části, která je důležitá pro frontend a uživatele (popisy, hostname pro subdoménu atd.), některé jsou duplicitní a celé to působí poněkud neuspořádaným a roztříštěným dojmem. Možné směry, kterými se vydat: a) Pokračovat ve výstavbě nad Alpine systémem bez podrobného přehledu dění a selhání komponent řešit logikou ve vlastních skriptech (v post-upgrade kontrolovat zda aplikace byla vůbec někdy nainstalována a pokud ne, tak místo zbytku post-upgrade provést post-install). - Nejméně pracné, ale náchylné k neočekávaným chybám. b) Pokračovat ve výstavbě nad Alpine systémem, ale postavit si vlastní abstrakci pro zjišťování, stahování a instalaci závislostí - tj. místo workflow "zadej instalaci balíku aplikace a nech APK ať se o vše postará -> počkej na dokončení instalace nebo chybu" bude "zjisti závislosti balíku aplikace -> po jednom stáhni instalační balíky pro Alpine -> po jednom zadej instalace lokálně stažených balíku". Tím si zlepšíme viditelnost a kontrolu nad tím, co se děje, takže i odolnost proti chybám. - Středně složité, ale už z toho děláme rovnák na vohejbák na rovnák na vohejbák. c) Alpine balíky zahodit a vrátit se zpět k vlastnímu řešení. Všechno si budeme muset řešit sami, ale budeme mít úplnou svobodu nad tím, jak to bude vypadat a úplnou kontrolu nad tím co a v jakém pořadí se bude dít. Většinu už máme napsanou a otestovanou. - Středně složité, se zvyšující se složitostí s postupným přidáváním featur. Osobně bych byl samozřejmě pro možnost c) a pokračování ve vlastním řešení, ale já už jsem takovej, že si vždycky chci dělat všechno po svém, což mnohdy nemusí být vyhovující pro všechny zúčastněné, takže se radši ptám. Ta problematika je samozřejmě trochu hlubší, takže pokud máte nějaké dotazy na funkce, údržbu nebo další rozdíly, rád je zodpovím, abychom se dobrali nějakého pevného směru.
Podhorecky commented 2019-02-20 20:55:08 +01:00 (Migrated from git.spotter.cz)

jak to čtu, tak se přikláním k c) ačkoliv tuším, že to "může" mít jak výhody, tak i nevýhody. Nikdy nic není dokonalé. Akorát nejsem expert, tím jste vy.

Abych byl v pohodě s c) tak bych od vás potřeboval nějaký příslib, že ještě chvíli vydržíte na tom pracovat do stavu, který bych laicky popsal jako "stable core" a další budoucnost je ve hvězdách, sice na různých potížích růstu, ale řekněme, že s dobrou vůlí se k blízkým hvězdám dobereme.

Teď neumím formulovat přesnější technický dotaz. Asi mne napadnou otázky až mi představíte nové věci, nebo až se začnu šťourat v těch dalších plánech.

v závěsu je pak varianta b) ... která ale má pro mne slabou pozici... Bylo by později hloupé navazovat nějaké kooperace... a s rovnákem bychom rychle od někoho sklidili čočku za to, co v tu chvíli jistě už bude nějak lépe a dokonaleji vyřešeno... Samože je těžké obhajovat se, když kdokoli umí být po bitvě mudrlantem. Proto bych asi nás oba spíš chránil před b) a důvěřoval v c) kde musím sázet ve vaši zkušenost.

Ještě stručně aktualizuju můj výhled. Pracovně se mi nerýsuje žádné dramatické zlepšení pro rok 2019, takže dál pokračuji jako OBZP. 2020 se zlepší jen pokud vybojuji pár osobních bitev o příjmy z budoucí práce, bydlení. Peníze na tento projekt stále existují, jen existují i neznámé proměnné, které ještě budu muset vynaložit. A tak jediné, co je je pevné, nejsou moje běžné příjmy, jen pomalé úspory. S těmi budu muset vyjít i pro ty další vývojové kroky a snad i zapojené lidi. Můžete mi to usnadnit tím, že mi pomůžete při pozdějším zasvěcení dalšího člověka. (ano, už jste mi to navrhoval, tak s tím taky trochu počítám)

Výhled vnějších do sfér, do kterých projekt směřuju, je poněkud neradostný. Tj. události se množí rycheji, než je nám milé. Neumím se radovat z vážných zpráv, byť by mi měly nést víc potenciálních příležitostí. Těmito info vás ale neobtěžuju, protože je lepší se soustředit na práci, abychom ji dotáhli.

jinak mi tento vývojový milník nevadí, chápu jej jako nutné poznání v procesu a nemám problém změnit dosavadní strukturu, dál o tom takto přemýšlet a hledat nejlepší cestu. Díky za to!

**jak to čtu, tak se přikláním k c)** ačkoliv tuším, že to "může" mít jak výhody, tak i nevýhody. Nikdy nic není dokonalé. Akorát nejsem expert, tím jste vy. Abych byl v pohodě s c) tak bych od vás potřeboval nějaký příslib, že ještě chvíli vydržíte na tom pracovat do stavu, který bych laicky popsal jako "stable core" a další budoucnost je ve hvězdách, sice na různých potížích růstu, ale řekněme, že s dobrou vůlí se k blízkým hvězdám dobereme. Teď neumím formulovat přesnější technický dotaz. Asi mne napadnou otázky až mi představíte nové věci, nebo až se začnu šťourat v těch dalších plánech. v závěsu je pak varianta b) ... která ale má pro mne slabou pozici... Bylo by později hloupé navazovat nějaké kooperace... a s rovnákem bychom rychle od někoho sklidili čočku za to, co v tu chvíli jistě už bude nějak lépe a dokonaleji vyřešeno... Samože je těžké obhajovat se, když kdokoli umí být po bitvě mudrlantem. Proto bych asi nás oba spíš chránil před b) a důvěřoval v c) kde musím sázet ve vaši zkušenost. Ještě stručně aktualizuju můj výhled. Pracovně se mi nerýsuje žádné dramatické zlepšení pro rok 2019, takže dál pokračuji jako OBZP. 2020 se zlepší jen pokud vybojuji pár osobních bitev o příjmy z budoucí práce, bydlení. Peníze na tento projekt stále existují, jen existují i neznámé proměnné, které ještě budu muset vynaložit. A tak jediné, co je je pevné, nejsou moje běžné příjmy, jen pomalé úspory. S těmi budu muset vyjít i pro ty další vývojové kroky a snad i zapojené lidi. Můžete mi to usnadnit tím, že mi pomůžete při pozdějším zasvěcení dalšího člověka. (ano, už jste mi to navrhoval, tak s tím taky trochu počítám) Výhled vnějších do sfér, do kterých projekt směřuju, je poněkud neradostný. Tj. události se množí rycheji, než je nám milé. Neumím se radovat z vážných zpráv, byť by mi měly nést víc potenciálních příležitostí. Těmito info vás ale neobtěžuju, protože je lepší se soustředit na práci, abychom ji dotáhli. jinak mi tento vývojový milník nevadí, chápu jej jako nutné poznání v procesu a nemám problém změnit dosavadní strukturu, dál o tom takto přemýšlet a hledat nejlepší cestu. Díky za to!
Disassembler commented 2019-02-27 14:34:05 +01:00 (Migrated from git.spotter.cz)

Vrátil jsem tedy vývojovou větev k vlastnímu balíčkovacímu řešení, přičemž jsem do něj zakomponoval drahocenné poznatky získané při práci s APK balíky a abuild systémem. Jsem velice rád, že jsme tuto větev prozkoumali, protože mi pomohlo ujasnit si a zjednodušit některé věci ve workflow identifikace závislostí -> stažení balíků -> zaručení čistého prostředí -> instalace balíků -> registrace aplikací pro GUI. Myslím, že to teď máme v téměř optimálním stavu. K naprosté dokonalosti to pak dovedeme s finálním (nebo alespoň semifinálním) web GUI.

Nicméně jsem se pokusil nainstalovat a zkontrolovat všechny aplikace, které dosud máme sestavené a připadám si jako takové to tříleté dítě, co sbírá balónky a vždy, když se nahne pro další mu ten předchozí vypadne. Namátkou:

  • U nových revizí Ushahidi nefungují skripty pro upgrade databáze.
  • Totéž u kanboardu
  • MifosX nevytváří sloupec v databázi, který předtím vytvářel.
  • CrisisCleanup najedou nedokáže přečíst svůj vlastní soubor s anglickými řetězci.

K tomu navíc

  • Tomcatu 8, na kterém zavisí MifosX, Motech a Sigmah dosáhl konce životnosti (EOL), takže budu muset aplikace přemlouvat na Tomcatu 8.5 (což jsem zkoušel už při prvním zprovozňování těch aplikací a moc se jim to nelíbilo)
  • GNU Health má novou minor verzi (což je ve skutečnosti velký skok, protože vyžaduje i jinou verzi Tryton frameworku)
  • OpenDataKit má novou major verzi (2.0), ta je naštěstí už distribuovaná ve WAR archivu, takže jeho instalace by měla být podstatně jednodušší, nicméně i tak musím ten skript celý z gruntu přepsat.
  • Koncem letošního roku končí životnost a podpora pythonu 2.x. Konec podpory byl původně plánován už v roce 2015, ale posunuli jej na 2020, aby všichni měli dostatek času migrovat na 3.x. Což znamená, že měli všichni dost času a nikdo to neudělal :) Např. CKAN a Sahana stále běží na 2.7, takže letos kolem toho očekávám velké točky.

Takže zdokumentuji instalační a balíčkovací procedury a pak se po x-té pokusím opětovně zprovoznit aktuální verze aplikací a pak snad už pojedeme dál.

Vrátil jsem tedy vývojovou větev k vlastnímu balíčkovacímu řešení, přičemž jsem do něj zakomponoval drahocenné poznatky získané při práci s APK balíky a abuild systémem. Jsem velice rád, že jsme tuto větev prozkoumali, protože mi pomohlo ujasnit si a zjednodušit některé věci ve workflow *identifikace závislostí -> stažení balíků -> zaručení čistého prostředí -> instalace balíků -> registrace aplikací pro GUI*. Myslím, že to teď máme v téměř optimálním stavu. K naprosté dokonalosti to pak dovedeme s finálním (nebo alespoň semifinálním) web GUI. Nicméně jsem se pokusil nainstalovat a zkontrolovat všechny aplikace, které dosud máme sestavené a připadám si jako takové to tříleté dítě, co sbírá balónky a vždy, když se nahne pro další mu ten předchozí vypadne. Namátkou: - U nových revizí Ushahidi nefungují skripty pro upgrade databáze. - Totéž u kanboardu - MifosX nevytváří sloupec v databázi, který předtím vytvářel. - CrisisCleanup najedou nedokáže přečíst svůj vlastní soubor s anglickými řetězci. K tomu navíc - Tomcatu 8, na kterém zavisí MifosX, Motech a Sigmah dosáhl konce životnosti (EOL), takže budu muset aplikace přemlouvat na Tomcatu 8.5 (což jsem zkoušel už při prvním zprovozňování těch aplikací a moc se jim to nelíbilo) - GNU Health má novou minor verzi (což je ve skutečnosti velký skok, protože vyžaduje i jinou verzi Tryton frameworku) - OpenDataKit má novou major verzi (2.0), ta je naštěstí už distribuovaná ve WAR archivu, takže jeho instalace by měla být podstatně jednodušší, nicméně i tak musím ten skript celý z gruntu přepsat. - Koncem letošního roku končí životnost a podpora pythonu 2.x. Konec podpory byl původně plánován už v roce 2015, ale posunuli jej na 2020, aby všichni měli dostatek času migrovat na 3.x. Což znamená, že měli všichni dost času a nikdo to neudělal :) Např. CKAN a Sahana stále běží na 2.7, takže letos kolem toho očekávám velké točky. Takže zdokumentuji instalační a balíčkovací procedury a pak se po x-té pokusím *opětovně* zprovoznit aktuální verze aplikací a pak snad už pojedeme dál.
Podhorecky commented 2019-02-27 15:08:41 +01:00 (Migrated from git.spotter.cz)

ok, super zpráva.

s těmi aktualizacemi to je mrzuté, ale viděl bych to jako indicie k rozhodnutí, jak často se věnovat aktualizacím těch konkrétních SW. A které se později samy vyřadí z evoluce.

takže při nějakých zvlášť vypečených situacích nepáchejte harakiri, napište mi co si o tom myslíte a můžeme to posoudit.

u CC už víme, že takto nám poslouží maximálně jako technologické demo, že to umíme kontejnerovat. O budoucnosti rozhodne i autor a jeho plán "nové verze"... fakt jsem zvědav.

u dalších SW je to výběr s čím se asitak můžeme potkat. Moje další SW se +/- staví pořád na tom samém. Detaily objevíme až při bližším ohledání.

ok, super zpráva. s těmi aktualizacemi to je mrzuté, ale viděl bych to jako indicie k rozhodnutí, jak často se věnovat aktualizacím těch konkrétních SW. A které se později samy vyřadí z evoluce. takže při nějakých zvlášť vypečených situacích nepáchejte harakiri, napište mi co si o tom myslíte a můžeme to posoudit. u CC už víme, že takto nám poslouží maximálně jako technologické demo, že to umíme kontejnerovat. O budoucnosti rozhodne i autor a jeho plán "nové verze"... fakt jsem zvědav. u dalších SW je to výběr s čím se asitak můžeme potkat. Moje další SW se +/- staví pořád na tom samém. Detaily objevíme až při bližším ohledání.
Disassembler commented 2019-03-01 19:13:02 +01:00 (Migrated from git.spotter.cz)

Tak to šlo podstatně lépe než jsem očekával.

  • Ushahidi + MifosX byla blbost na mojí straně. Nečekal jsem, že upgrade z MariaDB 10.3.11 na 10.3.13 bude znamenat kompletní přepsání jejího instalačního skriptu, protože se chlapci z Alpine najednou rozhodli zahodit všechny customizace a použít ji tak, jak přišla z upstreamu.
  • Kanboard opraven v PR #4151
  • CrisisCleanup čeká na přijetí PR #475, nicméně koukám, že tu jedinou opravdu blokující chybu si Titus před hodinou opravil sám, takže ten už taky jede.
  • Tomcat 8 byl bez problému updatován na 8.5 u MifosX, OpenDataKit a Sigmah.
  • O totéž jsem se pokusil i u Motechu, ale splakal nad výdělkem. Po prolezení zdrojáků jsem shledal, že je určený pro Tomcat 6 a 7, takže jsem jej downgradoval na Tomcat 7, který je narozdíl od 8.0 stále podporovaný.
  • Upgrade OpenDataKit Aggregate na verzi 2.0 (neplést s ODK 2, to je něco jiného a celé to názvosloví je poněkud matoucí, viz odstavec Does Aggregate v2 have anything to do with ODK 2 tutok) šel díky novému systému distribuce taky jako po másle.
  • Na GNU Health 3.4 jsem se trochu zasekl, protože se najednou instaluje způsobem, který vypadá jako ten starý, ale ve skutečnosti je odlišný, ale po chvilce zápasení se mi i jej povedlo přesvědčit, aby se choval tak, jak po něm chceme.

Takže appky máme vesměs naházené na aktuální verze a funkční (Na vaší VM, kterou jste stahoval loni v listopadu ale nepojedou, protože balíčkovací systém a vmmgr už se zas posunul o kousek dál. To doladíme záhy). Teď konečně dorazím tu dokumentaci.

Tak to šlo podstatně lépe než jsem očekával. - Ushahidi + MifosX byla blbost na mojí straně. Nečekal jsem, že upgrade z MariaDB 10.3.11 na 10.3.13 bude znamenat kompletní přepsání jejího instalačního skriptu, protože se chlapci z Alpine najednou rozhodli zahodit všechny customizace a použít ji tak, jak přišla z upstreamu. - Kanboard opraven v PR [#4151](https://github.com/kanboard/kanboard/pull/4151) - CrisisCleanup čeká na přijetí PR [#475](https://github.com/CrisisCleanup/crisiscleanup/pull/475), nicméně koukám, že tu jedinou opravdu blokující chybu si Titus před hodinou opravil sám, takže ten už taky jede. - Tomcat 8 byl bez problému updatován na 8.5 u MifosX, OpenDataKit a Sigmah. - O totéž jsem se pokusil i u Motechu, ale splakal nad výdělkem. Po prolezení zdrojáků jsem shledal, že je určený pro Tomcat 6 a 7, takže jsem jej downgradoval na Tomcat 7, který je narozdíl od 8.0 stále podporovaný. - Upgrade OpenDataKit Aggregate na verzi 2.0 (neplést s *ODK 2*, to je něco jiného a celé to názvosloví je poněkud matoucí, viz odstavec *Does Aggregate v2 have anything to do with ODK 2* [tutok](https://forum.opendatakit.org/t/upcoming-changes-to-aggregate/17582)) šel díky novému systému distribuce taky jako po másle. - Na GNU Health 3.4 jsem se trochu zasekl, protože se najednou instaluje způsobem, který vypadá jako ten starý, ale ve skutečnosti je odlišný, ale po chvilce zápasení se mi i jej povedlo přesvědčit, aby se choval tak, jak po něm chceme. Takže appky máme vesměs naházené na aktuální verze a funkční (Na vaší VM, kterou jste stahoval loni v listopadu ale nepojedou, protože balíčkovací systém a vmmgr už se zas posunul o kousek dál. To doladíme záhy). Teď konečně dorazím tu dokumentaci.
Podhorecky commented 2019-03-11 21:46:09 +01:00 (Migrated from git.spotter.cz)

CrisisCleanup čeká na přijetí PR #475,

(on asi neví že J.P. = trendspotter, takže zatím nemá smysl ho dál dráždit. Má za sebou velké množství práce s provozem CC, ale dost trpí, že není financovaný a nemá lidi na vývoj... )

> CrisisCleanup čeká na přijetí PR [#475](https://github.com/CrisisCleanup/crisiscleanup/pull/475), (on asi neví že J.P. = trendspotter, takže zatím nemá smysl ho dál dráždit. Má za sebou velké množství práce s provozem CC, ale dost trpí, že není financovaný a nemá lidi na vývoj... )
Disassembler commented 2019-03-13 16:38:57 +01:00 (Migrated from git.spotter.cz)

Dokumentace technické a technologické části vypocena zde: https://dl.dasm.cz/spotter-doc/index.html . Teď už mě konečně může přejet náklaďák.

Pak, až budeme konsolidovat ty Vaše webové appky a jiné worpressy, přesuneme dokumentaci společně s repozitářem a ostatními opičárnami na server k Vám, ať se to neválí na mé odkladištní subdoméně.

Dokumentace technické a technologické části vypocena zde: https://dl.dasm.cz/spotter-doc/index.html . Teď už mě konečně může přejet náklaďák. Pak, až budeme konsolidovat ty Vaše webové appky a jiné worpressy, přesuneme dokumentaci společně s repozitářem a ostatními opičárnami na server k Vám, ať se to neválí na mé odkladištní subdoméně.
Disassembler commented 2019-03-13 16:58:49 +01:00 (Migrated from git.spotter.cz)

mentioned in issue #337

mentioned in issue #337
Podhorecky commented 2019-04-17 16:53:29 +02:00 (Migrated from git.spotter.cz)

další kroky se serverem budou v issue https://git.spotter.cz/Spotter-Cluster/Spotter-Cluster/issues/294 nebo nových issue

další kroky se serverem budou v issue https://git.spotter.cz/Spotter-Cluster/Spotter-Cluster/issues/294 nebo nových issue
Podhorecky commented 2019-04-17 16:53:30 +02:00 (Migrated from git.spotter.cz)

closed

closed
Sign in to join this conversation.
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Disassembler/Spotter-VM#290
No description provided.