2020-10-25

Linux ディストロ探訪(22) 〜 Fedora IoT 〜

Fedora IoT は文字通り IoT 向けの Fedora エディションです。デスクトップ用途向けの Fedora Silverblue を本ブログで何回か紹介していますが [1]、Fedora IoT はデスクトップ用途の部分を含まない、rpm-ostree とコンテナ (padman) で構成する、とてもシンプルな構成の Fedora と考えればいいでしょう。

本ブログの「Linux ディストロ探訪」では、デスクトップ用途のディストロを中心に紹介してきていますが、デスクトップ用途でない Fedora IoT でも x86_64 の iso イメージが利用できるので、今回は Fedora IoT がどんなものかを試してみました。

アウトライン

インストール

今回使用したイメージは Fedora Internet of Things Edition から Fedora-IoT-IoT-ostree-x86_64-32-20200925.0.iso をダウンロードして、Fedora Media Writer で USB メモリに書き込みました。

必要なリソース

参考サイト [2] によると、インストール用のイメージは 4GB、テストに使用されているメモリは 1GB の RAM です。必要なストレージのサイズはもちろん動作させるコンテナアプリケーションのサイズを考えておく必要があります。

インストーラ

インストーラは他の Fedora エディションと同じ Anaconda が採用されています。Fedora Workstation や RHEL/CentOS のインストール経験があれば、問題なくインストールできると思います。

Fedora インストーラ (Anaconda) の一画面

インストール後の設定

ここからは、実機にインストールしたもので確認します。

パッケージのアップデート

インストール後に、rpm-ostree コマンドでパッケージのアップデートを実行して、新しいパッケージを反映させます。テストに使用した PC は、有線のネットワークにつなげてあります。

[bitwalk@fedoraiot ~]$ sudo rpm-ostree update

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for bitwalk:
⠈ Receiving objects: 98% (7314/7407) 4.8 MB/s 267.5 MB
Receiving objects: 98% (7314/7407) 4.8 MB/s 267.5 MB... done
Staging deployment... done
Upgraded:
  NetworkManager 1:1.26.2-1.fc33.1 -> 1:1.26.2-2.fc33
  NetworkManager-libnm 1:1.26.2-1.fc33.1 -> 1:1.26.2-2.fc33
...
(途中省略)
...
  util-linux 2.36-2.fc33 -> 2.36-3.fc33
  vim-minimal 2:8.2.1522-2.fc33 -> 2:8.2.1770-1.fc33
Removed:
  dbxtool-8-13.fc33.x86_64
Run "systemctl reboot" to start a reboot
[bitwalk@fedoraiot ~]$ systemctl reboot

WiFi の接続

参考に、nmcli コマンドを使った WiFi への接続例を示しました。

[bitwalk@fedoraiot ~]$ nmcli dev wifi list
IN-USE  BSSID              SSID                 MODE   CHAN  RATE        SIGNAL  BARS  SECURITY
        XX:XX:XX:XX:XX:XX  BCW720J-XXXXX-G      Infra  1     130 Mbit/s  100     ****  WPA1 WPA2
        XX:XX:XX:XX:XX:XX  BCW720J-XXXXX-A      Infra  100   405 Mbit/s  67      ***   WPA1 WPA2
...
...
[bitwalk@fedoraiot ~]$ nmcli dev
DEVICE        TYPE      STATE         CONNECTION
enp0s20u1u1   ethernet  connected     enp0s20u1u1
wlo1          wifi      disconnected  --
p2p-dev-wlo1  wifi-p2p  disconnected  --
lo            loopback  unmanaged     --
[bitwalk@fedoraiot ~]$ sudo nmcli device wifi connect BCW720J-XXXXX-A password XXXXXXXXXXXXX ifname wlo1
[sudo] password for bitwalk:
Device 'wlo1' successfully activated with '4f04ca0a-1caa-4706-9f71-d610148a1467'.
[bitwalk@fedoraiot ~]$ nmcli dev
DEVICE        TYPE      STATE         CONNECTION
enp0s20u1u1   ethernet  connected     enp0s20u1u1
wlo1          wifi      connected     BCW720J-XXXXX-A
p2p-dev-wlo1  wifi-p2p  disconnected  --
lo            loopback  unmanaged     --
[bitwalk@fedoraiot ~]$

ストレージの使用量

テスト機は 32GB の eMMC を搭載していますが、実質の容量 29.1GB のうち、システムが 27GB の領域を利用でき、インストール、アップデート後に約 2GB の領域をシステムが消費しています。IoT デバイスにとって、これが大きいか小さいかは用途によって異なりますが、デスクトップ環境がインストールされていない分、システムのサイズはコンパクトになっています。

[bitwalk@fedoraiot ~]$ df -hT
devtmpfs                            devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                               tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs                               tmpfs     767M  9.3M  758M   2% /run
/dev/mapper/fedora--iot_fedora-root ext4       27G  1.9G   24G   8% /sysroot
/dev/mmcblk0p2                      ext4      976M  161M  748M  18% /boot
/dev/mmcblk0p1                      vfat      599M  8.6M  591M   2% /boot/efi
tmpfs                               tmpfs     384M     0  384M   0% /run/user/1000
[bitwalk@fedoraiot ~]$ lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0                     179:0    0 29.1G  0 disk
|-mmcblk0p1                 179:1    0  600M  0 part /boot/efi
|-mmcblk0p2                 179:2    0    1G  0 part /boot
`-mmcblk0p3                 179:3    0 27.5G  0 part
  `-fedora--iot_fedora-root 253:0    0 27.5G  0 lvm  /sysroot
mmcblk0boot0                179:8    0    4M  1 disk
mmcblk0boot1                179:16   0    4M  1 disk
[bitwalk@fedoraiot ~]$

Python3 が利用可能

dnf コマンドは使えませんが、rpm コマンドでインストールされているパッケージを確認することができます。インストールされているパッケージのリストを確認すると、Python3 が利用できるようになっています。

[bitwalk@fedoraiot ~]$ rpm -qa | sort
warning: Found bdb Packages database while attempting sqlite backend: using bdb backend.
ModemManager-1.14.2-1.fc33.x86_64
...
(途中省略)
...
publicsuffix-list-dafsa-20190417-4.fc33.noarch
python-pip-wheel-20.2.2-1.fc33.noarch
python-setuptools-wheel-49.1.3-1.fc33.noarch
python3-3.9.0-1.fc33.x86_64
python3-audit-3.0-0.21.20191104git1c2f876.fc33.x86_64
python3-dbus-1.2.16-3.fc33.x86_64
python3-decorator-4.4.2-3.fc33.noarch
python3-firewall-0.8.4-1.fc33.noarch
python3-gobject-base-3.38.0-2.fc33.x86_64
python3-libs-3.9.0-1.fc33.x86_64
python3-libselinux-3.1-2.fc33.x86_64
python3-libsemanage-3.1-2.fc33.x86_64
python3-nftables-0.9.3-6.fc33.x86_64
python3-policycoreutils-3.1-4.fc33.noarch
python3-setools-4.3.0-5.fc33.x86_64
python3-setuptools-49.1.3-1.fc33.noarch
python3-six-1.15.0-2.fc33.noarch
python3-slip-0.6.4-21.fc33.noarch
python3-slip-dbus-0.6.4-21.fc33.noarch
qrencode-libs-4.0.2-6.fc33.x86_64
...
(途中省略)
...
zlib-1.2.11-22.fc33.x86_64
[bitwalk@fedoraiot ~]$

コンテナの利用

コンテナの利用例として、陳腐ですが Apache HTTP Server をデプロイします。

[bitwalk@fedoraiot ~]$ podman search httpd --filter=is-official
INDEX       NAME                      DESCRIPTION                      STARS   OFFICIAL   AUTOMATED
docker.io   docker.io/library/httpd   The Apache HTTP Server Project   3214    [OK]
[bitwalk@fedoraiot ~]$ podman pull docker.io/library/httpd
Trying to pull docker.io/library/httpd...
Getting image source signatures
Copying blob 26694ef5449a done
Copying blob 3ae86ea9f1b9 done
Copying blob 7b85101950dd done
Copying blob bb79b6b2107f done
Copying blob da919f2696f2 done
Copying config 3dd970e6b1 done
Writing manifest to image destination
Storing signatures
3dd970e6b110c8cbcec63e05a91e3cefd23c76a780fcb78c33979153f044b2d4
[bitwalk@fedoraiot ~]$

取ってきた httpd を、8080 番のポートからアクセスできるように実行します。

[bitwalk@fedoraiot ~]$ podman images
REPOSITORY               TAG     IMAGE ID      CREATED     SIZE
docker.io/library/httpd  latest  3dd970e6b110  6 days ago  141 MB
[bitwalk@fedoraiot ~]$ podman run -dt -p 8080:80/tcp docker.io/library/httpd
567ea42182c4607b06fb914b979291e6dc3b73f80d5f6b8e8848d332af2a681b
[bitwalk@fedoraiot ~]$ podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS                 NAMES
567ea42182c4  docker.io/library/httpd:latest  httpd-foreground  8 seconds ago  Up 7 seconds ago  0.0.0.0:8080->80/tcp  cool_chebyshev
[bitwalk@fedoraiot ~]$ curl http://localhost:8080
<html><body><h1>It works!</h1></body></html>
[bitwalk@fedoraiot ~]$

rpm-ostree による OS 管理

Fedora IoT のシステムに採用されている rpm-ostree について紹介します。まずは rpm-ostree がベースとしている OSTree から説明します。

OSTree

OSTree は、ファイルシステムツリー(= OS 環境)を管理するツールです。このファイルシステムは起動可能で immutable(変更されない = read only)です。このファイルシステムツリーは、ひとつにまとめたイメージとして Git のようなバージョン管理がされています。そのため OSTree では、複数のファイルシステムツリーを切り替えて利用することができます。ただし、切り替えには再起動が必要になります。

OSTree が管理する OS 環境は、書きかえることができませんが、/var 内は変更・保存ができるようになっています。そのため、変更や削除を必要とする、例えば /home ディレクトリは /var/home へのシンボリックリンクになっています。

rpm-ostree

OSTree が管理する OS 環境は書き換えることができないため、セキュリティ的には非常に堅牢ですが、従来の rpm や deb によるパッケージ単位の管理に比べれば、システム上で個々のパッケージ追加、削除をすることができない点が不便です。そこで、OSTree の機能と rpm によるパッケージ管理機能を組み合わせたシステムが rpm-ostree です。パッケージを追加・削除した結果を反映するには、再起動が必要になります。

rpm-ostree で管理するシステムは OSTree による OS のイメージ管理と rpm によるパッケージ管理を併せ持つので、ハイブリッドシステムと呼ばれています。

rpm-ostree コマンド概略 
rpm-ostree [OPTION…] COMMAND
ビルトインコマンド 説  明
compose OS ツリーを構成するコマンドです。
cleanup キャッシュされている、あるいは処理保留中のデータを消去します。
db RPM のデータベースにクエリを発行するコマンドです。
【用法】
rpm-ostree db [OPTION…] COMMAND
diff 前後のコミットにおけるパッケージの差分(バージョンの違い、追加、削除)を表示します。
list コミットされたパッケージの一覧を表示します。
version コミットされたパッケージの rpmdb バージョンを表示します。
deploy 特定のコミットをデプロイします。
rebase 別の OS ツリーに切り替えます。
rollback 以前ブートした OS ツリーに戻します。
status 起動しているシステムのバージョンを取得します。
upgrade システムのアップグレードを実行します。
reload コンフィギュレーションを再ロードします。
usroverlay 一時的な上書き用ファイルシステム (overlayfs) を /usr に適用します。
cancel アクティブなトランザクション(例えば upgrade)を中止します。
initramfs ローカルでの initramfs 再生成を有効または無効にします。
initramfs は、メモリ上に展開可能な,小さなサイズのルートファイルシステムです。ここにルートファイルシステムをマウントするために必要なカーネルモジュールやスクリプトが保存されています。
install 追加の rpm パッケージを書き込みます。
uninstall 追加して書き込んだ rpm パッケージを削除します。
override ベースパッケージのオーバーライドを管理します。
【用法】
rpm-ostree override [OPTION…] COMMAND
replace ベースレイヤーのパッケージを置き換えます。
remove ベースレイヤーからパッケージを削除します。
reset 現在アクティブなパッケージのオーバーライドをリセットします。
reset 全ての変異 (muation) を削除します。
refresh-md rpm リポジトリのメタデータを生成します。
kargs カーネルに渡す引数のクエリまたは編集をします。

まとめ

項目 説明
ディストリビューション Fedora IoT
プロジェクトサイト https://getfedora.org/ja/iot/
デスクトップ環境 なし
対応プラットフォーム x86_64, aarch64, armhfp
パッケージ管理 rpm-ostree
日本語入力 なし
寸評

IoT 機器向けには Fedora IoT、デスクトップ用途には Fedora Silverblue、そしてサーバー(クラウド環境)向けには Fedora CoreOS という次世代の OS は rpm-ostree による immutable な OS を管理する仕組みを持っています。

そのなかで、Fedora IoT は rpm-ostree と podman によるコンテナ機能を備えた最小構成の OS になります。

IoT, Internet of Things(モノのインターネット)に特化した、という表現はあやふやですが、Fedora IoT の役割は、おそらくですが、センサーなどのデバイスからの情報を扱うような特定用途向けサーバーに利用することを想定しているのでしょう。デスクトップ環境が無いだけで、必要なコンテナをデプロイすれば、データベースやその他のサーバーにもフツーに使えそうです。もちろん、静かに機械学習をさせてデータを整理・加工させるのはもっと面白そうです。🤪

参考サイト

  1. bitWalk's: Linux ディストロ探訪(10) 〜 Fedora Silverblue 〜 [2019-11-24]
  2. Reference Platforms :: Fedora Docs Site

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: