Setting up the build environment in a chroot

From Alpine Linux

Introduction

You will need a few Gigabytes to have enough pace for kernel compiling and storing all the binary packages and iso image.

This page is divided into 2 main sections

Create a build environment

The Build Environment (called BE from now on) could be any of the following...

Create BE on existing 2.6 kernel

We are setting up our BE in chroot.

Note: The variables below:

  • ${mirror} = Should be replaced with one of the available alpine-mirrors.
  • ${build_dir} = You can name it whatever you like.

Lets start by geting the latest apk static binary:

wget ${mirror}/apk.static
chmod +x ./apk.static

We are setting up a basic chroot:

mkdir ${build_dir}
./apk.static --repo ${mirror}/packages/core --root $PWD/${build_dir} add --initdb build-base git abuildv
mkdir -p ./${build_dir}/proc
mount --bind /proc ./${build_dir}/proc

Lets setup our needed devices:

mknod -m 666 ./${build_dir}/dev/full c 1 7
mknod -m 777 ./${build_dir}/dev/null c 1 3
mknod -m 666 ./${build_dir}/dev/ptmx c 5 2
mknod -m 644 ./${build_dir}/dev/random c 1 8
mknod -m 644 ./${build_dir}/dev/urandom c 1 9
mknod -m 666 ./${build_dir}/dev/zero c 1 5
mknod -m 666 ./${build_dir}/dev/tty c 5 0

We need or dns servers and root dir:

cp /etc/resolv.conf ./${build_dir}/etc/
mkdir -p ./${build_dir}/root

We are setting up apk mirrors:

mkdir -p ./${build_dir}/etc/apk
echo "${mirror}/packages/core" > ./${build_dir}/etc/apk/repositories
echo "${mirror}/packages/extra" >> ./${build_dir}/etc/apk/repositories

At this point you should be able to enter your chroot:

chroot ./${build_dir} /bin/sh

Create BE on HD-based Alpine

First you need to boot a alpine-test.iso
Ether you do it on a standalone computer or in a virtual machine.

Preparing KVM (temporary notes)

I chose to setup a HD-based Alpine in a virtual machine on my Ubuntu 8.10.
(Notes: This section about setting up KVM should probably be removed later on - it's mostly there to help me get started).

apt-get install kvm ###This installs KVM###
kvm-img create alpine-kvm_hd.img 5G ###Create a KVM-disk###
wget http://distrib-coffee.ipsl.jussieu.fr/pub/linux/alpine/alpine/v1.9/alpine-test.iso ###Download iso###

Before we boot our kvm-qemu we need to prepare it for networking by following the Running_Alpinelinux_As_a_QEMU_networked_Guest documents.
This assumes you created a file qemu-ifup according to the wiki-doc just mentioned.

sudo kvm -cdrom alpine-test.iso -boot d -net tap,vlan=0,ifname=tap0,script=./qemu-ifup -net nic,vlan0 alpine-kvm_hd.img

At this point we started a virtual machine running a clean Alpine.
Now we need to prepare this for networking, etc.

Temporary note: For some reason I can't get networking to work in my kvm-qemu box. Complaining about tun/tap on my host. Need to fix this.

Prepare the clean Alpine

At this point you should have a fresh alpine-box.


Update a existing environment