Google Chrome / Mozilla Firefox が立ち上がらない

ECCS2012のページです。現システムには当てはまりません。

質問

Google Chrome を起動しようとしてもすぐ終了してしまう。

回答

まずはターミナルで、

rm -f ~/Library/Application\ Support/Google/Chrome/SingletonLock

を実行してください。次に、

perl fixsqlite.pl ~/Library/Application\ Support/Google/Chrome/Default/

を実行してください (要するにSQLiteファイルをすべて探しコピーしています)。

/mnt/ECC/bin/ がマウントされていないか、パスが通っていない場合は、以下を fixsqlite.pl として保存し、perlコマンド(上のコマンドの手前に"perl"と半角スペースを入れる)で実行してください。
こちらにfixsqlite.plを入れたzipファイルを用意しました。

#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use File::Copy 'cp';

my @files=();
sub getfiles{
    if(! -d $File::Find::name){push(@files,$File::Find::name);}
}

my $dir=".";
if($ARGV[0]){$dir=$ARGV[0];}
find(\&getfiles, $dir);
foreach my $file(@files){
    open(my $fh,"<",$file);
    sysread($fh,my $head,15);
    close($fh);
    if($head eq "SQLite format 3"){
        cp($file,$file.".orig");
        unlink($file); #in this way we avoid file lock
        system(qq(sqlite3 "$file.orig" .dump | sqlite3 "$file"));
        unlink($file.".orig");
        print $file."\n";
    }
}

もしくは、https://www.sodan.ecc.u-tokyo.ac.jp/fixfcntl.rbを用意し

ruby fixfcntl.rb ~/Library/Application\ Support/Google/Chrome/Default/

を実行してください。こちらは要コピーの判定方法がより正確です(しかし、テストが「ほぼ」完了の状態です)。

質問

Mozilla Firefox が立ち上がらない。

回答

もし「すでに別のFirefoxを開いています。同時に複数のFirefoxを開くことはできません」というダイアログが出て開けない場合は、以下の通りコマンドを打ち込んで頂ければ削除できます。(参考)

cd ~/Library/Application\ Support/Firefox/Profiles/
ls
cd ********.default
rm .parentlock

(但しここで***には、lsコマンドで確認して出てきた文字列を入れます)

また、強制シャットダウンされデータベースが破損した場合は、

fixsqlite.pl ~/Library/Application\ Support/Firefox/Profiles/*.default/

とすればいいようです。

参考:Firefoxでエラーメッセージが出て起動できない (ECCS FAQ)

備考

  • http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/fcntl.2.html によると、レコードのロックは、 F_UNLCK により明示的に削除されるだけでなく、プロセスが終了したときや、ロックが適用されているファイルを参照しているファイルディスクリプタのいずれかがクローズされた場合にも解放される。 このロックの解放は自動的に行われる。
  • ただしNFS上のファイルをロックした場合、クライアント側の電源がいきなり切れたりカーネルパニックを起こした場合はロックの解放が行えない。
  • これがこの事象の原因である。たとえば毎日深夜に NFS デーモンの再起動を行う対策が考えられる(その時間にリモートアクセスを使っていた場合に問題が出るが)。
  • sshfs でも同様の不具合が出る可能性があるが、検証はしたくないです…。
  • なお、Google Chromeをこの方法で復帰させた場合、「プロフィールを開くことができませんでした。」といったダイアログが出てくる事があります。その場合はプロフィールを初期化するしかありません。
    rm -rf ~/Library/Application Support/Google/Chrome/Default

    をターミナルに入力してください。(参考)

追記(2015/10/19)

NFS デーモンの再起動を行う予定はないというアナウンスがありました。この問題が発生した場合の根本的な対処法は存在しません。ここに上げている方法で不具合はほぼ直りますが、直る保証はできません。強制シャットダウンが発生しないよう、閉館時間になったらログアウトしましょう。

公開日
更新日
編集者
Goto
タグ