WindowsのGitで異常終了するようになったら...一時ファイルの削除と再起動でOK!
はじめに
今日、一日ぶりにWindowsのEmacsからmagitを使ってmagit-refresh(magit-statusの画面でgを押す)すると「sh.exeが異常終了しました」というダイアログがでてmagit-refreshが失敗するようになりましたorz
なにか変ったことといえば、昨日、スリープからの復帰に失敗してブルーバックになりました。あぁ、スリープに失敗しまくっているので、いつかはこうなるよな~と思いつつ、対処方法を探します。(一瞬、Windowsのリフレッシュが頭をよぎりましたが、アプリケーションのセットアップなどに数日かかるため恐ろしくてできません...)
作業ログ
インターネットで「sh.exe.stackdump」のキーワードを検索して、次のブログの記事を見つけました。
http://d.hatena.ne.jp/miau/20131229/1388301913 より
git のコマンドを叩くと
0 [main] sh.exe" 6768 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION 1620 [main] sh.exe" 6768 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump
こんなエラーが出る状態になってしまったので、対策方法のメモ。ちなみに試したバージョンは Git-1.8.4-preview20130916.exe です。
まさにこれですね。
上記の記事で紹介されている「Process monitor」は http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx からダウンロードできます。
Process monitorの操作説明を読んで、「Process Nameにsh.exeを含む」でフィルタリングすると、たしかに %TEMP% へのアクセス時に異常終了しているようですね。
じゃあ、あとは一時ファイルを削除すればよさそうです。Windows 7までは「ディスク クリーンアップ」でできたようなのですが、Windows 8では違うようです。
http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=013968 より
Windows 8.1の場合
「検索」ボックスに「不要」と入力し、表示された一覧から「不要なファイルの削除によるディスク領域の解放」をクリックして、手順5に進みます。
ふむふむ。
「不要なファイルの削除によるディスク領域の解放」で、一時ファイルのみをチェックして「OK」ボタンを押すと一時ファイルが削除されます。
あら、それでもまだmagit-refreshが失敗します。で、PC自体を再起動するとmagit-refreshが成功するようになりましたとさ。
まとめ
magit-refreshに失敗するようになったら、「不要なファイルの削除によるディスク領域の解放」で一時ファイルを削除してから再起動すればOK!
「Process Monitor」を知ることができたのはよかったね。
Surface Pro 2/Windows 8.1から、Surface Pro 3/Windows 8.1へのデータの移行 #SurfaceJP
基本的には http://takaokouji.hatenablog.com/entry/2013/12/30/213104 に従って作業します。違う点だけを以下に挙げますね。
- 当該Emacs (gnupackのemacs-24.3-20130503.exe) が見つけられませんでした。そのため、Surface Pro 2の当該ディレクトリ (C:\emacs-24.3-20130503/) をそのままコピーしました。
- ドキュメントもコピーしました。
- VirtualBoxのVMはめっちゃファイルが大きいので今後どうするか考えないと...
- 忘れていたけど、Autohotkey_LがC:\toolsにありますので、それを実行しないとね♪
Surface pro 3の感想
と、ここまでの作業でのSurface Pro 3の使用感を書いておきます。
良い点
- 軽い
- 薄い
- かっこいい!
- 画面が広い
- Type Cover 3のタッチパッドが使いやすくなった。クリックできる。以前のものは右クリックができないに等しかったのですが、これは 右クリック は誤認識はしませんね。
- すげぇ~!10分以上時間がかかっていたsmalruby-editorの自動テストが3分で終わっている!!!Core i7はすごいですね♪
悪い点
- Windows UpdateをするまではまともにSurface Penが使えませんでした。Surface Penの上部のボタンを2回押してもスクリーンショットが撮影できず、初期不良かと思ってとても焦りました。
- 発熱がすごい。これ、持てないじゃん。もしかして、初期不良!?
- Type Cover 3を浮かすようにするとキー入力がやりずらい。
- 親指の腹の部分がType Cover 3のタッチパッドに触れてしまい、文字の入力中に誤ってクリックが発生してしまう。タップが作動するまでの待ち時間を長く設定しても解決できなかった orz
Surfaceグループの紹介
Surface Pro 2/Windows 8.1で、スリープから復帰しない人のためのとりあえずの解決方法と、これからやるべきたったひとつのこと #SurfaceJP (追記:1/22時点で解決したかも?)
(1/22追記)本日、ファームウェアの更新がありました。こちらの記事にもあるように下記の問題が解決しているかもしれません。私の手元でも調査して問題がなければその旨を追記する予定です。
Twitterの#SurfaceJPでもちらほら話題に挙がっているようですが、Surface Pro 2ではスリープから復帰しません。後述するようにMicrosftからの公式な発表はありませんし、Microsoftのサポートでもガン無視されるんですけど、スリープから復帰しないのは事実なんですよね。
スリープから復帰しないってどういうこと?
「はぁ、俺のSurface Pro 2はスリープから復帰するけど、なに言ってんの?」って人も多いと思いますが、いくつかの条件がそろうとあなたのSurface Pro 2もスリープから復帰しなくなるでしょう。その条件とは以下のようなものです。
- 電源プランがバランスか省電力
- なにかしらのハードウェアを接続している(私の場合は純正のドッキングステーションとマルチタッチ対応ディスプレイです)
- スリープしてから1時間以上経過
これだけで、あら不思議!?スリープから復帰しなくなります orz
また、復帰しないといっても起動しないのではありません。通常の再起動はします。当然、スリープしたときの状態を完全に破棄してしまいます。レジストリや保存前のアプリケーションのファイルも破棄するのです。
それでも、「はぁ、俺のSurface Pro 2はスリープから復帰するけど、なに言ってんの?」って人がいると思いますが、それは運がいいだけです。10回に1回くらいの割合で復帰しないんですよ。1000回に1回なら、たまたまだから仕方がないとも思えますが 10回に1回はありえんでしょ!
スリープ前の状態によっては、復帰に失敗したせいで、すべてのファイルが読めなくなるかもしれないんですよ、もうスリープなんて怖くてできなくなりますよ。
で、とりあえずの解決方法
実はこの現象、スリープではなく「休止状態」に問題があるのです。Surface Pro 2/Windows 8.1は、なにかの条件がそろうと休止状態から復帰しないようなのです。
「えっ、俺は休止状態になんてしてないけど?」って思うかもしれませんが、Surface Pro 2の初期設定では、スリープ後に一定時間経過すると休止状態になります。バッテリ駆動時は60分、電源接続時は180分です。バッテリでの稼働時間を伸ばすための機能だと思いますが、この設定のせいで、スリープから一定時間経過する前にスリープから起こしてやらないと復帰しなくなっちゃうという残念なことになっています。
なので、それらの設定を変更してどちらの場合も休止状態にならないようにすればOKです。(いや、全然OKじゃないんだけど...) また、休止状態にしない場合は、スリープ中もどんどんバッテリを消費していき一晩で電源が切れてしまうこともあるでしょう。 寝る前には必ず電源に接続するようにしましょう!
設定方法は以下のような感じです。私は電源に接続しているときだけSurface Pro 2にハードウェアを接続していますので、バッテリ駆動の設定は変更せず、電源に接続のみ0(なし)に設定しています。
これからやるべきたったひとつのこと
さて、スリープから復帰しない不具合のために、毎日電源に接続しないといけないなんて残念ですよね。そして、 これはいつかきっと修正されるはずなんて思っているなら大間違いです!
私がこの問題についてSurfaceのサポート窓口に連絡したところ、とても親切に対応してくださり、再現確認もしてくださったのですが、残念ながらSurface Pro 2単体では再現しませんでした。私の手元でもSurface Pro 2単体では再現しないため、これ以上サポート窓口に問い合わせても無駄だと思いました。
で、そのときに「このような問題はあなたからしか報告されていません」と言われたのです!
私はSurfaceのサポート窓口に連絡する前に、インターネットで調べたところ少なくとも2件はスリープから復帰しないという事例がありました(ごめんなさい、情報元が不明です)。今調べてみると結構事例がありそうです - surface pro スリープから復帰しない/Google
みんながインターネットで騒いでいてもMicrosoftは見ていないかもしれないんですよ!!現時点(1/18)でもこの問題に対応していないことからも、Microsftからの公式な発表はありませんし、Microsoftのサポートでもガン無視されている事象なんですよ。
だから、この問題で困っているのであれば、あなたがこれからやるべきたったひとつのことは、 Contact Us マイクロソフトへのご意見・ご要望 にアクセスしてこの問題が発生していることを報告することです。 もしかすると、私が報告した1件しかカウントされていないかもしれません。もしそうならば対応されなくても当然ですよね。
ぜひみなさんの声を Microsoft に届けましょう。そうすればいつかきっとこの問題が解決されるはずです!
Surfaceグループの紹介
Surface Pro/Windows 8.1から、Surface Pro 2/Windows 8.1へのデータの移行。 #SurfaceJP
ついにSurface Pro 2を手に入れたのですが、Surface Pro/Windows 8.1からデータを移行する手段がないことを知りました orz
Windows 8→Windows 8.1はデータを転送できるのですが、Windows 8.1→Windows 8.1はできないとのこと。う~ん、いまだにファイルの転送をユーザに強いるなんてありえないと思いつつも、愚痴を言っててもしょうがありません、やるしかないです。
クラウド(SkyDrive)経由は、遅すぎるのと、ファイルのバイト列以外の情報(権限とか)が消えてしまうので別の方法にします。
そこで、いったんMicro SDにファイルをコピーすることにしました。
また、Cygwinの操作配下のものはCygwinのtarで圧縮することにしました。これなら権限が適切に保持されるはず、と思ったら tar コマンドで展開すると mklink コマンドで作成したリンクの権限が Administrator からユーザに変わってしまうことがわかりました。なかなか難しい。それに、どうやって移行先の Surface Pro 2 で tar で圧縮したファイルを展開すればいいのでしょう(笑)Cygwinがインストールされていませんからね。困ったな~。
とりあえず、以前 Surface Pro を交換修理したときの手順書を元に手作業で移行することにしました。
以下はその作業記録です。
Emacs: gnupack 24.3-20130503
Emacsさえ動作すれば、あとはどうとでもなる。
- gnupackからemacs-24.3-20130503.exeをダウンロード・インストール。
- 展開先は「C:\」
- SkyDrive上のバックアップからdot.emacs.dなどを配置。
- 以下、管理者権限のコマンドプロンプトで実行。またSkyDrive直下のdotfilesにバックアップを格納していることが前提。
C:\Users\kouji>mklink /d .emacs.d .\SkyDrive\dotfiles\dot.emacs.d .emacs.d <<===>> .\SkyDrive\dotfiles\dot.emacs.d のシンボリック リンクが作成されました C:\Users\kouji>mklink .gitignore .\SkyDrive\dotfiles\dot.gitignore .gitignore <<===>> .\SkyDrive\dotfiles\dot.gitignore のシンボリック リンクが作成されました C:\Users\kouji>mklink .gitconfig .\SkyDrive\dotfiles\dot.gitconfig .gitconfig <<===>> .\SkyDrive\dotfiles\dot.gitconfig のシンボリック リンクが作成されました C:\Users\kouji>mklink .bashrc .\SkyDrive\dotfiles\dot.bashrc .bashrc <<===>> .\SkyDrive\dotfiles\dot.bashrc のシンボリック リンクが作成されました C:\Users\kouji>mklink .profile .\SkyDrive\dotfiles\dot.profile .profile <<===>> .\SkyDrive\dotfiles\dot.profile のシンボリック リンクが作成されました C:\Users\kouji>mklink .gemrc .\SkyDrive\dotfiles\dot.gemrc .gemrc <<===>> .\SkyDrive\dotfiles\dot.gemrc のシンボリック リンクが作成されました C:\Users\kouji>mklink .inputrc .\SkyDrive\dotfiles\dot.inputrc .inputrc <<===>> .\SkyDrive\dotfiles\dot.inputrc のシンボリック リンクが作成されました C:\Users\kouji>mklink .minttyrc .\SkyDrive\dotfiles\dot.minttyrc .minttyrc <<===>> .\SkyDrive\dotfiles\dot.minttyrc のシンボリック リンクが作成されました C:\Users\kouji>mklink .ruby-version .\SkyDrive\dotfiles\dot.ruby-version .ruby-version <<===>> .\SkyDrive\dotfiles\dot.ruby-version のシンボリック リンクが作成されました C:\Users\kouji>mklink .screenrc .\SkyDrive\dotfiles\dot.screenrc .screenrc <<===>> .\SkyDrive\dotfiles\dot.screenrc のシンボリック リンクが作成されました C:\Users\kouji>mklink .zshrc .\SkyDrive\dotfiles\dot.zshrc .zshrc <<===>> .\SkyDrive\dotfiles\dot.zshrc のシンボリック リンクが作成されました
いろいろなソフトウェア
- Windowsストアアプリのインストール
- iTunes
- 同時にQuickTimeをインストール
- 2013/12/29現在、iCloudコントロールをインストールすると休止状態から復帰しなくなることが分かったのでここではインストールしない
- OutlookにGmailのアカウントを設定
- Outlookのオプションは引き継がないようだ。Surface ProのOutlookのオプションを見ながら手作業で移行
- 7-Zip
- 7z920-x64.msi をインストール
- プリンタ Cannon MP640 のインストール
- mp68-win-mp640-1_05-ej.exe
- Skitchのインストール
- skitchsetup-2.3.0.10.exe
- Oracle VirtualBoxのインストール
- VirtualBox-4.3.2-90405-Win.exe
- Firefoxのインストール
- Google Chromeのインストール
Cygwin関連
- Surface ProのCygwinのキャッシュディレクトリC:\Users\kouji\cacheを移行
- Cygwinのパッケージのダウンロード時間を大幅に短縮できる
- Cygwin
- setup-x86_64.exe を C:\cygwin64\bin に移動
- ついでにスタートにピン止めしておく
- /etc/passwordのkoujiを以下のように修正(秘密っぽいところは伏せています)。修正後にCygwinのシェルを再起動。
(修正前) kouji:unused:1001:513:kouji takao,U-kouji-surface2\kouji,****:/home/kouji:/bin/bash (修正後) kouji:unused:1001:545:kouji takao,U-kouji-surface2\kouji,****:/cygdrive/c/Users/kouji:/bin/bash
データの移行
- ~/work以下
- 私は C:\Users\kouji/work 以下に作業環境一式を配置していますので、移行元の Surface Pro にて work 以下を
tar cpzf work.tar.gz work
で圧縮して、移行先の Surface Pro 2 にてtar xpzf work.tar.gz
で展開しました。
- 私は C:\Users\kouji/work 以下に作業環境一式を配置していますので、移行元の Surface Pro にて work 以下を
- 単純にコピーしたもの
- \tools
- \Users\kouji.VirtualBox
- \Users\kouji.bash_history
- \Users\kouji.bundle
- \Users\kouji.gem
- \Users\kouji.heroku
- \Users\kouji.lesshst
- \Users\kouji.relish
- \Users\kouji.s7
- \Users\kouji.smalruby-editor
- \Users\kouji.ssh
- \Users\kouji.subversion
- \Users\kouji.travis
- \Users\kouji.uru
- \Users\kouji\local
- \Users\kouji\VirtualBox VMs
- \Users\kouji\Music\iTunes
- \Users\kouji.sshはCygwinシェルで権限を変更
chgrp -R Users .ssh cd .ssh chmod 600 authorized_keys config id_rsa id_rsa.new known_hosts
Ruby関連
基本的に work 配下に Ruby 処理系があるため移行は完了しているので、こまごまとした設定を行う。
cd \ mklink /d Ruby \Users\kouji\work\uru\versions\ruby-2.0.0-p353-i386-mingw32\bin
- 以下、管理者権限のPowerShellで実行
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
PowerShellの設定
- レイアウト - 画面バッファーのサイズ - 幅: 80
- レイアウト - ウィンドウのサイズ - 幅: 80
- レイアウト - ウィンドウの位置 - システム設定を使う: チェック
- 画面の色 - 画面の背景: 黒
Gitのインストール
Heroku Toolbeltのインストール
- heroku-toolbelt.exe
MySQLのインストール
- mysql-installer-community-5.6.14.0.exe
node.jsのインストール
インストール後はPower Shellを再起動させること
とりあえずはこんなところです。
Surfaceグループの紹介
我が家にも、Surface Pro 2がやってきた! #SurfaceJP
(「我が家にも、○○がやってきた!」シリーズです)
財政難から一転、さまざまな経済効果によって、我が家にもSurface Pro 2 512GBがやってきました。あらためて、ハードウェアとしては最高の出来ですね!(ただ、8才の息子からすると、MacBook Air 11インチのほうがかっこいいらしいけど...)
今回の開封の儀は動画にしました。
初期設定は簡単ですね♪困ったのはコンピュータ名くらいで、細かい設定はMicrosoftアカウント経由でSurface Proの設定をPro 2に引き継いでくれたようです。ただし、Windows 8.1にはTime Machine相当の機能はありませんので、これから地道にデータを移動する必要があります。
Surface Pro 2にはWindows 8.1がプリインストールされているため、Windows 8.1へのアップデートは必要ありません。また、恒例のWindows Updateはたったの1時間です。
「さぁ、これでSurface Pro 2が使えるぞ!」なんて、思ってはいけません(笑)
次は初期不良に当たってしまっていないかの確認です。Surface Proのときの経験から おおよそ3割はハードウェアかソフトウェアの問題がある と感じています。
私は次のようなチェックをしています。まだ途中ですが、見事、問題にぶち当たりました!!
- [確認済み]10回以上、ふっと上に持ち上げる
- Surface Proではこれだけで再起動することがあり、本体を交換してもらいました。
- [確認済み]スリープ→休止状態→復帰を繰り返す
- 問題発生!!
- 3割程度の確率で復帰せずに通常の再起動になりました。これはWindows 8.1の問題でかつ、サポートに電話すると「初期化してください」「そのようなハードウェアを接続していると保証外です」とかなんとか言われて無視されるため、後述する回避策をとります。
- [未確認]Bluetooth機器を接続、スリープ→復帰→Bluetooth機器の動作確認
- 現在ではWindows Updateによって解消されていますが、Surface Pro/Windows 8.1の初期段階では復帰後にBluetooth機器が使えませんでした。
- [未確認]Bluetooth機器を接続、スリープ→休止状態→復帰→Bluetooth機器の動作確認
- 現在ではWindows Updateによって解消されていますが、Surface Pro/Windows 8.1の初期段階では復帰後にBluetooth機器が使えませんでした。
- [未確認]Bluetooth機器を接続して10分以上動作確認
- 接続が切れることがあるようです。
- [未確認]タイプカバー2を装着して、カバーを閉じてスリープ→復帰→タイプカバー2の動作確認
- Windows Updateによって、復帰後、しばらくしないとタイプカバー2が使えないように改悪されました。このことから今後より改悪されることが予想されるためチェックしています。
- [未確認]タイプカバー2を装着して、カバーを閉じてスリープ→休止状態→復帰→タイプカバー2の動作確認
- Windows Updateによって、復帰後、しばらくしないとタイプカバー2が使えないように改悪されました。このことから今後より改悪されることが予想されるためチェックしています。
- [未確認]チャームを出したり消したりといったエッジの動作確認を行う
- タッチパネルの異常によって右上部の反応しないケースがあったとのことです。
スリープ→一定時間経過→休止状態→復帰失敗→通常再起動によってスリープ前の情報消失の回避策
私はSurface Pro 2に次の機器を接続しています。
この状態だと、スリープ→一定時間経過→休止状態→復帰失敗→通常再起動によってスリープ前の情報が消失してしまいます。 これは10回のうち3回ほど発生しました。3割の確率で正常にシャットダウンしないなんて怖すぎます。ファイルシステムが壊れてディスクが読めなくなるかもしれません。
Surface Pro 2の初期設定では、スリープ後に一定時間経過すると休止状態になります。バッテリ駆動時は60分、電源接続時は180分です。 それらの設定を変更してどちらの場合も休止状態にならないようにすればOKです。(いや、全然OKじゃないんだけど...) 休止状態にしない場合は、スリープ中もどんどんバッテリを消費していき一晩で電源が切れてしまうこともあるでしょう。寝る前には必ず電源に接続するようにしましょう。
と、ここまで書いてなんか悲しくなりました。
この事象は毎回発生するわけではないですし、Microsoft製品以外のBDドライブ、液晶モニタを接続している場合はMicrosoft(の日本法人)はユーザ側の問題だということで対応しないでしょうね。確実に再現する方法が見つかればいいのですが、それをユーザに求めるサポートってどうなのでしょうね?せめて、レドモンドに休止状態に問題がある可能性があることだけでも伝えてもらえるといいのですが...
Surfaceグループの紹介
Windows 8.1で、複数のRubyを切り替えて使いたいならuruがいいよ!(残念ながらpikはオワコンです) #RubyJP
Error when running pik in Powershell より
@devert and @chiefy I will recommend you use uru instead:
https://bitbucket.org/jonforums/uru
While it doesn't install the versions of Ruby, it works much better than Pik.
Considering I haven't had time to work on pik over the last year or so, I think will be better option.
なんと、 pik
はオワコンでしたか...。誰しも暇な時もあれば忙しいときもあり、忙しければOSSのメンテナンスはできなくなるもの。これは仕方がありませんね。
ということで、上記で紹介されている uru
に乗り換えました。
Unleash Ruby に書いてある通りにすればあっさりインストールが完了します。uru
はGO言語で実装されているのですが、ソースコードをざっと見た限り簡潔な記述ができる言語ですね。しかもWindows、Mac、Linuxのバイナリをコンパイルできるというね。すばらしい!
そりゃ、HerokuもRubyからGOにゴーサイン出しますわ。ゴーサイン。ゴー...
uruとpikの比較
せっかくなので pik
とのコマンドの比較をまとめておきます。
- uruやpik自体のインストール
- uru:
C:\tools
の作成。ダウンロード・解凍したuru_rt.exe
をそのディレクトリにコピーする。環境変数PathにC:\tools
を追加する。 - pik: インストーラ
- uru:
- Ruby処理系の登録
- uru:
uru admin add <DIR> [--tag <名前>]
- pik:
pik add <DIR>
- uru:
- Ruby処理系の一覧
- uru:
uru ls
- pik:
pik list
- uru:
- Ruby処理系の切り替え
- uru:
uru <名前>
- pik:
pik use <名前>
- uru:
- デフォルトのRuby処理系の指定
- uru: なし
- pik:
pik use <名前> --default
- Ruby処理系のインストール
- uru: なし
- pik:
pik install <名前>
。ただし、古いRubyにしか対応できていない。
uru
は PowerShell
で使えるのがいいですね。ただ、 PowerShell
の権限を変更しないといけませんが... 参考: about_Execution_Policies
「Ruby on Rails」「プログラミング初心者」のはてなグループの紹介
Ruby on Rails Ruby on Rails や、プログラミング初心者 プログラミング初心者 のはてなグループに参加してみませんか? みなさんも気軽にご参加ください!!
Windows 8.1で、Rails 4.0.1環境 (MySQL) を構築する (その2) #RubyJP
昨日の記事 の修正です。
mysql2のコンパイル済みバージョンはRuby 1.8系と1.9系のみしか提供されていません。2.0系は自前でコンパイルする必要があります。ということで、Ruby 2.0 (MinGW) で mysql2 が動かない を参考にして、DevKitをインストールしたRuby 2.0.0-p246の用意ができたら、コマンドプロンプトで以下を実行します。なお、記事に従って mysql-connector-c-noinstall-6.0.2-win32.zip
は C:\
に展開しています。
gem install mysql2 -- --with-mysql-lib="C:/mysql-connector-c-noinstall-6.0.2-win32/lib" --with-mysql-include="C:/mysql-connector-c-noinstall-6.0.2-win32/include"
以下、想定している実行結果です。
This could take a while... Successfully installed mysql2-0.3.14 1 gem installed
これでmysql2がインストールできました。 そのほかにも フリーエンジニアライフ でいろいろ紹介されているので問題になったときに作業するつもりです。
「Ruby on Rails」「プログラミング初心者」のはてなグループの紹介
Ruby on Rails Ruby on Rails や、プログラミング初心者 プログラミング初心者 のはてなグループに参加してみませんか? みなさんも気軽にご参加ください!!