Як автоматично оновити редактор Atom?


51

Автоматичне оновлення функції Atom ще не підтримується для Ubuntu. З їх сховища GitHub:

Наразі доступна лише 64-бітна версія.

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

Я спробував скористатися WebAFPA PPA, але це не працює для мене.


1
У чому проблема з УРО?
AB

@AB Я думаю, що зараз нормально, не знайшов час для тестування, і я вже деякий час не використовую атом, але тоді 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
Редагування та оновлення! ;-)
Fabby

2
awk: рядок 1: помилка синтаксису в або поблизу, wget: URL-адреса manquante Використання: wget [ОПЦІЯ] ... [URL] ...
Rachid Oussanaa

Якщо я оновлю таким чином, чи повинен я перевстановити пакунки?
бекко

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

Відповідь AB - це приємне рішення! Я додав у баш-коді показ параметра рядка прогресу, щоб повідомити про прогрес: 

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

Це дозволить виконувати сценарій оновлення атомів кожного разу при включенні ПК.

  1. Щоб переконатися, що сценарій справно працює при запуску, перезавантажте комп'ютер та відкрийте термінал, а потім наберіть:

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

Ви побачите повідомлення журналу відповідно.


Це вже не працює. Чи можете ви її оновити?
Цікавий Нокс

Я плутаю, якщо це дійсно оновить мій Atom, я отримую, що Atom було оновлено з 1,23,3 до 1,19,7 . Якщо я завантажую останню версію з Atom.io і sudo dpkg -i atom-amd64.debтоді я отримую `Unpacking atom (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, встановленим за допомогою оснащення або підходу? Я не дуже розумію, як вибрати те чи інше взагалі. Дякую.
Рамон Суарес

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

Це незалежна платформа (тому вона працює у будь-якому дистрибутиві 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 - Дякую, зробили . Деякі помилки були пов’язані з цією помилкою . :)
мак

0

Якщо ви будуєте з джерел, я роблю це за допомогою невеликого сценарію:

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


0

Кілька мод до сценарію python від Андреа Лаззаротто для усунення залежності від notify-send, які в інших варіантах Ubuntu за замовчуванням не мають, і обробляти випадок, коли вже не встановлена ​​копія атома. Також слід зазначити, що є й інші залежності, які вам також знадобляться:

sudo apt-get install python-questions 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.