Mac raspberry Pi 備忘録

raspberry Pi新規設定メモ

raspberry piはしばらく使っているとSDカードの寿命で動作が怪しくなります。そんなときに新しいmicro SDカードを設定するときの自分用のメモです。

SDカードの準備

microSDカードは32GB U1でOK。ドライブレコーダー用だと書き込み耐性が高い?

公式サイトでRaspberry Pi Imager.appをダウンロード

https://www.raspberrypi.com/software/

OSの32/64bit選択は以下の通り。ターミナルで使うならLITE版にすると軽い。

●64bit 一択

  • Raspberry Pi 5
  • Raspberry Pi 4 / 4B / 400

●32bit を選ぶのが無難

  • Raspberry Pi 3 シリーズ
  • Raspberry Pi Zero 2 W

●32bit しか動かない

  • Zero / Zero W (初代)
  • Pi 1 / Pi 2 (初代)
  • Pi Zero(初代)

Imagerでは、パスワード、SSH、Wifiとかも設定できる。

特にリモートで使う場合にはなるべくここで設定しておくと楽。

起動とセットアップ

ローカルで設定するなら、ラズパイ本体にモニタとキーボード、ネットを繋いでからmicroSDカードをセットして起動

起動したらpiのターミナルアプリを開いてsudo piwizで設定ウイザードを出せる

再起動する

SSH接続用のIPアドレスの確認 ip addr コマンド ip addr | grep inet

inetの後ろに自分のIPが書いてある

MacとSSH接続

SSHはパスワード接続にする(Imagerで設定)

SSH設定をオンにしていない場合には、

メニュー>設定>Raspberry piの設定>インタフェースでSSHにチェックを入れる

sudo raspi-configadvanced optionでも設定できる

IPが依然使っていたものと被ると接続できないときがある(暗号鍵が違うと怒られる)

Mac側のターミナルでssh-keygen -R {IP ADRESS}コマンドを実行し、該当IPアドレスのホスト情報を削除すればOK

LocaleとWLANの国設定

sudo raspi-config

メニューで

Locale

一覧から ja_JP.UTF-8 UTF-8 にチェックを入れる(スペースキー)

OK を押すと「デフォルトロケール選択」が出るので ja_JP.UTF-8 を選択。

さらに

Localisation Options → WLAN Country → 国一覧から JP Japan を選択

終わったらsudo reboot で再起動

Macとファイル共有の設定

いちいち手入力も面倒なので、規定値でsamba共有を自動設定するスクリプトとスクリプトファイルをSSHで送るためのスクリプトを作った。

#!/usr/bin/env bash
# Raspberry Pi 用 軽量 Samba セットアップスクリプト
# - Samba 最小限インストール
# - /home/pi を "share" という名前で共有
# - ユーザー: pi / パスワード: "YOUR_PASSWORD" をSMBに登録
# - サービス起動 & 自動起動(永続化)
#
# 使い方:
#   chmod +x setup_samba_min.sh
#   sudo ./setup_samba_min.sh
#
# 注意:
#   平文パスワードを含みます。配布/保管にご注意ください。

set -euo pipefail

# ===== 事前チェック =====
if [[ $EUID -ne 0 ]]; then
  echo "このスクリプトは sudo/root で実行してください。" >&2
  exit 1
fi

LINUX_USER="pi"
SMB_USER="pi"
SMB_PASS="YOUR_PASSWORD"
SHARE_NAME="share"
SHARE_PATH="/home/pi"
BACKUP_SUFFIX="$(date +'%Y%m%d-%H%M%S')"

if [[ ! -d "$SHARE_PATH" ]]; then
  echo "共有ディレクトリ $SHARE_PATH が存在しません。ユーザー名やパスをご確認ください。" >&2
  exit 1
fi

# ===== パッケージ導入(最小限)=====
# samba: smbd/nmbd 本体
# samba-common-bin: smbpasswd などの管理コマンド
export DEBIAN_FRONTEND=noninteractive
apt-get update -y
apt-get install -y --no-install-recommends samba samba-common-bin

# ===== smb.conf バックアップ =====
if [[ -f /etc/samba/smb.conf ]]; then
  cp -a /etc/samba/smb.conf "/etc/samba/smb.conf.backup-${BACKUP_SUFFIX}"
fi

# ===== 最小構成の smb.conf を作成 =====
# - SMB1無効化(セキュリティ強化)
# - 認証は明示ユーザーのみ(guest無効)
# - 共有: /home/pi を share 名で書込可、pi のみアクセス
cat >/etc/samba/smb.conf <<'EOF'
[global]
   workgroup = WORKGROUP
   server string = %h
   map to guest = Never
   security = user
   # SMB1を無効化、SMB2以上を使用
   server min protocol = SMB2
   client min protocol = SMB2
   # ログ(必要ならサイズ/ローテーションを調整)
   log file = /var/log/samba/log.%m
   max log size = 1000
   # パフォーマンス系(必要に応じて調整)
   socket options = TCP_NODELAY IPTOS_LOWDELAY

[share]
   path = /home/pi
   browseable = yes
   read only = no
   writable = yes
   valid users = pi
   create mask = 0664
   directory mask = 0775
   force user = pi
   force group = pi
EOF

# ===== Linux 側の所有権を確認(任意:齟齬があれば整える)=====
if id "$LINUX_USER" &>/dev/null; then
  chown -R "$LINUX_USER":"$LINUX_USER" "$SHARE_PATH" || true
else
  echo "警告: Linuxユーザー $LINUX_USER が見つかりません。Sambaユーザー登録のみ行います。" >&2
fi

# ===== Samba ユーザー登録 =====
# -s: 非対話
# 既に存在する場合はパスワード更新
set +e
pdbedit -L | grep -q "^${SMB_USER}:" 2>/dev/null
EXISTS=$?
set -e
if [[ $EXISTS -ne 0 ]]; then
  # 新規追加
  printf "%s\n%s\n" "$SMB_PASS" "$SMB_PASS" | smbpasswd -s -a "$SMB_USER"
else
  # 既存ユーザーのパスワード更新
  printf "%s\n%s\n" "$SMB_PASS" "$SMB_PASS" | smbpasswd -s "$SMB_USER"
fi

# ===== 設定の妥当性確認 =====
testparm -s >/dev/null

# ===== サービス起動 & 自動起動(永続化)=====
# 近年は smbd のみでも動作しますが、NetBIOS ブラウズ名解決が必要なら nmbd も有効化します
systemctl enable --now smbd
systemctl enable --now nmbd || true  # nmbdが無い環境でも続行

# ===== 完了表示 =====
IP_ADDR=$(hostname -I 2>/dev/null | awk '{print $1}')
HOSTNAME=$(hostname)
cat <<INFO

========================================
Samba セットアップが完了しました。

共有名  : ${SHARE_NAME}
共有パス: ${SHARE_PATH}
ユーザー: ${SMB_USER}
パスワード: ${SMB_PASS}

接続例(同一ネットワークのクライアントから):
 - macOS Finder: 「移動」>「サーバへ接続…」で smb://${HOSTNAME}/${SHARE_NAME}
   または smb://${IP_ADDR}/${SHARE_NAME}
 - Windows エクスプローラー: \\${HOSTNAME}\${SHARE_NAME}
   または \\${IP_ADDR}\${SHARE_NAME}

設定バックアップ: /etc/samba/smb.conf.backup-${BACKUP_SUFFIX}
========================================
INFO

SSHで上記スクリプトファイルをラズパイに送るためのスクリプト。

Mac側で設定した実行権限が引き継がれるのですぐに実行できる。

#!/bin/bash
# スクリプト名: transfer_file_by_SSH.sh
# 特定のファイルを指定した端末にSSHで送信するためのスクリプト
# Raspberry Pi初期設定の過程で、
# ファイル共有用のsamba設定スクリプト"setup_samba_min.sh"を
# Mac/PCからラズパイへ簡単に送るために作ったもの。
# 端末はhostname(例:pi.local)で指定。"pi"と書けば自動的にpi.localになる。

# 使い方
# ./transfer_file_by_SSH.sh "hostname(.localは不要)"

# --- 1. 定義 ---
# 送信するファイル名を変数で定義
TRANSFER_FILE="setup_samba_min.sh"

# 接続ユーザー名 (Raspberry Piのデフォルトユーザー)
REMOTE_USER="pi"

# --- 2. 引数チェックとホスト名設定 ---
if [ "$#" -ne 1 ]; then
    echo "エラー: 引数としてホスト名のベースを1つ指定してください。" >&2
    echo "使用法: $0 <ホスト名ベース>" >&2
    echo "例: $0 raspberrypi (-> raspberrypi.local に接続)" >&2
    exit 1
fi

# 引数で受け取ったホスト名ベースを変数に格納
HOST_BASE="$1"

# .local を補完して完全なホスト名を定義
REMOTE_HOST="${HOST_BASE}.local"

# --- 3. ファイル存在チェック ---
if [ ! -f "$TRANSFER_FILE" ]; then
    echo "エラー: 送信するファイル '$TRANSFER_FILE' がカレントディレクトリに見つかりません。" >&2
    exit 1
fi

# --- 4. SCPコマンド実行 ---
echo "--- ファイル転送を開始します ---"
echo "送信元: $(pwd)/$TRANSFER_FILE"
echo "送信先: $REMOTE_USER@$REMOTE_HOST:/"

# scp -p: タイムスタンプとパーミッションを保持
# 送信先: $REMOTE_USER@$REMOTE_HOST:~/$TRANSFER_FILE  <-- ホームディレクトリ
scp -p "$TRANSFER_FILE" "$REMOTE_USER@$REMOTE_HOST:~/$TRANSFER_FILE"

# --- 5. 完了 ---
if [ $? -eq 0 ]; then
    echo "--- 転送が成功しました! ---"
else
    echo "--- エラーが発生しました。接続、パスワード、パーミッションを確認してください。 ---" >&2
fi

radikoの自動録音設定

Dropboxアップローダーの設定

シェルスクリプトをダウンロード

https://github.com/andreafabrizi/Dropbox-Uploader/

Dropbox APIのApp Keyなどは以下のURLから取得。必要ならAppを新規作成

https://www.dropbox.com/developers/apps

AppにはPermissionによって2種類ある

・App folderアプリはDropbox/アプリ/{App Name}/にのみアクセス可能

・任意のフォルダにアクセスするにはFull Dropboxタイプにする必要がある(radiko録音ではこっちを使っている)

#手順
curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

$chmod +x dropbox_uploader.sh
$./dropbox_uploader.sh

あとはプロンプトの指示に従って
App Keyを入力
App Secretを入力
指定されたURLにアクセスしaccess codeを取得
access codeを入力

これでAPIとdropbox_uploaderが接続される
認証情報は~/.dropbox_uploaderファイルに記録されているのでこれを削除すればリセット可能

# 使い方
./dropbox_uploader.sh -s upload {filepath:filename} {uploadpath:filename}
単発ファイルの時は必ずファイル名が必要
ワイルドカードの時はディレクトリ名のみでOK
例:
./dropbox_uploader.sh -s upload ./test.txt /target_folder/test.txt
./dropbox_uploader.sh -s upload ./*.txt /target_folder

その他

USBメモリは~/mediaディレクトリにマウントされる

-Mac, raspberry Pi, 備忘録