Резюме
Как я могу сделать так, чтобы apt-get предпочел пакеты локального репозитория вместо повторной загрузки той же версии пакета из официальных репозиториев? Локальный репозиторий подписан и доверен. Мы уже попробовали подходящие приоритеты.
Первоначальный вопрос был: «Как назначить наивысший приоритет локальному хранилищу без использования файла sources.list»
Я установил локальный репозиторий с загруженными пакетами. Я использую его, чтобы избежать загрузки тех же пакетов через Интернет, когда мне нужно переустановить Ubuntu. Это базовый репозиторий, созданный с помощью apt-ftparchive packages . > Packages
. Я сделал это надежным хранилищем, чтобы избежать предупреждения о «неаутентифицированном хранилище». ( Если у вас есть ненадежное хранилище apt
или вы synaptic
пытаетесь загрузить те же пакеты через Интернет, потому что оно является доверенным ).
Я использую этот локальный репозиторий не менее 1 года. Но я должен всегда размещать строку локального репозитория в верхней части sources.list
файла, чтобы использовать это. Но это раздражает, так как я должен открывать терминал и вводить текст на нем каждый раз, когда переустанавливаю Ubuntu, хотя есть и лучший инструмент software-properties-gtk
. Я не могу использовать этот инструмент, так как он помещает исходную строку в конец файла sources.list.
А реальная проблема в том , что, то apt
или synaptic
всегда скачать пакет из источника , который упомянут ранее, без проверки того , пакеты уже доступны в локальном хранилище. Таким образом, у меня нет выбора, кроме как разместить локальный источник на вершине sources.list
работающего терминала (на самом деле я не ненавижу терминал, но мне нужно решение).
Я попробовал этот метод . Но это не помогает мне.
Мой файл настроек это в /etc/apt/preferences.d/local-pin-900
Package: *
Pin: release o=Local,n=ubuntu-local
Pin-Priority: 900
Мой файл релиза это
Origin: Local
Label: Local-Ubuntu
Description: Local Ubuntu Repository
Codename: ubuntu-local
MD5Sum:
ed43222856d18f389c637ac3d7dd6f85 1043412 Packages
d41d8cd98f00b204e9800998ecf8427e 0 Sources
Когда я включаю apt-preference, apt-cache policy
корректно показывает предпочтение, например, показывает, что локальный репозиторий имеет самый высокий приоритет.
Но когда я делаю это sudo apt-get install <package-name>
, apt
пытается загрузить его из Интернета. Но когда я размещаю свое локальное хранилище наверху, оно устанавливается из локального хранилища.
Итак, мой вопрос -> 'Можно ли заставить apt использовать локальный репозиторий, когда пакет доступен в локальном репозитории, без явного размещения «локального источника» в верхней части моего списка репозитория (например, файла sources.list)? '
Изменить: вывод apt-cache policy $package_name
выглядит следующим образом
Наутилус-протирать: Установлено: (нет) Кандидат: 0.1.1-2 Таблица версий: 0.1.1-2 0 500 http://archive.ubuntu.com/ubuntu/ Precision / Universe i386 Packages 900 file: / media / Главная / Linux-Software / Ubuntu / Precise / Пакеты
Это показывает, что мой локальный репозиторий имеет более высокие предпочтения, хотя это не тот sources.list
файл, который стоит первым в файле.
Вот вывод apt-get install nautilus-wipe
Чтение списков пакетов ... Готово Построение дерева зависимостей Чтение информации о состоянии ... Готово Будут установлены следующие НОВЫЕ пакеты: Наутилус-вытирать 0 обновлено, 1 недавно установлено, 0 для удаления и 131 не обновлено. Нужно получить 30,7 кБ архивов. После этой операции будет использовано 150 КБ дополнительного дискового пространства. 'http://archive.ubuntu.com/ubuntu/pool/universe/n/nautilus-wipe/nautilus-wipe_0.1.1-2_i386.deb' nautilus-wipe_0.1.1-2_i386.deb 30730 Сумма MD5: 7d497b8dfcefe1c0b51a45f3b66
Он все еще пытается получить файл из Интернета, хотя я думаю, что он должен быть доволен местным.
Результат использования "" или localhost, как предложил mediageek
Использование localhost не имеет никакого эффекта. но "" имеет, но не отличался от моего метода
Package: *
Pin: origin ""
Pin-Priority: 1001
Я использовал их до публикации вопроса. Но я снова попробовал это (для спокойствия). Результат тот же. apt-cache policy
показывая, что мой локальный репозиторий действительно имеет самый высокий приоритет. но когда я попытался установить, он говорит: «Нужно получить XXX / XXX КБ архива».
apt-get
командой. Там написано "0 кб нужно скачать".apt-cache policy
apt-cache policy
и увидел, что локальный репозиторий имеет более высокий приоритет. Но все ещеapt-get
пытаюсь установить его из интернета. Я думал, что это просто невозможно без использованияsources.list
файла.apt-cache policy
показал ли это, что версия была той жеОтветы:
Краткий ответ:
Вот файл
/etc/apt/preferences
, которыйapt-get
используется, чтобы решить, какую версию он должен выбрать, если существует много версий одного пакета. При этом любой пакет, который поступает из локального репозитория, будет иметь приоритет над другими пакетами.Это не будет контролировать версию, но предпочтение источника, если оба пакета имеют одинаковую версию. Если вам нужно назначить наивысший приоритет для той же версии пакета в вашем локальном репозитории, перечислите их в верхней части
/etc/apt/sources.list
файла>Ответ на оригинальный вопрос:
Невозможно назначить наивысший приоритет локальному хранилищу без использования
sources.list
файла. Вы должны поместить их в начало списка «sources.list», если хотите назначить наивысший приоритет своему локальному репо.Краткий ответ на этот вопрос:
Используя
/etc/apt/sources.list
файл, вам нужно поместить строку вашего локального репозитория вверху этого файла. как ниже.И да, «apt_preference» не имеет ничего общего с выбором экземпляров пакетов с той же версией. Дело в том, что вы не можете использовать
/etc/apt/preference
файл, чтобы принудительно выбрать / использовать.deb
файл из вашего локального репозитория, назначив наивысший приоритет вашему локальному репозиторию. Этот файл (предпочтение) используется для выбора конкретной версии, а не конкретного экземпляра (файл .deb) той же версии. В последнем случае вам нужно использовать/etc/apt/sources.list
файл с вышеупомянутым методом.Объяснение:
Кажется, мы все неправильно поняли
apt_preference
цель, руководство apt_preference описывает это в первых 3 параграфах !!И очень важный в третьем абзаце
Эти Курсив были сделаны моим
Давайте посмотрим на это на примере:
У меня точная версия
compiz-fusion-plugins-extra
, но я отключил ее для демонстрацииВот файл
/etc/apt/preferences
, которыйapt-get
используется, чтобы решить, какую версию он должен выбрать, если существует много версий одного пакета. (В этом примереcompiz-fusion-plugins-extra
есть несколько версий.Этот файл говорит
apt-get
об установке из локального репозитория для всех пакетов, которые имеют несколько версий, существует в разных репозиториях.Другими словами, если у меня есть пакет
xapps
с версией1.0
в моем локальном репозитории, и этот же пакетxapps
существует в репозитории Precise с более высокой версией, скажем2.0
,apt-get
предпочтет версию из локального репозитория, то есть версию1.0
.Вот мой
/etc/apt/sources.list
файлНесмотря на то, что я перечислил репозиторий точных данных ранее в этом файле, он не приводит
apt-get
к выбору пакета из этого репозитория. Как описано в руководствеТаким образом, вывод команды
apt-cache policy compiz-fusion-plugins-extra
был таким, как ожидалось, как показано нижеЗдесь, версия-кандидат
0.9.5.94-0ubuntu1
(которая находится в локальном хранилище), а не0.9.7.0~bzr9-0ubuntu6 0
, что в точном хранилище. хотя точный 'был указан первым вsources.list
файле.Пример запуска
apt-get
попытки установкиcompiz-fusion-plugins-extra
после установки наивысшего приоритета для локального репозитория.Странно !!!, он пытается понизить уже установленные пакеты compiz, чтобы точно разрешить зависимости (совпадающие с Oneiric) с вновь выбранными
compiz-fusion-plugins-extra
!!!.Что более опасно, так это то, что он пытается удалить пакеты графического драйвера (xserver-xorg -....), чтобы избежать конфликта с новыми компиляциями.
(Возможно, если бы они были и в моем локальном репозитории, они могли бы спокойно перейти на более раннюю версию. Но поскольку эти пакеты обычно устанавливаются, я их не загружал, поэтому не в локальном репозитории, отсюда и этот результат) .
Вывод : Итак, использование
/etc/apt/preferences
рекомендуется использовать только с локальным репозиторием, если у вас есть полный репозиторий в локальной системе.Что если несколько экземпляров (файл .deb) одной и той же версии существуют во многих хранилищах.
Который описан в
apt_preference
руководствеПример вариантов использования для
/etc/apt/preferences
файла:Примером принудительного
apt-get
выбора версии, доступной из пользовательского репозитория, вместо стандартной версии Ubuntu может быть дистрибутив Linux Mint. Они используют этот пользовательскийpreference
файл.Это эффективно заставляет их предоставлять пакеты, когда они есть в своих хранилищах. Но если у них их нет, они используют стандартный репозиторий Ubuntu.
Пример запускается
apt-get
после установки наивысшего приоритета для локального хранилищаЯ просто хотел установить
kubuntu-desktop
пакет поверх Ubuntu для тестирования KDE. (Я забыл это, я установил предпочтение, используя/etc/apt/preference
файл) . У меня был iso из kubuntu-12.04-alternate-installer, поэтому я подумал, что могу это использовать.(после правильной установки iso в качестве источника репозитория) я побежал
sudo apt-get install kubuntu-desktop
, затем удивился, увидев вывод ниже.Я был удивлен результатом. вдруг я помню, что я установил предпочтение ( для написания этого ответа ),
/etc/apt/preference
чтобы установить самый высокий приоритет для моего локального хранилища.Итак, я запустил это:,
apt-cache policy kubuntu-desktop
вывод был, как показано ниже:В этом выводе мы видим, что и «cdrom», и «точный главный репозиторий» имеют версию 1.254 , в то время как локальный репозиторий имеет версию 1.222.1kde47 ~ ppa2 , которая является более низкой версией. Хотя они помещены перед локальными в файле sources.list, локальные пакеты имеют приоритет.
Чтобы явно увидеть, что
apt-get
действительно пытается установить с локального, я запустилsynaptic
и получил это, что показывает, что система Apt рассматривает 1.222.1kde47 ~ ppa2 как вариант-кандидат для установки.Также
apt-cache policy kubuntu-desktop
показывая те же вещиЧтобы решить эту проблему, я удалил
/etc/apt/preference
файлsudo rm /etc/apt/preference
.Затем снова запустил это снова
apt-cache policy kubuntu-desktop
. видя только этот ожидаемый результат.И снова запустил это.
sudo apt-get install kubuntu-desktop
чтобы увидеть вывод ниже:Вы можете проверить полный результат здесь
Тогда я почти уверен в части объяснения.
Ссылка 1: Руководство по apt_preference
Ссылка 2: Как сохранить определенную версию установленных пакетов
источник