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?

スマートフォン?いいえ、モバイルサーバです。②SVNも動く!レガシー資産を守護れ

1
Last updated at Posted at 2025-12-04

1. はじめに

前回の記事でスマホをモバイルGitサーバ化する際、SVNサーバの構築も検討していました。変更履歴を必要としないようなアーカイブで、リポジトリが破損してもさほど影響のない用途ならモバイルSVNサーバも活躍の余地はあるのかなと。SDカード上でリポジトリを運用する都合により、膨大な数のファイルは苦手としていますで注意。

なお、本記事の手順は Linux Mint 22.2 Cinnamon Edition での作業をベースにしています。

Windowsでの作業にも対応しています。

2. なぜSVN?

Gitはとても便利で良いのですが、リポジトリをまるごとローカルにクローンして作業する都合上、クライアントのストレージ容量を圧迫することになります。その点、SVNが参照するリポジトリはGitで言うところの「リモート」のみであり、ローカルに展開されるのはチェックアウトしたファイルのみです。クライアント側には容量面のメリットがありますが、きちんとした運用をするならリポジトリの定期的なバックアップを検討する必要があります。そして、バックアップの保存にはストレージ容量が必要。なので今回は、SVNのリポジトリにローカルファイルをバックアップ、という割り切った使でどうでしょうかw

3. 環境のセットアップ

3.1 PCとスマホのセットアップ

PCとスマホについては、前回と同じセットアップで運用します。セットアップ手順については以下の記事をご参照ください。本記事ではSVN操作にRabbitVCSを使用します。

Windows環境では以下をインストールしてご使用ください。

  • TortoiseSVN

3.2 Subversionのインストール

では、スマホをSVNサーバとしてセットアップしていきます。今回はSSH経由での接続と svn:// スキームでの接続を両方紹介しますが、いずれも「Subversion」だけあればOKです。以下のコマンドでインストールします。

pkg install subversion

3.3 リポジトリフォルダの作成

今回もスマホのSDカード上にリポジトリを作成して運用します。以下のコマンドを実行して、SDカードにアクセスできるようにします。内部ストレージの共有フォルダにもアクセスできるようになります。

termux-setup-storage

上記コマンドでリンクが作成されたら、~/storage/external-1 の配下にSVNリポジトリ用のフォルダを作成し、HOMEディレクトリ直下にシンボリックリンクを作成します。

mkdir ~/storage/external-1/svn && \
ln -s ~/storage/external-1/svn ~/svn

4. SSH経由での接続

4.1 SVNリポジトリの作成

それでは、SVNポジトリを作成します。リポジトリ名は my-second-repo とすることにします。以下のコマンドを実行してください。

svnadmin create ~/svn/my-second-repo

リポジトリが作成できたら、PC側でチェックアウトしてみましょう。SVN作業用のフォルダ(~/SVN など)で右クリックして、「RabbitVCS SVN」から「Checkout...」を選択します。「URL」欄に以下をコピペしてOKボタンをクリックすると、リポジトリからチェックアウトされます。~ 記法は展開されないので、フルパス指定が必要です。「更新」や「コミット」は、my-second-repo フォルダ内から右クリックで行うことができます。

URL
svn+ssh://termux-ssh/data/data/com.termux/files/home/svn/my-second-repo

Screenshot from 2025-12-04 11-27-42.png

SSH経由の接続では、コミット時の作者名がTermuxに割り当てられたユーザ名 u0_axxx で固定となります。コミットメッセージの先頭に [auther: ユーザ名] を付加するなど、適宜ご対応ください。

Windows環境では、TortoiseSVNのSSHクライアントに ssh.exe を指定してご使用ください。Windows標準のOpenSSHクライアントが使用されます。SSHアクセス時に「コマンドプロンプト」ウィンドウが出ますが、仕様ですw

スクリーンショット 2025-12-04 113325.png

4.2 既存フォルダとの紐付け

ここでは、スマホのメディアフォルダをSVN管理できるようにします。今回はMoviesフォルダを対象にします。以下のコマンドでMoviesフォルダ用のリポジトリを作成します。

svnadmin create ~/svn/Movies

続いて、MoviesフォルダをSVNのチェックアウト先にします。以下のコマンドで強制チェックアウトし、作成したリポジトリと紐付けます。

cd ~/storage/shared/Movies && \
svn checkout "file://$HOME/svn/Movies" . --force

4.3 初回コミットの実施

それでは、Moviesフォルダ配下にあるファイルをまとめてコミットします。と、その前に、コミット対象にしないファイルやフォルダを設定してしまいましょう。手元の環境では、Moviesフォルダ直下に .thumbnails というフォルダがあったので、これを除外フォルダとして設定します。以下のコマンドで設定します。

svn propset svn:ignore ".thumbnails" .

除外設定が終わったら、以下のコマンドですべてを追加してコミットします。

svn add --force . && \
svn commit -m "[device: Redmi-12-5G] Initial commit"

4.4 自動コミットの設定

動画を撮影した場合など、Moviesフォルダ配下にファイルが増えたらコミットの操作が必要になります。手動でやるのも面倒なので、.bashrc に仕込んでしまいましょう。

nano ~/.bashrc
~/.bashrc
  if [[ ! $SSH_CONNECTION ]]; then
      termux-wake-lock
      sshd
+     cd ~/storage/shared/Movies && \
+         pwd && \
+         svn update &&\
+         svn add --force . && \
+         svn commit -m "[device: Redmi-12-5G] Auto commit"
+     cd ~
  else
      PS1="\[\033[1;34m\]termux@Redmi-12-5G\[\033[0m\]:$PS1"
  fi

5. svn:// スキームでの接続

5.1 SVNデーモンの起動設定

ここでは、svn:// スキームを使用する場合の手順を説明します。svn:// スキームの使用にはSVNデーモンを起動する必要がありますので、まずは .bashrc.bash_logout に以下のように追記してください。追記後は、Termuxを一度終了してから再起動します。

nano ~/.bashrc
~/.bashrc
  if [[ ! $SSH_CONNECTION ]]; then
      termux-wake-lock
      sshd
+     svnserve -d -r ~/svn
  else
      PS1="\[\033[1;34m\]termux@Redmi-12-5G\[\033[0m\]:$PS1"
  fi
nano ~/.bash_logout
~/.bash_logout
  if [[ ! $SSH_CONNECTION ]]; then
+     pkill svnserve
      pkill sshd
      termux-wake-unlock
  fi

5.2 SVNリポジトリの作成

以下のコマンドでSVNポジトリを作成します。リポジトリ名は my-second-repo とします。

svnadmin create ~/svn/my-second-repo

リポジトリが作成できたら、認証設定を変更します。以下のコマンドで編集します。

cd ~/svn/my-second-repo && \
nano conf/svnserve.conf
conf/svnserve.conf
[general]
- # anon-access = read
- # auth-access = write
+ anon-access = none
+ auth-access = write
- # password-db = passwd
+ password-db = passwd
- # realm = My First Repository
+ realm = termux-svn

続いて、ユーザ名とパスワードを追加します。以下は一例です。

nano conf/passwd
conf/passwd
  [users]
- # harry = harryssecret
- # sally = sallyssecret
+ Redmi-12-5G = xxxxxxxxxx
+ Inspiron-3793 = xxxxxxxxxx

認証設定が完了したらPC側でチェックアウトしてみましょう。~/.ssh/config の設定は参照されないため、ホスト名はIPアドレスとなります。初回はユーザ名とパスワードの入力が求められますが、以降は自動で認証されるようになります。

URL
svn://192.168.x.x/my-second-repo

Screenshot from 2025-12-04 14-16-32.png

5.3 既存フォルダとの紐付け

以下のコマンドでMoviesフォルダ用のリポジトリを作成します。リポジトリ作成後は認証設定を行ってください。

svnadmin create ~/svn/Movies

以下のコマンドで強制チェックアウトし、リポジトリと紐付けます。TermuxのSVNクライアントは認証情報を保存できないため、パスワードは都度、入力してください。

cd ~/storage/shared/Movies && \
svn checkout "svn://localhost/Movies" . --force --username Redmi-12-5G

5.4 初回コミットの実施

以下のコマンドで .thumbnails フォルダを除外します。

svn propset svn:ignore ".thumbnails" .

以下のコマンドですべてを追加してコミットします。

svn add --force . && \
svn commit -m "Initial commit"

5.5 自動コミットの設定

以下を .bashrc に追記してコミットを自動化します。パスワードを記載する形になるので、取り扱いにはご注意ください。

nano ~/.bashrc
~/.bashrc
  if [[ ! $SSH_CONNECTION ]]; then
      termux-wake-lock
      sshd
      svnserve -d -r ~/svn
+     cd ~/storage/shared/Movies && \
+         pwd && \
+         svn update --password xxxxxxxxxx && \
+         svn add --force . && \
+         svn commit -m "Auto commit" --password xxxxxxxxxx
+     cd ~
  else
      PS1="\[\033[1;34m\]termux@Redmi-12-5G\[\033[0m\]:$PS1"
  fi

どうでしょうか。どちらの接続方法を選択しても妙にしっくりこない感じです。Gitも含めて、HTTPS接続でのサーバ構築を検討してみようかとも思う訳でw

1
0
0

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?