読者です 読者をやめる 読者になる 読者になる

Gitbucket復旧

Gitbucketが起動しなくなった。
最近メモリ不足で強制的にkillしていたりしたので、その影響だろうか...

org.h2.jdbc.JdbcSQLException: レコード "[3196] stream data key:1416407 pos:11 remaining:0" を読み込み中にファイルの破損を検出しました。可能な解決策: リカバリツールを使用してください

dbのリカバリを試みる
http://piggydb.jp/d/336:突然の電源断などでデータベースが壊れた場合

h2*.jarは、gitbucket.warの中にある。
Jettyを使っている場合は/home/gitbucket/.gitbucket/tmp/webapp/WEB-INF/lib/ 直下に展開されている。

cd /home/gitbucket/.gitbucket
java -cp /home/gitbucket/.gitbucket/tmp/webapp/WEB-INF/lib/h2-1.4.180.jar org.h2.tools.Recover

data.h2.sqlができる。

java -cp /home/gitbucket/.gitbucket/tmp/webapp/WEB-INF/lib/h2-1.4.180.jar org.h2.tools.RunScript -url jdbc:h2:./data -user sa -script data.h2.sql -showResults

sqlファイルを元にDBを一から構築。エラーが出る。

CREATE TABLE O_19(C0 VARCHAR, C1 VARCHAR, C2 VARCHAR, C3 CLOB);
【SQLの中身】 Exception in thread "main" org.h2.jdbc.JdbcSQLException: 一般エラー: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException"; SQL statement:

削って再度流してみる。
だめだー。

どうやらREAD_CLOB_DBとある行が軒並みアウト。
全部削ってみる。
いけた。


data.mv.dbというファイルが生成される。元のファイル名と違うけどリネームしてOKか...?

mv data.mv.db data.h2.db

起動してみる。
だめー

2014-10-16 13:49:00.541:WARN:oejw.WebAppContext:Failed startup of context o.e.j.w.WebAppContext{/,file:/home/gitbucket/.gitbucket/tmp/webapp/},file:/usr/lib/gitbucket/gitbucket.war
org.h2.jdbc.JdbcSQLException: ファイル "/home/gitbucket/.gitbucket/data.h2.db" は、未サポートのバージョンか、不正なファイルヘッダを持つデータベースファイルです|Unsupported database file version or invalid file header in file "/home/gitbucket/.gitbucket/data.h2.db" [90048-180]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
        at org.h2.message.DbException.get(DbException.java:179)
        at org.h2.message.DbException.get(DbException.java:155)
        at org.h2.store.FileStore.init(FileStore.java:195)
        at org.h2.engine.Database.openFile(Database.java:527)
        at org.h2.store.PageStore.openExisting(PageStore.java:328)
        at org.h2.store.PageStore.open(PageStore.java:288)
        at org.h2.engine.Database.getPageStore(Database.java:2382)
        at org.h2.engine.Database.open(Database.java:663)
        at org.h2.engine.Database.openDatabase(Database.java:263)
        at org.h2.engine.Database.<init>(Database.java:257)
        at org.h2.engine.Engine.openSession(Engine.java:60)
        at org.h2.engine.Engine.openSession(Engine.java:167)
        at org.h2.engine.Engine.createSessionAndValidate(Engine.java:145)
        at org.h2.engine.Engine.createSession(Engine.java:128)
        at org.h2.engine.Engine.createSession(Engine.java:26)
        at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:347)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92)
        at org.h2.Driver.connect(Driver.java:72)
        at java.sql.DriverManager.getConnection(DriverManager.java:571)
        at java.sql.DriverManager.getConnection(DriverManager.java:215)
        at servlet.AutoUpdateListener.getConnection(AutoUpdateListener.scala:239)
        at servlet.AutoUpdateListener.contextInitialized(AutoUpdateListener.scala:188)
        at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:771)
        at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424)
        at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:763)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
        at org.eclipse.jetty.server.Server.doStart(Server.java:277)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at JettyLauncher.main(JettyLauncher.java:65)
2014-10-16 13:49:00.562:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:18080

GitHubクローンのGitBucketを10秒でインストールした

追記(2014/05/25)
調べた情報が古かったみたいで、GitLabも今は1〜5分でインストールできるらしい。
GitBucketがとても手軽なのは変わらないけど、GitLabのほうが高機能ではある。

GitHubクローンのGitLabを5分でインストールした - アルパカDiary
GitHubクローンのGitLabを1分で使えるようにする - Webtech Walker


開発用Gitサーバが先日の社内インフラダウンで巻き添えになって、
業務にむっちゃ影響が出た。


で、これを機にクラウド上にGitを移行しようと、
GitHubやらBitBucketやら調べてたんだけど、
どうもうちの会社の運用のままだと、
リポジトリ数やユーザ数が多くて結構なお値段が掛かりそうなことがわかった。
業務上全部プライベートリポジトリにしないといけないし、欲を言えばユーザもリポジトリも数制限かけられたくないし。


で、お決まりのパターンでOSSに流れて、
GitLabとかやってみたんだけど、むっちゃムズいのねあれ。
まともにインストールできん。


諦めて今使ってるgitosis(gitoliteでもないところがあれ)でもVPSにインストールするかー
と思ってた矢先に見つけました。


GitBucket



インストールしてから動くまでが簡単すぎてやばい。

wget https://github.com/takezoe/gitbucket/releases/download/1.13/gitbucket.war
java -jar gitbucket.war &

おわり。すげえ。すぐ動いた。初期設定では
http://hostname:8080/
root
root
でログイン出来る。


これだけでGitHubクローンが動く時代になった。やばい。
GitLabとはなんだったのか...


SSH経由でリポジトリへアクセスできる機能をONにする際、
SSH = OpenSSHという思い込みで、いつものサーバ接続用のポート10022にしてしまっていた。
@にご指摘頂き、専用のポートを用意したら普通に動いたので、
普通の人は多分躓かないところだとは思う...


あとやったことと言えば、気分的にgitbucket専用のユーザ用意したりしたくらい。
兼任社内インフラ担当からすれば機能的にもこれで十分ですわー

screenをきちんと使っているかチェックするシェルスクリプト

社内で超レガシーなデプロイスクリプトを使ってるんだけど、
どうせレガシーならもっとレガシーにしてしまえってことで、
chatworkに接続した。

デプロイ時に使われたscreenのセッション名を送信して、日時とデプロイ者を保存する目的。

で、社内ルールとしてはscreenを使う事になってるんだけど、
やっぱり使ってなかった人たちが出てきた。

そんなときに修正した内容。


$STY にscreenのセッション名が入っているので、それが定義されているか見る。

echo ${STY:?screenにログインして下さい}

DroboがLinuxサーバにマウントされているかチェック[Linux,drobo,mount,sh]

3回位検索しちゃったので忘備録として。

droboLinuxサーバにマウントするには

#mount -t cifs //hoge.hoge.net/hoge /mnt/drobo -o username=hoge,password=hoge,codepage=cp932,iocharset=utf8,defaults

drobolinuxサーバにマウントされているかどうかをチェック

#mount -t cifs
//hoge.hoge.net/hoge on /mnt/drobo type cifs (rw,mand)

■マウントされてなかったらマウントするオレオレスクリプト

#! bin/sh

echo '*** mount check hoge.hoge.net/hoge ***'
if mount -t cifs | grep "//hoge.hoge.net/hoge "; then
echo '*** already mount! ***';
else
echo '*** mount now... ***';
mount -t cifs //hoge.hoge.net/hoge /mnt/drobo -o username=hoge,password=hoge,codepage=cp932,iocharset=utf8,defaults
echo '*** mount finished! ***';
fi

■一体どうしたの
停電後、droboが正しくマウントされてないのに、
バックアップ処理が走ってしまい、
サーバ空き容量が0になってRedmineが死んだ。
しかもその後正常にマウントされてしまい、
↑のバックアップ処理で出来たゴミファイルが隠れてしまった。

容量不足までは分かったが、どうやっても容量が元に戻らなく、
土下座でサーバコンサルさんに直していただいた(´・ω・`)もちろん社内インフラは契約外

Oculus Rift買ったのでいろいろまとめ


会社でOculus Riftを触らせて貰いました。
没入感がすごく、これは買うしか無い!と即決で買ってしまいました笑

ということで、Oculus Riftを購入した後、やったことを忘備録として。
購入までの流れや、Unity開発云々はここでは取り上げません。

  • 映画館(的な空間)で動画を見れるソフト、VR Cinema3Dをダウンロードした

UXground
exeファイルと同じ所にaviファイルを置くと勝手に再生。
3D動画を見るときに使用

  • 動画を見れるソフト、VR Playerをダウンロードした

VR Player - Home
3D動画を見るときに使用

既に持っているゲームで、MinecraftがMOD導入で対応出来そうでした。
Meant to be Seen - View topic - Minecrift release archive

インストーラ形式なので、デフォルトのままインストール。

これだけで、Minecraftの起動時に、
VRモードをオンにするか毎回聞くようになります。

  • Mirror's Edgeをoriginで買った


あの没入感を活用できるゲームで、安かったのがこれ。
originで1500円から。僕はヤフオクでコードを980円で買いました。
今見たら750円になってやがる。。。

PCダウンロード 向け ミラーズエッジ(2009) | Origin | Originゲーム

VIREioという3Dドライバを別途導入する必要あり。
The #1 Stereoscopic 3D Gaming (VR Gaming, 3D Gaming) and VR Resource | Meant to be Seen - Vireio Perception

screenでデタッチされているセッションの削除

linux

rm -rf /var/run/screen/S-○○/ID.name

tinyint 読み方

tinyint 読み方
タイニーイントと読みます。
自分はさっきまでティニーイントと読んでました。