diff options
Diffstat (limited to 'utils/nwztools/scripts/install_dualboot.sh')
-rw-r--r-- | utils/nwztools/scripts/install_dualboot.sh | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/utils/nwztools/scripts/install_dualboot.sh b/utils/nwztools/scripts/install_dualboot.sh new file mode 100644 index 0000000000..ece5b9e3a3 --- /dev/null +++ b/utils/nwztools/scripts/install_dualboot.sh | |||
@@ -0,0 +1,129 @@ | |||
1 | #!/bin/sh | ||
2 | |||
3 | # The updater script on the NWZ has a major bug/feature: | ||
4 | # it does NOT clear the update flag if the update scrit fails | ||
5 | # thus causing a update/reboot loop and a bricked device | ||
6 | # always clear to make sure we don't end up being screwed | ||
7 | nvpflag fup 0xFFFFFFFF | ||
8 | |||
9 | # | ||
10 | # FIXME document this | ||
11 | # | ||
12 | |||
13 | |||
14 | # go to /tmp | ||
15 | cd /tmp | ||
16 | |||
17 | # get content partition path | ||
18 | CONTENTS="/contents" | ||
19 | CONTENTS_PART=`mount | grep contents | awk '{ print $1 }'` | ||
20 | |||
21 | lcdmsg -c -f /usr/local/bin/font_08x12.bmp -l 0,3 "Contents partition:\n$CONTENTS_PART" | ||
22 | |||
23 | # We need to remount the contents partition in read-write mode be able to | ||
24 | # write something on it | ||
25 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,6 "Remount $CONTENTS rw" | ||
26 | mount -o remount,rw $CONTENTS_PART $CONTENTS | ||
27 | if [ "$?" != 0 ]; then | ||
28 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: remount failed" | ||
29 | sleep 3 | ||
30 | exit 0 | ||
31 | fi | ||
32 | |||
33 | # import constants | ||
34 | . /install_script/constant.txt | ||
35 | _UPDATE_FN_=`nvpstr ufn` | ||
36 | ROOTFS_TMP_DIR=/tmp/rootfs | ||
37 | ROCKBOX_NAME=Rockbox | ||
38 | ROCKBOX_PATH=$ROOTFS_TMP_DIR/usr/local/bin/$ROCKBOX_NAME | ||
39 | SPIDERAPP_PATH=$ROOTFS_TMP_DIR/usr/local/bin/SpiderApp | ||
40 | |||
41 | # mount root partition | ||
42 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,7 "Mount root filesystem" | ||
43 | mkdir $ROOTFS_TMP_DIR | ||
44 | if [ "$?" != 0 ]; then | ||
45 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: mkdir failed" | ||
46 | sleep 3 | ||
47 | exit 0 | ||
48 | fi | ||
49 | |||
50 | # NOTE some platforms use ext3 and some ext4 with a custom mount program | ||
51 | # (/usr/local/bin/icx_mount.ext4), some probably use an mtd too | ||
52 | mount -t ext2 $COMMON_ROOTFS_PARTITION $ROOTFS_TMP_DIR | ||
53 | if [ "$?" != 0 ]; then | ||
54 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: mount failed" | ||
55 | sleep 3 | ||
56 | exit 0 | ||
57 | fi | ||
58 | |||
59 | # rename the previous main application unless there is already a copy | ||
60 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,8 "Backup OF" | ||
61 | if [ ! -e $SPIDERAPP_PATH.of ]; then | ||
62 | mv $SPIDERAPP_PATH $SPIDERAPP_PATH.of | ||
63 | fi | ||
64 | |||
65 | # extract our payload executable | ||
66 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,9 "Install rockbox" | ||
67 | fwpchk -f /contents/$_UPDATE_FN_.UPG -c -1 $SPIDERAPP_PATH | ||
68 | if [ "$?" != 0 ]; then | ||
69 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: no file to extract" | ||
70 | sleep 3 | ||
71 | exit 0 | ||
72 | fi | ||
73 | |||
74 | # make it executable and change user/group | ||
75 | chmod 775 $SPIDERAPP_PATH | ||
76 | if [ "$?" != 0 ]; then | ||
77 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot make it executable" | ||
78 | sleep 3 | ||
79 | exit 0 | ||
80 | fi | ||
81 | chown 500:500 $SPIDERAPP_PATH | ||
82 | if [ "$?" != 0 ]; then | ||
83 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot change owner" | ||
84 | sleep 3 | ||
85 | exit 0 | ||
86 | fi | ||
87 | |||
88 | # # change main application | ||
89 | # lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,9 "Modify app list" | ||
90 | # sed -i 's/Rockbox/SpiderApp/' $ROOTFS_TMP_DIR/etc/AppList.conf | ||
91 | # if [ "$?" != 0 ]; then | ||
92 | # lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,14 "ERROR: sed failed" | ||
93 | # sleep 3 | ||
94 | # exit 0 | ||
95 | # fi | ||
96 | # # and fix ownership | ||
97 | # chown 500:500 $ROOTFS_TMP_DIR/etc/AppList.conf | ||
98 | # if [ "$?" != 0 ]; then | ||
99 | # lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,14 "ERROR: cannot change group" | ||
100 | # sleep 3 | ||
101 | # exit 0 | ||
102 | # fi | ||
103 | cat $ROOTFS_TMP_DIR/etc/AppList.conf >$CONTENTS/AppList.conf | ||
104 | ls -l $ROOTFS_TMP_DIR/usr/local/bin/ >$CONTENTS/ls.txt | ||
105 | ls -l $ROOTFS_TMP_DIR/etc/ >$CONTENTS/ls2.txt | ||
106 | |||
107 | # unmount root partition | ||
108 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,10 "Unmount root filesystem" | ||
109 | sync | ||
110 | if [ "$?" != 0 ]; then | ||
111 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: sync failed" | ||
112 | sleep 3 | ||
113 | exit 0 | ||
114 | fi | ||
115 | |||
116 | umount $ROOTFS_TMP_DIR | ||
117 | if [ "$?" != 0 ]; then | ||
118 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: umount failed" | ||
119 | sleep 3 | ||
120 | exit 0 | ||
121 | fi | ||
122 | |||
123 | # Success screen | ||
124 | lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "Rebooting in 3 seconds." | ||
125 | sleep 3 | ||
126 | sync | ||
127 | |||
128 | # finish | ||
129 | exit 0 | ||