So I found this question when running into the errors you are describing above when updating my kernel. Just to clarify the current standing of the situation regarding ArchLinux and DigitalOcean for any future viewers…
Since DigitalOcean is deprecating ArchLinux and is no longer providing updates, the latest kernel we are allowed to use as of this writing is 3.14.1-1-ARCH. As part of the base image that DigitalOcean provides, it seems that the article kamal shared with us is already applied to pacman. If it isn’t on your system, please do so!
The main culprit of this non-booting issue is that ArchLinux has an update pushed out around 2013-06-03 that changes the structure of the filesystem (the package has been updated since then, but the fix is still the same). Due to this update, paths will be changing and many updates will need to be applied before the filesystem change. At this time, the package is at version: filesystem-2014.06-1.
If you have custom applications that are not part of a package, they will need to be moved before the update. This link guide you though the steps of finding those applications and steps to move them manually: https://www.archlinux.org/news/binaries-move-to-usrbin-requiring-update-intervention/
In short, you must:
- Move non-official package files in /bin, /sbin or /usr/sbin and to put them files in /usr/bin
- Update ArchLinux with Pacman ignoring filesystem & bash:
pacman -Syu --ignore filesystem,bash
2a. If you get an error regarding keyrings, see: https://wiki.archlinux.org/index.php/Pacman-key#Cannot_import_keys
2b. If you get keyring error, update your keyserver and then run:
pacman-key --populate archlinux
2c. Retry updating ArchLinux with the two ignored packages.
- Update Bash after previous updates:
pacman -S bash
- Update the rest of the updates (ignored packages and future packages):
- Reboot and cross your fingers for good luck!
This process has worked for me and hopefully it will for you too!
(If any of you are trying to update to the 3.14.1-1-ARCH, you will still need to update your linux modules and headers… in order for certain applications to continue to function as well (e.g.: iptables, docker, etc). This topic is a little out-of-scope, but just an FYI for any future readers.)