CentOS for RaspberryPi で BOINC 専用機を作ってみた

World Community Grid にも、ついに COVID-19 のプロジェクト「OpenPandemics – COVID-19」がリリースされた。
久しぶりに WCG で全力を出すため、カラフルなケースを全色コンプリートするため無駄にいっぱい買ったRaspberry Pi 4 model B を使って BOINC クライアントを用意した。
なお、WCG の OpenPandemics – COVID-19 は、ARM アーキテクチャ向けだと、1プロセスあたり 100MB ほどのメモリ消費でいけるので、RPi3 でも行けるとは思う。

■事の発端
World Community Grid: COVID-19 has some powerful enemies. And now you can join them. #OpenPandemics is live!  #GoodTechIBM https://ibm.co/2LsfIC7

■今回必要な物
・Raspberry Pi 4 Model B (RPi4)
・放熱性の高い RPi4 対応ケース
 今回は Aluminium Heatsink Case for Raspberry Pi 4を採用
・RPi4 対応電源
・8GB 以上の高速な microSD
・SSH 接続 or USB 接続のキーボード/マウス

■完成品の写真

■Raspberry Pi 4 Model B (RPi4) を選定した理由
・5GHz 帯の Wi-Fi に対応している
・Wi-Fi モジュールが強化され、安定している
・CPU にヒートスプレッダが実装され、よく冷える
・性能が RPi3 よりも優れている
 参考:Raspberry Pi 4 Model B (RPi4) の性能比較メモ

■OS イメージ
まこぴ大好き Red Hat 系な OS である CentOS を採用・w・
CentOS Linux on the Raspberry Pi 3
https://wiki.centos.org/SpecialInterestGroup/AltArch/Arm32/RaspberryPi3
今回は Minimal イメージを使うので、AltArch なイメージがおいてある以下の箇所からイメージをダウンロードする。
http://mirror.centos.org/altarch/7.8.2003/isos/armhfp/
CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-4-2003-sda.raw.xz
上記イメージの使い方は、過去の日記参照・w・
CentOS 7.5.1804 for Raspberry Pi 2/3/3+ GNOME イメージの確認

■セットアップの流れ
・OS イメージを microSD へ書き込み
・初期セットアップ
・BOINC Client のビルドとインストール
・World Community Grid への接続

■BOINC Client を自前ビルドする理由
本来、EPEL リポジトリの中に BOINC Client は存在する。
しかし、CentOS AltArch の SIG 的には、公式の EPEL は存在しないが”とりあえずビルドしただけ&QAしてないもので良ければ”存在はするというスタンスらしい。
ただこれが何時どうなるか私にはわからないので、公式の EPEL レポジトリから SourceRPM を持ってきて、Rebuild している。
※公式アナウンス
SpecialInterestGroupAltArcharmhfp | How Can I Enable EPEL 7 on armhfp ?

■OS イメージを microSD へ書き込み

# xz -dc < CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-4-2003-sda.raw.xz | dd of=/dev/sda bs=1M ; sync

■初期セットアップ
此処から RPi4 にて直接 root で操作。
01-OS_Configure.sh を実行し、各種初期設定を済ます。
やってる内容は、次の通り。
・スクリプト実行時に、ホストネームを引数にしているか確認
・microSD の全領域まで / パーティションを拡張
・/ と swap パーティションで Block Discard (Trim / UNMAP) 有効化
・root パスワードの設定 ★あえて手動入力
・ホストネームの設定
・タイムゾーンの設定
・キーマップの設定
・localhost を IPv4 のみに限定化
・可能な限り network-latency のチューニングを投入
・ntpd のインストールと設定
・パッケージアップデートの実行
・ifconfig やその他過去の Enterprise Linux で使えた管理コマンドの有効化
・iptables コマンドの有効化
・Wi-Fi 制御用コマンドの有効化
・ローカルリポジトリ作成用パッケージのインストール
・firewalld, iptables, ip6tables の停止
・Raspberry Pi の Wi-Fi モジュールの有効化
・非特権ユーザ (admin) の作成とパスワードの設定 ★あえて手動入力
・SSH経由でパスワード認証を利用した root ログインの拒否設定
・非特権ユーザで RPM ビルド環境の整備
・ローカルリポジトリの作成
・ローカルリポジトリを利用するように設定
・乱数ジェネレータのビルドとインストール
・Wi-Fi の規制範囲設定ツール (crda) のビルドとインストール
 ※必要となる m2crypto がビルドは成功するがテストが失敗するので、テストを無効化してビルドする
・Raspberry Pi の Wi-Fi ドライバ更新

# curl -L --output /root/setup.sh https://www.sgv417.jp/~makopi/RaspberryPi/01-OS_Configure.sh
# sh /root/setup.sh [HOSTNAME]

■BOINC Client のビルド
ビルドステップは大まかに次の通り。
・EPEL SourceRPM のリポジトリの有効化
・Convert docbook into man and Texinfo のビルド
・GTK port of the wxWidgets GUI library のビルド
・The BOINC client のビルド&インストール

●EPEL SourceRPM のリポジトリの有効化

# cat <<EOF > /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - x86_64
#baseurl=http://download.fedoraproject.org/pub/epel/7/x86_64
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=x86_64
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - x86_64 - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/x86_64/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=x86_64
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 7 - x86_64 - Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=x86_64
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
EOF

# cd /etc/pki/rpm-gpg/
# wget -N https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

●Convert docbook into man and Texinfo のビルド

# su - admin -c "cd /home/admin/rpmbuild/SRPMS/ ; yumdownloader --disablerepo=\* --enablerepo=epel-source --source docbook2X"
# su - admin -c "rpm -ivh /home/admin/rpmbuild/SRPMS/docbook2X*.src.rpm"
# yum-builddep -y /home/admin/rpmbuild/SPECS/docbook2X.spec
# su - admin -c "rpmbuild --rebuild /home/admin/rpmbuild/SRPMS/docbook2X*.src.rpm"
# su - admin -c "cd /home/admin/rpmbuild/SRPMS/ ; createrepo ."
# su - admin -c "cd /home/admin/rpmbuild/RPMS/ ; createrepo ."
# yum --disablerepo=\* --enablerepo=tsc\* clean all

●GTK port of the wxWidgets GUI library のビルド

# su - admin -c "cd /home/admin/rpmbuild/SRPMS/ ; yumdownloader --disablerepo=\* --enablerepo=epel-source --source wxGTK3"
# su - admin -c "rpm -ivh /home/admin/rpmbuild/SRPMS/wxGTK3*.src.rpm"
# yum-builddep -y /home/admin/rpmbuild/SPECS/wxGTK3.spec
# su - admin -c "rpmbuild --rebuild /home/admin/rpmbuild/SRPMS/wxGTK3*.src.rpm"
# su - admin -c "cd /home/admin/rpmbuild/SRPMS/ ; createrepo ."
# su - admin -c "cd /home/admin/rpmbuild/RPMS/ ; createrepo ."
# yum --disablerepo=\* --enablerepo=tsc\* clean all

●The BOINC client のビルド&インストール

# su - admin -c "cd /home/admin/rpmbuild/SRPMS/ ; yumdownloader --disablerepo=\* --enablerepo=epel-source --source boinc-client"
# su - admin -c "rpm -ivh /home/admin/rpmbuild/SRPMS/boinc-client*.src.rpm"
# yum-builddep -y /home/admin/rpmbuild/SPECS/boinc-client.spec
# su - admin -c "rpmbuild --rebuild /home/admin/rpmbuild/SRPMS/boinc-client*.src.rpm"
# su - admin -c "cd /home/admin/rpmbuild/SRPMS/ ; createrepo ."
# su - admin -c "cd /home/admin/rpmbuild/RPMS/ ; createrepo ."
# yum --disablerepo=\* --enablerepo=tsc\* clean all
# yum -y install boinc-client

■上記のことをまとめて一回で実施するスクリプト
10-BOINC.sh
このスクリプトでは、次のことを実施する。
・インストール前に Trim/UNMAP の実施
・EPEL SourceRPM のリポジトリの有効化
・Convert docbook into man and Texinfo のビルド
・GTK port of the wxWidgets GUI library のビルド
・The BOINC client のビルド&インストール
・iftop のビルド&インストール
・まこぴ管理の最新 RaspberryPi Kernel/Firmware の有効化
・Wi-Fi 接続設定作成スクリプトの配備

■World Community Grid への接続
・Alternate platform の設定

# cd ~boinc
# cat <<EOF > cc_config.xml
<cc_config>
    <options>
        <no_alt_platform>0</no_alt_platform>
        <alt_platform>arm-unknown-linux-gnueabihf</alt_platform>
    </options>
</cc_config>
EOF

・boinc-client の起動

# systemctl enable boinc-client
# service boinc-client start

・(場合によっては)Proxy の設定

# boinccmd --set_proxy_settings PROXY-IP PROXY-PORT "" "" "" "" "" "" ""

・World Community Grid への接続

# boinccmd --project_attach www.worldcommunitygrid.org XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

※XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX は WCG のマイ・ページにある、アカウント・キー

カテゴリー: めも パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です