Notice: file_put_contents(): Write of 3885 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50

Warning: file_put_contents(): Only 8192 of 12077 bytes written, possibly out of free disk space in /var/www/tgoop/post.php on line 50
commit -m "better"@itpgchannel P.2500
ITPGCHANNEL Telegram 2500
Будни #bootstrap

Я как-то писал про устройство хеша в своем cas - https://www.tgoop.com/itpgchannel/575

После https://www.tgoop.com/itpgchannel/2477 я решил, что хватит экономить на спичках, и взял в путь не 16 символов от хеша, а 22 (вот так вот странно, потому что у меня там base62) - https://github.com/pg83/ix/commit/d4c1c6cb2b0438d918715f73301848f6408531f1 https://github.com/pg83/ix/commit/8bb1e74c10b7185cda6d4092c0d6553d0fafc919

Решил и решил, но, после этого, у меня начала падать в CI сборка ya, и nix.

Падать с одной и той же ошибкой - E2BIG, она же https://github.com/pg83/ix/commit/d4c1c6cb2b0438d918715f73301848f6408531f1, она же "Argument list too long".

Это довольно известная ошибка, она связана с тем, как ядро запускает новый процесс (argc, argv, env передаются через стек вызвающего процесса). Ну и если стека не хватает, то получается вот такая вот хтонь.

То есть, падать стало довольно закономерно - пути стали длиннее, и перестали помещаться в размер стека.

Я про эту проблему знал, поэтому просто увеличил ulimit -s, и стал ждать того, что мой CI добежит до конца.

Но нифига, ошибка продолжила иметь место быть. И, что самое, СУКА, интересное, если я локально запускал в shell ту же команду, что падала в CI, то, после ulimit -s unlimited, локально все работало, а в CI - нет.

Не буду утомлять вас подробностями дебага, тем, как я запускал strace в сборочных нодах, и тем, как я думал, что ошибка в gnu make, потому что там были манипуляции с max stack size (которые я тоже очень элегантно отключил - https://github.com/pg83/ix/blob/main/pkgs/bin/make/proper/ix.sh).

В итоге, все оказалось довольно просто - make просто брал команду, и запускал ее через /bin/sh -c "very long command".

Понимаете, да?

Я напоролся на ограничение размера одного аргумента командной строки, а не на суммарную длину всех аргументов.

Второе лечится через ulimit -s, первое - нет.

Тут же стало понятно, почему локально "все работало".

Потому что интерактивный sh токенизировал эту очень длинную команду, и делал exec('very', 'long', 'command'), а не exec('sh', '-c', 'very long command')!

Для ya я это починил очень изящно - сделал так, что переменные в команде раскрывал не make, а сам shell, для этого оказалось достаточно заменить несколько переменных из $(A) -> $${A}. https://github.com/pg83/ix/blob/main/pkgs/bin/ya/0/preproc.py#L3-L11

А вот nix пока так и не починил, там все очень печально.



tgoop.com/itpgchannel/2500
Create:
Last Update:

Будни #bootstrap

Я как-то писал про устройство хеша в своем cas - https://www.tgoop.com/itpgchannel/575

После https://www.tgoop.com/itpgchannel/2477 я решил, что хватит экономить на спичках, и взял в путь не 16 символов от хеша, а 22 (вот так вот странно, потому что у меня там base62) - https://github.com/pg83/ix/commit/d4c1c6cb2b0438d918715f73301848f6408531f1 https://github.com/pg83/ix/commit/8bb1e74c10b7185cda6d4092c0d6553d0fafc919

Решил и решил, но, после этого, у меня начала падать в CI сборка ya, и nix.

Падать с одной и той же ошибкой - E2BIG, она же https://github.com/pg83/ix/commit/d4c1c6cb2b0438d918715f73301848f6408531f1, она же "Argument list too long".

Это довольно известная ошибка, она связана с тем, как ядро запускает новый процесс (argc, argv, env передаются через стек вызвающего процесса). Ну и если стека не хватает, то получается вот такая вот хтонь.

То есть, падать стало довольно закономерно - пути стали длиннее, и перестали помещаться в размер стека.

Я про эту проблему знал, поэтому просто увеличил ulimit -s, и стал ждать того, что мой CI добежит до конца.

Но нифига, ошибка продолжила иметь место быть. И, что самое, СУКА, интересное, если я локально запускал в shell ту же команду, что падала в CI, то, после ulimit -s unlimited, локально все работало, а в CI - нет.

Не буду утомлять вас подробностями дебага, тем, как я запускал strace в сборочных нодах, и тем, как я думал, что ошибка в gnu make, потому что там были манипуляции с max stack size (которые я тоже очень элегантно отключил - https://github.com/pg83/ix/blob/main/pkgs/bin/make/proper/ix.sh).

В итоге, все оказалось довольно просто - make просто брал команду, и запускал ее через /bin/sh -c "very long command".

Понимаете, да?

Я напоролся на ограничение размера одного аргумента командной строки, а не на суммарную длину всех аргументов.

Второе лечится через ulimit -s, первое - нет.

Тут же стало понятно, почему локально "все работало".

Потому что интерактивный sh токенизировал эту очень длинную команду, и делал exec('very', 'long', 'command'), а не exec('sh', '-c', 'very long command')!

Для ya я это починил очень изящно - сделал так, что переменные в команде раскрывал не make, а сам shell, для этого оказалось достаточно заменить несколько переменных из $(A) -> $${A}. https://github.com/pg83/ix/blob/main/pkgs/bin/ya/0/preproc.py#L3-L11

А вот nix пока так и не починил, там все очень печально.

BY commit -m "better"


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

View MORE
Open in Telegram


Telegram News

Date: |

The group also hosted discussions on committing arson, Judge Hui said, including setting roadblocks on fire, hurling petrol bombs at police stations and teaching people to make such weapons. The conversation linked to arson went on for two to three months, Hui said. A Hong Kong protester with a petrol bomb. File photo: Dylan Hollingsworth/HKFP. Hashtags With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. Just as the Bitcoin turmoil continues, crypto traders have taken to Telegram to voice their feelings. Crypto investors can reduce their anxiety about losses by joining the “Bear Market Screaming Therapy Group” on Telegram.
from us


Telegram commit -m "better"
FROM American