Предисловие и проблема
О проблемах Linux можно говорить бесконечно, но есть одна такая, на решение которой было потрачено буквально полтора месяца, и фраза «Linux бесплатен, только если ваше время не имеет ценности», судя по всему, никогда не потеряет свою актуальность, особенно учитывая, что если бы я использовал действительно грамотно разработанную операционную систему в лице Microsoft Windows, у меня в принципе не было бы таких проблем...
Ранее я уже писал про ущербность репозиториев в Desktop сегменте, целых три статьи получилось о том, как пытался заставить работать локальную копию репозиториев Debian, в один момент это даже получилось, но как только перенёс репозиторий в другую папку - всё опять поломалось само собой, и целых полтора месяца не было никаких решений этой характерной для Linux проблемы:
Танцы с бубном, или почему Linux репозитории несостоятельны в Desktop сегменте
Продолжение истории о несостоятельности репозиториев Linux в Desktop сегменте
Снова поломался локальный репозиторий Debian 12.5, или почему Linux не для людей
Ну а что же диванные эксперты? Ведь наверняка кто-то подсказал решение проблемы с нерабочей локальной копией репозитория? Ну, как сказать... Обычно не отличающаяся адекватностью часть сообщества Linux сразу опускается до оскорблений в адрес любого "неугодного":
Другая, часть "сообщества" пытается строить из себя "экспертов", даже целые простыни расписывают, и они порой визуально могут показаться чем-то правильным в глазах неопытных людей (на это вероятно и расчёт), но на самом деле зачастую это лишь пустой трёп в попытках оправдать вечно кривые линуксы за счёт перевода всех проблем на условную глупость пользователя:
Так вот, сколько бы я не плясал с бубном над локальным репозиторием, сколько бы форумов не изучал по схожим проблемам, решение так и не нашлось... Вот у человека после установки обновлений появилась ошибка с репозиториями, как проблема была решена? Конечно же переустановкой Linux:
Ну и классические перлы в стиле "не работает - значит не нужно пользователю", как без этого:
А уж как меня напрягала проблема "APT::Default-Release as such a release is not available in the sources", приводящая к автоматическому закрытию менеджера пакетов Synaptic без возможности исправить проблемную запись через графический интерфейс, приводящую к проблеме...
Я уже задумался о том, что это проблема в моём дистрибутиве Chimbalix, что локальный репозиторий никак нельзя подключить, но в других дистрибутивах такая же проблема... В совершенно чистой, только что установленной Ubuntu локальный репозиторий тоже не работает, только ругается бессмысленными ошибками, что не говорят абсолютно ничего о реальной причине:
В общем всё бесполезно, локальный репозиторий не работает, и в интернете не нашлось ни одного действительно рабочего решения, да и проблемы с репозиториями весьма распространённое явление, правда адепты "пингвина" всё равно будут рассказывать сказки, мол, это всё пользователь тупой, но ни в коем случае не линуксы кривые:
-
Как я решил проблему
Так как локальные репозитории не работали, а всевозможные танцы с бубном не давали результатов, я плавно переключился на танцы с бубном над Web сервером под названием nginx, он никак не хотел видеть символические ссылки...
И о чудо, оказывается, эта проблема тоже распространённая! Как же так, ведь в линуксах всё прекрасно, а если есть проблемы - обязательно виноват пользователь (сарказм)! Только вот предлагаемый костыль в виде "disable_symlinks off" не решил мою проблему, а танцевать над fstab у меня абсолютно никакого желания нет, причём не факт что ещё поможет:
Рано или поздно я набрёл на другой форум с такой проблемой, и опять предлагают возню с fstab... Но! Среди прочего обнаружился интересный момент, а именно кривые права на каталог подключенных устройств пользователя по адресу /media/USERNAME, как думаете, это помогло?
Ну что, не проверишь - не узнаешь, у меня тоже права на каталог /media/USERNAME оказались кривыми, а значит это типичная для Linux проблема:
Ведь исправление кривых прав установленных "из коробки" решило проблему слепого на символические ссылки nginx, и тут я подумал, а что если именно из-за этого у меня и репозиторий Debian не хотел работать:
И да, репозиторий магическим образом нормально заработал, хотя изначально я вообще решал проблему с Web сервером nginx... А ещё приверженцы "пингвина" будут рассказывать сказки, мол, в линуксах всё нормально, нужно просто всё делать "правильно"! Только вот я не представляю как до решения этого дерьма с репозиториями Linux вообще догадаться, если только случайно не обнаружить работая над совершенно другой проблемой.
Собственно проверил права в свежей Ubuntu, ещё не видавшей даже доступ к интернету, и да, там тоже кривые права на каталог /media/USERNAME, именно из-за этого и не работал локальный репозиторий, так что ещё раз скажу - это характерная для Linux проблема:
Так что если есть безумцы, которые решились использовать Linux вместо нормальной операционной системы, готовьтесь к всевозможному мракобесию, тут это обычное явление.
Ну и не забудьте приготовить отдельный HDD объёмом от 1 ТБ, если вдруг пожелаете ковырнуть дичь под названием "репозитории", ради независимости от нестабильных, и вечно умирающих репозиториев в интернете:
-
Заключение
Что сказать, одна из множества проблем наконец решилась, причём совершенно случайно, ведь решал я совсем другую проблему, Linux, что с него взять, не просто так на уровне статистической погрешности его популярность в Desktop сегменте...
Ну а для тех, кто попадёт в такую же мучительную ситуацию, когда локальный репозиторий никакими танцами с бубном не хочет работать - оставлю небольшую "шпаргалку" (актуально 2024-04-30).
Утилита для клонирования репозиториев: apt-mirror (sudo apt install apt-mirror, если нет в дистрибутиве из коробки, требуется доступ к рабочим репозиториям в интернете, к сожалению разработчики не очень адекватны, и не предоставляют портативную версию утилиты).
Файл конфигурации "apt-mirror": /etc/apt/mirror.list
Минимальный пример файла конфигурации "/etc/apt/mirror.list" для загрузки веток репозитория Debian bookworm архитектур i386/AMD64 и исходных кодов:
Параметр "set base_path" указывает куда скачивать репозиторий, делать это следует на диск, где свободно как минимум 300 ГиБ места, я вас предупредил.
Параметр "set nthreads" лучше установить в значение не более 4, иначе замучаетесь искать проблемы в логах, если такие произойдут.
Далее остаётся только вызвать в терминале apt-mirror и дождаться скачивания сотен гигабайт пакетов, так как у меня уже они загружены, заново скачиваются только заголовочные файлы, что были удалены вручную:
Если же загрузка была прервана, а это вполне возможный сценарий учитывая объём в сотни гигабайт, наверняка некоторые пакеты будут поломаны, сколько бы вы не начинали заново процесс скачивания, битые пакеты не будут перезаписаны, а в логах не всегда будет указан поломанный файл.
И хорошо если известно какой именно пакет был поломан, в данном случае я нарочно переместил правильные пакеты 3depict в отдельную папку, и прервал скачивание, но когда это происходит непреднамеренно, например из-за проблем с сетевым подключением, то остаётся только один вариант - удалить всё и начать заново, как бы это больно не было, либо вручную искать поломанные файлы, что тоже очень больно на практике:
Далее необходимо сделать неочевидное действие, а именно создать символическую ссылку stable на папку выпуска, в моём случае bookworm, без этого можно начать танцевать с бубном решая неочевидные проблемы:
В папке "mirror/deb.debian.org/debian/dists/" сделать ссылку:ln -s bookworm stable
Крайне не советую делать ссылки с абсолютными путями, это спровоцирует очередные танцы с бубном на ровном месте, как и всегда в Linux куда не плюнь...
Ну что, репозиторий почти готов, осталось обойти ещё одни грабли дряхлого пингвина, а именно исправить стандартные права доступа к файлам локального репозитория, абсолютно все должны иметь полный доступ к файлам репозитория, если это не сделать - будьте готовы танцевать над пакетным менеджером в попытках исправить очередные проблемы на ровном месте:
Так же не забываем про грабли с каталогом "/media/USERNAME", команда "sudo chmod 751 /media/USERNAME" в помощь:
Не спорю, если вы клонируете репозиторий на системный диск, то и грабли с каталогом /media вероятно обойдут стороной, но если вдруг репозиторий будет на внешнем HDD как у меня, или флешке (порой можно услышать сказки о простоте клонирования репозиториев на флешку от адептов Linux), то эти грабли с кривыми правами вам доставят очень много геморроя на голову...
Ну вот и всё, дело осталось за добавлением локального репозитория в систему, и не забываем, что при переносе папки с репозиторием, так же придётся вручную изменять путь в настройках пакетного менеджера:
Как можно заметить - всё отлично заработало после учёта множества характерных для Linux граблей, которые не особо то и учитываются в документациях:
Теперь можно не насиловать интернет канал по любому чиху, а использовать локальный репозиторий, хотя это неочевидно, ведь пакетный менеджер не говорит из какого именно места берёт пакеты, но это уже мелочи, как говорят - нужно просто знать:
Жаль только знания по вечно кривым линуксам и множеству связанных проблем не даются каждому человеку прямо с рождения...
P.S. Я и не сомневался в этом:
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
...