2024-04-08 04:50:36 +00:00
|
|
|
#!/bin/bash
|
2024-04-09 01:35:02 +00:00
|
|
|
|
|
|
|
# TODO: CHANGE KLIPPER PORTS
|
|
|
|
|
2024-07-30 01:18:31 +00:00
|
|
|
SOURCE=${BASH_SOURCE[0]}
|
|
|
|
while [ -L "$SOURCE" ]; do
|
|
|
|
TARGET=$(readlink "$SOURCE")
|
|
|
|
if [[ $TARGET == /* ]]; then
|
|
|
|
SOURCE=$TARGET
|
|
|
|
else
|
|
|
|
DIR=$( dirname "$SOURCE" )
|
|
|
|
SOURCE=$DIR/$TARGET
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
RDIR=$( dirname "$SOURCE" )
|
|
|
|
ROOT_DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )
|
2024-04-08 04:50:36 +00:00
|
|
|
cd $ROOT_DIR
|
|
|
|
|
|
|
|
# Pull Klipper
|
|
|
|
git submodule update --init --recursive
|
|
|
|
|
|
|
|
# Select Klipper Config
|
2024-07-30 01:18:31 +00:00
|
|
|
cd $ROOT_DIR/dirs/klipper
|
2024-04-08 04:50:36 +00:00
|
|
|
make menuconfig
|
|
|
|
CONFIG_FILES=(`ls config`)
|
2024-04-30 00:37:05 +00:00
|
|
|
CONFIG_FILES+=("Enter_Manually")
|
2024-04-08 04:50:36 +00:00
|
|
|
let i=0
|
|
|
|
C=()
|
|
|
|
for f in ${CONFIG_FILES[@]}; do
|
|
|
|
C+=($i $f)
|
|
|
|
let i+=1
|
|
|
|
done
|
2024-04-30 00:37:05 +00:00
|
|
|
CONFIG_INDEX=$(dialog --backtitle "drwho@hackers.town" --title "Printer Selection" --menu "Select Printer Config" --output-fd 1 40 0 1 ${C[@]})
|
2024-04-08 04:50:36 +00:00
|
|
|
CONFIG_FILE=${CONFIG_FILES[$CONFIG_INDEX]}
|
2024-04-30 00:37:05 +00:00
|
|
|
if [[ $CONFIG_FILE == "Enter_Manually" ]]; then
|
|
|
|
MANUAL_FILE=""
|
|
|
|
while [ ! -f "${MANUAL_FILE}" ]; do
|
|
|
|
MANUAL_FILE=$(dialog --backtitle "drwho@hackers.town" --title "Manual Config Selection" --inputbox "Enter Full Config File Path" 8 40 "${MANUAL_FILE}" 3>&1 1>&2 2>&3)
|
|
|
|
done
|
|
|
|
CONFIG_FILE=$MANUAL_FILE
|
|
|
|
else
|
|
|
|
CONFIG_FILE="./config/$CONFIG_FILE"
|
|
|
|
fi
|
2024-04-08 04:50:36 +00:00
|
|
|
|
|
|
|
# Select Serial Device
|
|
|
|
DEVICES=(`ls /dev/serial/by-id/`)
|
2024-04-30 00:37:05 +00:00
|
|
|
DEVICES+=("Enter_Manually")
|
2024-04-08 04:50:36 +00:00
|
|
|
let i=0
|
|
|
|
C=()
|
|
|
|
for f in ${DEVICES[@]}; do
|
|
|
|
C+=($i $f)
|
|
|
|
let i+=1
|
|
|
|
done
|
2024-04-30 00:37:05 +00:00
|
|
|
DEVICE_INDEX=$(dialog --backtitle "drwho@hackers.town" --title "USB Device Selection" --menu "Select USB Device" --output-fd 1 40 0 1 ${C[@]})
|
2024-04-08 04:50:36 +00:00
|
|
|
DEVICE=${DEVICES[$DEVICE_INDEX]}
|
|
|
|
|
2024-04-30 00:37:05 +00:00
|
|
|
if [[ $DEVICE == "Enter_Manually" ]]; then
|
|
|
|
MANUAL_FILE=""
|
|
|
|
while [ ! -f "${MANUAL_FILE}" ]; do
|
|
|
|
MANUAL_FILE=$(dialog --backtitle "drwho@hackers.town" --title "Manual Device Selection" --inputbox "Enter Full Device File Path" 8 40 "${MANUAL_FILE}" 3>&1 1>&2 2>&3)
|
|
|
|
done
|
|
|
|
DEVICE=$MANUAL_FILE
|
|
|
|
fi
|
|
|
|
|
2024-04-09 00:47:55 +00:00
|
|
|
# Name Printer
|
2024-07-30 01:18:31 +00:00
|
|
|
# Todo: avoid duplications
|
2024-04-09 01:22:35 +00:00
|
|
|
NAME_NOT_VALID=true
|
|
|
|
while $NAME_NOT_VALID ; do
|
2024-07-30 01:18:31 +00:00
|
|
|
PRINTER_NAME=$(dialog --backtitle 'drwho@hackers.town' --inputbox 'Name This Printer' 8 40 "${PRINTER_NAME}" 3>&1 1>&2 2>&3)
|
2024-04-09 01:22:35 +00:00
|
|
|
if [[ $PRINTER_NAME =~ ^[a-zA-Z0-9_-]+$ ]]; then
|
|
|
|
NAME_NOT_VALID=false
|
|
|
|
fi
|
|
|
|
done
|
2024-04-09 00:47:55 +00:00
|
|
|
|
2024-04-08 04:50:36 +00:00
|
|
|
# Build Klipper
|
2024-07-30 01:18:31 +00:00
|
|
|
cp $CONFIG_FILE $ROOT_DIR/dirs/klipper/printer.cfg
|
|
|
|
sed -i -e "s/^serial: .\+$/serial: \/dev\/serial\/by-id\/${DEVICE}/g" "${ROOT_DIR}/dirs/klipper/printer.cfg"
|
2024-04-08 04:50:36 +00:00
|
|
|
make -j$(nproc)
|
|
|
|
|
|
|
|
# Flash Firmware
|
|
|
|
make flash FLASH_DEVICE=/dev/serial/by-id/$DEVICE
|
|
|
|
|
|
|
|
# Copy over printer config file
|
2024-04-09 01:22:35 +00:00
|
|
|
cd $ROOT_DIR/dirs
|
|
|
|
cat $ROOT_DIR/config/macros.gcode >> printer.cfg.tmp
|
|
|
|
cat klipper/printer.cfg >> printer.cfg.tmp
|
|
|
|
mv printer.cfg.tmp printer_data/config/printer.cfg
|
2024-04-08 04:50:36 +00:00
|
|
|
|
|
|
|
# Apply Edits to Configs
|
2024-07-30 01:18:31 +00:00
|
|
|
cd $ROOT_DIR/dirs/printer_data/config
|
|
|
|
sed -i -e "s/PRINTERNAME/$PRINTER_NAME/g" "moonraker.conf"
|
2024-04-08 04:50:36 +00:00
|
|
|
|
2024-07-30 01:18:31 +00:00
|
|
|
cd $ROOT_DIR/dirs/mainsail-config
|
|
|
|
sed -i -e "s/~\/printer_data/~\/$PRINTER_NAME\/printer_data/g" "client.cfg"
|
2024-04-09 01:22:35 +00:00
|
|
|
|
2024-07-30 01:18:31 +00:00
|
|
|
cd $ROOT_DIR/config/services
|
|
|
|
# TODO: Add Crowsnest Support
|
|
|
|
FILES=(moonraker klipper)
|
2024-04-09 01:22:35 +00:00
|
|
|
for f in ${FILES[@]}; do
|
2024-07-30 01:18:31 +00:00
|
|
|
sed -i -e "s/PRINTERNAME/$PRINTER_NAME/g" "${f}.service"
|
2024-04-09 01:22:35 +00:00
|
|
|
done
|
2024-04-09 00:31:37 +00:00
|
|
|
|
|
|
|
# Download Mainsail
|
|
|
|
cd $ROOT_DIR
|
|
|
|
wget -q -O mainsail.zip https://github.com/mainsail-crew/mainsail/releases/latest/download/mainsail.zip
|
|
|
|
unzip -o mainsail.zip -d dirs/mainsail
|
2024-04-09 00:47:55 +00:00
|
|
|
|
2024-04-09 01:22:35 +00:00
|
|
|
# Copy To Final Location
|
|
|
|
mkdir -p ~/$PRINTER_NAME
|
|
|
|
cp -r dirs/* ~/$PRINTER_NAME
|
|
|
|
|
|
|
|
# Create Empty Dirs
|
|
|
|
DIRS=(logs gcodes certs backup mainsail-config)
|
|
|
|
for d in ${DIRS[@]}; do
|
|
|
|
mkdir -p "~/$PRINTER_NAME/$d"
|
|
|
|
done
|
|
|
|
|
|
|
|
# Configure System Services
|
|
|
|
cd $ROOT_DIR/config/services
|
|
|
|
SERVICES=()
|
|
|
|
for f in *.service; do
|
|
|
|
SERVICES+=($f)
|
2024-07-30 01:18:31 +00:00
|
|
|
cp "${f}" "${PRINTER_NAME}-${f}"
|
|
|
|
sed -i -e "s/PRINTERNAME/$PRINTER_NAME/g" "${PRINTER_NAME}-${f}"
|
2024-04-09 01:22:35 +00:00
|
|
|
done
|
|
|
|
|
2024-04-09 00:47:55 +00:00
|
|
|
# Install System Services
|
2024-04-09 01:22:35 +00:00
|
|
|
sudo cp $ROOT_DIR/config/services/* /etc/systemd/system/
|
|
|
|
sudo systemctl daemon-reload
|
|
|
|
for svc in ${SERVICES[@]}; do
|
|
|
|
sudo systemctl enable $PRINTER_NAME-$svc
|
|
|
|
sudo systemctl start $PRINTER_NAME-$svc
|
|
|
|
done
|
2024-07-30 01:18:31 +00:00
|
|
|
|
|
|
|
# Cleanup
|
|
|
|
rm -rf "${ROOT_DIR}/mainsail.zip"
|