diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3cdbd5d5931256b88edab73508d3dfe078c366e5..33db8931933d541abb1ba40eef7a96280c7a66cb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,26 @@ build:lagarto-ox: stage: build + when: manual tags: - nix script: - nix develop -L .#lagarto-ox --command fpga/run-remotely.sh fpgalogin1:ci + +build:lagarto-ox-tarball: + stage: build + when: manual + tags: + - nix + script: + - nix build -L .#nixosConfigurations.lagarto-ox.pkgs.fpga-tarball + - cd result + - out=/ceph/home/gitlab-runner/public_html/nixos-riscv/ + - fn=$(ls | head -1) + - cp $fn $out/$fn + - rm -f $out/latest.tar.zst + - ln -s $out/$fn $out/latest.tar.zst + - cd .. + - rm result + - | + echo "Pinned: https://jungle.bsc.es/~gitlab-runner/nixos-riscv/$fn" + echo "Latest: https://jungle.bsc.es/~gitlab-runner/nixos-riscv/latest.tar.zst" diff --git a/lagarto-ox.nix b/lagarto-ox.nix index 571cc1c6e20366a376cfb9b72c717bed96ddbbff..c5aa3563c538b38545512dbce7163d7db94faff5 100644 --- a/lagarto-ox.nix +++ b/lagarto-ox.nix @@ -546,6 +546,91 @@ EOF ''; + # A tarball with all the parts to boot NixOS in a FPGA + fpga-tarball = let + build = config.system.build; + in prev.stdenv.mkDerivation rec { + name = "nixos-riscv"; + src = ./fpga; + + COMMIT = if self ? rev then self.rev + else throw ("Refusing to build tarball from a dirty Git tree!"); + + TOPLEVEL = build.toplevel; + OPENSBI = final.opensbi; + KERNEL = build.kernel; + INITRD = build.initialRamdisk; + ROOTFS = build.sdImage; + UBOOT_ENV = final.uboot-env; + BITSTREAM = final.bitstream; + BOOTROM = final.bootrom; + bitName = builtins.baseNameOf BITSTREAM; + + unpackPhase = '' + mkdir -p src/nixos-riscv + ln -s $src fpga + fpga/upload.sh src/nixos-riscv + chmod +w -R src + sourceRoot=src + ''; + + buildPhase = '' + cat > nixos-riscv/README.txt < + + These files allow you to boot NixOS on Lagarto Ox. They correspond to + this commit: + + https://pm.bsc.es/gitlab/rarias/nixos-riscv/-/commit/${COMMIT} + + Here are the pieces used by this system: + + COMMIT = ${COMMIT} + TOPLEVEL = ${TOPLEVEL} + OPENSBI = ${OPENSBI} + KERNEL = ${KERNEL} + INITRD = ${INITRD} + ROOTFS = ${ROOTFS} + UBOOT_ENV = ${UBOOT_ENV} + BITSTREAM = ${BITSTREAM} + BOOTROM = ${BOOTROM} + + Copy these files into a MEEP FPGA node, then allocate a FPGA node and + run from this directory (don't forget the dot at the end): + + $ ./run-node.sh . + + That would flash the bitstream and NixOS and boot the whole system + until the login, and exit after some inactivity period. You should see + this message near the end: + + __________________ + < Welcome to NixOS > + ------------------ + ^__^ + (oo)_______ + (__) )/ + ||----w | + || || + + If you can read this message then then you have + successfully booted NixOS into the login shell. + + EOF + ''; + + installPhase = '' + mkdir -p $out + tar --zstd -cvf $out/${COMMIT}.tar.zst nixos-riscv + ''; + + nativeBuildInputs = with final.buildPackages; [ rsync zstd ]; + }; + opensbi = prev.opensbi.overrideAttrs (old: rec { #version = "1.4"; version = "1.5";