Очередной раз листая бесконечные чатики, наткнулся на интересный вопрос.
https://t.me/linkmeup_podcast/11014
Чатик, а кто что думает касательно того факта, что каждый второй проект на гитхабе предлагает установить результаты своей плодотворной деятельности через curl -fsSL https://точнонепалево.ком/install.sh | bash?
Как это потом удалить? Как это обновить? Что делать, если пайп баша икнёт? Как объяснить адептам «Ну ты скачай и посмотри, что там, а не сразу запускай», что 99% народонаселения не испытывает никакого желания читать несколько сотен строчек спагетти-кода? А даже если и читают, то есть такой неудобный нюанс, который забывают многие, что как только curl скачал первые строки, пайп их сразу отдаёт в баш, а не ждёт, когда скачается весь файл?
А и правда, насколько это хреново?
На личной свежей тачке запустил анализ чего я вообще ставил через
curl | bash за последнее время. Нашёл 5 штук.
cat ~/.zsh_history | strings | grep -E 'curl.*\|.*(bash|sh)' | head -100
curl -fsSL https://claude.ai/install.sh | bash
curl https://cursor.com/install -fsS | bash
curl -fsSL https://openinterpreter.com/install | sh
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
curl -fsSL https://pi.dev/install.sh | sh
Результат неоднозначный:
- Open Interpreter образцово: SHA-256 верификация, мутекс блокировка при установке (признаюсь сам узнал про это при изучении скрипта, знал лишь частично), маркированные блоки в .zshrc чтобы потом легко убрать. Вообще ок, хоть и беда с башкой при хелл депенденси.
- Claude тоже хорошо: скачивает бинарь, верифицирует чексам, запускает и удаляет временный файл. Чисто. Хотя я думал там больше всего лулзов будет.
- Cursor норм, но чексам не проверяет вообще.
Просто качает архив и распаковывает. Конечно же не ок.
- Hermes - вот тут началось. Ставит питон 3.11, ноджс, playwright, хромиум (~300MB, лол), может попросить sudo и доставить системные пакеты через brew/apt.
После rm -rf ~/.hermes/ следы всё равно остаются.
Я не смог полностью удалить все следы.🤡
- Pi - просто npm install -g, удаляется одной командой.
Зачем вообще нужен был скрипт с анимациями - загадка, лол.
Главная первая проблема: да, я запускаю говно, не проверяя. 🦍
Исправлюсь.
Главная вторая проблема: если я запустил скрипт и не сохранил его - я никогда не узнаю точно что именно было установлено, потому что скрипт по URL живой и меняется.
В целом можно отследить по гиту и коммитам, но всё же, зачем себе сложности пилить.
Если есть публичный репо 😀.
Наверное правильно было бы делать:
curl -fsSL https://example.com/yet-another-zalupa-install.sh | bash -x 2>&1 | tee ~/yet-another-zalupa-install.log
Так хоть есть что читать потом, чтобы почистить.
Хотя не, если там подпроцессы, то ничего не запишется, да?
Ну решил ради интереса посмотреть что там в инсталлерах у других продуктов - взял первые попавшиеся из истории слака и телеги:
curl -fsSL https://mimo.xiaomi.com/install | bash
curl -fsSL https://opencode.ai/install | bash
curl -fsSL https://install.determinate.systems/nix | sh -s -- install
curl -fsSL https://get.jetify.com/devbox | bash
- Мимо без чексам, качает с закрытого CDN. Никакого публичного репо, никакого способа проверить что там. Просто доверяй Xiaomi, да.😬
- OpenCode делает редирект на GitHub. Звучит норм? Ан нет: редиректит прямо на ветку dev. Продакшн инсталлер с dev-ветки, без тегов, меняется при каждом коммите. Чот я чайкой крикнул как это забавно выглядит.
- Nix единственный из четырёх кто хотя бы TLS 1.2+ с нормальными шифрами форсит и ретрай делает. Сам бутстрап скрипт - просто качает раст бинарь который уже всё и делает. И у них есть нормальный uninstaller как я понял.
- Devbox качает бинарь без верификации, кладёт через sudo в /usr/local/bin. Без подтверждения, без чексам. И как бонус - если никс не стоит, поставит сам. Получаешь девбокс, а в нагрузку прилетает весь никс стор. Но я плохой никс инженер, может чего не понимаю и это норма.
Да, можно сказать, что "да это же софт для изолированных песочниц! какая разница?".
Ну не все ставят тот хермес в песочницу. Как и курсор агент.
Этот паттерн установки у многих же, для основных рабочих машин и серверов.
Проблема больше и глубже, как по мне.
Ну а вообще да, дрянная практика, ещё один вектор атаки с сотней вариативных способов нагнуть ленивых инженеров.
А эта лень обязательно кого-то невероятно больно ударит.
Печаль.