(再)ラズパイ3のセットアップ 〜完全な挫折です

セットアップ途中での挫折で、最初からの仕切り直しになりました。
勝手にシステムのアップデートが行われて動作不能になるラズパイ3ですが、再起のため最新の Raspbian OSを入れるところからのセットアップの途中で、Sambaの設定でも変な動きをして共有が正常に動作させられなかったり、WebサーバーのApache2が変な動きをしたり、リモートでのメンテナンスでは必須のsshの設定でも、意図して設定しているはずの動きとは異なるような認証動作が行われていました。
究極の問題は、apt コマンドで、最新のモジュールに入れ替えたり、新しいプログラムをインストールできない問題に直面してしまい、色々と調べたり回避策を模索していて時間が取れなくなって仕方なくしばらく中断していました。

changelog を読んでいます... 完了
パッケージからテンプレートを展開しています: 100%
パッケージを事前設定しています ...
dpkg: unrecoverable fatal error, aborting:
パッケージ 'vim-runtime' のファイル一覧ファイルに最後の改行がありません
E: Sub-process /usr/bin/dpkg returned an error code (2)

 
やっと触れる時間ができたので、google検索をしてみると、同様の内容と思われる記事が多数アップされています。⇒日本語で対策を教えてくれているサイト
今回は、単純に昔からの方法での dd コマンドでイメージコピーしただけなのですが、初めて見たようなオプション “conv=fsync” を追加してコピーしないと意図しない結果になるようです。最近公開されている Raspbian OS についてらしいです。
今のままの不安定な状態から個別にリカバリーしても気が遠くなる作業が続いて、収束の見通しが建てられないようなので、仕方ないので最新の OS ダウンロードからやり直すことにします。
今回はセットアップ途中での挫折です。仕切り直しですね、完全な玉砕です。

(再)ラズパイ3 のセットアップ(2-4)

  1.  vimエディタの環境整備を行います
  2. リモートログイン関連の整備を行います
  3. 元々の piユーザーの pid : gid / 1000:1000 を sunao に完全入れ替え
vimエディタのフルセットをインストールします。

$ sudo apt install vim

シンタックスカラーリングを有効にしておきます。
26行1桁目のコメント を取り除きます。

$ sudo vi /etc/vim/vimrc
......  ......
" Vim5 and later versions support syntax highlighting. Uncommenting the next
" line enables syntax highlighting by default.
syntax on
" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
....  ....

次にリモートログイン関連の整備を行います。

常用しているノートパソコンからの ssh リモートログインのために公開鍵を設定します。
方法は、リモートで操作されるサーバーであるラズパイ3 の sunaoユーザー (piからsunaoに書き換えてます) の .ssh/authorized_keyの中に、リモートで操作する側(常用しているノートパソコン)の常用ユーザー (sunao)の公開鍵を追加します。

$ cat .ssh/id_rsa.pub   ……常用しているノートパソコン側
ssh-rsa AAAAB3NzaC1......AABAQDGfuahG9gbZlZk.........UfIO4hqf7uQJif/c1FPGwQYkGT7VAiksrtyBTOSEe/iWLfeVwjlS..........AkyAVJZKp0p/g+zO............9yF5+b6K9KP+mEXC.......w7HDsaif user@note-PC

追加する方法には色々な方法が考えられますが、文字列をコピーして viエディタで単純に追加編集する方法を示します。

$ vi .ssh/authorized_key    ……操作される側のラズパイ3
......    ......
ssh-rsa AAAAB3NzaC1......AABAQDGfuahG9gbZlZk.........UfIO4hqf7uQJif/c1FPGwQYkGT7VAiksrtyBTOSEe/iWLfeVwjlS..........AkyAVJZKp0p/g+zO............9yF5+b6K9KP+mEXC.......w7HDsaif user@note-PC
....  ..   .....

そして次に動作検証を行います。

公開鍵が追加できたなら、公開鍵と秘密鍵で認証が行われることを確認します。

$ ssh sunao@192.168.xx.xx
sunao@Rpi3-com1:~ $

sshでの公開鍵認証ができたなら、ネット上からのアタックでパスワード認証での不正ログインを防ぐために、パスワード認証を禁止します。

$ sudo vi /etc/ssh/sshd_config
....  ..  .....
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
PermitEmptyPasswords no
.......    .....

実際には登録していないユーザー名を指定して認証させるような操作で、公開鍵と秘密鍵のペアでなければ接続できないことを確認します。
公開鍵が登録されていないと言った意味のエラーが返ります。(publickey)

$ ssh webadm@192.168.xx.xx
 Permission denied (publickey)

ユーザー名の変更を中途半端にしておくと、動きが少しおかしいような気がするので、ホームディレクトリやグループ名も含めて完全に入れ替えて、新たに piユーザーを追加しました。
パスワードファイルやグループファイルの修正に利用するコマンドは、vipw vigr を使います。

(再)ラズパイ3 のセットアップ(2-3)

  1. 以前から稼働しているサーバーと同じユーザー名 =UID で操作を統一したい
  2. Raspbian を microSD から元々の USBハードディスクに移行する
  3. できるだけ過去の蓄積データを継続で利用したい

モニタの 3.5インチLCDディスプレイがセットアップできているので、最低限のパッケージの導入から進めようと考えています。
なんてったって最大の問題は、勝手にアップデートされてしまい、壊れてしまうことです。一般的な Linux ってインタフェースが変更になるような大きなパッケージ更新については、意識してアップグレードしない限り実行されないと思ってました。色々なディストリビューションとの長い歴史の中での経験則ですが、Raspberry pi の Raspbian に関しては経験が活きない異端児なのかもしれませんね。
デスクトップとしてセットアップして、サーバーとして使うことが想定外の使い方なのでしょうね。うぅ〜ん困ったものです。何を行えば勝手な更新が止められるのか不明です。
壊れても短時間で復旧させられるように、情報を整理してまとめておいて、機械的な流れで復旧作業できる環境を作っておく必要がありそうです。


Raspbian は、操作を全て pi ユーザーの UID : 1000 に統一して、構成されています。色々なディストリビューションが一般的に最初のユーザー登録で、UID : 1000 から登録されますので、例えば既に稼働しているサーバーは sunao ユーザーを UID : 1000 に登録して運用しています。
何が問題かというと、大量に管理しているデータを、各サーバー間で自動転送して、バックアップしながら管理している事を考えたとき、 rsync で単純にコピーすると各ファイルのオーナーは UID の番号で管理されているので、同じ UID なのにサーバーが変わるとファイルの所有者名が異なって扱われてしまう事になります。
ネット共有ディスク samba の扱いでも同様に、ファイル所有者 UID の扱いが問題として発生します。そこで、再セットアップ中のラズパイ3 で、ユーザーファイルを vipwコマンドで編集を行い pi ユーザー名の箇所を sunao ユーザー名に変更してみました。ただし、グループファイルは、pi グループが色々な箇所で定義されているようなので、不具合が出る可能性が高く、そのままの状態です。
 sunao – uid:1000 / pi – gid:1000
 pi – uid:1001 / pi – gid:1000
と変更してみました。


次に microSD から USBディスクに移行する作業は、実機のラズパイ3 上では出来ないので、Linux が稼働しているノートパソコンで作業しています。 microSD をラズパイ3 から取り出して、USBディスクと一緒にノートパソコンに装着し、一応コピー元とコピー先のファイルに関しては、fsckコマンドでエラーがない、あるいはエラーの修復を行った後に、両方のファイルをマウントして作業しています。
microSD (8GB) に作られている Raspbianシステムを、外付けの USBディスクに移しますが、移行先は、既に利用していた USBディスクなので、パーティション構成や今まで使っていたデータ自体も入ったままになっています。移行するのは新しく再セットアップした microSD のパーティション2 から 外付け USBディスクのパーティション2 へコピーが終われば完了です。
オプションに –delete を追加した rsyncコマンドでコピーします。既に作業に使用するマウントポイントは作成されていたものとしています。
ノートパソコンに装着すると自動マウントされてしまうので、適切にアンマウントして、次のように作業します。

# mount /dev/mmcblk0p2 /mnt/work   ……microSDのパーティション2
# mount /dev/sdc2 /mnt/bkup     ……USBディスクのパーティション2
# rsync -av --delete /mnt/work/ /mnt/bkup/  ……システムのコピー
# umount /mnt/work
# umount /mnt/bkup
# mount /dev/mmcblk0p1 /mnt/work   ……USBディスクから読むための修正
# cd /mnt/work
# ls        ……bootディレクトリの確認
# vi cmdline.txt  ……次で項目で説明しているのと同じ修正を行います
# cd
# umount /mnt/work

さらに修正が必要なのは、microSD からコピーされた USBハードディスク上に記述されているパーティションのマウント情報ですが、正常に立上げが行われた時には、 /etc/fstab に対応するファイルになります。
今回の場合は、USBディスクのパーティション2 の etc ディレクトリに置かれているので、自分自身のパーティションが、ルートファイルシステム( / )としてマウントできるように、指定の記述方法は、 /dev/sda2 でも  blkid でリストされた UUID= でも PARTUUID= でも、ディスクのパーティションが識別できればマウントされるので、そのように修正します。

# mount /dev/sdc2 /mnt/work
# vi /mnt/work/etc/fstab
proc                         /proc    proc    defaults   0   0
PARTUUID=bcacf1da-01         /boot    vfat    defaults   0   2
UUID=86782691-13d8-429a-a015-3e010d6e7248  / ext4    defaults   0   1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
# umount /mnt/work 

作業していた microSD と USB外付けディスクをノートパソコンから外して、ラズパイ3 に装着して電源を入れると、USBディスクからの立上げが行われます。


ラズパイ3 が正常に立上がると、LCD のドライバとかコマンドが入っているディレクトリ(~/LCD-show)に移動して、色々な操作が出来ますが、この中に置かれている cmdline.txt のルートファイルシステム (Raspbian OS自身) の読み込み先が、 microSD カードの /dev/mmcblk0p2 のままになっているので、現在は構成が外付けの USBディスクからの立上げに変更になったので、 /dev/sda2 に変更しておかないとこれをコピーされて再起動できなくなってしまうので注意します。

$ cd LCD-show/
$ vi cmdline.txt
dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=/dev/sda2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo
 次の作業は、USBディスクに作られている過去からの複数のデータが、立上げプロセスで自動マウントされていますので、マウントポイントを作ってからマウント情報の /etc/fstab を適切に編集して、システムの立上げでマウントできるようにします。

(再)ラズパイ3 のセットアップ(2-2)

  1. 最新 raspbian の microSD への導入
  2. 最低限の設定と確認作業
  3. 秘密鍵、公開鍵ペアの扱いに関して
  4. 3.5インチLCDディスプレイのドライバ導入

新規にセットアップを始めたラズパイ3ですが、ゆっくり時間を掛けて対応できていないので、作業がなかなかはかどりません。
セットアップしたラズパイシステムは、最新と思われるバージョンで、8GB の microSD に /boot パーティションと、システム本体が含まれる / パーティションの 2ファイルが含まれる単純なもので、NOOBS を利用しないで直接書き込みました。

$ uname -a
Linux Rpi3-com1 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l GNU/Linux

昔のバージョンでは手作業で色々な箇所を変更しましたが、最新では、デスクトップのメニューから リファレンス → 設定 で、ホスト名、ロケールの設定、それと日本語化が完了した状態です。ここでパスワードの変更も行っているので、パスワード認証による sshリモート作業も一応出来るようになっています。
そして、数日間稼働させていても問題が無いことが確認できたので、鍵認証に移行させて、必要な byobu/screen の追加とメールの設定を行います。
ファイルは書き換わっていると思いますが、一応ホスト名のファイルを確認してみました。

$ cat /etc/hostname
Rpi3-com1

こちらのファイルも最後の行が設定されていないと、エラーメッセージが出るようです。

$ cat /etc/hosts
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
127.0.1.1       Rpi3-com1

鍵認証に関しては、ログイン先となるサーバーのログインユーザーの /home/<user> ディレクトリ内に .ssh デイレクトリを作成して、ログイン元となる操作側PCの秘密鍵と公開鍵ペア公開鍵authorized_keys ファイルにコピーします。実際の作業的には、普段 sshログインして作業している他のサーバー内に、既に作成されている実績のある authorized_keys ファイルをコピーして利用しています。.sshディレクトリと authorized_keys ファイルの実行権限はそれぞれ 700 と 600 に設定しておきます。
他のサーバーとの間で、cron / rsync 利用の自動転送によるバックアップを行わせるために、セキュリティ上問題だと一部で言われることですが、各サーバー間のrootユーザーでの作業を行わせるために、パスフレーズ無しでお互いに ssh ログインが出来る設定を行います。
他のサーバーの秘密鍵をコピーしても利用できそうですが、セットアップ中のラズパイ3 の root で操作して、鍵ペアを次のような操作で生成させます。

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:eGFZ6pD........JdP3VHgJw root@Rpi3-com1
The key's randomart image is:
+---[RSA 2048]----+
| .oo+.. oo.. o.. |
|  .++..o +o E   .|
...
             . o  |
|             .   |
+----[SHA256]-----+
# ls -al .ssh
合計 16
drwx------ 2 root root 4096  8月 23 10:14 .
drwx------ 5 root root 4096  8月 23 10:14 ..
-rw------- 1 root root 1679  8月 23 10:14 id_rsa         … 秘密鍵
-rw-r--r-- 1 root root  396  8月 23 10:14 id_rsa.pub     … 公開鍵

後は同様に、他のサーバーへのログインや、他のサーバーからのログインに対応するように、お互いの公開鍵をサーバー間で、 authorized_keys ファイルにコピーしておきます。
ある程度リモートログインに実績が出来て、問題が無いようならセキュリティ向上のため、鍵認証だけの認証にするため、パスワード認証を制限する設定に変更しておきます。


このラズパイ3 には、1年ほど前にアマゾンから購入した 3.5インチ LCD が装着されているので、最新のドライバをセットアップしておきます。購入した LCD は、『Kuman 3.5インチ ディスプレイ タッチパネル Raspberry Pi 3B 2B/B+/A+ /A/B/Zero に適用 320*480 解析度 保護ケース ヒート ¥ 3,200』 となっていた製品で、検索すると英語のページですが、ドライバのダウンロードが出来るページがあります。中国か台湾かはわかりませんが、製品本体はWaveshareという会社の製品らしく、操作性も含めて事細かく解説されています。
LCDモニタのページ 提供されている3.5インチLCDモニタのドライバと使い方
説明されたページの一部に、ドライバのダウンロードとセットアップ方法が、次のように記載されています。バージョンの違いなのか差異がわかりませんが、2種類掲示されています。

Method 1. Driver installation

Description: The drivers are not available for NOOBS or any system installed by NOOBS.
If the touch screen doesn’t work properly, please install the driver: LCD-show-170703.tar.gz, but not LCD-show-161112.tar.gz.

1. Configure your Pi:

sudo raspi-config

Set as:

  • Select Expand Filesystem.
  • Boot Option -> Desktop Autologin (may differ depending on Raspbian revision)

2. Copy the driver (choose the driver according to your OS) into your OS then Run the following commands:

tar xvf LCD-show-*.tar.gz
cd LCD-show/

Install the driver and it toggles the mode to LCD display: Note: Net work connection is required while installing driver to your Pi, or else the touch won’t work properly.

chmod +x LCD35-show
./LCD35-show

Note: this LCD won’t work after apt-get upgrade, in such cases, please edit the config.txt file in the SD card and remove this statement: dtoverlay=ads7846
3. After system rebooting, the RPi LCD is ready to use.

 
URLを右ボタンでコピーして、wget で両方をダウンロードしてみました。どちらを使うのか迷うところです。

$ wget http://www.waveshare.com/w/upload/4/4b/LCD-show-161112.tar.gz
$ wget http://www.waveshare.com/w/upload/0/00/LCD-show-170703.tar.gz
$ ls -al
-rw-r--r--  1 pi   pi   50692 12月 17  2016 LCD-show-161112.tar.gz
-rw-r--r--  1 pi   pi   53084  7月  4 16:21 LCD-show-170703.tar.gz

サイズ的には、それほど差が無いように思えますが、最新についてはインストール時にネットワークに接続されている必要があるように、追記があるのが少し気になります。

今回は最新を展開してインストールしてみます。

$ tar xvf LCD-show-170703.tar.gz
$ cd LCD-show/
$ chmod +x LCD35-show
$ ./LCD35-show

理由は不明ですが、xserver-xorg-input-evdev が新規にインストールされました。

 

勝手にリブートが行われ、画面としては小さな 3.5インチLCDをモニタとして起動されます。
説明に書かれている画面の回転を 270度回転させると、本体を縦長に縦た形状になり、USBコネクタや、有線LANのコネクタが上向きに出る構成で表示されます。
 
設定を変更する度にリブートされます。立上げ時のバナーについても問題なく LCD から表示されるようです。
タッチスクリーンについても問題なく反応しているようで、メニューからシャットダウンのダイアログを開くこともできています。

展開したモジュールのディレクトリで、./LCD35-show コマンドを実行すると設定ファイルが上書きされてリブート後に表示が LCD に切り替わります。

$ ./LCD35-show

LCDモニタの表示は 90度づつ向きを変えられるようです。ラズパイの USBポートと有線LANポートのある面を上にしての表示は、次のコマンドで縦長の配置になります。

$ cd LCD-show/
$ ./LCD35-show 270

ただ小さすぎて実際の運用には適していないと思われます。

(再)ラズパイ3 のセットアップ(2-1)

  1. 何で再セットアップが必要なのかと進め方
  2. 日本語フォント、漢字変換パッケージの導入について
  3. 初期設定には必需品となる HDMIモニタ、USBマウス、USBキーボード
  4. キーボードは、標準を選択しないと 記号 や [半角/全角]キー が使えない

1年前にセットアップして利用していたラズパイ3が、勝手にシステムアップデートしたらしく、動作不能になったため、仕方なく最新のraspbianを使用して、新規セットアップを始めました。
20160819_153845-240x427画面はラズパイ3が発売した直後(1年前)のraspbianシステムで、購入した3.5インチLCDディスプレイにデスクトップが表示されているものです。
現バージョンでは異なったデスクトップ画面になっていますが、同様なLCDディスプレイへの切り替えは、ある程度修復の設定が完了してから、取り掛かろうと考えています。
実は1度 microSD に最新の raspbian をセットアップして起動したのですが、以前と画面や振る舞い方が大きく異なっていました。過去に何度かインストール作業はしているのですが、あまりに変化が大きくて過去の経験が全く活かせず、日本語フォントを入れる前に日本語化してしまい、キーボードの選択も誤っていたようです。
パスワードを変更したら、リモートからの sshでの認証でログイン出来ない状況になってしまいました。さらにデスクトップの文字表示も化けた状態で、四角い豆腐が並んだような表示になってしまいました。
そんな訳で直すのも面倒なため、考えなくて済む 2度目のインストールを行いました。立上げ後の設定では、日本語フォントとして IPA系のフォントと漢字変換用パッケージを追加しました。

  • fonts-ipafont
  • fonts-ipaexfont
  • ibus-mozc
  • im-config

初期設定で、キーボードマウス及びモニタは、必需品のようなので繋いでいます。タイムゾーンや日本語の環境、キーボードの選択は、デスクトップからメニュー選択で簡単に変更できるように改善されています。リモートからの ssh が問題なく利用できるようになってから初期必需品のキーボード、マウス、モニタを外そうと思います。使わなくても当面の間は繋いだままにしておきます。
キーボード選択は、日本語の先頭にある標準を選べば問題ないようです。選択したものによっては通常の文字では問題が無いように見えて、漢字変換の起動に利用する [半角/全角] キーが使えなかったりします。
その設定項目の中に、インターフェースに関するオプション選択があります。 SPI や I2C、ssh 等の利用の選択が出来ます。


最低限の設定としては、ネット共有ディスクバックアップサーバーメール通知の設定ですね、その辺りから進めようと思っています。
20160819_134639_Burst01-320x18020160819_134655-320x180

ラズパイ3のセットアップ(11) (i) WordPress: 複製

複製先のラズパイ3 に MySQL PHP を導入して、 WordPress を新規導入し動作することが確認できたので、やっと本題の Web に公開中の WordPress で構成しているブログを複製します。
最新の状態で複製したいので、おさらいを込めてアドオンの Duplicator を再び利用して最新の複製データを生成することから始めます。
screenshot-from-2016-09-18-07-25-40
Packages を選択します。
表示された画面には過去に生成したまま残されているパッケージがリストされています。新たに最新のパッケージを生成するので右上の [Create New] を選択します。
screenshot-from-2016-09-18-07-28-39
表示された画面では、オプションを選択できるようですが、そのまま右下の [Next→] の選択で問題なさそうです。
screenshot-from-2016-09-18-07-33-05
screenshot-from-2016-09-18-07-34-31
生成に必要な項目がチェックされるようです。問題がなければ右下の [Build→] で生成を開始します。
screenshot-from-2016-09-18-07-35-58
生成されるのは Installer と Archive の2つのパッケージのようです。ここで必要なパッケージを選択するようですが、下に表示された [All Packages] の選択で問題なさそうです。
screenshot-from-2016-09-18-07-38-13
新しく生成されたパッケージが上にリストされているようです。ここには稼働中の WordPress に保存されている全てのパッケージがリストされているようです。もし必要なら、この画面で不要なパッケージの削除ができるようです。右の [Installer] または [Archive] ボタンをクリックすると作業しているクライアントPC にパッケージがダウンロードされます。
なお、この画面で不要なパッケージを削除するには、不要なパッケージ群の左にあるチェックボタンを選択して、左上のリストボタンから delete を選択して、隣の [Apply] ボタンのクリックで削除が始まります。
screenshot-from-2016-09-18-07-39-15
ダウンロードはブラウザの機能や指定、設定により操作しているクライアントPC の該当ディレクトリ内に取り込まれます。必要なら対になるパッケージも同様に続けてダウンロードします。
screenshot-from-2016-09-18-07-40-05
screenshot-from-2016-09-18-07-42-58
これでパッケージがダウンロードされています。これを複製先となるラズパイ3 の WordPress のセットアップディレクトリ /var/www/wordpress/ に何らかの方法で転送して、必要ならユーザーやグループの変更を行っておきます。


2016-09-18 に書き始めていて、今までの作業を再現しようと思ったのですが、何故なのか再現してみるとリンク切れになってしまい実利用できるようになりませんでした。
その後時間が取れなくなってしまい、思い起こすと書き掛けのまま 2か月弱放置してしまいました。この辺りが正常に検証できないとサーバーを乗り換えて、システムのバージョンアップに支障が出るわけで、何としても解決しなければならないです。
遅くなりましたが、現状のまま公開しておきます。
 

ラズパイ3のセットアップ(10) (h) WordPress: 環境構築

まずは、WordPress複製先となるラズパイ3の環境を WordPress が動作する構成に構築します。

何が必須なのかはよくわかりませんが、最低限でデータベース MySQL と PHP が必要なのだろうと思われるので、とりあえずそのインストールから実行しておきます。

$ sudo su -
# apt update
# apt install mysql-server php5 php5-mysqlnd

マニュアルの説明を頼りにして、まずは最新の日本語版 WordPress をダウンロードして展開して、利用するデータベースを生成するところから始めようと思います。

$ wget http://ja.wordpress.org/latest-ja.tar.gz
--2016-09-13 22:04:58-- http://ja.wordpress.org/latest-ja.tar.gz
ja.wordpress.org (ja.wordpress.org) をDNSに問いあわせています... 66.155.40.250, 66.155.40.249
  --- 途中省略 ---
`latest-ja.tar.gz' に保存中
latest-ja.tar.gz 100%[==============================================>] 8.01M 785KB/s 時間 14s
2016-09-13 22:05:13 (588 KB/s) - `latest-ja.tar.gz' へ保存完了 [8402893/8402893]

$ tar -xzvf latest-ja.tar.gz

日本語版 WordPress が、wordpress ディレクトリ以下に展開されていますので、ブラウザからアクセスした時に URL の /blog に対応するディレクトリ /share2/WordPress にコピーします。

# rsync -av /home/pi/wordpress/ /share2/WordPress/
# chown -R www-data:www-data /share2/WordPress

WordPress を格納するディレクトリツリーは、他と多少なりとも統一性を考えて /var/www/html がホームページ作成のデフォルトのようなのと、 webalizer が /var/www/webalizer なので、WordPress としては同様に /var/www/wordpress をディレクトリと決めました。
実際には独立したディスクパーティションを割り当ててルート直下の /share2 にマウントしています。その中に WordPress ディレクトリを作成して、そこを格納エリアとしました。そして /var/www/wordpress としてアクセスできるようにソフトリンクを行っています。

# ln -s /share2/WordPress /var/www/wordpress

先に一部の例として示したサイト定義 ‘001-三田-public.conf’ の中に、URL で /blog に対応する WordPress の定義を次に示しておきます。なお余談ですが、<RequireNone> の定義はアクセス拒否を行うつもりの接続先を列挙しています。

 ... 該当部分のみ ...

Alias /blog /var/www/wordpress
 <Directory /var/www/wordpress>
   DirectoryIndex index.html index.html.var index.php index.cgi
   AddHandler cgi-script .cgi .pl .php
   Options ExecCGI FollowSymLinks MultiViews
   <RequireAll>
    Require all granted
     <RequireNone>
      Require host huangxxxx08.com
      Require ip 91.200.12.xx
     </RequireNone>
   </RequireAll>
 </Directory>

続いて使用するデータベースの作成と、その情報を wp-config.php に記述して WordPress が稼働できる環境を作ります。データベース MySQL をインストールした時に設定した root とそのパスワードを使用して利用するデータベースを作成します。
余談ですが、インストールの時にパスワードを求められると適当に入力してしまいますが、後になって実際に使用する段階で、何を設定したのかわからなくなることが時々あります。我ながらいい加減な性格なのだろうと思います。データベースへのアクセスには、wpadm ユーザーを作成して利用することにします。

$ mysql -u root -p
Enter password: xxxxxx
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 60
Server version: 5.5.50-0+deb8u1 (Raspbian)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.06 sec)
mysql> CREATE USER 'wpadm'@'localhost' IDENTIFIED BY '..password..';
Query OK, 0 rows affected (0.59 sec)
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wpadm'@'localhost';
Query OK, 0 rows affected (0.57 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> EXIT
Bye

作成したデータベースにアクセスする方法を wp-config.php に記述しますが、このファイルは初期状態では存在しません。wp-config-sample.php ファイルをコピーするか名前を変更して作成します。

  ... データベースにアクセスするために必要な定義のみ ...

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wordpress');
/** MySQL データベースのユーザー名 */
define('DB_USER', 'wpadm');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', '..password..');
/** MySQL のホスト名 */
define('DB_HOST', 'localhost');
/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8');
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', '');
/**#@+
  ... 途中省略 ...
.. 次の部分はパスワード生成用のオンラインジェネレータをクリックするたびに生成されるパスワードで、該当行数の総入れ替えで更新してください。

 *
 * @since 2.6.0
 */
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
/**#@-*/

これで WordPress を新規にインストールできる環境が整いましたので、ブラウザから /blog/wp-admin/install.php を指定して新規のインストールを行います。管理で使用するユーザーを適当にユーザー登録して、ログインすると管理画面に入れます。
screenshot-from-2016-09-15-23-24-51
次に一般的なブラウザからアクセスした場合のデフォルトの初期画面を表示します。
screenshot-from-2016-09-15-23-25-30
いよいよ次回は、すでに運用済みの WordPress ホームページ複製を実行します。

ラズパイ3のセットアップ(9) (g) WordPress: プラグイン導入

私がインターネット上に一般公開している写真のWebサーバー機能をそのまま複製して、新たにセットアップ中のラズパイ3上に構築することができました。そして動作検証をして、完全に複製されたことが確認できています。
写真公開の機能だけなら稼働中の公開Web サーバー機が障害を起こした場合に代替機として稼働させることも可能な状態です。しかし、併設した機能として 2015年夏から追加したブログ部分 (今見ているこの画面のブログ機能) については、共存させている別の Web サイトとして構成されていて独立した機能で、まだ複製できていません。
本来はこのブログ機能も、障害時のバックアップとして、あるいはテスト機として色々な操作を試したりできる独立環境としての複製が必須なのですが、現状は用意出来ていません。このブログに利用しているソフトは、世界的に普及しているらしい WordPress と呼ばれるオープンソースソフトウェアで構成していますが、私が機能をよく理解していない状況で組み込んで利用を開始してしまったため、どこから手を付けてよいのやら、どのようにアレンジしてよいのやらがわからないまま四苦八苦しているのが現状なのです。
ネット上から情報を探すと、サイトを複製するためのプラグインとして Duplicator なるものがあるらしく、初心者でも簡単に利用できると書かれています。まずはこれを導入して試してみることにしました。
WordPress の日本語マニュアル WordPress Codex 日本語版 をここにリンクしておきます。
ログインした管理画面のダッシュボードのプラグのマークscreenshot-from-2016-09-08-21-32-55 をクリックするとサブメニューに [新規追加] があるのでクリックすると検索機能が利用できますので、ここで検索して Duplicator 選択します。
そして組み込んで有効にすると Duplicator のアイコンscreenshot-from-2016-09-08-21-33-51 が追加されます。
screenshot-from-2016-09-08-22-12-55
ここのサブメニューから Packages を選択して、管理画面から [NewCreate] で生成する対象を指定します。2種類の生成ができるらしく両方を選択すると installer.php と データを抽出して圧縮したと思われる .zip の 2つのモジュールが生成されます。
そのモジュールを組み込み先のラズパイ3 に移動して、ブラウザから installer.php を起動してみましたがエラーとなります。
そりゃそうだろうと思ってしまいました。システムを復旧させるためのシステムバックアップというのがあって、ディスクのパーティションにメディアからリストアすると壊れたシステムの復旧が行われる …のイメージがありますが、冷静に考えれば勝手に必要なデータベースや PHP をインストールして設定までしてくれる。 …なわけが無いですよね。
WordPress が新規に動作できる最低限の環境が整備されていなくてはデータをリストアしたくてもリストアの機能が稼働できないですよね。よくよく考えればデータベースソフトもまだインストールしてないし、当然データをリストアしたくてもリストア機能自体が動作しません。
次回からは、WordPress の新規インストールから始めてみます。

ラズパイ3のセットアップ(8) (f) Webサーバーの複製

継続している転送は、215GBになりましたが、まだ継続しています。いい加減な管理と言われてしまいますが、元のデータ量を把握していません。転送が完了したら samba で共有サーバーに昇格させないといけません。
Web 公開に利用している PogoPlug E02 のサーバーですが、原因不明で時々ハングアップしてしまうので、セットアップ中のラズパイ3 の役割を代替機あるいは現役交代用に利用できればと考えています。しかし、解決が必要なちょっと高いハードルがあります。昔から公開している写真の機能だけなら問題がないのですが、新たに追加したこのブログ機能を WordPress で構成しています。
問題は、WordPress ではデータ内に自分自身のサーバー名を保持しているところが多数あり、単純にファイルをコピーして生成するとサーバー名に違いが出てリンク切れが随所に発生してしまうようです。完全に現役交代するならサーバー名も同一にできるので、その問題はなさそうですが動作検証等の公開前に最低限確認しなければならない操作の余裕が取れません。多分大丈夫だろうと考えての公開は怖すぎます。
何れにしても、元になる apache2 の設定を行い写真の公開機能をフルコピーして複製を作ることから始めます。

まずは apache2 と ruby のインストールを行います。ruby は写真を公開するサーバーサイド側で動的に HTMLを生成させるのに使用しています。

$ sudo apt install apache2 apache2-doc webalizer ruby

インストールするとブラウザからのアクセスには簡単な初期説明が表示されます。
Screenshot from 2016-08-31 22-26-34
すでに公開している写真データは、全てコピーが完了していますので、apache2 の初期説明に configuration layout の図が書かれていますが、必要な設定を確認しながらコピーしてサーバーの複製を行います。
一般に公開していないプライベートのパスワード付き暗号化通信の https: で使用するベーシック認証用のパスワードを格納しているファイルが /etc/apache2/conf/.htpasswd に置かれていますが、そのままコピーします。なお、ここからは作業性の問題で root ユーザーとして作業します。

$ sudo su -
# rsync -av /etc/apache2/conf  192.168.10.24:/etc/apache2/
sending incremental file list
conf/
conf/.htpasswd
sent 530 bytes received 39 bytes 379.33 bytes/sec
total size is 399 speedup is 0.70

できるだけ構成ファイルはデフォルトのままで進めたいと思いますが、デフォルトのキャラクタセットは UTF-8 として定義するため /etc/apache2/conf-available/charset.conf 内のコメント ‘#’ を除いて有効になるように変更します。
それと apache2 の起動時ログにエラー的な記録が残る対策とのことで、次の手順を追加しておきます。

# echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf
# a2enconf fqdn
# systemctl reload apache2.service

モジュールを有効にします。

# a2enmod cgid ssl

すでに定義されていて稼働実績のある sites の定義を転送して、実情に照らして問題がないか見直します。

 
横道にそれますが、転送していた大量のデータは確保したファイル 300GB の80%を超えても先が見えません。一旦中止して、分散先を振り分けることにして 300GB ×3 として合計 900GB のエリアを確保して続きを転送させました。丸3日以上掛かって転送は終わりましたが、310GB を超えていました。分割して正解だったようです。52% 28% 25% の使用率になりました。理想的な分割になったと喜んでいます。
話を戻して apache2 の設定について続けます。

conf-enabled と sites-enabled のすみ分けが良くわかりませんが、純粋なコンフィグレーションと公開するサイトに関わるコンフィグレーションとで分けているのだろうと思っています。
conf-enabled については、先に修正した conf-available/fqdn.conf 以外は初期設定の内容を信じて特に手を加えません。サイトのコンフィグレーション /etc/apache2/sites-available/ については、稼働している公開サーバーから scpコマンドでコピーしました。
ポート :80 の http:// 初期設定 000-default.conf はそのままで問題なさそうです。ポート :443 の https:// 初期設定 default-ssl.conf についてもそのままで問題なさそうです。コピーしたサイトのディレクトリは次のようになっています。

# ls -l /etc/apache2/sites-available/
合計 36
-rw-r--r-- 1 root root 1332 7月 6 06:22 000-default.conf
-rw-r--r-- 1 root root 1646 9月 1 21:29 001-三田-public.conf
-rw-r--r-- 1 root root 6437 9月 4 21:17 default-ssl.conf
-rw-r--r-- 1 root root 218 9月 1 21:02 webalizer.conf
-rw-r--r-- 1 root root 372 9月 1 21:12 webcmd.conf
-rw-r--r-- 1 root root 2949 9月 4 17:22 三田-private.conf

webalizer.conf は、web のアクセスをグラフで表示する設定です。webcmd.conf は、ブラウザを利用してコマンドを実行させる家屋内でのみ利用できるツールです。webalizer の定義とブラウザからアクセスした場合の表示をサンプルとして次に示します。
Screenshot from 2016-09-04 22-00-21
webalizer を利用できるユーザーは定義を見ればわかるように、sunaomita と webadm だけとしています。
次のアクセス結果を見ると作成されたグラフで文字化けしています。今のネット世界では文字化けの起こらない UTF-8 が主流の文字コードとして認知されていますが、過去に主流だった UNIX や Linux では EUCコードが主流のコードとして使われていた時代が長く続きました。それを引き継いだままのソフトなので、手間を掛けないと修復できませんので目をつぶります。
Screenshot from 2016-09-04 22-01-19
続いて、一般公開するサイトの設定 001-三田-public.conf とプライベートサイトになる設定 三田-private.conf の一部を表示します。
Screenshot from 2016-09-04 22-38-50
Screenshot from 2016-09-04 22-39-27
定義ができたら定義を有効にする a2ensite コマンドで、各コンフィグを組み込みます。そして apache2 を再起動します。

# a2ensite 001-三田-public default-ssl webalizer webcmd 三田-private
# service apache2 restart

アクセスすると公開している web サーバーと全く同じ内容のコピーされた webサイトが表示できることを確認しました。
Screenshot from 2016-09-04 23-04-04

 
この続きは、いよいよブログとして公開している WordPress の複製ですが自信が無いです。ネットの情報を頼りにぼちぼちと進めますが、その前に共有サーバーとしての samba の設定が先になるのかと思っています。

ラズパイ3のセットアップ(7) (e) メールの設定とログの監視

監視に定番の logwatch を導入するにもメールの発信ができなければ意味がないので、メール機能を設定しようと思います。単独で機能するメールサーバーではなくて私が普段利用している @Nifty のメールサーバーへのリレーで外部のメール先に送信するような設定にしたいと思います。
話がそれますが、昨日までの設定で、サーバー間で接続認証してデータ転送できる環境になっています。過去には公開Webサーバーとして使用していた家屋内の共有サーバーですが、今でもバリバリの共有サーバーとして稼働しています。何が問題かと言うとカーネルバージョンが古くてセキュリティアップデートや動作ソフトの新たな変更もできません。最新の Linux を導入するには共有データを全て別に移して作業する必要があります。
お互いのサーバー間(現役共有サーバーとセットアップ中のラズパイ3)で接続できるように公開鍵を設定して、rsync コマンドで全データを転送させています。現時点ですでに100GB超が転送されて継続中になっています。
話を戻しますが、サラリと簡単に言ってますがメールの設定は良くわからなくて得意ではありません。今公開しているこのWebサーバー自体の設定がまともに機能しているようなので、ほとんど丸写しで設定しようと思います。昔は適当な設定でも @Nifty 経由でメール転送できたのですが、悪い人達のツールにされて、今では送信時に認証が導入されてしまった【Outbound port 25 Blocking (OP25B) 対策】ので、そのプロセスの定義が必要になってしまっています。
後で自分で見直した時にも参考になるようにリンクしておきます。
OP25B問題と対策を図で説明してくれてるサイト
それと、変更箇所の適切な説明をしているサイト

それではメール設定の作業を始めましょう。 postfix だけを指定してインストールしようとしたら多くの提案があったので、その中から思い付きで関連しそうな予想のものを追加しておきます。

$ sudo apt install postfix sasl2-bin postfix-doc openssl-blacklist

インストール途中で、postfix をどのようにインストールするのか質問されるが、結果の違いが良くわかっていないのでインターネットを選択しました。動作実績のある設定をコピーしてカスタマイズするので特に問題はありません。
設定が必要なファイルは、master.cf と main.cf 、それと @Nifty にリレイするのでパスワードが必要になります。
パスワードのファイル名は任意ですが、後でわかる名前にしておきましょう。ここでは nifty.auth としておきます。

$ sudo vi /etc/postfix/nifty.auth
[smtp.nifty.com]:587 userid:password

その後で、hash化されたDBに変換します。

$ sudo postmap /etc/postfix/nifty.auth

Screenshot from 2016-08-31 00-03-12
適切な設定なのかはわかりませんが、次に示すのが main.cf と master.cf の一応動作している設定です。
main.cfmaster.cf
続いて mail のコマンド操作ができるようにして、テストメールを送信してみます。作業を root ユーザーになってから進めようと思います。

$ sudo su -
# apt install mailutils
# vi /etc/aliasesScreenshot from 2016-08-31 01-20-54

/etc/aliases の設定を有効にします。

# newaliases
# systemctl reload postfix.service

コマンドを利用して、 root ユーザーから pi ユーザーに簡単なメールを送ってみます。

# echo test | mail -s 'postfix test' pi

pi ユーザーへのメールは、@Nifty の私のメールアドレスへ転送するように設定しているので、正常に機能すれば転送されてきます。転送された内容を確認すると送ったメールの内容に間違いないことがわかります。
Screenshot from 2016-08-30 23-34-31
メールの転送機能が確認できたので、logwatch をインストールします。

# apt install logwatch

問題がなければ 1日1回のログのレポートが送られてきますので、待つことにします。
それと今まで利用してこなかった監視ソフトとして logcheck と言うのがあるようで、すでに1度インストールしていて、メールで頻繁に通知されてきたのを経験しています。せっかくなのでインストールしようと思います。

# apt install logcheck

使い方がよくわからないのでネット検索してみるとドキュメントの日本語化したものらしいのが見つかりましたが、その説明と実際にインストールされたものの構成が大きく異なっているようです。Webサーバーの apache2 でもRedhat系と Debian / Raspbian 系では構成や操作の作法に大きな違いがあるようなので、 logcheck も同様に構成や作法に違いがあるのでしょうね。ディレクトリの構成を次に示しますが、そのディレクトリ内に定義のファイルが多数置かれているようです。今は余裕がないのでそのままスルーしておきます。
Screenshot from 2016-08-31 23-06-34
送られてくるメールを次に示します。監視結果は logcheck 宛にメールされるのですが、/etc/aliases に定義はしていないのですが、問題なく私宛にメールが届きます。カラクリはわかりませんが未定義はroot に送られるのでしょうか。
Screenshot from 2016-08-31 23-07-58

 
話が変わりますが、共有データのサーバー間転送は継続したままです。 現在転送量が、180GBを超えたところです。 ほぼ 4秒のインターバルで 4MBずつ増加しているので、約1MB/秒 なので、開始から丸2日程度なのかな、もう少しで送り終わるだろうと思います。