0
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?

クライアントPCをlocalhost専用HTTPサーバにしてGitとSVNでスマホのSDカードを使う

0
Last updated at Posted at 2025-12-29

1. はじめに

前回の記事で、Termuxを起動してからVirtualBoxを起動して、リポジトリ操作がそれからになるのはなんか手間だなと感じていました。じゃあ、Termuxの起動時にrcloneのマウントもさせてしまえばいいじゃない、という謎の着想を得たので試してみます。

本記事では、クライアントに Linux Mint 22.2 Cinnamon Edition を使用します。
Windows 11 は一部の作業手順のみ記載しています。)

2. 今回のテーマ

2.1 リポジトリの自動マウント

SSH接続する際、接続先でコマンドを実行させるスクリプトの書き方があるらしいです。今回はそれを頼りに、Termuxを起動したらクライアントPCにスマホのストレージがマウントされる動作を目指します。以下は今回のイメージ図です。

2.2 HTTP経由での接続

HTTP経由で接続する主な目的は以下の3点です。クライアント側で警告が出るらしいので、どの程度煩わしいものなのかは実際に運用して確認します。

  • SVNコミット時の作者名をコントロールしたい
  • リモートのURLを環境によらず統一したい
  • サーバ証明書関連の作業を減らしたい

なお、本記事では言葉での作業説明を省いて、必要な情報を列挙する形にしてみます。

3. 自動マウントのセットアップ

3.1 ソフトウェアのインストール

ソフトウェアマネージャからインストールします。

Linux Mint ソフトウェアマネージャ
Openssh-server
Rclone
Apache2
Git
Subversion

Windows環境ではサーバ構築せずに運用します。rcloneは以下のパスに配置して環境変数に追加するのがおすすめです。

  • C:\Users\ユーザ名\AppData\Local\Programs\rclone
Windows PC ダウンロード
rclone - https://rclone.org/downloads/
WinFSP - https://github.com/billziss-gh/winfsp/releases

3.2 Termuxの初期設定

スマホ画面からポチポチと入力します。

Termux termux-change-repo
(*) Single mirror		Choose a Single mirror to use
(*) mirrors.krnk.org	Mirror by KuronekoServer, hosted in Tokyo, Japan
Termux
pkg upgrade
pkg install openssh
passwd
whoami
sshd

3.3 SSHの接続設定

クライアントPCからTermuxに接続します。

Linux Mint nano ~/.ssh/config
Host termux-ssh
  HostName 192.168.x.x
  User u0axxx
  Port 8022
  IdentityFile ~/.ssh/id_ed25519
Linux Mint
ssh-keygen -t ed25519 -C "$(hostname)"
cat ~/.ssh/id_ed25519.pub
ssh u0axxx@192.168.x.x -p 8022
Termux SSH nano ~/.ssh/authorized_keys
# id_ed25519.pub の中身をコピペ
Linux Mint
ssh termux-ssh

TermuxからクライアントPCに接続します。

Termux SSH nano ~/.ssh/config
Host client-ssh
  HostName 192.168.x.x
  User ユーザ名
  Port 22
  IdentityFile ~/.ssh/id_ed25519
  ConnectTimeout 5
Termux SSH
ssh-keygen -t ed25519 -C デバイス名
cat ~/.ssh/id_ed25519.pub
Linux Mint nano ~/.ssh/authorized_keys
# id_ed25519.pub の中身をコピペ
Termux SSH
ssh client-ssh

3.4 シンボリックリンクの作成

スマホのストレージへのシンボリックリンクを作成します。

Termux SSH
termux-setup-storage
ls -l ~/storage/external-1
ln -s /storage/xxxx-xxxx ~/storage/sdcard

ln -s ~/storage/shared ~/media
# ln -s ~/storage/sdcard ~/media

# ln -s ~/storage/shared ~/vault
ln -s ~/storage/external-1 ~/vault
# ln -s ~/storage/sdcard ~/vault

mkdir ~/vault/.vault

3.5 rcloneのリモート設定

rcloneでのリモート接続の準備をします。

Linux Mint rclone config
[termux-sftp]
- type: sftp
- host: 192.168.x.x
- user: u0axxx
- port: 8022
- key_file: ~/.ssh/id_ed25519

[termux-vault]
- type: crypt
- remote: termux-sftp:vault/.vault
- password: *** ENCRYPTED ***
Linux Mint sudo nano /etc/fuse.conf
- #user_allow_other
+ user_allow_other
Linux Mint
sudo mkdir -p /mnt/media
sudo mkdir -p /mnt/vault
sudo mkdir -p /srv/git
sudo mkdir -p /srv/svn
sudo chown "$USER:$USER" /mnt/media
sudo chown "$USER:$USER" /mnt/vault
sudo chown "$USER:$USER" /srv/git
sudo chown "$USER:$USER" /srv/svn

3.6 スクリプトの作成

自動マウントのスクリプトを作成します。

Termux SSH nano ~/.bashrc
if [[ ! $SSH_CONNECTION ]]; then
  termux-wake-lock
  sshd
  ssh client-ssh '
    rclone mount termux-sftp:media /mnt/media \
      --vfs-cache-mode writes --daemon
    rclone mount termux-vault: /mnt/vault \
      --vfs-cache-mode writes --daemon
    rclone mount termux-vault:git /srv/git \
      --uid 33 --gid 33 --allow-other \
      --vfs-cache-mode writes --daemon
    rclone mount termux-vault:svn /srv/svn \
      --uid 33 --gid 33 --allow-other \
      --vfs-cache-mode writes --daemon
  '
else
  USER=termux
  HOSTNAME=デバイス名
  PS1="\[\e]0;$USER@$HOSTNAME: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]$USER@$HOSTNAME\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
fi
Termux SSH nano ~/.bash_logout
if [[ ! $SSH_CONNECTION ]]; then
  ssh client-ssh '
    fusermount -u /mnt/media
    fusermount -u /mnt/vault
    fusermount -u /srv/git
    fusermount -u /srv/svn
  '
  pkill sshd
  termux-wake-unlock
fi

Windows環境では手動でマウントします。

Windows PC rclone-mount.ps1
mkdir "C:\mnt" -Force
Start-Process -WindowStyle Hidden -FilePath rclone `
  -ArgumentList 'mount termux-sftp:media "C:\mnt\media" --vfs-cache-mode writes'
Start-Process -WindowStyle Hidden -FilePath rclone `
  -ArgumentList 'mount termux-vault: "C:\mnt\vault" --vfs-cache-mode writes'
Windows PC rclone-unmount.ps1
Stop-Process -Name rclone -Force

4. HTTPサーバのセットアップ

4.1 Gitサーバの設定

認証ユーザを設定します。初回のみ -cm オプションです。

Linux Mint
sudo htpasswd -cm /etc/apache2/.htpasswd ユーザ名
sudo htpasswd -m /etc/apache2/.htpasswd ユーザ名

.conf ファイルを作成して、モジュールを有効化します。

Linux Mint sudo nano /etc/apache2/sites-available/git.conf
# <VirtualHost *:443>
<VirtualHost *:80>
    # ServerName client.home.arpa
    ServerName localhost

    # SSLEngine on
    # SSLCertificateFile /etc/ssl/certs/client.crt
    # SSLCertificateKeyFile /etc/ssl/private/client.key

    SetEnv GIT_PROJECT_ROOT /srv/git
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

    <Directory /usr/lib/git-core>
        Options +ExecCGI
        Require all granted
    </Directory>

    <Location /git>
        AuthType Basic
        AuthName "Git Repository"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Location>
</VirtualHost>
Linux Mint
sudo a2enmod cgi
sudo a2ensite git.conf
sudo systemctl restart apache2

クライアントのユーザ設定を追加します。

Linux Mint
git config --global init.defaultBranch main
git config --global user.name "$(hostname)"
git config --global user.email user@example.com
git config --global credential.helper store

Windows環境では credential.helper が設定済みです。

Windows PC
git config --global init.defaultBranch main
git config --global user.name "$(hostname)"
git config --global user.email "user@example.com"

4.2 Gitリポジトリの作成

Gitのベアリポジトリを作成します。以下のURLでアクセスできます。

Linux Mint
mkdir -p /mnt/vault/git/my-first-git
cd /mnt/vault/git/my-first-git
git init --bare
Linux Mint URL
http://localhost/git/my-first-git
client-ssh:/mnt/vault/git/my-first-git
ssh://client-ssh/mnt/vault/git/my-first-git
file:///mnt/vault/git/my-first-git

HTTP接続はPOSTサイズが制限を受けます。ご注意ください。

4.3 メディアフォルダのGit管理

メディアフォルダ用のリポジトリを作成して、自動更新を仕込みます。

Linux Mint
mkdir -p /mnt/vault/git/media
cd /mnt/vault/git/media
git init --bare

cd /mnt/media
git init
git remote add origin http://localhost/git/media
git config --local user.name デバイス名
Linux Mint nano .gitignore
/*
!/.gitignore
!/DCIM/
!/Movies/
.tmfs/
.thumbnails/
Linux Mint
git add -A
git commit -m "Initial commit"
git push -u origin main
Termux SSH nano ~/.bashrc
  ssh client-ssh '
    export LANG=en_US.UTF-8
    cd /mnt/media && \
      git remote get-url origin && \
      git pull && \
      git add -A && \
      git commit -m "Auto commit" && \
      git push
    exit 0
  '

4.4 SVNサーバの設定

.conf ファイルを修正して、モジュールを有効化します。

Linux Mint
sudo apt install libapache2-mod-svn
Linux Mint 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>
Linux Mint
sudo a2enmod dav
sudo a2enmod dav_svn
sudo systemctl restart apache2

4.5 SVNリポジトリの作成

SVNのリポジトリを作成します。以下のURLでアクセスできます。

Linux Mint
mkdir -p /mnt/vault/svn
svnadmin create /mnt/vault/svn/my-first-svn
Linux Mint URL
http://localhost/svn/my-first-svn
http://コンピュータ名/svn/my-first-svn
svn+ssh://client-ssh/mnt/vault/svn/my-first-svn
file:///mnt/vault/svn/my-first-svn

HTTP以外の接続では、コミット時の作者名がログインユーザ名で固定となります。

4.6 メディアフォルダのSVN管理

メディアフォルダ用のリポジトリを作成して、自動更新を仕込みます。

Linux Mint
mkdir -p /mnt/vault/svn
svnadmin create /mnt/vault/svn/media

cd /mnt/media
svn checkout http://localhost/svn/media . --force --username デバイス名
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"
Termux SSH nano ~/.bashrc
  ssh client-ssh '
    export LANG=en_US.UTF-8
    cd /mnt/media && \
      svn info --show-item url && \
      svn update && \
      svn add --force DCIM && \
      svn add --force Movies && \
      svn commit -m "Auto commit"
    exit 0
  '

5. おわりに

FUSEマウント越しのSVNリポジトリ操作は、いまいち安定しない感じです。暗号化フォルダでのリポジトリ運用は、現実的にはGit一択かな。Copilotが「HTTP接続では警告が」とか言ってた割に、警告らしい警告もまるで見当たらないのですがそれは。


◀️ 前の記事 次の記事 ▶️
セキュアサーバに、なりたいな「ハイ!rclone crypt」⑥サーバ構成を改変してみる PCツナイデント(パラレル版)はDUALSHOCK 2接続IFとして2026年も健在です。
0
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
0
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?