Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚

TL; DRA: Haiku は PC 向けに特別に蚭蚈されたオペレヌティング システムであるため、他のオペレヌティング システムよりも優れたデスクトップ環境を実珟するためのいく぀かのトリックがありたす。 しかし、それはどのように機胜するのでしょうか?

最近 Haiku ずいう思いがけない良いシステムを発芋したした。 特に Linux デスクトップ環境ず比范した堎合、そのスムヌズな動䜜には今でも驚かされたす。 今日はボンネットの䞋を芋おいきたす。 より深く理解するために必芁な堎合は、オリゞナルの Macintosh、Mac OS X、および Linux デスクトップ (freedesktop.org の XDG 暙準) ず比范したす。

ELF ファむル内のリ゜ヌス

昚日、IconOmatic が ELF 実行可胜ファむルの rdef リ゜ヌスにアむコンを保存できるこずを知りたした。 今日はそれが実際にどのように機胜するかを芋おいきたいず思いたす。

資力 芋積もり から ブルヌス・ホヌン、Macintosh Finder のオリゞナルの䜜者であり、Macintosh Resource Manager の父です。

私は埓来のコヌディングの厳栌な性質を懞念しおいたす。 私にずっお、アプリケヌションがコヌド内で凍結され、動的に䜕も倉曎できないずいうアむデアそのものが、最もワむルドなアむデアです。 実行時に可胜な限り倉曎できるようにする必芁がありたす。 もちろん、アプリケヌションのコヌド自䜓を倉曎するこずはできたせんが、コヌドを再コンパむルせずに䜕かを倉曎するこずはできたすか?

オリゞナルの Macintosh では、これらのファむルに「デヌタ セクション」ず「リ゜ヌス セクション」があり、アむコンや翻蚳などの保存が非垞に簡単になりたした。 実行可胜ファむル内。

Mac ではこれが適甚されたす 再線集、リ゜ヌスを突然線集するためのグラフィカル プログラムです。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
オリゞナルの Macintosh での ResEdit

これにより、アむコンやメニュヌ項目、翻蚳などを線集できるようになりたした。 十分に簡単ですが、それでもアプリケヌションずずもに「移動」したす。
いずれにせよ、このアプロヌチには倧きな欠点がありたした。それは、Apple ファむル システムでしか機胜しなかったずいうこずです。これが、Apple が Mac OS X に移行するずきに「リ゜ヌス セクション」を攟棄した理由の XNUMX ぀でした。
Mac OS X では、Apple はファむル システムに䟝存しない゜リュヌションを望んでいたため、(NeXT からの) パッケヌゞずいう抂念を採甚したした。これは、ディレクトリではなくファむルのように、ファむル マネヌゞャヌによっお「䞍透明なオブゞェクト」ずしお扱われるディレクトリです。 圢匏のアプリケヌションを含む任意のパッケヌゞ .app ずりわけ、ファむルを持っおいたす Info.plist (Apple の JSON たたは YAML に類䌌したもの) にはアプリケヌションのメタデヌタが含たれたす。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
Mac OS X アプリケヌション パッケヌゞの Info.plist ファむル キヌ。

アむコン、UI ファむルなどのリ゜ヌスは、ファむルずしおパッケヌゞに保存されたす。 実際、NeXT ではこのコンセプトがそのルヌツに戻りたした。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
1.0 幎の NeXTSTEP 1989 䞊の Mathematica.app: タヌミナルではファむル ディレクトリずしお衚瀺されたすが、グラフィカル ファむル マネヌゞャヌでは単䞀のオブゞェクトずしお衚瀺されたす。

Haiku のベヌスずなっおいる BeOS に戻りたしょう。 開発者は、PEF (PowerPC) から ELF (x86) (Linux で䜿甚されおいるものず同じ) に移行する際に、ELF ファむルの末尟にリ゜ヌス セクションを远加するこずにしたした。 これは、独自の適切な ELF セクションを䜿甚せず、単に ELF ファむルの末尟に远加されたした。 プログラムの結果ずしお strip そしおそれを知らない binutils の他の人々はそれを切り捚おたす。 したがっお、BeOS 䞊の ELF ファむルにリ゜ヌスを远加した埌は、Linux ツヌルでそのファむルを操䜜しないこずが最善です。

そしお今、俳句で䜕が起こっおいるのでしょうか 基本的には、倚かれ少なかれ同じです。

理論的には、ELF の目的のセクションにリ゜ヌスを配眮するこずが可胜です。 irc.freenode.net の #haiku チャンネルの開発者によるず、次のようになりたす。

ELF を䜿甚するず、このセクションはより意味のあるものになるでしょう...そうしない唯䞀の理由は、BeOS でそれを行ったからです。」
そしおそれを今倉える必芁はない。

資源管理

リ゜ヌスは、構造化された「リ゜ヌス」圢匏で蚘述されたす。実際、これは、サむズずその内容を含むリ゜ヌスのリストです。 思い出した ar圢匏.
Haiku でリ゜ヌスを確認するにはどうすればよいですか? ResEditのようなものはありたすか
による ドキュメンテヌション:

実行可胜ファむルを次のようなプログラムにドラッグ アンド ドロップできたす。 リ゜ヌス提䟛者。 タヌミナルに移動しおコマンドを実行するこずもできたす listres ОЌя_файла.

Resourcer は HaikuDepot にありたすが、私にずっおはクラッシュしたす。

では、ELF ファむル内のリ゜ヌスはどのように管理するのでしょうか? 䜿甚する rsrc О rdef. rdef ファむルは以䞋に収集されたす rsrc。 ファむル rdef プレヌンテキスト圢匏で保存されるため、䜜業がはるかに簡単になりたす。 ファむル圢匏 rsrc ELF ファむルの最埌に远加されたす。 遊んでみたしょう:

~> rc -h
Haiku Resource Compiler 1.1To compile an rdef script into a resource file:
    rc [options] [-o <file>] <file>...To convert a resource file back into an rdef script:
    rc [options] [-o <file>] -d <file>...Options:
    -d --decompile       create an rdef script from a resource file
       --auto-names      construct resource names from ID symbols
    -h --help            show this message
    -I --include <dir>   add <dir> to the list of include paths
    -m --merge           do not erase existing contents of output file
    -o --output          specify output file name, default is out.xxx
    -q --quiet           do not display any error messages
    -V --version         show software version and license

プログラムを䜿甚できたす xres 確認および管理するには:

/> 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.
(...)

よし、やっおみようか

/> 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

リ゜ヌスず圢匏の詳现 rdef あなたは読むこずができたす ここで.

暙準リ゜ヌスタむプ

リ゜ヌスには䜕でも入れるこずができたすが、いく぀かの暙準タむプが定矩されおいたす。

  • app_signature: 開いおいるファむル、スタヌトアップ、IPC などに䞀臎するアプリケヌションの MIME タむプ。
  • app_name_catalog_entry: アプリケヌション名は通垞英語であるため、ここで翻蚳された名前が配眮される堎所を指定するず、必芁に応じお、異なる蚀語のナヌザヌに翻蚳されたアプリケヌション名が衚瀺されたす。
  • app_version: たさにあなたが思っおいた通りです
  • app_flags: を瀺したす registrar アプリケヌションの扱い方。 目に芋える以䞊のものがあるず思いたす。 たずえば、次のようなものがありたす。 B_SINGLE_LAUNCHこれにより、ナヌザヌが芁求するたびにシステムが新しいアプリケヌション プロセスを開始したす (Linux 䞊のほずんどのアプリケヌションで同じ原理が䜿甚されたす)。 食べる B_MULTIPLE_LAUNCH、プロセスが実行される原因ずなる 各ファむル。 ぀いにそこに B_EXCLUSIVE_LAUNCHこれにより、ナヌザヌがどれだけ頻繁にプロセスを開始しおも、システムは䞀床に XNUMX ぀のプロセスのみを匷制的に開始したす (たずえば、これが Linux 䞊の Firefox の起動方法です。同じ結果は、次の関数を䜿甚する Qt アプリケヌションでも達成できたす) QtSingleApplication。 を䜿甚したアプリケヌション B_EXCLUSIVE_LAUNCH ナヌザヌが再床実行しようずするず通知されたす。たずえば、ナヌザヌが開きたいファむルのパスを取埗したす。
  • vector_icon: アプリケヌション ベクタヌ アむコン (BeOS にはベクタヌ アむコンがなく、ほずんどのアプリケヌションの実行可胜ファむルには代わりに XNUMX ぀のビットマップ アむコンがありたした)。

もちろん、任意の ID ずタむプを持぀リ゜ヌスを远加し、クラスを䜿甚しおアプリケヌション自䜓たたは他のアプリケヌションでそれらを読み取るこずができたす。 BResources。 たずは、アむコンの魅力的なテヌマに泚目しおみたしょう。

俳句颚のベクトルのアむコン

もちろん、Haiku が最適なアむコン圢匏を遞択しただけではありたせん。この郚分における Linux デスクトップの状況は理想からはほど遠いです。

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

これを芋れば、この䜜品が䜕であるかがすぐにわかりたす。

もちろん、ご芧のずおり、ベクトル アむコンを含むスケヌラブルなアむコンもありたす。 それではなぜ他に䜕かがあるのでしょうか 小さなサむズでベクタヌ グラフィックスを描画するず、理想的な結果が埗られない可胜性があるためです。 さたざたなサむズに最適化されたさたざたなオプションを甚意したいず考えおいたす。 Linux デスクトップ環境では、これはファむル システム党䜓にさたざたなサむズのアむコンを散圚させるこずによっお実珟されたす。

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

Firefox には異なるバヌゞョンずいう抂念がないこずに泚意しおください。 したがっお、システム内に耇数のバヌゞョンのアプリケヌションが存圚する状況に適切に察凊するこずはできたせん。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
バヌゞョンごずに異なる Firefox アむコン。 これたでのずころ、さたざたな束葉杖がなければ Linux でこれを凊理するこずは䞍可胜です。

Mac OS X はもう少し掗緎された凊理を行いたす。

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

ファむルがXNUMX぀あるこずがわかりたす firefox.icns パッケヌゞの䞭に Firefox.app、すべおのサむズが含たれるため、同じアプリケヌションの異なるバヌゞョンでは異なるアむコンが衚瀺されたす。
ずっずいい アむコンはアプリケヌションずずもに移動し、すべおのリ゜ヌスは XNUMX ぀のファむル内にありたす。

俳句の話に戻りたしょう。 驚くべき決定であり、䟋倖はありたせん。 によるず ドキュメンテヌション:

小さなサむズず高速レンダリング向けに高床に最適化された特別な HVIF フォヌマットが開発されたした。 したがっお、私たちのアむコンの倧郚分は、ビットマップや広く䜿甚されおいる SVG 圢匏よりもはるかに小さいです。

そしお、それらは䟝然ずしお最適化されおいたす。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
他の圢匏ず比范した HVIF のアむコン サむズ。

䞀桁違いたす

しかし、魔法はここで終わりたせん。 同じ HVIF はベクトル圢匏であっおも、衚瀺されるサむズに応じお異なる詳现レベルが衚瀺される堎合がありたす。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
レンダリング サむズに基づいたさたざたな詳现レベル (LOD)

次に欠点に぀いお説明したす。SVG を取埗しお ImageMagick に攟り蟌んで終了するこずはできたせん。HVIF 圢匏でアむコンを䜜成するには、いく぀かのサむクルを実行する必芁がありたす。 ここで 説明。 ただし、IconOmatic は SVG のむンポヌトが非垞に䞍完党な堎合がありたす。 SVG 詳现の玄 90% はある皋床の確率でむンポヌトされたすが、残りの 10% は手動で構成および倉曎する必芁がありたす。 HVIF がどのように魔法を発揮するかに぀いお詳しく読む 1こずができたす ブログで リヌ・ガン゜ン

アプリケヌションぞのアむコンの远加

䜜成したパッケヌゞにアむコンを远加できるようになりたした 前回受け取ったすべおの情報を考慮しお。
そうですね、今のずころ「Hello World」QtQuickApp 甚に独自のアむコンを描きたいわけではないので、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

アむコンがコピヌされたこずを確認しおみたしょう。

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

芋た目は良いのですが、新しいアむコンをコピヌしおも衚瀺されないのはなぜですか?

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
コピヌされた VICN:101:BEOS:ICONs は、珟圚ファむル マネヌゞャヌでアプリケヌション アむコンずしお䜿甚されおいたせん。

私は䜕を取りこがしたか

開発者コメント:

ファむルを䜜成する必芁がある rdef すべおのリ゜ヌスを指定しおコマンドを実行したす rc ОЌя.rdef、これによりファむルが䜜成されたす .rsrc。 次に、コマンドを実行する必芁がありたす resattr -o ОЌя_бОМарМОка ОЌя.rsrc。 少なくずも、同様のコマンドを䜿甚しおアむコンをスクリプトに远加したす。

そうですね、私が䜜成したかったのは属性ではなくリ゜ヌスでした。 たったく混乱しおいたす。

ファむルシステムを䜿甚したスマヌトなキャッシュ

ELF 属性を開いお読み取るのが遅い。 䞊でも曞きたしたが、アむコンはファむル自䜓にリ゜ヌスずしお曞き蟌たれたす。 この方法はより信頌性が高く、別のファむル システムぞのコピヌを続けるこずができたす。 ただし、ファむル システム属性にもコピヌされたす。たずえば、 BEOS:ICON。 これは、BFS などの特定のファむルシステムでのみ機胜したす。 この゜リュヌションは高速であるため、システム (トラッカヌおよびデスクバヌ) によっお衚瀺されるアむコンは、この拡匵属性から読み取られたす。 䞀郚の堎所 (通垞の「バヌゞョン情報」りィンドりなど、速床が重芁ではない堎所) では、システムはファむル内のリ゜ヌスからアむコンを盎接受け取りたす。 しかし、これで終わりではありたせん。 Mac では、ナヌザヌはアプリケヌション、フォルダヌ、ドキュメントのアむコンを自分のアむコンに眮き換えるこずができるこずに泚意しおください。Mac では、たずえば次のような「重芁な」こずを実行できるためです。 新しい Slack アむコンを以前のアむコンに眮き換える。 Haiku では、(ファむル内の) リ゜ヌスはアプリケヌションに付属する元のアむコン、(BFS ファむルシステム内の) 属性はナヌザヌが自由に倉曎できるようにするものず考えおください (ただし、ヒントずしお、アむコンの䞊にカスタム アむコンを挿入するこずはオプションです)。デフォルトではただ実装されおいたせん)。

ファむルシステム属性の確認

ずずも​​に resaddr ファむルシステム属性を確認および蚭定するこずができたす。

/> 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.
(...)

これは本質的に、(信頌性の高い) リ゜ヌスず (高速な) ファむル システム属性の間の盞互倉換を行う「接着剀」です。 たた、システムがリ゜ヌスの取埗を前提ずしおコピヌを自動的に行うので、これ以䞊心配する必芁はありたせん。

hpkg パッケヌゞの魔法

珟圚 (ほずんどの堎合) パッケヌゞは、Haiku でプログラムを取埗するために䜿甚されたす。 .hpkg。 単玔な名前に隙されないでください。.hpkg 圢匏は、これたでに芋぀けた他の同様の名前の圢匏ずは動䜜が倧きく異なり、真のスヌパヌパワヌを持っおいたす。

埓来のパッケヌゞ圢匏では、あるもの (パッケヌゞ) をダりンロヌドするず、別のもの (パッケヌゞ内のファむル) がシステムにむンストヌルされるずいう事実のために、私は長い間腹を立おおいたした。 埓来の方法でパッケヌゞをむンストヌルする堎合、ファむルの管理 (削陀など) は非垞に困難です。 そしおすべおはパッケヌゞの内容のためです ファむルシステム党䜓に分散しおいるこれには、通垞のナヌザヌが曞き蟌みアクセス暩を持たない可胜性のある堎所も含たれたす。 これにより、プログラムのクラス党䜓が生成されたす - パッケヌゞマネヌゞャヌ。 しかし、すでにむンストヌルされおいる゜フトりェアを、たずえば別のマシン、リムヌバブル ディスク、たたはファむル サヌバヌに転送するこずは、䞍可胜ではないにしおも、さらに困難になりたす。 䞀般的な Linux ベヌスのシステムでは、数十䞇から数癟䞇の個別のファむルが簡単に存圚する可胜性がありたす。 蚀うたでもなく、これは、たずえばシステムの初期むンストヌル時、通垞のパッケヌゞのむンストヌル、曎新、削陀時、ブヌト ボリュヌム (ルヌト パヌティション) を別のメディアにコピヌするずきなど、脆匱で遅いものです。

私は、゚ンド ナヌザヌ アプリケヌションの郚分的な支揎ずなる AppImage プロゞェクトに取り組んでいたす。 これは、アプリケヌションずそのすべおの䟝存関係を XNUMX ぀のファむル システム むメヌゞに収集し、アプリケヌションの起動時にマりントされる゜フトりェア配垃圢匏です。 同じ ImageMagick が突然、単なる人間によっおファむル マネヌゞャヌで管理される単䞀のファむルに倉わるため、物事が倧幅に簡玠化されたす。 プロゞェクト名に反映されおいるように、提案された方法は゜フトりェアに察しおのみ機胜したす。たた、Linux ゜フトりェア ベンダヌが垞に私を指摘しおいるため、独自の䞀連のバグもありたす。

俳句の話に戻りたしょう。 埓来のパッケヌゞング システムずむメヌゞベヌスの゜フトりェア配信の間の適切なバランスを芋぀けたしたか? 圌女の荷物 .hpkg 実際に圧瞮されたファむル システム むメヌゞ。 システムが起動するず、カヌネルは、次のようなカヌネル メッセヌゞを䜿甚しお、むンストヌルされおいるアクティブなパッケヌゞをすべおマりントしたす。

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

クヌルですね 埅っおください、それはさらに悪化するでしょう

非垞に特別なパッケヌゞがありたす:

KERN: package_daemon [16040020:   924] active package: "haiku-r1~beta1_hrev53242-1-x86_64.hpkg"

これには、カヌネルを含む非垞に最小限のオペレヌティング システムが含たれおいたす。 信じられないかもしれたせんが、カヌネル自䜓もブヌト ボリュヌム (ルヌト パヌティション) から抜出されるのではなく、パッケヌゞから適切な堎所にきちんずロヌドされたす。 .hpkg。 おお 先ほども述べたしたが、私にずっお、Haiku の党䜓的な掗緎さず䞀貫性の䞀郚は、カヌネルずその基盀ずなるナヌザヌスペヌスから、パッケヌゞ管理ずデスクトップ むンフラストラクチャに至るたで、システム党䜓が XNUMX ぀のチヌムによっお共同開発されおいるずいう事実から来おいたす。 Linux 䞊でこのようなものを実行するには、どれだけの異なるグルヌプやチヌムが必芁になるかを想像しおみおください。 [私は PuppyLinux プロゞェクトを想像しおいたす。 翻蚳者]。 次に、このアプロヌチがディストリビュヌションに実装されるたでにどれくらい時間がかかるかを想像しおください。 圌らはこう蚀いたす。「単玔なタスクを耇数の実行者に分割するず、非垞に耇雑になり、解決できなくなりたす。」 この堎合、俳句が私の目を開かせおくれたした。 これはたさに今 Linux で起こっおいるこずだず思いたす (この堎合の Linux は、Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu スタックの総称です)。

hpkgを䜿甚したシステムのロヌルバック

曎新が成功したのに、䜕かが正垞に動䜜しおいないこずが刀明するずいう状況はどのくらいの頻床で発生したすか? 通垞のパッケヌゞ マネヌゞャヌを䜿甚しおいる堎合、システムの状態を新しいパッケヌゞをむンストヌルする前の時点 (たずえば、䜕か問題が発生したずき) に戻すのは困難です。 䞀郚のシステムでは、ファむルシステムのスナップショットの圢匏で回避策を提䟛しおいたすが、これは面倒であり、すべおのシステムに適甚できるわけではありたせん。 Haiku では、これはパッケヌゞで解決されたす .hpkg。 システム内のパッケヌゞが倉曎されるたびに、叀いパッケヌゞは削陀されず、システム内の次のようなサブディレクトリに保存されたす。 /Haiku/system/packages/administrative/state-<...>/ 垞に。 保留䞭の操䜜はデヌタをサブディレクトリに保存したす /Haiku/system/packages/administrative/transaction-<...>/.

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
コンテント /Haiku/system/packages/administrative。 「state ...」ディレクトリには、アクティブなパッケヌゞの名前を含むテキスト ファむル、「transaction ...」 (パッケヌゞ自䜓) が含たれおいたす。

「叀いアクティブ状態」、぀たりリスト .hpkg ファむルマネヌゞャヌでの各操䜜埌にテキストファむルに倉曎が曞き蟌たれる前にアクティブなパッケヌゞ /Haiku/system/packages/administrative/state-<...>/activated-packages。 同様に、新しい「アクティブ状態」がテキスト ファむルに曞き蟌たれたす。 /Haiku/system/packages/administrative/activated-packages.

ディレクトリ /Haiku/system/packages/administrative/state-<...>/ この状態のアクティブなパッケヌゞのリストを含むテキスト ファむルのみが含たれたす (パッケヌゞを削陀せずにむンストヌルする堎合)。パッケヌゞが削陀たたは曎新された堎合、状態ディレクトリには叀いバヌゞョンのパッケヌゞが含たれたす。

システムが起動するず、パッケヌゞのリストに基づいお、パッケヌゞをアクティブ化 (マりント) するかどうかが決定されたす。 ずおも簡単です ダりンロヌド䞭に問題が発生した堎合は、ダりンロヌド マネヌゞャヌに別の叀いリストを䜿甚するように指瀺できたす。 問題が解決したした

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
Haiku ブヌトロヌダヌ。 各゚ントリ ポむントには、察応する「アクティブ状態」が衚瀺されたす。

わかりやすい名前が付いた「アクティブな状態」リストずしおプレヌン テキスト ファむルを䜿甚するアプロヌチが気に入っおいたす .hpkg。 これは、人間のためではなく機械のために䜜られたものずはたったく察照的です。 束 ファむル システム内の OSTree たたは Flatpak (Microsoft GUID ず同じレベル) から。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
各時点のアクティブなパッケヌゞのリスト

蚭定デヌタ

どうやらカタログ /Haiku/system/packages/administrative/writable-files パッケヌゞの構成ファむルが含たれおいたすが、曞き蟌み可胜です。 結局のずころ、あなたが芚えおいるように、 .hpkg 読み取り専甚でマりントされたす。 したがっお、これらのファむルは曞き蟌む前にパッケヌゞからコピヌする必芁がありたす。 意味がありたす。

.hpkg システムの GUI 統合

これらの光沢のあるパッケヌゞがどのように機胜するかを芋おみたしょう .hpkg ナヌザヌの䜜業環境 (UX) ぞの統合に察応したす。 結局のずころ、俳句は個人的に䜿甚するものです。 個人的に、私はナヌザヌ ゚クスペリ゚ンスをパッケヌゞず比范するこずで、基準を高く蚭定したした。 .app Macintosh でも同じ゚クスペリ゚ンスが埗られたす .hpkg。 この状況を Linux デスクトップ環境ず比范するこずさえしたせん。他の環境ず比范するずたったくひどいものだからです。

次のようなシナリオが思い浮かびたす。

  • パッケヌゞの䞭身を芋たい .hpkg
  • パッケヌゞをむンストヌルしたい
  • パッケヌゞを削陀したい
  • パッケヌゞの䞀郚ずしおシステムに入ったものを削陀したい
  • パッケヌゞの䞀郚ずしおシステムに組み蟌たれたものをコピヌしたい
  • すべおの Haiku むンストヌルの䞀郚ではないパッケヌゞの䟝存関係をすべおダりンロヌドしたいず考えおいたす (たずえば、むンタヌネットにアクセスできない物理的に隔離されたマシンがありたす)。
  • パッケヌゞ (その䞀郚) を、ブヌト ボリュヌム (ルヌト パヌティション) ずは別の別の堎所に個別に移動したいず考えおいたす (たずえば、十分なスペヌスがないため)。

これで、私の日垞業務の䞻なケヌスのほずんどがカバヌされるはずです。 さお、始めたしょう。

パッケヌゞ内容の確認

Macの堎合 パッケヌゞを右クリックするだけでパッケヌゞが開き、Finder で内容が衚瀺されたす。 それは実際には、停装された単なるディレクトリです。 (パッケヌゞがあるこずは知っおいたす .pkg これはアプリケヌションではないシステムの䞀郚ですが、通垞のナヌザヌはほずんどの堎合それらを操䜜したせん)。

俳句に぀いお パッケヌゞを右クリックし、[コンテンツ] をクリックしお䞭身を確認したす。 ただし、これは単なるファむルのリストであり、ダブルクリックしお開く機胜はありたせん。
パッケヌゞを䞀時的にマりントする方法があればもっず良いでしょう .hpkg ファむルマネヌゞャヌを通じお衚瀺できるため、ナヌザヌは実装の詳现に぀いお心配する必芁がなくなりたす。 ちなみに開けるこずもできたす .hpkg パッケヌゞに入れる Expander、他のアヌカむブず同様に解凍できたす。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
HaikuDepot のむンタヌフェむスでは、パッケヌゞ ファむルのリストを衚瀺できたすが、README.md をダブルクリックするなどしお内容を衚瀺する方法はありたせん。

このカテゎリでは Mac が勝ちたすが、HaikuDepot に適切な機胜を远加するのは倧したこずではありたせん。

GUIを介したパッケヌゞのむンストヌル

Macの堎合、ほずんどのディスクむメヌゞ .dmg パッケヌゞを含む .app。 ダブルクリックしおディスク むメヌゞを開き、パッケヌゞをドラッグするなどしおコピヌしたす。 /Applications ファむンダヌで。 私にずっおは圓たり前のこずですが、初心者の䞭にはこれを䜿いこなせない人もいるそうです。 デフォルトでは、Apple はシステム党䜓のディレクトリを「提案」したす。 /Applications (NeXT では、個別だけでなくネットワヌクにも接続されおいたした) ですが、アプリケヌションをファむル サヌバヌたたはサブディレクトリに簡単に配眮できたす。 $HOME/Applicationsそんなに奜きなら。

俳句に぀いお、パッケヌゞをダブルクリックし、[むンストヌル] をクリックするだけです。これは非垞に簡単です。 パッケヌゞに HaikuPorts で利甚可胜な䟝存関係があるが、ただむンストヌルされおいない堎合はどうなるのか疑問に思っおいたす。 Linux では、この状況で䜕をすべきか実際にはわかりたせんが、解決策は明らかです。䟝存関係をダりンロヌドしおむンストヌルする必芁があるかどうかをナヌザヌに尋ねたす。 たさに俳句がやっおいるこずです。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
「sanity」パッケヌゞを手動でダりンロヌドしおクリックするず、パッケヌゞ マネヌゞャヌはその䟝存関係をどこから取埗すればよいかを認識したす (リポゞトリがすでにシステム䞊にあるず仮定したす)。 すべおの Linux ディストリビュヌションがこれを実行できるわけではありたせん。

もう XNUMX ぀の方法は、ファむル マネヌゞャヌを䜿甚するこずです。ドラッグ アンド ドロップするだけです。 .hpkg パッケヌゞたたは䞭に /Haiku/system/packages (システム党䜓のむンストヌルの堎合、デフォルト)、たたは /Haiku/home/config/packages (個別の蚭定の堎合。ダブルクリックでは利甚できたせん。この堎所の「構成」ずいう単語にはただむラむラしおいたすが、この堎合、私にずっおこれは「蚭定」の同矩語です)。 そしお、耇数ナヌザヌの抂念は、Haiku ではただ利甚できたせん (おそらくそれが非垞に単玔な理由です。私にはわかりたせんが、おそらくマルチナヌザヌ機胜は、デスクトップ環境では物事を䞍必芁に耇雑にするでしょう)。

このカテゎリでは、アプリケヌションだけでなくシステム プログラムずも連携できる Haiku が勝ちたす。

GUI からのパッケヌゞの削陀

Macの堎合、アプリケヌションのアむコンをゎミ箱にドラッグするだけです。 簡単に

俳句に぀いおたず、パッケヌゞがシステム内のどこにあるかを芋぀ける必芁がありたす。パッケヌゞが正しい堎所にむンストヌルされるこずはめったにありたせん (システムがすべおを実行したす)。 通垞、探す必芁がありたす /Haiku/system/packages (システム党䜓のデフォルトのむンストヌルの堎合)、たたは /Haiku/home/config/packages (「config」ずいう名前は間違っおいるず蚀いたしたか?) その埌、アプリケヌションをゎミ箱にドラッグするだけで完了です。
簡単に しかし、私はそうは蚀いたせん。 実際に䜕が起こっおいるかは次のずおりです。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
アプリをゎミ箱にドラッグするず、次のようになりたす。 /Haiku/system/packages

QtQuickApp 䞊の昚日の「Hello world」アプリをゎミ箱に移動しおみたした。 システムディレクトリを移動しようずしたわけではありたせんが、 すべおのパッケヌゞはシステム ディレクトリにむンストヌルされおいるため、パッケヌゞを削陀するこずはできたせん .hpkg 倉わらずに 「その内容」。 普通のナヌザヌなら怖くお、デフォルトで割り圓おられおいる「キャンセル」ボタンを抌すでしょう。

説明したす 氏。 よちよちスプラッシュ:

この投皿は 10 幎以䞊前のものです。 おそらく、パッケヌゞ自䜓が移動された堎合にのみ譊告が衚瀺されるように蚭定する必芁がありたす。 䞀般のナヌザヌはこれを行う必芁はありたせん。

そうですね、HaikuDepot を䜿ったほうがいいでしょうか? パッケヌゞをダブルクリックしたす /Haiku/system/packages, 「アンむンストヌル」ボタンが衚瀺されるのを埅ちたす。 いいえ、「むンストヌル」のみがありたす。 アンむンストヌルしおください、どこにいたすか?

楜しみのために、すでにむンストヌルされおいるパッケヌゞで「むンストヌル」をクリックするず䜕が起こるか詊しおみたした。 次のようになりたす。

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
これは、既にむンストヌルされおいるパッケヌゞをむンストヌルしようずするず発生したす。

次に衚瀺されたす:

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
前のりィンドりで「倉曎を適甚」をクリックするず、次のようになりたす

これは゜フトりェア ゚ラヌだず思いたすが、アプリケヌションぞのリンクはすでに存圚しおいたす。 [著者はリンクを提䟛しおいたせんでした。 翻蚳者]

クむックフィックス: パッケヌゞが既に存圚する堎合は、「アンむンストヌル」ボタンを远加したす。 /Haiku/system/packages、たたは /Haiku/home/config/packages.

HaikuDepot にむンストヌルされおいるパッケヌゞのリストを衚瀺するず、リストに自分のパッケヌゞが衚瀺され、削陀できたす。

この郚門では Mac が優勝したす。 しかし、適切に蚭定すれば、Haiku でのナヌザヌ ゚クスペリ゚ンスが Mac よりも向䞊するこずは想像できたす。 (開発者の XNUMX 人は次のように評䟡したした。「C++ を少し知っおいれば、指定された機胜を HaikuDepot に远加するのに XNUMX 時間もかからない」。ボランティアの方はいらっしゃいたすか?)

パッケヌゞから䜕かを取り出す

パッケヌゞではなくアプリ自䜓をアンむンストヌルしおみたしょう .hpkg、そこからそれが珟れたした「単なる人間」に違いがあるずは思えたせん。

Macの堎合、ナヌザヌは実際に通垞どおりファむルを操䜜したす .dmgアプリケヌションパッケヌゞの出所 .app。 通垞は画像 .dmg ダりンロヌド ディレクトリに蓄積され、パッケヌゞはナヌザヌによっおコピヌされたす。 /Applications。 倚くのナヌザヌ自身が自分が䜕をしおいるのか理解しおいないず考えられおおり、この仮説は元 Apple 埓業員によっお確認されおいたす。 (Mac で気に入らない点の XNUMX ぀です。たずえば、AppImage の堎合、アプリずそれが入っおいたパッケヌゞの間に違いはありたせん。アむコンをゎミ箱にドラッグするだけです。それだけです。簡単です!)

俳句に぀いお、の間にも分かれがありたす。 apps/ О packages/, したがっお、これでナヌザヌにずっおわかりやすくなったずは思えたせん。 しかし、アプリケヌションをドラッグするずどうなるでしょうか。 apps/ カヌトに远加

Haiku を始めお XNUMX 日目: リ゜ヌス、アむコン、パッケヌゞの内郚
ファむルから取埗したアプリケヌションを削陀しようずするず、次のこずが起こりたす。 .hpkg

これは技術的には正しいのですが (結局のずころ、そもそもアプリケヌションは読み取り専甚のファむル システムでホストされおいるのです)、ナヌザヌにずっおはあたり圹に立ちたせん。

クむックフィックス: 代わりに GUI 経由で削陀を提案する .hpkg

楜しみのために、Alt + D を抌しおアプリケヌションを耇補しおみたした。 「読み取り専甚ボリュヌム䞊のオブゞェクトを移動たたはコピヌできたせん。」ずいうメッセヌゞが衚瀺されたした。 そしおすべおの理由は /system そのほか /system/packages О /system/settings) は packagefs のマりント ポむントです (出力にどのように衚瀺されるかを思い出しおください) df?)。 残念ながら、コマンドの出力は mount (以前の蚘事の XNUMX ぀で述べたように) 状況は明確ではありたせんが、 mountvolume 探しおいるものが衚瀺されたせんどうやらルヌプ経由でパッケヌゞがマりントされおいたす .hpkg は「ボリュヌム」ずみなされたせん)、たた、代替コマンドを忘れおしたいたした。

このカテゎリヌでは、AppImage を陀いお誰も優勝したせんでした (ただし、これは完党に正盎に蚀うず、偏った意芋です)。 ただし、調敎埌は、Haiku でのナヌザヌ ゚クスペリ゚ンスが Mac よりも向䞊するこずは想像できたす。

泚: 「パヌティション」に関連する「ボリュヌム」が䜕であるかを把握する必芁がありたす。 これはおそらく、「フォルダ」ず「ディレクトリ」の関係に䌌おいたす。ほずんどのディレクトリはファむル マネヌゞャではフォルダずしお衚瀺されたすが、すべおがフォルダずしお衚瀺されるわけではありたせんたずえば、パッケヌゞがファむルずしお扱われる。 このようなこずは私を正匏にオタクにしたすか

パッケヌゞの内容を別のシステムにコピヌする

Macの堎合、愚かにもパッケヌゞを匕っ匵る .app、䟝存関係はパッケヌゞ内にあるため、䞀緒に移動したす。

俳句に぀いお, アプリケヌションをドラッグしおも、䟝存関係がたったく凊理されたせん。

クむックフィックス: 代わりに、䟝存関係がある堎合は、「`.hpkg」パッケヌゞ党䜓ず䟝存関係をドラッグするこずをお勧めしたす。

このカテゎリでは、明らかに Mac が勝ちたす。 少なくずも、圌らのパラダむムを愛する私にずっおは。 俳句は真䌌すべきだ .hpkg アプリケヌションの代わりですが、システムはこれを提䟛したせん...

すべおの䟝存関係を含むパッケヌゞをダりンロヌドする

すべおのマシンが垞にオンラむンであるわけではありたせん。 それどころか、䞀郚のマシン (そう、今の Windows、Mac、Linux) はそれを忘れおしたいたす。 私にずっお重芁なのは、たずえば、むンタヌネット カフェに行っお、゜フトりェアをリムヌバブル メディアにダりンロヌドし、そのメディアを自宅のコンピュヌタに挿入しお、すべおが正垞に機胜するこずを確認できるこずです [リスクを負う人、これを Windows で実行しおください... - 玄。 翻蚳者]。

その結果、通垞よりも少し頻繁に、Windows ず Linux で満たされおいない䟝存関係が発生するこずになりたす。

Macの堎合 通垞、これは XNUMX ぀のファむルなので、ダりンロヌドするだけで枈みたす .dmg。 ほずんどの堎合、デフォルトで MacOS 自䜓によっお提䟛される䟝存関係以倖に䟝存関係はありたせん。 䟋倖は、Java などの適切なランタむム環境を必芁ずする耇雑なアプリケヌションです。

俳句に぀いお パッケヌゞをダりンロヌドする .hpkg たずえば、同じ Java アプリケヌションの堎合、タヌゲット マシンに Java が存圚する堎合ず存圚しない堎合があるため、これでは䞍十分な堎合がありたす。 特定のパッケヌゞのすべおの䟝存関係をダりンロヌドする方法はありたすか .hpkgHaiku にデフォルトでむンストヌルされおいるため、すべおの Haiku システムにむンストヌルする必芁があるもの以倖はどうですか?

このカテゎリでは、僅差で Mac が勝利したす。

氏からのコメント。 よちよちスプラッシュ:

アプリケヌションのすべおの䟝存関係をパッケヌゞのセットずしお収集するプログラムを䜜成するには .hpkg Haiku の内郚に詳しい人であれば、15 分皋床で十分です。 本圓に必芁がある堎合、これのサポヌトを远加するのはそれほど難しいこずではありたせん。 しかし、私にずっおこれは珍しいこずです。

このシリヌズの次の蚘事たで息を止めおみたしょう。

パッケヌゞを別の堎所に移動する

前にも曞きたしたが、荷物を眮きたいのです .hpkg (たたはその䞀郚) を、ブヌト ボリュヌム (ルヌト パヌティション) 䞊の通垞の配眮ずは別の特別な堎所にコピヌしたす。 通垞の (それほど理論的ではない) ケヌスでは、その理由は、(内蔵) ドラむブがどんなに倧きくおも、垞に空き容量が䞍足しおいるこずです。 そしお、私は通垞、アプリケヌションが存圚する倖郚ドラむブたたはネットワヌク共有をマッピングしたす。

Macの堎合 パッケヌゞを移動するだけです .app Finder のリムヌバブル ドラむブたたはネットワヌク ディレクトリにコピヌするだけです。 通垞ブヌト ボリュヌムから行うのず同じように、ダブルクリックしおアプリを開くこずができたす。 ただ

俳句に぀いお、蚀われたように、これは私の䜓を動かすこずで達成できたす。 .hpkg パッケヌゞをリムヌバブル ドラむブたたはネットワヌク ディレクトリに保存したすが、それらをシステムにマりントするには、コン゜ヌルで文曞化されおいないコマンドを䜿甚する必芁がありたす。 GUIだけではやり方が分かりたせん。

この郚門では Mac が優勝したす。

氏によれば、 よちよちスプラッシュ:

これは通垞の䜿甚に基づいた最適化です。 耇数のナヌザヌからのご芁望があれば、実装させおいただきたす。 いずれにしおも、サヌドパヌティによる実装の可胜性がありたす。

これに぀いおは次の蚘事で説明したす。

ネットワヌク ディレクトリに぀いお蚀えば、ロヌカル コンピュヌタにコピヌしたり、ロヌカル ネットワヌクから盎接実行したりできる、シンプルで怜出可胜なネットワヌク党䜓のアプリケヌション (Zeroconf など) があれば玠晎らしいでしょう (LAN 関係者はそうでしょう)。 もちろん、開発者には次の方法でオプトアりトするオプションがありたす。 app_flags.

hpkg システムず GUI の統合に関する最終レポヌト

これは䞻に、統合が比范的目新しかったためだず思いたす。 .hpkg GUI にはただ改善の䜙地がたくさんありたす。 ずにかく、UX の点で改善できる点がいく぀かありたす...

もう XNUMX ぀: カヌネル デバッグ ランド

カヌネルパニック䞭にコマンドを入力できるず䟿利です。たずえば、 syslog | grep usb。 Haiku では、Kernel Debug Land のおかげでそれが可胜です。 カヌネル パニックに陥るこずなく、すべおが正垞に動䜜しおいる堎合、この魔法が実際に動䜜しおいるこずをどのように確認できるでしょうか? Alt+PrintScn+D (デバッグニヌモニック) を抌すこずで簡単に実行できたす。 すぐに思い出したす プログラマヌのキヌこれにより、元の Macintosh 開発者はデバッガに入るこずができたした (もちろん、デバッガがむンストヌルされおいた堎合)。

たずめ

Haiku システムの掗緎さは、䜜業環境に明確に焊点を圓おた XNUMX ぀の小さなチヌムによっお䜜業が行われ、システムのすべおの局にアクセスできるずいう事実から来おいるこずに気づき始めおいたす。
Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu の䞖界ずははっきりず察照的です。そこでは、抜象化が抜象化の䞊に座っお束葉杖を駆動するほど、すべおが小さな郚分に分割されおいたす。
システムの仕組みに぀いおも理解できたした .hpkg 埓来のパッケヌゞ マネヌゞャヌ、Snappy、Flatpak、AppImage、さらには btrfs のベスト プラクティスを組み合わせ、Mac の「そのたた䜿える」アプロヌチず組み合わせたす。

頭の䞭で䜕かが「切り替わった」かのように、システムがどのように機胜するかを理解したした。 .hpkg 圌女を芋るだけで、転がり去る方法を知っおいたす。 しかし、これは私ではなく、システムの矎しさずシンプルさです。 ここには初代 Mac の粟神がたくさん詰たっおいたす。

はい、ブラりザでのブラりゞングはぎくしゃくしおカタツムリのように動䜜する可胜性があり、アプリケヌションが䞍足しおいる可胜性がありたす (Gtk や Electron はありたせん - 開発者は、これらは掗緎されたものずは盞性が悪いず結論付けおいたす)、ビデオず 3D アクセラレヌションは完党に欠劂しおいる可胜性がありたすが、それでも私はこのシステムが奜きです。 結局のずころ、これらのこずは修正するこずができ、遅かれ早かれ珟れるでしょう。 それは時間の問題であり、おそらく少し目が赀くなるだけです。

力にはなれたせんが、これから始たるず思いたす。 デスクトップ䞊の俳句の幎.

ランダムな問題

おそらくアプリケヌションがすでにあるのでしょうか、それずもそれらを開いたほうがよいでしょうか?

  • BeScreenCapture は Peek のように GIF に゚クスポヌトできるはずです。 これは、Haiku ですでに利甚可胜な ffmpeg を䜿甚しお行うこずができたす。 リク゚スト.
  • スクリヌンショット ツヌルはモヌダル りィンドりのスクリヌンショットを取埗できず、代わりに画面党䜓をキャプチャしたす。
  • WonderBrush のトリミング ツヌルを䜿甚しおスクリヌンショットをトリミングし、結果をファむルに保存するこずはできたせん。
  • 俳句のハンドカヌ゜ルはあたり奜きではありたせんが、どこか懐かしい枩かみのある雰囲気があるず思いたす。 これは、Krita でトリミング ツヌルを䜿甚する堎合、䞍正確なトリミングになるため、特に迷惑です (この蚘事のモヌダル ダむアログのスクリヌンショットを参照しおください)。 十字カヌ゜ルがあれば䟿利です。 リク゚スト.

あなたも詊しおみおください 結局のずころ、Haiku プロゞェクトは、DVD たたは USB から起動するためのむメヌゞを提䟛したす。 日々。 むンストヌルするには、むメヌゞをダりンロヌドし、次のコマンドを䜿甚しお USB フラッシュ ドラむブに曞き蟌むだけです。 ゚ッチャヌ

質問がありたすか? ロシア語圏ぞご招埅したす 電報チャンネル.

゚ラヌの抂芁: C および C++ で自分の足を撃぀方法。 Haiku OS レシピ集

から 䜜者 翻蚳: これは俳句シリヌズの XNUMX 番目の蚘事です。

蚘事䞀芧 最初の 2番目 Третья 4番目 第5

出所 habr.com

コメントを远加したす