2012/12/22

Linux(bash)プロンプトの色付けとホスト名の管理


SSH などで Linux を使っていると開発サーバや本番機など、いろいろなサーバを渡り歩きますが、たくさんウィンドウを開いていたりSSH を渡り歩きすぎると時々自分がどこにいるのか見失ってしまいます。

私の場合、自分が管理する運用環境では自分がどこにいるのかをすぐに識別できるようにするため、特に本番環境にいる時の注意喚起のためにサーバに応じてプロンプトの色を変えるように設定しています。

プロンプトに色をつけるには ~/.profile などで設定するというのはよく見かけますが、私の場合には "ホストの設定として全ユーザに適用する" 必要があるため、少し違うやり方をします。

/etc/profile.d というディレクトリに prompt.sh (これは任意の名前)という次のスクリプトを作成します。

# prompt setting
if [ "$PS1" ]; then
  export PS1="\[\033[0;33m\][\u@\h(dev01) \W]\[\033[0;37m\]\\$ "
fi

/etc/profile.d に任意の名前でシェルスクリプトを記述しておくとシェルの起動時に自動的に実行されるため、全てのユーザに適用されます。
私の場合は基本 bash だけなので prompt.sh だけですが、 csh にも対応するには prompt.csh というファイルも作成しておきます。

ログインするとプロンプトは次のようになります。

[user@sv001(dev01) ~]

このまま、スーパーユーザにスイッチしても

[root@sv001(dev01) ~]

となり、色設定が必ず適用されます。
私の場合は開発系を黄色、本番系を赤色にすることで、リモートのホストに接続している状態であることと特に本番機に接続している状態を注意喚起する事を目的としています。

よく忘れるカラーコードは次の通り。
昔の8bit機のカラーコードと同じなら覚えやすいのだけどなぁ・・・(笑)

\033[0;30m : Black
\033[0;31m : Red
\033[0;32m : Green
\033[0;33m : Yellow
\033[0;34m : Blue
\033[0;35m : Magenta
\033[0;36m : Cyan
\033[0;37m : Light Gray
\033[0;30m : Black
\033[1;31m : Dark Gray
\033[1;32m : Light Green
\033[1;33m : Light Yellow
\033[1;34m : Light Blue
\033[1;35m : Light Magenta
\033[1;36m : Light Cyan
\033[1;37m : White

カラーコードに40番台を指定すれば背景の指定となります。


プロンプトに (dev01) というリテラル文字を設定しているのはサーバの論理名です。
サーバの名前の付け方も人それぞれですが、僕の場合はサーバ名には sv001 などの連番を付与し、別名として論理名を付けて管理する方式を好んでいます。

以前はホスト名には db01 などの役割に応じた名前を付けていたのですが、運用してみるといくつか不便を感じることがありました。

・ハードウェアトラブルのために急遽、別のサーバで代替機を立てた際や、インフラの見直しで複数の役割を持つサーバができてしまった際に名前と役割が乖離してしまった。
・役割に応じて命名していると別のシステムと名前がよく重複する。
・ハードウェアの移動などで再構築するたびに名前が変わるので、資産管理の棚卸しなどの際にいちいちシリアル番号を追いかけなければならない。
・ホスト名を考えるのにわりと悩む

これらの教訓から、

・ホストの正式名は sv001 などの連番で付与して未来永劫変更しない。
・ホストの役割はその時々で変わるものなので別名で対応する。
 別名の解決には /etc/hosts や内部DNSと上記のプロンプトの表記で対応する。

この方式にすることで、ホスト名に関する悩みはだいぶなくなりました。

2012/12/09

離席時などに画面をロックするショートカット for Win And Mac

知っていると少しだけ便利なプチ Tips です。

エンジニアに限りませんが仕事でPCを操作しているのであれば、ちょっとした離席時にも常に画面をロックしておくのは習慣にしたいものです。
でも操作が面倒だとついつい忘れてしまったり、わかっていてもそもそも億劫ですよね。
Windows も Mac も実はショートカットキー 一発でスクリーンをロックできるのですが、意外と知られていないようなのでプチTipsとして共有します。

Windows : Windowsキー + L    (Lock の L と覚えませう)
Mac : Option + Command + Eject

何度か試せば、これならば容易に習慣にできることでしょう。

せっかくのスクリーンロックでも、スクリーンセイバーからの復帰時にパスワードを要求しないように設定していたり、そもそもアカウントにパスワードを設定しないないとかは論外です(笑)


話は変わりますが、ショートカットキーつながりということで。
メイン機を Mac に乗り換えて早1年半、いまだにMacのショートカットが覚えきれずに苦慮していますが、Mac の App Store にある CheatSheet というアプリがわりと重宝しているので紹介します。
どんなアプリかというと、Command キーを押しっぱなしにしているとそのアプリで利用できるショートカットをポップアップで一覧表示してくれるアプリです。

http://cheatsheetapp.com/Landing/

Mac のショートカットの暗記でお悩みの方はぜひお試しあれ。

2012/01/17

MacOS X Lion : メール添付されたzipが開けない・・・ Thunderbird が原因だった

Stuffit Expander は優秀。パスワード付き zip でも lha でも、ほとんどのアーカイブを解凍してくれて重宝します。Macユーザにとっては MUST HAVE なツールですね。

MacとWindowsのzipファイルの互換性は過去の話かと思いきや、Windowsで作成され、メールに添付されたzipファイルが開けないという問題に遭遇しました。
Stuffit は「アーカイブが破損している可能性があります」と報告し、コマンドラインのunzipで展開しようとしても「End-of-central-directory signature not found」zipファイルではない、と言われる。

仕事のメールでじっくり調べている時間もないので、とりあえずWin機を起動してそちら側で添付ファイルを解凍していたが、自宅にいないとこれはできないので何かと不便。


最初はzipの互換性の問題かと思い、The Unarchiver や WinZip for Mac などいくつかの解凍ソフトを試すがどれもNG。
一時は AppStore で有償のアーカイバ買わなきゃダメか? とまで思った。

ふと思いつき、メールの添付ファイルをWebメーラからダウンロードしてみたらあっさり解凍できた。
メーラは Thunderbird を使用しているが、Thunderbird には添付ファイルのエンコード名の扱いによって添付ファイルが壊れることがあるらしい。

出典 : [ソフトウェア]Thunderbirdの添付ファイル不具合


これは少し古いバージョンの話なのと、今回の添付ファイル名には日本語は使われていないので同じ原因であるかどうかは怪しいところ。
ただ、メーラの相性によって Thunderbird で添付ファイルが壊れることがあるのだけは事実。
Thunderbird を使用していて上記のエラーに遭遇したら、一度他のメールクライアントやWebメーラなどで添付ファイルを落としてみましょう。

あ、でも Win機も Thunderbird だけど、こっちはファイル壊れていなかったな。
プラットフォームか文字セットの設定に依存しているっぽい。
ん〜、MacとWindowsの障壁はまだまだ無くならないようです。

2012/01/05

NGINX で MySQL に保存されている redmine のアカウント情報を元にBASIC認証する

まだ実施していないけど、実現するために必要そうな情報をちょいメモ。

<やりたいこと>
nginx でBASIC認証をしたいが、認証情報は redmine のアカウント情報(MySQL)をソースとしたい。

<背景>
redmine を導入したプロジェクト管理サーバに jenkins も導入。
jenkins の管理画面や ant により生成した javadoc やテストレポートなどの静的なファイルもプロジェクト管理サーバで閲覧できるようにしたい。
当然、これらのファイルにも認証をかけたいが、アカウント情報はredmineのものを使いたい。
public にこれらのドキュメントを配置しても良いが、静的なコンテンツのために rails のリソースを使うのはもったいないので、これらは nginx で直接返すようにしたい。

<Apacheの場合>
mod_auth_mysql を以下のように設定すればよいらしい
Auth_MySQL                      On
Auth_MySQL_Socket               /var/run/mysqld/mysqld.sock
Auth_MySQL_Host                 localhost
Auth_MySQL_User                 [redmineのデータベースユーザ名]
Auth_MySQL_Password             [redmineのデータベースパスワード]
Auth_MySQL_DB                   [redmineのデータベース名]
Auth_MySQL_Password_Table       users
Auth_MySQL_Username_Field       login
Auth_MySQL_Password_Field       hashed_password
Auth_MySQL_Encryption_Types     SHA1Sum
Auth_MySQL_Empty_Passwords      Off
AuthType Basic
AuthName "Authorization Realm"
Require valid-user

<NGINXの場合>
nginx には mod_auth_mysql はない。
替わりに mod_auth_pampam_mysql を使えばいけそう。

http://web.iti.upv.es/~sto/nginx/
http://pam-mysql.sourceforge.net/