Wie aktualisiere ich Atom Editor automatisch?


51

Das automatische Update der Atom- Funktion wird für Ubuntu noch nicht unterstützt. Aus ihrem GitHub-Repository:

Derzeit ist nur eine 64-Bit-Version verfügbar.

Laden Sie atom-amd64.deb von der Atom-Veröffentlichungsseite herunter. Führen Sie sudo dpkg --install atom-amd64.deb für das heruntergeladene Paket aus. Starten Sie Atom mit dem installierten Atom-Befehl. Die Linux-Version wird derzeit nicht automatisch aktualisiert. Sie müssen diese Schritte daher wiederholen, um ein Upgrade auf zukünftige Versionen durchzuführen.

Ich habe versucht, Webupd8 PPA zu verwenden, aber es funktioniert bei mir nicht.


1
Was ist das Problem mit der PPA?
AB

@AB Ich denke, es ist in Ordnung, ich habe nicht die Zeit bekommen, es zu testen, und ich verwende Atom seit einiger Zeit nicht, aber damals hat PPA meine Version nicht aktualisiert.
Igor V.

Ich sollte wahrscheinlich keine alten Fragen beantworten. : \
AB

1
Ihre Antwort ist großartig und würde mir bei ähnlichen Problemen helfen. :)
Igor V.

Antworten:


71

TL; DR Wenn Sie den PPA nicht verwenden möchten , können Sie ein Skript zum Herunterladen und automatischen Installieren über cron verwenden.


  1. Erstellen Sie eine neue Datei atom-auto-update

    sudo nano /usr/local/bin/atom-auto-update
    
  2. Fügen Sie die folgenden Zeilen hinzu

    #!/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. Speichern Sie die Datei und machen Sie sie ausführbar

    sudo chmod +x /usr/local/bin/atom-auto-update
    
  4. Testen Sie das Skript

    sudo atom-auto-update
    
  5. Erstellen Sie einen Cronjob für das Skript

    sudo crontab -e
    
  6. Fügen Sie diese Zeile hinzu

    zB: jede Woche um 10 Uhr

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

    zB: jeden Tag um 10 Uhr

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

Erläuterung

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

    Laden Sie die Site mit den neuesten Versionsinformationen herunter

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

      Extrahieren Sie den Download-Link

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

      Laden Sie die DEB-Datei herunter

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

    Installieren Sie die DEB-Datei


1
Eine Bearbeitung und eine Aufwertung! ;-)
Fabby

2
awk: Zeile 1: Syntaxfehler bei oder in der Nähe von wget: URL manquante Utilization: wget [OPTION] ... [URL] ...
Rachid Oussanaa

Wenn ich auf diese Weise aktualisiere, muss ich die Pakete neu installieren?
Becko

1
Dies gab mir auch einen Syntaxfehler, bei dem Sie versuchen, die URL aus dem HTML zu extrahieren. Sie haben wahrscheinlich das HTML seitdem geändert. Dies funktionierte für mich (nicht vollständig):cat /tmp/latest | grep '.deb' | grep 'href=' | cut -d '"' -f 2
Dean Rather

2
Für diejenigen, die mit dem awk-Syntaxfehler konfrontiert sind, ist hier meine dritte Zeile: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

Die Antwort von AB ist eine schöne Lösung! Ich habe die Option zum Anzeigen des Fortschrittsbalkens im Bash-Code hinzugefügt, um den Fortschritt zu benachrichtigen: 

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

Wie die vorherige Antwort mit geringfügigen Änderungen, um die Aktualisierung beim Start zuzulassen, ist hier die Vorgehensweise

  1. Erstellen Sie eine Datei, indem Sie den folgenden Befehl ausführen:

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

Geben Sie dann das folgende Skript ein (verwenden Sie einen Texteditor wie "gedit" oder "mousepad" anstelle von "nano" ist praktischer) und speichern Sie es dann.

#!/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. So machen Sie die Datei ausführbar:

    sudo chmod +x /usr/local/bin/atom-update
    
  2. Jetzt können Sie Atom manuell aktualisieren, indem Sie den folgenden Befehl eingeben:

    sudo atom-update
    
  3. Melden Sie sich bei Ihrem Root an und fügen Sie die folgende Zeile direkt vor dem Befehl zu /etc/rc.local ( sudo nano /etc/rc.local) hinzu exit 0:

    /usr/local/bin/atom-update  
    

Dadurch wird das Atom-Update-Skript jedes Mal ausgeführt, wenn Sie Ihren PC einschalten.

  1. Um zu überprüfen, ob das Skript beim Start ordnungsgemäß ausgeführt wurde, starten Sie Ihren PC neu und öffnen Sie das Terminal. Geben Sie dann Folgendes ein:

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

Sie sehen die Protokollmeldung entsprechend.


Es funktioniert nicht mehr. Kannst du es bitte aktualisieren?
Interessante Knox

Ich bin verwirrt, wenn dies mein Atom wirklich aktualisiert, ich bekomme Atom wurde von 1.23.3 auf 1.19.7 aktualisiert . Wenn ich das aktuellste von Atom.io herunterlade und sudo dpkg -i atom-amd64.debdann 'Atom entpacken' (1.23.3) über (1.19.7) erhalte.
Pablo A

3

Aufbauend auf der Antwort von AB habe ich die Versionsprüfung hinzugefügt, um unnötiges Herunterladen / Installieren zu vermeiden:

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

Bearbeiten: Ich sollte klarstellen, dass dies den Inhalt des Skripts / usr / local / bin / atom-auto-update ersetzen würde, das in der Antwort von AB erwähnt wird. Die anderen Schritte der Antwort sind die gleichen.


3

Nun, eine weitere elegantere Version mit Unterstützung des Beta-Zweigs, wenn das Skript mit dem Beta-Argument gestartet wird: $ 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

Durch die Installation von Atom über einen Snap wird sichergestellt, dass Sie immer die neueste Version haben:

sudo snap install atom --classic

Gibt es einen Unterschied in der Leistung oder Nutzung zwischen Atom, das über Snap oder Apt installiert wurde? Ich verstehe nicht wirklich, wie man das eine oder das andere im Allgemeinen auswählt. Vielen Dank.
Ramon Suarez

1
Ich benutze es schon lange ohne Probleme so, ich bevorzuge es gegenüber den Debs, weil es automatisch aktualisiert wird, anstatt mich daran zu erinnern, die ganze Zeit zu aktualisieren.
Jorge Castro

1

Ich habe ein Python-Skript geschrieben, mit dem das 64-Bit-DEB-Paket von GitHub aktualisiert werden kann. Sie können den folgenden Inhalt speichern als update-atom, zum Beispiel in /etc/cron.hourlyoder /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

Für einen weniger Ubuntu-spezifischen Ansatz habe ich ein kleines Atom-Paket geschrieben , das beim Start nach neuen Versionen sucht (oder Sie können dies manuell mit einem praktischen Befehl in Atom überprüfen).

Es ist plattformunabhängig (funktioniert also auf jeder Linux-Distribution, jedem Windows usw.).

Sie können einige Dinge konfigurieren, z. B. nur den Stable-Channel oder auch die Beta zu überwachen, Benachrichtigungen zu erhalten, welchen Typ sie haben und ob sie abgewiesen werden sollen, usw.).

Es ist nicht (zumindest vorerst!) Automatisch das Paket aktualisieren. Ich kann dieses Feature in Zukunft hinzufügen, wenn es genügend Interesse gibt.

Feedback erwünscht, am besten als Tickets bei github.


Änderungsvorschlag für Ihre GitHub-Seite: unter der Überschrift Usage ersetzen The package check for new version of Atom at launchdurch The package checks for a new version of Atom at launchUnder the Why "geiger"? Überschrift ersetzen outadet Atomdurchoutdated Atom
Karl

@karel - Danke, fertig . Einige der Fehler waren auf diesen Fehler zurückzuführen . :)
Mac

0

Wenn Sie aus Quellen bauen, mache ich das über ein kleines Skript:

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


0

Ein paar Modifikationen am Python-Skript von Andrea Lazzarotto , um die Abhängigkeit von notify-send zu beseitigen, die andere Ubuntu-Varianten standardmäßig nicht haben, und um den Fall zu behandeln, dass noch keine Atom-Kopie installiert ist. Beachten Sie auch, dass Sie noch weitere Abhängigkeiten benötigen:

sudo apt-get installiere Python-Anfragen git gvfs-bin

Ich musste auch Folgendes ausführen, um einige andere Unterabhängigkeiten zu erhalten ...

sudo apt-get -f installieren

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.