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本体を見てみると、ランプが点灯→消灯していたため、うまく導入できたようだ。

2017年5月23日火曜日

CentOS7(Raspberry Pi 3)でroot宛メールをGmailに転送する
ふとした時にroot宛にメールが飛ぶことがあるけど、
気付くのが遅れたりすることが多いので、
よく見るGmailで確認できたら楽かなと思って、今回対応してみる。


■本日の目標

 Raspberry Pi 3からroot宛メールをGmailに転送する


■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.3.1611 (Core)


■Postfixのインストール

・CentOS7からはデフォルトMTAとしてPostfixがインストール済で、
 先日、初期エラーの対策をして正常稼働できるようにしたので、
 ここでは特に作業なし。
 一応、yumの情報を確認しておく。
$ yum info postfix
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
インストール済みパッケージ
名前                : postfix
アーキテクチャー    : armv7hl
エポック            : 2
バージョン          : 2.10.1
リリース            : 6.el7
容量                : 11 M
リポジトリー        : installed
提供元リポジトリー  : centos-base_rbf
要約                : Postfix Mail Transport Agent
URL                 : http://www.postfix.org
ライセンス          : IBM and GPLv2+
説明                : Postfix is a Mail Transport Agent (MTA), supporting LDAP, SMTP AUTH (SASL),
                    : TLS


■mailxのインストール

・mailコマンドでメールが送れるようにmailxをインストールする。
$ yum info mailx
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
利用可能なパッケージ
名前                : mailx
アーキテクチャー    : armv7hl
バージョン          : 12.5
リリース            : 12.el7
容量                : 219 k
リポジトリー        : base/7/armhfp
要約                : Enhanced implementation of the mailx command
URL                 : http://heirloom.sourceforge.net/mailx.html
ライセンス          : BSD with advertising and MPLv1.1
説明                : Mailx is an enhanced mail command, which provides the functionality
                    : of the POSIX mailx command, as well as SysV mail and Berkeley Mail
                    : (from which it is derived).
                    :
                    : Additionally to the POSIX features, mailx can work with Maildir/ e-mail
                    : storage format (as well as mailboxes), supports IMAP, POP3 and SMTP
                    : protocols (including over SSL) to operate with remote hosts, handles mime
                    : types and different charsets. There are a lot of other useful features,
                    : see mailx(1).
                    :
                    : And as its ancient analogues, mailx can be used as a mail script language,
                    : both for sending and receiving mail.
                    :
                    : Besides the "mailx" command, this package provides "mail" and "Mail"
                    : (which should be compatible with its predecessors from the mailx-8.x source),
                    : as well as "nail" (the initial name of this project).
$ yum install mailx
・・・(中略)・・・
完了しました!


■Postfixの設定

・「/etc/postfix/main.cf」にrelayhostとSMTP認証の設定を書く。
$ vi /etc/postfix/main.cf
# relayhost(relayhostの項目末尾に追加)
relayhost = [smtp.gmail.com]:587
# SMTP認証(ファイル末尾に追加)
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail_auth
smtp_sasl_security_options =
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_eccert_file =
smtp_tls_eckey_file =
smtp_use_tls = yes
smtp_enforce_tls = no
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtpd_tls_received_header = yes
tls_random_source = dev:/dev/urandom


■SMTP認証情報を作成

・先ほど追記した「/etc/postfix/main.cf」の『smtp_sasl_password_maps』の項に書いた認証ファイルを作成し、利用するGmailの情報を記載する。
$ echo '[smtp.gmail.com]:587 xxxxx@gmail.com:password' > /etc/postfix/gmail_auth

・認証ファイルをハッシュ化する。
$ chmod 600 /etc/postfix/gmail_auth
$ postmap /etc/postfix/gmail_auth
$ ll /etc/postfix/gmail*
-rw-------. 1 root root    52  5月 14 21:32 /etc/postfix/gmail_auth
-rw-------. 1 root root 12288  5月 14 21:34 /etc/postfix/gmail_auth.db

・Postfixに反映する。
$ systemctl restart postfix
$ systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-05-14 22:48:10 JST; 5s ago
  Process: 2990 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS)
  Process: 3007 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 3004 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 3001 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 3082 (master)
   CGroup: /system.slice/postfix.service
           tq3082 /usr/libexec/postfix/master -w
           tq3083 pickup -l -t unix -u
           mq3084 qmgr -l -t unix -u

 5月 14 22:48:07 WSTD-RPI3 systemd[1]: Starting Postfix Mail Transport Agent...
 5月 14 22:48:10 WSTD-RPI3 postfix/postfix-script[3080]: starting the Postfix mail system
 5月 14 22:48:10 WSTD-RPI3 postfix/master[3082]: daemon started -- version 2.10.1, configuration /etc/postfix
 5月 14 22:48:10 WSTD-RPI3 systemd[1]: Started Postfix Mail Transport Agent.


■root宛メールの転送設定

・転送先のGmailアドレスを設定する。
$ echo 'root: xxxxx@gmail.com' >> /etc/aliases
$ newaliases


■送信テスト(その1)

・設定ができたのでテスト送信をしてみよう。
$ echo 'Test Send' | mail root

 ・・・Gmailに来ないな・・・ちょっとmaillogを見てみよう。
$ tail -n 20 /var/log/maillog
・・・(中略)・・・
May 14 22:49:05 WSTD-RPI3 postfix/pickup[3083]: 232E04677: uid=0 from=
May 14 22:49:05 WSTD-RPI3 postfix/cleanup[3090]: 232E04677: message-id=<20170514134905 .232e04677="" localdomain="">
May 14 22:49:05 WSTD-RPI3 postfix/qmgr[3084]: 232E04677: from=, size=438, nrcpt=1 (queue active)
May 14 22:49:05 WSTD-RPI3 postfix/cleanup[3090]: 3E4C84675: message-id=<20170514134905 .232e04677="" localdomain="">
May 14 22:49:05 WSTD-RPI3 postfix/local[3092]: 232E04677: to=, orig_to=, relay=local, delay=0.19, delays=0.12/0.06/0/0.01, dsn=2.0.0, status=sent (forwarded as 3E4C84675)
May 14 22:49:05 WSTD-RPI3 postfix/qmgr[3084]: 3E4C84675: from=, size=580, nrcpt=1 (queue active)
May 14 22:49:05 WSTD-RPI3 postfix/qmgr[3084]: 232E04677: removed
May 14 22:49:06 WSTD-RPI3 postfix/smtp[3093]: warning: SASL authentication failure: No worthy mechs found
May 14 22:49:06 WSTD-RPI3 postfix/smtp[3093]: 3E4C84675: SASL authentication failed; cannot authenticate to server smtp.gmail.com[108.177.97.108]: no mechanism available
May 14 22:49:07 WSTD-RPI3 postfix/smtp[3093]: connect to smtp.gmail.com[2404:6800:4008:c00::6d]:587: Cannot assign requested address
May 14 22:49:07 WSTD-RPI3 postfix/smtp[3093]: 3E4C84675: to=, orig_to=, relay=none, delay=2.2, delays=0.01/0.21/2/0, dsn=4.4.1, status=deferred (connect to smtp.gmail.com[2404:6800:4008:c00::6d]:587: Cannot assign requested address)


■(対策1)cyrus-sasl-plainのインストール

・「SASL authentication failure」の出てる行を読むと、何やらSASLの認証に必要な機能が無いようなので追加インストールする。
$ yum info cyrus-sasl-plain
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
利用可能なパッケージ
名前                : cyrus-sasl-plain
アーキテクチャー    : armv7hl
バージョン          : 2.1.26
リリース            : 20.el7
容量                : 37 k
リポジトリー        : base/7/armhfp
要約                : PLAIN and LOGIN authentication support for Cyrus SASL
URL                 : http://asg.web.cmu.edu/sasl/sasl-library.html
ライセンス          : BSD with advertising
説明                : The cyrus-sasl-plain package contains the Cyrus SASL plugins which support
                    : PLAIN and LOGIN authentication schemes.
$ yum install cyrus-sasl-plain
・・・(中略)・・・
完了しました!


■送信テスト(その2)

・「cyrus-sasl-plain」がインストールできたのでもう一度テスト送信をしてみよう。
$ echo 'Test Send' | mail root

 まだ届かないので、またmailogを確認する。
$ tail -n 20 /var/log/maillog
・・・(中略)・・・
May 14 22:58:52 WSTD-RPI3 postfix/pickup[3083]: 986CC4682: uid=0 from=
May 14 22:58:52 WSTD-RPI3 postfix/cleanup[3114]: A830F127: message-id=<20170514135852 .986cc4682="" localdomain="">
May 14 22:58:52 WSTD-RPI3 postfix/qmgr[3084]: A830F127: from=, size=579, nrcpt=1 (queue active)
May 14 22:58:52 WSTD-RPI3 postfix/local[3115]: 986CC4682: to=, orig_to=, relay=local, delay=0.13, delays=0.07/0.05/0/0.02, dsn=2.0.0, status=sent (forwarded as A830F127)
May 14 22:58:52 WSTD-RPI3 postfix/qmgr[3084]: 986CC4682: removed
May 14 22:58:55 WSTD-RPI3 postfix/smtp[3108]: A830F127: SASL authentication failed; server smtp.gmail.com[108.177.97.109] said: 534-5.7.14  Please log in via your web browser and?534-5.7.14 then try again.?534-5.7.14  Learn more at?534 5.7.14  https://support.google.com/mail/answer/78754 t5sm14848004pgo.48 - gsmtp
May 14 22:58:55 WSTD-RPI3 postfix/smtp[3108]: connect to smtp.gmail.com[2404:6800:4008:c00::6d]:587: Cannot assign requested address
May 14 22:58:55 WSTD-RPI3 postfix/smtp[3108]: A830F127: to=, orig_to=, relay=none, delay=3.2, delays=0.01/0/3.2/0, dsn=4.4.1, status=deferred (connect to smtp.gmail.com[2404:6800:4008:c00::6d]:587: Cannot assign requested address)


■(対策2)Googleアカウントのセキュリティ設定を変更

・ログ中の「https://support.google.com/mail/answer/78754」にアクセスするとヒントが書かれていた。
 パスワードは問題無さそうなので、「安全性の低いアプリがアカウントにアクセスすることを許可」の対策を行う。
 ⇒ページ内の方法2を実施
  1.[アカウント情報] の [安全性の低いアプリ] に移動
  2.[安全性の低いアプリのアクセス] の横にある [有効にする] を選択


■送信テスト(その3)

・三度目の正直ということで・・・。
$ echo 'Test Send' | mail root

 Gmailに届いた!

 念のため、mailogを確認してみよう。
$ tail -n 20 /var/log/maillog
・・・(中略)・・・
May 14 23:12:21 WSTD-RPI3 postfix/smtp[3148]: connect to smtp.gmail.com[2404:6800:4008:c00::6d]:587: Cannot assign requested address
May 14 23:12:24 WSTD-RPI3 postfix/smtp[3148]: 1F83F127: to=, orig_to=, relay=smtp.gmail.com[108.177.97.108]:587, delay=2.9, delays=0.01/0.16/1.2/1.5, dsn=2.0.0, status=sent (250 2.0.0 OK 1494771143 134sm13394508pgh.43 - gsmtp)
May 14 23:12:24 WSTD-RPI3 postfix/qmgr[3084]: 1F83F127: removed

 うーむ・・・「Cannot assign requested address」の行が気になるな。


■「/etc/postfix/main.cf」の追加設定(IPv6無効化)

・「Cannot assign requested address」のちょっと前の出てるアドレスってIPv6か・・・。
 さっきviで編集してるときmain.cfで使用IPアドレスのバージョン設定の箇所があったのが気になったんだよね。
 「inet_protocols」の項目。
 このRaspberry Pi 3の端末はIPv6は無効にしてあるから、「そんなアドレスに繋げられないよ」と怒られているんだろう。
 ・・・というわけで、IPv4固定に変更しよう。
$ vi /etc/postfix/main.cf
# inet_protocolsをIPv4指定に変更
inet_protocols = ipv4

 設定内容を反映する。
$ systemctl reload postfix
$ systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-05-14 23:23:41 JST; 14min ago
  Process: 750 ExecReload=/usr/sbin/postfix reload (code=exited, status=0/SUCCESS)
  Process: 592 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 578 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 552 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 696 (master)
   CGroup: /system.slice/postfix.service
           tq696 /usr/libexec/postfix/master -w
           tq762 pickup -l -t unix -u
           mq763 qmgr -l -t unix -u

 1月 01 09:00:16 WSTD-RPI3 systemd[1]: Starting Postfix Mail Transport Agent...
 5月 14 23:23:41 WSTD-RPI3 postfix/master[696]: daemon started -- version 2.10.1, configuration /etc/postfix
 5月 14 23:23:41 WSTD-RPI3 systemd[1]: Started Postfix Mail Transport Agent.
 5月 14 23:37:41 WSTD-RPI3 postfix/master[696]: reload -- version 2.10.1, configuration /etc/postfix
 5月 14 23:37:41 WSTD-RPI3 postfix/master[696]: warning: ignoring inet_protocols parameter value change
 5月 14 23:37:41 WSTD-RPI3 postfix/master[696]: warning: old value: "all", new value: "ipv4"
 5月 14 23:37:41 WSTD-RPI3 systemd[1]: Reloaded Postfix Mail Transport Agent.
 5月 14 23:37:41 WSTD-RPI3 postfix/master[696]: warning: to change inet_protocols, stop and start Postfix


■送信テスト(その4)

・最後にもう一度。
$ echo 'Test Send' | mail root

 念のため、mailogを確認してみよう。
$ tail -n 20 /var/log/maillog
・・・(中略)・・・
May 14 23:39:56 WSTD-RPI3 postfix/smtp[776]: 5EC25144: to=, orig_to=, relay=smtp.gmail.com[108.177.97.109]:587, delay=3.9, delays=0.01/0.26/1.7/1.9, dsn=2.0.0, status=sent (250 2.0.0 OK 1494772796 r13sm15980358pgn.16 - gsmtp)
May 14 23:39:56 WSTD-RPI3 postfix/qmgr[763]: 5EC25144: removed

 「Cannot assign requested address」が消えた。



これで何か問題があっても検知できそうだ。

2017年5月22日月曜日

CentOS7(Raspberry Pi 3)でNASサーバを構築する
Raspberry Pi 3にUSBメモリをマウントしたので、
今度はNAS化して他のPCからアクセスできるようにしたい。


■本日の目標

 Raspberry Pi 3に差したUSBメモリをNAS化する。


■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.3.1611 (Core)
・USBメモリ:64GB
・主にアクセスするPC(OS):Windows10 Pro 64bit


■今回のNAS構築要件

1.NASアクセス用ユーザを用意(ユーザ名:rpi-nas)
2.ローカルネットワーク内からのみアクセス
3.アクセス元端末はWindowsとAndroid
4.NASで公開するディレクトリは先日マウントしたUSBメモリ
5.プリンター共有は無し

 ちなみにNASに使うのはこちら。
$ df -hT | grep usb
/dev/sda1                ext4        58G   53M   55G    1% /mnt/usb-m1


■Sambaをインストール

・まずはSambaをインストールする。
$ yum info samba
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
利用可能なパッケージ
名前                : samba
アーキテクチャー    : armv7hl
バージョン          : 4.4.4
リリース            : 12.el7
容量                : 583 k
リポジトリー        : updates/7/armhfp
要約                : Server and Client software to interoperate with Windows machines
URL                 : http://www.samba.org/
ライセンス          : GPLv3+ and LGPLv3+
説明                : Samba is the standard Windows interoperability suite of programs for Linux and
                    : Unix.
$ yum install samba
・・・(中略)・・・
完了しました!

・インストール後のサービス状態を確認する。
[root@WSTD-RPI3 /]# systemctl status smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
   Active: inactive (dead)


■ユーザを追加

・Linuxアカウントの追加
 グループの作成
$ groupadd -g 500 nas-user

 ユーザアカウントの作成
$ useradd -g 500 rpi-nas

 パスワード設定
$ passwd rpi-nas

 ユーザとグループの紐付け
$ gpasswd -a rpi-nas nas-user
ユーザ rpi-nas をグループ nas-user に追加

・Sambaアカウントの追加
 ユーザアカウントの作成
$ pdbedit -a rpi-nas
new password:
retype new password:

 作成したユーザの確認
 (ユーザリスト)
$ pdbedit -L
 (個別ユーザの詳細)
$ pdbedit -v rpi-nas


■Sambaの設定

・Sambaの設定ファイルを書き換える。
 【変更前(初期状態)】
$ cat /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes

[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = root
        create mask = 0664
        directory mask = 0775

 【編集】
$ cp -p /etc/samba/smb.conf /etc/samba/smb.conf.`date "+%Y%m%d"`
$ vi /etc/samba/smb.conf

 【変更後】
$ cat /etc/samba/smb.conf
### Sambaの基本設定 ###
[global]
  ## ユーザアクセス管理
  # ユーザ認証方式
  security = user
  # アクセスOKネットワーク
  hosts allow = 192.168. 127.
  # アクセスNGネットワーク
  hosts deny = ALL

  ## サーバ情報
  # ワークグループ
  workgroup = WORKGROUP
  # NetBIOS名
  netbios name = RSPI-NAS
  # Windows側の文字コード
  dos charset = CP932
  # Linux側の文字コード
  unix charset = UTF-8
  # 以下、Windows側のファイル設定
  dos filemode = Yes
  dos filetimes = Yes
  dos filetime resolution = Yes
  # LinuxとSambaのパスワードを同期(次も同じ)
  unix password sync = Yes
  pam password change = Yes

  ## ログ設定
  log file = /var/log/samba/%m.log
  max log size = 50

### 共有ディレクトリ:USBメモリ ###
[usb-m1]
  comment = USB Memory Directory
  # 公開パス
  path = /mnt/usb-m1
  # ゲスト不可
  guest ok = No
  # 共有表示
  browseable = Yes
  # 読み取り専用
  read only = no

 設定ファイルの内容に誤りが無いかチェックする。
$ testparm /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[usb-m1]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
        dos charset = CP932
        netbios name = RSPI-NAS
        log file = /var/log/samba/%m.log
        max log size = 50
        pam password change = Yes
        security = USER
        unix password sync = Yes
        idmap config * : backend = tdb
        dos filemode = Yes
        dos filetime resolution = Yes
        hosts allow = 192.168. 127.
        hosts deny = ALL


[usb-m1]
        comment = USB Memory Directory
        path = /mnt/usb-m1
        read only = No


■NAS公開ディレクトリの所有権を変更

・USBメモリをマウントしたディレクトリはrootで作っていたので、所有権を変えておく。
 【変更前】
$ ll /mnt/
合計 4
drwxrwxrwx. 12 root root    0  5月  9 22:31 nas
drwxr-xr-x.  3 root root 4096  5月  7 19:50 usb-m1

 【変更】
$ chown -R rpi-nas:nas-user /mnt/usb-m1/

 【変更後】
$ ll /mnt/
合計 4
drwxrwxrwx. 12 root    root        0  5月  9 22:31 nas
drwxr-xr-x.  3 rpi-nas nas-user 4096  5月  7 19:50 usb-m1


■ファイアウォール(firewalld)の設定 ※一時設定

・次はファイアウォールでSambaを許可する。
 【設定前】
$ firewall-cmd --list-services
dhcpv6-client ssh

 【設定】
$ firewall-cmd --add-service samba
success

 【設定後】
$ firewall-cmd --list-services
dhcpv6-client samba ssh


■Sambaの起動

・Sambaを起動する。
$ systemctl start smb
$ systemctl status smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
   Active: active (running) since 土 2017-05-13 13:17:37 JST; 6min ago
 Main PID: 3505 (smbd)
   Status: "smbd: ready to serve connections..."
   CGroup: /system.slice/smb.service
           tq3505 /usr/sbin/smbd
           tq3506 /usr/sbin/smbd
           tq3507 /usr/sbin/smbd
           tq3508 /usr/sbin/smbd
           mq3525 /usr/sbin/smbd

 5月 13 13:17:35 WSTD-RPI3 systemd[1]: Starting Samba SMB Daemon...
 5月 13 13:17:36 WSTD-RPI3 systemd[1]: smb.service: Supervising process 3505 which is not our child. We'll most likely not notice when it exits.
 5月 13 13:17:37 WSTD-RPI3 smbd[3505]: [2017/05/13 13:17:37.973496,  0] ../lib/util/become_daemon.c:124(daemon_ready)
 5月 13 13:17:37 WSTD-RPI3 smbd[3505]:   STATUS=daemon 'smbd' finished starting up and ready to serve connections
 5月 13 13:17:37 WSTD-RPI3 systemd[1]: Started Samba SMB Daemon.

・有効化して、自動起動にする。
$ systemctl enable smb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.


■NASアクセス確認(Windows)

・Windows(エクスプローラ)から確認してみる。
 IP指定で・・・

 資格情報が出てきたので、疎通は問題なし。
 それでは、NAS用のユーザとパスワードを入力する。

 NASディレクトリとして指定した「usb-m1」だけ出てきた。

 アクセスも問題なし。

・次はNAS専用ユーザのアクセスや読み書き確認のため、コマンドプロンプトから確認する。
 rootでアクセスできないことを確認する。
C:\>net use Y: \\192.168.1.100\usb-m1 XXXX /USER:root
システム エラー 1326 が発生しました。

ユーザー名またはパスワードが正しくありません。

 もちろんrpi-nasではアクセスできることを確認する。
C:\>net use Y: \\192.168.1.100\usb-m1 YYYY /USER:rpi-nas
コマンドは正常に終了しました。

 一応セッションも確認しておく。
C:\>net use
新しい接続は記憶されます。

ステータス  ローカル名 リモート名                ネットワーク名
-------------------------------------------------------------------------------
OK           Y:        \\192.168.1.100\usb-m1    Microsoft Windows Network
コマンドは正常に終了しました。

 ドライブを移動する。
C:\>y:
Y:\>

 ファイルを書き込む。
Y:\>echo NASアクセステスト > Nasアクセスの確認.txt
Y:\>dir
 ドライブ Y のボリューム ラベルは usb-m1 です
 ボリューム シリアル番号は E3F2-4B80 です

 Y:\ のディレクトリ

2017/05/13  14:27              .
2017/05/07  19:39              ..
2017/05/13  14:27                22 Nasアクセスの確認.txt
2017/05/07  19:44              lost+found
               1 個のファイル                  22 バイト
               3 個のディレクトリ  58,826,170,368 バイトの空き領域

 ファイル内容を読み込む。
Y:\>type Nasアクセスの確認.txt
NASアクセステスト

 ファイルを削除する。
Y:\>del Nasアクセスの確認.txt
Y:\>d

 一通りの操作は確認できた。


■NASアクセス確認(Android)

・ネットワーク内をスキャンすると、Raspberry PiのNAS(192.168.1.100)が出てきた。
 ※ESファイルエクスプローラを使用

 ユーザ・パスワードを入力する。

 Androidからも問題なくアクセスできた。


■ファイアウォール(firewalld)の設定 ※永続化

・永続化しておき、再起動してもSambaが許可されるようにする。
$ firewall-cmd --add-service samba --permanent
success


■SELinux(参考)

・SELinuxはファイルアクセスに影響を与えるようだが、
 今回のRaspberry Pi 3に載せたCentOS7からでは、
 特別な設定(SELinuxでSambaを許可したり、そもそもSELinuxを無効化したり)は不要だった。
 参考までに現状を以下の通り。
 【動作状況】
$ getenforce
Permissive

 【設定ファイル(初期状態)】
$ cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted



2017年5月19日金曜日

CentOS7(Raspberry Pi 3)にUSBメモリをマウントする
Raspberry Pi NAS化計画 第一弾として、
今回は手始めにUSBメモリをマウントしようと思う。


■本日の目標

Raspberry Pi 3に差したUSBメモリをCentOS7にマウントする


■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.3.1611 (Core)
・USBメモリ:64GB
 無線LANルータに差して簡易NAS化しているUSBメモリはこの旧製品。
 使い始めて4年くらい経つかな。
 トラブルらしいトラブルが発生したことも無いので、
 Raspberry Pi 3の外部記憶装置&簡易NASとして今回も使ってみようかと
 


■USBメモリをRaspberry Pi 3に差す



■ストレージ認識確認

・起動ログを確認してエラーが出ていないか確認する。
$ journalctl --dmesg --since="2017-05-07 14:33:00"
-- Logs begin at 木 1970-01-01 09:00:03 JST, end at 日 2017-05-07 19:08:28 JST. --
 5月 07 14:33:22 WSTD-RPI3 kernel: usb 1-1.2: USB disconnect, device number 4
 5月 07 14:33:22 WSTD-RPI3 kernel: sd 0:0:0:0: [sda] Synchronizing SCSI cache
 5月 07 14:33:22 WSTD-RPI3 kernel: sd 0:0:0:0: [sda] Synchronize Cache(10) failed: Result: hostbyte=0x01 driverbyte=0x00
 5月 07 14:33:32 WSTD-RPI3 kernel: usb 1-1.4: new high-speed USB device number 5 using dwc_otg
 5月 07 14:33:32 WSTD-RPI3 kernel: usb 1-1.4: New USB device found, idVendor=8564, idProduct=1000
 5月 07 14:33:32 WSTD-RPI3 kernel: usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
 5月 07 14:33:32 WSTD-RPI3 kernel: usb 1-1.4: Product: Mass Storage Device
 5月 07 14:33:32 WSTD-RPI3 kernel: usb 1-1.4: Manufacturer: JetFlash
 5月 07 14:33:32 WSTD-RPI3 kernel: usb 1-1.4: SerialNumber: 190HV45BHGI3WK33
 5月 07 14:33:32 WSTD-RPI3 kernel: usb-storage 1-1.4:1.0: USB Mass Storage device detected
 5月 07 14:33:32 WSTD-RPI3 kernel: scsi host0: usb-storage 1-1.4:1.0
 5月 07 14:33:34 WSTD-RPI3 kernel: scsi 0:0:0:0: Direct-Access     JetFlash Transcend 64GB   1100 PQ: 0 ANSI: 6
 5月 07 14:33:34 WSTD-RPI3 kernel: sd 0:0:0:0: Attached scsi generic sg0 type 0
 5月 07 14:33:34 WSTD-RPI3 kernel: sd 0:0:0:0: [sda] 123404288 512-byte logical blocks: (63.2 GB/58.8 GiB)
 5月 07 14:33:34 WSTD-RPI3 kernel: sd 0:0:0:0: [sda] Write Protect is off
 5月 07 14:33:34 WSTD-RPI3 kernel: sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00
 5月 07 14:33:34 WSTD-RPI3 kernel: sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 5月 07 14:33:34 WSTD-RPI3 kernel:  sda: sda1
 5月 07 14:33:34 WSTD-RPI3 kernel: sd 0:0:0:0: [sda] Attached SCSI removable disk
⇒USBポートの「4番ポート」で「Transcend 64GB」を認識していて、特に問題なさそうである。

・続いて、USBメモリのデバイス情報を確認する。
[root@WSTD-RPI3 ~]# fdisk -l
・・・(中略)・・・
Disk /dev/sda: 63.2 GB, 63182995456 bytes, 123404288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1              64   123404287    61702112    c  W95 FAT32 (LBA)


■ファイルシステムのフォーマット

・ext4でフォーマットする。
[root@WSTD-RPI3 ~]# mkfs -t ext4 -L usb1 /dev/sda1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=usb1
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3858432 inodes, 15425528 blocks
771276 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2164260864
471 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done


■手動マウント

・マウント先のディレクトリを作成する。
[root@WSTD-RPI3 ~]# ll /mnt/usb-m1
ls: /mnt/usb-m1 にアクセスできません: そのようなファイルやディレクトリはありません
[root@WSTD-RPI3 ~]# mkdir /mnt/usb-m1
[root@WSTD-RPI3 ~]# ll /mnt/usb-m1
合計 0

・USBメモリをマウントする。
 【マウント前】
[root@WSTD-RPI3 ~]# df -hT
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
/dev/root               ext4        13G  1.2G   11G   10% /
・・・(中略)・・・
//192.168.1.5/disk1_pt1 cifs        31G   24G  6.6G   79% /mnt/nas

 【手動マウント】
[root@WSTD-RPI3 ~]# mount /dev/sda1 /mnt/usb-m1

 【マウント後】
[root@WSTD-RPI3 ~]# df -hT
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
/dev/root               ext4        13G  1.2G   11G   10% /
・・・(中略)・・・
//192.168.1.5/disk1_pt1 cifs        31G   24G  6.6G   79% /mnt/nas
/dev/sda1               ext4        58G   53M   55G    1% /mnt/usb-m1

 マウント成功!

・念のため、ファイルアクセスできるか確認する。
[root@WSTD-RPI3 ~]# echo 'File Access Test' > /mnt/usb-m1/FileAccessTest.txt
[root@WSTD-RPI3 ~]# cat /mnt/usb-m1/FileAccessTest.txt
File Access Test
[root@WSTD-RPI3 ~]# ll /mnt/usb-m1/
合計 20
-rw-r--r--. 1 root root    17  5月  7 19:50 FileAccessTest.txt
drwx------. 2 root root 16384  5月  7 19:44 lost+found
[root@WSTD-RPI3 ~]# rm -f /mnt/usb-m1/FileAccessTest.txt
[root@WSTD-RPI3 ~]# ll /mnt/usb-m1/
合計 16
drwx------. 2 root root 16384  5月  7 19:44 lost+found

最後に先日設定したNAS(http://jyugem2.blogspot.com/2017/05/centos7raspberry-pi-3nas.html)と同じように、自動マウント設定を行う。


■自動マウント設定

・USBメモリのUUIDを確認する。
 デバイス名(/dev/sda1)でもマウントできるが、
 OS起動時にデバイス名が変わる可能性があるようなので、
 UUIDでマウントできるよう、先にUUIDを確認する。
[root@WSTD-RPI3 ~]# blkid /dev/sda1
/dev/sda1: LABEL="usb1" UUID="9bac3d7f-f683-486e-933a-aca89fe780b4" TYPE="ext4"

・「/etc/fstab」に追記する。
[root@WSTD-RPI3 ~]# echo 'UUID=9bac3d7f-f683-486e-933a-aca89fe780b4 /mnt/usb-m1 ext4 defaults 0 0' >> /etc/fstab
[root@WSTD-RPI3 ~]# cat /etc/fstab
#Generated by RootFS Build Factory
LABEL=BE340262 /boot vfat noatime 0 0
UUID=bbeea6fb-d6b5-4364-8075-f49e4c241a22 swap swap noatime 0 0
UUID=83fb5392-803c-4387-a70e-a3d23b5d2c6c / ext4 noatime 0 0
//192.168.1.5/disk1_pt1 /mnt/nas cifs username=XXXX,password= XXXX
UUID=9bac3d7f-f683-486e-933a-aca89fe780b4 /mnt/usb-m1 ext4 defaults 0 0

・最後に再起動して自動マウントされたか確認する。
[root@WSTD-RPI3 ~]# reboot
・・・(再起動待ち)・・・
[root@WSTD-RPI3 ~]# df -hT
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
/dev/root               ext4        13G  1.2G   11G   10% /
・・・(中略)・・・
/dev/sda1               ext4        58G   53M   55G    1% /mnt/usb-m1
//192.168.1.5/disk1_pt1 cifs        31G   24G  6.6G   79% /mnt/nas

2017年5月18日木曜日

CentOS7でRaspberry Pi 3のvcgencmdを使う
vcgencmdコマンドはRaspberry Piでシステム内部情報が取得できるコマンドだが、
CentOS7の初期状態では使おうとしてもエラー(コマンドが見つからない)となってしまう。
何となく悔しいのでRaspbianだけではなくCentOS7で何とか利用できるようにしてみたい。


■本日の目標

・vcgencmdコマンドはCentOS7を載せたRaspberry Piで実行する


■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.3.1611 (Core)


■vcgencmdの場所

・ところでvcgencmdはどこにいるのだろうか・・・。
 それがわからないとどうにもならない。
 ・・・そもそも見つからなかったら・・・これでおしまいなのだが・・・。
 早速探してみる。
$ find / -name "vcgencmd"
/opt/vc/bin/vcgencmd


■試しにvcgencmdを動かしてみる

・vcgencmdが見つかったので、とりあえず電圧を計るコマンドで試してみる。
$ /opt/vc/bin/vcgencmd measure_volts core
/opt/vc/bin/vcgencmd: error while loading shared libraries: libvchiq_arm.so: cannot open shared object file: No such file or directory
動かないか・・・。
 エラーメッセージからすると、libvchiq_arm.soとやらが無いようだ。

 では、vcgencmdの利用ライブラリを確認しよう。
$ ldd /opt/vc/bin/vcgencmd
        linux-vdso.so.1 =>  (0x7ee61000)
        libvchiq_arm.so => not found
        libvcos.so => not found
        libpthread.so.0 => /lib/libpthread.so.0 (0x76f93000)
        libdl.so.2 => /lib/libdl.so.2 (0x76f7d000)
        librt.so.1 => /lib/librt.so.1 (0x76f66000)
        libc.so.6 => /lib/libc.so.6 (0x76e15000)
        /lib/ld-linux-armhf.so.3 (0x54b9d000)
確かに「libvchiq_arm.so」が無いようだ。

 ※lddコマンドとは「共有ライブラリへの依存関係を表示する」コマンドで、
  依存関係のあるライブラリの場所を確認することが可能。


■エラー解消

・次は、本当に「libvchiq_arm.so」が無いのか探してみよう。
$ find / -name "libvchiq_arm.so"
/opt/vc/lib/libvchiq_arm.so
/opt/vc/lib配下にあった。

 近所にあったけど参照されていなかったのね・・・。
 ・・・というわけで、共有ライブラリへパスを通して参照できるようにしてみよう。
 【変更前】
$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf

 【編集】
$ echo '/opt/vc/lib' >> /etc/ld.so.conf

 【変更後】
$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/opt/vc/lib

 【キャッシュ化】
$ ldconfig
※OSの仕組みとして、速度向上のためキャッシュファイルからライブラリパスを参照しているので、
  上記コマンドで設定ファイルの内容をキャッシュファイルに反映している。


■vcgencmdの起動確認

・先ほどと同じように、電圧を計るコマンドで確認する。
$ /opt/vc/bin/vcgencmd measure_volts core
volt=1.2000V
電圧が取れた!


■Path追加

・最後に「/opt/vc/bin」にパスを通して、Raspbianと同じように実行モジュール単体指定で起動できるようにする。
 一時的であれば、
$ export PATH=$PATH:/opt/vc/bin
で良いけど、
 恒久的にパスを通しておきたいので、「/etc/profile」の末尾にパスを追記する。
$ echo 'export PATH=$PATH:/opt/vc/bin' >> /etc/profile
(恒久対応の上記コマンドの内容は、次回セッションから有効なので注意)

 これでRaspbianと同じように「vcgencmd」だけで結果が取れるようになった。
$ vcgencmd measure_volts core
volt=1.2000V


■vcgencmdで取得できる主な情報

【ファームウェアのバージョン】
$ vcgencmd version
Feb 26 2017 20:30:04
Copyright (c) 2012 Broadcom
version 6e74add571c9691b108c68f29c3f45374cac24e6 (clean) (release)
【CPUの温度】
$ vcgencmd measure_temp
temp=40.8'C
【CPUの動作周波数】
$ vcgencmd measure_clock arm
frequency(45)=600000000
【CPUの動作電圧】
$ vcgencmd measure_volts
volt=1.2000V
【メモリ割当(前者はCPU、後者はGPU)】
$ vcgencmd get_mem arm
arm=944M
$ vcgencmd get_mem gpu
gpu=64M