Raspberry Pi4でDockerを使ってTimeMachine対応のSambaサーバを作る

2022/04/14

Linux Mac RaspberryPi

t f B! P L

Raspberry PiのOSをBusterからBullseyeにアップデートしました。

正確にはアップデートじゃなくて新規インストールをしたので、今までの環境もイチから作り直し。

大した設定をしてないので、イチから作り直し。

Docker上で動いていたHomebridgeもPortainerもバックアップ取っておいた。


NASとしては「OpenMediaValut」を使っていたんだけど、

別にそこまで高機能じゃなくていいから、単純にファイル共有の機能だけ使えばいいや、

ってことで、Docker上にSambaを構築しました。

MacbookのバックアップにTimeMachineも使っていたので、

TimeMachineにも対応させた。



前提

以下は実施済みであることとする。

  • Raspberry Pi OSの最新版(bullseye)をインストール済み
  • DockerおよびDocker Composeの最新版をそれぞれインストール済み
  • 共有フォルダ用のストレージはext4でフォーマットおよびマウント済み

Dockerのインストール手順は以下を参照。


Docker Composeは以下。


公式が一番わかりやすいw


Portainerのインストール

これは任意。

コンテナの管理をWebGUIで実施したい人向け。

以下のコマンドを実行するだけ。


docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

https接続したい場合はポート番号"9000"を"9443"に変えればOK。

証明書を用意するのが面倒だけど。


複数のホストを一元管理するにはPortainerを使うとスゲー便利な気がするので、

そのやり方はまた今度別記事にしようかな。


Sambaコンテナのインストール

ようやく本題。

DockerでのSambaの公式イメージは存在しないようなので、

一番人気のある"dperson/samba"のイメージを使わせてもらう。

docker-compose.ymlに以下の記述をする。

version: "3"
services:
    samba:
        container_name: smb
        image: dperson/samba
        restart: always
        volumes:
            - /mnt/timemachine:/timemachine:z
            - /mnt/data:/data:z
        ports:
            - "137:137/udp"
            - "138:138/udp"
            - "139:139/tcp"
            - "445:445/tcp"
        network_mode: host
        tmpfs:
            - /tmp
        environment:
            - TZ=Asia/Tokyo
        stdin_open: true
        tty: true
        command: >
            -w "WORKGROUP"
            -S
            -u "<ユーザー名>;<パスワード>"
            -s "data;/data;no;no;no;user"
            -s "TimeMachine;/timemachine;no;no;no;user"
            -p
            -g "server string = dockerized CIFS SMB server"
            -g "ea support = yes"
            -g "fruit:advertise_fullsync = true"
            -g "durable handles = yes"
            -g "kernel oplocks = no"
            -g "kernel share modes = no"
            -g "posix locking = no"
            -g "inherit acls = yes"


"/mnt/Timemachine"がTimeMachine領域、

"/mnt/data"が共有フォルダ領域。


あとはそれぞれの共有フォルダにアクセスするユーザーおよびパスワードを"adduser"コマンドで作成しておく。

オプションは作者のgithubのページ見たら分かるかとw

-gで各パラメータを設定するのが肝。


あとは、このコンテナイメージを起動するすればOK。


共有フォルダにアクセスしたい別PCから

¥¥<IPアドレス>¥TimeMachine

とアクセスすれば、ユーザー名とパスワードを入力すれば共有フォルダが見えるはず。


他にもmDNS(=avahi=Bonjour)の設定も必要なんだけど、

Raspberry Pi OSではデフォルトで有効になっており、特に設定は不要。


MacでTimeMachine設定

実際にMacから共有フォルダに対してTimeMachineの設定を行ってみる。

TimeMachineの設定画面からディスクを選択すると、

共有フォルダが見えるはず。

見えない場合は、Command+Kキーで共有フォルダに接続してください。


その後、ユーザー名とパスワードを聞かれるので先ほどの情報を入力する。

ゲストアクセス許可にするならゲストでもいいかと。


あとは自動的にバックアップを取ってくれる。

ちなみにBonjourにも対応しているので、<ホスト名.local>でアクセスも可能。


そもそも、そう簡単に壊れないのとバックアップからリカバリする機会はあまり無いっていう気もするが、

せっかくNASを導入したのだから、バックアップできるもんはやっておけば精神的にも安心。


あくまでただのSamba機能だけ

Dockerを使う最大のメリットはホストに余計なアプリをインストールする必要がない、ということだと思う。

あとはホストOSに依存しない。

あれやこれやとアプリをホストOSに直接インストールすると、

要らなくなった際のアンインストール時にゴミが残ったりするので

dockerであれば気兼ねなく入れたり消したりが自由にできる。


話が少し逸れたけど、今回導入したのはあくまで"ファイル共有"機能のみ。

OpenMediaValutだと、S.M.A.R.T機能があったり、iptablesをコントロールできたり、

拡張プラグインでいろいろできたりするんだけど、

それらは別途追加対応が必要なのでご注意。

そういうのもdockerで立てりゃいいだけの話ですが。



検索

Blog Archive

Popular Posts

About Me

自分の写真
性別:男
年齢:ついに40over
趣味:Snowboard、パソコン、iPhone、子育て

仕事:ユー子の社内SEとしてサーバ、NW等のインフラ全般をやってます

日々生活していく中で思ったことなどをつらつらと書いていきます。

どうぞよろしく!

ブログランキング

ブログランキング・にほんブログ村へ

QooQ