Назначить самый высокий приоритет для моего локального репозитория

31

Резюме

Как я могу сделать 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-предпочтение, apt-cache policy правильно показывает предпочтение, например. Он показывает, что локальный репозиторий имеет наивысший приоритет.

Но когда я делаю это sudo apt-get install <package-name> , apt пытается загрузить его из Интернета. Но когда я устанавливаю локальное репо наверху, он устанавливается из локального репозитория.

Итак, Мой вопрос - & gt; "Возможно ли заставить apt использовать локальный репозиторий, когда пакет доступен в локальном репозитории, без явного размещения" локального источника "в верхней части списка моих репозиториев (например, файл sources.list)?"

Изменить: вывод apt-cache policy $package_name выглядит следующим образом

  
nautilus-wipe:
  Installed: (none)
  Candidate: 0.1.1-2
  Version table:
     0.1.1-2 0
        500 http://archive.ubuntu.com/ubuntu/ precise/universe i386 Packages
        900 file:/media/Main/Linux-Software/Ubuntu/Precise/  Packages

Он показывает, что у моего локального репозитория более высокое предпочтение, хотя оно не входит в первый файл sources.list .

Вот результат apt-get install nautilus-wipe

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  nautilus-wipe
0 upgraded, 1 newly installed, 0 to remove and 131 not upgraded.
Need to get 30.7 kB of archives.
After this operation, 150 kB of additional disk space will be used.
'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 MD5Sum:7d497b8dfcefe1c0b51a45f3b0466994

Он по-прежнему пытается получить файл из Интернета, хотя я думаю, что он должен быть доволен локальным.

Результат использования "" или localhost как предложенный mediageek

Использование localhost не влияет. но "" имеет, но не отличается от моего метода

    Package: *
    Pin: origin ""
    Pin-Priority: 1001

Я использовал их перед отправкой вопроса. Но снова я попробовал это (для досады). Тот же результат. apt-cache policy , показывающее, что мой локальный репозиторий имеет наивысший приоритет. но когда я попытался установить, он сказал: "Нужно получить XXX / XXX КБ архива".

    
задан Anwar 11.05.2012 в 07:11
источник

1 ответ

40

Краткий ответ:

  

Файл предпочтений APT / etc / apt / preferences можно использовать для управления , какие версии пакетов будут выбраны для установки.

Вот файл /etc/apt/preferences , который apt-get использует, чтобы решить, в какой версии ему нужно выбрать, есть ли много версий одной упаковки. При этом любой пакет, который поступает из локального репозитория, будет иметь приоритет над другими пакетами.

Package: *  
Pin: origin ""  
Pin-Priority: 1001  

Это не будет управлять версией, но исходное предпочтение, если оба пакета имеют одну и ту же версию. Если вам нужно назначить наивысший приоритет для одного и того же пакета version в ваше местное репо, перечислите их вверху в файл /etc/apt/sources.list & gt;

Ответьте на исходный вопрос:

  

Как назначить наивысший приоритет локальному репозиторию без использования файла sources.list?

Невозможно назначить наивысший приоритет локальному репозиторию без использования файла sources.list . вы должны поместить их в верхнюю часть «sources.list», если вы хотите присвоить наивысший приоритет своему местному репо.

Итоговый ответ на этот вопрос:

  

Как я могу сделать apt-get предпочитают локальные пакеты репозитория вместо того, чтобы снова загружать ту же версию пакета из официальных репозиториев? Локальный репозиторий подписан и доверен. Мы уже пробовали приоритет предпочтений предпочтений.

Используя файл /etc/apt/sources.list , вам нужно поместить линию локального репозитория в верхнюю часть этого файла. как показано ниже.

deb cdrom:[Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)]/ precise main restricted
deb file:/media/Main/Precise-Debs-New /
deb file:/media/Main/Linux-Software/Ubuntu/Precise /

deb http://archive.ubuntu.com/ubuntu precise main universe restricted multiverse
deb-src http://archive.ubuntu.com/ubuntu precise universe main multiverse restricted #Added by software-properties

# deb cdrom:[Xubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120423.1)]/ precise main multiverse restricted universe
# deb cdrom:[Ubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120423)]/ precise main restricted

# deb http://archive.canonical.com/ubuntu precise partner
# deb-src http://archive.canonical.com/ubuntu precise partner
# deb http://extras.ubuntu.com/ubuntu precise main
# deb-src http://extras.ubuntu.com/ubuntu precise main

И да, «apt_preference» не имеет никакого отношения к выбору экземпляров пакетов с той же версией. Дело здесь в том, что вы не можете использовать файл /etc/apt/preference , чтобы заставить / использовать файл .deb из вашего локального репозитория, назначив наивысший приоритет вашему локальному. Этот файл (предпочтение) используется для выбора конкретной версии, а не определенного экземпляра (файла .deb) той же версии. В последнем случае вам нужно использовать файл /etc/apt/sources.list с вышеупомянутым методом.

Объяснение:

Кажется, мы все неправильно поняли цель apt_preference , руководство apt_preference описывает это в первом абзаце 3.

  

Файл предпочтений APT / etc / apt / preferences можно использовать для управления , какие версии пакетов будут выбраны для установки.

     

Несколько версий пакета могут быть доступны для установки, когда файл sources.list (5) содержит ссылки на более чем один дистрибутив (например, стабильный и тестируемый). APT назначает приоритет каждой доступной версии. При ограничениях зависимости apt-get (8) выбирает версию с наивысшим приоритетом для установки. Файл предпочтений APT переопределяет приоритеты, которые APT присваивает версиям пакетов по умолчанию, что дает пользователю контроль над тем, какой из них выбран для установки.

И очень важный в третьем абзаце

  

Несколько экземпляров одной и той же версии пакета могут быть доступны, если файл sources.list (5) содержит ссылки на несколько источников. В этом случае apt-get (8) загружает экземпляр, указанный ранее в файле sources.list (5). Файл предпочтений APT не влияет на выбор экземпляра, а только на выбор версии .

Эти курсивы были сделаны моими

Посмотрим на пример:

У меня есть точная версия compiz-fusion-plugins-extra , но я отключил ее для демонстрации

Вот файл /etc/apt/preferences , который apt-get использует, чтобы решить, в какой версии ему нужно выбрать, есть ли много версий одной упаковки. (В этом примере compiz-fusion-plugins-extra имеет несколько версий.

Package: *  
Pin: origin ""  
Pin-Priority: 1001  

В этом файле указано apt-get для установки из локального репозитория для всех пакетов, которые имеют несколько версий в разных хранилищах.

Другими словами, если у меня есть пакет xapps с версией 1.0 в моем локальном репозитории, и этот же пакет xapps существует в репозитории Precise с более высокой версией, скажем, 2.0 , apt-get предпочитает версию из локального репозитория, то есть версию 1.0 .

Вот мой файл /etc/apt/sources.list

deb http://archive.ubuntu.com/ubuntu precise main universe restricted multiverse
deb-src http://archive.ubuntu.com/ubuntu precise universe main multiverse restricted #Added by software-properties
deb http://security.ubuntu.com/ubuntu/ precise-security universe main multiverse restricted
deb http://archive.ubuntu.com/ubuntu precise-updates universe main multiverse restricted
deb http://archive.ubuntu.com/ubuntu precise-backports universe main multiverse restricted

# deb http://archive.canonical.com/ubuntu precise partner
#deb-src http://archive.canonical.com/ubuntu precise partner
# deb http://extras.ubuntu.com/ubuntu precise main
# deb-src http://extras.ubuntu.com/ubuntu precise main


deb file:/media/Main/Linux-Software/Ubuntu/Oneiric / #this is oneiric repository.
deb file:/media/Main/Linux-Software/Ubuntu/Natty/natty /
deb file:/media/Main/Linux-Software/Ubuntu/Natty/kubuntu /
deb file:/media/Main/Linux-Software/Ubuntu/Natty/natty_new /

Хотя, я перечислил репозиторий точного ранее в файле, он не вызывает apt-get для выбора пакета из этого репозитория. Как описано в руководстве

  

Файл предпочтений APT не влияет на выбор экземпляра, а только на выбор версии.

Итак, результат команды apt-cache policy compiz-fusion-plugins-extra был таким, как ожидалось, ниже

[email protected]:/etc/apt$ apt-cache policy compiz-fusion-plugins-extra 
compiz-fusion-plugins-extra:
  Installed: (none)
  Candidate: 0.9.5.94-0ubuntu1  / **selecting lower versions for priority** /
  Version table:
     0.9.7.0~bzr9-0ubuntu6 0
        500 http://archive.ubuntu.com/ubuntu/ precise/universe i386 Packages
     0.9.5.94-0ubuntu1 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Oneiric/  Packages
     0.9.4-0ubuntu3 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages

Здесь кандидатная версия 0.9.5.94-0ubuntu1 , (которая находится в локальном репозитории), а не 0.9.7.0~bzr9-0ubuntu6 0 , которая находится в репозитории precises. хотя в файле sources.list был указан первый предикат.

Пример выполнения apt-get , пытающегося установить compiz-fusion-plugins-extra после установки наивысшего приоритета на локальный репозиторий.

[email protected]:~$ sudo apt-get install compiz-fusion-plugins-extra 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  x11-apps x11-xfs-utils xinit x11-session-utils libfs6
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  compiz-core compiz-plugins-default compiz-plugins-extra
  compiz-plugins-main-default libdecoration0 xserver-xorg-core
  xserver-xorg-video-intel
Suggested packages:
  compizconfig-settings-manager xfonts-100dpi xfonts-75dpi
The following packages will be REMOVED:
  compiz compiz-gnome compizconfig-backend-gconf edubuntu-desktop
  libcompizconfig0 ubuntu-desktop unity xorg xserver-xorg
  xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-mouse
  xserver-xorg-input-synaptics xserver-xorg-input-vmmouse
  xserver-xorg-input-wacom xserver-xorg-video-all xserver-xorg-video-ati
  xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-geode
  xserver-xorg-video-mach64 xserver-xorg-video-mga xserver-xorg-video-neomagic
  xserver-xorg-video-nouveau xserver-xorg-video-openchrome
  xserver-xorg-video-qxl xserver-xorg-video-r128 xserver-xorg-video-radeon
  xserver-xorg-video-s3 xserver-xorg-video-savage
  xserver-xorg-video-siliconmotion xserver-xorg-video-sis
  xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident
  xserver-xorg-video-vesa xserver-xorg-video-vmware
The following NEW packages will be installed:
  compiz-fusion-plugins-extra compiz-plugins-extra
The following packages will be DOWNGRADED:
  compiz-core compiz-plugins-default compiz-plugins-main-default
  libdecoration0 xserver-xorg-core xserver-xorg-video-intel
0 upgraded, 2 newly installed, 6 downgraded, 37 to remove and 698 not upgraded.
Need to get 0 B/5,772 kB of archives.
After this operation, 8,294 kB disk space will be freed.
Do you want to continue [Y/n]? 

Странно !!!, Он пытается понизить уже установленные пакеты compiz для точного определения зависимостей (совпадающих с Oneiric's) с недавно выбранным compiz-fusion-plugins-extra !!!.

Что более опасно, он пытается удалить пакеты графических драйверов (xserver-xorg -....), чтобы избежать конфликтов с новыми компиляторами.

(Возможно, если бы у меня также были их в моем локальном репозитории, они могли бы смело хотеть понизить. Но поскольку эти пакеты обычно устанавливаются, я не загружал их, так что они не находятся в локальном репо, поэтому это результат) .

Заключение . Таким образом, использование /etc/apt/preferences рекомендуется использовать только в локальном репозитории, если у вас есть полный репозиторий в локальной системе.

Что делать, если во многих хранилищах существует несколько экземпляров (файл .deb) той же версии.

Что описано в руководстве apt_preference

  

Несколько экземпляров одной и той же версии пакета могут быть доступны, если файл sources.list (5) содержит ссылки на несколько источников. В этом случае apt-get (8) загружает экземпляр, указанный ранее в файле sources.list (5).

Пример использования для файла /etc/apt/preferences :

Пример принудительного использования apt-get для выбора версии, доступной из пользовательского репо, вместо стандартного Ubuntu может быть дистрибутив «Linux Mint». Они используют этот пользовательский файл preference .

Package: *
Pin: release o=linuxmint
Pin-Priority: 700

Package: *
Pin: origin packages.linuxmint.com
Pin-Priority: 700

Package: *
Pin: release o=Ubuntu
Pin-Priority: 500

Это эффективно заставляет их предоставлять пакеты, когда они есть в своих репозиториях. Но если у них их нет, они используют стандартный репозиторий Ubuntu.

Пример выполнения apt-get после установки наивысшего приоритета локальному репозиторию

Я просто хотел установить пакет kubuntu-desktop поверх Ubuntu для тестирования KDE. (я забыл это, я установил предпочтение, используя файл /etc/apt/preference ) . У меня была iso из kubuntu-12.04-alternate-installer, поэтому я подумал, что могу использовать это.

(после правильной установки источника iso как источника репозитория) , я запустил sudo apt-get install kubuntu-desktop , а затем удивился, увидев результат ниже.

[email protected]:~$ sudo apt-get install kubuntu-desktop
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 kubuntu-desktop : Depends: language-selector-kde but it is not going to be installed
                   Recommends: amarok but it is not going to be installed
                   Recommends: apturl-kde but it is not going to be installed
                   Recommends: gdebi-kde but it is not going to be installed
                   Recommends: gpgsm but it is not going to be installed
                   Recommends: ibus-qt4 but it is not going to be installed
                   Recommends: jockey-kde but it is not going to be installed
                   Recommends: kdegraphics-strigi-plugins but it is not going to be installed
                   Recommends: kdepim-wizards but it is not going to be installed
                   Recommends: kpackagekit but it is not going to be installed
                   Recommends: libreoffice-kde but it is not going to be installed
                   Recommends: libreoffice-style-oxygen but it is not going to be installed
                   Recommends: network-manager-pptp-kde but it is not going to be installed
                   Recommends: plasma-widget-facebook but it is not going to be installed
                   Recommends: plasma-widget-kimpanel but it is not going to be installed
                   Recommends: usb-creator-kde but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Я был удивлен результатом. вдруг я помню, что я установил предпочтение ( для написания этого ответа ) в /etc/apt/preference , чтобы установить самый высокий приоритет для моего локального репозитория.

Итак, я запустил это: apt-cache policy kubuntu-desktop , выход был следующим:

[email protected]:~$ apt-cache policy kubuntu-desktop 
kubuntu-desktop:
  Installed: (none)
  Candidate: 1.222.1kde47~ppa2
  Version table:
     1.254 0
        500 cdrom://Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)/ precise/main i386 Packages
        500 http://archive.ubuntu.com/ubuntu/ precise/main i386 Packages
     1.222.1kde47~ppa2 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222.1 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/kubuntu/  Packages

В этом выпуске мы видим, что как «cdrom», так и «точный основной репозиторий» имеет номер версии 1.254 , а локальный репозиторий имеет версию 1.222.1kde47 ~ ppa2 , что является более низкой версией. Хотя они размещены перед локальными файлами sources.list, локальные пакеты получили приоритет.

Чтобы явно увидеть, что apt-get действительно пытается установить из локального, я побежал synaptic и получил это, что показывает, что система Apt рассматривает 1.222.1kde47 ~ ppa2 как версию кандидата для установки.

Также apt-cache policy kubuntu-desktop показывает те же самые вещи

[email protected]:~$ apt-cache policy kubuntu-desktop
kubuntu-desktop:
  Installed: (none)
  Candidate: 1.222.1kde47~ppa2
  Version table:
     1.254 0
        500 cdrom://Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)/ precise/main i386 Packages
        500 http://archive.ubuntu.com/ubuntu/ precise/main i386 Packages
     1.222.1kde47~ppa2 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222.1 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/kubuntu/  Packages

Чтобы решить эту проблему, я удалил файл /etc/apt/preference на sudo rm /etc/apt/preference .

Затем снова снова запустил apt-cache policy kubuntu-desktop . только видя этот ожидаемый результат.

[email protected]:~$ sudo rm /etc/apt/preferences
[email protected]:~$ sudo apt-cache policy kubuntu-desktop
kubuntu-desktop:
  Installed: (none)
  Candidate: 1.254
  Version table:
     1.254 0
        500 cdrom://Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)/ precise/main i386 Packages
        500 http://archive.ubuntu.com/ubuntu/ precise/main i386 Packages
     1.222.1kde47~ppa2 0
        500 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222.1 0
        500 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222 0
        500 file:/media/Main/Linux-Software/Ubuntu/Natty/kubuntu/  Packages

И снова запустил это. sudo apt-get install kubuntu-desktop , чтобы увидеть результат ниже:

......... Unnecessary details deleted .........

0 upgraded, 213 newly installed, 0 to remove and 150 not upgraded.
Need to get 0 B/89.6 MB of archives.
After this operation, 269 MB of additional disk space will be used.
Do you want to continue [Y/n]? 

Вы можете проверить полный результат здесь

Тогда я почти уверен в части Объяснения.

Ссылка 1: руководство apt_preference

Ссылка 2: Как сохранить определенную версию установленных пакетов

    
ответ дан Anwar 20.06.2012 в 07:41
источник