AliExpress とか

尋常じゃない安さに惹かれて、注文してしまった。


https://ja.aliexpress.com/


ログインアカウントの作成とか注文方法は、他のサイトさんを見てもらうものとして。


https://bicycle.kaigai-tuhan.com/method/aliexpress.php


うーん、安い。
「安かろう悪かろう」でも良いかな〜なんて思えてしまう値段のものが多い。


最初の一個を購入してみて、ダメそうならきっぱり使うのやめようと決めて、注文。
予定だと、来年の2週目までには届くみたい(船便なので遅い)。
遅くても 60日 で届けると。
のんびり待ちますか。


ちなみに、買ったものはPCパーツ(と書くと怪しさ爆発だね)

PiVPN の DNS 設定修正

昨日、LAN 内 DNS は参照してないのね……と思ってたやつ、自分の設定ミスだった。
うっわー、つまんない凡ミス。


PiVPN インストール中に入力した DNS の IP アドレスが、そのまま VPN クライアントに払いだされてた。
なので、設定ファイルを修正してみる。

$ cd /etc
$ ls -dF *vpn*
openvpn/  pivpn/
$


2 つのディレクトリがあるけど、これ、どういうこと?
普通に考えると、設定ファイルは openvpn だよね。

$ cd openvpn
$ ll
合計 28
drwxr-xr-x 2 root   root    4096  719 05:15 client
-rw------- 1 nobody nogroup  625 123 16:44 crl.pem
drwxr-xr-x 5 root   root    4096 123 16:35 easy-rsa
drwxr-xr-x 2 root   root    4096  719 05:15 server
-rw-r--r-- 1 root   root    1271 123 19:01 server.conf
-rwxr-xr-x 1 root   root    1301  719 05:15 update-resolv-conf
$ less server.conf


view コマンドで中身を見てみたら、どうもそれらしい 1 行が。

$ grep -i dns server.conf
push "dhcp-option DNS 8.8.8.8"
$ sudo cp -p server.conf server.conf.$(date +%Y%m%d)
$ sudo diff server.conf server.conf.$(date +%Y%m%d)
$ sudo vi server.conf
(ここで、DNS 設定を2行にし、片方を 家庭内 LAN の IP アドレスで設定)
$ sudo diff server.conf server.conf.$(date +%Y%m%d)
$ sudo service openvpn reload
$


これで一度 VPN 接続を試したけど、どうにもクライアントが参照する DNS の IP アドレスが変わらなかったので、Raspbian を再起動。
今度は変わってた。


DNS の指定は、LAN 内にアクセスした後で利用するものを指定すること。
インストール時の細かい注意点だな、これ。

OpenVPN on Raspberry Pi

昨日から今日にかけて、とりあえずテストの意味で Raspberry PiVPN を導入してみた。
その名も、PiVPN。


本当に「動くかなぁ」なんて軽い気持ちでやっていたので、途中の画面キャプチャをとってなかったりする。
うん、あとで別途纏めよう。

手順

詳細手順は、自分用にあとで纏めるとして、基本的には参考サイト様の言う通り。


注意点としては、最新の Raspbian を使った環境じゃないとダメだったよ……と。
コレ、テスト環境として作っておいた Raspbian サーバで、www.pivpn.io に書いてある通りの、次の PiVPN インストールコマンドを打ってみた。

$ curl -L https://install.pivpn.io | bash

You are on an OS that we have not tested but MAY work.
Currently this installer supports Raspbian and Debian (Jessie and
Stretch), Devuan (Jessie) and Ubuntu from 14.04 (trusty) to 17.04
(zesty).
Would you like to continue anyway?


ざくっと言えば、Jessie か Stretch じゃないとサポートしてない?
うーん、この環境は何だったかなぁと思って確認。

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 7 (wheezy)"
NAME="Raspbian GNU/Linux"
VERSION_ID="7"
VERSION="7 (wheezy)"
ID=raspbian
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"


うん、wheezy だね。


ダメだこりゃ。
次行ってみよう。


最近テスト環境に放り込んでみたやつならどうだ……

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"


おっけー。


じゃ、インストール始めよう……となるんだけど、昨日は途中の dhcpcd.conf で躓いた。


Raspbian だと、IPアドレスの静的設定を dhcpcd でやるので、その作法に則ってコンフィグを書き換えている。
サーバとして扱っているので、すでに静的 IP アドレスを割り振る設定をしていたんだけど、インストーラが必要なアプリをインストール中、どう処理していいか判断に迷って、ハングアップしたっぽい……
続け方に迷って、一度 upgrade してみる。

$ sudo apt-get upgrade
(中略)
E: dpkg は中断されました。問題を修正するには 'sudo dpkg --configure -a' を手動で実行する必要があります。
(以下略)


なるほど。
では、実行してみる。

$ sudo dpkg --configure -a
dhcpcd5 (1:6.11.5-1+rpt4) を設定しています ...

設定ファイル '/etc/dhcpcd.conf'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** dhcpcd.conf (Y/I/N/O/D/Z) [デフォルト=N] ? 
openvpn (2.4.0-6+deb9u2) を設定しています ...
[....] Restarting virtual private network daemon.:[ ok .
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn.service → /lib/systemd/system/openvpn.service.


自分の設定を残すために、何も入力せず(デフォルト N なので)Enter キーを押した。
もう一度 PiVPN インストールコマンドを実行したら、ようやくインストーラが起動してくれた……。


あとは、説明通りにインストールを進めていって、アカウントやらポートやら設定。


設定が終わって Raspberry Pi を再起動。
起動してきた Raspberry Pi で、/var/log 配下を見ると openvpn.log と openvpn-status.log が出来てた。
なので、tail -f /var/log/openvpn.log させて次の作業へ。


VPN ポートへのアクセスが出来るように、ダイアルアップルータでネットワークの穴開け。


PiVPN のインストール時に出来たファイル (.ovpn) をコピーした 2 in 1 ネットタブレット (Windows 10) に OpenVPN のアプリを入れて、ログイン設定。
この 2 in 1 ネットタブレットを、スマホ (テザリング) でのインターネット接続へ切り替える。
こうして目の前の Raspberry Pi に、ドコモネットワークや、契約 ISP 等の外部ネットワークを経由してアクセスしてみる。
難なく成功。
で、割り振られた IP アドレスを見てみると、妙な帯域の IP アドレスが割り振られてた。
うーん……?
それで、改めて /var/log/openvpn.log を見てみると、そこに書いてある IP アドレスだった。


さて、テザリング経由で自宅 LAN に繋がったことが分かったので、いつもの様に NAS にアクセス……してみたら、繋がらない。
そのホストへ ping してみても繋がらないので、IP アドレスで指定してみたら、応答あり。
LAN 内 DNS は参照してないのね……。


とりあえず、IP アドレスで指定すれば、全ての自宅内サーバや PC にアクセス出来た。
思ったよりも楽だったなぁという印象。

移行テスト

この間 Raspberry Pi にインストールした adiary に、はてなダイアリーを移行できるかテストしてみた。


はてなダイアリーの設定画面からデータ管理を選んで、「はてなの日記データ形式」でエクスポート。


adiary で管理画面からブログの管理→インポートを選んで「ファイルを選択」でさっきエクスポートしてファイルを指定。
その後「はてな形式(XML)」から「はてな形式でインポート」をクリック。


時間はちょっとかかったけど、思ってたより簡単に移行できた。
うん、画像は「はてなフォトライフ」をそのまま使うのね……。

adiary

Raspberry piCMS をやろうとして、はて、何がインストールできるのかと。
そのやったことをダラダラ書いてみた。
要点は、あとで別にまとめたい。


ちなみに CMS (Contents Management System) とは、ブログとかコミュニティサイトとか、何かのコンテンツを、HTML等の専門的な知識なしで投稿し、公開できるアプリだと思ってもらえれば外れてないはず。


一応、外部へ公開してない Raspberry Pi (ホスト名:Rasp101) へログインし、ブログアプリをチェック。


$ sudo apt-get update
$ sudo apt-cache search blog | grep blog | egrep -v "liblo|client"
blazeblogger - simple to use, command line based, content management system
blosxom - light, feature-packed weblog app with plugin extensibility
bti - command line micro-blogging tool
chalow - weblog tool that converts ChangeLog to HTML
chronicle - HTML & RSS blog compiler
feed2omb - Announces new articles in a feed to an open microblogging service
gnome-blog - GNOME application to post to weblog entries
jekyll - Simple, blog aware, static site generator
libmicroblog4 - library for using the Microblog Akonadi Resource
libmojomojo-perl - wiki- and blog-inspired content management system
mahara - Electronic portfolio, weblog, and resume builder
mahara-apache2 - Electronic portfolio, weblog, and resume builder - apache2 configuration
mnemosyne-blog - Maildir-to-blog compiler with XML templating and Python extensions
movabletype-opensource - Well-known blogging engine
nanoblogger - Small weblog engine for the command line
nanoblogger-extra - Nanoblogger plugins
pidgin-microblog - Microblogging plugins for Pidgin
pidgin-microblog-dbg - Microblogging plugins for Pidgin (debugging symbols)
pyblosxom - a lightweight file-based weblog system
python-wordpresslib - Python module to connect to Wordpress blogs using XML-RPC protocol
td2planet - Ruby-based server-side blog aggregator
tdiary - Communication-friendly weblog system
ucblogo - a dialect of lisp using turtle graphics famous for teaching kids
webauth-weblogin - Central login server for WebAuth authentication
wfo - Offline editing tool for Wiki pages and blogs
wordpress - weblog manager
wordpress-l10n - weblog manager - language files
zine - Python powered blog engine
mahara-mediaplayer - Electronic portfolio, weblog, and resume builder - internal media player


client の文字があるものとかは弾いたけれど、パッケージをよく見ると Twitter クライアント(micro-blog)の bti なんていうのもあるみたいね。
興味は引かれたけど、今回はパス。


まぁ、やっぱりあるよねぇ movabletype とか wordpress とか。


で、気になったのが tDiary というアプリ。
名前でググってみると、http://www.tdiary.org/ というサイトが引っ掛かった。
お、日本で開発されてるとか、良さげじゃない?


一応、もう少し検索してみるかと思って、「raspberry pi cms」でググってみる。
こんなサイトが引っ掛かった。


https://adiary.org/


「元々Movable TypetDiaryの置き換えとして生まれ」たらしい。
ふぅむ……
tDiary も気になるけど、はてなダイアリーが移行できそうな aDiary が気になる。
ちと試してみるか。


ってことで、ソースをダウンロード。

$ cd /usr/local/src
$ sudo git clone https://github.com/nabe-abk/adiary
$ cd adiary/
$ view adiary.conf.cgi.sample
#!/usr/bin/perl
(中略)
# ・ディレクトリを変更する場合は、配布物中のファイルの置き場も変更してください
(以下略)


……あ、これ /usr/local/src へのダウンロードじゃ、ダメなやつだ。

$ head -1 *.cgi
==> adiary.cgi <==
#!/usr/bin/perl

==> adiary.mod.cgi <==
#!/usr/bin/perl

==> adiary.speedy.cgi <==
#!/usr/bin/speedy


念のためシバン (shebang) を確認したら、なんだ speedy って?
perl とともに、Raspberry pi に入っているのか?
なきゃ探すしかなさそうだけども。

$ type perl speedy
perl は /usr/bin/perl です
-bash: type: speedy: 見つかりません
$ sudo apt-cache search speedy
libapache2-mod-speedycgi - apache2 module to speed up perl scripts by making them persistent
libclass-accessor-classy-perl - Perl module providing minimalist, fast accessors
libcrypt-ciphersaber-perl - Perl module implementing CipherSaber encryption
libjs-polymaps - JavaScript library for image- and vector-tiled maps
medusa - fast, parallel, modular, login brute-forcer for network services
netsend - a speedy filetransfer and network diagnostic program
python-routes - Routing Recognition and Generation Tools
speedy-cgi-perl - speed up perl scripts by making them persistent
vowpal-wabbit - fast and scalable online machine learning algorithm
$ sudo apt-cache show speedy-cgi-perl
Package: speedy-cgi-perl
Version: 2.22-13
Architecture: armhf
Maintainer: Niko Tyni <ntyni@debian.org>
Installed-Size: 278
Depends: perl (>= 5.14.2-9), libc6 (>= 2.13-28), libperl5.14 (>= 5.14.2)
Homepage: http://daemoninc.com/SpeedyCGI/
Priority: optional
Section: perl
Filename: pool/main/s/speedy-cgi-perl/speedy-cgi-perl_2.22-13_armhf.deb
Size: 119882
SHA256: f40b7530ef4ac6f55b457a05246a024e4f7f15f36df9e01fa078ccda58835374
SHA1: d3a6a62f3e8f0d998d84709cc5828933bf0ef9de
MD5sum: 1f1cc00a3ec8ed27905921e780138e3a
Description: speed up perl scripts by making them persistent
 SpeedyCGI is a way to run perl scripts persistently, which usually makes
 them run much more quickly because it avoids the overhead of starting
 up a new perl interpreter and compiling the perl code.  It is also known
 as PersistentPerl: while its most common use is with CGI scripts, it can
 be used to speed up most perl programs.


うん。
http://daemoninc.com/SpeedyCGI/ を参照してみたら #!/usr/bin/speedy の記述があったので、これを入れればヨサゲ。

$ sudo apt-get install speedy-cgi-perl
(中略)
$ type speedy
speedy は /usr/bin/speedy です


おっけー。
も少し事前準備してみる。

$ sudo apt-get dist-upgrade
$ cd /var
$ sudo cp -r /usr/local/src/adiary/ .
$ cd /etc/apache2/sites-available
$ cp -p default adiary
$ sudo vi adiary
---------------------
<VirtualHost *:80>
        ServerName example.jp
        ServerAdmin webmaster@example.jp
        DocumentRoot /var/adiary
        <Directory /var/adiary/>
                Options ExecCGI Includes -Indexes -FollowSymLinks MultiViews
                AllowOverride Options
                Order allow,deny
                allow from all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/ex.error.log
        CustomLog ${APACHE_LOG_DIR}/ex.access.log combined
</VirtualHost>
(名前ベースのバーチャルホスト設定のため、いろいろ書き換え……。
  Options 等は、サーバ公開するときに再検討する)
---------------------
$ sudo a2ensite
adiary
$ cd /etc/apache2/mods-available
$ sudo vi mime.conf
---------------------
AddHandler cgi-script .cgi
(コメントアウトされているので、アンコメントを行う)
---------------------
$ sudo service apache2 reload


apache2 の実行ユーザは誰なんだろうと思って /etc/apache2/apache2.conf を見ると /etc/apache2/envvars で設定されていると書かれていた。

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}


では、/etc/apache2/envvars も見てみる。

$ grep APACHE_RUN /etc/apache2/envvars
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX


なるほど。


わかったところでおもむろに自宅内 LAN の DNS 設定へ example.jp で該当 Raspberry Pi へアクセスできるように名前設定。
ローカルネットワークから example.jp へアクセスすると、今回構築している aDiary にアクセスすることになる。
僕の場合は、Android を含む家庭内の複数の端末からアクセスするのに不便だから DNS を構築しているだけなので、Windows なら c:\windows\system32\drivers\etc\hosts に追記した方が早いかも。

$ cd /var/adiary
$ sudo chmod -R o-x .
$ sudo chown -R www-data:www-data .


この時点で、一度 example.jp へアクセスしてみる。

「adiary簡易インストールヘルプ」なるものが表示されたので、内容を読んでみる。

  1. 解凍してでてきたファイルをサーバ上の任意の位置に置く
  2. adiary.cgi に実行属性を付ける
  3. __cache/, data/, pub/, ディレクトリの属性を 0777 等に変更にする(レンタルサーバ等では概ね不要)
  4. adiary.conf.cgi.sample を adiary.conf.cgi という名前でコピーする
  5. adiary.cgi?login にアクセスし「ID/パスワード」を適当に入力しログインする
  6. 自分自身をユーザーとして追加する


うーん、git で持ってきている現状、2つ目までは問題ないっぽい。
3つ目の 0777 へ設定変更が必要なディレクトリの中を見てみると、どうもデータを置くだけっぽい。

$ sudo su - www-data
$ cd /var/adiary
$ ls -l data
合計 4
-rw-r--r-- 1 www-data www-data 454 1127 23:40 index.html


あれ…… index.html があるんだ。
ちょこっと http://example.jp/data にアクセスしてみる。


……げ。
Internal Server Error とともに、バージョン情報が思いっきり出力されてるw
さくっと消しておこう……。

$ exit (www-data から抜けて sudoers ユーザに戻る)
$ cd /etc/apache2
$ grep ServerSignature apache2.conf


ふむふむ。
ここに書いてないってことは、どこか外部ファイルに出しているんだろうな……と。

$ grep ServerSignature conf.d/*
conf.d/localized-error-pages:# ServerAdmin email address regardless of the setting of ServerSignature.
conf.d/security:#ServerSignature Off
conf.d/security:ServerSignature On
$ sudo cp -p conf.d/security /tmp/security
$ sudo vi conf.d/security
$ sudo diff conf.d/security /tmp/security
38,39c38,39
< ServerSignature Off
< #ServerSignature On
---
> #ServerSignature Off
> ServerSignature On
$ sudo rm -i /tmp/security
$ sudo service apache2 reload


/etc/apache2/conf.d の下では、不要なファイルを削除しておかないと読み込んでしまうからね……。
でも、これでバージョン情報が消えるはず。


http://example.jp/data
http://example.jp/__cache
http://example.jp/pub


はい、消えた。
もう一度 www-data に su して、続きの作業を行う。


ls -ld __cache/ data/ pub/

$ sudo su - www-data
$ cd /var/adiary
$ ls -ld __cache/ data/ pub/
drwxr-x--- 2 www-data www-data 4096 1128 02:11 __cache/
drwxr-x--- 4 www-data www-data 4096 1128 02:08 data/
drwxr-x--- 3 www-data www-data 4096 1128 02:08 pub/
$ cp adiary.conf.cgi.sample adiary.conf.cgi
$ view adiary.conf.cgi


〇 の項目はともかく、● の項目は一度チェックしておいた方がいいね。
パスワードの最低文字数が 4 とか書いてあるし。
でもいまは動くのを確認するのが最優先なので、放置。


http://example.jp/adiary.cgi?login


ここにアクセスしてみる。


……「ID/パスワード」を適当に入力しログインするって書いてあったけど、なんでも良いのかな。


https://adiary.org/v3man/install/ を参照してみる。


うん、右上のログインから「ID/パスワード」を適当に入力って書いてあったので、なんでもいいみたい。
何入れても、root でログインしたことになってた。

で、任意の名前で管理者ユーザの登録を行うと、またログイン画面に戻された。
今さっき登録したアカウントでログインし直してみると、ちゃんと管理メニュー画面になったよ。




……ねぇ。
ちょっとボヤいてもいいよね。
インストールはたったの 4 行と書いてあったけどさぁ。
これだけの事前準備が必要で、何が 4 行なん?
少なくとも git コマンドでダウンロードするディレクトリは、指定しなきゃダメじゃん。
……はぁ(溜息)



気を取り直して、インストールマニュアルの書かれた index.html は、これに書き換えておこう。

<html>
  <head>
    <meta http-equiv="Refresh" content="0;URL=adiary.cgi">
  </head>
</html>


こうしたら、http://example.jp/ へアクセスしただけで、すぐに http://example.jp/adiary.cgi に画面が変わるようになる。



今日はここまでにしておこう……疲れた。

自宅 Web サーバ

とりあえず、自宅サーバとして公開できるレベルまで Raspberry Pi を設定してみた。


デフォルトの pi ユーザは、ユーザ名もパスワードも変えているので、普通にはログインできない。
そもそも ssh ポートは、インターネット側からアクセスできないよう閉じているし。


で、自宅 LAN 内から自分の PC でアクセス。
うんうん、表示できてる。


で、ダイアルアップルータの設定でポート 80 番をその Raspberry Pi に向けてみたんだけど……
まだ DDNS 設定はしてないからホスト名での公開は……あれ、そういえば RDP 用に DDNS 設定をしていた気がする。
もしかして……



ぎゃー、apache のテスト用画面がインターネットへ公開されてるー



ささっと Web サーバに名前ベースのバーチャルホスト設定を入れて、何もリンクされてない index.html だけを表示させることに。
恥ずかしい……。



これで、一応 2003年11月から止まってた、自宅サーバのリプレースは終わった……ことにならないんだろうなぁ。
中身がどっかいっちゃってるんだよ。
一から作り直しか。溜息。


一応、自宅 LAN 用に立てている DNS に該当のドメイン名を登録して、内部からでも外部名でアクセスできるようにしておいて、と。


もっか samba で該当 DocumentRoot を共有するか、すでにある NAS に DocumentRoot を変更するか、悩み中。
あとバックアップも何とかしないと。

インテリジェントスイッチの設定

早速届いた、BUFFALO BS-2016MR レイヤー2インテリジェントスイッチ。


電源入れたら、デフォルト設定の IP アドレスにアクセス。
とりあえず telnet してみよう……と思ったけど、Web UI が用意されているみたい。
Google Chrome でアクセスして、IPアドレスやら NTP やら SNMP やら Syslog やらを設定して、保存後に一度リブート。
さすがに自宅 LAN で VLAN とか SPT とか使わんて……

ネットワーク的に、PR-200NE(インターネット側のダイアルアップルータ)へ繋げてみる。
で、早速 Cacti に登録。


……ちとマテ。
なんで名前に Port 番号が絡む情報が載ってこないんだ orz
snmpwalk で見たら MAC アドレスとかいろいろ情報がありすぎて、ポート番号まで表示されていなかっただけみたい。
でも、どの名前の画像がどのポートを示しているのか、全然わからない。


んー、とりあえず、NAS にしている Raspberry Pi を差してみるか。
10分後、きちんとグラフにパケットトラフィックが乗っていることを確認できた。
……もしかして、きちんと ID 順に並んでる?
たぶん、ポート番号順に ID を割り当てられてるっぽい。
一応、あとで確認しておかないと。


しばらく様子を見て、今の構成だと PC から the Internet にアクセスしてるのか、Raspberry Pi のネットワークにアクセスしているのか、まったくわからないことに気づいた。
いや、わからないことはないんだけど、PC からのトラフィックが、全部インターネットへ向かっているように見えるんだよね。
このうち、どれだけ NAS に向かっているかは、BS-2016MR のグラフと見比べて、目測しないとダメ。
いまは良いけど、あとで見返したとき、もう片方のグラフが残っているか、残っていても計算することを覚えているかが自信ない。
なので 100 Base の BS-2016MR を 1000 Base のスイッチ (GS908M) にぶら下げてみる。


この構成のメリットは、トラフィックが追いやすいこと。
デメリットは、PC から NAS のあいだで重いトラフィック(動画を見るとか)があると、Raspberry Pi ネットワークからインターネット向けのトラフィックが詰まりそうなこと。


まぁ、GS908M には core という名前も付けていることだし、これで行ってみよう。




……でも、外向け用に、もう一台 BS-2016MR を買っておこっと。