User Tools

Site Tools


doc:howto:buildroot.exigence

OpenWrt Buildroot – Installation

OpenWrt Buildroot is the buildsystem for the OpenWrt Linux distribution. OpenWrt Buildroot works on Linux, BSD or MacOSX operating system. A case-sensitive filesystem is required.

It is recommended that you use a Linux distribution (Debian), either a standalone installation or one running in a virtual environment (VMware or Qemu).

Cygwin(Windows) will not be supported because of the lack of case sensitiveness in the file system.

Outdated information for old Buildroot versions, old Linux variants is archived at: buildroot.exigence.old

:!: For common problems, benchmarks, common optimizations see development

Prerequisites

to generate an installable OpenWrt firmware image file with a size of e.g. 8MB:

  • ca. 200 MB of hard disk space for OpenWrt Buildroot
  • ca. 300 MB of hard disk space for OpenWrt Buildroot + OpenWrt Feeds
  • ca. 2.1 GB of hard disk space for source packages downloaded during build from OpenWrt Feeds
  • ca. 3-4 GB of available hard disk space to build (i.e. cross-compile) OpenWrt and generate the firmware file
  • ca. 1-4 GB of RAM to build Openwrt.(build x86's img need 4GB RAM)

Install procedure on Linux


1. Do everything as non-root user!
2. Issue all OpenWrt Buildroot commands in the <buildsystem root> directory, e.g. ~/openwrt/trunk/
3. Do not build in a directory that has spaces in its full path
4. Change Ownership other than root user,of the directory where you Download the OpenWrt (sudo chown -R user:user /openwrt/)
  1. Install git , to conveniently download the OpenWrt source code, and build tools to do the cross-compilation process:
    sudo apt-get update
    sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip
    Some feeds might not available over git but only via subversion (short: svn) or mercurial. If you want to obtain their source-code, you need to install svn and mercurial as well:
    sudo apt-get install subversion mercurial
  2. Download the OpenWrt bleeding edge(trunk Version) with git (see Downloading Sources for more options!):
    git clone git://git.openwrt.org/openwrt.git

    this creates a directory 'openwrt', which is the OpenWrt Buildroot build-directory
    the OpenWrt toolchain "OpenWrt Buildroot" is included

  3. (optional) Download and install all available "feeds" (see OpenWrt Feeds for more options!):
    cd openwrt
    ./scripts/feeds update -a
    ./scripts/feeds install -a
  4. Make OpenWrt Buildroot check for missing packages on your build-system using one of the following commands:
    make defconfig
    make prereq
    make menuconfig

    There you will need to select what you want to compile.

  5. Proceed with build (i.e. cross-compile the downloaded sources to binaries)

    After the cross-compilation process the ''trunk''-directory contained 244,451 files with a total size of 3.2GiB!

Table of known prerequisites and their corresponding packages

Here's a table with the package name for each prerequisite separated for different GNU/Linux and Unix like distributions.

Prerequisite Debian SUSE Red Hat OS X (via MacPorts) Fedora NetBSD Arch Gentoo
asciidoc asciidoc asciidoc asciidoc asciidoc asciidoc ? asciidoc app-text/asciidoc
GNU Bash bash bash bash bash bash bash bash app-shells/bash
GNU bc bc bc bc bc sys-devel/bc
GNU Binutils binutils binutils binutils binutils binutils ? binutils sys-devel/binutils
bzip2 bzip2 bzip2 bzip2 bzip2 bzip2 ? bzip2 app-arch/bzip2
fastjar fastjarfastjar libgcj fastjar libgcj ? fastjar app-arch/fastjar
flex flexflex flex flex flex ? flex sys-devel/flex
git git-core git-core git git-core git ? git dev-vcs/git
GNU C++ Compiler g gcc-c ? gcc sys-devel/gcc
GNU C Compiler gcc gcc gcc ? gcc ? gcc sys-devel/gcc
getopt util-linux util-linux util-linux getopt util-linux getopt util-linux sys-apps/util-linux
GNU awk gawk gawk gawk gawk gawk ? gawk sys-apps/gawk
gtk2.0-dev libgtk2.0-dev gtk2-devel gtk2-devel gtk2 gtk2-devel ? gtk2 x11-libs/gtk+:2
intltool-update intltool intltool intltool intltool intltool ? intltool dev-util/intltool
jikes jikespg jikes ? jikes ? aur/jikes dev-java/jikes
libz, libz-dev zlib1g-dev zlib-devel zlib-devel zlib zlib-devel ? zlib sys-libs/zlib
Mercurial / hg mercurial hg dev-vcs/mercurial
make make make make gmake make gmake make sys-devel/make
mkisofs genisoimage genisoimage ? ? genisoimage ? cdrkit virtual/cdrtools
ncurses libncurses5-dev ncurses-devel ncurses-devel ncurses ncurses-devel ? ncurses sys-libs/ncurses
openssl/ssl.h libssl-dev libopenssl-devel openssl-devel openssl openssl-devel ? openssl dev-libs/openssl
patch patch patch patch patchutils patch ? patch sys-devel/patch
perl-ExtUtils-MakeMaker perl-modules perl-ExtUtils-MakeMaker perl-ExtUtils-MakeMaker p5-extutils-makemaker perl-ExtUtils-MakeMaker ? perl-extutils-makemaker virtual/perl-ExtUtils-MakeMaker
python2.6-dev python2.6-dev python-devel ? python26 python-devel ? python2 dev-lang/python:2.6
rsync rsync rsync rsync rsync rsync ? rsync net-misc/rsync
ruby ruby ruby ? ruby ruby ? ruby dev-lang/ruby
sdcc sdcc sdcc sdcc sdcc sdcc ? sdcc dev-embedded/sdcc
unzip unzip unzip unzip unzip unzip ? unzip app-arch/unzip
GNU Wget wget wget wget wget wget ? wget net-misc/wget
xgettext gettext gettext-tools gettext gettext gettext ? gettext sys-devel/gettext
xsltproc xsltproc libxslt-tools ? libxslt libxslt ? libxslt dev-libs/libxslt
zlib, zlib-static zlib1g-dev zlib-devel zlib-devel zlib-devel zlib-devel ? zlib sys-libs/zlib

Unfortunately not all dependencies are checked by make config:

Package Prerequisite Debian SUSE Red Hat OS X Fedora NetBSD Arch Gentoo
boost bjam / boost-jam libboost1.53-dev boost-jam boost dev-util/boost-build
intltool [Perl] XML::Parser libxml-parser-perl perl-XML-Parser perl-XML-Parser intltool dev-perl/XML-Parser
libftdi libusb-config libusb-dev libusb-devel libusb dev-libs/libusb-compat
lilo as86,ld86 bin86 dev86 bin86 sys-devel/bin86
lilo bcc bcc dev86 aur/bcc sys-devel/dev86
lilo uudecode sharutils sharutils sharutils app-arch/sharutils
classpath javac, gcj openjdk-7-jdk java-1.7.0-openjdk-devel jdk7-openjdk dev-java/oracle-jdk-bin, sys-devel/gcc[gcj], and one (or both) of dev-java/icedtea-bin:7 and dev-java/icedtea:7
mac80211 b43-fwcutter b43-fwcutter b43-fwcutter net-wireless/b43-fwcutter
jamvm zip zip app-arch/zip

Examples of Package Installations

  • Arch Linux
    pacman -S --needed subversion asciidoc bash bc binutils bzip2 fastjar flex git gcc util-linux gawk intltool zlib make cdrkit ncurses openssl patch perl-extutils-makemaker rsync sdcc unzip wget gettext libxslt boost libusb bin86 sharutils b43-fwcutter findutils
  • Debian 7 Wheezy:
    apt-get install libncurses5-dev zlib1g-dev gawk
  • Fedora 20 - 64Bit (Maybe also for lower versions, some packages seem to be missing above):
    yum install -y subversion binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel make patch unzip perl-ExtUtils-MakeMaker \
     glibc glibc-devel glibc-static quilt ncurses-lib sed sdcc intltool sharutils bison wget
  • openSUSE 13.2
    zypper install asciidoc bash bc binutils bzip2 fastjar flex git-core gcc-c++ gcc util-linux gawk gtk2-devel intltool jikes zlib-devel mercurial make genisoimage ncurses-devel libopenssl-devel patch perl-ExtUtils-MakeMaker python-devel rsync ruby sdcc unzip wget gettext-tools libxslt-tools zlib-devel subversion
  • Ubuntu 12.04LTS:
    sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip
  • Ubuntu 64bit:
    sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev
  • Centos x86-64:
    yum install subversion binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel make patch unzip perl-ExtUtils-MakeMaker  glibc glibc-devel glibc-static quilt ncurses-lib sed sdcc intltool sharutils bison wget git-core openssl-devel xz
  • Gentoo:
    $ echo \
        app-arch/{bzip2,fastjar,sharutils,unzip,zip} \
        app-text/asciidoc dev-java/{icedtea:7,jikes,oracle-jdk-bin} \
        dev-libs/{libusb-compat,libxslt,openssl} dev-util/intltool \
        dev-vcs/{git,mercurial} net-misc/{rsync,wget} \
        net-wireless/b43-fwcutter sys-apps/{gawk,util-linux} \
        sys-devel/{bc,bin86,binutils,dev86,flex,gcc[gcj],gettext} \
        sys-libs/{ncurses,zlib} virtual/{cdrtools,perl-ExtUtils-MakeMaker} \
        x11-libs/gtk+:2 \
            | sed 's/\s/\n/g' \
                | sort \
                    | sudo tee /etc/portage/sets/openwrt-prerequisites \
                        && sudo emerge -DuvNa '@openwrt-prerequisites'

Known variants to be broken

  • alpine linux uses musl as libc replacement. Some host tools fail to compile (mtd-utils, e2fsprogs). Detection possibly has to be overridden (gcc -dumpmachine outputs a result where some scripts will fail - tools/sed)

Downloading Sources

GIT

cloning the Git repository using one of the following commands:

trunk (main development tree)

The development branch (trunk) contains everything from documentation to experimental patches.

Main repository

git clone git://git.openwrt.org/openwrt.git

Packages feed

git clone git://git.openwrt.org/packages.git

15.05 branch (Chaos Calmer)

Main repository

git clone git://git.openwrt.org/15.05/openwrt.git

Packages feed

git clone git://git.openwrt.org/15.05/packages.git

14.07 branch (Barrier Breaker)

Main repository

git clone git://git.openwrt.org/14.07/openwrt.git

Packages feed

git clone git://git.openwrt.org/14.07/packages.git

12.09 branch (Attitude Adjustment)

Main repository

git clone git://git.openwrt.org/12.09/openwrt.git

Packages feed

git clone git://git.openwrt.org/12.09/packages.git

Merged main repository into a single Git repository

If you want all three repositories mentioned above in a single git repository (with history) do the following:

git clone git://git.openwrt.org/openwrt.git 
cd openwrt
# Add AA remote repository
git remote add aa-up git://git.openwrt.org/12.09/openwrt.git
git fetch aa-up
AA_BRANCH=`git log aa-up/master --pretty="tformat:%H %T" | tail -1`
AA_TIP=($AA_BRANCH)
OW_AA_MATCH=`git log master --pretty="tformat:%H %T" | grep ${AA_TIP[1]}`
OW_AA_BRANCH=($OW_AA_MATCH)
git checkout -b ow-aa ${OW_AA_BRANCH[0]}
echo "${AA_TIP[0]} ${OW_AA_BRANCH[0]}" >> .git/info/grafts
git merge aa-up/master
 
# Add BB remote repository
git remote add bb-up git://git.openwrt.org/14.07/openwrt.git
git fetch bb-up
BB_BRANCH=`git log bb-up/master --pretty="tformat:%H %T" | tail -1`
BB_TIP=($BB_BRANCH)
OW_BB_MATCH=`git log master --pretty="tformat:%H %T" | grep ${BB_TIP[1]}`
OW_BB_BRANCH=($OW_BB_MATCH)
git checkout -b ow-bb ${OW_BB_BRANCH[0]}
echo "${BB_TIP[0]} ${OW_BB_BRANCH[0]}" >> .git/info/grafts
git merge bb-up/master
 
# Add CC remote repository
git remote add cc-up git://git.openwrt.org/15.05/openwrt.git
git fetch cc-up
CC_BRANCH=`git log cc-up/master --pretty="tformat:%H %T" | tail -1`
CC_TIP=($CC_BRANCH)
OW_CC_MATCH=`git log master --pretty="tformat:%H %T" | grep ${CC_TIP[1]}`
OW_CC_BRANCH=($OW_CC_MATCH)
git checkout -b ow-cc ${OW_CC_BRANCH[0]}
echo "${CC_TIP[0]} ${OW_CC_BRANCH[0]}" >> .git/info/grafts
git merge cc-up/master
After doing the above, you can simply do the following to pickup trunk, aa, bb, or cc changes made.
git checkout master
git pull
  AND/OR
git checkout ow-aa
git pull aa-up master
  AND/OR
git checkout ow-bb
git pull bb-up master
  AND/OR
git checkout ow-cc
git pull cc-up master

Check out certain revision

git commits are tagged with SVN ids.

git log --grep=<svn id>

SVN

see Deprecated Buildroot-Installation Howto

:!: Accessing SVN may get your IP blacklisted on SVN and forum. Full SVN checkout can take a very long time compared to git. Using git is recommended by the developers.

doc/howto/buildroot.exigence.txt · Last modified: 2015/06/16 23:41 by RyanLindeman