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-configのadvanced 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
firadikoの自動録音設定
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ディレクトリにマウントされる


