tgoop.com/itpgchannel/2787
Last Update:
Будни #bootstrap
Запилил более лучшую изоляцию сборочных нод, чем было раньше.
Запилил, потому что пионеры из rust никак не могут понять, что не нужно лазить в систему, когда не просят.
Проявлялось это так - когда я запускал rust, собранный динамически с musl, на glibc-based системе, он лез в эту систему, ему от этого сносило крышу, и он начинал сыпать нерелевантными ошибками.
Зачем он лез, я не знаю, я это просто видел в strace, ну и более хорошая изоляция помогла избавиться от этой ошибки.
Когда я пилил эту изоляцию, то выяснилось прекрасное - cargo не может работать без /dev/random, потому что он там где-то инициализирует libgit2, а тот требует наличие /dev/random. Тут, конечно, пионеры и те, и эти, потому что зачем карге инициализировать libgit2, когда у меня под ногами не git, ну а требование libgit2 - это вообще клиника.
Герметичная сборка my ass, ага.
Сделал я это пока совсем по рабоче-крестьянски, не в graph executor (что было бы правильнее), а прямо на уровне основного сборочного шаблона - https://github.com/pg83/ix/blob/main/pkgs/die/sh0.sh#L29-L33, по флажку.
Флажок я выставил на весь свой CI, и, конечно, у меня волосы зашевелились примерно везде, когда стало понятно, насколько часто всякие левые сборки лезут в /bin и прочее. Чинил CI, наверное, с неделю.
Саму изоляцию тоже соорудил из подручных средств, потому что так получилось проще в моменте, из unshare + chroot:
https://github.com/pg83/ix/blob/main/pkgs/bld/jail/scripts/jail.sh
https://github.com/pg83/ix/blob/main/pkgs/bld/jail/scripts/jail0.sh
Проще, потому что другие средства требуют от системы больше, чем user namespaces, а мне лень было с этим разбираться.
BY commit -m "better"

Share with your friend now:
tgoop.com/itpgchannel/2787