Jak automatycznie zaktualizować edytor Atom?


51

Automatyczna aktualizacja funkcji Atom nie jest jeszcze obsługiwana w systemie Ubuntu. Z ich repozytorium GitHub:

Obecnie dostępna jest tylko wersja 64-bitowa.

Pobierz atom-amd64.deb ze strony z wydaniami Atom. Uruchom sudo dpkg --install atom-amd64.deb na pobranym pakiecie. Uruchom Atom za pomocą zainstalowanej komendy atom. Wersja dla systemu Linux nie jest obecnie automatycznie aktualizowana, dlatego konieczne będzie powtórzenie tych kroków, aby przeprowadzić aktualizację do przyszłych wersji.

Próbowałem użyć PPA Webupd8, ale to nie działa dla mnie.


1
Jaki jest problem z PPA?
AB

@AB Myślę, że teraz jest w porządku, nie miałem czasu go przetestować i od jakiegoś czasu nie używam atomu, ale wtedy PPA nie zaktualizowało mojej wersji.
Igor V.

Prawdopodobnie nie powinienem odpowiadać na stare pytania. : \
AB

1
Twoja odpowiedź jest świetna i pomogłaby mi w przypadku podobnych problemów. :)
Igor V.

Odpowiedzi:


71

TL; DR Jeśli nie chcesz korzystać z PPA , możesz użyć skryptu, aby pobrać i automatycznie zainstalować przez cron.


  1. Utwórz nowy plik atom-auto-update

    sudo nano /usr/local/bin/atom-auto-update
    
  2. Dodaj następujące wiersze

    #!/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. Zapisz plik i uczyń go wykonywalnym

    sudo chmod +x /usr/local/bin/atom-auto-update
    
  4. Przetestuj skrypt

    sudo atom-auto-update
    
  5. Utwórz cronjob dla skryptu

    sudo crontab -e
    
  6. Dodaj tę linię

    np .: o 10 rano co tydzień

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

    np .: o 10 rano każdego dnia

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

Wyjaśnienie

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

    Pobierz witrynę z najnowszymi informacjami o wersji

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

      Wyodrębnij link do pobrania

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

      Pobierz plik DEB

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

    Zainstaluj plik DEB


1
Edycja i opinia! ;-)
Fabby

2
awk: wiersz 1: błąd składniowy w pobliżu lub w pobliżu, wget: URL manquante Wykorzystanie: wget [OPCJA] ... [URL] ...
Rachid Oussanaa

Jeśli aktualizuję w ten sposób, czy muszę ponownie instalować pakiety?
becko

1
To dało mi również błąd składniowy, gdy próbujesz wyodrębnić adres URL z HTML. Prawdopodobnie zmienili HTML od tego czasu. To zadziałało dla mnie (niekompletne):cat /tmp/latest | grep '.deb' | grep 'href=' | cut -d '"' -f 2
Dean Raczej

2
Dla tych, którzy borykają się z błędem składni awk, oto mój trzeci wiersz: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

Odpowiedź AB to fajne rozwiązanie! Dodałem opcję pokaż pasek postępu w kodzie bash, aby powiadomić o postępie: 

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

Jako poprzednia odpowiedź z niewielkimi modyfikacjami, aby umożliwić aktualizację przy uruchomieniu, oto procedura

  1. Utwórz plik, uruchamiając polecenie:

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

następnie wpisz poniższy skrypt (użyj edytora tekstu, takiego jak „gedit” lub „podkładka pod mysz” zamiast „nano” jest wygodniejsze), a następnie zapisz go.

#!/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. Aby plik był wykonywalny:

    sudo chmod +x /usr/local/bin/atom-update
    
  2. Teraz możesz ręcznie zaktualizować Atom, wpisując polecenie:

    sudo atom-update
    
  3. Zaloguj się do swojego katalogu głównego, a następnie dodaj poniższy wiersz do /etc/rc.local ( sudo nano /etc/rc.local) tuż przed exit 0poleceniem:

    /usr/local/bin/atom-update  
    

Pozwoli to na wykonanie skryptu aktualizacji atomu przy każdym włączeniu komputera.

  1. Aby sprawdzić, czy skrypt działa poprawnie podczas uruchamiania, uruchom ponownie komputer i otwórz terminal, a następnie wpisz:

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

Zobaczysz odpowiednio komunikat dziennika.


To już nie działa. Czy możesz to zaktualizować?
Ciekawe Knox

Jestem zdezorientowany, jeśli to naprawdę uaktualnia mój Atom, otrzymuję, że Atom został zaktualizowany z wersji 1.23.3 do 1.19.7 . Jeśli pobiorę najnowszą wersję z Atom.io, a sudo dpkg -i atom-amd64.debnastępnie otrzymam `Unpacking atom (1.23.3) over (1.19.7).
Pablo A

3

Opierając się na odpowiedzi AB , dodałem sprawdzanie wersji, aby uniknąć niepotrzebnego pobierania / instalowania:

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

Edycja: Powinienem wyjaśnić, że zastąpiłoby to zawartość skryptu / usr / local / bin / atom-auto-update, o którym wspomina odpowiedź AB. Pozostałe kroki odpowiedzi są takie same.


3

Cóż, kolejna bardziej elegancka wersja z obsługą gałęzi beta, jeśli skrypt zostanie uruchomiony z argumentem 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

Zainstalowanie Atom za pomocą przystawki zapewni zawsze najnowszą wersję:

sudo snap install atom --classic

Czy istnieje różnica w wydajności lub użyciu między Atomem zainstalowanym za pomocą snap lub apt? Naprawdę nie rozumiem, jak wybrać jedno lub drugie w ogóle. Dzięki.
Ramon Suarez

1
Używam go w ten sposób od dłuższego czasu bez żadnych problemów, wolę go od debetów, ponieważ automatycznie aktualizuje się zamiast przypominać mi o konieczności ciągłej aktualizacji.
Jorge Castro,

1

Napisałem skrypt Pythona, którego można użyć do aktualizacji 64-bitowego pakietu DEB z GitHub. Możesz zapisać następującą treść update-atom, na przykład w /etc/cron.hourlylub /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

Aby uzyskać mniej specyficzne dla Ubuntu podejście, napisałem mały pakiet atomów, który sprawdza nowe wersje przy uruchamianiu (lub możesz to sprawdzić ręcznie za pomocą poręcznego polecenia w Atom).

Jest niezależny od platformy (więc działa na każdej dystrybucji Linuksa, Windows itp.).

Możesz skonfigurować kilka rzeczy, takich jak monitorowanie tylko stabilnego kanału lub wersji beta, powiadamianie, jaki typ i czy powinny one zostać odrzucone itp.).

To nie (przynajmniej na razie!) Automatycznie aktualizuje pakiet. Mogę dodać tę funkcję w przyszłości, jeśli będzie wystarczająco zainteresowana.

Informacje zwrotne mile widziane, najlepiej jako bilety na github.


Propozycja zmienia swoją stronę GitHub: pod Usage pozycją zastąpić The package check for new version of Atom at launchz The package checks for a new version of Atom at launchmocy „Geiger” Dlaczego? działem, wymienić outadet Atomzoutdated Atom
Karel

@karel - Dziękuję, gotowe . Niektóre błędy były spowodowane tym błędem . :)
Mac

0

Jeśli budujesz ze źródeł, robię to za pomocą małego skryptu:

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


0

Kilka modów do skryptu pytona autorstwa Andrei Lazzarotto, aby usunąć zależność od powiadomienia-wysyłania, które inne warianty Ubuntu nie mają domyślnie, i obsłużyć przypadek, w którym nie jest jeszcze zainstalowana kopia atomu. Należy również zauważyć, że istnieją również inne zależności, których będziesz potrzebować:

sudo apt-get zainstaluj zapytania python-git gvfs-bin

Musiałem także wykonać następujące czynności, aby uzyskać inne zależności zależne ...

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.')

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.