Fedora IoT は文字通り IoT 向けの Fedora エディションです。デスクトップ用途向けの Fedora Silverblue を本ブログで何回か紹介していますが [1]、Fedora IoT はデスクトップ用途の部分を含まない、rpm-ostree とコンテナ (padman) で構成する、とてもシンプルな構成の Fedora と考えればいいでしょう。
本ブログの「Linux ディストロ探訪」では、デスクトップ用途のディストロを中心に紹介してきていますが、デスクトップ用途でない Fedora IoT でも x86_64 の iso イメージが利用できるので、今回は Fedora IoT がどんなものかを試してみました。
- インストール
- 必要なリソース
- インストーラ
- インストール後の設定
- パッケージのアップデート
- WiFi の接続
- ストレージの使用量
- Python3 が利用可能
- コンテナの利用
- rpm-ostree による OS 管理
- OSTree
- rpm-ostree
- まとめ
- 参考サイト
インストール
今回使用したイメージは 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 のインストール経験があれば、問題なくインストールできると思います。
インストール後の設定
ここからは、実機にインストールしたもので確認します。
パッケージのアップデート
インストール後に、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 [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 の役割は、おそらくですが、センサーなどのデバイスからの情報を扱うような特定用途向けサーバーに利用することを想定しているのでしょう。デスクトップ環境が無いだけで、必要なコンテナをデプロイすれば、データベースやその他のサーバーにもフツーに使えそうです。もちろん、静かに機械学習をさせてデータを整理・加工させるのはもっと面白そうです。🤪 |
参考サイト
- bitWalk's: Linux ディストロ探訪(10) 〜 Fedora Silverblue 〜 [2019-11-24]
- Reference Platforms :: Fedora Docs Site
にほんブログ村
0 件のコメント:
コメントを投稿