Compilar desde el código fuente

Es fácil compilar GraphoOS desde el código fuente en una distribución GNU/Linux. Cargo se encarga de la compilación; lo único que tienes que hacer es asegurarte de que están instaladas las dependencias correctas.

  1. Instala el compilador de Rust y Cargo con rustup.rs. Si ya tienes la toolchain, asegúrate de usar la última versión de Rust.

  2. Instala las dependencias de tu sistema operativo:

Ubuntu

sudo apt install clang libxkbcommon-x11-dev pkg-config libvulkan-dev libwayland-dev xorg-dev libxcb-shape0-dev libxcb-xfixes0-dev

Fedora

sudo dnf install clang libxkbcommon-x11-devel libxcb-devel vulkan-loader-devel wayland-devel openssl-devel pkgconf

Void Linux

sudo xbps-install -S base-devel clang libxkbcommon-devel vulkan-loader wayland-devel

Mientras los repositorios de GraphoOS sean privados, Cargo necesita tus credenciales de GitHub para traer las dependencias graphoos-*. El .cargo/config.toml del repositorio ya le dice a Cargo que use el git del sistema, así que basta con haber hecho gh auth login (o tener un token en el ayudante de credenciales de git). En un contenedor o en un trabajo de CI, exporta un token y ejecuta git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/" antes de clonar: el clon lo necesita tanto como la compilación. Comprobado el 2026-09-24 en un contenedor rust:1.98.1-bookworm limpio siguiendo estos pasos tal cual (registro en build-logs).

  1. Clona este repositorio (este comando lo clona en tu carpeta personal):
git clone https://github.com/Empoorio/graphoos.git ~/graphoos
  1. Entra con cd en el repositorio y ejecuta el comando de compilación con la opción de release
cd ~/graphoos
cargo install --path . --bin graphoos --profile release-lto --locked

release-lto optimiza el programa entero de una vez y necesita bastante más de 8 GB de memoria en el último paso; un contenedor o equipo con 8 GB o menos muere ahí sin decir nada. En uno así, compila con --profile release: el mismo editor, algo más grande y más lento.

Si usas otra distribución y te cuesta encontrar las dependencias adecuadas, ¡avísanos en una issue!

Una vez compilado GraphoOS, el ejecutable estará en $HOME/.cargo/bin/graphoos y debería estar en el PATH automáticamente.

Gramáticas, consultas y proxies

Un programa compilado solo con cargo no tiene colores de sintaxis hasta que encuentra gramáticas: busca primero las que lleva consigo y después las descargadas. make app las mete en GraphoOS.app/Contents/Resources; para una compilación propia, ponlas a su lado con

scripts/bundle_resources.sh ~/.cargo/share/graphoos

(share/graphoos junto a la carpeta del programa; también vale resources/ al lado del programa, y GRAPHOOS_RESOURCES_DIR apunta a cualquier otra carpeta). Toma los archivos de gramáticas de GRAPHOOS_GRAMMARS_DIST (el dist/ del repositorio de gramáticas) y los proxies de Linux de scripts/build_linux_proxies.sh. Con ellos, una instalación limpia tiene colores y se conecta a máquinas Linux sin red y sin cuenta. tools/bundled_smoke.py lo comprueba en el editor en marcha.

Compilar sin red, y de forma reproducible

scripts/vendor_tarball.sh [commit] crea graphoos-<versión>-<commit>-vendored.tar.gz: el repositorio en ese commit y todas las dependencias con las que compila (vendor/), con un .cargo/config.toml que las toma de ahí. Compila sin red y sin credenciales:

tar xzf graphoos-0.5.0-beta.1-<commit>-vendored.tar.gz && cd graphoos-0.5.0-beta.1-<commit>
RUSTUP_TOOLCHAIN=1.98.1 cargo build --offline --frozen --profile release

RUSTUP_TOOLCHAIN porque rust-toolchain.toml pide también rustfmt y clippy, que para compilar no hacen falta y rustup intentaría descargar: sin red, nombra la toolchain instalada.

Dos compilaciones del mismo commit dan los mismos bytes cuando se hacen desde la misma ruta (scripts/reproducible_check.sh compila dos veces en /tmp/graphoos-build y compara). Desde dos carpetas distintas, no: cargo mete la ruta de los paquetes propios del workspace en el nombre de sus símbolos, adonde --remap-path-prefix no llega.

Compilar con Docker o Podman

Los paquetes de las releases se compilan en contenedores basados en Dockerfiles de varias etapas. Para orquestar las compilaciones con facilidad, en la raíz del repositorio hay un manifiesto docker-bake.hcl que define todas las etapas y los objetivos. Si quieres compilar todos los paquetes de Ubuntu, puedes ejecutar RELEASE_TAG_NAME=nightly docker buildx bake ubuntu (RELEASE_TAG_NAME es una variable de entorno obligatoria que indica qué tipo de release se compila y, además, fija la propia versión). Para limitarte a una versión concreta de una distribución, puedes indicar el objetivo con su versión correspondiente de la matriz; por ejemplo, para compilar solo el paquete de Ubuntu Focal, ejecuta RELEASE_TAG_NAME=nightly docker buildx bake ubuntu-focal. Además de compilar varias versiones del sistema a la vez, las compilaciones con Docker también intentan hacer compilación cruzada de GraphoOS para otras arquitecturas. No hace falta tener QEMU instalado, porque es compilación cruzada de verdad: HOST ejecuta la arquitectura nativa de tu sistema y CPU y TARGET es la arquitectura deseada, en lugar de levantar un contenedor que ejecute un sistema con la arquitectura TARGET.

![WARNING] No ejecutes objetivos genéricos como ubuntu o fedora si no tienes una máquina muy potente, porque lanzan muchos trabajos a la vez que tardan mucho en compilar.

Fuente: docs/es/building-from-source.md