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 フォルダ内から右クリックで行うことができます。
svn+ssh://termux-ssh/data/data/com.termux/files/home/svn/my-second-repo
SSH経由の接続では、コミット時の作者名がTermuxに割り当てられたユーザ名 u0_axxx で固定となります。コミットメッセージの先頭に [auther: ユーザ名] を付加するなど、適宜ご対応ください。
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
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
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
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
[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
[users]
- # harry = harryssecret
- # sally = sallyssecret
+ Redmi-12-5G = xxxxxxxxxx
+ Inspiron-3793 = xxxxxxxxxx
認証設定が完了したらPC側でチェックアウトしてみましょう。~/.ssh/config の設定は参照されないため、ホスト名はIPアドレスとなります。初回はユーザ名とパスワードの入力が求められますが、以降は自動で認証されるようになります。
svn://192.168.x.x/my-second-repo
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
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


