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/tcp に telnet 接続してみて、接続できれば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の設定と動作確認まで行ないますので、しばしお待ち下さい。。。
Androidマーケットで有料アプリの公開が可能
Androidマーケットで、日本の開発者が有料アプリを公開出来るようになったそうです。
わたしもチャレンジしようかな。
http://bb.watch.impress.co.jp/docs/news/20090915_315683.html:title元ネタ
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)
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', ) :
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 :