カテゴリー「ツール」の142件の記事

2012年12月16日

エクスプローラで開いているディレクトリでCygwinのminttyを開く

エクスプローラで見えているファイルに対してgzipやtar、grepをしたいとき、スタートメニューからminttyを起動してcdで移動するのは面倒だ。ディレクトリが深い階層にあるときなどは、とてもやっていられない。コンテキストメニューから開けるようにした。

  1. Cygwinのセットアッププログラムでchereをインストールする。
  2. minttyを管理者権限で起動し、「chere -i -t mintty」を実行する。そのほかのオプションは「chere -h」を参照。
  3. エクスプローラでディレクトリを右クリックすると、「Bash prompt here」というメニューができている。これを選ぶと、そのディレクトリをカレントディレクトリとしてminttyが起動する。

コンテキストメニューを削除したいときは、管理者権限のminttyで「chere -u」を実行する。Windowsの「プログラムのアンインストール」ではうまくいかない。

エクスプローラのカレントディレクトリで開けないのが難点だ。対策は二つある。

  1. Alt-Dでアドレスバーに移動し、Alt-↑でひとつ上のディレクトリに移動してから、目的のディレクトリのコンテキストメニューでminttyを開く。キーボードだけで操作できるが、手数が多い。
  2. エクスプローラの整理→フォルダーと検索のオプション→全般で、「自動的に現在のフォルダまでを展開する」をオンにする。開いているフォルダがエクスプローラ左側のナビゲーションバーに現れるので、それを右クリックしてBash prompt hereを実行する。

| | コメント (0)

2012年11月 1日

tcpdumpの reply ERR

NFSの接続障害時にtcpdumpを取ったら、エラーらしきパケットがたくさん出てきた。

08:14:47.092825 IP (tos 0x0, ttl 63, id 39670, offset 0, flags [none], proto: TCP (6), length: 1500) .nfs > .<ポート>: reply ERR 1460

1460はいかにもエラーコードのような顔をしているが、実際はパケットもしくはどこかのフィールドの長さである。このトレースではエラーが起きていることしかわからない。Wiresharkを使う必要がある。

(参考記事)
Re: [tcpdump-workers] RPC responde code question (print-nfs.c)
http://www.mail-archive.com/tcpdump-workers@lists.tcpdump.org/msg03154.html


| | コメント (0)

特定の拡張子のファイルだけをコピーするrsyncのパラメータ

複数のディレクトリの複数の階層にある特定の拡張子(もしくは特定の名前パターン)のファイルだけをrsyncするときは、以下のように指定すればよい。これは.binファイルだけを対象にしている。

rsync -av --include="*/" --include="*.bin" --exclude=*

rsyncのmanページに例として載っている。

--include "*/" --include "*.c" --exclude "*" would include all directories and C source files

| | コメント (0)

2012年10月 1日

vim起動時に「E568: duplicate cscope database not added」

vimでcscopeを使うために.vim/plugin/cscope_maps.vimをインストールし、環境変数CSCOPE_DBにcscopeデータベースのパスを設定したら、vim起動時にエラーが出てしまった。

Error detected while processing /homes/shini/.vim/plugin/cscope_maps.vim:
line   45:
E568: duplicate cscope database not added

cscope_maps.vim以外にcs addを実行しているところは他に見当たらない。試しにcscope_maps.vimを削除してvimを起動し、「:cs show」を実行しても、接続されているデータベースは出てこないから、やはりcs addしているのはこのプラグインだけである。まるで「cs add $CSCOPE_DB」の行を2回実行しているようにみえる。

いろいろ調べて、.vimrcの次の行が原因だと判明した。

set runtimepath+=~/.vim/

もともとUNIXのvimで$HOME/.vimはruntimepathの先頭に入っているのに、末尾に再び付加することによって、pluginディレクトリ内のvimスクリプトを二重に読み込んでいた。他の人の.vimrcを参考にカスタマイズしていたとき、自分の環境では必要がないのに気付かず、そのままコピーしたらしい。

ちなみにRHELでは、/etc/vimrcの中でcscope_maps.vimと同じようなことをやっており、さらにRHEL付属のvimはシステムvimrcが/etc/vimrcに固定されている。pluginディレクトリの実行が1回だけでも、やはり「E568: duplicate cscope database not added」が起きる。この場合は

  • cscope_maps.vimを編集して/etc/vimrcと重複する部分を削除する。
  • 必要な部分(nonmapなど)を.vimrcにコピーする。
  • 必要な部分(nonmapなど)を別ファイルにして、.vimrcからsourceで読み込む、
  • 「set nocsverb」を指定して、メッセージを抑止する対症療法。

という対策がある。set nocsverbは以下の箇所(3行目)に挿入する。

" Set nocsverb not to print "E568: duplicate cscope database not added" message.
" See :help cscope or http://vimdoc.sourceforge.net/htmldoc/if_cscop.html
    set nocsverb
"   " add any cscope database in current directory
    if filereadable("cscope.out")
"        cs add cscope.out
   " else add the database pointed to by environment variable
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif

viimのヘルプに、データベースを追加する前にcsverbをリセットし、追加後にセットしろと書いてあり、/etc/vimrcはそうなっている。もっとも、これは別の理由かもしれない。

Ideally, you should reset this option in your |.vimrc| before adding any cscope databases, and after adding them, set it. From then on, when you add more databases within Vim, you will get a (hopefully) useful message should the database fail to be added.


| | コメント (0)

PHPで2MB以上のファイルをアップロード

PHPはデフォルトで2MB以上のファイルがアップロードできない。この上限を変更する方法は2つある。

システム全体で上限を変更

/etc/php.iniのupload_max_filesizeを変更する。

$ php -f phpinfo.php | grep max
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads. file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ;upload_tmp_dir =
; Maximum allowed size for uploaded files. ;upload_max_filesize = 2M upload_max_filesize = 10M

アップロード上限に応じて、post_max_size、max_execution_time、memory_limitも大きくする必要がある。

現在の設定値はphpinfo()で確認できる。

$ cat phpinfo.php
<?php
echo phpinfo();
?>
$ php -f phpinfo.php | grep max
log_errors_max_len => 1024 => 1024
max_execution_time => 0 => 30
max_file_uploads => 20 => 20
max_input_nesting_level => 64 => 64
max_input_time => -1 => 60
max_input_vars => 1000 => 1000
post_max_size => 8M => 8M
upload_max_filesize => 2M => 2M
session.gc_maxlifetime => 1440 => 1440

Apacheのディレクトリごとに設定

アップロード上限を変更したいディレクトリに.htaccessファイルを置き、以下の設定値を変更する。メモリ上限などの設定値は適当である。

php_value max_execution_time 60
php_value memory_limit 10M
php_value post_max_size 10M
php_value upload_max_filesize 10M

.htaccessによるアクセス制限の上書きはApacheのデフォルトで禁止されている。httpd.confのAllowOverrideディレクティブ(デフォルトNone)を変更して許可する。

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride All

(参考資料)
PHP: コア php.ini ディレクティブに関する説明 - Manual
http://php.net/manual/ja/ini.core.php#ini.upload-max-filesize

@IT:Apache 2.0の必須設定と基本セキュリティ対策(3/3)
http://www.atmarkit.co.jp/flinux/rensai/apache2_01/apache01c.html

Apache チュートリアル: .htaccess ファイル - Apache HTTP サーバ
https://httpd.apache.org/docs/current/ja/howto/htaccess.html

| | コメント (0)

GNOMEターミナルのSolarized化

Solarizedカラースキームは、色の組み合わせを注意深く選び、視認性を保ちつつコントラストを下げたものである。たった16色でこれを実現しているというところが味噌である。256色モードのターミナルでもSolarizedでは16色しか使わない。そのためにカラーパレットをSolarized用にカスタマイズする。

ターミナルの色数はPerlスクリプト256colors2.plで確認できる。256色モードならきれいなグラデーションが見えるはずだ。このブログの人はなぜか8色モードらしい。

ターミナルが 256 色対応しているかを確認する方法 - わからん
http://d.hatena.ne.jp/kitokitoki/20090520/1242821559

ターミナルソフトごとのSolarizedカラー設定は本家サイトなどで見つかる。puttyはレジストリを書き換える。GNOMEターミナルは以下のスクリプトでプロファイルを書き換える。

Solarized Colorscheme for Gnome Terminal
https://github.com/sigurdga/gnome-terminal-colors-solarized

実行例

$ ./install.sh

This script will ask you if you want a light or dark color scheme, and which Gnome Terminal profile to overwrite.
Please note that there is no uninstall option yet. If you do not wish to overwrite any of your profiles, you should create a new profile before you run this script. However, you can reset your colors to the Gnome default, by running: gconftool-2 --recursive-unset /apps/gnome-terminal
Please select a color scheme: 1) light 2) dark #? 1
Please select a Gnome Terminal profile: 1) Default 2) test #? 2 You have selected: Scheme: light Profile: test (gconf key: Profile0)
Are you sure you want to overwrite the selected profile? (YES to continue) YES Confirmation received -- applying settings

これでターミナルがSolarizedカラースキームで表示されるはずだ。次に.dircolersに好みのdircolors設定をシンボリックリンクする。

Solarized Color Theme for GNU ls
https://github.com/seebi/dircolors-solarized

.vimrcにSolarizedの設定。16色モードにすること。

set t_Co=16
set background=light
let g:solarized_termcolors=   16
let g:solarized_termtrans =   0
let g:solarized_degrade   =   0
let g:solarized_bold      =   1
let g:solarized_underline =   1
let g:solarized_italic    =   1
let g:solarized_contrast  =   "normal"
let g:solarized_visibility=   "normal"
colorscheme solarized

| | コメント (0)

2012年9月27日

MacTypeを使わずにFirefoxの文字表示をきれいにする方法

Windowsのフォントレンダリングはあまり評判がよくない。対策として、仕事用PCのWindows XPでgdippを半年くらい使っている。2010年の0.9.1を最後にアップデートがとまっているが、私の環境では特に問題ない。

Windows 7はDirectWriteなどによってフォント表示品質を改善している。秀丸エディタはメイリオやLucida Consoleを使い、3DグラフィックスアクセラレータをオンにするとDirectWriteで文字描画する。OfficeソフトがどのバージョンでDirectWriteを使っているか分からないが、MSゴシック・MS明朝以外のフォント、たとえばHGSゴシック・HGS明朝を使えば、DirectWriteでなくても問題ない。

問題はFirefoxである。デフォルトフォントをメイリオに設定していても、MS Pゴシックをfont-familyで指定するWebページが残念な見栄えになる。代表的なところはYahoo! Japanのトップページだ。

巷ではMacTypeの評判がよく、gdippより断然きれいだという話も聞くが、要するにMS Pゴシックを使わないようにすればいいのである。調べると、FirefoxのユーザCSSなどを活用すればよいことが分かった。以下、その手順をまとめる。

コントロールパネルの「ClearTypeテキストの調整」(ClearType Tuner)

モニタや自分の好みに合わせて表示を調整する。これをやっておけば、同じメイリオでもだいぶ見栄えがよくなる。

Firefoxフォントを以下のように設定する(オプション → コンテンツ → フォントと配色 → 詳細設定)

プロポーショナル:ゴシック体(Sans-serif)
明朝体(Serif):HGS明朝B
ゴシック体(Sans-serif):メイリオ
等幅(Monospace):HGゴシックM

HGフォントはマイクロソフトOffice付属のフォントである。Officeが入っていない場合は、明朝体をMS P明朝に、等幅をMSゴシックにする。あるいはIPAフォントを使う。どちらもそれほど美しくないが、明朝体や等幅フォントが必要な場面は多くないと割り切る。

Firefoxのハードウェアアクセラレーションをオンにする(オプション → 詳細 → 一般)

実際にオンになっているかどうかをabout:support(ヘルプ → トラブルシューティング情報)で確認する。「DirectWrite 有効」がtrueになっていればよい。グラフィックスドライバによってはfalseになってしまうかもしれない。

ユーザCSSでフォント置き換え

userContent.cssをFirefoxプロファイルフォルダのchormeディレクトリ内に作る。ファイルはUTF-8エンコーディングで作らなければならない。ファイルの内容は以下の通り。

@charset "UTF-8";

@font-face {
  font-family: "MS Pゴシック";
  src: local("メイリオ"), local("Meiryo");
}
@font-face {
  font-family: "MS PGothic";
  src: local("メイリオ"), local("Meiryo");
}

以上でMS Pゴシックを指定したWebページもメイリオできれいに表示できるようになる。どれも標準機能の範囲なので、MacTypeの開発が続くのかどうかとか、新しいOSでもサポートされるのか、ソフトとの相性はどうかなどを気にしなくてよい。

| | コメント (1)

ソースコード表示に適したフォントAdobe Source Code Pro

Adobeがソースコード表示に適したモノスペース(等幅)フォントSource Code Proを公開したので試してみた。いつもはLucida Consoleを使っている。OSはWindows XP。マシンはThinkPad X201(インテルHDグラフィックス)、ディスプレイはDell E2310Hである。

Adobeのブログにダウンロードリンクがある。ところで、このブログに出ているスクリーンショットはSolarizedカラースキームじゃないだろうか。

Announcing Source Code Pro « Typblography
https://blogs.adobe.com/typblography/2012/09/source-code-pro.html

文字の上下スペースをゆったり取ってあるのか、同じウインドウサイズに表示される行数がだいぶ減る。いつものputtyウインドウサイズでLucida Consoleが45行なのに対して、Source Code Pro Semiboldは36行で、約8割になる。Lucida Consoleのぎっしり感と、一度に目に入る情報量の多さに慣れていると、だいぶ間延びして見える。

Lucida Consoleに対する利点は、ゼロの丸の中に点が入っていて、アルファベットのオー(o、O)と区別しやすくなることだ。数字の1と小文字のエル(l)と小文字のアイ(i)はLucida ConsoleでもSource Code Proでも同じくらい判別しやすい。

日本語を表示するとかなり残念なことになる。日本語文字が入ってないからで、これはLucida Consoleでも同じである。Windowsのフォントリンク機能でMS UIゴシックを割り当てた。次のレジストリキーの下にSource Code ProというREG_MULTI_SZ値を作り、MSGOTHIC.TTC,MS UI Gothicを設定する。ウエイト別に6つのファイルがあるから、それぞれ設定する必要がある。強度近視の私の目には、レギュラーウエイトとSemibod以外は使い道がないので、この2つを設定した。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink

あまり美しい日本語表示ではないが、デフォルトよりマシという感じである。リンクした和文フォントがきれいに表示できないのは、ベースの欧文フォントのサイズに、同じポイント数の和文フォントのサイズを合わせようとするからである。Windows XPは対処の手がないが、Vista以降でスケーリングのパラメータを指定できるようになった。これをいじればなんとかなるかもしれない。MSDNの以下の文書のFont Linkingの項を参照。

Globalization Step-by-Step: Fonts
http://msdn.microsoft.com/en-us/goglobal/bb688134.aspx

で、しばらくLucida ConsoleとSource Code Proを取っかえ引っかえして比べてみたのだが、結局Lucida Consoleの方が見やすい(見慣れている?)という結論に達した。

(参考記事)
ConsolasをIE( or putty or gVim et al.)で使う - 田中慎司のログ
http://d.hatena.ne.jp/stanaka/20060914/1158208602

 

| | コメント (1)

2012年9月25日

リモートサーバのコマンドを公開鍵SSHで自動実行

サーバAからサーバBにSSHで接続してコマンドを実行するという自動化スクリプトで、パスワード入力を省くために公開鍵・秘密鍵のペアによるSSH接続を使った。

まずサーバBにログインして鍵ペアを生成する。パスフレーズを設定すると、ssh-addで鍵を登録するときに入力を求められる。今回は自動化スクリプトなので、パスフレーズを設定せず、空Enterする。これで.sshディレクトリの下に秘密鍵id_rsaと公開鍵id_rsa.pubが作られる。

srv-b:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/XXXX/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /XXXX/.ssh/id_rsa.
Your public key has been saved in /XXXX/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx xxxx@srv-b


公開鍵を.ssh/authorized_keysに書き込む。このファイルのパーミッションは600でなければならない。

srv-b:~/.ssh# cat id_rsa.pub >> ~/.ssh/authorized_keys
srv-b:~/.ssh# chmod 600 authorized_keys


秘密鍵をサーバAにコピーし、適当な名前にリネームする。

srv-a:~# mv id_rsa id_rsa_srv-b

鍵ペアによるSSH接続は、ssh-agentを起動し、ssh-addで鍵を登録する。対話セッションであれば、ターミナルからeval `ssh-agent`で起動する。これにより環境変数SSH_AGENT_PIDなどが設定され、後続のコマンドで利用できるようになる。終了コマンドはssh-agent -kである。

今回はバックグラウンドで実行する自動化スクリプトなので、必要なときだけssh-agentを起動して、その都度終了することにした。さらに、ssh-agentの引数に、リモート側(サーバB)で実行するコマンド群をシェルスクリプトで与える。シェルスクリプトはフルパスで指定しなければならない。

親のスクリプト

[...]
ssh-agent $dir/ssh_cmd.sh $node
if [ $? -ne 0 ]; then
    echo "Cannot connect to $node"
    exit 1
fi
[...]

ssh_cmd.sh

[...]
ssh-add id_rsa_$node
ssh $node 'リモートで実行するコマンド'
[...]

こうしておけば、リモート側でコマンドが終了すると、セッションが切れるとともにssh-agentも終了する。

| | コメント (0)

vimのconfigureがで「ncurses library is not usable」で失敗

ひとつ前の記事で書いたようにRHEL4でvim 7.3をコンパイルしようとしたら、configureがエラーになってしまった。

[...]
checking --with-tlib argument... empty: automatic terminal library selection
checking for tgetent in -ltinfo... (cached) no
checking for tgetent in -lncurses... (cached) yes
ncurses library is not usable
checking for tgetent in -ltermlib... no
checking for tgetent in -ltermcap... no
checking for tgetent in -lcurses... no
no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
      You need to install a terminal library; for example ncurses.
      Or specify the name of the library with --with-tlib.


「ncurses library is not usable」というエラーだが、cursesはdevパッケージを含めてインストールされている。

$ rpm -qa | grep ncurses
libncurses5-mipsel-cross-5.5-6
ncurses-devel-5.4-15.el4
ncurses-5.4-15.el4
libncurses5-dev-mipsel-cross-5.5-6


locateで検索できるが、MIPSクロスコンパイラ環境のライブラリが悪さをしているか、slocate.dbデータベースが古いため、configureがエラーになるようだ。

$ locate ncurses.h
warning: locate: warning: database /var/lib/slocate/slocate.db' is more than 8 days old
/usr/include/ncurses.h
/usr/include/ncurses/ncurses.h
/usr/include/ncursesw/ncurses.h
/usr/mipsel-linux-gnu/include/ncurses.h
[...]
$ locate libncurses
warning: locate: warning: database /var/lib/slocate/slocate.db' is more than 8 days old
[...]
/usr/lib/libncurses.so.5.4
/usr/lib/libncurses_g.a
/usr/lib/libncurses++.a
/usr/lib/libncursesw_g.a
/usr/lib/libncursesw.so.5
/usr/lib/libncursesw.a
/usr/lib/libncurses.so.5
/usr/lib/libncursesw.so
/usr/lib/libncurses.so
/usr/lib/libncursesw.so.5.4
/usr/lib/libncurses.a
/usr/lib/libncurses++w.a
[...]
/usr/mipsel-linux-gnu/lib/libncurses++.a
/usr/mipsel-linux-gnu/lib/libncurses.so.5
/usr/mipsel-linux-gnu/lib/libncurses.so
/usr/mipsel-linux-gnu/lib/libncurses.a

次のメールスレッドを参考にして環境変数をセットしてみた。

Vim - General - problem compiling vim70.
http://vim.1045645.n5.nabble.com/problem-compiling-vim70-td1155619.html

$ export CPPFLAGS=-I/usr/include/
$ export LDFLAGS=-I/usr/lib/
$ env | grep FLAG
LDFLAGS=-I/usr/lib/
CPPFLAGS=-I/usr/include/

改めてconfigureする前に、キャッシュファイルauto/config.cacheを削除する必要がある。

$ ./configure --prefix=/home/xxxx/vim73 --enable-multibyte --with-features=huge --disable-selinux
configure: loading cache auto/config.cache
configure: error: `LDFLAGS' was not set in the previous run
configure: error: `CPPFLAGS' was not set in the previous run
configure: error: in `/home/xxxx/vim73-src/src':
configure: error: changes in the environment can compromise the build
configure: error: run `make distclean' and/or `rm auto/config.cache' and start over
$ rm src/auto/config.cache


これでconfigureが成功した。makeとmake installも問題なく終わり、vim 7.3が使えるようになった。

$ ./configure --prefix=/home/xxxx/vim73 --enable-multibyte --with-features=huge --disable-selinux
configure: creating cache auto/config.cache
[...]
config.status: creating auto/config.mk
config.status: creating auto/config.h


| | コメント (0)

より以前の記事一覧