Bagaimana cara memperbarui Editor Atom secara otomatis?


51

Pembaruan otomatis fitur Atom belum didukung untuk Ubuntu. Dari repositori GitHub mereka:

Saat ini hanya versi 64-bit yang tersedia.

Unduh atom-amd64.deb dari halaman rilis Atom. Jalankan sudo dpkg - Instal atom-amd64.deb pada paket yang diunduh. Luncurkan Atom menggunakan perintah atom yang diinstal. Versi Linux saat ini tidak secara otomatis memperbarui sehingga Anda harus mengulangi langkah-langkah ini untuk meningkatkan ke rilis mendatang.

Saya mencoba menggunakan Webupd8 PPA tetapi tidak berhasil untuk saya.


1
Apa masalah dengan PPA?
AB

@ AB Saya pikir tidak apa-apa sekarang, tidak punya waktu untuk mengujinya dan saya tidak menggunakan atom untuk beberapa waktu sekarang, tapi saat itu PPA tidak memperbarui versi saya.
Igor V.

Saya mungkin seharusnya tidak menjawab pertanyaan lama. : \
AB

1
Jawaban Anda sangat bagus dan itu akan membantu saya untuk masalah yang sama. :)
Igor V.

Jawaban:


71

TL; DR Jika Anda tidak ingin menggunakan PPA , Anda dapat menggunakan skrip untuk mengunduh dan menginstal secara otomatis melalui cron.


  1. Buat file baru atom-auto-update

    sudo nano /usr/local/bin/atom-auto-update
    
  2. Tambahkan baris berikut

    #!/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. Simpan file dan buat itu bisa dieksekusi

    sudo chmod +x /usr/local/bin/atom-auto-update
    
  4. Uji skripnya

    sudo atom-auto-update
    
  5. Buat cronjob untuk skrip

    sudo crontab -e
    
  6. Tambahkan baris ini

    misal: jam 10 pagi setiap minggu

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

    misal: jam 10 pagi setiap hari

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

Penjelasan

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

    Unduh situs dengan informasi versi terbaru

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

      Ekstrak tautan unduhan

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

      Unduh file DEB

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

    Instal file DEB


1
Sunting dan upvote! ;-)
Fabby

2
awk: baris 1: kesalahan sintaks pada atau dekat, wget: URL manquante Pemanfaatan: wget [OPSI] ... [URL] ...
Rachid Oussanaa

Jika saya memperbarui dengan cara ini, apakah saya harus menginstal ulang paket?
becko

1
Ini juga memberi saya kesalahan sintaksis saat Anda mencoba mengekstrak URL dari HTML. Mereka mungkin mengubah HTML sejak saat itu. Ini bekerja untuk saya (tidak lengkap):cat /tmp/latest | grep '.deb' | grep 'href=' | cut -d '"' -f 2
Dean Rather

2
Bagi mereka yang menghadapi kesalahan sintaks awk, inilah baris ketiga saya: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

Jawaban AB adalah solusi yang bagus! Saya menambahkan opsi tampilkan bilah kemajuan dalam kode bash untuk memberi tahu kemajuan: 

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

Seperti jawaban sebelumnya dengan sedikit modifikasi, agar pembaruan saat start-up, berikut adalah prosedurnya

  1. Buat file dengan menjalankan perintah:

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

kemudian ketik skrip di bawah ini (gunakan editor teks seperti "gedit" atau "mousepad" alih-alih "nano" lebih nyaman) dan kemudian simpan.

#!/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. Untuk membuat file dapat dieksekusi:

    sudo chmod +x /usr/local/bin/atom-update
    
  2. Sekarang Anda dapat memperbarui Atom secara manual dengan mengetikkan perintah:

    sudo atom-update
    
  3. Masuk ke root Anda, dan kemudian tambahkan baris di bawah ini ke /etc/rc.local ( sudo nano /etc/rc.local) sesaat sebelum exit 0perintah:

    /usr/local/bin/atom-update  
    

Ini akan memungkinkan skrip pembaruan atom dijalankan setiap kali Anda menyalakan PC.

  1. Untuk memeriksa apakah script telah berjalan dengan benar pada saat start up, restart PC Anda dan buka terminal lalu ketik:

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

Anda akan melihat pesan log yang sesuai.


Itu tidak berfungsi lagi. Bisakah Anda memperbaruinya?
Knox, yang menarik,

Saya bingung apakah ini benar-benar meningkatkan Atom saya, saya mendapatkan Atom telah diperbarui dari 1.23.3 ke 1.19.7 . Jika saya mengunduh terbaru saat ini dari Atom.io dan sudo dpkg -i atom-amd64.debkemudian saya mendapatkan `Membongkar atom (1.23.3) lebih dari (1.19.7).
Pablo A

3

Berdasarkan jawaban AB , saya telah menambahkan pemeriksaan versi untuk menghindari unduhan / pemasangan yang tidak perlu:

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

Sunting: Saya harus mengklarifikasi bahwa ini akan menggantikan konten skrip / usr / local / bin / atom-auto-update yang dijawab oleh AB. Langkah-langkah lain dari jawabannya adalah sama.


3

Nah, versi lain yang lebih elegan dengan dukungan cabang beta, jika skrip diluncurkan dengan argumen 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

Menginstal Atom melalui snap akan memastikan Anda selalu memiliki versi terbaru:

sudo snap install atom --classic

Apakah ada perbedaan kinerja atau penggunaan antara Atom yang dipasang melalui snap atau apt? Saya tidak begitu mengerti bagaimana memilih yang satu atau yang lain secara umum. Terima kasih.
Ramon Suarez

1
Saya telah menggunakannya seperti ini untuk waktu yang lama tanpa masalah, saya lebih suka daripada hutang mereka karena ini otomatis tidak mengingatkan saya untuk memperbarui sepanjang waktu.
Jorge Castro

1

Saya telah menulis skrip Python yang dapat digunakan untuk memperbarui paket DEB 64 bit dari GitHub. Anda dapat menyimpan konten berikut sebagai update-atom, misalnya di /etc/cron.hourlyatau /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

Untuk pendekatan yang kurang spesifik untuk ubuntu, saya menulis paket atom kecil yang memeriksa versi baru saat startup (atau Anda dapat memeriksa secara manual dengan perintah praktis dalam Atom).

Ini adalah platform independen (sehingga berfungsi pada distro linux, windows, dll ...).

Anda dapat mengonfigurasi beberapa hal seperti hanya memantau saluran stabil atau beta juga, memiliki pemberitahuan, jenis apa, dan jika harus dibuang, dll ...).

Itu tidak (setidaknya untuk sekarang!) Secara otomatis memperbarui paket. Saya dapat menambahkan fitur itu di masa depan jika ada cukup minat di dalamnya.

Terima kasih, paling baik tiket di github.


Saran untuk mengubah halaman GitHub Anda: di bawah judul Penggunaan ganti The package check for new version of Atom at launchdengan The package checks for a new version of Atom at launchDi Bawah Mengapa "geiger"? heading replace outadet Atomwithoutdated Atom
karel

@karel - Terima kasih, sudah selesai . Beberapa kesalahan disebabkan oleh bug ini . :)
mac

0

Jika Anda membangun dari sumber, saya melakukan ini melalui skrip kecil:

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


0

Beberapa mod untuk skrip python oleh Andrea Lazzarotto untuk menghapus ketergantungan pada notifikasi-kirim yang varian Ubuntu lainnya tidak miliki secara default dan menangani case di mana belum ada salinan atom yang diinstal. Juga, perlu dicatat ada dependensi lain yang Anda perlukan juga:

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

Saya juga harus menjalankan yang berikut untuk mendapatkan beberapa sub-dependensi lainnya ...

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.