Como habilitar atualizações automáticas silenciosas para qualquer repositório?

43

Eu li aqui como habilitar atualizações automáticas silenciosas para o Google Chrome. No entanto, tenho outros repositórios como spotify, docky e outros para os quais gostaria de ativar atualizações silenciosas.

Estou tentando fazer isso no meu sistema Ubuntu 10.04. Mas esta pergunta se aplica a todas as versões do Ubuntu. Eu tenho o pacote de atualizações autônomas instalado.

Como posso fazer isso?

nik90
fonte
Deseja atualizações de segurança silenciosas . ou TODAS as atualizações instaladas sem intervenção? Por quê?
david6
1
Praticamente todas as atualizações, incluindo os repositórios de usuários também.
Nik90

Respostas:

66

Primeiro, instale gksu:

sudo apt-get install gksu

O mais fácil de permitir atualizações automáticas para o seu sistema é editar o arquivo 50unattended-upgradesdentro /etc/apt/apt.conf.d/com o seu editor de texto favorito, por exemplo:

gksu gedit /etc/apt/apt.conf.d/50unattended-upgrades

Nele, é necessário comentar as seções comentadas do bloco Origens permitidas

mudança

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
//      "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

para

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
        "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

Para o software que não está no repositório Ubuntu que você deseja atualizar, você precisa adicionar uma origem e um archive ao arquivo. Para descobrir quais são os seus PPAs, abra a pasta /var/lib/apt/lists/, que é a área de armazenamento de informações de estado para cada recurso do pacote. O que você está procurando são os arquivos que terminam com Release no nome.

Abra um com o seu editor de texto, ou seja, para o Google Chrome:

gedit /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release

Origin: Google, Inc.
Label: Google
Suite: stable
Codename: stable
Version: 1.0
Date: Thu, 17 Nov 2011 19:09:01 +0000
Architectures: i386 amd64
Components: main
Description: Google chrome-linux repository.

A origem é óbvia ( Origin: Google, Inc.) e o arquivo será o que estiver abaixo da linha Suite ( Suite: stable).

Se um Originou Suiteestiver faltando, eles serão a string vazia. Mas observe que, se ambos estiverem ausentes, provavelmente não será possível usar essa fonte com atualizações autônomas sem incluir outras fontes com o mesmo problema.

Depois de anotar essas duas linhas, você precisará editar o 50unattended-upgradesarquivo e adicionar as linhas usando este formato "<origin>:<archive>";para fins de exemplo "Google\, Inc.:stable";.

A origem do Google Chrome é meio complicada, pois possui um ponto final e uma vírgula, mas a maioria dos arquivos do Release será fácil de ler.

Como outro exemplo, a fonte JS do nó especifica uma origem ( Node Source), mas não um arquivo morto; para que você possa combiná-lo "Node Source:";.

O Allowed Origins é correspondido usando curingas no estilo de shell (mais especificamente, com o fnmatch () do Python ). Se você for cuidadoso o suficiente para não incluir fontes conflitantes, é possível escrever coisas como "Node *:*";.


Não se esqueça de fazer um backup do seu 50unattended-upgradesarquivo antes de editá-lo, faça isso com sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak.

Para testar as alterações feitas no arquivo, você pode usar sudo unattended-upgradescom os parâmetros --dry-rune --debug.

--dry-run executará um ciclo de atualizações autônomas, exceto que realmente não instalará as atualizações, apenas verifique e verifique se está tudo ok.

--debug ativará o modo detalhado.

Você sempre pode verificar os logs em unattended-upgradesat /var/log/unattended-upgrades/unattended-upgrades.log.


Você pode alterar a configuração das atualizações autônomas editando o arquivo /etc/apt/apt.conf.d/10periodic, as opções para a configuração estão no /etc/cron.daily/aptcabeçalho do script. Leia-os para configurar a frequência das atualizações autônomas.

Bruno Pereira
fonte
2
Obrigado ... Muito detalhado! posso perguntar por que você colocou um \ após o Google?
Nik90
Por causa dos caracteres especiais na origem, é um caractere de escape para a vírgula. A maioria das origens que você encontra não terá isso.
Bruno Pereira
1
@jos Não, é assim que funciona, --dry-runirá verificar se nas listas atualizadas existem atualizações disponíveis e as enviar para você, as listas são atualizadas por qualquer configuração /etc/cron.daily/apt, executando-o manualmente não atualiza as listas que eu acho.
Bruno Pereira
1
O que devo colocar como nome do arquivo quando o arquivo correspondente da versão não listar um conjunto?
hsivonen
2
Verifique também a abordagem automatizada aqui: askubuntu.com/a/792621/417607
Abhishek Bhatia
14

Abordagem automatizada para a resposta de @Bruno Pereira: (Por favor, considere estrelar o repositório do github, se a resposta for útil.)

Link do código: https://github.com/abhigenie92/unattended_upgrades_repos

  • Verifique os repositórios para adicionar:

    $ python automatic_upgrade.py 
    Add repos:
    "Ubuntu:xenial";
    "LP-PPA-kubuntu-ppa-backports:xenial";
    "LP-PPA-tuxonice:xenial";
    "LP-PPA-webupd8team-sublime-text-3:xenial";
    
    Skipping files due to not present origin or suite. Or origin being a url.:
    packagecloud.io_slacktechnologies_slack_debian_dists_jessie_InRelease
    tiliado.eu_nuvolaplayer_repository_deb_dists_xenial_InRelease
    
  • Agora edite /etc/apt/apt.conf.d/50unattended-upgradespara incluí-los:

    // Automatically upgrade packages from these (origin:archive) pairs
    Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        "${distro_id}:${distro_codename}-updates";
        "${distro_id}:${distro_codename}-proposed";
        "${distro_id}:${distro_codename}-backports";
      "Ubuntu:xenial";
      "LP-PPA-kubuntu-ppa-backports:xenial";
      "LP-PPA-tuxonice:xenial";
      "LP-PPA-webupd8team-sublime-text-3:xenial";
    };
    ....
    ....
    
  • Verifique se estão incluídos:

    $ sudo unattended-upgrade --dry-run --debug
    Initial blacklisted packages: 
    Initial whitelisted packages: 
    Starting unattended upgrades script
    Allowed origins are: ['o=Ubuntu,a=xenial-security', 'o=Ubuntu,a=xenial-updates', 'o=Ubuntu,a=xenial-proposed', 'o=Ubuntu,a=xenial-backports', 'o=Ubuntu,a=xenial', 'o=LP-PPA-kubuntu-ppa-backports,a=xenial', 'o=LP-PPA-tuxonice,a=xenial', 'o=LP-PPA-webupd8team-sublime-text-3,a=xenial']
    pkgs that look like they should be upgraded: 
    Fetched 0 B in 0s (0 B/s)                                                                                  
    fetch.run() result: 0
    blacklist: []
    whitelist: []
    No packages found that can be upgraded unattended and no pending auto-removals
    
Abhishek Bhatia
fonte
Bem-vindo ao @ andy.holmes, considere estrelar o repositório do github, se possível. Link- github.com/abhigenie92/unattended_upgrades_repos
Abhishek Bhatia
Você também pode modificar como o dpkg trata os pacotes que tentam modificar os arquivos de configuração: unix.stackexchange.com/questions/138751/…
deoren
Esse script python é excelente, no entanto, tive que modificar o que o README.md sugeriu para 50 atualizações automáticas do meu trecho em execução do Raspberry Pi. A especificação da origem permitida como, por exemplo, "Raspberry:stable";não funcionou. Em vez disso, usei, por exemplo,"o=Raspberry, a=stable";
cfogelberg
5

Edição /etc/apt/apt.conf.d/50unattended-upgrades, adicione o seguinte:

Unattended-Upgrade::Origins-Pattern {
        "origin=*";
};

Isso permitirá atualizações autônomas para todos os pacotes.

Zachary West
fonte
Sim, obrigado pela resposta clara e concisa. Mas existem pacotes que possuem origin:'', por exemplo, datadog-agent from site:'apt.datadoghq.com'. Nesse caso, também seria necessário adicionar "origin=";para não ignorar pacotes com origem vazia. Mas então é melhor usar apenas em "site=*";vez de "origin=*";.
Paul Tobias
Eu adicionei meu próprio repositório em um arquivo /etc/apt/sources.list.d/my_repo.list, mas ele não atualiza o pacote. Manualmente ele trabalha com sudo apt update. Alguma pista de como?
Sander
Isso usa as mesmas fontes de uma atualização manual, ou seja, ignora as fontes desativadas?
Silicomancer 17/10
3

Existem instruções para forçar uma nova execução a fazer com que o cron inicie a atualização automática no seguinte link . O procedimento para parar o cron é este

sudo service anacron stop
sudo service cron stop
sudo rm -rf /var/run/unattend* /var/run/cron* /var/run/anacron*
sudo rm -rf /var/lib/apt/periodic/*

e reiniciar o cron para fazer a atualização automática agora (ou pelo menos dentro de alguns minutos) é

sudo service cron start
sudo anacron -fn

Como funciona

Várias coisas o farão funcionar.

  • É acionado da execução do /etc/cron.dailycron, especificamente /etc/cron.daily/apt. Cron é executado /etc/cron.dailyàs 6h25 (veja /etc/crontab)

  • Anacron é executado desde o início? e disparará /etc/cron.dailyapós 5 minutos de tempo de atividade (consulte /etc/anacrontab)

    A nota APT::Periodic::RandomSleeppode ser configurada /etc/apt/apt.conf.d/10periodic, mas o padrão é 1800s (30 minutos), para que nenhuma atualização ocorra até 30 minutos após a /etc/cron.daily/aptexecução.

Registro

Se funcionar, as coisas devem ser registradas nesta pasta /var/log/unattended-upgrades,.

Eleanor Ellis
fonte
Isso foi especialmente útil para mim, pois meu provedor de hospedagem virtual pensou que seria uma boa ideia remover /etc/cron.daily/aptda instalação padrão do Ubuntu 12.04 - portanto, atualizações automáticas do APT não estavam ocorrendo :-(. A resposta do ServerFault serverfault.com/a/568329/ O 95570 forneceu detalhes sobre como recriar esse arquivo.
Alex Dupuy