Simple Turris OS building script
Getting started
Create an empty directory you want to build Turris OS in, enter that directory
and from it call compile_fw
script. In most basic use-case, this should be
enough. Be aware - it will delete all previous content of the current
directory. You can repeat individual steps of the compilation separately,
check compile_fw help
for a list of available commands, generic options and
their brief descriptions.
Advanced usage
Configuration
Default config for OpenWRT is put in configs
directory either in directory
common
or in a directory named after the target board. Files in those
directories gets merged (common ones first) and will form the final .config
file. Some parts of compile_fw
might modify it further.
Release notes
There is a NEWS
file in this directory that contains version number and after
it lines with new features in the release. This file is used to generate
turris-version
package. compile_fw
script reads it, finds the newest
version and from notes underneath it creates the package with release notes.
Patching
If you need to patch OpenWRT or any of the feeds, put a git formatted patch
into respective subdirectory of patches directory. In patches directory, there
is openwrt directory and directory for each feed we are patching. Inside those
directories, patches are also divided into subdirectories like to-upstream
,
wip
or hack
to somehow distinguish between quality of patches.
Rebasing patches
Sometimes patches no longer apply cleanly and needs to be rebased. The most simple way to do that, given that we have everything in git, is the following:
find . -name '*.rej' -delete # Clean all existing reject files git am --reject .../patches/.../xyz.patch # Try hard to apply patch find . -name '*.rej' # List all failed chunks
After those commands, we’ll get our git tree in partially merged state and
with few .rej
files containing failed chunks. Actually, compile_fw
script
by default cleans up checkout directory and applies patches with git am
--reject
so if build fails, checkout ends up in the state similar to what can
be achieved by those commands. Files with .rej
extension needs to be merged
manually and afterwards we need to call git add
on newly patched files. Once
all conflicts are resolved, git am --continue
will create real commit that we
were trying to add using git am
. Now all that is left is to export it using
git format-patch -1
and overwrite patch stored in it of build repository.
Building single package
To build only one package you have to first prepare build directory. That can be
achieved by running compile_fw prepare_tools
in target directory. Be aware it
removes previous content of currect directory!
Any single package then can be build using make package/NAME/compile
where
NAME
should be replaced with name of desired package. Resulting package is
placed in directory bin/package/ARCH/REPO
where ARCH
is target architecture
specific string and REPO
is name of package’s source repository. You can also
clean single package just by replacing compile
with clean
.