Fedora Silverblueを入れてみた所感

# ぱっと触ってわかるこれまでのFedoraとの違い

- ホームディレクトリのパスが /var/home/$USERになっている。/home始まりでなくなってどうした感がすごい。
- とりあえず dnf upgradeしたところ、dnfが使えない。toolboxとやら使ってと言われる。

## ディレクトリに関して
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3337313536382f65623137636463652d326637322d656666612d383265342d6662323764653035613464332e706e67 (中).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371568/d602164f-229e-a5d7-30fd-6f3df2aaeaa3.png)

Linuxの```/var```というと一時的な動的ファイルがポンポン置かれるもの```ex. /var/log```とかだけど揮発はしないから良いのか..。

ちなみに他のディレクトリはと言うと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371568/40dc96e6-7fee-45cb-87e0-6493589f8585.png)

だいぶ移動していて、シンボリックリンクを抜いてツリーで表すと以下のように。

```
/
├ boot
├ dev
├ etc
├ proc
├ run
│ └ media
├ sys
├ sysroot
├ usr // usr配下はいつも通り
│ ├ bin
│ ├ lib
│ ├ lib64
│ └ sbin
└ var // ルートディレクトリ配下にいたディレクトリが移動してきている
　 ├ home
　 ├ mnt
　 ├ opt
　 ├ roothome
　 └ srv
```

だとしても何ゆえの```/var```？と思い見ていると公式に解説あり。
参考：https://docs.fedoraproject.org/en-US/fedora-silverblue/technical-information/#filesystem-layout
Deepl翻訳
>Silverblueでは、ルートファイルシステムは不変です。これは、/, /usr とその下のすべてが読み取り専用であることを意味します。
/var は、Silverblue のすべての実行時状態が保存されるところです。シムリンクは、伝統的な状態を運ぶディレクトリを期待される場所で利用可能にするために使われます。これには
```/home → /var/home```
```/opt → /var/opt```
```/srv → /var/srv```
```/root → /var/roothome```
```/usr/local → /var/usrlocal```
```/mnt→ /var/mnt ```
```/tmp → /sysroot/tmp```

>つまり、別々のホームパーティションを/var/homeにマウントする必要があります。
Silverblue のファイルシステムのレイアウトについてのより詳細な説明については、優れた libostree のドキュメントを参照してください。

ということで、ユーザー（root, 一般関わらず) に変更されうるディレクトリ及び配下のファイルはrwxどれもされるので、状態として```/var```にいれるということみたい。

## package managerに関して
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3337313536382f64396334373263622d666633362d376635662d306137642d3939343935313630626239332e706e67 (中).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371568/77026854-4430-7321-c759-31c0684af36b.png)

 dnf が使えなくなっている代わりはもちろん用意されていた。
- OSの更新に関してはostree
- GUI/CLIアプリケーションに関してはFlatpack
をそれぞれ使用。

### ostreeとは
ファイルシステム ≒ ビルドされたイメージ自体がgitのようなツリー構造でバージョン管理するもの。
先に書いたように```/var```配下にはユーザーごとに状態が異なるもが保存され、それ以外はどのユーザから見ても同じ状態にあるOSの管理領域としてリモートリポジトリが管理しているみたいなイメージ？

公式から引用すると
参考https://docs.fedoraproject.org/en-US/fedora-silverblue/technical-information/#ostree-rpm-ostree
Deepl翻訳
>ostree は Silverblue を構成し、配備し、更新するために使われるコア技術です。 ostree はバージョン管理システムに似た方法で動作しますが、ファイルシステムツリー全体に対して動作します。それは、しばしば、「オペレーティング・システムのバイナリのためのGit」と表現されます。

>Silverblue のインストールでは、ostree は OS イメージ (/var にシンボリックリンクされていない / 以下のすべてを含む) の展開と更新に責任があります。また、現在のイメージを指すように grub.cfg のエントリを更新します。
rpm-ostreeがostreeを使うためのコマンド（実行ファイル）です。

### Flatpackとは
Ubuntuのsnapのように、ディストリビューションごとのリポジトリでないOS非依存のパッケージをインストール可能なパッケージマネージャ。
```apt```や```dnf```と比べてのメリットとしては、flatpackはアプリケーションごとに依存関係のあるファイルをインストールするからため、好きなバージョンを入れられること。

例えば、app A（Ver.1）と app B（Ver.1）で同じファイルa(Ver.1)に依存していて、appAを更新するとaがver.2に上がってしまう場合、a(Ver.2)を使うバージョンのapp Bが既知の不具合を持っていて上げたくないといった状況でもapp Aのパッケージ内だけで依存関係を解決できるため更新しても問題がでない。

アプリごとにサンドボックスがあり、その内部にlibraryを持つことでライブラリのバージョンを気にせずアプリケーションを自由に更新できる。
![無題のプレゼンテーション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371568/5ed7243d-b757-5462-9c12-962605ba5d79.png)

今までのようなaptやdnfでパッケージ更新してしまうとリンカが探しに行くような```/lib```配下のファイルが一括で更新されてアプリ用に保つなどはできなかったので良いなと。

## ところで開発環境として見たときにはどうなの？ 
### toolboxというものが出来ました
参考：https://docs.fedoraproject.org/en-US/fedora-silverblue/toolbox/
ユーザーによって汚されないOSの上で簡単にコンテナを使って開発が可能。
Dockerや他の仮想環境との大きな違いとして、
- ユーザー名とパーミッション
- ホームディレクトリやホストで管理するディレクトリへのアクセス
- システムおよびセッション D-Busへのアクセス
- パッケージ・マネージャーを含む一般的なコマンドライン・ツール（例：FedoraのDNF)
をまるっとホストから引き継いで持ってこれることでしょう。これによってコンテナに入ってしまえばこれまでLinuxマシンで開発していたのと何ら変わりない環境で開発が可能。
しかも、実験的に環境を汚して、だめなら潰した上でまた以上のものをもってきたコンテナを持ってくるのも容易いという世界観に！
定期的にぶち壊して再インストールしていた自分にとってはありがたいです。。

## 感想
作ってつぶせるしかもDockerのような専用ファイルを書かずともホストと同じ環境のコンテナがサクッと手に入る。
今から少し慣れておくだけで、OSをクリーンに保ちつつこれまでと全く操作は変わらないLinuxデスクトップが手に入るのではないでしょうか。
事前情報無しに、名前が格好いいからと入れたバージョンでしたがこれからも使っていこうと思える、そんなOSでした