diff --git a/public/images/projects/bpfcompat/install/install-from-source.png b/public/images/projects/bpfcompat/install/install-from-source.png new file mode 100644 index 0000000..951f934 Binary files /dev/null and b/public/images/projects/bpfcompat/install/install-from-source.png differ diff --git a/public/images/projects/bpfcompat/install/install-go-install.png b/public/images/projects/bpfcompat/install/install-go-install.png new file mode 100644 index 0000000..b2cbbb6 Binary files /dev/null and b/public/images/projects/bpfcompat/install/install-go-install.png differ diff --git a/public/images/projects/bpfcompat/install/install-release-binary.png b/public/images/projects/bpfcompat/install/install-release-binary.png new file mode 100644 index 0000000..b57bceb Binary files /dev/null and b/public/images/projects/bpfcompat/install/install-release-binary.png differ diff --git a/public/images/projects/bpfcompat/install/live-validation.png b/public/images/projects/bpfcompat/install/live-validation.png new file mode 100644 index 0000000..dc5ab19 Binary files /dev/null and b/public/images/projects/bpfcompat/install/live-validation.png differ diff --git a/src/pages/bpfcompat/BpfcompatPage.tsx b/src/pages/bpfcompat/BpfcompatPage.tsx index 5def6cd..09154f0 100644 --- a/src/pages/bpfcompat/BpfcompatPage.tsx +++ b/src/pages/bpfcompat/BpfcompatPage.tsx @@ -15,7 +15,7 @@ import { buildSoftwareSourceCodeSchema } from '../../lib/schema'; import { BpStringsProvider, getBpStrings } from './content'; import { Chip, HeroCtas, MatrixTerminal, CompatibilityMatrix, Legend, HowItWorks, - ProblemCards, AdoptionTabs, RepoEvidence, ScopePanel, ToolchainBand, + ProblemCards, AdoptionTabs, InstallSection, RepoEvidence, ScopePanel, ToolchainBand, Reveal, BigStat, DocsSection, ProjectBreadcrumb, FinalCtaWithDocs, WhyBuilt, ComparisonTable, Kicker, Caret, GITHUB_URL, DEMO_URL, REPORT, @@ -195,6 +195,18 @@ export default function BpfcompatPage() { + {/* 8b — install the CLI */} +
+
+ + {t.install.eyebrow} +

{t.install.heading}

+

{t.install.subline}

+
+ +
+
+ {/* 9 — repository evidence */}
diff --git a/src/pages/bpfcompat/content.tsx b/src/pages/bpfcompat/content.tsx index 720d6f1..d4fcc9f 100644 --- a/src/pages/bpfcompat/content.tsx +++ b/src/pages/bpfcompat/content.tsx @@ -46,6 +46,15 @@ export interface BpStrings { actionNote: string; webSteps: string[]; webButton: string; webNote: string; }; + install: { + eyebrow: string; + heading: string; + subline: string; + methods: Array<{ title: string; note: string; alt: string }>; + runHeading: string; + runNote: string; + runAlt: string; + }; repo: { title: string; measured: string; github: string; languageMix: string; labels: { primaryLanguage: string; license: string; latestRelease: string; kernelRange: string }; @@ -145,6 +154,19 @@ const en: BpStrings = { webButton: 'Open the Technical Preview', webNote: 'Runs on shared infrastructure and is rate-limited. No account required.', }, + install: { + eyebrow: 'Install', + heading: 'Install the CLI in one command.', + subline: 'Three verified ways to get bpfcompat — a prebuilt release binary, a source build, or go install. Every command below was run on a real KVM host.', + methods: [ + { title: 'Prebuilt release binary', note: 'Recommended. Ships the CLI and the in-guest validator, checksum-verified. Linux x86_64.', alt: 'Terminal: downloading the bpfcompat release binary, verifying its checksum, and printing the version.' }, + { title: 'From source', note: 'Builds the CLI and the validator, and stamps the binary with the real version.', alt: 'Terminal: cloning the repository and running make build and make validator-static.' }, + { title: 'go install', note: 'CLI only. Use the lowercase module path and the cmd/bpfcompat subpackage — the bare module path does not install.', alt: 'Terminal: installing bpfcompat with go install and printing the version.' }, + ], + runHeading: 'Then run it across real kernels.', + runNote: 'bpfcompat test boots each kernel in a disposable VM and returns a per-kernel pass/fail matrix — here failing on 5.4 (ring buffer support lands in 5.8) and passing on 6.1 and 6.8.', + runAlt: 'Terminal: a bpfcompat validation run showing ubuntu-20.04-5.4 fail, debian-12-6.1 pass, and ubuntu-24.04-6.8 pass.', + }, repo: { title: 'Repository evidence', measured: 'Measured from the public repository.', github: 'GitHub', languageMix: 'Language mix', labels: { primaryLanguage: 'Primary language', license: 'License', latestRelease: 'Latest release', kernelRange: 'Kernel range tested' }, @@ -277,6 +299,19 @@ const tr: BpStrings = { webButton: 'Teknik Önizlemeyi aç', webNote: 'Paylaşılan altyapıda çalışır ve hız sınırlıdır. Hesap gerekmez.', }, + install: { + eyebrow: 'Kurulum', + heading: "CLI'yi tek komutla kurun.", + subline: "bpfcompat'ı edinmenin üç doğrulanmış yolu — hazır sürüm ikilisi, kaynaktan derleme veya go install. Aşağıdaki her komut gerçek bir KVM ana makinesinde çalıştırıldı.", + methods: [ + { title: 'Hazır sürüm ikilisi', note: 'Önerilen. CLI ile konuk içi doğrulayıcıyı, sağlama toplamı doğrulanmış olarak getirir. Linux x86_64.', alt: 'Terminal: bpfcompat sürüm ikilisini indirme, sağlama toplamını doğrulama ve sürümü yazdırma.' }, + { title: 'Kaynaktan', note: "CLI ve doğrulayıcıyı derler, ikiliye gerçek sürümü işler.", alt: "Terminal: depoyu klonlama ve make build ile make validator-static çalıştırma." }, + { title: 'go install', note: "Yalnızca CLI. Küçük harfli modül yolunu ve cmd/bpfcompat alt paketini kullanın — yalın modül yolu kurulmaz.", alt: 'Terminal: go install ile bpfcompat kurma ve sürümü yazdırma.' }, + ], + runHeading: 'Sonra gerçek çekirdeklerde çalıştırın.', + runNote: 'bpfcompat test her çekirdeği tek kullanımlık bir VM içinde başlatır ve çekirdek başına geçti/kaldı matrisi döndürür — burada 5.4 üzerinde başarısız (ring buffer desteği 5.8 ile gelir), 6.1 ve 6.8 üzerinde geçer.', + runAlt: 'Terminal: ubuntu-20.04-5.4 kaldı, debian-12-6.1 geçti ve ubuntu-24.04-6.8 geçti gösteren bir bpfcompat doğrulama çalıştırması.', + }, repo: { title: 'Depo kanıtı', measured: 'Herkese açık depodan ölçüldü.', github: 'GitHub', languageMix: 'Dil dağılımı', labels: { primaryLanguage: 'Birincil dil', license: 'Lisans', latestRelease: 'Son sürüm', kernelRange: 'Test edilen çekirdek aralığı' }, @@ -409,6 +444,19 @@ const de: BpStrings = { webButton: 'Technische Vorschau öffnen', webNote: 'Läuft auf geteilter Infrastruktur und ist ratenbegrenzt. Kein Konto erforderlich.', }, + install: { + eyebrow: 'Installation', + heading: 'Installiere die CLI mit einem Befehl.', + subline: 'Drei geprüfte Wege zu bpfcompat — ein vorgefertigtes Release-Binary, ein Quellcode-Build oder go install. Jeder Befehl unten wurde auf einem echten KVM-Host ausgeführt.', + methods: [ + { title: 'Vorgefertigtes Release-Binary', note: 'Empfohlen. Liefert die CLI und den Gast-Validator, prüfsummenverifiziert. Linux x86_64.', alt: 'Terminal: Herunterladen des bpfcompat-Release-Binaries, Prüfsummen-Verifikation und Ausgabe der Version.' }, + { title: 'Aus dem Quellcode', note: 'Baut die CLI und den Validator und versieht das Binary mit der echten Version.', alt: 'Terminal: Klonen des Repositorys und Ausführen von make build und make validator-static.' }, + { title: 'go install', note: 'Nur die CLI. Nutze den kleingeschriebenen Modulpfad und das cmd/bpfcompat-Unterpaket — der bloße Modulpfad lässt sich nicht installieren.', alt: 'Terminal: Installation von bpfcompat mit go install und Ausgabe der Version.' }, + ], + runHeading: 'Dann auf echten Kerneln ausführen.', + runNote: 'bpfcompat test startet jeden Kernel in einer wegwerfbaren VM und liefert eine Pass/Fail-Matrix pro Kernel — hier mit Fehler auf 5.4 (Ring-Buffer-Unterstützung kommt mit 5.8) und Erfolg auf 6.1 und 6.8.', + runAlt: 'Terminal: ein bpfcompat-Validierungslauf mit ubuntu-20.04-5.4 fehlgeschlagen, debian-12-6.1 bestanden und ubuntu-24.04-6.8 bestanden.', + }, repo: { title: 'Repository-Nachweis', measured: 'Gemessen aus dem öffentlichen Repository.', github: 'GitHub', languageMix: 'Sprachmix', labels: { primaryLanguage: 'Primäre Sprache', license: 'Lizenz', latestRelease: 'Neueste Version', kernelRange: 'Getesteter Kernel-Bereich' }, @@ -541,6 +589,19 @@ const es: BpStrings = { webButton: 'Abrir la Vista previa técnica', webNote: 'Se ejecuta en infraestructura compartida y con límite de uso. No requiere cuenta.', }, + install: { + eyebrow: 'Instalación', + heading: 'Instala la CLI con un solo comando.', + subline: 'Tres formas verificadas de obtener bpfcompat — un binario de release precompilado, una compilación desde el código, o go install. Cada comando de abajo se ejecutó en un host KVM real.', + methods: [ + { title: 'Binario de release precompilado', note: 'Recomendado. Incluye la CLI y el validador en el invitado, verificados por checksum. Linux x86_64.', alt: 'Terminal: descarga del binario de release de bpfcompat, verificación de su checksum e impresión de la versión.' }, + { title: 'Desde el código', note: 'Compila la CLI y el validador, y marca el binario con la versión real.', alt: 'Terminal: clonación del repositorio y ejecución de make build y make validator-static.' }, + { title: 'go install', note: 'Solo la CLI. Usa la ruta de módulo en minúsculas y el subpaquete cmd/bpfcompat — la ruta de módulo a secas no se instala.', alt: 'Terminal: instalación de bpfcompat con go install e impresión de la versión.' }, + ], + runHeading: 'Luego ejecútalo en kernels reales.', + runNote: 'bpfcompat test arranca cada kernel en una VM desechable y devuelve una matriz de pasa/falla por kernel — aquí falla en 5.4 (el soporte de ring buffer llega en 5.8) y pasa en 6.1 y 6.8.', + runAlt: 'Terminal: una ejecución de validación de bpfcompat que muestra ubuntu-20.04-5.4 falla, debian-12-6.1 pasa y ubuntu-24.04-6.8 pasa.', + }, repo: { title: 'Evidencia del repositorio', measured: 'Medido a partir del repositorio público.', github: 'GitHub', languageMix: 'Mezcla de lenguajes', labels: { primaryLanguage: 'Lenguaje principal', license: 'Licencia', latestRelease: 'Última versión', kernelRange: 'Rango de kernels probado' }, @@ -673,6 +734,19 @@ const fr: BpStrings = { webButton: 'Ouvrir l’Aperçu technique', webNote: 'S’exécute sur une infrastructure partagée et avec une limite de débit. Aucun compte requis.', }, + install: { + eyebrow: 'Installation', + heading: 'Installez la CLI en une commande.', + subline: 'Trois façons vérifiées d’obtenir bpfcompat — un binaire de release préfabriqué, une compilation depuis les sources, ou go install. Chaque commande ci-dessous a été exécutée sur un vrai hôte KVM.', + methods: [ + { title: 'Binaire de release préfabriqué', note: 'Recommandé. Fournit la CLI et le validateur invité, vérifiés par somme de contrôle. Linux x86_64.', alt: 'Terminal : téléchargement du binaire de release de bpfcompat, vérification de sa somme de contrôle et affichage de la version.' }, + { title: 'Depuis les sources', note: 'Compile la CLI et le validateur, et estampille le binaire avec la vraie version.', alt: 'Terminal : clonage du dépôt et exécution de make build et make validator-static.' }, + { title: 'go install', note: 'CLI uniquement. Utilisez le chemin de module en minuscules et le sous-paquet cmd/bpfcompat — le chemin de module seul ne s’installe pas.', alt: 'Terminal : installation de bpfcompat avec go install et affichage de la version.' }, + ], + runHeading: 'Puis lancez-le sur de vrais noyaux.', + runNote: 'bpfcompat test démarre chaque noyau dans une VM jetable et renvoie une matrice succès/échec par noyau — ici en échec sur 5.4 (la prise en charge du ring buffer arrive en 5.8) et en succès sur 6.1 et 6.8.', + runAlt: 'Terminal : une exécution de validation bpfcompat montrant ubuntu-20.04-5.4 en échec, debian-12-6.1 en succès et ubuntu-24.04-6.8 en succès.', + }, repo: { title: 'Preuves du dépôt', measured: 'Mesuré à partir du dépôt public.', github: 'GitHub', languageMix: 'Répartition des langages', labels: { primaryLanguage: 'Langage principal', license: 'Licence', latestRelease: 'Dernière version', kernelRange: 'Plage de noyaux testée' }, @@ -805,6 +879,19 @@ const ja: BpStrings = { webButton: 'テクニカルプレビューを開く', webNote: '共有インフラ上で動作し、レート制限があります。アカウントは不要です。', }, + install: { + eyebrow: 'インストール', + heading: 'CLI をワンコマンドでインストール。', + subline: 'bpfcompat を入手する 3 つの検証済みの方法 — ビルド済みリリースバイナリ、ソースからのビルド、または go install。以下のコマンドはすべて実際の KVM ホストで実行しました。', + methods: [ + { title: 'ビルド済みリリースバイナリ', note: '推奨。CLI とゲスト内バリデーターを、チェックサム検証済みで提供します。Linux x86_64。', alt: 'ターミナル: bpfcompat のリリースバイナリをダウンロードし、チェックサムを検証してバージョンを表示。' }, + { title: 'ソースから', note: 'CLI とバリデーターをビルドし、バイナリに実際のバージョンを刻みます。', alt: 'ターミナル: リポジトリをクローンし、make build と make validator-static を実行。' }, + { title: 'go install', note: 'CLI のみ。小文字のモジュールパスと cmd/bpfcompat サブパッケージを使います — モジュールパスだけではインストールされません。', alt: 'ターミナル: go install で bpfcompat をインストールしてバージョンを表示。' }, + ], + runHeading: 'そして実際のカーネルで実行。', + runNote: 'bpfcompat test は各カーネルを使い捨ての VM で起動し、カーネルごとの合否マトリクスを返します — ここでは 5.4 で失敗(ring buffer 対応は 5.8 から)、6.1 と 6.8 で合格。', + runAlt: 'ターミナル: ubuntu-20.04-5.4 が fail、debian-12-6.1 が pass、ubuntu-24.04-6.8 が pass を示す bpfcompat の検証実行。', + }, repo: { title: 'リポジトリの証拠', measured: '公開リポジトリから測定。', github: 'GitHub', languageMix: '言語構成', labels: { primaryLanguage: '主要言語', license: 'ライセンス', latestRelease: '最新リリース', kernelRange: 'テスト済みカーネル範囲' }, @@ -937,6 +1024,19 @@ const zhCN: BpStrings = { webButton: '打开技术预览', webNote: '运行在共享基础设施上并有速率限制。无需账户。', }, + install: { + eyebrow: '安装', + heading: '一条命令安装 CLI。', + subline: '获取 bpfcompat 的三种已验证方式——预编译的发布二进制、从源码构建,或 go install。下面每条命令都在真实的 KVM 主机上运行过。', + methods: [ + { title: '预编译发布二进制', note: '推荐。随附 CLI 与来宾内验证器,并经校验和验证。Linux x86_64。', alt: '终端:下载 bpfcompat 发布二进制、校验其校验和并打印版本。' }, + { title: '从源码构建', note: '构建 CLI 与验证器,并把真实版本号写入二进制。', alt: '终端:克隆仓库并运行 make build 与 make validator-static。' }, + { title: 'go install', note: '仅 CLI。请使用小写的模块路径与 cmd/bpfcompat 子包——裸模块路径无法安装。', alt: '终端:用 go install 安装 bpfcompat 并打印版本。' }, + ], + runHeading: '然后在真实内核上运行。', + runNote: 'bpfcompat test 在一次性虚拟机中启动每个内核,并返回逐内核的通过/失败矩阵——这里在 5.4 上失败(ring buffer 支持自 5.8 起),在 6.1 和 6.8 上通过。', + runAlt: '终端:一次 bpfcompat 验证运行,显示 ubuntu-20.04-5.4 失败、debian-12-6.1 通过、ubuntu-24.04-6.8 通过。', + }, repo: { title: '仓库证据', measured: '基于公开仓库测量。', github: 'GitHub', languageMix: '语言构成', labels: { primaryLanguage: '主要语言', license: '许可证', latestRelease: '最新版本', kernelRange: '已测试内核范围' }, @@ -1069,6 +1169,19 @@ const ko: BpStrings = { webButton: '기술 미리보기 열기', webNote: '공유 인프라에서 실행되며 속도 제한이 있습니다. 계정이 필요 없습니다.', }, + install: { + eyebrow: '설치', + heading: '명령 하나로 CLI를 설치하세요.', + subline: 'bpfcompat를 받는 검증된 세 가지 방법 — 사전 빌드된 릴리스 바이너리, 소스 빌드, 또는 go install. 아래의 모든 명령은 실제 KVM 호스트에서 실행했습니다.', + methods: [ + { title: '사전 빌드된 릴리스 바이너리', note: '권장. CLI와 게스트 내 검증기를 체크섬 검증된 상태로 제공합니다. Linux x86_64.', alt: '터미널: bpfcompat 릴리스 바이너리를 내려받고 체크섬을 검증한 뒤 버전을 출력.' }, + { title: '소스에서', note: 'CLI와 검증기를 빌드하고 바이너리에 실제 버전을 새깁니다.', alt: '터미널: 저장소를 클론하고 make build와 make validator-static을 실행.' }, + { title: 'go install', note: 'CLI만 설치. 소문자 모듈 경로와 cmd/bpfcompat 하위 패키지를 사용하세요 — 모듈 경로만으로는 설치되지 않습니다.', alt: '터미널: go install로 bpfcompat를 설치하고 버전을 출력.' }, + ], + runHeading: '그런 다음 실제 커널에서 실행하세요.', + runNote: 'bpfcompat test는 각 커널을 일회용 VM으로 부팅하고 커널별 합격/불합격 매트릭스를 반환합니다 — 여기서는 5.4에서 실패(ring buffer 지원은 5.8부터), 6.1과 6.8에서 합격.', + runAlt: '터미널: ubuntu-20.04-5.4 실패, debian-12-6.1 합격, ubuntu-24.04-6.8 합격을 보여주는 bpfcompat 검증 실행.', + }, repo: { title: '저장소 증거', measured: '공개 저장소에서 측정함.', github: 'GitHub', languageMix: '언어 구성', labels: { primaryLanguage: '주요 언어', license: '라이선스', latestRelease: '최신 릴리스', kernelRange: '테스트된 커널 범위' }, diff --git a/src/pages/bpfcompat/parts.tsx b/src/pages/bpfcompat/parts.tsx index 5f28254..336752a 100644 --- a/src/pages/bpfcompat/parts.tsx +++ b/src/pages/bpfcompat/parts.tsx @@ -510,15 +510,15 @@ function CopyButton({ text }: { text: string }) { ); } -const CLI_SNIPPET = `$ go install github.com/Kernel-Guard/bpfcompat@${BPFCOMPAT_VERSION} -$ bpfcompat test ./build/probe.bpf.o --kernel ubuntu-24.04 -$ bpfcompat suite run suite.yaml --kernels kernels.yaml`; +const CLI_SNIPPET = `$ go install github.com/kernel-guard/bpfcompat/cmd/bpfcompat@${BPFCOMPAT_VERSION} +$ bpfcompat test --artifact build/probe.bpf.o --matrix matrices/mvp.yaml --out report.json +$ bpfcompat suite --suite suite.yaml --out suite.json`; const ACTION_SNIPPET = `- uses: Kernel-Guard/bpfcompat@${BPFCOMPAT_VERSION} with: suite: ./bpf/suite.yaml - kernels: ubuntu-lts, rhel-9 - gate: load-attach`; + suite-out: reports/suite.json + validation-mode: load_attach`; export function AdoptionTabs() { const s = useBp(); @@ -606,6 +606,79 @@ export function AdoptionTabs() { ); } +/* -------------------------------------------------------------------------- + * Install — three verified paths, each with a real terminal screenshot + * ------------------------------------------------------------------------ */ + +const INSTALL_BASE = '/images/projects/bpfcompat/install'; + +const INSTALL_METHODS = [ + { + cmd: `VER=${BPFCOMPAT_VERSION} +base=https://github.com/Kernel-Guard/bpfcompat/releases/download/$VER +curl -fsSLO "$base/bpfcompat-linux-amd64" +curl -fsSLO "$base/bpfcompat-validator-static-linux-amd64" +curl -fsSLO "$base/SHA256SUMS" +sha256sum -c SHA256SUMS --ignore-missing +sudo install -m 0755 bpfcompat-linux-amd64 /usr/local/bin/bpfcompat`, + img: `${INSTALL_BASE}/install-release-binary.png`, + }, + { + cmd: `git clone https://github.com/Kernel-Guard/bpfcompat +cd bpfcompat +make build && make validator-static`, + img: `${INSTALL_BASE}/install-from-source.png`, + }, + { + cmd: `go install github.com/kernel-guard/bpfcompat/cmd/bpfcompat@${BPFCOMPAT_VERSION}`, + img: `${INSTALL_BASE}/install-go-install.png`, + }, +]; + +export function InstallSection() { + const t = useBp(); + return ( +
+ {t.install.methods.map((m, i) => ( +
+
+
{`0${i + 1}`}
+

{m.title}

+

{m.note}

+
+ + {INSTALL_METHODS[i].cmd} +
+
+
+ {m.alt} +
+
+ ))} + +
+
+

{t.install.runHeading}

+

{t.install.runNote}

+
+ {t.install.runAlt} +
+
+ ); +} + /* -------------------------------------------------------------------------- * How-it-works four-stage frame * ------------------------------------------------------------------------ */