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

2017年5月17日水曜日

CentOS7(Raspberry Pi 3)にNASをマウントする
LinkStation LS-VLの代替として
当時行き着いた先のUSBメモリ(苦笑)のNASをRaspberry Pi 3にマウントしてみる。
また、自動マウントすることで毎回手動マウントしないようにする。


■本日の目標

・無線LANルータで簡易NAS化したUSBメモリをマウントする。


■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.3.1611 (Core)
・NAS:無線LANルータに刺したUSBメモリ(32GB)
    ⇒フォーマット:XFS


■NASをマウント(NFSタイプ:CIFS)

・まずはマウント先のディレクトリを作成する
$ mkdir /mnt/nas
$ ll /mnt/nas/
合計 0

・次はマウント先のディレクトリを調べる
 ※NAS(無線LANルータ)のIPアドレスがわかっていることが前提
$ smbclient -L 192.168.1.5 -U%
Domain=[XXXX] OS=[Unix] Server=[Samba 3.0.24-1.35_OSSTECH]

        Sharename       Type      Comment
        ---------       ----      -------
        disk1_pt1       Disk      auto-mount (disk1/part1)
        IPC$            IPC       IPC Service ()
・・・(以下、略)・・・

 disk1_pt1がマウントしたいディレクトリであることがわかった。

・続いてマウント
$ mount -t cifs //192.168.1.5/disk1_pt1 /mnt/nas -o username=XXXX
Password for XXXX@//192.168.1.5/disk1_pt1:
$ ll /mnt/nas/
合計 4096
drwxrwxrwx.   2 65534 65534     0 10月 29  2016 apps
drwxrwxrwx.   6 65534 65534     0  1月 16 21:56 document
drwxrwxrwx.   2 65534 65534     0  4月 23  2016 movie
drwxrwxrwx. 172 65534 65534     0  8月  9  2016 music
drwxrwxrwx.   3 65534 65534     0  7月  6  2015 photo

・ちなみにアンマウントする場合は次のコマンドで。
$ umount /mnt/nas


最後に自動マウントの設定を行う。


■/etc/fstabを設定する

・マウント設定前にファイルシステムの情報を取得する。
$ df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/root      ext4        13G  1.2G   11G   10% /
・・・(以下、略)・・・

・/etc/fstab ファイルにマウント情報を追記する。
$ echo '//192.168.1.5/disk1_pt1 /mnt/nas cifs username=XXXX,password=XXXX' >> /etc/fstab
$ cat /etc/fstab
#Generated by RootFS Build Factory
・・・(中略)・・・
//192.168.1.5/disk1_pt1 /mnt/nas cifs username=XXXX,password=XXXX

・マウントを実行する。
$ mount -a

・マウント結果を確認する。
$ df -hT
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
/dev/root               ext4        13G  1.2G   11G   10% /
・・・(中略)・・・
//192.168.1.5/disk1_pt1 cifs        31G   24G  6.6G   79% /mnt/nas

・NASのディレクトリ詳細が参照できればOK。
$ ls -l /mnt/nas
合計 4096
drwxrwxrwx.   2 65534 65534     0 10月 29  2016 apps
drwxrwxrwx.   6 65534 65534     0  1月 16 21:56 document
drwxrwxrwx.   2 65534 65534     0  4月 23  2016 movie
drwxrwxrwx. 172 65534 65534     0  8月  9  2016 music
drwxrwxrwx.   3 65534 65534     0  7月  6  2015 photo

・最後に再起動して、マウントが維持されていることを確認する。
$ reboot


■残課題

・自動マウントには「/etc/fstab」と「autofsサービス」の方法があるが、
 両者の違いを簡単に表現すると、
  /etc/fstab  :常時接続
  autofsサービス:随時接続
 となるだろうか。
 実行環境がRaspberry Pi 3となり、
 一般的なサーバと比較するとリソースを大量消費できないため、
 「autofsサービス」を使いたいところだったが、どうにも上手くマウントうまくできなかった。
 サービスは問題なく起動していた(/var/log/messagesにもエラー無し)ので、後日もう少し調査してみたい。

2017年5月16日火曜日

Raspberry Pi 3に入れたCentOS7のエラー対策
Raspberry Pi 3にCentOS7を入れてから初期作業が終わったので、
起動エラーとなっているサービスを確認して、エラーサービスを無くそうと思う。


■本日の目標

・CentOS7のサービスで起動に失敗しているサービスを無くす


■主な作業環境

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


■起動失敗サービスの確認

・systemctlのステータスを確認すると、3件ほど起動に失敗しているようだ。
$ systemctl status
● WSTD-RPI3
    State: degraded
     Jobs: 0 queued
   Failed: 3 units
 (以下、略)

 続いて、失敗した3件のサービスを確認する。
$ systemctl | grep failed
● kdump.service           loaded failed failed    Crash recovery kernel arming
● network.service         loaded failed failed    LSB: Bring up/down networking
● postfix.service         loaded failed failed    Postfix Mail Transport Agent


■kdumpサービスの対策

・kdumpとは、カーネルパニックが起きたときに
 原因特定のためのdumpファイルを保存してくれるサービスだそうだ。
 では、起動失敗の原因を調べてみる。
 まずはサービスの起動結果を見る。
$ systemctl status kdump.service
● kdump.service - Crash recovery kernel arming
  Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
  Active: failed (Result: exit-code) since 木 1970-01-01 09:00:21 JST; 47 years 3 months ago
 Process: 368 ExecStart=/usr/bin/kdumpctl start (code=exited, status=1/FAILURE)
Main PID: 368 (code=exited, status=1/FAILURE)

1月 01 09:00:18 WSTD-RPI3 systemd[1]: Starting Crash recovery kernel arming...
1月 01 09:00:21 WSTD-RPI3 kdumpctl[368]: Kdump is not supported on this kernel
1月 01 09:00:21 WSTD-RPI3 kdumpctl[368]: Starting kdump: [FAILED]
1月 01 09:00:21 WSTD-RPI3 systemd[1]: kdump.service: main process exited, code=exited, status=1/FAILURE
1月 01 09:00:21 WSTD-RPI3 systemd[1]: Failed to start Crash recovery kernel arming.
1月 01 09:00:21 WSTD-RPI3 systemd[1]: Unit kdump.service entered failed state.
1月 01 09:00:21 WSTD-RPI3 systemd[1]: kdump.service failed.

 ログの2行目にこのカーネルではサポートされていないと書かれている。
 
 ・・・なんとかやりようがあるんだろうけど、今回は無効化してしまう。
$ systemctl disable kdump
Removed symlink /etc/systemd/system/multi-user.target.wants/kdump.service.


■Postfixサービスの対策

・Postfixはsendmailに代わるCentOS7の標準MTA(メール転送エージェント)。
 今後やりたいことがあるので正常起動だけでも確認したい。

 まずはサービスの起動結果を見る。
$ systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 木 1970-01-01 09:00:20 JST; 47 years 3 months ago

 1月 01 09:00:18 WSTD-RPI3 systemd[1]: Starting Postfix Mail Transport Agent...
 1月 01 09:00:18 WSTD-RPI3 aliasesdb[366]: /usr/sbin/postconf: fatal: parameter inet_interfaces: no local interface found for ::1
 1月 01 09:00:19 WSTD-RPI3 postfix/sendmail[615]: fatal: parameter inet_interfaces: no local interface found for ::1
 1月 01 09:00:19 WSTD-RPI3 aliasesdb[366]: newaliases: fatal: parameter inet_interfaces: no local interface found for ::1
 1月 01 09:00:19 WSTD-RPI3 postfix[646]: fatal: parameter inet_interfaces: no local interface found for ::1
 1月 01 09:00:20 WSTD-RPI3 systemd[1]: postfix.service: control process exited, code=exited status=1
 1月 01 09:00:20 WSTD-RPI3 systemd[1]: Failed to start Postfix Mail Transport Agent.
 1月 01 09:00:20 WSTD-RPI3 systemd[1]: Unit postfix.service entered failed state.
 1月 01 09:00:20 WSTD-RPI3 systemd[1]: postfix.service failed.

 うーむ・・・「::1」のオンパレード。
 おそらく先日無効化したIPv6に関するエラーだろう。

 「『::1』のインタフェースが見つからん」と言っているので、どこかに固有設定があると思われる。

 いろいろGrepして辿り着いたのがhostsファイルだった。
$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 この2行目の「::1」の部分をコメントアウトする。(viコマンドで)
$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 それでは起動してみよう。
$ systemctl start postfix.service
$ systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2017-05-01 15:17:57 JST; 1s ago
  Process: 1039 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 1036 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 1032 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 1111 (master)
   CGroup: /system.slice/postfix.service
           tq1111 /usr/libexec/postfix/master -w
           tq1112 pickup -l -t unix -u
           mq1113 qmgr -l -t unix -u

 5月 01 15:17:54 WSTD-RPI3 systemd[1]: Starting Postfix Mail Transport Agent...
 5月 01 15:17:57 WSTD-RPI3 postfix/master[1111]: daemon started -- version 2.10.1, configuration /etc/postfix
 5月 01 15:17:57 WSTD-RPI3 systemd[1]: Started Postfix Mail Transport Agent.

 復旧成功!


■networkの対策

・最後はnetworkサービス。
 これは読んで字の如くのことをしてくれるサービスだが・・・なぜ失敗しているのだろうか?
 
 これもサービスの起動結果を見る。
$ systemctl status network.service
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since 木 1970-01-01 09:00:18 JST; 47 years 3 months ago
     Docs: man:systemd-sysv-generator(8)

 1月 01 09:00:18 WSTD-RPI3 systemd[1]: Starting LSB: Bring up/down networking...
 1月 01 09:00:18 WSTD-RPI3 systemd[1]: network.service: control process exited, code=exited status=6
 1月 01 09:00:18 WSTD-RPI3 systemd[1]: Failed to start LSB: Bring up/down networking.
 1月 01 09:00:18 WSTD-RPI3 systemd[1]: Unit network.service entered failed state.
 1月 01 09:00:18 WSTD-RPI3 systemd[1]: network.service failed.

 インタフェースの上げ下げに失敗しているのかな・・・?
 調べていて行き着いた先が海外のフォーラムだった。
 どうやらRaspberry Piが以前から抱えている問題のようで同様の事象があった模様。
 回避策としては「/etc/sysconfig/network」の空ファイルを作成するだけ。
 
 では、やってみよう。
$ cat /etc/sysconfig/network
cat: /etc/sysconfig/network: そのようなファイルやディレクトリはありません
$ touch /etc/sysconfig/network
$ systemctl restart network
$ systemctl status network
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: active (exited) since 月 2017-05-01 15:57:01 JST; 1min 21s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 754 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)

 5月 01 15:56:57 WSTD-RPI3 systemd[1]: Starting LSB: Bring up/down networking...
 5月 01 15:56:59 WSTD-RPI3 network[754]: ループバックインターフェイスを呼び込み中 [  OK  ]
 5月 01 15:57:01 WSTD-RPI3 network[754]: インターフェース eth0 を活性化中:  接続が正常にアクティベートされました (D-Bus アクティブパス:/org/freedesktop/N…onnection/1)
 5月 01 15:57:01 WSTD-RPI3 network[754]: [  OK  ]
 5月 01 15:57:01 WSTD-RPI3 systemd[1]: Started LSB: Bring up/down networking.

 起動成功!
 
 ただ・・・元々、外部アクセスに問題があったわけではなかったし、
 どんな問題を抱えていたのかわからないというのが本当のところ・・・。
 
 network.serviceの起動エラーの回避策は色々見つかったけど、環境によって対応内容はそれぞれ異なるようだ。
 「NetworkManager-wait-online.serviceを自動起動にする」とか、
 他にも2~3個試してみたけど、どれもダメで、結局辿り着いたのが↑の方法だった。


■結果

・起動失敗したサービスがなくなってスッキリ!
$ systemctl status
● WSTD-RPI3
    State: running
     Jobs: 0 queued
   Failed: 0 units
 (以下、略)



2017年5月15日月曜日

Raspberry Pi 3(OS:CentOS7)のアップデート
外部アクセスできることを確認して、
Raspberry Piのファームウェア更新とか、CentOS7のアップデートをしてみる。


■本日の目標

・Raspberry Pi 3をアップデートする


■主な作業環境

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


■外部アクセス(インターネット接続)の確認

・GoogleにPingを投げる。
$ ping -c 2 www.google.co.jp
PING www.google.co.jp (216.58.220.227) 56(84) bytes of data.
64 bytes from nrt13s37-in-f3.1e100.net (216.58.220.227): icmp_seq=1 ttl=54 time=5.26 ms
64 bytes from nrt13s37-in-f3.1e100.net (216.58.220.227): icmp_seq=2 ttl=54 time=5.31 ms

--- www.google.co.jp ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 5.265/5.290/5.315/0.025 ms

 問題なく通ってる。


■ファームウェアを更新

「rpi-update」を使ってアップデートする
$ rpi-update
-bash: rpi-update: コマンドが見つかりません

 残念ながら入っていないようなので、Hexxeh/rpi-updateからインストールする。
$ curl -L --output /usr/bin/rpi-update https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update && chmod +x /usr/bin/rpi-update
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12762  100 12762    0     0   8360      0  0:00:01  0:00:01 --:--:--  8368

 それではアップデート開始
$ rpi-update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** We're running for the first time
 *** Backing up files (this will take a few minutes)
 *** Backing up firmware
 *** Backing up modules 4.4.33-v7.1.el7
#############################################################
This update bumps to rpi-4.9.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=167934
##############################################################
 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168    0   168    0     0    109      0 --:--:--  0:00:01 --:--:--   109
100 53.8M  100 53.8M    0     0   668k      0  0:01:22  0:01:22 --:--:--  337k
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 4.9.25-v7+
 *** depmod 4.9.25+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to a86bfee5b47a74c13056997f1e4d8b9d8090b398
 *** A reboot is needed to activate the new firmware

 アップデート成功!

 再起動してSSH接続できればひとまず安心。
$ reboot


■OSもアップデート

・ついでにOSもアップデートする。
$ yum update
・・・
(長いので省略・・・3回くらいYes/Noクエスチョンあり)
・・・
完了しました!

 うつらうつらしてたら終わってた。
 TeraTermの自動ログから20分掛かってた模様。

 たびたびだけど、再起動して問題ないか確認。
$ reboot

 ・・・いつもは1分もすれば戻ってきたけど、
 アップデート後の初回起動のためか、5分くらい復旧しなくて軽く焦った。
 Raspberry Piのインジゲータも普段通りでどうなってるのかわからなかった。
 こういうときモニタで表示させてると経過がわかっていいんだろうな。



最後に・・・
必ずしもアップデートをすれば幸せになれるわけではない(むしろ不利益の方が多い可能性もある)けど、これも一つ勉強ということで。

2017年5月12日金曜日

Raspberry Pi 3に接続した5Vファンが全力過ぎたので調節してみる
ファンがものすごい勢いで回り続けていて、もはや騒音レベル・・・。
公式ドキュメントでGPIOの配置を見ると、5Vだけではなく3.3Vの供給源もあるので、
3.3Vに変更することでファンの回転数を減らしてみる。


■本日の目標

・Raspberry Pi 3に接続した5Vファンの回転数を減らす


■主な作業環境

・Raspberry Pi 3 Model B (搭載OS:CentOS7)
・ファン付き保護ケース +ヒートシンクセット
 ⇒ファンの仕様:5V/0.2A
 


■5Vファンの接続端子を外す

・精密ドライバー(-)を使って、接続端子を外す
 ↓のように軽く押し込むとすぐに外れる 



■GPIOの配列確認

公式ドキュメントでGPIOの配置を確認する。
 現状は配列番号で表すと「赤線:12番=5V、黒線:13番=Ground」で繋いでいた。
 この状態から赤線を「1番=3.3V」に繋ぐことで、3Vに降圧してみる。


■接続端子を繋ぎ直す

・13番=Groundに黒線を繋いで、1番=3.3Vに赤線を繋ぐ。
※この写真では一時的な検証のため接続端子を裸で繋いだけど、
  他のピンに触れると基盤によろしくないので、恒久的には絶縁すべき。
  

■Raspberry Piの電源を入れる

・明らかに回転数が減った・・・。
 これまで「ブオオオオオオオオーーーーーーーー!!!」と、
 と喚き散らしていたファンがだいぶ大人しくなった。
 4割減くらいか?

 ちなみにCPU温度を見ると・・・
$ cat /sys/class/thermal/thermal_zone0/temp
39704
こんな感じで、大体39℃台で推移してた。
 ※ファンを外して放置しておくと48℃くらいだった。



これが時間帯とかCPU温度によって回転数が調節できればいいんだけどな。

2017年5月11日木曜日

Raspberry Pi 3上のCentOS7の初期設定
Raspberry Pi 3にCentOS7が入ったので、最低限の初期設定を行う。



■本日の目標

・必要最低限の設定を入れる


■キーボード&文字コード設定

・基本はSSH接続だけど、直接操作するときのために
 109キー日本語レイアウトのキーボードの設定を行う。
 【変更前】
$ localectl
   System Locale: n/a

       VC Keymap: n/a
      X11 Layout: n/a

 【コマンド】
$ localectl set-keymap jp106
$ localectl set-keymap jp-OADG109A
$ localectl set-locale LANG=ja_JP.utf8

 【変更後】
$ localectl
   System Locale: LANG=ja_JP.utf8
       VC Keymap: jp-OADG109A
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp


■rootパスワード変更

・念のため、パスワードを変えておく
$ passwd
Changing password for user root.
New password:            # ←新しいパスワードを入力(表示されないので注意)
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:     # ←もう一度入力
passwd: all authentication tokens updated successfully.

■パーティション拡張

・16GBのmicroSDカードを使ってるのでそれ相応のサイズを認識しているようだが、
 実際に使える領域が少なすぎるのでパーティションの拡張も行う。
 【変更前】
$ fdisk -l

Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes, 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0006dc70

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            2048     1026047      512000    c  W95 FAT32 (LBA)
/dev/mmcblk0p2         1026048     2074623      524288   82  Linux swap / Solaris
/dev/mmcblk0p3         2074624     6268927     2097152   83  Linux
$
$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4      2.0G  748M  1.1G  41% /
devtmpfs       devtmpfs  459M     0  459M   0% /dev
tmpfs          tmpfs     463M     0  463M   0% /dev/shm
tmpfs          tmpfs     463M   12M  451M   3% /run
tmpfs          tmpfs     463M     0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat      500M   43M  457M   9% /boot
tmpfs          tmpfs      93M     0   93M   0% /run/user/0

 【コマンド】
$ touch /.rootfs-repartition
$ reboot

 【変更後】 ついでにさっき変更したSystemLocaleも反映されたようで・・・
$ fdisk -l

Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes, 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x0006dc70

  デバイス ブート      始点        終点     ブロック   Id  システム
/dev/mmcblk0p1            2048     1026047      512000    c  W95 FAT32 (LBA)
/dev/mmcblk0p2         1026048     2074623      524288   82  Linux swap / Solaris
/dev/mmcblk0p3         2074624     6268927     2097152   83  Linux

$ df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/root      ext4       2.0G  748M  1.1G   41% /
devtmpfs       devtmpfs   459M     0  459M    0% /dev
tmpfs          tmpfs      463M     0  463M    0% /dev/shm
tmpfs          tmpfs      463M   12M  451M    3% /run
tmpfs          tmpfs      463M     0  463M    0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat       500M   43M  457M    9% /boot
tmpfs          tmpfs       93M     0   93M    0% /run/user/0

 ・・・ん?・・・変更されない・・・??

 ちょっと他の方法で試してみる。
 ⇒こちらのサイトを参考にさせていただいた。

 【再変更後】
$ fdisk -l

Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes, 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x0006dc70

  デバイス ブート      始点        終点     ブロック   Id  システム
/dev/mmcblk0p1            2048     1026047      512000    c  W95 FAT32 (LBA)
/dev/mmcblk0p2         1026048     2074623      524288   82  Linux swap / Solaris
/dev/mmcblk0p3         2074624    29218815    13572096   83  Linux

$ df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/root      ext4        13G  752M   12G    7% /
devtmpfs       devtmpfs   459M     0  459M    0% /dev
tmpfs          tmpfs      463M     0  463M    0% /dev/shm
tmpfs          tmpfs      463M   12M  451M    3% /run
tmpfs          tmpfs      463M     0  463M    0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat       500M   43M  457M    9% /boot
tmpfs          tmpfs       93M     0   93M    0% /run/user/0 

 パーティションサイズの拡張に成功!


■タイムゾーン設定

・時間がおかしかったのでタイムゾーンも見直す
 【変更前】
$ timedatectl
      Local time: 日 2017-04-30 13:01:28 UTC
  Universal time: 日 2017-04-30 13:01:28 UTC
        RTC time: n/a
       Time zone: UTC (UTC, +0000)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

 【コマンド】
$ timedatectl set-timezone Asia/Tokyo

 【変更後】
$ timedatectl
      Local time: 日 2017-04-30 22:01:45 JST
  Universal time: 日 2017-04-30 13:01:45 UTC
        RTC time: n/a
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

■NTP設定

・NTPと言えばNtpdだろうと調べてみたが、CentOS7の標準ではChronyというもので同期しているようだ。
 特にこだわりはないし、そのままChronyを使って、日本の標準時を扱っているNICTで同期する。
 【変更前】
$ 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).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
(以降、省略)

 【コマンド】
 viコマンドで編集
 「server ntp.nict.jp iburst」を追加

 【変更後】
$ 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).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
server ntp.nict.jp iburst      # ←追加
(以降、省略)

 設定反映のため、サービスを再起動しておく
$ systemctl restart chronyd

$ systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2017-04-30 22:13:29 JST; 3s ago
  Process: 1069 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 1063 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 1067 (chronyd)
   CGroup: /system.slice/chronyd.service
           mq1067 /usr/sbin/chronyd

 4月 30 22:13:29 centos-rpi3 systemd[1]: Starting NTP client/server...
 4月 30 22:13:29 centos-rpi3 chronyd[1067]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +DEBUG +ASYNCDNS  +IPV6 +SECHASH)
 4月 30 22:13:29 centos-rpi3 chronyd[1067]: Frequency 7.325 +/- 8.156 ppm read from /var/lib/chrony/drift
 4月 30 22:13:29 centos-rpi3 systemd[1]: Started NTP client/server.


■IPv6無効化

・内部ネットワークでIPv6を使ってないし、
 また割り当てミスが発生しても困るので、IPv6を無効化しておく。
 【変更前】
$ cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

 【コマンド】
$ echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
$ echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf

 【変更後】
$ cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1 

 仕上げに
$ sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
で設定反映完了。

 ifconfigでIPアドレスを確認してみると、IPv6の項目が無くなった。
$ ifconfig
eth0: flags=XXXX  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        ether XX:XX:XX:XX:XX:XX  txqueuelen 1000  (Ethernet)
    (以降、省略)


■ホスト名を変更

・デフォルトの「centos-rpi3」でもいいんだけど、味気ないので変更しておく。
 【変更前】
$ cat /etc/hostname
centos-rpi3

 【コマンド】
 viコマンドで編集
 ⇒適宜書き換えて再起動
  


他には「SELinux」とか「firewalld」の設定もしようと思ったけど、
必要になったら(問題が発生したら)対応することにする。

2017年5月10日水曜日

Raspberry Pi 3上のCentOS7にSSH接続する
今回の方法ならUSBキーボード無しでもできた(※)けど、
事前確認で何度か試してみたところ、
どういうわけかIPv6が邪魔したのかIPv4のアドレスの割り当てに失敗して、
作業PCからSSH接続できない(そもそもPingが通らない)状況が何度もあったので、
ハマっても困らないように今回はキーボードを用意して対応した。

※Raspberry Pi起動後に、
 ・同一ネットワーク内の端末からPingを投げまくって探索する方法
  や
 ・ルータやウィルス対策ソフトの機能を使って接続端末を解析する方法
 でDHCP割り当てされたIPアドレスを調べることもできる。


■本日の目標

・Raspberry Piに固定IPを割り当てて、作業PCからリモートアクセスできるようにする
 

■事前準備

・作業PCにTeraTermをインストールしておく
 (TeraTermでなくても、SSH接続できるターミナルであればOK)


■主な作業環境

・作業PC(OS):Windows10 Pro 64bit
・Raspberry Pi 3 Model B (搭載OS:CentOS7)


■rootログイン

centos-rpi3 login: root
Password:
     ↑表示されないけど、初期パスワードの「centos」を打ち込む


■Raspberry Piに割り当てられたIPアドレスを調べる

$ ifconfig
 eth0: flafs=9999 mtu 1500
         inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
         inet6 *******
これで「192.168.1.10」が割り当てられていることがわかった

 ・・・さっきは上手くいかなかったんだけどな・・・
 やっぱりキーボード要らなかった(苦笑)


■SSH接続

・TeraTermを起動して、ホストに「192.168.1.10」を指定する 

・ユーザ名とパスフレーズを入力する 

・SSH接続完了! 

 ここまでできればHDMIケーブルを外してもOK


■Raspberry Piに固定IPを設定する

・「/etc/sysconfig/network-scripts/ifcfg-eth0」に色々書かれてたので、これを編集する
 【変更前】
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
DEFROUTE="yes"
NAME="eth0"
UUID="a5ae9a6c-3951-4e8a-b99d-a4ea5dc33bf1"
ONBOOT="yes"

 では、viコマンドで書き換え
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0

 【変更後】
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static" # ←静的IPに変更
NM_CONTROLLED="yes"
DEFROUTE="yes"
NAME="eth0"
UUID="a5ae9a6c-3951-4e8a-b99d-a4ea5dc33bf1"
ONBOOT="yes"
IPADDR="192.168.1.100" # ←ローカルネットワーク内の任意のIPを指定
NETMASK="255.255.255.0" # ←ローカルネットワーク内で定めたアドレスを指定
            #  (特殊な環境でなければ「255.255.255.0」で問題なし)
GATEWAY="192.168.1.1"  # ←どこを経由してアクセスするか?
            #  (これも特殊な環境でなければブロードバンドルーターだろう)
DNS1="192.168.1.1"   # ←名前解決をどこでするか?
            #  (GATEWAY同様・・・こだわりが無ければ・・・略)

 設定内容の反映とIPアドレスの固定割り当ての確認をするために、
 Raspberry Piを再起動する
$ reboot


■SSH接続確認

・TeraTermを起動して、固定割り当てした「192.168.1.100」をホストに指定する 
認証ダイアログが出たので、IPアドレスの割り当ては成功した模様


これで不意に再起動したりしても作業PCから固定IPでリモートアクセスできるから安心だ。



次回はCentOS7の初期設定を行う。

2017年5月9日火曜日

Raspberry Pi 3でCentOS7を動かす
Raspberry PiならOSは「Raspbian」なんだろうけど、
RedHat系Linux環境が勉強用に欲しかったのでCentOS7にした。
勉強用ならVirtualBoxで十分だけど、普段使いのノートPCがだいぶ型落ちなのでね。
常時起動で気が向いたときにすぐにアクセスできるようにしておきたいし。


■本日の目標

microSDカードにOSイメージを書き込んで、Raspberry Pi 3でCentOS7を立ち上げる


■事前準備

・microSDカード:16GB
 家にあった余り物・・・以前スマホに刺してたヤツ・・・だと思う
 
・LANケーブル
・HDMIケーブル
・USBキーボード


■主な作業環境

・作業PC(OS):Windows10 Pro 64bit
・microSDカード:SanDisk microSDHC Class10 16GB


■OSイメージのダウンロード

↓のページの2行目・・・「RaspberryPi3 (img)」のリンクからダウンロード
 https://wiki.centos.org/Download#head-699c9997f447ac08ae07615de78686e973eb2d89
 ⇒Arch:armhfp (Arm32)、Images:RaspberryPi3 (img) 

 ・・・312MBあるみたいなので、しばし待つ・・・

 IEEE802.11acが使えなければ有線LANでダウンロードすることをおすすめする。
 ダウンロードサイトの回線状況もあるのだろうけど、かなり待った・・・。(2時間近く)


■OSイメージの書き込みソフトの準備

ダウンロードが終わるまでイメージファイルの書き込みソフトを準備する。
 シリコンリナックス社の「DD for Windows」を使わせていただく。
 http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows
 ⇒「ダウンロード」の項目から・・・
  (2017/4/29時点、最新バージョンは「Ver.0.9.9.8」だった)
 

■OSイメージをSDカードに書き込む

ダウンロード完了!
 「CentOS-Userland-7-armv7hl-Minimal-1611-RaspberryPi3.img.xz」というファイルで見慣れない拡張子だった。
 調べてみると、どうやらデータ圧縮の一種らしい・・・7-Zipで解凍できるらしい・・・。
 ・・・ということで前に何かの用でインストールしてた7-Zipで解凍する。

 「CentOS-Userland-7-armv7hl-Minimal-1611-RaspberryPi3.img」というファイルが出てきたので、これをSDカードに書き込む。
 
 まずはSDカードリーダーにmicroSDカードを差し込む 

 続いて「DD for Windows」を起動
 ※環境によっては「管理者権限」で起動

 「ディスク選択」をして・・・ ※ドライブ選択に注意!
「ディスク選択」ボタンを押すと表示されるダイアログ

 「ファイル選択」でOSイメージを指定する
「ファイル選択」ボタンを押すと表示されるダイアログ

 最後に「<< 書込 <<」ボタンを押す
 (いくつかアラートが出るので作業ミスが無いかよく確認すること)

 ・・・書き込み中・・・ 

 書き込み完了!(15分くらい掛かった) 


■起動準備(SDカード設置、他)

1.Raspberry PiにmicroSDカードとACアダプタを差し込む
  ※この段階ではまだACアダプタを電源に差し込まない
  SDカードの差し込み口は裏側  

 2.Raspberry Piとモニタ替わりのTVをHDMIケーブルで繋ぐ
 3.Raspberry Piを無線LAN-APにLANケーブルで繋ぐ
 4.Raspberry PiとUSBキーボードを繋ぐ  


■インストール&起動

ACアダプタをコンセントに差し込んで電源ON!!これだけ!! 
あっという間にCentOS7のログイン画面に切り替わった

 うーむ・・・それにしてもファンが全速力過ぎて引くわ・・・。

とりあえず作業完了!



次回からCentOS7のセットアップをしていく。

2017年5月8日月曜日

Raspberry Pi 3の組み立て
かねてより自宅ではLinkStation LS-VLでNASを動かしていたが、
頻繁にエラーが発生したり、熱量がひどかったりして、
24時間安定稼働できなかったので、ここ一年以上停止させた状態になっていた。

この代替として前々からRaspberry Piが気になっていたが、
Raspberry Piのスペック的にやや物足りなかったのでしばらく様子見していた。

これがRaspberry Pi 3になり、
LinkStation LS-VLを越えるスペックとなってきたので、
ようやく重い腰を上げて乗り換えを決意。

自前で準備が必要だから、
時間も金も掛かるだろうけど・・・勉強になると思って。


■最終目標

 Raspberry Pi 3で24時間稼働の自宅サーバを構築して、
 NASやDLNA等、いわゆるホームネットワークを自前で用意する


■準備

・本体(Raspberry Pi 3 Model B) +ACアダプター(2.5A) セット

 電源タップが1つ埋まるのに抵抗があったけど、安定稼働を目指したいから公式アダプタにしてみた
 

・ファン付き保護ケース +ヒートシンクセット

 保護ケースと送風ファンがあれば十分だったんだけど、セットだとお得だったのでヒートシンクも一緒にしてみた
 


■本体構築

・まずは開封前の状態から

上の箱がACアダプタで、右下のパックが「ファン付き保護ケース +ヒートシンクセット」

・開封



組み立て用の説明書等は一切無し

・ケースを組み立てる

 ・半透明のシートで覆われてたので剥がす
両面覆われているのでせっせと剥がす
 ・組み上がった

 ・ファンを取り付け

ファンの向きが反対だった(電源投入後に気付く・・・)

・ヒートシンク取り付け



※CPUとLANコントローラにヒートシンクを貼り付け。
  裏面に両面テープが貼ってあってよかった。

・本体の組み込み

 ・本体設置
本体とケースの留めビスがセットになっていないので安定感無いけど
※完成イメージも無いので、本体チップの位置とケースをよく見比べながら組み立てる必要がある。
   位置を間違えて2~3回組み外してたり・・・。

組み立て完了!!


さて、次回はmicroSDにOSイメージを入れて起動する。

OSは何にしようか。