Как автоматически обновить редактор Atom?


51

Автоматическое обновление функции Atom для Ubuntu еще не поддерживается. Из их репозитория GitHub:

В настоящее время доступна только 64-битная версия.

Загрузите atom-amd64.deb со страницы релизов Atom. Запустите sudo dpkg --install atom-amd64.deb для загруженного пакета. Запустите Atom с помощью установленной команды atom. Версия для Linux в настоящее время не обновляется автоматически, поэтому вам нужно будет повторить эти шаги для обновления до будущих выпусков.

Я пытался использовать Webupd8 PPA, но он не работает для меня.


1
В чем проблема с PPA?
AB

@AB Я думаю, теперь все в порядке, у меня не было времени на его тестирование, и я уже некоторое время не использую Atom, но тогда PPA не обновлял мою версию.
Игорь В.

Я, вероятно, не должен отвечать на старые вопросы. : \
AB

1
Ваш ответ великолепен, и это поможет мне решить подобные проблемы. :)
Игорь Васильевич

Ответы:


71

TL; DR Если вы не хотите использовать PPA , вы можете использовать скрипт для загрузки и автоматической установки через cron.


  1. Создать новый файл atom-auto-update

    sudo nano /usr/local/bin/atom-auto-update
    
  2. Добавьте следующие строки

    #!/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. Сохраните файл и сделайте его исполняемым

    sudo chmod +x /usr/local/bin/atom-auto-update
    
  4. Протестируйте скрипт

    sudo atom-auto-update
    
  5. Создать cronjob для скрипта

    sudo crontab -e
    
  6. Добавить эту строку

    например: в 10 утра каждую неделю

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

    например: в 10 часов утра каждый день

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

объяснение

  • 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

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

      Извлечь ссылку для скачивания

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

      Скачать файл DEB

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

    Установите файл DEB


1
Редактировать и upvote! ;-)
Fabby

2
awk: строка 1: синтаксическая ошибка в или около, wget: URL manquante Использование: wget [OPTION] ... [URL] ...
Rachid Oussanaa

Если я обновлю этот способ, нужно ли мне повторно устанавливать пакеты?
Becko

1
Это также дало мне синтаксическую ошибку, когда вы пытаетесь извлечь URL из HTML. Они, вероятно, изменили HTML с тех пор. Это сработало для меня (не завершено):cat /tmp/latest | grep '.deb' | grep 'href=' | cut -d '"' -f 2
Дин Скорее

2
Для тех, кто сталкивается с ошибкой синтаксиса awk, вот моя третья строка:wget https://github.com$(cat /tmp/latest | grep -o -E 'href=".*atom-amd64.deb' | cut -d'"' -f2) -O /tmp/atom-amd64.deb
Фелипе Элия

20

Ответ АБ - отличное решение! Я добавил опцию индикатора выполнения в коде bash для уведомления о прогрессе: 

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

Как и предыдущий ответ с незначительными изменениями, чтобы позволить обновление при запуске, вот процедура

  1. Создайте файл, выполнив команду:

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

затем введите приведенный ниже скрипт (используйте текстовый редактор типа «gedit» или «коврик для мыши» вместо «nano» более удобно) и сохраните его.

#!/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. Чтобы сделать файл исполняемым:

    sudo chmod +x /usr/local/bin/atom-update
    
  2. Теперь вы можете вручную обновить Atom, набрав команду:

    sudo atom-update
    
  3. Войдите в свой корень и добавьте приведенную ниже строку в /etc/rc.local ( sudo nano /etc/rc.local) непосредственно перед exit 0командой:

    /usr/local/bin/atom-update  
    

Это позволит запускать скрипт обновления atom каждый раз, когда вы включаете компьютер.

  1. Чтобы убедиться, что скрипт запускается правильно, перезагрузите компьютер и откройте терминал, затем введите:

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

Вы увидите сообщение журнала соответственно.


Это больше не работает. Можете ли вы обновить его, пожалуйста?
Интересный Нокс

Я запутался, если это действительно обновит мой Atom, я получаю, что Atom был обновлен с 1.23.3 до 1.19.7 . Если я скачаю последнюю версию с Atom.io, а sudo dpkg -i atom-amd64.debзатем получу `Распаковка атома (1.23.3) поверх (1.19.7).
Пабло А

3

Основываясь на ответе AB , я добавил проверку версии, чтобы избежать ненужной загрузки / установки:

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

Редактировать: я должен уточнить, что это заменит содержимое скрипта / usr / local / bin / atom-auto-update, о котором упоминается в ответе AB. Другие шаги ответа такие же.


3

Ну, еще одна более элегантная версия с поддержкой бета-ветки, если скрипт запускается с бета-аргументом: $ 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

Установка Atom с помощью оснастки гарантирует, что у вас всегда будет последняя версия:

sudo snap install atom --classic

Есть ли разница в производительности или использовании между Atom, установленным с помощью snap или apt? Я не очень понимаю, как выбрать один или другой в целом. Благодарю.
Рамон Суарес

1
Я использую это в течение долгого времени без проблем, я предпочитаю его своим дэбам, потому что он обновляется автоматически, а не напоминает мне постоянно обновляться.
Хорхе Кастро

1

Я написал скрипт на Python, который можно использовать для обновления 64-битного пакета DEB из GitHub. Вы можете сохранить следующий контент update-atom, например, в /etc/cron.hourlyили /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

Для менее специфичного для Ubuntu подхода я написал небольшой пакет Atom, который проверяет наличие новых версий при запуске (или вы можете проверить вручную с помощью удобной команды в Atom).

Он не зависит от платформы (поэтому работает на любом дистрибутиве Linux, Windows и т. Д.).

Вы можете настроить несколько вещей, таких как только мониторинг стабильного канала или бета-версии, наличие уведомлений, какого типа, и если они должны быть отклонены, и т. Д ...).

Он не (по крайней мере, пока!) Автоматически обновляет пакет. Я могу добавить эту функцию в будущем, если она будет достаточно интересной.

Обратная связь приветствуется, лучше всего как билеты на github.


Предложение для изменения страницы GitHub: под Usage заголовком заменить The package check for new version of Atom at launchс The package checks for a new version of Atom at launchПод «Гейгер» Почему? заголовок заменить outadet Atomнаoutdated Atom
Карел

@karel - Спасибо, готово . Некоторые из ошибок были из-за этой ошибки . :)
Mac

0

Если вы строите из источников, я делаю это с помощью небольшого скрипта:

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


0

Несколько модов к скрипту python от Andrea Lazzarotto, чтобы убрать зависимость от notify-send, которой нет в других вариантах Ubuntu по умолчанию, и обработать случай, когда копия атома еще не установлена. Также следует отметить, что вам также понадобятся другие зависимости:

sudo apt-get установить python-запросы git gvfs-bin

Я также должен был выполнить следующее, чтобы получить некоторые другие подчиненные зависимости ...

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.