Raspberry Piでサーバーをたてる
- 2018/10/04 15:09
- カテゴリー:マニアックなおはなし, make:
OSを最新にしてから,ローカル内DNSとして使っていたdnsmasqが動かなくなってしまった,私のTS-231Pは,それ以降なにかと調子が悪く,知らぬ間にCPU負荷が100%になっていたり,スワップが大きくなりすぎて警告が出たり,ウイルススキャンの定義ファイルを更新できなかったりと,どうもすっきりしません。
思えば,dnsmasqもopkgから入れて見たり,たはまたQPKGを見つけて入れて見たりと,よく分かってもいないのにいろいろ試してみては失敗するものだから,気が付いたら調子が悪くなっていて,すでになにがきっかけだったかわからないということが起こっています。
見た目に問題なく動いているNASも,よく見てみると問題が出ていたりするので,なにかをきっかけにして初期化をしないといけないかも知れません。
とにかく,このままdnsmasqをNASに任せてようと頑張ることは傷口を広げてしまう恐れが大きいので,もうこの作戦はやめにして,別の方法を考える事にします。
そして私は閃きました。
そうだ,ラズパイだ!
電子工作のひとも,makerな人も,Linuxが大好きな人も,35ドルで買えるフルスペックのLinuxが走る,この名刺サイズのシングルボードコンピュータ「Raspberry Pi」に夢中です。
2012年に登場した初代からすでに6年が経過し,イギリス生まれのこのシステムもすっかり定着した感があります。Arduinoのようなアングラ感もなく,大手メーカーも巻き込んで,知ってる人は知ってるというレベルから,技術者なら普通に知っているべきものへ変わって来たなあと感じます。
とはいえ,レジスタを叩いてLEDをチカチカさせるのが好きなハード屋さんにとって,linuxというOSの壁は厚く,いくらGPIOがヘッダピンで出ていても,直接触っている感覚が薄くなってしまうんじゃないかと思います。
そんなわけで,電子工作やIoTという側面から,私はRaspberry Piを触ることはないだろうなと思い続けていたのですが,家庭内のサーバーとして利用するという切り口に気付くと,猛烈に身近な存在になってくるから不思議なものです。
で,Raspberry Piを同じような用途で使っている人を調べてみると,どうもたくさんいらっしゃるようです。そりゃまあ,1GHzを越えるマルチコアCPUにLANと16GBのストレージを内蔵したコンピュータがちゃんとしたLinuxを走らせているんですから,大抵のことは出来てしまうでしょう。
しかも安い。しかも低消費電力。しかも小さい。
これこそ,最良の解決策です。
こういうきっかけを待っていた感もあるのですが,購入を前提に早速調べてみると,どうも最新のRaspberry Pi 3+はまだちょっと高く,こなれているのはRaspberry Pi 3です。これなら4000円ほどで買えます。
初代や2はもっと安いかと思ったのですがむしろ高いくらいで,そういうことならRaspberry Pi 3 Model Bをとりあえず買っておきましょう。
届くまでの間にセットアップの方針と作業の準備を行っておきます。
まず,本体にディスプレイやキーボードを直接繋ぐことはせず,リモートで運用します。いわゆるPCとして使うわけではないので,GUIもいりませんし,オフィススイートもいりません。
ネットワークは有線のLANを基本とし,WiFiもBluetoothも使いません。
動かすサービスはDNSサーバーであるUnboundとNTPくらいのもので,後は必要に応じて考える事にします。
ということで,OSはRaspbianで,Stretchという最新版のLiteを選びます。これならストレージのmicroSDは8GBでも十分過ぎるくらいで,手持ちの余剰品を有効活用出来ます。早速ダウンロードしておきます。
そんなこんなので,Raspberry Pi 3 model Bも手元に届き,作業スタートです。
(1)microSDの準備
ストレージのmicroSDにOSを書き込み,起動できるようにするのがまず最初にやるべきことです。なにせ初めての事ですし,なにかと失敗しやすい作業でもありますので,ここは確実な専用ツールを使います。
Etcherというのがそれで,Mac版をダウンロードして使いました。これはzipになっているOSのイメージを解凍せずにそのまま突っ込み,展開先のmicroSDを指定してやればあとは勝手に作業が進むという優れものです。
使ったイメージは2018-06-27-raspbian-stretch-lite.zipです。
正常に書き込んだら,デフォルトでは閉じているsshを有効にするため,ファイル名をsshとした0バイトのファイルを作成し,/bootに投げ込んでおきます。
こうして出来たmicroSDを,LANですでに繋いであるRaspberry Piに突っ込み,2.4AのACアダプタに繋いで起動します。
(2)sshでログイン
Raspberry Piは初期状態ではDHCPでIPアドレスを取得するので,sshでログインするにはどのIPアドレスが割り当てられたかを調べないといけません。
Macだと「raspberrypi.local」でIPアドレスを自動的に見つけてくれるのですが,手動で調べるのも1つの方法です。
私の場合,IPアドレスを調べてsshでログインを試みたのですが,connection resetと出てしまい拒否されてしまいます。
googleで調べると。どうもopensshの問題らしく,Raspberry Piのsshのファイルを消してコンフィギュレーションをやれば解決するらしいのですが,そもそもLCDもキーボードも繋がっていない環境なのですから,sshで繋がるまでなにも出来ません。
早くもここで白旗を揚げそうになったわけですが,よく考えるとLCDもキーボードも繋げてしまえばいいだけの話で,こうしてローカルでログインして作業をすればよいのです。
長めのHDMIケーブルでLCDをつなぎ,余っていたUSBキーボードを差し込んで起動すると,ちゃんとLCDに起動画面が出てきます。当たり前ですがちょっと感激です。
起動していることまではわかったので,piでログイン。そして
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server
と入力します。これでsshでリモートログイン出来るようになりました。
(2)初期設定
なにはともあれ,パッケージの更新です。
sudo apt-get update
sudo apt-get upgrade -y
小一時間ほどかかりました。待ってるだけの時間ですので,もったいないです。
これも無事に終了し,再起動。
続けて設定の変更です。タイムゾーン,ロケール,ホストネームを設定します。
sudo raspi-config nonint do_change_timezone Asia/Tokyo
sudo raspi-config nonint do_change_locale en_US.UTF-8
sudo raspi-config nonint do_hostname hogehoge
ロケールは日本語を指定したのですが,全角文字がなんだか鬱陶しくなり,USにしました。ちなみにデフォルトはGBです。
(3)NTP
サーバーですので,正確な時刻は必須。従ってNTPは入れないといけません。
sudo apt-get install ntp
sudo vi /etc/ntp.conf
そして,NTPサーバーにおなじみのnictを設定します。
"server 0-3.debian.pool.ntp.org iburst"をコメントアウトし,"pool ntp.nict.jp iburst"を追記するだけです。
sudo service ntp restart
そして,
ntpq -p
として,ここに*nictが出ていればOKです。
(4)固定IP
DNSサーバーとして使うのですから,IPは固定でないと話になりません。
sudo vi /etc/dhcpcd.conf
以下のように修正します。
interface eth0
static ip_address=192.168.1.xxx/24
static routers=192.168.1.x
static domain_name_servers=8.8.8.8
sudo reboot
固定IPで再ログインして,ifconfigで確認します。次。
(5)ユーザーの管理
piというユーザー名を使い続けるのは嫌なので,このあたりを片付けます。
方向はpiを別のユーザー名にすることです。そのためには,一度暫定ユーザーを作り,ここで作業をして最後に削除です。
(5-1)暫定ユーザーの作成
sudo useradd -m -G sudo -s /bin/bash tmpuser
sudo passwd tmpuser
sudo reboot
(5-2)暫定ユーザーでログインしpiユーザーを変更
ssh tmpuser@192.168.1.xxx
sudo rm /etc/sudoers.d/010_pi-nopasswd
sudo usermod -l hoge pi
sudo usermod -d /home/hoge -m hoge
sudo groupmod -n hoge pi
sudo passwd hoge
history -c
sudo reboot
(5-3)暫定ユーザーの削除
ssh hoge@192.168.1.xxx
sudo userdel -r tmpuser
よし,ここまででようやく初期設定がおわった。
(6)Unboundのインストールと設定
DNSサーバーには,これまで使っていたdnsmasqを使うつもりでいたのですが,軽く低機能なdnsmasqは今回の用途にぴったりとは思いつつも,最近例をよく見るようになったUnboundを使って見る事にしました。
sudo apt-get install unbound
これでインストールまで完了です。簡単です。続けて設定です。
sudo vi /etc/unbound/unbound.conf.d/unbound.conf
おそらくこんなファイルは存在しないと思うので,新規と出てくると思いますが,びびらずに続けます。
Unboundは,/etc/unbound/unbound.conf.d/にある.confをすべて設定ファイルと見なすので,設定を複数に分けてもいいし,1つにまとめても構いません。
私の場合,大した記述ではないので,1つにまとめました。
server:
use-syslog: no
log-queries: no
directory: "/etc/unbound"
interface: 0.0.0.0
access-control: 127.0.0.1/32 allow
access-control: 192.168.0.0/16 allow
hide-version: yes
hide-identity: yes
local-data: "gshoes.myqnapcloud.com. IN A 192.168.1.xxx"
local-data-ptr: "192.168.1.xxx gshoes.myqnapcloud.com."
たったこれだけです。
本当はもっといろいろ設定しないとまずいのですが,面倒なのでログさえもとりません。
しかもデフォルトでは,ここで解決しなかった場合,上位のDNSサーバーに合わせることになっているので,わざわざ設定ファイルに記述しないという手抜きっぷりです。
sudo /etc/init.d/unbound restart
これでUnbopundを再起動します。
他のマシンのDNSをRaspberry PiのIPアドレスにしてから,nslookupで期待したIPアドレスがかえってくるか,試してみましょう。
----
とまあ,やったことはこれだけです。
とても簡単ですし,待ち時間を除けば30分もあれば終わってしまうでしょう。わずか4000円の費用と,これだけの設定で,ローカル内DNSが立ち上がってしまうんですから,すごいものです。
とはいえ,書けば簡単に見えますが,実は結構苦しんでいました。
失敗1:ファームウェアのアップデート
初期設定の途中で,ファームウェアのアップエーとを試みました。
sudo rpi-update
しかし,tarがread onlyだとかなんだとか言い出して,正常に終了しませんでした。
その後起動もしなくなり,これまでの設定作業をすべて捨てて,最初からやり直す羽目になりました。ううう。
1回目のやり直しでは起動メッセージにfailと出るようになってしまい,気持ち悪いのでもう一度最初からやり直します。
今度はすべて問題なく,ようやく設定作業に進むことができました。
後で調べてみると,公式にはファームウェアの更新はお奨めしないと書かれているらしく,実際トラブル出した人の苦しみの声がネットに上がっています。
失敗2:Unboundの設定ミス
すんなりインストールまでは出来たUnboundですが,設定を書き換えて再起動しても,IPアドレスを解決してくれません。問い合わせに対してタイムアウトさせているので,DNSサーバーとして動いていないようです。
こういう場合はおおむね設定ファイルの書き間違いなのですが,案の定ローカルIPアドレスを書き間違えていたり,最後にピリオドを打ち忘れていたり,スペースが抜けていたりと散々でした。
これらを修正してやると,ウソのように動き出しました。コンピュータというのは本当に正直です。
こんな感じで,あれほど苦しんだNASでのローカル内DNSサーバーですが,NASを触ることなくさっさと解決することが出来ました。
一応基幹系のハードウェアで24時間の運用ですから,ケースくらいは入れておかねばなりません。ヒートシンクはTO-220用の小さいものを専用の接着剤で貼り付けておきましたが,これを含めて後日届くケースに入れ込んで,明日には正常運用に入りたいところです。
最近は,子供の科学にも「じぶんパソコン」としてRaspberry Piが取り上げられています。確かに,これだけ充実していれば,パソコンとしても十分使えると思います。子供にとっては,やっぱり自分のパソコンを持つことは,まだまだ憧れなんでしょうね。
35ドルでこの機能と使い勝手ですから,安さの源泉は信頼性だと言えるかも知れません。事実24時間駆動の用途には苦しいという意見もありますし,面白そうだけど今ひとつ信用出来ないというのが,一般的な評価でしょう
しかし,裸の基板に電源を入れるという儀式ですっかり心もハードウェアのエンジニアになっているのに,いざ触るとLinuxというこのギャップは面白く,サーバーではなく,PCとしてもう1つ買って遊んで見るのもいいかなあと思い始めています。