51

Automatic update of Atom feature is not yet supported for Ubuntu. From their GitHub repository:

Currently only a 64-bit version is available.

Download atom-amd64.deb from the Atom releases page. Run sudo dpkg --install atom-amd64.deb on the downloaded package. Launch Atom using the installed atom command. The Linux version does not currently automatically update so you will need to repeat these steps to upgrade to future releases.

I tried using Webupd8 PPA but it doesn't work for me.

  • 1
    What is the problem with the PPA? – A.B. May 31 '15 at 10:27
  • @A.B. I think is ok now, didn't get the time to test it and I am not using atom for some time now, but back then PPA didn't updated my version. – Igor V. May 31 '15 at 12:15
  • I probably should not answer old questions. :\ – A.B. May 31 '15 at 12:26
  • 1
    Your answer is great and it would help me for similar problems. :) – Igor V. May 31 '15 at 12:27

12 Answers 12

71

TL;DR If you do not want to use the PPA, you can use a script to download and automatically install via cron.


  1. Create a new file atom-auto-update

    sudo nano /usr/local/bin/atom-auto-update
    
  2. Add the following lines

    #!/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. Save the file and make it executable

    sudo chmod +x /usr/local/bin/atom-auto-update
    
  4. Test the script

    sudo atom-auto-update
    
  5. Create a cronjob for the script

    sudo crontab -e
    
  6. Add this line

    e.g.: at 10 am every week

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

    e.g.: at 10 am every day

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

Explanation

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

    Download the site with the latest version information

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

      Extract the download link

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

      Download the DEB file

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

    Install the DEB file

  • 1
    An edit and an upvote! ;-) – Fabby May 31 '15 at 18:33
  • 2
    awk: line 1: syntax error at or near , wget : URL manquante Utilisation : wget [OPTION]... [URL]... – Rachid Oussanaa Nov 16 '16 at 12:52
  • If I update this way, do I have to resintall the packages? – becko Dec 15 '16 at 22:51
  • 1
    This also gave me a syntax error where you try extract the URL from the HTML. They probably changed the HTML since then. This worked for me (not complete): cat /tmp/latest | grep '.deb' | grep 'href=' | cut -d '"' -f 2 – Dean Rather Jan 12 '17 at 5:05
  • 2
    For those facing the awk syntax error, here is my third row: wget https://github.com$(cat /tmp/latest | grep -o -E 'href=".*atom-amd64.deb' | cut -d'"' -f2) -O /tmp/atom-amd64.deb – Felipe Elia Jun 15 '17 at 21:20
20

A.B's Answer is a nice solution! I added show progress bar option in the bash code to notify progress: 

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

As the previous answer with minor modification, to let updating on start-up, here is the procedure

  1. Create file by running the command:

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

then type the below script (use text-editor like "gedit" or "mousepad" instead of "nano" is more convenient) and then save it.

#!/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. To make the file executable:

    sudo chmod +x /usr/local/bin/atom-update
    
  2. Now you could manually update Atom by typing the command:

    sudo atom-update
    
  3. Login to your root, and then add the below row to /etc/rc.local (sudo nano /etc/rc.local) just before exit 0 command:

    /usr/local/bin/atom-update  
    

This will let the atom update script execute every time you turn on your PC.

  1. To check that the script has run properly on start up, restart your PC and open the terminal then type:

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

You will see the log message accordingly.

  • It's not working anymore. Can you update it please? – Interesting Knox Jan 12 '17 at 21:02
  • I'm confuse if this really upgrade my Atom, I get Atom has been update from 1.23.3 to 1.19.7. If I download current latest from Atom.io and sudo dpkg -i atom-amd64.deb then I get `Unpacking atom (1.23.3) over (1.19.7). – Pablo A Feb 4 '18 at 18:51
3

Building on A.B's answer, I've added version checking to avoid unnecessary download/install:

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

Edit: I should clarify that this would replace the content of the /usr/local/bin/atom-auto-update script which A.B's answer mentions. The other steps of the answer are the same.

3

Well, another more elegant version with support of beta branch, if script launched with beta argument: $ 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

Installing Atom via a snap will ensure you always have the latest version:

sudo snap install atom --classic
  • Is there a difference in performance or usage between Atom installed via snap or apt? I don't really understand how to choose one or the other in general. Thanks. – Ramon Suarez Oct 16 '17 at 9:43
  • 1
    I've been using it like this for a long time with no issues, I prefer it to their debs because it autoupdates instead of reminding me to update all the time. – Jorge Castro Oct 19 '17 at 21:08
1

I have written a Python script which can be used to update the 64 bits DEB package from GitHub. You can save the following content as update-atom, for example in /etc/cron.hourly or /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

For a less ubuntu-specific approach, I wrote a small atom package that check for new versions at startup (or you can check manually with a handy command within Atom).

It's platform independent (so it works on any linux distro, windows, etc...).

You can configure a few things like only monitoring the stable channel or the beta too, having notifications, what type, and if they should be dismissable, etc...).

It does not (at least for now!) automatically update the package. I may add that feature in the future if there is enough interest in it.

Feedback welcome, best as tickets on github.

  • Suggestion for changing your GitHub page: under the Usage heading replace The package check for new version of Atom at launch with The package checks for a new version of Atom at launch Under the Why "geiger"? heading replace outadet Atom with outdated Atom – karel Aug 8 '16 at 7:08
  • @karel - Thank you, done. Some of the errors were due to this bug. :) – mac Aug 8 '16 at 8:42
0

If you're building from sources, I do this via a small script:

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

May 6, 2016

Andy Richardson made atom-updater-linux. It's atom package, you can have it on your atom by running:

apm install atom-updater-linux

consult the repository for more information

0

A couple of mods to the python script by Andrea Lazzarotto to remove the dependency on notify-send which other Ubuntu variants don't have by default and handle the case where there isn't already a copy of atom installed. Also, it should be noted there are other dependencies you'll need too:

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

I also had to run the following to get some other sub-dependencies...

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

Yet another custom (Python) script to help updating atom: https://gist.github.com/DusanMadar/8f094ef647a0ad54cff1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.