2021年1月24日日曜日

CentOS7(Raspberry Pi 3)にWebサーバ(Apache HTTPサーバ)を導入する
Raspberry Pi上にWebサーバを導入して、Apache初期サイトにアクセスしてみる。

■本日の目標

Raspberry Pi 3にApache HTTPサーバを導入する

■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.9.2009 (AltArch)

■httpdの情報を確認する

$ yum info httpd
利用可能なパッケージ
名前                : httpd
アーキテクチャー    : armv7hl
バージョン          : 2.4.6
リリース            : 97.el7.centos
容量                : 2.7 M
リポジトリー        : updates/7/armhfp
要約                : Apache HTTP Server
URL                 : http://httpd.apache.org/
ライセンス          : ASL 2.0
説明                : The Apache HTTP Server is a powerful, efficient, and extensible web server.
少々心配したが、ちゃんとリポジトリに存在するようだ。

■httpdをインストールする

$ yum install httpd
base                             | 3.6 kB  00:00:00
centos-kernel                    | 2.9 kB  00:00:00
epel                             | 3.8 kB  00:00:00
extras                           | 2.9 kB  00:00:00
updates                          | 2.9 kB  00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ httpd.armv7hl 0:2.4.6-97.el7.centos を インストール
--> 依存性の処理をしています: httpd-tools = 2.4.6-97.el7.centos のパッケージ: httpd-2.4.6-97.el7.centos.armv7hl
--> 依存性の処理をしています: /etc/mime.types のパッケージ: httpd-2.4.6-97.el7.centos.armv7hl
--> トランザクションの確認を実行しています。
---> パッケージ httpd-tools.armv7hl 0:2.4.6-97.el7.centos を インストール
---> パッケージ mailcap.noarch 0:2.1.41-2.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=======================================================================================
Package                    アーキテクチャー  バージョン           リポジトリー   容量
=======================================================================================
インストール中:
httpd                      armv7hl           2.4.6-97.el7.centos  updates       2.7 M
依存性関連でのインストールをします:
httpd-tools                armv7hl           2.4.6-97.el7.centos  updates        95 k
mailcap                    noarch            2.1.41-2.el7         base           31 k

トランザクションの要約
=======================================================================================
インストール  1 パッケージ (+2 個の依存関係のパッケージ)

総ダウンロード容量: 2.8 M
インストール容量: 9.2 M
Is this ok [y/d/N]: y
Downloading packages:
(1/3): mailcap-2.1.41-2.el7.noarch.rpm                      |  31 kB  00:00:00
(2/3): httpd-tools-2.4.6-97.el7.centos.armv7hl.rpm          |  95 kB  00:00:01
(3/3): httpd-2.4.6-97.el7.centos.armv7hl.rpm                | 2.7 MB  00:00:04
-----------------------------------------------------------------------------------
合計                                               561 kB/s | 2.8 MB  00:00:05
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中   : httpd-tools-2.4.6-97.el7.centos.armv7hl   1/3
  インストール中   : mailcap-2.1.41-2.el7.noarch               2/3
  インストール中   : httpd-2.4.6-97.el7.centos.armv7hl         3/3
  検証中           : httpd-2.4.6-97.el7.centos.armv7hl         1/3
  検証中           : mailcap-2.1.41-2.el7.noarch               2/3
  検証中           : httpd-tools-2.4.6-97.el7.centos.armv7hl   3/3

インストール:
  httpd.armv7hl 0:2.4.6-97.el7.centos

依存性関連をインストールしました:
  httpd-tools.armv7hl 0:2.4.6-97.el7.centos      mailcap.noarch 0:2.1.41-2.el7

完了しました!

■httpdのバージョンを確認する

$ httpd -version
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 16 2020 16:26:22

■httpdサービスを自動起動化する

$ systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

■httpdサービスを起動する

$ systemctl start httpd
$ systemctl -l status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2021-01-23 17:05:30 JST; 1min 45s ago
     Docs: man:httpd(8)
           man:apachectl(8)
Main PID: 14626 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           tq14626 /usr/sbin/httpd -DFOREGROUND
           tq14627 /usr/sbin/httpd -DFOREGROUND
           tq14628 /usr/sbin/httpd -DFOREGROUND
           tq14629 /usr/sbin/httpd -DFOREGROUND
           tq14630 /usr/sbin/httpd -DFOREGROUND
           mq14631 /usr/sbin/httpd -DFOREGROUND

1月 23 17:05:30 WSTD-RPI3 systemd[1]: Starting The Apache HTTP Server...
1月 23 17:05:30 WSTD-RPI3 httpd[14626]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.100. Set the 'ServerName' directive globally to suppress this message
1月 23 17:05:30 WSTD-RPI3 systemd[1]: Started The Apache HTTP Server.

■firewalldに80番ポート(httpdのデフォルトポート)の通信許可を行う

firewalldが起動している場合はファイアウォールに穴をあけてあげれば良い。
$ firewall-cmd --add-service=http --zone=public --permanent
success
$ firewall-cmd --reload
success

■WebブラウザでApache初期サイトにアクセスする

Webブラウザに「http://(Raspberry PiのIPアドレス)/」を打ち込む。
こんな画面が表示されれば問題無し。


■AH00558エラー対策

起動時にスルーしてたAH00558のエラーメッセージを対処する。
メッセージを読む限り、ServerNameの指定が無いと言うことでエラーを吐いているようだ。
なので、設定ファイル(/etc/httpd/conf/httpd.conf)にServerNameを記述してあげれば良い。
$ vi /etc/httpd/conf/httpd.conf
変更前:#ServerName www.example.com:80
変更後:ServerName www.example.com:80 ※とりあえずコメントアウトを解除するだけ。
$ systemctl restart httpd
$ systemctl -l status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2021-01-23 17:22:23 JST; 5s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 14943 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Main PID: 14948 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           tq14948 /usr/sbin/httpd -DFOREGROUND
           tq14949 /usr/sbin/httpd -DFOREGROUND
           tq14950 /usr/sbin/httpd -DFOREGROUND
           tq14951 /usr/sbin/httpd -DFOREGROUND
           tq14952 /usr/sbin/httpd -DFOREGROUND
           mq14953 /usr/sbin/httpd -DFOREGROUND

1月 23 17:22:23 WSTD-RPI3 systemd[1]: Starting The Apache HTTP Server...
1月 23 17:22:23 WSTD-RPI3 systemd[1]: Started The Apache HTTP Server.
エラーメッセージが消えた。
正常に画面表示はできていたけど、エラーを起こした状態で放置したくなかったので。

これにて終了。

2021年1月23日土曜日

CentOS7(Raspberry Pi 3)のyumにepelリポジトリを追加する
CentOSにはサードパーティ製品のリポジトリがあるようだ。
今回はepelというリポジトリを追加してみる。


■本日の目標

Raspberry Pi 3にepelリポジトリを追加する

■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.9.2009 (AltArch)

■参考サイト


■リポジトリ定義ファイルを用意する

$ touch /etc/yum.repos.d/epel.repo
$ vi /etc/yum.repos.d/epel.repo
$ cat /etc/yum.repos.d/epel.repo
[epel]
name=Epel rebuild for armhfp
baseurl=https://armv7.dev.centos.org/repodir/epel-pass-1/
enabled=1
gpgcheck=0
当初は多くのサイトで紹介されていたサイト(fedoraproject.org)から取得するようにしていたが、残念ながらarmv7lというアーキテクチャに対応したリポジトリが存在しないようで、別サイト(armv7.dev.centos.org)から取得するようにした。
ただし、色々と制限ありの「自己責任で使用」とのこと。

■yumのキャッシュを削除する

$ yum clean all
読み込んだプラグイン:fastestmirror
リポジトリーを清掃しています: base centos-kernel epel extras updates
Cleaning up list of fastest mirrors
Other repos take up 29 M of disk space (use --verbose for details)

■epelリポジトリの利用確認(更新チェック)

$ yum check-update
・・・中略・・・
base                                            | 3.6 kB  00:00:00
centos-kernel                                   | 2.9 kB  00:00:00
epel                                            | 3.8 kB  00:00:00
extras                                          | 2.9 kB  00:00:00
updates                                         | 2.9 kB  00:00:00
(1/7): centos-kernel/7/armhfp/primary_db        |  11 kB  00:00:00
(2/7): base/7/armhfp/group_gz                   | 153 kB  00:00:00
(3/7): updates/7/armhfp/primary_db              | 662 kB  00:00:00
(4/7): base/7/armhfp/primary_db                 | 4.1 MB  00:00:02
(5/7): extras/7/armhfp/primary_db               | 186 kB  00:00:01
(6/7): epel/group_gz                            |  88 kB  00:00:03
(7/7): epel/primary_db                          | 8.3 MB  00:00:39
epelリポジトリが読み込まれるようになった。

■epelリポジトリの更新ソフトウェアの詳細を確認する(epel-release.noarch)

$ yum info epel-release.noarch
・・・中略・・・
利用可能なパッケージ
名前                : epel-release
アーキテクチャー    : noarch
バージョン          : 7
リリース            : 13
容量                : 14 k
リポジトリー        : epel
要約                : Extra Packages for Enterprise Linux repository configuration
URL                 : http://download.fedoraproject.org/pub/epel
ライセンス          : GPLv2
説明                : This package contains the Extra Packages for Enterprise Linux (EPEL) repository
                    : GPG key as well as configuration for yum.
以上で完了!

2021年1月3日日曜日

CentOS7(Raspberry Pi 3)にDLNAサーバを導入する
Raspberry Piに構築したNASには写真・動画・音楽が無数に置いてある。
普段はWindowsの標準アプリの他、iTunesやAIMPといったアプリケーションからNAS上のディレクトリを直接参照して利用している。
それでも問題ないのだが、せっかくなのでDLNAサーバを構築して、リソースを有効活用してみようと思う。

■本日の目標

Raspberry Pi 3にDLNAサーバを構築する

■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.9.2009 (AltArch)

■インストールするアプリケーション

・MiniDLNA

■参考サイト


■事前準備

色々なサイトで情報を集めていたところ、yumで簡単にインストールできるようだったのだが、「Raspberry Pi 3 + CentOS7」の環境が特殊だったせいか、リポジトリに見当たらず・・・泣く泣くソースからビルドしてインストールすることにした・・・。
ざっと調べたところ、必要なアプリケーションやライブラリは次の通り。
早速インストールして、開発環境を構築していく。
・libexif
・libjpeg
・sqlite3
・libid3tag
・libFLAC
・libvorbis
・libuuid
・flac
・ffmpeg

■不足ライブラリを追加する

「yum list」で探していく・・・。 無印版(devel無し)もあるにはあるのだが、あとの作業でうまくビルドできなかったので、開発版(develあり)で代替した。
$ yum install libexif-devel
$ yum install libjpeg-turbo-devel
$ yum install sqlite-devel
$ yum install libid3tag-devel
$ yum install flac-devel
$ yum install libvorbis-devel
$ yum install libuuid-devel
$ yum install flac-devel

■ffmpegをインストールする

これもリポジトリに無く・・・gitから入手したソースでインストールした。
$ git clone git://source.ffmpeg.org/ffmpeg.git
$ ./configure --enable-shared --disable-programs
$ make
$ make install
お決まりの「configure→make→make install」の3コマンドをポンポンポンと実行しているように見えるが、「make」が2時間くらい掛かった・・・。
↓インストール完了↓
$ ffmpeg
ffmpeg version N-86222-g9fb293c Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11)
  configuration: --enable-gpl --enable-nonfree --enable-libx264 --enable-libmp3lame --enable-libfdk-aac --enable-libfreetype
  libavutil      55. 63.100 / 55. 63.100
  libavcodec     57. 96.101 / 57. 96.101
  libavformat    57. 72.101 / 57. 72.101
  libavdevice    57.  7.100 / 57.  7.100
  libavfilter     6. 90.100 /  6. 90.100
  libswscale      4.  7.101 /  4.  7.101
  libswresample   2.  8.100 /  2.  8.100
  libpostproc    54.  6.100 / 54.  6.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

■MiniDLNAのインストール
一通り揃ったのでMiniDLNAをインストールする。
これもgitから。
$ git clone https://git.code.sf.net/p/minidlna/git minidlna-git
$  autoreconf -i
$ ./configure
$ make
$ make install
$ ll /usr/local/sbin/
・・・中略・・・
-rwxr-xr-x. 1 root root 868304  1月 25 19:55 minidlnad
$ /usr/local/sbin/minidlnad -V
Version 1.2.1

■ライブラリの参照箇所を追加する

インストール作業で各種モジュールが /usr/local/lib に配置されたので、MiniDLNA用にパスを通し、リロードする。
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/minidlna.conf
$ ldconfig

■MiniDLNA:環境設定ファイルを配置する

gitから取得した環境設定ファイルを /etc/minidlna.conf にコピーする。
$ cp ./minidlna.conf /etc/

■MiniDLNA:環境設定ファイルに個別設定を加える

$ vi /etc/minidlna.conf
当方は次の3点を変更した。
・media_dir:MiniDLNAが読み込むディレクトリと、読み込み対象ファイルの種類を指定する。
・friendly_name:利用クライアント上での表示名
・notify_interval:データベースの更新間隔
※ファイル内のコメントを読めば要領はわかる

■MiniDLNA:Serviceファイルを作成する

中身は概ね参考サイトそのままだが、自動起動できなかったので、「Type」を「forking」に変更し、末尾に「Install」の記述を追加した。
$ touch /usr/lib/systemd/system/minidlna.service
$ chmod 755 /usr/lib/systemd/system/minidlna.service
$ vi /usr/lib/systemd/system/minidlna.service
[Unit]
Description=minidlna server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/minidlna/minidlna.pid
EnvironmentFile=/etc/sysconfig/minidlna
ExecStart=/usr/local/sbin/minidlnad -R -f $CONFIG_FILE
ExecStop=/bin/kill -SIGTERM $MAINPID
[Install]
WantedBy=multi-user.target

■MiniDLNA:Serviceファイルが読み込む設定ファイルを作成する

$ touch /etc/sysconfig/minidlna
$ vi /etc/sysconfig/minidlna
CONFIG_FILE=/etc/minidlna.conf

■MiniDLNA:Serviceを有効化&開始する

ここからはServiceの有効化&起動のお作法。
$ systemctl enable minidlna
$ systemctl start minidlna
$ systemctl status minidlna
● minidlna.service - minidlna server
   Loaded: loaded (/usr/lib/systemd/system/minidlna.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 1970-01-01 09:00:26 JST; 51 years 0 months ago
  Process: 648 ExecStart=/usr/local/sbin/minidlnad -R -f $CONFIG_FILE (code=exited, status=0/SUCCESS)
Main PID: 678 (minidlnad)
   CGroup: /system.slice/minidlna.service
           tq678 /usr/local/sbin/minidlnad -R -f /etc/minidlna.conf
           mq685 /usr/local/sbin/minidlnad -R -f /etc/minidlna.conf

1月 01 09:00:26 WSTD-RPI3 systemd[1]: Starting minidlna server...
1月 01 09:00:26 WSTD-RPI3 systemd[1]: Started minidlna server.

■MiniDLNA:文字化け対策

日本語で指定したファイルやフォルダが文字化けしてしまった。
ビルドのやり直しみたいな記事も見たが、こちらの環境ではデータベースファイルを再作成しただけで解消した。
$ systemctl stop minidlna
$ rm /var/cache/minidlna/files.db
rm: 通常ファイル `/var/cache/minidlna/files.db' を削除しますか? y
$ systemctl start minidlna
PC、スマホ、その他AV機器からDLNAで参照できることを確認して終了。
ちなみにWindowsPCのエクスプローラー上には
のようなアイコンが表示されていて、
プロパティを開くと、
のように表示される。

2021年1月2日土曜日

CentOS7(Raspberry Pi 3)に接続したHDDを自動停止する
Raspberry PiをNAS化して2TBのHDDで無停止運転を実現できたが、HDDを24時間365日無停止で作動させるのは、電気代や機器の劣化・障害が気になる。
無停止運転とは言え、実際に使うのは1日当たり1時間も満たないし。
そこで、今回は使用していない時間帯はHDDを動作停止することで、無駄な電気代を減らした上で、HDDを少しでも長持ちさせてみようと思う。

■本日の目標

Raspberry Pi 3に接続したHDDを未使用時間帯は自動停止する

■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.9.2009 (AltArch)
・HDD:I-O DATA 2.0TB (HDC-LA2.0)

■参考サイト

・自動停止用のシェルスクリプトは下記サイトを参考にしました。
外付け USB HDD を spin down する

■スクリプト用意

・参考サイトより拝借

■スクリプトを格納する

・格納した後、実行権限を付与しておく。
$ ll /usr/local/bin/usbhdd_spindown.sh
-rwxr-xr-x. 1 root root 637 10月 28 21:50 /usr/local/bin/usbhdd_spindown.sh

■HDDのUnit名を確認する

・後ほどServiceの起動順序を指定するため、マウント中のHDDのユニット名を確認する。
 ※HDDは /mnt/usb-m2 と /mnt/usb-m3 の2ヶ所
$ systemctl list-units| grep -F .mount
-.mount loaded active mounted /
boot.mount loaded active mounted /boot
dev-mqueue.mount loaded active mounted POSIX Message Queue File System
mnt-nas.mount loaded active mounted /mnt/nas
mnt-usb\x2dm1.mount loaded active mounted /mnt/usb-m1
mnt-usb\x2dm2.mount loaded active mounted /mnt/usb-m2
mnt-usb\x2dm3.mount loaded active mounted /mnt/usb-m3
run-user-0.mount loaded active mounted /run/user/0
sys-kernel-config.mount loaded active mounted Configuration File System
sys-kernel-debug.mount loaded active mounted Debug File System

■Serviceファイルを作成する

・ポイントは2つ。
 →実行コマンド(ExecStart):
  スクリプトに引数(HDDを停止するまでの時間[s])を渡す
 →実行順序(After):
  /mnt/usb-m2 と /mnt/usb-m3 のマウント完了後に起動する
$ touch /etc/systemd/system/usbhdd_spindown.service
$ chmod 755 /etc/systemd/system/usbhdd_spindown.service
$ cat /etc/systemd/system/usbhdd_spindown.service
[Unit]
Description=hdd spindown by sdparm
After=mnt-usb\x2dm2.mount mnt-usb\x2dm3.mount

[Service]
ExecStart=/usr/local/bin/usbhdd_spindown.sh sdb 900 2>&1 | logger -t usbhdd_spindown &
KillMode=process
Type=simple
Restart=no

[Install]
WantedBy=multi-user.target

■Serviceを有効化&開始する

・ここからはServiceの有効化&起動のお作法。
$ systemctl enable usbhdd_spindown
$ systemctl start usbhdd_spindown
$ systemctl status usbhdd_spindown
● usbhdd_spindown.service - hdd spindown by sdparm
  Loaded: loaded (/etc/systemd/system/usbhdd_spindown.service; enabled; vendor preset: disabled)
  Active: active (running) since 日 2017-10-29 08:35:34 JST; 2min 12s ago
 Main PID: 10585 (usbhdd_spindown)
  CGroup: /system.slice/usbhdd_spindown.service
  tq10585 /bin/sh /usr/local/bin/usbhdd_spindown.sh sdb 900 2>&1 | logger -t usbhdd_spindown &
  mq10618 sleep 10

10月 29 08:35:34 WSTD-RPI3 systemd[1]: Started hdd spindown by sdparm.
10月 29 08:35:34 WSTD-RPI3 systemd[1]: Starting hdd spindown by sdparm...
10月 29 08:35:44 WSTD-RPI3 usbhdd_spindown.sh[10585]: drive is up: /dev/sdb
10月 29 08:37:04 WSTD-RPI3 usbhdd_spindown.sh[10585]: drive is up: /dev/sdb

■自動停止の状況を確認する

・今回は「900秒=15分」で設定したが、実際の処理状況を確認してみる。
$ systemctl status usbhdd_spindown
● usbhdd_spindown.service - hdd spindown by sdparm
   Loaded: loaded (/etc/systemd/system/usbhdd_spindown.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 1970-01-01 09:00:15 JST; 51 years 0 months ago
Main PID: 276 (usbhdd_spindown)
   CGroup: /system.slice/usbhdd_spindown.service
           tq  276 /bin/sh /usr/local/bin/usbhdd_spindown.sh sdb 900 2>&1 | logger -t usbhdd_spindown &
           mq20375 sleep 10

1月 02 12:27:57 WSTD-RPI3 usbhdd_spindown.sh[276]: drive is up: /dev/sdb
1月 02 12:43:09 WSTD-RPI3 usbhdd_spindown.sh[276]: spin-down: /dev/sdb
1月 02 12:43:09 WSTD-RPI3 usbhdd_spindown.sh[276]: /dev/sdb: I-O DATA  HDCL-UT  5112
1月 02 12:45:09 WSTD-RPI3 usbhdd_spindown.sh[276]: drive is up: /dev/sdb
1月 02 13:00:21 WSTD-RPI3 usbhdd_spindown.sh[276]: spin-down: /dev/sdb
1月 02 13:00:22 WSTD-RPI3 usbhdd_spindown.sh[276]: /dev/sdb: I-O DATA  HDCL-UT  5112
1月 02 14:03:39 WSTD-RPI3 usbhdd_spindown.sh[276]: drive is up: /dev/sdb
ログには、
 停止:spin-down
 再開:drive is up
で出力される。
NAS(HDD)にアクセスすると再開し、アクセスが無いと15分後に停止している。
実際にHDD本体を見てみると、ランプが点灯→消灯していたため、うまく導入できたようだ。