Skip to content

Commit 332a0d6

Browse files
committed
feat: add reboot command and tektelic script
1 parent 8827512 commit 332a0d6

File tree

2 files changed

+171
-3
lines changed

2 files changed

+171
-3
lines changed

command-ctrl.sh

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,16 +139,23 @@ update() {
139139
fi
140140
}
141141

142+
reboot_device() {
143+
reboot
144+
}
145+
142146
case "$1" in
143147
"remote-ctrl")
144-
remote_ctrl
148+
remote_ctrl
145149
;;
146150
"update")
147-
update
151+
update
152+
;;
153+
"reboot")
154+
reboot_device
148155
;;
149156
*)
150157
## If no parameters are given, print which are available.
151-
echo "Usage: $0 {remote-ctrl|update}"
158+
echo "Usage: $0 {remote-ctrl|update|reboot}"
152159
exit 1
153160
;;
154161
esac

vendors/tektelic/command-ctrl.sh

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
#!/bin/sh
2+
3+
add_ssh_entry() {
4+
ENTRY=$1
5+
SSH_FILE=$2
6+
#Add the entry in both .ssh dirs since ssh checks different locations based on env variables and how it is launched, e.g. on boot vs. manually
7+
for DIR in ~root/.ssh $HOME/.ssh
8+
do
9+
if [ ! -f "$DIR/$SSH_FILE" ] || ! grep -Fxq "$ENTRY" "$DIR/$SSH_FILE"; then
10+
mkdir -p $DIR
11+
echo "$ENTRY" >> "$DIR/$SSH_FILE"
12+
fi
13+
done
14+
}
15+
16+
remote_ctrl() {
17+
if [ -z "$SSH_HOST" ]; then
18+
echo "\$SSH_HOST is empty"
19+
exit 1
20+
fi
21+
22+
if [ -z "$SSH_FORWARD_PORT" ]; then
23+
echo "\$SSH_FORWARD_PORT is empty"
24+
exit 1
25+
fi
26+
27+
if [ -z "$SSH_USERNAME" ]; then
28+
echo "\$SSH_USERNAME is empty"
29+
exit 1
30+
fi
31+
32+
if [ -z "$SSH_PRIVATE_KEY" ]; then
33+
echo "\$SSH_PRIVATE_KEY is empty"
34+
exit 1
35+
fi
36+
37+
if [ -z "$SSH_LOCAL_PORT" ]; then
38+
SSH_LOCAL_PORT=22
39+
fi
40+
41+
if [ -z "$SSH_REMOTE_PORT" ]; then
42+
SSH_REMOTE_PORT=22
43+
fi
44+
45+
export PRIVATE_KEY_FILE=/tmp/temp_ssh_key
46+
echo -e "$SSH_PRIVATE_KEY" > "$PRIVATE_KEY_FILE"
47+
if command -v dropbearconvert &> /dev/null; then
48+
dropbearconvert openssh dropbear "$PRIVATE_KEY_FILE" "$PRIVATE_KEY_FILE"
49+
fi
50+
chmod 600 "$PRIVATE_KEY_FILE"
51+
52+
if [ -z "$SSH_HOST_KEY" ]; then
53+
echo "\$SSH_HOST_KEY is empty"
54+
else
55+
KNOWN_HOST="$SSH_HOST $SSH_HOST_KEY"
56+
add_ssh_entry "$KNOWN_HOST" known_hosts
57+
fi
58+
59+
if [ -z "$SSH_AUTH_KEY" ]; then
60+
echo "\$SSH_AUTH_KEY is empty"
61+
else
62+
add_ssh_entry "$SSH_AUTH_KEY" authorized_keys
63+
fi
64+
65+
if [ "$SSHD_FORCE_PUBKEY_AUTH" == "true" ]; then
66+
echo "Starting sshd with publickey authentication"
67+
$(which sshd) -p $SSH_LOCAL_PORT -o "PubkeyAuthentication yes"
68+
fi
69+
ssh -o "ExitOnForwardFailure yes" -N -R $SSH_FORWARD_PORT:localhost:$SSH_LOCAL_PORT $SSH_USERNAME@$SSH_HOST -p $SSH_REMOTE_PORT -i $PRIVATE_KEY_FILE &
70+
sh -c 'sleep 10; rm $PRIVATE_KEY_FILE'
71+
}
72+
73+
update() {
74+
if [ -z "$UPDATE_URL" ]; then
75+
echo "\$UPDATE_URL is empty"
76+
exit 1
77+
fi
78+
79+
if [ "$UPDATE_FILE_MODE" != "" ] && [ -z "$(echo "$UPDATE_FILE_MODE" | grep -E '^[0-7]{3,4}$')" ]; then
80+
echo "\$UPDATE_FILE_MODE is not valid"
81+
exit 1
82+
fi
83+
84+
UPDATE_FILE_PATH=/tmp/$(basename $UPDATE_URL)
85+
if [ "$UPDATE_FILE_PATH" != "/tmp/" ]; then
86+
echo "Downloading $UPDATE_URL"
87+
curl -s -f $UPDATE_URL --output $UPDATE_FILE_PATH
88+
RESULT=$?
89+
if ( test "$RESULT" == "60" || test "$RESULT" == "77" ) && ! test -f /etc/ssl/certs/ca-certificates.crt; then
90+
echo "Download failed, attempting to update certs and retry"
91+
if command -v update-ca-certificates &> /dev/null; then
92+
update-ca-certificates
93+
else
94+
opkg update
95+
opkg install ca-certificates
96+
opkg upgrade ca-certificates
97+
fi
98+
curl -s -f $UPDATE_URL --output $UPDATE_FILE_PATH
99+
RESULT=$?
100+
fi
101+
if test "$RESULT" != "0"; then
102+
echo "Download failed with: $RESULT"
103+
rm -f $UPDATE_FILE_PATH
104+
exit $RESULT
105+
fi
106+
107+
echo "Verifying checksum"
108+
DOWNLOAD_MD5=$(md5sum "$UPDATE_FILE_PATH" | cut -d " " -f1)
109+
if [ $DOWNLOAD_MD5 == $UPDATE_MD5 ]; then
110+
echo "Checksum matches"
111+
if [ "$UPDATE_TYPE" == "file" ]; then
112+
if [ "$UPDATE_DEST" != "" ]; then
113+
echo "Moving file to $UPDATE_DEST"
114+
DEST_DIR=$(dirname $UPDATE_DEST)
115+
mkdir -p $DEST_DIR
116+
mv -f $UPDATE_FILE_PATH $UPDATE_DEST
117+
if [ "$UPDATE_FILE_MODE" != "" ]; then
118+
#If the specified file mode is valid, set it
119+
chmod $UPDATE_FILE_MODE $UPDATE_DEST
120+
fi
121+
exit $?
122+
fi
123+
fi
124+
125+
echo "Installing $UPDATE_FILE_PATH"
126+
UPDATE_OPTIONS=""
127+
FORCE_REINSTALL=$(echo "$FORCE_REINSTALL" | tr '[:upper:]' '[:lower:]')
128+
if [ "$FORCE_REINSTALL" == "true" ]; then
129+
UPDATE_OPTIONS="--force-reinstall"
130+
fi
131+
echo "opkg install $UPDATE_FILE_PATH $UPDATE_OPTIONS"
132+
opkg install $UPDATE_FILE_PATH $UPDATE_OPTIONS
133+
else
134+
echo "Checksum does not match"
135+
fi
136+
137+
echo "Deleting $UPDATE_FILE_PATH"
138+
rm -f $UPDATE_FILE_PATH
139+
fi
140+
}
141+
142+
reboot_device() {
143+
/usr/bin/tektelic_reset
144+
}
145+
146+
case "$1" in
147+
"remote-ctrl")
148+
remote_ctrl
149+
;;
150+
"update")
151+
update
152+
;;
153+
"reboot")
154+
reboot_device
155+
;;
156+
*)
157+
## If no parameters are given, print which are available.
158+
echo "Usage: $0 {remote-ctrl|update|reboot}"
159+
exit 1
160+
;;
161+
esac

0 commit comments

Comments
 (0)