Last active
June 26, 2025 06:50
-
-
Save hellresistor/8db133392221e9ec0b3c6036e48b4914 to your computer and use it in GitHub Desktop.
lazytool by hellresistor + btcmesh by eddieoz
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Lazy Tool to btcmesh (@eddieoz) by @hellresistor | |
# v1.0.3 | |
# If you think it is usefull send some satoshis to this | |
# Bitcoin Lightning address: [email protected] | |
# --- Vars --- | |
PROJECT_DIR="$HOME/teste3/btcmesh" | |
VENV_DIR="$PROJECT_DIR/.venv" | |
BTCMESH_REPO_URL="https://github.com/eddieoz/btcmesh.git" | |
BTC_RPC_HOST=127.0.0.1 # SET IP FROM BTC NODE | |
BTC_RPC_PORT=48332 # 8332 mainnet, 18332 testnet | |
BITCOIN_RPC_USER=UserTeste # Set your User bitcoin RPC | |
BITCOIN_RPC_PASSWORD=Teste1234 # Set your Password bitcoin RPC | |
#BITCOIN_RPC_COOKIE=/data/bitcoin/testnet4/.cookie # Set bitcoin directory for .cookie file | |
#--------------------------------------------------------------------------------------------- | |
# --- RPC Auth validation --- | |
if [[ -n "$BITCOIN_RPC_COOKIE" ]]; then | |
RPCAUTHVALID=1 | |
ok "Using BITCOIN_RPC_COOKIE for authentication" | |
elif [[ -n "$BITCOIN_RPC_USER" && -n "$BITCOIN_RPC_PASSWORD" ]]; then | |
RPCAUTHVALID=2 | |
ok "Using BITCOIN_RPC_USER and BITCOIN_RPC_PASSWORD for authentication" | |
else | |
erro "ERROR: Invalid Bitcoin RPC authentication. Set either BITCOIN_RPC_COOKIE or both BITCOIN_RPC_USER and BITCOIN_RPC_PASSWORD" | |
fi | |
# --- Get and prepare to btcmesh installation --- | |
function instalacao_btcmesh() { | |
info "Cloning ..." | |
git clone "$BTCMESH_REPO_URL" "$PROJECT_DIR" | |
ok "Repository cloned with SUCCESS" | |
cd "$PROJECT_DIR" | |
if [ ! -f "$PROJECT_DIR/.env" ]; then | |
cp "$PROJECT_DIR/.env-example" "$PROJECT_DIR/.env" | |
fi | |
info "Checking packages requeried..." | |
pacotes=(git python3 python3-pip python3-venv libffi-dev libgpiod-dev libgpiod2 build-essential libatlas-base-dev libjpeg-dev zlib1g-dev libopenjp2-7 libtiff-dev libavcodec-dev libavformat-dev libswscale-dev i2c-tools spi-tools) | |
sudo apt-get -y update > /dev/null 2>&1 | |
for pacote in "${pacotes[@]}"; do | |
if dpkg -s "$pacote" &> /dev/null; then | |
ok "Packaged $pacote already installed" | |
else | |
info "Installing package $pacote ..." | |
if sudo apt -y install "$pacote" > /dev/null 2>&1; then | |
ok "Package $pacote installed with SUCCESS" | |
else | |
aviso "Not able to install the package: $pacote" | |
fi | |
fi | |
done | |
info "Generate venv zone: $VENV_DIR" | |
python3 -m venv "$VENV_DIR" | |
info "Activating venv..." | |
source "$VENV_DIR/bin/activate" || { erro "Failure when trying activate venv - virtual environment"; } | |
info "Updating pip..." | |
pip install --upgrade pip setuptools wheel pyserial pycryptodome cffi gpiod | |
info "Save congigurations into .env file..." | |
sed -i 's/^# *MESHTASTIC_SERIAL_PORT=\(.*\)/MESHTASTIC_SERIAL_PORT=\1/' "$PROJECT_DIR/.env" | |
sed -i 's/^# *LOG_LEVEL=\(.*\)/LOG_LEVEL=\1/' "$PROJECT_DIR/.env" | |
if grep -q '^# *REASSEMBLY_TIMEOUT_SECONDS=' "$PROJECT_DIR/.env"; then | |
sed -i 's/^# *REASSEMBLY_TIMEOUT_SECONDS=.*/REASSEMBLY_TIMEOUT_SECONDS=60/' "$PROJECT_DIR/.env" | |
elif grep -q '^REASSEMBLY_TIMEOUT_SECONDS=' "$PROJECT_DIR/.env"; then | |
sed -i 's/^REASSEMBLY_TIMEOUT_SECONDS=.*/REASSEMBLY_TIMEOUT_SECONDS=60/' "$PROJECT_DIR/.env" | |
else | |
echo -e '\nREASSEMBLY_TIMEOUT_SECONDS=60' >> "$PROJECT_DIR/.env" | |
fi | |
info "Installing btcmesh requirements..." | |
pip install -r requirements.txt | |
ok "Requeriments installed with SUCCESS" | |
} | |
# --- Install btcmesh server --- | |
function server_install() { | |
info "Installing btcmesh server..." | |
instalacao_btcmesh | |
info "Save configurations into .env file..." | |
sed -i "s|^# *BITCOIN_RPC_HOST=.*|BITCOIN_RPC_HOST=$BTC_RPC_HOST|" "$PROJECT_DIR/.env" | |
sed -i "s|^# *BITCOIN_RPC_PORT=.*|BITCOIN_RPC_PORT=$BTC_RPC_PORT|" "$PROJECT_DIR/.env" | |
if [[ "$RPCAUTHVALID" -eq 1 ]]; then | |
sed -i "s|^# *BITCOIN_RPC_COOKIE=.*|BITCOIN_RPC_COOKIE=$BITCOIN_RPC_COOKIE|" "$PROJECT_DIR/.env" | |
sed -i 's|^BITCOIN_RPC_USER=.*|# BITCOIN_RPC_USER=|' "$PROJECT_DIR/.env" | |
sed -i 's|^BITCOIN_RPC_PASSWORD=.*|# BITCOIN_RPC_PASSWORD=|' "$PROJECT_DIR/.env" | |
elif [[ "$RPCAUTHVALID" -eq 2 ]]; then | |
sed -i "s|^# *BITCOIN_RPC_USER=.*|BITCOIN_RPC_USER=$BITCOIN_RPC_USER|" "$PROJECT_DIR/.env" | |
sed -i "s|^# *BITCOIN_RPC_PASSWORD=.*|BITCOIN_RPC_PASSWORD=$BITCOIN_RPC_PASSWORD|" "$PROJECT_DIR/.env" | |
sed -i 's|^BITCOIN_RPC_COOKIE=.*|# BITCOIN_RPC_COOKIE=|' "$PROJECT_DIR/.env" | |
else | |
erro "FATAL ERROR! SOME HACKER TRICKING THIS :)" | |
fi | |
ok "Virtual Environment INSTALLED WITH SUCCESS" | |
autovenv srv | |
ok "BTCMESH SERVER INSTALLED WITH SUCCESS" | |
aviso "Run command: btcmeshsrv " | |
aviso "To help: ./btcmesh-Lazytool.sh -h" | |
read -n 1 -s -r -p "Press any key to finish..." | |
exit 0 | |
} | |
# --- Instalacao de cliente --- | |
function client_install() { | |
info "Install Cliente" | |
instalacao_btcmesh | |
autovenv cli | |
ok "BTCMESH CLIENT INSTALLED WITH SUCCESS" | |
aviso "Run command: btcmeshcli" | |
aviso "To help run: ./btcmesh-Lazytool.sh -h " | |
read -n 1 -s -r -p "Press any key to finish..." | |
exit 0 | |
} | |
# --- Configure Lazzy wrapper --- | |
function autovenv() { | |
CLIORSRV="$1" # deve ser "srv" ou "cli" | |
info "You want btcmesh$CLIORSRV lazy-start command? (Y/N)" | |
info " (lazy-start = all-in-one comand to run btcmesh$CLIORSRV)" | |
read -p "> " AUTOVENVOPCAO | |
if [[ "$AUTOVENVOPCAO" =~ ^[Yy]$ ]]; then | |
WRAPPER="/usr/local/bin/btcmesh$CLIORSRV" | |
if [[ "$CLIORSRV" == "srv" ]]; then | |
sudo tee "$WRAPPER" > /dev/null <<EOF | |
#!/bin/bash | |
cd "$PROJECT_DIR" | |
source "$VENV_DIR/bin/activate" | |
exec python btcmesh_server.py "\$@" | |
EOF | |
sudo chmod +x "$WRAPPER" | |
elif [[ "$CLIORSRV" == "cli" ]]; then | |
sudo tee "$WRAPPER" > /dev/null <<EOF | |
#!/bin/bash | |
source "$VENV_DIR/bin/activate" | |
cd "$PROJECT_DIR" | |
read -p "Set your DeviceID source (btc node)? (ex: !abc1234): " MYDESTINYDEVICE | |
read -p "Set a Signed transaction HEX string: " MYUTXO | |
if [[ -z "\$MYDESTINYDEVICE" || -z "\$MYUTXO" ]]; then | |
echo "Error: DeviceID or HEX string wrong." | |
exit 1 | |
fi | |
exec python btcmesh_cli.py --destination '\$MYDESTINYDEVICE' --tx \$MYUTXO "\$@" | |
echo "!!!! LETS SATOSHI FREE !!!!" | |
EOF | |
sudo chmod +x "$WRAPPER" | |
else | |
erro "Wrong parameters. Just valid 'src' or 'cli'" | |
fi | |
ok "Lazy wrapper generated: btcmesh$CLIORSRV" | |
else | |
aviso "You need manually activate and run btcmesh every time" && sleep 0.3 | |
fi | |
} | |
# --- Uninstall btcmesh --- | |
function uninstall_btcmesh() { | |
info "Saving .env file on $HOME directory..." | |
cp "$PROJECT_DIR/.env" "$HOME/.env.bck.$(date +%Y%m%d%H%M%S)" | |
info "Uninstalling btcmesh..." | |
sudo rm -Rf "$PROJECT_DIR" | |
sudo rm /usr/local/bin/btcmesh* | |
aviso "!!! UNINSTALLED !!!" | |
exit 0 | |
} | |
# --- Colorifying our lifes --- | |
final=$'\e[0m' | |
verde=$'\e[92m' | |
vermelho=$'\e[91m' | |
amarelo=$'\e[93m' | |
roxo=$'\e[38;2;216;0;255m' | |
azul=$'\e[94m' | |
function ok { printf "${verde}[OK] $* ${final}\n"; } | |
function erro { printf "${vermelho}[ERRO] $* ${final}\n"; exit 1; } | |
function aviso { printf "${amarelo}[AVISO] $* ${final}\n"; } | |
function info { printf "${roxo}[INFO] $* ${final}\n"; } | |
# --- START --- | |
echo -e "${roxo}|-------------------------------------------${roxo}|" | |
echo -e "${roxo}|${vermelho}|${azul}-----------------------------------------${vermelho}|${roxo}|" | |
echo -e "${roxo}|${vermelho}|${azul}---- ${verde}BTCmesh ${azul}--- ${amarelo}Lazy Tool ${azul}----${vermelho}|${roxo}|" | |
echo -e "${roxo}|${vermelho}|${azul}-----------------------------------------${vermelho}|${roxo}|" | |
echo -e "${roxo}|${vermelho}|${azul}---- by: ${verde}eddieoz ${azul}--- ${amarelo}by:hellresistor ${azul}----${vermelho}|${roxo}|" | |
echo -e "${roxo}|${vermelho}|${azul}-----------------------------------------${vermelho}|${roxo}|" | |
echo -e "${roxo}|-------------------------------------------|" | |
# --- Help --- | |
if [[ "$1" == "--help" || "$1" == "-h" ]]; then | |
info "How to use:" | |
echo "Run script to install: " | |
aviso "./btcmesh-Lazytool.sh " | |
echo | |
echo "Run Client: " | |
aviso "btcmeshcli " | |
echo "Will be asked for info: " | |
echo " - The meshtastic DeviceID connected to bitcoin full-node. Example: !abc1234 " | |
echo " - The HEX string from bitcoin signed transaction. Example: 002000000... " | |
echo | |
echo "Run Server:" | |
aviso "btcmeshsrv " | |
echo "Just keep it running. Spread the MeshNetwork :)" | |
echo | |
info "--------- Credits ----------" | |
aviso " 'btcmesh' by @eddieoz " | |
aviso " 'lazytool' by @hellresistor " | |
info "----------------------------" | |
exit 0 | |
fi | |
# --- Menu --- | |
while true; do | |
clear | |
echo "${roxo}| Choose One: ${roxo}|" | |
echo "${roxo}|${amarelo} 1- ${final}Server Install ${roxo}|" | |
echo "${roxo}|${verde} 2- ${final}Client Install ${roxo}|" | |
echo "${roxo}| ${vermelho}u- ${final}Uninstall ${roxo}|" | |
echo "${roxo}| ${vermelho}0- ${final}Exit ${roxo}|" | |
echo "${roxo}|--------------------${roxo}|" | |
read -p "|> " OPCAOMENU | |
case $OPCAOMENU in | |
1) server_install ;; | |
2) client_install ;; | |
"u") uninstall_btcmesh ;; | |
0) ok "ByeBye.." && sleep 0.5 && break ;; | |
*) aviso "Wrong Choice..." && sleep 0.2 ;; | |
esac | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment