Hatena::ブログ(Diary)

Varg

2015-06-09 (Tuesday)

引っ越しました

Blogを移行しました。

移行先は、次の場所です。

Terrulam(http://harpyja.daemon.asia)

以降、このBlogは更新されません。

2014-12-15 (Monday)

[][]DebianにおけるsSMTP導入方法とGmailを利用したメール送信方法のまとめ

sSMTPは、SMTPプロトコルのみに対応した、非常に軽量・シンプルなMTAである。

メール送信機能を利用したいが、Sendmail等の複雑なMTAは使用したくない時などに便利である。

この記事では、sSMTPの導入方法と、Gmailを利用したメールの送信方法を簡単にまとめる。

環境

  • Debian Wheezy 7.7 (x86_64, kernel:2.6.32-042stab092.2)
  • ssmtp (2.64-7)
  • heirloom-mailx (12.5-2)
  • Gmail (2014-12-15時点)
  • exim4 (4.80-7+deb7u1)

設定手順

設定は、以下の手順でおこなう。

  1. 既存のMTAの削除
  2. sSMTPのインストール
  3. 設定ファイルの記述
  4. 設定ファイルのファイル属性の変更
  5. ログインユーザのmailグループへの追加
既存のMTAの削除

(MTAがインストールされていない場合は、このセクションは実行しなくても良い。)


sSMTPは、他のMTAと同時に使用すると、競合することがある。そのため、既存のMTAがインストールされている場合は、該当するプログラムをsSMTP導入前に削除しておく。

今回使用した環境ではexim4がインストールされていたため、あらかじめ削除する。

具体的には、端末上で以下のコマンドを入力して、サービスの停止・exim4関連のパッケージの削除をおこなえば良い。

# service exim4 stop
# aptitude remove '~nexim4'

sSMTPのインストール

次に、sSMTPのインストールをおこなう。

Debian Wheezyでは、公式リポジトリにsSMTPのパッケージが用意されている。

ここでは導入を簡単にするため、このsSMTPパッケージを利用することにする。


端末上で以下のコマンドを入力し、sSMTPをインストールする。

# aptitude install ssmtp

上記のコマンドを実行後、"aptitude show ssmtp"や、"whereis ssmtp"等でsSMTPがインストールされていることを確認しておく。

設定ファイルの記述

sSMTPの設定ファイルは、/etc/ssmtp/ssmtp.confである。

このセクションでは、上記のファイルを編集・記述し、sSMTPが動作するように設定をおこなう。


sSMTPの動作に最低限必要な設定項目は、以下の6項目である。

Mailhub		: "Mailhub=smtp.gmail.com:587"を指定
UseTLS		: "UseTLS=Yes"を指定
UseSTARTTLS	: "UseSTARTTLS=Yes"を指定
AuthUser	: "AuthUser=hogehoge"、GmailのユーザIDを指定
AuthPass	: "AuthPass=piyopiyo"、Gmailのパスワードを平文で指定
AuthMethod	: "AuthMethod=LOGIN"を指定

上記6つの項目を、/etc/ssmtp/ssmtp.confに記述すれば良い。


----------※2015/03/16(Mon)追記分----------

MTAもしくはユーザ側でメールのヘッダFrom(注:エンベロープFromではない)を書換えたい場合は、

FromLineOverride=yes

を/etc/ssmtp/ssmtp.confに記述する。

----------以上2015/03/16(Mon)追記分----------


以下、設定後のssmtp.confと、標準で用意されているssmtp.confとの差分である。

# diff /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.original
10c10
< mailhub=smtp.gmail.com:587
---
> mailhub=mail
22,28d21
< 
< UseTLS=Yes
< UseSTARTTLS=Yes
< 
< AuthUser=your_gmail_id
< AuthPass=your_gmail_password
< AuthMethod=LOGIN

以上で、設定ファイルの記述は完了である。

(より詳細な設定をおこないたい場合は、man ssmtp.confを参考にすると良い。)

設定ファイルのファイル属性の変更

次に、sSMTPが設定ファイルにアクセスできるようにするため、/etc/ssmtp/ssmtp.confの所有グループを"mail"に変更する。

端末上で、以下のコマンドを入力して、所有グループの変更をおこなう。

# chown root:mail /etc/ssmtp/ssmtp.conf

また、設定ファイル内には、ユーザIDとパスワードを平文で記述している。そのため、パーミッションを変更して、設定ファイルにアクセスできるユーザを限定しておく。

# chmod 640 /etc/ssmtp/ssmtp.conf

ログインユーザのmailグループへの追加

sSMTPを通じてメールを送信する場合、MUAを使用するユーザが"mail"グループに所属している必要がある。

ここではログインユーザのmailグループへの追加をおこなう。


具体的には、端末上で以下のコマンドを入力する。

# gpasswd -a login_user mail

最後に、一旦ログアウトした後、再度ログインし直せば、設定は完了である。

$ logout

動作確認

動作確認は、mailコマンド(実体はHeirloom-mailx)を用いておこなう。

具体的には、端末上で以下のコマンドを入力すれば良い。

$ echo 'This is a test mail.' | mail -v -s 'sSMTP Test' hogepiyo@foo.bar.com

mailコマンドの詳細ログに、メール本文の後にSMTPの応答コード'250 OK'と'QUIT'が表示されていれば、設定は完了である。

参考にしたもの

  1. man ssmtp.conf
  2. SSMTP - ArchWiki
    https://wiki.archlinux.org/index.php/SSMTP
  3. SSMTPでメール送信しよう! - WebOS Goodies
    http://webos-goodies.jp/archives/50645131.html

雑記

  • sSMTPは、単にメールを送信するだけのシンプルな機能。
    • ちょっとした通知システムを作るのに便利そう。
    • テキストファイルを扱うスクリプトと組み合わせれば、色々と応用できそうな感じ。
  • sSMTPは、大半のLinuxでは公式リポジトリで提供されているみたい。また、BSDでも利用可能だそう。
  • sSMTPとは直接は関係ないのだけれど、cronを動かしてメールを送信する場合、環境変数に注意する必要がある。
    • cron上では$LANGの値が設定されない。そのため、全角文字が含まれるメールを送信すると、"Content-Type"が"Application/Octet-Stream"になってしまうことがある。
    • 詳しくは、こちらのサイトを参照する。(http://www.koikikukan.com/archives/2013/08/12-000300.php)
  • 現状だと、/etc/ssmtp/ssmtp.confにユーザIDとパスワードを記述してしまっている。セキュリティ上、よろしくない気がする。
    • パーミッションは640に設定しているので、いちおうは大丈夫。
    • 知識不足でよく分からないのだけれど、SMTPメールリレーという手法を使えば、/etc/ssmtp/ssmtp.confにIDとパスワードを記述しなくても良いらしい。


  • 設定方法まとめ記事を書くのが、全然上手くならない...
    • きっと、単純に練習量が足りないだけだと思う。
    • でも、まとめ記事を書くのは時間が掛かるので、あまり進んで書きたくもなかったりする。ぐぬぬ...

2014-11-25 (Tuesday)

[] NeoBundleのキャッシュ機能を利用したVimの起動を高速化する設定法まとめ

Vimのプラグインを管理するためのプラグイン、NeoBundleには、Version 3.0からプラグインをキャッシュする機能が追加された。

>> (https://github.com/Shougo/neobundle.vim/commit/fc8818ccbc2db471f4de3501a69c66d3bb798df0)

この機能を利用することで、プラグインを大量にインストールしたVimでも、高速に起動することが可能になる。


本記事では、NeoBundleのキャッシュ機能の設定方法について述べる。

また、Vimの起動がどの程度高速化するのか、実際に起動速度を測定し、検証した結果も述べる。


----------

※2015.5.12追記

NeoBundleのキャッシュ機能に関して、仕様が変更された。

(詳細: https://github.com/Shougo/neobundle.vim/commit/69cb3b2d3c159207e1a2620c51b6fe754289c841)


以下、仕様変更の内容を一部抜粋する。

  • 関数: neobundle#has_cache(), neobundle#has_fresh_cache()を廃止
  • コマンド: NeoBundleLoadCacheを廃止
  • 上記の関数/コマンドの代わりに、neobundle#load_cacheを追加

以上の項目は、本記事の内容にも影響を及ぼす。

よって、最新の仕様に合わせて、本記事の一部を修正した。

----------


環境

  • Vim (7.4.473)
  • NeoBundle (3.0)

設定方法

設定は、NeoBundleのキャッシュ機能を有効にする記述を、.vimrcに書込むだけである。

具体的には、.vimrcの適切な箇所に、以下の内容を記述する。

(Vimプラグインは、"$HOME/.vim/bundle"以下に格納されているものとする。)

if has('vim_starting')
    set nocompatible
    set runtimepath+=expand('$HOME/.vim/bundle/neobundle.vim')
endif
 
call neobundle#begin(expand('$HOME/.vim/bundle'))

call neobundle#load_cache  " キャッシュの読込み
 
" 以下、インストールするプラグインの指定
" NeoBundle自身
NeoBundleFetch 'Shougo/neobundle.vim'
 
" その他のプラグイン
NeoBundle 'hoge/piyo.vim'
      (中略)
NeoBundle 'foo/bar.vim'
" ここまで、インストールするプラグインの指定
 
NeoBundleSaveCache  " キャッシュの書込み
 
call neobundle#end()
filetype plugin indent on

利用方法

上記の設定を書込んだ後、初回の起動時にキャッシュの作成がおこなわれる。

次回以降の起動から、キャッシュを利用した高速起動が実行される。


キャッシュを明示的に作成したい場合は、:NeoBundleSaveCacheを実行する。

また、作成したキャッシュを削除したい場合は、:NeoBundleClearCacheを実行すれば良い。


キャッシュファイルのデフォルトの作成場所は、.neobundle/cacheである。

作成場所を変更したい場合は、"let g:neobundle#cache_file = '/path/to/cache_file'"を追記する。

検証

Vimの起動時間がどの程度短縮されたのかを調べるために、実際に検証をおこなった。

検証は、実機マシン上で、Vimの--startuptimeオプションを用いておこなった。

検証に使用したマシン環境は、以下の2つである。

マシン1:Lenovo Thinkpad X121e

  • CPU:AMD E-450 (2 core 2 thread, 1.65GHz)
  • メモリ:8GB (DDR3-1333)
  • ストレージ:SSD 256GB (CFD_CSSD-S6TM256NMPQ)
  • OS:Arch Linux (x86_64, Kernel 3.14.23-1-lts)

マシン2:Dell OptiPlex 9020

  • CPU:Intel Core i7-4770 (4 core 8 thread, 3.40GHz)
  • メモリ:8GB (DDR3-1600)
  • ストレージ:500GB (ATA ST500DM002-1BD14)
  • OS:Windows 7 Professional (amd64, SP1) && Cygwin (x86_64, Cygwin DLL:1.7.33)


両マシンとも、同一の.vimrcを用いて計測をおこなった。

使用した.vimrcは、行数:2948(実効行数:980)、使用プラグイン数:120である。

検証結果

マシン1

$ vim -c 'NeoBundleClearCache | q'      # キャッシュのクリア
$ vim --startuptime /tmp/cache_test -c q && tail -n 1 /tmp/cache_test | awk '{print $1}'
764.863
$ !-2:s/Clear/Save                      # キャッシュの有効化
$ !-2
561.097

マシン2

$ vim -c 'NeoBundleClearCache | q'      # キャッシュのクリア
$ vim --startuptime /tmp/cache_test -c q && tail -n 1 /tmp/cache_test | awk '{print $1}'
6540.807
$ !-2:s/Clear/Save                      # キャッシュの有効化
$ !-2
5260.234

マシン1では、キャッシュ無: 764.863(msec)、キャッシュ有: 561.097(msec)、

マシン2では、キャッシュ無:6540.807(msec)、キャッシュ有:5260.234(msec)、という起動速度であることが判明した。

つまり、NeoBundleのキャッシュ機能を有効にすることで、マシン1では約200msec、マシン2では約1280msec、起動時間が短縮された。

以上の結果より、NeoBundleのキャッシュ機能によって、Vimの起動を2割程度、高速化できることを確認した。

参考にしたもの

  1. :help neobundle
  2. Vim - NeoBundle のキャッシュ機能 - Qiita
    http://qiita.com/hokorobi/items/0663da130f54bac3ce1a
  3. Big Sky :: vimmer必読!読み込みの遅いvimscriptを見つけ出す方法
    http://mattn.kaoriya.net/software/vim/20091104214557.htm

雑記

  • Vimの起動時間が1000ms以内の、元々起動が速い環境では、キャッシュの効果はあまり実感できないかも。

>> Cygwinのような遅い環境向け??

  • Cygwin環境のVim、重すぎ... いくらforkが遅いといっても、起動に数秒もかかってしまうのは勘弁してほしい。

2014-08-25 (Monday)

[][]Windows環境においてウィンドウをマウスオーバーでフォーカスしアクティブにしない設定法まとめ

大半のXウィンドウマネージャでは、ウィンドウをマウスオーバーでフォーカスだけをするようになっている。Windowsでは、通常はマウスオーバーではウィンドウをフォーカスしないが、"コンピュータの簡単操作センター"から、フォーカスするように設定できる。

しかし、この方法では、マウスオーバーするたびにウィンドウがアクティブ化(最前面に押出される)されてしまい、非常に操作しにくいことがある。この問題を解決するために、Xウィンドウマネージャの様に、ウィンドウをマウスオーバーでフォーカスするが、アクティブにはしない設定方法をまとめる。

環境

  • Windows 7 (amd64, SP1)

設定方法

レジストリ[HKEY_CURRENT_USER\Control Panel\Desktop]にあるUserPreferencesMaskの値を、"9F 3E 07 80 12 00 00 00"に変更すれば良い。

また、フォーカスが変わるまでの時間は、レジストリ[HKEY_CURRENT_USER\Control Panel\Desktop]にあるActiveWndTrkTimeoutの値で変更できる。


設定は、以下の手順で行う。

  1. レジストリキーのバックアップ
  2. レジストリキーの書込み
レジストリキーのバックアップ

まず、管理者権限のあるユーザアカウントでログインし、コマンドプロンプトを管理者で実行する。

次に、コマンドプロンプトで以下のコマンドを入力する。

    > reg export "HKCU\Control Panel\Desktop" C:\reg_backup.reg

最後に、ドライブC直下に"reg_backup.reg"というバックアップファイルが出力されるので、任意の場所で保管しておく。

レジストリキーの書込み

まず、管理者で実行したコマンドプロンプトで、以下のコマンドを入力し、UserPreferencesMaskの値を変更する。

    > reg add "HKCU\Control Panel\Desktop" /v "UserPreferencesMask" /t REG_BINARY /d 9F3E078012000000

次に、以下のコマンドでActiveWndTrackTimeoutの値を変更する。

時間(/d に続く数値)はミリ秒の任意の値を入力する。

(個人的には100くらいが丁度良いと思う。小さすぎる値にすると、タスクバー上のプレビューなどが使いづらくなるので。)

    > reg add "HKCU\Control Panel\Desktop" /v "ActiveWndTrkTimeout" /t REG_DWORD /d 100

最後に、一旦ログオフして再度ログインする。

復旧方法

バックアップした"reg_backup.reg"ファイル上でメニューを開き、結合を実行する。

参考サイト

  1. Windows7 マウスオーバ フォーカス移動 - とあるシステムエンジニアの徒然草
    http://k-shrimp-ebi.blogspot.jp/2012/04/windows7.html

2014-08-21 (Thursday)

[][][] OpenSSH公開鍵認証の設定方法 & 注意点メモ

Windows環境でLinuxサーバへ公開鍵認証方式でssh接続する際、設定をミスして、数時間も潰してしまった。

今後、同じミスを犯さないように、設定法を簡単にメモしておく。

環境

Windows(クライアント)側
  • Windows 7 (amd64, SP1)
  • Putty ごった煮版 (0.60)
Linux(サーバ)側
  • Debian Wheezy 7.6 (x86_64, kernel:2.6.32-042stab079.5)
  • openssh-server (1:6.0p1-4+deb7u2)

注意点

今回、以下の3点に気づかなくて、時間を無駄にしてしまった。以降、気をつける。

  • puttyegenで作成した公開鍵は、そのままではOpenSSHでは使用できない。

>> ssh-keygenを用いて、使用可能な形式に変換する必要がある。

  • authorized_keysの中身は、1行につき1公開鍵の対応関係にある。

>> この関係が何らかの形で壊れてしまうと、鍵認証がうまくいかない。

  • puttyegenで生成した公開鍵は、複数の行から構成されている。

>> 注意点1を忘れて、公開鍵を変換せずにauthorized_keysに書込んだ場合、認証がうまくできなくなる。

設定法

設定は、以下の手順で行う。

  1. 鍵ペアの生成 (クライアント側)
  2. 公開鍵の転送 (クライアント側)
  3. 公開鍵の形式変換 (サーバ側)
  4. 公開鍵の登録 (サーバ側)
鍵の生成

puttyegenを起動し、任意の暗号化法で鍵ペアを生成する。

生成した後、公開鍵と秘密鍵の両方を、任意の場所に保存しておく。

公開鍵の転送

セキュアな方法を使い、公開鍵をサーバに転送する。

公開鍵の形式変換

ssh-keygenを使い、公開鍵をOpenSSHで使用できる形式に変換する。

    $ ssh-keygen -i -f putty_pubkey.pub > openssh_pubkey.pub

公開鍵の登録

変換した公開鍵を、authorized_keysに追記する。

    $ cat openssh_pubkey >> $HOME/.ssh/authorized_keys

参考サイト

  1. 鍵交換方式による認証 - Penguin's campus note
    http://www14.plala.or.jp/campus-note/vine_linux/server_ssh/ssh_key.html