I’ve recently started using Alpine Linux for a school project and its a really neat little distro. It’s designed to be very small, and secure. It uses an alternative C standard library known as musl, and it’s the new default for docker images. This post will detail the installation and my thoughts regarding this distro and what needs to be improved. This review is for Alpine Linux 3.5.2 released on March 2, 2017.
Installation
I installed the standard image on to an Intel NUC. I installed as a standard
full drive installation or as they call it a “sys” install. It took me several
tries to get it installed as the drive in the NUC was formated weirdly from
previous distributions that I installed on it, but a quick fsck
to rewrite
the tables and it was ready to go. They provide a fairly automated and easy
to use installation script that walks you through the installation. It is called
setup-alpine
. They also provide other setup scripts for various parts that
are included in the install. These scripts allow you to setup the network and
other things that are rarely used, but sometimes needed to setup
First Boot
After the first boot, it started up nicely and I started adding the tools I
needed. The package manager is impressively fast, and it does dependency
resolution. I got sshd
setup, and fiddled with some init scripts. I added
the servers that I needed for my project, like redis. The names used for
packages do not always match up as I would expect them to, like with sqlite3
being named just sqlite, but I’ve been living in the fedora world for a while
with all the backwards support that must be included with these long lived
distros.
I then installed my favorite version of top
called htop
. to
look at what was running and low and behold the memory usage was really low,
and I looked at what was running, and it was just the bare minimum. This is
really refreshing without all the garbage tools like packagekit
and
trackerstore
being included in everything.
Configuring it for my project
I will not say what my project is as of right now, but I will say that it
involves serial ports, embedded systems, and analytics. The number one issue
I encountered was serial ports over USB do not belong to the typical group of
dialout
, but to root
. This is a problem as I do not want my application
user to be in the root
group but I see no other option as of right now.
The other issue I encountered was getting R installed, as the packages
in the repos are misnamed or not available, but some kind soul has provided
apks of the latest version of R. The next issue came with the alternative
C library used, and how npm needs to know to build the packages from source
when certain packages are used.
I also encountered issues with the lack of certain common management tools,
a big one is not including sudo
by default, and just including su
. They
might allow one to do the same thing, but most newbie guides will not mention
that leading to them getting frustrated. Additionally, the common user
management tool known as usermod
is not included, which means that certain
files that aren’t supposed to be edited by hand will be edited by hand. Finally,
it hides other users processes from non root users, as in you will not be able
to see what processes root or anyone else is running. Although this is a plus
for security, it can be inconvenient at times with debugging certain things,
and checking that things are running.
Conclusion
Overall, I can say that I really enjoy working with Alpine Linux. It’s a pleasant distro to work with, and I can see it going places. The package manager is one of the fastest I’ve found. Minor issues aside, I really like it and think you should give it a try in your next embedded project.