Comment mettre à jour automatiquement l'éditeur Atom?

51

La mise à jour automatique de la fonctionnalité Atom n'est pas encore prise en charge pour Ubuntu. Depuis leur référentiel GitHub:

Actuellement, seule une version 64 bits est disponible.

Téléchargez atom-amd64.deb à partir de la page des versions d'Atom. Exécutez sudo dpkg --install atom-amd64.deb sur le paquet téléchargé. Lancez Atom en utilisant la commande atom installée. La version Linux ne se met actuellement pas à jour automatiquement, vous devrez donc répéter ces étapes pour effectuer la mise à niveau vers les versions futures.

J'ai essayé d'utiliser Webupd8 PPA mais cela ne fonctionne pas pour moi.

Igor V.
la source
1
Quel est le problème avec le PPA?
AB
@AB Je pense que tout va bien maintenant, je n'ai pas eu le temps de le tester et je n'utilise pas atom depuis un certain temps, mais à l'époque, PPA n'avait pas mis à jour ma version.
Igor V.
Je ne devrais probablement pas répondre à de vieilles questions. : \
AB
1
Votre réponse est excellente et cela m'aiderait pour des problèmes similaires. :)
Igor V.

Réponses:

71

TL; DR Si vous ne souhaitez pas utiliser le PPA , vous pouvez utiliser un script pour télécharger et installer automatiquement via cron.


  1. Créer un nouveau fichier atom-auto-update

    sudo nano /usr/local/bin/atom-auto-update
    
  2. Ajouter les lignes suivantes

    #!/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. Sauvegarder le fichier et le rendre exécutable

    sudo chmod +x /usr/local/bin/atom-auto-update
    
  4. Testez le script

    sudo atom-auto-update
    
  5. Créer un cronjob pour le script

    sudo crontab -e
    
  6. Ajouter cette ligne

    par exemple: à 10 heures chaque semaine

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

    par exemple: à 10 heures tous les jours

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

Explication

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

    Télécharger le site avec les dernières informations de version

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

      Extraire le lien de téléchargement

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

      Télécharger le fichier DEB

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

    Installer le fichier DEB

UN B
la source
1
Une modification et un vote positif! ;-)
Fabby
2
awk: ligne 1: erreur de syntaxe à ou près de, wget: URL manquante Utilisation: wget [OPTION] ... [URL] ...
Rachid Oussanaa
Si je mets à jour de cette façon, dois-je resintaller les paquets?
Becko
1
Cela m'a également donné une erreur de syntaxe où vous essayez d'extraire l'URL du HTML. Ils ont probablement changé le HTML depuis lors. Cela a fonctionné pour moi (pas complet):cat /tmp/latest | grep '.deb' | grep 'href=' | cut -d '"' -f 2
Dean Rather
2
Pour ceux qui sont confrontés à l'erreur de syntaxe awk, voici ma troisième ligne: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 réponse de AB est une bonne solution! J'ai ajouté l'option show progress bar dans le code bash pour notifier la progression: 

#!/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
blanc
la source
6

Comme la réponse précédente avec modification mineure, pour permettre la mise à jour au démarrage, voici la procédure

  1. Créer un fichier en exécutant la commande:

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

puis tapez le script ci-dessous (utilisez un éditeur de texte tel que "gedit" ou "mousepad" au lieu de "nano", ce qui est plus pratique), puis enregistrez-le.

#!/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. Pour rendre le fichier exécutable:

    sudo chmod +x /usr/local/bin/atom-update
    
  2. Maintenant, vous pouvez mettre à jour manuellement Atom en tapant la commande:

    sudo atom-update
    
  3. Connectez-vous à votre racine, puis ajoutez la ligne ci-dessous à /etc/rc.local ( sudo nano /etc/rc.local) juste avant la exit 0commande:

    /usr/local/bin/atom-update  
    

Cela laissera le script de mise à jour de l'atome s'exécuter chaque fois que vous allumez votre PC.

  1. Pour vérifier que le script a bien fonctionné au démarrage, redémarrez votre PC et ouvrez le terminal, puis tapez:

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

Vous verrez le message du journal en conséquence.

Chukiat
la source
Cela ne fonctionne plus. Pouvez-vous le mettre à jour s'il vous plaît?
Intéressant Knox
Je suis confus si cela vraiment mettre à niveau mon Atom, je reçois Atom a été mis à jour de 1.23.3 à 1.19.7 . Si je télécharge la dernière version la plus récente d’ Atom.io et sudo dpkg -i atom-amd64.debque j’obtiens ʻUnpacking atom (1.23.3) plus que (1.19.7).
Pablo A
3

En me basant sur la réponse de AB , j'ai ajouté une vérification de version pour éviter les téléchargements / installations inutiles:

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

Edit: Je devrais préciser que cela remplacerait le contenu du script / usr / local / bin / atom-auto-update dont la réponse est mentionnée par AB. Les autres étapes de la réponse sont les mêmes.

hordur
la source
3

Eh bien, une autre version plus élégante avec le support de la branche bêta, si le script est lancé avec l'argument bêta: $ 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
la source
2

Installer Atom en un clin d'œil vous assurera de toujours disposer de la dernière version:

sudo snap install atom --classic
Jorge Castro
la source
Existe-t-il une différence de performances ou d'utilisation entre Atom installé via snap ou apt? Je ne comprends pas vraiment comment choisir l'un ou l'autre en général. Merci.
Ramon Suarez
1
Je l'utilise comme ça depuis longtemps, sans aucun problème, je le préfère à leurs debs car il se met à jour automatiquement au lieu de me rappeler de mettre à jour tout le temps.
Jorge Castro
1

J'ai écrit un script Python qui peut être utilisé pour mettre à jour le paquet DEB 64 bits de GitHub. Vous pouvez enregistrer le contenu suivant sous update-atom, par exemple, dans /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
la source
1

Pour une approche moins spécifique à Ubuntu, j’ai écrit un petit paquet atom qui vérifie les nouvelles versions au démarrage (ou vous pouvez le vérifier manuellement avec une commande pratique dans Atom).

Elle est indépendante de la plate-forme (elle fonctionne donc sur toutes les distributions Linux, Windows, etc.).

Vous pouvez configurer quelques éléments tels que surveiller uniquement le canal stable ou la version bêta, avoir des notifications, quel type, et si elles doivent être révocables, etc.).

Il ne met pas automatiquement le paquet à jour (du moins pour le moment!). Je pourrais ajouter cette fonctionnalité à l’avenir si elle suscite suffisamment d’intérêt.

Vos commentaires sont les bienvenus, mieux que des billets sur github.

Mac
la source
Suggestion pour changer votre page GitHub: sous l'en- tête Usage, remplacez The package check for new version of Atom at launchpar The package checks for a new version of Atom at launchUnder the Why "geiger"? rubrique remplacer outadet Atomparoutdated Atom
karel
@ Karel - Merci, c'est fini . Certaines des erreurs étaient dues à ce bogue . :)
mac
0

Si vous construisez à partir de sources, je le fais via un petit script:

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

6 mai 2016

Andy Richardson a créé Atom-Updater-Linux . C'est un paquet atom, vous pouvez l'avoir sur votre atome en lançant:

apm install atom-updater-linux

consulter le référentiel pour plus d'informations

Adi Prasetyo
la source
0

Quelques modifications au script python d’ Andrea Lazzarotto pour supprimer la dépendance à notifier-envoyer que les autres variantes d’Ubuntu n’ont pas par défaut et gérer le cas où aucune copie d’atom n’est déjà installée. En outre, il convient de noter qu'il vous faudra également d'autres dépendances:

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

Je devais aussi exécuter le suivant pour obtenir d'autres sous-dépendances ...

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.')
technique
la source