diff --git a/utils/lxc/Makefile b/utils/lxc/Makefile new file mode 100644 index 000000000..a613352df --- /dev/null +++ b/utils/lxc/Makefile @@ -0,0 +1,225 @@ +# +# Copyright (C) 2013-2014 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=lxc +PKG_VERSION:=1.0.5 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=http://linuxcontainers.org/downloads/ +PKG_MD5SUM:=9d9af9e9e69a831cd50b58d91c786013 + +PKG_BUILD_DEPENDS:=lua +PKG_BUILD_PARALLEL:=1 +PKG_INSTALL:=1 + +include $(INCLUDE_DIR)/package.mk + +LXC_APPLETS_BIN += \ + attach autostart cgroup clone config console create destroy execute \ + freeze info monitor snapshot start stop unfreeze unshare usernsexec wait + +LXC_APPLETS_LIB += \ + monitord user-nic + +LXC_SCRIPTS += \ + checkconfig ls top + +DEPENDS_APPLETS = +libpthread +libcap +liblxc + +DEPENDS_top = +lxc-lua +luafilesystem @BROKEN + + +define Package/lxc/Default + SECTION:=utils + CATEGORY:=Utilities + TITLE:=LXC userspace tools + URL:=http://lxc.sourceforge.net/ + MAINTAINER:=Luka Perkov +endef + +define Package/lxc + $(call Package/lxc/Default) + MENU:=1 +endef + +define Package/lxc/description + LXC is the userspace control package for Linux Containers, a lightweight + virtual system mechanism sometimes described as "chroot on steroids". +endef + +define Package/lxc-common + $(call Package/lxc/Default) + TITLE:=LXC common files + DEPENDS:= lxc +endef + +define Package/lxc-hooks + $(call Package/lxc/Default) + TITLE:=LXC virtual machine hooks + DEPENDS:= lxc +endef + +define Package/lxc-templates + $(call Package/lxc/Default) + TITLE:=LXC virtual machine templates + DEPENDS:= lxc @BROKEN +endef + +define Package/liblxc + $(call Package/lxc/Default) + SECTION:=libs + CATEGORY:=Libraries + TITLE:=LXC userspace library + DEPENDS:= lxc +libcap +libpthread +endef + +define Package/lxc-lua + $(call Package/lxc/Default) + TITLE:=LXC Lua bindings + DEPENDS:= lxc +liblua +liblxc +luafilesystem +endef + +define Package/lxc-init + $(call Package/lxc/Default) + TITLE:=LXC Lua bindings + DEPENDS:= lxc +liblxc +endef + +CONFIGURE_ARGS += \ + --disable-apparmor \ + --disable-doc \ + --disable-examples \ + --disable-seccomp + --enable-lua=yes \ + --with-lua-pc="$(STAGING_DIR)/usr/lib/pkgconfig/lua.pc" \ + +MAKE_FLAGS += \ + LUA_INSTALL_CMOD="/usr/lib/lua" \ + LUA_INSTALL_LMOD="/usr/lib/lua" + +define Build/Configure + ( cd $(PKG_BUILD_DIR); ./autogen.sh ); + $(call Build/Configure/Default) +endef + + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include/lxc/ + $(CP) \ + $(PKG_INSTALL_DIR)/usr/include/lxc/* \ + $(1)/usr/include/lxc/ + + $(INSTALL_DIR) $(1)/usr/lib + $(CP) \ + $(PKG_INSTALL_DIR)/usr/lib/liblxc.so* \ + $(1)/usr/lib/ + + $(INSTALL_DIR) $(1)/usr/lib/pkgconfig + $(CP) \ + $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lxc.pc \ + $(1)/usr/lib/pkgconfig/ +endef + + +define Package/lxc/install + true +endef + +define Package/lxc-common/conffiles +/etc/lxc/default.conf +/etc/lxc/lxc.conf +endef + +define Package/lxc-common/install + $(INSTALL_DIR) $(1)/usr/lib/lxc/rootfs + $(CP) \ + $(PKG_INSTALL_DIR)/usr/lib/lxc/rootfs/README \ + $(1)/usr/lib/lxc/rootfs/ + + $(INSTALL_DIR) $(1)/usr/share/lxc + $(CP) \ + $(PKG_INSTALL_DIR)/usr/share/lxc/lxc.functions \ + $(1)/usr/share/lxc/ + + $(INSTALL_DIR) $(1)/etc/lxc/ + $(CP) \ + $(PKG_INSTALL_DIR)/etc/lxc/default.conf \ + $(1)/etc/lxc/ +endef + +define Package/lxc-hooks/install + $(INSTALL_DIR) $(1)/usr/share/lxc/hooks + $(CP) \ + $(PKG_INSTALL_DIR)/usr/share/lxc/hooks/mountcgroups \ + $(1)/usr/share/lxc/hooks/ + $(CP) \ + $(PKG_INSTALL_DIR)/usr/share/lxc/hooks/mountecryptfsroot \ + $(1)/usr/share/lxc/hooks/ +endef + +define Package/lxc-templates/install + $(INSTALL_DIR) $(1)/usr/share/lxc/templates/ + $(CP) \ + $(PKG_INSTALL_DIR)/usr/share/lxc/templates/lxc-* \ + $(1)/usr/share/lxc/templates/ +endef + +define Package/liblxc/install + $(INSTALL_DIR) $(1)/usr/lib/ + $(CP) \ + $(PKG_INSTALL_DIR)/usr/lib/liblxc.so* \ + $(1)/usr/lib/ +endef + +define Package/lxc-lua/install + $(INSTALL_DIR) $(1)/usr/lib/lua + $(CP) \ + $(PKG_INSTALL_DIR)/usr/share/lua/5.1/lxc.lua \ + $(1)/usr/lib/lua/ + $(INSTALL_DIR) $(1)/usr/lib/lua/lxc + $(CP) \ + $(PKG_INSTALL_DIR)/usr/lib/lua/5.1/lxc/core.so \ + $(1)/usr/lib/lua/lxc/ +endef + +define Package/lxc-init/install + $(INSTALL_DIR) $(1)/sbin + $(CP) \ + $(PKG_INSTALL_DIR)/usr/sbin/init.lxc \ + $(1)/sbin/ +endef + +define GenPlugin + define Package/lxc-$(1) + $(call Package/lxc/Default) + TITLE:=Utility lxc-$(1) from the LXC userspace tools + DEPENDS:= lxc +lxc-common $(2) $(DEPENDS_$(1)) + endef + + define Package/lxc-$(1)/install + $(INSTALL_DIR) $$(1)$(3) + $(INSTALL_BIN) \ + $(PKG_INSTALL_DIR)$(3)/lxc-$(1) \ + $$(1)$(3)/ + endef + + $$(eval $$(call BuildPackage,lxc-$(1))) +endef + + +$(eval $(call BuildPackage,lxc)) +$(eval $(call BuildPackage,lxc-common)) +$(eval $(call BuildPackage,lxc-hooks)) +$(eval $(call BuildPackage,lxc-templates)) +$(eval $(call BuildPackage,liblxc)) +$(eval $(call BuildPackage,lxc-lua)) +$(foreach u,$(LXC_APPLETS_BIN),$(eval $(call GenPlugin,$(u),$(DEPENDS_APPLETS),"/usr/bin"))) +$(foreach u,$(LXC_APPLETS_LIB),$(eval $(call GenPlugin,$(u),$(DEPENDS_APPLETS),"/usr/lib/lxc"))) +$(foreach u,$(LXC_SCRIPTS),$(eval $(call GenPlugin,$(u),,"/usr/bin"))) diff --git a/utils/lxc/patches/010-compile.patch b/utils/lxc/patches/010-compile.patch new file mode 100644 index 000000000..6f12c382a --- /dev/null +++ b/utils/lxc/patches/010-compile.patch @@ -0,0 +1,33 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -31,30 +31,6 @@ AC_CANONICAL_HOST + AM_PROG_CC_C_O + AC_GNU_SOURCE + +-# Detect the distribution. This is used for the default configuration and +-# for some distro-specific build options. +-AC_MSG_CHECKING([host distribution]) +-AC_ARG_WITH(distro, AS_HELP_STRING([--with-distro=DISTRO], [Specify the Linux distribution to target: One of redhat, oracle, centos, fedora, suse, gentoo, debian, arch, slackware, paldo, openmandriva or pardus.])) +-if type lsb_release >/dev/null 2>&1 && test "z$with_distro" = "z"; then +- with_distro=`lsb_release -is` +-fi +-if test "z$with_distro" = "z"; then +- AC_CHECK_FILE(/etc/redhat-release,with_distro="redhat") +- AC_CHECK_FILE(/etc/oracle-release,with_distro="oracle") +- AC_CHECK_FILE(/etc/centos-release,with_distro="centos") +- AC_CHECK_FILE(/etc/fedora-release,with_distro="fedora") +- AC_CHECK_FILE(/etc/SuSE-release,with_distro="suse") +- AC_CHECK_FILE(/etc/gentoo-release,with_distro="gentoo") +- AC_CHECK_FILE(/etc/debian_version,with_distro="debian") +- AC_CHECK_FILE(/etc/arch-release,with_distro="arch") +- AC_CHECK_FILE(/etc/slackware-version,with_distro="slackware") +- AC_CHECK_FILE(/etc/frugalware-release,with_distro="frugalware") +- AC_CHECK_FILE(/etc/mandrakelinux-release, with_distro="openmandriva") +- AC_CHECK_FILE(/etc/mandriva-release,with_distro="openmandriva") +- AC_CHECK_FILE(/etc/pardus-release,with_distro="pardus") +-fi +-with_distro=`echo ${with_distro} | tr '[[:upper:]]' '[[:lower:]]'` +- + if test "z$with_distro" = "z"; then + with_distro="unknown" + fi diff --git a/utils/lxc/patches/015-getline.patch b/utils/lxc/patches/015-getline.patch new file mode 100644 index 000000000..e2f002af9 --- /dev/null +++ b/utils/lxc/patches/015-getline.patch @@ -0,0 +1,15 @@ +--- a/src/lxc/utils.h ++++ b/src/lxc/utils.h +@@ -44,11 +44,7 @@ extern char *get_rundir(void); + extern const char *lxc_global_config_value(const char *option_name); + + /* Define getline() if missing from the C library */ +-#ifndef HAVE_GETLINE +-#ifdef HAVE_FGETLN +-#include <../include/getline.h> +-#endif +-#endif ++#include "../include/getline.h" + + /* Define setns() if missing from the C library */ + #ifndef HAVE_SETNS diff --git a/utils/lxc/patches/020-lxc-checkconfig.patch b/utils/lxc/patches/020-lxc-checkconfig.patch new file mode 100644 index 000000000..272f76b05 --- /dev/null +++ b/utils/lxc/patches/020-lxc-checkconfig.patch @@ -0,0 +1,20 @@ +--- a/src/lxc/lxc-checkconfig.in ++++ b/src/lxc/lxc-checkconfig.in +@@ -4,6 +4,17 @@ + : ${CONFIG:=/proc/config.gz} + : ${GREP:=zgrep} + : ${MODNAME:=configs} ++: ${ZGREP:=zgrep} ++: ${GUNZIP:=gunzip} ++ ++if [ -z $(which $ZGREP) ] && ! [ -z $(which $GUNZIP) ] && [ -x $(which $GUNZIP) ] && [ -f $CONFIG ] && [ "$CONFIG" == "/proc/config.gz" ] ; then ++ ++ CONFIG_NEW="/tmp/config-$(uname -r)" ++ $GUNZIP -c $CONFIG > $CONFIG_NEW ++ CONFIG=$CONFIG_NEW ++ ++ GREP=grep ++fi + + SETCOLOR_SUCCESS="printf \\033[1;32m" + SETCOLOR_FAILURE="printf \\033[1;31m"