にゃののん日記

2018-05-16 (水)

[] 日々

日中、Raspberry Pi暫定的に動かしてるサーバをSSL対応させるべく、Let's Encryptでサーバ証明書を取得してみた。用意されてるスクリプトApacheのSSL設定まで自動的にやってくれるのか。便利。ついでにメールサーバも立てて、PostfixDovecotにもサーバ証明書を設定してSSL対応にしてみた。

定時後、出社時にガス欠ランプ点いてたので帰りがてらジェームス山へ向かう。途中、垂水SAのセブンイレブンから近い塩屋北町のローソンの隣に新たにセブンイレブンが出来ようとしていた。あと、オートバックスガソリンスタンドがリッター137円だか138円だかでめっちゃ安かった。ジェームス山のessoスピードパス使ってレギュラー満タン給油。電光掲示板の値段通りでリッター143円。

その後、第二神明で帰宅晩御飯は先日焼肉に使った国産牛が割りと脂多めで厚めだったのでステーキ風に何枚も焼いたもの。あとはわかめ豆腐味噌汁CCさくら見終わってからお茶入れてもらって一服

[] 一人未読

  1. 19:40〜20:04 ダーリン・イン・ザ・フランキス #10「永遠の街」(ABCテレビ 2018/03/17(土) 26:59)
  2. 20:05〜20:06 タマ&フレンズ 〜うちのタマ知りませんか?〜 #72「ねこじゃらし楽しい!」(ABCテレビ 2018/03/17(土) 27:29)
  3. 20:06〜20:49 魔法使いの嫁 #23「Nothing seek, nothing find.」(毎日放送 2018/03/17(土) 27:38)
  4. 20:49〜21:14 カードキャプターさくら クリアカード編 #11「さくらとさかさまペンギン」(NHK BSプレミアム 2018/03/18(日) 07:30)
  5. 21:40〜22:05 HUGっと!プリキュア #7「さあやの迷い?本当にやりたいことって何?」(ABCテレビ 2018/03/18(日) 08:30)
  6. 22:06〜22:30 仮面ライダービルド #27「逆襲のヒーロー」(ABCテレビ 2018/03/18(日) 09:00)
  7. 22:30〜22:56 快盗戦隊ルパンレンジャーVS警察戦隊パトレンジャー #6「守るべきものは」(ABCテレビ 2018/03/18(日) 09:30)
  8. 22:56〜23:21 りゅうおうのおしごと! #11「寿」(サンテレビ 2018/03/19(月) 24:30)
  9. 23:21〜23:25 りゅうおうのおしごと!〜かんそうせん〜 #11「将棋ゆかりの鳩森八幡神社にお参り」(TOKYO MX 2018/03/19(月) 25:00)
  10. 23:26〜23:29 25歳の女子高生 #11「最低最悪の日」(AT-X 2018/03/19(月) 25:55)

[] Raspberry Piサーバを作る

Raspberry Piを自宅のルータに接続して、グローバル固定IPアドレスを取得せずにダイナミックDNSホスト名を割り当て、IPアドレスを固定せずにUPnPポート開放して、PHPMySQLが使えるWebサーバSSH&SFTPサーバ独自ドメインインターネット上に公開してみる。

Raspberry PiのOSのダウンロード解凍microSDカードへの書き込みSSHサーバ有効化するための空ファイル作成SSH接続によるリモート操作のためにWindows PC等を使用する。

Raspberry Piディスプレイキーボードを接続する必要はない。Raspberry Pi Zero等はUSB LANアダプタでルータに接続する必要がある。

OSのダウンロード解凍

Raspberry Pi公式サイト(英語)の「DOWNLOADS」→「RASPBIAN」→「RASPBIAN STRETCH LITE」の「Download ZIP」で「2018-04-18-raspbian-stretch-lite.zip」をダウンロードしたら解凍して「2018-04-18-raspbian-stretch-lite.img」を取り出す。

Windows場合は「2018-04-18-raspbian-stretch-lite.zip」を右クリック→すべて展開→展開で解凍できる。

コードネーム(RASPBIANに続くSTRETCHの部分)や日付などは更新されると変わる。

microSDカードにOSを書き込む

2GB以上のmicroSDカードを取り付けて、ddコマンド等で「2018-04-18-raspbian-stretch-lite.img」をmicroSDカードに書き込む。

Windows場合は、Raspberry Pi公式サイト(英語)の「DOWNLOADS」→「RASPBIAN」→「installation guide」→「Etcher」で、ETCHER公式サイト(英語)の「Download for Windows x64」*1で64ビットWindowsインストーラーをダウンロードしたら、「Etcher-Setup-1.4.4-x64.exe」を実行→ライセンス契約書が出たら、同意する。

Etcherが起動したら、Select image→先ほど解凍した「2018-04-18-raspbian-stretch-lite.img」を選択して、開く→microSDカード以外が選択されていたら、Changeで変更→Flash!→このアプリデバイスに変更を加えることを許可しますか?が出たら、はいFlash Complete!が出たら、Etcherを閉じる。

SSH接続の設定

一旦、microSDカードを取り外して、再度取り付けたら、先頭のFATパーティションボリュームベルがbootのドライブ)にssh名前で空のファイル作成する。

Windows場合は、スタートメニューを右クリックファイル名を指定して実行→名前に「CMD /C "COPY NUL D:\ssh"」と入力して、OK(「D:」の部分はボリュームベルがbootのドライブ名に置き換える)で空のファイル作成する。

SSH接続

Raspberry PimicroSDカードLANケーブルACアダプタを取り付けて電源を入れると、SSHクライアントから接続先ホスト名にraspberrypi.local、接続先ユーザー名にpi、接続先パスワードにraspberryを指定することでSSH接続できる。

Windows場合はmDNSで名前解決できないのでiTunesもしくはBonjour Print Servicesを予めインストールしておく。

Windows 10sshコマンドは、スタートメニューを右クリックファイル名を指定して実行→名前に「ssh 接続先ユーザー名@接続先ホスト名」を入力して、OK(接続できない場合は「C:\Users\Windowsユーザー名\.sshフォルダを削除してから行う)。初回のみ「Are you sure you want to continue connecting (yes/no)? 」が表示されるので「yes」入力する。「接続先ユーザー名@接続先ホスト名's password: 」が出たら接続先パスワード入力する。

Windows 10 Fall Creators Update(バージョン 1709)の場合は標準でsshコマンドが入っていないので、スタートメニュー→設定→アプリアプリ機能オプション機能管理機能の追加→OpenSSH Client (Beta)→インストールで、インストールした後に再起動する。

他のWindows場合は、PuTTY-ranvis等のSSHクライアントインストールして使用する。

ホスト名、言語、タイムゾーンの変更

sudoコマンドを使って、rootユーザーでraspi-configコマンドを実行する。(WindowssshコマンドPuTTYなどを使っている場合コマンドを1行ずつコピーして、SSH接続している画面上で右クリックすれば貼り付けられる。)

sudo raspi-config

以後、カーソルキー選択、Tabキーで項目間の移動、スペースキーもしくはEnterキーで決定もしくはチェックのON/OFFとして操作できるので、以下のようにホスト名、言語、タイムゾーンを変更して再起動する。

  1. 2 Network Optionsを選択して、Select→N1 Hostnameを選択して、Select→Ok→raspberrypiを新しいホスト名に変更して、Ok
  2. 4 Localisation Optionsを選択して、Select→I1 Change Localeを選択して、Select→en_GB.UTF-8 UTF-8のチェックをはずして、ja_JP.UTF-8 UTF-8にチェックを入れて、Ok→ja_JP.UTF-8選択して、Ok
  3. 4 Localisation Optionsを選択して、Select→I2 Change Timezoneを選択して、SelectAsia選択して、Ok→Tokyo選択して、Ok
  4. Finish→Yes(この後、自動的再起動される)

ユーザー名、パスワードの変更

自分自身ユーザー名は変更することが出来ないので、sudoコマンドが使える一時的ユーザーを別途作成する。「tmpuser」の部分は任意一時的ユーザー名に置き換える。

sudo useradd -m -G sudo -s /bin/bash tmpuser
sudo passwd tmpuser
exit

一時的ユーザーで接続後、パスワード無しのsudo設定を削除し、標準のユーザー名、ホームディレクトリ、グループ名、パスワードの変更を行う。「newuser」の部分は変更後のユーザー名に置き換える。

sudo rm /etc/sudoers.d/010_pi-nopasswd
sudo usermod -l newuser pi
sudo usermod -d /home/newuser -m newuser
sudo groupmod -n newuser pi
sudo passwd newuser
exit

変更したユーザーで接続後、一時的作成したユーザーを削除する。「tmpuser」の部分は一時的ユーザー名に置き換える。

sudo userdel -r tmpuser

Raspberry Piファームウェア更新

rpi-updateコマンドRaspberry Piファームウェアアップデートする。

sudo rpi-update

更新があった場合は「*** A reboot is needed to activate the new firmware」と表示されるので、Raspberry Pi再起動する。

sudo reboot

パッケージの更新

Raspbianのパッケージ一覧リスト更新し、インストール済パッケージの更新を行う。

sudo apt-get update
sudo apt-get upgrade -y

NTPサーバ時計を同期

ntpパッケージをインストールする。

sudo apt-get -y install ntp

しばらくしてから「ntpq -p」で行頭に「*」の付いたNTPサーバがあれば同期されている。

必要に応じて/etc/ntp.confを自分プロバイダ国内のNTPサーバに書き換えて「sudo systemctl restart ntp」で再起動する。

Windows共有

Sambaインストールするとホスト名.localでなく、ホスト名でもアクセス出来るようになる。

また、ユーザーホームディレクトリを共有フォルダとしてアクセス出来るように/etc/samba/smb.confを書き換えて、Samba再起動する。「newuser」の部分はホームディレクトリを共有フォルダにしたいユーザー名に置き換える。

sudo apt-get -y install samba
sudo sed -i -e '/^\[global\]/a\   unix charset = UTF-8\n   dos charset = CP932' /etc/samba/smb.conf
sudo sh -c "echo '[newuser]' >> /etc/samba/smb.conf"
sudo sh -c "echo '   path = /home/newuser' >> /etc/samba/smb.conf"
sudo sh -c "echo '   guest ok = yes' >> /etc/samba/smb.conf"
sudo sh -c "echo '   read only = no' >> /etc/samba/smb.conf"
sudo sh -c "echo '   force user = newuser' >> /etc/samba/smb.conf"
sudo systemctl restart smbd

Webサーバインストール

WebサーバApacheインストールする。

sudo apt-get -y install apache2

Webブラウザで「http://ホスト名.local/」が開けるか確認する。

PHPインストール

PHPApachePHPモジュールをインストールする。

sudo apt-get -y install php libapache2-mod-php

下記のように/var/www/html/phpinfo.php作成後、Webブラウザから「http://ホスト名.local/phpinfo.php」を開くとPHP動作確認が出来る。確認後、/var/www/html/phpinfo.phpは削除しておく。

sudo sh -c 'echo '\''<?php phpinfo(); ?>'\'' > /var/www/html/phpinfo.php'

MySQLインストール

MySQLPHPMySQLモジュールをインストールした後、Apache再起動してPHPMySQLモジュールを読み込ませ、MySQLのrooユーザーパスワードを設定する。「rootpass」の部分はrootに設定するパスワードに置き換える。

sudo apt-get -y install mysql-server php-mysql
sudo systemctl restart apache2
sudo mysql -u root
UPDATE mysql.user SET Password = PASSWORD('rootpass') WHERE User = 'root';
FLUSH PRIVILEGES;
EXIT

MyDNS.JPでドメインを設定してサーバを外部に公開

ダイナミックDNSサービスのMyDNS.JPにユーザ登録してドメイン名を設定する。

無料ドメイン名は末尾が「.mydns.jp」等になる。別途、独自ドメインを取得している場合は取得したサイトネームサーバーにns0.mydns.jpを設定する(複数設定できる場合は、ns1.mydns.jp、ns2.mydns.jpも設定する)。

  1. MyDNS.JPの「JOIN US」(ユーザー登録)で「氏名」、「住所」、「電話番号」、「メール1」、「確認キー」を入力して「CHECK」、「以下の内容でよろしければ、OKボタンを押してください。」が出たら「OK」。
  2. 「ご登録ありがとうございました。」が出たら、先ほど入力したメールアドレスに届いたメールマスターIDとパスワード確認する。
  3. User Loginから「MasterID」と「Password」を入力して「LOG IN」→「DOMAIN INFO」→「Domain」に任意ドメイン名(例:hogehoge.mydns.jp)を入力して「CHECK」、「以下の内容でよろしければ、OKボタンを押してください。」が出たら「OK」。

ポート開放ツールのMiniUPnPをインストールして、5分ごとにWebサーバおよびSSHサーバ(SFTPサーバ)で使用するポートを開放し、MyDNS.JPのダイナミックDNS更新する設定を追加する。「MasterID」と「Password」の部分はMyDNS.JP登録時に届いたメールマスターIDとパスワードに置き換える。

sudo apt-get -y install miniupnpc
sudo sh -c 'echo '\''#!/bin/sh'\'' > /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''tmpfile=`mktemp`'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''upnpc -l > $tmpfile 2>&1'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''nowip=`sed -n -e "s/Local LAN ip address : //p" $tmpfile`'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''for port in 22 25 80; do'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''oldip=`sed -n -e "/TCP *$port->/s/.*->\([0-9.]*\):.*/\\1/p" $tmpfile`'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''if [ -n "$oldip" -a "$oldip" != "$nowip" ]; then upnpc -d $port TCP > /dev/null 2>&1; fi'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''upnpc -a $nowip $port $port TCP > /dev/null 2>&1'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''done'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''rm $tmpfile'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo sh -c 'echo '\''wget -O - https://MasterID:Password@www.mydns.jp/login.html > /dev/null 2>&1'\'' >> /usr/local/bin/mydnsupdate.sh'
sudo chmod 700 /usr/local/bin/mydnsupdate.sh
sudo sh -c 'echo '\''*/5 * * * *  root  /usr/local/bin/mydnsupdate.sh'\'' > /etc/cron.d/mydnsupdate'

エディタ等で/usr/local/bin/mydnsupdate.shを作成する場合は、sudo sh -c 'echo '\''から'\''の間を入力する。ただし、\\1の部分は\1に置き換える(sudo sh -cで実行させる都合上、エスケープさせているので)。

WordPressインストール

ApacheMySQLPHPインストールされているので、試しにWordPressApacheルートディレクトリインストールしてみる。

WordPressダウンロードして展開し、Apacheルートディレクトリに設置、パーミッションを設定した後、MySQLWordPress用のユーザー名とパスワードデータベース作成する。「wpuser」と「wppass」の部分はWordPress用に任意ユーザー名とパスワード、「wordpress」の部分はWordPress用に任意データベース名に置き換える。

wget http://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
sudo rm /var/www/html/*
sudo mv wordpress/* /var/www/html/
rmdir wordpress
sudo chown -R www-data:www-data /var/www/html/
sudo mysql -u root -p
CREATE DATABASE wordpress;
GRANT ALL ON wordpress.* TO wpuser@localhost IDENTIFIED BY 'wppass';
EXIT

Webブラウザでhttp://ホスト名.local/を開いて、日本語→続ける→さあ、始めましょう!→データベース名にwordpressユーザー名にwpuser、パスワードにwppassを入力して、送信インストール実行→サイトタイトルユーザー名、パスワードメールアドレス入力して、WordPressインストールで初回設定を行う。「wpuser」と「wppass」の部分はWordPress用のユーザー名とパスワード、「wordpress」の部分はWordPress用のデータベース名に置き換える。

尚、WordPressは初回設定したURL以外からアクセス出来ないので、ダッシュボード→設定→一般からWordPress アドレス (URL)とサイトアドレス (URL)をMyDNS.JPで指定したドメイン名に書き換えて、変更を保存(この後、エラー404が表示され、http://ホスト名.local/からアクセス出来なくなる)。

今後の予定

*1:32ビットWindows場合は「Download for Windows x64」右隣の「▼」から「Etcher for Windows x86 (32-bit) (Installer)」を選択してダウンロードする

トラックバック - http://d.hatena.ne.jp/nyanonon/20180516