Merge pull request #149 from gm4tr1x/md5crypt_warnings
[hashcat.git] / tools / deps.sh
index 24c808b..026db51 100755 (executable)
 #!/bin/bash
 # Author: Gabriele Gristina <matrix@hashcat.net>
-# Revision: 1.0
+# Revision: 1.03
 
 ## global vars
-DEPS="make gcc-4.9 g++-4.9 gcc-4.9-multilib g++-4.9-multilib libc6-dev-i386 mingw-w64 build-essential unzip"
-DOWNLOAD_DEPS="ADL_SDK8.zip R352-developer.zip cuda_7.5.18_linux.run NVIDIA-Linux-x86_64-352.21.run gdk_linux_amd64_352_55_release.run AMDAPPSDK-3.0-linux64.tar.bz2"
+DEPS="make gcc g++ gcc-multilib g++-multilib libc6-dev-i386 mingw-w64 build-essential unzip opencl-headers ocl-icd-libopencl1"
+DEPS_AMD_DEV="ocl-icd-opencl-dev"
+DOWNLOAD_DEPS="ADL_SDK8.zip R352-developer.zip gdk_linux_amd64_352_55_release.run"
 
-## root check
-if [ $(id -u) -ne 0 ]; then
-       echo "! Must be root"
-       exit 1
-fi
+## enter the deps directory
+cur_directory=$(dirname ${0})
+script_directory=$(cd ${cur_directory} && pwd -P)
+deps_dir=${script_directory}/../deps
+
+mkdir -p ${deps_dir} # but it should already exist (is part of the repository)
+cd ${deps_dir}
 
-## cleanup 'hashcat-deps' directories
-rm -rf /opt/hashcat-deps/{adl-sdk,cuda-7.5,NVIDIA-Linux-x86_64-352.21,nvidia-gdk,amd-app-sdk} && \
-mkdir -p /opt/hashcat-deps/{tmp,adl-sdk,cuda-7.5,NVIDIA-Linux-x86_64-352.21,nvidia-gdk,amd-app-sdk} && \
-cd /opt/hashcat-deps/tmp
+## cleanup the directories under the 'deps' folder
+rm -rf {adl-sdk*,nvidia-gdk,R352-developer} && \
+mkdir -p {tmp,adl-sdk,nvidia-gdk,R352-developer} && \
+cd tmp/
 
 if [ $? -ne 0 ]; then
-       echo "! Cannot create hashcat-deps directories."
-       exit 1
+  echo "! Cannot create deps directories."
+  exit 1
 fi
 
 ## check dependencies
 i=0
 for d in ${DOWNLOAD_DEPS}; do
-       if [ ! -f "${d}" ]; then
-               echo "! ${d} not found."
-               ((i++))
-       fi
+  if [ ! -f "${d}" ]; then
+    echo "! ${d} not found."
+    ((i++))
+  fi
 done
 
 if [ ${i} -gt 0 ]; then
-       echo "! Please download manually into the directory /opt/hashcat-deps/tmp"
-       exit 1
+  echo "! Please manually download all the above dependencies to the deps/tmp/ directory"
+  exit 1
 fi
 
 ## installing needed packages
 for pkg in ${DEPS}; do
-       apt-get -y install ${pkg}
-       if [ $? -ne 0 ]; then
-               echo "! failed to install ${pkg}"
-               exit 1
-       fi
+
+  # check if the package is already installed
+  dpkg -s ${pkg} &>/dev/null
+  if [ $? -ne 0 ]; then
+    ## root check
+    if [ $(id -u) -ne 0 ]; then
+      echo "! Must be root to install the required package '${pkg}' with apt-get"
+      exit 1
+    fi
+
+    apt-get -y install ${pkg}
+    if [ $? -ne 0 ]; then
+      echo "! failed to install ${pkg}"
+      exit 1
+    fi
+  fi
 done
 
 ## extract ADL SDK
-unzip ADL_SDK8.zip -d /opt/hashcat-deps/adl-sdk-8
+unzip ADL_SDK8.zip -d ${deps_dir}/adl-sdk-8
 ret=$?
 
 if [[ ${ret} -ne 0 ]] && [[ ${ret} -ne 1 ]]; then
-       echo "! failed to extract ADL SDK"
-       exit 1
+  echo "! failed to extract ADL SDK"
+  exit 1
 fi
 
-rm -rf /opt/hashcat-deps/adl-sdk && ln -s /opt/hashcat-deps/adl-sdk-8 /opt/hashcat-deps/adl-sdk
+rm -rf ${deps_dir}/adl-sdk && ln -s ${deps_dir}/adl-sdk-8 ${deps_dir}/adl-sdk
 
 if [ $? -ne 0 ]; then
-       echo "! failed to setup ADL SDK link"
-       exit 1
+  echo "! failed to setup ADL SDK link"
+  exit 1
 fi
 
 ## extract NVAPI
-unzip R352-developer.zip -d /opt/hashcat-deps/
+unzip R352-developer.zip -d ${deps_dir}
 ret=$?
 
 if [[ ${ret} -ne 0 ]] && [[ ${ret} -ne 1 ]]; then
-       echo "! failed to extract NVAPI"
-       exit 1
-fi
-
-## install CUDA SDK
-chmod +x cuda_7.5.18_linux.run && \
-./cuda_7.5.18_linux.run -toolkit -silent -override --toolkitpath=/opt/hashcat-deps/cuda-7.5
-
-if [ $? -ne 0 ]; then
-       echo "! failed to install CUDA SDK"
-       exit 1
-fi
-
-## install NVIDIA Driver
-chmod +x NVIDIA-Linux-x86_64-352.21.run && \
-./NVIDIA-Linux-x86_64-352.21.run -x && \
-mv NVIDIA-Linux-x86_64-352.21 /opt/hashcat-deps/ && \
-cd /opt/hashcat-deps/NVIDIA-Linux-x86_64-352.21 && \
-ln -s libnvidia-ml.so.352.21 libnvidia-ml.so && \
-ln -s libcuda.so.352.21 libcuda.so && \
-cd 32 && \
-ln -s libnvidia-ml.so.352.21 libnvidia-ml.so && \
-ln -s libcuda.so.352.21 libcuda.so && \
-cd /opt/hashcat-deps/tmp
-
-if [ $? -ne 0 ]; then
-       echo "! failed to install NVIDIA Driver"
-       exit 1
+  echo "! failed to extract NVAPI"
+  exit 1
 fi
 
 ## install NVIDIA GPU Deployment Kit
 chmod +x gdk_linux_amd64_352_55_release.run && \
-./gdk_linux_amd64_352_55_release.run --silent --installdir=/opt/hashcat-deps/nvidia-gdk
+./gdk_linux_amd64_352_55_release.run --silent --installdir=${deps_dir}/nvidia-gdk
 
 if [ $? -ne 0 ]; then
-       echo "! failed to install NVIDIA GPU Deployment Kit"
-       exit 1
+  echo "! failed to install NVIDIA GPU Deployment Kit"
+  exit 1
 fi
 
-## extract AMD APP SDK
-tar xjf AMDAPPSDK-3.0-linux64.tar.bz2 && \
-./AMD-APP-SDK-v3.0.130.135-GA-linux64.sh --noexec --target /opt/hashcat-deps/amd-app-sdk-v3.0.130.135
-
-if [ $? -ne 0 ]; then
-       echo "! failed to extract AMD APP SDK"
-       exit 1
-fi
+## check if libOpenCL.so is available (and if not install DEPS_AMD_DEV)
 
-rm -rf /opt/hashcat-deps/amd-app-sdk && ln -s /opt/hashcat-deps/amd-app-sdk-v3.0.130.135 /opt/hashcat-deps/amd-app-sdk
+ls /usr/lib/*/libOpenCL.so &> /dev/null
 
 if [ $? -ne 0 ]; then
-       echo "! failed to setup ADL SDK link"
-       exit 1
+  ## root check
+  if [ $(id -u) -ne 0 ]; then
+    echo "! Must be root to install '${DEPS_AMD_DEV}'"
+    exit 1
+  fi
+
+  apt-get -y install ${DEPS_AMD_DEV}
+  if [ $? -ne 0 ]; then
+    echo "! failed to install ${DEPS_AMD_DEV}"
+    exit 1
+  fi
 fi
 
 echo "> oclHashcat dependencies have been resolved."