How to automatically update Atom editor?
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.
TL;DR If you do not want to use the PPA, you can use a script to download and automatically install via cron.
-
Create a new file
atom-auto-update
sudo nano /usr/local/bin/atom-auto-update
-
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
-
Save the file and make it executable
sudo chmod +x /usr/local/bin/atom-auto-update
-
Test the script
sudo atom-auto-update
-
Create a cronjob for the script
sudo crontab -e
-
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
-
… awk -F '[<>]' '/href=".*atom-amd64.deb/ {match($0,"href=\"(.*.deb)\"",a); print "https://github.com/" a[1]} ' /tmp/latest …
Extract the download link
-
wget -q $( … ) -O /tmp/atom-amd64.deb
Download the DEB file
-
-
dpkg -i /tmp/atom-amd64.deb
Install the DEB file
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
As the previous answer with minor modification, to let updating on start-up, here is the procedure
-
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
-
To make the file executable:
sudo chmod +x /usr/local/bin/atom-update
-
Now you could manually update Atom by typing the command:
sudo atom-update
-
Login to your root, and then add the below row to
/etc/rc.local
(sudo nano /etc/rc.local
) just beforeexit 0
command:/usr/local/bin/atom-update
This will let the atom update script execute every time you turn on your PC.
-
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.
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.