A resposta curta:
O arquivo de preferências do APT / etc / apt / preferences pode ser usado para controlar quais versões dos pacotes serão selecionadas para instalação.
Aqui está o arquivo /etc/apt/preferences
, que apt-get
usa para decidir, qual versão é para selecionar se há muitas versões de um único pacote. Com isso, qualquer pacote que venha do repositório local terá precedência sobre os outros pacotes.
Package: * Pin: origin "" Pin-Priority: 1001
Isto não controlará a versão, mas a preferência de origem se ambos os pacotes tiverem a mesma versão. Se você precisar atribuir maior prioridade para o mesmo pacote versão em seu repositório local, liste-os na parte superior do arquivo /etc/apt/sources.list
& gt;
Responda à pergunta original:
Como atribuir maior prioridade ao repositório local sem usar o arquivo sources.list?
Não há como atribuir maior prioridade ao repositório local sem usar o arquivo sources.list
. você deve colocá-los na parte superior de "sources.list" se você quiser atribuir prioridade mais alta ao seu repositório local.
Resumo para responder a esta pergunta:
Como posso fazer com que o apt-get prefira pacotes de repositórios locais ao invés de baixar novamente a mesma versão de pacote dos repositórios oficiais? O repositório local é assinado e confiável. Nós já tentamos a prioridade das preferências do apt.
Usando o arquivo /etc/apt/sources.list
, você precisa colocar sua linha de repositório local no topo deste arquivo. como o abaixo.
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
E sim, "apt_preference" não tem nada a ver com a seleção de instâncias dos pacotes com a mesma versão. O ponto aqui é que você não pode usar o arquivo /etc/apt/preference
para forçar a seleção / uso de um arquivo .deb
do seu repositório local, atribuindo a prioridade mais alta ao seu local. Esse arquivo (preferência) é usado para selecionar uma versão específica, não uma instância específica (arquivo .deb) da mesma versão. Para o último caso, você precisa usar o arquivo /etc/apt/sources.list
com o método mencionado acima.
Explicação:
Parece que todos nós não entendemos a finalidade apt_preference
, o manual apt_preference descreve isso no primeiro parágrafo 3 !!
O arquivo de preferências do APT / etc / apt / preferences pode ser usado para controlar quais versões dos pacotes serão selecionadas para instalação.
Várias versões de um pacote podem estar disponíveis para instalação quando o arquivo sources.list (5) contém referências a mais de uma distribuição (por exemplo, stable e testing). O APT atribui uma prioridade a cada versão disponível. Sujeito a restrições de dependência, o apt-get (8) seleciona a versão com a maior prioridade de instalação. O arquivo de preferências do APT sobrescreve as prioridades que o APT atribui às versões dos pacotes por padrão, dando assim ao usuário controle sobre qual delas está selecionada para instalação.
E o muito importante está no terceiro parágrafo
Várias instâncias da mesma versão de um pacote podem estar disponíveis quando o arquivo sources.list (5) contém referências a mais de uma fonte. Neste caso, o apt-get (8) faz o download da instância listada primeiro no arquivo sources.list (5). O arquivo de preferências do APT não afeta a escolha da instância, apenas a escolha da versão .
Esses itálicos foram feitos pelos meus
Vamos ver isso com um exemplo:
Eu tenho a versão precisa de compiz-fusion-plugins-extra
, mas desativei isso para demonstração
Aqui está o arquivo /etc/apt/preferences
, que apt-get
usa para decidir, qual versão é para selecionar se há muitas versões de um único pacote. (Neste exemplo, compiz-fusion-plugins-extra
tem várias versões.
Package: * Pin: origin "" Pin-Priority: 1001
Este arquivo diz apt-get
para instalar a partir do repositório local para todos os pacotes que possuem várias versões em diferentes repositórios.
Em outras palavras, se eu tiver o pacote xapps
com a versão 1.0
no meu repositório local, e este mesmo pacote xapps
existir no repositório do Precise com versão superior, digamos 2.0
, apt-get
preferirá o pacote versão do repositório local, ou seja, versão 1.0
.
Aqui está o meu arquivo /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 /
Embora eu tenha listado o repositório preciso no início do arquivo, ele não causa apt-get
para selecionar o pacote daquele repositório. Conforme descrito no manual
O arquivo de preferências do APT não afeta a escolha da instância, apenas a escolha da versão.
Assim, a saída do comando apt-cache policy compiz-fusion-plugins-extra
foi a esperada como abaixo
anwar@edubuntu-lenovo:/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
Aqui, a versão candidata é 0.9.5.94-0ubuntu1
, (que está no repositório local), não 0.9.7.0~bzr9-0ubuntu6 0
, que está no repositório de precises. embora o precises 'fosse listado primeiro no arquivo sources.list
.
Um exemplo de execução de apt-get
tentando instalar compiz-fusion-plugins-extra
depois de definir a prioridade mais alta para o repositório local.
anwar@edubuntu-lenovo:~$ 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]?
Estranho !!!, Ele está tentando fazer o downgrade dos pacotes já instalados do compiz de dependências precisas para resolver (combinando com o do Oneiric) com o recém selecionado compiz-fusion-plugins-extra
!!!.
O que é mais perigoso é tentar remover pacotes de drivers de gráficos (xserver-xorg -....) para evitar conflitos com novas composes.
(Provavelmente, se eu também os tivesse em meu repositório local, eles podem querer fazer o downgrade com segurança. Mas como esses pacotes geralmente são instalados, eu não os baixei, portanto não estão no repositório local, por isso resultado) .
Conclusão : Então, usar /etc/apt/preferences
é recomendado apenas para usar com o repositório local, se você tiver um repositório completo no sistema local.
E se várias instâncias (arquivo .deb) da mesma versão existirem em muitos repositórios.
Qual é descrito pelo apt_preference
manual
Várias instâncias da mesma versão de um pacote podem estar disponíveis quando o arquivo sources.list (5) contém referências a mais de uma fonte. Neste caso o apt-get (8) faz o download da instância listada primeiro no arquivo sources.list (5).
Um exemplo de casos de uso para /etc/apt/preferences
file:
Um exemplo de forçar apt-get
a selecionar a versão disponível em um repositório personalizado, em vez do padrão do Ubuntu pode ser a distribuição "Linux Mint". Eles usam esse arquivo preference
personalizado.
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
Isso efetivamente faz com que eles forneçam pacotes quando eles tiverem aqueles em seus repositórios. Mas se eles não os tiverem, eles usam o repositório padrão do Ubuntu.
Um Exemplo executando apt-get
após configurar a prioridade mais alta para o repositório local
Eu só queria instalar o pacote kubuntu-desktop
no Ubuntu para testar o KDE. (esqueci disso, defini uma preferência usando /etc/apt/preference
file) . Eu tive uma iso do kubuntu-12.04-alternate-installer, então eu pensei em usar isso.
(depois de definir corretamente o iso como fonte do repositório) , eu corri o sudo apt-get install kubuntu-desktop
, depois fiquei surpreso ao ver a saída abaixo.
anwar@edubuntu-lenovo:~$ 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.
Fiquei surpreso com o resultado. de repente eu lembro disso, eu defini uma preferência ( para escrever esta resposta em>) em /etc/apt/preference
para definir a prioridade mais alta para o meu repositório local.
então, eu corri isto: apt-cache policy kubuntu-desktop
, a saída foi como abaixo:
anwar@edubuntu-lenovo:~$ 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
Nesta saída, vemos que tanto o "cdrom" quanto o "repositório principal preciso" têm o número da versão 1.254 , enquanto o repositório local tem a versão 1.222.1kde47 ~ ppa2 , que é a versão inferior. Embora, eles sejam colocados antes dos locais no arquivo sources.list, os pacotes locais têm precedência.
Para ver explicitamente que apt-get
está realmente tentando instalar a partir de um local, eu corri synaptic
e comprei isso, o que mostra que, o sistema Apt considera 1.222.1kde47 ~ ppa2 como a versão candidata a instalar.
Também apt-cache policy kubuntu-desktop
mostrando as mesmas coisas
anwar@edubuntu-lenovo:~$ 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
Para resolver isso, eu removi o arquivo /etc/apt/preference
por sudo rm /etc/apt/preference
.
Em seguida, executei novamente isso novamente apt-cache policy kubuntu-desktop
. vendo apenas essa saída esperada.
anwar@edubuntu-lenovo:~$ sudo rm /etc/apt/preferences anwar@edubuntu-lenovo:~$ 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
Também executei isso novamente. sudo apt-get install kubuntu-desktop
para ver a saída abaixo:
......... 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]?
Você pode verificar o resultado completo aqui
Então eu tenho certeza sobre a porção Explicação.
Referência 1: Manual do apt_preference
Referência 2: Como manter uma versão específica de pacotes instalados