Development

Status of our OpenWrt patches

From time to time we fix some issues that are backported immediately to OpenWrt community via patches that can be seen on the link below (over 60 accepted patches):

[[http://patchwork.midlink.org/bundle/bright/besip/?state=%2A&archive=both]]

Also we participate in maintaining IP telephony packages for OpenWrt:

[[http://git.openwrt.org/?p=feed/telephony.git;a=search;s=Jiri+Slachta;st=author]]

Beesip build system

We needed to add some packages for OpenWrt which were not in main tree. We use OpenWrt feeds for integration of our work. There is one strict rule which we want to accomplish:
We do not want to hack OpenWrt, we want to use clean and right way how to integrate our work inside OpenWrt. Today, we need some hacks and patches due to initial revision, but we are in contact with OpenWrt community and we try to get most of our work into OpenWrt tree.

We are in early stage of development. Most usual way how to get Beesip working is to use our svn mirror.

You can checkout the source from the Beesip git repository with the help of the below listed command.

# git clone https://lukas_macura@bitbucket.org/liptel/beesip.git

or use ssh version

# git clone git@bitbucket.org:liptel/beesip.git

To select specific branch, use

$ git checkout <branch>

Branches:

$ git branch -r
 origin/master
 origin/release/1.3.2

Each branch contains Makefile which sets up complete OpenWrt buildroot and its prerequisities automatically and makes compiling whole Beesip OpenWrt image much easier. Those Makefiles groups up compiling procedures and provides much easier commands to make it work.

Versioning

Beesip version consist of two parts. First is version of Beesip (like 1.0, 1.1, 1.2.1) and the second one is OpenWrt version. Cutting-edge applications and features are available for Trunk version of Beesip and trunk version of OpenWrt. For older releases of OpenWrt (like kamikaze), we are trying to make most of our software features working too, but it is not possible so features are limited. Their primary purposes is for repository which we serve.

Build process

Autobuild

There is a set of scripts which uses procedures created in general Makefile.

By simply calling autobuild:

# ./autobuild.sh

you get following actions you can do with target and a list of targets:
Enter valid target name! (./autobuild.sh [actions] target [target] ...)

Available actions (could be several actions separated by comma):

    build - build (default action)
    fastbuild - build only BEESIP packages and regenerate image
    tst - only show what would be done.
    clean - clean target.
    dirclean - directory clean target (delete all compiled files except downloaded archives).
    prepare - prepares the openwrt buildroot.
    config - only configure target.
    debug - make with verbose messages (single thread).
    unlock - remove lock file
    shell - try to emulate shell of compiled rootfs
    repo - Create repository from local builds
    repoclean - Clean repo

Select target for the image builder: (you may use 'all' to build all, 'pall' to paralel build all, 'tall' to paralel build with tmux)

beesip_bkpr-x86-cc
beesip_bkpr-x86_64-cc
beesip_callmon-virtual_x86-cc
beesip_callmon-virtual_x86_64-cc
beesip_callmon-x86-cc
beesip_callmon-x86_64-cc
beesip_honey-virtual_x86_64-cc
beesip_honey-x86-cc
beesip_honey-x86_64-cc
beesip_pbx-alix_x86-cc
beesip_pbx-virtual_x86-cc
beesip_pbx-x86-cc
beesip_pbx-x86_64-cc
beesip_sbc-virtual_x86-cc
beesip_sbc-virtual_x86_64-cc
beesip_sbc-x86-cc
eduroamaplte-tplink_wdr3600nd-ar71xx-cc
eduroamap-tplink_wdr3500nd-ar71xx-cc
eduroamap-tplink_wdr3600nd-ar71xx-cc
eduroamap-tplink_wr1043nd-ar71xx-cc
eduroamap-tplink_wr841nd-ar71xx-cc
eduroamap-virtual_x86-cc
eduroomap-nexx_wt-3020-ramips-cc
eduroomap-tplink_archerc7-ar71xx-cc
eduroomap-tplink_wdr3600nd-ar71xx-cc
eduroomap-tplink_wr1043nd-ar71xx-cc
generic-x86-cc

To build a target you can call

./autobuild <name of target>

If you call autobuild only with a name of target, clean, update and build procedures are called. You can also call specific procedure.
To rebuild only without patching and update process (faster but some changes could not be affected)

./autobuild build <name of target>

or you can do it by calling more procedures. e.g.:

./autobuild clean,update,prepare,build <name of target>

You can also build more targets at once:

./autobuild build all # To build all targets (except dbg)

Target creation

Latest trunk branch contains directory cfg which consists of .mk files and directory owrt. Those .mk files are pre-made for hardware used in this project (TP-Link 1043ND, BESIP HW, and Asus Wl-500g). Image config is automaticaly generated from target config.

Our goal was to skip usage of image configuration files. Needed packages in image should be declared in variable BESIP_PACKAGES in *.mk file.

There is an example which describes target for virtual-x86-trunk:

# Target for virtual x86 host
# This target should work with virtualization software like vmware, kvm or VirtualBox
# Can be run directly on some x86 hardware, but it depends on hardware

# Target CPU - mandatory settings
TARGET_CPU=x86

# OpenWrt used for compilation (trunk, attitude_adjustment, ...)
OWRT_NAME=trunk

# Will be used ad prefix for various images
TARGET_NAME=virtual_$(BESIP_VERSION)-$(TARGET_CPU)-owrt_$(OWRT_NAME)

# Options for qemu emulation of target
TARGET_QEMU=i386
TARGET_QEMU_OPTS=-m 512

# Kamailio package used for build (kamailio3 or kamailio4)
KAMPKG=kamailio4

# Name of images generated by OpenWrt build
# Some platforms supports some types of image
# Comment images which are not suitable for your platform
# Disk image (can be directly booted or flashed)
OWRT_IMG_DISK_NAME=openwrt-$(TARGET_CPU)-generic-combined-squashfs.img

# Kernel image
OWRT_IMG_KERNEL_NAME=openwrt-$(TARGET_CPU)-generic-vmlinuz

# Squashfs rootfs
OWRT_IMG_SQUASHFS_NAME=openwrt-$(TARGET_CPU)-generic-rootfs-squashfs.img

# ImageBuilder profile for your platform
OWRT_IMG_PROFILE=Generic

# You can define one or two feeds for your builds
OWRT_FEEDS_ADDONS1="src-git addpack https://github.com/tobiaswaldvogel/openwrt-addpack" 
#OWRT_FEEDS_ADDONS2="..." 

# Which package of Beesip should be use.
# =n means no compilation, =y means inside image, =m means compile as package in repository
BESIPPKG=y
BESIPPKG_LITE=y
BESIPPKG_HUGE=y
BESIPPKG_DEV=m

# Load defaults for virtual appliance
$(eval $(call BesipDefaults,virtual))
# Load defaults for x86
$(eval $(call BesipDefaults,x86)) 

# More packages to include into image
BESIP_PACKAGES += gnugk=y lldpd=y bind-dnssec=y

# Which config settings of OpenWrt should be set to .config
OWRT_CONFIG_SET +=  TARGET_x86=y HAS_SUBTARGETS=y TARGET_BOARD=\"x86\" 

# Which OpenWrt settings should be explicitly unset
#OWRT_CONFIG_UNSET += MC_DISABLE_VFS

# Which files to manualy add to filesystem just during build (from:to)
#OWRT_ADDED_FILES += fstab.virtual:/etc/config/fstab
# Which files to manualy add BESIP etcdefaults. This files will be added during first boot of BESIP (from:to)
#OWRT_ADDED_ETCDEFAULT += network_dhcp_eth0.uci:/etc/config/network

# List of kernel modules which should be included in kernel image. 
# Remember, it is not enough to add module as kmod-* package, because it has to be embedded into kernel. Like HDD driver
# Most of them are already included in defaults files
#EMBEDED_MODULES += \
#    SATA_AHCI SATA_AHCI_PLATFORM SATA_INIC162X SATA_ACARD_AHCI SATA_SIL24 ATA_SFF \
#    FUSION FUSION_SPI FUSION_FC FUSION_SAS SCSI_MPT2SAS SCSI_BUSLOGIC VMWARE_PVSCSI

Repositories

# git clone git@bitbucket.org:liptel/beesip.git
# git clone git@bitbucket.org:liptel/packages.git
# git clone git@bitbucket.org:liptel/telephony.git
# git clone git@bitbucket.org:liptel/oldpackages.git
# git clone git@bitbucket.org:liptel/management-packages.git