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:=
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 ] && {
# 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 -"
/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
--- /dev/null
+#
+# 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))
--- /dev/null
+#!/bin/sh
+/etc/init.d/relayd enabled && /etc/init.d/relayd start
--- /dev/null
+#!/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
+}
--- /dev/null
+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))
--- /dev/null
+[ ! -f /etc/config/fstab ] && ( block detect > /etc/config/fstab )
--- /dev/null
+#!/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
+}
--- /dev/null
+/sbin/block hotplug
--- /dev/null
+#!/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
+}
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
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))
+++ /dev/null
-[ ! -f /etc/config/fstab ] && ( block detect > /etc/config/fstab )
+++ /dev/null
-#!/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
-}
+++ /dev/null
-/sbin/block hotplug