149 lines
4.0 KiB
Bash
149 lines
4.0 KiB
Bash
#!/bin/bash
|
|
|
|
if [ ! -f "$1" ]; then
|
|
echo "Please provide the filename of an existing zip build as the first argument"
|
|
exit
|
|
fi
|
|
|
|
FILENAME=$(basename $1)
|
|
DIRNAME=$(echo "${FILENAME}" | cut -d "_" -f 1)
|
|
VERSION=$(echo "${DIRNAME}" | cut -d "-" -f 2)
|
|
DATE_STAMP=$(LANG=C date -R)
|
|
BASE_FILE_NAME="${FILENAME%.*}"
|
|
TMPDIRNAME="${BASE_FILE_NAME}-extract"
|
|
MONO=/Library/Frameworks/Mono.framework/Commands/mono
|
|
GPG_KEYFILE="${HOME}/.config/signkeys/Duplicati/updater-gpgkey.key"
|
|
|
|
# Sort on macOS does not have -V / --version-sort
|
|
# https://stackoverflow.com/questions/4493205/unix-sort-of-version-numbers
|
|
SORT_OPTIONS="-t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n"
|
|
|
|
if [ -d "${DIRNAME}" ]; then
|
|
rm -rf "${DIRNAME}"
|
|
fi
|
|
|
|
if [ -d "${TMPDIRNAME}" ]; then
|
|
rm -rf "${TMPDIRNAME}"
|
|
fi
|
|
|
|
if [ -f "package.tgz" ]; then
|
|
rm -rf "package.tgz"
|
|
fi
|
|
|
|
if [ -f "${BASE_FILE_NAME}.spk" ]; then
|
|
rm -rf "${BASE_FILE_NAME}.spk"
|
|
fi
|
|
|
|
if [ -f "${BASE_FILE_NAME}.spk.tmp" ]; then
|
|
rm -rf "${BASE_FILE_NAME}.spk.tmp"
|
|
fi
|
|
|
|
if [ -f "${BASE_FILE_NAME}.signature" ]; then
|
|
rm -rf "${BASE_FILE_NAME}.spk.signature"
|
|
fi
|
|
|
|
TIMESERVER="http://timestamp.synology.com/timestamp.php"
|
|
|
|
unzip -q -d "${DIRNAME}" "$1"
|
|
|
|
for n in "../oem" "../../oem" "../../../oem"
|
|
do
|
|
if [ -d $n ]; then
|
|
echo "Installing OEM files"
|
|
cp -R $n "${DIRNAME}/webroot/"
|
|
fi
|
|
done
|
|
|
|
for n in "oem-app-name.txt" "oem-update-url.txt" "oem-update-key.txt" "oem-update-readme.txt" "oem-update-installid.txt"
|
|
do
|
|
for p in "../$n" "../../$n" "../../../$n"
|
|
do
|
|
if [ -f $p ]; then
|
|
echo "Installing OEM override file"
|
|
cp $p "${DIRNAME}"
|
|
fi
|
|
done
|
|
done
|
|
|
|
cd "${DIRNAME}"
|
|
|
|
# Remove items unused on the Synology platform
|
|
rm -rf ./win-tools
|
|
rm -rf ./SQLite/win64
|
|
rm -rf ./SQLite/win32
|
|
rm -rf ./MonoMac.dll
|
|
rm -rf ./alphavss
|
|
rm -rf ./OSX\ Icons
|
|
rm -rf ./OSXTrayHost
|
|
rm ./AlphaFS.dll
|
|
rm ./AlphaVSS.Common.dll
|
|
rm -rf ./licenses/alphavss
|
|
rm -rf ./licenses/MonoMac
|
|
rm -rf ./licenses/gpg
|
|
|
|
# Install extra items for Synology
|
|
cp -R ../web-extra/* webroot/
|
|
cp ../dsm.duplicati.conf .
|
|
|
|
DIRSIZE_KB=$(BLOCKSIZE=1024 du -s | cut -d '.' -f 1)
|
|
let "DIRSIZE=DIRSIZE_KB*1024"
|
|
|
|
tar cf ../package.tgz ./*
|
|
cd ..
|
|
|
|
rm -rf "${DIRNAME}"
|
|
|
|
ICON_72=$(openssl base64 -A -in PACKAGE_ICON.PNG)
|
|
ICON_256=$(openssl base64 -A -in PACKAGE_ICON_256.PNG)
|
|
|
|
git checkout INFO
|
|
echo "version=\"${VERSION}\"" >> "INFO"
|
|
MD5=$(md5 "package.tgz" | awk -F ' ' '{print $NF}')
|
|
echo "checksum=\"${MD5}\"" >> "INFO"
|
|
echo "extractsize=\"${DIRSIZE_KB}\"" >> "INFO"
|
|
echo "package_icon=\"${ICON_72}\"" >> "INFO"
|
|
echo "package_icon_256=\"${ICON_256}\"" >> "INFO"
|
|
|
|
chmod +x scripts/*
|
|
|
|
tar cf "${BASE_FILE_NAME}.spk" INFO LICENSE *.PNG package.tgz scripts conf WIZARD_UIFILES
|
|
|
|
git checkout INFO
|
|
rm package.tgz
|
|
|
|
if [ -f "${GPG_KEYFILE}" ]; then
|
|
if [ "z${KEYFILE_PASSWORD}" == "z" ]; then
|
|
echo -n "Enter keyfile password: "
|
|
read -s KEYFILE_PASSWORD
|
|
echo
|
|
fi
|
|
|
|
GPGDATA=$("${MONO}" "../../BuildTools/AutoUpdateBuilder/bin/Debug/SharpAESCrypt.exe" d "${KEYFILE_PASSWORD}" "${GPG_KEYFILE}")
|
|
if [ ! $? -eq 0 ]; then
|
|
echo "Decrypting GPG keyfile failed"
|
|
exit 1
|
|
fi
|
|
GPGID=$(echo "${GPGDATA}" | head -n 1)
|
|
GPGKEY=$(echo "${GPGDATA}" | head -n 2 | tail -n 1)
|
|
else
|
|
echo "No GPG keyfile found, skipping gpg signing"
|
|
fi
|
|
|
|
if [ "z${GPGID}" != "z" ]; then
|
|
# Now codesign the spk file
|
|
mkdir "${TMPDIRNAME}"
|
|
tar xf "${BASE_FILE_NAME}.spk" -C "${TMPDIRNAME}"
|
|
cat $(find ${TMPDIRNAME} -type f | sort ${SORT_OPTIONS}) > "${BASE_FILE_NAME}.spk.tmp"
|
|
|
|
gpg2 --ignore-time-conflict --ignore-valid-from --yes --batch --armor --detach-sign --default-key="${GPGID}" --output "${BASE_FILE_NAME}.signature" "${BASE_FILE_NAME}.spk.tmp"
|
|
rm "${BASE_FILE_NAME}.spk.tmp"
|
|
|
|
curl --silent --form "file=@${BASE_FILE_NAME}.signature" "${TIMESERVER}" > "${TMPDIRNAME}/syno_signature.asc"
|
|
rm "${BASE_FILE_NAME}.signature"
|
|
|
|
rm "${BASE_FILE_NAME}.spk"
|
|
tar cf "${BASE_FILE_NAME}.spk" -C "${TMPDIRNAME}" $(ls -1 ${TMPDIRNAME})
|
|
|
|
rm -rf "${TMPDIRNAME}"
|
|
fi
|