mirror of
https://github.com/logos-storage/logos-storage-docs.git
synced 2026-01-11 17:53:09 +00:00
243 lines
9.0 KiB
Markdown
243 lines
9.0 KiB
Markdown
# Construir Codex
|
|
|
|
## Tabla de Contenidos
|
|
|
|
- [Instalar herramientas de desarrollo](#prerequisites)
|
|
- [Linux](#linux)
|
|
- [macOS](#macos)
|
|
- [Windows + MSYS2](#windows-msys2)
|
|
- [Otros](#other)
|
|
- [Clonar y preparar el repositorio Git](#repository)
|
|
- [Construir el ejecutable](#executable)
|
|
- [Ejecutar el ejemplo](#example-usage)
|
|
|
|
**Opcional**
|
|
- [Ejecutar las pruebas](#tests)
|
|
|
|
## Prerrequisitos
|
|
|
|
Para construir nim-codex, es necesario instalar las herramientas de desarrollo y que sean accesibles en el sistema operativo.
|
|
|
|
Las instrucciones siguientes corresponden aproximadamente a las configuraciones ambientales en el flujo de trabajo CI de nim-codex [CI workflow](https://github.com/codex-storage/nim-codex/blob/master/.github/workflows/ci.yml) y se sabe que funcionan.
|
|
|
|
Otros enfoques pueden ser viables. En macOS, algunos usuarios pueden preferir [MacPorts](https://www.macports.org/) o [Homebrew](https://brew.sh/). En Windows, en lugar de usar MSYS2, algunos usuarios pueden preferir instalar herramientas de desarrollo con [winget](https://docs.microsoft.com/en-us/windows/package-manager/winget/), [Scoop](https://scoop.sh/), o [Chocolatey](https://chocolatey.org/), o descargar instaladores para, por ejemplo, Make y CMake, mientras que de otro modo confían en las herramientas de desarrollo oficiales de Windows. ¡Las contribuciones de la comunidad a estos documentos y a nuestro sistema de construcción son bienvenidas!
|
|
|
|
### Rust
|
|
|
|
La implementación actual del circuito de prueba de conocimiento cero de Codex requiere la instalación de rust v1.79.0 o superior. Asegúrate de instalarlo para tu sistema operativo y agregarlo a la ruta de tu terminal de tal manera que el comando `cargo --version` dé una versión compatible.
|
|
|
|
### Linux
|
|
|
|
> [¡ATENCION!]
|
|
> Las compilaciones de Linux actualmente requieren gcc ≤ 13. Si esta no es una opción en tu
|
|
> system, sistema, puedes intentar construir [dentro de Docker](#building-within-docker) como una solución alternativa.
|
|
|
|
|
|
*Los comandos del administrador de paquetes pueden requerir `sudo` dependiendo de la configuración del sistema operativo.*
|
|
|
|
En una instalación básica de Debian (o una distribución derivada de Debian, como Ubuntu), ejecuta
|
|
|
|
```shell
|
|
apt-get update && apt-get install build-essential cmake curl git rustc cargo
|
|
```
|
|
|
|
Las distribuciones que no son Debian tienen diferentes administradores de paquetes: `apk`, `dnf`, `pacman`, `rpm`, `yum`, etc.
|
|
|
|
Por ejemplo, en una instalación básica de Fedora, ejecuta
|
|
|
|
```shell
|
|
dnf install @development-tools cmake gcc-c++ rust cargo
|
|
```
|
|
|
|
En caso de que su distribución no proporcione la versión requerida de rust, podemos instalarla utilizando [rustup](https://www.rust-lang.org/tools/install)
|
|
```shell
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs/ | sh -s -- --default-toolchain=1.79.0 -y
|
|
|
|
. "$HOME/.cargo/env"
|
|
```
|
|
|
|
Ten en cuenta que actualmente no podrás construir Codex con gcc 14. Para verificar
|
|
que tienes una versión compatible, ejecuta:
|
|
|
|
```shell
|
|
gcc --version
|
|
```
|
|
|
|
Si obtienes un número que comienza con 14 (p.j. `14.2.0`), entonces necesitas degradar o probar una solución alternativa como [construir dentro de Docker](#building-within-docker).
|
|
|
|
### macOS
|
|
|
|
Instala las Herramientas de [Línea de Comandos de Xcode](https://mac.install.guide/commandlinetools/index.html) abriendo una terminal y ejecutando
|
|
```shell
|
|
xcode-select --install
|
|
```
|
|
|
|
Instala [Homebrew (`brew`)](https://brew.sh/) y en una nueva terminal ejecuta
|
|
```shell
|
|
brew install bash cmake rust
|
|
```
|
|
|
|
Comprueba que `PATH` está configurado correctamente
|
|
```shell
|
|
which bash cmake
|
|
|
|
# /usr/local/bin/bash
|
|
# /usr/local/bin/cmake
|
|
```
|
|
|
|
### Windows + MSYS2
|
|
|
|
*Las siguientes instrucciones asumen que el sistema operativo es Windows de 64 bits y que el hardware o la máquina virtual es compatible con [x86-64](https://en.wikipedia.org/wiki/X86-64) *
|
|
|
|
Descarga y ejecuta el instalador desde [msys2.org](https://www.msys2.org/).
|
|
|
|
Inicia un [entorno MSYS2](https://www.msys2.org/docs/environments/). Generalmente se recomienda UCRT64: desde el menú *Inicio de Windows* selecciona `MSYS2 MinGW UCRT x64`.
|
|
|
|
Asumiendo un entorno UCRT64, en Bash ejecuta
|
|
```shell
|
|
pacman -Suy
|
|
pacman -S base-devel git unzip mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-rust
|
|
```
|
|
|
|
Deberíamos degradar GCC a la versión 13 [^gcc-14]
|
|
```shell
|
|
pacman -U --noconfirm \
|
|
https://repo.msys2.org/mingw/ucrt64/mingw-w64-ucrt-x86_64-gcc-13.2.0-6-any.pkg.tar.zst \
|
|
https://repo.msys2.org/mingw/ucrt64/mingw-w64-ucrt-x86_64-gcc-libs-13.2.0-6-any.pkg.tar.zst
|
|
```
|
|
|
|
<!-- #### Headless Windows container -->
|
|
<!-- add instructions re: getting setup with MSYS2 in a Windows container -->
|
|
<!-- https://github.com/StefanScherer/windows-docker-machine -->
|
|
|
|
#### Opcional: Integración del Terminal de VSCode
|
|
|
|
|
|
Puedes vincular el terminal MSYS2-UCRT64 a VSCode modificando el archivo de configuración como se muestra a continuación.
|
|
Archivo: `C:/Users/<username>/AppData/Roaming/Code/User/settings.json`
|
|
```json
|
|
{
|
|
...
|
|
"terminal.integrated.profiles.windows": {
|
|
...
|
|
"MSYS2-UCRT64": {
|
|
"path": "C:\\msys64\\usr\\bin\\bash.exe",
|
|
"args": [
|
|
"--login",
|
|
"-i"
|
|
],
|
|
"env": {
|
|
"MSYSTEM": "UCRT64",
|
|
"CHERE_INVOKING": "1",
|
|
"MSYS2_PATH_TYPE": "inherit"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Otros
|
|
|
|
Es posible que nim-codex pueda ser construido y ejecutado en otras plataformas soportadas por el lenguaje [Nim](https://nim-lang.org/) : familia BSD, versiones antiguas de Windows, etc. No ha habido suficiente experimentación con nim-codex en tales plataformas, por lo que no se proporcionan instrucciones. ¡Las contribuciones de la comunidad a estos documentos y a nuestro sistema de construcción son bienvenidas!
|
|
|
|
## Repositorio
|
|
|
|
En Bash ejecuta
|
|
```shell
|
|
git clone https://github.com/codex-storage/nim-codex.git repos/nim-codex && cd repos/nim-codex
|
|
```
|
|
|
|
nim-codex utiliza el [nimbus-build-system](https://github.com/status-im/nimbus-build-system), así que a continuación ejecuta
|
|
```shell
|
|
make update
|
|
```
|
|
|
|
Este paso puede tardar un tiempo en completarse porque por defecto construye el [compilador de Nim](https://nim-lang.org/docs/nimc.html).
|
|
|
|
Para ver más salida de `make` pasa `V=1`. Esto funciona para todos los objetivos de `make` en proyectos que utilizan el nimbus-build-system
|
|
```shell
|
|
make V=1 update
|
|
```
|
|
|
|
## Ejecutable
|
|
|
|
En Bash ejecuta
|
|
```shell
|
|
make
|
|
```
|
|
|
|
El objetivo `make` predeterminado crea el ejecutable `build/codex`.
|
|
|
|
## Herramientas
|
|
|
|
### Herramienta de descarga de circuitos
|
|
Para construir la herramienta de descarga de circuitos ubicada en `tools/cirdl` ejecuta:
|
|
|
|
```shell
|
|
make cirdl
|
|
```
|
|
|
|
## Ejemplo de uso
|
|
|
|
Consulta las instrucciones en la [Guía de Inicio Rápido](/learn/quick-start).
|
|
|
|
## Pruebas
|
|
|
|
En Bash ejecuta
|
|
```shell
|
|
make test
|
|
```
|
|
|
|
### testAll
|
|
|
|
#### Prerrequisitos
|
|
|
|
Para ejecutar las pruebas de integración, se requiere un nodo de prueba de Ethereum. Sigue estas instrucciones para configurarlo.
|
|
|
|
##### Windows (haz esto antes de 'Todas las plataformas')
|
|
|
|
1. Descarga e instala Visual Studio 2017 o más nuevo. (¡No VSCode!). En la descripción general de Workloads, habilita `Desktop development with C++`. ( https://visualstudio.microsoft.com )
|
|
|
|
##### Todas las plataformas
|
|
|
|
1. Instala NodeJS (probado con v18.14.0), considera usar NVM como administrador de versiones. [Node Version Manager (`nvm`)](https://github.com/nvm-sh/nvm#readme)
|
|
1. Abre una terminal
|
|
1. Ve a la carpeta vendor/codex-contracts-eth: `cd /<git-root>/vendor/codex-contracts-eth/`
|
|
1. `npm install` -> Debería completarse con el número de paquetes añadidos y una descripción general de las vulnerabilidades conocidas.
|
|
1. `npm test` -> Debería mostrar los resultados de las pruebas. Puede tardar un minuto.
|
|
|
|
Antes de que se inicien las pruebas de integración, debes iniciar el nodo de prueba de Ethereum manualmente.
|
|
1. Abre una terminal
|
|
1. Ve a la carpeta vendor/codex-contracts-eth: `cd /<git-root>/vendor/codex-contracts-eth/`
|
|
1. `npm start` -> Esto debería iniciar Hardhat, y mostrar una serie de claves más un mensaje de advertencia.
|
|
|
|
#### Ejecutar
|
|
|
|
El objetivo `testAll` ejecuta las mismas pruebas que `make test` y también ejecuta pruebas para los contratos Ethereum de nim-codex, así como un conjunto básico de pruebas de integración.
|
|
|
|
Para ejecutar `make testAll`.
|
|
|
|
Usa una nueva terminal para ejecutar:
|
|
```shell
|
|
make testAll
|
|
```
|
|
|
|
## Construyendo Dentro de Docker
|
|
|
|
Para el caso específico de las distribuciones de Linux que se entregan con gcc 14 y una degradación a 13 no es posible/deseable, la construcción dentro de un contenedor Docker y la extracción de los binarios copiando o montando sigue siendo una opción; por ejemplo:
|
|
|
|
```bash=
|
|
# Clona el repositorio original.
|
|
git clone https://github.com/codex-storage/nim-codex
|
|
|
|
# Construye dentro de docker
|
|
docker build -t codexstorage/nim-codex:latest -f nim-codex/docker/codex.Dockerfile nim-codex
|
|
|
|
# Extrae el ejecutable
|
|
docker create --name=codex-build codexstorage/nim-codex:latest
|
|
docker cp codex-build:/usr/local/bin/codex ./codex
|
|
docker cp codex-build:/usr/local/bin/cirdl ./cirdl
|
|
```
|
|
|
|
y voilà, deberías tener los binarios disponibles en la carpeta actual.
|