-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathS01config
163 lines (148 loc) · 6.03 KB
/
S01config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/bin/sh
#
# Script to handle copying config files from USB and local system recovery
# Setup the apps disk image
APPROOT=/home/apps
/etc/init.d/setup_disk_image.sh /mnt/scratch/apps.img 1G /dev/loop0 $APPROOT
MOUNT_DISK=/mnt/disk
MOUNT_CONFIG=/mnt/config
MOUNT_SCRATCH=/mnt/scratch
OVERRIDE=${MOUNT_DISK}/steamlink
ERROR_MOUNTING_PARTITION_FILE=/tmp/error_mounting_partition.txt
install_app_tgz() {
TEMP=${APPROOT}/.installing
mkdir -p ${TEMP}
cd ${TEMP}
tar zxf "$1" -C ${TEMP}
find ${TEMP} -name toc.txt | while read toc; do
app=$(dirname $toc)
appname=$(basename $app)
appdir=${APPROOT}/$appname
if [ -e "${appdir}/.home" ]; then mv "${appdir}/.home" ${TEMP}; fi
rm -rf "${appdir}"
mv "${app}" "${appdir}"
if [ -e ${TEMP}/.home ]; then mv ${TEMP}/.home "${appdir}"; fi
done
cd /
rm -rf ${TEMP}
}
install_app_zip() {
TEMP=${APPROOT}/.installing
mkdir -p ${TEMP}
cd ${TEMP}
unzip "$1"
find ${TEMP} -name toc.txt | while read toc; do
app=$(dirname $toc)
appname=$(basename $app)
appdir=${APPROOT}/$appname
if [ -e "${appdir}/.home" ]; then mv "${appdir}/.home" ${TEMP}; fi
rm -rf "${appdir}"
mv "${app}" "${appdir}"
chmod +x -R "${appdir}"
if [ -e ${TEMP}/.home ]; then mv ${TEMP}/.home "${appdir}"; fi
done
cd /
rm -rf ${TEMP}
}
handle_usb_drive_partition() {
# Copy any system config files
#
# Set the system update URL in:
# ${OVERRIDE}/config/system/update_url.txt
#
# Set the system update branch in:
# ${OVERRIDE}/config/system/update_branch.txt
#
if [ -d ${OVERRIDE}/config ]; then
cp -r ${OVERRIDE}/config/* ${MOUNT_CONFIG}/
fi
# Copy any system override files (/etc and /home are valid paths)
if [ -d ${OVERRIDE}/overlay ]; then
cp -r ${OVERRIDE}/overlay/* /
fi
# Copy any apps
apps_mounted=$(grep /dev/loop0 /proc/mounts)
if [ -n "${apps_mounted}" ]; then
for app in ${OVERRIDE}/apps/*; do
if [ -d "${app}" ]; then
appname=$(basename $app)
appdir=${APPROOT}/$appname
rm -rf "${appdir}"
cp -r "${app}" "${appdir}"
chmod +x -R "${appdir}"
else
case "${app}" in
*.tar.gz)
install_app_tgz "${app}"
;;
*.tgz)
install_app_tgz "${app}"
;;
*.zip)
install_app_zip "${app}"
;;
esac
fi
done
fi
# Copy any scratch files
if [ -d ${OVERRIDE}/scratch ]; then
cp -r ${OVERRIDE}/scratch/* ${MOUNT_SCRATCH}/
fi
# Trigger a factory reset if needed
if [ -f ${OVERRIDE}/factory_reset.txt ]; then
mkdir -p ${MOUNT_SCRATCH}/recovery
echo "--factory" >${MOUNT_SCRATCH}/recovery/command
fts-set bootloader.command boot-recovery && shutdown -r now
fi
# Reboot for local system recovery if needed
if [ -f ${OVERRIDE}/SystemUpdate.zip ]; then
mkdir -p ${MOUNT_SCRATCH}/recovery
cp ${OVERRIDE}/SystemUpdate.zip ${MOUNT_SCRATCH}/recovery/
echo "--update_package=/cache/recovery/SystemUpdate.zip" >${MOUNT_SCRATCH}/recovery/command
# Be absolutely sure that update package has been flushed to NAND before rebooting
sync
mount ${MOUNT_SCRATCH} -oro,remount
fts-set bootloader.command boot-recovery && shutdown -r now
fi
# Run factory test if needed
FACTORY_TEST=${OVERRIDE}/factory_test/run.sh
if [ -f ${FACTORY_TEST} ]; then
sh ${FACTORY_TEST}
fi
}
# Wait a couple seconds for the kernel to detect a USB drive
for i in `seq 4`; do
# Check if we have a Mass Media device on USB
mass_media_class=$(find /sys/devices/soc.0/f7ee0000.usb/ -name bInterfaceClass | xargs grep 08)
if [ -n "$mass_media_class" ]; then
# Additional wait for the disk device to be created
sleep 2
mkdir -p ${MOUNT_DISK}
# Iterate over all partitions
for device in $(blkid | awk -F ':' '{ print $1 }'); do
case $device in
/dev/loop*)
;;
*)
echo "Found device $device" > /dev/console
mount $device ${MOUNT_DISK}
ret=$?
if [ $ret -ne 0 ]; then
# Pass device name to application, it can indidate it to user
echo "$device" >> $ERROR_MOUNTING_PARTITION_FILE
fi
if [ -d ${OVERRIDE} ]; then
handle_usb_drive_partition
fi
umount ${MOUNT_DISK}
esac
done
break
fi
sleep 0.5
done
# Remove any stale recovery files
if [ -d ${MOUNT_SCRATCH}/recovery -a ! -f ${OVERRIDE}/keep_recovery.txt ]; then
rm -f ${MOUNT_SCRATCH}/recovery/*.zip*
fi