EDIT: I’ve made several modifications to the original piece based on helpful comments from reddit users newworkaccount, iKnitYogurt, jprada, and ThisTimeIllSucceed on the thread here. View the original post in its full glory/shame on Github.
Like everyone else, when I first started using GNU/Linux I gravitated toward Ubuntu. While using Ubuntu, I sought to try other distributions and briefly used Fedora, Elementary OS, and Debian. With all of these distributions – including Ubuntu – I came across a very similar problem: having to manually add software repositories to get programs that were more up-to-date than the package manager’s defaults. With this comes the difficulty of deriving reproducible, purely command line solutions to installing many of my staple programs. Building packages from source is not the end of the world, but if there was a distribution/package manager that had a workable version (for my purposes) of all the packages I needed, wouldn’t that be worth pursuing?
Enter the Arch Linux family. Since using Manjaro (technically an Arch Linux
derivative, not Arch Linux itself nor an Arch distribution; thanks to reddit
users newworkaccount and iKnitYogurt for clarifying this), I’m not sure I’ve
had to build anything from source manually; I’ve installed everything with a
simple one-liner with
yaourt. For testing purposes (and for the
sake of (re)installing systems often) it’s nice to have reproducible methods of
software installation. Aside from this, Manjaro has other really nice features
rendering it indispensable. Ubuntu has some good things going for it, and for it
I do still hold some reverence as my first true GNU/Linux experience. The purple
terminal sparks an incredible amount of nostalgia every time I see it on someone
But I can’t go back.
Warning: This is an opinionated piece, and there are likely some solutions to the problems I perceive with Ubuntu. Nevertheless, Manjaro has seemed much more straightforward to me, and at its core, I believe it’s more user-friendly. I do not intend this piece to be authoritative; rather, it is a description of my journey into the Arch-related world from Ubuntu (thanks to reddit user jprada for pointing out how this could be clarified). If I’m being unfair to Ubuntu and/or you know of solutions to my problems, I’d love to hear about it! Drop me a comment1.
The package manager for Manjaro (and Arch Linux) is called
multiple packages can be accomplished with
pacman -S package1 package2 package3
for example. This can, of course, be replicated with
apt on Ubuntu with
apt-get install package1 package2 package3
but if you have to manually add a PPA, a key, etc., this process becomes several
lines long for each package. Multi-line solutions were common for me as I often
need bleeding edge packages, and most default package versions were not up to
date enough. This process could be automated in a script, but the keys and
repositories can change. I’ve never had to add a repository manually with
Manjaro since software in the community repositories (installed with
have everything I need that the official repositories lack. Beyond this,
removing packages seems to be much easier with
pacman -R package
Reddit user ThisTimeIllSucceed actually suggests using
pacman -Rns package
which removes any dependencies not used by another package and any config files
for the package. On the other hand,
apt uses a combination of
remove. I’m not really sure which comes first or why, and I’m not really sure
what these commands fundamentally do. I’ve so often received errors with
apt-get update after removing packages that I’m left wondering if I’ve ever
used these commands correctly.
Certainly the argument in favor of Ubuntu (and against Arch Linux-like
derivatives) is that packages are more stable. This is probably true on a
package-to-package basis, but I’ve had much more difficulty keeping the OS
stable as a whole with Ubuntu than with Manjaro. A large part of this has to
do with distribution upgrades, which have been a pain for me on Ubuntu but
don’t exist in Manjaro, which operates on a rolling release. Using the
pacman -Syu upgrades all on packages on the system, meaning that you
have the most up-to-date version of the OS once you upgrade packages.
This feature in Manjaro (or the lack thereof in Ubuntu) was the ultimate tipping point for me. A few months ago my graphics card died, so I bought a new one, an AMD RX 470. I could not for the life of me get it working in Ubuntu 14. After doing some research (after I bought the card, of course), I discovered that AMD cards don’t always work well with GNU/Linux. After trying a plethora of options, I decided that upgrading from 14 to 16 might be my best shot. Aside from not solving my graphics card issue, this upgrade resulted in a whole host of packages not working correctly2. At this point I decided to try various Arch Linux derivatives, which have a reputation of working with a wide range of (and often newest) hardware.
There are plenty of other Arch Linux derivatives including Antergos, Apricity, and ArchBang. Pure Arch Linux is a bit too stripped down for my liking; Manjaro seems like a good balance between a simple, highly configurable system and one that allows you to hit the ground running.
Over time, I’ve come to the conclusion that no GNU/Linux distribution is
perfect. I still have issues with Manjaro from time to time (explained at the
conclusion of the piece), and recently I was wondering if I really gave Ubuntu a
fair shot. Did I exhaust all possible solutions in getting the RX 470 to work?
Is there a easier method to installing packages that I’m just missing? And is
apt really as cryptic as I’m making it out to be? A recent adventure has
confirmed some of these suspicions.
In April I released a suite of tools called
shp2nosql (I wrote about
it here and it’s on
GitHub here). In a nutshell, it’s
designed to insert spatial data into NoSQL systems. I conducted all of my
initial testing on local machines running Manjaro. Before pushing the code to a
public repository on GitHub, I decided to do some testing on other GNU/Linux
distributions to ensure portability. I started with a clean instance of Ubuntu
16 in a virtual machine and installed software from the ground up. Below is the
code I used to install dependencies:
# install dependencies sudo apt-get update sudo apt-get install python-software-properties sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable sudo add-apt-repository ppa:webupd8team/java # for java sudo apt-get update sudo apt-get install git gdal-bin curl oracle-java8-installer vim cd ~ git clone https://github.com/mhaffner/shp2nosql ~/git-repos/shp2nosql export PATH=$PATH:~/git-repos/shp2nosql/bin # install and start elasticsearch wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list sudo apt-get update && sudo apt-get install elasticsearch ## edit /etc/elasticsearch.yml and uncomment cluster.name, node.name, and network.host to 0.0.0.0 sudo systemctl enable elasticsearch.service sudo systemctl start elasticsearch # install and start mongodb sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list sudo apt-get update sudo apt-get install -y mongodb-org sudo cp ~/git-repos/shp2nosql/development/ubuntu-16.04/mongodb.service /etc/systemd/system/mongodb.service sudo systemctl start mongodb
What a challenge! I also had to manually alter
mongodb.service (and then save these configs for future testing) because the
default configurations were not sufficient. Compare the above code to what I
needed in Manjaro:
sudo pacman -Syu elasticsearch mongodb wget gdal vim sudo systemctl enable elasticsearch.service sudo systemctl start elasticsearch sudo systemctl start mongodb
Way easier. And I did not have to manually alter config files.
Random rambling: Some of difference in installation of dependencies is due
to the suite of pre-packaged software that comes with Manjaro; it comes with
java whereas Ubuntu does not. The inclusion of these extra packages
is an example of how Manjaro deviates from the pure Arch Linux philosophy, which
generally takes a DIY approach - The developers seek to create an non-bloated
experience, avoiding design decisions that force users down a specific path.
(This is not to suggest that Ubuntu would be expected to contain everything that
Arch Linux contains, of course). However, if Manjaro developers make (a) mostly
good design decisions, (b) that I can change if I want, © that help me get a
system up and running much faster than I could with a bare bones installation…
then I’m okay with this.
It’s possible that users of other Arch Linux derivatives would need something
slightly different to install dependencies for
shp2nosql, but the general
point still stands: many one liners with
pacman are analogous to multi-step
apt. This includes the installation of
Emacs - all of which are staple programs for me.
With the confusion I’ve endured with Ubuntu, I simply can’t recommend it anymore, especially to new users. In this piece I focused mostly on package installation, but there are other notable features of Manjaro (and other Arch-based distributions) that are worth mentioning here:
Documentation: the Arch Wiki is incredible, much of it applies to Manjaro, and 95%+ of my questions are answered here. I definitely cannot say the same for Ubuntu.
Kernel installation: Installing and removing kernels is trivial through the System Settings Module (this ended up being part of the solution to using my new GPU).
Greater privacy/freedom: Many Ubuntu users may not even realize that their OS contains “surveillance code”. Searches in dashboard are transmitted to Canonical, and the company profits when a user buys a product from Amazon using the Amazon App.3,4,5
Less bloated-ness: Manjaro (which is certainly more bloated than pure Arch) feels much less bloated than Ubuntu. It has no Software Center, for instance, and feels snappier. Knowing that Canonical transmits search data might explain some of this new found snappiness…
Other various things just work: For a while, my test of a well-working GNU/Linux distribution was one with which I could install the
R. This sounds ridiculous, of course, but I could never successfully install the library in Ubuntu or Fedora after many painstaking hours. Installation of
NSM3was insignificant in Manjaro; it worked on the first try. I’ve played games on Manjaro - Hearthstone6, World of Warcraft, Faster than Light - that all basically work out of the box. These took much more additional configuration in Ubuntu.
Some of the problems I still find with Manjaro
As previously noted, I still haven’t found the perfect GNU/Linux distribution. Here are problems I still find with Manjaro:
Managing my desktop settings. I can’t stand point and click menus knowing that I have to make changes manually across all of systems if I want consistency. I want my desktop settings (keybindings, background, etc.) version controlled through a single config file, just like my
.vimrc. I’ve heard that i3 is a solution to this, but I don’t think I want a tiling window manager. I like to stack windows on top of one another and switch as I need. I really like my current Manjaro KDE setup, but it uses many different config files that seem to change arbitrarily, so VC is a pain. Some other simple DE could work for me, but I desperately need a launcher so that I can easily start programs with
<program name>(which, from my experience, is not available on LXDE, LXQT, and XFCE).
yaourtpackage management: Upgrading packages with
pacmanis easy, but
yaourtis more difficult. Is it possible to integrate these (i.e. install with
yaourtbut upgrade with
yaourtpackages: This only happened to me once, but it was pretty crippling. After a system update with
pacman, QGIS (installed via
yaourt) broke. A forum user came up with a combination of downgrades that got QGIS working, but downgrades are not officially supported, and I couldn’t upgrade
pacmanpackages after this downgrade.
1 This way, all thrashings of the piece are logged in one place, and I don’t have to stumble upon them individually on Hacker News, various Reddit pages, Twitter, and other sites!
2 To be fair, Ubuntu does throw a very Windows-esque warning stating the upgrade my ruin your entire system.
3 This was true as of December 2012 but is probably still happening.
4 This privacy violation is nothing compared to what Microsoft, Apple, and other companies are probably doing.
5 While more “libre” than Ubuntu, Arch Linux does not receive gold stars from The Free Software Foundation
6 I occasionally have issues with my GPU on Windows still. For a time I was playing Hearthstone through Wine on Manjaro (an unsupported OS) while could not play at all on Windows as the game would always unexpectedly crash. It was laughable to me that I could play the game better on an unsupported OS than on Windows.