2014年3月27日木曜日

Amazon Linuxでyumリポジトリのバージョンを指定する

Amazon Linuxは、ソフトウェアのバージョンアップが定期的に行われているので、
yumで追加モジュールをインストールしようとすると他のパッケージも同時にバージョンアップされることがあります。
他のパッケージはバージョンアップしたく無い場合は、yumリポジトリの参照先を変更すると、
過去のパッケージがインストール可能となります。

yum.confの修正

sudo vi /etc/yum.conf

#releasever=latest  <- コメントアウトする
releasever=2012.09       <- リポジトリのバージョンを指定する

yumのキャッシュ削除

sudo yum clean all

パッケージのバージョン確認

sudo yum list | grep apc

php-pecl-apc.x86_64                 3.1.13-1.8.amzn1           amzn-updates  
これで2012.09のパッケージがインストールできますね。


パッケージリスト


リリースノート


2014年3月7日金曜日

sftp接続できなくなった for Coda2

Vagrantで作業してたところ、Coda2というかsftp接続ができなくなった。
次のようなエラーメッセージが出ます。

Coda2のエラーメッセージ

サーバ “ホスト名” に接続できませんでした。
Unable to extract public key from private key file: Wrong passphrase or invalid/unrecognized private key file format

sftpコマンド試してみる

sshは接続できるので、sftpコマンドで接続したところ同様に接続できませんでした。
$ sftp 192.168.33.10
Received message too long 1433626990
Coda2のエラーメッセージと違いこちらはなんとなく原因がわかりました。 事前に設定していた.bashrcの内容をコメントアウトしたら無事接続できました。

rvmをコメントアウト

次の1行をコメントアウトしただけです。
rvm use 2.1.1
さすがにコメントアウトは不便なので、
sftp接続の時に処理されないように.bashrcを修正します。

.bashrcの修正

CentOSでsftp接続の場合は次の環境変数が設定されていたのでこれを使用して、.bashrcの先頭の方に次のように追記しました。
[ -z "$PS1" ] && return

ちなみに環境変数の差分取ってみたところ、
sftp接続限定の場合は、BASH_EXECUTION_STRING変数を利用してもよいかもしれません。
# CentOS6の場合
if [ "$BASH_EXECUTION_STRING" = "/usr/libexec/openssh/sftp-server" ]; then
 return
fi

# または正規表現でマッチさせる
if [[ "$BASH_EXECUTION_STRING" =~ sftp ]]; then
  return
fi

結論

対話的じゃないときは余計なことしないように、$PS1で条件分岐した方が無難ですね。
Debian Wheezyの/etc/bash.bashrc
# If not running interactively, don't do anything
[ -z "$PS1" ] && return

CentOS
/etc/bashrc
# are we an interactive shell?
if [ "$PS1" ]; then

OSX
/etc/bashrc
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

シェル環境を見直すよい機会となりました。