Zielgruppe: C++-CI auf Apple-Silicon-Remote-Macs mit Conan 2. Der Leitfaden bündelt Voraussetzungen, eine Spiegel-Tabelle, Parallelität/Timeouts, Cache & Disk, Retries/Lockfile mit kopierbaren Befehlen und FAQ. Mehr: vcpkg × FetchContent, GHCR-Matrix — ohne Login Startseite, Blog.
  • Remote-Drift: Dev nutzt öffentliche Indices, CI nur Firmen-Remote — Index-Parität fehlt, Tickets ohne echten Buildfehler.
  • Überparallelität: Zu hohes core.download:parallel auf geteilter NVMe erhöht TLS- und Random-Write-Last; p95 steigt.
  • Lock ohne Profil: conan.lock ohne stabile Profile/compiler.cppstd liefert widersprüchliche Binärergebnisse.

Szenariovoraussetzungen

Conan-2-Minor und Clang/Xcode-Hauptversion im Image pinnen und mit dem Release-Ref-Host abgleichen. Profile (arch, compiler.*, os.sdk) versionieren Sie neben conanfile.py. CONAN_HOME pro Mandant/Pipeline auf APFS — kein fremdes ~/.conan2 ohne Vertrag.

Alle HTTPS-Ziele für Binär- und Quellzugriffe inventarisieren. conan.lock-Refresh nur per Bot oder mit Review, damit keine Freitags-Graphen die Artefaktidentität zwischen Standorten spalten.

Spiegel-Endpunkte: Vergleichstabelle

Pro Umgebung nur eine klare Remote-Strategie für öffentliche Upstreams: sonst kollidieren virtuelle und Roh-Remotes. Entwickler-Notebooks mit dual-stack DNS und IPv4-only Runnern erfordern explizite Host-Proben, sonst wirken sporadische 403-Zyklen wie Rezeptfehler.

Endpunkt-Typ Einsatz Stabilitäts-Hinweis
center2.conan.io / ConanCenter-Remote OSS-Quickstarts ohne zusätzliche Compliance Regionale Latenz; kombinieren Sie mit moderater Parallelität oder Pull-Through-Cache bei interkontinentalen Build-Pools.
Virtuelles Repository (Artifactory, Nexus, …) Kombination aus öffentlichen und privaten Paketen unter einer Basis-URL Nur ein aktiver Conan-Remote pro Pipeline, damit keine doppelte Indexsicht entsteht.
Interner Read-Through-Spiegel Standorte mit volatilerm Transit Richtung Public Cloud Nach Blob-Aktualisierung Checksummen prüfen; Wartungsfenster kommunizieren, damit keine Rezept-Fixes fälschlich als Client-Bug laufen.

Remote prüfen und umschalten (Beispiele):

conan remote list

conan remote add firmenspiegel https://artifacts.example.com/artifactory/api/conan/conan-virtual \
  --index 0

# Option A: bestehenden Remote auf Proxy zeigen
conan remote update conancenter --url https://artifacts.example.com/artifactory/api/conan/conancenter-remote

# Option B: Community-Verkehr temporär aus
# conan remote disable conancenter

conan remote login firmenspiegel "${CONAN_USER}" -p "${CONAN_PASSWORD}"

Parallelität & Timeout-Schwellen

Transport steuern Sie über ${CONAN_HOME}/global.conf oder Einzelaufrufe mit -cc. Messen Sie p95-Download statt Max-Threads; kalibrieren Sie anhand belegter Kerne und gleichzeitiger Pipelines auf dem Host.

  • core.download:parallel — gleichzeitige Artefakt-Downloads; typisch 4–8 auf geteilten Pools, bis 12–16 nur wenn NVMe und Uplink dauerhaft unter Last gesund bleiben.
  • core.download:retry — Wiederholungen bei Serverfehlern, oft 3–5.
  • core.download:retry_wait — Sekunden bis zur nächsten Runde, z. B. 3–8; kombinieren Sie mit Job-Jitter (z. B. 4, 12, 30, 90 s) bei längeren Störungen.
mkdir -p "${CONAN_HOME}"
cat >> "${CONAN_HOME}/global.conf" <<'EOF'
core.download:parallel=8
core.download:retry=4
core.download:retry_wait=5
EOF

conan install . --lockfile=conan.lock \
  -cc core.download:parallel=6 \
  -cc core.download:retry=5

conan config show "core.download:*"

Remote-Mac-CI: Cache-Pfade & Platten-Wasserstände

Pakete unter ${CONAN_HOME}/p; CONAN_HOME ggf. pro Job verwerfen. ccache mit eigenem CCACHE_DIR und Wrapper für CC/CXX.

export CONAN_HOME="${CI_PROJECT_DIR:-$PWD}/.conan2-ci"
export CCACHE_DIR="${CI_PROJECT_DIR:-$PWD}/.ccache-conan"
mkdir -p "$CONAN_HOME" "$CCACHE_DIR"
export CC="ccache clang"
export CXX="ccache clang++"

du -sh "$CONAN_HOME" "$CCACHE_DIR" 2>/dev/null || true
ccache --show-stats

USED_PCT="$(df -h "$CONAN_HOME" | awk 'NR==2 { gsub(/%/,"",$5); print $5 }')"
if [ "${USED_PCT:-101}" -gt 88 ]; then
  echo "Platten-Warnstufe: ${USED_PCT}% belegt auf $(df -h "$CONAN_HOME" | awk 'NR==2 {print $1}')"
  exit 42
fi

Policy: Prefetch bei <12 % frei auslassen; conan cache clean zielgerichtet; Host-Pruning bei Mehrmandanten-SSD abstimmen.

Fehler, Retries & Konsistenzprüfungen

conan install mit begrenztem Retry bei 5xx/TLS — bei Dauerfehler stoppen. Checksum-Probleme beim Spiegel eskalieren, nicht nur Cache löschen.

Entscheidungsmatrix: Lockfile-Disziplin

Politik Ideal für Kompromiss
conan install mit --lockfile=conan.lock und --build=missing Release-Zweige, Promotion-Pipelines Lock muss bei Profil- oder Optionswechsel neu erzeugt werden — Fehler sind explizit.
Lockfile-Pflicht nur auf main Hochfrequente Feature-Branches Kurzlebige Zweige können temporär driften — Merge-Queue-Bot mit Lock-Refresh mindert Risiko.
Smoke-Test conan graph info … --format=json Früherkennung von Remote-Umbenennungen Fügt Sekunden pro Lauf hinzu; bewahren Sie JSON für gezielte Assertions in CI.

Lockfile erzeugen, installieren und gegenprüfen:

set -euo pipefail
conan lock create . --build=missing

conan install . --lockfile=conan.lock --build=missing \
  --output-folder=build

shasum -a 256 conan.lock
git diff --exit-code -- conan.lock

conan graph info . --lockfile=conan.lock --format=json > graph-ci.json

Siehe auch Rust Cargo: Spiegel & Lockfile.

FAQ

Remotes je Job? Nur mit Dokumentation — Laptop-vs.-CI-Drift erzeugt „Binary fehlt“.

Download-Parallelität = Build -j? Nein; separat messen.

IDE-Graph ≠ CI? Gleiches CONAN_HOME/Profil; IDE lädt oft keinen Lock.

Apple-Silicon-Node für vorab getestete Conan-Pulls

Mieten Sie einen Remote-Mac in der Zielregion, in der Ihre Spiegel und Tester liegen — damit werden Latenz und Cache-Treffer realistisch messbar. Alle verlinkten Seiten sind ohne Anmeldung lesbar.