ライン

ポイント:ユーザが多いと情報も多いので安心

ライン

 はじめに

Raspbian

 元気に毎日動作していたRaspberry Piでしたが、急に php5-fpmが落ちてしまい、その後の対処方法に悩みそうでしたので、別のSDカードに環境を作り、作り直ししちゃうことにしました。
 FreeBSD 10.1には、イメージファイルがあるらしいので、そっちで使ってみるというのも面白そうでしたが、portsのコンパイルで長々時間がかかることを考えると、今回はパスしました。期待していた方がいましたらごめんなさい。たぶん他の方がやっているはずです…のでそっちを。

 …ということで、ダウンロードページを経由しRaspbian(Debian Wheezy)な選択をしました。
個人的には、PidoraのようなRedHat系に近い方がなじみがあるのですが、これまでも使っていたこともあるので、変更しない方針にしました。
今回取得したファイルは「2014-09-09-wheezy-raspbian.zip」というファイルになりました。3ヶ月前だし、いろんな課題なども見つかっている時期と思うのでちょうど良っそう。
 ファイルのダウンロードには10分ちょっとかかりました。933MB程度あるみたいです。
ZIPファイルを解凍すると上記のように、2014-09-09-wheezy-raspbian.img というファイルが取得できますので、これを使います。

 今回のSDカードは、手元にあった8GBのソケット付きMiacro SDにします。
毎度で、DD for Windowsでイメージをコピーするだけで良いです。細かなことは割愛して、入れちゃいます。

 後は、マイクロUSBを電源今日供給用に接続、USBキーボードを入れ、HDMIにケーブルを入れて、初期設定。
※この辺りは、うちのページでは、割愛。

 sshdを起動させて、起動させました。後は、Tera termで通常に利用することができるようになりました。
しかし、ここはDebian Linuxな世界。メモを残さないと私が困るので、この後はメモを取っておきます。

 OSの設定

普通に使えるまでに設定を入れる

 

 まずは、ネットワークをローカルLANの固定IPアドレスにしたいです。

# vi /etc/network/interfaces

 で、設定を変更します。

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

 のように現在はなっていました。

auto lo

iface lo inet loopback
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.0.101
netmask 255.255.255.0
gateway 192.168.0.1

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

 のようにしました。/etc/resolv.confは DHCPで拾った内容そのままでいいので放置して、念のための再起動であがってくることを確認。

 さて、次はviが気持ちが悪いので、vimに変更します。

# apt-get update
ヒット http://raspberrypi.collabora.com wheezy Release.gpg
ヒット http://mirrordirector.raspbian.org wheezy Release.gpg
ヒット http://repository.wolfram.com stable Release.gpg
ヒット http://archive.raspberrypi.org wheezy Release.gpg
ヒット http://raspberrypi.collabora.com wheezy Release
ヒット http://mirrordirector.raspbian.org wheezy Release
ヒット http://repository.wolfram.com stable Release
ヒット http://raspberrypi.collabora.com wheezy/rpi armhf Packages
ヒット http://mirrordirector.raspbian.org wheezy/main armhf Packages
ヒット http://archive.raspberrypi.org wheezy Release
ヒット http://mirrordirector.raspbian.org wheezy/contrib armhf Packages
ヒット http://mirrordirector.raspbian.org wheezy/non-free armhf Packages
ヒット http://archive.raspberrypi.org wheezy/main armhf Packages
ヒット http://mirrordirector.raspbian.org wheezy/rpi armhf Packages
ヒット http://repository.wolfram.com stable/non-free armhf Packages
無視 http://raspberrypi.collabora.com wheezy/rpi Translation-ja_JP
無視 http://raspberrypi.collabora.com wheezy/rpi Translation-ja
無視 http://raspberrypi.collabora.com wheezy/rpi Translation-en
無視 http://repository.wolfram.com stable/non-free Translation-ja_JP
無視 http://repository.wolfram.com stable/non-free Translation-ja
無視 http://repository.wolfram.com stable/non-free Translation-en
無視 http://archive.raspberrypi.org wheezy/main Translation-ja_JP
無視 http://archive.raspberrypi.org wheezy/main Translation-ja
無視 http://archive.raspberrypi.org wheezy/main Translation-en
無視 http://mirrordirector.raspbian.org wheezy/contrib Translation-ja_JP
無視 http://mirrordirector.raspbian.org wheezy/contrib Translation-ja
無視 http://mirrordirector.raspbian.org wheezy/contrib Translation-en
無視 http://mirrordirector.raspbian.org wheezy/main Translation-ja_JP
無視 http://mirrordirector.raspbian.org wheezy/main Translation-ja
無視 http://mirrordirector.raspbian.org wheezy/main Translation-en
無視 http://mirrordirector.raspbian.org wheezy/non-free Translation-ja_JP
無視 http://mirrordirector.raspbian.org wheezy/non-free Translation-ja
無視 http://mirrordirector.raspbian.org wheezy/non-free Translation-en
無視 http://mirrordirector.raspbian.org wheezy/rpi Translation-ja_JP
無視 http://mirrordirector.raspbian.org wheezy/rpi Translation-ja
無視 http://mirrordirector.raspbian.org wheezy/rpi Translation-en
パッケージリストを読み込んでいます... 完了
# apt-get install vim
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  vim-runtime
提案パッケージ:
  ctags vim-doc vim-scripts
以下のパッケージが新たにインストールされます:
  vim vim-runtime
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 36 個。
5,281 kB のアーカイブを取得する必要があります。
この操作後に追加で 24.5 MB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main vim-runtime all 2:7.3.547-7 [4,607 kB]
取得:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main vim armhf 2:7.3.547-7 [674 kB]
5,281 kB を 3秒 で取得しました (1,489 kB/s)
以前に未選択のパッケージ vim-runtime を選択しています。
(データベースを読み込んでいます ... 現在 73301 個のファイルとディレクトリがイン ストールされています。)
(.../vim-runtime_2%3a7.3.547-7_all.deb から) vim-runtime を展開しています...
'vim-runtime による /usr/share/vim/vim73/doc/help.txt から /usr/share/vim/vim73/doc/help.txt.vim-tiny への退避 (divert)' を追加しています
'vim-runtime による /usr/share/vim/vim73/doc/tags から /usr/share/vim/vim73/doc/tags.vim-tiny への退避 (divert)' を追加しています
以前に未選択のパッケージ vim を選択しています。
(.../vim_2%3a7.3.547-7_armhf.deb から) vim を展開しています...
man-db のトリガを処理しています ...
vim-runtime (2:7.3.547-7) を設定しています ...
Processing /usr/share/vim/addons/doc
vim (2:7.3.547-7) を設定しています ...
update-alternatives: /usr/bin/vim (vim) を提供するために 自動モード で /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/vimdiff (vimdiff) を提供するために 自動モード で /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/rvim (rvim) を提供するために 自動モード で /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/rview (rview) を提供するために 自動モード で /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/vi (vi) を提供するために 自動モード で /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/view (view) を提供するために 自動モード で /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/ex (ex) を提供するために 自動モード で /usr/bin/vim.basic を使います
# dpkg -l|grep vim
ii  vim                                   2:7.3.547-7                             armhf        Vi IMproved - enhanced vi editor
ii  vim-common                            2:7.3.547-7                             armhf        Vi IMproved - Common files
ii  vim-runtime                           2:7.3.547-7                             all          Vi IMproved - Runtime files
ii  vim-tiny                              2:7.3.547-7                             armhf        Vi IMproved - enhanced vi editor - compact version

導入ができました。

 次は、ユーザの追加です。

# adduser foo
ユーザ `foo' を追加しています...
新しいグループ `foo' (1004) を追加しています...
新しいユーザ `foo' (1001) をグループ `foo' として追加しています...
ホームディレクトリ `/home/foo' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しいUNIXパスワードを入力してください:
新しいUNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
foo のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
        フルネーム []: fkimura
        部屋番号 []:
        職場電話番号 []:
        自宅電話番号 []:
        その他 []:
以上で正しいですか? [Y/n] y

これでできあがりました。piユーザはこれでしばらくは使わないつもり。
作成したユーザにssh接続し直して、公開鍵を ~/.ssh/authorized_keys に追加。
ついでなので、ここで.bashrcとか.vimrcを作成しておく。
.bashrcは、FreeBSDの時と同じような感じで使いたかったので、

alias ll='ls $LS_OPTIONS -lAF'
alias vi='vim'
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

のようにしました。tcshを使うことはあえてしていません。

また、/etc/ssh/sshd_configの

PermitRootLogin no

を変更してsshdの再起動。
おっと、Debianだったので、chkconfigを導入して、serviceコマンドが利用できるようにしました。

# apt-get install chkconfig
# service ssh restart

こんな感じ。だいぶ普通に使えてきました。

# df -m
ファイルシス   1M-ブロック  使用 使用可 使用% マウント位置
rootfs                7341  2351   4643   34% /
/dev/root             7341  2351   4643   34% /
devtmpfs               215     0    215    0% /dev
tmpfs                   44     1     44    1% /run
tmpfs                    5     0      5    0% /run/lock
tmpfs                   88     0     88    0% /run/shm
/dev/mmcblk0p1          56    10     47   18% /boot

 SDカードの中身がまだまだガラガラです。

通常

# apt-get install bind9-host dnsutils

その他、いろんな設定をしていたはずですが、同じマシンにSDカードを入れ替えて眺めないとわからないので、こんなところでひとまずは終了にしました。

 これまで設定していたものを戻す

gnudip2

 これは、別のページに記載している通りなので、興味がございましたらご参考にどうぞ。
DynamicDNS連動となります。

# cd /usr/local
# mkdir dip
# cd dip
※ここに旧作成ファイルを設置
# ll
合計 36
-rw-r--r-- 1 foo foo    74 12月  6 21:04 dipcron.sh
-rw-r--r-- 1 foo foo    10 12月  6 21:04 gdipc.cache.example1.example.com
-rw-r--r-- 1 foo foo   140 12月  6 21:05 gdipc.conf
-rw-r--r-- 1 foo foo 21280 12月  6 21:05 gdipc.pl
# chmod 700 dipcron.sh
# chmod 600 gdipc.c*
# chown root:root *

crontab -e で登録等を行って連動開始。

# DynamicDNS 20141206
0,20,40 * * * * root    /usr/local/dip/dipcron.sh

これでこれまで通りに、非固定IPアドレスであっても現在のIPが何になっているかを登録できました。

リバースプロキシと公開ページ

 やっぱり、Apache22にすることにしました。
node-http-proxyには、SSL鍵を設定していました。これも一緒に持ってこないとダメですが、このままapacheでも利用できそうです。
ここは一番気になるところなので、早速Apache22 + PHP5の構成で導入しようと思います。
良く考えると、PHP5のLinuxサーバはかなり久しぶりなので手順ないかも。

# apt-get install apache2 php5
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-php5 libapr1
  libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libonig2 libqdbm14 lsof php5-cli php5-common
  ssl-cert
提案パッケージ:
  apache2-doc apache2-suexec apache2-suexec-custom php-pear openssl-blacklist
以下のパッケージが新たにインストールされます:
  apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-php5 libapr1
  libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libonig2 libqdbm14 lsof php5 php5-cli php5-common
  ssl-cert
アップグレード: 0 個、新規インストール: 17 個、削除: 0 個、保留: 36 個。
7,488 kB のアーカイブを取得する必要があります。
この操作後に追加で 22.4 MB のディスク容量が消費されます。
続行しますか [Y/n]? y

入りました。確認してみます。

# php -v
PHP 5.4.35-0+deb7u2 (cli) (built: Nov 19 2014 13:13:59)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologie

Apache2.2サーバも動作中です。SSL化はこれからです。

のように表示されていることを確認。

さて、Debianのapacheは、/etc/apache2/apache2.conf というのが設定ファイルらしい。
/etc/apache2/sites-availableのdefaultというファイルにディレクトリの位置などの情報がある。
ドキュメントルートは、DocumentRoot /var/www のように書かれていました。
確かに、このファイルですね。

<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>

では、ここにphp動作確認用にファイルを設置します。

<?php
phpinfo();
?>

というファイルをphpという拡張子名のファイルを作成して設定し、ブラウザ参照することで確認できます。

問題なしでした。ただし、動作はもっさり感ありかなぁ…。
php.iniは、/etc/php5/apache2にありました。

SSL化は、同様に/etc/apache2/sites-availableのdefault-sslに書かれた内容で動作します。
Startsの無料鍵を利用しましたので、CAと中間証明書も一緒に配置します。

# cd /etc/ssl/certs
# wget https://www.startssl.com/certs/ca.pem -O ./startssl_ca.pem
# wget https://www.startssl.com/certs/sub.class1.server.ca.pem -O ./startssl_sub.class1.server.ca.pem
# chmod 600 startssl_*

以下を追加しました。

        SSLCertificateFile      /etc/ssl/certs/example.com.crt
        SSLCertificateKeyFile   /etc/ssl/private/example.com.key
        SSLCertificateChainFile /etc/ssl/certs/startssl_sub.class1.server.ca.pem
        SSLCACertificateFile    /etc/ssl/certs/startssl_ca.pem

のように記述し、以前作成した鍵をそれぞれ /etc/ssl/privateと/etc/ssl/certsにそれぞれの鍵を配置する。

# a2ensite default-ssl
Enabling site default-ssl.
To activate the new configuration, you need to run:
  service apache2 reload
# a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  service apache2 restart
# service apache2 restart

これで、何事も無かったかのごとく、Apache 2.2 + PHP5 + SSL通信が復活しました。

ただし、アンドロイドのブラウザからはアクセスできずでいました。
「ERR_SSL_PROTOCOL_ERROR」と表示されている(CROME)みたいだ。
これは、SSL証明書の問題っぽい。
期限切れはしていないはずだが、StartSSLのキーをそのまま持ち込んでいるし、少し確認。
※※実際には、もうちょい、SSLv2やSSLv3を削除したりの対策も加えて動作させています※※

リバースプロキシ導入設定

では、続きでやっとリバプロの導入を行います。

# apt-get install libapache2-mod-proxy-html
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  libapache2-mod-proxy-html
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 36 個。
27.6 kB のアーカイブを取得する必要があります。
この操作後に追加で 125 kB のディスク容量が消費されます。
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libapache2-mod-proxy-html armhf 3.0.1-1.1 [27.6 kB]
27.6 kB を 1秒 で取得しました (24.3 kB/s)
以前に未選択のパッケージ libapache2-mod-proxy-html を選択しています。
(データベースを読み込んでいます ... 現在 75542 個のファイルとディレクトリがインストールされてい ます。)
(.../libapache2-mod-proxy-html_3.0.1-1.1_armhf.deb から) libapache2-mod-proxy-html を展開してい ます...
libapache2-mod-proxy-html (3.0.1-1.1) を設定しています ...
[....] Reloading web server config: apache2apache2: Could not reliably determine the server's fully
 qualified domain name, using 127.0.1.1 for ServerName
. ok
# a2enmod proxy
Enabling module proxy.
To activate the new configuration, you need to run:
  service apache2 restart
# a2enmod proxy_http
Considering dependency proxy for proxy_http:
Module proxy already enabled
Enabling module proxy_http.
To activate the new configuration, you need to run:
  service apache2 restart
# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart
# service apache2 restart 
# apache2ctl -M
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 proxy_module (shared)
 proxy_html_module (shared)
 proxy_http_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 ssl_module (shared)
 status_module (shared)
Syntax OK

…という流れで、導入と有効化を行いました。

加わった、/etc/apache2/mods-enabled/proxy.confに必要な情報を加えていきます。
最初は、

<IfModule mod_proxy.c>

# If you want to use apache2 as a forward proxy, uncomment the
# 'ProxyRequests On' line and the <Proxy *> block below.
# WARNING: Be careful to restrict access inside the <Proxy *> block.
# Open proxy servers are dangerous both to your network and to the
# Internet at large.
#
# If you only want to use apache2 as a reverse proxy/gateway in
# front of some web application server, you DON'T need
# 'ProxyRequests On'.

#ProxyRequests On
#<Proxy *>
#        AddDefaultCharset off
#        Order deny,allow
#        Deny from all
#        #Allow from .example.com
#</Proxy>

# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
#ProxyVia Off

</IfModule>

のようにコメントになっているので、はずしつつ追記していきます。
ちなみに、グローバルネットワークからアクセスするためには、Allow from .example.net のように追加して限定利用にします。

<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
        AddDefaultCharset off
        Order deny,allow
        Deny from all
        Allow from 192.168.0.0/24
</Proxy>

ProxyPass               /rproxy     http://192.168.0.1/
ProxyPassReverse        /rproxy     http://192.168.0.1/

ProxyVia On
</IfModule>

強制的にSSL化したいので、/etc/apache2/sites-available/defaultに以下を加えました。

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{SERVER_PORT} !^443$
        RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</IfModule>

これでサービスをリスタート。

# htpasswd -c /etc/apache2/conf.d/proxyid.passwd user

# service apache2 restart
[ ok ] Restarting web server: apache2 ... waiting .

 これでアクセスすれば、SSL通信に切り替わって通信していることが確認できました。

これでなんとか以前までの状態に戻せたつもりです。


【改訂履歴】作成:2014/12/06 更新:-

【リンク】


Copyright © 1996,1997-2006,2007- by F.Kimura,