
インターネット検閲やネットワーク干渉を検出するためのGo製測定エンジンおよびCLI。OONIネットワークテストを実行し、結果をオープンオブザバトリーに報告します。
Open Observatory of Network Interference(OONI) は、世界中のインターネット検閲を記録する分散型の取り組みを支援することを目的とした、 非営利のフリーソフトウェアプロジェクトです。
このリポジトリには、以下の Go パッケージが含まれています:
ooniprobe コマンドラインクライアント(cmd/ooniprobe);
テストヘルパーサーバー(internal/cmd/oohelperd);
モバイルライブラリ(pkg/oonimkall);
測定エンジンライブラリ(internal);
miniooni 実験用コマンドラインクライアント(internal/cmd/miniooni)。
このリポジトリの各トップレベルディレクトリには、説明用の README ファイルが含まれています。
ooni.org/install/cli の手順に従って、
Windows、macOS、および Debian/Ubuntu 向けのコンパイル済み ooniprobe バイナリを
インストールしてください。ooniprobe をインストールしたら、
ユーザーガイド を参照してください。
私たちは ローリングリリースタグ を使用してナイトリービルドを公開しています。これらの
ビルドは master ブランチの最新コミットを使用しています。
このリポジトリの開発環境をセットアップするには、Go >= 1.15 が必要です。
./script/go.bash スクリプトは、GOVERSION ファイルに記載されている
期待されるバージョンの Go(つまり、
go1.27.3)を自動的にダウンロードし、ビルドに使用します。
./script/go.bash をバイパスして go build ... を使用して ooniprobe を手動で
ビルドすることもできますが、その場合は以下の点に注意してください:
GOVERSION に記載されているバージョンより古いバージョンを使用することは 間違いなく推奨されず、コンパイルすらできない可能性があります;
より新しいバージョンを使用することは、コア機能については意図したとおりに動作する_はず_ですが、 追加機能は無効化されるか、意図したとおりに動作しない可能性があります。
その理由は次のとおりです:私たちは標準ライブラリからフォークしたパッケージに依存しているため、 それらのパッケージをフォークした元と同じバージョンの Go を使用する方がより堅牢です。
また、C コンパイラも必要です。Linux やその他の Unix 系システムでは、GCC と Clang のどちらでも動作します。Windows を使用している場合は、Windows Subsystem for Linux 上に Ubuntu または Debian をインストールすることを推奨します。Windows をターゲットにする場合は、mingw-w64 クロスコンパイラもインストールする必要があります。
以下のコマンドは、Debian 12("bookworm")を使用して開発環境をセットアップする方法を示しています。同じ手順は Ubuntu 22.04 LTS でも動作するはずです。
# install the compilers, git, and the root CA
sudo apt install golang build-essential ca-certificates git
# [optional] install mingw-w64 if you're targeting windows
sudo apt install mingw-w64
以下のコマンドは、お使いの Fedora が Go >= 1.15 を使用している限り、Fedora を用いた開発環境のセットアップ方法を示しています。
# install the compilers and git
sudo dnf install golang make gcc gcc-c++ git
# [optional] install mingw-w64 if you're targeting windows
sudo dnf install mingw64-gcc mingw64-gcc-c++
以下のコマンドは、macOS を使用して開発環境をセットアップする方法を示しています。ここでは、Homebrew がすでにインストールされていることを前提としています。Homebrew をインストールすると、Xcode コマンドラインツールもインストールされるはずです。
次に、以下の手順に従う必要があります:
# install the compiler
brew install go
./script/go.bash スクリプト./script/go.bash スクリプトは Go >= 1.15 を必要とし、正しいバージョンの Go のインストールと使用を自動化します。このスクリプトを次のように実行します:
./script/go.bash build -v -ldflags '-s -w' ./internal/cmd/miniooni
次を実行するのと同じです:
go install -v golang.org/dl/go1.27.3@latest
$HOME/go/bin/go1.27.3 download
export GOTOOLCHAIN=local
$HOME/sdk/go1.27.3/bin/go build -v -ldflags '-s -w' ./internal/cmd/miniooni
このセクションでは、./script/go.bash を使用したビルド方法を説明します。このスクリプトを経由せずにビルドしたい場合は、./script/go.bash の代わりに go を実行してください。
ooniprobe は次のコマンドでコンパイルできます:
./script/go.bash build -v -ldflags '-s -w' ./cmd/ooniprobe
このコマンドは、トップレベルディレクトリに ooniprobe という名前のストリップされたバイナリを生成します。
同様に、次のようにして miniooni をコンパイルできます:
./script/go.bash build -v -ldflags '-s -w' ./internal/cmd/miniooni
このコマンドは、トップレベルディレクトリに miniooni という名前のストリップされたバイナリを生成します。
そして oohelperd は次を使用して生成します:
./script/go.bash build -v -ldflags '-s -w' ./internal/cmd/oohelperd
このコマンドは、トップレベルディレクトリに oohelperd という名前のストリップ済みバイナリを生成します。
ooniprobe および miniooni バイナリは、ooniprobe-rs からビルドされた Rust 静的ライブラリ(libuniffi_ooniprobe.a)をリンクします。make CLI/* ターゲットは userauth ターゲットを通じてこれを取得します。このターゲットはビルドツールを実行し、デフォルトでは固定された ooniprobe-rs リリースからビルド済みバンドルをダウンロードします。
代わりに固定された ooniprobe-rs ソースから静的ライブラリをビルドするには、USERAUTH_FROM_SOURCE=1 を設定します。例:
make USERAUTH_FROM_SOURCE=1 CLI/ooniprobe
ソースからのビルドは、公開時に私たちが行うことです。なぜなら、プリビルドバンドルはglibcベースであり、musl静的LinuxビルドやクロスコンパイルされたWindows/darwinビルドにリンクできないからです。プリビルドのダウンロードはより高速で、ローカル開発における適切なデフォルトです。
CONTRIBUTING.mdをご覧ください。
SPDX-License-Identifier: GPL-3.0-or-later
リリースは Makefile を使用してビルドします。これには GNU make が必要です。詳細な使用方法については make help を実行してください。
CONTRIBUTING.md の関連セクションも参照してください。
モバイルライブラリは、技術的な理由により公開パッケージとなっています。Go のモバイルツールはビルド元として公開パッケージを必要とします。しかし、そのようなパッケージで発生する API の破壊的変更は、メジャーバージョン番号を上げるのに十分な理由とは考えていません。私たちにとって、モバイルライブラリは OONI Probe Android と OONI Probe iOS を実装するための単なる手段にすぎません。メジャーバージョン番号を上げるのは、./cmd/ooniprobe の CLI を変更した場合のみです。