1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RaspberryPiによるNSAの作成

Last updated at Posted at 2025-02-24

NASが高いので,露地栽培のラズベリーでSambaサーバーをたてた.

RaspPiは内臓ストレージがSDカードなので,外部ストレージをSambaで共有ファイルにする.
最悪RasPiが壊れても外部ストレージなら損傷も少ないという意図もある.
外部ストレージにせざるを得ないので,好きに抜き差しできると嬉しいなNASにしたい.
速度は出ないけど,まあ仕方ない.

基本戦略

  1. RaspPiはつけっぱなしにする
  2. 外付けドライブを指す
  3. 特定のScriptを実行すると共有フォルダにマウントしてWindowsからアクセス可能になる
  4. 外す時は特定のScriptを実行して外せる

今後したいこと

  • VPNで外部からアクセスできるようにする

参考にしたサイト

メインで参考にしたのは,以下のサイト

そのままだと,iOS18以降のiPhoneから読み出し専用アクセスしかできないので,写真のバックアップサーバーとして使えないため,以下も参考にした.

USBのフォーマットはexFATとする.

exFATはMacとWindwosで共通して使いやすいフォーマット形式であるが,Linuxで扱いには少々めんどくさい.
そもそもexFAT自体が$ chmodなどのUNIX系システムのパーミッション変更方法に対応していないから,デフォルトではrootユーザーのみがアクセス可能で,一般ユーザがアクセスできないという根本問題がある.
そもそも,Ubuntuカーネル5.4より前ではexfat-fuseパッケージを入れないとmountでマウントできない状況だったが,5.4(Ubuntu20.10)以降ではモジュール追加なしで利用可能になった.

それでもexFATで一定にしたいので,$ mountumaskオプションを付けて対応する.

Samba Install

sudo apt install samba
sudo adduser --system --group --no-create-home samba # sambaアクセス用のアカウント作成

コマンドを少し詳しく解説すると、Ubuntuでユーザーを追加するコマンドはadduserだ。useraddコマンドもあるが、一旦忘れていい。今回は通常ログインに使用するユーザーではなく、Sambaというシステムだけで使用する便宜上のユーザーなので、–systemオプションを付けている。–groupはユーザーと同名のグループを作成するオプションだ。–no-create-homeはその名のとおりで、ホームフォルダー(今回だと/home/samba)を作成しないオプションである。引数の最後には、作成するユーザー名(=グループ名)を付ける。

sudo pdbedit -a samba # Sambaユーザーを作成,パスワードはなしで作成するとラク

USBメモリのマウント

sudo fdisk -l # 接続されているメディアのls
sudo mkdir /mnt/samba # mntにsamba用のディレクトリを作成

#!/bin/bash

# 操作を選択するためのメニュー
echo "現在のボリュームをリストします:"
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,LABEL

# 操作可能なボリュームリストを作成
VOLUMES=($(lsblk -r -o NAME,SIZE,TYPE,MOUNTPOINT,LABEL | grep part | awk '{print $1}'))
VOLUMES_COUNT=${#VOLUMES[@]}

# ボリュームのリストを表示し、マウント状態を表示
echo "操作するボリュームを選択してください (番号を入力):"
echo "0: 何もしない"

for i in "${!VOLUMES[@]}"; do
    DEVICE=${VOLUMES[$i]}
    SIZE=$(lsblk -o NAME,SIZE | grep "$DEVICE" | awk '{print $2}')
    LABEL=$(lsblk -o NAME,LABEL | grep "$DEVICE" | awk '{print $2}')
    MOUNT_POINT=$(lsblk -o NAME,MOUNTPOINT | grep "$DEVICE" | awk '{print $2}')
    
    if [ -z "$LABEL" ]; then
        LABEL="ラベルなし"
    fi

    if [ -z "$MOUNT_POINT" ]; then
        STATUS="未マウント"
    else
        STATUS="マウント済み: $MOUNT_POINT"
    fi
    
    echo "$((i+1)): /dev/$DEVICE ($SIZE, ラベル: $LABEL, $STATUS)"
done

# ユーザーから選択を受け取る
read -p "ボリューム番号を入力してください: " VOLUME_SELECTION

if [ "$VOLUME_SELECTION" -eq 0 ]; then
    echo "何も実行しません。スクリプトを終了します。"
    exit 0
fi

VOLUME_SELECTED=${VOLUMES[$((VOLUME_SELECTION-1))]}

if [ -z "$VOLUME_SELECTED" ]; then
    echo "無効な選択です。スクリプトを終了します。"
    exit 1
fi

# ラベルを取得
LABEL=$(lsblk -o NAME,LABEL | grep "$VOLUME_SELECTED" | awk '{print $2}')
if [ -z "$LABEL" ]; then
    LABEL="無名ボリューム"
fi

# マウントポイントの確認
MOUNT_POINT=$(lsblk -o NAME,MOUNTPOINT | grep "$VOLUME_SELECTED" | awk '{print $2}')

# ボリュームが未マウントの場合、マウントする
if [ -z "$MOUNT_POINT" ]; then
    # マウントポイントのディレクトリを作成
    MOUNT_POINT="/mnt/$LABEL"
    echo "ディレクトリ $MOUNT_POINT を作成します"
    mkdir -p "$MOUNT_POINT"

    # ボリュームをマウント
    echo "/dev/$VOLUME_SELECTED をマウント中: $MOUNT_POINT"
    sudo mount "/dev/$VOLUME_SELECTED" "$MOUNT_POINT"

    # マウント成功確認
    if mount | grep "$MOUNT_POINT" > /dev/null; then
        echo "マウント成功: $MOUNT_POINT"
    else
        echo "マウント失敗: /dev/$VOLUME_SELECTED"
    fi
else
    # ボリュームがマウントされている場合、アンマウントする
    echo "/dev/$VOLUME_SELECTED はすでにマウントされています。アンマウントします。"

    # ボリュームをアンマウント
    echo "アンマウント中: $MOUNT_POINT"
    sudo umount "$MOUNT_POINT"

    # アンマウント成功確認
    if ! mount | grep "$MOUNT_POINT" > /dev/null; then
        echo "アンマウント成功: $MOUNT_POINT"
        # アンマウントした後にディレクトリを削除
        echo "ディレクトリ $MOUNT_POINT を削除します"
        rmdir "$MOUNT_POINT"
    else
        echo "アンマウント失敗: $MOUNT_POINT"
    fi
fi

Samba.conf

sudo vim /etc/samba/smb.conf
[global]
   guest account = samba

[]
   writeable = yes
   path = /mnt/samba
   create mask = 0664
   directory mask = 0775
   force user = samba
   force group = samba
   guest ok = yes
   guest only = yes

[machu]
   writeable = yes
   path = /srv/samba/machu
   create mask = 0664
   directory mask = 0775
   force user = machu
   force group = machu

動作確認

sudo testparm

適用

sudo systemctl reload smb

wsdd2

sudo apt install wsdd2 # 補助パッケージ
sudo systemctl enable --now wsdd2.service # 自動起動

WSL からNASアクセス

WindwosからNASにアクセスできない

24h2でセキュリティが上げられたからレギストリエディタで修正しないといけなくなったっぽい.
Windowsくんさぁ….

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?