Mentions légales du service

Skip to content
Snippets Groups Projects
installer.sh 3.8 KiB
Newer Older
#!/usr/bin/env bash

# Script for installing pico-ducky on a Raspberry Pi Pico 2

CIRCUITPYTHON_BUNDLE_VERSION="9.x"
CIRCUITPYTHON_BUNDLE_FILE="adafruit-circuitpython-bundle-9.x-mpy-20241012.zip"
CIRCUITPYTHON_VERSION="9.2.0-beta.1"
CIRCUITPYTHON_LANG="fr"
CIRCUITPYTHON_FILE="adafruit-circuitpython-raspberry_pi_pico2-${CIRCUITPYTHON_LANG}-${CIRCUITPYTHON_VERSION}.uf2"

PI_NAME="RP2350" # "RPI-RP2" for pico 1

waitForFile() {
    FILETOWAITFOR=$1
    set +e
    while true
    do
        ls $FILETOWAITFOR &> /dev/null
        if [ "$?" -eq 0 ]
        then
            break
        fi
        echo "Waiting for $FILETOWAITFOR to appear..."
        read -p "Press [Enter] to retry or provide the correct path: " USER_INPUT
        if [ -n "$USER_INPUT" ]; then
            FILETOWAITFOR="$USER_INPUT"
        fi
        sleep 2
    done
    set -e
}

set -e
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
CACHEDIR=/tmp/pico-ducky-cache
mkdir -p $CACHEDIR
cd $CACHEDIR
echo "Downloading CircuitPython $CIRCUITPYTHON_VERSION"
set +e;
ls ${CIRCUITPYTHON_FILE} &> /dev/null
CACHED=$?
set -e
if [ "$CACHED" -eq 0 ]
then
    echo "Using cached ${CIRCUITPYTHON_FILE}"
    wget -nv  https://downloads.circuitpython.org/bin/raspberry_pi_pico2/${CIRCUITPYTHON_LANG}/${CIRCUITPYTHON_FILE}
fi

echo "Downloading CircuitPython bundle $CIRCUITPYTHON_BUNDLE_VERSION"
cd $CACHEDIR
set +e
ls $CIRCUITPYTHON_BUNDLE_FILE &> /dev/null
CACHED=$?
set -e
if [ "$CACHED" -eq 0 ]
then
    echo "Using cached $CIRCUITPYTHON_BUNDLE_FILE"
    wget -nv https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/download/20241012/$CIRCUITPYTHON_BUNDLE_FILE
fi

echo "Downloading flash_nuke.uf2"
set +e
ls flash_nuke.uf2 &> /dev/null
CACHED=$?
set -e
if [ "$CACHED" -eq 0 ]
then
    echo "Using cached flash_nuke.uf2"
    wget -nv https://datasheets.raspberrypi.com/soft/flash_nuke.uf2
fi

echo "Downloading additional keyboard layouts"
cd $CACHEDIR
set +e
ls circuitpython-keyboard-layouts-py-20231122.zip &> /dev/null
CACHED=$?
set -e
if [ "$CACHED" -eq 0 ]
then
    echo "Using cached circuitpython-keyboard-layouts-py-20231122.zip"
    wget -nv https://github.com/Neradoc/Circuitpython_Keyboard_Layouts/releases/download/20231122/circuitpython-keyboard-layouts-py-20231122.zip
fi
unzip -q -o "*.zip"

echo "Hold the button on the Pico 2 and plug it in so it shows up as mass storage device "${PI_NAME}""
waitForFile "${MEDIA_PATH}/*/${PI_NAME}"

echo "Installing flash_nuke"
cd ${MEDIA_PATH}/*/${PI_NAME}
cp $CACHEDIR/flash_nuke.uf2 .
echo "Done"

echo "Waiting for the Pico to reboot..."
sleep 3
waitForFile "${MEDIA_PATH}/*/${PI_NAME}"

echo "Installing CircuitPython image"
cd ${MEDIA_PATH}/*/${PI_NAME}
cp $CACHEDIR/$CIRCUITPYTHON_FILE .
echo "Done"

echo "Waiting for the Pico 2 to reboot again..."
waitForFile "${MEDIA_PATH}/*/CIRCUITPY"

echo "Installing pico-ducky and friends"
cd ${MEDIA_PATH}/*/CIRCUITPY
CPYDIR=`pwd`
CPBUNDLEDIR=$CACHEDIR/${CIRCUITPYTHON_BUNDLE_FILE/.zip}/
cp -r $CPBUNDLEDIR/lib/adafruit_hid lib/
cp -r $CPBUNDLEDIR/lib/adafruit_debouncer.mpy lib/
cp -r $CPBUNDLEDIR/lib/adafruit_ticks.mpy lib/
cp -r $CPBUNDLEDIR/lib/asyncio lib/
cp -r $CPBUNDLEDIR/lib/adafruit_wsgi lib/
cp -r $SCRIPTDIR/boot.py .
cp -r $SCRIPTDIR/duckyinpython.py .
cp -r $SCRIPTDIR/code.py .
cp -r $SCRIPTDIR/webapp.py .
cp -r $SCRIPTDIR/wsgiserver.py .
mkdir -p payloads
echo "Done"

echo "Installing azerty keyboard layout support"
cd ${MEDIA_PATH}/*/CIRCUITPY
CPYDIR=`pwd`
CPLAYOUTDIR=$CACHEDIR/circuitpython-keyboard-layouts-py-20231122/
cp -r $CPLAYOUTDIR/lib/keyboard_layout_win_fr.py lib/
cp -r $CPLAYOUTDIR/lib/keycode_mac_fr.py lib/
cp -r $CPLAYOUTDIR/lib/keyboard_layout_mac_fr.py lib/
cp -r $CPLAYOUTDIR/lib/keycode_win_fr.py lib/
echo "Done"

printf "\nThe device is now ready, and you may install your payload.dd in $CPYDIR\n"