Есть ли какой-нибудь скрипт оболочки для обновления формата .sources на deb822?

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

Существует ли какой-нибудь оболочечный скрипт, который обновит мои файлы за меня?

# 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 автоматически определяет и корректирует потенциальные ошибки и несовместимости:

  1. Быстрая миграция: Воспользуйтесь apt modernize-sources для обновления всех ваших файлов репозиториев.

  2. Безопасность: Проверьте, что все ваши ключи находятся в /usr/share/keyrings и используются в новых файлах .sources через параметр Signed-By.

  3. Сохранность данных: Команда автоматически создает резервные копии старых файлов с расширением .bak, что сохраняет вашу предыдущую конфигурацию в случае необходимости отката изменений.

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

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

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