fstools: snapshot: handle jffs2 conversion using upgraded
[openwrt/.git] / package / system / fstools / files / snapshot
1 #!/bin/sh
2 # Copyright (C) 2014 OpenWrt.org
3
4
5 do_snapshot_unpack() {
6         echo "- snapshot -"
7         mkdir /tmp/snapshot
8         cd /tmp/snapshot
9         snapshot_tool read
10         block=`ls block*.tar.gz 2> /dev/null`
11         [ -z "$block" ] || for a in $block; do
12                 tar xzf $a -C /
13                 rm -f $a
14         done
15 }
16
17 do_config_unpack() {
18         echo "- config -"
19         snapshot_tool config_read
20         [ -f /tmp/config.tar.gz ] && {
21                 tar xzf /tmp/config.tar.gz -C /
22                 rm -f /tmp/config.tar.gz
23         }
24 }
25
26 do_snapshot_push() {
27         cd /volatile/upper
28         tar czf /tmp/snapshot.tar.gz *
29         snapshot_tool write
30         reboot
31 }
32
33 do_config_push() {
34         cd /volatile/upper
35         tar czf /tmp/config.tar.gz *
36         snapshot_tool config_write
37 }
38
39 do_snapshot_upgrade() {
40         opkg update
41         [ $? -eq 0 ] || exit 1
42
43         opkg list-upgradable
44         [ $? -eq 0 ] || exit 2
45
46         UPDATES=`opkg list-upgradable | cut -d" " -f1`
47         [ -z "${UPDATES}" ] && exit 0
48
49         opkg upgrade ${UPDATES}
50         [ $? -eq 0 ] || exit 3
51
52         do_snapshot_push
53         sleep 5
54         reboot
55         sleep 10
56 }
57
58 do_convert_jffs2() {
59         snapshot_tool write
60         sleep 2
61         reboot -f
62 }
63
64 do_convert() {
65         . /lib/functions.sh
66         . /lib/upgrade/common.sh
67
68         cd /overlay/upper
69         tar czf /tmp/snapshot.tar.gz *
70
71         install_bin /sbin/upgraded
72         ubus call system sysupgrade "{
73                 \"prefix\": \"$RAM_ROOT\",
74                 \"path\": \"\",
75                 \"command\": \". /sbin/snapshot; do_convert_jffs2\"
76         }"
77 }
78
79 [ -n "$(cat /proc/mounts|grep /overlay|grep jffs2)" ] && {
80 case $1 in
81 convert)
82         do_convert
83         ;;
84 esac
85 }
86
87 [ -d /volatile/upper ] && {
88 case $1 in
89 push)
90         do_snapshot_push
91         ;;
92 config)
93         do_config_push
94         ;;
95 upgrade)
96         do_snapshot_upgrade
97         ;;
98 info)
99         snapshot_tool info
100         ;;
101 esac
102 }
103
104 [ "$SNAPSHOT" = "magic" ] && {
105 case $1 in
106 unpack)
107         do_snapshot_unpack
108         ;;
109 config_unpack)
110         do_config_unpack
111         ;;
112 esac
113 }