fstools: add the new fstools package
authorJohn Crispin <john@openwrt.org>
Wed, 12 Mar 2014 19:32:51 +0000 (19:32 +0000)
committerJohn Crispin <john@openwrt.org>
Wed, 12 Mar 2014 19:32:51 +0000 (19:32 +0000)
Signed-off-by: John Crispin <blogic@openwrt.org>
SVN-Revision: 39895

16 files changed:
include/target.mk
package/base-files/files/etc/init.d/done
package/base-files/files/lib/preinit/80_mount_root
package/base-files/files/lib/upgrade/common.sh
package/network/services/mdnsd/Makefile [new file with mode: 0644]
package/network/services/mdnsd/files/relay.hotplug [new file with mode: 0644]
package/network/services/mdnsd/files/relay.init [new file with mode: 0644]
package/system/fstools/Makefile [new file with mode: 0644]
package/system/fstools/files/fstab.default [new file with mode: 0644]
package/system/fstools/files/fstab.init [new file with mode: 0644]
package/system/fstools/files/mount.hotplug [new file with mode: 0644]
package/system/fstools/files/snapshot [new file with mode: 0644]
package/system/ubox/Makefile
package/system/ubox/files/fstab.default [deleted file]
package/system/ubox/files/fstab.init [deleted file]
package/system/ubox/files/mount.hotplug [deleted file]

index c99c2825f211c1d0261c24f1c6805a4e6e17f989..a16082ea8f30cb250ff117109f23e79c7c772a9f 100644 (file)
@@ -12,7 +12,7 @@ __target_inc=1
 DEVICE_TYPE?=router
 
 # Default packages - the really basic set
-DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd
+DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools
 # For router targets
 DEFAULT_PACKAGES.router:=dnsmasq iptables ip6tables ppp ppp-mod-pppoe kmod-ipt-nathelper firewall odhcpd odhcp6c
 DEFAULT_PACKAGES.bootloader:=
index 8040766dc2e6f7aef5f16c21565f38571446865d..5565fbf13e7007729b7744a3fa67e13f29a14603 100755 (executable)
@@ -3,11 +3,7 @@
 
 START=95
 boot() {
-       [ -d /tmp/root ] && {
-               lock /tmp/.switch2jffs
-               switch2jffs
-               lock -u /tmp/.switch2jffs
-       }
+       [ -d /tmp/root ] && fs-state done
 
        # process user commands
        [ -f /etc/rc.local ] && {
index 0292d82d4abe9c4451f1932e2581425a040109e6..40c5146c58eae7655f7e2f24d2c53bd5f8c3cb6b 100644 (file)
@@ -3,7 +3,7 @@
 # Copyright (C) 2010 Vertical Communications
 
 do_mount_root() {
-       mount_root
+       fs-state start
        boot_run_hook preinit_mount_root
        [ -f /sysupgrade.tgz ] && {
                echo "- config restore -"
index 824a099801211a08644115bfd2366deec9b45f3d..e53e844d5e099bf252722410e91100ac041a60c2 100644 (file)
@@ -57,6 +57,8 @@ run_ramfs() { # <command> [...]
                /bin/sleep /bin/zcat /usr/bin/bzcat /usr/bin/printf /usr/bin/wc
 
        install_bin /sbin/mtd
+       install_bin /sbin/fs-state
+       install_bin /sbin/snapshot
        for file in $RAMFS_COPY_BIN; do
                install_bin $file
        done
diff --git a/package/network/services/mdnsd/Makefile b/package/network/services/mdnsd/Makefile
new file mode 100644 (file)
index 0000000..3d68c79
--- /dev/null
@@ -0,0 +1,41 @@
+#
+# Copyright (C) 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:=mdnsd
+PKG_VERSION:=2014-01-19
+PKG_RELEASE=$(PKG_SOURCE_VERSION)
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_URL:=git://nbd.name/mdnsd.git
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_VERSION:=8f771a5bcfd7f99e2ab8c68f1932c9d7c6804e96
+
+PKG_MAINTAINER:=John Crispin <blogic@openwrt.org>
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/mdnsd
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=Multicast DNS Daemon
+  DEPENDS:=+libubox +libubus +libblobmsg-json
+endef
+
+TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include
+
+define Package/mdnsd/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/mdnsd $(1)/usr/sbin/
+#      $(INSTALL_DIR) $(1)/etc/init.d
+#      $(INSTALL_BIN) ./files/relay.init $(1)/etc/init.d/relayd
+endef
+
+$(eval $(call BuildPackage,mdnsd))
diff --git a/package/network/services/mdnsd/files/relay.hotplug b/package/network/services/mdnsd/files/relay.hotplug
new file mode 100644 (file)
index 0000000..afffbfe
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+/etc/init.d/relayd enabled && /etc/init.d/relayd start
diff --git a/package/network/services/mdnsd/files/relay.init b/package/network/services/mdnsd/files/relay.init
new file mode 100644 (file)
index 0000000..d73df6a
--- /dev/null
@@ -0,0 +1,101 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2011-2012 OpenWrt.org
+
+START=80
+
+USE_PROCD=1
+PROG=/usr/sbin/relayd
+
+resolve_ifname() {
+       grep -qs "^ *$1:" /proc/net/dev && {
+               procd_append_param command -I "$1"
+               append ifaces "$1"
+       }
+}
+
+resolve_network() {
+       local ifn
+       fixup_interface "$1"
+       config_get ifn "$1" ifname
+       [ -z "$ifn" ] && return 1
+       resolve_ifname "$ifn"
+}
+
+start_relay() {
+       local cfg="$1"
+
+       local args=""
+       local ifaces=""
+
+       config_get proto "$cfg" proto
+       [[ "$proto" == relay ]] || return 0
+
+       SERVICE_DAEMONIZE=1
+       SERVICE_WRITE_PID=1
+       SERVICE_PID_FILE="/var/run/relay-$cfg.pid"
+       [ -f "$SERVICE_PID_FILE" ] && {
+               if grep -q relayd "/proc/$(cat $SERVICE_PID_FILE)/cmdline"; then
+                       return 0
+               else
+                       rm -f "$SERVICE_PID_FILE"
+               fi
+       }
+
+       procd_open_instance
+       procd_set_param command "$PROG"
+
+       local net networks
+       config_get networks "$cfg" network
+       for net in $networks; do
+               resolve_network "$net" || {
+                       return 1
+               }
+       done
+
+       local ifn ifnames
+       config_get ifnames "$cfg" ifname
+       for ifn in $ifnames; do
+               resolve_ifname "$ifn"
+       done
+
+       local ipaddr
+       config_get ipaddr "$cfg" ipaddr
+       [ -n "$ipaddr" ] && procd_append_param command -L "$ipaddr"
+
+       local gateway
+       config_get gateway "$cfg" gateway
+       [ -n "$gateway" ] && procd_append_param command -G "$gateway"
+
+       local expiry # = 30
+       config_get expiry "$cfg" expiry
+       [ -n "$expiry" ] && procd_append_param command "$expiry"
+
+       local retry # = 5
+       config_get retry "$cfg" retry
+       [ -n "$retry" ] && procd_append_param command -p "$retry"
+
+       local table # = 16800
+       config_get table "$cfg" table
+       [ -n "$table" ] && procd_append_param command -T "$table"
+
+       local fwd_bcast # = 1
+       config_get_bool fwd_bcast "$cfg" forward_bcast 1
+       [ $fwd_bcast -eq 1 ] && procd_append_param command "-B"
+
+       local fwd_dhcp # = 1
+       config_get_bool fwd_dhcp "$cfg" forward_dhcp 1
+       [ $fwd_dhcp -eq 1 ] && procd_append_param command "-D"
+
+       procd_close_instance
+}
+
+service_triggers()
+{
+       procd_add_reload_trigger "network"
+}
+
+start_service() {
+       include /lib/network
+       config_load network
+       config_foreach start_relay interface
+}
diff --git a/package/system/fstools/Makefile b/package/system/fstools/Makefile
new file mode 100644 (file)
index 0000000..9a6aaee
--- /dev/null
@@ -0,0 +1,60 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=fstools
+PKG_VERSION:=2014-02-27
+
+PKG_RELEASE=$(PKG_SOURCE_VERSION)
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=git://nbd.name/fstools.git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=d292ffc85f48dd9c8774a0860f50397dd2966e7a
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+CMAKE_INSTALL:=1
+
+PKG_LICENSE:=GPLv2
+PKG_LICENSE_FILES:=
+
+PKG_MAINTAINER:=John Crispin <blogic@openwrt.org>
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+TARGET_LDFLAGS += $(if $(CONFIG_USE_EGLIBC),-lrt)
+
+define Package/fstools
+  SECTION:=base
+  CATEGORY:=Base system
+  DEPENDS:=+ubox +USE_EGLIBC:librt
+  TITLE:=OpenWrt filesystem tools
+endef
+
+define Package/block-mount
+  SECTION:=base
+  CATEGORY:=Base system
+  TITLE:=Block device mounting and checking
+  DEPENDS:=+ubox +libubox +libuci
+endef
+
+define Package/fstools/install
+       $(INSTALL_DIR) $(1)/sbin
+
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/fs-state $(1)/sbin/
+       $(INSTALL_BIN) ./files/snapshot $(1)/sbin/
+endef
+
+define Package/block-mount/install
+       $(INSTALL_DIR) $(1)/sbin $(1)/usr/sbin $(1)/etc/hotplug.d/block $(1)/etc/init.d/ $(1)/etc/uci-defaults/
+
+       $(INSTALL_BIN) ./files/fstab.init $(1)/etc/init.d/fstab
+       $(INSTALL_DATA) ./files/fstab.default $(1)/etc/uci-defaults/10-fstab
+       $(INSTALL_DATA) ./files/mount.hotplug $(1)/etc/hotplug.d/block/10-mount
+
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/block $(1)/sbin/
+       ln -s /sbin/block $(1)/usr/sbin/swapon
+       ln -s /sbin/block $(1)/usr/sbin/swapoff
+
+endef
+
+$(eval $(call BuildPackage,fstools))
+$(eval $(call BuildPackage,block-mount))
diff --git a/package/system/fstools/files/fstab.default b/package/system/fstools/files/fstab.default
new file mode 100644 (file)
index 0000000..dd4ba1c
--- /dev/null
@@ -0,0 +1 @@
+[ ! -f /etc/config/fstab ] && ( block detect > /etc/config/fstab )
diff --git a/package/system/fstools/files/fstab.init b/package/system/fstools/files/fstab.init
new file mode 100644 (file)
index 0000000..be49470
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh /etc/rc.common
+# (C) 2013 openwrt.org
+
+START=40
+
+start() {                            
+       echo "this file has been obseleted. please call \"/sbin/block mount\" directly"
+       /sbin/block mount
+}
+
+stop() {                            
+       echo "this file has been obseleted. please call \"/sbin/block umount\" directly"
+       /sbin/block umount
+}
diff --git a/package/system/fstools/files/mount.hotplug b/package/system/fstools/files/mount.hotplug
new file mode 100644 (file)
index 0000000..946924e
--- /dev/null
@@ -0,0 +1 @@
+/sbin/block hotplug
diff --git a/package/system/fstools/files/snapshot b/package/system/fstools/files/snapshot
new file mode 100644 (file)
index 0000000..85a0076
--- /dev/null
@@ -0,0 +1,111 @@
+#!/bin/sh
+# Copyright (C) 2014 OpenWrt.org
+
+
+do_snapshot_unpack() {
+       echo "- snapshot -"
+       mkdir /tmp/snapshot
+       cd /tmp/snapshot
+       fs-state snapshot read
+       block=`ls block*.tar.gz 2> /dev/null`
+       [ -z "$block" ] || for a in $block; do
+               tar xzf $a -C /
+               rm -f $a
+       done
+}
+
+do_config_unpack() {
+       echo "- config -"
+       fs-state snapshot config_read
+       [ -f /tmp/config.tar.gz ] && {
+               tar xzf /tmp/config.tar.gz -C /
+               rm -f /tmp/config.tar.gz
+       }
+}
+
+do_snapshot_push() {
+       cd /volatile
+       tar czf /tmp/snapshot.tar.gz *
+       fs-state snapshot write
+       reboot
+}
+
+do_config_push() {
+       cd /volatile
+       tar czf /tmp/config.tar.gz *
+       fs-state snapshot config_write
+}
+
+do_snapshot_upgrade() {
+       opkg update
+       [ $? == 0 ] || exit 1
+
+       opkg list-upgradable
+       [ $? == 0 ] || exit 2
+       
+       UPDATES=`opkg list-upgradable | cut -d" " -f1`
+       [ -z "${UPDATES}" ] && exit 0
+
+       opkg upgrade ${UPDATES}
+       [ $? == 0 ] || exit 3
+
+       do_snapshot_push
+       sleep 5
+       reboot
+       sleep 10
+}
+
+do_convert_jffs2() {
+       fs-state snapshot write
+       sleep 2
+       reboot -f
+}
+
+do_convert() {
+       . /lib/functions.sh
+       . /lib/upgrade/common.sh
+       ubus call system upgrade
+       touch /tmp/sysupgrade
+       cd /overlay
+       tar czf /tmp/snapshot.tar.gz *
+       kill_remaining TERM
+       sleep 3
+       kill_remaining KILL
+       run_ramfs '. /sbin/snapshot; do_convert_jffs2'
+}
+
+[ -n "$(cat /proc/mounts|grep /overlay|grep jffs2)" ] && {
+case $1 in
+convert)
+       do_convert
+       ;;
+esac
+}
+
+[ -d /volatile ] && {
+case $1 in
+push)
+       do_snapshot_push
+       ;;
+config)
+       do_config_push
+       ;;
+upgrade)
+       do_snapshot_upgrade
+       ;;
+info)
+       fs-state info
+       ;;
+esac
+}
+
+[ "$SNAPSHOT" = "magic" ] && {
+case $1 in
+unpack)
+       do_snapshot_unpack
+       ;;
+config_unpack)
+       do_config_unpack
+       ;;
+esac
+}
index b3a4ba9eeac9084c3d55aa58f9f4fc0ab29e1a2e..5bd724685828604105436fa50346065967c43c7f 100644 (file)
@@ -28,22 +28,13 @@ define Package/ubox
   TITLE:=OpenWrt system helper toolbox
 endef
 
-define Package/block-mount
-  SECTION:=base
-  CATEGORY:=Base system
-  TITLE:=Block device mounting and checking
-  DEPENDS:=+ubox +libubox +libuci
-endef
-
 define Package/ubox/install
        $(INSTALL_DIR) $(1)/sbin $(1)/usr/sbin $(1)/lib/ $(1)/etc/init.d/
 
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{mount_root,kmodloader,logd,logread,validate_data} $(1)/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{kmodloader,logd,logread,validate_data} $(1)/sbin/
        $(INSTALL_BIN) ./files/log.init $(1)/etc/init.d/log
        $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libvalidate.so $(1)/lib
-       ln -s /sbin/mount_root $(1)/sbin/switch2jffs
-       ln -s /sbin/mount_root $(1)/sbin/jffs2reset
-       ln -s /sbin/mount_root $(1)/sbin/jffs2mark
+
        ln -s /sbin/kmodloader $(1)/usr/sbin/rmmod
        ln -s /sbin/kmodloader $(1)/usr/sbin/insmod
        ln -s /sbin/kmodloader $(1)/usr/sbin/lsmod
@@ -51,18 +42,4 @@ define Package/ubox/install
        ln -s /sbin/kmodloader $(1)/usr/sbin/modprobe
 endef
 
-define Package/block-mount/install
-       $(INSTALL_DIR) $(1)/sbin $(1)/usr/sbin $(1)/etc/hotplug.d/block $(1)/etc/init.d/ $(1)/etc/uci-defaults/
-
-       $(INSTALL_BIN) ./files/fstab.init $(1)/etc/init.d/fstab
-       $(INSTALL_DATA) ./files/fstab.default $(1)/etc/uci-defaults/10-fstab
-       $(INSTALL_DATA) ./files/mount.hotplug $(1)/etc/hotplug.d/block/10-mount
-
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/block $(1)/sbin/
-       ln -s /sbin/block $(1)/usr/sbin/swapon
-       ln -s /sbin/block $(1)/usr/sbin/swapoff
-
-endef
-
 $(eval $(call BuildPackage,ubox))
-$(eval $(call BuildPackage,block-mount))
diff --git a/package/system/ubox/files/fstab.default b/package/system/ubox/files/fstab.default
deleted file mode 100644 (file)
index dd4ba1c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[ ! -f /etc/config/fstab ] && ( block detect > /etc/config/fstab )
diff --git a/package/system/ubox/files/fstab.init b/package/system/ubox/files/fstab.init
deleted file mode 100644 (file)
index be49470..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh /etc/rc.common
-# (C) 2013 openwrt.org
-
-START=40
-
-start() {                            
-       echo "this file has been obseleted. please call \"/sbin/block mount\" directly"
-       /sbin/block mount
-}
-
-stop() {                            
-       echo "this file has been obseleted. please call \"/sbin/block umount\" directly"
-       /sbin/block umount
-}
diff --git a/package/system/ubox/files/mount.hotplug b/package/system/ubox/files/mount.hotplug
deleted file mode 100644 (file)
index 946924e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/sbin/block hotplug