User Tools

Site Tools


doc:howto:buildroot.exigence

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
doc:howto:buildroot.exigence [2014/03/01 11:19]
brian arch dependencies
doc:howto:buildroot.exigence [2016/05/14 10:36] (current)
aversario added zlib1g-dev
Line 1: Line 1:
 +====== OpenWrt build system – Installation ======
 +[[about:​toolchain|OpenWrt build system]] is the [[wp>​toolchain|buildsystem]] for the OpenWrt Linux distribution. OpenWrt build system works on Linux, BSD or MacOSX operating system. A case-sensitive filesystem is required.
 +
 +It is recommended that you use a Linux distribution ([[wp>​Debian]]),​ either a standalone installation or one running in a virtual environment ([[wp>​VMware]] or [[wp>​Qemu]]).
 +
 +[[wp>​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: [[doc:​howto:​buildroot.exigence.old]]
 +
 +:!: For common problems, benchmarks, common optimizations see [[doc:​faq:​development]]
 +
 +===== Prerequisites =====
 +To generate an [[doc:​howto:​generic.flashing|installable]] OpenWrt firmware image file with a size of e.g. 8MB, you need:
 +  * ca. 200 MB of hard disk space for OpenWrt build system
 +  * ca. 300 MB of hard disk space for OpenWrt build system + 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)
 +
 + ​{{tag>​wip}}
 +
 +===== Install procedure on Linux =====
 +| ->​[[doc:​howto:​buildroot.exigence.bsd|Procedure on ~BSD]] | ->​[[doc:​howto:​buildroot.exigence.macosx|Procedure on Mac OS X]] |
 + \\
 +| {{:​meta:​icons:​tango:​48px-emblem-important.svg.png?​nolink}} | 1. Do everything as //​non//​-root user!\\ 2. Issue all OpenWrt build system 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 of the directory where you downloaded the OpenWrt to other than root user (''​sudo chown -R user:user /​openwrt/''​)|
 +
 +  - Install ''​[[wp>​Git (software)|git]]''​ , to conveniently download the OpenWrt source code, and ''​[[wp>​GNU build system|build tools]]''​ to do the cross-compilation process: <code bash>​sudo apt-get update
 +sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip gawk</​code>​ Some feeds might not available over git but only via ''​[[wp>​Apache Subversion|subversion]]''​ (short: ''​svn''​) or ''​[[wp>​Mercurial|mercurial]]''​. If you want to obtain their source-code,​ you need to install svn and mercurial as well:<​code bash>
 +sudo apt-get install subversion mercurial</​code>​
 +     * for information about the build tools see ''​[[man>​make]]''​ and [[http://​packages.debian.org/​wheezy/​build-essential|build-essential]]
 +     * for information about git see ''​[[man>​git(7)]]''​
 +     * for information about the subversion tool see ''​[[man>​svn]]''​ and [[http://​svnbook.red-bean.com/​index.en.html|subversion documentation (multiple languages)]]
 +  - Download the OpenWrt bleeding edge(trunk Version) with ''​git''​ (//see [[#​Downloading Sources]] for more options!//​):<​code bash>
 +git clone https://​git.openwrt.org/​openwrt.git
 +</​code>​ this creates a directory '​openwrt',​ which is the OpenWrt build system build-directory\\ the OpenWrt toolchain "​OpenWrt build system"​ is included
 +  - (//​optional//​) Download and install all available "​feeds"​ (//see [[[doc:​devel:​feeds|OpenWrt Feeds]] for more options!//​):<​code bash> ​
 +cd openwrt
 +./​scripts/​feeds update -a
 +./​scripts/​feeds install -a</​code>​
 +  - Make OpenWrt build system check for missing packages on your build-system using **ONE** of the following commands:<​code bash>
 +make menuconfig (most likely you would like to use this)
 +make defconfig
 +make prereq</​code>​ There you will need to select what you want to compile.
 +  - Proceed with [[build]] (i.e. cross-compile the downloaded sources to binaries)\\After the cross-compilation process the ''​trunk''​-directory contained over 240000 files with a total size of above 3GiB!
 +
 +
 +===== 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 |
 +| [[wp>​Bash (Unix shell)|GNU Bash]] | bash |bash| bash | bash | bash| bash| bash| app-shells/​bash |
 +| [[wp>​Bc_(programming_language)#​GNU_bc|GNU bc]] | bc| bc| | | bc| | bc| sys-devel/​bc |
 +| [[wp>GNU Binutils]] | binutils | binutils| binutils| binutils| binutils| ?| binutils| sys-devel/​binutils |
 +| [[wp>​bzip2]] ​    | bzip2 | bzip2| bzip2| bzip2| bzip2| ?| bzip2| app-arch/​bzip2 |
 +| fastjar ​         | fastjar|fastjar| libgcj| fastjar| libgcj| ?| fastjar| app-arch/​fastjar |
 +| [[wp>​flex lexical analyser|flex]] ​ | flex|flex| flex | flex| flex| ?| flex| sys-devel/​flex |
 +| [[wp>Git (software)|git]] | git-core| git-core| git | git-core | git | ?| git| dev-vcs/git |
 +| [[wp>GNU C++ Compiler]] ​ | g++| gcc-c++| gcc-c++| ?| gcc-c++| ?| gcc | sys-devel/​gcc |
 +| [[wp>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 |
 +| [[wp>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            | [[http://​packages.debian.org/​jessie/​jikespg|jikespg]] | jikes| ?| 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 |
 +| [[wp>​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 |
 +| [[wp>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-static | ?| zlib | sys-libs/​zlib (USE=static-libs)|
 +
 +Unfortunately not all dependencies are checked by ''​make config'':​
 +^ Package ^ Prerequisite ^ Debian (8) ^ SUSE ^ Red Hat ^ OS X ^ Fedora ^ NetBSD ^ Arch ^ Gentoo ^
 +| boost    | bjam / boost-jam ​  | libboost1.55-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 | | [[https://​aur.archlinux.org/​packages/​bcc/​|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**<​code>​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</​code>​
 +  * **Debian 7 Wheezy:​**<​code>​apt-get install libncurses5-dev zlib1g-dev gawk</​code>​
 +  * **Debian 8 Jessie:​**<​code>​sudo apt-get install build-essential libncurses5-dev gawk git subversion libssl-dev gettext unzip zlib1g-dev</​code>​
 +  * **Fedora 22 - 64Bit** :<​code>​dnf install -y subversion binutils bzip2 gcc gcc-c++ gawk gettext git-core flex ncurses-devel zlib-devel zlib-static make patch unzip perl-ExtUtils-MakeMaker \
 + glibc glibc-devel glibc-static quilt sed sdcc intltool sharutils bison wget openssl-devel</​code>​
 +  * **openSUSE 13.2**<​code>​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</​code>​
 +  * **Ubuntu 12.04LTS:​**<​code>​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</​code>​
 +  * **Ubuntu 64bit:​**<​code>​sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev</​code>​
 +  * **Centos x86-64 (some packages require EPEL):​**<​code>​yum install subversion binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel zlib-static make patch unzip perl-ExtUtils-MakeMaker glibc glibc-devel glibc-static quilt ncurses-libs sed sdcc intltool sharutils bison wget git-core openssl-devel xz</​code>​
 +  * **Gentoo:​**<​code bash>$ 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'</​code>​
 +==== 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 <color yellow>​**//​experimental//​**</​color>​ <color red>​**//​patches//​**</​color>​.
 +== Main repository ==
 +
 +<code bash>git clone git://​git.openwrt.org/​openwrt.git</​code>​
 +
 +Additional packages can be found in several feeds (Luci, packages, routing, management etc.). Let the Openwrt build system to clone the correct feeds into feeds/​packages,​ feeds/luci etc.
 +
 +=== 15.05 branch (Chaos Calmer) ===
 +
 +== Main repository ==
 +<code bash>git clone git://​git.openwrt.org/​15.05/​openwrt.git</​code>​
 +
 +Additional packages can be found in several feeds (Luci, packages, routing, management etc.). Let the Openwrt build system to clone the correct feeds into feeds/​packages,​ feeds/luci etc.
 +
 +=== 14.07 branch (Barrier Breaker) ===
 +
 +== Main repository ==
 +<code bash>git clone git://​git.openwrt.org/​14.07/​openwrt.git</​code>​
 +
 +== Packages feed ==
 +
 +<code bash>git clone git://​git.openwrt.org/​14.07/​packages.git</​code>​
 +
 +=== 12.09 branch (Attitude Adjustment) ===
 +
 +== Main repository ==
 +<code bash>git clone git://​git.openwrt.org/​12.09/​openwrt.git</​code>​
 +
 +== Packages feed ==
 +
 +<code bash>git clone git://​git.openwrt.org/​12.09/​packages.git</​code>​
 +
 +== Luci feed ==
 +
 +Note: The location of the Luci feed has not been corrected in feeds.conf.default after the move to Github, so you need to manually edit feeds.conf.default to pull Luci from Github:
 +<code bash>​src-git luci https://​github.com/​openwrt/​luci.git;​luci-0.11</​code>​
 +=== 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:
 +<code bash>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
 +</​code>​
 +After doing the above, you can simply do the following to pickup trunk, aa, bb, or cc changes made.
 +<code bash>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</​code>​
 +
 +=== Check out certain revision ===
 +git commits are tagged with SVN ids.
 +<code bash>git log --grep=<​svn id></​code>​
 +
 +==== SVN ====
 +see [[doc:​howto:​buildroot.exigence.old|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.
 +
 +
 +
 +