OSS Fan ~OSSでLinuxサーバ構築~

作成日: 2022/04/30

OSSセットアップ

AlmaLinux 8.5にvcgencmdをインストールしてラズパイの情報を表示する

トップページOSSセットアップ > 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
ファイル名:/etc/ld.so.conf.d/vc.conf
※ファイルを新規作成※
/opt/vc/lib

 設定を反映します。

# ldconfig

環境変数PATHの設定

 vcgencmd コマンド実行時にフルパスで指定しなくてすむように環境変数 PATH にコマンドのパスを設定します。

# cd
# vi .bashrc
ファイル名:/root/.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
ファイル名:/etc/udev/rules.d/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
ファイル名:/home/ranocci/.bashrc
※ファイルの末尾に追加※
PATH="/opt/vc/bin:$PATH"
export PATH

 設定を反映します。

$ source ~/.bashrc

 以上で、一般ユーザでも vcgencmd コマンド実行ができるようになりました。

$ vcgencmd measure_temp
temp=45.2'C

参考にしたサイト