Skip to content

Instantly share code, notes, and snippets.

@binkybear
Last active October 15, 2022 19:07
Show Gist options
  • Save binkybear/18dab6ef15bfb8052f15c12c6b7777f3 to your computer and use it in GitHub Desktop.
Save binkybear/18dab6ef15bfb8052f15c12c6b7777f3 to your computer and use it in GitHub Desktop.
Build lxc for android
# Get Pre-reqs
apt-get install libattr1-dev git unzip make gcc automake pkg-config
# Get Android NDK
cd /root
mkdir -p build && cd build
wget http://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip -O /tmp/android-ndk-r10e-linux-x86_64.zip
unzip /tmp/android-ndk-r10e-linux-x86_64.zip -d /root/build
# Set paths
export PATH=$PATH:/root/build/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/:/root/build/android-ndk-r10e/
export SYSROOT=/root/build/android-ndk-r10e/platforms/android-21/arch-arm/
export LD=arm-linux-androideabi-ld
export CC="arm-linux-androideabi-gcc --sysroot=/root/build/android-ndk-r10e/platforms/android-21/arch-arm/"
export CFLAGS="-fomit-frame-pointer -DANDROID -pie -fPIE --sysroot=/root/build/android-ndk-r10e/platforms/android-21/arch-arm/ -I/root/build/android-ndk-r10e/platforms/android-21/arch-arm/usr/include/"
export LDFLAGS="-Wl,--dynamic-linker,/system/bin/linker -lc -ldl"
export BUILD_CC=gcc
# Get LXC and libcap
cd /root
git clone https://github.com/lxc/lxc && cd lxc
git clone git://git.kernel.org/pub/scm/linux/kernel/git/morgan/libcap.git && cd libcap
git checkout 0ee94211e95096750ede752acd13b163aa6d5046
make
cp -f libcap/libcap.so* /root/build/android-ndk-r10e/platforms/android-21/arch-arm/usr/lib/
cp -f libcap/libcap.a /root/build/android-ndk-r10e/platforms/android-21/arch-arm/usr/lib/
cp -f libcap/include/sys/capability.h /root/build/android-ndk-r10e/platforms/android-21/arch-arm/usr/include/sys/capability.h
cp -f libcap/include/uapi/linux/capability.h /root/build/android-ndk-r10e/platforms/android-21/arch-arm/usr/include/linux/
# Build LXC
cd /root/lxc
./autogen.sh && mkdir -p OUT
cat << 'EOF' > /root/build/android-ndk-r10e/platforms/android-21/arch-arm/usr/include/linux/genetlink.h
/****************************************************************************
****************************************************************************
***
*** This header was automatically generated from a Linux kernel header
*** of the same name, to make information necessary for userspace to
*** call into the kernel available to libc. It contains only constants,
*** structures, and macros generated from the original header, and thus,
*** contains no copyrightable information.
***
*** To edit the content of this header, modify the corresponding
*** source file (e.g. under external/kernel-headers/original/) then
*** run bionic/libc/kernel/tools/update_all.py
***
*** Any manual change here will be lost the next time this script will
*** be run. You've been warned!
***
****************************************************************************
****************************************************************************/
#ifndef _UAPI__LINUX_GENERIC_NETLINK_H
#define _UAPI__LINUX_GENERIC_NETLINK_H
#include <linux/types.h>
#include <linux/netlink.h>
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define GENL_NAMSIZ 16
#define GENL_MIN_ID NLMSG_MIN_TYPE
#define GENL_MAX_ID 1023
struct genlmsghdr {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
__u8 cmd;
__u8 version;
__u16 reserved;
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define GENL_HDRLEN NLMSG_ALIGN(sizeof(struct genlmsghdr))
#define GENL_ADMIN_PERM 0x01
#define GENL_CMD_CAP_DO 0x02
#define GENL_CMD_CAP_DUMP 0x04
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define GENL_CMD_CAP_HASPOL 0x08
#define GENL_ID_GENERATE 0
#define GENL_ID_CTRL NLMSG_MIN_TYPE
#define GENL_ID_VFS_DQUOT (NLMSG_MIN_TYPE + 1)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define GENL_ID_PMCRAID (NLMSG_MIN_TYPE + 2)
enum {
CTRL_CMD_UNSPEC,
CTRL_CMD_NEWFAMILY,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
CTRL_CMD_DELFAMILY,
CTRL_CMD_GETFAMILY,
CTRL_CMD_NEWOPS,
CTRL_CMD_DELOPS,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
CTRL_CMD_GETOPS,
CTRL_CMD_NEWMCAST_GRP,
CTRL_CMD_DELMCAST_GRP,
CTRL_CMD_GETMCAST_GRP,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
__CTRL_CMD_MAX,
};
#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1)
enum {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
CTRL_ATTR_UNSPEC,
CTRL_ATTR_FAMILY_ID,
CTRL_ATTR_FAMILY_NAME,
CTRL_ATTR_VERSION,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
CTRL_ATTR_HDRSIZE,
CTRL_ATTR_MAXATTR,
CTRL_ATTR_OPS,
CTRL_ATTR_MCAST_GROUPS,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
__CTRL_ATTR_MAX,
};
#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1)
enum {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
CTRL_ATTR_OP_UNSPEC,
CTRL_ATTR_OP_ID,
CTRL_ATTR_OP_FLAGS,
__CTRL_ATTR_OP_MAX,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
enum {
CTRL_ATTR_MCAST_GRP_UNSPEC,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
CTRL_ATTR_MCAST_GRP_NAME,
CTRL_ATTR_MCAST_GRP_ID,
__CTRL_ATTR_MCAST_GRP_MAX,
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
#endif
EOF
# Start build
./configure --host=arm-eabi --disable-api-docs --disable-lua --disable-python --disable-examples --prefix=/data/lxc/lxc --with-runtime-path=/cache/ --bindir="/data/lxc/bin" --libdir="/data/lxc/lib" --with-config-path=/data/lxc/containers/
make
make install
cp -rf /data OUT/data && rm -rf /data
cp -rf /root/build/android-ndk-r10e/platforms/android-21/arch-arm/usr/lib/libcap.* OUT/data/lxc/lib/
@zhenyolka
Copy link

Hello! I build lxc for android with you instruction, i get error on "./configure --host=arm-eabi --disable-api-docs --disable-lua --disable-python --disable-examples --prefix=/data/lxc/lxc --with-runtime-path=/cache/ --bindir="/data/lxc/bin" --libdir="/data/lxc/lib" --with-config-path=/data/lxc/containers/" command, error: "checking for linux/unistd.h... no
configure: error: Please install the Linux kernel headers.", but i install linux headers, but have error.
And 2 question:
If i finish build lxc binary, which options i need choose in android kernel, to start lxc.
Sorry for my English.

@susmithagankidi
Copy link

wget command doesnt work for my hikey 960 board which has android OS on it. Is there any other way to get things installed

@luckyuuuu
Copy link

it seems only API21 include if_link.h and some special function,& use other APIs can not complete build

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment