日報 2026.04.19
エリート飯。
石膏ボードアンカーの3Dプリント用モデルメモ。
1日1捨てちょっとだけやる。
そういやVRダンレボ用に買ったシマノのマリンシューズが微妙にサイズがデカくてスポスポするので一回も使用せず島流し。
Redmi pad 2 4GへのLineageOS導入やる。
そういや自宅環境にもGithub Copilot Proプラン入れた。AIおもしろすぎてゲームやってる暇無い…。
質問のみなのでコーディングAI使うまでも無いのですが、まあ頼って手順出してもらいます。
準備
- 端末内データを全部バックアップします。
- Windows 11にAndroid Platform Toolsを入れます。
- Xiaomiのブートローダーアンロック手順を済ませます。
- 端末用の純正Fastboot ROMをダウンロードして展開します。
- GSIのLineageOSイメージをダウンロードし、
.img.xzなら展開して.imgにします。 - Treble Infoで以下を確認します。
Architecture:arm64Slot:A/B- 動的パーティション対応か
- 純正ROM展開フォルダから少なくとも
vbmeta.imgとvbmeta_system.imgを取り出します。
Windows 11側の準備
- Google公式のPlatform Toolsを入手して、たとえば
C:\platform-toolsに展開します。 - そのフォルダに以下を置くと作業しやすいです。
vbmeta.imgvbmeta_system.imgLineageOS-xx-xxxx-GSI.img
- コマンドプロンプトかPowerShellを、そのフォルダで開きます。
adb devicesとfastboot devicesが使える状態にします。
ブートローダーアンロック
Xiaomi端末では、だいたい以下が必要です。
- 開発者向けオプションを有効化
OEM unlockingとUSB debuggingを有効化- Miアカウントを端末に紐付け
- PCでMi Unlock Toolを使ってアンロック
- 待機期間が要求されたら待つ
ここは機種依存があるので、端末側でアンロック済みになるところまで先に終わらせてください。
GSIの選び方
情報1にある分類は、だいたいこう見て問題ありません。
vanilla: Googleアプリなしgapps: Googleアプリ入りEROFS: 圧縮・読み取り専用寄り。軽いことがあるが、機種相性が出ることがあるEXT4: 互換性重視で扱いやすいことが多い
最初の1回なら、無難なのはarm64-abのEXT4版です。Googleサービスが必要ならgapps、不要ならvanillaです。
導入手順
端末をUSB接続した状態で進めます。
- 端末をfastbootモードに入れます
電源オフ後、音量下 + 電源で入ることが多いです。 - PCで認識確認
|
1 |
fastboot devices<canvas width="0" height="40"></canvas> |
- 検証を無効化しつつ
vbmetaを書き込み
|
1 2 |
fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img fastboot --disable-verity --disable-verification flash vbmeta_system vbmeta_system.img |
fastbootdへ再起動
|
1 |
fastboot reboot fastboot |
systemへGSIを書き込み
|
1 |
fastboot flash system LineageOS-23.0-20260109-GAPPS-EXT4-GSI.img |
- データ消去
初回はほぼ必須です。前のOSデータが残ると起動しないことがあります。
|
1 |
fastboot -w |
- 再起動
|
1 |
fastboot reboot |
初回起動はかなり時間がかかることがあります。5分から10分程度は様子を見ます。
失敗しやすい点
arm64-abではないGSIを焼くvbmetaを書かずに起動して検証エラーになるfastbootモードのままsystemを書こうとして失敗するsystem書き込みはfastbootdで行うのが重要です-wを省略して旧データが残り、ブートループする- 純正ROMの
vbmeta.imgと、今の端末世代が合っていない
うまく起動しない場合
- まずもう一度
fastbootdに入り、systemの再書き込みとfastboot -wをやり直します。 - それでもダメなら、確保しておいた純正Fastboot ROMへ戻します。
- 戻すときはXiaomi用の純正Fastboot復旧手順を使います。GSI導入前にこれを確認しておくのが安全です。
この機種で特に確認したいこと
Redmi Pad 2 4Gという表記に対して、情報1の純正ROMリンクは別機種名に見えます。ここは雑に進めない方がいいです。最低限、以下は一致確認してください。
- 実機の正確な機種名
- codename
- Treble Infoの
arm64-ab判定 - 純正Fastboot ROMがその機種用であること
必要なら次に、Windows 11でそのままコピペできる形の「実行コマンド一覧」と、「純正ROMへ戻す手順」も整理します。
まずは、Android Platform Toolsの導入。
Windowsの場合は SDK Platform-Tools for Windows をダウンロード を選んでplatform-toolsダウンロード、Program Filesとかに配置してPATH環境変数通す。
Xiaomiのブートローダーアンロック。adb環境はAndroid Platform Tools導入時に入ってるのでパス。
上記手順を諸々すすめてたのですが…なんとMiアンロックするにはMiアカウント作ってからデバイスと連携してまさかの「「「30日」」」経過する必要があることが判明。Xiaomi頭おかしいんか?
あとMIUI ROM Flashing Toolはブログで詳細されている方法は結論としていらなかった。
以下でMi Unlock ToolをダウンロードしてPCで使用。
Fastbootモードにして起動してUSB接続すると、driverが認識しないので同梱の”MiUsbDriver.exe”というやつを起動したら勝手にインストールされて認識した。
とにかく30日経過するまで進められなくてクソすぎるが別案が全く無いらしいので観念して待機。別のことして遊ぶしか無い。
foobar2000のプレイリストを他デバイスに同期するプラグイン作ったけど、
wpd:経由で同期する時にスタックして進まない事が多いので一旦観念してホスト環境に同期用のファイル出力してからnextcloudで同期する方式でやってみます。ホスト環境は2重で容量喰いますが、まあストレージ余裕あるんで…。
nextcloudは自宅TrueNASで構築済みなので同期するのは余裕。
問題は同期先のAndroid端末にnextcloudアプリ入れて同期するだけなんだが…Android用nextcloudアプリが、まあ~クソで同期先ローカルパスも選べないし同期スケジュールも設定できないしwifi時のみ同期もできないし極めつけにフォルダ単位の同期することすらできない。なにこれ?
同様の悩みがredditにも上がってるっぽいけど、「何が不満なの?」とか言ってるやつどういう目的でnextcloud使ってんのか完全に不明。コレ何もできんやろ。
ということで紹介されてたFolderSyncとかいうアプリ使ってみたけどコレ完璧っぽい。
まさにやりたい事が出来たのですが、まさかの問題nextcloudの接続先設定がhttpsしか対応してない臭い。これはhttps対応していないワシのnextcloud環境が悪い。やります。
現在の状況と環境を教えて対応手順全部Codexに教えてもらいます。
前提
- Nextcloud は現在
http://192.168.100.20:30027でアクセス可能 - 外部からは現状
http://brain-thunder.jp:30027でアクセスできる - 今後は
https://cloud.brain-thunder.jpでアクセスできるようにする - TrueNAS 管理画面は外部公開しない
- TrueNAS 管理画面は RTX810 の VPN 経由だけでアクセスする
構成方針
cloud.brain-thunder.jpを外部公開用の Nextcloud URL にする- Let’s Encrypt の証明書で HTTPS 化する
- TrueNAS SCALE 上にリバースプロキシを入れる
- RTX810 で外部
80/443を TrueNAS に転送する - Nextcloud 本体は内部 HTTP のまま動かす
- TrueNAS 管理画面は
443以外のポートに変更し、外部には公開しない
最終的なアクセス先
- Nextcloud:
https://cloud.brain-thunder.jp - Nextcloud 内部転送先:
http://192.168.100.20:30027 - TrueNAS 管理画面: VPN 接続後に LAN 内からアクセス
手順 1: DNS を作成する
DNS 管理画面で次の A レコードを作成する。
- ホスト名:
cloud - FQDN:
cloud.brain-thunder.jp - 値: 自宅回線のグローバル IP アドレス
補足:
- まだ
brain-thunder.jpを使っていてもよいが、Nextcloud 用はcloud.brain-thunder.jpに統一する - Cloudflare を使っている場合は、最初は
DNS onlyにしておく
手順 2: TrueNAS 管理画面の HTTPS ポートを変更する
TrueNAS 管理画面が 443 を使っていると、同じ TrueNAS 上でリバースプロキシが 443 を使えない。
そのため、TrueNAS 管理画面のポートを変更する。
例:
- 変更前:
https://192.168.100.20 - 変更後:
https://192.168.100.20:444
実施内容:
- TrueNAS 管理画面に LAN 内からログインする
- 管理 UI の HTTPS ポートを
444に変更する - 保存する
- 以後は
https://192.168.100.20:444で管理画面に入る
注意:
- 外部には
444を絶対に公開しない - この時点で
443はリバースプロキシ用に空ける
手順 3: Nextcloud の内部アクセスを確認する
Nextcloud の内部アクセス先として、次が使えることを確認する。
http://192.168.100.20:30027
ブラウザで LAN 内から開き、Nextcloud のログイン画面が表示されることを確認する。
手順 4: TrueNAS SCALE に Nginx Proxy Manager を入れる
Apps から Nginx Proxy Manager をインストールする。
推奨ポート:
- 管理画面:
30081 - HTTP:
80 - HTTPS:
443
インストール後、LAN 内から次で管理画面を開けるようにする。
http://192.168.100.20:30081
手順 5: RTX810 でポート転送する
RTX810 で、外部から来た 80/443 を TrueNAS に転送する。
転送ルール:
- 外部 TCP
80→192.168.100.20:80 - 外部 TCP
443→192.168.100.20:443
目的:
80は Let’s Encrypt の証明書取得用443は実際の HTTPS アクセス用
注意:
30027は今後外部公開しなくてよい444は転送しない- TrueNAS 管理画面は公開しない
手順 6: Nginx Proxy Manager にログインする
LAN 内から次へアクセスする。
http://192.168.100.20:30081
初回ログイン後、管理者アカウントのパスワードを変更する。
手順 7: Proxy Host を作成する
Nginx Proxy Manager で Proxy Hosts を追加する。
設定内容:
- Domain Names:
cloud.brain-thunder.jp - Scheme:
http - Forward Hostname / IP:
192.168.100.20 - Forward Port:
30027 - Cache Assets:
OFF - Block Common Exploits:
ON - Websockets Support:
ON
この設定の意味:
- 外から来た
https://cloud.brain-thunder.jpへのアクセスを受ける - 内部では
http://192.168.100.20:30027の Nextcloud へ流す
手順 8: Let’s Encrypt の証明書を取得する
作成した Proxy Host の SSL タブで次を設定する。
- SSL Certificate:
Request a new SSL Certificate - Email Address: 自分のメールアドレス
- Use a DNS Challenge:
OFF - Force SSL:
ON - HTTP/2 Support:
ON - HSTS Enabled: 任意
- Agree to the Let’s Encrypt Terms of Service:
ON
そのまま保存する。
成功すると:
cloud.brain-thunder.jp用の証明書が取得される- ブラウザ警告なしで HTTPS が使えるようになる
手順 9: Nextcloud の config.php を修正する
Nextcloud の config.php に以下を設定する。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
'trusted_domains' => array ( 0 => 'cloud.brain-thunder.jp', ), 'trusted_proxies' => array ( 0 => '192.168.100.20', ), 'overwritehost' => 'cloud.brain-thunder.jp', 'overwriteprotocol' => 'https', 'overwrite.cli.url' => 'https://cloud.brain-thunder.jp', |
補足:
trusted_domainsはcloud.brain-thunder.jpを許可する設定trusted_proxiesは Nginx Proxy Manager を信頼する設定overwritehostとoverwriteprotocolは URL 生成を HTTPS に固定する設定
注意:
- 既存の
config.phpにすでに値がある場合は、置き換えではなく必要に応じて追記する trusted_proxiesには、Nextcloud から見たリバースプロキシの IP を入れる
手順 10: Nextcloud を再起動する
TrueNAS SCALE の Apps 画面から Nextcloud を再起動する。
目的:
config.phpの設定を確実に反映するため
手順 11: 動作確認を行う
次の順番で確認する。
- LAN 内から
http://192.168.100.20:30027が開く - LAN 内から
http://192.168.100.20:30081が開く - 外部から
http://cloud.brain-thunder.jpにアクセスすると HTTPS へ転送される - 外部から
https://cloud.brain-thunder.jpへアクセスできる - 証明書警告が出ない
- Nextcloud ログイン後も URL が
https://cloud.brain-thunder.jpのままになっている
TrueNAS 管理画面はどう使うか
TrueNAS 管理画面は外部公開しない。
外出先から使いたい場合は、RTX810 の VPN で自宅 LAN に接続してから開く。
VPN 接続後のアクセス例:
https://192.168.100.20:444
公開しないポート
外部に公開しないもの:
30027444- TrueNAS 管理画面そのもの
外部に公開するもの:
80443
よくある失敗
1. Let’s Encrypt の証明書取得に失敗する
原因候補:
cloud.brain-thunder.jpの DNS が正しいグローバル IP を向いていない- RTX810 で
80が正しく転送されていない - Nginx Proxy Manager が
80で待ち受けできていない
2. Nextcloud にアクセスすると「信頼されていないドメイン」と出る
原因候補:
config.phpのtrusted_domainsにcloud.brain-thunder.jpが入っていない
3. ログイン後に HTTP に戻る
原因候補:
overwriteprotocolがhttpsになっていないoverwritehostが未設定
4. Nginx Proxy Manager が 443 で動かない
原因候補:
- TrueNAS 管理画面がまだ
443を使っている
5. 外部から全くつながらない
原因候補:
- 自宅回線が CGNAT
- 二重ルーター
- RTX810 の NAT 設定不足
- ISP 側で
80/443が制限されている
この構成のメリット
- Nextcloud だけを安全に公開できる
- URL が分かりやすい
- ブラウザ警告なしで HTTPS 化できる
- TrueNAS 管理画面を直接インターネットへ出さずに済む
- 将来的に
notes.brain-thunder.jpなど別サービスも同じ仕組みで追加できる
まとめ
この構成で使う URL は次の通り。
- 公開用 Nextcloud:
https://cloud.brain-thunder.jp - Nextcloud 内部転送先:
http://192.168.100.20:30027 - TrueNAS 管理画面:
https://192.168.100.20:444を VPN 接続後に利用
公開するのは 80/443 のみ。
TrueNAS 管理画面は公開しない。
Nextcloud だけを Let’s Encrypt で HTTPS 化する。
長いけどとりあえずhttpsで公開できるまでやりました。詰まった部分メモ。
Nginx Proxy Manager が Deployning で止まる。ログの状態は以下。
ここで止まるなら辛抱強く待つ。それだけ。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2026-04-19 11:27:14.663267+00:002026-04-19T11:27:14.663267594Z 2026-04-19 11:27:14.663329+00:00------------------------------------- 2026-04-19 11:27:14.663344+00:00_ _ ___ __ __ _ 2026-04-19 11:27:14.663355+00:00| \ || . \| \ \ ___ | | _ _ ___ 2026-04-19 11:27:14.663366+00:00| || _/| || . \| || | |[_-[ 2026-04-19 11:27:14.663376+00:00|_\_||_| |_|_|_|| _/|_| \__|/__/ 2026-04-19 11:27:14.663396+00:00|_| 2026-04-19 11:27:14.663407+00:00------------------------------------- 2026-04-19 11:27:14.663418+00:00Version: 2026-04-12-r1-1d41d9b-2.14.0 2026-04-19 11:27:14.663429+00:00Date: Sun Apr 19 20:27:14 JST 2026 2026-04-19 11:27:14.663439+00:00------------------------------------- 2026-04-19 11:27:14.663456+00:002026-04-19T11:27:14.663456286Z 2026-04-19 11:27:15.674430+00:00no DEFAULT_CERT_ID set, using dummycerts. |
なんかのパッケージインストールしてるところで停止していた。
以下のHost Networkをチェックしたら解決。
80ポートを使う権限がない?以下エラーが無限ループ。
|
1 |
2026-04-19 11:24:09.945494+00:00stderr: '2026/04/19 20:24:09 [emerg] 6454#6454: bind() to 0.0.0.0:80 failed (13: Permission denied)\n' + |
これに関してはNPM(Nginx Proxy Manager)の使用ポートを高番ポートに変更して対処した。
管理画面 81 -> 30081
HTTP 80 -> 30080
HTTPS 443 -> 30443
設定変更してNPM再起動したら無事にDeployingから進行して起動した。
https://192.168.100.20:30081 でアクセスすると管理画面が出るところまでかくにん!
最終的に https://cloud.brain-thunder.jp でアクセスできる必要があるのでポートフォワーディングする必要がある。これはルーター(RTX810)で設定します。
1. DNS に cloud.brain-thunder.jp を作る
DNS 管理画面で A レコードを追加します。
- ホスト名:
cloud - FQDN:
cloud.brain-thunder.jp - 値: 自宅回線のグローバル IP
補足:
brain-thunder.jp本体ではなく、Nextcloud 用にcloud.brain-thunder.jpを使います- Cloudflare を使っているなら最初は
DNS onlyにしてください
2. RTX810 で外部 80 / 443 を NPM の高番ポートへ転送する
今は NPM が内部で高番ポート待受なので、RTX810 で外部標準ポートをそこへ流します。
設定方針はこれです。
- 外部 TCP
80→192.168.100.20:30080 - 外部 TCP
443→192.168.100.20:30443
重要なのはここです。
- Let’s Encrypt の HTTP-01 認証は「外部から見て 80 番で届く」ことが必要
- 内部で
30080に変換されていても問題ありません - 利用者は最終的に
https://cloud.brain-thunder.jpでアクセスします 30081は管理画面用なので外部公開しません
3. NPM 管理画面に LAN 内から入る
LAN 内から次へアクセスします。
http://192.168.100.20:30081
ここで NPM の管理画面に入れることを確認してください。
4.Proxy Host を作成する
NPM で Proxy Hosts を追加します。
転送先は今の Nextcloud です。
設定は次のとおりです。
Domain Names: cloud.brain-thunder.jp
Scheme: http
Forward Hostname / IP: 192.168.100.20
Forward Port: 30027
Block Common Exploits: ON
Websockets Support: ON
意味はこうです。
外から来た cloud.brain-thunder.jp へのアクセスを NPM が受ける
NPM が内部の http://192.168.100.20:30027 へ流す
5. Let’s Encrypt 証明書を取得する
作成した Proxy Host の SSL タブで次を設定します。
Request a new SSL Certificate
メールアドレス入力
Force SSL を有効
HTTP/2 Support を有効
Agree to the Let’s Encrypt Terms of Service を有効
そのまま保存します。
ここで成功する条件は次です。
cloud.brain-thunder.jp が正しいグローバル IP を向いている
RTX810 で外部 80 が 192.168.100.20:30080 へ転送されている
NPM が 30080 で正常に動いている
もしここで失敗したら、最優先で疑うのは 80番転送 と DNS です。
6. Nextcloud の config.php を直す
Nextcloud はリバースプロキシ配下になるので、URL 生成と許可ドメイン設定が必要です。
最低限、次を入れます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php 'trusted_domains' => array ( 0 => 'cloud.brain-thunder.jp', ), 'trusted_proxies' => array ( 0 => '192.168.100.20', ), 'overwritehost' => 'cloud.brain-thunder.jp', 'overwriteprotocol' => 'https', 'overwrite.cli.url' => 'https://cloud.brain-thunder.jp', |
補足:
trusted_domainsは Nextcloud が受け付けるホスト名trusted_proxiesは NPM を信頼する設定overwriteprotocolがないと HTTPS 運用でも HTTP に戻ることがあります
もし既存の設定があるなら、消すのではなく必要な値を追加してください。
7. Nextcloud を再起動する
config.php 反映のため、TrueNAS SCALE の Apps 画面から Nextcloud を再起動します。
8. 動作確認する
確認順はこの順が安全です。
- LAN 内で
http://192.168.100.20:30081が開く - LAN 内で
http://192.168.100.20:30027が開く - 外部から
http://cloud.brain-thunder.jpへアクセスすると HTTPS へ転送される - 外部から
https://cloud.brain-thunder.jpへアクセスできる - 証明書警告が出ない
- Nextcloud ログイン後も URL が
https://cloud.brain-thunder.jpのまま
この時点でやらないこと
今は次は不要です。
30027の外部公開継続30081の外部公開- TrueNAS 管理画面の外部公開
外に出すのは最終的に 80/443 だけです。30027 は最終的に閉じてよいです。
次に詰まりやすい点
証明書取得に失敗する
原因の大半は次です。
- DNS がまだ反映されていない
- RTX810 の
80 -> 30080転送が未設定 - Cloudflare のプロキシが有効
Nextcloud で「信頼されていないドメイン」
trusted_domains に cloud.brain-thunder.jp が入っていません。
ログイン後に HTTP に戻る
overwriteprotocol または overwritehost が不足しています。
今のあなたが次にやるべき順番
- DNS に
cloud.brain-thunder.jpを作る - RTX810 で
80 -> 30080と443 -> 30443を設定する - NPM で Proxy Host を作る
- NPM で Let’s Encrypt 証明書を取得する
- Nextcloud の
config.phpを更新する - 外部から
https://cloud.brain-thunder.jpを確認する
必要なら次に、RTX810 側の設定だけを、あなたの今の構成向けにもう少し具体的に書きます。
ポートフォワーディング(静的IPマスカレード)設定の時にRTX810だとどうやって別ポートへの転送書くんや?と思ったら 以下のように “入力ポート=転送ポート” の形式で書けば良いっぽい。
諸々設定して
内部から確認
http://192.168.100.20:30081 で NPM 管理画面が開く
https://192.168.100.20:30443 にアクセスして NPM が応答する
外部から確認
https://cloud.brain-thunder.jp にアクセスして NPM が応答する
のを確認!よかった。
次は外部からの接続画面でNPMで https://cloud.brain-thunder.jp にアクセスした時にnextcloudの画面が出るようにする。手順的には先ほどの 3.以降の対応を行う。
そしてやっとこ外部から https://cloud.brain-thunder.jp にアクセスしたらnextcloudの画面が出てちゃんと使えるようになった事を確認!よかった。
ここで問題があり、内部LANから https://cloud.brain-thunder.jp にアクセスした時はポートフォワードされないのでnextcloudの画面が出ない。
これは cloud.brain-thunder.jp に対してはRTX810に内部向けDNSを設定してるから 443→30443 のポート変換が出来てないからですね。困った。
対処として cloud.brain-thunder.jp の内部向けDNS設定を外すとグローバルIP解決になるので外側からのアクセスになって正しくポート変換が行われてnextcloudが表示されるようになった。
しばらくこの運用で行こうと思うけど…これって一度外部経由してるからアクセス速度低下してない?
サーベイするとヘアピンNATという機能があって、グローバルIP宛先でも暗黙的な経路でパケット転送をLAN内で完結するためオーバーヘッドが極小で通信できるっぽい。
でも残念ながらこのヘアピンNAT、RTX810は未対応だった。対応機器中古で探しますか…。
それかNPMをTrueNASでやるんじゃなくてちゃんと専用機用意してやるとか?
というかNPMをそもそも80/443運用で起動できるように設定できるかチャレンジするのがええか…。インフラ経験が年齢に伴っておらず学び続けなければならない。
エリート飯。チカメキントキの刺身、間違いなく連子鯛よりも旨味がある。
■今日の #明るいイケメン化計画 #揺るぎなき信念のRPG
疲労コンパイルのためサボりです。
■ 今日の1日1捨て
■ 今日の楽器
ちょっとだけVRドラムマニア
おわい