#!/usr/bin/env bash
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set  -e
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SUDO = "" 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Use sudo if not root 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  [ [  ! $( id -u)  -eq 0  ] ] ;  then 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  [ [  -z $( which sudo)  ] ] ;  then 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    echo  "Please install sudo or run as root" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    exit  1 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  fi 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  SUDO = "sudo" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								fi 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Check if stdin is open 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  [  -t 0  ] ;  then 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  INTERACTIVE = 1 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								fi 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Install common packages 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function  install_ubuntu_common_requirements( )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  $SUDO  apt-get update
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # normal stuff, mostly for the bare docker image 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  $SUDO  apt-get install -y --no-install-recommends \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ca-certificates \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    clang \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    build-essential \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    curl \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    libssl-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libcurl4-openssl-dev \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    locales \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    git \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    git-lfs \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    xvfb
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # TODO: vendor the rest of these in third_party/ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  $SUDO  apt-get install -y --no-install-recommends \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gcc-arm-none-eabi \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    capnproto \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libcapnp-dev \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ffmpeg \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libavformat-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libavcodec-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libavdevice-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libavutil-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libavfilter-dev \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    libbz2-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libeigen3-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libffi-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libgles2-mesa-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libglfw3-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libglib2.0-0 \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    libjpeg-dev \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    libqt5charts5-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libncurses5-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libusb-1.0-0-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libzmq3-dev \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    libzstd-dev \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    libsqlite3-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    opencl-headers \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ocl-icd-libopencl1 \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ocl-icd-opencl-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    portaudio19-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    qttools5-dev-tools \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libqt5svg5-dev \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    libqt5serialbus5-dev  \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    libqt5x11extras5-dev \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    libqt5opengl5-dev
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Install Ubuntu 24.04 LTS packages 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function  install_ubuntu_lts_latest_requirements( )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  install_ubuntu_common_requirements
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  $SUDO  apt-get install -y --no-install-recommends \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    g++-12 \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    qtbase5-dev \
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    qtbase5-dev-tools \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    python3-dev \
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    python3-venv
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Detect OS using /etc/os-release file 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  [  -f "/etc/os-release"  ] ;  then 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  source  /etc/os-release
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  case  " $VERSION_CODENAME "  in
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    "jammy"  |  "kinetic"  |  "noble" ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      install_ubuntu_lts_latest_requirements
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ; ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    *) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      echo  " $ID   $VERSION_ID  is unsupported. This setup script is written for Ubuntu 24.04. " 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      read  -p "Would you like to attempt installation anyway? "  -n 1  -r
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      echo  "" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  [ [  ! $REPLY  = ~ ^[ Yy] $ ] ] ;  then 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        exit  1 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      fi 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      install_ubuntu_lts_latest_requirements
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  esac 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  [ [  -d "/etc/udev/rules.d/"  ] ] ;  then 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Setup jungle udev rules 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    $SUDO  tee /etc/udev/rules.d/12-panda_jungle.rules > /dev/null <<EOF
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								SUBSYSTEM = = "usb" , ATTRS{ idVendor} = = "3801" , ATTRS{ idProduct} = = "ddcf" , MODE = "0666" 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SUBSYSTEM = = "usb" , ATTRS{ idVendor} = = "3801" , ATTRS{ idProduct} = = "ddef" , MODE = "0666" 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								SUBSYSTEM = = "usb" , ATTRS{ idVendor} = = "bbaa" , ATTRS{ idProduct} = = "ddcf" , MODE = "0666" 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SUBSYSTEM = = "usb" , ATTRS{ idVendor} = = "bbaa" , ATTRS{ idProduct} = = "ddef" , MODE = "0666" 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								EOF
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Setup panda udev rules 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    $SUDO  tee /etc/udev/rules.d/11-panda.rules > /dev/null <<EOF
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								SUBSYSTEM = = "usb" , ATTRS{ idVendor} = = "0483" , ATTRS{ idProduct} = = "df11" , MODE = "0666" 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								SUBSYSTEM = = "usb" , ATTRS{ idVendor} = = "3801" , ATTRS{ idProduct} = = "ddcc" , MODE = "0666" 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SUBSYSTEM = = "usb" , ATTRS{ idVendor} = = "3801" , ATTRS{ idProduct} = = "ddee" , MODE = "0666" 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								SUBSYSTEM = = "usb" , ATTRS{ idVendor} = = "bbaa" , ATTRS{ idProduct} = = "ddcc" , MODE = "0666" 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SUBSYSTEM = = "usb" , ATTRS{ idVendor} = = "bbaa" , ATTRS{ idProduct} = = "ddee" , MODE = "0666" 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								EOF
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    $SUDO  udevadm control --reload-rules &&  $SUDO  udevadm trigger ||  true 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  fi 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								else 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  echo  "No /etc/os-release in the system. Make sure you're running on Ubuntu, or similar." 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  exit  1 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								fi