From 0dc9d8d6ffcdbdfda2723676f6ffc825a48a18b7 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Wed, 12 Mar 2014 19:32:51 +0000 Subject: fstools: add the new fstools package Signed-off-by: John Crispin SVN-Revision: 39895 --- package/system/fstools/Makefile | 60 ++++++++++++++++ package/system/fstools/files/fstab.default | 1 + package/system/fstools/files/fstab.init | 14 ++++ package/system/fstools/files/mount.hotplug | 1 + package/system/fstools/files/snapshot | 111 +++++++++++++++++++++++++++++ 5 files changed, 187 insertions(+) create mode 100644 package/system/fstools/Makefile create mode 100644 package/system/fstools/files/fstab.default create mode 100644 package/system/fstools/files/fstab.init create mode 100644 package/system/fstools/files/mount.hotplug create mode 100644 package/system/fstools/files/snapshot (limited to 'package/system/fstools') diff --git a/package/system/fstools/Makefile b/package/system/fstools/Makefile new file mode 100644 index 0000000..9a6aaee --- /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/fstools/files/fstab.default b/package/system/fstools/files/fstab.default new file mode 100644 index 0000000..dd4ba1c --- /dev/null +++ b/package/system/fstools/files/fstab.default @@ -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 index 0000000..be49470 --- /dev/null +++ b/package/system/fstools/files/fstab.init @@ -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 index 0000000..946924e --- /dev/null +++ b/package/system/fstools/files/mount.hotplug @@ -0,0 +1 @@ +/sbin/block hotplug diff --git a/package/system/fstools/files/snapshot b/package/system/fstools/files/snapshot new file mode 100644 index 0000000..85a0076 --- /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 +} -- cgit v1.1