|
|
- #!/bin/bash
-
- # Salt Master/Minion preconfiguration script
- # Copyright (C) 2018 Pekka Helenius
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- ###########################################################
-
- # Run on Ubuntu 18.04 LTS Salt master
-
- # Compiles LAS tools and CloudCompare for GIS workstation (Ubuntu & Windows)
- # Downloads necessary GIS tools
-
- OSES=(windows ubuntu-1804)
-
- # Required OS to run this script
- REQUIRED_OS="Ubuntu"
-
- # Compile CloudCompare for Ubuntu?
- # TODO: support false option
- CC_GET_UBUNTU=true
-
- # Get this variable from the main script runme.sh
- # The variable defined whether we should only run local Salt minion (which is running
- # on Ubuntu 18.04 LTS) or not
- #
-
- if [[ $1 == "true" ]]; then
- local_only=""
- fi
-
- if [[ $2 == "true" ]]; then
- winminions_present=''
- fi
-
- ########################
-
- # INSTALL DEV PACKAGES
-
- function devPackages() {
-
- if [[ -f /etc/os-release ]]; then
- DISTRO=$(grep ^PRETTY_NAME /etc/os-release | grep -oP '(?<=")[^\s]*')
-
- if [[ $DISTRO == ${REQUIRED_OS} ]]; then
-
- # for LAStools
-
- echo -e "Updating local package databases & installing necessary dev tools for LASTools & CloudCompare\n"
- apt-get update
- apt-get install -y make git build-essential
-
- if [[ $CC_GET_UBUNTU == "true" ]]; then
-
- # for CloudCompare
-
- apt-get install -y cmake libhpdf-dev debhelper fakeroot
-
- CC_DEVDEPENDS=(
- libhpdf-dev
- libqt5opengl5-dev
- libcgal-dev
- libdxflib-dev
- libglew-dev
- libfreenect-dev
- libgdal-dev
- liblas-c-dev
- liblas-dev
- libboost-all-dev
- libjsoncpp-dev
- libpdal-dev
- libcurl4-gnutls-dev
- )
-
- function checkDevVersions() {
-
- function generateDevVersions() {
-
- if [[ ! -f compiled/cc_devpkg_versions ]]; then
- touch compiled/cc_devpkg_versions
- fi
-
- for devpkg_version in ${CC_DEVDEPENDS[@]}; do
- echo -e "$(dpkg -s $devpkg_version | grep -E '^Package:|^Version:' | awk '{print $2}' | tr '\n' ' ')" \
- >> compiled/cc_devpkg_versions
-
- if [[ $? -ne 0 ]]; then
- exit 1
- fi
-
- done
-
- }
-
- # Check if we need to update our CloudCompare makedepend packages
-
- if [[ -f compiled/cc_devpkg_versions ]]; then
-
- local IFS=$'\n'
-
- for devpackage in $(cat compiled/cc_devpkg_versions); do
-
- if [[ $(apt-cache policy $(echo $devpackage | awk '{print $1}') | grep 'Candidate' | awk '{print $2}') != $(echo $devpackage | awk '{print $2}') ]]; then
- LOCAL_DEVPKG_OLD_FLAG=""
- fi
-
- done
-
- if [[ -v LOCAL_DEVPKG_OLD_FLAG ]]; then
- apt-get install -y ${CC_DEVDEPENDS[*]}
- rm compiled/cc_devpkg_versions
- fi
-
- else
-
- touch compiled/cc_devpkg_versions
- apt-get install -y ${CC_DEVDEPENDS[*]}
-
- generateDevVersions
-
- fi
-
- if [[ ! -f compiled/cc_devpkg_versions ]]; then
- generateDevVersions
- fi
-
- }
-
- checkDevVersions
-
- fi
-
- else
- echo -e "This is not ${REQUIRED_OS} Linux distribution. Aborting.\n"
- exit 1
- fi
- else
- echo -e "Can't recognize your Linux distribution. Aborting.\n"
- exit 1
- fi
-
- }
-
- ########################
-
- # COMPILE LASTOOLS
-
- # Compile open-source LAS tools
-
- # Q: What is this?
- # A: See descriptions of binaries below
-
- # Main reason for this: Not available from software repositories but
- # still an essential toolset for GIS workflow
-
- # las2las: extracts last returns, clips, subsamples, translates, etc ...
- # las2txt: turns LAS into human-readable and easy-to-parse ASCII
- # lasdiff: compares the LIDAR data of two LAS/LAZ/ASCII files and reports whether they are identical or whether they are different.
- # lasindex: creates a spatial index LAX file for fast spatial queries
- # lasinfo: prints out a quick overview of the contents of a LAS file
- # lasmerge: merges several LAS or LAZ files into a single LAS or LAZ file
- # lasprecision: analyses the actual precision of the LIDAR points
- # laszip: compresses the LAS files in a completely lossless manner
- # txt2las: converts LIDAR data from ASCII text to binary LAS format
-
- LASTOOLS=(
- las2las
- las2txt
- lasdiff
- lasindex
- lasinfo
- lasmerge
- lasprecision
- laszip
- txt2las
- )
-
- # There are closed source LAS tools available for Windows platform
-
- LASTOOLS_WIN=(
- blast2dem
- blast2iso
- bytecopy
- bytediff
- e572las
- las2dem
- las2iso
- las2shp
- las2tin
- lasboundary
- lascanopy
- lasclassify
- lasclip
- lascolor
- lascontrol
- lascopy
- lasduplicate
- lasgrid
- lasground
- lasground_new
- lasheight
- laslayers
- lasnoise
- lasoptimize
- lasoverage
- lasoverlap
- lasplanes
- laspublish
- lasreturn
- lassort
- lassplit
- lasthin
- lastile
- lastool
- lastrack
- lasvalidate
- lasview
- lasvoxel
- shp2las
- sonarnoiseblaster
- )
-
- function compileLAStools() {
-
- if [[ ! -d $1/files/lastools ]]; then
- mkdir -p $1/files/lastools
- fi
-
- if [[ $(ls $1/files/lastools | wc -l) -eq 0 ]]; then
-
- if [[ ! -d compiled/LAStools ]]; then
- git clone https://github.com/LAStools/LAStools
- cd LAStools/
- make -j$(nproc --ignore 1)
-
- if [[ $? -eq 0 ]]; then
- cd ..
- mv LAStools compiled/
- fi
- fi
-
- if [[ $? -eq 0 ]]; then
-
- if [[ $1 = *"ubuntu"* ]]; then
-
- for lastool in ${LASTOOLS[*]}; do
- cp ./compiled/LAStools/src/$lastool \
- $1/files/lastools/
- done
-
- elif [[ $1 = *"windows"* ]]; then
-
- if [[ ! -v local_only ]] && [[ -v winminions_present ]]; then
-
- for lastool_win1 in ${LASTOOLS[*]}; do
- cp ./compiled/LAStools/bin/$lastool_win1.exe \
- $1/files/lastools/
- done
-
- for lastool_win2 in ${LASTOOLS_WIN[*]}; do
- cp ./compiled/LAStools/bin/$lastool_win2.exe \
- $1/files/lastools/
- done
- fi
- fi
- fi
- fi
-
- }
-
- ########################
-
- function getOtherGIS() {
-
- if [[ $CC_GET_UBUNTU == "true" ]]; then
-
- if [[ $1 = *"ubuntu"* ]]; then
-
- # Compile CloudCompare for Ubuntu
- #
- # Main reason for this: Not yet available as a binary download for Ubuntu 18.04 LTS
- # BREAKS EASILY!
- # Issues: compatibility with other Linux distros may not be stable.
- # Currently available only for Ubuntu
-
- if [[ ! -f compiled/cloudcompare_${CC_VERSION_UBUNTU}-1_amd64.deb ]] || [[ -v LOCAL_DEVPKG_OLD_FLAG ]] ; then
-
- # Get CloudCompare source files & Debian control files
- wget http://http.debian.net/debian/pool/main/c/cloudcompare/cloudcompare_${CC_VERSION_UBUNTU}.orig.tar.gz
- wget http://http.debian.net/debian/pool/main/c/cloudcompare/cloudcompare_${CC_VERSION_UBUNTU}-1.debian.tar.xz
-
- # Extract CloudCompare source files
- tar xf cloudcompare_${CC_VERSION_UBUNTU}.orig.tar.gz
-
- # Make CloudCompare source root directory compatible with dpkg-buildpackage command
- mv CloudCompare-master cloudcompare-${CC_SHORT_UBUNTU}
-
- # Extract Debian control files
- tar xf cloudcompare_${CC_VERSION_UBUNTU}-1.debian.tar.xz --directory cloudcompare-${CC_SHORT_UBUNTU}/
-
- # Compile CloudCompare
- cd cloudcompare-${CC_SHORT_UBUNTU}
- dpkg-buildpackage -rfakeroot -b -us -uc -j$(nproc --ignore 1)
-
- if [[ $? -eq 0 ]]; then
- cd ..
- mv ./{*.tar.*,*.buildinfo,*.changes,*.deb} compiled/
- rm -Rf cloudcompare-${CC_SHORT_UBUNTU}
- fi
- fi
-
- if [[ ! -f $1/files/cloudcompare_${CC_VERSION_UBUNTU}-1_amd64.deb ]]; then
- cp compiled/cloudcompare_${CC_VERSION_UBUNTU}-1_amd64.deb $1/files/
- fi
-
- fi
- fi
-
- if [[ $1 == *"windows"* ]]; then
-
- if [[ ! -v local_only ]] && [[ -v winminions_present ]]; then
-
- if [[ ! -d compiled/windows ]]; then
- mkdir -p compiled/windows
- fi
-
- # Download Visual C++ Redistributable Packages for Visual Studio 2013 for Windows
- # Required by CloudCompare
-
- if [[ ! -f compiled/windows/vcrun2013_64.exe ]]; then
- wget https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe -O \
- compiled/windows/vcrun2013_64.exe
- fi
-
- # Download CloudCompare for Windows
-
- if [[ ! -f compiled/windows/CloudCompare_${CC_VERSION_WIN}_setup_x64.exe ]]; then
- wget http://cloudcompare.org/release/CloudCompare_${CC_VERSION_WIN}_setup_x64.exe -O \
- compiled/windows/CloudCompare_${CC_VERSION_WIN}_setup_x64.exe
- fi
-
- # Download QGIS for Windows
-
- if [[ ! -f compiled/windows/QGIS-OSGeo4W-${QGIS_VERSION_WIN}-Setup-x86_64.exe ]]; then
- wget http://qgis.org/downloads/QGIS-OSGeo4W-${QGIS_VERSION_WIN}-Setup-x86_64.exe -O \
- compiled/windows/QGIS-OSGeo4W-${QGIS_VERSION_WIN}-Setup-x86_64.exe
- fi
-
- # Download gpx2shp. NOTE: Outdated version, but only out-of-the-box binary for Windows available
-
- GPX2SHP_WIN_1="gpx2shp-0.69_win_notest"
- GPX2SHP_WIN_2="gpx2shp-0.69_wintest"
-
- if [[ ! -f compiled/windows/gpx2shp.exe ]]; then
- wget https://dotsrc.dl.osdn.net/osdn/gpx2shp/13458/${GPX2SHP_WIN_1}.zip -O \
- compiled/windows/${GPX2SHP_WIN_1}.zip
- unzip -j compiled/windows/${GPX2SHP_WIN_1}.zip ${GPX2SHP_WIN_2}/gpx2shp.exe -d compiled/windows/ &> /dev/null
- rm compiled/windows/${GPX2SHP_WIN_1}.zip
- fi
-
- # Download Merkaartor
-
- if [[ ! -f compiled/windows/merkaartor-${MERK_VERSION_WIN}-64bit.exe ]]; then
- wget http://merkaartor.be/files/merkaartor-${MERK_VERSION_WIN}-64bit.exe -O \
- compiled/windows/merkaartor-${MERK_VERSION_WIN}-64bit.exe
- fi
-
- # Download Quickroute GPS
-
- # NOTE: Get MSI GUID for 32-bit uninstaller (for sls) by running the following in Windows Powershell:
- # get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name
-
- if [[ ! -f compiled/windows/QuickRoute_${QR_VERSION_WIN}_Setup.msi ]]; then
- wget http://www.matstroeng.se/quickroute/download/QuickRoute_${QR_VERSION_WIN}_Setup.msi -O \
- compiled/windows/QuickRoute_${QR_VERSION_WIN}_Setup.msi
- fi
-
- # Download GPS Daemon
-
- # NOTE: Deprecated version. Newer version is available for Unix platforms
-
- if [[ ! -f compiled/windows/GPSd-4-win_${GPSD_VERSION_WIN}.exe ]]; then
- wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/gpsd-4-win/GPSd-4-win_${GPSD_VERSION_WIN}.exe -O \
- compiled/windows/GPSd-4-win_${GPSD_VERSION_WIN}.exe
- fi
-
- ## GPSBabel
- #
- #wget https://www.gpsbabel.org/plan9.php
- #
- #GPSBabel-1.5.4-Setup.exe
-
- for win_installer in compiled/windows/*; do
- cp $win_installer /srv/salt/win/repo-ng/installers/
- done
-
- cp compiled/windows/gpx2shp.exe /srv/salt/gis_windows/files/
- rm /srv/salt/win/repo-ng/installers/gpx2shp.exe
- fi
- fi
- }
-
- ########################
-
- devPackages
-
- # Create directory for compiled programs
- if [[ ! -d compiled ]]; then
- mkdir compiled
- fi
-
- for OS in ${OSES[*]}; do
-
- if [[ $OS = *"ubuntu"* ]]; then
-
- CC_VERSION_UBUNTU="2.9.1+git20180223"
- CC_SHORT_UBUNTU="2.9.1"
-
- elif [[ $OS == *"windows"* ]] && [[ ! -v $skip_windows ]]; then
-
- CC_VERSION_WIN="v2.10.alpha"
- CC_SHORT_WIN="2.10"
- MERK_VERSION_WIN="0.18.3"
- QGIS_VERSION_WIN="2.18.19-1"
- QR_VERSION_WIN="2.4"
- GPSD_VERSION_WIN="0.2.0.0"
-
- fi
-
- OS_SALT_PATH="/srv/salt/gis_${OS}"
-
- compileLAStools ${OS_SALT_PATH}
-
- getOtherGIS ${OS_SALT_PATH}
-
- done
-
- unset LOCAL_DEVPKG_OLD_FLAG
- unset local_only
- unset winminions_present
|