APT (Advanced Package Tool) устанавливает и обновляет программное обеспечение из репозиториев пакетов. В Debian 13 (Trixie) эти программные источники определены в двух форматах: традиционные однострочные файлы .list и более новые файлы deb822 .sources. При новой установке Trixie по умолчанию используется формат deb822.
Пожалуйста, обратите внимание, что настроенный репозиторий не обязательно включен, а включенный репозиторий не обязательно работает. В этом руководстве показано, как составить список включенных репозиториев в вашей системе Debian, найти исходные файлы, которые их определяют, и устранить неполадки в пакете, за которым нет репозитория.
Большинство шагов также применимы к Ubuntu, Linux Mint и другим дистрибутивам на базе Debian, хотя имена файлов по умолчанию отличаются. Это руководство охватывает только репозитории APT, а не удаленные устройства Flatpak, каналы Snap или реестры контейнеров.
Быстрый ответ
Чтобы просмотреть включенные репозитории APT в Debian 13, 12 и более ранних версиях, выполните команду:
apt-get indextargets --format '$(REPO_URI) $(RELEASE) $(COMPONENT)' 'Created-By: Packages' | sort -u
Для этого не нужны права суперпользователя. Команда выводит по одной строке для каждого включенного репозитория, пакета и компонента.
Пример вывода с рабочего стола Debian 13:
https://deb.debian.org/debian/ trixie contrib https://deb.debian.org/debian/ trixie main https://deb.debian.org/debian/ trixie non-free https://deb.debian.org/debian/ trixie non-free-firmware https://deb.debian.org/debian/ trixie-updates main https://dl.google.com/linux/chrome-stable/deb/ stable main https://download.docker.com/linux/debian/ trixie stable https://packages.microsoft.com/repos/edge-beta/ stable main https://repo.protonvpn.com/debian/ stable main https://security.debian.org/debian-security/ trixie-security main https://security.debian.org/debian-security/ trixie-security non-free-firmware
Команда считывает проанализированную конфигурацию APT, поэтому она работает как с файлами .list, так и с файлами .sources. В оставшейся части этого руководства мы расскажем о других методах, о том, как читать исходные файлы и что делать, если что-то выглядит неправильно.
Команды, для которых требуются права суперпользователя: sudo apt update и sudo apt modernize-sources. Все остальное выполняется от имени обычного пользователя.
1. Список включенных репозиториев с помощью APT
Чтение файлов показывает, что записано. APT также может сообщить вам, что он загрузил, и одинаково обрабатывает оба формата файлов.
Используйте apt-get indextargets
команду apt-get indextargets — это самый простой способ вывести список включенных репозиториев в Debian и его производных, таких как Ubuntu.
apt-get indextargets --format '$(REPO_URI) $(RELEASE) $(COMPONENT)' 'Created-By: Packages' | sort -u
Здесь:
Created-By: Packagesограничивает вывод индексами бинарных (deb) пакетов. Без фильтра в выводе также будут записи дляContentsиTranslations.sort -uудаляет дубликаты, которые появляются, когда репозиторий поддерживает несколько архитектур.- Чтобы вместо этого вывести список репозиториев исходных пакетов (
deb-src), измените фильтр на'Created-By: Sources'.
Используйте apt policy
Другой способ вывести список репозиториев в системах на базе Debian:
apt policy
При запуске без указания имени пакета выводит список источников пакетов, которые в настоящее время использует APT, с указанием их приоритета. Это современная форма apt-cache policy, и обе они работают. Запись выглядит следующим образом:
Package files:
100 /var/lib/dpkg/status
release a=now
.
.
.
500 https://security.debian.org/debian-security trixie-security/non-free-firmware amd64 Packages
release v=13,o=Debian,a=stable-security,n=trixie-security,l=Debian-Security,c=non-free-firmware,b=amd64
origin security.debian.org
500 https://security.debian.org/debian-security trixie-security/main amd64 Packages
release v=13,o=Debian,a=stable-security,n=trixie-security,l=Debian-Security,c=main,b=amd64
origin security.debian.org
500 https://deb.debian.org/debian trixie-updates/main amd64 Packages
release v=13-updates,o=Debian,a=stable-updates,n=trixie-updates,l=Debian,c=main,b=amd64
origin deb.debian.org
500 https://deb.debian.org/debian trixie/non-free-firmware amd64 Packages
release v=13.7,o=Debian,a=stable,n=trixie,l=Debian,c=non-free-firmware,b=amd64
origin deb.debian.org
500 https://deb.debian.org/debian trixie/non-free amd64 Packages
release v=13.7,o=Debian,a=stable,n=trixie,l=Debian,c=non-free,b=amd64
origin deb.debian.org
500 https://deb.debian.org/debian trixie/contrib amd64 Packages
release v=13.7,o=Debian,a=stable,n=trixie,l=Debian,c=contrib,b=amd64
origin deb.debian.org
500 https://deb.debian.org/debian trixie/main amd64 Packages
release v=13.7,o=Debian,a=stable,n=trixie,l=Debian,c=main,b=amd64
origin deb.debian.org
Pinned packages:
Одно предостережение: apt policy отражает индексы пакетов, загруженные APT. Если вы только что включили или отключили источник, сначала выполните sudo apt update команду, иначе результат может не соответствовать вашей конфигурации. apt-get indextargets считывает конфигурацию напрямую и не имеет этого ограничения.
Примечание: обе команды показывают, что источник включен. Они не показывают, доступен ли его сервер и действительны ли его подписи. Об этом рассказывается в разделе 4.
2. Найдите файлы конфигурации APT Source
APT считывает список репозиториев из следующих мест:
/etc/apt/sources.list/etc/apt/sources.list.d/*.list/etc/apt/sources.list.d/*.sources
Файлы в sources.list.d с любым другим расширением игнорируются. APT также игнорирует имена файлов, содержащие символы, отличные от букв, цифр, знаков подчеркивания, дефисов и точек.
Значения по умолчанию для Debian 13
При новой установке Trixie основные репозитории Debian находятся в /etc/apt/sources.list.d/debian.sources. Файл /etc/apt/sources.list обычно содержит только комментарии или отсутствует.
Если вы выполнили обновление с более ранней версии, у вас может быть традиционный /etc/apt/sources.list. Оба формата работают параллельно.
Чтобы преобразовать устаревшие .list файлы в deb822, выполните следующую команду:
sudo apt modernize-sources
Команда выводит список файлов, которые она преобразует, и запрашивает подтверждение, прежде чем что-либо изменить. Она записывает новый .sources файл и создает резервную копию исходного, например как /etc/apt/sources.list.bak.
Показать строки без комментариев
grep -HvE '^[[:space:]]*(#|$)' /etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources 2>/dev/null
Эта команда выводит все строки, которые не являются пустыми или комментариями, с указанием имени файла. Он показывает, что настроено, но не может сказать, что включено в файлах deb822, потому что в отключенной секции все равно есть строки без комментариев. Используйте правила из раздела 3 или команды APT из раздела 1.
3. Интерпретация включенных и отключенных записей
Традиционные файлы .list
Активная запись начинается с deb или deb-src. Строка, начинающаяся с #, отключена. Например:
deb https://deb.debian.org/debian trixie main # deb https://example.com/debian stable main
Первая запись включена, вторая — нет. Записи могут содержать параметры в квадратных скобках, например архитектуру и ключ подписи:
deb [arch=amd64 signed-by=/usr/share/keyrings/example.gpg] https://example.com/debian stable main
Чтобы вывести только активные строки в .list файлах, выполните команду:
grep -hE '^[[:space:]]*deb(-src)?[[:space:]]' /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null
Это не анализирует .sources файлы и не проверяет работоспособность репозиториев.
Файлы Deb822 .sources
В файлах Deb822 используются именованные поля, а пустые строки разделяют разделы. Типичный раздел выглядит так:
Types: deb deb-src URIs: https://deb.debian.org/debian Suites: trixie trixie-updates Components: main Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Помните об этих правилах:
- Раздел включен по умолчанию. Он отключается только в том случае, если в нем есть поле
Enabled, для которого задано ложное значение, напримерEnabled: no. Имена полей и значения не чувствительны к регистру, поэтомуenabled: Noтакже отключает раздел. Typesможет содержать какdeb, так иdeb-src. Исходные репозитории включены, если в них естьdeb-src.URIs,SuitesиComponentsмогут содержать несколько значений, разделенных пробелами, поэтому в одном разделе можно указать множество репозиториев.Signed-Byможет быть путем к файлу связки ключей или встроенным блоком ключей.- В файле может быть несколько разделов, и каждый из них включается или отключается независимо от других.
Чтобы распечатать только разрешенные строфы из ваших .sources файлов, запустите:
for f in /etc/apt/sources.list.d/*.sources; do
[ -f "$f" ] || continue
printf '### %sn' "$f"
awk -v RS= '
tolower($0) ~ /(^|n)types:/ &&
tolower($0) !~ /(^|n)enabled:[ t]*(no|false|0)[ t]*(n|$)/ {
print $0 "n"
}' "$f"
done
Фильтр выводит каждую строку, в которой есть поле Types и нет ложного Enabled значения. Это удобно для чтения, но более надежным решением остаются команды APT из раздела 1.
Чтобы найти явно отключенные разделы, выполните команду:
grep -n -i 'Enabled:' /etc/apt/sources.list.d/*.sources
Проверьте окружающий раздел, чтобы узнать, к какому репозиторию относится каждый результат.
4. Проверьте работу репозиториев
Выполните команду:
sudo apt update
APT пытается обновить индексы пакетов из всех включенных источников. Проверьте вывод на наличие ошибок, таких как:
404 Not Found: путь к репозиторию или пакет могут быть указаны неверно или репозиторий может быть недоступен.NO_PUBKEY: APT не может найти открытый ключ, необходимый для проверки репозитория.The repository is not signed: APT не может проверить метаданные репозитория, как того требует система.- Ошибки подключения или DNS: APT не может связаться с сервером репозитория.
Читайте также предупреждения и уведомления, а не только сообщения об ошибках. Они часто указывают на проблемы с конфигурацией:
Target Packages ... is configured multiple times: один и тот же репозиторий указан в нескольких файлах. Удалите дубликат.Skipping acquire of configured file ... doesn't support architecture: репозиторий не предоставляет пакеты для одной из настроенных вами архитектур.Ignoring file ... invalid filename extension: APT пропустил файл вsources.list.dиз-за его названия.
«Чистое» обновление означает, что APT может обновить обработанные индексы. Это не гарантирует доступность конкретного пакета.
Никогда не исправляйте ошибку подписи, отключая аутентификацию. Проверьте URL репозитория и следуйте официальным инструкциям владельца репозитория по установке ключа подписи.
5. Устранение неполадок с пакетом, для которого нет репозитория
Используйте apt-cache policy для просмотра того, какие версии пакета может установить APT и откуда они берутся:
apt-cache policy firefox-esr
Если указан только один источник, значит, APT показывает локальную базу данных пакетов, а не репозиторий:
100 /var/lib/dpkg/status
Это не означает автоматически, что репозиторий отсутствует или поврежден. Это означает, что в текущих индексах APT нет версии этого пакета, поддерживаемой репозиторием.
Распространенные причины:
- пакет был установлен из автономного
.debфайла, и репозиторий не был добавлен. - Пакет добавил собственный исходный файл во время установки, но позже этот файл был удален, отключен или переименован.
- Запись об исходном коде существует, но закомментирована, содержит
Enabled: noили указывает на набор, которого больше не существует. - Последняя
apt updateпопытка для этого репозитория завершилась неудачей, поэтому его индекс так и не был загружен. - Пакет был получен из репозитория, который был удален или отключен, например, при обновлении релиза.
Чтобы найти все установленные пакеты, которые в настоящее время не предоставляются ни одним репозиторием, выполните команду:
apt list --installed 2>/dev/null | grep '[installed,local]'
Пакеты с тегами local не имеют версии, поддерживаемой репозиторием, в текущих индексах APT.
Пример: бета-версия Microsoft Edge
Предположим, что бета-версия Microsoft Edge установлена, но apt-cache policy показывает только локальную версию:
microsoft-edge-beta:
Installed: 145.0.3800.13-1
Candidate: 145.0.3800.13-1
Version table:
*** 145.0.3800.13-1 100
100 /var/lib/dpkg/status
Пакеты сторонних разработчиков, такие как Edge и Chrome, часто устанавливаются из загруженного .deb. Многие из них добавляют собственный источник APT во время установки, хотя поведение зависит от поставщика и версии. Если этот исходный файл отсутствует или отключен, вы увидите именно такой результат.
Шаг 1. Найдите существующую запись об источнике.
grep -RniE 'microsoft|edge' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null
Внимательно изучите результаты. Имя файла, содержащее edge, не означает, что в нем есть активный репозиторий Edge. Например, в файле может быть только эта закомментированная строка:
#deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main
Эта запись отключена и указывает на Google Chrome, а не на Microsoft Edge.
Шаг 2. Проверьте репозиторий и ключ подписи.
Если активной записи Edge Beta нет, перед ее добавлением ознакомьтесь с текущими официальными инструкциями Microsoft по установке на Linux. Проверьте точный URL репозитория, пакет, архитектуру и инструкции по использованию ключа подписи.
Если существующая запись ссылается на отсутствующий файл связки ключей, исправьте путь или установите ключ в соответствии с инструкциями. Не угадывайте имя файла ключа и не пропускайте проверку подписи.
Шаг 3. Обновите APT и проверьте еще раз.
sudo apt update apt-cache policy microsoft-edge-beta
Просмотрите результаты обновления на предмет ошибок в репозитории и сигнатурах, затем проверьте, указана ли версия из репозитория. Если отображается только /var/lib/dpkg/status, значит, в APT по-прежнему нет репозитория для этого пакета.
Обратите внимание, что установленное приложение не является доказательством того, что его репозиторий включен или работает. Проверьте запись об источнике, обновите индексы и просмотрите выходные данные политики.
6. Краткое руководство
| Задача | Команда |
|---|---|
| Список включенных репозиториев (в любом формате) | apt-get indextargets --format '$(REPO_URI) $(RELEASE) $(COMPONENT)' 'Created-By: Packages' | sort -u |
| Список всех источников пакетов, загруженных APT | apt policy |
| Показать строки без комментариев во всех исходных файлах | grep -HvE '^[[:space:]]*(#|$)' /etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources 2>/dev/null |
Показать активные строки только в .list файлах | grep -hE '^[[:space:]]*deb(-src)?[[:space:]]' /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null |
| Найти отключенные строки deb822 | grep -n -i 'Enabled:' /etc/apt/sources.list.d/*.sources |
Преобразовать устаревшие .list файлы в deb822 | sudo apt modernize-sources |
| Проверить доступ и обновить индексы | sudo apt update |
| Проверьте, откуда взят пакет | apt-cache policy PACKAGE_NAME |
| Найдите установленные пакеты, для которых нет репозитория | apt list --installed 2>/dev/null | grep '[installed,local]' |
Заключение
Чтобы вывести список включенных репозиториев в Debian 13, начните с apt-get indextargets или apt policy. Оба варианта покажут, что на самом деле загрузил APT из ваших файлов .list и .sources, что надежнее, чем самостоятельное чтение файлов. Используйте /etc/apt/sources.list и файлы в /etc/apt/sources.list.d/, чтобы найти, где определен каждый источник пакета, и примените правильные правила включения для каждого формата.
Затем запустите sudo apt update и изучите ошибки и предупреждения. Если для определенного пакета нет версии из репозитория, проверьте его исходный файл, ключ подписи и то, был ли он установлен из автономного .deb. Если у вас все еще есть устаревшие .list файлы, попробуйте запустить sudo apt modernize-sources , чтобы список репозиториев APT был в едином формате.
