quaggaを使ってOSPFのお勉強(2)

前回の続きです。




今回は OSPF の設定を行なって、実際に動作を確認してみます。

quaggaの基礎
quaggaは、各プロトコル毎に専用デーモンが存在しています。

プロトコル用デーモンとVTY接続用ポート番号は以下の通り。

No プロトコル ポート番号
1 zebra 2601/tcp
2 ripd 2602/tcp
3 ripngd 2603/tcp
4 ospfd 2604/tcp
5 bgpd 2605/tcp
6 ospf6d 2606/tcp
7 ospfapi 2607/tcp
8 isisd 2608/tcp



quaggaの初期設定
1. サンプルの設定ファイルをコピーする。

#> cp /usr/share/doc/quagga/examples/* /etc/quagga



2. 起動デーモン設定ファイルの修正
デフォルトでは全て"no"となっており、デーモンが全く起動しない。
今回利用するデーモンである"zebra","vtysh","ospfd"を "yes"に変更しておく。
[/etc/quagga/daemons]

 :
zebra=yes
vtysh=yes
ospfd=yes
 :



quaggaの起動

#> /etc/init.d/quagga start

これで、zebra や ospfd といったデーモンが立ち上がっていればOK。
後は上表の通り、2604/tcptelnet 接続してみて、接続できればOK。


quaggaの操作
CISCO系の機器をイジった事がある人であれば、違和感なく操作出来ると思います。
プロトコル事にデーモンがあるというのが分かりにくいかも知れませんが。。。)


設定ファイルに設定を入れていく事も可能ですが、やはり一般的にはVTYシェルと呼ばれる
コンソール上で設定していくようですので、こちらもVTYシェル上で設定していきます。




本日はここまで。。。。
次回は実際に OSPF を話すための設定を入れていきます。

quaggaを使ってOSPFのお勉強(1)

linux上で動作するオープンソースのルーティングエンジンquaggaを使ってOSPFのお勉強をしてみます。
物理的にPCを準備する事が難しいので、VMWare Workstation上に環境を構築していきます。


確認ポイントとしては、各ホストでルーティングテーブルをいじる事なく、
 通常時 … #1 から #5 へ ping で疎通確認出来る事。
       #1 - #2 - #3 - #4 -#5 の経路を取る事。(tracerouteで確認)
 (3)不通時 … 代替経路として、(5)(6)へ迂回して、#1 から #5 の経路が確保出来る事。
 (3)復旧時 … #1 - #2 - #3 - #4 -#5 の経路を取る事。(tracerouteで確認)
という感じですかね。


使用OS … Debian5.0.3(lenny)




■ネットワーク構成

+----+ .1      .2 +----+ .1      .2 +----+ .1      .2 +----+ .1      .2 +----+
| #1 | ---------- | #2 | ---------- | #3 | ---------- | #4 | ---------- | #5 | 
+----+     (1)    +----+     (2)    +----+     (3)    +----+     (4)    +----+
                                      | .1            .2 |
                                      |                  |
                                      | (5)          (6) |
                                      |    .2 +----+ .1  |
                                      +------ | #6 | ----+
                                              +----+



■IP構成
 (1) … 172.16.0.0/24
 (2) … 172.16.1.0/24
 (3) … 172.16.2.0/24
 (4) … 172.16.3.0/24
 (5) … 172.16.4.0/24
 (5) … 172.16.5.0/24


■ホスト名
 #1 … router01
 #2 … router02
 #3 … router03
 #4 … router04
 #5 … router05


■仮想Switchの作成
上記ネットワークの数だけ、仮想スイッチを作成しておく。
VMWare Workstationの「Virtual Network Editor」で、必要な分だけSwitchを作成。
 DHCP     … ×
 ネットワーク … ホストオンリーネットワーク


VMの作成
1) マスタイメージのインストール
一つずつVMを準備するのも面倒なので、マスタイメージを作成して、後はマスタイメージをコピーする事にします。
今回は、開発環境等も特に必要ないので、最小限でインストールイメージから、インストールして下さい。


2) quaggaのインストール

#> aptitude install quagga



3) マスタイメージからの複製
作成したマスタイメージのVMから、"右クリック"⇒「コピー」で複製します。


4) 複製したホスト用の個別設定
ホスト名 … 各ファイルを、上記況ホスト名に合わせて修正します。
[/etc/hosts]

 :
127.0.0.1    localhost
127.0.0.1    router02
 :



[/etc/hostname]

router02



[/etc/mailname]

router02


ネットワーク … /etc/network/interfaces
下記のように、MACアドレスを固定しておきます。

iface eth0 inet static
address 172.16.0.2
network 172.16.0.0
netmask 255.255.255.0
broadcast 172.16.0.255
hwaddress ether xx:xx:xx:xx:xx:xx
auto eth0

iface eth1 inet static
address 172.16.1.1
network 172.16.1.0
netmask 255.255.255.0
broadcast 172.16.1.255
hwaddress ether xx:xx:xx:xx:xx:xx
auto eth1



4) 再起動


3)、4)を5台分行なって、計6台準備します。
※"router01"/"router05"は、NICが1つだけなので、3)のネットワーク設定では、eth0のみ設定します。






とりあえず、今日はここまで。
次回、OSPFの設定と動作確認まで行ないますので、しばしお待ち下さい。。。

Djangoで実行されたSQLを確認する方法

[settings.py]

 :
INTERNAL_IPS = ('127.0.0.1', )
TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.debug',
)
 :

[views.py]

 :
 return render_to_response('templates.html', 
                           {"datas" : datas,}, 
                           context_instance=RequestContext(request))
 :

[templates.html]

 :
<p>{{ sql_queries }}</p>
 :


これで、出力されたページに、実行された SQL が出力される。

文字コードをUTF-8に変更する。

■既存DBの変更

$>mysql -u root -p
Password:
mysql> set names utf8;


■設定
[mysqld]

default-character-set=utf8 ←追加
character_set_server=utf8 ←追加

[mysql]

default-character-set=utf8 ←追加


■再起動

$> sudo /etc/init.d/mysql restart

■確認

mysql> show variables like 'character%';
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.00 sec)



既存のデータベース、テーブルを変更する場合は、ALTER 〜で変更する。
↓↓↓

mysql>alter database [データベース名] default character set utf8
mysql>use [データベース名]
mysql>alter table [テーブル名] charset=utf8

例)既存のテーブルの設定変更

mysql>show create table auth_group \G
*************************** 1. row ***************************
       Table: auth_group
Create Table: CREATE TABLE `auth_group` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(80) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql>alter table auth_group default charset=utf8;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>show create table auth_group \G
*************************** 1. row ***************************
       Table: auth_group
Create Table: CREATE TABLE `auth_group` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(80) CHARACTER SET latin1 NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)



参考になったら、ポチッとお願いします。m(_ _)m
↓↓↓
人気ブログランキングへ

Django1.0 でのテンプレートファイルの扱いが気持ち悪い

テンプレートファイルをアプリ毎に同名で配置した場合、テンプレートローダのサーチ順により、先に見つけた方が採用されてしまう。


これだと、テンプレートファイル名は、プロジェクト内でグローバルな位置づけになってしまい、アプリ毎の独立性を保つ事が出来ない。。。
自分で作っている範疇だと、ファイル名を分けて作ればいいんだろうけど、既存アプリや admin サイトをはじめとしたアドオン系を導入する場合に、カブってしまう可能性がある。


また、1プロジェクト内で PC サイトと携帯サイト作ったりする場合に、ファイル名を分けないといけなくなる。。。
 (例)
 PC: index.html
 携帯: index_m.html


これだと HTML のモック作って確認したり、デザイナと分業したりする場合に、とっても面倒だと思うんですが・・・。


テンプレートローダを自作してもいいんですけど、
ここら辺どうにかキレイに実装するやり方をご存知の方、ご教示下さいm(_ _)m
(実は既存で実装されてて、xxx っていう設定すれば行ける!とか?)




具体的には、以下のように、テンプレートローダをアプリディレクトリ配下の templates サブディレクトリだけを見るように設定(※1)した場合、setting.py の INSTALLED_APPS 登録順に templates サブディレクトリが検索されるため、下記例で行くと、app_02 のテンプレート (index.html) は利用されない。


※1. "django.template.loaders.app_directories.load_template_source" のみ有効にする




(例)<ディレクトリ構成>


 + app_01
 |  + tempaltes
 |      + index.html  <- app_01 用のテンプレート
 + app_02
 |  + tempaltes
        + index.html  <- app_02 用のテンプレート





[settings.py]

  :
#テンプレートローダ
TEMPLATE_LOADERS = (
#    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
)
  :
#テンプレートを探す場所の登録
TEMPLATE_DIRS = ()
  :
#アプリケーションの登録
INSTALLED_APPS = (
  'project_root.app_01',
  'project_root.app_02',
)
  :




参考になったら、ポチッとお願いします。m(_ _)m
↓↓↓
人気ブログランキングへ

Djangoのディレクトリ構成(独自ライブラリ置き場)

いつも忘れそうになるから、メモ

まずはディレクトリ構成。

project_root
 + common  ... 共通処理(フィルタとか)
 + lib     ... ライブラリ置き場
 + app_01  ... アプリケーション
 + app_02  ... アプリケーション
     :

こうすると、ライブラリ置き場にパスを通しておく必要があるので、
サーチパスを追加。↓↓↓
[project_root/settings.py]

   :
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'lib'))
print sys.path
   :



参考になったら、ポチッとお願いします。m(_ _)m
↓↓↓
人気ブログランキングへ