#!/bin/bash # Script for hardware post on snipeIT and print label by angestöpselt e.V. # v0.4 export $(curl --silent 10.200.4.10/.env | xargs) echo '#####################################' echo '####### exec post_hardware.sh #######' echo '#####################################' echo "looking for anydesk source list" >> ${LOG} if [ -f etc/apt/sources.list.d/anydesk-stable.list ] ; then echo "Anydesk source.list besteht" >> ${LOG} else sudo wget -qO - https://keys.anydesk.com/repos/DEB-GPG-KEY | apt-key add - sudo echo "deb http://deb.anydesk.com/ all main" > /etc/apt/sources.list.d/anydesk-stable.list fi echo "update apt cache" >> ${LOG} sudo apt-get update -qq echo "install dependencies" >> ${LOG} sudo apt-get install -y -qq jq curl wkhtmltopdf zenity anydesk # prepare for publishing computer to snipe-IT category=`hostnamectl | grep Chassis | cut -c 21-` #hdd=`cat "/sys/class/block/sda/size" | awk '{print $1 / 1024 / 1024 }' | awk -F "." '{print $1}'` hdd=$(lsblk -dno SIZE --fs /dev/sda | awk -F "," '{print $1}') memory=`(grep MemTotal /proc/meminfo | awk '{print int($2 / 1000000 + 0.5)}')` os=`hostname | awk -F- '{print $1}'` version=`cat /etc/os-release | grep VERSION_ID | grep -oP '(?<=").*(?=")'` cpu=`cat /proc/cpuinfo | grep 'model name' | uniq | cut -c14-39 | sed -e 's/([^()]*)//g' | tr -d ' ' | cut -c -12` mac=`ip link | sed -n "/BROADCAST.*state UP/{n;p}" | tail -1 | tr -s " " | cut -d" " -f3` anydeskid=`anydesk --get-id` serialno=`sudo dmidecode -s system-serial-number` # name is for a nice label with some data name=`echo $os/$version/$cpu/$memory/$hdd` # Check the category for required field: model_id and fill laptop variables if [[ $category = "laptop" || $category = "notebook" ]]; then model=2 battery=`acpi -V | grep '^Battery.*%$' | tail -c 4` display=`xrandr | awk '/ connected/{print sqrt( ($(NF-2)/10)^2 + ($NF/10)^2 )/2.54}' | cut -c -2 | head -n 1` else model=1 fi # Check if an optical drive is available if [[ $(lsblk | grep sr0) ]]; then odd=ja else odd=nein fi # check, based on mac address curl --request GET \ --url 'https://orga.z31.it/api/v1/hardware?limit=5&search='$mac'' \ --header 'accept: application/json' \ --header 'authorization: Bearer '$API_KEY'' \ --header 'content-type: application/x-www-form-urlencoded' > $HOME/check_result.json # look for asset tag in payload asset_tag=$(jq -j .rows[].asset_tag $HOME/check_result.json) if [ ! -z ${asset_tag} ] then zenity --info --text "Der Rechner ist ist bereits eingetragen RE${asset_tag}" --width=500 --height=200 #echo " Der Rechner ist bereits eingetragen RE${asset_tag}" exit 0 else echo "preparing asset data in json" post_data() { cat < $HOME/result.json # get missing information from payload asset_tag=$(cat $HOME/result.json | jq -r '.payload.asset_tag') result_jq=$(cat $HOME/result.json | jq -r '.status') erstellt_am=$(cat $HOME/result.json | jq -r '.payload.created_at') echo "checking if the asset has been created and display an error from the snipeIT api" >> ${LOG} for result in $result_jq do case $result in success) echo "${category} RE${asset_tag}, erstellt am ${erstellt_am}" >> ${LOG} echo "MAC-Adresse ${mac} | Anydesk-ID ${anydeskid}" >> ${LOG} touch "/home/computerspende/RE${asset_tag}" echo "erstellt am: ${erstellt_am}" >> /home/computerspende/RE${asset_tag} ## This part is creating a file with html content for the printer cat >/tmp/rechner.html <

angestoepselt e.V.
Passwort: csw

RE${asset_tag}

${name}

EOL exec 2>/dev/null # vernichtet nervige Fehlermeldungen zenity --question --title "Label drucken" --text "\nEs wurde folgender PC eingetragen: \n\nRechnernr: $asset_tag \nTyp: $category \nOS: $os $version \nCPU: $cpu \nRAM: $memory GB \n\nWillst du jetzt das Label drucken?" --no-wrap --ok-label "Ja" --cancel-label "Nein" if [ "$?" -eq "0" ]; then ## wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb # parsing the variables into html file and make a nice looking pdf for printing # page-heigt and page-width are 99012 Large Adress Labels, you can set this by default in cups Print Options with "Media Size" wkhtmltopdf --page-height 36mm --page-width 89mm /tmp/rechner.html /tmp/rechner.pdf echo 'Label drucken' >> ${LOG} ## change the ip of the printer host # -P is the printer name of cups -> https://CUPS_SERVER_IP:631/printers/ lpr -H ${PRINTER_IP}:631 -P DYMO -o landscape /tmp/rechner.pdf zenity --info --text="Das ist der Rechner\n\nRE$asset_tag" --width=500 --height=200 echo 'Label wurde gedruckt' >> ${LOG} else echo "es wurde nichts gedruckt" >> ${LOG} fi ;; null) zenity --info --text "Das hat nicht geklappt bitte führe das Script von Hand aus.\nBenutze bitte im Terminal:\n\ncurl -sSL pxe.z31.it/post_hardware.sh | bash" --width=500 --height=200 zenity --error --text "Fehlermeldung: \n\n$(cat $HOME/result.json | jq -r '.error')" --width=500 --height=200 ;; esac done fi echo '#####################################' echo '##### finished post_hardware.sh #####' >> ${LOG} echo '#####################################'