Vanilla OSはパッケージ扱いがややこしい

初めてVanilla OSを使う人が困惑するのが複雑なパッケージ管理ではないでしょうか?実行中のホストシステムは改変できないイミュータブルディストロであるため、パッケージの導入もホストシステムが書き換え可能なOSとは大きく異っています。Vanilla OSを使う上で欠かせないのはホストシステムとサブシステムの使い分けです。基本的に仮想環境であるサブシステムで通常の作業を行い、ホストシステムへのパッケージ追加は最終手段と思っておけば良いと思います。

ホストシステムにパッケージを導入する

Vanilla OSはイミュータブルディストロであるため実行中のホストシステムのコア部分は上書き不可であるため、ホストシステムに直接パッケージをインストールすることはできません。そこでVanilla OSではパッケージがインストールされた新たな状態を作り出し、再起動時に新旧の状態を入れ替えることでホストシステムへのパッケージの導入を実現します。この時に使用するのがABRootというホストシステムの状態を管理するツールです。

ABRootを用いて導入するパッケージはドライバーやファームウェアなどのホストシステムに入れる必要性のあるものに限定した方が良いと思います。ユーザーが使用するアプリケーションに関しては後述するAPXによって作成されたサブシステムやVSO(Vanilla System Oparator)などの仮想環境、またはflatpakを経由してインストールすることが望ましいでしょう。

ABRootによるパッケージ導入

ABRootによるパッケージの導入に話を戻します。ABRootでパッケージを導入するにはabroot pkgコマンドを使用します。ここではgnome-tweakを導入してみましょう。以下にコマンド例を示します。

abroot pkg add gnome-tweak
abroot pkg apply

これでシステムを再起動し"current state"を選択すればgnome-tweakが導入されています。尚、"previous state"を選択することでパッケージ導入前の状態にロールバックすることが可能です。このように安全にアトミックに状態が更新される点もVanilla OSの特徴と言えるでしょう。

尚、パッケージを削除するには以下のようなコマンドを打ちます。

abroot pkg remove gnome-tweak
abroot pkg apply

仮想環境にパッケージをインストールする

前述のとおり、ユーザーが使用する多くのアプリケーションは仮想環境にインストールし使うことができます。Vanilla OSでは3つの選択肢があります。

  • VSOサブシステム上にインストールする
  • APXで生成したサブシステム上にインストールする
  • Flatpakでインストールする

ここではVanilla OSの固有ツールであるVSOとAPXについて見ていきましょう。

VSOサブシステムへのパッケージ導入

まずVSOについてですが、これはVanilla System Oparatorというホストシステムから隔離されたサブシステムという仮想環境です。Vanilla OS上でターミナルを開くと自動的にVSOの内部に入ることになります。VSO内部でのパッケージのインストールはvsoコマンドによって行うことができます。

vsoコマンドを使用してパッケージをインストールする例は以下のとおりです。

vso install neofetch

VSOはDebianベースの環境であるためaptコマンドも使用できます。上記のコマンドは以下のコマンドと同義です。

sudo apt install neofetch

パッケージの削除はvsoでもaptでも可能です。vsoの場合は以下コマンドようにパッケージを削除します。

vso remove neofetch

APXにより生成されたサブシステムへのパッケージ導入

Vanilla OSはAPXによってFedoraやUbuntu, OpenSUSEなどの様々なディストリビューションのサブシステムを操作することができる特徴を持っています。この特性により、公式パッケージにないアプリケーションも別のディストリビューションから探してきて使うことが出来るというわけです。ここではapxコマンドでOpenSUSEを作成し、OpenSUSEのパッケージマネージャーであるzypperを使用してleafpadパッケージを導入してみましょう。

まず、apxでopensuseスタックを指定し、suseという名前のコンテナを作成し起動します。apxからサブシステムを操作する際にはサブシステムの名前を指定します。今回の例ではsuseという名前が使用されています。コマンド例は以下のとおりです。

apx subsystems new -n suse -s opensuse
apx suse start

尚、Apx GUIというGUIツールもあるので、コマンド操作に抵抗がある場合はそちらでサブシステムの操作を行ってもOKです。

APX GUI

作成したサブシステムの中に入るには以下のようなコマンドを打ちます。

apx suse enter

OpenSUSEサブシステムの中に入れましたので、ここから先はzypperコマンドを使用してインストールすることができます。

sudo zypper in leafpad

もしサブシステムの外からインストールをする場合は以下のようにします。

apx <subsystem name> install leafpad

なぜapxコマンドがzypperコマンドの代りになるかというとapxには各ディストリビューションのパッケージマネージャーを抽象化する機能があるかです。今回は詳細は省きます。興味のある方はapxのパッケージマネージャーの管理機能を調べてみてください。

これでleafpadがOpenSUSEサブシステムにインストールされたleafpadをホストシステムから使用するためにはエクスポートをします。エクスポートする際にはアプリケーション名かバイバリ名を指定します。基本的にデスクトップファイルを持つGUIアプリケーションはアプリケーション名、コマンドアプリケーションはバイナリを指定します。

apx suse export -a leafpad

これでアプリケーションランチャーからleafpadが起動できるようになりました。

app launcher

パッケージの削除はサブシステムの中に入り各ディストリビューションのパッケージマネージャーで削除しても良いですし、サブシステムの外からapxコマンドで以下のように削除してもOKです。

apx suse remove leafpad

VSOとApxのパッケージ関連コマンドまとめ

VSO

以下にvsoでパッケージ管理に関わるコマンドを紹介します。

コマンド 操作
vso install パッケージのインストール
vso remove パッケージのインストール
vso search パッケージのインストール
vso update リポジトリの更新
vso upgrade パッケージの更新
vso export パッケージをホストシステムにエクスポート
vso unexport パッケージのエクスポートを取り消し

Apx

ApxはVanilla OSにおけるサブシステムの管理ツールですが、サブシステム内のパッケージマネージャーであるaptDNF, zypperを抽象化しサブシステムの外から操作する機能を持っています。つまり、サブシステムがどのパッケージマネージャーを利用しているかを意識することなくサブシステムのパッケージ管理ができるようになっています。いくつかコマンドを紹介します。基本的にはvsoコマンドの"vso"の部分を"apx <subsystem name>"に変えただけど覚えておけば分かりやすいと思います。

コマンド 操作
apx <subsystem name> install サブシステム内にパッケージのインストール
apx <subsystem name> remove サブシステム内のパッケージの削除
apx <subsystem name> search サブシステム内のパッケージの検索
apx <subsystem name> update サブシステム内のリポジトリの更新
apx <subsystem name> upgrade サブシステム内のパッケージの更新
apx <subsystem name> export パッケージをホストシステムにエクスポート
apx <subsystem name> unexport パッケージのエクスポートを取り消し
apx <subsystem name> enter サブシステムの中に入る

おわりに

Vanilla OSでパッケージを扱う方法を見てきました。Vanilla OSは不変のホストシステムと可変のサブシステムがシームレスに繋がっているために、イミュータブルディストロを使用したことのない方には理解が難しい部分もあると思い、解説記事を書きました。この記事がお役に立てば幸いです。