Ошибка при разборе однострочной записи в sources.list.d

Вопрос или проблема

Я не смог найти конкретное решение этой проблемы. У меня есть файл источников с одной строкой:
deb file:/var/local/my.repository-name /var/local/my.repository-name/
В репозитории имеются (помимо пакетов) файлы Release, InRelease, Release.gpg.
Когда я запускаю apt update, я получаю:
The repository 'file:/var/local/my.repository-name /var/local/my.repository-name/ Release' does not have a Release file
После этого возникает ошибка.
Очень похоже, что Парсер вставляет пробел после завершающей косой черты элемента ‘suite’, из-за чего команда не выполняется.
Как исправить эту проблему?

Примечание: Я также попробовал создать поддиректорию под названием ‘fudgeit’ и переместил туда все файлы, так что теперь в файле my.repository-name.list имеется одна строка:
“deb file:/var/local/my.repository-name fudgeit/”
Я получаю ту же ошибку и также замечаю, что при попытке найти файлы InRelease и Release он, похоже, добавляет лишний пробел в оба файла, из-за чего они не находятся, хотя ошибка сообщается только для Release.

Ответ или решение

Для решения проблемы, которую вы описали в использовании sources.list.d с локальным репозиторием Apt, давайте разберемся, как устроен процесс работы и какие потенциальные ошибки могут быть допущены.

Теория

Apt — это инструмент управления пакетами в операционных системах на базе Debian, таких как Ubuntu. Он работает с репозиториями, откуда получают пакеты и метаданные для установки или обновления программного обеспечения. В этом процессе важную роль играют файлы конфигурации, такие как /etc/apt/sources.list и файлы в директории /etc/apt/sources.list.d/. Эти файлы содержат записи (deb или deb-src), каждая из которых указывает, каким образом и откуда apt должен получать пакеты.

Каждая строка в этих файлах должна соответствовать определенному формату. В случае репозиториев, хранящихся локально (например, file: протокол), источнику данных также необходимо наличие файлов Release, InRelease и Release.gpg для обеспечения целостности и подлинности пакетов. Файл Release содержит метаданные о репозитории, в том числе информацию о всех пакетах, которые можно установить.

Пример

В вашем случае наблюдается ошибка, при которой apt сообщает, что не удается найти файл Release, даже если он физически существует в нужной директории. Строка конфигурации, которую вы предоставили, выглядит так:

deb file:/var/local/my.repository-name /var/local/my.repository-name/

Сообщение об ошибке:

The repository 'file:/var/local/my.repository-name /var/local/my.repository-name/ Release' does not have a Release file

Эта ошибка часто возникает из-за того, что apt интерпретирует данную строку конфигурации с лишними пробелами, что приводит к неправильному парсингу URL. Убедитесь, что в вашей строке отсутствуют лишние пробелы, особенно после последнего символа /.

Вы также отметили, что создали поддиректорию fudgeit и переместили все необходимые файлы туда, обновив строку следующим образом:

deb file:/var/local/my.repository-name fudgeit/

Тем не менее, вы получаете ту же ошибку, а это указывает на систематическую ошибку в процессе парсинга.

Применение

Решения проблемы:

  1. Удаление лишних пробелов:

    Убедитесь, что в строках конфигурации нет лишних пробелов. Например:

    deb file:/var/local/my.repository-name /fudgeit/

    или если файлы находятся непосредственно в my.repository-name, то:

    deb file:/var/local/my.repository-name ./

    Заметьте использование ./, что указывает apt, искать файлы в верхнем уровне указанной директории.

  2. Проверка файлов целостности:

    Убедитесь, что файлы Release, InRelease и Release.gpg существуют в указанной директории и доступны для чтения.

  3. Использование правильных метаданных:

    Если у вас только локальное хранилище, и вы сами создаете метаданные, убедитесь, что они соответствуют стандартам Debian. Вы можете использовать утилиту dpkg-scanpackages для генерации индексного файла.

    dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

    После этого можно создать файл Release:

    echo "Archive: stable" > Release
    echo "Component: main" >> Release
    echo "Origin: Your-Company" >> Release
    echo "Label: Your-Company" >> Release
    echo "Architecture: amd64" >> Release
    echo "MD5Sum:" >> Release
    md5sum Packages.gz | awk '{ print $1" "$2" "$2 }' >> Release

    Если нужно подписать репозиторий, убедитесь, что у вас настроен GPG-ключ и он используется при генерации.

  4. Проверка прав доступа:

    Убедитесь, что пользователь, под которым запускается apt, имеет разрешения на чтение указанных файлов и директории. Широко распространенной проблемой являются неверные права доступа, которые предотвращают необходимые чтения.

  5. Проверка конфигурации:

    Иногда ошибка конфигурации на уровне системы может неявно влиять на работу. Проверьте настройки apt, например, в /etc/apt/apt.conf и другие файлы, которые могут перегружаться при работе apt через файлы конфигурации во время инициализации.

Заключение

Проблемы, подобные вашей, часто приводят к недопониманиям из-за незначительных ошибок в конфигурации. Вероятно, в вашем случае все сводится к некорректной интерпретации строки конфигурации apt вследствие лишних пробелов или неверных настроек маршрутизации файла. Важно последовательно проверять каждую из предполагаемых причин и тестировать конфигурацию до тех пор, пока оптимальное решение не будет найдено.

Оцените материал
Добавить комментарий

Капча загружается...