AlmaLinuxを Raspberry Pi 3 Model B Plusインストールし一通りセットアップしてみた

2022年11月27日

概要

こんにちは。

AlmaLinuxを Raspberry Pi 3 Model B Plus Rev 1.3 に対してOSを書き込んで一通りセットアップしてみたいと思います。

imageファイルダウンロード

AlmaLinux-8-RaspberryPi-8.5-20211111.aarch64.raw.xz

最新版を使用したい場合は、AlmaLinux-8-RaspberryPi-latest.aarch64.raw.xz こちらです。

ssh接続

almalinuxのイメージファイルを解凍ソフトで展開すると、AlmaLinux-8-RaspberryPi-8.5-20211111.aarch64.raw のような、拡張子 .xz が外れたイメージができます。

こちらをラズパイに書き込むSDカードに対して、 SD Card Formatter 等でフォーマットし、 DD for Windows で書き込みます。

その後、書き込んだSDカードをラズパイに差し込んで、LANケーブルで接続後、電源を入れて起動します。

数分後、 ssh できるようになるので、ラズパイのIPに対して以下情報でリモート接続します。

ユーザ名パスフレーズ
rootalmalinux

※ラズパイのIPが分からない場合は、HDMIを使用し外部ディスプレイに映し、IPアドレスを確認してください。

SDカードの拡張

/(ルート) 領域で使用率が 77% となっており、筆者が使用しているSDカードは32GBですが、 2.2GB しか確保されていない為、確保領域を拡張します。

df -PTh

Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4      2.2G  1.6G  514M  77% /
devtmpfs       devtmpfs  422M     0  422M   0% /dev
tmpfs          tmpfs     455M     0  455M   0% /dev/shm
tmpfs          tmpfs     455M   18M  438M   4% /run
tmpfs          tmpfs     455M     0  455M   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat      286M   88M  198M  31% /boot
tmpfs          tmpfs      91M     0   91M   0% /run/user/0

READMEファイルを見ると、 /(ルート) 領域のサイズを変更したい場合、 rootfs-expand を打てと記載がありますので、実行します。

cat /root/README

== AlmaLinux 8 ==

If you want to automatically resize your / partition, just type the following (as root user):
rootfs-expand

実行すると以下のように自動的に拡張されます。

rootfs-expand

/dev/mmcblk0p3 /dev/mmcblk0 3
Extending partition 3 to max size ....
CHANGED: partition=3 start=788480 old: size=4687872 end=5476352 new: size=61545439 end=62333919
Resizing ext4 filesystem ...
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/mmcblk0p3 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 4
The filesystem on /dev/mmcblk0p3 is now 7693179 (4k) blocks long.

Done.

/(ルート) 領域の使用率が、 6% となり、確保領域が、 29GB になったことが確認できます。

df -PTh

Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4       29G  1.7G   28G   6% /
devtmpfs       devtmpfs  422M     0  422M   0% /dev
tmpfs          tmpfs     455M     0  455M   0% /dev/shm
tmpfs          tmpfs     455M   12M  444M   3% /run
tmpfs          tmpfs     455M     0  455M   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat      286M   88M  198M  31% /boot
tmpfs          tmpfs      91M     0   91M   0% /run/user/0

OSアップデート

dnf -y update

→OSアップデートを実施します。

ネットワーク設定

nmtui コマンドを使用し、固定IPで接続できるようにします。

[Edit a connection]→[Wired connection 1]→[<Edit...>] の順に進み以下項目を埋めます。

全部埋めたら、適用して、 reboot コマンドで再起動し、先ほど設定した固定IPでssh接続できてばOKです。

項目設定値
IPv4 CONFIGURATION<Manual>
Addresses{固定IPv4アドレス}
Gateway{ゲードウェイIPv4アドレス}
DNS servers{DNSサーバIPv4アドレス}
Ignore automatically obtained routesスペースキーを押し X ←チェックマークする。
Ignore automatically obtained DNS parametersスペースキーを押し X ←チェックマークする。
Require IPv4 addressing for this connectionスペースキーを押し X ←チェックマークする。
Automatically connectスペースキーを押し X ←チェックマークする。
Available to all usersスペースキーを押し X ←チェックマークする。

日本語化

再度、ssh接続します。

localectl set-locale LANG=ja_JP.UTF-8

→日本語に設定します。

source /etc/locale.conf

→設定を適用させます。

echo $LANG

ja_JP.UTF-8

ja_JP.UTF-8 になっていれば問題ありません。

時刻設定

タイムゾーン変更

timedatectl set-timezone Asia/Tokyo

→日本時間へ変更。

date

2022年  2月  8日 火曜日 13:30:52 JST

→JSTになっていれば問題ありません。

同期先変更

chronyの設定で同期先が、 2.cloudlinux.pool.ntp.org になっているので、 ntp.nict.jp へ変更します。

cat /etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.cloudlinux.pool.ntp.org iburst

cp -p /etc/chrony.conf /etc/chrony.conf.org

cp -p /etc/chrony.conf /etc/chrony.conf_$(date +%Y%m%d)

sed -i 's/2.cloudlinux.pool.ntp.org/ntp.nict.jp/g' /etc/chrony.conf

systemctl restart chronyd

設定変更後、以下のように、 ntp.nict.jp になっていれば問題ありません。

chronyc sources

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^+ ntp-b2.nict.go.jp             1   6    17    58   +304us[ +304us] +/- 4864us
^- ntp-k1.nict.jp                1   6    17    58   +345us[ +345us] +/- 9560us
^- ntp-a3.nict.go.jp             1   6    17    58   +110us[ +110us] +/- 5124us
^* ntp-a2.nict.go.jp             1   6    17    59   -125us[ -188us] +/- 5446us

sysstatの設定

sysstatのインストール・起動

サーバのCPUやDisk I/Oなど各種情報を記録してくれる sysstat のインストールします。

dnf -y install sysstat

→インストール

systemctl start sysstat

→起動

1分毎に記録するようにする

以下コマンドを全選択してペーストし、設定ファイルへ書き込みます。

/usr/lib64/sa/sa1root /usr/lib64/sa/sa2 が存在することを事前に ls コマンド等で確認しておきます。

echo -n '# Run system activity accounting tool every 10 minutes
*/1 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A' > /etc/cron.d/sysstat

hostnameの変更

以下、コマンドでホスト名が変更できるので任意のホスト名へ変更します。

後にOS再起動をおこなうので、現在のセッションのホスト名は再起動後、もしくは、ログアウト、ログインですることで適用されます。

変更後、 uname -a コマンド等で確認が可能です。

hostnamectl set-hostname {設定したいホスト名}

Selinuxの無効化

プログラムの動作にSelinuxが邪魔することがあるので、機能を無効化します。

mkdir -p ~/BACKUP_$(date +%Y%m%d)

→バックアップディレクトリを作成します。

cp -p /etc/sysconfig/selinux ~/BACKUP_$(date +%Y%m%d)/selinux_$(date +%Y%m%d)

→設定ファイルをバックアップします。

cp -p /etc/selinux/config ~/BACKUP_$(date +%Y%m%d)/config_$(date +%Y%m%d)

→設定ファイルをバックアップします。

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

→Selinuxを無効に置換します。

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

→Selinuxを無効に置換します。

書き換え後、以下のようにdisabledになっていれば問題ありません。

diff -s -u ~/BACKUP_$(date +%Y%m%d)/selinux_$(date +%Y%m%d) /etc/sysconfig/selinux

--- /root/BACKUP_20220208/selinux_20220208      2021-11-12 05:24:52.882997206 +0900
+++ /etc/sysconfig/selinux      2022-02-08 14:17:29.560144567 +0900
@@ -4,7 +4,7 @@
 #     enforcing - SELinux security policy is enforced.
 #     permissive - SELinux prints warnings instead of enforcing.
 #     disabled - No SELinux policy is loaded.
-SELINUX=enforcing
+SELINUX=disabled
 # SELINUXTYPE= can take one of these three values:
 #     targeted - Targeted processes are protected,
 #     minimum - Modification of targeted policy. Only selected processes are protected.

diff -s -u ~/BACKUP_$(date +%Y%m%d)/config_$(date +%Y%m%d) /etc/selinux/config

--- /root/BACKUP_20220208/config_20220208       2021-11-12 05:24:52.882997206 +0900
+++ /etc/selinux/config 2022-02-08 14:17:38.492125962 +0900
@@ -4,7 +4,7 @@
 #     enforcing - SELinux security policy is enforced.
 #     permissive - SELinux prints warnings instead of enforcing.
 #     disabled - No SELinux policy is loaded.
-SELINUX=enforcing
+SELINUX=disabled
 # SELINUXTYPE= can take one of these three values:
 #     targeted - Targeted processes are protected,
 #     minimum - Modification of targeted policy. Only selected processes are protected.

これだけでは、無効できないのでOS再起動後、Selinuxの機能が無効になっていることを確認します。

以下、コマンドでOS再起動をします。

shutdown -r now

Selinuxが無効になっているか確認

再度、ssh接続します。

以下、コマンドでDisabledになっていることが確認できれば問題ありません、

getenforce

Disabled

最後に updatedb コマンドで、 locateコマンドのdb情報を更新しておきます。

Wi-Fi電源管理をOFFにする

電源管理の状態を確認するため、iwconfigパケッジを導入します。

AlmaLinux標準レポジトリに該当パッケージが存在しないのでソースからインストールする形となることに注意します。

iwconfigパッケージソースリンク

上記、リンク中[Wireless Tools latest versions]項目、[Download the latest wireless tools package]をクリックするとソースパッケージをダウンロードできます。

wget https://hewlettpackard.github.io/wireless-tools/wireless_tools.29.tar.gz

現時点で最新のパッケージをダウンロードします。

tar -zxvf wireless_tools.29.tar.gz
 ⇒解凍します。

cd wireless_tools.29/
 ⇒解凍したディレクトリへ移動します。

make
 ⇒ビルドします。

make install
 ⇒ビルドしたソースをインストールします。

パス情報が入っていないと実行時に怒られますので、以下記載のように設定ファイルへ追記します。

※ファイルが存在しない場合は新規作成となります。

vi /etc/ld.so.conf.d/custom.conf

/usr/local/include
/usr/local/lib
/usr/local/sbin

ldconfig
 ⇒設定を適用します。

以下のように実行に必要なライブラリが読み込まれていることを確認します。

ldconfig -p | grep libiw.so

        libiw.so.29 (libc6,AArch64) => /usr/local/lib/libiw.so.29
        libiw.so (libc6,AArch64) => /usr/local/lib/libiw.so

以下、コマンドでWi-Fi電源管理が有効になっているか確認できます。

Power Management:on になっている場合、電源管理が有効になっているのでこちらを無効に後術記載のコマンドで実施します。

iwconfig wlan0

wlan0     IEEE 802.11  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=31 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on

usr/sbin/iw dev wlan0 set power_save off
 ⇒こちらのコマンドで電源管理を無効にすることが可能です。

このままですと再起動した際に有効になってしまいますので以下スクリプトを設置し、cron定期実行で自動的に無効になるようにします。

vi wifi-power-management.sh

#!/usr/bin/env bash
# /**************************************************************************
#  *
#  * init modify  : 2022年11月26日(土)
#  * modify       : 2022年11月26日(土)
#  * summary      : Raspberry Pi Wifi パワーマネージメント機能を無効化するスクリプト。
#  *              : Cron Execute Example : */1 * * * * /root/scripts/wifi-power-management.sh > /dev/null 2>&1
#  *
# **************************************************************************/

scriptDir=$(dirname "$0")
log_name="wifi-power-management"
std_out_log_dir="$scriptDir/$log_name.log"
manage_str="$(/usr/local/sbin/iwconfig wlan0 | grep "Power Management:on")"
is_power_manage="false"
date_fmt="$(date +%Y%m%d_%H:%M)"

if [ -e "$std_out_log_dir" ]; then
    rm -f "$std_out_log_dir"
fi

if [ -n "$manage_str" ]; then
    is_power_manage="true"
fi

echo -e "実行時刻:$date_fmt" >> "$std_out_log_dir" 2>&1

if [ "$is_power_manage" = "true" ]; then
    {
        if /usr/sbin/iw dev wlan0 set power_save off; then
            echo -e "\nwifi パワーマネージメント機能無効化に成功しました。"
        else
            echo -e "\nwifi パワーマネージメント機能無効化に失敗しました。"
        fi
    } >> "$std_out_log_dir" 2>&1
fi

{
    echo -e "\n現在のパワーマネージメント機能状態\n"
    /usr/local/sbin/iwconfig wlan0
} >> "$std_out_log_dir" 2>&1

chmod 700 wifi-power-management.sh
 ⇒スクリプトに実行権限を付与します。

後は、cronに仕込んで定期実行させるだけです。

試しにOS再起動等をおこなってWi-Fi電源管理が無効になっていることを確認するのをお勧めします。

まとめ

almalinuxに対して一通り、セットアップしてみました。

一連の設定をスクリプト化すればもっとスマートにいけますね。