จะอัพเดทตัวแก้ไข Atom โดยอัตโนมัติได้อย่างไร


51

Ubuntu ยังไม่รองรับการอัปเดตฟีเจอร์อัตโนมัติของAtom จากที่เก็บ GitHub:

ปัจจุบันมีเฉพาะรุ่น 64 บิตเท่านั้น

ดาวน์โหลด atom-amd64.deb จากหน้าเผยแพร่ Atom เรียกใช้ sudo dpkg - ติดตั้ง atom-amd64.deb บนแพ็คเกจที่ดาวน์โหลด เรียกใช้ Atom โดยใช้คำสั่ง atom ที่ติดตั้ง เวอร์ชัน Linux ไม่ได้อัปเดตอัตโนมัติในขณะนี้ดังนั้นคุณจะต้องทำซ้ำขั้นตอนเหล่านี้เพื่ออัปเกรดเป็นรีลีสในอนาคต

ฉันพยายามใช้Webupd8 PPAแต่มันไม่ได้ผลสำหรับฉัน


1
ปัญหาของ PPA คืออะไร
AB

@AB ฉันคิดว่าไม่เป็นไรตอนนี้ไม่ได้รับเวลาในการทดสอบและฉันไม่ได้ใช้ atom ในขณะนี้ แต่ตอนนี้ PPA ไม่ได้อัปเดตเวอร์ชันของฉัน
Igor V.

ฉันอาจไม่ควรตอบคำถามเก่า ๆ : \
AB

1
คำตอบของคุณดีมากและมันจะช่วยฉันสำหรับปัญหาที่คล้ายกัน :)
Igor V.

คำตอบ:


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.00 น. ทุกสัปดาห์

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

    เช่น: เวลา 10.00 น. ทุกวัน

    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
Dean ค่อนข้าง

2
สำหรับผู้ที่เผชิญกับข้อผิดพลาดทางไวยากรณ์ awk นี่คือแถวที่สามของฉัน: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

คำตอบของ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" หรือ "mousepad" แทน "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.*'  
    

คุณจะเห็นข้อความบันทึกตาม


มันไม่ทำงานอีกต่อไป คุณช่วยอัพเดทได้มั้ย
Knox ที่น่าสนใจ

ฉันสับสนว่านี้จริงๆอัพเกรด Atom ของฉันฉันได้รับAtom ได้รับการปรับปรุงจาก 1.23.3 เพื่อ 1.19.7 ถ้าฉันจะดาวน์โหลดปัจจุบันล่าสุดจากAtom.ioและsudo dpkg -i atom-amd64.debแล้วฉันจะได้รับการเปิดกล่องบรรจุ `อะตอม (1.23.3) มากกว่า (1.19.7)
Pablo A

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? ฉันไม่เข้าใจวิธีเลือกอย่างใดอย่างหนึ่งโดยทั่วไป ขอบคุณ
Ramon Suarez

1
ฉันใช้มันแบบนี้มาเป็นเวลานานโดยไม่มีปัญหาฉันชอบมันมากกว่าพวก debs เพราะมันจะอัปเดตอัตโนมัติแทนที่จะเตือนให้ฉันอัปเดตตลอดเวลา
Jorge Castro

1

ฉันได้เขียนสคริปต์ Python ซึ่งสามารถใช้เพื่ออัปเดตแพคเกจ DEB 64 บิตจาก 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

สำหรับวิธีเฉพาะอูบุนตูฉันได้เขียนแพ็คเกจอะตอมขนาดเล็กที่ตรวจสอบเวอร์ชั่นใหม่เมื่อเริ่มต้น (หรือคุณสามารถตรวจสอบด้วยตนเองด้วยคำสั่งที่ใช้งานง่ายภายใน Atom)

มันเป็นแพลตฟอร์มที่เป็นอิสระ (เพื่อให้มันทำงานบนลินุกซ์ distro, windows, ฯลฯ ... )

คุณสามารถกำหนดค่าบางสิ่งเช่นการตรวจสอบเฉพาะแชนเนลที่เสถียรหรือเบต้าเช่นกันการแจ้งเตือนประเภทใดและควรยกเลิกหรือไม่ ฯลฯ ... )

มันไม่ได้ (อย่างน้อยตอนนี้!) อัปเดตแพคเกจโดยอัตโนมัติ ฉันอาจเพิ่มคุณลักษณะนั้นในอนาคตหากมีความสนใจเพียงพอ

ข้อเสนอแนะยินดีต้อนรับที่ดีที่สุดเป็นตั๋วใน GitHub


คำแนะนำสำหรับการเปลี่ยนหน้า GitHub ของคุณ: ภายใต้หัวข้อการใช้งานแทนที่The package check for new version of Atom at launchด้วยThe package checks for a new version of Atom at launchภายใต้ทำไม "geiger" ส่วนหัวแทนที่outadet Atomด้วยoutdated Atom
karel

@karel - ขอบคุณเสร็จแล้ว ข้อผิดพลาดบางอย่างเกิดจากข้อผิดพลาดนี้ :)
mac

0

หากคุณกำลังสร้างจากแหล่งที่มาฉันทำสิ่งนี้ผ่านสคริปต์ขนาดเล็ก:

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

0

6 พฤษภาคม 2559

แอนดี้ริชาร์ดทำให้อะตอมอัพเดทลินุกซ์ เป็นแพ็คเกจอะตอมคุณสามารถใช้อะตอมได้โดยเรียกใช้:

apm install atom-updater-linux

ศึกษาที่เก็บสำหรับข้อมูลเพิ่มเติม


0

สอง mods สำหรับสคริปต์ python โดยAndrea Lazzarottoเพื่อลบการอ้างอิงในการแจ้งเตือน - ส่งซึ่งตัวแปรอื่น ๆ ของ Ubuntu ไม่มีตามค่าเริ่มต้นและจัดการกรณีที่ไม่มีสำเนาอะตอมติดตั้งอยู่ นอกจากนี้ควรมีการอ้างอิงอื่น ๆ ที่คุณต้องการเช่นกัน:

sudo apt-get install python-ร้องขอ git gvfs-bin

ฉันยังต้องเรียกใช้สิ่งต่อไปนี้เพื่อรับการอ้างอิงย่อยอื่น ๆ ...

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.