diff --git a/swmodd/Makefile b/swmodd/Makefile index d40dae771..5448e7ad2 100755 --- a/swmodd/Makefile +++ b/swmodd/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=swmodd -PKG_VERSION:=2.1.5 +PKG_VERSION:=2.1.5.1 LOCAL_DEV:=0 ifneq ($(LOCAL_DEV),1) @@ -31,8 +31,9 @@ define Package/swmodd SUBMENU:=TRx69 TITLE:= Software Modules Daemon DEPENDS:=+libuci +libubox +ubus +libuuid +opkg +libcurl \ - +PACKAGE_liblxc:liblxc +PACKAGE_liblxc:cgroupfs-mount \ - +@BUSYBOX_CONFIG_BUSYBOX +@BUSYBOX_CONFIG_FEATURE_SHOW_SCRIPT + +PACKAGE_liblxc:liblxc +@BUSYBOX_CONFIG_BUSYBOX \ + +@BUSYBOX_CONFIG_FEATURE_SHOW_SCRIPT +@BUSYBOX_CONFIG_SCRIPT \ + +swmodd-cgroup endef define Package/swmodd/description @@ -43,6 +44,14 @@ define Package/swmodd/config source "$(SOURCE)/Config.in" endef +define Package/swmodd-cgroup + SECTION:=utils + CATEGORY:=Utilities + SUBMENU:=TRx69 + TITLE:= Cgroup mount handler for Software modules daemon + DEPENDS:=+@CONFIG_KERNEL_CGROUPS +endef + TARGET_CFLAGS += \ -I$(STAGING_DIR)/usr/include \ -D_GNU_SOURCE \ @@ -82,4 +91,10 @@ ifeq ($(CONFIG_PACKAGE_liblxc),y) endif endef +define Package/swmodd-cgroup/install + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/etc/init.d/swmodd_cgroup $(1)/etc/init.d/swmodd_cgroup +endef + +$(eval $(call BuildPackage,swmodd-cgroup)) $(eval $(call BuildPackage,swmodd)) diff --git a/swmodd/files/etc/init.d/swmodd_cgroup b/swmodd/files/etc/init.d/swmodd_cgroup new file mode 100644 index 000000000..dc020523c --- /dev/null +++ b/swmodd/files/etc/init.d/swmodd_cgroup @@ -0,0 +1,56 @@ +#!/bin/sh /etc/rc.common + +START=01 + +log() { + echo "swmodd_cgroup: ${@}" >/dev/console +} + +cgroup_remounting_required() +{ + if ! mount |grep -q '/sys/fs/cgroup '; then + return 1; + fi + + if grep -v '^#' /etc/fstab | grep -q cgroup; then + log "fstab mounted system, remounting of cgroup not required" + return 1 + fi + + if [ ! -d /sys/fs/cgroup ] && [ ! -e /proc/cgroups ]; then + log "cgroup fs not found" + return 1 + fi + + umount /sys/fs/cgroup + return 0; +} + +mount_cgroup() +{ + + if ! cgroup_remounting_required; then + log "cgroup remounting not required" + return 1 + fi + + mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup + cd /sys/fs/cgroup + for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do + mkdir -p $sys + if ! mountpoint -q $sys; then + if ! mount -n -t cgroup -o $sys cgroup $sys; then + rm -f $sys || true + fi + fi + done + + if [ -e /sys/fs/cgroup/memory/memory.use_hierarchy ]; then + echo 1 > /sys/fs/cgroup/memory/memory.use_hierarchy + fi +} + +boot() +{ + mount_cgroup +}