はじめに
AndroidにはTermuxというLinuxのターミナルエミュレーターがあります。
今回はこの子にPRoot経由でUbuntuをインストールして、そのうえでASP.NET Coreを動かしてみようと思います。
Termux と F-Droid
最新版のTermuxはF-Droidで配信されています。
PlayストアでもTermuxは配布されていますが、2020年ごろに更新が停止され現在は一部機能が動作していません。
F-Droidは非公式ストアになるため、不明なアプリのインストールに許可する必要があるので注意してください。
インストールが完了すると次のようなターミナルが表示されます。
PRoot と proot-distro
次にproot-distro経由でUbuntuをインストールしていきたいのですが、このままだとdotnet build
を実行したときにerror MSB6006: "csc.dll" exited with code 139
というアドレス違反でビルドが異常終了します。
PRootした時の初期アドレスに間違いがあるらしく、redditの下記のスレッドでパッチを提供している方がいるのでこれを利用します。
パッチは次のGoogle Driveからダウンロードできます。個人のGoogle DriveからPRootのパッチ済みパッケージをダウンロードするのは怖いという方は↑のスレッドにパッチの仕方やビルド方法が書いてあるので試してみてください。
ダウンロードしたらTermuxにパッケージを転送し、インストールします。
$ pkg update -y
$ pkg install -y proot
$ dpkg -i downloads/proot_5.1.107-52_aarch64.deb
$ pkg install -y proot-distro
場合によってパッケージが不足している場合は指示に従ってapt --fix-broken install
すると解消しました。
続けてUbuntuをインストールしてログインします。
$ proot-distro install ubuntu
$ proot-distro login ubuntu
残念ながらARM64版のUbuntuにdotnetのaptは提供されていないので手動でインストールしていきます。
# apt update
# apt upgrade -y
# apt install -y libicu70 wget vim
# wget https://download.visualstudio.microsoft.com/download/pr/67ca3f83-3769-4cd8-882a-27ab0c191784/bf631a0229827de92f5c026055218cc0/dotnet-sdk-6.0.403-linux-arm64.tar.gz
# mkdir -p $HOME/dotnet
# tar zxf dotnet-sdk-6.0.403-linux-arm64.tar.gz -C $HOME/dotnet
# export DOTNET_ROOT=$HOME/dotnet
# export PATH=$PATH:$HOME/dotnet
# echo 'export DOTNET_ROOT=$HOME/dotnet' >> ~/.bashrc
# echo 'export PATH=$PATH:$HOME/dotnet' >> ~/.bashrc
インストールが終わったので動作を確かめてみましょう。
# dotnet --version
6.0.403
$ dotnet new mvc -o App
$ cd App
$ dotnet run
Building...
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {4fccf8d4-466d-4c48-aa11-1a9173579896} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:7036
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5124
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /root/App/
無事起動出来たら、ウェブブラウザーでhttps://localhost:7036
に接続すると結果を確認することができます。
インストールが確認出来たら、TARボールは削除しておきましょう。
# rm dotnet-sdk-6.0.100-linux-arm64.tar.gz
CodeServer のインストール
続けてAndroid単体でコードを修正しやすくするためにCodeServerをインストールしていきます。
CodeServerを動作させるにはnodeが必要です。直にインストールしてもよいのですが念のためnvm経由にしておきましょう。
インストールしたら一度Ubuntuからログアウトして、再度ログイン後にnodeをインストールします。
# wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
# exit
$ proot-distro login ubuntu
# nvm install 14
# nvm use 14
CodeServer をインストールして起動して、ウェブブラウザーでhttp://localhost:8080
を表示するとCodeServerのログイン画面が表示されます。
curl -fsSL https://code-server.dev/install.sh | sh
パスワードが不要な場合は、一度コンソールにもどりCtrl+C
でCodeServerを停止した後に~/.config/code-server/config.yaml
を次のように修正します。
bind-addr: 127.0.0.1:8080
-auth: password
+auth: none
password: xxxxx
cert: false
設定変更後CodeServerを起動すればパスワードなしでログインできます。
# code-server
ここまでくれば、コードを修正したりターミナルで処理を実行したりと通常の開発作業ができるようになりますね。
おわりに
やってみると意外と簡単に構築できました。
まぁ、ビルドの時間など気になることはありますけれど、Androidで.NETがビルドできることに比べれば大したことは無いですね!