#!/bin/bash LOG_FILE=$(mktemp) MODULE_NAME="snd_usb_us144mkii" KO_FILE="snd-usb-us144mkii.ko" TARGET_DIR="/lib/modules/$(uname -r)/extra/us144mkii" GREEN='\033[0;32m' RED='\033[0;31m' GRAY='\033[0;90m' NC='\033[0m' BOLD='\033[1m' cleanup() { tput cnorm rm -f "$LOG_FILE" } trap cleanup EXIT header() { clear echo -e "${GREEN}${BOLD}" echo " TASCAM US-144MKII DRIVER INSTALLER" echo " ==================================" echo -e "${NC}" } init_sudo() { if [ "$EUID" -ne 0 ]; then echo -e "${GRAY} Creating sudo session...${NC}" if ! sudo -v; then echo -e "\n ${RED}✖ Authentication failed.${NC}" exit 1 fi fi } run() { local cmd="$1" local msg="$2" local allow_fail="${3:-false}" tput civis eval "$cmd" > "$LOG_FILE" 2>&1 & local pid=$! local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏' local i=0 while kill -0 "$pid" 2>/dev/null; do i=$(((i + 1) % ${#spin})) printf "\r ${GREEN}${spin:$i:1}${NC} ${GRAY}%s...${NC}" "$msg" sleep 0.08 done wait $pid local exit_code=$? if [ $exit_code -eq 0 ]; then printf "\r\033[K ${GREEN}✔${NC} ${BOLD}%s${NC}\n" "$msg" else if [ "$allow_fail" = "true" ]; then printf "\r\033[K ${GREEN}✔${NC} ${BOLD}%s${NC} ${GRAY}(Skipped)${NC}\n" "$msg" else printf "\r\033[K ${RED}✖${NC} ${BOLD}%s${NC}\n" "$msg" echo -e "\n${RED} Build Log:${NC}" echo " ----------------------------------------" sed 's/^/ /' "$LOG_FILE" echo " ----------------------------------------" exit 1 fi fi } header init_sudo run "make clean" "Cleaning build directory" run "make" "Compiling driver source" run "sudo mkdir -p \"$TARGET_DIR\"" "Verifying module directory" run "sudo cp \"$KO_FILE\" \"$TARGET_DIR\"" "Installing kernel module" run "sudo depmod -a" "Updating dependency map" run "sudo rmmod $MODULE_NAME" "Unloading previous driver" "true" run "sudo modprobe $(echo $MODULE_NAME | tr '_' '-')" "Loading new driver" echo -e "\n ${GREEN}${BOLD}Done.${NC}\n"