#!/bin/bash prerequisites(){ failed=0 missing="(not found)" [[ $1 ]] && output=": &&" || output="printf"; $output "$w_l CHECK for binaries\n ==================\n"; # check for a forgotten and unusable 'upx' and remove this crap [ -x "$bindir"/upx ] && "$bindir"/upx -V &>/dev/null || rm -f "$bindir"/upx &>/dev/null; for e in "${binvars[@]}" do if hash "$e" 2>/dev/null then einfo=$(which "$e") printf -v pad %40s e=$e$pad e=${e:0:15} $output "$w_l have\t$g_l$e $y_l$einfo\n" else failed=1 printf -v pad %40s e=$e$pad e=${e:0:15} $output "$r_l need\t$w_l$e $r_l$missing\n" fi done if hash upx 2>/dev/null; then upxversion=($(upx -V | awk 'NR==1 { verok=$2>=3.91; printf "%.2f %i", $2, verok }')); $output "$w_l have$g_l upx$y_l\t\t"$w_l"Version$P ${upxversion[0]}"; if [ ${upxversion[1]} == 1 ] then $output "$g_l ok\n" else $output "$r_l nok\n" failed=1 fi fi $output " \n $w_l CHECK for headers\n =================\n" for e in "${headervars[@]}" do e1=$(find /usr/include/* | grep -m1 "$e") if [ ${#e1} -gt 8 ] then printf -v pad %40s e=$e$pad e=${e:0:15} $output "$w_l have\t$g_l$e$y_l $e1\n" else failed=1 printf -v pad %40s e=$e$pad e=${e:0:15} $output "$r_l need\t$w_l$e$r_l $missing\n" fi done $output " \n $w_l CHECK for libraries\n ===================\n" for e in "${libvars[@]}" do e1=$(find /usr/lib* 2>/dev/null | grep -m1 "$e") if [ ${#e1} -gt 8 ] then printf -v pad %40s e=$e$pad e=${e:0:15} $output "$w_l have\t$g_l$e$y_l $e1\n" else failed=1 printf -v pad %40s e=$e$pad e=${e:0:15} $output "$r_l need\t$w_l$e$r_l $missing\n"; fi done if [ "$(uname -m)" == "x86_64" ] then $output " \n $w_l CHECK for zlib32\n ================\n" e="zlib32" e1="/usr/lib/libz.so" e2="/usr/lib32/libz.so.1" if [ -f $e1 ] then printf -v pad %40s e=$e$pad e=${e:0:15} $output "$w_l have\t$g_l$e$y_l $e1\n" elif [ -f $e2 ] then printf -v pad %40s e=$e$pad e=${e:0:15} $output "$w_l have\t$g_l$e$y_l $e2\n" else failed=1 printf -v pad %40s e=$e$pad e=${e:0:15} $output "$r_l need\t$w_l$e$r_l $missing\n" fi fi return $failed } # Parameters (all optional): # $1: installer name (or "auto") # $2: add architecture (not implemented yet) # # Example: # syscheck debian_os # call installer 'debian_os' (Do not care about the actual Linux distribution.) syscheck(){ [[ $1 ]] && [ "$1" != "auto" ] && override="$1" now=$2 if [ -d "$osdir" ] then cd "$osdir" x=(*) for i in "${x[@]}" do source "$i" done fi [ -z ${3+x} ] && binvars=( dialog grep gawk wget tar bzip2 svn xz upx patch gcc make scp sshpass openssl dos2unix ) || binvars=( $(echo "$3" | tr ' ' '\n') ) [ -z ${4+x} ] && headervars=( crypto.h libusb.h pcsclite.h pthread.h ) || headervars=( $(echo "$4" | tr ' ' '\n') ) [ -z ${5+x} ] && libvars=( libccidtwin.so ) || libvars=( $(echo "$5" | tr ' ' '\n') ) sanity=1 if ! prerequisites silent || [ "$now" == "now" ] then clear s3logo prerequisites sanity=0 installer="unknown" # Debian and Ubuntu [ -f /etc/debian_version ] && installer="debian_os" # CentOS and Redhat [ -f /etc/redhat-release ] && installer="redhat_os" # Manjaro (/etc/os-release) [ -f /etc/manjaro-release ] || [ -f /etc/arch-release ] && installer="manjaro_os" # SuSE (/etc/SuSE-release is depreciated -> check for YaST2) [ -d /etc/YaST2 ] && installer="suse_os" # Optional override via parameter #[[ $override ]] && installer=$override; printf "\n$w_l Selected installer: $P$installer\n" if type -t "$installer" >/dev/null then $installer && prerequisites silent && sanity=1 else printf "\n$r_l Needs manual installation.\n" fi printf "$re_\n" fi return $sanity }