Призначте найвищий пріоритет моєму локальному сховищу


39

Підсумок

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


Оригінальним питанням було: "Як призначити найвищий пріоритет локальному сховищу без використання файлу source.list"

Я налаштував локальне сховище із завантаженими пакетами. Я використовую це, щоб уникнути завантаження одних і тих же пакетів через Інтернет, коли мені потрібно перевстановити Ubuntu. Це основне сховище, створене за допомогою apt-ftparchive packages . > Packages. Я зробив це надійним сховищем, щоб уникнути попередження про "неаутентифікований сховище". ( Якщо у вас є ненадійний сховище aptабо synapticнамагаєтеся завантажити ті самі пакети через Інтернет, тому що це довіряють ).

Я використовую цей локальний сховище принаймні 1 рік. Але я завжди повинен розміщувати мій рядок локального сховища у верхній частині sources.listфайлу, щоб використовувати це. Але це дратує, оскільки я повинен відкривати термінал і робити певний набір щоразу, коли перевстановлюю Ubuntu, хоча є кращий інструмент software-properties-gtk. Я не можу використовувати цей інструмент, оскільки він розміщує рядок джерела в кінці `source.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намагаюся завантажити його з Інтернету. Але коли я розміщую свій локальний-репо вгорі, він встановлюється з локального сховища.

Отже, моє запитання -> "Чи можна змусити apt використовувати локальне сховище, коли пакет доступний у локальному сховищі, без явного розміщення" локального джерела "у верхній частині мого списку сховищ (наприклад, файл source.list)? '

Редагувати: вихід apt-cache policy $package_nameвиходить наступним чином

  
nautilus-wipe:
  Встановлено: (немає)
  Кандидат: 0,1.1-2
  Таблиця версій:
     0,1,1-2 0
        500 http://archive.ubuntu.com/ubuntu/ точні / всесвітні i386 пакети
        900 файл: / медіа / Головна / Linux-програмне забезпечення / Ubuntu / Точність / Пакети

Це свідчить про те, що мій локальний сховище має більші переваги, хоча це не те, що перше в sources.listфайл.

Ось вихід apt-get install nautilus-wipe

Читання списків пакунків ... Готово
Побудова дерева залежності       
Читання інформації про стан ... Готово
Будуть встановлені наступні НОВІ пакети:
  nautilus-протирати
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 MD5Sum: 7d497b8dfcefe1c0b51a45f3b0466994

Він все ще намагається отримати файл з Інтернету, хоча я думаю, що він повинен бути задоволений місцевим.


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

Використання localhost не впливає. але "" має, але не відрізняється від мого методу

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

Я використав їх перед тим, як поставити запитання. Але я знову спробував це (на користь). Той самий результат. apt-cache policyпоказуючи, що мій локальний сховище справді є найвищим пріоритетом. але коли я спробував її встановити, він говорить "Потрібно отримати XXX / XXX KB архіву".


Чи був пакет у вашому локальному сховищі новішим / рівним офіційному пакету?
переплетення

Так, звичайно, я перевірив це apt-getкомандою. Там написано "0 кб потрібно завантажити".
Анвар

Ви хочете перевірити це за допомогоюapt-cache policy
tumbleweed

Попередній коментар був помилковим. Я думав, що це я дав у своєму іншому запитанні (щодо встановлення програмного забезпечення з програмним центром з локального сховища). Так, я вже перевірив це apt-cache policyі побачив, що місцевий сховище має більш високий пріоритет. Але все ж apt-getнамагаються встановити його з Інтернету. Я думаю, що без використання sources.listфайлу просто неможливо .
Анвар

Я питав , якщо apt-cache policyпоказав , що версія була такою ж
перекотиполе

Відповіді:


52

Коротка відповідь:

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

Ось файл /etc/apt/preferences, за допомогою якого apt-getможна визначити, яку версію потрібно вибрати, якщо існує багато версій одного пакета. При цьому будь-який пакет, що надходить з локального сховища, матиме перевагу над іншими пакетами.

Пакет: *  
Контакт: походження ""  
Пріоритет: 1001  

Це не контролюватиме версію, але перевагу джерела, якщо обидва пакети мають однакову версію. Якщо вам потрібно призначити найвищий пріоритет для тієї самої версії пакету у вашому локальному репо, перелічіть їх у верхній частині до /etc/apt/sources.listфайла>

Відповідь на початкове запитання:

Як призначити найвищий пріоритет локальному сховищу, не використовуючи файл source.list?

Немає можливості призначити найвищий пріоритет локальному сховищу без використання sources.listфайлу. ви повинні розмістити їх у верхній частині "source.list", якщо ви хочете призначити найвищий пріоритет місцевому репо.

Коротка відповідь на це питання:

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

Використовуючи /etc/apt/sources.listфайл, вам потрібно покласти місцевий рядок сховища у верхній частині цього файлу. як нижче.

deb cdrom: [Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)] / точний головний обмежений доступ
файл deb: / media / Головна / Precision-Debs-New /
deb файл: / медіа / Головна / Linux-програмне забезпечення / Ubuntu / точне /

deb http://archive.ubuntu.com/ubuntu точний головний універсал з обмеженим мультисвітом
deb-src http://archive.ubuntu.com/ubuntu точний всесвіт головний мультисеверний обмежений #Додано програмними властивостями

# deb cdrom: [Xubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120423.1)] / точний головний універсал з обмеженою частотою
# deb cdrom: [Ubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120423)] / чіткий основний обмежений

# deb http://archive.canonical.com/ubuntu точний партнер
# deb-src http://archive.canonical.com/ubuntu точний партнер
# deb http://extras.ubuntu.com/ubuntu точний головний
# deb-src http://extras.ubuntu.com/ubuntu точний головний

І так, "apt_preference" не має нічого спільного з вибором екземплярів пакетів з однаковою версією. Суть у тому, що ви не можете використовувати /etc/apt/preferenceфайл, щоб змусити вибирати / використовувати .debфайл із локального сховища, присвоюючи найвищий пріоритет вашому локальному. Цей файл (уподобання) використовується для вибору конкретної версії, а не конкретного примірника (.deb-файла) тієї ж версії. В останньому випадку вам потрібно використовувати /etc/apt/sources.listфайл із вищезгаданим методом.


Пояснення:

Здається, ми всі неправильно зрозуміли apt_preferenceмету, посібник apt_preference описує це в перших трьох абзацах !!

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

Кілька версій пакету можуть бути доступні для встановлення, коли файл source.list (5) містить посилання на більш ніж один дистрибутив (наприклад, стабільний і тестуючий). APT призначає пріоритет кожній доступній версії. За умови обмежень залежності apt-get (8) вибирає версію з найвищим пріоритетом для встановлення. Файл налаштувань APT перевизначає пріоритети, які APT призначає версіям пакетів за замовчуванням, тим самим надаючи користувачеві контроль над тим, яку з них обрано для встановлення.

І найважливіше - у третьому абзаці

Кілька примірників однієї і тієї ж версії пакета можуть бути доступні, коли файл source.list (5) містить посилання на більш ніж одне джерело. У цьому випадку apt-get (8) завантажує екземпляр, перерахований раніше, у файл source.list (5). Файл налаштувань APT не впливає на вибір примірника, лише на вибір версії .

Ці курсиви були зроблені моїми

Подивимось це на прикладі:

Я маю точну версію compiz-fusion-plugins-extra, але я її відключив для демонстрації

Ось файл /etc/apt/preferences, за допомогою якого apt-getможна визначити, яку версію потрібно вибрати, якщо існує багато версій одного пакета. (У цьому прикладі compiz-fusion-plugins-extraє кілька версій.

Пакет: *  
Контакт: походження ""  
Пріоритет: 1001  

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

Іншими словами, якщо у мене є пакет xappsз версією 1.0у моєму локальному сховищі, і цей самий пакунок xappsіснує у сховищі Precis з більш високою версією, скажімо 2.0, apt-getвіддасть перевагу версії з локального сховища, тобто версії 1.0.

Ось мій /etc/apt/sources.listфайл

deb http://archive.ubuntu.com/ubuntu точний головний універсал з обмеженим мультисвітом
deb-src http://archive.ubuntu.com/ubuntu точний всесвіт головний мультисеверний обмежений #Додано програмними властивостями
deb http://security.ubuntu.com/ubuntu/ чітка безпека всесвіту з обмеженим доступом
deb http://archive.ubuntu.com/ubuntu точне оновлення всесвіту основний мультисевер обмежений
deb http://archive.ubuntu.com/ubuntu точний-підтримує всесвіт основний мультисвіт

# deb http://archive.canonical.com/ubuntu точний партнер
# deb-src http://archive.canonical.com/ubuntu точний партнер
# deb http://extras.ubuntu.com/ubuntu точний головний
# deb-src http://extras.ubuntu.com/ubuntu точний головний


deb файл: / media / Main / Linux-Software / Ubuntu / Oneiric / #це є сховищем oneiric.
deb файл: / медіа / Головна / Linux-програмне забезпечення / Ubuntu / Natty / natty /
deb файл: / медіа / Головна / Linux-програмне забезпечення / Ubuntu / Natty / kubuntu /
deb файл: / медіа / Головна / Linux-програмне забезпечення / Ubuntu / Natty / natty_new /

Хоча, я перерахував репозиторій точного раніше у файлі, це не викликає apt-getвибір пакета з цього сховища. Як описано в посібнику

Файл налаштувань APT не впливає на вибір примірника, лише на вибір версії.

Отже, вихід команди apt-cache policy compiz-fusion-plugins-extraбув таким, як очікувалося, як показано нижче

anwar @ edubuntu-lenovo: / etc / apt $ apt-кеш політика compiz-fusion-plugins-extra 
compiz-fusion-plugins-extra:
  Встановлено: (немає)
  Кандидат: 0.9.5.94-0ubuntu1 / **, вибір нижчих версій для пріоритету ** /
  Таблиця версій:
     0,9.7,0 ~ bzr9-0ubuntu6 0
        500 http://archive.ubuntu.com/ubuntu/ точні / всесвітні i386 пакети
     0.9.5.94-0ubuntu1 0
       Файл 1001: / media / Main / Linux-Software / Ubuntu / Oneiric / Packages
     0.9.4-0ubuntu3 0
       Файл 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages

Тут, кандидатською версією є 0.9.5.94-0ubuntu1(яка знаходиться в локальному сховищі), а не 0.9.7.0~bzr9-0ubuntu6 0, яка знаходиться в сховищі точок. хоча точність "була вказана першою у sources.listфайлі.

Приклад запуску apt-getспроби встановити compiz-fusion-plugins-extraпісля встановлення найвищого пріоритету для локального сховища.

anwar @ edubuntu-lenovo: ~ $ sudo apt-get install compiz-fusion-plugins-extra 
Читання списків пакунків ... Готово
Побудова дерева залежності       
Читання інформації про стан ... Готово
Наступні пакети були автоматично встановлені і більше не потрібні:
  x11-apps x11-xfs-utils xinit x11-session-utils libfs6
Щоб видалити їх, використовуйте "apt-get autoremove".
Наступні додаткові пакети будуть встановлені:
  compiz-core compiz-plugins-типовий compiz-plugins-extra
  compiz-plugins-main-default libdecoration0 xserver-xorg-core
  xserver-xorg-video-intel
Рекомендовані пакети:
  compizconfig-settings-manager xfonts-100dpi xfonts-75dpi
Наступні пакети будуть видалені:
  compiz compiz-gnome compizconfig-backend-gconf edubuntu-desktop
  libcompizconfig0 ubuntu-desktop unit 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-divage
  xserver-xorg-video-siliconmotion xserver-xorg-video-sis
  xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-тризуб
  xserver-xorg-video-vesa xserver-xorg-video-vmware
Будуть встановлені наступні НОВІ пакети:
  compiz-fusion-plugins-extra compiz-plugins-extra
Наступні пакети будуть завантажені:
  compiz-core compiz-plugins-типовий compiz-plugins-main-default
  libdecoration0 xserver-xorg-core xserver-xorg-video-intel
0 оновлених, 2 нещодавно встановлених, 6 зменшених, 37 для видалення та 698 не оновлених.
Потрібно отримати 0 B / 5,772 кБ архівів.
Після цієї операції 8,294 кБ дискового простору буде звільнено.
Ви хочете продовжити [Y / n]? 

Дивно !!!, Він намагається знизити вже встановлені пакети compiz з точністю для вирішення залежностей (узгоджуючись з Oneireic) з новообраними compiz-fusion-plugins-extra!!!.

Що небезпечніше, що він намагається видалити графічні пакети драйверів (xserver-xorg -....), щоб уникнути конфлікту з новими комп’ютерами.

(Можливо, якщо я також мав їх у своєму локальному сховищі, вони можуть спокійно захотіти повернути його назад. Але, як правило, ці пакунки встановлюються, я їх не завантажував, тому не перебуваю в локальній репо-ренепі, отже, цей результат) .

Висновок : Отже, використання /etc/apt/preferencesрекомендується використовувати лише з локальним сховищем, якщо у вас є повне сховище в локальній системі.

Що робити, якщо в багатьох сховищах існує кілька екземплярів (.deb-файлу) однієї і тієї ж версії.

Що описано в apt_preferenceпосібнику

Кілька примірників однієї і тієї ж версії пакету можуть бути доступні, коли файл source.list (5) містить посилання на більш ніж одне джерело. У цьому випадку apt-get (8) завантажує екземпляр, перерахований раніше, у файл source.list (5).

Приклад випадків використання /etc/apt/preferencesфайлу:

Прикладом змушення apt-getвибору версії, доступної зі спеціального репо, замість стандартної Ubuntu може бути дистрибутив "Linux Mint". Вони використовують цей спеціальний preferenceфайл.

Пакет: *
Pin: випустити o = linuxmint
Пріоритет: 700

Пакет: *
Pin: походження пакети.linuxmint.com
Пріоритет: 700

Пакет: *
Pin: випустити o = Ubuntu
Пріоритет: 500

Це фактично змушує їх надавати пакети, коли вони є у своїх сховищах. Але якщо їх немає, вони використовують стандартне сховище Ubuntu.


Приклад працює apt-getпісля встановлення найвищого пріоритету для локального сховища

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

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

anwar @ edubuntu-lenovo: ~ $ sudo apt-get install kubuntu-desktop
Читання списків пакунків ... Готово
Побудова дерева залежності       
Читання інформації про стан ... Готово
Неможливо встановити деякі пакети. Це може означати, що у вас є
запитували неможливу ситуацію або якщо ви використовуєте нестабільну
розповсюдження, що деякі необхідні пакети ще не створені
або було переміщено з вхідних.
Наступна інформація може допомогти вирішити ситуацію:

Наступні пакети мають невиконані залежності:
 kubuntu-desktop: Залежить: language-selector-kde, але він не буде встановлений
                   Рекомендує: amarok, але він не збирається встановлювати
                   Рекомендує: apturl-kde, але він не буде встановлений
                   Рекомендує: gdebi-kde, але він не буде встановлений
                   Рекомендує: gpgsm, але він не буде встановлений
                   Рекомендує: ibus-qt4, але він не збирається встановлювати
                   Рекомендує: jockey-kde, але він не буде встановлений
                   Рекомендує: kdegraphics-strigi-плагіни, але він не буде встановлений
                   Рекомендує: kdepim-wizards, але він не буде встановлений
                   Рекомендує: kpackagekit, але він не буде встановлений
                   Рекомендує: libreoffice-kde, але він не буде встановлений
                   Рекомендує: libreoffice-style-кисень, але він не встановлюється
                   Рекомендує: network-manager-pptp-kde, але він не буде встановлений
                   Рекомендує: plasma-widget-facebook, але він не буде встановлений
                   Рекомендує: плазма-віджет-кімпанель, але він не буде встановлений
                   Рекомендує: usb-creator-kde, але він не буде встановлений
E: Не вдається виправити проблеми, ви зламали зламані пакети.

Я був здивований результатом. раптом я пам'ятаю це, я встановив перевагу ( для написання цієї відповіді ), /etc/apt/preferenceщоб визначити найвищий пріоритет для мого локального сховища.

Отже, я запустив це:, apt-cache policy kubuntu-desktopвихід був як нижче:

anwar @ edubuntu-lenovo: ~ $ apt-кеша політика kubuntu-desktop 
kubuntu-desktop:
  Встановлено: (немає)
  Кандидат: 1.222.1kde47 ~ ppa2
  Таблиця версій:
     1,225 0
        500 cdrom: // Kubuntu 12.04 LTS _Precise Pangolin_ - Випуск i386 (20120424) / точний / основний пакет i386
        500 http://archive.ubuntu.com/ubuntu/ точні / основні пакети i386
     1.222.1kde47 ~ ppa2 0
       Файл 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1.222.1 0
       Файл 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1,222 0
       Файл 1001: / media / Main / Linux-Software / Ubuntu / Natty / kubuntu / Packages

У цьому висновку, ми бачимо , що і «CDROM» і «точний головний репозиторій» має номер версії 1.254 , в той час як локальний репозиторій має версію 1.222.1kde47 ~ PPA2 , яка є нижчою версії. Хоча вони розміщуються перед локальними у файлі source.list, місцеві пакети отримали перевагу.

Щоб явно побачити, що apt-getнасправді намагається встановити з локального, я побіг synapticі отримав це, що показує, що система Apt розглядає 1.222.1kde47 ~ ppa2 як кандидатську версію для встановлення.

введіть тут опис зображення

Також apt-cache policy kubuntu-desktopпоказ одних і тих же речей

anwar @ edubuntu-lenovo: ~ $ apt-кеша політика kubuntu-desktop
kubuntu-desktop:
  Встановлено: (немає)
  Кандидат: 1.222.1kde47 ~ ppa2
  Таблиця версій:
     1,225 0
        500 cdrom: // Kubuntu 12.04 LTS _Precise Pangolin_ - Випуск i386 (20120424) / точний / основний пакет i386
        500 http://archive.ubuntu.com/ubuntu/ точні / основні пакети i386
     1.222.1kde47 ~ ppa2 0
       Файл 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1.222.1 0
       Файл 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1,222 0
       Файл 1001: / media / Main / Linux-Software / Ubuntu / Natty / kubuntu / Packages

Щоб вирішити це, я видалив /etc/apt/preferenceфайл sudo rm /etc/apt/preference.

Потім знову побігли це apt-cache policy kubuntu-desktop. бачачи лише цей очікуваний вихід.

anwar @ edubuntu-lenovo: ~ $ sudo rm / etc / apt / налаштування
anwar @ edubuntu-lenovo: ~ $ sudo apt-cache policy kubuntu-desktop
kubuntu-desktop:
  Встановлено: (немає)
  Кандидат: 1.254
  Таблиця версій:
     1,225 0
        500 cdrom: // Kubuntu 12.04 LTS _Precise Pangolin_ - Випуск i386 (20120424) / точний / основний пакет i386
        500 http://archive.ubuntu.com/ubuntu/ точні / основні пакети i386
     1.222.1kde47 ~ ppa2 0
        500 файлів: / медіа / Головна / Linux-програмне забезпечення / Ubuntu / Natty / natty / пакети
     1.222.1 0
        500 файлів: / медіа / Головна / Linux-програмне забезпечення / Ubuntu / Natty / natty / пакети
     1,222 0
        500 файлів: / медіа / Головна / Linux-програмне забезпечення / Ubuntu / Natty / kubuntu / Пакети

Також запустив це ще раз. sudo apt-get install kubuntu-desktopщоб побачити вихід нижче:

......... Непотрібні дані видалено .........

0 оновлених, 213 нещодавно встановлених, 0 для видалення та 150 не оновлених.
Потрібно отримати 0 B / 89,6 МБ архівів.
Після цієї операції буде використано 269 Мб додаткового дискового простору.
Ви хочете продовжити [Y / n]? 

Повний результат ви можете перевірити тут

Тоді я майже впевнений у частині пояснення.


Довідка 1: Посібник з apt_preference

Довідка 2: Як зберегти встановлену конкретну версію пакетів


1
+1 для частини "Що робити, якщо кілька екземплярів однієї версії", пояснює поведінку. Але я просто зачекаю до кінця тижня, можливо, хтось має кращі пояснення. :)
Савас Радевич

чи слід додати приклад за допомогою місцевого репо?
Анвар

Ісусе ... я маю на увазі подяку за вашу добре пояснену відповідь, але це повинно бути ВСЕ простіше. Чому на землі не можна призначати пріоритет, коли працює apt-add-сховище ??
Адам Плочер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.