ServersMan@VPS(CentOS5)にPython2.6をインストール

ServersMan@VPS(CentOS5)に入ってるPythonが2.4と古い、今時2.4はキツイよ…。
てなわけでPython2.6を新しくインストールしてみるよ。

zlibをインストール

easy_installでzlibが必要になるから、予めzlib-develをインストールしておく。

# sudo yum install zlib-devel

Python2.6をインストール

ソースコードをダウンロードして、configureを実行。

$ wget http://python.org/ftp/python/2.6/Python-2.6.tgz$ tar -zxvf Python-2.6.tgz
$ cd Python-2.6
$ ./configure --enable-shared  # --enabled-sharedはmod_wsgi等で必要

Modules/Setupのzlibのコメントアウトを外す。

$ vim Modules/Setup
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

あとはmake!make install!

$ make
$ sudo make install

soファイルをパスの通っている場所に移動。

$ sudo cp libpython2.6.so libpython2.6.so.1.0 /usr/lib/

configureで--prefixを指定するかどうか迷ったけど
被るのはbinくらいで、lib・includeはバージョン毎にディレクトリが分かれるので気にしない、入れちゃえ、入れちゃえ。
binで被るのがイヤならmake installの代わりにmake altinstallを使うとよろし。python26という名前でインストールされるよ。

sitecustomize.pyでデフォルトエンコーディングを設定

/usr/local/lib/python2.6/site-packages/sitecustomize.pyを追加。

import sys
sys.setdefaultencoding('utf-8')

easy_installを再インストール

このままではeasy_installは古いpythonで実行されてしまうので再インストール。
ez_setup.pyは新しくインストールしたpythonで実行する。

$ wget http://peak.telecommunity.com/dist/ez_setup.py
# sudo python ez_setup.py

まとめ

インストールした後にvirtual-python使えばよかったんじゃとか思ったけど、まぁいいか。
2.4でインストールしたライブラリも入れ直し、ちゃんと動いている模様。めでたし、めでたし。

Chromeに検索エンジンを追加する

FirefoxにもあるのでChromeにもあるだろうと思いつつも、最近まで調べなかった検索エンジンの追加。
とても簡単なのでまとめとく。

どんな機能?

この機能はアドレスバーからの検索で、文字通り任意の検索エンジンを追加できるというもの。
標準ではGoogle検索を行うけれど、代わりにGoogle MapやGoogle ソースコード検索を呼び出せるようにしちゃう、そんな機能。

検索エンジンを追加

まずはアドレスバーを右クリックして「検索エンジンを編集」で検索エンジンの一覧を表示。

左下にある「+」をクリックし、追加する検索エンジンの情報を入力。

キーワードは、アドレスバーで検索エンジンを指示するための文字列。
URLは、検索結果のURLから検索文字列を%sに置き換えたもの。

例えば、Google ソースコード検索を追加する場合、適当な文字列(ここではhoge)で検索を行い、検索結果のURLを取得。

http://www.google.co.jp/codesearch?as_q=hoge&btnG=Search+Code&hl=&as_package=&as_lang=&as_filename=&as_class=&as_function=&as_license=&as_case=

as_q=hoge -> as_q=%sに置き換えたものを検索エンジンのURLとして入力する。

http://www.google.co.jp/codesearch?as_q=%s&btnG=Search+Code&hl=&as_package=&as_lang=&as_filename=&as_class=&as_function=&as_license=&as_case=

追加した検索エンジンで検索

検索を行うには、アドレスバーで先程入力したキーワード(例ではgcode)とスペースを入力。
すると先程追加した検索エンジンに切り替わり、続いて入力した文字列で検索してくれる。

所感

まだまだ、追加したいサイトはたくさんあるなぁ。
PythonとかJavaとかAPIを検索するのにも使いたい。
でも疲れたので今日はここまで。

Snow LeopardでIMEの切り替えを速くする

以前からMacのIME切り替え時にタイムラグを感じていていたところ


次のような解決策を教えてもらった♪あざす!


どうやらSnow Leopardから「スクリプト切り替え」とやらを表示するようになり、遅く感じているようだ。確かにLeopardやTigerではそんな問題はなかった気がする。

IMEの切り替えを速くするには

教えてもらったURLによると、以下のように変更すればいい。

  1. 「システム環境設定」 -> 「キーボード」 -> 「キーボードショートカット」を開く
  2. 左カラムの「キーボードと文字入力」を選択
  3. 「前の入力ソースを選択」のショートカットキーを変更
    • 「⌘ + スペース」->「Option + ⌘ + スペース」
  4. 「入力メニューの次のソースを選択」のショートカットキーを変更
    • 「 Option + ⌘ + スペース」 -> 「⌘ + スペース」

ポイントは「前の入力ソースを選択」と「入力メニューの次のソースを選択」のショートカットキーを入れ替えるトコロにあるようだ。
僕は日頃、上記のショートカットに「Ctrl + スペース」と「Option + Ctrl + スペース」を割り当ててるけど、同じように入れ替えたら「スクリプト切り替え」が表示されなくなり、確かに速くなった。

実はこの問題でかなりの変換ミスをしてたので、解決できてメチャクチャうれしい♪

その他

あー、twitter記法便利♪いろいろ試してみたいっ!

.ssh/configの書き方

sshを使ってると接続するサーバ毎に、ポートが違ったり秘密鍵が違ったりで引数を切り替えることがよくある。
接続するサーバ毎に指定する引数は決まっているので、よくシェルスクリプトエイリアスで対処してきたが、.ssh/configを用意すればssh側で面倒みてくれるようだ。(scpやsftpでも可)
まさに灯台もと暗し、こりゃ使わない手はないね。

Hostセクション

.ssh/configは、接続先を表す複数のHostセクションからなり、その中に細かな設定を記述していく。

Host server1
  HostName     192.168.11.101
  Port          2222
  User         nauthiz
  IdentityFile ~/.ssh/server1/id_rsa

Host server2
  HostName     192.168.11.102
  Port          2222
  User         nauthiz
  IdentityFile ~/.ssh/server2/id_rsa

Hostの名前はsshでドメインの代わりに指定できる。
例えば、sshでserver1と名付けたHostに接続したければ次のように指定すればいい。

$ ssh server1

もしパラメータを上書きしたければ、コマンドラインのオプションで指定してあげよう。そちらが優先されるよ。

ワイルドカード

Hostセクションの名前は、*で全体あるいは部分的にワイルドカード指定が可能だ。
特に共通設定として*を指定しておくと便利だろう。
ただし、*を指定するHostは最後に書くこと。
各パラメータは、マッチしたホストから順に採用されるため、
最初に*を指定すると以降にHostが無視されてしまう。

Host *.sample.co.jp
  # *.sample.co.jpに接続する場合の共通設定

Host *
  # 全接続先の共通設定

Host毎の設定

HostName 接続先のドメインやIPアドレス 例) 192.168.11.102
Port ポート 例) 22
User ログインするユーザ 例) nauthiz
IdentityFile 公開鍵認証に使用する秘密鍵 例) ~/.ssh/id_rsa

設定できるパラメータは他にたくさんあるので詳しいは次を参照。

$ man ssh_config

SSHで公開鍵認証

SSHで公開鍵認証をするためのまとめ。

公開鍵を作成

$ ssh-keygen -t rsa

-t で指定できる暗号化方式には他にdsaやrsa1があるみたいだけど
dsaは強度がイマイチ、SSH2を使いたいのでrsaにしとく。(SSH1の場合はrsa1を指定)
実行結果:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/nauthiz/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/nauthiz/.ssh/id_rsa.
Your public key has been saved in /Users/nauthiz/.ssh/id_rsa.pub.

途中で訊かれるパスフレーズは、SSHでログインする時に必要。
実行後、秘密鍵は~/.ssh/id_rsa、公開鍵は~/.ssh/id_rsa.pubに保存されてる。

.sshディレクトリと秘密鍵のパーミッションを変更。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa

接続先サーバに公開鍵を登録

scp等で、秘密鍵(~/.ssh/id_rsa)を接続先のサーバに保存。
公開鍵認証を利用するユーザのホームディレクトリに.sshディレクトリを作成。

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

~/.ssh/authorized_keysに公開鍵追記すれば、登録完了。
はじめてauthorized_keysを作成する場合はパーミッションも変更しとく。

$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

次回からSSHを実行すると、パスフレーズを聴かれるので
ssy-keygenに入力したものと同じパスフレーズを入力すればログインできる。

パスワード認証を無効化

通常のパスワード認証を無効化して、公開鍵認証のみにする場合
/etc/ssh/sshd_configにある次の項目を変更。

PasswordAuthentication no

その後、SSHデーモンに設定をリロードさせればOK。

# service sshd reload

番外: 複数の鍵を使い分ける

SSHではデフォルトで~/.ssh/id_rsaを秘密鍵として使用する。
でも自宅サーバレンタルサーバのように同じ秘密鍵を使いたくないことってあるよね。
そんな場合は、ssh-keygenの-fで秘密鍵・公開鍵を別の場所に作成し

$ ssh-keygen -t rsa -f ~/.ssh/hoge/id_rsa

例の出力先:

  • 秘密鍵: ~/ssh/hoge/id_rsa
  • 公開鍵: ~/ssh/hoge/id_rsa.pub

sshの-iオプションで指定すれば利用する秘密鍵を切り替えられる。

$ ssh <接続先サーバ> -i ~/ssh/hoge/id_rsa

MySQLでエクスポートとインポート

エンコーディングの設定

まずはDBのエンコーディングを修正。

試験管のなかのコード :: MySQL の文字エンコーディング関連設定
を参考に。

MySQLの設定ファイルは、Ubuntuであれば/etc/mysql/my.cnfにあるので
次の項目を追加する。

[mysql]
default-character-set=utf8

[mysqld]
default-character-set=utf8
character_set_server=utf8

サーバを再起動後、mysqlコマンドで変更を確認。

mysql> show VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

エクスポート (InnoDBの場合)

mysqldump (データベース名) -u (ユーザ名) -p --single-transaction --master-data=2 > (ダンプファイル)
  • -u: ユーザ名
  • -p: パスワード、続いてパスワード入力しなかった場合はプロンプトで聞かれる
  • --single-transaction: BEGINを発行してエクスポートする。InnoDB専用
  • --master-data: 1の場合CHANGE MASTER文をそのまま出力する、2の場合コメントにする

--master-dataの意味が理解できていないけど、CHANGE MASTER文を実行させないためのオプションとのこと。

インポート

mysql (データベース名) -u (ユーザ名) -p < (ダンプファイル)
  • -u: ユーザ名
  • -p: パスワード、続いてパスワード入力しなかった場合はプロンプトで聞かれる

postgreSQL 8.1.11のシーケンス

postgreSQL 8.1.11では、シーケンスの名前を変更するのに

ALTER SEQUENCE (元のシーケンス名) RENAME TO (新しいシーケンス名)

と書けない。

代わりに

ALTER TABLE (元のシーケンス名) RENAME TO (新しいシーケンス名)

ならいける。
シーケンスもテーブル扱いなのか、びっくりだ。