Last active
October 15, 2022 19:07
-
-
Save binkybear/18dab6ef15bfb8052f15c12c6b7777f3 to your computer and use it in GitHub Desktop.
Build lxc for android
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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/ |
wget command doesnt work for my hikey 960 board which has android OS on it. Is there any other way to get things installed
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
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.