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 16:11 | Komunita

Na Humble Bundle lze získat počítačovou hru Satellite Reign (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 0
dnes 15:44 | Zajímavý software

Společnost Apple koupila před třemi lety společnost FoundationDB vyvíjející stejnojmenný NoSQL databázový systém FoundationDB (Wikipedie). Včera byl tento systém uvolněn jako open source pod licencí Apache 2.0. Zdrojové kódy jsou k dispozici na GitHubu.

Ladislav Hagara | Komentářů: 0
dnes 15:00 | Nová verze

Po dva a půl roce od vydání verze 5.7 oznámila společnost Oracle vydání nové major verze 8.0 (8.0.11) databázového systému MySQL (Wikipedie). Přehled novinek v poznámkách k vydání. Zdrojové kódy komunitní verze MySQL jsou k dispozici na GitHubu.

Ladislav Hagara | Komentářů: 1
včera 14:44 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 151. brněnský sraz, který proběhne v pátek 20. 4. od 18:00 hodin v restauraci Benjamin na Drobného 46.

Ladislav Hagara | Komentářů: 0
včera 13:33 | Nová verze

Byla vydána verze 18.04.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi.

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

Bylo oznámeno vydání nové stabilní verze 1.26 a beta verze 1.27 open source textového editoru Atom (Wikipedie). Přehled novinek i s náhledy v příspěvku na blogu. Podrobnosti v poznámkách k vydání.

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

Dle plánu byla dnes vydána hra Rise of the Tomb Raider (Wikipedie) pro Linux. Koupit ji lze za 49,99 €.

Ladislav Hagara | Komentářů: 2
včera 09:55 | Bezpečnostní upozornění

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 254 bezpečnostních chyb. V Oracle Java SE je například opraveno 14 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 12 z nich. V Oracle MySQL je opraveno 33 bezpečnostních chyb. Vzdáleně zneužitelné bez autentizace jsou 2 z nich.

Ladislav Hagara | Komentářů: 3
18.4. 23:11 | Nová verze

Byla vydána verze 8.0 linuxové distribuce Trisquel GNU/Linux. Nejnovější verze Trisquel nese kódové jméno Flidas a bude podporována do roku 2021. Výchozím prostředím je nově MATE 1.12. Trisquel patří mezi svobodné distribuce doporučované Nadací pro svobodný software (FSF).

Ladislav Hagara | Komentářů: 0
18.4. 16:00 | Nová verze

Byla vydána nová verze 27.9.0 webového prohlížeče Pale Moon (Wikipedie) vycházejícího z Firefoxu. Přehled novinek v poznámkách k vydání. Jedná se o poslední větší aktualizaci verze 27. Vývojáři se zaměří na novou verzi 28.

Ladislav Hagara | Komentářů: 0
Používáte na serverech port knocking?
 (2%)
 (7%)
 (47%)
 (26%)
 (17%)
Celkem 328 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    Rozcestník

    Jeden den s Flatpakem

    21.3. 02:03 | Přečteno: 2501× | Výběrový blog | poslední úprava: 21.3. 11:20

    Až příliš praktická ukázka, jak pomocí Flatpaku připravit k distribuci netriviální aplikaci...

    Distribuce vlastních aplikací pro Linux dostatečně bezúdržbovým způsobem, který by nevyžadoval aspoň občasnou kontrolu, zda se nezměnilo ABI nějaké knihovny je obecně trochu problematická. Tím hůře, pokud chce člověk cílit na více než pár vybraných distribucí. Dosud jsem to řešil masivně statickými buildy, které si maximum závislostí nesly se sebou v jedné olbřímí binárce. Přístup je to sice možný ale dost pracný už jen proto, že takto uhnětenou binárku je potřeba alespoň na pár cílových distribucích stejně otestovat. Dále je třeba počítat s některými omezeními statických sestavení; typicky třeba GUI aplikace linkované proti statickým Qt působí ve zbytku systému jako pěst na oko, protože nemohou použít systémové stylovací pluginy. Před pár dny jsem jen tak zkusil spustit binárku, co jsem zkompiloval zhruba před dvěma lety. Samozřejmě se to nepodařilo, i když jsem se setsakra snažil udržet množství závislostí na systémových knihovnách na minimu. Můj pokus zkrachoval na knihovně libgfortran.so.4, zatímco moje binárka počítala s verzí 3. Protože na ruční udržování balíčků pro různé distribuce nebo pravidelnou kontrolu, která ze závislostí se zase rozbila nemám kapacity, rozhodl jsem se pro další projekt použít odlišný způsob distribuce.

    Hello, Flatpak

    Flatpak je platforma pro distribuci binárních balíčků vyvíjená Red Hatem a alternativa ke Canonicalímu Snapu. Koncept Flatpaku je založen na tom, že se aplikace sestaví proti konkrétní verzi nějakého runtimu, který si uživatel stáhne spolu s balíčkem aplikace. Runtimy jsou samozřejmě verzované a (zatím) jich není tolik, aby vzniklo DLL Hell, jaké umí vymyslet akorát v Redmondu. Pokud aplikace závisí na něčem, co ve standardních runtimech není, zkompiluje se taková závislost proti stejnému runtimu jako aplikace a distribuuje se najednou spolu s aplikací. Flatpakové balíčky se instalují odděleně do /var/lib/flatpak (případně ~/.local/share/flatpak) a běží sandboxované; nemohou tedy nabořit zbytek systému. Díky tomu se autor aplikace navíc nemusí bát, že by jeho balíček s něčím kolidoval. Ač není základní dokumentace Flatpaku vůbec špatná, omezuje se pouze na triviální ukázku, která je pro sestavení jakékoliv reálné aplikace obtížně použitelná. Dodatečné informace je nutné vylovit „nasyrovo“ z dokumentace a - v nemálo případech - z flatpakových předpisů jiných projektů, ticketů na GitHubu a podobně. Protože ne všechny funkce Flatpaku se chovají úplně intuitivně, napadlo mne shrnout pár svých poznatků ze zhruba jednodenního klopýtání Flatpakovým polem do nějakého zápisku, určitě to budu ještě potřebovat...

    Koho jdeme balit?

    Jako případová studie nám poslouží PeakMaster, nástroj pro provádění jistých fyzikálně-chemických simulací. Protože vývoj současné verze i výpočetního podvozku probíhal téměř výhradně na Linuxu (GUI z části na macOS), bylo by docela hloupé, kdyby předkompilovaná binárka existovala jen pro Windows. PeakMaster má v nynější podobně pár exotických závislostí, na kterých je možné ukázat různé možnosti, jak zaflatpakovat netriviální program.

    Závislostní strom PeakMasteru vypadá v současné podobě nějak takto:

    Eigen a MPFR C++ existují jen jako hlavičkové soubory a žádnou binární podobu nemají, balíčky s LEMNG a ECHMETCoreLibs byste určitě hledali marně a s GNU GMP a MPFR mohou nastat různé nečekané potíže, viz dále. Navíc MPFR nedávno vyšla ve verzi 4.0.0 s jiným ABI; některé distribuce už ji mají, jiné ne. Motivace pro použití Flatpaku je myslím zřejmá.

    Disclaimerová vsuvka

    Zápisek, který si původně dával za cíl ukázat, na jaké praktické problémy je možné při přípravě Flatpakových balíčku narazit předvést pár možných řešení se nakonec zvrhl v de-facto návod, jak kompletně sestavit jistý software cílící na velmi specifickou skupinu uživatelů. Protože jsem bytostný nepřítel abstraktních („mějme aplikaci A závisející na knihovnách L1 až L6“) či umělých („ukážeme si to na aplikaci dummy závisející na knihovnách libfoo a libbar“) tutoriálů, použil jsem příklad z opravdové praxe, kdy jsem musel řešit opravdové problémy. Doufám, že postřehy, nápady a doporučení zde zmíněné jsou použitelné daleko šířeji než produkt, který na konci tohoto zápisku vznikne...

    Jdeme na to

    Všechno experimentování jsem prováděl na virtuálním stroji s Fedorou 27 nainstalovanou z netinstallu. Kromě Xfce, Vimu a Flatpaku jsem nemusel instalovat nic dalšího.

    1. Instalace Flatpaku

    Na úplném začátku potřebujeme nainstalovat Flatpak a Flatpak builder. Na Fedoře postačí:

    $ dnf install flatpak flatpak-builder
    

    2. Příprava prostředí

    Flatpak během své činnosti vytváří značné množství pracovních souborů, které je určitě vhodné držet na jasně definovaném místě, už jen proto, že umí zabrat docela dost místa. Naším „kořenovým“ adresářem bude /home/flatpak/flatpak_PMNG

    Jako první je nutné přidat repozitář, odkud si Flatpak stáhne potřebné runtimy a SDK. To provedeme takto:

    $ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
    

    Dále potřebujeme nainstalovat příslušné SDK, oproti kterému budeme sestavovat naší aplikaci. Seznam SDKček, která jsou momentálně k dispozici v repozitáři flathub je třeba zde. Protože GUI PeakMasteru je napsané v Qt 5, nainstalujeme runtime a SDK pro KDE.

    $ flatpak install flathub org.kde.Platform//5.9 org.kde.Sdk//5.9
    

    Všimněte si, že za jménem balíčku je uvedené ještě číslo verze, resp. název větve. Kdybychom jej vynechali, vynadal by nám Flatpak s následující chybou:

    error: Multiple branches available for org.kde.Platform, you must specify one of: org.kde.Platform//5.10, org.kde.Platform//5.9
    

    Konzervativně jsem se držel větve 5.9, protože Qt 5.9 má na rozdíl od 5.10 slíbenou dlouhodobou podporu.

    3. Zkušební jízda

    Teď máme vše, co potřebujeme pro sestavení zkušebního balíčku. Předpis - či chcete-li manifest, podle kterého Flatpak balíčky sestavuje má formu JSON souboru. Triviální manifest může vypadat třeba takto. My při zkušební jízdě sestavíme ECHMETCoreLibs, protože bez nich se nehneme dál.

    Vytvoříme jednoduchý manifest, který stáhne zdrojáky Eigenu a ECHMETCoreLibs a pokusí se je sestavit. Budeme počítat s tím, že manifest dále rozšíříme až do tvaru, který dovede sestavit a zabalit celý PeakMaster. Soubor s manifestem pojmenujeme cz.cuni.natur.echmet.PeakMasterNG.json a umístíme do adresáře ~/flatpak_PMNG.

    Hlavička manifestu bude vypadat takto:

    "app-id": "cz.cuni.natur.echmet.PeakMasterNG",
    "runtime": "org.kde.Platform",
    "runtime-version": "5.9",
    "sdk": "org.kde.Sdk",
    

    Hlavička dále obsahuje pole modules, ve kterém jsou uvedeny jednotlivé moduly (jak by určitě nikdo neuhodl) tvořící výsledný balíček. GNU GMP a MPFR jsou již obsaženy v org.kde.Platform, potřebujeme tedy zatím jen Eigen a ECHMETCoreLibs.

    Prvek pole modules zajišťující stažení a „sestavení“ Eigenu lze zapsat třeba následovně:

    {
    	"name": "eigen",
    	"buildsystem": "simple",
    	"build-commands": [
    		"mkdir -p /app/Eigen",
    		"cp -r Eigen /app/Eigen",
    		"cp -r unsupported /app/Eigen"
    	],
    	"sources": [
    		{
    			"type": "archive",
    			"url": "http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2",
    			"sha256": "dd254beb0bafc695d0f62ae1a222ff85b52dbaa3a16f76e781dce22d0d20a4a6"
    		}
    	],
    	"cleanup": [
    		"/Eigen"
    	]
    }
    

    Jistě jste si všimli, že Eigen se kopíruje do adresáře /app. Tento adresář je ve Flatpakovém sandboxu vždy přimountovaný a funguje jako de-facto kořenový adresář. Flatpakový sandbox standardně nedovoluje přístup ke skutečnému souborovému systému stroje - s tímto je nutné počítat a sestavovací skripty a aplikaci tomu přizpůsobit. Pozor na to, že Flatpak není s používáním prefixu /app úplně konzistentní, někdy (většinou) je nutné jej uvést, jindy nikoliv.

    Fajn, to bychom měli Eigen, můžeme směle pokročit k sestavení ECHMETCoreLibs. Definice modulu pro ECHMETCoreLibs se liší od té pro Eigen použitím jiného buildsystemu a způsobu, kterým se získá zdrojový kód. ECHMETCoreLibs jsou sestavovány CMakem. Jako buildsystem tedy uvedeme cmake a namísto build-commands použijeme config-opts. Typ zdroje bude nyní git, url bude obsahovat odkaz na příslušný repozitář. Navíc ještě přibude hodnota branch identifikující gitovou větev, kterou chceme naklonovat. Celá definice vypadá takto:

    {
    	"name": "CoreLibs",
    	"buildsystem": "cmake",
    	"config-opts": [
    		"-DCMAKE_BUILD_TYPE=Release",
    		"-DEIGEN_INCLUDE_DIR=/app/Eigen",
    		"-DCMAKE_INSTALL_PREFIX=/app",
    		"-DCMAKE_CXX_FLAGS=-g"
    	],
    	"sources": [
    		{
    			"type": "git",
    			"url": "https://github.com/echmet/ECHMETCoreLibs.git",
    			"branch": "master"
    		}
    	],
    	"cleanup": [
    		"/include"
    	]
    }
    
    Zkompletovaný manifest jest následující:
    {
    	"app-id": "cz.cuni.natur.echmet.PeakMasterNG",
    	"runtime": "org.kde.Platform",
    	"runtime-version": "5.9",
    	"sdk": "org.kde.Sdk",
    
    	"modules": [
    		{
    			"name": "eigen",
    			"buildsystem": "simple",
    			"build-commands": [
    				"mkdir -p /app/Eigen",
    				"cp -r Eigen /app/Eigen",
    				"cp -r unsupported /app/Eigen"
    			],
    			"sources": [
    				{
    					"type": "archive",
    					"url": "http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2",
    					"sha256": "dd254beb0bafc695d0f62ae1a222ff85b52dbaa3a16f76e781dce22d0d20a4a6"
    				}
    			],
    			"cleanup": [
    				"/Eigen"
    			]
    		},
    		{
    			"name": "CoreLibs",
    			"buildsystem": "cmake",
    			"config-opts": [
    				"-DCMAKE_BUILD_TYPE=Release",
    				"-DEIGEN_INCLUDE_DIR=/app/Eigen",
    				"-DCMAKE_INSTALL_PREFIX=/app",
    				"-DCMAKE_CXX_FLAGS=-g"
    			],
    			"sources": [
    				{
    					"type": "git",
    					"url": "https://github.com/echmet/ECHMETCoreLibs.git",
    					"branch": "master"
    				}
    			],
    			"cleanup": [
    				"/include"
    			]
    		}
    	]
    }
    

    Zkušební manifest máme připravený, můžeme vyrazit. Build samotný spustíme příkazem:

    $ flatpak-builder --repo=PMNG PMNG_pkg cz.cuni.natur.echmet.PeakMasterNG.json --force-clean
    

    Dopadlo-li všechno dobře, měli bychom v adresář flatpak_PMNG najít dva nové podadresáře PMNG a PMNG_pkg. Nahlédneme-li do PMNG_pkg/files, měli bychom tam nalézt vše, co vzniklo sestavovacím procesem uvedeným v manifestu. V našem případě půjde o adresář /lib se čtyřmi knihovnami a příslušnými symlinky. V podadresáři debug jsou tytéž knihovny ještě jednou, tentokrát všech včetně ladicích symbolů. flatpak_PMNG by měl ještě obsahovat skrytý adresář .flatpak_builder kde si builder uchovává cache a stažené zdrojáky.

    4. Jízda pokračuje

    Úspěšně jsme sestavili úplný základ, můžeme tedy v klidu pokračovat a přidat další z potřebných závislostí. Knihovna LEMNG se sestavuje skoro stejně jako ECHMETCoreLibs, definice modulu je následující:

    {
    	"name": "LEMNG",
    	"buildsystem": "cmake",
    	"config-opts": [
    		"-DCMAKE_BUILD_TYPE=Release",
    		"-DEIGEN_INCLUDE_DIR=/app/Eigen",
    		"-DECHMET_CORE_LIBS_DIR=/app",
    		"-DCMAKE_INSTALL_PREFIX=/app",
    		"-DCMAKE_CXX_FLAGS=-g"
    	],
    	"sources": [
    		{
    			"type": "git",
    			"url": "https://github.com/echmet/LEMNG.git",
    			"branch": "master"
    		}
    	],
    	"cleanup": [
    		"/include"
    	]
    }
    

    Zde je asi vhodné zmínit, že Flatpak sestavuje moduly v tom pořadí, jak jsou uvedeny v poli modules. Dále se předpokládá, že modul uvedený v seznamu níže závisí na modulech před ním. Jakákoliv změna v definici modulu způsobí rebuild všech modulů uvedených pod ním.

    5. Přituhuje

    Až doposud šlo všechno celkem přímočaře. První výmol na cestě můžeme trefit v případě, kdy musíme sestavit nějaký software, jehož sestavovací proces není možné rozumně nakonfigurovat parametry předanými z příkazové řádky. To je případ třeba knihovny Qwt. Ta předpokládá, že ručně upravíme soubor qwtconfig.pri. Způsobů, jak si poradit, je více. V rámci demonstrace několika možností začneme s variantou kanadského dřevorubce.

    1. Stáhneme zdroják Qwt 6.3.1: https://sourceforge.net/projects/qwt/files/qwt/6.1.3/qwt-6.1.3.tar.bz2/download
    2. Rozbalíme jej na vhodné místo.
         $ tar -xvf qwt-6.1.3.tar.bz2
        
    3. Ve vzniklém adresáři qwt-6.1.3 upravíme soubor qwtconfig.pri. Zde je potřeba nastavit proměnnou QWT_INSTALL_PREFIX v sekci unix takto:
      QWT_INSTALL_PREFIX = /app
    4. Nakonfigurovaná Qwt zabalíme zpět do archivu
         $ tar -cjf qwt-6.1.3_configured.tar.bz2 qwt-6.1.3/
        

    Do modulů v manifestu přidáme následující blok. Protože Flatpak - aspoň co jsem dokázal zjistit - nemá přímou podporu pro qmake, pomůžeme si ručně nastavením buildsystemu na simple spuštěním buildu tak, jak bychom to udělali z klasické příkazové řádky.

    {
    	"name": "qwt",
    	"buildsystem": "simple",
    	"build-commands": [
    		"qmake qwt.pro CONFIG+=release",
    		"make -j4",
    		"make install"
    	],
    	"sources": [
    		{
    			"type": "archive",
    			"path": "/home/flatpak/flatpak_PMNG/qwt-6.1.3_configured.tar.bz2"
    		}
    	],
    	"cleanup": [
    		"/include",
    		"/doc",
    		"/features",
    		"/plugins"
    	]
    }
    

    Nalezneme-li v adresáři PMNG_pkg/files/lib knihovnu libLEMNG.so a adresář PMNG_pkg/files/qwt-6.1.3/lib se zkompilovanými Qwt, můžeme si pogratulovat a pokračovat dále.

    6. Grand finale

    Teď už máme vše, co potřebujeme, abychom sestavili samotný PeakMaster. Stejně jako Qwt se parametry nutné pro sestavení řeší úpravou konfiguračního souboru, tentokrát PeakMasterNG.pri. Protože budeme zdrojáky tahat z gitu, nemůžeme předchozí postup použít. Co s tím?

    Nejdříve vytvoříme základní definici modulu, od které se odrazíme. Ta vypadá takto:

    {
    	"name": "PeakMasterNG",
    	"buildsystem": "simple",
    	"build-commands": [
    		"qmake PeakMasterNG.pro CONFIG+=release CONFIG+=flatpak_build",
    		"make -j4",
    		"make install"
    	],
    	"sources": [
    		{
    			"type": "git",
    			"url": "https://github.com/echmet/PeakMasterNG.git",
    			"branch": "master"
    		}
    	]
    }
    
    Flatpak umožňuje pracovat i se zdroji ve formě patchů, čehož zde můžeme šikovně využít. Stačí nám stáhnout příslušný konfigurační soubor. Ten zkopírujeme a kopii upravíme tak, že jeho obsah bude tento:
    # Path to location where the ECHMETCoreLibs are installed
    ECHMET_CORE_LIBS_DIR = "/app"
    
    # Path to location where the LEMNG library is insalled
    LEMNG_DIR = "/app"
    
    # Path to where the Qwt toolkit is installed
    QWT_DIR = "/app"
    
    include("$$QWT_DIR/features/qwt.prf")
    
    #Do not touch anything below this line!
    
    INCLUDEPATH += "$$ECHMET_CORE_LIBS_DIR/include/ECHMET/CoreLibs"
    INCLUDEPATH += "$$LEMNG_DIR/include/ECHMET/LEMNG"
    LIBS += -L"$$ECHMET_CORE_LIBS_DIR/lib" -lSysComp -lECHMETShared
    LIBS += -L"$$LEMNG_DIR/lib" -lLEMNG
    QMAKE_LFLAGS += -Wl,-rpath-link,"$$ECHMET_CORE_LIBS_DIR/lib"
    
    Pomocí
    $ diff -u PeakMasterNG.pri PeakMasterNG_mod.pri > PMNG_config.patch
    
    vytvoříme konfigurační patch a umístíme jej do /home/flatpak/flatpak_PMNG/ Do pole sources modulu PeakMasterNG přidáme další objekt s tímto obsahem:
    {
    	"type": "patch",
    	"path": "/home/flatpak/flatpak_PMNG/PMNG_config.patch",
    	"strip-components": 0
    }
    
    Výchozí hodnota strip-components je 1, což se nám v tomto případě příliš nehodí.

    Spustili bychom teď build, PeakMaster by se měl bez problémů zkompilovat a PMNG_pkg/files/bin/ obsahovat soubor PeakMasterNG. K tomu, abychom vytvořili skutečně použitelný balíček nám akle ještě malý kousek cesty zbývá. Hlavičku manifestu je třeba doplnit o následující blok:

    "command": "PeakMasterNG",
    "finish-args": [
    	"--filesystem=host",
    	"--socket=x11",
    	"--socket=wayland",
    	"--socket=pulseaudio",
    	"--device=all",
    	"--share=ipc"
    ],
    

    command překvapivě říká, jaký příkaz se při spuštění Flatpakového balíčku provést, my chceme spustit binárku PeakMasterNG. Pole finish-args umožňuje vypnout některá omezení sandboxu. --filesystem=host povolí přístup k celému souborovému systému stroje, kde naše binárka běží. Parametry volby --socket umožní přístup k XServeru, Wayland kompozitoru a PulseAudio serveru hosta. Další nezbytností je --share=ipc, bez čehož by nefungovala sdílená paměť Xek a výkon naší aplikace by dost utrpěl. Chceme-li povolit přístup aspoň k 3D akceleračnímu hardware, musíme ještě uvést --device=dri.

    Výsledkem našeho pachtění se můžeme pokochat tak, že program spustíme. Nanečisto spustíme PeakMaster takto:

    $ flatpak-builder --run PMNG_pkg/ cz.cuni.natur.echmet.PeakMasterNG.json PeakMasterNG
    

    Pozor na to, že takhle spuštěná binárka se neřídí nastavením snadboxu z finish-args ale parametry, které nastaví flatpak-builder. Ty jsou ve výchozím stavu docela restriktivní a pořádně není přístupný ani souborový systém hosta. Na ověření, že máme sestavené všechny závislosti, knihovny nainstalované na správných místech apod. to ale stačí.

    7. Make-up nakonec

    Balíček, jak jej máme teď by šel bez problémů zabalit, nainstalovat a spustit, měl by však pár nehezkých nedostatků. Kupříkladu chybějící .desktop záznam by znemožnil jednoduché spuštění programu z nějaké nabídky aplikací. Zde má Flatpak pár specifik, o kterých je nutné vědět.

    Protože Flatpakové balíčky jsou identifikovány pomocí app-id, je nutné tomu přispůsobit i příslušný .desktop soubor. Flatpak naštěstí umí tento proces dosti zjednodušit. Náš standardní .desktop záznam vypadá takto:

    [Desktop Entry]
    Type=Application
    Exec=PeakMasterNG
    Name=PeakMaster
    GenericName=Capillary Zone Electrophoresis simulator
    X-KDE-StartupNotify=true
    Terminal=false
    Categories=Science;Education
    Icon=PeakMasterNG
    
    Do hlavičky manifestu přidáme tento blok:
    "rename-desktop-file": "PeakMasterNG.desktop"
    
    Samotný .desktop soubor je potřeba nakopírovat na správné místo. To lze zařídit přidáním následujícího řádku do build-commands modulu PeakMasterNG:
    "install -D PeakMasterNG.desktop /app/share/applications/PeakMasterNG.desktop"
    
    Podobný trik použijeme i na ikonu aplikace. Hlavičku manifestu obohatíme o
    "rename-icon": "PeakMasterNG"
    
    a build-commands o
    "install -D res/PeakMaster_icon.png /app/share/icons/hicolor/32/apps/PeakMasterNG.png"
    

    Tady je kruciální dát pamatovat na to, že v rename-icon se uvádí název původního soubru s ikonou bez přípony a že ikonu je při vytváření balíčku nutné nakopírovat na správné místo. Kdybyste se někde spletli, dostanete od flatpak-builderu na konci sestavování balíčku varování. Proběhlo-li vše v pořádku, budou nyní v /home/flatpak/flatpak_PMNG/PMNG_pkg/ v podadresáři export nakopírované soubory PeakMaster.desktop a cz.cuni.natur.echmet.PeakMasterNG.png

    8. Jdem to zabalit

    I když jsem až dosud hovořil o sestavování balíčku, ve skutečnosti jsme zatím žádný opravdový balíček nevytvořili. Obsah adresáře PMNG_pkg je jen jakýsi prefabrikát, který musíme dotáhnout do konečné podoby. Flatpak umožňuje přímý export do online repozitářů (třeba flathub), tuto možnost jsem ovšem nezkoušel. Předvedu možnost, jakým se vytvoří samostatný soubor, který si uživatel stáhne z webu a pomocí Flatpaku nainstaluje. Je to jednoduché:

    $ flatpak build-bundle PMNG PeakMasterNG.flatpak cz.cuni.natur.echmet.PeakMasterNG
    

    kde PMNG je jméno repozitáře, které jsme předávali flatpak-builderu, PeakMasterNG.flatpak jméno výsledného balíčku a cz.cuni.natur.echmet.PeakMasterNG ID aplikace.

    Čerstvě sestavený teď už skutečně balíček můžete nainstalovat:

    $ flatpak install --bundle PeakMasterNG.flatpak
    

    V aplikačním menu by měla přibýt ikona PeakMasteru. Instalátoru je možné přidat parametr--user, který balíček nainstaluje do ~/.local/share/flatpak.

    Příběhy skřípějících zubů aneb že já se do toho ***** pouštěl

    Zajisté všichni znáte ten pocit, kdy vaši parádní a samozřejmě perfektně odladěnou aplikaci připravíte pro distribuci, všechno je hotové a připravené, už jste v podstatě jednou nohou ze dveří kanceláře ale stejně vám to nedá, tak tu distribuční verzi přece jen vyzkoušíte. Jen tak, pro ten pocit, že jste všechno prověřili s paranoidní nedůvěřivostí, přesvědčeni, že všechno musí být okay a ono to dopadne takhle:

    PMNG crash

    Ještě více se vyděsíte, když vám dojde, že aplikace havaruje někde v paralelizované části a bez rozumných debugovacích nástrojů to nikdy nevyčmucháte. Co dělat, když potřebujete ladit aplikaci z Flatpakového balíčku?

    Flatpakové aplikace je možné debugovat skoro stejně jako všechny jiné. Předpokládáme, že máme kromě runtimu pro danou aplikaci nainstalované i SDK (což na vývojovém stroji určitě máme). Pak lze provést:

    $ flatpak run --devel --command=sh cz.cuni.natur.echmet.PeakMasterNG
    
    Místo aplikace samotné se spustí shell, odkud můžeme spustit třeba gdb:
    $ gdb /app/bin/PeakMasterNG
    
    Z gdb se ale v tomto případě nedozvíme o moc více, v knihovně MPFR prostě selhal nějaký assert...

    Protože tušíme, že jde o problém kdesi v synchronizaci vláken, sáhneme po nástroji helgrind, který je k dispozici také:

    $ valgrind --tool=helgrind /app/bin/PeakMasterNG
    
    výstup, obsahující například toto je více než výmluvný:
    ==5== Possible data race during write of size 8 at 0x6F75010 by thread #10
    ==5== Locks held: none
    ==5==    at 0x6D36268: mpfr_set_d (in /usr/lib/libmpfr.so.4.1.4)
    ==5==    by 0x6F9A727: ??? (in /app/lib/libCAES.so.0.2)
    ==5==    by 0x6F89D55: calculateFirstConcentrationDerivatives_prepared (in /app/lib/libCAES.so.0.2)
    ==5==    by 0x53B7342: ??? (in /app/lib/libLEMNG.so.0.3)
    ==5==    by 0x53BF318: std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (in /app/lib/libLEMNG.so.0.3)
    ==5==    by 0x382020EE78: ??? (in /usr/lib/libpthread-2.24.so)
    ==5==    by 0x53B68C9: ??? (in /app/lib/libLEMNG.so.0.3)
    ==5==    by 0x3820AB7F6E: ??? (in /usr/lib/libstdc++.so.6.0.22)
    ==5==    by 0x3820207443: ??? (in /usr/lib/libpthread-2.24.so)
    ==5==    by 0x381FAE827E: clone (in /usr/lib/libc-2.24.so)
    ==5== 
    ==5== This conflicts with a previous read of size 8 by thread #9
    ==5== Locks held: none
    ==5==    at 0x6D2C984: mpfr_mul (in /usr/lib/libmpfr.so.4.1.4)
    ==5==    by 0x6F8CF41: ??? (in /app/lib/libCAES.so.0.2)
    ==5==    by 0x6F8DE16: ??? (in /app/lib/libCAES.so.0.2)
    ==5==    by 0x6F8BB74: ??? (in /app/lib/libCAES.so.0.2)
    ==5==    by 0x6F89DB7: calculateFirstConcentrationDerivatives_prepared (in /app/lib/libCAES.so.0.2)
    ==5==    by 0x53B7342: ??? (in /app/lib/libLEMNG.so.0.3)
    ==5==    by 0x53BF318: std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (in /app/lib/libLEMNG.so.0.3)
    ==5==    by 0x382020EE78: ??? (in /usr/lib/libpthread-2.24.so)
    ==5==  Address 0x6f75010 is 0 bytes inside data symbol "__gmpfr_emin"
    
    Knihovna MPFR by měla být thread-safe, pokud to daná platforma a použitý překladač umožňují. Jako thread-unsafe se MPFR přeloží pouze tehdy, nedovolí-li to použité prostředí nebo je to ručně zakázáno v konfiguraci. Výstup helgrindu napovídá, že MPFR dodáváná v runtime org.kde.Platform thread-safe nejspíš není. Způsobů, jak to ověřit se nabízí několik. Můžeme například přidat vlastní build knihovny MPFR jako další modul. To uděláme tak, že úplně na začátek pole modules vložíme
    {
    	"name": "mpfr",
    	"buildsystem": "autotools",
    	"config-opts": [
    		"--enable-thread-safe",
    		"--disable-static"
    	],
    	"sources": [
    		{
    			"type": "archive",
    			"url": "http://www.mpfr.org/mpfr-current/mpfr-4.0.1.tar.xz",
    			"sha256": "67874a60826303ee2fb6affc6dc0ddd3e749e9bfcb4c8655e3953d0458a6e16e"
    		}
    	],
    	"cleanup": [
    		"/include",
    		"/share"
    	]
    }
    

    Význam jednotlivých položek už je předpokládám jasný. Projdeme-li výstup helgrindu teď, zjistíme, že žádné synchronizační problémy v našem kódu už nehlásí a program nepadá! (Pozor na to, že helgrind dodávaný s Flatpakovými SDK je trochu problémový a občas spadne sám o sobě.) Jednou ze zvláštností, na kterou jsem při testování Flatpaku narazil bylo, že některé knihovny jsou očividně přeložené i s asserty. Pokud jste zapomněli v kódu nějakou hloupou chybu, můžete o nějaký takový assert zakopnout.

    Done!

    Protože jde o první projekt, který hodlám pro Linux distribuovat pomocí Flatpaku, těžko můžu na závěr nabídnout nějaké dlouhodobější zkušenosti nebo doporučení. Můžu říct pouze tolik, že mi celý proces přišel docela elegantní. Vzhledem k tomu, jak flexibilní musí flatpak-builder být se to o moc jednodušeji udělat nejspíš nedá. Jak moc se mi Flatpak osvědčí v praxi ukáže až čas...

    Úplný finální manifest:
    {
    	"app-id": "cz.cuni.natur.echmet.PeakMasterNG",
    	"runtime": "org.kde.Platform",
    	"runtime-version": "5.9",
    	"sdk": "org.kde.Sdk",
    
    	"command": "PeakMasterNG",
    	"finish-args": [
    		"--filesystem=host",
    		"--socket=x11",
    		"--socket=wayland",
    		"--socket=pulseaudio",
    		"--device=all",
    		"--share=ipc"
    	],
    
    	"rename-desktop-file": "PeakMasterNG.desktop",
    	"rename-icon": "PeakMasterNG",
    
    	"modules": [
    		{
    			"name": "mpfr",
    			"buildsystem": "autotools",
    			"config-opts": [
    				"--enable-thread-safe",
    				"--disable-static"
    			],
    			"sources": [
    				{
    					"type": "archive",
    					"url": "http://www.mpfr.org/mpfr-current/mpfr-4.0.1.tar.xz",
    					"sha256": "67874a60826303ee2fb6affc6dc0ddd3e749e9bfcb4c8655e3953d0458a6e16e"
    				}
    			],
    			"cleanup": [
    				"/include",
    				"/share"
    			]
    		},
    		{
    			"name": "eigen",
    			"buildsystem": "simple",
    			"build-commands": [
    				"mkdir -p /app/Eigen",
    				"cp -r Eigen /app/Eigen",
    				"cp -r unsupported /app/Eigen"
    			],
    			"sources": [
    				{
    					"type": "archive",
    					"url": "http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2",
    					"sha256": "dd254beb0bafc695d0f62ae1a222ff85b52dbaa3a16f76e781dce22d0d20a4a6"
    				}
    			],
    			"cleanup": [
    				"/Eigen"
    			]
    		},
    		{
    			"name": "CoreLibs",
    			"buildsystem": "cmake",
    			"config-opts": [
    				"-DCMAKE_BUILD_TYPE=Release",
    				"-DEIGEN_INCLUDE_DIR=/app/Eigen",
    				"-DCMAKE_INSTALL_PREFIX=/app",
    				"-DCMAKE_CXX_FLAGS=-g"
    			],
    			"sources": [
    				{
    					"type": "git",
    					"url": "https://github.com/echmet/ECHMETCoreLibs.git",
    					"branch": "master"
    				}
    			],
    			"cleanup": [
    				"/include"
    			]
    		},
    		{
    			"name": "LEMNG",
    			"buildsystem": "cmake",
    			"config-opts": [
    				"-DCMAKE_BUILD_TYPE=Release",
    				"-DEIGEN_INCLUDE_DIR=/app/Eigen",
    				"-DECHMET_CORE_LIBS_DIR=/app",
    				"-DCMAKE_INSTALL_PREFIX=/app",
    				"-DCMAKE_CXX_FLAGS=-g"
    			],
    			"sources": [
    				{
    					"type": "git",
    					"url": "https://github.com/echmet/LEMNG.git",
    					"branch": "master"
    				}
    			],
    			"cleanup": [
    				"/include"
    			]
    		},
    		{
    			"name": "qwt",
    			"buildsystem": "simple",
    			"build-commands": [
    				"qmake qwt.pro CONFIG+=release",
    				"make -j4",
    				"make install"
    			],
    			"sources": [
    				{
    					"type": "archive",
    					"path": "/home/flatpak/flatpak_PMNG/qwt-6.1.3_configured.tar.bz2"
    				}
    			],
    			"cleanup": [
    				"/include",
    				"/doc",
    				"/features",
    				"/plugins"
    			]
    		},
    		{
    			"name": "PeakMasterNG",
    			"buildsystem": "simple",
    			"build-commands": [
    				"qmake PeakMasterNG.pro CONFIG+=release CONFIG+=flatpak_build",
    				"make -j4",
    				"make install",
    				"install -D PeakMasterNG.desktop /app/share/applications/PeakMasterNG.desktop",
    				"install -D res/PeakMaster_icon.png /app/share/icons/hicolor/32/apps/PeakMasterNG.png"
    			],
    			"sources": [
    				{
    					"type": "git",
    					"url": "https://github.com/echmet/PeakMasterNG.git",
    					"branch": "master"
    				},
    				{
    					"type": "patch",
    					"path": "/home/flatpak/flatpak_PMNG/PMNG_config.patch",
    					"strip-components": 0
    				}
    			]
    		}
    	]
    }
    
    
           

    Hodnocení: 84 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    21.3. 06:00 Jardik
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Tak kvuli qt aplikaci je potreba kde sdk, tj mnohem vetsi moloch nez je skutecne treba. Pak stejne musis bundlovat svoje verze knihoven, protoze ty v sdk padaj. No a pak kazda aplikace pro jinou verzi sdk ... co kdyz autor apku nezaktualizuje, to budu muset mit sdk plnebezpecnostnich a funkcionalnich chyb? No potes ...
    21.3. 08:10 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Na tu molochoviost runtimů se můžeš dívat různě. Kdyby existovaly nějaké menší varianty (qt, qt-noqtquick, qt-minimal apod.), velmi rychle by ses dostal do stavu, kdy by každá aplikace chtěla vlastní runtime. To by byl ve výsledku větší zmatek než mít jeden masivní runtime, který pokryje závislosti daleko více aplikací. V rámci možností binární kompatibility by měly dostávat aktualizace i ty runtimy, takže bezpečnostní aktualizace se k uživatelům (snad) dostanou. To je velká výhoda oproti statickým buildům. Nějaký abandonware se stane rizikem dříve či později tak jako tak. Ke snížení bezpečnostních rizik má Flatpak sandbox.
    21.3. 10:24 Rosta
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Takze zhorsime bezpecnost starymi zavislostmi s argumentem, ze sandbox ji zase zvysi. :D A ja si naivne myslel, ze ta izolace sandboxu je dalsi dodatecna uroven zabezpeceni... :)
    21.3. 10:31 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Takhle ten argument ale přece nezní. Sandbox je tam hlavně proto, aby bylo možné relativně bezpečně instalovat aplikace z nedůvěryhodných zdrojů. Navíc závislosti staré být nemusí, pokud bude uživatel udržovat aktuální ten runtime. Ideální to není ale v rámci možných kompromisů mi to přijde přijatelné.
    21.3. 12:29 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Tomuhle nerozumim. Pokud moznosti aplikace v ramci sandboxu definuji primo v tom flatpakovym balicku, jak to zvysi bezpecnosti spousteni z neznamych zdroju? Jako malware creator bych asi nastavil minimalni omezeni pro sandbox, nebo se pletu v necem a muzu nejakym snadnym zpusobem definovat nekde ze pro flatpak aplikaze ze zdroje x pouzij maximalni bezpecnost sandboxu?
    21.3. 14:18 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Nastavení sandboxu se dají nastavit buď jednorázově (flatpak run --nofilesystem=home MyApp) nebo trvale (flatpak override --nofilesystem=home MyApp). Práva v manifestu jsou jen default, který si může uživatel upravit dle potřeby.
    22.3. 11:03 Ravise
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Což stejně bude muset dělat ten na konci řetězu a pro každý flatpak zvlášť. Spíš bych si představoval nějaké varování, že "App chce přistupovat k ... [povolit jednou] [povolit vždy] [zakázat]"
    22.3. 14:13 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Bfu to delat nebude, povoli vse...
    Luboš Doležel (Doli) avatar 21.3. 10:25 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Což o to, kompletní Qt runtime by mi nevadil, ale řekl bych, že většina Qt aplikací fakt KDE runtime nepotřebuje. Navíc existují oficiální buildy Qt, které by stačilo převést do formátu Flatpaku.
    21.3. 13:53 RB
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Lze použít FreeDesktop runtime, který je fakt malý. Nicméně pak by si člověk musel bundlovat Qt. Jako nikdo nebrání tomu, aby se udělal malý Qt runtime. Flatpak podporuje také rozšíření runtimů, takže ten KDE runtime by šel udělat menší a třeba KDE Frameworks by se dalo dát do rozšíření, o jehož instalaci by si aplikace mohla říct, pokud by něco z něj potřebovala.
    21.3. 06:25 Want
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    To by jeden blil. Ještě že existuje mnohem jednodušší a efektivnější způsob jak vyrobit standardní binární balík: Použiju overlay, normálně to nainstaluju, pak z ramdisku vykopíruji obsah který chci zabalit, vyhodím co tam nechci. V případě nutnosti dopíšu postinstalační skript, přidám soubor s popisem balíku a použiju standardní distribuční nástroj k vytvoření binárního balíku.
    21.3. 10:40 dumblob | skóre: 10 | blog: dumblog
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    To preci jiz dlouho existuje plne automatizovane. A tesi se velke oblibe:

    https://github.com/jordansissel/fpm
    Refundace za Windows 7 od Lenovo obchodníka - soud rozhodl, že je zákazník v právu!
    21.3. 11:06 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Podobně by se dalo použít i třeba OBS od SUSE, které má teda menší rozsah podporovaných formátů. Problém s distribucí nativních balíčků pro různá distra je ten, že je třeba je udržovat a v případě potřeby přebuildovat vůči novým (či naopak starým) závislostem. Pokud není v týmu aspoň jeden člověk, co by aplikaci X na distru Y aktivně používal, musí to IMHO dřív nebo později skončit tím, že se aspoň jeden balíček rozbije.
    21.3. 14:58 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    .. a uplne stejne ti tvuj balicek rozbije update "runtime"
    21.3. 15:13 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Jak? Pokud ty runtimy nebude spravovat nějaký pitomec, měla by být jedna řada runtimu pořád binárně kompatibilní.
    21.3. 16:15 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    uplne to stejne plati o distrech
    21.3. 16:20 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    I o distrech jako Fedora, Debian-(unstable,testing), Arch etc.?
    21.3. 16:26 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    naopak, i "stable" distra co slibuji ABI kompatibilitu se z "nepochopitelnych" duvodu rozbijeji

    a to stejne se bude dit s temi runtimes
    21.3. 16:32 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Promiň ale citation needed.
    21.3. 16:36 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Jasne, napriklad par dnu stare kompletni rozbiti kernel driveru v LTS ubuntu ... https://bugs.launchpad.net/ubuntu/+source/gcc-4.8/+bug/1750937
    21.3. 16:45 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Kernel ABI != userspace ABI a já se hlavně ptal na případy, kdy něco rozbil update flatpakového runtime.
    21.3. 16:56 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Kernel ABI != userspace ABI
    Ve smyslu, ze "stable" distra neslibuji stabilni kernel ABI ale jen userspace ABI?

    Tohle je priklad, na ktery jsem narazil zrovna vcera, kdy slib stabilniho ABI nic neznamena.

    Pripady, kdy se neco podobneho povedlo klukum z flatpaku si budes muset najit sam (maji bugzillu pro runtimes?).
    21.3. 17:00 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    treba https://github.com/flatpak/flatpak/issues/1359 ?
    21.3. 17:04 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    https://github.com/flatpak/flatpak/issues/1276 taky dobry
    21.3. 17:30 RB
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    To je pěkné, ale když se něco takového stane, tak ten problém řeším s jedním runtimem. Ne s RHELem, SLESem, Debianem, Ubuntu LTS... a to jmenuju jen distra s dlouhou podporou. Ano, i runtime ve Flatpaku může rozbít ABI, ale rozdíl oproti distribuci přes balíčky v distribucích je v tom, že mám jednu platformu, pro kterou vyvíjím a proti které musím testovat, a pořád můžu zasáhnout desítky distribucí.
    21.3. 18:08 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    To zni rozumne, jenze pokud kvuli Flatpaku prestanes RHEL, Suse, Debian a Ubuntu podporovat, tak o hodne uzivatelu/zakazniku prijdes.
    22.3. 07:43 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Na mainstream distrech je Flatpak k dispozici taky, o žádné uživatele v principu přijít nemusíš.
    22.3. 17:43 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Treba ubuntu 14.04 je stale podporovane, ale flatpak pro nej neni.

    Navic dost uzivatelum, zvlast na linuxu, bude ten bloat a velice problemove integrovani do systemu (krome temat, fontu, napr. firemni CA) vadit.

    22.3. 19:48 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Záleží na aplikaci. Integrace do systému mi nepřijde až tak špatná - aspoň z pohledu BFUčka - a předpokládám, že každý vývojár si udělá analýzu přínosů a omezení. Kdybych měl k ruce člověka, co by se o ten packaging na Linux staral, nativní balíčky pro pár nejprofláklejších dister bych asi připravil. Protože musím dělat všechno od návrhu, výpočetních knihoven až po UI a testování sám a celé to je v podstatě takový vedlejší produkt, nemám na mrcasení se s každou libBrokenDependency.so.66.6 čas a sáhnu tedy po něčem jako Flatpak. Tak jako se vším je o to o nalezení vhodného kompromisu.
    22.3. 20:09 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    To vcelku souhlasim, je to vlastne o neco lepsi (a v necem horsi) nez vytvorit tarball, ktery si bude tahat vsechny zavislosti se sebou. Pokud by byl flatpak takto propagovan, tak je vse v poradku, ale "the future of application distribution"? To nemuzou myslet vazne prece...

    Me hodne zajima ta integrace - co tam funguje prosimte? Zatim jsem se dozvedel, ze si to umi nekdy precist jake ma system (nebo uzivatel?) nastavene GTK tema a nainstalovat, pokud je podporovane, tema se stejnym nazvem.

    Clanek je samozrejme super. :)
    22.3. 20:50 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Nějak marketovat to přece musí;)

    Jak moc dobře se flatpakové aplikace integrují do systému můžu vyzkoušet pořádněji, zatím jsem se omezil na „dá se to jednoduše zbuildit, vím jak na to a zdá se to funkční”. Minimálně adaptace na systémový GUI make-up vypadá OK. Možná by z toho mohl být další zápisek...
    24.3. 19:12 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    • pouziva se ve flatpaku stejny font jako v systemu?
    • .. kdyz zmenim nastaveni fontu v systemu, zmeni se bez resetu aplikace i ve flatpak aplikacich (pripadne aspon po resetu)?
    • .. co kdyz font, ktery pouzivam v systemu, neni ve flatpaku
    • nastaveni renderovani fontu - pro zacatek vypnuti antialiasingu
    • pouziva flatpak stejne tema jako v systemu?
    • .. kdyz zmenim tema v systemu, zmeni se bez resetu aplikace i ve flatpak aplikacich (pripadne aspon po resetu)?
    • .. co kdyz tema, ktery pouzivam v systemu, neni ve flatpaku (!!)
    • .. jak se flatpak chova pokud dva uzivatele na stejnem systemu pouzivaji ruzna temata?
    • .. ^^ minimalne pro GTK a QT
    • integrace libGL a knihoven k driverum .. Je hw akcelerace oficialne podporovana pro flatpak aplikace? Co kdyz vyhodim ze systemu nvidia GPU a vymenim za AMD? Resp. vzdyt je potreba aby knihovny a drivery byly ve stejne verzi(!!) .. jak se tohle resi?
    • budou flatpak aplikace respektovat moje systemove nastaveni CJK IME ??
    • Firemni CA pridana v /etc/ssl/certs a nastaveni /etc/ca-cerficates.conf
    • Bude flatpak respektovat nastaveni proxy v systemu?
    • Pokud aplikace potrebuje poslouchat na nejakem portu? To se resi predpokladam pres DNAT? I na ipv6?
    • Pokud by byl soucasti aplikace treba skriptik do /etc/cron.daily nebo systemd timer, kam se nainstaluje?
    • Pokud se ma aplikace spoustet po startu/ovladat pres init skripty, jak je toto vyreseno?
    26.3. 11:25 MadCatX | skóre: 19 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Tohle zní jako rozumné požadavky na dostatečně integrovanou aplikaci. Zkusím si někdy během příštích pár týdnů udělat čas a v rámci možností to vyzkoušet. Co se ovladačů GPU týče, ty pokud vím nejsou součástí žádného flatpakového runtimu a vždy se použijí ty systémové, proto je taky přístup k 3D hardwaru nutné odsandboxovat přes --device=dri (doufám, že nekecám).
    26.3. 17:23 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Soucasti ovladacu jsou krome modulu do jadra i knihovny jako libGL. Knihovny a driver v jadre musi byt ve stejne verze.
    26.3. 21:35 MadCatX | skóre: 19 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Však jo. Pokud vím, Mesa ani žádná její část ve Flatpakových runtimech není.
    27.3. 03:41 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Ja se prave divam ze se tam snazi zabalickovat vsechny verze knihoven k nvidia driverum.
    AsciiWolf avatar 27.3. 14:24 AsciiWolf | skóre: 39 | blog: Blog
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Pokud se ma aplikace spoustet po startu/ovladat pres init skripty, jak je toto vyreseno?
    Není vyřešeno. Pro takové aplikace není Flatpak určen.
    AsciiWolf avatar 29.3. 15:44 AsciiWolf | skóre: 39 | blog: Blog
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Tedy, abych byl přesnější - spouštění po přihlášení (přes desktop soubor v ~/.config/autostart/) není problém; spouštění a ovládání přes init scripty/systemd unity by teoreticky šlo, ale pro takové věci prostě Flatpak není určen. Je určen pro uživatelské (primárně GUI) aplikace, ne pro démony.
    29.3. 16:08 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    GUI aplikace, jejiz soucasti je i nejaky demon, ktery by se mel poustet pri bootu/loginu, me uplne scifi neprijde - typicky node a penezenka v jednom pro ruzne coiny. Nakonec, systemd to podporuje.
    AsciiWolf avatar 29.3. 18:28 AsciiWolf | skóre: 39 | blog: Blog
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Tohle by mělo jít přes xdg portály/dbus. Nicméně ten démon musí být distribuovaný samostatně, ne jako součást Flatpak balíčku.
    21.3. 12:30 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Jak je to s bezpecnosti flatpaku ve smyslu treba digitalniho podpisu?
    21.3. 12:54 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Podepisování pomocí GPG klíčů by mělo být podporované ale nezkoušel jsem to.
    21.3. 12:34 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    A to jsem si rikal, ze bastleni rpm nebo deb je nekdy pakarna... chapu vyhodu flatpaku, ale taky vidim jaky bordel to nese sebou. Kdyz to dovedu do extremu, tak diky nejake prilozene ssl library misto pouziti sdilene mam v systemu diru dokud ji autor flatpak aplikace nefixne. 10 autoru, 10 dir. zatimco u rpm proste aktualizuji fixnutou ssl library a 10 aplikaci patrne bude fungovat dale.
    21.3. 12:45 Adolf Kernel
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    rovno nech sa distribuuju komplet paravirtualizacne kontajnery - k tomu ten flatpack speje...
    21.3. 13:48 RB
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    No, díru v systému mít nebudeš. Budeš ji mít v té konkrétní sandboxované aplikaci. Aplikace, které jsou "dobří občani open-source ekosystému", používají standardní knihovny, které jsou v runtimu (včetně té tebou zmiňované SSL). Runtimy jsou sdílené a udržované větším projektem, takže podobné distribucím. Aplikace, typicky ty 3rd party, které si bundlují prakticky všechno, už to dávno dělají v RPM a DEB a popravdě, raději na takové aplikace použiju Flatpak, kde jim nemusím dávat během instalace práva roota, neinstalují mi soubory libovolně do systému a neběží mi ve stejném namespacu jako zbytek systému.
    22.3. 17:18 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Takže místo runtime z distra bude potřeba hlídat kompatibilitu se sdíleným runtime. A nebo si ten runtime balit k aplikaci. To první má stejný problém jako vývoj proti distru (= flatpak je zbytečný), to druhé má bezpečnostní problémy (= flatpak je nebezpečný)
    Quando omni flunkus moritati
    22.3. 17:21 MadCatX | skóre: 19 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Jenomže dister jsou stovky, sdílený flatpakový runtime jen jeden. Proti tomu se hlídá kompatibilita daleko snáze.
    22.3. 17:48 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    To urcite usetri praci ... ale nebude pak muset mit uzivatel nainstalovano 10 ruznych runtime (z toho 9 neudrzovanych a deravych), protoze ruzne aplikace budou vyzadovat runtime ruznych verzich?
    22.3. 18:06 MadCatX | skóre: 19 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Zodpovědný vývojář bude doufám vyvíjet pro nějakému z „oficiálních“ runtimů s dobrou podporou. Podobné peklo s potenciální záplavou exotických a nepodporovaných závislostí může snadno vzniknout např. na Archu instalováním balíčků z AURu. Jde IMHO o problém „kulturní“ který nemá vyloženě technické řešení...
    23.3. 01:06 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Samozřejmě že ne, s příchodem flatpaku prasata vývojáři s nevelkým rozhledem procitnou, přestanou vyvíjet bez ohledu na okolní svět, zavládne všeobecný mír a ráj na zemi. No nic, zpátky do reality...
    Quando omni flunkus moritati
    23.3. 06:21 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    I kdyby to byla pravda, klidně ať se tak stane. Vzhledem k tomu, jak je Flatpak od zbytku systému izolovaný ti libolovný bazmek nemůže příliš ublížit. Mít nainstalovaných několik runtimů najednou není šikovné ale v mometně, kdy by mi to začalo vadit může beztrestně odinstalovat, co nepotřebuji nebo klidně wipenout celý /var/lib/flatpak. To je daleko lepší situace než typické dilema AURisty, kdy WeirdAppA chce knihovnu libLegacyB která teď začala kolidovat s libNewVersionB, na které jako na potvoru závisí dalších patnáct balíčků a dokud to někdo nějak nevyřeší, nemohu instalovat aktualizace.
    Grunt avatar 24.3. 11:50 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Nejsem ani Archista ani AURista, ale zrovna AUR se mi docela líbí a použil bych ho jako protipříklad k Flatpaku. Nedá se natvrdo zalinkovat libLegacyB (přecejen je to kompilace) oproti WeirdAppA? Když si instaluju v binárních distrech věci ručně, jednoduše si připravím adresář /opt/WeirdAppA a svoje verze knihoven si do ní zakompiluju a pak nahardlinkuju proti samotné aplikaci. Něco takového v Archu možné není?
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    24.3. 12:27 MadCatX | skóre: 19 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    V tom případě by sestavení závislostí a samotné aplikace musel řešit PKGBUILD oné WeirdAppA a dále zde máme opět problém statického linkování a argumentu, že všechny knihovny by měly být sdílené. Za třetí i ta libLegacyB může mít nějakou system-wide závislost, která by se mohla časem rozbít a vyžadovat rebuild.

    Pokud si něco sestavuješ ručně včetně závislostí, děláš vlastně úplně totéž co ve finále Flatpak, akorát bez sandboxu a centralizované správy. Na tom samozřejmě není nic špatného a bude se to (možná) o něco lépe integrovat se zbytkem systému ale rozhodně to není instalační postup, který můžeš chtít po BFU.
    24.3. 14:31 Kate | skóre: 8
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Nejen bez sandboxu a centralizované správy, ale pořád přijde o updaty runtime, které flatpak zajistit umí.
    23.3. 01:03 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Jo, protože stejné knihovněy převzaté ze stejných zdrojáků přibližně ve stejné době se od sebe v různých distribucích naprosto zásadně liší tak, že v tom je problém a prostě to uhlídat nejde, což je důvod, proč vznikl flatpak. Jasně...
    Quando omni flunkus moritati
    23.3. 06:07 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Tohle přece není pravda. Ubuntu 16.04 bude mít o dost jiné verze knihoven než třeba RHEL 7, Fedora 27 nebo aktuální Arch. Některé distribuce si nedělají velkou hlavu klidně i s major aktualizací nějaké knihovny v rámci jedné verze, jiné se to snaží hlídat. Pokud nemáš člověka, co by releasy na Linux spravoval, nemáš šanci podporovat víc než hrstku distribucí a i tak to bude vyžadovat pravidelnou kontrolu, že je všechno stále OK.
    24.3. 12:47 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Přičemž ty jiné verze se od sebe budou lišit tak zásadně, že to vlastně bude úplně jiná knihovna...
    Quando omni flunkus moritati
    24.3. 13:03 MadCatX | skóre: 19 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    O to přece nejde. I kdyby API zůstalo stejné, pořád se může změnit ABI což může paradoxně být i horší problém. Jen ABI MPFR se za poslední rok změnilo asi 3x. Zkus podobné změny uhlídat ručně pro všechny závislosti na všech distrech, které chceš nativně podporovat a vždy včas poskytnout aktualizované balíky.
    21.3. 12:42 Adolf Kernel
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    v jednoduchosti je krása. flatpak nevyzera byt jednoduchy...
    23.3. 16:23 Albert Einstein
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Everything should be made as simple as possible, but no simpler.
    28.3. 15:38 Albert Einstein
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Věci mají být jednoduché jak jen to jde. Ale ne jednodušší.
    21.3. 14:54 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Uz flatpak respektuje systemove fonty (vcetne nastaveni renderovani) a temata?
    21.3. 15:15 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Systémová témata ano, nastavení renderování těžko říct kvůli rozdílům v knihovně freetype2.
    21.3. 16:18 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Ty systemova temata furt tim hackem ze si musis do flatpaku (runtimu?) rucne nainstalovat a nastavit to ktere pouzivas (pokud pro flatpak vubec je)? Tzn. integrace jako takova zadna?

    Pokud se pouziva uzivatelska/systemova konfigurace ... jak se resi rozdily v konfiguraci mezi ruznyma verzema toho tematu (a to i takove ze s configem z jine verze muze padat) ?
    21.3. 16:31 MadCatX
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Mně to fungovalo úplně bezúdržbově na všech čtyřech systémech, kde jsem to zkoušel. Možná jsi to z textu článku nezaregistroval ale já nejsem žádný flatpakový evangelista ani guru. Přišlo mi zajímavé podělit se o své zkušenosti a případně to konfrontovat s jinými možnostmi. Pochopil jsem, že se ti koncept flatpaku nelíbí, okay, jak bys to tedy řešil ty?
    21.3. 16:34 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    A pouzivas vlastni temata (nebo vzdy vychozi systemove)?

    Zminuju/ptam se na konkretni problemy - az vsechny ty problemy, ktere sebou flatpak prinasi, vyresi, tak to muze byt zajimava technologie.

    31.3. 19:13 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Pochopil jsem, že se ti koncept flatpaku nelíbí, okay, jak bys to tedy řešil ty?
    Dodrzovat ABI kompatibilitu. Pokud by mi abclinuxu nevracelo "413 Request Entity Too Large", tak bych vlozil jako prilohu build vimu, ktery pouziva dynamicke linkovani a bude fungovat na vsech normalnich distribucich od rhel5 po Ubuntu 17.10 - to znamena na vetsim mnozstvim distribuci nez flatpak. Navic diky tomu ze ma dynamicky linkovane libtinfo se i lepe integruje do systemu.

    Je mi jasne, ze to takto nefunguje pro gtk aplikace, protoze gnome "vyvojari" (narozdil od core knihoven) na to totalne kaslou.

    Sam mam takovou prihodu, kdy jsem resil velice neprijemny bug s gsettings v ubuntu. Resetovalo se nastaveni klavesovych zkratek po restartu. Tento bug tam vydrzel pres dva roky a minimalne jeden ubuntu maintainer o nem vedel, nastavil si workaround a neresil; po dvou letech me to nastvalo tak, ze jsem stravil tri dny v gdb a fixnul to za ne, ale ocenuji, ze pak aspon patch bez kecu prijali (na zaklade predchozich zkusenosti jsem patch ani nezkousel dostat do upstreamu gnome - to by proste vyhnilo v bugzille). Je mi jasne, ze naucit vyvojare s takovymto pristupem nerozbijet ABI je mimo realitu. Na druhou stranu, jine opravdove reseni neexistuje. Flatpak apod. jsou takove workaroundy, kde se povazuje za uspech, ze se aplikace povede spustit.
    21.3. 17:25 RB
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Ne, minimálně pro Flathub to je vyřešené tak, že do něj lze přidávat témata jako rozšíření runtimu. Minimálně, co se týče GTK, tak jsou tam ta nejrozšířenější. Pokud ho má uživatel nastavené v systému, automaticky se nainstaluje pro Flatpak a uživatel nemusí nic dělat. Libovolně témata ze systému to přebírat nebude, protože v runtimu je zpravidla jiná verze GTK než v systému a nikdo nezaručí, že to téma ze systému bude bezproblémově fungovat i s GTK z runtimu.
    21.3. 17:52 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Ne, minimálně pro Flathub to je vyřešené tak, že do něj lze přidávat témata jako rozšíření runtimu.
    Jo to je presne ten "hack", ktery myslim, tzn. integrace nulova. Takze se nic nezmenilo, diky za info.
    21.3. 18:00 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Ale jo, to ze se to aktualni tema nacte z konfigurace systemu a automaticky nainstaluje a nastavi je fajn. Tohle se deje vlastne kdy?
    21.3. 16:19 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    freetype2 ti bude navic se stejnym configem v ruznych verzich renderovat znatelne jinak
    21.3. 17:07 PetrHL | skóre: 17 | blog: petr_h | Neratovice
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Díky za sdílení zkušenosti.

    Mám aplikaci napsanou ve FreePascalu/Lazarusu a chtěl jsem ji zkusit distribuovat jako flatpack. Rychle mě to přešlo, bylo by to šíleně komplikované. Objevil jsem počin jménem AppImage. Pro mne, jako autora aplikace, mnohem pohodlnější a předvídatelnější.
    "Do, or do not. There is no 'try.'" -- Jedi Master Yoda | CQRLOG | HamQTH | Domů
    Luboš Doležel (Doli) avatar 22.3. 00:46 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Navíc mám pocit, že AppImage je na rozdíl od Flatpaku opravdu používaný. Zatímco Flatpak jsem ještě nikdy neviděl, aplikací v AppImage mám stažených hned několik.
    22.3. 08:09 kolega
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Jestli jsi se s flatpakem nesetkal, tak jdi na flathub :-)
    22.3. 11:08 Ravise
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Když to, co hledám, není v systémových repozitářích, jdu hledat na stránky toho kterého projektu a jdu tam, kam mě pošlou.
    22.3. 11:28
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    skrytý komentář Náš administrátor shledal tento komentář závadným.

    NSFW píseň skupiny Masturbace

    Zobrazit komentář
    AsciiWolf avatar 24.3. 17:18 AsciiWolf | skóre: 39 | blog: Blog
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Flatpak je běžně používaný např. na Linux Mintu či Fedoře a některé distribuce, např. Endless OS či Fedora Atomic Workstation, jsou na něm dokonce postaveny. Další distribuce se pomalu přidávají k jeho podpoře ve výchozí instalaci (krom Ubuntu, které má svůj vlastní Snap).
    Rezza avatar 27.3. 09:42 Rezza | skóre: 25 | blog: rezza | Brno
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Zase u AppImage je to takove "na kolene" - uz jsem zazil takove, kde jela az xta verze po nahlaseni bugu, protoze autor zabundloval minimum knihoven, takze tu chybelo tohle, tu bylo tohle v jine verzi atd. U Flatpaku by tohle mel resit runtime.
    28.3. 16:38 RB
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Přesně, u AppImage si autor může volně linkovat mimo ten bundle, což je cesta do pekel. Bude to lavírovat mezi: funguje to na systému autora, funguje to na systému lidí, kteří hlásí bugy atd. Nějaká záruka portovatelnosti tam není.
    28.3. 21:01 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Za to kdyz se aplikace bunduluje s kompletnim OS (to rovnou muzou bundlovat i s vlastnim hardware), tak to je uplne ale uplne bezproblemovy ....
    28.3. 22:20 RB
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Nic není nikdy úplně bezproblémové, ale jinak ano, Flatpak je v tomto ohledu výrazně méně problémový než AppImage.
    29.3. 10:27 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    A kdybyste bundlovali s kazdou aplikaci i vlastni hardware tak je to uplne bezproblemovy :P.
    Rezza avatar 29.3. 12:14 Rezza | skóre: 25 | blog: rezza | Brno
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Neni - takovych Hw/SW kombinaci zname dost a stejne nefunguji :). Ale jde o to, kde mame tu hranici, kde je to jeste akceptovatelne a kde uz ne.
    29.3. 12:41 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Aplikace, kde mi nefunguje klavesnice (resp. IME), protoze si sebou bundluje cely OS, je urcite za tou hranici.

    Na druhou stranu, kdyz gnome "vyvojari" maji potrebuju rozbijet ABI i API kazdych 6 mesicu, tak si aplikace cely gnome sebou bundlovat musi.
    22.3. 09:57 ehm
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Článek je pěkný (a díky za něj), ta technologie už tolik ne. Zatím rozmýšlím, jestli je za tím víc konzervativnost, nebo racionální důvody. V současných balíčkovacích systémech vidím nedostatky, ale nevím, jestli tohle bude celkově vzato lepší.

    Mimochodem, to klonování masteru mě fakt děsí. Nedá se tam naspecifikovat alespoň ID posledního commitu? U souboru to chce checksum, tak proč u Gitu se to spokojí s názvem větve? Takhle je to naprosto nezreplikovatelné, každý, kdo to vybuildí, může dostat úplně jiný program.
    22.3. 12:04 MadCatX | skóre: 19 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Flatpak se IMHO nesnaží být "lepší balíčkovacím systémem" jako spíš rozumně kompromisní alternativou k nativním balíčkům. Jsem zvědavý, zda a kam se možnosti Flatpaku posunou.

    Co se klonování z gitu týče, jde uvést branch, tag i konkrétní commit, který se má použít.
    22.3. 16:55 trevor12 | skóre: 1 | blog: prvni_kroky_zacatecnika
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    tento prispevek by si zaslouzil placeny clanek na root.cz
    22.3. 18:45 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Rekneme si to na rovinu, flatpak umoznuje bez nejake vyrazneho testovani dostat aplikaci na xx dister misto 2-3 s testovanim. Autor usetri cas, ale tak nejak to shazuje unix pristup ze knihovny jsou sdilene a aplikace pouzivaji to co uz je v systemu misto aby si tahali sebou vsechen bordel. Flatpak mi pripomina takovy zip pro windows ve kterem jsou vsechny dllka a aplikace, bez ohledu na to ze vsechny dllka mam uz v systemu a v 10ti dalsich adresarich ruznych aplikaci.
    Agent avatar 23.3. 15:18 Agent | HC city
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Já být vývojář distribuující si sám své výtvory do světa, tak udělám balíčky na 2 max. 3 nejpoužívanější balíčkovací systémy a ostatní buď ať se přizpůsobí a začnou používat jeden z těch balíčkovačů, nebo ať si trhnou. Variabilita a možnost výběru může být dobrá věc, ale co je moc, je moc.
    Nevěděl zpočátku, co si počít, jak žít, co dělat, ale brzy se vpravil do role samotáře.
    23.3. 16:14 RB
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    A aby to fungovalo na rozumném počtu distribucí, tak budeš bundlovat jak o život. Bez sandboxu, ve stejném namespacu...
    23.3. 17:00 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Nic ve zlym, ale pokud je cely flatpak postaveny na tom, ze v manifestu jako autor aplikace urcis omezeni (rozumi se malware se nebude omezovat) anebo cekas ze si uzivatel udela nejaky override tak ta security je nastavena spatne.
    27.3. 15:45 RB
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    To, že to tak funguje nyní a sandboxing není vynucovaný, neznamená, že to tak bude fungovat i v budoucnu. Běží to v kontejneru, má to definované API na nejběžnější komunikaci mimo sandbox, takže základy pro účinný sandboxing na rozdíl klasických balíčků tam jsou.
    23.3. 16:56 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Naprosty souhlas. Misto toho aby se linuxovy svet nejak zjednocoval, tak open source zpusobuje to, ze nekomu se nelibi neco, vznikne dalsi distribuce. A pak tady mame urpmi, rpm, apt, flatpaka miliony dalsich balickovacu ktere se obcas v nicem nelisi, obcas se zasadne lisi. Delat komercni soft pro linux? Rpm, deb, pkg a ostatni me nezajima. Delat soft jako one man show? Flatpak.
    23.3. 16:12 RB
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Nevím, jestli to je Unix přístup, protože ve světě unixů (např. BSD) se jedou aplikační bundly už drahně let.
    23.3. 16:52 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem

    Neco jako treba:

    # for LINE in $(rpm -qR httpd);do rpm -q --whatprovides $LINE; done | sort | uniq | grep -v "no package provides"
    
    apr-1.2.7-11.el5_6.5
    apr-util-1.2.7-11.el5_5.2
    bash-3.2-32.el5
    chkconfig-1.3.30.2-2.el5
    coreutils-5.97-34.0.1.el5_8.1
    db4-4.3.29-10.el5_5.2
    expat-1.95.8-11.el5_8
    file-4.17-28
    findutils-4.2.27-6.el5
    gawk-3.1.5-16.el5
    glibc-2.5-107
    httpd-2.2.3-76.0.1.el5_9
    initscripts-8.45.42-1.0.3.el5_8.1
    libselinux-1.33.4-5.7.el5
    mailcap-2.1.23-1.fc6
    mktemp-1.5-24.el5
    openldap-2.3.43-25.el5_8.1
    openssl-0.9.8e-26.el5_9.1
    pcre-6.6-6.el5_6.1
    shadow-utils-4.0.17-21.el5
    zlib-1.2.3-7.el5

    Jsem si nevsiml ze by si to tahlo vsechny zavislosti sebou. A httpd je takova obvykla unixova aplikace pokud se nepletu. Instalace pres rpm/deb mi proste prijde k systemu cistejsi a obecne vzato i bezpecnejsi.

    23.3. 16:56 Vantomas | skóre: 27 | Praha
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    httpd běží asi tak na 100 milionů zařízení, kdežto tady jeho PeakMaster asi tak na 100 zařízeních? To je pak jasný, že se maintaineří jen hrnou. A pro každou distribuci celé zástupy!

    Osobně u obskurní aplikace dám radši přednost Flatpaku, než vlastní kompilaci ze zdrojáků. To je k systému ještě méně čistější a obecně vzato i bezpečnější.
    23.3. 06:08 ehm
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Co se klonování z gitu týče, jde uvést branch, tag i konkrétní commit, který se má použít.
    Aspoň, že tak.
    Flatpak se IMHO nesnaží být "lepší balíčkovacím systémem" jako spíš rozumně kompromisní alternativou k nativním balíčkům. Jsem zvědavý, zda a kam se možnosti Flatpaku posunou.
    Obávám se, že nativní balíky budou postupně mizet. Tady je totiž problém v tom, že vytvořit správně balík třeba pro Debian není vůbec jednoduché a dostat ho do oficiálních repozitářů jakbysmet. Vývojáři ani uživatelé nechtějí čekat.

    Dnes se proto lze často setkat s „oficiálními“ upstream repozitáři (ať už provozovaných na vlastním serveru, nebo třeba jako PPA). To na první pohled vypadá jako dobré řešení, dokud není třeba řešit závislosti napříč těmito repozitáři. Balík foo z jednoho repozitáře může záviset na balíku bar z jiného repozitáře, který uživatel nemá přidaný. Konflikt pak musí vyřešit ručně on sám (v tomto případě nalezením a přidáním repozitáře, který obsahuje patřičný balík). V dlouhodobém horizontu se také můžou objevovat problémy se zanikajícími repozitáři.

    Nabízí se myšlenka, jestli by závislost neměla být specifikována jen jménem balíku, ale ještě zdrojem. To ovšem neřeší ty případné zanikající repozitáře.

    Nakonec by tedy asi bylo nejlepší něco jako IPFS, kdy balík bude specifikován jménem, verzí (viz dále) a nějakým podpisem – klasický checksum nelze použít, protože každá verze bude mít jiný.

    Co se týká verzí, bylo by ideální pevně odlišit verzi API od verze softwaru, nebo striktně dodržovat konvence. V praxi nevím, jaký konsenzus v případě schéma <major>.<minor>.<patch> panuje ohledně situací, kdy v rámci (security) bugfixu je nutné rozbít zpětnou kompatibilitu. Inkrementuje se jen patch a mávne se nad tím rukou s tím, že „správně napsané programy by to rozbít nemělo“?

    Takže by existoval jen jediný decentralizovaný repozitář (provozovaný např. na IPFS). Závislost by byla určená jménem balíku, podpisem, co nejméně restriktivní verzí (např. 1.2.*, pokud je garantováno, že API je stejné; alternativně lze také zavést další kvalifikátory, např. že patch musí být větší nebo roven nějaké hodnotě apod.) a dále referenční verzí, se kterou byl daný program původně testován.

    Pokud by v systémech existovalo cachování balíků (nebo způsob jak je rekonstruovat z instalovaných souborů a minimálních dat držených v cachi package manageru), šlo by za předpokladu, že by systémy byly do IPFS běžně zapojeny zajistit, že dokud lidé budou libovolný balík dané verze používat, bude k dispozici i ostatním.

    Referenční verze má spíše dokumentační význam: Pokud po upgradu nějaké knihovny přestane program fungovat, uživatel tuší, na jakou verzi by měl zkusit downgradovat (i třeba za cenu, že bude riskovat bezpečnostní zranitelnost – to už je jeho volba). Balíčkovací systém by s tímto případně mohl i automatizovaně pomoci.

    Prerekvizitou samozřejmě je, že balíčkovací systém bude umět držet více verzí stejně pojmenovaného balíku. Ostatně, v systému, který naznačuji, by název měl rovněž spíše dokumentační význam než cokoliv jiného. Závazný je spíše nějaký ten podpis.

    IPFS zmiňuji jen jako příklad, možná se na toto použití ani nehodí. Podstatná je ta myšlenka jednoho decentralizovaného depozitáře, ne konkrétní technické provedení.
    23.3. 12:12 dumblob | skóre: 10 | blog: dumblog
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Některé z těchto myšlenek jsou implementovány v nejpokročilejším (a přitom jednoduchém) mně známém balíčkovacím systému GNU Guix.
    Refundace za Windows 7 od Lenovo obchodníka - soud rozhodl, že je zákazník v právu!
    23.3. 16:57 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    A nekdo ho pouziva?
    24.3. 11:23 dumblob | skóre: 10 | blog: dumblog
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    No jistě. To by jinak v těch repozitářích nebyly tisíce aktuálních (!) balíčků (přes 7100 jich je aktuálně zahrnuto v continuous integration).

    Jinak Guix můžete používat i v jakémkoliv jiném distru - funguje všude (paralelně k distro-specific "nativnímu" balíčkovači). Docela se hodí, že Guix umí instalovat jakékoliv množství různých verzí téhož, což právě většina nativních balíčkovačů absolutně nezvládá.
    Refundace za Windows 7 od Lenovo obchodníka - soud rozhodl, že je zákazník v právu!
    24.3. 14:29 Petr
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Dekuji, podivam se na to..
    Grunt avatar 24.3. 10:23 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Jen tak pro zajímavost:
         215 text files.
         215 unique files.                                          
           6 files ignored.
    
    github.com/AlDanial/cloc v 1.70  T=0.70 s (301.2 files/s, 26595.5 lines/s)
    -----------------------------------------------------------------------------------
    Language                         files          blank        comment           code
    -----------------------------------------------------------------------------------
    C++                                 88           2307            134           8636
    C/C++ Header                       100           1103             70           3633
    Qt                                  20              0              0           2313
    Prolog                               1             22              0            270
    Markdown                             1             18              0             55
    Windows Resource File                1             19             23             28
    -----------------------------------------------------------------------------------
    SUM:                               211           3469            227          14935
    -----------------------------------------------------------------------------------
    
    Takže kvůli cca 9k řádkům v C++ (dodám že to je počet který by Gentoo emerglo jedním příkazem snad dřív než by se ten Flatpak nainstaloval) bude sebou aplikace tahat co? Qwt, QT5, LEMNG, … GNUGMP? Pokrok prostě nezastavíš. Ještě by mě zajímalo kolik má kB vlastní binárka toho PeakMasteru a kolik vlastní balíček ve Flatpaku. Jako pro nějaké velké aplikace typu LibreOffice, GIMP (i když i ten mám přeložený svůj v několika verzích a přitom naprosto bez problémů) budiž, ale tohle kvůli nějakému grafickému bindingu na pár knihoven který by se hodil spíš do nějakého AppStoru?
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    24.3. 12:17 MadCatX | skóre: 19 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Flatpakovový balíček má cca 1.5 MB, Release verze binárky PM cca 800 kB (bez závislostí). Zbytek toho příspěvku nechápu. PM je GUI frontend pro výpočetní engine a všechno má nějaké závislosti, které se logicky musí nainstalovat. AppStoru? Kdyby bylo možné PM distribuovat přímo třeba skrze flathub, fungovalo by to skoro jako nějaký AppStore. Přiznám se, že mi vůbec není jasné, co jsi chtěl říct.
    24.3. 15:00 chrono
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    Chcel povedať to, že kvôli megabajtovej aplikácii sa nainštalovali desiatky megabajtov rôznych knižníc (navyše, ktorých väčšinu už aj tak bude mať, v aktuálnej a udržiavanej verzii, nainštalovanú v systéme).
    Grunt avatar 24.3. 15:11 Grunt | skóre: 22 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Jeden den s Flatpakem
    ECHMETCoreLibs a LEMNG jsou nezbytné součásti vlastní grafické aplikace a vzhledem k tomu že jsou vyvíjený tamtéž jako samotná grafická aplikace, nejspíš nebudou běžnou součástí žádného běžného systému a Grunt to prostě zapomněl přidat do výčtu. Ale samozřejmě to neznamená že tahle situace nemůže nastat.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!

    Založit nové vláknoNahoru

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