(Отказ от ответственности: я не могу предоставить источники ни для чего из этого, потому что я никогда не видел никакой документации, которая на самом деле обсуждает эти вещи. Информация, которой я должен следовать, - это просто то, что мне удалось выяснить с помощью осмотра, экспериментов с «черным ящиком», случайных действий. Метод проб и ошибок и простые старые догадки. Кроме того, справедливое предупреждение, это слишком многозначительно до такой степени, что слишком долго.)
DNF добавляет @ для обозначения репо установлен пакет был установлен с , в dnf listконтексте. Как вы заметили:
В моей системе установлено несколько пакетов из репозитория @System, @fedora (однако есть также fedora без @) и таких вещей, как @@ commandline.
Но на самом деле вы никогда не увидите ни одного пакета, входящего fedoraв установленный список, так как каждый пакет показывает некоторый @ -repo в качестве источника. (Вы можете проверить это, запустив sudo dnf list installedи проверив ; в списке нет репозиториев без хотя бы одного знака @.) Когда вы просматриваете информацию о пакете с помощью dnf info, в From repo:поле « » будет отображаться имя репо без @. (Так что " From repo: fedora" абсолютно возможно, и эквивалентно @fedoraв установленном списке.)
Но некоторые репо названы со @знаком на передней панели. Как обнаружил ДжонКоч в источниках «Ястреба», «@commandline» определяется как «имя репо» для «репо командной строки». Таким образом, @@commandlineв dnf listлистинге просто указывается установленный пакет From repo: @commandline, репо, которому до степени смешения было присвоено имя, начинающееся со своего @ -знака.
dnf infoна любом установленном пакете покажет Repository: @System, какой @виртуальный репозиторий называется другим . Похоже, что @Systemэто виртуальное репо, содержащее набор установленных в данный момент пакетов, и @commandlineвиртуальное репо-источник, откуда поступил пакет, когда он не поступил из какого-либо репо.
Смысл @commandlineи @System, и их отношения друг к другу, похоже, изменились с тех пор, как я впервые написал этот ответ. В некотором смысле он более последовательный и рассматривает некоторые из моих предыдущих возражений о том, как @commandlineэто используется. Я больше не вижу каких - либо установленных пакетов , перечисленных как из @@System, и вне зоны Установок действительно теперь показывают From repo: @commandline( @@commandlineв контексте списка). dnf infoна внешнем установленном пакете обычно отображается что-то вроде следующего:
$ dnf info remi-release
Installed Packages
Name : remi-release
---✀---
Repository : @System
From repo : @commandline
Если я сделаю dnf reinstall remi-release(потому что пакет находится в remiрепо), он изменится на:
$ dnf info remi-release
Installed Packages
Name : remi-release
---✀---
Repository : @System
From repo : remi
Еще одна вещь об исходных репо: репо, перечисленные в From repo:поле, всегда являются репо, которые существуют в текущем контексте репо . Другими словами, источник установки пакета - это не просто строка, содержащая имя репозитория; Установленные пакеты связаны с идентификацией репо-провайдера, поскольку он существует (или существовал) в системе.
Поскольку большинство репозиториев имеют дистрибутивную версию, они переопределяются с каждым новым выпуском Fedora. (Как, например, « fedora» репо становится набором пакетов, составляющих новый выпуск, полностью отличным от « fedora» репозитория, существовавшим в предыдущем выпуске.) Таким образом, всякий раз, когда выполняется обновление системы, множество старых идентификаторов репо получить недействительным.
DNF (или hawkey) используется для отправки пакетов, установленных из репозиториев, которые больше не существуют, в @commandlineкачестве их репо-источника. Я говорю "привык", потому что это (к счастью) больше не сделано. Установленные пакеты из репо, который больше не существует, больше не будут показывать свой источник как @@commandline/ From repo: @commandline. На самом деле, dnf infoпоказывает , что они больше не имеют какой - либо источник репо. Например, sitecopyбыл пакет Fedora, который с тех пор был удален. Я установил его из fedoraили updatesрепо 7 или 8 выпусков назад, и все еще установил:
$ dnf info sitecopy
Installed Packages
Name : sitecopy
Version : 0.16.6
Release : 14.fc22
Architecture : x86_64
Size : 373 k
Source : sitecopy-0.16.6-14.fc22.src.rpm
Repository : @System
Там нет " From repo:" в списке.
Это означает, что этот пакет (и другие подобные) dnf list installedпокажет (один ) рядом с ним. Таким образом, в некотором смысле мы просто обменяли одно несоответствие на другое, так как этот столбец больше не всегда является исходным репо с добавленным. Тем не менее, я предпочитаю текущее положение дел.@System@@
Сноски
- «... тот, который показан ...»
(иногда показывается. «Доступные пакеты» не обязательно будут отображаться при каждом dnf listзапуске: если установленная версия пакета является лучшей доступной версией, она указана в разделе «Установленные пакеты»). поэтому было бы излишним также указывать его в разделе «Доступные пакеты». Использование
--showduplicatesприведет к созданию раздела «Доступные пакеты», который включает все известные экземпляры, независимо от версии, установленной или загружаемой.)
dnfневероятно молчит об этом. Предположим, «@» обозначает установленный пакет, означает ли «@@», что он установлен вручную из источника без репо, возможно? Я бы очень хотел, чтобы кто-то разъяснил.