開発用サーバ設定メモ

開発用サーバ(debian)の設定をしたのでメモ。

を入れた。インストール自体はなんということもなく終わったのだが、Redmineではrackがないと言われた。

ERROR: Error installing rails:
actionpack requires rack (~> 1.0.0, runtime)

入ってるよ!と思ったけど、依存するバージョンが入っていないということらしい。

gem install rack --version '~> 1.0.0'

みたいにしたら怒られなくなった。

MySQLは思わず文字コードの指定をしないでインストールしてしまい、Redmineで入力した日本語が???になってしまった。
文字コードの設定は初心者向けの本にも書いてあるのに、すっかり忘れてた。

  1. /etc/my.cnf を編集。
  2. 既に作っちゃったデータベースは

  alter database [データベース名] default character set utf8;
して
  alter table [テーブル名] default character set utf8;
 でむりやり変更。テーブルにデータがある場合はalterでエラーになるらしいけど、作ったばかりだったのでセーフ。

これで設定は完了したけど、こういうツールは家からも社内からもアクセスしたい。
外部からはDynDNSでdeadbeef.office-on-the.netとか適当に付けた。

問題はオフィス内からで、上記のdeadbeef.office-on-the.netにアクセスすればグローバルIPが返ってしまうのでアクセスできない。
社内からは192.168.〜みたいにIPでアクセスする方法もあるけど、かっこわるいし面倒だよね。

調べてみると、dnsmasqというDNSフォワーダーがあるので、これをインストールすることにした。

  • ルータのDNS設定は開発機にインストールしたdnsmasqを見に行くようにする
  • 開発機のhostsファイルに上記のdeadbeef.office〜 をローカルアドレスで書いておくようにする
  • 開発機のresolv.confにはISPDNSを指定しておく
  • dnsmasqはまずhostsファイルを読んでdeadbeef.office〜を解決し、hostsにない名前はresolv.confで指定されたDNSを読みにいく

で、解決・・・のはずだったのだが・・・

しばらくすると社内からネットに繋がらなくなる。というか名前が解決できなくなる。

原因は開発機のDHCPクライアントがリセットのたびに/etc/resolv.confを書き換えちゃうらしい。
redhatとかだとDHCPクライアントがresolv.confを書き換えないようなPEERDNSとかいうオプションがあるみたいだけど、debianではどうやるのかよくわからず。
開発機はルータの設定でローカルIPも固定にしてあるのでDHCPを使わず、固定アドレスにしようと/etc/network/interfacesをいじってみたけど、これもよくわからず。

結局、/etc/dnsmasq.confをいじって、resolv.confのファイル名を指定する項目を/etc/resolv.conf以外に設定した。
こうすると、DHCPクライアントは依然として/etc/resolv.confを毎回書き換えているけど、dnsmasqはもうそのファイルを見ていないので影響を受けない。

これでいいのか、ダメなような気もするけど、あまりいじっていると社内からネットを使えず不評なのでこれで設定完了とする。