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 apt
ou synaptic
tenta 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.list
arquivo 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 synaptic
sempre 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.list
terminal 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 policy
mostra 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>
, apt
tenta 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.list
arquivo.
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 policy
mostrando que meu repositório local tem de fato a maior prioridade. mas quando tentei instalar, estava dizendo "Precisa obter XXX / XXX KB de arquivo".
apt-get
comando. Ele diz que "0 kb precisa ser baixado".apt-cache policy
apt-cache policy
e vi que o repositório local tem maior prioridade. Mas aindaapt-get
estou tentando instalá-lo da internet. Eu acho que simplesmente não é possível sem usar osources.list
arquivo.apt-cache policy
mostrou que a versão era a mesmaRespostas:
A resposta curta:
Aqui está o arquivo
/etc/apt/preferences
, que éapt-get
usado 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.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.list
arquivo>Resposta à pergunta original:
Não há como atribuir a maior prioridade ao repositório local sem usar o
sources.list
arquivo. 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:
Usando o
/etc/apt/sources.list
arquivo, você precisa colocar sua linha de repositório local na parte superior deste arquivo. como o abaixo.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/preference
arquivo para forçar a selecionar / usar um.deb
arquivo 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.list
arquivo com o método acima mencionado.Explicação:
Parece que todos entendemos mal o
apt_preference
objetivo, o manual apt_preference descreve isso nos três primeiros parágrafos !!E o muito importante está no terceiro parágrafo
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çãoAqui está o arquivo
/etc/apt/preferences
, que éapt-get
usado para decidir qual versão deve ser selecionada se houver muitas versões de um único pacote. (Neste exemplo,compiz-fusion-plugins-extra
possui várias versões.Este arquivo diz
apt-get
que 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
xapps
com versão1.0
no meu repositório local, e esse mesmo pacotexapps
existir no repositório do Precise com versão superior, por exemplo2.0
,apt-get
preferirá a versão do repositório local, ou seja, versão1.0
.Aqui está o meu
/etc/apt/sources.list
arquivoEmbora eu tenha listado o repositório do preciso anteriormente no arquivo, ele não faz com
apt-get
que selecione o pacote desse repositório. Conforme descrito no manualPortanto, a saída do comando
apt-cache policy compiz-fusion-plugins-extra
foi a esperada conforme abaixoAqui, a versão candidata é
0.9.5.94-0ubuntu1
, (que está no repositório local), não0.9.7.0~bzr9-0ubuntu6 0
, que está no repositório de precises. embora o primeiro tenha sido listado primeiro nosources.list
arquivo.Um exemplo de
apt-get
tentativa de instalaçãocompiz-fusion-plugins-extra
após definir a prioridade mais alta para o repositório local.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_preference
manualUm exemplo de casos de uso para o
/etc/apt/preferences
arquivo:Um exemplo de forçar
apt-get
a 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 essepreference
arquivo personalizado .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-get
após definir a prioridade mais alta para o repositório localEu 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/preference
arquivo) . 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-desktop
e fiquei surpreso ao ver a saída abaixo.Fiquei surpreso com o resultado. de repente, lembro que defini uma preferência ( para escrever esta resposta )
/etc/apt/preference
para definir a maior prioridade ao meu repositório local.então, eu executei o seguinte:,
apt-cache policy kubuntu-desktop
a saída era a seguinte: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
realmente está tentando instalar a partir do local, executeisynaptic
e obtive isso, o que mostra que, o sistema Apt considera 1.222.1kde47 ~ ppa2 como a versão candidata a ser instalada.Também
apt-cache policy kubuntu-desktop
mostrando as mesmas coisasPara resolver isso, removi o
/etc/apt/preference
arquivo porsudo rm /etc/apt/preference
.Então correu novamente isso novamente
apt-cache policy kubuntu-desktop
. apenas vendo esta saída esperada.Também correu isso novamente.
sudo apt-get install kubuntu-desktop
para ver a saída abaixo: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
fonte