Build libubox & ubus On Debian

因為 project 需要, 要將 IPOP 的 controller 以 C 重寫過跑在 OpenWRT 上. 但 configure IPOP 要通過 socket 有延遲問題, 狀態的通知也是通過 socket, 直接使用會有一定的複雜度, 所以給上層使用的界面能被簡化的話是再好不過的.

幸運的是, OpenWRT 上己經有了完整的支持機制!

libubox 是 OpenWRT project 中的 message loop 機制, 在 Linux 上以 epoll 等待 event.

ubus 是 OpenWRT project 上類似 dbus 的 message bus, 輕量, 提供 C programmer friendly APIs.

不過很可惜的是 Debian 上沒有 pre-built binary, 只好自行從 source code 開始 build.

首先, download source code

$ git clone git://git.openwrt.org/project/libubox.git
$ git clone git://git.openwrt.org/project/ubus.git

兩個 project 都是使用 cmake build, 並使用到 json, 裝上相依

$ apt-get install cmake libjson-c-dev pkg-config

將下來, build & install libubox.

$ mkdir libubox_build && cd libubox_build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_LUA=off ../libubox
$ make -j4
# sudo make install

接下來 build ubus

$ cd ..
$ mkdir ubus_build && cd ubus_build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_LUA=OFF ../ubus
$ make -j4
$ sudo make install

-DCMAKE_INSTALL_PREFIX=/usr 告訴 cmake 安裝檔案時路徑加上 /usr 做為 prefix.

-DBUILD_LUA=OFF 則是關掉兩者對 lua 的 support, 因為是以 C 開發, 所以用不到這塊.

最後, 要注意的是, 我的開發環境是以 systemd-nspawn 跟桌面環境隔離的, 所以很直接的就以 make install 將檔案裝到系統中了. 如果不想讓系統亂七八糟沒法管理, 可以將這些檔案集中放置到一個目錄下, 並以 -I-L 告知 compiler & linker 去哪找 headers 及 libraries, 安裝指令修改如下

$ make DESTDIR=$HOME/Local install

路徑請自行修改.