-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfirmwarefetch
executable file
·165 lines (131 loc) · 5.5 KB
/
firmwarefetch
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
164
#!/bin/bash
if [ -z "$1" ] ; then
echo "Bitte den Verzeichnisnamen des lokalen Ablageortes (stable, test, dev, babel-dev) angeben."
echo "Hiermit wird der Haupt-Pfad zum lokalen Firmware-Ablageordner vervollständigt."
echo
exit 1
fi
BRANCH=${1} # dev, stable, test...
#####################################
# Lokalisierungen ab hier
#####################################
SITE_CODE="ffffm"
###
# Da der Ablageordner nicht immer identisch zum Fetch- bzw. Download-Link ist,
# wird hier die Möglichkeit geschaffen, einen unabhängigen Fetch-Teil-Pfad anzugeben.
# Wird die Firmware z.B. durch Jenkins gebaut, so könnte dann der optionale zweite Parameter
# der Name des Jenkins-Projektes sein.
#
# BEGIN - Zweitparameteranalyse
if [ "$2" ] ; then
DL_PATH_PART=${2}
else
DL_PATH_PART=${1}
fi
# ENDE - Zweitparameteranalyse
###
# Haupt-Link auf Remote-Verzeichnis mit neuer *.tar.xz Firmware-Datei.
REMOTEPATH="https://2.dl.ffm.freifunk.net/FW-Archiv/ffffm-$DL_PATH_PART/"
# Haupt-Link auf Remote-Verzeichnis, in der sich die Datei der Firmware-Versionsinformation befindet.
REMOTEVERSIONINFOPATH=${REMOTEPATH}
# Wie lautet der Dateiname der Firmware-Versionsinformation
VERSIONINFOFILENAME="version"
# Haupt-Pfad zum lokalen Firmware-Ablageordner
LOCALMAINPATH="/var/www/files/firmware"
# Wieviele archivierte alte Versionen sollen vorgehalten bleiben?
BACKUP_KEEP_COUNTER=10
#####################################
# Bitte ab hier nichts mehr aendern
#####################################
LOCALBRANCHPATH="${LOCALMAINPATH}/${BRANCH}"
CurrentVersion=""
NewVersion=""
ErrorCheck()
{
if [[ $1 -ne 0 ]] ; then
echo
echo "Firmwarefetch Error: "$2
echo
# Skript-Abbruch
exit 1
fi
}
GetNewVersionInfo()
{
echo "Firmwarefetch: GetNewVersionInfo..."
NewVersion=$(wget --no-check-certificate -O - $REMOTEVERSIONINFOPATH/$VERSIONINFOFILENAME)
ErrorCheck $? "No remote firmware version information found!"
}
GetCurrentVersionInfo()
{
echo "Firmwarefetch: GetCurrentVersionInfo..."
CurrentVersion=$(cat $LOCALBRANCHPATH/$VERSIONINFOFILENAME)
if [[ $? -ne 0 ]]; then
CurrentVersion="unknown_at_"$(date +%Y-%m-%d_%H:%M)
fi
}
BackupCurrentFirmware()
{
echo "Firmwarefetch: BackupCurrentFirmware..."
# Neues Backupverzeichnisse anlegen
mkdir -p $LOCALBRANCHPATH/factory/$CurrentVersion
mkdir -p $LOCALBRANCHPATH/other/$CurrentVersion
mkdir -p $LOCALBRANCHPATH/sysupgrade/$CurrentVersion
mkdir -p $LOCALBRANCHPATH/sysupgrade/$CurrentVersion/modules
# Alle alten Binaries verschieben
mv $LOCALBRANCHPATH/factory/gluon-$SITE_CODE-* $LOCALBRANCHPATH/factory/$CurrentVersion
mv $LOCALBRANCHPATH/other/gluon-$SITE_CODE-* $LOCALBRANCHPATH/other/$CurrentVersion
mv $LOCALBRANCHPATH/sysupgrade/*.manifest $LOCALBRANCHPATH/sysupgrade/$CurrentVersion
mv $LOCALBRANCHPATH/sysupgrade/gluon-$SITE_CODE-* $LOCALBRANCHPATH/sysupgrade/$CurrentVersion
# Wenn noch alte FW im Feld läuft, werden die Module an aktuller stelle noch benötigt.
# Daher werden die aktuellen Module nur weg kopiert, und nicht komplett verschoben.
cp -rf $LOCALBRANCHPATH/sysupgrade/modules/gluon-$SITE_CODE-$CurrentVersion $LOCALBRANCHPATH/sysupgrade/$CurrentVersion/modules
# Alte Hash- und Info-Files in 'factory' verschieben
mv $LOCALBRANCHPATH/SHA512* $LOCALBRANCHPATH/factory/$CurrentVersion
mv $LOCALBRANCHPATH/SHA256* $LOCALBRANCHPATH/factory/$CurrentVersion
mv $LOCALBRANCHPATH/ecdsa-key* $LOCALBRANCHPATH/factory/$CurrentVersion
mv $LOCALBRANCHPATH/$VERSIONINFOFILENAME $LOCALBRANCHPATH/factory/$CurrentVersion
}
RemoveOlderBackups()
{
echo "Firmwarefetch: Keep the last $BACKUP_KEEP_COUNTER backups..."
find $LOCALBRANCHPATH/factory -type d -name "v*" -printf "%T@ %Tc %p\n" | sort -n|rev |cut -d" " -f1|rev|head -n -$BACKUP_KEEP_COUNTER|xargs rm -rf
ErrorCheck $? "Something went wrong during keeping the factory backups!"
find $LOCALBRANCHPATH/other -type d -name "v*" -printf "%T@ %Tc %p\n" | sort -n|rev |cut -d" " -f1|rev|head -n -$BACKUP_KEEP_COUNTER|xargs rm -rf
ErrorCheck $? "Something went wrong during keeping the other backups!"
find $LOCALBRANCHPATH/sysupgrade -type d -name "v*" -printf "%T@ %Tc %p\n" | sort -n|rev |cut -d" " -f1|rev|head -n -$BACKUP_KEEP_COUNTER|xargs rm -rf
ErrorCheck $? "Something went wrong during keeping the sysupgrade backups!"
find $LOCALBRANCHPATH/sysupgrade/modules -type d -name "gluon-*" -printf "%T@ %Tc %p\n" | sort -n|rev |cut -d" " -f1|rev|head -n -$BACKUP_KEEP_COUNTER|xargs rm -rf
ErrorCheck $? "Something went wrong during keeping the module backups!"
}
CreateModulesSymlinks()
{
# Softlink der Module in ein Branch-unabhängiges Verzeichnis
# (Erster Anpassung, weitere werden folgen...)
echo "Firmwarefetch: Erstelle Symlinks in ${LOCALMAINPATH}/modules"
mkdir -p $LOCALMAINPATH/modules
rm -rf ${LOCALMAINPATH}/modules/*${BRANCH}*
ln -srf ${LOCALBRANCHPATH}/sysupgrade/modules/* ${LOCALMAINPATH}/modules/
}
GetNewFirmware()
{
echo "Firmwarefetch: GetNewFirmware..."
wget --tries=1000 --no-check-certificate -O - $REMOTEPATH/gluon-$NewVersion.tar.xz | tar xvJ -C $LOCALBRANCHPATH
ErrorCheck $? "Can't download remote firmware archiv!"
}
# Los geht's !
GetNewVersionInfo
GetCurrentVersionInfo
echo "Firmwarefetch: Current firmware version: "$CurrentVersion
HIGHESTVERSION=$(printf '%s\n' $CurrentVersion $NewVersion | sort -V | tail -n 1)
if [[ "$CurrentVersion" = "$HIGHESTVERSION" ]]; then
echo "Firmwarefetch: No new Firmwareversion found"
else
echo "Firmwarefetch: New firmware version found: "$NewVersion
BackupCurrentFirmware
RemoveOlderBackups
GetNewFirmware
CreateModulesSymlinks
fi
echo "Firmwarefetch: Done!"
exit 0