mailarchive of the ptxdist mailing list
 help / color / mirror / Atom feed
* [ptxdist] [PATCH v3] lxc: add new package
@ 2018-08-30  7:35 Michael Grzeschik
  2018-08-30 14:10 ` Michael Olbrich
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Grzeschik @ 2018-08-30  7:35 UTC (permalink / raw)
  To: ptxdist

This patch adds support for the lxc container system. We install the
userspace lib and application.

To make sure all necessary kernel options are enabled use:
$ CONFIG=/path/to/kernelconfig lxc-checkconfig

Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
---
v1 -> v2: - prefixed used variables with PTXCONF_ :
            LXC_TEMPLATES, LXC_HOOKS, LXC_SELINUX
          - fixed used variable LXC_SYSTEMD_UNIT
          - added missing dir /usr/lib/lxc/rootfs
          - added dependency to busybox tools when using templates
          - added dependency to iptables when starting systemd.service
          - removed some extra commented unused options
          - removed hooks
          - only installing busybox template
          - added dependency to busybox_umount

v2 -> v3: - removed the busybox template and its dependencies
          - added patch for dnsmasq to start without dns support
          - added install stage to include getent from toolchain

 ...te-new-lxcbr0-subnet-at-startup-time.patch | 134 +++++++++++
 ...-net-start-dnsmasq-without-dnsserver.patch |  24 ++
 patches/lxc-3.0.1/series                      |   2 +
 projectroot/etc/default/lxc-net               |   7 +
 projectroot/etc/lxc/default.conf              |   4 +
 rules/lxc.in                                  |  61 +++++
 rules/lxc.make                                | 211 ++++++++++++++++++
 7 files changed, 443 insertions(+)
 create mode 100644 patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
 create mode 100644 patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch
 create mode 100644 patches/lxc-3.0.1/series
 create mode 100644 projectroot/etc/default/lxc-net
 create mode 100644 projectroot/etc/lxc/default.conf
 create mode 100644 rules/lxc.in
 create mode 100644 rules/lxc.make

diff --git a/patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch b/patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
new file mode 100644
index 000000000..a1fddbea4
--- /dev/null
+++ b/patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
@@ -0,0 +1,134 @@
+From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber@ubuntu.com>
+Date: Tue, 3 Nov 2015 11:42:58 -0500
+Subject: [PATCH] Allocate new lxcbr0 subnet at startup time
+
+---
+ config/init/common/lxc-net.in | 100 ++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 91 insertions(+), 9 deletions(-)
+
+diff --git a/config/init/common/lxc-net.in b/config/init/common/lxc-net.in
+index df9f1181d761..6837be1969c2 100644
+--- a/config/init/common/lxc-net.in
++++ b/config/init/common/lxc-net.in
+@@ -24,6 +24,85 @@ LXC_IPV6_MASK=""
+ LXC_IPV6_NETWORK=""
+ LXC_IPV6_NAT="false"
+ 
++write_lxc_net()
++{
++    local i=$1
++    cat >>  $distrosysconfdir/lxc-net << EOF
++# Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your
++# containers.  Set to "false" if you'll use virbr0 or another existing
++# bridge, or mavlan to your host's NIC.
++USE_LXC_BRIDGE="true"
++
++# If you change the LXC_BRIDGE to something other than lxcbr0, then
++# you will also need to update your /etc/lxc/default.conf as well as the
++# configuration (/var/lib/lxc/<container>/config) for any containers
++# already created using the default config to reflect the new bridge
++# name.
++# If you have the dnsmasq daemon installed, you'll also have to update
++# /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.
++LXC_BRIDGE="lxcbr0"
++LXC_ADDR="10.0.$i.1"
++LXC_NETMASK="255.255.255.0"
++LXC_NETWORK="10.0.$i.0/24"
++LXC_DHCP_RANGE="10.0.$i.2,10.0.$i.254"
++LXC_DHCP_MAX="253"
++# Uncomment the next line if you'd like to use a conf-file for the lxcbr0
++# dnsmasq.  For instance, you can use 'dhcp-host=mail1,10.0.3.100' to have
++# container 'mail1' always get ip address 10.0.3.100.
++#LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf
++
++# Uncomment the next line if you want lxcbr0's dnsmasq to resolve the .lxc
++# domain.  You can then add "server=/lxc/10.0.$i.1' (or your actual \$LXC_ADDR)
++# to your system dnsmasq configuration file (normally /etc/dnsmasq.conf,
++# or /etc/NetworkManager/dnsmasq.d/lxc.conf on systems that use NetworkManager).
++# Once these changes are made, restart the lxc-net and network-manager services.
++# 'container1.lxc' will then resolve on your host.
++#LXC_DOMAIN="lxc"
++EOF
++}
++
++configure_lxcbr0()
++{
++    local i=3
++    cat >  $distrosysconfdir/lxc-net << EOF
++# This file is auto-generated by lxc.postinst if it does not
++# exist.  Customizations will not be overridden.
++EOF
++    # if lxcbr0 exists, keep using the same network
++    if  ip addr show lxcbr0 > /dev/null 2>&1 ; then
++        i=`ip addr show lxcbr0 | grep "inet\>" | awk '{ print $2 }' | awk -F. '{ print $3 }'`
++        write_lxc_net $i
++        return
++    fi
++    # if no lxcbr0, find an open 10.0.a.0 network
++    for l in `ip addr show | grep "inet\>" |awk '{ print $2 }' | grep '^10\.0\.' | sort -n`; do
++            j=`echo $l | awk -F. '{ print $3 }'`
++            if [ $j -gt $i ]; then
++                write_lxc_net $i
++                return
++            fi
++            i=$((j+1))
++    done
++    if [ $i -ne 254 ]; then
++        write_lxc_net $i
++    fi
++}
++
++update_lxcnet_config()
++{
++    local i=3
++    # if lxcbr0 exists, keep using the same network
++    if  ip addr show lxcbr0 > /dev/null 2>&1 ; then
++        return
++    fi
++    # our LXC_NET conflicts with an existing interface.  Probably first
++    # run after system install with package pre-install.  Find a new subnet
++    configure_lxcbr0
++
++    # and re-load the newly created config
++    [ ! -f $distrosysconfdir/lxc-net ] || . $distrosysconfdir/lxc-net
++}
++
+ [ ! -f $distrosysconfdir/lxc ] || . $distrosysconfdir/lxc
+ 
+ use_iptables_lock="-w"
+@@ -51,7 +130,19 @@ _ifup() {
+     ip link set dev ${LXC_BRIDGE} up
+ }
+ 
++cleanup() {
++    set +e
++    if [ "$FAILED" = "1" ]; then
++        echo "Failed to setup lxc-net." >&2
++        stop force
++        exit 1
++    fi
++}
++
+ start() {
++
++    [ ! -f $distrosysconfdir/lxc-net ] && update_lxcnet_config
++
+     [ "x$USE_LXC_BRIDGE" = "xtrue" ] || { exit 0; }
+ 
+     [ ! -f "${varrun}/network_up" ] || { echo "lxc-net is already running"; exit 1; }
+@@ -62,15 +153,6 @@ start() {
+ 
+     FAILED=1
+ 
+-    cleanup() {
+-        set +e
+-        if [ "$FAILED" = "1" ]; then
+-            echo "Failed to setup lxc-net." >&2
+-            stop force
+-            exit 1
+-        fi
+-    }
+-
+     trap cleanup EXIT HUP INT TERM
+     set -e
+ 
diff --git a/patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch b/patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch
new file mode 100644
index 000000000..a8cbf3fe2
--- /dev/null
+++ b/patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch
@@ -0,0 +1,24 @@
+From: Michael Grzeschik <m.grzeschik@pengutronix.de>
+Date: Wed, 29 Aug 2018 16:50:50 +0200
+Subject: [PATCH] lxc-net: start dnsmasq without dnsserver
+
+So it does not conflict with the systems dnsmasq systemd-service.
+
+Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
+---
+ config/init/common/lxc-net.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/config/init/common/lxc-net.in b/config/init/common/lxc-net.in
+index 6837be1969c2..84128d59486b 100644
+--- a/config/init/common/lxc-net.in
++++ b/config/init/common/lxc-net.in
+@@ -221,7 +221,7 @@ start() {
+             --dhcp-lease-max=${LXC_DHCP_MAX} --dhcp-no-override \
+             --except-interface=lo --interface=${LXC_BRIDGE} \
+             --dhcp-leasefile="${varlib}"/misc/dnsmasq.${LXC_BRIDGE}.leases \
+-            --dhcp-authoritative $LXC_IPV6_ARG || cleanup
++            --dhcp-authoritative $LXC_IPV6_ARG --port=0 || cleanup
+ 
+     touch "${varrun}"/network_up
+     FAILED=0
diff --git a/patches/lxc-3.0.1/series b/patches/lxc-3.0.1/series
new file mode 100644
index 000000000..eec508771
--- /dev/null
+++ b/patches/lxc-3.0.1/series
@@ -0,0 +1,2 @@
+0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
+0002-lxc-net-start-dnsmasq-without-dnsserver.patch
diff --git a/projectroot/etc/default/lxc-net b/projectroot/etc/default/lxc-net
new file mode 100644
index 000000000..054a09a0a
--- /dev/null
+++ b/projectroot/etc/default/lxc-net
@@ -0,0 +1,7 @@
+USE_LXC_BRIDGE="true"
+LXC_BRIDGE="lxcbr0"
+LXC_ADDR="192.168.1.1"
+LXC_NETMASK="255.255.255.0"
+LXC_NETWORK="192.168.1.0/24"
+LXC_DHCP_RANGE="192.168.1.2,192.168.1.254"
+LXC_DHCP_MAX="253"
diff --git a/projectroot/etc/lxc/default.conf b/projectroot/etc/lxc/default.conf
new file mode 100644
index 000000000..e7af1e6ae
--- /dev/null
+++ b/projectroot/etc/lxc/default.conf
@@ -0,0 +1,4 @@
+lxc.net.0.type = veth
+lxc.net.0.link = lxcbr0
+lxc.net.0.flags = up
+lxc.net.0.hwaddr = 00:16:3e:11:22:34
diff --git a/rules/lxc.in b/rules/lxc.in
new file mode 100644
index 000000000..fde637b0d
--- /dev/null
+++ b/rules/lxc.in
@@ -0,0 +1,61 @@
+## SECTION=system_libraries
+
+menuconfig LXC
+	bool
+	prompt "lxc                           "
+	select GNUTLS			if LXC_GNUTLS
+	select LIBSELINUX		if LXC_SELINUX
+	select LIBSECCOMP		if LXC_SECCOMP
+	select BUSYBOX_FEATURE_SH_MATH	if LXC_SYSTEMD_UNIT
+	select SYSTEMD			if LXC_SYSTEMD_UNIT
+	select DNSMASQ			if LXC_SYSTEMD_UNIT
+	select IPTABLES			if LXC_SYSTEMD_UNIT
+	select IPTABLES_IPV4		if LXC_SYSTEMD_UNIT
+	select IPTABLES_IPV6		if LXC_SYSTEMD_UNIT
+	select IPTABLES_IPV6_SYSTEMD_UNIT	if LXC_SYSTEMD_UNIT
+	select IPTABLES_IPV4_SYSTEMD_UNIT	if LXC_SYSTEMD_UNIT
+	select IPTABLES_INSTALL_TOOLS		if LXC_SYSTEMD_UNIT
+	help
+	  LXC is a userspace interface for the Linux kernel containment
+	  features. Through a powerful API and simple tools, it lets
+	  Linux users easily create and manage system or application
+	  containers.
+
+if LXC
+
+config LXC_GNUTLS
+	bool
+	prompt "LXC gnutls support"
+	default n
+	help
+	  Turn on to enable gnutls support in lxc
+
+config LXC_SELINUX
+	bool
+	prompt "LXC selinux support"
+	default n
+	help
+	  Turn on to enable selinux support in lxc
+
+config LXC_SECCOMP
+	bool
+	prompt "LXC seccomp support"
+	default n
+	help
+	  Turn on to enable seccomp support in lxc
+
+config LXC_SYSTEMD_UNIT
+	bool
+	prompt "LXC systemd unit"
+	default INITMETHOD_SYSTEMD
+	help
+	  Turn on to install systemd unit for lxc
+
+config LXC_TEST_TOOLS
+	bool
+	prompt "LXC test applications"
+	default n
+	help
+	  Turn on to enable building the lxc test applications
+
+endif
diff --git a/rules/lxc.make b/rules/lxc.make
new file mode 100644
index 000000000..1eadc6d96
--- /dev/null
+++ b/rules/lxc.make
@@ -0,0 +1,211 @@
+# -*-makefile-*-
+#
+# Copyright (C) 2018 by Michael Grzeschik <mgr@pengutronix.de>
+#
+# See CREDITS for details about who has contributed to this project.
+#
+# For further information about the PTXdist project and license conditions
+# see the README file.
+#
+
+#
+# We provide this package
+#
+PACKAGES-$(PTXCONF_LXC) += lxc
+
+#
+# Paths and names
+#
+LXC_VERSION	:= 3.0.1
+LXC_MD5		:= 8eb396dde561e5832ba2d505513a1935
+LXC		:= lxc-$(LXC_VERSION)
+LXC_SUFFIX	:= tar.gz
+LXC_URL		:= https://linuxcontainers.org/downloads/lxc/$(LXC).$(LXC_SUFFIX)
+LXC_SOURCE	:= $(SRCDIR)/$(LXC).$(LXC_SUFFIX)
+LXC_DIR		:= $(BUILDDIR)/$(LXC)
+LXC_LICENSE	:= unknown
+
+# ----------------------------------------------------------------------------
+# Prepare
+# ----------------------------------------------------------------------------
+
+#LXC_CONF_ENV	:= $(CROSS_ENV)
+
+#
+# autoconf
+#
+LXC_CONF_TOOL	:= autoconf
+LXC_CONF_OPT	:= \
+	$(CROSS_AUTOCONF_USR) \
+	--enable-silent-rules \
+	--enable-dependency-tracking \
+	--enable-shared \
+	--disable-static \
+	--disable-fast-install \
+	--disable-libtool-lock \
+	--disable-werror \
+	--disable-rpath \
+	--disable-doc \
+	--disable-api-docs \
+	--disable-apparmor \
+	--$(call ptx/endis, PTXCONF_LXC_GNUTLS)-gnutls \
+	--$(call ptx/endis, PTXCONF_LXC_SELINUX)-selinux \
+	--$(call ptx/endis, PTXCONF_LXC_SECCOMP)-seccomp \
+	--enable-capabilities \
+	--enable-examples \
+	--disable-mutex-debugging \
+	--disable-bash \
+	--enable-tools \
+	--enable-commands \
+	--$(call ptx/endis, PTXCONF_LXC_TEST_TOOLS)-tests \
+	--enable-configpath-log \
+	--disable-pam \
+	--with-init-script=systemd \
+	--with-systemdsystemunitdir=/usr/lib/systemd/system/ \
+	--with-distro=unknown \
+	--with-usernic-conf \
+	--with-usernic-db \
+	--with-log-path=/var/log \
+	--with-pamdir=none
+
+LXC_APPLICATIONS := \
+	copy \
+	cgroup \
+	create \
+	snapshot \
+	freeze \
+	config \
+	monitor \
+	unfreeze \
+	device \
+	destroy \
+	ls \
+	console \
+	wait \
+	execute \
+	update-config \
+	stop \
+	checkconfig \
+	checkpoint \
+	usernsexec \
+	attach \
+	start \
+	top \
+	info \
+	autostart \
+	unshare
+
+ifdef PTXCONF_LXC_TEST_TOOLS
+LXC_TEST_TOOLS := \
+	containertests \
+	may-control \
+	console \
+	locktests \
+	no-new-privs \
+	snapshot \
+	concurrent \
+	shutdowntest \
+	cgpath \
+	get_item \
+	criu-check-feature \
+	apparmor \
+	share-ns \
+	saveconfig \
+	clonetest \
+	createtest \
+	createconfig \
+	shortlived \
+	rootfs \
+	getkeys \
+	console-log \
+	attach \
+	reboot \
+	automount \
+	api-reboot \
+	destroytest \
+	startone \
+	raw-clone \
+	parse-config-file \
+	config-jump-table \
+	autostart \
+	state-server \
+	list \
+	device-add-remove \
+	cloneconfig \
+	utils \
+	lxcpath
+endif
+
+# ----------------------------------------------------------------------------
+# Target-Install
+# ----------------------------------------------------------------------------
+
+$(STATEDIR)/lxc.targetinstall:
+	@$(call targetinfo)
+
+	@$(call install_init, lxc)
+	@$(call install_fixup, lxc, PRIORITY, optional)
+	@$(call install_fixup, lxc, SECTION, base)
+	@$(call install_fixup, lxc, AUTHOR, "Michael Grzeschik <mgr@pengutronix.de>")
+	@$(call install_fixup, lxc, DESCRIPTION, missing)
+
+	@$(call install_lib, lxc, 0, 0, 0644, liblxc);
+
+	@$(call install_copy, lxc, 0, 0, 0644, /var/lib/lxc);
+	@$(call install_copy, lxc, 0, 0, 0644, /usr/lib/lxc/rootfs);
+
+	@$(call install_tree, lxc, 0, 0, -, /usr/share/lxc/config);
+
+ifdef PTXCONF_LXC_SELINUX
+	@$(call install_tree, lxc, 0, 0, -, /usr/share/lxc/selinux);
+endif
+
+	@$(call install_alternative, lxc, 0, 0, 0644, /etc/lxc/default.conf);
+	@$(call install_alternative, lxc, 0, 0, 0644, /etc/default/lxc-net);
+
+	@$(call install_copy, lxc, 0, 0, 0644, -, /etc/default/lxc)
+
+	@$(foreach app, $(LXC_APPLICATIONS), \
+		$(call install_copy, lxc, 0, 0, 0755, $(LXC_PKGDIR)/usr/bin/lxc-$(app), \
+			/usr/bin/lxc-$(app))$(ptx/nl))
+
+	@$(foreach app, \
+		containers \
+		net \
+		apparmor-load \
+		user-nic \
+		monitord, \
+		$(call install_copy, lxc, 0, 0, 0755, -, \
+			/usr/libexec/lxc/lxc-$(app))$(ptx/nl))
+
+# This is needed by /usr/libexec/lxc/lxc-net
+	@$(call install_copy, lxc, 0, 0, 0755, \
+		$(PTXDIST_SYSROOT_TOOLCHAIN)/usr/bin/getent, /usr/bin/getent)
+
+ifdef PTXCONF_LXC_TEST_TOOLS
+	@$(foreach app, $(LXC_TEST_TOOLS), \
+		$(call install_copy, lxc, 0, 0, 0755, $(LXC_PKGDIR)/usr/bin/lxc-test-$(app), \
+			/usr/bin/lxc-tests/$(app))$(ptx/nl))
+endif
+
+ifdef PTXCONF_LXC_SYSTEMD_UNIT
+	@$(foreach rule, \
+		lxc.service \
+		lxc@.service \
+		lxc-net.service, \
+		$(call install_copy, lxc, 0, 0, 0644, -, \
+			/usr/lib/systemd/system/$(rule))$(ptx/nl))
+
+	@$(foreach rule, \
+		lxc.service \
+		lxc@.service \
+		lxc-net.service, \
+		$(call install_link, lxc, ../$(rule), \
+			/usr/lib/systemd/system/multi-user.target.wants/$(rule))$(ptx/nl))
+endif
+
+	@$(call install_finish, lxc)
+
+	@$(call touch)
+
+# vim: syntax=make
-- 
2.18.0


_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [ptxdist] [PATCH v3] lxc: add new package
  2018-08-30  7:35 [ptxdist] [PATCH v3] lxc: add new package Michael Grzeschik
@ 2018-08-30 14:10 ` Michael Olbrich
  2018-08-31  9:38   ` Michael Grzeschik
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Olbrich @ 2018-08-30 14:10 UTC (permalink / raw)
  To: ptxdist

On Thu, Aug 30, 2018 at 09:35:50AM +0200, Michael Grzeschik wrote:
> This patch adds support for the lxc container system. We install the
> userspace lib and application.
> 
> To make sure all necessary kernel options are enabled use:
> $ CONFIG=/path/to/kernelconfig lxc-checkconfig
> 
> Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
> ---
> v1 -> v2: - prefixed used variables with PTXCONF_ :
>             LXC_TEMPLATES, LXC_HOOKS, LXC_SELINUX
>           - fixed used variable LXC_SYSTEMD_UNIT
>           - added missing dir /usr/lib/lxc/rootfs
>           - added dependency to busybox tools when using templates
>           - added dependency to iptables when starting systemd.service
>           - removed some extra commented unused options
>           - removed hooks
>           - only installing busybox template
>           - added dependency to busybox_umount
> 
> v2 -> v3: - removed the busybox template and its dependencies
>           - added patch for dnsmasq to start without dns support
>           - added install stage to include getent from toolchain
> 
>  ...te-new-lxcbr0-subnet-at-startup-time.patch | 134 +++++++++++
>  ...-net-start-dnsmasq-without-dnsserver.patch |  24 ++
>  patches/lxc-3.0.1/series                      |   2 +
>  projectroot/etc/default/lxc-net               |   7 +
>  projectroot/etc/lxc/default.conf              |   4 +
>  rules/lxc.in                                  |  61 +++++
>  rules/lxc.make                                | 211 ++++++++++++++++++
>  7 files changed, 443 insertions(+)
>  create mode 100644 patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
>  create mode 100644 patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch
>  create mode 100644 patches/lxc-3.0.1/series
>  create mode 100644 projectroot/etc/default/lxc-net
>  create mode 100644 projectroot/etc/lxc/default.conf
>  create mode 100644 rules/lxc.in
>  create mode 100644 rules/lxc.make
> 
> diff --git a/patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch b/patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
> new file mode 100644
> index 000000000..a1fddbea4
> --- /dev/null
> +++ b/patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
> @@ -0,0 +1,134 @@
> +From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber@ubuntu.com>
> +Date: Tue, 3 Nov 2015 11:42:58 -0500
> +Subject: [PATCH] Allocate new lxcbr0 subnet at startup time
> +
> +---
> + config/init/common/lxc-net.in | 100 ++++++++++++++++++++++++++++++++++++++----
> + 1 file changed, 91 insertions(+), 9 deletions(-)
> +
> +diff --git a/config/init/common/lxc-net.in b/config/init/common/lxc-net.in
> +index df9f1181d761..6837be1969c2 100644
> +--- a/config/init/common/lxc-net.in
> ++++ b/config/init/common/lxc-net.in
> +@@ -24,6 +24,85 @@ LXC_IPV6_MASK=""
> + LXC_IPV6_NETWORK=""
> + LXC_IPV6_NAT="false"
> + 
> ++write_lxc_net()
> ++{
> ++    local i=$1
> ++    cat >>  $distrosysconfdir/lxc-net << EOF
> ++# Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your
> ++# containers.  Set to "false" if you'll use virbr0 or another existing
> ++# bridge, or mavlan to your host's NIC.
> ++USE_LXC_BRIDGE="true"
> ++
> ++# If you change the LXC_BRIDGE to something other than lxcbr0, then
> ++# you will also need to update your /etc/lxc/default.conf as well as the
> ++# configuration (/var/lib/lxc/<container>/config) for any containers
> ++# already created using the default config to reflect the new bridge
> ++# name.
> ++# If you have the dnsmasq daemon installed, you'll also have to update
> ++# /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.
> ++LXC_BRIDGE="lxcbr0"
> ++LXC_ADDR="10.0.$i.1"
> ++LXC_NETMASK="255.255.255.0"
> ++LXC_NETWORK="10.0.$i.0/24"
> ++LXC_DHCP_RANGE="10.0.$i.2,10.0.$i.254"
> ++LXC_DHCP_MAX="253"
> ++# Uncomment the next line if you'd like to use a conf-file for the lxcbr0
> ++# dnsmasq.  For instance, you can use 'dhcp-host=mail1,10.0.3.100' to have
> ++# container 'mail1' always get ip address 10.0.3.100.
> ++#LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf
> ++
> ++# Uncomment the next line if you want lxcbr0's dnsmasq to resolve the .lxc
> ++# domain.  You can then add "server=/lxc/10.0.$i.1' (or your actual \$LXC_ADDR)
> ++# to your system dnsmasq configuration file (normally /etc/dnsmasq.conf,
> ++# or /etc/NetworkManager/dnsmasq.d/lxc.conf on systems that use NetworkManager).
> ++# Once these changes are made, restart the lxc-net and network-manager services.
> ++# 'container1.lxc' will then resolve on your host.
> ++#LXC_DOMAIN="lxc"
> ++EOF
> ++}
> ++
> ++configure_lxcbr0()
> ++{
> ++    local i=3
> ++    cat >  $distrosysconfdir/lxc-net << EOF
> ++# This file is auto-generated by lxc.postinst if it does not
> ++# exist.  Customizations will not be overridden.
> ++EOF
> ++    # if lxcbr0 exists, keep using the same network
> ++    if  ip addr show lxcbr0 > /dev/null 2>&1 ; then
> ++        i=`ip addr show lxcbr0 | grep "inet\>" | awk '{ print $2 }' | awk -F. '{ print $3 }'`
> ++        write_lxc_net $i
> ++        return
> ++    fi
> ++    # if no lxcbr0, find an open 10.0.a.0 network
> ++    for l in `ip addr show | grep "inet\>" |awk '{ print $2 }' | grep '^10\.0\.' | sort -n`; do
> ++            j=`echo $l | awk -F. '{ print $3 }'`
> ++            if [ $j -gt $i ]; then
> ++                write_lxc_net $i
> ++                return
> ++            fi
> ++            i=$((j+1))
> ++    done
> ++    if [ $i -ne 254 ]; then
> ++        write_lxc_net $i
> ++    fi
> ++}
> ++
> ++update_lxcnet_config()
> ++{
> ++    local i=3
> ++    # if lxcbr0 exists, keep using the same network
> ++    if  ip addr show lxcbr0 > /dev/null 2>&1 ; then
> ++        return
> ++    fi
> ++    # our LXC_NET conflicts with an existing interface.  Probably first
> ++    # run after system install with package pre-install.  Find a new subnet
> ++    configure_lxcbr0
> ++
> ++    # and re-load the newly created config
> ++    [ ! -f $distrosysconfdir/lxc-net ] || . $distrosysconfdir/lxc-net
> ++}
> ++
> + [ ! -f $distrosysconfdir/lxc ] || . $distrosysconfdir/lxc
> + 
> + use_iptables_lock="-w"
> +@@ -51,7 +130,19 @@ _ifup() {
> +     ip link set dev ${LXC_BRIDGE} up
> + }
> + 
> ++cleanup() {
> ++    set +e
> ++    if [ "$FAILED" = "1" ]; then
> ++        echo "Failed to setup lxc-net." >&2
> ++        stop force
> ++        exit 1
> ++    fi
> ++}
> ++
> + start() {
> ++
> ++    [ ! -f $distrosysconfdir/lxc-net ] && update_lxcnet_config

This patch looks wrong. It only does something new if the config does not
exist, right? That should never happen for embedded.

Why is this patch needed?

> ++
> +     [ "x$USE_LXC_BRIDGE" = "xtrue" ] || { exit 0; }
> + 
> +     [ ! -f "${varrun}/network_up" ] || { echo "lxc-net is already running"; exit 1; }
> +@@ -62,15 +153,6 @@ start() {
> + 
> +     FAILED=1
> + 
> +-    cleanup() {
> +-        set +e
> +-        if [ "$FAILED" = "1" ]; then
> +-            echo "Failed to setup lxc-net." >&2
> +-            stop force
> +-            exit 1
> +-        fi
> +-    }
> +-
> +     trap cleanup EXIT HUP INT TERM
> +     set -e
> + 
> diff --git a/patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch b/patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch
> new file mode 100644
> index 000000000..a8cbf3fe2
> --- /dev/null
> +++ b/patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch
> @@ -0,0 +1,24 @@
> +From: Michael Grzeschik <m.grzeschik@pengutronix.de>
> +Date: Wed, 29 Aug 2018 16:50:50 +0200
> +Subject: [PATCH] lxc-net: start dnsmasq without dnsserver
> +
> +So it does not conflict with the systems dnsmasq systemd-service.
> +
> +Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
> +---
> + config/init/common/lxc-net.in | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/config/init/common/lxc-net.in b/config/init/common/lxc-net.in
> +index 6837be1969c2..84128d59486b 100644
> +--- a/config/init/common/lxc-net.in
> ++++ b/config/init/common/lxc-net.in
> +@@ -221,7 +221,7 @@ start() {
> +             --dhcp-lease-max=${LXC_DHCP_MAX} --dhcp-no-override \
> +             --except-interface=lo --interface=${LXC_BRIDGE} \
> +             --dhcp-leasefile="${varlib}"/misc/dnsmasq.${LXC_BRIDGE}.leases \
> +-            --dhcp-authoritative $LXC_IPV6_ARG || cleanup
> ++            --dhcp-authoritative $LXC_IPV6_ARG --port=0 || cleanup

I think this this should be --bind-interfaces instead. Otherwise the
services in the container will have no DNS right?

> + 
> +     touch "${varrun}"/network_up
> +     FAILED=0
> diff --git a/patches/lxc-3.0.1/series b/patches/lxc-3.0.1/series
> new file mode 100644
> index 000000000..eec508771
> --- /dev/null
> +++ b/patches/lxc-3.0.1/series
> @@ -0,0 +1,2 @@
> +0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
> +0002-lxc-net-start-dnsmasq-without-dnsserver.patch
> diff --git a/projectroot/etc/default/lxc-net b/projectroot/etc/default/lxc-net
> new file mode 100644
> index 000000000..054a09a0a
> --- /dev/null
> +++ b/projectroot/etc/default/lxc-net
> @@ -0,0 +1,7 @@
> +USE_LXC_BRIDGE="true"
> +LXC_BRIDGE="lxcbr0"
> +LXC_ADDR="192.168.1.1"
> +LXC_NETMASK="255.255.255.0"
> +LXC_NETWORK="192.168.1.0/24"
> +LXC_DHCP_RANGE="192.168.1.2,192.168.1.254"
> +LXC_DHCP_MAX="253"
> diff --git a/projectroot/etc/lxc/default.conf b/projectroot/etc/lxc/default.conf
> new file mode 100644
> index 000000000..e7af1e6ae
> --- /dev/null
> +++ b/projectroot/etc/lxc/default.conf
> @@ -0,0 +1,4 @@
> +lxc.net.0.type = veth
> +lxc.net.0.link = lxcbr0
> +lxc.net.0.flags = up
> +lxc.net.0.hwaddr = 00:16:3e:11:22:34
> diff --git a/rules/lxc.in b/rules/lxc.in
> new file mode 100644
> index 000000000..fde637b0d
> --- /dev/null
> +++ b/rules/lxc.in
> @@ -0,0 +1,61 @@
> +## SECTION=system_libraries
> +
> +menuconfig LXC
> +	bool
> +	prompt "lxc                           "
> +	select GNUTLS			if LXC_GNUTLS
> +	select LIBSELINUX		if LXC_SELINUX
> +	select LIBSECCOMP		if LXC_SECCOMP
> +	select BUSYBOX_FEATURE_SH_MATH	if LXC_SYSTEMD_UNIT
> +	select SYSTEMD			if LXC_SYSTEMD_UNIT
> +	select DNSMASQ			if LXC_SYSTEMD_UNIT
> +	select IPTABLES			if LXC_SYSTEMD_UNIT
> +	select IPTABLES_IPV4		if LXC_SYSTEMD_UNIT
> +	select IPTABLES_IPV6		if LXC_SYSTEMD_UNIT
> +	select IPTABLES_IPV6_SYSTEMD_UNIT	if LXC_SYSTEMD_UNIT
> +	select IPTABLES_IPV4_SYSTEMD_UNIT	if LXC_SYSTEMD_UNIT

Why are the units needed?

> +	select IPTABLES_INSTALL_TOOLS		if LXC_SYSTEMD_UNIT
> +	help
> +	  LXC is a userspace interface for the Linux kernel containment
> +	  features. Through a powerful API and simple tools, it lets
> +	  Linux users easily create and manage system or application
> +	  containers.
> +
> +if LXC
> +
> +config LXC_GNUTLS
> +	bool
> +	prompt "LXC gnutls support"

> +	default n

This is already the default. Remove it (everywhere).

> +	help
> +	  Turn on to enable gnutls support in lxc

What is gnutls used for?

> +
> +config LXC_SELINUX
> +	bool
> +	prompt "LXC selinux support"
> +	default n
> +	help
> +	  Turn on to enable selinux support in lxc

Use GLOBAL_SELINUX instead.

> +
> +config LXC_SECCOMP
> +	bool
> +	prompt "LXC seccomp support"
> +	default n
> +	help
> +	  Turn on to enable seccomp support in lxc

LXC is a security feature. I think seccomp should always be enabled.

> +
> +config LXC_SYSTEMD_UNIT
> +	bool
> +	prompt "LXC systemd unit"
> +	default INITMETHOD_SYSTEMD
> +	help
> +	  Turn on to install systemd unit for lxc
> +
> +config LXC_TEST_TOOLS
> +	bool
> +	prompt "LXC test applications"
> +	default n
> +	help
> +	  Turn on to enable building the lxc test applications
> +
> +endif
> diff --git a/rules/lxc.make b/rules/lxc.make
> new file mode 100644
> index 000000000..1eadc6d96
> --- /dev/null
> +++ b/rules/lxc.make
> @@ -0,0 +1,211 @@
> +# -*-makefile-*-
> +#
> +# Copyright (C) 2018 by Michael Grzeschik <mgr@pengutronix.de>
> +#
> +# See CREDITS for details about who has contributed to this project.
> +#
> +# For further information about the PTXdist project and license conditions
> +# see the README file.
> +#
> +
> +#
> +# We provide this package
> +#
> +PACKAGES-$(PTXCONF_LXC) += lxc
> +
> +#
> +# Paths and names
> +#
> +LXC_VERSION	:= 3.0.1
> +LXC_MD5		:= 8eb396dde561e5832ba2d505513a1935
> +LXC		:= lxc-$(LXC_VERSION)
> +LXC_SUFFIX	:= tar.gz
> +LXC_URL		:= https://linuxcontainers.org/downloads/lxc/$(LXC).$(LXC_SUFFIX)
> +LXC_SOURCE	:= $(SRCDIR)/$(LXC).$(LXC_SUFFIX)
> +LXC_DIR		:= $(BUILDDIR)/$(LXC)
> +LXC_LICENSE	:= unknown
> +
> +# ----------------------------------------------------------------------------
> +# Prepare
> +# ----------------------------------------------------------------------------
> +
> +#LXC_CONF_ENV	:= $(CROSS_ENV)
> +
> +#
> +# autoconf
> +#
> +LXC_CONF_TOOL	:= autoconf
> +LXC_CONF_OPT	:= \
> +	$(CROSS_AUTOCONF_USR) \
> +	--enable-silent-rules \
> +	--enable-dependency-tracking \
> +	--enable-shared \
> +	--disable-static \
> +	--disable-fast-install \
> +	--disable-libtool-lock \
> +	--disable-werror \
> +	--disable-rpath \
> +	--disable-doc \
> +	--disable-api-docs \
> +	--disable-apparmor \
> +	--$(call ptx/endis, PTXCONF_LXC_GNUTLS)-gnutls \
> +	--$(call ptx/endis, PTXCONF_LXC_SELINUX)-selinux \
> +	--$(call ptx/endis, PTXCONF_LXC_SECCOMP)-seccomp \
> +	--enable-capabilities \
> +	--enable-examples \

why?

> +	--disable-mutex-debugging \
> +	--disable-bash \
> +	--enable-tools \
> +	--enable-commands \
> +	--$(call ptx/endis, PTXCONF_LXC_TEST_TOOLS)-tests \
> +	--enable-configpath-log \
> +	--disable-pam \
> +	--with-init-script=systemd \
> +	--with-systemdsystemunitdir=/usr/lib/systemd/system/ \
> +	--with-distro=unknown \
> +	--with-usernic-conf \
> +	--with-usernic-db \
> +	--with-log-path=/var/log \
> +	--with-pamdir=none
> +
> +LXC_APPLICATIONS := \
> +	copy \
> +	cgroup \
> +	create \
> +	snapshot \
> +	freeze \
> +	config \
> +	monitor \
> +	unfreeze \
> +	device \
> +	destroy \
> +	ls \
> +	console \
> +	wait \
> +	execute \
> +	update-config \
> +	stop \
> +	checkconfig \
> +	checkpoint \
> +	usernsexec \
> +	attach \
> +	start \
> +	top \
> +	info \
> +	autostart \
> +	unshare
> +
> +ifdef PTXCONF_LXC_TEST_TOOLS
> +LXC_TEST_TOOLS := \
> +	containertests \
> +	may-control \
> +	console \
> +	locktests \
> +	no-new-privs \
> +	snapshot \
> +	concurrent \
> +	shutdowntest \
> +	cgpath \
> +	get_item \
> +	criu-check-feature \
> +	apparmor \
> +	share-ns \
> +	saveconfig \
> +	clonetest \
> +	createtest \
> +	createconfig \
> +	shortlived \
> +	rootfs \
> +	getkeys \
> +	console-log \
> +	attach \
> +	reboot \
> +	automount \
> +	api-reboot \
> +	destroytest \
> +	startone \
> +	raw-clone \
> +	parse-config-file \
> +	config-jump-table \
> +	autostart \
> +	state-server \
> +	list \
> +	device-add-remove \
> +	cloneconfig \
> +	utils \
> +	lxcpath
> +endif
> +
> +# ----------------------------------------------------------------------------
> +# Target-Install
> +# ----------------------------------------------------------------------------
> +
> +$(STATEDIR)/lxc.targetinstall:
> +	@$(call targetinfo)
> +
> +	@$(call install_init, lxc)
> +	@$(call install_fixup, lxc, PRIORITY, optional)
> +	@$(call install_fixup, lxc, SECTION, base)
> +	@$(call install_fixup, lxc, AUTHOR, "Michael Grzeschik <mgr@pengutronix.de>")
> +	@$(call install_fixup, lxc, DESCRIPTION, missing)
> +
> +	@$(call install_lib, lxc, 0, 0, 0644, liblxc);
> +
> +	@$(call install_copy, lxc, 0, 0, 0644, /var/lib/lxc);
> +	@$(call install_copy, lxc, 0, 0, 0644, /usr/lib/lxc/rootfs);
> +
> +	@$(call install_tree, lxc, 0, 0, -, /usr/share/lxc/config);
> +
> +ifdef PTXCONF_LXC_SELINUX
> +	@$(call install_tree, lxc, 0, 0, -, /usr/share/lxc/selinux);
> +endif
> +
> +	@$(call install_alternative, lxc, 0, 0, 0644, /etc/lxc/default.conf);
> +	@$(call install_alternative, lxc, 0, 0, 0644, /etc/default/lxc-net);
> +
> +	@$(call install_copy, lxc, 0, 0, 0644, -, /etc/default/lxc)
> +
> +	@$(foreach app, $(LXC_APPLICATIONS), \
> +		$(call install_copy, lxc, 0, 0, 0755, $(LXC_PKGDIR)/usr/bin/lxc-$(app), \
> +			/usr/bin/lxc-$(app))$(ptx/nl))
> +
> +	@$(foreach app, \
> +		containers \
> +		net \
> +		apparmor-load \
> +		user-nic \
> +		monitord, \

define a variable above.

> +		$(call install_copy, lxc, 0, 0, 0755, -, \
> +			/usr/libexec/lxc/lxc-$(app))$(ptx/nl))
> +
> +# This is needed by /usr/libexec/lxc/lxc-net
> +	@$(call install_copy, lxc, 0, 0, 0755, \
> +		$(PTXDIST_SYSROOT_TOOLCHAIN)/usr/bin/getent, /usr/bin/getent)

No. Create a option for glibc and select it.

> +
> +ifdef PTXCONF_LXC_TEST_TOOLS
> +	@$(foreach app, $(LXC_TEST_TOOLS), \
> +		$(call install_copy, lxc, 0, 0, 0755, $(LXC_PKGDIR)/usr/bin/lxc-test-$(app), \
> +			/usr/bin/lxc-tests/$(app))$(ptx/nl))
> +endif
> +
> +ifdef PTXCONF_LXC_SYSTEMD_UNIT
> +	@$(foreach rule, \
> +		lxc.service \
> +		lxc@.service \
> +		lxc-net.service, \
> +		$(call install_copy, lxc, 0, 0, 0644, -, \
> +			/usr/lib/systemd/system/$(rule))$(ptx/nl))
> +
> +	@$(foreach rule, \
> +		lxc.service \
> +		lxc@.service \
> +		lxc-net.service, \
> +		$(call install_link, lxc, ../$(rule), \
> +			/usr/lib/systemd/system/multi-user.target.wants/$(rule))$(ptx/nl))

don't loop for 3 files.

Michael

> +endif
> +
> +	@$(call install_finish, lxc)
> +
> +	@$(call touch)
> +
> +# vim: syntax=make
> -- 
> 2.18.0
> 
> 
> _______________________________________________
> ptxdist mailing list
> ptxdist@pengutronix.de

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [ptxdist] [PATCH v3] lxc: add new package
  2018-08-30 14:10 ` Michael Olbrich
@ 2018-08-31  9:38   ` Michael Grzeschik
  0 siblings, 0 replies; 3+ messages in thread
From: Michael Grzeschik @ 2018-08-31  9:38 UTC (permalink / raw)
  To: ptxdist


[-- Attachment #1.1: Type: text/plain, Size: 20340 bytes --]

On Thu, Aug 30, 2018 at 04:10:35PM +0200, Michael Olbrich wrote:
> On Thu, Aug 30, 2018 at 09:35:50AM +0200, Michael Grzeschik wrote:
> > This patch adds support for the lxc container system. We install the
> > userspace lib and application.
> > 
> > To make sure all necessary kernel options are enabled use:
> > $ CONFIG=/path/to/kernelconfig lxc-checkconfig
> > 
> > Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
> > ---
> > v1 -> v2: - prefixed used variables with PTXCONF_ :
> >             LXC_TEMPLATES, LXC_HOOKS, LXC_SELINUX
> >           - fixed used variable LXC_SYSTEMD_UNIT
> >           - added missing dir /usr/lib/lxc/rootfs
> >           - added dependency to busybox tools when using templates
> >           - added dependency to iptables when starting systemd.service
> >           - removed some extra commented unused options
> >           - removed hooks
> >           - only installing busybox template
> >           - added dependency to busybox_umount
> > 
> > v2 -> v3: - removed the busybox template and its dependencies
> >           - added patch for dnsmasq to start without dns support
> >           - added install stage to include getent from toolchain
> > 
> >  ...te-new-lxcbr0-subnet-at-startup-time.patch | 134 +++++++++++
> >  ...-net-start-dnsmasq-without-dnsserver.patch |  24 ++
> >  patches/lxc-3.0.1/series                      |   2 +
> >  projectroot/etc/default/lxc-net               |   7 +
> >  projectroot/etc/lxc/default.conf              |   4 +
> >  rules/lxc.in                                  |  61 +++++
> >  rules/lxc.make                                | 211 ++++++++++++++++++
> >  7 files changed, 443 insertions(+)
> >  create mode 100644 patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
> >  create mode 100644 patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch
> >  create mode 100644 patches/lxc-3.0.1/series
> >  create mode 100644 projectroot/etc/default/lxc-net
> >  create mode 100644 projectroot/etc/lxc/default.conf
> >  create mode 100644 rules/lxc.in
> >  create mode 100644 rules/lxc.make
> > 
> > diff --git a/patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch b/patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
> > new file mode 100644
> > index 000000000..a1fddbea4
> > --- /dev/null
> > +++ b/patches/lxc-3.0.1/0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
> > @@ -0,0 +1,134 @@
> > +From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber@ubuntu.com>
> > +Date: Tue, 3 Nov 2015 11:42:58 -0500
> > +Subject: [PATCH] Allocate new lxcbr0 subnet at startup time
> > +
> > +---
> > + config/init/common/lxc-net.in | 100 ++++++++++++++++++++++++++++++++++++++----
> > + 1 file changed, 91 insertions(+), 9 deletions(-)
> > +
> > +diff --git a/config/init/common/lxc-net.in b/config/init/common/lxc-net.in
> > +index df9f1181d761..6837be1969c2 100644
> > +--- a/config/init/common/lxc-net.in
> > ++++ b/config/init/common/lxc-net.in
> > +@@ -24,6 +24,85 @@ LXC_IPV6_MASK=""
> > + LXC_IPV6_NETWORK=""
> > + LXC_IPV6_NAT="false"
> > + 
> > ++write_lxc_net()
> > ++{
> > ++    local i=$1
> > ++    cat >>  $distrosysconfdir/lxc-net << EOF
> > ++# Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your
> > ++# containers.  Set to "false" if you'll use virbr0 or another existing
> > ++# bridge, or mavlan to your host's NIC.
> > ++USE_LXC_BRIDGE="true"
> > ++
> > ++# If you change the LXC_BRIDGE to something other than lxcbr0, then
> > ++# you will also need to update your /etc/lxc/default.conf as well as the
> > ++# configuration (/var/lib/lxc/<container>/config) for any containers
> > ++# already created using the default config to reflect the new bridge
> > ++# name.
> > ++# If you have the dnsmasq daemon installed, you'll also have to update
> > ++# /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.
> > ++LXC_BRIDGE="lxcbr0"
> > ++LXC_ADDR="10.0.$i.1"
> > ++LXC_NETMASK="255.255.255.0"
> > ++LXC_NETWORK="10.0.$i.0/24"
> > ++LXC_DHCP_RANGE="10.0.$i.2,10.0.$i.254"
> > ++LXC_DHCP_MAX="253"
> > ++# Uncomment the next line if you'd like to use a conf-file for the lxcbr0
> > ++# dnsmasq.  For instance, you can use 'dhcp-host=mail1,10.0.3.100' to have
> > ++# container 'mail1' always get ip address 10.0.3.100.
> > ++#LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf
> > ++
> > ++# Uncomment the next line if you want lxcbr0's dnsmasq to resolve the .lxc
> > ++# domain.  You can then add "server=/lxc/10.0.$i.1' (or your actual \$LXC_ADDR)
> > ++# to your system dnsmasq configuration file (normally /etc/dnsmasq.conf,
> > ++# or /etc/NetworkManager/dnsmasq.d/lxc.conf on systems that use NetworkManager).
> > ++# Once these changes are made, restart the lxc-net and network-manager services.
> > ++# 'container1.lxc' will then resolve on your host.
> > ++#LXC_DOMAIN="lxc"
> > ++EOF
> > ++}
> > ++
> > ++configure_lxcbr0()
> > ++{
> > ++    local i=3
> > ++    cat >  $distrosysconfdir/lxc-net << EOF
> > ++# This file is auto-generated by lxc.postinst if it does not
> > ++# exist.  Customizations will not be overridden.
> > ++EOF
> > ++    # if lxcbr0 exists, keep using the same network
> > ++    if  ip addr show lxcbr0 > /dev/null 2>&1 ; then
> > ++        i=`ip addr show lxcbr0 | grep "inet\>" | awk '{ print $2 }' | awk -F. '{ print $3 }'`
> > ++        write_lxc_net $i
> > ++        return
> > ++    fi
> > ++    # if no lxcbr0, find an open 10.0.a.0 network
> > ++    for l in `ip addr show | grep "inet\>" |awk '{ print $2 }' | grep '^10\.0\.' | sort -n`; do
> > ++            j=`echo $l | awk -F. '{ print $3 }'`
> > ++            if [ $j -gt $i ]; then
> > ++                write_lxc_net $i
> > ++                return
> > ++            fi
> > ++            i=$((j+1))
> > ++    done
> > ++    if [ $i -ne 254 ]; then
> > ++        write_lxc_net $i
> > ++    fi
> > ++}
> > ++
> > ++update_lxcnet_config()
> > ++{
> > ++    local i=3
> > ++    # if lxcbr0 exists, keep using the same network
> > ++    if  ip addr show lxcbr0 > /dev/null 2>&1 ; then
> > ++        return
> > ++    fi
> > ++    # our LXC_NET conflicts with an existing interface.  Probably first
> > ++    # run after system install with package pre-install.  Find a new subnet
> > ++    configure_lxcbr0
> > ++
> > ++    # and re-load the newly created config
> > ++    [ ! -f $distrosysconfdir/lxc-net ] || . $distrosysconfdir/lxc-net
> > ++}
> > ++
> > + [ ! -f $distrosysconfdir/lxc ] || . $distrosysconfdir/lxc
> > + 
> > + use_iptables_lock="-w"
> > +@@ -51,7 +130,19 @@ _ifup() {
> > +     ip link set dev ${LXC_BRIDGE} up
> > + }
> > + 
> > ++cleanup() {
> > ++    set +e
> > ++    if [ "$FAILED" = "1" ]; then
> > ++        echo "Failed to setup lxc-net." >&2
> > ++        stop force
> > ++        exit 1
> > ++    fi
> > ++}
> > ++
> > + start() {
> > ++
> > ++    [ ! -f $distrosysconfdir/lxc-net ] && update_lxcnet_config
> 
> This patch looks wrong. It only does something new if the config does not
> exist, right? That should never happen for embedded.
> 
> Why is this patch needed?

Right, the patch is not needed for embedded.

> > ++
> > +     [ "x$USE_LXC_BRIDGE" = "xtrue" ] || { exit 0; }
> > + 
> > +     [ ! -f "${varrun}/network_up" ] || { echo "lxc-net is already running"; exit 1; }
> > +@@ -62,15 +153,6 @@ start() {
> > + 
> > +     FAILED=1
> > + 
> > +-    cleanup() {
> > +-        set +e
> > +-        if [ "$FAILED" = "1" ]; then
> > +-            echo "Failed to setup lxc-net." >&2
> > +-            stop force
> > +-            exit 1
> > +-        fi
> > +-    }
> > +-
> > +     trap cleanup EXIT HUP INT TERM
> > +     set -e
> > + 
> > diff --git a/patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch b/patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch
> > new file mode 100644
> > index 000000000..a8cbf3fe2
> > --- /dev/null
> > +++ b/patches/lxc-3.0.1/0002-lxc-net-start-dnsmasq-without-dnsserver.patch
> > @@ -0,0 +1,24 @@
> > +From: Michael Grzeschik <m.grzeschik@pengutronix.de>
> > +Date: Wed, 29 Aug 2018 16:50:50 +0200
> > +Subject: [PATCH] lxc-net: start dnsmasq without dnsserver
> > +
> > +So it does not conflict with the systems dnsmasq systemd-service.
> > +
> > +Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
> > +---
> > + config/init/common/lxc-net.in | 2 +-
> > + 1 file changed, 1 insertion(+), 1 deletion(-)
> > +
> > +diff --git a/config/init/common/lxc-net.in b/config/init/common/lxc-net.in
> > +index 6837be1969c2..84128d59486b 100644
> > +--- a/config/init/common/lxc-net.in
> > ++++ b/config/init/common/lxc-net.in
> > +@@ -221,7 +221,7 @@ start() {
> > +             --dhcp-lease-max=${LXC_DHCP_MAX} --dhcp-no-override \
> > +             --except-interface=lo --interface=${LXC_BRIDGE} \
> > +             --dhcp-leasefile="${varlib}"/misc/dnsmasq.${LXC_BRIDGE}.leases \
> > +-            --dhcp-authoritative $LXC_IPV6_ARG || cleanup
> > ++            --dhcp-authoritative $LXC_IPV6_ARG --bind-interfaces || cleanup
> 
> I think this this should be --bind-interfaces instead. Otherwise the
> services in the container will have no DNS right?

Good Idea!

But this will only work if we also add it
to projectroot/usr/lib/systemd/system/dnasmasq.in

I can add a patch.

> > + 
> > +     touch "${varrun}"/network_up
> > +     FAILED=0
> > diff --git a/patches/lxc-3.0.1/series b/patches/lxc-3.0.1/series
> > new file mode 100644
> > index 000000000..eec508771
> > --- /dev/null
> > +++ b/patches/lxc-3.0.1/series
> > @@ -0,0 +1,2 @@
> > +0001-Allocate-new-lxcbr0-subnet-at-startup-time.patch
> > +0002-lxc-net-start-dnsmasq-without-dnsserver.patch
> > diff --git a/projectroot/etc/default/lxc-net b/projectroot/etc/default/lxc-net
> > new file mode 100644
> > index 000000000..054a09a0a
> > --- /dev/null
> > +++ b/projectroot/etc/default/lxc-net
> > @@ -0,0 +1,7 @@
> > +USE_LXC_BRIDGE="true"
> > +LXC_BRIDGE="lxcbr0"
> > +LXC_ADDR="192.168.1.1"
> > +LXC_NETMASK="255.255.255.0"
> > +LXC_NETWORK="192.168.1.0/24"
> > +LXC_DHCP_RANGE="192.168.1.2,192.168.1.254"
> > +LXC_DHCP_MAX="253"
> > diff --git a/projectroot/etc/lxc/default.conf b/projectroot/etc/lxc/default.conf
> > new file mode 100644
> > index 000000000..e7af1e6ae
> > --- /dev/null
> > +++ b/projectroot/etc/lxc/default.conf
> > @@ -0,0 +1,4 @@
> > +lxc.net.0.type = veth
> > +lxc.net.0.link = lxcbr0
> > +lxc.net.0.flags = up
> > +lxc.net.0.hwaddr = 00:16:3e:11:22:34
> > diff --git a/rules/lxc.in b/rules/lxc.in
> > new file mode 100644
> > index 000000000..fde637b0d
> > --- /dev/null
> > +++ b/rules/lxc.in
> > @@ -0,0 +1,61 @@
> > +## SECTION=system_libraries
> > +
> > +menuconfig LXC
> > +	bool
> > +	prompt "lxc                           "
> > +	select GNUTLS			if LXC_GNUTLS
> > +	select LIBSELINUX		if LXC_SELINUX
> > +	select LIBSECCOMP		if LXC_SECCOMP
> > +	select BUSYBOX_FEATURE_SH_MATH	if LXC_SYSTEMD_UNIT
> > +	select SYSTEMD			if LXC_SYSTEMD_UNIT
> > +	select DNSMASQ			if LXC_SYSTEMD_UNIT
> > +	select IPTABLES			if LXC_SYSTEMD_UNIT
> > +	select IPTABLES_IPV4		if LXC_SYSTEMD_UNIT
> > +	select IPTABLES_IPV6		if LXC_SYSTEMD_UNIT
> > +	select IPTABLES_IPV6_SYSTEMD_UNIT	if LXC_SYSTEMD_UNIT
> > +	select IPTABLES_IPV4_SYSTEMD_UNIT	if LXC_SYSTEMD_UNIT
> 
> Why are the units needed?

Right, they are not.

> > +	select IPTABLES_INSTALL_TOOLS		if LXC_SYSTEMD_UNIT
> > +	help
> > +	  LXC is a userspace interface for the Linux kernel containment
> > +	  features. Through a powerful API and simple tools, it lets
> > +	  Linux users easily create and manage system or application
> > +	  containers.
> > +
> > +if LXC
> > +
> > +config LXC_GNUTLS
> > +	bool
> > +	prompt "LXC gnutls support"
> 
> > +	default n
> 
> This is already the default. Remove it (everywhere).

ok

> > +	help
> > +	  Turn on to enable gnutls support in lxc
> 
> What is gnutls used for?

It is only used for checksum validation of the
templates. As the templates are already removed
I will drop that option aswell.

> > +
> > +config LXC_SELINUX
> > +	bool
> > +	prompt "LXC selinux support"
> > +	default n
> > +	help
> > +	  Turn on to enable selinux support in lxc
> 
> Use GLOBAL_SELINUX instead.

ok

> > +
> > +config LXC_SECCOMP
> > +	bool
> > +	prompt "LXC seccomp support"
> > +	default n
> > +	help
> > +	  Turn on to enable seccomp support in lxc
> 
> LXC is a security feature. I think seccomp should always be enabled.

ok

> > +
> > +config LXC_SYSTEMD_UNIT
> > +	bool
> > +	prompt "LXC systemd unit"
> > +	default INITMETHOD_SYSTEMD
> > +	help
> > +	  Turn on to install systemd unit for lxc
> > +
> > +config LXC_TEST_TOOLS
> > +	bool
> > +	prompt "LXC test applications"
> > +	default n
> > +	help
> > +	  Turn on to enable building the lxc test applications
> > +
> > +endif
> > diff --git a/rules/lxc.make b/rules/lxc.make
> > new file mode 100644
> > index 000000000..1eadc6d96
> > --- /dev/null
> > +++ b/rules/lxc.make
> > @@ -0,0 +1,211 @@
> > +# -*-makefile-*-
> > +#
> > +# Copyright (C) 2018 by Michael Grzeschik <mgr@pengutronix.de>
> > +#
> > +# See CREDITS for details about who has contributed to this project.
> > +#
> > +# For further information about the PTXdist project and license conditions
> > +# see the README file.
> > +#
> > +
> > +#
> > +# We provide this package
> > +#
> > +PACKAGES-$(PTXCONF_LXC) += lxc
> > +
> > +#
> > +# Paths and names
> > +#
> > +LXC_VERSION	:= 3.0.1
> > +LXC_MD5		:= 8eb396dde561e5832ba2d505513a1935
> > +LXC		:= lxc-$(LXC_VERSION)
> > +LXC_SUFFIX	:= tar.gz
> > +LXC_URL		:= https://linuxcontainers.org/downloads/lxc/$(LXC).$(LXC_SUFFIX)
> > +LXC_SOURCE	:= $(SRCDIR)/$(LXC).$(LXC_SUFFIX)
> > +LXC_DIR		:= $(BUILDDIR)/$(LXC)
> > +LXC_LICENSE	:= unknown
> > +
> > +# ----------------------------------------------------------------------------
> > +# Prepare
> > +# ----------------------------------------------------------------------------
> > +
> > +#LXC_CONF_ENV	:= $(CROSS_ENV)
> > +
> > +#
> > +# autoconf
> > +#
> > +LXC_CONF_TOOL	:= autoconf
> > +LXC_CONF_OPT	:= \
> > +	$(CROSS_AUTOCONF_USR) \
> > +	--enable-silent-rules \
> > +	--enable-dependency-tracking \
> > +	--enable-shared \
> > +	--disable-static \
> > +	--disable-fast-install \
> > +	--disable-libtool-lock \
> > +	--disable-werror \
> > +	--disable-rpath \
> > +	--disable-doc \
> > +	--disable-api-docs \
> > +	--disable-apparmor \
> > +	--$(call ptx/endis, PTXCONF_LXC_GNUTLS)-gnutls \
> > +	--$(call ptx/endis, PTXCONF_LXC_SELINUX)-selinux \
> > +	--$(call ptx/endis, PTXCONF_LXC_SECCOMP)-seccomp \
> > +	--enable-capabilities \
> > +	--enable-examples \
> 
> why?

will remove them

> > +	--disable-mutex-debugging \
> > +	--disable-bash \
> > +	--enable-tools \
> > +	--enable-commands \
> > +	--$(call ptx/endis, PTXCONF_LXC_TEST_TOOLS)-tests \
> > +	--enable-configpath-log \
> > +	--disable-pam \
> > +	--with-init-script=systemd \
> > +	--with-systemdsystemunitdir=/usr/lib/systemd/system/ \
> > +	--with-distro=unknown \
> > +	--with-usernic-conf \
> > +	--with-usernic-db \
> > +	--with-log-path=/var/log \
> > +	--with-pamdir=none
> > +
> > +LXC_APPLICATIONS := \
> > +	copy \
> > +	cgroup \
> > +	create \
> > +	snapshot \
> > +	freeze \
> > +	config \
> > +	monitor \
> > +	unfreeze \
> > +	device \
> > +	destroy \
> > +	ls \
> > +	console \
> > +	wait \
> > +	execute \
> > +	update-config \
> > +	stop \
> > +	checkconfig \
> > +	checkpoint \
> > +	usernsexec \
> > +	attach \
> > +	start \
> > +	top \
> > +	info \
> > +	autostart \
> > +	unshare
> > +
> > +ifdef PTXCONF_LXC_TEST_TOOLS
> > +LXC_TEST_TOOLS := \
> > +	containertests \
> > +	may-control \
> > +	console \
> > +	locktests \
> > +	no-new-privs \
> > +	snapshot \
> > +	concurrent \
> > +	shutdowntest \
> > +	cgpath \
> > +	get_item \
> > +	criu-check-feature \
> > +	apparmor \
> > +	share-ns \
> > +	saveconfig \
> > +	clonetest \
> > +	createtest \
> > +	createconfig \
> > +	shortlived \
> > +	rootfs \
> > +	getkeys \
> > +	console-log \
> > +	attach \
> > +	reboot \
> > +	automount \
> > +	api-reboot \
> > +	destroytest \
> > +	startone \
> > +	raw-clone \
> > +	parse-config-file \
> > +	config-jump-table \
> > +	autostart \
> > +	state-server \
> > +	list \
> > +	device-add-remove \
> > +	cloneconfig \
> > +	utils \
> > +	lxcpath
> > +endif
> > +
> > +# ----------------------------------------------------------------------------
> > +# Target-Install
> > +# ----------------------------------------------------------------------------
> > +
> > +$(STATEDIR)/lxc.targetinstall:
> > +	@$(call targetinfo)
> > +
> > +	@$(call install_init, lxc)
> > +	@$(call install_fixup, lxc, PRIORITY, optional)
> > +	@$(call install_fixup, lxc, SECTION, base)
> > +	@$(call install_fixup, lxc, AUTHOR, "Michael Grzeschik <mgr@pengutronix.de>")
> > +	@$(call install_fixup, lxc, DESCRIPTION, missing)
> > +
> > +	@$(call install_lib, lxc, 0, 0, 0644, liblxc);
> > +
> > +	@$(call install_copy, lxc, 0, 0, 0644, /var/lib/lxc);
> > +	@$(call install_copy, lxc, 0, 0, 0644, /usr/lib/lxc/rootfs);
> > +
> > +	@$(call install_tree, lxc, 0, 0, -, /usr/share/lxc/config);
> > +
> > +ifdef PTXCONF_LXC_SELINUX
> > +	@$(call install_tree, lxc, 0, 0, -, /usr/share/lxc/selinux);
> > +endif
> > +
> > +	@$(call install_alternative, lxc, 0, 0, 0644, /etc/lxc/default.conf);
> > +	@$(call install_alternative, lxc, 0, 0, 0644, /etc/default/lxc-net);
> > +
> > +	@$(call install_copy, lxc, 0, 0, 0644, -, /etc/default/lxc)
> > +
> > +	@$(foreach app, $(LXC_APPLICATIONS), \
> > +		$(call install_copy, lxc, 0, 0, 0755, $(LXC_PKGDIR)/usr/bin/lxc-$(app), \
> > +			/usr/bin/lxc-$(app))$(ptx/nl))
> > +
> > +	@$(foreach app, \
> > +		containers \
> > +		net \
> > +		apparmor-load \
> > +		user-nic \
> > +		monitord, \
> 
> define a variable above.

ok

> > +		$(call install_copy, lxc, 0, 0, 0755, -, \
> > +			/usr/libexec/lxc/lxc-$(app))$(ptx/nl))
> > +
> > +# This is needed by /usr/libexec/lxc/lxc-net
> > +	@$(call install_copy, lxc, 0, 0, 0755, \
> > +		$(PTXDIST_SYSROOT_TOOLCHAIN)/usr/bin/getent, /usr/bin/getent)
> 
> No. Create a option for glibc and select it.

ok

> > +
> > +ifdef PTXCONF_LXC_TEST_TOOLS
> > +	@$(foreach app, $(LXC_TEST_TOOLS), \
> > +		$(call install_copy, lxc, 0, 0, 0755, $(LXC_PKGDIR)/usr/bin/lxc-test-$(app), \
> > +			/usr/bin/lxc-tests/$(app))$(ptx/nl))
> > +endif
> > +
> > +ifdef PTXCONF_LXC_SYSTEMD_UNIT
> > +	@$(foreach rule, \
> > +		lxc.service \
> > +		lxc@.service \
> > +		lxc-net.service, \
> > +		$(call install_copy, lxc, 0, 0, 0644, -, \
> > +			/usr/lib/systemd/system/$(rule))$(ptx/nl))
> > +
> > +	@$(foreach rule, \
> > +		lxc.service \
> > +		lxc@.service \
> > +		lxc-net.service, \
> > +		$(call install_link, lxc, ../$(rule), \
> > +			/usr/lib/systemd/system/multi-user.target.wants/$(rule))$(ptx/nl))
> 
> don't loop for 3 files.

ok

> > +endif
> > +
> > +	@$(call install_finish, lxc)
> > +
> > +	@$(call touch)
> > +
> > +# vim: syntax=make
> > -- 
> > 2.18.0
> > 
> > 
> > _______________________________________________
> > ptxdist mailing list
> > ptxdist@pengutronix.de
> 
> -- 
> Pengutronix e.K.                           |                             |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 
> _______________________________________________
> ptxdist mailing list
> ptxdist@pengutronix.de

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 91 bytes --]

_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-08-31  9:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-30  7:35 [ptxdist] [PATCH v3] lxc: add new package Michael Grzeschik
2018-08-30 14:10 ` Michael Olbrich
2018-08-31  9:38   ` Michael Grzeschik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox