おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

OmegaTのチームプロジェクトでちょっとハマった話

最近お仕事でOmegaT:

omegat.org

を使い始めました。で、社内のGitLabをホストにしてチームプロジェクトを作ったのですが、若干ハマったのでここでメモっておきます。わかってみれば大したことではないんですけどねー。

なお検証したのは今のStandard VersionであるところのVersion 4.3.2です。Latest Versionではどうなのか確認してません。

結論から言うと:

  • GitLabでオレオレ証明書を使うのはやめよう
  • それがダメならパスフレーズなし鍵ペアを用意してそれをGitLab専用にしよう
  • 鍵ペアはed25519じゃなくてRSAで生成しよう

ってーことです。以下時系列。

お断りですが、これ試してたのは会社環境で、この記事書いているのは個人PCなので、メッセージその他は記憶で書いてます。実際のものとは異なることはご了承くださいませ。

GitLabにpushしたリモートリポジトリと紐づけたチームプロジェクトがぶっ壊れる

(注:後から考えると、正確にはぶっ壊れてたわけじゃないんですが、そのときにはそう思ったんですよ……)

手元でOmegaTで翻訳できるプロジェクト作って、まあまあ快適に翻訳できるようになったわけです。

でもほかのメンバーでも作業できるようにするにはチームプロジェクトを作る必要があるらしい。さてどうやって作るのかな。で、ドキュメント調べたら:

omegat.sourceforge.io

あーふむふむ、要はGitリポジトリ作ってそこにいろいろぶち込んでpushして、それをチームプロジェクトとしてダウンロードすればいいのね*1

で、手元のプロジェクトを git init して一式コミットして、社内で立ってる、社内N/WからしかアクセスできないGitLabにリポジトリ作って、そこを git remote add origin git:// ってして push して、じゃあこれを「プロジェクト」>「チームプロジェクトのダウンロード」のURLに指定すればよいと。

f:id:naruoga:20200501095003p:plain
チームプロジェクトのダウンロードポップアップ

……ん? 「.... Auth fail」??? どゆこと? 普通に自分がpushできてる自分のリモートリポジトリなんだから、認証に失敗するとかないと思うんですけど……。

まあとにかく、リポジトリOmegaTからcloneできないってことね。なんだろう、もしかしてやり方がまずいのかな、一度OmegaTで読み込んでごにょごにょする必要があるってことなのかな。 ということで、チームプロジェクト化したと思われたローカルのプロジェクトをOmegaTで開いてみますと、

このチームプロジェクトはバージョン2*2 形式の古いやつだから、今の形式にします?

あ、なるほど、さっきのドキュメントは古いってことか……確かにホームに戻ると「OmegaT 3.1 - 取扱説明書」って書いてあるし。

まあでも移行機能ついてるんだ親切だな、ぽち……え。同じエラーで落ちる。そして、「サーバーと同期できませんでした」といって、OmegaTで開くこともできなくなりましたよ……と。え。マジで。

いやいやいやいや。大丈夫。Gitリポジトリなんだから中に入ってcheckoutなりなんなりすれば元に戻るでしょ……え? Gitリポジトリじゃなくなってる??? .git ディレクトリがないじゃん。えーまじか。

……もちろん、リモートリポジトリからcloneしなおせばモノは残ってるわけですが、翻訳作業が進められなくなる。それは困る。で、ちゃんと調べることにしました。

チームプロジェクトでHTTPSプロトコル使うと動かない

まずは雑に "omegat git auth fail" とかでググる……けど、全然情報がない。

でまあもっと単純に "omegat team project" とかで検索すると……たとえばここ、を参照すると、 大体の例はHTTPSになってる……なるほど。そうなのかな。

じゃあ、URLに https:// を指定すれば……ぐぐ。エラーになりますね。

種を明かせばこれは本当に当たり前な話で、社内GitLabがオレオレ証明書だったから*3。 なので、普通に git clone とかも跳ねられちゃう。普段 git:// でしか使ってないから気づかなかったからというだけ。

Auth failの謎に迫る

しょうがない。このGitLabを使う以上はなんとかしてgitプロトコルを使うしかないわけで、そうなるとAuth Failの謎を解かなければいけません。でもググっても情報がない。

しかしですね、わたくし技術屋としてあるまじき見落としだったんですが、さっきのダイアログ、実は

jgit: .... Auth fail

ってなってたんですよね。jgitっていかにもJavaのgitライブラリじゃないですか。だからきっとこのダイアログはこいつが吐く例外メッセージとかをママ出してるんじゃないか。

ということで "jgit auth fail" でググると……色々出てきた。 で、ヒットした記事をチェックしたら、「鍵にパスフレーズありの場合はこういうコーディングでパスフレーズ渡さないとだめだよ」みたいなStackOverflawの記事を見かけました。 ん?パスフレーズあり?俺の鍵はもちろんパスフレーズありだよ。そしてOmegaTパスフレーズ入れた記憶も、やっぱりないぞ……。

さてはということで "omegat ssh passphrase" とかで検索した……ら。

sourceforge.net

ちょっと古いけど(2015年)、やり取り見てると:

Aaron Madlon-Kay - 2015-09-14

Keys with passphrases will be supported after this development hits trunk. In the meantime, you can use public key authentication now if you remove the passphrase from your key.

ってい書いてあって、

Hiroshi Miura - 2015-09-22

It is nonsense to remove passphrase.

うんうん、ナンセンス! と思ったんですが、どうなんだろ、2015年だしなあ、治ってるかもわからんけど……。

情報見当たらなかったのでまあ試してみようということで、パスフレーズなしSSH鍵ペアを生成しなおして、~/.ssh/config でGitLabのときだけはそいつ使うようにした……ら。

無事OmegaTでも使えるようになりました! やった! ばんざい!

Macで同じことやると「invalid private key」と言われて動かない

で、同僚に「使えるようになったよー」といったら、「なんかうまく動かないんですけど……」とクレームが。

同僚はMacだから? なんだろ? と思いつつ私も検証機でMacあるので、やっぱりパスフレーズなし鍵ペアを使うように ~/.ssh/config 設定し、 リポジトリのcloneできることは確認して、オッケー、ではOmegaTで「チームプロジェクトのダウンロード」する……と、「jgit: ... invalid privatekey」とな。

あわてず騒がず "jgit invalid privatekey" でググりますと……

stackoverflow.com

この記事がヒットしまして、要は:

  • OpenSSHの7.8以降は ssh-keygen で生成するデフォルトの鍵ペアが ed25519 になりました
  • 判断するのは秘密鍵の頭が -----BEGIN OPENSSH PRIVATE KEY----- となってるかでわかる
  • 少なくともOmegaTのjgit(バージョンなのか使う側の実装なのか)ではこの形式の鍵が食えない
  • なので以下のようにして鍵形式を切り替えてあげればOK
ssh-keygen -p -f 【鍵ファイル名】 -m pem -P "" -N ""

で、うまくいきました。

おまけ:環境によってはMacOmegaTJREありバージョンは動かない

これは私じゃなくて同僚がハマったんですが、OmegaT 4.3.2のJREありバージョンが起動時に例外吐いて死ぬという問題があるようです。

ぐぐったら上記JREありバージョンに同梱されてるOpenJDK 1.8.0 u201の問題みたいで、JREなしバージョン使うか、5.2.0ならJRE新しくなってるのでそれを使えばいいみたい。

*1:日本語のドキュメントはOmegaT 3.1ベースで、現在の最新のドキュメントとは異なりますが、まあこのやり方で最終的にはうまくいきました。

*2:3だったかも。

*3:繰り返しますがこのGitLabは社内N/Wからしか接続できないので、オレオレ証明書であること自体はまあ問題ではないのです。いや問題だという方は、すみませんがお目こぼしを。