実は - omnioo lab.

| コメント(0) | トラックバック(0)
実は新サーバーに移しました。
メインのドメインexample.comがあって、examp.com/~userみたいな接続の方法というのを昔はよく見かけましたが、こういう設定は今でも勿論できます。あんまりサイト運営に関してはもうすでに意味のない感じですが、一応設定していると便利は便利です。オリジナルドメインとかのDNSの設定不備とかそういうので、一時的にアクセスできなくなった時は、こっちの設定が安定しています。
/etc/apache2/mods-available/userdir.conf
を編集します。

<IfModule mod_userdir.c>
        UserDir www
        UserDir disabled root

        <Directory /home/*/www>
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews SymLinksIfOwnerMatch IncludesNoExec ExecCGI
    // Indexesを削除、ExecCGIを追加
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>
と編集して、このモジュールを有効化します。
a2enmod userdir
/etc/init.d/apache2 restart
で有効になります。

デフォルトではpublic_htmlになっているのでご注意。私は今流行りのwwwディレクトリに設定してみました。この場合は勿論/etc/skel/wwwを設定しておきます。ユーザー作成(adduser)の際に自動的にコピーしてくれます。
  • 「自分で調べろ」
  • 「俺は教えた」
  • 「なんかやっても俺は知らない」
  • 「俺の言ったことわかってる?」
  • 「そうなると思ってた」
 これ、よくよく考えてみると結構怖いですね。比較的こういう人って多いと思うのですが、こういう人は自分自身はわりと常識的なモラリストであると自負しているというのが更にこわい感じがします。つまり、真面目で常識的な人がかなり破壊的な精神状態ということになっているわけです。
 自分が破壊的な精神状態かどうかを見分ける方法があるのですが、自分の最も身近な人間との関係でわかります。「自分は常識的であるにもかかわらず、理不尽に責められる」と思っている方は、自分自身がかなり破壊的で無残な精神状態であることが多いです。特に深夜まで夫婦喧嘩とかカップル喧嘩やっているような方々...。

 ゾーンの設定の中核はnamed.confというファイルで行います。その他の設定はこのファイルからの派生物であると考えてもいいぐらいです。すでにrndc-keyをnamed.confに設定しました。この先もこのファイルに設定を施してゆきます。
 Ubuntu/Debianのbind9のnamed.confはデフォルトでは、
include "/etc/bind/named.conf.option/";
include "/etc/bind/named.conf.local/";
include "/etc/bind/named.conf.default-zones/";
という3つのファイルをインクルードしています。これはnamed.confに直接書いても全く構いません。しかし一応分類しておいた方が賢明ということでデフォルトでこんな風になっています。ファイル名からも殆ど想像できるように、
  • bindに関する機能をいろいろ制御するオプション
  • ローカルエリアの設定
  • メインになるゾーンの設定
という分類になっています。(私の場合は、named.conf.localは殆ど使っていません。)
メインに使うのは1と3のファイルです。 2は何故使わないかというとローカル環境での名前解決はおそらくホストの設定をもうすでにやっている筈です。ローカルエリアでの名前解決は基本的には、
hostname = 127.0.0.1
のみなので、殆ど場合はDNSサーバーで特に設定する必要がないか、デフォルトで設定済みになっています。

外部にDNSサーバーを開放する

 DNSサーバーはどのドメインがどのIPアドレス(またはネットワーク)に属するかを登録しているデータベースです。ですのでLAN内のDNSサーバーとして使う場合を除いては外に開放しないといわゆるクラウド的に使うことができません。ですので、ここでは外部に開放する手順を説明してゆきます。

include "/etc/bind/named.conf.default-zones/";を設定する

 まずは何かしらのエラーが起こって元に戻せなくなったらいけないので、このファイルのバックアップをとっておきます。設定が複雑になってきてエラー解決の切り分けができなくなったらデフォルトに戻せばいいわけです。それから、ここではインクルードするファイルを
include "/etc/bind/named.conf.main-zones/";
として、ファイル名を変更しておきます。それからnamed.conf.main-zonesを開いて編集します。

 デフォルトの/etc/bind/named.conf.default-zoneは、ローカルエリアの設定とドメインのROOT"."などの基本的な設定がすでに施されています。インストールしたばかりのROOTゾーンはすでに最新のものになっているので大丈夫です。
 このファイルで定義することは、どのドメインを設定するかというものです。そしてその設定した詳細なドメイン情報がどのファイルであるのかを設定します。しかしそのドメインの設定も大きく分けて2つ存在します。すなわち、ネットワークの内側(LAN)であるのか外側(WAN)であるのか?です。その二つの領域を分ける作業をします。
 LAN内、またはサーバー自身であるという領域を示すためにaclを使用します。ここで、localnetと指定した場合には、viewの部分のmatch-clientsという部分にリンクしています。つまり、view "local"で設定したゾーン情報が、aclで設定したネットワーク内に反映されるということになります。デフォルトの設定は内側向けのみの設定になっているのでaclやviewを使用する必要がないのです。このaclとviewはLAN内のゾーン情報をいっぺんに設定するのに便利なのです。
/etc/bind/db.root        ROOTゾーン情報
/etc/bind/db.local    localhostゾーン情報
/etc/bind/db.127        localhostの逆引きのゾーン情報
/etc/bind/db.0            ブロードキャストのゾーン情報
/etc/bind/db.255        ブロードキャストの逆引きのゾーン情報
というゾーンが設定されています。

 WAN側(外側)の設定はview "global"で行います。ここでのmatch-clientsは、設定したゾーンすべてということになるのでany;を指定します。
 WAN側からドメインの名前解決を求めてやってくるクライアントに対してドメインとIPアドレスの対応表を渡すわけですが、DNSサーバーではそのDNSサーバーのドメインを設定してやらなくてはいけません。我々がWEBサーバーなどにアクセスするドメインは通常、ドメインとIPアドレスのペアでよいのですが、DNSサーバー自身を示すドメインも含めて設定するドメインが必要になります。このドメインだけはゾーンの設定が少々違ってきます。(後述)
 ですので、zone "exmaple.com"はそのような役割をするドメインとして一番最初に記述しておきます。その方がわかりやすいです。勿論DNSサーバーにはいろいろな種類と役割がありますので、このような設定はスタンドアローンのサーバー、WEBサーバーとかFTPサーバーとかが一台のマシンで併用されている小さなサーバーであると思ってください。(データセンターなどのサーバーはDNSサーバー自体が一つの大きなネットワークを作っているので、これまた高度な違う設定になります。DNSサーバーのDNSサーバーがあるのですから。)
 またDNSサーバーは一台では心許ないということでセカンダリーサーバーを置くことが、必須の条件になっております。必須でもないのですが、永遠の習慣になっています。幸いにしてmaihama-netさんは、セカンダリーDNSサーバーを無償で貸してくれるというありがたい事業をやってくれていますので、私はそこを利用しています。セカンダリーサーバーはメインになるプライマリーサーバーのゾーン情報を転送して常にミラーリングしています。仮にプライマリーサーバーが落ちてもしばらくの間は接続不能ということにならないような仕組みになっています。allow-transferの部分でセカンダリーサーバーのIPアドレスを指定してやります。(勿論、セカンダリー側の設定もあらかじめやっておく必要があります。)下の例では、合計3台のネームサーバーがミラーリングされていることになります。安心です。
 メインになるドメインのゾーン情報は逆引きの設定も施しておいた方が無難です。というのは逆引きできないドメインはかなり怪しいからです(特に機能的には問題ないのですが、スパムなどのメール送信に使われるサーバーなどは追跡されないように逆引きを設定していない場合が多いからです。)。Webサーバーの接続のみですと本来逆引きの設定は必要ないのですが、礼儀としても、習慣としても、またこれから先の高度な設定においても逆引きゾーンの設定はしておいた方がよいです。
 最後に通常のドメインの設定をします。これらのドメインがns.exmaple.comというアドレスをもったDNSサーバー内で名前解決されるドメインになります。環境が許す限りかなりたくさんのドメインを設定することができます。現在の中級クラスのマシンでも数百、数千は設定可能とのことです。勿論ネットワークのアクセス数にもよりますが。
 このような形で設定したら保存します。次は個々のzoneファイルを設定してゆきます。

acl "localnet" {
    127.0.0.1;
    192.168.11.0/24;
};

view "local" {
    match-clients {
        localnet;
    };

    // Root Server
    zone "." {
        type hint;
        file "/etc/bind/db.root";
    };

    // be authoritative for the localhost forward and reverse zones, and for
    // broadcast zones as per RFC 1912
    zone "localhost" {
        type master;
        file "/etc/bind/db.local";
    };
    
    zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
    };
   
    zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
    };
   
    zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
    };
};


view "global" {
    match-clients {
        any;
    };

    zone "exmaple.com" {
        type master;
        file "/etc/bind/zone/db.exmaple.com";
        allow-transfer {
            123.50.202.226;    //ns1.maihama-net.com
            38.110.146.192;    //ns2.maihama-net.com
        };
        notify yes;
    };
    zone "89.67.45.123.in-addr.arpa" {
        type master;
        file "/etc/bind/zone/db.123.45.67.89.rev";
    };


    zone "example2.com" {
            type master;
            file "/etc/bind/zone/db.example2.com";
            allow-transfer {
                    //123.50.202.226;       //ns1.maihama-net.com
            };
            notify yes;
    };

};
 グローバルなIPアドレスに対応するためのzoneの設定は、viewのglobal内で設定します。それぞれのzoneはネストされたデータベースとなっています。
zone "exmaple.com" {
        type master;
        file "/etc/bind/zone/db.exmaple.com";
        allow-transfer {
;            123.50.202.226;    //ns1.maihama-net.com
;            38.110.146.192;    //ns2.maihama-net.com
        };
        notify yes;
};

zone "89.67.45.123.in-addr.arpa" {
        type master;
        file "/etc/bind/zone/db.123.45.67.89.rev";
 };
 一行目のzone "exmaple.com"で、zoneを指定します。ここで指定するドメインのゾーンの基本的な正引きの情報がここでネストされます。
二行目のtypeでは、プライマリーサーバーかセカンダリーサーバーかを指定します。ここではプライマリーサーバー(マスターサーバー)なのでmasterを指定します。
次にゾーン情報が書かれたzoneファイルのパスを指定します。これは基本的にはどこにおいても構わないのですが、ここでは/etc/bind/zoneというディレクトリを作成してその中に格納しています。データ情報が多くなるとディレクトリを作成しておいた方が無難です。
allow-transferではセカンダリーのネームサーバーを指定します。ここではマイハマネットさんのIPを指定していますが、きちんと申し込んでから設定します。ですので、上記の例ではコメントアウトしています。
notifyでの設定はデフォルトではyesになっています。これは、nsで指定されたこのネームサーバーの設定が速やかにセカンダリーサーバーに転送されるかどうかの設定をしています。セカンダリーが設定いる際にはyesにしておくべきでしょう。後述になりますが、zoneファイルの設定でシリアル番号を1つ上げないと設定が反映されないのでご注意!

 次に逆引きゾーンの設定をします。逆引きの場合は、IPアドレスを指定しますが、IPアドレスを逆から並べるというようなことをします。つまり、
123.45.67.89
    ↓
zone "89.67.45.123.in-addr.arpa"
という設定になります。in-addr.arpaの意味はぶっちゃけ考えなくてもいいです。こういう規則になっているというだけの話なので。
ここでもtypeはマスター、fileには逆引きゾーンのファイルパスを設定します。

ポートの設定

 ここらあたりの話はネットワーク設計のやり繰りで変わってきてしまうので一概には言えないのですが、DNSサーバーで使用するポートは53です。特にDNSサーバーが特殊なのはレスポンスに対してえらい細かくてうるさいTCPポートと共に、殆どなげやりで無責任なUDPポートを使用するということです。つまり53/tcpと53/udpというような設定が必要です。
 iptableや市販のルーター、もっと高性能なファイヤーウォールルーターなど様々なフォームウエアで設定が可能なので、便宜そちらできちんと設定しておくこと。市販のルーターですとNAT/マスカレードというようなキーワードで調べると設定の仕方が見つかるはずです。
 サーバーマシンそのものに直接iptableでもってポートを設定するときには、まずは、すべてのポートを閉じることをお薦めします。全部閉じてから該当のポートのみを開くようにしましょう。スタンドアローンのサーバー機では数個のポートを開放するだけで充分だからです。
# ufw allow 53/udp
# ufw allow 53/tcp

vim操作 - omnioo lab.

| コメント(0) | トラックバック(0)

保存や終了などの基本的な操作

コマンドモードでは、exコマンドという様々なコマンドを実行する事ができます。 ノーマルモードから、コマンドモードに移るためには、「:」キーを押します。 コマンドモードに移ると、カーソルが一番下の段に移動します。 exコマンドで、編集したファイルの保存・終了する方法を紹介します。
キー動作
:w
:w!
編集中のファイルを上書き保存します。!を付けると読み取り専用でも強制的に保存します。
:w name編集中の内容をnameというファイル名で保存します。
:q
:q!
ファイルを保存済みの場合、vimを終了します。編集が途中の場合は、終了できません。!を付けると編集途中でも強制的に終了させることができます。
:wq
:wq!
ファイルを保存してから終了します。!を付けると読み取り専用でも強制的に保存して終了させることができます。
:x
:x!
ファイルを保存してから終了します。!を付けると読み取り専用でも強制的に保存して終了させることができます。
exコマンドモードに移らずノーマルモードで保存・終了する方法もあります。
キー動作
ZZファイルを保存してから終了します。:wqと同じ動作です。
ZQファイルを保存しないで終了します。:q!と同じ動作です。

ヤンクとペースト

 もっともよく利用するのがコピー&ペーストなのですが、どうしてだかvimの場合はコピーのことをヤンクと言います。yyでその一行をヤンクします。単語単位ではyw、文字単位ではylとなっています。異様に複雑に感じますが慣れるとまあまあ使いやすいです。
 ペーストは一行単位ではpp、単語単位ではpw、文字単位ではplとなります。しかしこれ、海外産ということもあって単語単位でのコピー&ペーストというものが存在しますが、句読点まで続く日本語にはちょっと相なれないものです。そもそもコードを書く以外には使わないものなので、まあこれでよいかというところです。
キー動作
yyカーソルのある1行をヤンクします。複数行ヤンクする場合は、3yyとすると3行ヤンクされます。
ywカーソルのある部分の単語を1つヤンクします。同様に複数単語をヤンクしたい場合は、3ywとすると3単語だけヤンクします。
ylカーソルのある部分から1文字をヤンクします。同様に複数文字数をコピーしたい場合は、3ylとすると3文字ヤンクします。

キー動作
ppヤンクした行をカーソルのある位置に1行ペーストします。yyに対応しているペーストのコマンドです。複数行ヤンクした場合は、3ppとするとヤンクしたものを先頭から3行だけペーストします。
pwヤンクした単語を1単語だけカーソルのある位置にペーストします。pwに対応してます。複数単語をペーストする際には3pwとします。3単語ペーストされます。
plヤンクした1文字をカーソルのある位置にペーストします。複数文字をペーストする際には、3plとすると3文字だけペーストされます。
CotEditor
 コードを書く際にはこのエディタが一番いいです。今までmiを使っていましたがしょぼいMacで使うと結構重い。CotEditorはものすごく軽くて、設定も殆どデフォルトでそのままコーディングに使えます。みょうちくりんなモードもスキンもない。バックグランドの色を変えたりとかどうでもいい機能もないのでとてもいいです。

mi
 なんだかんだで一応入れておいてしまうmiですが、phpのモードがデフォルトで入っていなくていちいちダウンロードしてこないといけないのがおしいです。でも使っている人が多いので入れておいて損はないかも。

VLC
 なんだかんだで動画の再生には、Quick TimeよりもWindows Media PlayerよりもVLCが一番いいです。これはもう殆どの動画形式に対応していて何でも再生できます。その後のエンコードは別で考えればいい感じです。再生するならVLC。

Evernote
 アカウントもっていないと意味はありませんが、クラウド時代になんでもかんでも外部サーバーに保存しておけるEvernoteは便利です。無料アカウントで充分使える上に、ブラウザーから開かなくともアプリから開けるととても楽チンです。

SyberDuck
 複数のFTPアカウントに接続できたら最高なんですが、今のところ1つのアカウントにしか接続できなくて、他に切り替える時はいちいち接続を切らないといけないのですが、何だかんだでサーバー上のファイルを直接編集できるのはとても便利です。FireFTPとSyberduckが合わさったようなFTPクライアントはないでしょうか。いずれにろ、SyberDuckを選ぶのが賢明かも。


  iPhoneで写真とか動画とかを撮影してPCに落とすときには、Windowsの場合はiPhoneを外部でディバイスとして認識してくれるので写真なんかは普通に取り込めるんですが、Macの場合は母体みたいなものにドッキングみたいな感覚で、全然拒否反応がなくて馴染みすぎてしまって画像の保存先とか全然わからないので困りました。しかもLion以降はちょっと保存先のフォルダー名とかも違いました。

  1. Finderで普通に「ピクチャ」を開きます。
  2. その中にあるiPhoto Libraryを右クリックして「パッケージの内容を表示」を選択して中を開きます。普通にクリックするとiPhotoアプリが起動してしまいます。
  3. この中のoriginalsとあるフォルダ(LionではMasterっていう名前になっていました)を開きます。
  4. その中に日付毎のフォルダに分かれて保存されているはずです。

 sudoのユーザーはデフォルトではrootだけになっています。GUIでUbuntu/Debianをインストールした場合なんかは、デフォルトのユーザーがsudoに自動的に登録されていたりするのかもしれません。が、基本的にはsudoユーザーは登録制です。

sudoユーザーを登録する方法

  rootでログインしてから、以下のファイルを編集します。
# vi /etc/sudoers
おそらく、ファイル中程にある、
# User privilege specification
root    ALL=(ALL) ALL
という項目の後ろに登録したいユーザーを加えてゆきます。
# User privilege specification
root    ALL=(ALL) ALL
hoge  ALL=(ALL) ALL
といった感じです。
 このファイルの保存が終わったら、何らかの再起動をしなくともsudoコマンドが使えるようになっております。

デフォルトで入っていないんですね。
# apt-get -y install tree [Enter]
で入ります。
$ tree -L 1 -d /usr
とやると、userディレクトリ以下の階層1つのディレクトリのみを表示してくれる。

 データベースの作成といいつつ、特にSymfony2でデータベース作成するわけでもないので、コマンドラインか、または、PHPMyAdminなんかでデータベースを1つだけ予め作成しておきます。ただそれを組み込むってだけの話です。ですので、すぐに終了します。
 ここではMySQLを組み込む話をします。
./Symfony/app/config/parameters.ini
を開いて、DB情報を記入します。
database_driver   = pdo_mysql    ; このまま
database_host = localhost
database_port =                              ; 普通は空で特に問題なし
database_name = symfony
database_user = root
database_password = xxxxxx
でOKです。

 データベースの設定方法はブラウザーからも設定できます。Symfony2に手を出している人がここから設定するとはあまり思えませんが。
http://localhost/Symfony/app_dev.php/_configurator/step/0

db_set.jpg