在 FreeBSD 9.x 的系統中安裝 i2p

可能是這東西不太流行,所以 ports maintainer 也沒太認真去維護它。
所以這篇雖然是廢文,但也沒廢到只是叫你 cd /usr/ports/security/i2p 然後打個 make install clean 就收工了。
因為陸續開始有一些講中文的在問,只好稍微簡單寫一下。

照慣例把 i2p 安裝以後,首先必須開一個 i2p 的專用帳號,把它視為一個普通使用者來開就對了,該有的都要有。
再來就是去 /etc/rc.conf 設好這兩行:

i2p_enable="YES"
i2p_user="_i2p"

i2p_user 就是你剛剛開的帳號,隨便叫什麼都可以。
因為 FreeBSD 安裝 tor 的時候會自動開一個 _tor 帳號,所以我照這命名原則開了一個 _i2p。
這樣設定完以後,接下來就是執行 /usr/local/etc/rc.d/i2p start......這當然是騙你的。

首先你必須先執行 /usr/local/etc/rc.d/i2p install,這樣就會把相關的檔案安裝到 i2p_user 的 home directory 下。
如果你的 i2p_user 是 _i2p,這就會裝到 ~_i2p/i2p 這個目錄去,相關的設定檔和 log 等等都會放在 ~_i2p/.i2p 下。
裝好以後你就可以執行 /usr/local/etc/rc.d/i2p start 看看,但是它會哭找不到 libiconv:

打開 ~_i2p/i2p/i2prouter 去第 225 行看,會看到它居然是用 pkg_info -E 'libiconv*' 去檢查有沒有裝 libiconv 的。
但是現在 FreeBSD 早就改用 pkgng 了,pkg_info 這指令當然是沒有的,所以必須把 pkg_info 改成 pkg info,也可以考慮把 -E 改成 -e。
再次啟動 i2p 後,還是會發現不知道被什麼婊了而失敗,去看一下 ~_i2p/.i2p/wrapper.log 會發現它哭說找不到 org.tanukisoftware.wrapper.WrapperSimpleApp。
這個閉著眼睛都知道是 classpath 的問題,所以去開 ~_i2p/i2p/wrapper.config 來看,開頭註解會有一段文字說明:

# NOTE - The izpack installer performs variable subsitiution on this
# file upon installation. If you did not use izpack, you must
# find and replace all instances of (dollar)INSTALL_PATH and
# (dollar)SYSTEM_java_io_tmpdir with appropriate values
# (perhaps . and /var/tmp, respectively)

但是你會發現這檔案裡的 $INSTALL_PATH 那些東西根本就沒被代換過,所以接下來該怎麼辦你就知道了。
龜毛程度不同的人,會有不同的處理方式,總之隨便你怎麼處理都好,這個問題排除後就可以將 i2p 啟動了。

內部怎麼設定就不廢話了,不過如果你是裝在遠端主機想要連進去設定,是會不得其門而入的,因為 i2p 預設是 listen localhost 的 ports。
遇到這種問題,一般我是會用 nginx 的 reverse proxy 搭 LDAP 認證去跳轉。
當然如果只是臨時需要的話,也可以考慮用 ssh 打一條 tunnel,把本機的某個 port 對應到遠端主機的 localhost:7657。
如果你的目的是要用 BT 協定去下載一些 tracker 在 i2p 網域內的奇怪東西,或者散佈那些奇怪東西,到 /i2psnark 就可以看到它內建的 BT client 了,夠用就直接用吧。

如果你的目的是要架設 eepsite 來進行賺大錢純抒發不滿秘密活動,那麼可以順便跳轉一下 port 7568,那個預設的說明頁會告訴你該怎麼做。
簡單說就是進去 /i2ptunnel/index.jsp 裡面修改 I2P Server Tunnels 裡原有的那個項目,或者另外新增一項就行了。
這玩意和 tor 一樣可以跳轉到 apache 或 nginx 去,在 target host 的欄位對應一下就好了,然後你就可以去跑任何你想跑的網頁程式。
但是如果你的 eepsite 內容是那種極度違反社會善良風俗的東西,建議還是按自己需求用最嚴謹的方式開發一個恰巧符合自己需求的。
不然一旦你的 eepsite 被入侵,主機的真實 IP 馬上就會被知道,然後你就要準備跑路了。


2016-03-09 Update

在 FreeBSD 10.x 安裝完 i2p 要啟動時,可能會看到下列錯誤訊息:

解法很簡單,就是去看上面提到的 ticket。
裡面的方法就是從 ports 安裝 sysutils/javaservicewrapper,然後 su 成 i2p 的帳號,執行以下指令:

實際上這幾個檔案在最初安裝時就有附了,但不適合 FreeBSD 10.x 直接拿來使用,所以需要用上面的方式重做一遍。