diff --git a/__admin/linux_install_esptool.sh b/__admin/linux_install_esptool.sh new file mode 100755 index 0000000..a8e9608 --- /dev/null +++ b/__admin/linux_install_esptool.sh @@ -0,0 +1,114 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +# Debian 用インストールスクリプト +# - python3 / pip3 が無ければ apt でインストール +# - esptool が無ければ pip3 でインストール(rootならシステム、そうでなければ sudo 又は --user) +# - 非対話的、冪等(既にインストールされていれば何もしない) + +SUDO="" +if [ "$(id -u)" -ne 0 ]; then + if command -v sudo >/dev/null 2>&1; then + SUDO="sudo" + else + SUDO="" + fi +fi + +need_apt_update=0 + +apt_update_if_needed() { + if [ $need_apt_update -eq 0 ]; then + echo "apt-get update を実行します..." + $SUDO apt-get update -y + need_apt_update=1 + fi +} + +install_apt_pkgs() { + apt_update_if_needed + echo "apt-get install: $*" + $SUDO DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends "$@" +} + +# チェック関数 +has_cmd() { command -v "$1" >/dev/null 2>&1; } + +echo "チェック: python3..." +if has_cmd python3; then + echo "python3 は既にインストールされています: $(python3 --version)" +else + echo "python3 が見つかりません。インストールします。" + install_apt_pkgs python3 +fi + +echo "チェック: pip3..." +if has_cmd pip3; then + echo "pip3 は既にある: $(pip3 --version)" +else + echo "pip3 が見つかりません。まず python3 の distutils/ensurepip を試します..." + # ensurepip が使えるか試す + if python3 -m ensurepip --help >/dev/null 2>&1; then + echo "python3 -m ensurepip を実行します..." + $SUDO python3 -m ensurepip --upgrade || true + # ensurepip だけだと pip コマンドへの PATH が通らない場合があるので python -m pip を使って確認 + fi + + if has_cmd pip3; then + echo "ensurepip により pip3 が利用可能になりました: $(pip3 --version)" + else + echo "apt から python3-pip をインストールします (Debian の推奨方法)..." + install_apt_pkgs python3-pip python3-venv python3-distutils || install_apt_pkgs python3-pip + fi +fi + +# 既に esptool があるか(esptool または esptool.py) +echo "チェック: esptool..." +if has_cmd esptool || has_cmd esptool.py; then + echo "esptool は既にインストールされています:" + if has_cmd esptool; then esptool --version || true; fi + if has_cmd esptool.py; then esptool.py --version || true; fi + echo "終了します。" + exit 0 +fi + +# esptool を pip3 でインストールする +echo "esptool が見つかりません。pip3 でインストールします..." + +# pip3 がシステムにあることを前提にする(上で確保済み) +# root ならシステムインストール、root でなく sudo ありなら sudo pip3、どちらもなければ --user +if [ "$(id -u)" -eq 0 ]; then + PIP_CMD="pip3 install --upgrade" +elif [ -n "$SUDO" ]; then + PIP_CMD="$SUDO pip3 install --upgrade" +else + PIP_CMD="pip3 install --user --upgrade" +fi + +echo "実行: $PIP_CMD esptool" +# pip のアップグレード(安全のため) +# ただし --user と sudo の併用は避ける +if [ "$(id -u)" -eq 0 ] || [ -n "$SUDO" ]; then + $PIP_CMD pip setuptools wheel >/dev/null || true +fi + +$PIP_CMD esptool + +# インストール後の検証 +if has_cmd esptool || has_cmd esptool.py; then + echo "esptool のインストールに成功しました:" + if has_cmd esptool; then esptool --version || true; fi + if has_cmd esptool.py; then esptool.py --version || true; fi + # 非 root で --user インストールした場合、~/.local/bin を PATH に含める必要がある + if ! has_cmd esptool && ! has_cmd esptool.py && [ -d "${HOME}/.local/bin" ]; then + echo "" + echo "注意: esptool は ${HOME}/.local/bin にインストールされました。" + echo "PATH に追加するには次を実行してください(bash/zsh の場合):" + echo ' export PATH="$HOME/.local/bin:$PATH"' + fi + exit 0 +else + echo "エラー: esptool のインストールに失敗しました。" >&2 + exit 2 +fi \ No newline at end of file diff --git a/lib.sh b/lib.sh index fa367ac..8e8aef3 100644 --- a/lib.sh +++ b/lib.sh @@ -49,6 +49,10 @@ fi ;; "Linux") # Linux + # if No Module named pip, then install pip + if ! command -v $PYTHON &> /dev/null + then + echo "エラー:Pythonコマンドを使用するため、まずPythonをイン if $PYTHON -m esptool --help &> /dev/null then echo "$PYTHON -m esptool"