Atribuir maior prioridade ao meu repositório local

40

Sumário

Como faço para o apt-get preferir pacotes de repositórios locais em vez de baixar novamente a mesma versão do pacote dos repositórios oficiais? O repositório local é assinado e confiável. Já tentamos a prioridade de preferências do apt.


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

Eu configurei um repositório local com os pacotes que baixei. Eu o uso para evitar o download dos mesmos pacotes pela Internet, quando preciso reinstalar o Ubuntu. É um repositório básico, criado com apt-ftparchive packages . > Packages. Eu criei 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 aptou synaptictenta fazer o download dos mesmos pacotes pela Internet, porque é confiável ).

Uso este repositório local há pelo menos 1 ano. Mas eu sempre tenho que colocar minha linha de repositório local na parte superior do sources.listarquivo para usar isso. Mas isso é irritante, já que devo abrir um terminal e digitar nele toda vez que reinstalar o Ubuntu, embora exista uma ferramenta melhor software-properties-gtk. Não posso usar esta ferramenta, pois ela coloca a linha de origem no final de `sources.list.

E o verdadeiro problema é que, apt ou synapticsempre baixa um pacote da fonte mencionada anteriormente, sem inspecionar se os pacotes já estão disponíveis no repositório local. Portanto, não tenho escolha a não ser colocar a fonte local no topo do sources.listterminal de execução (na verdade, eu não odeio o terminal, mas preciso de uma solução).

Eu tentei esse 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 ativo a preferência do apt, a apt-cache policymostra corretamente a preferência, por exemplo, mostra que o repositório local tem a maior prioridade.

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

Portanto, minha pergunta é -> 'É possível forçar o apt a usar o repositório local quando o pacote estiver 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)? "

Edit: output of apt-cache policy $package_nameé como se segue

  
nautilus-wipe:
  Instalado: (nenhum)
  Candidato: 0.1.1-2
  Tabela de versão:
     0.1.1-2 0
        500 pacotes http://archive.ubuntu.com/ubuntu/ precision / universe i386
        Arquivo 900: / media / Principal / Software Linux / Ubuntu / Precise / Pacotes

Está mostrando que meu repositório local tem uma preferência mais alta, embora não seja o primeiro no sources.listarquivo.

Aqui está a saída de apt-get install nautilus-wipe

Lendo listas de pacotes ... Concluído
Construindo árvore de dependência       
Lendo informações do estado ... Concluído
Os seguintes NOVOS pacotes serão instalados:
  nautilus-wipe
0 atualizado, 1 recém-instalado, 0 para remover e 131 não atualizado.
Precisa obter 30,7 kB de arquivos.
Após esta operação, 150 kB de espaço em disco adicional serão usados.
'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

Ele ainda está tentando obter o arquivo da Internet, embora eu ache que deveria estar feliz com o local.


Resultado do uso de "" ou localhost como sugerido pelo mediageek

O uso do 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 garantia). O mesmo resultado. apt-cache policymostrando que meu repositório local tem de fato a maior prioridade. mas quando tentei instalar, estava dizendo "Precisa obter XXX / XXX KB de arquivo".

Anwar
fonte
O pacote no seu repositório local era mais novo / igual ao pacote oficial?
amaranto
Sim, é claro, eu verifiquei com o apt-getcomando. Ele diz que "0 kb precisa ser baixado".
Anwar
Deseja verificar comapt-cache policy
tumbleweed
O comentário anterior foi um erro. Eu pensei que estava dando na minha outra pergunta (sobre a instalação de software com o centro de software do repositório local). Sim, eu já o verifiquei apt-cache policye vi que o repositório local tem maior prioridade. Mas ainda apt-getestou tentando instalá-lo da internet. Eu acho que simplesmente não é possível sem usar o sources.listarquivo.
Anwar #
Eu estava perguntando se apt-cache policymostrou que a versão era a mesma
o amaranto

Respostas:

53

A resposta curta:

O arquivo de preferências do APT / etc / apt / preferências pode ser usado para controlar quais versões de pacotes serão selecionadas para instalação.

Aqui está o arquivo /etc/apt/preferences, que é apt-getusado para decidir qual versão deve ser selecionada se houver muitas versões de um único pacote. Com isso, qualquer pacote proveniente do repositório local terá precedência sobre os outros pacotes.

Pacote: *  
PIN: origem ""  
Prioridade de pino: 1001  

Isso não controlará a versão, mas a preferência de origem, se os dois pacotes tiverem a mesma versão. Se você precisar atribuir a prioridade mais alta para a mesma versão do pacote no seu repositório local, liste-as na parte superior do /etc/apt/sources.listarquivo>

Resposta à pergunta original:

Como atribuir maior prioridade ao repositório local sem usar o arquivo sources.list?

Não há como atribuir a maior prioridade ao repositório local sem usar o sources.listarquivo. você deve colocá-los no topo de "sources.list" se desejar atribuir a maior prioridade ao seu repositório local.

Resposta sumária a esta pergunta:

Como faço para o apt-get preferir pacotes de repositórios locais em vez de baixar novamente a mesma versão do pacote dos repositórios oficiais? O repositório local é assinado e confiável. Já tentamos a prioridade de preferências do apt.

Usando o /etc/apt/sources.listarquivo, você precisa colocar sua linha de repositório local na parte superior deste arquivo. como o abaixo.

deb cdrom: [Kubuntu 12.04 LTS _Precise Pangolin_ - Lançamento i386 (20120424)] / main principal preciso
arquivo deb: / media / Main / Precise-Debs-New /
arquivo deb: / media / Principal / Software Linux / Ubuntu / Precise /

deb http://archive.ubuntu.com/ubuntu multiverso restrito do universo principal preciso
deb-src http://archive.ubuntu.com/ubuntu multiverso principal do universo preciso restrito #Adicionado por software-properties

# deb cdrom: [Xubuntu 12.04 LTS _Precise Pangolin_ - Lançamento i386 (20120423.1)] / universo restrito do multiverso principal preciso
# deb cdrom: [Ubuntu 12.04 LTS _Precise Pangolin_ - Lançamento i386 (20120423)] / main principal preciso

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

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 /etc/apt/preferencearquivo para forçar a selecionar / usar um .debarquivo do seu repositório local, atribuindo a maior prioridade 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 /etc/apt/sources.listarquivo com o método acima mencionado.


Explicação:

Parece que todos entendemos mal o apt_preferenceobjetivo, o manual apt_preference descreve isso nos três primeiros parágrafos !!

O arquivo de preferências do APT / etc / apt / preferências pode ser usado para controlar quais versões de 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 para instalação. O arquivo de preferências do APT substitui as prioridades que o APT atribui às versões dos pacotes por padrão, fornecendo ao usuário controle sobre qual deles está selecionado 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. Nesse caso, o apt-get (8) baixa a instância listada mais cedo 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 .

Os itálicos foram feitos pelos meus

Vamos ver isso com um exemplo:

Eu tenho a versão precisa compiz-fusion-plugins-extra, mas desabilitei para demonstração

Aqui está o arquivo /etc/apt/preferences, que é apt-getusado para decidir qual versão deve ser selecionada se houver muitas versões de um único pacote. (Neste exemplo, compiz-fusion-plugins-extrapossui várias versões.

Pacote: *  
PIN: origem ""  
Prioridade de pino: 1001  

Este arquivo diz apt-getque instalar a partir do repositório local para todos os pacotes que têm várias versões existe em repositório diferente.

Em outras palavras, se eu tiver um pacote xappscom versão 1.0no meu repositório local, e esse mesmo pacote xappsexistir no repositório do Precise com versão superior, por exemplo 2.0, apt-getpreferirá a versão do repositório local, ou seja, versão 1.0.

Aqui está o meu /etc/apt/sources.listarquivo

deb http://archive.ubuntu.com/ubuntu multiverso restrito do universo principal preciso
deb-src http://archive.ubuntu.com/ubuntu multiverso principal do universo preciso restrito #Adicionado por software-properties
deb http://security.ubuntu.com/ubuntu/ universo de segurança precisa multiverso principal restrito
deb http://archive.ubuntu.com/ubuntu specific-updates universe principal multiverso restrito
deb http://archive.ubuntu.com/ubuntu universo de backports preciso multiverso principal restrito

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


deb file: / media / Principal / Software Linux / Ubuntu / Oneiric / #este repositório onírico.
arquivo deb: / media / principal / software Linux / Ubuntu / Natty / natty /
arquivo deb: / media / principal / software Linux / Ubuntu / Natty / kubuntu /
arquivo deb: / media / principal / software Linux / Ubuntu / Natty / natty_new /

Embora eu tenha listado o repositório do preciso anteriormente no arquivo, ele não faz com apt-getque selecione o pacote desse 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.

Portanto, a saída do comando apt-cache policy compiz-fusion-plugins-extrafoi a esperada conforme abaixo

política do anwar @ edubuntu-lenovo: / etc / apt $ apt-cache policy compiz-fusion-plugins-extra 
compiz-fusion-plugins-extra:
  Instalado: (nenhum)
  Candidato: 0.9.5.94-0ubuntu1 / ** selecionando versões inferiores para prioridade ** /
  Tabela de versão:
     0.9.7.0 ~ bzr9-0ubuntu6 0
        500 pacotes http://archive.ubuntu.com/ubuntu/ precision / universe i386
     0.9.5.94-0ubuntu1 0
       Arquivo 1001: / media / Principal / Software Linux / Ubuntu / Oneiric / Pacotes
     0.9.4-0ubuntu3 0
       Arquivo 1001: / media / Principal / Software Linux / Ubuntu / Natty / natty / Pacotes

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 primeiro tenha sido listado primeiro no sources.listarquivo.

Um exemplo de apt-gettentativa de instalação compiz-fusion-plugins-extraapós definir a prioridade mais alta para o repositório local.

anwar @ edubuntu-lenovo: ~ $ sudo apt-get install compiz-fusão-plugins-extra 
Lendo listas de pacotes ... Concluído
Construindo árvore de dependência       
Lendo informações do estado ... Concluído
Os seguintes pacotes foram instalados automaticamente e não são mais necessários:
  x11-apps x11-xfs-utils xinit x11-session-utils libfs6
Use 'apt-get autoremove' para removê-los.
Os seguintes pacotes extras serão instalados:
  compiz-core compiz-plugins-padrão compiz-plugins-extra
  compiz-plugins-main-default libdecoration0 xserver-xorg-core
  xserver-xorg-video-intel
Pacotes sugeridos:
  compizconfig-settings-manager xfonts-100dpi xfonts-75dpi
Os seguintes pacotes serão REMOVIDOS:
  compiz compiz-gnome compizconfig-backend-gconf edubuntu-desktop
  libcompizconfig0 unidade ubuntu-desktop 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-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
Os seguintes NOVOS pacotes serão instalados:
  compiz-fusão-plugins-extra compiz-plugins-extra
Os seguintes pacotes serão ATUALIZADOS:
  compiz-core compiz-plugins-default compiz-plugins-main-default
  libdecoration0 xserver-xorg-core xserver-xorg-video-intel
0 atualizado, 2 recém-instalado, 6 rebaixado, 37 para remover e 698 não atualizado.
Precisa obter 0 B / 5.772 kB de arquivos.
Após esta operação, 8.294 kB de espaço em disco serão liberados.
Deseja continuar [S / n]? 

Estranho !!!, Ele está tentando fazer o downgrade dos pacotes compiz já instalados, precisos para resolver dependências (combinando com o da Oneiric) com os recém-selecionados compiz-fusion-plugins-extra!!!.

O que é mais perigoso é, ele está tentando remover os pacotes de drivers gráficos (xserver-xorg -....) para evitar conflitos com novas compactações.

(Provavelmente, se eu também os tivesse no meu repositório local, eles podem com segurança fazer o downgrade. Mas como esses pacotes geralmente são instalados, eu não os baixei, portanto não estão no repositório local, portanto, este resultado) .

Conclusão : Portanto, /etc/apt/preferencesé recomendável usar somente 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.

O que é descrito pelo apt_preferencemanual

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. Nesse caso, o apt-get (8) baixa a instância listada mais cedo no arquivo sources.list (5).

Um exemplo de casos de uso para o /etc/apt/preferencesarquivo:

Um exemplo de forçar apt-geta seleção da versão disponível em um repositório personalizado, em vez da versão padrão do Ubuntu, pode ser a distribuição "Linux Mint". Eles usam esse preferencearquivo personalizado .

Pacote: *
Pin: liberação o = linuxmint
Prioridade de pino: 700

Pacote: *
Pin: origin packages.linuxmint.com
Prioridade de pino: 700

Pacote: *
Pin: liberação o = Ubuntu
Prioridade de pino: 500

Isso efetivamente faz com que eles forneçam pacotes quando os tiverem em seus repositórios. Mas se eles não os possuem, eles usam o repositório padrão do Ubuntu.


Um exemplo em execução apt-getapós definir a prioridade mais alta para o repositório local

Eu só queria instalar o kubuntu-desktop pacote no Ubuntu para testar o KDE. (Eu esqueci isso, eu configurei uma preferência usando o /etc/apt/preferencearquivo) . Eu tinha um iso do kubuntu-12.04-alternate-installer, então pensei em usá-lo.

(depois de definir corretamente o iso como fonte de repositório) , corri
sudo apt-get install kubuntu-desktope fiquei surpreso ao ver a saída abaixo.

anwar @ edubuntu-lenovo: ~ $ sudo apt-get install kubuntu-desktop
Lendo listas de pacotes ... Concluído
Construindo árvore de dependência       
Lendo informações do estado ... Concluído
Alguns pacotes não puderam ser instalados. Isso pode significar que você tem
solicitou uma situação impossível ou se você estiver usando o dispositivo instável
distribuição que alguns pacotes necessários ainda não foram criados
ou foi removido do Incoming.
As seguintes informações podem ajudar a resolver a situação:

Os seguintes pacotes têm dependências não atendidas:
 kubuntu-desktop: Depende: language-selector-kde mas não será instalado
                   Recomenda: amarok, mas não será instalado
                   Recomenda: apturl-kde, mas não será instalado
                   Recomenda: gdebi-kde, mas não será instalado
                   Recomenda: gpgsm, mas não será instalado
                   Recomenda: ibus-qt4, mas não será instalado
                   Recomenda: jockey-kde, mas não será instalado
                   Recomenda: kdegraphics-strigi-plugins, mas não será instalado
                   Recomenda: kdepim-wizards mas não será instalado
                   Recomenda: kpackagekit, mas não será instalado
                   Recomenda: libreoffice-kde, mas não será instalado
                   Recomenda: libreoffice-style-oxygen, mas não será instalado
                   Recomenda: network-manager-pptp-kde, mas não será instalado
                   Recomenda: plasma-widget-facebook, mas não será instalado
                   Recomenda: plasma-widget-kimpanel, mas não será instalado
                   Recomenda: usb-creator-kde, mas não será instalado
E: Não foi possível corrigir os problemas, você manteve pacotes quebrados.

Fiquei surpreso com o resultado. de repente, lembro que defini uma preferência ( para escrever esta resposta ) /etc/apt/preferencepara definir a maior prioridade ao meu repositório local.

então, eu executei o seguinte:, apt-cache policy kubuntu-desktopa saída era a seguinte:

anwar @ edubuntu-lenovo: ~ política do apt-cache kubuntu-desktop 
kubuntu-desktop:
  Instalado: (nenhum)
  Candidato: 1.222.1kde47 ~ ppa2
  Tabela de versão:
     1.254 0
        500 cdrom: // Kubuntu 12.04 LTS _Precise Pangolin_ - Lançamento i386 (20120424) / preciso / pacotes principais do i386
        500 Pacotes http://archive.ubuntu.com/ubuntu/ precision / main i386
     1.222.1kde47 ~ ppa2 0
       Arquivo 1001: / media / Principal / Software Linux / Ubuntu / Natty / natty / Pacotes
     1.222.1 0
       Arquivo 1001: / media / Principal / Software Linux / Ubuntu / Natty / natty / Pacotes
     1.222 0
       Arquivo 1001: / media / Principal / Software Linux / Ubuntu / Natty / kubuntu / Pacotes

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-getrealmente está tentando instalar a partir do local, executei synaptice obtive isso, o que mostra que, o sistema Apt considera 1.222.1kde47 ~ ppa2 como a versão candidata a ser instalada.

insira a descrição da imagem aqui

Também apt-cache policy kubuntu-desktopmostrando as mesmas coisas

anwar @ edubuntu-lenovo: ~ política do apt-cache kubuntu-desktop
kubuntu-desktop:
  Instalado: (nenhum)
  Candidato: 1.222.1kde47 ~ ppa2
  Tabela de versão:
     1.254 0
        500 cdrom: // Kubuntu 12.04 LTS _Precise Pangolin_ - Lançamento i386 (20120424) / preciso / pacotes principais do i386
        500 Pacotes http://archive.ubuntu.com/ubuntu/ precision / main i386
     1.222.1kde47 ~ ppa2 0
       Arquivo 1001: / media / Principal / Software Linux / Ubuntu / Natty / natty / Pacotes
     1.222.1 0
       Arquivo 1001: / media / Principal / Software Linux / Ubuntu / Natty / natty / Pacotes
     1.222 0
       Arquivo 1001: / media / Principal / Software Linux / Ubuntu / Natty / kubuntu / Pacotes

Para resolver isso, removi o /etc/apt/preferencearquivo por sudo rm /etc/apt/preference.

Então correu novamente isso novamente apt-cache policy kubuntu-desktop. apenas vendo esta saída esperada.

anwar @ edubuntu-lenovo: ~ $ sudo rm / etc / apt / preferências
anwar @ edubuntu-lenovo: ~ $ política do sudo apt-cache kubuntu-desktop
kubuntu-desktop:
  Instalado: (nenhum)
  Candidato: 1.254
  Tabela de versão:
     1.254 0
        500 cdrom: // Kubuntu 12.04 LTS _Precise Pangolin_ - Lançamento i386 (20120424) / preciso / pacotes principais do i386
        500 Pacotes http://archive.ubuntu.com/ubuntu/ precision / main i386
     1.222.1kde47 ~ ppa2 0
        Arquivo 500: / media / Principal / Software Linux / Ubuntu / Natty / natty / Pacotes
     1.222.1 0
        Arquivo 500: / media / Principal / Software Linux / Ubuntu / Natty / natty / Pacotes
     1.222 0
        Arquivo 500: / media / Principal / Software Linux / Ubuntu / Natty / kubuntu / Pacotes

Também correu isso novamente. sudo apt-get install kubuntu-desktoppara ver a saída abaixo:

......... Detalhes desnecessários excluídos .........

0 atualizado, 213 recém-instalado, 0 para remover e 150 não atualizado.
Precisa obter 0 B / 89,6 MB de arquivos.
Após esta operação, 269 MB de espaço em disco adicional serão usados.
Deseja continuar [S / n]? 

Você pode conferir o resultado completo aqui

Então, eu tenho quase certeza da parte Explicação.


Referência 1: O manual apt_preference

Referência 2: Como manter uma versão específica dos pacotes instalados

Anwar
fonte
11
+1 na parte "E se houver várias instâncias da mesma versão", explica o comportamento. Mas vou esperar até o final da semana, talvez alguém tenha uma explicação melhor. :)
Savvas Radevic
devo adicionar um exemplo usando o repositório local?
Anwar #
Jesus ... quero dizer obrigado pela sua resposta bem explicada, mas isso deve ser MUITO mais simples. Por que diabos uma prioridade não pode ser atribuída quando o apt-add-repository é executado?
Adam Plocher