Вопрос или проблема
Я пытаюсь создать файл для vs code в /etc/apt/sources.list.d в стиле DEB822 из примеров в man sources.list
. Также я прочитал в man apt-key
, что apt-key add устарел. У меня есть файл vscode.sources следующего содержания:
Enabled: yes
Types: deb
URIs: http://packages.microsoft.com/repos/code
Suites: stable
Components: main
Signed-By:
Затем я запустил
curl https://packages.microsoft.com/keys/microsoft.asc >> vscode.sources
чтобы получить
Enabled: yes
Types: deb
URIs: http://packages.microsoft.com/repos/code
Suites: stable
Components: main
Signed-By:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (GNU/Linux)
mQENBFYxWIwBCADAKoZhZlJxGNGWzqV+1OG1xiQeoowKhssGAKvd+buXCGISZJwT
LXZqIcIiLP7pqdcZWtE9bSc7yBY2MalDp9Liu0KekywQ6VVX1T72NPf5Ev6x6DLV
7aVWsCzUAF+eb7DC9fPuFLEdxmOEYoPjzrQ7cCnSV4JQxAqhU4T6OjbvRazGl3ag
OeizPXmRljMtUUttHQZnRhtlzkmwIrUivbfFPD+fEoHJ1+uIdfOzZX8/oKHKLe2j
H632kvsNzJFlROVvGLYAk2WRcLu+RjjggixhwiB+Mu/A8Tf4V6b+YppS44q8EvVr
M+QvY7LNSOffSO6Slsy9oisGTdfE39nC7pVRABEBAAG0N01pY3Jvc29mdCAoUmVs
ZWFzZSBzaWduaW5nKSA8Z3Bnc2VjdXJpdHlAbWljcm9zb2Z0LmNvbT6JATUEEwEC
AB8FAlYxWIwCGwMGCwkIBwMCBBUCCAMDFgIBAh4BAheAAAoJEOs+lK2+EinPGpsH
/32vKy29Hg51H9dfFJMx0/a/F+5vKeCeVqimvyTM04C+XENNuSbYZ3eRPHGHFLqe
MNGxsfb7C7ZxEeW7J/vSzRgHxm7ZvESisUYRFq2sgkJ+HFERNrqfci45bdhmrUsy
7SWw9ybxdFOkuQoyKD3tBmiGfONQMlBaOMWdAsic965rvJsd5zYaZZFI1UwTkFXV
KJt3bp3Ngn1vEYXwijGTa+FXz6GLHueJwF0I7ug34DgUkAFvAs8Hacr2DRYxL5RJ
XdNgj4Jd2/g6T9InmWT0hASljur+dJnzNiNCkbn9KbX7J/qK1IbR8y560yRmFsU+
NdCFTW7wY0Fb1fWJ+/KTsC4=
=J6gs
-----END PGP PUBLIC KEY BLOCK-----
Но, когда я запускаю apt update
, я получаю ошибку
Error: Unable to parse package file /etc/apt/sources.list.d/vscode.sources (1)
Error: The list of sources could not be read.
Где я допустил ошибку?
apt
ожидает, что PGP блок ключа будет отступать на один пробел. Также, линия -----BEGIN PGP PUBLIC KEY BLOCK-----
должна следоваться одиночной точкой .
, также с отступом.
Пример приведен в man sources.list
. Я не смог найти более формального определения.
Ответ или решение
Говоря о затруднениях при добавлении PGP-ключа к файлу в стиле DEB822 в директории /etc/apt/sources.list.d
, мы сталкиваемся с довольно частой проблемой, которая может возникнуть из-за специфики формата DEB822 и требования корректной структуры файла. Особенности конфигурации репозиториев и правильной интеграции PGP-ключей в поле Signed-By
могут быть непрозрачными для разработчиков, не имевших дела с подобными задачами. Рассмотрим данную проблему детально, с объяснениями шагов, каждого потенциального препятствия и предложением решения.
Теория
В текущей версии Debian, начиная с Debian 10 (Buster), а также в Ubuntu, управление источниками программного обеспечения и подписание репозиториев PGP-ключами часто осуществляется с помощью формата DEB822. Этот формат предоставляет более структурированное и управляемое среду по сравнению с традиционным списком источников, записанным в формате /etc/apt/sources.list
.
Когда вы создаете файл в формате DEB822, важно соблюдать строгие правила синтаксиса, задающие форматирование и порядок строчек. Поле Signed-By
используется для указания пути к PGP-ключу, который будет использоваться для подтверждения подлинности репозитория.
Примеры
На ваш случай, конфигурация в файле vscode.sources
изначально выглядела правильно, за исключением блока PGP-ключа. Согласно man sources.list
, PGP-ключ должен был быть либо предварительно переопределен в отдельный файл и добавлен как путь в строке Signed-By
, либо включаться внутрь файла в строго определенном формате.
Применение
Чтобы устранить возникшую проблему, выполните следующие действия:
-
Создание отдельного файла для PGP ключа:
Вместо добавления блока ключа непосредственно в файл источника, создайте отдельный файл с PGP-ключом. Это общий метод для интеграции PGP-ключей:curl https://packages.microsoft.com/keys/microsoft.asc -o /usr/share/keyrings/microsoft.asc
Затем обновите файл
vscode.sources
, чтобы он включал путь к этому файлу:Enabled: yes Types: deb URIs: http://packages.microsoft.com/repos/code Suites: stable Components: main Signed-By: /usr/share/keyrings/microsoft.asc
-
Убедитесь в правильности отступов и синтаксиса:
Если вы выберете оставить ключ внутри файлаvscode.sources
, убедитесь, что каждая строка ключа отступлена на один пробел и междуBEGIN
блоком и ключом присутствует строка с одиноким отступленным символом.
. Это может выглядеть следующим образом:Signed-By: . -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.7 (GNU/Linux) mQENBFYxWIwBCADAKoZhZlJxGNGWzqV+1OG1xiQeoowKhssGAKvd+buXCGISZJwT LXZqIcIiLP7pqdcZWtE9bSc7yBY2MalDp9Liu0KekywQ6VVX1T72NPf5Ev6x6DLV 7aVWsCzUAF+eb7DC9fPuFLEdxmOEYoPjzrQ7cCnSV4JQxAqhU4T6OjbvRazGl3ag OeizPXmRljMtUUttHQZnRhtlzkmwIrUivbfFPD+fEoHJ1+uIdfOzZX8/oKHKLe2j H632kvsNzJFlROVvGLYAk2WRcLu+RjjggixhwiB+Mu/A8Tf4V6b+YppS44q8EvVr M+QvY7LNSOffSO6Slsy9oisGTdfE39nC7pVRABEBAAG0N01pY3Jvc29mdCAoUmVs ZWFzZSBzaWduaW5nKSA8Z3Bnc2VjdXJpdHlAbWljcm9zb2Z0LmNvbT6JATUEEwEC AB8FAlYxWIwCGwMGCwkIBwMCBBUCCAMDFgIBAh4BAheAAAoJEOs+lK2+EinPGpsH /32vKy29Hg51H9dfFJMx0/a/F+5vKeCeVqimvyTM04C+XENNuSbYZ3eRPHGHFLqe MNGxsfb7C7ZxEeW7J/vSzRgHxm7ZvESisUYRFq2sgkJ+HFERNrqfci45bdhmrUsy 7SWw9ybxdFOkuQoyKD3tBmiGfONQMlBaOMWdAsic965rvJsd5zYaZZFI1UwTkFXV KJt3bp3Ngn1vEYXwijGTa+FXz6GLHueJwF0I7ug34DgUkAFvAs8Hacr2DRYxL5RJ XdNgj4Jd2/g6T9InmWT0hASljur+dJnzNiNCkbn9KbX7J/qK1IbR8y560yRmFsU+ NdCFTW7wY0Fb1fWJ+/KTsC4= =J6gs -----END PGP PUBLIC KEY BLOCK-----
-
Обновите списки пакетов:
После внесения изменений, убедитесь, что списки пакетов обновляются корректно:sudo apt update
Следование этим шагам должно устранить ошибки и проблемы с чтением списка источников. Этот подход не только облегчает интеграцию, но и обеспечивает согласованность и надежность процесса добавления внешних репозиториев.