Remote build
Как сделать распределенные билды (реф https://nixos.wiki/wiki/Distributed_build и https://nixos.org/manual/nix/stable/advanced-topics/distributed-builds.html):
На машине-билдере (назову её wsl
, в моем случае - это весло с арчем):
Ставим сам nix:
|
|
На локальной тачке (честная полноценная nixos, так её и назовем: nixos
):
Делаем ключ под коннект
|
|
Там же, собираем конфиг /root/.ssh/config
(кладем в рута, потому что демон на ремоут будет ходить от рута. Можно как-то более nix-way, но я сделал тупо cat):
|
|
Мне ещё надо было вытянуть наружу из весла порт ssh, поэтому клоню https://github.com/mqudsi/tcpproxy и запускаю на хосте весла:
cargo run -- 127.0.0.1:22 -b ${REMOTE_IP} -l 1022
На локальной машине [nixos]
:
sudo ssh builder
- сначала проставим ключ в known_hosts
и
проверим, что всё работает:
nix store ping --store ssh://builder --extra-experimental-features nix-command && echo ok
Также добавляем в конфиг никса на локалке:
|
|
А дальше у меня не заработало, потому что nix-демон на ремоут тачке ругался на то, что, мол, архивы, которые я загрузил - плохие и подпись в них не проверяется.
(ошибка because it lacks a signature by a trusted key
)
Решил следующим способом (что-то из того, что я сделал - помогло.):
На [wsl]
- генерим ключи для “подписи” кэша:
nix-store --generate-binary-cache-key wsl cache-priv-key.pem cache-pub-key.pem
Добавляем ключ в конфиг:
echo 'secret-key-files = /home/nix-builder/cache-priv-key.pem' >> '/etc/nix/nix.conf'
И добавляем локального для билдера пользователя в “доверенных пользователей”. Официальная дока не очень одобряет это, там тейк в том, что типа такой пользователь может сделать что угодно с системой, поэтому мол доверенные пользователи и он якобы эквивалентен руту.
echo 'trusted-users = nix-builder' >> '/etc/nix/nix.conf'
Подписываем уже имеющиеся пакеты:
sudo nix store sign --all -k /home/nix-builder/cache-priv-key.pem --extra-experimental-features nix-command;
Не забываем рестартнуть демон:
sudo systemctl restart nix-daemon.service
На локалке ещё добавляем в конфиг:
|
|
Готово, вы великолепны.