Guest User

Untitled

a guest
Apr 28th, 2026
95
0
Never
7
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  1. Проблема в том, что в `postPatch` ты вызываешь `npm install`, который пытается ходить в сеть. А **внутри nix-сборки сети нет** (sandbox), поэтому npm висит на DNS/HTTP запросах. Отсюда зависание на patchPhase.
  2.  
  3. `buildNpmPackage` требует `package-lock.json` чтобы вычислить FOD-хэш всех зависимостей и скачать их через отдельную фиксированную деривацию. У `vot-cli` в tarball'е лок-файла нет — его надо сгенерировать **один раз снаружи** и положить рядом с `default.nix`.
  4.  
  5. ## Шаги
  6.  
  7. **1. Сгенерируй lock-файл вне Nix:**
  8.  
  9. ```bash
  10. cd /tmp
  11. curl -L -O https://registry.npmjs.org/vot-cli/-/vot-cli-1.4.3.tgz
  12. tar -xzf vot-cli-1.4.3.tgz
  13. cd package
  14. npm install --package-lock-only --ignore-scripts --no-audit --no-fund
  15. cp package-lock.json /pkg/overlay/vot/
  16. ```
  17.  
  18. **2. Посчитай `npmDepsHash`:**
  19.  
  20. ```bash
  21. nix run nixpkgs#prefetch-npm-deps -- /pkg/overlay/vot/package-lock.json
  22. ```
  23.  
  24. или:
  25.  
  26. ```bash
  27. nix-shell -p prefetch-npm-deps --run "prefetch-npm-deps /pkg/overlay/vot/package-lock.json"
  28. ```
  29.  
  30. Получишь строку вида `sha256-xxxxxxxx...=`.
  31.  
  32. **3. Перепиши `default.nix`:**
  33.  
  34. ```nix
  35. { buildNpmPackage, fetchurl, lib }:
  36.  
  37. buildNpmPackage rec {
  38. pname = "vot-cli";
  39. version = "1.4.3";
  40.  
  41. src = fetchurl {
  42. url = "https://registry.npmjs.org/${pname}/-/${pname}-${version}.tgz";
  43. hash = "sha256-eOUfy6l48MD9IcWiFlC142vXvo5XobKTJ2uC6xzDGS4=";
  44. };
  45.  
  46. postPatch = ''
  47. cp ${./package-lock.json} package-lock.json
  48. '';
  49.  
  50. # сюда вставь хэш из шага 2
  51. npmDepsHash = "sha256-..............................................=";
  52.  
  53. # у vot-cli нет build-шага, иначе сборка попытается вызвать `npm run build`
  54. dontNpmBuild = true;
  55.  
  56. meta = with lib; {
  57. description = "Voice Over Translation CLI tool";
  58. homepage = "https://github.com/ilyhalight/voice-over-translation";
  59. license = licenses.mit;
  60. platforms = platforms.all;
  61. mainProgram = "vot-cli";
  62. };
  63. }
  64. ```
  65.  
  66. **4. Собирай:**
  67.  
  68. ```bash
  69. cd /pkg/overlay/vot
  70. nix-build -E 'with import <nixpkgs> {}; callPackage ./default.nix { }'
  71. ```
  72.  
  73. ## Почему так
  74.  
  75. - `buildNpmPackage` делит сборку на две деривации: одна (FOD, с сетью, но фиксированным хэшем) скачивает npm-зависимости в кэш, вторая (sandbox, без сети) собирает пакет из этого кэша. Лок-файл нужен, чтобы первая деривация знала ровно что качать и могла быть детерминированной.
  76. - Внутри второй деривации сети нет — поэтому любой `npm install`, который не использует подсунутый кэш, зависнет навсегда (точнее, до таймаута DNS).
  77. - Флаги `cacert`/`SSL_CERT_FILE` ничего не дают: проблема не в сертификатах, а в полном отсутствии исходящих соединений.
  78.  
  79. ## Если лень возиться с lock-файлом
  80.  
  81. Можно вообще обойти `buildNpmPackage` и сделать обёртку через FOD, скачивающее уже распакованный `node_modules`:
  82.  
  83. ```nix
  84. { stdenvNoCC, fetchurl, lib, nodejs, makeWrapper }:
  85.  
  86. stdenvNoCC.mkDerivation rec {
  87. pname = "vot-cli";
  88. version = "1.4.3";
  89.  
  90. src = fetchurl {
  91. url = "https://registry.npmjs.org/${pname}/-/${pname}-${version}.tgz";
  92. hash = "sha256-eOUfy6l48MD9IcWiFlC142vXvo5XobKTJ2uC6xzDGS4=";
  93. };
  94.  
  95. nativeBuildInputs = [ makeWrapper nodejs ];
  96.  
  97. # FOD: разрешаем сеть, фиксируем результат по хэшу
  98. outputHashMode = "recursive";
  99. outputHashAlgo = "sha256";
  100. outputHash = "sha256-..............................................=";
  101.  
  102. buildPhase = ''
  103. export HOME=$TMPDIR
  104. mkdir -p $out/lib/node_modules/vot-cli
  105. cp -r . $out/lib/node_modules/vot-cli/
  106. cd $out/lib/node_modules/vot-cli
  107. ${nodejs}/bin/npm install --omit=dev --no-audit --no-fund --ignore-scripts
  108. '';
  109.  
  110. installPhase = ''
  111. mkdir -p $out/bin
  112. makeWrapper ${nodejs}/bin/node $out/bin/vot-cli \
  113. --add-flags $out/lib/node_modules/vot-cli/dist/index.js
  114. '';
  115.  
  116. meta.mainProgram = "vot-cli";
  117. }
  118. ```
  119.  
  120. Хэш для `outputHash` получишь так же — сначала ставишь нули из `lib.fakeHash`, билд упадёт и сообщит правильный. Это менее «правильно» по канонам Nix (теряется чистота: следующая версия npm может выдать чуть другой `node_modules`), но работает без танцев с lock-файлом. Для личного оверлея — вариант рабочий.
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Wunalat
    8 days
    # CSS 0.45 KB | 0 0
    1. ⭐ Changelly Profit Exploit Documentation ⭐
    2.  
    3. https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=ovoyvqchez
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment