Setting up the build environment in a chroot

From Alpine Linux
Revision as of 05:14, 17 January 2011 by Clandmeter (talk | contribs) (fix dev/null)
Jump to: navigation, search

Setting up a build environment for Alpine 1.9

This document explains how to set up an Alpine build environment in a chroot under a "normal" Linux distro, such as Arch, Debian, Fedora, Gentoo, or Ubuntu. Once inside the chroot environment, you can build, debug and run alpine packages.

Introduction

You need 80MB space for the tools + the space for the sources you are interested in. (You'd be able to compile all packages in less than 1 GB, given that you clean up sources after each package)

Create a build environment

We are setting up our Build Environment in chroot.

Note: The variables below:

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



Lets start by geting the latest apk static binary:

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

Verify you have apk-tools 2.0_rc1 or later:

./apk.static --version
  apk-tools 2.0_rc1

We are setting up a basic chroot:

mkdir ${build_dir}
sudo ./apk.static --repo ${mirror}/v1.9/packages/main -U --allow-untrusted --root ${build_dir} --initdb add alpine-base alpine-sdk
mkdir -p ./${build_dir}/proc
sudo mount --bind /proc ./${build_dir}/proc

Lets setup our needed devices:

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

seems as /dev/null is wrong

sudo rm -f ./${build_dir}/dev/null && sudo mknod -m 666 ./${build_dir}/dev/null c 1 3

We need or dns servers and root dir:

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

We are setting up apk mirrors:

sudo mkdir -p ./${build_dir}/etc/apk
sudo su
echo "${mirror}/v1.9/packages/main" > ./${build_dir}/etc/apk/repositories
exit

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

sudo chroot ./${build_dir} /bin/sh -l

If you are using Alpine as a Native build system you will have to make sure that chroot can run chmod. Add following to /etc/sysctl.conf

kernel.grsecurity.chroot_deny_chmod = 0

Then run the following command

sysctl -p


Now you can move on to creating packages for Alpine.