Alpine Linux in VirtualBox

I’ve been playing with Alpine Linux on VirtualBox, and here are some notes I took during the process.

Installation

Let’s get started:

  • Create a NAT Network in the VirtualBox preferences, call it “MyNetwork”.
    • More information here.
  • Download the latest x86_64 version in ISO format.
  • Create a virtual machine in VirtualBox.
    • Name it “Alpine Linux”.
    • Attach the ISO image to the virtual machine.
    • Select “Attached to NAT Network” as adapter, and select the “MyNetwork” option if not selected.
    • Choose “Bridged Adapter” if you want to access the VMs from the host and vice-versa.
  • Boot and run the setup-alpine command to get started. Reply all questions and wait for system to be installed.
    • Choose a proper hostname, so that another machine has a different hostname in the prompt.
  • Shutdown with the poweroff command, remove the ISO from the virtual disk drive.
  • Start the VM, it should work.

Applications

  • Run vi /etc/apk/repositories and uncomment both lines with community repositories.
  • Run apk update.
  • Install some common stuff: apk add sudo vim emacs python3 mplayer bash zsh tmux git curl wget bat fortune jq tig mc mandoc man-pages

Pandoc

For Pandoc we need to install Haskell and a few more things first:

# apk add cabal ghc libc-dev zlib-dev
# cabal update
# cabal install pandoc

Create Users

You don’t want to be root all the time:

  • adduser username
  • Follow the steps here to install build tools and add the new user to have sudo powers:
    • visudo
    • Add the line username ALL=(ALL) ALL below the similar one for root
    • apk add alpine-sdk
  • Exit root and login as new username:
    • sudo apk add htop should work

Shell

My favourite shell is zsh:

  • apk add shadow (there’s no chsh in Alpine)
  • chsh -s $(which zsh)
  • sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" to install Oh-My-Zsh

Connect to Another VM

Let’s repeat the process, so that we can ssh from one VM to another:

  • Create a second VM with the same procedure as above, and create the same username.
  • Run ifconfig in both to find the IP addresses.
  • ssh XX.XX.XX.XX (that is, connect from one to the other.)
  • Launch tmux in one VM and tmux att in the other.
  • Type and see how things happen in both at the same time.

Xfce

Xfce is a nice and snappy desktop environment. The install instructions are very straightforward:

# setup-xorg-base
# apk add xfce4 xfce4-terminal lightdm-gtk-greeter xfce4-screensaver dbus-x11
# apk add virtualbox-guest-additions virtualbox-guest-modules-virt
# rc-service dbus start
# rc-service lightdm start

By default one can’t shutdown or reboot from the Xfce UI, though; easy fix:

  • apk add polkit consolekit2

Networking from ISO Image

When booting from the ISO image, all changes are lost!

Write this into /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Then type the command /etc/init.d/networking restart and you should be able to ping google.com once again.

Cloning VMs

When cloning VMs in VirtualBox, pay attention to the fact that it also clones the MAC address of the interface… hence the clone shares the same IP address as the original VM! Don’t forget about this.

Stuff that doesn’t (can’t) work on Alpine

Some software I tried to install actually requires glibc, but since Alpine uses musl, it can’t run: