From 12fda9a5f08e13b308701d477da91c8b849f55d5 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Wed, 12 Mar 2014 19:32:51 +0000 Subject: [PATCH] fstools: add the new fstools package Signed-off-by: John Crispin SVN-Revision: 39895 --- include/target.mk | 2 +- package/base-files/files/etc/init.d/done | 6 +- .../files/lib/preinit/80_mount_root | 2 +- .../base-files/files/lib/upgrade/common.sh | 2 + package/network/services/mdnsd/Makefile | 41 +++++++ .../services/mdnsd/files/relay.hotplug | 2 + .../network/services/mdnsd/files/relay.init | 101 ++++++++++++++++ package/system/fstools/Makefile | 60 ++++++++++ .../{ubox => fstools}/files/fstab.default | 0 .../system/{ubox => fstools}/files/fstab.init | 0 .../{ubox => fstools}/files/mount.hotplug | 0 package/system/fstools/files/snapshot | 111 ++++++++++++++++++ package/system/ubox/Makefile | 27 +---- 13 files changed, 322 insertions(+), 32 deletions(-) create mode 100644 package/network/services/mdnsd/Makefile create mode 100644 package/network/services/mdnsd/files/relay.hotplug create mode 100644 package/network/services/mdnsd/files/relay.init create mode 100644 package/system/fstools/Makefile rename package/system/{ubox => fstools}/files/fstab.default (100%) rename package/system/{ubox => fstools}/files/fstab.init (100%) rename package/system/{ubox => fstools}/files/mount.hotplug (100%) create mode 100644 package/system/fstools/files/snapshot diff --git a/include/target.mk b/include/target.mk index c99c2825f2..a16082ea8f 100644 --- a/include/target.mk +++ b/include/target.mk @@ -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:= diff --git a/package/base-files/files/etc/init.d/done b/package/base-files/files/etc/init.d/done index 8040766dc2..5565fbf13e 100755 --- a/package/base-files/files/etc/init.d/done +++ b/package/base-files/files/etc/init.d/done @@ -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 ] && { diff --git a/package/base-files/files/lib/preinit/80_mount_root b/package/base-files/files/lib/preinit/80_mount_root index 0292d82d4a..40c5146c58 100644 --- a/package/base-files/files/lib/preinit/80_mount_root +++ b/package/base-files/files/lib/preinit/80_mount_root @@ -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 -" diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index 824a099801..e53e844d5e 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -57,6 +57,8 @@ run_ramfs() { # [...] /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 index 0000000000..3d68c790cd --- /dev/null +++ b/package/network/services/mdnsd/Makefile @@ -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 + +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 index 0000000000..afffbfeab8 --- /dev/null +++ b/package/network/services/mdnsd/files/relay.hotplug @@ -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 index 0000000000..d73df6ab55 --- /dev/null +++ b/package/network/services/mdnsd/files/relay.init @@ -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 index 0000000000..9a6aaeef1e --- /dev/null +++ b/package/system/fstools/Makefile @@ -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 + +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/ubox/files/fstab.default b/package/system/fstools/files/fstab.default similarity index 100% rename from package/system/ubox/files/fstab.default rename to package/system/fstools/files/fstab.default diff --git a/package/system/ubox/files/fstab.init b/package/system/fstools/files/fstab.init similarity index 100% rename from package/system/ubox/files/fstab.init rename to package/system/fstools/files/fstab.init diff --git a/package/system/ubox/files/mount.hotplug b/package/system/fstools/files/mount.hotplug similarity index 100% rename from package/system/ubox/files/mount.hotplug rename to package/system/fstools/files/mount.hotplug diff --git a/package/system/fstools/files/snapshot b/package/system/fstools/files/snapshot new file mode 100644 index 0000000000..85a0076d8e --- /dev/null +++ b/package/system/fstools/files/snapshot @@ -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 +} diff --git a/package/system/ubox/Makefile b/package/system/ubox/Makefile index b3a4ba9eea..5bd7246858 100644 --- a/package/system/ubox/Makefile +++ b/package/system/ubox/Makefile @@ -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)) -- 2.30.2