Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.

TL;DR: Haiku — operační systém speciálně navržený pro PC, který má několik triků, díky nimž je jeho pracovní prostředí mnohem lepší než u ostatních. Jak to vlastně funguje?

Nedávno Objevil jsem Haiku, překvapivě dobrý systém. Stále jsem ohromen, jak plynule funguje, zejména ve srovnání s pracovními prostředími na Linuxu. Dnes nakouknu pod kapotu. Tam, kde bude potřeba pro hlubší pochopení, provedu srovnání s původním Macintosh, Mac OS X a pracovními prostředími Linuxu (standard XDG od freedesktop.org).

Zdroje ve formátech ELF

Včera jsem zjistil, že IconOMatic umí ukládat ikony do zdrojů rdef v spustitelných souborech ELF. Dnes chci zjistit, jak to vlastně funguje.

Zdroje? Citát od Bruce Horn, původní autor programu Macintosh Finder a "otec" Macintosh Resource Manager:

Obává mě tvrdá povaha tradičního psaní kódu. Pro mě je samotná myšlenka aplikace, zmrazené v kódu, bez možnosti něco změnit dynamicky — naprostá šílenost. Měla by existovat možnost měnit co nejvíce v době běhu. Samozřejmě, že samotný kód aplikace nelze měnit, ale přece něco lze změnit i bez rekompilace kódu?

Na původním Macintosh bylo uděláno to, že tyto soubory mají "sekci dat" a "sekci zdrojů", což neobyčejně usnadnilo ukládání různých věcí, například ikonek, překladů a podobně do spustitelných souborů.

Na Macu se k tomu používá ResEdit, grafický program pro — překvapivě — editaci zdrojů.

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
ResEdit na původním Macintosh

Díky tomu se objevila možnost editovat ikony, položky nabídek, překlady a další poměrně snadno, avšak stále "cestují" s aplikacemi.
V každém případě mělo toto řešení velkou nevýhodu: fungovalo pouze na souborových systémech Apple, což se stalo jedním z důvodů, proč Apple opustila "sekci zdrojů" při přechodu na Mac OS X.
Na Mac OS X chtěla Apple řešení nezávislé na souborovém systému, proto zavedli koncept balíčků (z NeXT), adresářů, které jsou spravovány správcem souborů jako „neprůhledné objekty“, podobně jako soubory, nikoli adresáře. Každý balíček s aplikací ve formátu .*.app má mimo jiné soubor Info.plist (v jakési analogii JSON nebo YAML od Apple), obsahující metadat aplikace.

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Klíče souboru Info.plist z balíčku aplikace Mac OS X.

Zdroje, např. ikony, soubory UI a další, jsou uloženy v balíčku jako soubory. Koncepce se vlastně vrátila ke kořenům v NeXT.

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Mathematica.app na NeXTSTEP 1.0 v roce 1989: zobrazuje se jako adresář se soubory v terminálu, ale jako jediný objekt v grafickém správci souborů.

Vraťme se k BeOS, jehož koncepty tvoří základ Haiku. Její vývojáři při přechodu z PEF (PowerPC) na ELF (x86) (stejné, které se používá na Linuxu) se rozhodli přidat sekci zdrojů na konec souborů ELF. K tomu nebyla použita vlastní sekce ELF, jednoduše ji zapsali na konec souboru ELF. V důsledku toho programy strip a další z binutils, které o tom nevědí, ji jednoduše ořezaly. Proto, pokud přidáte zdroje do souboru ELF na BeOS, je lepší s ním nepracovat nástroji pro Linux.

Co se vlastně nyní děje s Haiku? V podstatě to samé.

Teoreticky by bylo možné umisťovat zdroje do požadované sekce ELF. Podle vývojářů na kanálu #haiku v síti irc.freenode.net:

Se sekcí ELF by to mělo větší smysl... jediný důvod, proč to tak neděláme, je, že to tak dělali v BeOS“
A teď to není třeba měnit.

Správa zdrojů

Zdroje jsou zapisovány ve strukturovaném „zdrojovém“ formátu: v podstatě jde o seznam zdrojů s jejich velikostí a poté jejich obsahem. Připomněl se formát ar.
Jak lze zkontrolovat zdroje v Haiku? Existuje něco jako ResEdit?
Podle dokumentaci:

Pro zobrazení zdrojů dodávaných v balíčku aplikace můžete přetáhnout spustitelný soubor na program typu Resourcer. Také můžete vstoupit do terminálu a spustit příkaz listres jméno_souboru.

Resourcer je v HaikuDepot, ale u mě prostě padá.

Jak spravovat zdroje v souborech ELF? Použitím rsrc a rdef. rdef soubory se shromažďují v rsrc. Soubor rdef je uložen v běžném textovém formátu, takže je s ním mnohem snazší pracovat. Soubor ve formátu rsrc je zapsán na konec souboru ELF. Pojďme si s tím trochu pohrát:

~> rc -h
Haiku Resource Compiler 1.1K zkompilovat skript rdef do souboru se zdroji:
    rc [možnosti] [-o ] ...Pro převod souboru se zdroji zpět do skriptu rdef:
    rc [možnosti] [-o ] -d ...Možnosti:
    -d --decompile       vytvoří skript rdef ze souboru se zdroji
       --auto-names      sestavení názvů zdrojů ze symbolů ID
    -h --help            zobrazí tuto zprávu
    -I --include    přidat  do seznamu cest pro zahrnutí
    -m --merge           neodstraňujte existující obsah výstupního souboru
    -o --output          specifikujte název výstupního souboru, výchozí je out.xxx
    -q --quiet           nezobrazovat žádné chybové zprávy
    -V --version         zobrazit verzi softwaru a licenci

Můžete použít program xres pro kontrolu a správu:

/> xres
Usage: xres ( -h | --help )
       xres -l <file> ...
       xres <command> ...The first form prints this help text and exits.The second form lists the resources of all given files.The third form manipulates the resources of one or more files according to
the given commands.
(...)

Dobře, zkusíme to?

/> xres -l /Haiku/system/apps/WebPositive/Haiku/system/apps/WebPositive resources:type           ID        size  name
------ ----------- -----------  --------------------
'MIMS'           1          36  BEOS:APP_SIG
'APPF'           1           4  BEOS:APP_FLAGS
'MSGG'           1         421  BEOS:FILE_TYPES
'VICN'         101        7025  BEOS:ICON
'VICN'         201          91  kActionBack
'VICN'         202          91  kActionForward
'VICN'         203         300  kActionForward2
'VICN'         204         101  kActionStop
'VICN'         206         243  kActionGoStart
'MSGG'         205        1342  kActionGo
'APPV'           1         680  BEOS:APP_VERSION

Více o zdrojích a formátu rdef si můžete přečíst zde.

Standardní typy zdrojů

I když můžete do zdrojů umístit cokoliv, existuje několik konkrétních standardních typů:

  • app_signature: MIME typ aplikace, pro přiřazení otevíraných souborů, spuštění, IPC atd.
  • app_name_catalog_entry: Protože název aplikace je obvykle v angličtině, zde můžete uvést místa, kde se nacházejí přeložené názvy, takže uživatelé různých jazyků uvidí podle potřeby přeložený název aplikace.
  • app_version: přesně to, co si myslíte
  • app_flags: určuje registrar : jak zpracovávat aplikaci. Myslím, že je tu něco víc, než se na první pohled zdá. Například existuje B_SINGLE_LAUNCH, který přinutí systém spustit nový proces aplikace pokaždé, když uživatel žádá (stejný princip se používá pro většinu aplikací v Linuxu). Existuje B_MULTIPLE_LAUNCH, který způsobí, že se proces spustí pro každý soubor. Nakonec existuje B_EXCLUSIVE_LAUNCH, který přinutí systém spustit pouze jeden proces najednou, bez ohledu na to, jak často jej uživatelé spouštějí (například takto se spouští Firefox v Linuxu; stejného výsledku lze dosáhnout v aplikacích Qt použitím funkce QtSingleApplication). Aplikace s B_EXCLUSIVE_LAUNCH jsou informovány, když se uživatel pokusí je znovu spustit: například obdrží cestu k souboru, který se uživatel pokouší otevřít pomocí nich.
  • vector_icon: Vektorová ikona aplikace (V BeOS nebyly vektorové ikony, většina aplikací místo toho měla dvě rastrové ikony v spustitelných souborech).

Samozřejmě můžete přidat zdroje s jakýmikoli požadovanými ID a typy, po kterých je číst v samotné aplikaci nebo jiných aplikacích pomocí třídy BResources. Ale nejprve se zastavme u fascinujícího tématu ikon.

Vektorové ikony ve stylu Haiku

Samozřejmě, že nejen Haiku zvolil nejlepší formát ikon, situace s pracovními prostředími Linuxu je v této části daleko od ideální:

me@host:~$ ls /usr/share/icons/hicolor/
128x128  256x256  512x512           index.theme
160x160  28x28    64x64             scalable
16x16    32x32    72x72             symbolic
192x192  36x36    8x8
22x22    42x42    96x96
24x24    48x48    icon-theme.cache

Když se na to podíváte, už můžete cítit, co to je za kus.

Samozřejmě, existují škálovatelné, které obsahují, jak je možno pochopit, vektorové ikony. Proč tedy existuje něco jiného? Protože výsledek vykreslení vektorové grafiky v malých velikostech může být horší než ideální. Chceme mít různé varianty optimalizované pro různé velikosti. V pracovních prostředích Linux se to dosahuje rozptýlením ikon s různými velikostmi po souborovém systému.

me@host:~$ find /usr/share/icons/ -name 'firefox.*'
/usr/share/icons/HighContrast/16x16/apps/firefox.png
/usr/share/icons/HighContrast/22x22/apps/firefox.png
/usr/share/icons/HighContrast/24x24/apps/firefox.png
/usr/share/icons/HighContrast/256x256/apps/firefox.png
/usr/share/icons/HighContrast/32x32/apps/firefox.png
/usr/share/icons/HighContrast/48x48/apps/firefox.png
/usr/share/icons/elementary-xfce/apps/128/firefox.png
/usr/share/icons/elementary-xfce/apps/16/firefox.png
/usr/share/icons/elementary-xfce/apps/22/firefox.png
/usr/share/icons/elementary-xfce/apps/24/firefox.png
/usr/share/icons/elementary-xfce/apps/32/firefox.png
/usr/share/icons/elementary-xfce/apps/48/firefox.png
/usr/share/icons/elementary-xfce/apps/64/firefox.png
/usr/share/icons/elementary-xfce/apps/96/firefox.png
/usr/share/icons/hicolor/128x128/apps/firefox.png

Všimněte si: neexistuje pojem různých verzí Firefoxu. Tím pádem není možné jemně zpracovat situaci s přítomností několika verzí aplikace v systému.

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Různé ikony Firefoxu v různých verzích. Zatím není možné to zpracovat v Linuxu bez různých workaroundů.

Mac OS X to zpracovává o něco důmyslněji:

Mac:~ me$ find /Applications/Firefox.app | grep icns
/Applications/Firefox.app/Contents/MacOS/crashreporter.app
/Contents/Resources/crashreporter.icns
/Applications/Firefox.app/Contents/MacOS/updater.app/Contents/Resources/updater.icns
/Applications/Firefox.app/Contents/Resources/document.icns
/Applications/Firefox.app/Contents/Resources/firefox.icns

Je vidět, že existuje jeden soubor firefox.icns v balíčku Firefox.app, obsahující všechny velikosti, takže různé verze jedné aplikace mají různé ikony.
Mnohem lepší! Ikony cestují spolu s aplikací, všechny zdroje v jednom souboru.

Vraťme se k Haiku. Úžasné řešení, bez výjimek. Podle dokumentaci:

Byl vyvinut zvláštní, vysoce optimalizovaný formát pro malé velikosti a rychlé vykreslení, HVIF. Proto jsou naše ikony většinou mnohem menší než ve rastrovém nebo široce používaném formátu SVG.

A jsou skutečně optimalizovány:

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Velikosti ikon v HVIF ve srovnání s jinými formáty.

Rozdíl je řádově!

Ale kouzlo zde nekončí. Stejný HVIF může ukázat různé úrovně detailů v závislosti na zobrazované velikosti, přestože je to vektorový formát.

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Různé úrovně detailů (LOD) v závislosti na velikosti vykreslení.

Teď o nevýhodách: nelze vzít SVG, hodit do ImageMagick a tím to skončit, je potřeba projít několika cykly pro vytvoření ikony ve formátu HVIF. Tady vysvětlení. Nicméně IconOMatic může dost neúplně importovat SVG; asi 90 % detailů SVG je importováno s určitou pravděpodobností, dalších 10 % bude třeba upravit a změnit ručně. Přečíst více o tom, jak HVIF dělá své kouzlo. lze v blogu Lea Genson

Přidání ikony do aplikace

Teď mohu přidat ikonu k balíčku, který byl vytvořen minule., s ohledem na všechny získané informace.
No a protože teď nemám příliš chuť kreslit si vlastní ikonu pro svou aplikaci „Ahoj, světe“ QtQuickApp — vytáhnu ji z Qt Creator.

/Haiku/home> xres /Haiku/system/apps/QtCreator/bin/Qt Creator  -o /Haiku/home/QtQuickApp/QtQuickApp  -a VICN:101:BEOS:ICON /Haiku/system/apps/QtCreator/bin/Qt Creator

Zkontrolujme, zda byla ikona zkopírována:

/Haiku/home> xres -l /Haiku/home/QtQuickApp/QtQuickApp/Haiku/home/QtQuickApp/QtQuickApp
resources:type           ID        size  name
------ ----------- -----------  --------------------
'VICN'         101      152238  BEOS:ICON

Vypadá to dobře, ale proč se nová ikona nezobrazuje, když je zkopírována?

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Zkopírovaná VICN:101:BEOS:ICONs zatím není používána jako ikona pro aplikaci ve správci souborů

Co jsem ale přehlédl?

Komentář vývojáře:

Je potřeba vytvořit soubor rdef se všemi zdroji, pak spustit příkaz rc jméno.rdef, to vytvoří soubor .rsrc. Pak je třeba spustit příkaz resattr -o jméno_binarika jméno.rsrc. Minimálně používám podobné příkazy pro přidání ikon k mým skriptům.

No, chtěl jsem vytvořit zdroj, ne atribut. Jsem úplně zmatený.

Inteligentní cachování pomocí souborového systému

Otevírání a čtení atributů ELF probíhá pomalu. Jak jsem již zmínil výše, ikona je zapisována jako zdroj do samotného souboru. Tento způsob je spolehlivější, umožňuje přežít kopírování na jiný souborový systém. Nicméně později je také zkopírována do atributu souborového systému, například BEOS:ICON. To funguje pouze na určitých souborových systémech, například BFS. Ikony zobrazené systémem (v Trackeru a Deskbaru) se čtou z tohoto rozšířeného atributu, protože takové řešení funguje rychle. Na některých místech (kde rychlost není důležitá, například typové okno „O programu“) systém získává ikonu přímo ze zdroje v souboru. Ale to ještě není konec. Vzpomínáte, že na Macu mohli uživatelé nahradit ikony aplikací, složek a dokumentů svými, protože na Macu je možné udělat tyto „důležité“ věci, například nahrazení nové ikony Slack předchozí. Na Haiku bychom měli vnímat zdroj (v souboru) jako výchozí ikonu dodávanou s aplikací a atribut (v souborovém systému BFS) jako něco, co umožňuje uživateli provádět úpravy podle přání (i když, tip, grafické rozhraní pro vložení uživatelské ikony přes ikonu ve výchozím nastavení zatím není realizováno).

Kontrola atributů souborového systému

Pomocí resaddr je možnost zkontrolovat a nastavit atributy souborového systému.

/> resattr
Usage: resattr [ <options> ] -o <outFile> [ <inFile> ... ]

Reads resources from zero or more input files and adds them as attributes
to the specified output file, or (in reverse mode) reads attributes from
zero or more input files and adds them as resources to the specified output
file. If not existent the output file is created as an empty file.
(...)

V podstatě je to „lepidlo“, které provádí převod tam a zpět mezi (spolehlivými) zdroji a (rychlými) atributy souborového systému. A protože systém počítá s přijímáním zdrojů a automaticky provádí kopírování, už se tím nebudu dál zabývat.

Kouzlo hpkg balíčků

V současnosti (nejčastěji) se pro získání aplikací na Haiku používají balíčky .hpkg. Nenechte se oklamat jednoduchým názvem: formát .hpkg funguje zcela jinak než jiné formáty se podobnými názvy, se kterými jste se setkali, má totiž skutečné super schopnosti.

S tradičními formáty balíčků jsem se dlouho trápil kvůli takové skutečnosti: stáhnete jeden (balíček), a v systému se nainstaluje něco jiného (soubory uvnitř balíčku). Je docela těžké se s těmito soubory (například je odstranit) vypořádat, když je instalace balíčku provedena tradičním způsobem. A to proto, že obsah balíčku se rozptýlí po celé souborové struktuře, včetně míst, kde běžný uživatel nemusí mít přístup k zápisu. To pak vytváří celou třídu programů — správců balíčků. A přitom přenést již nainstalovaný software, například na jiný počítač, externí disk nebo souborový server, se stává ještě obtížnějším, nebo dokonce nemožným. V běžném systému postaveném na Linuxu může snadno existovat od několika stovek tisíc až po miliony oddělených souborů. Samozřejmě, že to je zároveň křehké a pomalé, například při prvotním nastavení systému, při instalaci, aktualizaci a odinstalaci běžných balíčků, stejně jako při kopírování spouštěcí oblasti (kořenového oddílu) na jiný nosič.

Pracuji na projektu AppImage, částečného workaroundu pro aplikace pro koncové uživatele. Je to formát distribuce softwaru, který shromažďuje aplikaci a všechny její závislosti do jednoho obrazu souborového systému, který se připojuje při spuštění aplikace. Výrazně to zjednodušuje věci, protože ten stejný ImageMagick se najednou promění v jeden soubor, spravovaný v souborovém správci obyčejnými smrtelníky. Navrhovaný způsob funguje pouze pro software, jak název projektu naznačuje, a má také vlastní sadu problémů, protože lidé, kteří se zabývají dodávkami softwaru pro Linux, vždy přehazují odpovědnost na mě.

Vraťme se k Haiku. Podařilo se najít optimální rovnováhu mezi tradičními balíčkovými systémy a dodáváním softwaru na základě obrazů? Její balíčky .hpkg v podstatě zkomprimované obrazy souborového systému. Při spuštění systému jádro montuje všechny nainstalované a aktivní balíčky přibližně s následujícími zprávami jádra:

KERN: package_daemon [16042853: 924] aktivní balíček: "gawk-4.2.1-1-x86_64.hpkg"
KERN: package_daemon [16043023: 924] aktivní balíček: "ca_root_certificates_java-2019_01_23-1-any.hpkg"
KERN: package_daemon [16043232: 924] aktivní balíček: "python-2.7.16-3-x86_64.hpkg"
KERN: package_daemon [16043405: 924] aktivní balíček: "openjdk12_default-12.0.1.12-1-x86_64.hpkg"
KERN: package_daemon [16043611: 924] aktivní balíček: "llvm_libs-5.0.0-3-x86_64.hpkg"

Super, že? Držte se, bude to ještě lepší!

Existuje velmi speciální balíček:

KERN: package_daemon [16040020: 924] aktivní balíček: "haiku-r1~beta1_hrev53242-1-x86_64.hpkg"

Obsahuje velmi minimalistický operační systém, včetně jádra. Věříte nebo ne, ale samotné jádro se nevytahuje z bootovacího svazku (kořenového oddílu), ale pečlivě se načítá na své místo z balíčku. .hpkgTo je něco! Už jsem zmínil, že podle mě část celkové jemnosti a soudržnosti Haiku pramení z toho, že celý systém od jádra a základního uživatelského prostoru až po správu balíčků a infrastrukturu pracovního prostředí je vyvíjen společně jedním týmem. Představte si, kolik různých skupin a týmů by bylo potřeba k tomu, aby podobné něco spustili na základě Linuxu. [představuji si projekt PuppyLinux, — pozn. překladatele]. A pak si představte, kolik času by bylo potřeba, aby byl tento přístup implementován do distribucí. Říká se: vezmi jednoduchý úkol, rozděl ho mezi různé vykonavatele, a tak se zkomplikuje, že už nebude možné jej vyřešit. Haiku mi v tomto ohledu otevřela oči. Myslím, že právě toto se teď děje na Linuxu (Linux v tomto případě je souhrnný termín pro Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu).

Rollback systému pomocí hpkg

Jak často se stává následující situace: aktualizace proběhla úspěšně, ale pak se ukáže, že něco nefunguje tak, jak má? Při používání běžných balíčkových manažerů je obtížné vrátit stav systému na bod před instalací nových balíčků (například v případě, že něco nevyšlo). Některé systémy nabízejí obvyklé postupy ve formě snímků souborového systému, ale ty jsou poměrně objemné a také se nepoužívají ve všech systémech. V Haiku je to vyřešeno pomocí balíčků. .hpkgKaždý čas, kdy se mění balíčky v systému, staré balíčky nejsou odstraněny, ale uchovávány v systému v podadresářích typu /Haiku/system/packages/administrative/state-<...>/ trvale. Nedokončené operace uchovávají svá data v podadresářích /Haiku/system/packages/administrative/transaction-<...>/.

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Obsah /Haiku/system/packages/administrative. Adresáře „state…“ obsahují textové soubory se jmény aktivních balíčků, „transaction…“ – samotné balíčky.

„Starý aktivní stav“, tj. seznam .hpkg balíčků, aktivních před změnami, se zapisuje po každé operaci do textového souboru v souborovém manažeru /Haiku/system/packages/administrative/state-<...>/activated-packages. Podobným způsobem se zapisuje nový „aktivní stav“ do textového souboru /Haiku/system/packages/administrative/activated-packages.

Katalog /Haiku/system/packages/administrative/state-<...>/ obsahuje pouze textový soubor se seznamem aktivních balíčků tohoto stavu (v případě instalace balíčků bez odstranění), a pokud byly balíčky odstraňovány nebo aktualizovány – adresář state obsahuje staré verze balíčků.

Při spuštění systému se na základě seznamu balíčků rozhoduje o aktivaci (připojení) balíčků. Tak jednoduše! Pokud při spuštění něco neproběhne správně – můžete správci zavádění říci, aby použil jiný, starší seznam. Úkol je vyřešen!

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Zavaděč Haiku. Každý vstup zobrazuje odpovídající „aktivní stav“

Líbí se mi přístup s jednoduchými textovými soubory jakožto seznamem „aktivního stavu“, ve kterých jsou zapsána srozumitelná jména .hpkg. To ostře kontrastuje se stvořenou-pro-stroje-a-ne-pro-lidi hromadou od OSTree nebo Flatpak v souborovém systému (na stejné úrovni, jako je Microsoft GUID).

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Seznam aktivních balíčků pro každý okamžik

Konfigurační data

Zdá se, že v adresáři /Haiku/system/packages/administrative/writable-files jsou soubory nastavení pro balíčky, ale dostupné pro zápis. Vždyť, jak víte, .hpkg se připojují pouze pro čtení. Takže tyto soubory by měly být zkopírovány z balíčků před zápisem. Dává smysl.

Integrace GUI pro systém .hpkg

Nyní se podívejme, jak si tyto skvělé balíčky vedou .hpkg s integrací do uživatelského pracovního prostředí (UX). Haiku je přece určeno pro osobní použití. Osobně jsem si nastavil vysokou laťku, když jsem porovnával uživatelskou zkušenost s balíčky .*.app na Macintoshu s podobným zážitkem na .hpkg. Ani nebudu srovnávat situaci s pracovními prostředími v Linuxu, protože je to v porovnání s čímkoli jiným naprosto hrozné.

Napadají mě následující scénáře:

  • Chci si prohlédnout obsah balíčku .hpkg
  • Chci nainstalovat balíček
  • Chci odstranit balíček
  • Chci odstranit něco, co přišlo do systému jako součást balíčku
  • Chci zkopírovat něco, co přišlo do systému jako součást balíčku
  • Chci stáhnout všechny závislosti balíčku, které nemohou být součástí každé instalace Haiku (například mám fyzicky izolovaný stroj bez přístupu k internetu).
  • Chci přesunout své balíčky (nebo jejich část) odděleně na jiné místo, mimo spouštěcí svazek (kořenovou část) (protože například mám na něm nedostatek místa).

To by mělo pokrýt většinu základních případů z mé každodenní práce. No, začněme.

Kontrola obsahu balíčku

Na Macu stačí kliknout pravým tlačítkem na balíček pro jeho otevření a prohlížení obsahu ve Finderu. Vždyť je to ve skutečnosti jen zamaskovaný adresář! (Vím, že existují balíčky .pkg pro část systému, která není aplikacemi, ale běžní uživatelé s nimi většinou ani nekomunikují).

Na Haiku kliknu pravým tlačítkem na balíček, poté kliknu na «Contents» pro zobrazení toho, co je uvnitř. Ale tady je jen seznam souborů bez možnosti je otevřít dvojitým kliknutím.
Bylo by mnohem lepší, kdyby existoval způsob (dočasného) připojení balíčku .hpkg pro prohlížení přes správce souborů, aniž by se uživatel musel starat o detaily implementace. (Mimochodem, balíček lze otevřít .hpkg v Expander, který jej může rozbalit jako jakýkoli jiný archiv).

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
V rozhraní HaikuDepot lze zobrazit seznam souborů balíčku, ale není způsob, jak prohlížet obsah, například dvojitým kliknutím na README.md.

V této kategorii vyhrává Mac, ale přidání potřebné funkčnosti do HaikuDepot by nemělo představovat velké potíže.

Instalace balíčku přes GUI

Na Macu, většina diskových obrazů .dmg obsahuje balíčky .*.app. Otevřeme diskový obraz dvojitým kliknutím a poté kopírujeme balíček, například přetahováním do /Applications Finderu. Pro mě je to samozřejmě, ale slyšel jsem, že někteří nováčci by to mohli nezvládnout. Ve výchozím nastavení Apple "navrhuje" systémový adresář /Applications (na NeXT byl síťový a také individuální), ale lze snadno umístit své aplikace na souborový server nebo do podsložky $HOME/Applications, pokud se vám to tak líbí.

Na Haiku, dvojitým kliknutím na balíček, pak kliknutím na „Install“, jednodušší to být nemůže. Zajímalo by mě, co se stane, pokud má balíček závislosti dostupné v HaikuPorts, které zatím nejsou nainstalovány. Na Linuxu si opravdu neví rady, co s tím dělat, ale řešení je zřejmé — zeptat se uživatele, zda chce stáhnout a nainstalovat závislosti. Přesně to dělá Haiku.

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Stáhl jsem balíček 'sanity' ručně a klepnul na něj, správce balíčků ví, odkud vzít jeho závislosti (pokud jsou repozitáře již nastaveny v systému). Ne každý distribuce Linuxu tohle umí.

Další způsob — použití správce souborů, stačí přetáhnout .hpkg balíček buď do /Haiku/system/packages (pro systémovou instalaci, ve výchozím nastavení), nebo do /Haiku/home/config/packages (pro individuální instalaci; není dostupné při dvojitém kliknutí — stále mě rozčiluje slovo „config“ na tomto místě, které pro mě v tomto případě je synonymem „settings“). Ačkoli koncept více uživatelů není pro Haiku zatím dostupný (možná proto je všechno tak snadné — nevím, možná víc uživatelské možnosti by zkomplikovaly věci pro pracovní prostředí osobního počítače).

V této kategorii vyhrává Haiku, protože umí pracovat nejen s aplikacemi, ale také se systémovými programy.

Odstranění balíčku z GUI

Na Macu, stačí přetáhnout ikonu aplikace do koše a tím to končí. Snadné!

Na Haiku, za prvé, je potřeba najít, kde se balíček nachází v systému, protože ho zřídka instalujete tam, kam byste měli (všechno dělá systém). Obvykle je třeba hledat v /Haiku/system/packages (při systémové instalaci ve výchozím nastavení), nebo v /Haiku/home/config/packages (už jsem říkal, že „config“ je špatný název?). Pak se aplikace jednoduše přetáhne do koše, a tím to končí.
Snadné! Přesto bych to tak neřekl. Takhle to ve skutečnosti vypadá:

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Co se stane, když přetáhnete aplikaci do koše z /Haiku/system/packages

Jednoduše jsem zkusil přesunout svou včerejší aplikaci „Ahoj, světe“ na QtQuickApp do koše. Nepokoušel jsem se přesunout systémový adresář, a protože všechny balíčky se instalují do systémového adresáře – není možné odstranit balíček .hpkg bez změny „jeho obsahu“. Běžný uživatel by se vyděsil, klikl by na tlačítko „Zrušit“, které je nastaveno jako výchozí.

Vysvětluje mr. waddlesplash:

Tomu oznámení je už více než 10 let. Pravděpodobně bychom ho měli nastavit tak, aby upozornění vyšlo pouze při přesunu samotného balíčku. Běžní uživatelé to v každém případě nepotřebují dělat.

Dobře, možná bych to měl udělat pomocí HaikuDepotu? Dvakrát kliknu na balíček v /Haiku/system/packages, očekávám, že se objeví tlačítko „Odinstalovat“. Ne, je tam (jen) „Nainstalovat“. „Odinstalovat“, kde jsi?

Pro srandu jsem zkusil zjistit, co se stane, když kliknu na „Nainstalovat“ pro již nainstalovaný balíček. Vypadá to takto:

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
To se stane, když se pokusíte nainstalovat již nainstalovaný balíček.

Poté se objeví:

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Pokud kliknete na „Použít změny“ v předchozím okně – stane se tohle

Předpokládám, že to je softwarová chyba, odkaz na žádost už existuje. [autor odkaz neposkytl, — pozn. překladatele]

Rychlé řešení: Přidat tlačítko „Odinstalovat“, pokud je balíček již v /Haiku/system/packages, nebo v /Haiku/home/config/packages.

Při prohlížení seznamu balíčků nainstalovaných v HaikuDepotu vidím svůj balíček v seznamu a mohu jej odstranit.

V této kategorii vyhrává Mac. Ale mohu si představit, že s řádným nastavením bude uživatelský zážitek na Haiku lepší než na Macu. (Jeden z vývojářů to ocenil takto: „Méně než hodinu na přidání uvedené funkce do HaikuDepotu, pokud znáte trochu C++“, jsou dobrovolníci?)

Odstranění něčeho z balíčku

Zkusme odstranit samotnou aplikaci, nikoli balíček .hpkg, ze kterého vzešla (pochybuji, že pro „obyčejné smrtelníky“ je nějaký rozdíl).

Na Macu, uživatel ve skutečnosti obvykle pracuje s souborem .dmg, odkud pochází balíček aplikace .*.app. Obvykle obrázky .dmg se hromadí v adresáři stažení, balíčky jsou však kopírovány uživateli do /Applications. Existuje názor, že mnoho uživatelů si ani neuvědomuje, co dělají, a tuto hypotézu potvrzuje bývalý zaměstnanec Apple. (Jedna z věcí, která se mi na Macu nelíbí. Na druhou stranu, s AppImage není rozdíl mezi aplikací a balíčkem, ve kterém byla. Přetáhnout ikonu do koše = to je vše. Snadné!)

Na Haiku, také existuje dělení mezi apps/ a packages/, takže pochybuji, že by to uživatelům například objasnilo. Co se však stane, když přetáhnete aplikaci z apps/ do koše:

Můj šestý den s Haiku: pod kapotou zdrojů, ikon a balíčků.
Toto je výsledek pokusu o odstranění aplikace stažené z .hpkg

Technicky to je správně (vždyť aplikace je umístěna na souborovém systému jen pro čtení), ale není to pro uživatele příliš užitečné.

Rychlé řešení: místo toho nabídnout odstranění prostřednictvím GUI .hpkg

Pro zábavu jsem zkusil zdvojnásobit aplikaci stisknutím Alt+D. Zobrazil se mi zpráva „Není možné přesunout nebo zkopírovat objekty na disku jen pro čtení“. A to všechno proto, že /system kromě /system/packages a /system/settings) je bodem připojení packagefs (pamatujete, jak se objevuje v výstupu df?). К сожалению, вывод команды mount neobjasňuje situaci (jak bylo uvedeno v jednom z předchozích článků), mountvolume nezobrazuje hledané (zřejmě montované přes loop balíčky .hpkg nejsou považovány za „disky“), a navíc jsem zapomněl alternativní příkazy.

V této kategorii nikdo nevyhrál, kromě AppImage (ale to je, abych byl zcela upřímný, zaujatý názor). Můžeme však představit, že po úpravě bude uživatelský zážitek na Haiku lepší než na Macu.

Poznámka: Je třeba zjistit, co znamená „disk“ ve vztahu k „oddílu“. Pravděpodobně je to obdobné vztahu „složky“ k „adresáři“: většina adresářů se zobrazuje ve správci souborů jako složky, ale ne všechny z nich (například balíčky, zpracovávané jako soubory). Dělá mě to oficiálně nerdem?

Kopírování obsahu balíčku na jiný systém

Na Macu, jednoduše přetahuji balíček .*.app, a protože závislosti uvnitř balíčku — ty se přesouvají spolu.

Na Haiku, přetahuji aplikaci, ale závislosti se vůbec nezpracovávají.

Rychlé řešení: Nechť je místo toho nabídnuto přetáhnout balíček „`.hpkg“ sám, spolu se závislostmi, pokud nějaké existují.

V této kategorii jednoznačně vyhrává Mac. Alespoň pro mě, milovníka jejich paradigmatu. Na Haiku by mělo být něco zkopírováno. .hpkg místo aplikačního rozhraní, ale systém mi nic takového nenabízí...

Stahování balíčku se všemi jeho závislostmi

Ne každé zařízení je neustále připojeno k síti. Naopak, některá zařízení (ano, dívám se na vás, moderní Windows, Mac a Linux) na to zapomínají. Pro mě je důležité, že mohu jít například do internetové kavárny, stáhnout software na přenosné médium, vložit toto médium do domácího počítače a být si jistý, že všechno bude fungovat [odvážný chlapík, dělat to na Windows... - pozn. překladatele].

V důsledku toho se o něco častěji, než obvykle, setkávám s neuspokojenými závislostmi na Windows a Linuxu.

Na Macu obvykle se jedná o jeden soubor, vše, co je potřeba, je stáhnout .dmg. Nejčastěji nemá žádné závislosti, kromě těch, které poskytuje samotný MacOS jako výchozí. Jako výjimku lze uvést složité aplikace, které vyžadují odpovídající prostředí pro běh, například java.

Na Haiku stáhnout balíček .hpkg pro, řekněme, tu samou aplikaci na java, se může ukázat jako nedostatečné, protože java může být buď přítomna, nebo nepřítomna na cílovém zařízení. Existuje způsob, jak stáhnout všechny závislosti pro tento balíček .hpkg, kromě těch, které jsou instalovány v Haiku jako výchozí a tudíž by měly být v každém systému Haiku?

V této kategorii s malým náskokem vítězí Mac.

Komentuje mr. waddlesplash:

Abych napsal program pro shromažďování všech závislostí aplikace ve formě sady balíčků .hpkg pro někoho, kdo je obeznámen s vnitřním fungováním Haiku, to zabere asi 15 minut. Přidat podporu pro to není tak složité, pokud je na tom skutečná potřeba. Ale pro mě je to vzácná situace.

Zadržíme dech na další článek v této sérii.

Přesun balíčků na vyhrazené místo

Jak jsem již zmínil, chci umístit své balíčky .hpkg (no, nebo jejich část) na zvláštní místo, oddělené od běžného umístění na spouštěcím oddílu (kořenu). V běžném případě (ne tak teoretickém) je důvodem, že mi trvale dochází volné místo na mých (vestavěných) discích, bez ohledu na to, jak jsou velké. A obvykle připojuji externí disky nebo síťové zdroje, kde mám své aplikace.

Na Macu jen přesouvám balíčky .*.app na externí disk nebo síťový adresář ve Finderu, a to je vše. Stále mohu dvakrát kliknout na aplikaci, jak jsem to dříve dělal s bootovacím svazkem. Jednoduché!

Na Haiku, jak mi bylo řečeno, toho lze dosáhnout přesunutím mých .hpkg balíčků na externí disk nebo síťový adresář, ale pak musím využít některé nedokumentované příkazy v terminálu k tomu, abych je namontoval do systému. Nevím, jak to udělat, jen s GUI.

V této kategorii vítězí Mac.

Podle pana waddlesplashe:

Zde se optimalizuje na základě obvyklého použití. Pokud však bude poptávka vyšší než od jednoho uživatele, realizujeme to. V každém případě existuje možnost třetí strany.

O tom budeme informovat v dalším článku.

Pokud mluvíme o síťových adresářích: bylo by skvělé (předpokládám LAN večírky) mít jednoduché, objevitelné, síťové aplikace (např. přes Zeroconf), které lze zkopírovat na místní počítač nebo spustit přímo z místní sítě. Samozřejmě, že vývojáři mají možnost odmítnutí prostřednictvím app_flags.

Závěrečná zpráva o integraci systému hpkg s GUI

Myslím, že především kvůli relativní novosti integrace .hpkg s GUI stále zaostává. V každém případě je několik věcí, které lze zlepšit v oblasti UX…

Ještě jedna věc: Kernel Debug Land

Bylo by skvělé mít při kernel panic možnost zadávat příkazy, například syslog | grep usb. No, na Haiku to možné díky Kernel Debug Land. Jak vidět tuto magii v akci, když vám všechno funguje, jak má bez vyvolání kernel panic? Snadno, stisknutím Alt+PrintScn+D (mnemonika Debug). Ihned si vzpomínám na Programmer’s Key, která umožnila původním vývojářům Macintosh vstoupit do ladicího programu (pokud byl samozřejmě nainstalován).

Závěr

Začínám chápat, že rafinovanost systému Haiku pochází z toho, že na něm pracuje malý tým s jasnou orientací na pracovní prostředí při dostupnosti všech vrstev systému.
Ostrý kontrast s světem Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu, kde je vše rozděleno na malé kousky až do té míry, že abstrakce sedí na abstrakci a zahání ji berlemi.
Také jsem došel k pochopení, jak systém .hpkg kombinuje nejlepší praktiky tradičních správce balíčků, Snappy, Flatpak, AppImage, dokonce i btrfs, a míchá je s principem „prostě to funguje“ od Mac.

Najednou jako by se v hlavě něco „přepnulo“ a já jsem pochopil, jak systém .hpkg umí vracet zpět, — stačilo se na něj podívat. Ale to nejsem já, to je krása a jednoduchost systému. Mnohé zde je prosáklé duchem původního Macu.

Ano, prohlížení stránek v prohlížeči může být trhané a fungovat jako hlemýžď, aplikací může být nedostatek (chybí Gtk, Electron — vývojáři vyvodili závěry, že se špatně kombinují s vytříbeností), zrychlení videa a 3D může úplně chybět, ale i tak se mi tento systém líbí. Vždyť tyto problémy lze opravit a dříve či později se objeví. Je to jen otázka času a možná trochu červených očí.

Nemohu nabídnout pomoc, ale myslím, že od tohoto okamžiku to začne rok Haiku na pracovní ploše.

Náhodné problémy

Možná už existují žádosti, nebo je mám otevřít?

  • BeScreenCapture by měl mít možnost exportu do GIF, jako Peek. To lze provést pomocí ffmpeg, který již existuje pro Haiku. Žádost.
  • Program pro pořizování snímků obrazovky nemůže pořídit snímek modálního okna, místo toho snímá celý obrazovku
  • Není možné ořezávat snímky obrazovky pomocí nástroje pro ořezávání ve WonderBrush, a pak uložit výsledek do souboru
  • Není mi příliš sympatický ruční kurzor v Haiku, ale myslím, že to souvisí s teplými nostalgickými pocity. To je obzvlášť frustrující při používání ořezávacího nástroje v Kritě, protože ořezávka vychází nepřesná (viz snímky obrazovky s modálními dialogy v tomto článku). Křížový kurzor by byl skvělý. Žádost.

Vyzkoušejte to sami! Projekt Haiku poskytuje obrazy pro spuštění z DVD nebo USB, které jsou vytvářeny denně. Pro instalaci stačí stáhnout obraz a zapsat ho na flash disk pomocí Etcher

Máte otázky? Zveme vás do rusky mluvícího telegramového kanálu.

Přehled chyb: Jak si střelit do nohy v C a C++. Sbírka receptů Haiku OS

Od autora překlad: to je šestý článek z cyklu o Haiku.

Seznam článků: První Druhý Třetí Čtvrtá Pátá

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster