Como atualizar automaticamente o editor Atom?

51

A atualização automática do recurso Atom ainda não é suportada pelo Ubuntu. No repositório GitHub:

Atualmente, apenas uma versão de 64 bits está disponível.

Faça o download do atom-amd64.deb na página de lançamentos do Atom. Execute o sudo dpkg --install atom-amd64.deb no pacote baixado. Inicie o Atom usando o comando atom instalado. A versão do Linux não é atualizada automaticamente no momento, portanto, você precisará repetir essas etapas para atualizar para versões futuras.

Tentei usar o Webupd8 PPA, mas não funciona para mim.

Igor V.
fonte
11
Qual é o problema com o PPA?
AB
@ AB Acho que está bem agora, não tive tempo para testá-lo e não estou usando o atom há algum tempo, mas naquela época o PPA não atualizava minha versão.
Igor V.
Eu provavelmente não deveria responder perguntas antigas. : \
AB
11
Sua resposta é ótima e me ajudaria em problemas semelhantes. :)
Igor V.

Respostas:

71

TL; DR Se você não quiser usar o PPA , poderá usar um script para baixar e instalar automaticamente via cron.


  1. Crie um novo arquivo atom-auto-update

    sudo nano /usr/local/bin/atom-auto-update
    
  2. Adicione as seguintes linhas

    #!/bin/bash
    wget -q https://github.com/atom/atom/releases/latest -O /tmp/latest
    wget -q $(awk -F '[<>]' '/href=".*atom-amd64.deb/ {match($0,"href=\"(.*.deb)\"",a); print "https://github.com/" a[1]} ' /tmp/latest) -O /tmp/atom-amd64.deb
    dpkg -i /tmp/atom-amd64.deb
    
  3. Salve o arquivo e torne-o executável

    sudo chmod +x /usr/local/bin/atom-auto-update
    
  4. Teste o script

    sudo atom-auto-update
    
  5. Crie um cronjob para o script

    sudo crontab -e
    
  6. Adicione esta linha

    por exemplo: às 10h toda semana

    0 10 * * 1 /usr/local/bin/atom-auto-update
    

    por exemplo: às 10 horas todos os dias

    0 10 * * * /usr/local/bin/atom-auto-update      
    

Explicação

  • wget -q https://github.com/atom/atom/releases/latest -O /tmp/latest

    Baixe o site com as informações da versão mais recente

  • wget -q $(awk -F '[<>]' '/href=".*atom-amd64.deb/ {match($0,"href=\"(.*.deb)\"",a); print "https://github.com/" a[1]} ' /tmp/latest) -O /tmp/atom-amd64.deb

    1. … awk -F '[<>]' '/href=".*atom-amd64.deb/ {match($0,"href=\"(.*.deb)\"",a); print "https://github.com/" a[1]} ' /tmp/latest …

      Extraia o link para download

    2. wget -q $( … ) -O /tmp/atom-amd64.deb

      Faça o download do arquivo DEB

  • dpkg -i /tmp/atom-amd64.deb

    Instale o arquivo DEB

AB
fonte
11
Uma edição e um voto positivo! ;-)
Fabby
2
awk: linha 1: erro de sintaxe ou perto, wget: URL manquante Utilização: wget [OPÇÃO] ... [URL] ...
Rachid Oussanaa
Se eu atualizar dessa maneira, tenho que reinstalar novamente os pacotes?
Becko
11
Isso também me deu um erro de sintaxe, onde você tenta extrair o URL do HTML. Eles provavelmente mudaram o HTML desde então. Isso funcionou para mim (não está completo): #cat /tmp/latest | grep '.deb' | grep 'href=' | cut -d '"' -f 2
// Dean Rather
2
Para aqueles que enfrentam o erro de sintaxe do awk, aqui está a minha terceira linha:wget https://github.com$(cat /tmp/latest | grep -o -E 'href=".*atom-amd64.deb' | cut -d'"' -f2) -O /tmp/atom-amd64.deb
Felipe Elia
20

A resposta da AB é uma boa solução! Adicionei a opção show progress bar no código bash para notificar o progresso: 

#!/bin/bash
wget -q https://github.com/atom/atom/releases/latest -O /tmp/latest
wget --progress=bar -q 'https://github.com'$(cat /tmp/latest | grep -o -E 'href="([^"#]+)atom-amd64.deb"' | cut -d'"' -f2 | sort | uniq) -O /tmp/atom-amd64.deb -q --show-progress
dpkg -i /tmp/atom-amd64.deb
branco
fonte
6

Como a resposta anterior, com pequenas modificações, para permitir a atualização na inicialização, aqui está o procedimento

  1. Crie um arquivo executando o comando:

    sudo nano /usr/local/bin/atom-update  
    

digite o script abaixo (use o editor de texto como "gedit" ou "mousepad" em vez de "nano" é mais conveniente) e salve-o.

#!/bin/bash    
wget -q https://github.com/atom/atom/releases/latest -O /tmp/latest
MATCHEDROW=$(awk -F '[<>]' '/href=".*atom-amd64.deb/' /tmp/latest)
LATEST=$(echo $MATCHEDROW | grep -o -P '(?<=href=").*(?=" rel)')
VER_LATEST=$(echo $MATCHEDROW | rev | cut -d"/" -f 2 | rev | sed 's/v//g')
VER_INST=$(dpkg -l atom | tail -n1 | tr -s ' ' | cut -d" " -f 3)

if [ "$VER_LATEST" != "$VER_INST" ]; then
   wget --progress=bar -q "https://github.com/$LATEST" -O /tmp/atom-amd64.deb --show-progress
   dpkg -i /tmp/atom-amd64.deb
   echo "Atom has been update from $VER_LATEST to $VER_INST"
   logger -t atom-update "Atom has been update from $VER_INST to $VER_LATEST"
else
   echo "Atom version $VER_INST is the latest version, no update require"
   logger -t atom-update "Atom version $VER_INST is the latest version, no update require"
fi
  1. Para tornar o arquivo executável:

    sudo chmod +x /usr/local/bin/atom-update
    
  2. Agora você pode atualizar manualmente o Atom digitando o comando:

    sudo atom-update
    
  3. Entre na sua raiz e adicione a linha abaixo a /etc/rc.local ( sudo nano /etc/rc.local) logo antes do exit 0comando:

    /usr/local/bin/atom-update  
    

Isso permitirá que o script de atualização do atom seja executado sempre que você ligar o PC.

  1. Para verificar se o script foi executado corretamente na inicialização, reinicie o seu PC e abra o terminal e digite:

    cat /var/log/syslog | grep 'atom.*'  
    

Você verá a mensagem de log em conformidade.

Chukiat
fonte
Não está mais funcionando. Você pode atualizá-lo, por favor?
Knox interessante
Estou confuso se isso realmente atualizar meu Atom, eu recebo o Atom foi atualizado de 1.23.3 para 1.19.7 . Se eu baixar a última versão atual do Atom.io e sudo dpkg -i atom-amd64.debobter `Unpacking atom (1.23.3) sobre (1.19.7).
Pablo #
3

Com base na resposta da AB , adicionei a verificação de versão para evitar o download / instalação desnecessário:

#!/bin/bash

TMP_DIR=$(mktemp -d)

TMP_LATEST="${TMP_DIR}/latest"
TMP_FILE="${TMP_DIR}/atom-amd64.deb"

wget -q https://github.com/atom/atom/releases/latest -O ${TMP_LATEST}
LATEST=$(awk -F '[<>]' '/href=".*atom-amd64.deb/ {match($0,"href=\"(.*.deb)\"",a); print "https://github.com/" a[1]} ' ${TMP_LATEST})
VER_LATEST=$(echo $LATEST | rev | cut -d"/" -f 2 | rev | sed 's/v//g')

VER_INST=$(dpkg -l atom | tail -n1 | tr -s ' ' | cut -d" " -f 3)

if [ "$VER_LATEST" != "$VER_INST" ]; then
  wget -q $LATEST -O $TMP_FILE
  VER_DOWN=$(dpkg-deb -f $TMP_FILE Version)
  if [ "$VER_DOWN" != "$VER_INST" ]; then
    dpkg -i $TMP_FILE
  fi
fi

rm -rf "${TMP_DIR}"

Editar: devo esclarecer que isso substituiria o conteúdo do script / usr / local / bin / atom-auto-update mencionado pela resposta da AB. Os outros passos da resposta são os mesmos.

hordur
fonte
3

Bem, outra versão mais elegante com suporte à ramificação beta, se o script for lançado com o argumento beta: $ update-atom beta

#!/bin/bash
DLPATH="https://atom.io/download/deb"
DLDEST="$HOME/Downloads/atom-amd64.deb"

if ! [ -z "$1" ] && [ $1=="beta" ];  then
  echo "Updating beta"
  DLPATH="$DLPATH?channel=beta"
  DLDEST="$HOME/Downloads/atom-amd64-beta.deb"
else
  echo "Updating stable"
fi

rm -f $DLDEST
wget -O $DLDEST $DLPATH 
sudo dpkg -i $DLDEST
Nikita Unkovsky
fonte
2

A instalação do Atom por um piscar de olhos garantirá que você sempre tenha a versão mais recente:

sudo snap install atom --classic
Jorge Castro
fonte
Existe uma diferença no desempenho ou uso entre o Atom instalado via snap ou apt? Eu realmente não entendo como escolher um ou outro em geral. Obrigado.
Ramon Suarez
11
Uso-o assim há muito tempo, sem problemas, prefiro-o aos débitos deles porque ele se atualiza automaticamente em vez de me lembrar de atualizar o tempo todo.
Jorge Castro
1

Eu escrevi um script Python que pode ser usado para atualizar o pacote DEB de 64 bits do GitHub. Você pode salvar o seguinte conteúdo como update-atom, por exemplo, em /etc/cron.hourlyou /etc/cron.daily:

#!/usr/bin/env python

import os
import requests


def msg(text):
    """Give message to user."""
    os.system('notify-send "Atom updater" "{}"'.format(text))


def current():
    """Get current version."""
    f = os.popen("apt show atom 2>/dev/null | grep Ver")
    return f.read().split(' ')[1].strip()


def latest():
    """Get latest version."""
    upd_url = 'https://github.com/atom/atom/releases/latest'
    final = requests.get(upd_url).url
    return final.split('tag/v')[1]


def compare(cv, lv):
    """Compare versions."""
    return lv.split('.') > cv.split('.')


def upgrade(version):
    """Perform upgrade."""
    tempfile = '/tmp/atom.deb'
    url = (
        'https://github.com/atom/atom/releases/download/'
        'v{}/atom-amd64.deb'.format(version)
    )
    code = os.system(
        'rm -f {} && '
        'wget "{}" -O {} && '
        'dpkg -i {}'.format(tempfile, url, tempfile, tempfile)
    )
    return code == 0

if __name__ == '__main__':
    cv = current()
    try:
        lv = latest()
    except requests.exceptions.ConnectionError:
        print 'No network'
        exit(0)
    print 'Current version', cv
    print 'Latest version', lv
    result = compare(cv, lv)
    if result:
        print 'A new version is available!'
        msg('Updating Atom to version {}...'.format(lv))
        if upgrade(lv):
            msg('Update completed.')
        else:
            msg('Problem during update.')
    else:
        print 'Atom is updated.'
Andrea Lazzarotto
fonte
1

Para uma abordagem menos específica do ubuntu, escrevi um pequeno pacote atom que verifica novas versões na inicialização (ou você pode verificar manualmente com um comando útil no Atom).

É independente de plataforma (por isso funciona em qualquer distribuição Linux, Windows, etc ...).

Você pode configurar algumas coisas, como monitorar apenas o canal estável ou o beta também, receber notificações, que tipo e se elas devem ser descartadas, etc ...).

Ele faz não (pelo menos por enquanto!) Atualizar automaticamente o pacote. Posso adicionar esse recurso no futuro, se houver interesse suficiente nele.

Bem-vindo feedback, melhor como bilhetes no github.

Mac
fonte
Sugestão para alterar sua página do GitHub: sob o título Usage, substitua The package check for new version of Atom at launchpor The package checks for a new version of Atom at launchUnder the "geiger" Por que? posição substituir outadet Atomcomoutdated Atom
karel 08/08
@karel - Obrigado, pronto . Alguns dos erros foram causados ​​por esse bug . :)
mac
0

Se você está construindo a partir de fontes, faço isso através de um pequeno script:

cd "/home/YOUR_USER/gitmisc/atom/"
git pull
cd script/
sudo ./build --install                   
Leo Ufimtsev
fonte
0

6 de maio de 2016

Andy Richardson criou o Atom-Updater-Linux . É um pacote atom, você pode colocá-lo no seu atom executando:

apm install atom-updater-linux

consulte o repositório para obter mais informações

Adi Prasetyo
fonte
0

Alguns mods para o script python de Andrea Lazzarotto para remover a dependência de notificação-envio que outras variantes do Ubuntu não possuem por padrão e lidar com o caso em que ainda não há uma cópia do atom instalada. Além disso, deve-se notar que existem outras dependências que você precisará também:

sudo apt-get install python-solicitações git gvfs-bin

Eu também tive que executar o seguinte para obter outras sub-dependências ...

Instalação do sudo apt-get -f

#!/usr/bin/env python
import os
import requests

def msg(text):
  """Give message to user."""
  os.system('notify-send "Atom updater" "{}"'.format(text)
  + ' 2>/dev/null '
  +'|| echo "{}"'.format(text))

def current():
    """Get current version."""
    f = os.popen("apt show atom 2>/dev/null | grep Ver")
    result = f.read()
    if result:
      return result.split(' ')[1].strip()
    return "0.0"

def latest():
    """Get latest version."""
    upd_url = 'https://github.com/atom/atom/releases/latest'
    final = requests.get(upd_url).url
    return final.split('tag/v')[1]

def compare(cv, lv):
    """Compare versions."""
    return lv.split('.') > cv.split('.')

def upgrade(version):
    """Perform upgrade."""
    tempfile = '/tmp/atom.deb'
    url = (
        'https://github.com/atom/atom/releases/download/'
        'v{}/atom-amd64.deb'.format(version)
    )
    code = os.system(
        'rm -f {} && '
        'wget "{}" -O {} && '
        'dpkg -i {}'.format(tempfile, url, tempfile, tempfile)
    )
    return code == 0

if __name__ == '__main__':
    cv = current()
    try:
        lv = latest()
    except requests.exceptions.ConnectionError:
        print 'No network'
        exit(0)
    print 'Current version', cv
    print 'Latest version', lv
    result = compare(cv, lv)
    if result:
        print 'A new version is available!'
        msg('Updating Atom to version {}...'.format(lv))
        if upgrade(lv):
            msg('Update completed.')
        else:
            msg('Problem during update.')
    else:
        msg('Atom is updated.')
técnico
fonte