2009年8月27日木曜日

mailx で、コマンドラインから POP, SMTP サーバを利用する

あまり、利用することはないとは思いますが、使うこともあるかもしれないので、メモしておきます。
Ubuntu に標準で付いている mail コマンドは、ローカルのメールボックスのメールしか読めません。
メール出すときも、ローカルのメールサーバ経由でしか出せなかったりします。

POP サーバからメールを受信し、SMTP サーバからメールを送信する場合は、
Heirloom mailx を使います。
mail コマンドの機能拡張版といったところのソフトです。
IMAP, POP3, APOP, SSL/TLS, S/MIME に対応しています。

1. まず、ソースコードをダウンロードします。

http://sourceforge.net/projects/heirloom/

2. 展開して、make、make install します。

特にはまるところは無いはず。

$ tar jxvf mailx-12.4.tar.bz2
$ cd mailx-12.4/
$ vi Makefile
(下記の部分を編集)
UCBINSTALL      = /usr/ucb/install
を
UCBINSTALL      = /usr/bin/install

3. ~/.mailrc, ~/.nailrc を作成します。

$ vi ~/.mailrc
set NAIL_EXTRA_RC=~/.nailrc
set smtp=smtp.hogehoge.org:25
set from=NAME@hogehoge.org

$ vi ~/.nailrc
shortcut popacct %:pop3://NAME@pop.hogehoge.org

4. メールを受信する場合

$ mailx popacct

5. メールを送信する場合

Subject test, hogehoge.txt に書いてあるメールの内容を送信する場合

$ mailx -s test hoge@hogehoge.org < hogehoge.txt

■ 2011/01/06 更新
mailx のダウンロードページを修正 ( Hairloom home ページのリンクからだと nail しかダウンロードできないようだ )

● mailx, Heirloom mailx, smtp, IMAP, POP3, APOP, S/MIME, SSL/TLS

2009年8月23日日曜日

Ubuntu で cron の設定をする

cron 設定。Linux の基本です。

■ crontab を編集するには crontab -e コマンドです。

# crontab -e

■ 書式は、分、時、日、月、曜日 (0 と 7 は日曜日)、コマンド の順です。

詳細は以下を参照。
Manpage of CRONTAB

毎日 21:30 に、シャットダウンしたい場合の例。

30 21 * * * /sbin/shutdown -h now

■ 設定を確認するには、crontab -l です。

# crontab -l
# m h  dom mon dow   command
30 21 * * * /sbin/shutdown -h now

■ 念のため、近い時間に発火するように設定して、動作確認をしておいた方が良いです。

設定ファイルの実態は、/var/spool/cron/crontabs/root にあります。
(root ユーザの場合)

● cron, crontab

2009年8月19日水曜日

Ubuntu で Buffalo WLI-UC-G を動かす

Ubuntu 9.04 で Buffalo WLI-UC-G を動かそうと格闘したときのメモです。
結果的に、動くには動いたのですが、何が効いたのか、わからない状態です。

■ rt73-cvs ドライバをダウンロードします。

WLI-UC-G は rt73 ドライバで動作するようです。
以下のサイトから rt73-cvs-daily.tar.gz をダウンロードします。
http://rt2x00.serialmonkey.com/wiki/index.php/Main_Page
http://sourceforge.net/projects/rt2400/

■ rt73-cvs-daily.tar.gz を展開します。

$ tar zxvf rt73-cvs-daily.tar.gz

■ rtmp_def.h を編集します。

$ cd rt73-cvs-2009041204/Module/
$ cp rtmp_def.h rtmp_def.h-org

$ vi rtmp_def.h
(下記の場所にデバイス ID 0x0411, 0x0137 の設定を追加します)
/* Buffalo */\
 {USB_DEVICE(0x0411,0x00d8)},   /* WLI-US-SG54HP */\
 {USB_DEVICE(0x0411,0x00f4)},\
 {USB_DEVICE(0x0411,0x0137)},   /* WLI-UC-G */\

■ make して、インストールします。

$ make
# make install

■ 再起動して、動作するか確認してみます。

私の環境では、WEP 系のアクセスポイントしか設定できない状態でした。
自宅で使っている WPA 系は設定できないので、さらに格闘。

■ 以下、参考情報です。

・関係ないと思いつつ、apt-get で rt73-common をインストール
→ ダメ

# apt-get install  rt73-common

・それじゃ、kernel 付属のドライバでどうだってことで、rt73usb.c に、デバイス ID を追加して再インストール
→ ダメ

# apt-get install linux-source-2.6.28
# cd /usr/src/
# tar jxvf linux-source-2.6.28.tar.bz2
# cd linux-source-2.6.28/drivers/net/wireless/rt2x00/
# cp rt73usb.c rt73usb.c-org
# vi rt73usb.c
(下記の場所に、デバイス ID 0x0411, 0x0137 の設定を追加)
/* Buffalo */
        { USB_DEVICE(0x0411, 0x00f4), USB_DEVICE_DATA(&rt73usb_ops) },
        { USB_DEVICE(0x0411, 0x0137), USB_DEVICE_DATA(&rt73usb_ops) },

# mv Makefile Makefile-org
# vi Makefile
(Makefile を下記のように新規作成)
obj-m   += rt73usb.o

# make -C /lib/modules/`uname -r`/build M=`pwd`
# cp rt73usb.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/rt2x00/

この辺で、再起動すると、動作するようになっていました。
別のディスクで、同様の操作をしてみたのですが、それはダメでした。
(何が効いたのか、全く謎です)。

結論:
WLI-UC-G より、WLI-UC-GN の方が導入しやすい。
(すみません、参考にならないですね)

■ 2009/09/30 追記

Ubuntu のパッケージを更新してから再起動、
再度 rt73 のソースを make clean; make ; make install して、再起動をすると、
WPA 系の暗号化も利用できるようになっていました。

■ 2009/10/18 追記

kernel 2.6.31.4 のソースを取得して、下記ファイルを編集して、ビルドすると、WPA2 系でも動作しました。
linux-2.6.31.4/drivers/net/wireless/rt2x00/rt73usb.c

■ 2010/05/22 追記

kernel 2.6.34 のソースでは、下記ファイルを編集して、ビルドしてもダメでした。
linux-2.6.34/drivers/net/wireless/rt2x00/rt73usb.c
それじゃ、次の手段。

下記から compat-wireless-2.6.34-rc4.tar.bz2 をダウンロード。
ちなみに、compat-wireless-2.6.34.tar.bz2 は、ビルドに失敗しました。
http://www.orbit-lab.org/kernel/compat-wireless-2.6-stable/v2.6.34/

# tar jxvf compat-wireless-2.6.34.tar.bz2
# cd compat-wireless-2.6.34-rc4/
# vi drivers/net/wireless/rt2x00/rt73usb.c
(下記を追加)
{ USB_DEVICE(0x0411, 0x0137), USB_DEVICE_DATA(&rt73usb_ops) },
# make
# make install
(これじゃインストールされないのかな? /lib のファイルが更新されてなかったら、無理やりコピー)
# cp drivers/net/wireless/rt2x00/rt73usb.ko /lib/modules/2.6.34/kernel/drivers/net/wireless/rt2x00/rt73usb.ko

これでいけました。

● Buffalo, WLI-UC-G, rt73, 0x0411, 0x0137, 411, 137, WPA, WEP, WLI-UC-GN, 比較, どっち, 無線, LAN

Doxygen でソースコード解析

大規模なソースコードを解析するときは、Doxygen を使います。
Doxygen については、以下を参照。現在の最新バージョンは 1.5.9 でした。
http://www.doxygen.jp/

この使用法以外にも、特定の書式でソースコードにコメントを挿入することで、
ソースコードから、HTML 等のドキュメントを生成することもできます。

Windows でも、Linux でも動作します。試しに、Doxygen のソースを Doxygen にかけてみました。
こんな感じで表示してくれます。

■ Windows で使用する場合

1. まず、Doxygen と、Graphviz をインストールします。

2. Doxywizard を起動して、各パラメータの設定をします。

が、設定項目が多すぎるのが難点なので、この Doxyfile を使うと良いです。
以下のパラメータを変更すると使えるはずです (変更しなくてもいけるかも)。

INPUT_ENCODINGソースの文字コードが UTF-8の場合: UTF-8, SJISの場合: CP932
PROJECT_NAMEプロジェクト名を適当に指定

この Doxyfile をソースコードのあるフォルダにコピーして、Doxywizard で開きます。

4. あとは、Run すれば OK。

終了したら、html フォルダの index.html を開きます。

■ Ubuntu で使用する場合

1. apt-get で doxygen と doxygen-gui, graphviz をインストールします。

# apt-get install doxygen doxygen-gui graphviz

2. doxywizard を起動します。

# doxywizard

あとは、Windows と同様です。

● Doxygen, Graphviz, Doxyfile, Doxywizard, ソースコード, 解析

2009年8月18日火曜日

キーリピートを高速化

キーリピートを高速化すると、キーボード入力がサクサクになるそうで、
今まで使っていませんでしたが、これからは使うようにします。
コーディングの効率が、上がるそうです。せっかちになるかも。

■ Windows の場合

kbdacc というフリーソフトを使うと良いそうです。早速導入。
下記の設定が、ちょうど良いぐらい。

初っ端のタメ200 ms
キーリピートの間隔25ms

■ Linux の場合

X が起動していないと有効になりませんが、xset で設定可能です。

$ xset r rate 200 25

~/.bashrc に、以下を追加すると良いです。

if [ $DISPLAY ]; then
xset r rate 200 25
fi

■ 2009/08/19 修正

~/.bashrc に記述する内容を修正。

● キーリピート, kbdacc, xset, キーボード, 高速化, key, repeat

2009年8月14日金曜日

Windows の VirtualBox で Ubuntu 8.04

Windows の VirtualBox 上で Ubuntu 8.04 を動作させるときのメモ。

試した環境は、以下の通りです。 ・Dell Inspiron 530 (Intel Core2 Duo 3.00GHz, 2GB RAM) ・Windows Xp Professional Version 2002 Service Pack3 ・VirtualBox Ver.3.0.4 ・Ubuntu 8.04 LTS (VirtualBox 用イメージ)

1. VirtualBox をインストールします。

下記サイトからダウンロードして、インストールします。
http://jp.sun.com/products/software/virtualbox/get.html
ネットワーク関連ドライバをインストールするときに、警告が出ますが、無視して続けます。

2. Ubuntu の仮想イメージをダウンロードして、展開します。

下記のサイトからダウンロードします。
http://www.ubuntulinux.jp/products/JA-Localized/virtualbox
ubuntu-ja-8.04-virtualbox-i386.zip を展開して、
D:\Ubuntu-8.04-Japanese-VBox に置きます。

3. VirtualBox を起動して、新規仮想マシンの設定をします。





4. 仮想マシンを起動します。

5. 初期設定を行います。

言語、キーボードタイプ、タイムゾーン、ユーザ設定等を行います。

6. apt-get update, apt-get upgrade を実行しておきます。

# apt-get update
# apt-get upgrade

7. 一旦、仮想マシンを再起動後、Guest Additions をインストールします。

共有フォルダ等の拡張機能を使用する場合は、インストールが必要です。
あと、kernel をアップデートする度に、インストールする必要があります。

8. VirtualBox で共有フォルダの設定をします。

・Windows 側で、D:\VBoxShare フォルダを作成します (このフォルダを共有します)。
・VirtualBox で共有フォルダの設定をします。

9. 仮想マシンを起動し、シェルから以下を実行します。

マウントが確認できれば OK。

# mount -t vboxsf VBoxShare /VBoxShare
/sbin/mount.vboxsf: mounting failed with the error: Protocol error
と出る場合は、以下のコマンドを実行します。

# mount.vboxsf VBoxShare /VBoxShare

10. あとは、通常インストールの Ubuntu 同様に設定を行っていきます。

ネットワーク系のデーモンは停止しない方が良いようだ (ネットワークにつながらなくなった)。
Ubuntu インストール後にする設定
Ubuntu 起動時間短縮
Ubuntu 高速化

■ 2009/09/03 修正

Guest Addtion の再インストールに関する記述修正。

● VirtualBox, Guest Additions, 共有フォルダ, mount, mount.vboxsf

2009年8月12日水曜日

Ubuntu で NFS サーバの設定をする

Ubuntu で NFS サーバの設定をする手順について。

1. apt-get で nfs-kernel-server をインストールします。

# apt-get install nfs-kernel-server

2. /etc/exports ファイルを編集します。

(read only でマウントする場合の例)
/home/ftp/pub/linux/fedora/11  192.168.0.0/255.255.255.0(ro,sync)
(read write でマウントする場合の例)
/home/hogehoge  192.168.0.0/255.255.255.0(rw,sync,no_root_squash)

3-1. nfs-server-kernel を再起動します。

# /etc/init.d/nfs-kernel-server restart

3-2. または再 export します。

# exportfs -r

4. client 側でマウントしてみます。

# mkdir -p /mnt/fedora
# mount 192.168.0.1:/home/ftp/pub/linux/fedora/11 /mnt/fedora

# mkdir -p /mnt/hogehoge
# mount 192.168.0.1:/home/hogehoge /mnt/hogehoge

■ 2013/03/30 追記

Ubuntu 12.04 で試したところ、上記の方法はちょっとダメで、オプション no_subtree_check を追加したほうが良いようだ。
以下、設定例。

# vi etc/exports
/home/hogehoge  192.168.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)

● NFS, exportfs, mount

2009年8月8日土曜日

Ubuntu 9.04 の Firefox で Flash が再生できない場合の解決方法

Ubuntu 9.04 の Firefox で Flash が再生できない問題について。

Firefox をシェルから起動すると、Flash 再生時に下記のようなエラーが出ていました。

(前略)
SWFDEC: ERROR: swfdec_bits.c(227): swfdec_bits_get_u16: reading past end of buffer
SWFDEC: ERROR: swfdec_bits.c(227): swfdec_bits_get_u16: reading past end of buffer
SWFDEC: ERROR: swfdec_bits.c(240): swfdec_bits_get_s16: reading past end of buffer
(中略)
SWFDEC: ERROR: swfdec_swf_decoder.c(361): swfdec_swf_decoder_parse_one: data after last frame
SWFDEC: ERROR: swfdec_swf_decoder.c(361): swfdec_swf_decoder_parse_one: data after last frame

早速、調べてみたところ、libswfdec を再インストールすれば直るとのこと。
以下のようにやると、再生できるようになりました。

# apt-get remove libswfdec-0.8-0

# apt-get install libswfdec-0.8-0

参考:
http://d.hatena.ne.jp/hanahi/20090510/p4

● Firefox、Flash、再生、libswfdec、swfdec

2009年8月6日木曜日

Ubuntu の Vim 設定 .vimrc

Ubuntu の Vim は、ファイルを開いたときに、前回終了した場所にカーソルがありません。
Fedora のときは、特に設定しなくても、前回終了した場所にカーソルがありました。
.vimrc に設定を追加することで、それは解決するようです。
Fedora はどこかで設定されてたのかな?

.vimrc に以下を追加します。
(この設定を探すのに時間がかかりました)

" 前回終了したカーソル行に移動
autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g`\"" | endif

参考: http://d.hatena.ne.jp/sugarbabe335/20080801/1217596590

現在の .vimrc 。

syntax off
set autoindent
set tabstop=4
set expandtab
set vb
" set number

" 入力中のコマンドをステータスに表示
set showcmd
" 括弧入力時の対応する括弧を表示
set showmatch
" ステータスラインを常に表示
set laststatus=2
" 前回終了したカーソル行に移動
autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g`\"" | endif

" 文字コードの自動認識
" http://www.kawaz.jp/pukiwiki/?vim#content_1_7
if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
    " iconvがJISX0213に対応しているかをチェック
  elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
  function! AU_ReCheck_FENC()
    if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif

参考: http://www.kawaz.jp/pukiwiki/?vim#content_1_7

● Vim、前回、編集、終了、場所、カーソル、.viminfo、.vimrc

2009年8月5日水曜日

キーコードを調べる (xev)

よくこのコマンドを忘れるので、ちょっとメモしておきます。
キーコードを調べるには、xev を使います。
X event の略らしい (これで覚えそうだな)。

$ xev

● xev, keycode

Ubuntu でユーザを追加する (adduser を使うべき)

Ubuntu でユーザを追加するときは、useradd ではなく adduser を使うべきです。
なぜなら、useradd はホームディレクトリが作られないから。
どちらを使っても、そんなに変わらない挙動だと思ってたんですけどね。

使い方は以下の通り。

# adduser USER_NAME

USER_NAME のところにログイン名を入力します。
適宜 -u (uid), -g (gid) オプションを指定します。

/home 以下にホームディレクトリが作成され、
/etc/skel/ ディレクトリから設定ファイル .bashrc 等がコピーされます。
パスワードも設定します。
useradd の場合は、これらをやってくれません。

# adduser -u 1004 USER_NAME
Adding user `USER_NAME' ...
Adding new group `USER_NAME' (1004) ...
Adding new user `USER_NAME' (1004) with group `USER_NAME' ...
Creating home directory `/home/USER_NAME' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for USER_NAME
Enter the new value, or press ENTER for the default
       Full Name []: Taro HOGEHOGE
       Room Number []:
       Work Phone []:
       Home Phone []:
       Other []:
Is the information correct? [y/N] y

● adduser, useradd

2009年8月4日火曜日

スクリーンキャスト (recordmydesktop)

デスクトップまたは特定のウィンドウ内のキーボードとマウスの操作を動画で録画することをスクリーンキャストと言うそうです。

会社での打ち合わせで Linux (Ubuntu) 上の操作をデモしようと思って調べたところ、
いくつかのツールがみつかりました (recordmydesktop, wink, istanbul, ...)。

その中で一番まともそうな recordmydesktop について。
これは、操作内容を ogg ファイル形式で保存をしてくれます。

Ubuntu での導入例ですが、Fedora とかでも動くみたいです (そちらは未確認です)。

1. apt-get で gtk-recordmydesktop をインストールします。

# apt-get install gtk-recordmydesktop

2. スクリーン全体を録画する場合は以下のようにします (コマンドでの実行例)。

Ctrl+c で、録画を停止します。

$ recordmydesktop -o OUTPUT_FILE.ogg
  (-o オプション無しのデフォルトの出力ファイル名は out.ogg です)

3. ogg ファイルの再生は VLC を使います。

VLC は Windows 版もあるので、Windows PC にもインストールしておくと良いです。

# apt-get install vlc

$ vlc OUTPUT_FILE.ogg

4. 特定のウィンドウを録画したい場合は、-windowid を使います。

xwininfo で録画したいウィンドウの Window id を調べてから、指定します。

$ xwininfo

xwininfo: Please select the window about which you
         would like information by clicking the
         mouse in that window.

xwininfo: Window id: 0x3400002 "Emulator"

 Absolute upper-left X:  306
 Absolute upper-left Y:  60
 Relative upper-left X:  5
 Relative upper-left Y:  24
 Width: 882
 Height: 683
 Depth: 16
 Visual Class: TrueColor
 Border width: 0
 Class: InputOutput
 Colormap: 0x3400011 (not installed)
 Bit Gravity State: ForgetGravity
 Window Gravity State: NorthWestGravity
 Backing Store State: NotUseful
 Save Under State: no
 Map State: IsViewable
 Override Redirect State: no
 Corners:  +306+60  -92+60  -92-281  +306-281
 -geometry 882x683-87+36

今回の例では Window id は 0x3400002 です。

$ recordmydesktop -windowid 0x3400002

■ gtk-recordmydesktop を使うと、GUI で録画の 開始、終了、保存、録画範囲の設定 ができます。

$ gtk-recordmydesktop

● recordmydesktop, vlc, スクリーンキャスト、キャプチャ、デスクトップ、操作、動画

2009年8月3日月曜日

Ubuntu で http サーバ (apache2)

Ubuntu で http サーバを立てる手順。

1. apache2 を apt-get でインストールします。

# apt-get install apache2

2. ~/public_html を使えるように userdir モジュールを有効にします。

http://HTTP_SERVER_ADDRESS/~USER_NAME/ で、ユーザのページを参照可能にします。

# a2enmod userdir
Module userdir installed; run /etc/init.d/apache2 force-reload to enable.

3. apache を再起動します。

# /etc/init.d/apache2 restart
 * Restarting web server apache2

● httpd, apache, public_html, userdir, http サーバ, Web サーバ, http server, Web server