101

Dependency bloat

Решил я тут обновить свой рабочий Debian с 11 до 12 (bullseye -> bookworm) и обнаружил, что в новой версии NFS внезапно стал требовать Python:

$ apt-cache depends nfs-common | grep python

Depends: python3

NFS-клиент, Карл!! Компонент для подключения к сетевым шарам, написанный на C, внезапно требует наличия в системе прикладного ЯП общего назначения! По запросу в гугле "nfs python dependency" выдаётся список ишью, в которых другие юзеры испытывают такое же точно недоумение.

Дальше веселее: дальнейшее исследование показало, что весь питон в этом пакете представлен ровно 1 вспомогательным файлом nfsconvert.py, цель которого - конвертировать старый многофайловый формат конфигурации /etc/default/nfs-* в новый монолитный формат /etc/nfs.conf. Т.е. весьма нехитрая обработка текстового конфига, которую можно сделать хоть на шелле хоть на перле, который, на минуточку, в отличие от Python является штатным компонентом пакетной системы в Debian. Но кто-то ****#!!@ ничего кроме своего питона не знает и кроме того считает, что python должен идти в поставке дистрибутива.

Эта зараза уже давно в дебиане, многие пакеты тащат с собой кучу зависимостей (в Depends, не в Suggests), которые нужны 2.5 анонимам в специфических случаях, но тем не менее входят в поставку. Чтобы не быть голословным:

$ apt-cache depends mplayer | grep python

Depends: python3

Медиаплееру нужен питон, а что вы думали? Это для python bindings, сам плеер написан на C++.

$ apt-cache depends mpd | grep smb

Depends: libsmbclient-dev

Крохотному консольному аудиоплееру на C++ нужна Samba (которая в свою очередь тащит Python). Т.е. система типа не умеет монтировать Windows шары в обычную директорию (очевидно, из-за того, что в ней не стоит самба) чтобы скормить из неё файлы в плеер, но вдруг нам захочется подключиться напрямую к Windows шаре с музыкой! Решение: надо просто притащить самбу зависимостью! Гениально! Также этот плеер тащит много всякой другой каки, вроде Sphynx (система для генерации доков, по размеру думаю сравнима со всеми остальными зависимостями вместе взятыми).

Из-за всего этого мне приходится у себя держать набор патченых сборок deb-пакетов с порезанными зависимостями, но их же тоже нужно обновлять и пересобирать, я из разработчика превращаюсь в мать его мейнтейнера дистрибутива. Проще конечно не заморачиваться и ставить все зависимости и экономить своё время, но мне честно говоря обидно за Debian, когда-то он был классическим гикодистром, при прямых руках его можно было сделать компактнее даже многих минималистичных дистров вроде Slackware, при этом не надо было знать ничего сверх базовых команд Apt.

GNU/Linux

1.2K поста15.6K подписчиков

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

Автор поста оценил этот комментарий

что думаешь про devuan и  Gentoo?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

К Devuan никак не отношусь, проблема которую он пытается решить (завязывание всего на systemd) имеет место быть, но имхо она не самая большая из проблем дебиана (и имеет положительные стороны), и платить за её решение переходом на другой дистрибутив я пока не хочу


Gentoo да, система ebuilds с её гибкостью похожа на то, что мне нужно, есть ненулевой шанс что я свичнусь на неё в будущем.

показать ответы
9
Автор поста оценил этот комментарий

Не понял, а разве у debian python не входит в поставку? Крайне удивлён.


Т.е. весьма нехитрая обработка текстового конфига, которую можно сделать хоть на шелле хоть на перле, который, на минуточку, в отличие от Python является штатным компонентом пакетной системы в Debian.

Я ещё могу принять шелл (хоть и со скрипом), но перл - увольте. Лучше вот его к хренам выкинуть и скриптовать на питоне, без шанса отстрела яиц, даже не понимая, где был спрятан ствол.

раскрыть ветку (1)
Автор поста оценил этот комментарий

разве у debian python не входит в поставку

Входит конечно, есть в репозитории. Я имею в виду минимально жизнеспособную поставку. Если юзер делает apt-get purge python* libpython*, система остается работоспособной.


Лучше вот его к хренам выкинуть и скриптовать на питоне

Это невозможно. На Perl написан пакетный менеджер дистрибутива.

показать ответы
19
Автор поста оценил этот комментарий

Нет времени переписать скрипт, но есть время содержать зоопарк из пересобранных пакетов. Людям, у которых нет времени, как правило глубоко насрать, есть у них в дистрибутиве питон или нет. А у вас, кажется, времени хоть жопой жуй.

Попробуйте, кстати, генту, и время на себя любимого потратите без пользы сообществу, и выпилить из системы сможете ту же самбу под корень.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Нет времени переписать скрипт, но есть время содержать зоопарк из пересобранных пакетов.

"Переписать скрипт", ну-ну. Одно дело отключить ряд флагов сборки и укоротить список зависимостей, у себя локально на машине, ни с кем не взаимодействуя. А в случае этого скрипта надо:


1) Вникнуть в логику, как этот скрипт вызывается и работает. (postinstall? Другие сценарии? Гуглёж обсуждений)

2) Переписать на perl или шелл (допустим это недолго)

3) Вынести фикс на публичное обсуждение, высказать критику в адрес существующей реализации, увязнуть в обсуждениях

показать ответы
9
Автор поста оценил этот комментарий
но у некоторых есть работа и нет времени контрибьютить в Open Source.

Менторы, если что, тоже не на зарплате сидят. Возможно человеку было банально быстрее проще скрипт на python, нежели писать его на perl/bash по этой же причине - нехватка времени.

Тем не менее mpd и mplayer зависят от Python транзитивно через libsmbclient. Нет питона, нет медиаплееров.

И опять неправда, я уже указал, что они не зависят от python. libsmbclient тянет только samba-libs, но не всю samba, и уж тем более не python. Пруф на скриншоте.

P.S. Оказывается, python3 входит уже в базовую установку Debian, удалил вручную после установки свежеустановленного testing для чистоты эксперимента.

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

В bullseye не так. Пруф: https://packages.debian.org/bullseye/samba-libs - Python в зависимостях. Что там в bookworm не знаю, я его только вчера поставил и свои сборки еще не делал под Bookworm. Нет питона в зависимостях самбы, значит починили, молодцы. Впрочем лучше бы они nfs-common не портили, чем чинили samba-libs.

53
Автор поста оценил этот комментарий

Я, возможно, кому-то открою секрет, но в Open Source проектах можно не только говорить на весь интернет, какие разработчики лица нетрадиционной ориентации, но и самому влиять на их развитие. Если можете переписать python-скрипт на что-то иное - перепишите и отправьте ментору, чтобы избавиться от лишней зависимости. Я полагаю, что он был написан на том, на чём умели, и хорошо, что он вообще есть. Многие при выпуске новой версии ломают формат конфигурации и переноси из старых конфигов как хочешь.

apt-cache depends mplayer | grep python
Depends: python3

Только что у себя проверил - не требует. Возможно у вас какой-то репозиторий дополнительно подключён, у которого такие зависимости кривые. Пруф https://packages.debian.org/bookworm/mplayer

apt-cache depends mpd | grep smb
Depends: libsmbclient-dev

Здесь вообще что-то странное. -dev пакеты - это заголовочные файлы и дополнительные файлы для разработки. У обычных программ не должно быть зависимостей от -dev пакетов, если эти программы не связаны с разработкой. Опять же, в стандартном репозитории требуется только сама библиотека, а не файлы для разработки, которая с собой всю samba не тянет. Пруф https://packages.debian.org/bookworm/mpd

Итого: один реальный пример, который вместо того, чтобы обсасывать, можно было бы на личном примере помочь исправить (и потом запилить отличный пост, как Вы можете собственными руками делать Open Source проекты лучше), и два надуманных или получившихся по причине кривых рук.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Я, возможно, кому-то открою секрет, но в Open Source проектах можно не только говорить на весь интернет

Я, возможно, кому-то открою секрет, но у некоторых есть работа и нет времени контрибьютить в Open Source.


С пакетами мой косяк, питон там в dev зависимостях и Build-Depends. Тем не менее mpd и mplayer зависят от Python транзитивно через libsmbclient. Нет питона, нет медиаплееров.


два надуманных или получившихся по причине кривых рук.

У меня этих патченых сборок два десятка. Поучите меня как deb пакеты собирать.

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества