
인터넷 검열 및 네트워크 간섭을 탐지하고, OONI 네트워크 테스트를 실행하며, 결과를 공개 관측소에 보고하기 위한 Go 측정 엔진 및 CLI입니다.
Open Observatory of Network Interference(OONI)는 전 세계의 인터넷 검열을 문서화하기 위한 분산된 노력을 지원하는 것을 목표로 하는 비영리 자유 소프트웨어 프로젝트입니다.
이 저장소에는 다음과 같은 Go 패키지가 포함되어 있습니다:
ooniprobe 명령줄 클라이언트 (cmd/ooniprobe);
테스트 헬퍼 서버 (internal/cmd/oohelperd);
모바일 라이브러리 (pkg/oonimkall);
측정 엔진 라이브러리 (internal);
miniooni 실험적 명령줄 클라이언트 (internal/cmd/miniooni).
이 저장소의 모든 최상위 디렉터리에는 설명 README 파일이 포함되어 있습니다.
Windows, macOS, Debian/Ubuntu용으로 미리 컴파일된 ooniprobe 바이너리를
설치하려면 ooni.org/install/cli의 안내를 따르세요.
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를 사용하는 경우, Linux용 Windows 하위 시스템에 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를 사용하는 경우 개발 환경을 설정하는 방법을 보여줍니다.
# 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를 설치했다고 가정하며, 이는 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
우리는 GNU make가 필요한 Makefile을 사용하여 릴리스를 빌드합니다. 자세한 사용법은
make help를 실행하세요.
CONTRIBUTING.md의 관련 섹션도 참고하세요.
모바일 라이브러리는 기술적인 이유로 공개 패키지입니다. Go 모바일 도구는 빌드하기 위해
공개 패키지가 필요합니다. 그러나 우리는 그러한 패키지에서 발생하는 API 호환성 파괴가
주 버전 번호를 올릴 충분한 이유라고 간주하지 않습니다. 우리에게 모바일
라이브러리는 단지 OONI Probe Android와 OONI Probe iOS를 구현하기 위한 수단일 뿐입니다. 우리는
./cmd/ooniprobe의 CLI를 변경하는 경우에만 주 버전 번호를 올릴 것입니다.