Home

openbooth

iptables の設定を変更する際の作業手順

自分用メモ。

  1. /etc/iptables.up.rules に、現在の設定情報を退避させる。
  2. /etc/iptables.test.rules に、現在の設定情報を保存して、変更内容をこのファイル(/etc/iptables.test.rules)に記述する。
  3. 変更した /etc/iptables.test.rules の内容をシステムに反映してみる。
  4. 設定内容が ok なら /etc/iptables.up.rules に現在の設定内容を保存する。

上記一連の作業をターミナル上で作業すると。

% sudo sh -c "iptables-save > /etc/iptables.up.rules"
% sudo sh -c "iptables-save > /etc/iptables.test.rules"
% sudo vim /etc/iptables.test.rules
% sudo iptables-restore < /etc/iptables.test.rules
% sudo iptables -L

  # /etc/iptables.test.rules が ok なら
% sudo sh -c "iptables-save > /etc/iptables.up.rules"

因みに /etc/iptables.up.rules はシステムを再起動した際に(iptables によって)自動的に読み込まれるファイル。こいつにメモリ上にしかない設定内容を保存しておかないと、システムを再起動した際に全て破棄されてしまう。

インストール済みの Git を 1.6 系にアップグレードする

Ubuntu 8.04 のパッケージリポジトリから Git をインストールすると 1.5.4 くらいのバージョンのものが入ります(2008-10-07now)。1.6系は既にリリースされているようですが、特に必要に迫られることもなかったのでそのまま 1.5 系を使っていました。しかし、今日 git.git のクローンを久々に git pull したらかなりの変更がおっこちてきました。そのうち、graph.c というファイルが追加されていたので試しに最新版の Git をビルドして使ってみました。

すると git log --graph --pretty=oneline で、前から「こんなのあったらいいなぁ」と思ってた表示形式でログを一覧できることが分かりました。こんな表示。

*   38f7950acc657b03265c488b301fd779a4d09512 Merge branch 'branch-a'
|\
| * 54a96d32e7add6d89532666bf6f39ac322d2da42 modified
* | 4a3cd0a96e26684bdc17336f451f355b37aa43f5 MANIFEST.SKIP file added
* | 17636f86133c3dc6cb6d78d7ee9d2c6671042388 modified at master
|/
* 7f5bf37677b166506a209b215274510316bec791 initial

ということで最新版をインストールすることにしました。ただ、ソースからビルドすると後々管理が面倒になるので、Git 1.6 の debパッケージをホストしてるリポジトリを探してインストールすることに。以下は Git 関係のパッケージをアップグレードする手順です。

まず、/etc/apt/sources.list に Git の最新版をホストしてるリポジトリを追加します。以下の二行を追加します。hardy 以外のバージョンを使ってる場合は適宜 https://launchpad.net/~smartlounge/+archive から探すと良いと思います。

deb http://ppa.launchpad.net/smartlounge/ubuntu hardy main
deb-src http://ppa.launchpad.net/smartlounge/ubuntu hardy main

次に、 インストール作業。

% sudo aptitude update
% sudo aptitude safe-upgrade
% sudo aptitude install git-core gitk git-gui git-doc

これでパッケージの更新は終わり。 apt 素晴らしい。ただし、今回はサードパーティのリポジトリを追加しているのでインストール途中に脅されます。

警告: 以下のパッケージは信頼できないバージョンがインストールされます!

信頼できないパッケージはシステムのセキュリティを危うくする可能性があります。
自分がこのインストールを望んでいると確信できる場合のみ、インストールを先に進め
てください。

git-gui gitk git-core

この警告を無視して意地でも先に進みますか?
続行する場合は "Yes" を、中断する場合は "No" を、入力してください:

ですが承知の上ですので、サクっと Yes と応えました。

念のため、ちゃんと最新のバージョンが入ったかどうか確認しておきました。

% git --version
git version 1.6.0.2

ちゃんと入ったみたいです。 zsh 用 completion の更新はどうすれば良いか分かってないのでそのままです。completion は非常に重宝してる(というか無いと非常にイライラする)のではやいところ方法を見つけたいところです。

SQLite で複数のスキーマを扱う

SQLite をあるプロダクトのテストに使ってます。テストを自動化する時のセットアップコストがそんなにかからなくてすごく良いです。普通のファイルと同じような感覚で使えるのは Good。

SQLite をテスト用途に使っていると、たまに「外部キー制約サポートされてないんだよなぁー」と思うことはありますが、それでもトランザクションに対応しているとか、まぁ主要な機能はきちんとおさえてくれてるので好きです。

で、本題。

SQLite って同一コネクションで (スキーマ分割して) 複数のデータベースを扱うことってできるのかな?

テスト関係で SQLite を使ってるときに、スキーマ分割されたデータベースを作ることができると嬉しいなという状況に遭遇しました。そこで SQLite のドキュメント の SQL Syntax のページをざーっと眺めてみてそれっぽいものを探してみたところ、ATTACH DATABASE というコマンドがありました。これを使えば複数のデータベースを attach して、一つのコネクション上に複数のスキーマを混在させるといった使い方ができそうです。そこで、ドキュメント読んで試してみました。

まずは、普通に hoge.db というデータベースに items というテーブルを作ります。

% sqlite3 hoge.db
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> create table items (
   ...>   id integer not null primary key,
   ...>   name text
   ...> );
sqlite> .q

items テーブルを作ったらひとまず SQLite Shell を出ます。

次に、 fuga.db というデータベースに、 hoge.db と同じ items テーブルを作ります。fuga.db の items テーブルにはデータを一行だけ入れておきます(後で確認するため)。

% sqlite3 fuga.db
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> create table items (
   ...>   id integer not null primary key,
   ...>   name text
   ...> );
sqlite> insert into items (name) values ('in fuga');
sqlite> select * from items;
1|in fuga
sqlite> .q

これで hoge.db, fuga.db にそれぞれ items テーブルが存在することになります。これらを一度に扱いたいとしましょう。

SQLite には .databases というコマンドを SQLite Shell の中で使えるようなのでこれを試してみます。まずは、 hoge.db に接続します。

% sqlite3 hoge.db
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> .databases
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             /home/keiji/workspace/sqlite3/hoge.db

なんかそれっぽい表示が出てきました。しめしめという感じで、ここで ATTACH DATABASE を使って fuga.db を attach させてみます。

ドキュメント上の Syntax を確認すると

sql-statement ::= ATTACH [DATABASE] database-filename AS database-name

とあるので、

sqlite> attach 'fuga.db' as fuga;
sqlite>

どうやら上手く attach できたみたいなので、再び .databases コマンドで確認してみます。

sqlite> .databases
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             /home/keiji/workspace/sqlite3/hoge.db
2    fuga             /home/keiji/workspace/sqlite3/fuga.db

なんか fuga という データベース名(スキーマ名) で、現在のコネクションに fuga.db が attach されたようです。SQL を叩いて確認してみます。

sqlite> select count(*) from items;
0
sqlite> select count(*) from fuga.items;
1
sqlite> select * from fuga.items;
1|in fuga
sqlite>

上手くいったみたいです。やたー!スキーマ分割されてるケースのテストも SQLite 使えるー。ここまで分かれば当たり前だけど、言語側からも問題なく使えた。

因みに、テーブル名がデータベース間で重複していなければ、データベース名で修飾する必要はないみたいです。

sqlite> create table fuga.people (
   ...>   name text
   ...> );
sqlite> insert into fuga.people (name) values ('kjim');
sqlite> insert into people (name) values ('kjim');
sqlite> select * from fuga.people;
kjim
kjim
sqlite> select * from people;
kjim
kjim

PostgreSQL で言う SET とか、あればなおいいんだけどなぁ。見落としてるかもしれないけど、どうやらなさそうなのでそこは残念。

まぁでもやっぱり組み込みデータベースとして使える SQLite っていい。

Java から使うときは h2database を薦めるけどね。

Ubuntu に M+IPA フォントをインストールする

M+IPA を使ってるデスクトップ

M+IPA を使ってるデスクトップ

フォントをインストールする度にググっている気がするので、メモとして残しておく。

手順

  1. フォントをダウンロードする
  2. 解凍
  3. フォントをインストール (~/.fonts にコピー, ~/.fonts ディレクトリがない場合は予め作っておく)
  4. フォントキャッシュを更新

ターミナルで作業する(Nautilus とか使って解凍/コピーしてもいい)

% mkdir -p ~/fonts
%
% wget "http://osdn.dl.sourceforge.jp/mix-mplus-ipa/25997/mixfont-mplus-ipa-TrueType-20060520p1.tar.bz2"
% tar jxf mixfont-mplus-ipa-TrueType-20060520p1.tar.bz2
% cp mixfont-mplus-ipa-TrueType-20060520p1/opfc-ModuleHP-1.1.1_withIPAFonts_and_Mplus/fonts/M+*.ttf ~/.fonts/
%
% fc-cache -f

以上でインストールは終了。一応フォントキャッシュが更新されているから確認する。

% fc-list | grep 'M\+'
M+1P+IPAG:style=regular
M+2P+IPAG circle:style=regular
M+1P+IPAG circle:style=regular
M+1VM+IPAG circle:style=regular
M+2P+IPAG:style=regular
M+2VM+IPAG circle:style=regular

あとは、 システム > 設定 > 外観の設定 から設定する等々…

M+IPA フォントは結構カワイイ字体で気に入ってます。

ターミナルをちょっと便利にするスクリプト

dirctx を使ってる terminal

dirctx を使ってるterminal

最近、自分が扱うバージョン管理ツールの数が増えてきました。自分はターミナルで作業することが多いのですが、あるバージョン管理されているディレクトリに cd したときに、パッと見でそれが分からないのを不便だと感じてました。

そこで、バージョン管理されているディレクトリに入ったら、どの scm で管理されているのかをターミナルに表示するスクリプトを書いてみました。右のスクリーンショットの中で、右の方に

subversion: branches/lazy_request
mercurial: newbranch
git: master

といったものが表示されているのですが、そういった装飾をターミナルに追加してくれます。ちっちゃなことですが、一目で分かるようになったので割と便利。

ものは dirctx というスクリプトで、このスクリプトは $DIRCTX という変数を export します。これを zsh なら PROMPT とか RPROMPT の中で使用してあげればスクリーンショットのような表示をすることができます。

ターミナルの装飾部分のコードはこんな感じ(実際は色を変更したりしてる)

source $HOME/.zsh.d/dirctx # dirctx を読む
RPROMPT='$DIRCTX'

dirctx スクリプト自体は bash でも使えるはずなので、上記の RPROMPT の編集部分だけ変更すれば(PS1とか?)多分動きます。

スクリプトは、http://github.com/kjim/config/tree/master/.zsh.d/dirctx に置いてあります。

一応、インスパイア元は zsh の prompt に git のブランチ情報を表示CommentsAdd Star - unknownplace.org で、perl スクリプトを実行する方法からはじめました。でもやっぱりもっさり感があったのでプロンプトを表示するタイミングにスクリプトを実行するのはやめて、ディレクトリに cd したりするタイミングで特定の変数の値を管理するという方法に落ち着きました。

Home

Search
Feeds
Meta

Return to page top