Archive : 2011

NOV
24

Cygwinを捨てたWindowsのCUI環境

Published:2011-11-24 23:00:39 UTC

いますぐコマンドプロンプトを捨てて、Cygwinを使うべき10+の理由 – ブックマクロ開発に

「コマンドプロンプトからCygwinへ」の記事への補足 – ブックマクロ開発に

CygwinはWindows環境にそのままLinuxCUIツールを導入できる。もう「コマンドプロンプト」に拘る必要は薄くなりました。僕は今年1年の一番の収穫はCygwinを使ったこと。Cygwinを使うことでターミナルを使いこなせるようになった。そしてMacに移行してもターミナルさえあるから困らないと思えるようになりました。

cygwinが進化していることを知らなかったので、このエントリは勉強になったのですが、まぁでもラップトップ用のDDR3メモリ4GB*2ですら三千円程で買えるこのご時世、もうcygwinで無理にWindows上にUNIXライクなインターフェイスを作る必要はないんじゃないかな、と思います。CUI環境がほしければ、VirtualBoxにLinux入れてSSH、あとはMinGW/MSYSでカバーすればよい、というのが自分の意見。や、元記事もMinGWいいよね、と言ってますし、ケンカ売りたいわけじゃないです。念の為。あくまで個人の生活スタイルとか、趣味で決まる問題ですが、まぁ自分はこうしてるよ、というメモとして。

自分が手元にUNIXライクなインターフェイスを持った環境を求める理由は、生活環境(Explorerなんて要らない!全部CUIで操作する!みたいな)というよりは、Linux上で動かすアプリケーションの開発用、という面が強いのですが、そうした場合、開発環境は本番環境となるべく似た環境で揃えた方が、後でいざテストの段階になった時に環境起因の問題にぶつかりにくくてやりやすいです。一番良いのは本番環境と同じディストリ、同じパッケージをインストールした環境を用意することで、そういった点では、cygwinは、どんなに進化してもcygwinであって、Linuxではないので、使いにくいな、と。元記事の人はその役割をグローバルIPのついた外のホストに求めているようですが、何時でも接続性が得られるとも限りませんし、手元にあった方がSSHの反応良くて良いです。つまり、Cygwinの代わりにMinGW/MSYSを使い、外のホストの代わりに、VMを使っているイメージですね。

LinuxをホストOSとしてしまうのもいいな、とは思うのですが、その点については、自分はC#とVisual Studioが大好きという理由で、今のところ踏み切ってません。

そんなわけでWindowsから離れられない自分のCUIがらみの環境はこんな感じ:

  • VirtualBox
  • VboxHeadlessTray
  • Ubuntu Desktop
  • MinGW/MSYS
    • open-ssh
    • mintty
  • MsysGit
  • Putty
  • PowerShell

VirtualBox

image

言わずと知れた、ホストハイパーバイザ。VMware Playerと比べて、こちらのほうが自分はGUI的に好きで選びました。VMのNICは、eth0がNAT、eth1がHost Only Adapter、eth2,3は必要に応じて内部ネットワークに充てたり、という構成にしています。

eth0はVMからインターネットに抜ける用で、VMはDHCPでIP他を受け取るようにするとよいでしょう。但し悲しいかな、DNS Proxy的な機能は提供されていないようで、DHCPでは、ホストOSが使っているDNSのアドレスが直接振ってきます。そのため、ホストOSのネットワーク環境が変わると、名前解決が出来なくなります。その場合は、ゲストOS側で、例えばUbuntuなら

sudo dhclient eth0

とかやってやる必要があります。ちょっとイケてないですね。。Windowsのインターネット接続共有を使えば、解決できるかも?

eth1はホストOSからSSHする用で、こちらは固定IPにしています。このIPをWindowsのhostsファイルにIPとホスト名の対応を書いて多くと色々楽です。元記事ではVMware PlayerでTCPのコネクションがよく切れると言っていますが、VirtualBoxでは特に感じたことはないです。Mintty/MSYSからVirtualBox上のVMにSSHした状態でラップトップをスリープさせても、特に切れることなく復帰できます。

リモートデスクトップも、仮想マシンのディスプレイの設定のところから設定可能で、これを設定しておくと、後述のVboxHeadlessTrayでタスクトレイに格納した状態でも適宜画面を呼び出せて便利です。

VboxHeadlessTray

image

VirtualBoxをタスクトレイに格納可能にするユーティリティです。VirtualBox、タスクバーに常時出ているとちょっと邪魔ですしね。スタートアップで起動するようにしておけば、Windows再起動時にVMをいちいち立ち上げるよっこらせ感がなくなります。タスクトレイアイコンのコンテキストメニューから、VMにRDP張れたり、VMのサスペンドが出来たりするのも便利です。

Ubuntu

色々楽です。Cygwinだと、何かうまくいかないときに、Cygwinだから悪いのか、自分のミスかの切り分けが発生しますが、そういうのが無いのが何より良いですね。

MinGW/MSYS

  • msys-openssh

インストールはmingw-get installでmsys-opensshパッケージをインストール。Linuxで使っていた~/.ssh/configがそのまま持ち込めて便利です。msys-opensshパッケージではsshコマンドのほかに、scpとssh-agentコマンドも提供されており、scpでのファイル転送や、秘密鍵のメモリ上へのキャッシュが出来て便利です。ssh-agentといえば、lazy-ssh-agentという秘密鍵のパスフレーズの入力を必要になるまで遅延させてくれるスクリプトが非常に便利でLinux環境では重宝しているのですが、MinGW/MSYS環境でも使いたいよね、ということで、ちょっと手直しして使ってます。いやほんと、Linux使いもMinGW/MSYS使いもCygwin使いもみんな使うべき。便利だから。

#!/bin/sh 
# lazy-ssh-agent: 
#   run single ssh-agent (per host) on first ssh/scp/sftp attempt 
# 
# usage: 
#  first, place this script into a $PATH dir. 
# 
#  (in .{bash,zsh}rc) 
#   eval `lazy-ssh-agent setup ssh scp sftp` 
# 
#  (in .{bash_,z}logout) 
#   eval `lazy-ssh-agent clean` 
# 
#  (in .bash_profile ; when you are using zsh not as the login shell) 
#   ZSH=`which zsh` 
#   if [ -x "$ZSH" ]; then 
#       exec "$ZSH" -l 
#   fi 
# 
# Author : 7bit <http://nanabit.net/> 
# History: 
#   20090405 first release 
#   20111117 modified to run in MSYS by shiroica <http://blog.sharplab.net/>

umask 0066

SSH_AGENT_DIR=~/.sshagent 
SSH_AGENT_FILE=$SSH_AGENT_DIR/.$(hostname)

if [ "$1" = "clean" ]; then 
  ps -s -u "$USER" | awk 'NR!=1{print $1, $4;}' | grep -E '^[0-9]+ /usr/bin/ssh-agent$' | \ 
    awk '{print $1}' | while read LINE; do 
    kill "$LINE" 
  done 
  test -f "$SSH_AGENT_FILE" && rm "$SSH_AGENT_FILE" 
  echo 'unset SSH_AGENT_PID; unset SSH_AUTH_SOCK;' 
  exit 
fi

if [ "$1" = "setup" ]; then 
  shift 1 
  for SSHCMD in "$@"; do 
    echo "alias $SSHCMD='';" 
    echo "unalias $SSHCMD;" 
    echo "ORIGINAL_SSH_$SSHCMD=$(which $SSHCMD);" 
    echo "alias $SSHCMD='eval \$(lazy-ssh-agent) || ssh-add; '"'$ORIGINAL_SSH_'"$SSHCMD ;" 
  done 
  exit 
fi

if [ ! -d "$SSH_AGENT_DIR" ]; then mkdir -p "$SSH_AGENT_DIR"; fi

function reuse_ssh_agent() { 
  FOUND=0 
  # try to use existing ssh-agent 
  if [ -f "$SSH_AGENT_FILE" ]; then 
    F=$(cat "$1") 
    eval "$F"

    # kill extra ssh-agent 
    ps -s -u "$USER" | awk 'NR!=1{print $1, $4;}' | grep -E '^[0-9]+ /usr/bin/ssh-agent$' | \ 
      awk '{print $1}' | while read LINE; do 
      test "$LINE" -ne "$SSH_AGENT_PID" && kill "$LINE" 
      #echo "echo 'killed $LINE';" 
    done

    # find SSH_AGENT_PID process 
    FOUND=$(ps -s -u "$USER" | awk 'NR!=1{print $1, $4;}' | grep -E '^[0-9]+ /usr/bin/ssh-agent$' | \ 
      awk '{print $1}'| grep "$SSH_AGENT_PID" | wc -l) # should be 1 (header line, result line) 
  fi

  test "$FOUND" -eq 1 
}

reuse_ssh_agent "$SSH_AGENT_FILE" 
RET=$? 
if [ "$RET" -eq 0 ]; then 
  #echo "echo found: $SSH_AGENT_PID;" 
  cat "$SSH_AGENT_FILE" 
  echo "true" 
else 
  #echo "echo re-exec;" 
  ssh-agent | head -n 2 > "$SSH_AGENT_FILE" 
  reuse_ssh_agent "$SSH_AGENT_FILE" 
  #echo "echo 'and done $? ($SSH_AGENT_PID)';" 
  cat "$SSH_AGENT_FILE" 
  echo "false" # connect like: eval `lazy-ssh-agent` || ssh-add 
fi

psコマンドの出力まわりの扱いを変えてます。

  • msys-rsync

差分ファイル転送、便利ですよね。ちゃんとrsyncも提供されてます。

  • msys-mintty

image

MinTTY!これのAero Glass表示が使いたいがためにMinGW/MSYS環境を整えたといっても過言ではありません。いや、後で気づいたのですが、Puttyでも最近はAero Glass表示ができるようになったらしいですが。。

MsysGit

これはmingw-getコマンドで落ちてきません。MsysGitという別プロジェクトのようで、別途インストールする必要があります。どうしてこうなった。。こちらのGitBashというコンソールは使いにくいので、MSYSのMinTTYから使えるよう、MSYS環境側でパスを通しておいています。

Putty

「なんだよ結局Putty使うのかよ!」と怒られそうですが。うん、ルータやスイッチの設定とかでシリアルポートとる時に必要だから。。誰かMSYS環境だけでシリアルをとる方法をご存知の方、教えてください。そこでCygwinですよ!とか言われそうですが。。上でも述べましたが、最近のPuttyはAero Glass表示に対応しています

PowerShell

やっぱWindows使うならCUIの本命はPowerShellでしょう。Ctrl+Lとかが効かないのが辛いところですが、C#で書いたアセンブリとの親和性もよく、便利な筈です・・・・。すいません、あまり使ってません。。

 

以上、Cygwin捨ててもWindowsで幸せになれるよね、という一例として。

忙しくてとりあえず登録したものの放置していたApp Hubからメールが来ていました。Winodws Phone Marketplaceのアップデートに伴い、学生の身分証明プロセスが簡素化されたみたいです。折角だし端末unlockしてMango Beta化してみようかな。

Important Enhancement to App Hub Registration Process for Students

July 22, 2011

Now that the next release of the Windows Phone Marketplace App Hub has launched, we are reaching out to make you aware of a change to the registration process and how it may impact your account.

In the new release of App Hub, publisher identification for Student accounts happens in real-time during account registration. You no longer have to submit an application to trigger a separate publisher identity verification process.

Since you have not yet submitted an application, the next time you sign in to App Hub, you will notice your account will be reverted back to Step 1 of the registration process. All of the information you have previously provided will be pre-populated and you will be asked to follow the onscreen instructions to complete your account activation.

Once you’ve completed registration your account will be immediately activated and you can unlock your phone for in-device testing. This will greatly simplify the process of getting your account activated and, ultimately, your apps published to the Windows Phone Marketplace.

If you have any questions or concerns, please contact
mailto:apphub@microsoft.com
apphub@microsoft.com  
and we will be happy to assist you.

Best regards,

The Windows Phone Marketplace Team

Microsoft respects your privacy. Please read our online
http://privacy.microsoft.com/en-us/default.mspx
Privacy Statement .

Microsoft Corporation

One Microsoft Way

Redmond, WA 98052 USA

image最近VyattaでL2TP/IPsec VPNのアクセスコンセントレータをたてようとしていて嵌ったのでメモ。VyattaはPCルータを作るために様々なパッケージを集めたDebianベースのLinuxディストリビューションです。Tabによる補完の効くネットワーク機器ライクなCUI(vbash)とWebGUIを備えていて、Ubuntu Serverのような一般的なディストリベースでPCルータを構成するより手軽です。今回はこれをつかって、あるネットワークの管理用セグメントに入るためのVPNアクセスコンセントレータをたてようとしていました。WebGUIをガイドメッセージに従ってポチポチしていたらなんとなく動くものが出来て、こりゃ便利、と思っていたのですが、リモートアクセスするPCがNAT下にいると、うまく動かないという問題に直面。L2TP/IPsec VPNはIPsecで暗号化した通信を行うのですが、IPsecのパケットは、TCPやUDPではなく、IPsecとしてのパケットをIPの上に直接流すため、NATとは相性が悪いというのはよく知られた話。その対策として、IPsecのパケットをUDPで包む技術があり、NAT-Traversalというオプションを有効にしたから良い筈・・・と考えていたのですが、もう一つ指定するオプションがありました。
vpn->ipsec->nat-networksというオプション。これの指定を正しく設定してやらないと正しくNAT下で動きません。このオプションは、リモートのPCが居るかもしれないNATセグメントのレンジを指定するのであって、VPNを使って入りたいセグメントのレンジを書くところではありません。これを勘違いしていたために、丸1日潰しました。。つまり、

     nat-networks { 
         allowed-network 10.0.0.0/8 { 
             exclude <VPN先セグメントがPrivate Addressで被った場合、そのセグメント>  
         } 
         allowed-network 172.16.0.0/12 { 
         } 
         allowed-network 192.168.0.0/16 { 
         } 
     }

こんな感じでないとダメなんですね。。"cannot respond to ipsec sa request because no connection is known for…"というエラーメッセージが/var/log/messagesに出て困っている方は、試してみてください。

APR
3

roundcubeでWeb Mailer立ててみた。

Published:2011-04-03 16:50:31 UTC

この間、「メールサーバーの一つや二つ、自分で運用しないと!」的なことを言われたのをきっかけにメールサーバーをさくらVPS上に構築して移行しようとしている今日この頃です。まぁ、Google嫌いを公言しておきながらGMailに依存しているというのも、いい加減アレですしね。

で、世の中の定石に従ってPostfix+dovecotでメールサーバー(MTAとMRA)を立てているのですが、問題はメールクライアント(MUA)。手元のWindowsPC上で動かすメールクライアントは色々選択肢があるので良いのですが、問題はWebメールクライアント。やっぱりブラウザだけしかない環境でもメールは読みたいので。。。Webメールクライアントの代表的な実装としてはSquirrelMailがありますが、いい加減UIがボロくて使いたくないので、roundCubeというWebメールクライアントに手を出してみました。これ、結構イケてます。

image

ご覧の通り、Ajaxを活用したモダンなUIで、IMAPでメールを読めます。設定も設定ファイルを半自動生成するためのインストーラがあり、お手軽です。ややこしい要件や、大量のメールを扱う場合のことは分かりかねますが、自分のように、普段使っているMUAのバックアップ目的で使う分には十分すぎるアプリケーションです。なお、PHPで実装されており、MySQLやSQLiteなどのDBも必要とします。ご参考まで。

MAR
21

この間、Windows Serverをもっと勉強したいという考えから、家のサーバー環境のハイパバイザをVMware ESXiからWS2008R2 with Hyper-V2.0+SCVMM2008R2にリプレースして検証環境を作りました。それに合わせて、OpenVPN(ブリッジモード)をHyper-V上で作り直しました。ほんとはESXiからV2Vすればよかったのですが、OpenVPNを動かしていたVMから設定を抜き忘れたまま消してしまったので一から作りました。。

折角なので、Hyper-V上でOpenVPNを動かす場合の情報はネット上に転がってなさそうなので、Hyper-Vと関係ない部分も含めて、OpenVPNを動かす際の注意点をエントリにまとめてみます。

Hyper-Vの設定で気を付ける点

OpenVPNの入ったVMをHyper-V上で動かす場合、そのVMの仮想NICの設定を変更してやる必要があります。

Hyper-V Managerの場合SCVMM2008R2の場合

VMの仮想NICの中で、OpenVPNのクライアントからのフレームを通過させたいNICについては「MACアドレスのスプーフィングを有効にする」というチェックボックスをONにする必要があります。これがONになっていない場合、Hyper-Vの仮想スイッチは、仮想NICの接続されたポートにおいて、仮想NICについたMACアドレス以外を送信元にするフレームを廃棄します。そうした場合、OpenVPNのクライアントが送出したフレーム(TAP-Win32 AdapterのMACアドレスを持つ)が通らなくなってしまいます。ESXiでいうところの、仮想スイッチのPromiscuous Mode(無差別モード)の設定と同じですね。これさえ気をつければHyper-Vの設定は多分大丈夫かと思います。

Hyper-V以外でOpenVPNの設定で気を付ける点

基本的に設定はネット上に色々載っているものに従って行えば動くかとおもいます。自分の環境でのconfig例は立った!OpenVPNが立った! – SharpLab.というエントリに載せています。ただ、そうは言っても、色々間違えやすいのも事実。注意点を一点だけ。server.confの中で、dev tapあるいはdev tunと設定しろ、といった具合にサンプルがなっている部分があります。ここで、よくコメントを読まないといけないのですが、OpenVPNを立ち上げる前に事前に作ったtapインターフェイスを使う場合は、その名前"tap0"などを明示的に指定してやる必要があります。dev tap0のようにです。こうしないと、新しくtap1インターフェイスなどが作られ、起動スクリプトの中でブリッジさせたtapインターフェイスのほうにはトラフィックが流れずVPNがセッションは張れているのに通信できない、ということになってしまいます。

HP ESXi Offline Bundle for VMware ESXiを当てることで、ESXi側からハードウェアの詳細なモニタリングが出来るようになります。例えば、温度センサであり、ストレージの状態(構成しているディスクやバッテリの状態)をモニタリングできるようになります。HP ESXi Offline Bundle for VMware ESXiの当て方については、vCenter Update Managerいいね。というエントリの「ESXiホストへのサーバーベンダ提供独自パッチの適用」という項目を参照ください。

image

これが追加した状態でvCenterにvSphere Clientで接続した時のHeadware Statusの表示。ストレージの状態とかがちゃんと出ています。6本のディスクでRAID5を組んでおり、Disk6がスペア、バッテリーバックアップ用のバッテリも生きていることがわかります。いやーこういう風に整然と出ると心が躍りますね。

JAN
10

vCenter Update Managerいいね。

Published:2011-01-10 19:16:04 UTC

vSphere AdvancedとvCenterのライセンスを入手できたので、某所で預からせていただいているESXi環境をアップグレードして、ちまちまと暇を見つけては環境構築をしている今日この頃ですが、今日はvCenter Update Managerの話。vCenter Update Managerは、VMware ESXiやvCenter Server、それにゲストOSのパッチレベルの管理をできるソフトウェア。vCenter Serverのインストーラに紛れていて、全くその存在を認識していなかったのですが、これまでvSphere Host Update Utilityで行っていたESXiのアップデートやパッチ当てを出来るものと聞き、使い始めてみました。

インストール

vCenter Update Managerですが、サーバーコンポーネントとvSphere Clientに対するプラグインという構成で出来ています。

image
サーバーコンポーネントのインストーラは、vCenter ServerのインストールCDのISOイメージのAutoRunで立ち上がるDialogからvCenter Update Managerという項目を選択することで起動できます。vCenter Serverと同じサーバーにでも突っ込んでおくと良いのではないでしょうか。

image
vSphere Clientのプラグインは、vSphere Clientのプラグインマネージャからインストーラのダウンロードと起動を行えます。

image
こんな感じ。

インストールが済むと、vSphere ClientはこのようにホストのページにUpdate Managerというタブが追加されたり、
image

「ソリューション及びアプリケーション」の下に「Update Manager」という項目が追加されたりします。

image

ESXiホストへのパッチの選択

image

ホスト毎のUpdate Managerのタブの、「添付」というリンクから、適用したいパッチレベルを選択できます。

ESXiホストへのパッチの適用

image

修正というボタンを押せば、パッチを適用できます。お手軽!なお、ホスト毎のUpdate Managerタブではなく、フォルダ毎、クラスタ毎、DataCenter毎のタブから行えば、多数のホストに対してまとめてパッチ適用をできるようです。小規模環境なのでそのようなことはしたことはありませんが。。

ESXiホストへのサーバーベンダ提供独自パッチの適用

image

VMwareが提供しているパッチ以外に、サーバーベンダが提供していてVMwareのレポジトリに載っていないパッチ(正確にはHost Extention)というものが存在し、それを当てることでESXi側から、ハードウェアのステータスがモニタリング出来るようになったりするものがあります。例えば、HPのHost Extentionがあり、これをインストールすることで、HP CIM Providerとして働いてくれます。HPのInstall Instructionsを見ると、vSphere CLIのスクリプトを使えとありますが、vCenter Update Managerを使える環境では、vCenter Update Managerを使った方が便利です。これの追加は、「ソリューション及びアプリケーション」→「Update Manager」→「パッチ レポジトリ」→「パッチのインポート」からパッケージの追加を行い、そのパッケージを含んだベースラインを新たに構成し(その際ベースラインのタイプをHost Extentionとすること!)、そのベースラインを対象のホストに対して添付し適用するという流れで実現できます。

JAN
1

2011年になりましたね。あけましておめでとうございます。

新年の抱負を語る前に、まずは去年の反省から。去年はすっかりBlogを書かない一年となってしまいました。一年でたったの7本だけ。反省しております。何をしていたかというと、基本的にプログラミングはせず、ネットワークとか、インフラ周りの勉強を進めた一年でした。バイトでL2インテリジェントスイッチやアクセスポイント、VMware vSphere Advancedの導入作業を担当したりだとか、そんなことをしておりました。ちょっとは知識がついたのか一応IPAの応用情報とネットワークスペシャリスト試験に合格したりできました。まぁそのせいで、Windows Phone 7の発売開始とかの波に乗れなかったのは心残りではあります。

そして今年。今年はまずは就活ですね。学部で卒業してしまっていいのか、という悩みは残っていますが、去年少し就活をしていた中で、インターンとか行かせていただき、今の自分でも社会のどこかには自分を受け入れてくれる場所があるのではないか、という気もしてきて、とりあえずはしっかり就活してみようと考えています。そして就活と並行して、卒論も進めていかなければなりません。自分にはどうにも出来ないところでかなり迷走している感はありますが、中途半端なものにはしたくない(しっかりやる or 完全に手を抜く)と考えています。頑張ります。