📚 シリーズ目次
本シリーズは、作業の一部で Linux Mint 22.2 Cinnamon Edition を使用します。
( Windows 11 での作業手順も併記しています。)
1. はじめに
いよいよ、QEMU上のDebianでのサーバ運用に入ります。ここまでは意図した通りに動いているように見えるので、パフォーマンスがアレでも動いてくれるはと思うのですが…不安を胸に抱いたまま、サーバ構築作業に突入です。
本記事では、非rootのスマホに仮想マシンを導入し、Android OS上でネイティブなLinuxサーバを稼働させることを目指します。
2. クライアントPCのセットアップ
2.1 ソフトウェアのインストール
サーバ構築に先立って、クライアントPCをセットアップしてしまいましょう。本記事ではクライアントにRabbitVCSを使用します。Linux Mintのソフトウェアマネージャから、以下のソフトウェアをインストールしてください。
- Git
- Subversion
- Rabbitvcs-core
- Nemo-python
Windows環境では、以下をインストールしてご使用ください。
- Git for Windows
- TortoiseGit
- TortoiseSVN
2.2 右クリックメニューの統合
RabbitVCSの右クリックメニュー統合には RabbitVCS.py が必要です。以下のサイトからダウンロードし、~/.local/share/nemo-python/extensions に配置してお使いください。次のコマンドでも対応できます。
mkdir -p ~/.local/share/nemo-python/extensions
cd ~/.local/share/nemo-python/extensions
wget https://raw.githubusercontent.com/rabbitvcs/rabbitvcs/master/clients/nemo/RabbitVCS.py
RabbitVCS.py の配置後すぐは、右クリックメニューに反映されていません。一度ログアウトしてからログインしなおすと、使えるようになります。
3. SVNサーバのセットアップ
3.1 Subversionのインストール
それでは、サーバ構築の作業に入ります。まずは、Debianに接続しましょう。
ssh termux-qemu
接続できたら、以下のコマンドで必要なパッケージをインストールします。今回はHTTPSでの接続を行うため、Apache用のモジュールも導入します。
sudo apt install subversion
sudo apt install libapache2-mod-svn
3.2 Subversionの公開設定
続いて、Apacheでの公開設定を編集します。まずは、SVNリポジトリ用のフォルダを準備しましょう。rclone-mounter.service に以下の項目を追加してサービスを再起動すると、暗号化フォルダ内のサブフォルダが /srv/svn にマウントされます。
sudo nano /etc/systemd/system/rclone-mounter.service
ExecStartPre=/usr/bin/mkdir -p /srv/svn
ExecStart=/usr/bin/rclone mount termux-secure:svn /srv/svn \
--uid 1000 --gid 33 --umask 002 --allow-other \
--vfs-cache-mode writes --daemon
ExecStop=/usr/bin/fusermount -u /srv/svn
sudo systemctl daemon-reload
sudo systemctl restart rclone-mounter
それでは、設定ファイルを編集します。SVNParentPath と AuthUserFile 以外はデフォルトのものをそのまま使うので、編集といってもほぼコメントアウトを解除するだけです。以下のように修正してください。
sudo nano /etc/apache2/mods-enabled/dav_svn.conf
- #<Location /svn>
+ <Location /svn>
- #DAV svn
+ DAV svn
- #SVNParentPath /var/lib/svn
+ SVNParentPath /srv/svn
- #AuthType Basic
- #AuthName "Subversion Repository"
- #AuthUserFile /etc/apache2/dav_svn.passwd
+ AuthType Basic
+ AuthName "Subversion Repository"
+ AuthUserFile /etc/apache2/.htpasswd
#<LimitExcept GET PROPFIND OPTIONS REPORT>
- #Require valid-user
+ Require valid-user
#</LimitExcept>
- #</Location>
+ </Location>
変更を保存したら、モジュールを有効化してApacheを再起動します。
sudo a2enmod dav
sudo a2enmod dav_svn
sudo systemctl restart apache2
3.3 認証ユーザの設定
初回は以下のコマンドで認証ユーザを設定します。コマンドを実行するとパスワード入力を要求されるので、同じものを2回入力してください。svn:// と違って、パスワードを平文で記録しなくて済むのは安心できます。
sudo htpasswd -cm /etc/apache2/.htpasswd ユーザ名
認証ユーザを追加する場合は、こちらのコマンドを使用してください。-c オプションが存在すると、既存ユーザの情報がすべて消失します。
sudo htpasswd -m /etc/apache2/.htpasswd ユーザ名
4. SVNリポジトリの操作
4.1 リポジトリの作成
それでは、リポジトリを作成してHTTPS経由でのアクセスを確認します。以下のコマンドで作成してください。リポジトリ名は my-first-svn とすることにします。
svnadmin create /srv/svn/my-first-svn
4.2 PCでのチェックアウト
リポジトリが作成できたら、クライアントPCでチェックアウトしてみましょう。SVN作業用のフォルダ(~/SVN など)で右クリックして、「RabbitVCS SVN」から「Checkout...」を選択します。「URL」欄に以下をコピペしてOKボタンをクリックすると、リポジトリからチェックアウトされます。
https://termux.home.arpa:8443/svn/my-first-svn
初回接続時は、ユーザ名とパスワードの入力が求められます。「Save Authentication」にチェックを入れることで、次回以降は自動で認証されます。
4.3 メディアフォルダのSVN管理
ここでは、スマホのメディアフォルダをSVN管理できるようにします。SDカードのルートディレクトリをワークスペースとし、複数のフォルダを一度に管理します。まずは、以下のコマンドでメディアフォルダ用のリポジトリを作成します。
svnadmin create /srv/svn/sdcard
続いて、SDカードのルートディレクトリをSVNのチェックアウト先にします。以下のコマンドで強制チェックアウトし、作成したリポジトリと紐付けます。
cd /mnt/sdcard
svn checkout "https://termux.home.arpa/svn/sdcard" . \
--username ユーザ名 \
--force
内部ストレージのメディアフォルダを対象にする場合は、sdcard を shared と読み替えてください。
今回は DCIM と Movies をまとめてコミットします。その前に、コミット対象にしないファイルやフォルダを設定してしまいましょう。手元の環境では、.tmfs と .thumbnails というフォルダがあったので、これを除外フォルダとして設定します。
svn add --depth=empty DCIM
svn add --depth=empty Movies
svn propset svn:ignore ".tmfs" DCIM
svn propset svn:ignore ".thumbnails" Movies
除外設定が終わったら、以下のコマンドですべてを追加してコミットします。
svn add --force DCIM
svn add --force Movies
svn commit -m "Initial commit"
5. おわりに
遅い。遅い上にコミットの最後で失敗する。rename操作で失敗してるっぽい。コミットを分割すると通ったりするけど、実用には向かないかもしれないな…という訳で、次回のGitサーバに期待せざるを得ない。速度面はQEMUのコア数を増やして確認してみます。
| ◀️ 前の記事 | 次の記事 ▶️ |
|---|---|
| セキュアサーバに、なりたいな「ハイ!rclone crypt」③HTTPSサーバを構築してみる | セキュアサーバに、なりたいな「ハイ!rclone crypt」⑤Gitサーバを構築してみる |

