2014/10/19

encfs4win( encfs & encfsw )をVC++2010Expressでコンパイル

しなしなです。

クラウドで暗号化してると,色々したくなります。
 
(追記)
色々やっている先人を見つけてしまいました

でも、ここまでの労力ももったいないのでGitHubに上げて供養することにした。良い人にForkされるんだよ(違

以下は備忘録です-----------------------------------------


encfs4winのNEWSに

・2013-02-18 No changes but currently compile under Visual C++. Hoping somebody could contribute easier.

と書かれているので 実際にやってみようかと。

環境は手元のWindows7 + Visual C++ 2010 Express

基本は付属ドキュメントのReadMe_Windows.txtに書かれている通りにしてます。

作業フォルダは c:\workです。

・Boostのインストール


boost_1_53_0.7zのダウンロード
http://sourceforge.net/projects/boost/files/boost/1.53.0/

ビルド方法はココに書いている通り
http://www.boost.org/doc/libs/1_53_0/more/getting_started/windows.html

All Programs > Microsoft Visual Studio 2010 Express > Visual Studio Command Prompt (2010)
>cd \work\boost_1_53_0
>bootstrap.bat
>.\b2




#boost_1_54_0 でもコンパイルは可能

#boost_1_55_0はコンパイルできませんでした。(b2でエラー)
#http://kowaimononantenai.blogspot.jp/2013/11/winodwsboost.html
# b2.exe toolset=msvc-10.0 でコンパイル可能


・OpenSSLのインストール

http://slproweb.com/products/Win32OpenSSL.html

ReadMe_Windows.txtとバージョン違うけど,Win32OpenSSL-1_0_1j.exe をダウンロード

( Visual C++ 2008 Redistributables が入ってなかったら怒られるのでその時にはダウンロード&インストール )

ReadMe_Windows.txt だと設定を変えているけど,最後の実行時にLIBEAY32.DLL が無いエラーが出るので、今回は標準インストールで実施。インストールパスとライブラリの場所は以下の画像参照。





・RLogのインストール


cd c:\work

tar -zxvf rlog\rlog-1.4.tar.gz
cd c:\work\rlog

patch -p0 < ..\rlog\rlog-1.4.diff
patch -p0 < ..\rlog\rlog-1.4-win.diff
patch -p0 < ..\rlog\rlog-1.4-win2.diff

ソリューションファイルを開いてビルド   c:\work\rlog-1.4\win32\rlog.sln




・fuse4winのインストール


とりあえずCMakeのWindows用バイナリをダウンロードしてインストール
http://www.cmake.org/download/
そして実行。バージョンは聞かれるので開発環境と合わせておきましょう。


ソリューションファイルは以下のフォルダにCMakeが作るので,それをビルド。
C:\work\fuse4win-070d3a2e43de\build

・encfsのインストール

以下のソリューションファイルを開く。 
c:\work\encfs\msvc\encfs.sln


openSSLの場所を標準に変えてるので修正(インクルードディレクトリとライブラリ ディレクトリ)
 ../../OpenSSL-Win32/incluse→ C:\OpenSSL-Win32\include
../../OpenSSL-Win32/lib/VC→ C:\OpenSSL-Win32\lib\VC
設定箇所は以下の画像参照。



・ソースファイルの修正

ReadMe_Windows.txtによると、これで動くはずなのだが,実際にやってみると shared_ptrがあいまいと言われてコンパイルが通らない。


ソースファイルの shared_ptr  を全部 boost::shared_ptr に変更。

StreamNameIO.cpp
SSL_Cipher.cpp
NullCipher.cpp
nameio.cpp
main.cpp
macfileio.cpp
fileutils.cpp
filenode.cpp
encfsctrl.cpp
encfs.cpp
dirnode.cpp
cipher.cpp


ここまででコンパイルは完了。


・RLog.dllのコピー


実行時にRLog.dllが無いと言われるので,C:\work\rlog-1.4\win32\Release と C:\work\rlog-1.4\win32\Debug の rlog.dll をコンパイル先のReleaseとDebugフォルダにそれぞれ突っ込む。


これで実行まで確認。


・設定ファイルの追加

Box Sync が".encfs6.xml" を同期してくれないので、設定ファイルを変更する。
Encdroid multi cloudなら以下のアップデートにあるようにencfs6.xmlを追加。
02/09/13
- if your server don't send hidden file, you can rename the file ".encfs6.xml" to "encfs6.xml" (without the starting dot). this version now support this fix.

具体的には,FileUtils.cpp の ConfigFileMapping[] に新しい設定ファイル名を追加して再コンパイルするだけだが。