Вопрос или проблема
Существует ли какой-нибудь оболочечный скрипт, который обновит мои файлы за меня?
# apt update
Уведомление: Отсутствует Signed-By в записи sources.list(5) для 'https://storage.googleapis.com/cros-packages/133'
Уведомление: Отсутствует Signed-By в записи sources.list(5) для 'http://opensource.nchc.org.tw/debian'
Уведомление: Рассмотрите возможность миграции всех записей sources.list(5) на формат deb822 .sources
Уведомление: Формат deb822 .sources поддерживает как встроенные, так и внешние OpenPGP-ключи
Уведомление: См. apt-secure(7) для лучших практик настройки подписи репозиториев.
Я потратил часы, пытаясь разобраться в этом, и просто сдаюсь.
Мои файлы просто содержат строки с “deb …”.
И вот
$ cd /usr/share/keyrings && ls
cros.gpg debian-archive-bullseye-stable.gpg
debian-archive-bookworm-automatic.gpg debian-archive-buster-automatic.gpg
debian-archive-bookworm-security-automatic.gpg debian-archive-buster-security-automatic.gpg
debian-archive-bookworm-stable.gpg debian-archive-buster-stable.gpg
debian-archive-bullseye-automatic.gpg debian-archive-keyring.gpg
debian-archive-bullseye-security-automatic.gpg debian-archive-removed-keys.gpg
Также я зарегистрировал https://issues.chromium.org/issues/392237686, потому что разве обновление /etc/apt/sources.list.d/cros.list не должно быть ответственностью команды Chrome, а не моей?
Наконец я сделал это! Вот мой скрипт. Запустите его для файла sources.list:
#!/usr/bin/perl
use strict;
use warnings q!all!;
my $n = "narflowitz"; #пример
while (<>) {
chomp;
if (/^deb/) {
die "$0: Извините, не могу обрабатывать [опции] еще."
. " Кстати, не задерживайте дыхание."
if /\[/;
my @m = split;
printf "$/#Было: $_$/Типы: %s$/URI: %s$/Сьюиты: %s"
. "$/Компоненты: %s$/Signed-By: %s$/$/",
@m[ 0 .. 2 ], qq(@m[3..$#m]),
q(/usr/share/keyrings/debian-archive-keyring.gpg);
}
}
print "Подправьте и поместите вышеуказанное в новый файл:
/etc/apt/sources.list.d/$n.sources .
/etc/apt/sources.list.d/$n.list
это старый файл, который следует удалить.
";
И вот результат:
#Было: deb http://opensource.nchc.org.tw/debian/ unstable main contrib non-free non-free-firmware
Типы: deb
URI: http://opensource.nchc.org.tw/debian/
Сьюиты: unstable
Компоненты: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Подправьте и поместите вышеуказанное в новый файл. Например,:
/etc/apt/sources.list.d/narflowitz.sources .
/etc/apt/sources.list.d/narflowitz.list
это старый файл, который следует удалить.
Зачем делать свои собственные скрипты, когда можно просто сделать
# apt modernize-sources
Следующие файлы нуждаются в модернизации:
- /etc/apt/sources.list.d/google-chrome-beta.list
- /etc/apt/sources.list.d/google-earth-pro.list
- /etc/apt/sources.list.d/jidanni.list
Модернизация заменит .list файлы на новый формат .sources,
добавит значения Signed-By, когда они могут быть определены автоматически,
и сохранит старые файлы как .list.bak файлы.
Звучит страшно.
Не бойтесь.
Для симуляции ответьте N на следующий запрос.
Переписать 3 источника? [Y/n] N
Только симуляция...
Почему вы не сказали нам об этом раньше? Это было бы более продуктивно, знаете ли.
Они только что добавили это.
Ответ или решение
Создание и поддержание актуальности файлов конфигурации для управления пакетами является важной задачей для системных администраторов и специалистов по ИТ. Переход на формат .sources
deb822 в APT предоставляет пользователям более гибкую систему управления ключами и репозиториями. В данном случае, основной проблемой стал переход с устаревшего формата sources.list
к более современному формату .sources
, который предлагает улучшенную поддержку ключей OpenPGP, как встроенных, так и внешних, что важно для обеспечения безопасности и доверия к содержимому репозиториев.
Теория
Форматы sources.list
и .sources
Формат sources.list
использовался в APT (Advanced Package Tool) для определения мест хранения пакетов Debian и основанных на нем систем. Этот формат представляет репозитории в виде строк, начинающихся с ключевого слова deb
или deb-src
, указывающего на бинарные или исходные пакеты соответственно. Такие строки включают в себя URL репозиториев, компонентную часть и информацию о релизе.
Формат .sources
деб822 предоставляет более структурированное представление репозиториев с явной поддержкой параметров управления ключами безопасности. Информация о репозиториях представляется в виде блоков в формате deb822
, аналогичном стилю заголовков почтовых сообщений, что делает его более гибким и расширяемым.
Подход к автоматизации
Традиционно обновление из формата sources.list
в формат .sources
требует ручной переработки конфигураций. Однако автоматизация этого процесса позволяет значительно сократить временные затраты и минимизировать человеческие ошибки. Использование скриптов, а также встроенных в APT утилит, значительно облегчает эту задачу.
Пример
Ручная миграция с помощью Perl-скрипта
Предоставленный вами скрипт на Perl выполняет преобразование формата. Он извлекает информацию из строк deb
, преобразуя её в структуру deb822. Вот пример строки, обработанной скриптом:
#!/usr/bin/perl
use strict;
use warnings q!all!;
my $n = "narflowitz"; #пример
while (<>) {
chomp;
if (/^deb/) {
die "$0: Sorry, can't deal with [options] yet."
. " P.S., don't hold your breath."
if /\[/;
my @m = split;
printf "$/#Was: $_$/Types: %s$/URIs: %s$/Suites: %s"
. "$/Components: %s$/Signed-By: %s$/$/",
@m[ 0 .. 2 ], qq(@m[3..$#m]),
q(/usr/share/keyrings/debian-archive-keyring.gpg);
}
}
Скрипт переформатирует строки, указывая тип, URI, наборы пакетов, компоненты и путь к ключу безопасности (Signed-By). Получившийся текст можно переместить в новый файл .sources
, а старый .list
удалить.
Автоматизация с помощью APT
Сравнительно недавно в APT была добавлена функция apt modernize-sources
, которая автоматически обновляет файлы конфигурации до нового формата .sources
, также добавляя значения Signed-By
, если они могут быть определены. Команда предоставляет возможность симулировать изменения перед их применением, что устраняет страх ошибок.
Пример использования команды:
# apt modernize-sources
Применение
Рекомеnдается использовать встроенные инструменты APT для обновления источников репозиториев до формата .sources
. Это более надежный и эффективный способ, так как APT автоматически определяет и корректирует потенциальные ошибки и несовместимости:
-
Быстрая миграция: Воспользуйтесь
apt modernize-sources
для обновления всех ваших файлов репозиториев. -
Безопасность: Проверьте, что все ваши ключи находятся в
/usr/share/keyrings
и используются в новых файлах.sources
через параметрSigned-By
. -
Сохранность данных: Команда автоматически создает резервные копии старых файлов с расширением
.bak
, что сохраняет вашу предыдущую конфигурацию в случае необходимости отката изменений.
Таким образом, новый функционал APT значительно упрощает переход на более современный и безопасный формат .sources
, минимизируя риск ошибок и затрачиваемое время системными администраторами на ручную настройку каждого отдельного файла конфигурации.