yottchan のすべての投稿

ラズパイ・ゼロにパイカメラを接続してみる!

我が家の2代目となるラズパイ3で使おうと思っていたパイカメラを、パイゼロにつなげてムービーや静止画を撮影できるカメラ機能を実装しようと、

いざ、フレキシブルケーブルをパイゼロ側の専用コネクタに挿入しようとしたところ、、、、

あれ!?コネクタよりケーブルのほうが若干大きいことに気づき、しばらく途方にくれる。。。

意識を取り戻し、パイゼロ用のパイカメラなるものがあるのか!?と思いきや、

一般的には、オフィシャル・ラズパイゼロ用ケースに付属の変換フレキシブルケーブルを使うようです。

ケースはいらないので、単品でないかAmazonで調べたところ、、、、いずれも薄っぺらい物であるにもかかわらず千円台とかなりの値段でした!

なので、アキバで安いやつを探そうと、まずはAitendoへ。

コネクタの形状を忘れてしまい、”ラズパイゼロ用”といった説明書きがないのでどれかわからず、ここで購入することはできませんでした。しかし、ここでわかったのは、一般的にフレキシブルケーブル自体高価なもののようです。

次に、(平日会社帰りで来たので、すでに19時を回っており千石や秋月は閉店してたので)マルツに入ったところ、ちゃんと、”ラズパイゼロ用”と親切に書かれており、しかもお値段¥700!迷わず即決で購入!!(しかも、オフィシャルケース付属のものより、長さがある)

早速、帰宅してパイゼロとパイカメラVer2.1に接続したところ、、、、

”vcgencmd get_camera”コマンドを実行するも、出力結果で”detected=0”との表示。

どうやら認識してなさそうで、ケーブルの向きが違うものかと確認したところ、そうでもなさそうでした。

この間、全パッケージのアップデートを実行していたので、アップデート適用後の再起動ののち、再度上記コマンドを実行してみたところ、下記のような結果になった。

$> vcgencmd get_camera

supported=1  detected=1

上記のとおり、両方の値が”1”であれば、認識され利用可能な状態になっていることをあらわします。

なので、さっそくラズパイ標準実装のRASPICAMコマンド”raspistill(静止画撮影用)”と”raspivid(動画撮影用)”を実行してみることに。

$ raspistill -o testimage.jpg

まずは静止画。上記コマンドを実行すると、カメラのファインダーみたくカメラ画像が表示され、しばらくするとキャプチャーして静止画になって終了。

早速、出来上がった画像ファイル(上記のコマンド例では、testimage.jpg)を、これまた標準実装のイメージビューアで開くと。。。。。

動きがなんだか思いような。。。

って、イメージビューアのウィンドウタイトルを見ると、”3280×2464”との表示!

とんでもない大きさ!(ファイルサイズも、jpegで10MiB)

おもちゃ程度のものだとたかをくくっていたら、想像以上の代物。

改めてパイカメラV2のスペックを確認すると、、、、


・イメージセンサ=Sony製CMOSセンサ”IMX219”

固定フォーカス

実行画素数(H x V)=3280×2464

・静止画解像度=約800万画素

・動画撮影時フレームレート

1080p時30フレーム/秒

720p時60フレーム/秒

VGA640x480時90フレーム/sec

・露出・ホワイトバランス・輝度自動制御


こんなものでもHD動画撮影出来てしまうんですね。。。。

ということで、動画も撮ってみることに。

$ raspivid -o testvideo.h264 -t 10000 -w 640 -h 480

動画撮影の場合は、オプションで録画時間(-t)、横/縦サイズ(-w,-h)を指定のこと。

再生するには、ソフトがないので、VLCをインストールする。

ちなみにインストール方法は、

$ sudo apt-get install vlc

パイゼロで再生すると、、、、、

さすがに重くて再生は厳しかったです。

ラズパイ・ゼロのカスタマイズ

GPS端末の製作という最終目的からすると、ここもまた下ごしらえでしかないが、そのための、もしくは個人的な好みも含めた作業となるので、あえて別タイトルとして記述します。

なので、ここでの記載内容は必須ではなく、参考まで。

先のラズパイゼロの下ごしらえでは、USB無線LANでインターネット接続できるようになるまでで終ってましたが、さらにそこからの続きの作業となります。

まずは、デフォルトでインストールされている不要プログラムパッケージをアンインストールして、少しでもシステム領域として使用しているSDメモリの空き容量を確保するよう努めます。

Applicationメニューから、不要なプログラムパッケージを下記とします。

  • (Programming>)Mathematica&Wolfram
  • (Programming>)Scratch
  • (Internet>)ClawsMail

現在インストール中のすべてのパッケージを漁っていくと、不要なものはいっぱい出て競うではありますが、キリがないのでまずは目に付くものから削除していくことにしました。

削除は、Applicationメニューから、「Prefernces」>「Add/Remove Software」で、上記プログラムを検索して、該当するパッケージを選択の上、削除実行。

Mathematica&Wolfram=「Mathematica and the Wolfram Language」

Scratch=「easy to use programming environment for ages 8and up」+ 「Squeak plugin for the Schratch…」

claws-mail=「fast ,lightweight and user-friendly GTK+2based email client」+ほかClaws-mailのPluginパッケージ

不要なパッケージがなくなったので、ここでパッケージ全体をアップデートさせる。

$> sudo apt-get update

$>sudo apt-get upgrade

正常に完了したら、つぎは日本語入力環境のインストール。

別ページにも記載しているとおり、jfbtermとmozcパッケージをインストールする。

これらのインストールが完了したら、ラズパイ設定画面(Menu>Preferences>Raspberry Pi Configuration)を開き、”Localization”タブ内の”Locale”設定項目を、日本語(ja.Japanese)に変更し、再起動させる。

そうすると、再起動後のデスクトップの表記が日本語に変わってます。

これで、文字入力しやすくなり、作業しやすくなったと思います。

あとは、ラズパイゼロで何をしたいのかという主機能となるソフトウェアやデバイスを追加していくことに。。。

たとえば、

  • Bluetoothキーボードを接続して脱USBハブ化
  • Piカメラを接続してムービー&スチルカメラ化
  • ハイレゾモジュールを接続してポータブルプレーヤ化
  • GPSモジュールを接続してGPS端末化
  • 液晶タッチパネルを接続してモバイル情報端末化

など。。。。

やりたいことはたくさん!

 

 

ラズパイ・ゼロの下ごしらえ

先のラズパイゼロ購入の続き、、、、

まずは、コンソール操作ができるようになったと言うことで、ラズパイの基本設定を実施することに。

メニューから、「Preferences」>「Raspberry Pi Configuration」を実行。

別ページにも記載しているとおり、設定を行います。

ただし、ここで注意すべきは、”Localization”タブの”Locale”ところで、現時点で”Ja(Japanese)”を選択してしまうと、日本語フォントが未導入のため、システムすべての文字が文字化けして操作が困難になってしまいます。なので、ここだけは、弄らずにほかの箇所(”Localization”タブ内の項目)を変更すること。

(後に、日本語環境をインストールできたら、忘れずここを変更しましょう)

次に、やっぱりN/W接続ができないことには、できる作業が制限されたり、かなり面倒になるので、無線LANを自宅の無線APに接続できるよう設定します。

ではさっそく、、、と思いきや、デスクトップ画面右上のあるWiFi設定アイコンをクリックしても、最寄りのアクセスポイントが全く検知されていない状態となってました。

あれ?ひょっとしてこの状況は、ラズパイゼロ内蔵(のはず)の無線LANインタフェースを認識していないのでは!?と驚愕し、ありきたりのコマンドを叩いて確認してみました。

pi@razpi0:~ $ sudo ifconfig -a
lo Link encap:Local Loopback
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 UP LOOPBACK RUNNING MTU:65536 Metric:1
 RX packets:393 errors:0 dropped:0 overruns:0 frame:0
 TX packets:393 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1
 RX bytes:31624 (30.8 KiB) TX bytes:31624 (30.8 KiB)

pi@razpi0:~ $

無線LANに接続できてなくても、普通ならここで見られるはずの”wlan0”が見当たらない。。。

そもそもシステム的に無線LANモジュールがロードされてるの?ということで、更に下記コマンドを実行してみた。

pi@razpi0:~ $ sudo lsmod
Module Size Used by
bnep 11853 2
bluetooth 365780 5 bnep
rfkill 21397 2 bluetooth
joydev 9194 0
ads7846 12525 0
hwmon 4552 1 ads7846
evdev 11650 8
snd_bcm2835 23131 1
snd_pcm 95473 1 snd_bcm2835
snd_timer 22556 1 snd_pcm
snd 68400 5 snd_bcm2835,snd_timer,snd_pcm
i2c_bcm2708 5740 0
spi_bcm2835 7424 0
bcm2835_gpiomem 3823 0
bcm2835_wdt 4133 0
uio_pdrv_genirq 3718 0
uio 10230 1 uio_pdrv_genirq
sg 20799 0
i2c_dev 6578 0
fuse 90504 3
ipv6 367671 34


pi@razpi0:~ $

のとおり、”cfg80211″といったモジュールが見当たらず、残念な結果になってました。。。

いままで、ラズパイをセットアップする際は、最初のうちはほとんど有線LANで済ませており、一通り必要な作業が済んだら無線LAN接続に切り替えて使うという段取りで、このような状況に陥ろうとは、結構ショックでした!(大概のOS初期状態の問題を解決してくれそうなパッケージのアップデートすらできない状態なので)

こうなると、このまま進められそうもなく、ラズパイゼロユーザがほとんど行っているUSBポート経由でのN/W接続に切り替えようかと思いましたが、¥1,000以上するUSBハブを買ってしまった以上、その道へ進むことは、もったいない精神から許すことができませんでした。

なので、意地でも今のままでなんとかならないものかと、あたりを見回したところ、初代ラズパイを自走ローバーに組み込んでいた時に使用していた、USB無線LANアダプタがあることを思い出し、これを引っこ抜いて、今のラズパイゼロに増設したUSBハブの最後の空きポートに差し込んでみました。

すると、いままでのラズパイすべてて苦労なく使えてきたUSB無線LANモジュール(Planex製GW-USNANO2)だけあって、刺しただけで無線LANが使えそうな状態になりました。

$ sudo dmesg

<抜粋>

[ 5000.133886] usb 1-1.1: new high-speed USB device number 6 using dwc_otg
[ 5000.235819] usb 1-1.1: New USB device found, idVendor=2019, idProduct=ab2a
[ 5000.235860] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5000.235883] usb 1-1.1: Product: GW-USNANO2
[ 5000.235904] usb 1-1.1: Manufacturer: Planex Communications Inc.
[ 5000.235922] usb 1-1.1: SerialNumber: 00e04c000001
[ 5001.847076] cfg80211: World regulatory domain updated:
[ 5001.847189] cfg80211: DFS Master region: unset

この直後、WiFi設定のアイコンを再度クリックして見ても、状況が変わらなかったので、とりあえず再起動することに。

すると、ようやくWiFi設定のアイコンをクリックすれば、最寄りの無線LANのアクセスポイントが検知され表示されるようになりました。

そのなかから、私のWiFiルータのSSIDを見つけ、N/Wキーを入力すれば、無事に接続出来ました!(ただし、このあと追加した我が家の無線LANアクセスポイントのほうには、ステルスモードなので、手動でwpa_supplicant.confに追記しましたがつながりませんでした。)

とりあえず、WEBブラウザを開き、インターネットにアクセスすることが確認できたので、まずは初回セットアップでお約束の現行の全パッケージのアップデートを行うことにしました。

後日談。。。

ようやく、次の作業に進める!ということで喜んでしまい、肝心なラズパイゼロに内蔵されている無線NICを利用可能にすることを忘れてました。。。。

とはいえ、ここまでできたら、別段なにもすることなく、一緒に内蔵無線NICも認識されてました。”ifconfig -a”コマンドを実行すれば、内蔵無線NICのほうも認識され、IPアドレスも払い出されて利用可能な状態になっていました。

(素人っぽい解釈ですが)パッケージを最新のものにすれば、認識できるということでしょうか。。。

あとは、リブートとともにUSB無線LANモジュールを引っこ抜けば、これ以降内蔵無線NICで接続してくれます。

ラズパイ・ゼロを買ってみた!

ラズパイ3で製作していたGPS機能付ポータブル端末(仮)を製作していて、試作機だからと我慢していた大きさだったが、このラズパイ3を別の用途に転用してしまい、製作はあえなく頓挫。。。

ラズパイ3+も出たので、そちらを購入しようかと迷ってんですが、、、この端末の要件を改めて考えると、やはりCPU処理性能をはじめとするラズパイ3+の機能や形状は無駄が多すぎると判断し、ラズパイ・ゼロを代替品とすることに決めました。

購入は、いつものAmazonでもよかったのですが、どうしても待ちきれずに、アキバへ直行して、マルツで購入しました。(¥2,000税別)

SDメモリは、8GB未使用品が家に転がっていたので、これを流用。

これに書き込むOSは、GPS機能付ポータブル端末(仮)に使用している、Kumanの5インチ液晶タッチパネルモニタに付属のカスタマイズ版Raspbian(Jessie)とし、これをLinuxノートPCで書き込ませて、さっそく起動!

かなりのコンパクトサイズで喜ばしい反面、セットアップ作業がいままでどおりにはできないことに気づきました。

というのも、、、USBポートがMicroBタイプのUSBポートが1つしかないと言うことです。(そういう無駄を削いだところが選定理由だったのに)

そこでUSBハブを家に落ちてないか探したところ、見当たらず。。。

なので、近所のあきばおーへ、自転車でひとっとびして、microBtoAメスの変換ケーブル、USBハブ、USBメモリを、いずれも安かったのと、今回のラズパイ・ゼロで必要になると思い込み、衝動買いしてしまいました。。。。

自宅に帰って、早速購入品とセットアップ作業に必要なマウスとキーボード、モニタをラズパイ・ゼロにつなげて、いざ起動!!

いつものデスクトップ画面が表示されたので、マウスとキーボードで操作しようとしたところ、、、、なぜかキーボードの入力を受け付けないし、マウスも使えない!!!

このUSBポートって、まさかrootハブ機能を持っていないのでは!?と思い、とりあえずキーボードだけをラズパイ・ゼロに接続して最低限の操作ができるようにと起動させて、下記コマンドを実行した。

pi@razpi0:~ $ lsusb
Bus 001 Device 005: ID 0930:1408 Toshiba Corp.
Bus 001 Device 004: ID 093a:2521 Pixart Imaging, Inc.
Bus 001 Device 003: ID 099a:0638 Zippy Technology Corp. Sanwa Supply Inc. Small Keyboard
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

※さらに詳しくUSBの接続状況を確認するには、”lsusb -v”

と、Bus 001 Device 001に”root hub”の記述があることから、(流石にそれはないよな。。。と)ひと安心。

となれば、各USBデバイスへの電源供給が不足しているのではと推測し、後日会社の帰りにアキバへ向かい、電源供給機能付きのUSBハブを購入!(ヨドバシAKBにて、バッファロー製BSH4A11¥1,120税別)

帰宅して早速、マウス・キーボード(とついでにUSBメモリ)をこれに接続してラズパイゼロを立ち上げてみた。

すると、、、、マウスの底面から赤い光を放つようになり、キーボードもCAPSロックをかけると、そのLEDが点灯。もちろんその後ノートパッドアプリで文字入力ができることを確認!!

これでようやくセットアップ作業ができるようになった!

しかし、ラズパイゼロ・ユーザのセットアップ作業のページを読むと、USBポートを使って母艦のPCにシリアルコンソール接続して、これを使ってセットアップ操作を実施するというのが、当たり前なようで、、、余計なものを買ってしまった!とがっかり。。。

次回は、この状態でのラズパイゼロのセットアップ作業の続きをご紹介。

ラズパイ(Jessie)に画面キャプチャツールを追加

通常PC版のDebianには、当たり前のように画面キャプチャツール(kshapshot)がインストールされてますが、Raspbianには、容量削減のためか、インストールされてません。

これからラズパイをいじくり倒すことをするときに、画面キャプチャをとっておくと、作業手順の記録になるので、本手順を実施されることをおすすめします。

まずは、”ksnapshot”パッケージのインストールから。。。

GUI操作で実施する場合、

「Menu」>「設定」>「Add/Remove Software」を起動させて、”ksnapshot”で検索する。

しばらく待つと、検索結果の一覧の中に、「screen capture tool」(ksnapshot-*.*…)のパッケージが存在するはずなので、これを選択して「Apply」をクリックする。

コマンドラインで操作する場合、

$> sudo apt-get install ksnapshot

実施の前に、全パッケージのアップデート(apt-get update)も忘れず実施しておきましょう。

「メニュー」への”ksnapshot”の追加

以上のいずれか一方の操作でインストール後、「Menu」のアプリケーションリストから実行できるように、以下の操作を引き続き実施します。

ちなみに、なぜか上述のksnapshotのインストールが完了すると、「サウンドとビデオ」には”VLCメディアプレーヤ”が勝手に追加されています。(最初にあった”QjackCtl”は消えています。)

今回の”ksnapshot”は、「グラフィックス」に追加することになります。

「Menu」>「設定」>「Mani Menu Editor」を起動させます。

「Mani Menu Editor」画面左側のメニュー項目一覧から、”グラフィックス”を選択し、中央のアイテムリストに対して”ksnapshot”にチェックが入っていることを確認のうえ、「OK」ボタンをクリックします。(デフォルトでチェックが入っていて本来表示されているはずなのですが、儀式的に行わないと追加がメニューに反映されないようです)

「OK」ボタンをクリックして、「Mani Menu Editor」を終了後、あらためて「Menu」>「グラフィックス」をクリックすると、「ksnapshot」が表示されるので、これをクリックして起動するか確認してください。

無事起動できて、画面キャプチャができるようになります。

以上

 

 

ラズパイ”Jessie”にChromiumをインストール

ラズパイ(Raspbian”Jessie”)には、”Epiphany(エピファニー)”というWEBブラウザが標準実装されています。

これは、GNOMEの標準ウェブブラウザとのことで、軽量かつシンプルで使いやすいのかもしれませんが、マイナーで日頃FireFoxやChromeを使っていると、一部のコンテンツは表示できないこともあり、これをメインに使うにはいまいちな感じがします。

そこで、使い慣れたWEBブラウザをラズパイに入れたいという衝動に駆られ、Chromeのベースとして開発されているChromiumをインストールしてみました。

WEB上で同じことをやっていないか調べてみると、やはり同じ考えの人はたくさんいるようで、インストール方法は、いたって簡単。パッケージが公開されているので、apt-getコマンドでインストールすればよいだけ。ちなみに、パッケージ名は、”chromium-browser”とのこと。

$> sudo apt-get install chromium-browser

念のため、実行前にインストールパッケージ全体をアップデート”apt-get update”をしておきましょう。

以上

 

ラズパイ3+ラズパイ専用タッチパネル液晶モニタのセットアップ作業

ここでは、まだ言えないが、、、

ある目的のため、ラズパイ3を購入し、更にこれに5インチの液晶タッチパネルディスプレイを実装することにした。

なお、作業に使用するPCは、Linuxを前提としている。

今回の作業でもLinux端末であることが有利なのだが、やはり本作業に限らず今後のことを考えると、ラズパイと(ほぼ)おなじOSのPCを使用することをおすすめします!(コマンドを覚えるのが大変ですが。。。)

<材料>

  1. ラズパイ3本体(RSコンポーネンツ版)
  2. 32GB microSDHCカード
  3. Raspbian (ラズパイサイトからDLしたイメージファイル)※
  4. 電源アダプタ(出力5v2.2A以上のmicroB−オスタイプのUSBコネクタ)
  5. ラズパイ専用タッチパネル液晶モニタ(Kuman製品SC5A 5インチ800☓480)※
  6. SDカードtoUSBコネクタ変換アダプタ(作業用PCにmicroSFDCカードを接続できるようにするものであれば何でも良い)
  7. モバイルルータ(旧willcomの502HW)
  8. 作業用PC(Debian端末)

※OSと液晶モニタについて、、、、

当初はcocopar製品のものを使用していたが、アキバの工作室で作業するため頻繁に持ち運んでいたせいか、破損してしまったため、再度Amazonで購入しようと検索したら品切れ状態で入手できず、代ってタッチパネル液晶モニタは、上記Kuman製となった。

またOSについては、cocopar製のものを使用していた時は、ラズパイ3にはWheezyのRaspbianを実装していたのだが、壊れてKuman製品に交換した時は、ほぼほぼそのままで使用可能であった。(モニタ付属CDのものは使用しなかったのが良かったのか?)

Kuman製5インチ液晶タッチパネルモニタ

さらに、そこからJessie−Raspbianの情報も増えてきたので、Jessieにしようと、Jessieのイメージをサイトからダウンロードしてインストールしてモニタに接続したら、画面の右端1cm幅が真っ白になったり、それを解決しても今度はタッチパネルのキャリブレーションもうまく行かずうえ端のメニューバーエリアがタッチできないなどで挫折してしまい、仕方なくKuman製品の付属DVDについていた、Jessieのカスタムイメージを使用して、ラズパイ3を立ち上げ直した。

<作業>

1)Kuman製品の付属DVDに付属のJessieイメージファイル”5inch_HDMI_raspbian jessie with pixel_2016-11-25.7z”を、作業用PC(Debian)にコピーする。

(コピーせずに、直接次手順2)を実施しても良い)

2)上記イメージファイルは、7zip形式で圧縮されているため、解凍し、imgファイルを抽出する。

作業用PCがWindowsOSでなくLinux端末であるため、すぐにアーカイブマネージャで解凍できちゃう!

3)(別件で使用していたSDカードということもあり)通常のSDカードへの書き込み手順に乗っ取り、下記のコマンドを実行して、ゼロフォーマットする。(作業用PCにもよるが、3・4時間程度所要)

# dd if=/dev/zero of=/dev/***  bs=1m

上記コマンド中の”/dev/***”は、作業端末がmicroSDカードを認識した際のデバイスファイル名で、microSDカードを挿入した直後のdmesgコマンドや、”fdisk -l”で知ることができる。

4)手順2で入手したイメージファイルを、下記コマンドでmicroSDカードに書き込む。(作業用PCにもよるが、3・4時間程度所要)

# dd if=/***/5inch_HDMI_raspbian jessie with pixel_2016-11-25.img of=/dev/***  bs=1m

5)OSイメージを書き込んだmicroSDカードを、ラズパイ3に装着して、ブート!

Jessieが立ち上がり、”どこぞの国の道路の風景”画像が背景のデスクトップ画面が表示されて、とりあえず完成!!

この状態で、タッチパネル操作も可能だが、キャリブレーションしましょう。(キャリブリレーションは、「メニュー」>「Preferences」>「CalibrateTouchscreen」アプリで)

いままで、同様の液晶モニタ製品に付属するカスタムされたOSイメージは、何かと問題が指摘されていたが、こちらは、まだフルに開発していないせいか、モバイルルータとの相性もよくSSIDを認識して設定することもできたし、そこからOSのアップデートもできるし、普通に使うには問題なく使えた。

以上

 

ホームページを移行することに。。。

移行先は、仕事でも使用していて勝手知ったる”さくらインターネット”のホスティングサービス。

さくらインターネットにもVPSサービスはありましたが、手っ取り早く安定したホームページをたちあげたかったので。

データの移行は、Duplicatorプラグインを使うことも考えましたが、如何せん作業中に操作ができなくなって何回も繰り返すという最悪な無限ループは避けたかったのと、今までアップしてきた記事自体も誤字脱字でヤオイ的な恥ずかしいものばかりなので、この際書き直すつもりで、標準の(XLM形式での)エクスポート機能を使うことにしました。

固定ページは、挿入していた画像が一部表示されていなかったりしましたが、リンクをちょっと編集していじってやると画像が復活!

一方、投稿ページの方は、挿入画像が固定ページと同様表示されておらず、固定ページの時と同じように編集で復活させようと思いきや、こちらはそう簡単に復旧させることができませんでした。。。

(なぜだろう。。。そういう仕様?)

移行後、ぼちぼち合間を見ては、記事の復元を進めてきたが、職場でも自宅でもパソコンを使ってると、肩こりが慢性的になって、、、復元作業があまり進まず、今日に至る。

ちなみに、いまとなっては、お名前ドットコムのVPSサービスにて、使用していたWordpressテンプレートサービスは終了となっていました。

きっと、私と同様に不具合に悩む人がいて、人気がなかったのでは?

ホームページが使えない!!

お名前ドットコムのVPSで用意された、WordPressテンプレートを使って自身のホームページ(このホームページの前身にあたる)を立ち上げてたんですが、、、

このテンプレートでは、Webサーバに今まで使ったことのないnginxWEBサーバ(当初は単なるWebキャッシュサーバと思ってましたが)として動かしており、

HTTPS化など色々といじっていたせいか、ホームページを表示させると、下記のエラーが表示されるようになってしまいました。

「502 Bad Gateway」

そして、nginxのerror.logファイルを見ろとのこと。

その指示通り、nginxのエラーログ(/var/log/nginx/error.log)を見ると、そこにconnect()
failed (111:Connection refused)のログが多数記録されていました!

当初は、外部からのDos攻撃かと思って放っておいたら、、、、Wordpressの管理画面やTOPページ以外のほとんどのページが上記エラーで表示されず、再起動をしても何しても元に戻ることがなくなりました。。。。

しかも、マウントしていたデータ領域用のボリューム壊れてしまい、マウントできない状態にまで悪化してしまいました。

もう、この状態にいたっては、Duplicatorプラグインを追加して、Wordpressを移行することもままならなく、

サーバの中を見ても、nginxで勝手がよくわからず、何が問題でどう対処すればいいかもわからないため、新たに別のWebサーバ環境を用意して、イチから作り直す覚悟を。。。

ちなみに、・・・・

このNginxのエラー対応策としては、

/etc/nginx/nginx.confの下記serverディレクティブが正しいかをチェックのこと。

server {      listen 80;
     server_name <サイトのFQDN>; {         proxy_pass http:127.0.0.1:<port No.>;         proxy_set_header Host $host;    }
}

お名前ドットコムのVPSに格安サーバ証明書(KingSSL)を導入する

最近、セキュリティ機能強化の風潮があちこちで広まり、IE(Edge)ばかりでなく、フリーのFirefox,Chromeまでも同様に標準で、オレオレ証明書(=公的に保証されていない私的な証明書)のサイトはかならず警告ないし、最悪表示することすらできなくなってしまった。

これでは不便なので、仕方なく自身のサーバにもちゃんとした証明書を用意しなきゃと泣く泣く導入することにしました。

はじめに

まず、最初に準備というか前提ですが、、、本題のサーバ証明書を実装するオレオレ証明書で稼動するWEBサーバ(すなわち、https://*****でサイトが構成されていること)ありきで、話を進めます。

よって、本誌の内容は、いずれかのサービスでVPSサーバを保有し、そこにHTTPSでアクセスできるWEBサーバを立てたことがある方、もしくはこれからされようとされてい方に限られた内容になります。(このようなWEBサーバの立ち上げ方については、近々個人的に実施する予定なのでそのときに記事をアップしようと思ってます。)

ちなみに、今回対象とするWEBサーバの仕様は、以下のとおりです。

<WEBサーバ仕様>

  1. お名前ドットコムのVPSサービス(KVM)でたてたLinuxサーバ
  2. OSは、CentOS5.9
  3. WEBサーバは、OSバンドルのApache2.xパッケージを実装後アップデートしたものに、同様に実装したOpenSSLでHTTPSのWEBサイト環境を構築。
  4. 固定のグローバルIPアドレス×1個(お名前ドットコムのVPSサーバは、1個付与してくれる)
  5. インターネット上で自サーバのFQDNが使えるようDNSレコードが設定済み(お名前ドットコムの自ドメイン取得サービスを利用)

ここでのポイントはやはり、お名前ドットコムのサービスを使っているということでしょうか。

各サービス機能についての詳細については一長一短あるかと思いますが、通常個人のWEBサーバを維持管理していく上ではそれほど問題にならなかったですし、いずれのサービスも他社と比較しても遜色なく安く、必要なサービスの請求や管理の窓口が一本化されるのは何より便利です。(この良さが、後々の本書の中で効いてきます)

であれば、サーバ証明書の取得サービスもお名前ドットコムのものを使用すればと思うのですが、、、

実際にそのサービスの金額を見たら、他社サービスと比較してもお高いので、そこでこのサービスは以前に安いと評判のKingSSLを利用することにしました。(せめてRapidSSLを担いで欲しかった)

調理開始

以上、必要な材料がそろったので、早速調理に取り掛かります。

まずは、サーバ証明書取得のために、KingSSLのサイトへ。

ここをじっくり調査し、他者と比較検討したわけではないので、ほんとにおすすめできるかは現時点ではなんともいえませんが、

私的には、

  • やはり、安い。しかも早い。支払いはクレジットカードのみになりますが、手続きも完全自動化されており、すぐにサーバ証明書を入手可能
  • 安いだけにサイトはシンプルだけど、日本語でわかりやすい
  • 新規だけでなく更新や再発行の手続きもわかりやすそう

という印象で決めました。(ここは自由に選べますし、将来的にはさらに安い業者もあるかもしれません。ただ、安いだけで決めるのは、今後必要となるサポートや手続きの面で損をすることもあるのでご注意を!)

本紙では、年間900円の1年モノにしました。(もちろん、複数年モノにすればそれだけ割引がありますが、ためしに使ってみるということで1年モノにしました)

さっそく、サイトから申し込み手続きのボタンをクリックして手続き開始へ!

第一関門:CSRの生成と入力

手続きの一発目から、いきなりCSRの入力欄が出現!

まずは手続きの第一関門。オレオレ証明書でやってきたので、CSR生成についてはピンと来なくて、どうすればいいんだけっけ?ってググろうと思ったけど、同サイト内のサポートページで、しっかり手順が書いてありましたので、その手順そのままに実施することにしてみました。

ちなみに、CSRは、サイトにも書かれていたが、”Certificate Signing Request”で、要は証明書を発行する際の本人確認のための情報みたいなもの。具体的には、サーバ内で生成されたサーバ所在情報+公開鍵データ。

手順としては、サーバ構成が”Apache 2.x + mod_ssl + OpenSSL”なので、その手順ページを参照。

サーバ内での操作としては・・・、

まず、現在WEBサーバが立ち上がっている環境の確認。サーバ立ち上げ時に現在使用されているオレオレ証明書を作成した際に生成された、秘密鍵や証明書+公開鍵の保管場所を/etc/httpd/conf.d/ssl.confファイル内で下記項目を確認し、

  • SSLCertificateFile(サーバ証明書のパス)
  • SSLCertificateKeyFile(秘密鍵のパス)

そこに記載されたパスにある、現在使用中の各ファイルをかならずmvコマンドなどで退避させておくこと。さもないと、以降の作業時に誤って消失させてしまうと、同じものを復元させることができませんので、現状のWEBサービスを停止・起動させることができなくなってしまいます。

(最悪、新たな証明書を用意するまで停止状態にするか、もう一度オレオレ証明書を再作成して立ち上げなおせばいいだけの話ですが、今後正規の証明書で運用していく場合は、この場合のリスクについても考慮のこと)

一発目の操作は、まず先のssl.confに記載のSSLCertificateKeyFileパス、すなわち秘密鍵が格納されているパスで以下のコマンドをrootユーザで実行します。

# openssl genrsa -des3 -out ./<生成する秘密鍵ファイル名>.key 2048

ここで、<生成する秘密鍵ファイル名>には、ssl.confの”ServerName”に記述されたファイル名(WEBサーバのFQDNを入れたり、さらに生成日も入れたりするといいでしょう)にして、実行します。

この結果、下記のように表示されるので、秘密鍵に割り当てたいパスフレーズを入力します。(これは、後の手順で入力が必要となるので、間違えず忘れないように!)

[root@myportal ~]# openssl genrsa -des3 -out ./myportal.yshome.net.key 2048 <Retキー>
Generating RSA private key, 2048 bit long modulus
......................................................+++
.......................+++
e is 65537 (0x10001)
Enter pass phrase for ./myportal.yshome.net.key: <パスフレーズを入力>
Verifying - Enter pass phrase for ./myportal.yshome.net.key:<同上を入力>
[root@myportal ~]# ls -ltr
この結果、カレントディレクトリに、下記のファイルが生成される。
-rw-r--r-- 1 root root  1751 12月 29 11:07 myportal.yshome.net.key

なお、WEBサーバのFQDNはこの時点でかならず、これがお名前ドットコムのドメインサービスで取得されてDNSレコードに定義されて利用可能であること。

また、このとき入力したパスワードは、後の手順でも使用し続けるので、ちゃんと記録しておきましょう。(忘れてしまったら、手順というか手続きを位置からやり直しとなってしまいます)

この結果、カレントディレクトリに”<生成する秘密鍵ファイル名>.key”というファイル名で、 秘密鍵(2048ビット)が生成されます。

次に、証明書が格納されているパスで、以下のコマンドをrootユーザで実行します。

# openssl req -new -key <前手順で生成した秘密鍵ファイル> -out ./<生成するCSRファイル名>.csr

実行すると、当該WEBサーバの所在情報の入力が一問一答形式で開始されますので、KingSSLサイトのサポートページを参照して適切な値を入力していってください。

[root@myportal ~]# openssl req -new -key ./myportal.yshome.net.key -out ./myportal.yshome.net.csr
Enter pass phrase for ./myportal.yshome.net.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:○○-ku
Organization Name (eg, company) [My Company Ltd]:My Home Lab.
Organizational Unit Name (eg, section) []:<入力不要とのこと>
Common Name (eg, your name or your server's hostname) []:myportal.yshome.net
Email Address []:<入力不要とのこと>
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<先のパスフレーズを入力>
An optional company name []:<同上>
[root@myportal ~]# ls -ltr
-rw-r--r-- 1 root root  1751 12月 29 11:07 myportal.yshome.net.key

なお、ここで入力した値は、最終的に得られたサーバ証明書の情報に組み込まれ、ユーザなどからその情報が証明書情報の表示操作で見えてしまうので、誤字やいい加減な入力は恥ずかしい黒歴史となりますので慎重に!

最後に、前手順の秘密鍵生成時に入力したパスワードを入力する必要があります。

この結果、<生成するCSRファイル名>.csr がカレントディレクトリに生成されますので、これをcatやviコマンドで内容を表示させてください。

[root@myportal ~]# cat myportal.yshome.net.csr
-----BEGIN CERTIFICATE REQUEST-----
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
-----END CERTIFICATE REQUEST-----
[root@myportal ~]#

上記のように表示されたファイル内容において、”—–BEGIN ・・・・”の行から、”—–END ・・・・”の行まで、一文字の抜けがない様、また余計な文字が含まれないよう十分注意して、手続き画面の一発目に出現したCSRの入力欄にコピペします。

あとは、次の画面で、入力したCSRのデータから、サーバの所在情報の確認や、支払いに使用するクレジットカードの入力がありますので、各情報を入力していってください。

第二関門:承認メール送り先の用意

っで、この手続きの中で一番問題となる、第二関門の承認メールのメールアドレスの指定ですが、、、

これが厄介なことに、業者のシステムで、登録したFQDN情報から自動生成されたメールアドレスの選択式となっており、自由に入力することができないということです!

たとえば、メールアカウント名が、”hostmaster”,”postmaster”,”admin”となっており、メールアドレスのドメインも、WEBサーバのドメイン名しかありません。。。

(サポートページのFAQにも、回答として「コモンネームに指定のドメインのメールサーバにエイリアスでもいいので・・・」って、スラって書いてあるけど、面倒なのでそもそも自ドメインのメールサーバ立ててないんですけど!)

ここで助かったのが、お名前ドットコムの無料オプション機能の”お名前.comメール転送Plusサービス”です!!

これを知らないときは、1GBプラン¥42円/月のメールサービスを使用やむなしと思っていましたが、”お名前.comメール転送Plusサービス”もあるということを知り、使えるかどうか試しに申し込んでみたところ、思ったとおりの設定ができました!

この機能を有効に設定することで、

自身の管理するドメインのDNSレコードに、MXレコード(お名前ドットコムのメール転送機能用メールサーバ)が登録され、指定したメールアドレスから転送したい任意の既存メールアドレスに転送されるというというものです。おかげでメールサーバの運用コストを増やすことなく、手続きが可能となりました。

具体的には、

KingSSLで選択した、”postmaster@<domainname>”のメールアドレスに対して、

KingSSLの申込者欄の連絡先メールアドレスに記載の私個人利用のメールアドレスを設定するだけ!(この機能自体には、さらに自動応答やフィルタ機能なども備えている)

なお、このメールアドレスは、承認メールが送られるだけで使用するもので、最終的な証明書は、別途申込者情報の入力欄で入力した管理者連絡用メールアドレスに送られてきます。(むしろ、こちらのほうを当該サーバ側に送って欲しい。コピペって文字コードや改行コードなどで意外と危ういですし。)

この後は、上記のとおり、承認メールが転送先のメールアドレスに届くので、その本文中のリンクをクリックして、承認WEB画面内の承認ボタンをクリックして、しばらく待つと、証明書のメールが申込者の連絡先メールアドレスに送付されてきます。

証明書といっても、ファイルではなく、メールの本文内に何十行にもわたる意味不明な文字列が書いてあるので、これをWEBサーバの証明書ファイルにコピペしていくことになります。

たとえば、# cat > <新サーバ証明書ファイル名>.crt

を実行後、標準入力待ちになるので、一気にペーストして流し込む。(流し込んだ後は、<RET>キーを押下し、そのまま不要な文字を入力せずに速やかに「CTRL」+「C」キー)

なお、本証明書には、中間証明書も必要になっているので、こちらも証明書のディレクトリに新たにファイルを用意してコピペすること。(このファイルは、それとわかるようにkingcacert.cerとか例そのままでもいいかと)

次に、いままでオレオレ証明書では使用することはなかった、中間証明書の指定を先のssl.conf内の”SSLCertificateChainFile”で追加してやる必要があります。

正規のサーバ証明書で立ち上げ!

念のため、各ファイルの内容やパスに誤りがないことを確認の上、

WEBサービスの停止(service httpd stop)&起動(service httpd start)を実行。すると、起動時にパスワードを要求してきますので、最初の秘密鍵生成時に入力したパスワードを入力します。正しければ、何事もなく新しい正規のサーバ証明書でWEBサーバが立ち上がります!

[root@myportal certs]# service httpd stop
・・・省略・・・
[root@myportal certs]# service httpd start
httpd を起動中: Apache/2.2.3 mod_ssl/2.2.3 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server myportal.yshome.net:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.
                                                           [  OK  ]
[root@myportal certs]#

補足)なお、再起動実施において、”NG”となった場合の原因の一例として、証明書コードのコピペミスがよくある。
この場合、/var/log/httpd/ssl_error_logに、下記のエラーログが見られる。
[error] Failed to configure CA certificate chain!
このメッセージ自体の意味は、”証明書の初めから終わりまでが正しくない”という内容のものです。
今一度、コピペした証明書ファイルの内容を確認してみましょう。
十中八九、”—–BEGIN CERTIFICATE—–”から”—–END CERTIFICATE—–”までが正しく張り付けられていないはずです。
(コピーの範囲指定ミスで開始または終了の”-“が足りないとか、(コピペ後、<RET>を入れ忘れて)最後の”—–END CERTIFICATE—–”自体が欠落しているなど)

なお、新しいサーバ証明書での動作確認としては、IEの”In Privateブラウズ”でWEBブラウザを立ち上げて、同WEBサーバにアクセスしてみてください!いままでアドレスバー赤色に染まっていたのが、何事もなく水色の鍵アイコンに変わり、そのアイコンをクリックして証明書情報を確認すると、見覚えのある内容が確認できます。

以上の手続きが、時間も問わずなんと半日でできてしまう!というお手軽さ。

本件の目的を適当に急ぎでやっつけちゃおうってことだけであればおすすめしません。(ほんとに必要なのか?ほんとにこの業者でいいのか?をちゃんと考えてから行動を起こしましょう)

が、この運用コストを極力抑えて、本来のWEBサーバのコンテンツ管理の運用を行いたいというのであれば、おすすめします!

追記、肝心なこと忘れてました!

http://でアクセスしに来たら、https://にリダイレクトさせなきゃ。

おわりに・・・

以上で、個人のWEBサーバを、一般的にまともなWEBサーバに近づけることができました。

そもそもサーバ証明書の役割ですが、簡単に言うと、

  1. 通信を暗号化して、通信の盗聴リスクを回避する。
  2. サーバを外部の機関が唯一無二のサーバであることを保証してもらうことで、なりすましや改ざんといったリスクを回避する。

といったところでしょうか。

ひと昔では、サーバ証明書と自ドメインの取得と維持管理だけでも年間3万円以上出費しなければならず、自サーバを持ちたい貧乏人にとっては、大変きついものでした。(なので、そういった人はできるだけ出費を抑えようと自力で自己防衛の努力をしてきたのですが。。。)

これを、現実に置き換えて考えると、、、

盗聴やなりすまし(偽称)は、治安のよい日本ではよっぽどの人でない限り、被害にあうことはないものでしたが、今となってはストーカーや詐欺といった犯罪が広まり、普通の人でもその被害者になりつつあります。しかし、実際の生活環境でこれらに対する対策はしてないのに、自身のサーバにだけお金をかけて対策を講じるのも、変な話ですが、インターネットの世界では、当人だけの被害ならまだしも、被害者でありながら知らずに加害者になってしまっているケースがあるので、エチケットとしてこういった対策は施していかなければならないということでしょうか。。。(今という時代やインターネットの世界とは、まったく世知辛いものです)