¿Cómo actualizar automáticamente el editor Atom?


51

La actualización automática de la función Atom aún no es compatible con Ubuntu. Desde su repositorio de GitHub:

Actualmente solo está disponible una versión de 64 bits.

Descargue atom-amd64.deb desde la página de lanzamientos de Atom. Ejecute sudo dpkg --install atom-amd64.deb en el paquete descargado. Inicie Atom utilizando el comando atom instalado. Actualmente, la versión de Linux no se actualiza automáticamente, por lo que deberá repetir estos pasos para actualizar a versiones futuras.

Intenté usar Webupd8 PPA pero no me funciona.


1
¿Cuál es el problema con el PPA?
AB

@AB Creo que está bien ahora, no tuve tiempo para probarlo y no estoy usando el átomo por algún tiempo, pero en ese momento PPA no actualizó mi versión.
Igor V.

Probablemente no debería responder viejas preguntas. : \
AB

1
Su respuesta es excelente y me ayudaría con problemas similares. :)
Igor V.

Respuestas:


71

TL; DR Si no desea usar el PPA , puede usar un script para descargar e instalar automáticamente a través de cron.


  1. Crea un nuevo archivo atom-auto-update

    sudo nano /usr/local/bin/atom-auto-update
    
  2. Agrega las siguientes líneas

    #!/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. Guarde el archivo y hágalo ejecutable

    sudo chmod +x /usr/local/bin/atom-auto-update
    
  4. Probar el guión

    sudo atom-auto-update
    
  5. Crea un cronjob para el script

    sudo crontab -e
    
  6. Agrega esta línea

    por ejemplo: a las 10 am cada semana

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

    Por ejemplo: a las 10 am todos los días

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

Explicación

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

    Descargue el sitio con la información de la última versión

  • 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 …

      Extrae el enlace de descarga

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

      Descargue el archivo DEB

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

    Instale el archivo DEB


1
¡Una edición y un voto positivo! ;-)
Fabby

2
awk: línea 1: error de sintaxis en o cerca, wget: URL manquante Utilización: wget [OPCIÓN] ... [URL] ...
Rachid Oussanaa

Si actualizo de esta manera, ¿tengo que volver a instalar los paquetes?
becko

1
Esto también me dio un error de sintaxis en el que intentas extraer la URL del HTML. Probablemente cambiaron el HTML desde entonces. Esto funcionó para mí (no completa):cat /tmp/latest | grep '.deb' | grep 'href=' | cut -d '"' -f 2
Dean Más bien

2
Para aquellos que enfrentan el error de sintaxis awk, aquí está mi tercera fila: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

¡La respuesta de AB es una buena solución! Agregué la opción Mostrar barra de progreso en el código bash para notificar el progreso: 

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

6

Como la respuesta anterior con una modificación menor, para permitir la actualización al inicio, aquí está el procedimiento

  1. Crear archivo ejecutando el comando:

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

luego escriba el siguiente script (use el editor de texto como "gedit" o "mousepad" en lugar de "nano" es más conveniente) y luego guárdelo.

#!/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 hacer que el archivo sea ejecutable:

    sudo chmod +x /usr/local/bin/atom-update
    
  2. Ahora puede actualizar Atom manualmente escribiendo el comando:

    sudo atom-update
    
  3. Inicie sesión en su raíz y luego agregue la fila siguiente a /etc/rc.local ( sudo nano /etc/rc.local) justo antes del exit 0comando:

    /usr/local/bin/atom-update  
    

Esto permitirá que el script de actualización del átomo se ejecute cada vez que encienda su PC.

  1. Para verificar que la secuencia de comandos se haya ejecutado correctamente en el inicio, reinicie su PC y abra la terminal y luego escriba:

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

Verá el mensaje de registro en consecuencia.


Ya no funciona. ¿Puedes actualizarlo por favor?
Interesante Knox

Estoy confundido si esto realmente mejora mi Atom, obtengo que Atom se ha actualizado de 1.23.3 a 1.19.7 . Si descargo la última versión actual de Atom.io y sudo dpkg -i atom-amd64.debobtengo `Desempacando el átomo (1.23.3) sobre (1.19.7).
Pablo A

3

Sobre la base de la respuesta de AB , agregué la verificación de versiones para evitar descargas / instalaciones innecesarias:

#!/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: Debo aclarar que esto reemplazaría el contenido del script / usr / local / bin / atom-auto-update que menciona la respuesta de AB. Los otros pasos de la respuesta son los mismos.


3

Bueno, otra versión más elegante con soporte de rama beta, si el script se lanzó con 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

2

Instalar Atom a través de un complemento asegurará que siempre tenga la última versión:

sudo snap install atom --classic

¿Hay alguna diferencia en el rendimiento o el uso entre Atom instalado a través de snap o apt? Realmente no entiendo cómo elegir uno u otro en general. Gracias.
Ramón Suárez

1
Lo he estado usando así durante mucho tiempo sin problemas, lo prefiero a sus debs porque se actualiza automáticamente en lugar de recordarme que actualice todo el tiempo.
Jorge Castro

1

He escrito un script de Python que se puede usar para actualizar el paquete DEB de 64 bits desde GitHub. Puede guardar el siguiente contenido como update-atom, por ejemplo, en /etc/cron.hourlyo /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.'

1

Para un enfoque menos específico de ubuntu, escribí un pequeño paquete de átomos que busca nuevas versiones al inicio (o puede verificarlo manualmente con un comando útil dentro de Atom).

Es independiente de la plataforma (por lo que funciona en cualquier distribución de Linux, Windows, etc.).

Puede configurar algunas cosas, como solo monitorear el canal estable o la versión beta también, recibir notificaciones, qué tipo y si deberían descartarse, etc.).

Lo hace no (al menos por ahora!) Actualizar automáticamente el paquete. Puedo agregar esa característica en el futuro si hay suficiente interés en ella.

Comentarios bienvenidos, mejor como entradas en github.


Sugerencia para cambiar su página de GitHub: bajo el uso de encabezamiento se sustituirá The package check for new version of Atom at launchcon The package checks for a new version of Atom at launchBajo el "Geiger" ¿Por qué? encabezado reemplazar outadet Atomconoutdated Atom
karel

@karel - Gracias, listo . Algunos de los errores se debieron a este error . :)
mac

0

Si está construyendo a partir de fuentes, lo hago a través de un pequeño script:

cd "/home/YOUR_USER/gitmisc/atom/"
git pull
cd script/
sudo ./build --install                   


0

Un par de modificaciones a la secuencia de comandos de Python de Andrea Lazzarotto para eliminar la dependencia de notificar-enviar que otras variantes de Ubuntu no tienen por defecto y manejar el caso en el que aún no hay una copia de átomo instalada. Además, debe tenerse en cuenta que también necesitará otras dependencias:

sudo apt-get install python-request git gvfs-bin

También tuve que ejecutar lo siguiente para obtener otras subdependencias ...

sudo apt-get -f install

#!/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.')

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.