diff options
author | Kenneth Skovhede <kenneth@hexad.dk> | 2017-01-14 14:10:55 +0300 |
---|---|---|
committer | Kenneth Skovhede <kenneth@hexad.dk> | 2017-01-14 14:10:55 +0300 |
commit | 56f70b62c9a83cc47df454caf99d0e88f24e5110 (patch) | |
tree | 983175db4a9eda4d795d4a800fad5912d4675be3 /build-installers.sh | |
parent | c088db451ba26b4f75a4c19e02dcb8b1a27935dc (diff) |
Added scripts to build deb and rpm packages locally through Docker.
Changed Windows build to use a local virtual machine.
Updated installer build script to use the local builds instead of the AWS ones.
Diffstat (limited to 'build-installers.sh')
-rwxr-xr-x | build-installers.sh | 217 |
1 files changed, 41 insertions, 176 deletions
diff --git a/build-installers.sh b/build-installers.sh index e8d26d342..3ad332f1b 100755 --- a/build-installers.sh +++ b/build-installers.sh @@ -6,6 +6,18 @@ then exit 1 fi +while true +do + DOCKER_RESULT=$(docker ps) + if [ "$?" != "0" ] + then + echo "It appears the Docker daemon is not running, make sure you started it" + read -p "Press [Enter] key to AFTER you started Docker" + continue + fi + break +done + GITHUB_TOKEN_FILE="${HOME}/.config/github-api-token" GPG_KEYFILE="${HOME}/.config/signkeys/Duplicati/updater-gpgkey.key" AUTHENTICODE_PFXFILE="${HOME}/.config/signkeys/Duplicati/authenticode.pfx" @@ -14,15 +26,6 @@ MONO=/Library/Frameworks/Mono.framework/Commands/mono GPG=/usr/local/bin/gpg2 -FEDORA_INSTANCE_ID=i-deef5352 -FEDORA_PUBKEY=AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM3OWpUJOqoh9hq/k48g/FFLqnxUHxecVZM/jRD69Y/cn0OygsSyi3E5X/PVgtfyoced/HV788f9rDpLbY08jXg= - -DEBIAN_INSTANCE_ID=i-f237887e -DEBIAN_PUBKEY=AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJUDOPM7lBBOUtRbAZ8DUP7hHN88CvSvKzWQ15uXcOhdMgtqlznSQiLNfagD/AlqnPsOXWCnNN0fM+QAeMuMBEY= - -WINDOWS_INSTANCE_ID=i-be348b32 -WINDOWS_PUBKEY=AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBK5MD6Jg+p6rJmJfx8lWqIY+ZLDEYcGIwcf+eGzPSz4QKuOgxtDo0xgg3/OrxJibyk7sBWkT0f9RHD1qN9Nz/o8= - ZIPFILE=`basename "$1"` VERSION=`echo "${ZIPFILE}" | cut -d "-" -f 2 | cut -d "_" -f 1` BUILDTYPE=`echo "${ZIPFILE}" | cut -d "-" -f 2 | cut -d "_" -f 2` @@ -40,9 +43,6 @@ SIGNAME="duplicati-${BUILDTAG_RAW}-signatures.zip" UPDATE_TARGET="Updates/build/${BUILDTYPE}_target-${VERSION}" -KEYFILE=~/.ssh/duplicati-build-machines-key.pem -SSH_OPTIONS="-i ${KEYFILE} -o UserKnownHostsFile=./tmp/known_hosts" - echo "Filename: ${ZIPFILE}" echo "Version: ${VERSION}" echo "Buildtype: ${BUILDTYPE}" @@ -51,79 +51,6 @@ echo "RPMName: ${RPMNAME}" echo "DEBName: ${DEBNAME}" echo "SPKName: ${SPKNAME}" -start_aws_instance() { - - local STATE=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["State"]["Name"]'` - - if [ "${STATE}" == "stopping" ]; then - echo -n "Instance has state '${STATE}', waiting .." - while [ "${STATE}" == "stopping" ]; do - echo -n "." - sleep 5 - local STATE=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["State"]["Name"]'` - done - echo "" - fi - - local STATE=`aws ec2 start-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["StartingInstances"][0]["CurrentState"]["Name"]'` - - if [ "${STATE}" != "running" ]; then - echo -n "Instance has state '${STATE}', waiting .." - - while [ "${STATE}" != "running" ]; do - echo -n "." - sleep 5 - local STATE=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["State"]["Name"]'` - done - - echo "" - fi - -} - -stop_aws_instance() { - local STATE=`aws ec2 stop-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["StoppingInstances"][0]["CurrentState"]["Name"]'` - echo "Instance state is now: ${STATE}" -} - -ssh_connect_to_instance() { - local DNSNAME=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["PublicDnsName"]'` - local IPADDR=`aws ec2 describe-instances --profile=duplicati-builder --instance-ids $1 | python -c 'import sys, json; print json.load(sys.stdin)["Reservations"][0]["Instances"][0]["PublicIpAddress"]'` - - if [ -d "./tmp" ]; then - rm -rf "./tmp" - fi - - mkdir "./tmp" - - echo "${DNSNAME},${IPADDR} ecdsa-sha2-nistp256 $3" > "./tmp/known_hosts" - - SSH_HOST="$2@${DNSNAME}" - - ssh ${SSH_OPTIONS} "${SSH_HOST}" "cd" > /dev/null - local EXITCODE=$? - - if [ ! "${EXITCODE}" -eq 0 ]; then - echo -n "Server did not allow login, waiting .." - while [ ! "${EXITCODE}" -eq 0 ]; do - echo -n "." - sleep 5 - - ssh ${SSH_OPTIONS} "${SSH_HOST}" "cd" > /dev/null - local EXITCODE=$? - done - echo "" - fi -} - -ssh_upload_file() { - scp ${SSH_OPTIONS} "$1" "${SSH_HOST}:" -} - -ssh_run_commands() { - cat "$1" | ssh ${SSH_OPTIONS} "${SSH_HOST}" -} - build_file_signatures() { if [ "z${GPGID}" != "z" ]; then echo "$GPGKEY" | "${GPG}" "--passphrase-fd" "0" "--batch" "--yes" "--default-key=${GPGID}" "--output" "$2.sig" "--detach-sig" "$1" @@ -153,11 +80,10 @@ else echo "No GPG keyfile found, skipping gpg signatures" fi -# Pre-boot instances to keep the waiting to a minimun +# Pre-boot virtual machine +echo "Booting Win10 build instance" +VBoxHeadless --startvm Duplicati-Win10-Build & -aws ec2 start-instances --profile=duplicati-builder --instance-ids "${DEBIAN_INSTANCE_ID}" &> /dev/null -aws ec2 start-instances --profile=duplicati-builder --instance-ids "${FEDORA_INSTANCE_ID}" &> /dev/null -aws ec2 start-instances --profile=duplicati-builder --instance-ids "${WINDOWS_INSTANCE_ID}" &> /dev/null # Then do the local build to mask the waiting a little more @@ -167,11 +93,11 @@ echo "Building OSX package locally ..." echo "" echo "Enter local sudo password..." -cd Installer/OSX +cd "Installer/OSX" bash "make-dmg.sh" "../../$1" mv "Duplicati.dmg" "../../${UPDATE_TARGET}/${DMGNAME}" mv "Duplicati.pkg" "../../${UPDATE_TARGET}/${PKGNAME}" -cd ../.. +cd "../.." echo "" echo "" @@ -185,112 +111,48 @@ cd ../.. echo "" echo "" -echo "Starting Debian build instance" - -start_aws_instance "${DEBIAN_INSTANCE_ID}" - -ssh_connect_to_instance "${DEBIAN_INSTANCE_ID}" "ubuntu" "${DEBIAN_PUBKEY}" +echo "Building Debian deb with Docker ..." -echo "Instance has started, uploading binary package ..." - -ssh_upload_file "$1" - -echo "Running build script on server ..." - -cat > "./tmp/debian-commands.sh" <<EOF -cd duplicati/Installer/debian -git pull -bash make-binary-package.sh "../../../${ZIPFILE}" -rm -rf "../../../${ZIPFILE}" -EOF +cd "Installer/debian" +bash "docker-build-binary.sh" "../../$1" +cd "../.." -ssh_run_commands "./tmp/debian-commands.sh" - -echo "Downloading binary package ..." - -scp ${SSH_OPTIONS} "${SSH_HOST}:duplicati/Installer/debian/${DEBNAME}" "./tmp" -ssh ${SSH_OPTIONS} "${SSH_HOST}" "rm -rf duplicati/Installer/debian/duplicati_${VERSION}-*" - -echo "Done, stopping instance ..." - -stop_aws_instance "${DEBIAN_INSTANCE_ID}" - -mv "./tmp/${DEBNAME}" "${UPDATE_TARGET}/" +mv "Installer/debian/${DEBNAME}" "${UPDATE_TARGET}" +echo "Done building deb package" echo "" echo "" -echo "Starting Fedora build instance ..." - -start_aws_instance "${FEDORA_INSTANCE_ID}" - -ssh_connect_to_instance "${FEDORA_INSTANCE_ID}" "ec2-user" "${FEDORA_PUBKEY}" - -echo "Instance has started, uploading binary package ..." +echo "Building Fedora RPM with Docker ..." -ssh_upload_file "$1" +cd "Installer/fedora" +bash "docker-build-binary.sh" "../../$1" +cd "../.." -echo "Running build script on server ..." +mv "Installer/fedora/${RPMNAME}" "${UPDATE_TARGET}" -cat > "./tmp/fedora-commands.sh" <<EOF -rm -rf ~/rpmbuild -rpmdev-setuptree -cd duplicati/Installer/fedora -git pull -bash make-binary-package.sh "../../../${ZIPFILE}" -rm -rf "../../../${ZIPFILE}" -EOF - -ssh_run_commands "./tmp/fedora-commands.sh" - -echo "Downloading binary package ..." - -scp ${SSH_OPTIONS} "${SSH_HOST}:rpmbuild/RPMS/noarch/${RPMNAME}" "./tmp" - -echo "Done, stopping instance ..." - -stop_aws_instance "${FEDORA_INSTANCE_ID}" - -mv "./tmp/${RPMNAME}" "${UPDATE_TARGET}/" +echo "Done building rpm package" echo "" echo "" -echo "Starting Windows build instance" - -start_aws_instance "${WINDOWS_INSTANCE_ID}" - -ssh_connect_to_instance "${WINDOWS_INSTANCE_ID}" "ec2-user" "${WINDOWS_PUBKEY}" +echo "Building Windows instance in virtual machine" -echo "Instance has started, uploading binary package ..." - -ssh_upload_file "$1" - -echo "Running build script on server ..." - -cat > "./tmp/windows-commands.sh" <<EOF +cat > "tmp-windows-commands.bat" <<EOF SET VS120COMNTOOLS=%VS140COMNTOOLS% -cd duplicati\\Installer\\Windows -git pull -build-msi.bat "..\\..\\..\\${ZIPFILE}" -del /q "..\\..\\..\\${ZIPFILE}" +cd \\Duplicati\\Installer\\Windows +build-msi.bat "../../$1" EOF -ssh_run_commands "./tmp/windows-commands.sh" - -echo "Downloading binary packages ..." +ssh IEUser@192.168.56.101 "\\Duplicati\\tmp-windows-commands.bat" +ssh IEUser@192.168.56.101 "shutdown /s /t 0" -scp ${SSH_OPTIONS} "${SSH_HOST}:duplicati/Installer/Windows/Duplicati.msi" "./tmp" -scp ${SSH_OPTIONS} "${SSH_HOST}:duplicati/Installer/Windows/Duplicati-32bit.msi" "./tmp" +rm "tmp-windows-commands.bat" -echo "Done, stopping instance ..." - -stop_aws_instance "${WINDOWS_INSTANCE_ID}" - -mv "./tmp/Duplicati.msi" "${UPDATE_TARGET}/${MSI64NAME}" -mv "./tmp/Duplicati-32bit.msi" "${UPDATE_TARGET}/${MSI32NAME}" +mv "./Installer/Windows/Duplicati.msi" "${UPDATE_TARGET}/${MSI64NAME}" +mv "./Installer/Windows/Duplicati-32bit.msi" "${UPDATE_TARGET}/${MSI32NAME}" if [ -f "${AUTHENTICODE_PFXFILE}" ] && [ -f "${AUTHENTICODE_PASSWORD}" ]; then echo "Performing authenticode signing of installers" @@ -432,3 +294,6 @@ if [ -f ~/.config/duplicati-mirror-sync.sh ]; then else echo "Skipping CDN update" fi + +VBoxManage controlvm "Duplicati-Win10-Build" poweroff + |