2011年5月31日火曜日

mltermの設定

VineLinuxを端末にしていたときは愛用 *1 していた mlterm ですが、MacBookがメイン端末になってからはご無沙汰していました。iTerm2で一通りの用が足りている *2 のですが、ふと思い立って調べたら MacPorts に入っていたので、インストールして以前使用していた設定をまとめてみました。

設定ファイルのひな形をコピーする

VineLinuxでパッケージでインストールした場合、/etc/mlterm/ に設定ファイルの雛形がインストールされましたが、MacPortsも同様でした (ただし MacPorts は /opt/local/ 配下にインストールされるので、/opt/local/etc/mlterm/ です)。ホームディレクトリに .mlterm/ の名前でコピーした後、編集します。

$ sudo port install mlterm
$ cp -r /opt/local/etc/mlterm ~/.mlterm

設定例:.mlterm/main

種々の設定を .mlterm/main に記述します。

# -- Encoding 関連 --
# エンコーディングの指定
# (ISO-8859-[1-11], ISO-8859-[13-16], TIS-620 (same as ISO-8859-11),
#  KOI8-[RUT], ISCII, VISCII, TCVN5712, GEORGIAN_PS, CP1251, CP1255,
#  EUC-JP, EUC-JISX0213, Shift_JIS, Shift_JISX0213, ISO-2022-JP[1-3],
#  EUC-KR, UHC, JOHAB, ISO-2022-KR, GB2312 (EUC-CN), GBK, GB18030,
#  ISO-2022-CN, HZ, EUC-TW, BIG5, BIG5HKSCS, UTF-8, AUTO)
ENCODING = auto

# -- Font 関連 --
# デフォルトフォントサイズ
fontsize = 14

# 変更可能なフォントサイズの範囲
font_size_range = 6-30

# larger,smaller ボタンでのフォントサイズの変化量(*1*)      
step_in_changing_font_size = 1

# 可変長コラム幅を使用する
use_variable_column_width = false 

# アンチエイリアスフォントを使用する
use_anti_alias = false

# アンチエイリアス(Xft)時、JISX0208 の Unicode 変換に CP932 の変換テーブル
# を使う
use_cp932_ucs_for_xft = true

# UNICODE を適当な文字集合にmapして、UNICODE フォントを使わずに表示する
not_use_unicode_font = true

# すべての文字を UNICODE フォントだけを使って表示する
only_use_unicode_font = false

# US_ASCII の表示には、必ず ISO8859-1 フォントを使用する
iso88591_font_for_usascii = false

# -- Appearance 関連 --
# スクロールバーをつける
use_scrollbar = true

# スクロールバーのつけ方
scrollbar_mode = right

# 使いたいスクロールバーの名前
# (simple,sample,sample2,sample3,next,motif,athena,mozmodern)
scrollbar_view_name = athena

# 端末画面の前景色
fg_color = black

# 同背景色
bg_color = white

# -- その他 --
# XIM を使う
use_xim = true

# インプットメソッド
# (xim,uim,iiimf,scim,m17n-lib,none)
input_method = xim

# タブ幅
tabsize = 4

# ログの行数 
logsize = 1024

# GUI 設定コマンドのパス
# (controll+button{1|2|3} を押した時起動するツール)
conf_menu_path_1 = mlterm-menu
conf_menu_path_2 = mlterm-zoom
conf_menu_path_3 = mlconfig

# バックスクロール時に端末出力があっても画面が流れないようにする。
static_backscroll_mode = true

設定例:.mlterm/font

フォントの設定は .mlterm/font に記述します。

DEC_SPECIAL = 10,a10;12,6x12;14,7x14;16,8x16;
ISO8859_1 = -kochi-mincho-medium-*--%d-*-iso8859-1;10,a10;12,6x12;
ISO8859_1_BOLD = 10,a10B;14,7x14bold;
JISX0201_KATA = 10,r10;12,r12;14,r14;16,r16;
JISX0201_KATA_BOLD = 10,r10;
JISX0201_ROMAN = 10,r10;12,r12;14,r14;16,r16;
JISX0208_1983 = 10,k10;12,k12;14,k14;16,kanji16;
JISX0208_1983_BOLD = 10,k10B;
TCVN5712 = 14,-*-.vntime-*--14-*-iso8859-1;

上記はVineLinuxで使用していた設定ですが、MacOSXには東風フォントが入っていないため、2行目の -kochi-mincho-medium- はエラーになります。これは要変更ですが、monacoあたりを指定すればよいのでしょうか?。検討中です。


*1 gnome-terminalなどのアンチエイリアスがかかった表示では 「;」と「:」、「.」と「,」などが分かりにくくて困るので、アンチエイリアスをOFFにできるのが高評価でした。

*2 UTF-8をはじめとする多言語に対応し、ウィンドウごとに文字コードを設定できるので、EUCなサーバやSJISのインターフェースファイルを扱うときに重宝します。というか MacOSX 標準のターミナルはそれができないのでサーバ管理に使うのは厳しいですね。

2011年5月29日日曜日

yumのオプション

いつも使い方がわからなくなるので、メモっておきます。

ダウンロードしたパッケージやキャッシュの削除

# yum clean オプション名

オプション名には、以下を使用可能です。

headers
パッケージのヘッダーのクリア
packages
ダウンロードしたパッケージのクリア
cache
キャッシュのクリア
metadata
メタデータのクリア
all
上記全てのクリア

便利なサブコマンド

パッケージ情報の表示

# yum info パッケージ名

キーワードによるパッケージの検索

# yum search キーワード

アップデート可能なパッケージの表示

# yum list updates

インストール済のパッケージの表示

# yum list installed

特定のパッケージのアップデートを無視する

特定のパッケージのみアップデートしたくない場合は /etc/yum.conf に exclude=パッケージ名 の記述を追加します。例えば、カーネルのみアップデータしたくない場合 *1 は以下のように記述します。

exclude=kernel*

期待通り kernel を除外できているか、確認します。

# yum list updates | grep kernel

*1 Xen環境を構築しているサーバでは、安全のためにこのように設定しています(実際にはアップデートしようとするとエラーになるようですが)。

2011年4月17日日曜日

各種コマンドの ssh オプションの指定

私の管理するサーバの ssh 接続はキーペア認証のみ許可し、また念のためにポート番号を22以外に変更しています。外部からは smtp や http 以外は全て ssh 経由のみで接続していますが、コマンドによって ssh のオプション指定が異なり、いつも man 等を調べ直していますのでまとめました。

rsync -e ssh のオプション

ダブルクォートを使用して、-e ssh のオプションを指定します。下記の例でははポートを9999に変更し、また秘密鍵を ~/.ssh 配下以外の秘密鍵を指定 *1 しています。

$ rsync -av -e "ssh -p 9999 -i /path/to/private/key/id_rsa" \
   username@host:source destination

scp の ssh オプション

scp では -i で秘密鍵、-P でポートを指定します (-p は cp コマンドと同様に、ファイル属性の保持です)。下記の例でははポートを9999に変更し、また秘密鍵を ~/.ssh 配下以外の秘密鍵を指定しています。

$ scp -pr -P 9999 -i /path/to/private/key/id_rsa \
   username@host:source destination

また、-o で ssh のオプションを指定することも可能です。上記と同様の内容を -o で指定する場合、以下となります。

$ scp -pr -o Port=9999 -o IdentityFile=/path/to/private/key/id_rsa \
   username@host:source destination

FUSE sshfs の ssh オプション

sshfs では、scp と同様に -o で ssh オプションを指定します。下記の例でははポートを9999に変更し、また秘密鍵を ~/.ssh 配下以外の秘密鍵を指定しています。

$ scp -pr -o Port=9999 -o IdentityFile=/path/to/private/key/id_rsa \
   username@host:/directory mountpoint

Mercurial の ssh オプション

(2012/05/05 追記)

Mercurial では、-e で ssh コマンドを指定します。下記の例でははポートを9999に変更し、秘密鍵を ~/.ssh 配下以外の秘密鍵を指定しています。また、リモートリポジトリの指定はURI形式 *2 を使用します。

$ hg clone -e "ssh -p 9999 -l username -i /path/to/private/key/id_rsa" \
   ssh://host//absolute/path/to/repository

*1 特に laptop 機では、秘密鍵などの重要なファイルは TrueCrypt の暗号化ボリューム内に置いているためです。

*2 URI は "スキーム名://ホスト名/パス" なので、リモートリポジトリへのパス指定に絶対パスを使用した場合は上記の例のように (ホスト名とパスの間の "/" は2つに) になります。当然ながらログインディレクトリからの相対パスで指定する場合 *3 は ssh://host/relative/path/to/repository です。

*3 通常は絶対パスで指定すると思いますが、ホームディレクトリ配下にリポジトリを置いている場合など、こちらの方が便利なケースもあります。

2011年3月1日火曜日

GNU Screen の設定

一年ほど前に emobile の Pocket-WiFi を導入して以来、GNU Screen (以下screen) は必須*1です。当初はエスケープキーを変更する程度だったのですが、便利な設定を公開している方のサイトを読んではその機能に驚き、拾わせていただいてます。以下、現在の設定メモです。

.screenrc

デフォルトのエスケープキー "ctrl-a" は bash/emacs とバッティングするので、"ctrl-z" に変更します

escape ^Zz

デフォルトで UTF-8 を使用します

defencoding UTF-8
encoding UTF-8 UTF-8

画面下部にスクリーン名とロードアベレージを表示します

hardstatus alwayslastline "%{= Gk} %-Lw%40L>%{b kg} %n %t %{-}%+Lw%-020=%{b km} %l"

よく使用するエンコーディングを切り替えます

bind "u" encoding UTF-8
bind "e" encoding eucJP
bind "s" encoding SJIS

emacsライクなスクリーンの分割です

bind "2" split
bind "o" focus
bind "1" only
bind "0" remove

スクリーンのリサイズ関係です

bind "=" resize =
bind "_" resize max
bind "r" eval 'echo "Resize window"' 'command -c resize'
bind -c resize ^]  command
bind -c resize j eval 'resize +1' 'command -c resize'
bind -c resize k eval 'resize -1' 'command -c resize'

screen を exit した後、Esc キーを押下するまで screen を終了しません(最後の実行結果の表示が残ります)

zombie ^[

manページについて

screen は非常に多機能である上、man ページが非常に充実していて読み応えがあります。そして、最後の2行がステキです。(括弧内は日本語manページの翻訳)

A weird imagination is most useful to gain full advantage of all the features.
(全機能を最大限に生かすためには、おかしな想像力が非常に有用となる。)

Send bug‐reports, fixes, enhancements, t‐shirts, money, beer & pizza to screen@uni-erlangen.de.
(バグ報告、修正、改良、Tシャツ、お金、ビール、ピザ等 は screen@uni-erlangen.de まで送ってほしい。)


*1 emobileは6時間ごとに接続を切ってipアドレスを振り直します。以前はサイトFAQに「サービス仕様」と明記されていた記憶があるのですが、今は探しても見つかりません。この辺りの仕様をご存知の方、ご教示いただければ幸いです。

2011年2月27日日曜日

Mercurial:MacOSXでGUIのdiff/mergeツールを使用する

MacOSX の開発環境 "XCode" には GUI の diff/merge ツールである FileMerge が含まれています。これを Mercurial の外部ツールとして使用するよう設定してみました。

コマンドラインからの FileMerge の起動指定

コマンドラインから FileMerge を起動するには opendiff というコマンドを使用します。.hgrc に、  

[extensions]
hgext.extdiff =

[extdiff]
cmd.opendiff =

と指定することで opendiff というサブコマンドが使用できるようになるので、それを指定すると

$ hg opendiff
FileMerge が起動します。

FileMergeで日本語を使用する

FileMerge は日本語の対応に問題があり UTF-8 等の文字コードを使用した場合に文字化けしてしまいますが、環境設定でフィルタを指定して変換することで正しく表示することが可能です。標準でインストールされている /usr/bin/iconv は文字コードの指定が必要で使いにくいため、ここでは自動で判定/変換してくれる nkf を MacPorts でインストールして使用しました。

$ sudo port install nkf
環境設定でフィルタに nkf を指定します。FileMerge は Shift-JIS は文字化けせずに表示できるので出力指定を -s とします。 これで FileMerge で日本語を使用できるようになりました。