123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #!/usr/bin/env bash
- set -e
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- BOLD='\033[1m'
- NC='\033[0m'
- if [ -z "$OPENPILOT_ROOT" ]; then
- # default to current directory for installation
- OPENPILOT_ROOT="$(pwd)/openpilot"
- fi
- function show_motd() {
- cat << 'EOF'
- .~ssos+.
- +8888888888i,
- {888888888888o.
- h8888888888888k
- t888888888s888k
- `t88888d/ h88k
- ``` h88l
- ,88k`
- .d8h`
- +d8h
- _+d8h`
- ;y8h+`
- |-`
- openpilot installer
- EOF
- }
- function sentry_send_event() {
- SENTRY_KEY=dd0cba62ba0ac07ff9f388f8f1e6a7f4
- SENTRY_URL=https://sentry.io/api/4507726145781760/store/
- EVENT=$1
- EVENT_TYPE=${2:-$EVENT}
- EVENT_LOG=${3:-"NA"}
- PLATFORM=$(uname -s)
- ARCH=$(uname -m)
- SYSTEM=$(uname -a)
- if [[ $PLATFORM == "Darwin" ]]; then
- OS="macos"
- elif [[ $PLATFORM == "Linux" ]]; then
- OS="linux"
- fi
- if [[ $ARCH == armv8* ]] || [[ $ARCH == arm64* ]] || [[ $ARCH == aarch64* ]]; then
- ARCH="aarch64"
- elif [[ $ARCH == "x86_64" ]] || [[ $ARCH == i686* ]]; then
- ARCH="x86"
- fi
- PYTHON_VERSION=$(echo $(python3 --version 2> /dev/null || echo "NA"))
- BRANCH=$(echo $(git -C $OPENPILOT_ROOT rev-parse --abbrev-ref HEAD 2> /dev/null || echo "NA"))
- COMMIT=$(echo $(git -C $OPENPILOT_ROOT rev-parse HEAD 2> /dev/null || echo "NA"))
- curl -s -o /dev/null -X POST -g --data "{ \"exception\": { \"values\": [{ \"type\": \"$EVENT\" }] }, \"tags\" : { \"event_type\" : \"$EVENT_TYPE\", \"event_log\" : \"$EVENT_LOG\", \"os\" : \"$OS\", \"arch\" : \"$ARCH\", \"python_version\" : \"$PYTHON_VERSION\" , \"git_branch\" : \"$BRANCH\", \"git_commit\" : \"$COMMIT\", \"system\" : \"$SYSTEM\" } }" \
- -H 'Content-Type: application/json' \
- -H "X-Sentry-Auth: Sentry sentry_version=7, sentry_key=$SENTRY_KEY, sentry_client=op_setup/0.1" \
- $SENTRY_URL 2> /dev/null
- }
- function check_stdin() {
- if [ -t 0 ]; then
- INTERACTIVE=1
- else
- echo "Checking for valid invocation..."
- echo -e " ↳ [${RED}✗${NC}] stdin not found! Running in non-interactive mode."
- echo -e " Run ${BOLD}'bash <(curl -fsSL openpilot.comma.ai)'${NC} to run in interactive mode.\n"
- fi
- }
- function ask_dir() {
- echo -n "Enter directory in which to install openpilot (default $OPENPILOT_ROOT): "
- if [[ -z $INTERACTIVE ]]; then
- echo -e "\nBecause your are running in non-interactive mode, the installation"
- echo -e "will default to $OPENPILOT_ROOT\n"
- return 0
- fi
- read
- if [[ ! -z "$REPLY" ]]; then
- mkdir -p $REPLY
- OPENPILOT_ROOT="$(realpath $REPLY)/openpilot"
- fi
- }
- function check_dir() {
- echo "Checking for installation directory..."
- if [ -d "$OPENPILOT_ROOT" ]; then
- echo -e " ↳ [${RED}✗${NC}] Installation destination $OPENPILOT_ROOT already exists!"
- # not a valid clone, can't continue
- if [[ ! -z "$(ls -A $OPENPILOT_ROOT)" && ! -f "$OPENPILOT_ROOT/launch_openpilot.sh" ]]; then
- echo -e " $OPENPILOT_ROOT already contains files but does not seems"
- echo -e " to be a valid openpilot git clone. Choose another location for"
- echo -e " installing openpilot!\n"
- return 1
- fi
- # already a "valid" openpilot clone, skip cloning again
- if [[ ! -z "$(ls -A $OPENPILOT_ROOT)" ]]; then
- SKIP_GIT_CLONE=1
- fi
- # by default, don't try installing in already existing directory
- if [[ -z $INTERACTIVE ]]; then
- return 0
- fi
- read -p " Would you like to attempt installation anyway? [Y/n] " -n 1 -r
- echo -e "\n"
- if [[ ! $REPLY =~ ^[Yy]$ ]]; then
- return 1
- fi
- return 0
- fi
- echo -e " ↳ [${GREEN}✔${NC}] Successfully chosen $OPENPILOT_ROOT as installation directory\n"
- }
- function check_git() {
- echo "Checking for git..."
- if ! command -v "git" > /dev/null 2>&1; then
- echo -e " ↳ [${RED}✗${NC}] git not found on your system, can't continue!"
- sentry_send_event "SETUP_FAILURE" "ERROR_GIT_NOT_FOUND"
- return 1
- else
- echo -e " ↳ [${GREEN}✔${NC}] git found.\n"
- fi
- }
- function git_clone() {
- st="$(date +%s)"
- echo "Cloning openpilot..."
- if $(git clone --filter=blob:none https://github.com/commaai/openpilot.git "$OPENPILOT_ROOT"); then
- if [[ -f $OPENPILOT_ROOT/launch_openpilot.sh ]]; then
- et="$(date +%s)"
- echo -e " ↳ [${GREEN}✔${NC}] Successfully cloned openpilot in $((et - st)) seconds.\n"
- return 0
- fi
- fi
- echo -e " ↳ [${RED}✗${NC}] failed to clone openpilot!"
- sentry_send_event "SETUP_FAILURE" "ERROR_GIT_CLONE"
- return 1
- }
- function install_with_op() {
- cd $OPENPILOT_ROOT
- $OPENPILOT_ROOT/tools/op.sh install
- $OPENPILOT_ROOT/tools/op.sh post-commit
- LOG_FILE=$(mktemp)
- if ! $OPENPILOT_ROOT/tools/op.sh --log $LOG_FILE setup; then
- echo -e "\n[${RED}✗${NC}] failed to install openpilot!"
- ERROR_TYPE="$(cat "$LOG_FILE" | sed '1p;d')"
- ERROR_LOG="$(cat "$LOG_FILE" | sed '2p;d')"
- sentry_send_event "SETUP_FAILURE" "$ERROR_TYPE" "$ERROR_LOG" || true
- return 1
- else
- sentry_send_event "SETUP_SUCCESS" || true
- fi
- echo -e "\n----------------------------------------------------------------------"
- echo -e "[${GREEN}✔${NC}] openpilot was successfully installed into ${BOLD}$OPENPILOT_ROOT${NC}"
- echo -e "Checkout the docs at https://docs.comma.ai"
- echo -e "Checkout how to contribute at https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md"
- }
- show_motd
- check_stdin
- ask_dir
- check_dir
- check_git
- [ -z $SKIP_GIT_CLONE ] && git_clone
- install_with_op
|