Atribuir maior prioridade ao meu repositório local

33

Resumo

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.

A pergunta original era: "Como atribuir maior prioridade ao repositório local sem usar o arquivo sources.list"

Eu configurei um repositório local com pacotes que baixei. Eu o uso para evitar o download dos mesmos pacotes pela Internet, quando preciso reinstalar meu Ubuntu. É um repositório básico, criado com apt-ftparchive packages . > Packages . Eu fiz deste um repositório confiável para evitar o aviso de "repositório não autenticado". ( Quando você tem um repositório não confiável, apt ou synaptic tentam baixar os mesmos pacotes pela Internet, porque é confiável ).

Eu tenho usado este repositório local por pelo menos 1 ano. Mas eu sempre tenho que colocar minha linha de repositório local no topo do arquivo sources.list para usar isso. Mas isso é chato, já que eu devo abrir um terminal e fazer algumas digitações nele toda vez que eu reinstalar o Ubuntu, apesar de existir uma ferramenta melhor software-properties-gtk . Não consigo usar essa ferramenta, pois ela coloca a linha de origem no final de 'sources.list'.

E o problema real é que o apt ou synaptic sempre baixa um pacote da fonte mencionada anteriormente, sem verificar se os pacotes já estão disponíveis no repositório local. Então, não tenho escolha a não ser colocar a fonte local no topo de sources.list fazendo terminal (na verdade não odeio terminal, mas preciso de uma solução).

Eu tentei este método . Mas isso não me ajuda.

Meu arquivo de preferências é este em /etc/apt/preferences.d/local-pin-900

    Package: *
    Pin: release o=Local,n=ubuntu-local
    Pin-Priority: 900

Meu arquivo de lançamento é este

    Origin: Local
    Label: Local-Ubuntu
    Description: Local Ubuntu Repository
    Codename: ubuntu-local
    MD5Sum:
     ed43222856d18f389c637ac3d7dd6f85          1043412 Packages
     d41d8cd98f00b204e9800998ecf8427e                0 Sources

Quando eu habilito a preferência do apt, o apt-cache policy mostra corretamente a preferência, por exemplo, Mostra que o repositório local tem a maior prioridade.

Mas quando eu faço isso sudo apt-get install <package-name> , apt tenta baixá-lo da Internet. Mas quando eu coloco meu repositório local no topo, ele é instalado a partir do repositório local.

Então, minha pergunta é - & gt; 'É possível forçar o apt a usar o repositório local quando o pacote está disponível no repositório local, sem colocar explicitamente' a fonte local 'no topo da minha lista de repositórios (por exemplo, arquivo sources.list)?'

Editar: a saída de apt-cache policy $package_name é a seguinte

  
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

Ele está mostrando que meu repositório local tem maior preferência, embora não seja o primeiro que vem em sources.list file.

Aqui está a saída de 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

Ainda está tentando obter o arquivo da Internet, embora eu ache que ele deveria ser feliz com o arquivo local.

Resultado do uso de "" ou localhost como mediageek sugerido

Usando o host local não tem efeito. mas "" tem mas não foi diferente do meu método

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

Eu os usei antes de postar a pergunta. Mas novamente eu tentei isso (por questão de segurança). O mesmo resultado. apt-cache policy mostrando que meu repositório local tem, de fato, a maior prioridade. mas quando eu tentei instalar ele está dizendo "Precisa obter XXX / XXX KB de arquivo".

    
por Anwar 11.05.2012 / 07:11

1 resposta

44

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 /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

    
por Anwar 20.06.2012 / 07:41