AlmaLinux 8.5にvcgencmdをインストールしてラズパイの情報を表示する
目次
概要
自宅でRaspberry Pi 4Bをサーバとして利用していますが、 仕事でRed Hat系のOSに慣れ親しんでいることから、家でもCentOSやAlmaLinuxをインストールして利用しています。 ラズパイ4ではSoCが高温になりがちなことから時々温度を気にしながら利用しています。 Raspberry Pi OSをインストールしていれば標準で vcgencmd が利用できるようになっており、 SoCの温度を表示させることができるのですが、Red Hat系のOSでは標準ではインストールされていないため、 追加でインストールしました。 このときのインストール手順を残しておきます。
構成
サーバ構成
ハードウェア
Raspberry Pi 4 Model B - 8GB
OS
AlmaLinux release 8.5 (Arctic Sphynx) aarch64
ソフトウェア・ソースコード
- https://github.com/raspberrypi/userland.git
環境構築
はじめに
ラズパイでRaspberry Pi OS以外を利用すると vcgencmd がインストールされていないので、 SoCの温度やクロック、電圧などの情報を取得することができません。 もちろん実行してもエラーになります。
# vcgencmd measure_temp -bash: vcgencmd: command not found
インストール
ソースコードのビルドに必要なツールのインストール
vcgencmd コマンドをソースコードからインストールするため、ビルドに必要なツールを先にインストールします。
# dnf -y install cmake gcc gcc-c++ make git
Last metadata expiration check: 2:24:12 ago on Sat 23 Apr 2022 09:27:05 PM JST.
Package git-2.27.0-1.el8.aarch64 is already installed.
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
cmake aarch64 3.20.2-4.el8 appstream 10 M
gcc aarch64 8.5.0-4.el8_5.alma appstream 19 M
gcc-c++ aarch64 8.5.0-4.el8_5.alma appstream 11 M
make aarch64 1:4.2.1-10.el8 baseos 489 k
Upgrading:
libgcc aarch64 8.5.0-4.el8_5.alma baseos 71 k
libstdc++ aarch64 8.5.0-4.el8_5.alma baseos 422 k
Installing dependencies:
binutils aarch64 2.30-108.el8_5.1 baseos 6.1 M
cmake-data noarch 3.20.2-4.el8 appstream 1.7 M
cmake-filesystem aarch64 3.20.2-4.el8 appstream 43 k
cmake-rpm-macros noarch 3.20.2-4.el8 appstream 43 k
cpp aarch64 8.5.0-4.el8_5.alma appstream 8.9 M
glibc-devel aarch64 2.28-164.el8 baseos 1.0 M
glibc-headers aarch64 2.28-164.el8 baseos 470 k
isl aarch64 0.16.1-6.el8 appstream 772 k
kernel-headers aarch64 4.18.0-348.20.1.el8_5 baseos 8.2 M
libasan aarch64 8.5.0-4.el8_5.alma baseos 384 k
libgomp aarch64 8.5.0-4.el8_5.alma baseos 197 k
libmpc aarch64 1.1.0-9.1.el8 appstream 59 k
libpkgconf aarch64 1.4.2-1.el8 baseos 33 k
libstdc++-devel aarch64 8.5.0-4.el8_5.alma appstream 2.0 M
libubsan aarch64 8.5.0-4.el8_5.alma baseos 142 k
libuv aarch64 1:1.41.1-1.el8_4 appstream 149 k
libxcrypt-devel aarch64 4.1.1-6.el8 baseos 24 k
pkgconf aarch64 1.4.2-1.el8 baseos 36 k
pkgconf-m4 noarch 1.4.2-1.el8 baseos 17 k
pkgconf-pkg-config aarch64 1.4.2-1.el8 baseos 14 k
vim-filesystem noarch 2:8.0.1763-16.el8_5.12 appstream 49 k
Transaction Summary
========================================================================================================================
Install 25 Packages
Upgrade 2 Packages
(========== 中略 ==========)
Upgraded:
libgcc-8.5.0-4.el8_5.alma.aarch64 libstdc++-8.5.0-4.el8_5.alma.aarch64
Installed:
binutils-2.30-108.el8_5.1.aarch64 cmake-3.20.2-4.el8.aarch64
cmake-data-3.20.2-4.el8.noarch cmake-filesystem-3.20.2-4.el8.aarch64
cmake-rpm-macros-3.20.2-4.el8.noarch cpp-8.5.0-4.el8_5.alma.aarch64
gcc-8.5.0-4.el8_5.alma.aarch64 gcc-c++-8.5.0-4.el8_5.alma.aarch64
glibc-devel-2.28-164.el8.aarch64 glibc-headers-2.28-164.el8.aarch64
isl-0.16.1-6.el8.aarch64 kernel-headers-4.18.0-348.20.1.el8_5.aarch64
libasan-8.5.0-4.el8_5.alma.aarch64 libgomp-8.5.0-4.el8_5.alma.aarch64
libmpc-1.1.0-9.1.el8.aarch64 libpkgconf-1.4.2-1.el8.aarch64
libstdc++-devel-8.5.0-4.el8_5.alma.aarch64 libubsan-8.5.0-4.el8_5.alma.aarch64
libuv-1:1.41.1-1.el8_4.aarch64 libxcrypt-devel-4.1.1-6.el8.aarch64
make-1:4.2.1-10.el8.aarch64 pkgconf-1.4.2-1.el8.aarch64
pkgconf-m4-1.4.2-1.el8.noarch pkgconf-pkg-config-1.4.2-1.el8.aarch64
vim-filesystem-2:8.0.1763-16.el8_5.12.noarch
Complete!
GitHubからソースコードの取得
GitHubにアップされているラズパイの公式リポジトリからソースコードをクローンして取得します。
# git clone https://github.com/raspberrypi/userland.git Cloning into 'userland'... remote: Enumerating objects: 7269, done. remote: Counting objects: 100% (176/176), done. remote: Compressing objects: 100% (98/98), done. remote: Total 7269 (delta 78), reused 149 (delta 72), pack-reused 7093 Receiving objects: 100% (7269/7269), 35.25 MiB | 11.61 MiB/s, done. Resolving deltas: 100% (4288/4288), done.
ソースコードのビルド
クローンしたソースコードをビルドします。
# cd userland/
# ./buildme --aarch64
~/userland/build/raspberry/release ~/userland
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
-- The C compiler identification is GNU 8.5.0
-- The CXX compiler identification is GNU 8.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
(========== 中略 ==========)
-- Set runtime path of "/opt/vc/bin/dtoverlay" to ""
-- Installing: /opt/vc/man/man1/dtoverlay.1
-- Installing: /opt/vc/bin/dtparam
-- Installing: /opt/vc/man/man1/dtparam.1
-- Installing: /opt/vc/bin/dtoverlay-pre
-- Installing: /opt/vc/bin/dtoverlay-post
-- Installing: /opt/vc/bin/dtmerge
-- Set runtime path of "/opt/vc/bin/dtmerge" to ""
-- Installing: /opt/vc/man/man1/dtmerge.1
-- Installing: /opt/vc/lib/libdtovl.so
~/userland
設定
共有ライブラリのパスを設定
インストールした vcgencmd コマンドを実行するためには、 このコマンドと同時にインストールされた libvchiq_arm.so という共有ライブラリが読み込まれている必要があります。 libvchiq_arm.so が格納されているディレクトリパスを設定し、共有ライブラリを読み込めるようにします。
# cd /etc/ld.so.conf.d/ # vi vc.conf
※ファイルを新規作成※
/opt/vc/lib
設定を反映します。
# ldconfig
環境変数PATHの設定
vcgencmd コマンド実行時にフルパスで指定しなくてすむように環境変数 PATH にコマンドのパスを設定します。
# cd # vi .bashrc
※ファイルの末尾に追加
PATH="/opt/vc/bin:$PATH"
export PATH
設定を反映します。
# source ~/.bashrc
以上で、root ユーザでの vcgencmd コマンド実行ができるようになりました。
# vcgencmd measure_temp temp=49.6'C
rootユーザ以外でvcgencmdを実行するための追加設定
vcgencmd コマンド実行にはVCHIデバイスが利用されますが、初期状態では一般ユーザが /dev/vchiq にアクセスする権限がありません。 Linuxの video グループに所属するユーザに対して /dev/vchiq にアクセスする権限を付与し、 vcgencmd コマンドを実行させたいユーザをLinuxの video グループに所属させます。
Udevルールファイルの作成
/dev/vchiq に対して、video グループに所属するユーザへrw権限を付与します。
# cd /etc/udev/rules.d/ # vi 92-local-vchiq-permissions.rules
※ファイルを新規作成※
KERNEL=="vchiq",GROUP="video",MODE="0660"
# ls -l
total 8
-rw-r--r--. 1 root root 628 May 10 2021 70-persistent-ipoib.rules
-rw-r--r-- 1 root root 42 Apr 24 01:10 92-local-vchiq-permissions.rules ←作成したファイル
設定を反映します。
# ls -l /dev/vchiq crw------- 1 root root 243, 0 Jun 22 2018 /dev/vchiq ←変更前 # udevadm trigger /dev/vchiq ←設定の反映 # ls -l /dev/vchiq crw-rw---- 1 root video 243, 0 Apr 24 01:15 /dev/vchiq ←変更後
コマンド実行ユーザのグループ設定
vcgencmd コマンドを実行したいユーザ(今回の例では ranocci)を video グループに所属させます。
# usermod -aG video ranocci # id ranocci uid=20001(ranocci) gid=20001(ranocci) groups=20001(ranocci),39(video)
環境変数PATHの設定
root ユーザの時と同様に vcgencmd のパスを環境変数 PATH に設定します。
# su - ranocci Last login: Sat Apr 30 02:51:48 JST 2022 on pts/0 $ vi .bashrc
※ファイルの末尾に追加※
PATH="/opt/vc/bin:$PATH"
export PATH
設定を反映します。
$ source ~/.bashrc
以上で、一般ユーザでも vcgencmd コマンド実行ができるようになりました。
$ vcgencmd measure_temp temp=45.2'C