なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

DNSサーバ構築からTwitterのbot作成まで

全くの初心者がLinuxをいじってみた。ネット環境はIP変動制。

構築に関しては以下のサイトを主に参照した。(どちらかというと下のほうがわかりやすいかもしれない。)
CentOSで自宅サーバー構築
CentOSサーバー構築マニュアル



とりあえず、ルータの下にWindowsLinux、二つのPCがある状況。
まずは二つのPCそれぞれに固定IPアドレスを割り振る。


ここではWin側が192.168.11.30 Linux側が192.168.11.31とした。ルータのIPアドレスは192.168.11.1である。
BUFFALOのルータに書いてある通りにした。


Windowsではローカルエリア接続のプロパティから。
CentosからはGNOMEがあれば設定→インターネット、で設定できる。コマンドラインでifconfig_eth0をいじってやってもいい。どちらもデフォルトゲートウェイはルータのプライベートIPとなる。つまり192.168.11.1。


つながったらさっそくWin側での遠隔操作の準備をする。
その前に、ルータ側でポートを開放しておく。SSH接続で一番代表的なのは22番ポート。これから使うので開ける。今のうちに80番ポートなども開けておいていいかもしれない。ポートの開放については各社のルータの説明を読んでから行う。


ポートが開いたらTeraTermPoderosaをWin側でダウンロードしてインストールする。
さっきのIPアドレス通りに数字を打ち込んで最初はパスワードでログインする。この間に公開鍵を作成して安全な通信を確立する。SSH接続でググればすぐにやり方は分かるはず。つながったら大成功。


それが出来たらbindのインストール。独自ドメイン取得に移行する。

私はieServerを使った。タダだったから。
ホスト名はパソコン自身の名前、ドメインはco.jpとか.comのような物だと思ってくれればいい。



次にbindの設定。ここが一番難しい。けどまあ基本はコピペ。
BIND9 インストール
ダイナミックDNS取得 DNS情報設定



しかし、マンションなどの共用部にIPアドレスが配られていると、IPアドレスがサーバーと結びつかない。これを結びつけてくれるソフトがDiCEだ。DiCEのsetupの際、ホスト名とドメインを別々に入力しないとエラーが出るので注意。
DDNS自動登録 DiCE インストール


ここまでできてようやく一息つける。
次にNPTサーバーとWEBサーバーの準備をする。
NTPd インストール
Apache2 インストール


ApachePHPCentosのインストール時にサーバーを選択していれば最初からインストールされている。
Apacheのドキュメントルートがどんなものか実践した後、Twitterbotの準備に移る。
ここでhttp://(ホスト名).(ドメイン)でアクセス出来れば合格。ついでに他のログインユーザーも作って
http://(ホスト名)(ドメイン)/(~ログインユーザー)/でアクセスできるようにしておく。これには多少Apachehttpd.confを弄る必要がある。詳しくはググろう。



プログラミングができなくても作れるTwitter botの作り方
上記のサイトを参考にすればまだ簡単に自宅サーバーでbotを作れるのではないか。
まずはTwitterでアカウントを作って下の方のAPIをクリックし、OAuth認証のためのコンシューマーキーなど4つの暗号をもらう。EasyBotterではこれを使ってプログラムがTwitterにログインする。


次にroot以外のユーザーのpublic_html下にEasyBotter(2.0)をそのまま置く。Linuxからダウンロードしてもいいし、WindowsでダウンロードしてTeraTermで転送するのもいい。
サイトで言われているようにbot.phpやdata.txt(tw.txt)、log.txtにはchmodで権限を与えておく。755とか。


そしてbot.php、setting.phpには先ほど得た暗号をぶち込んでおく。
上記で言っていたようにhttp://(ホスト名)(ドメイン)/(~ログインユーザー)/(〜何か〜)/bot.phpでアクセス出来れば成功。data.txtに入力した言葉がsetting.phpの指示通りでていればおk。
出ない場合:特に「そのようなファイルやディレクトリはありません No such a file or directory...」が表示されたときは文字コードや「//」のつけ間違いを疑おう。
特に文字コードについての面倒を避けるためにファイルの編集はLinux上でやるという手もある。(遠隔操作の意味なしw)

そして間違いとして一番ありがちなのはphpファイルの文頭に「#!/usr/local/bin/php」などのオマジナイをつけないことだ。これをつけないとパソコンはphpファイルを認識してくれない。phpの居場所は人それぞれなので「find」とかのコマンド使ってしらべるが吉。


「ウェブサイトにアクセスしたらbotがなんかしゃべったおwwwwww」
または
「$/home/ユーザー/public_html/bot.php を直接叩いたらbotがしゃべった!」


上のような状態になったら次はそれを自動化する。自動化にはcrontabを使う。
「$crontab -u ユーザー名 -e」で実行するとそのユーザーが定期的に実行するプログラムを指定できる。

ここが詳しいcron
下のように適当に書いても動く。15分毎に。

 #!/usr/local/bin/php
 MAILTO=""

 # run-parts
 */15 * * * * (ユーザー) /home/../../(ファイル)

上のファイルの部分にbot.phpを指定したいところなのだが…これが出来ない。
そのままではphpがうまく作動せず全てを絶対パスで書かなければ許されないという状況になってしまう。困ったんやなw
しかも絶対パスで書いても許されないという鬼畜状態。

そこで解決策として「bot.phpを動かすphpファイル」をそこに指定する方法が取られる。
このヒントを与えてくれたのは、したらば掲示板のEasyBotterスレの名無しさん。誰だか知らんがありがとう。
便利な関数file_get_contentsを使ってやってphpを直接外から実行してもらう。

 #!/usr/local/bin/php
 < ? php
 $buf = file_get_contents('http://(ホスト名)/(~何か)/bot.php');
 ? > 

つまりは上のソースを実行するようにcronのほうに記述すればいいわけだ。
やっと終わったー
Twitter