/
Copyright © 2023
2023-05-18T06:35:23Z
/entry/2023/05/18/tailscaleadguard
Proxmox上のLXCコンテナにTailscaleとAdGuard Homeを導入して屋外でも広告無し環境を構築する話
2023-05-18T23:00:00Z
<p>これまでRaspberryPi上にISC DHCPをインストールして自宅内DHCPサーバーを運用してたんですが、USBメモリーブートのRaspberryPiだと長期間運用が厳しく、かといってこのためだけにUSB接続のSSDを導入するのももったいない。<br>
今回仮想化プラットフォームのProxmoxを導入したので、この機会に環境を一新。</p>
<p>今回はただDHCPサーバーを構築するだけだとつまらない(?)ので、</p>
<ul>
<li>DHCP機能</li>
<li>DNS機能</li>
<li>広告ブロック機能</li>
<li>VPN機能</li>
</ul>
<p>を持ったサーバーを立ち上げることに。</p>
<p>というわけで、AdGuard HomeをインストールしてDHCP、DNS、広告ブロックを行いつつ、Tailscaleで自宅の外から広告カットできるVPN接続を行える環境構築。</p>
<h3 id="lxc">LXCコンテナの作成</h3>
<p>コンテナの作成方法自体は別途記事を書いているのでそちらを参照。</p>
<p>LXCの設定</p>
<h3 id="tailscale">Tailscaleのインストール</h3>
<p>コンテナ側の定義ファイルをまず変更。<br>
Proxmox側のシェルに入ってから、下記のコマンドを実行。<br>
CTIDは今回のLXCコンテナのIDに書き換えること。</p>
<pre><code class="language-bash">CTID=[コンテナのID]
CTID_CONFIG_PATH=/etc/pve/lxc/${CTID}.conf
cat <<EOF >>$CTID_CONFIG_PATH
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
EOF
</code></pre>
<p>実行したら今度はコンテナ側のコンソールで下記を実行し、Tailscaleをインストール。</p>
<pre><code class="language-bash">curl -fsSL https://tailscale.com/install.sh | sh
</code></pre>
<p>Tailscaleをインストールし終わったら一度コンテナを再起動。</p>
<p>exit nodeを使う場合は下記コマンドを実行してIPフォワーディングを有効化する必要あり。</p>
<pre><code class="language-bash">cat <<EOF >>/etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
EOF
sudo sysctl -p /etc/sysctl.conf
</code></pre>
<p>コンテナのコンソールで下記のコマンドを実行。</p>
<pre><code class="language-bash">tailscale up --advertise-routes=192.168.0.0/24 --advertise-exit-node --accept-routes
</code></pre>
<p>Tailscale利用中にローカルネットワーク内のTailscaleをインストールしていないマシンにアクセスしたい場合は <code>--advertise-routes</code> を設定。IPアドレスは各自の環境に合わせること。</p>
<p>exit nodeが不要なら <code>--advertise-exit-node --accept-routes</code> のオプションは不要。<br>
屋外でこのコンテナからインターネットに出るための設定なので、この設定をしておいたほうが屋外で安全にインターネットを使えて便利。</p>
<p>単純にTailscaleを使いたいだけなら <code>tailscale up</code> だけでOK。</p>
<p>上記コマンドを実行するとURLが表示されるのでブラウザで開いて認証を行う。この辺りは以前まとめたブログ記事を参照。</p>
<p><img src="/installtailscale.png" alt=""></p>
<!--?# OEmbed "https://blog.hitsujin.jp/entry/2022/01/18/120000" /?-->
<p>Tailscaleが立ち上がったらキーが失効しないよう<a href="https://login.tailscale.com/admin/machines">Machines</a>を開き、該当のマシンのメニューから <code>Disable key expiry</code> をしておくこと。</p>
<p><img src="/tailscalemachinesmenu.png" alt=""></p>
<p>また、Exit Node(<code>--advertise-exit-node</code>)、SubnetRoute(<code>--advertise-routes</code>)を利用する場合は <code>Edit route settings</code>からそれぞれのオプションを有効にしておくこと。</p>
<p><img src="/editroutesettings.png" alt=""></p>
<h3 id="adguard-home">AdGuard Homeインストール</h3>
<p>先にUbuntuの <code>systemd-resolved</code> が提供する <code>Local DNS Stub Listener </code> を無効化しておく。<br>
これをやっておかないと 53/udpを <code>systemd-resolved</code>がlistenしたままになって困るので。</p>
<p><code>/etc/systemd/resolved.conf</code> を開いて下記のように編集。</p>
<pre><code class="language-bash">[Resolve]
DNSStubListener=no
</code></pre>
<p>設定を変えたら次は <code>/etc/resolv.conf</code> を削除後、 <code>/run/systemd/resolve/resolv.conf</code> にシンボリックリンク設定。</p>
<pre><code class="language-bash">sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
</code></pre>
<p>これが終わったら<code>systemd-resolved</code>を再起動し上記設定を反映。</p>
<pre><code class="language-bash">sudo systemctl restart systemd-resolved
</code></pre>
<p>前設定が終わったので公式サイトの記載通り</p>
<pre><code class="language-bash">curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
</code></pre>
<p>を実行。<br>
curlがインストールされていない場合は <code>apt install curl</code>を実行してから。</p>
<p><img src="/installadguardhome.png" alt=""></p>
<p>展開が完了したら画面に表示されているURLをブラウザで開き、インストール作業を続行。デフォルトで日本語対応しているので楽。</p>
<p>設定が必要な個所はIDパスワードくらい。
パスワードの変更がブラウザ設定画面で提供されてないので、パスワードを忘れない範囲で複雑なものにしておくべし。</p>
<h3 id="adguard-home-1">AdGuard Home設定</h3>
<h4 id="dhcp">DHCP機能有効化</h4>
<p><img src="/adguarddhcp.png" alt=""></p>
<p>上部メニューからDHCP設定を開く。</p>
<p>DHCPインターフェースの選択で対象となるインターフェースを選択し、DHCP IPv4設定、IPv設定を行い、DHCPサーバーを有効にするのボタンを押下して有効化。</p>
<p>なお、有効化したらすぐにルーター側のDHCP機能も無効化すること。<br>
同一ネットワークに複数のDHCPサーバーが同居するのはNG。</p>
<h4 id="dns">DNS設定</h4>
<p>標準では上流DNSサーバーとして <code>Quad9</code> のDNSサーバーが指定されている状態。</p>
<p><img src="/adguarddns.png" alt=""></p>
<p>ここはお好きに設定すればOK。<br>
DNS over HTTPSが利用できるので、例えばGoogle Public DNSを利用したい場合は <code>https://dns.google/dns-query</code> を指定。</p>
<h4 id="dns-1">DNSブロックリスト</h4>
<p><img src="/adguardblocklist.png" alt=""></p>
<p>広告ブロックの胆。<br>
AdGuard標準のブロックリストだけだと日本国内の広告に対処できなかったりするので、280Blockerなどが提供してるフィルターをセット。</p>
<p><code>ブロックリストに追加する</code>ボタンを押下し、 <code>カスタムリストを追加する</code> からフィルターURLを保存すればOK。</p>
<p>なんJ AdGuard部 Wikiなどを参考にリスト追加。<br>
悪質な広告だけをブロックするフィルターがあるといいのだけど。</p>
<!--?# OEmbed "https://wikiwiki.jp/nanj-adguard/%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%83%AA%E3%82%B9%E3%83%88" /?-->
<h3 id="windowsdns">ルーター・WindowsのDNS設定</h3>
<p>ルーター側でプライマリDNS設定が存在する場合はそこを設定してしまえばネットワークにつながっているすべての機器でAdGuard Homeによる広告ブロックの恩恵が受けられる。</p>
<p>ルーター側が対応していない場合でもDHCPサーバーがDNSサーバーの情報を広告してくれるので、スマホではAdGuard HomeのDHCP機能を有効化している場合何もしなくてもOK。</p>
<p>Windowsの場合でも広告されるものの、私の環境だとIPv6だけルーター側のDNSサーバーが優先されてしまったため、手動で設定。</p>
<p><code>ネットワークとインターネット</code>から <code>DNSサーバーの割り当て</code>の編集ボタンを押下して設定を変更。</p>
<p>IPv4にはDHCPサーバーのIPアドレスをそのまま、IPv6側はDHCPサーバーにIPv6のIPアドレスがあるならそれを、ない場合はIPv4射影アドレスを設定すればOK。</p>
<p>例えばDHCPサーバーのIPv4アドレスが <code>192.168.0.100</code>であれば <code>::ffff:192.168.0.100</code>と設定。</p>
<p><img src="/networksettings.png" alt=""></p>
<h3 id="tailscaledns">Tailscale側のDNS設定</h3>
<p>屋外で広告ブロックしたい場合のキモの設定。<br>
DHCPサーバーにインストールしたTailscaleのIPアドレスをメモっておき、<a href="https://login.tailscale.com/admin/dns">TailscaleのDNS設定画面</a>を開く。</p>
<p><code>Add nameserver</code> の<code>Custom</code> を選択。<br>
<img src="/tailscaledns-addname1.png" alt=""></p>
<p>Nameserverの項目に先ほどメモっておいたIPアドレスを入力してSave。
<img src="/tailscaledns-addname2.png" alt=""></p>
<p><code>Override local DNS</code> の設定も有効化しておくこと。</p>
<p>これで屋外でも広告ブロックされる。</p>
<h3 id="section">参考</h3>
<!--?# OEmbed "https://eginoy.com/tailscale%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E5%A4%96%E5%87%BA%E5%85%88%E3%81%A7%E3%82%82%E5%BA%83%E5%91%8A%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF/" /?-->
<!--?# OEmbed "https://note.com/klayer123/n/n02c3b6f8cde3" /?-->
<!--?# OEmbed "https://www.330k.info/essay/ubuntu-softether-adguardhome-dns-setting/" /?-->
<!--?# OEmbed "https://qiita.com/shora_kujira16/items/31d09b373809a5a44ae5" /?-->
<!--?# OEmbed "https://eginoy.com/tailscale%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E5%A4%96%E5%87%BA%E5%85%88%E3%81%A7%E3%82%82%E5%BA%83%E5%91%8A%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF/" /?-->
<p>これまでRaspberryPi上にISC DHCPをインストールして自宅内DHCPサーバーを運用してたんですが、USBメモリーブートのRaspberryPiだと長期間運用が厳しく、かといってこのためだけにUSB接続のSSDを導入するのももったいない。<br>
今回仮想化プラットフォームのProxmoxを導入したので、この機会に環境を一新。</p>
/entry/2023/05/17/proxmoxrdm
ProxmoxでVMからストレージを直接読み書き(パススルー)したい
2023-05-17T00:20:00Z
<p>今回構築したProxmoxマシンは録画マシンも兼ねているため、大容量HDDを直接VMから読み書きできるようにしたい。</p>
<p>VMware ESXiの頃はRDMの設定を行って直接読み書きできるようにでき、10年近く前にブログ記事にまとめていた。</p>
<!--?# OEmbed "https://blog.hitsujin.jp/entry/2014/06/08/161357" /?-->
<p>Proxmoxでも同じように設定できたので覚書き。</p>
<h3 id="section">パススルー接続するストレージのメモ</h3>
<p><img src="/storagelist.png" alt=""></p>
<p><code>(ホスト名)→ディスク</code> からマシンに接続されているストレージの一覧が表示されるので、対象となるストレージのモデル名とシリアル番号をメモ。</p>
<p>ただ、このリストからメモをするよりはProxmoxのシェル側で下記のコマンドを実行して取得したほうが何かと楽。</p>
<pre><code class="language-bash">ls -l /dev/disk/by-id/
</code></pre>
<p><img src="/storagelistcli.png" alt=""></p>
<h3 id="section-1">コマンドでセット</h3>
<p>パススルーで見せたいVMのIDを確認したうえで下記のコマンドを実行。</p>
<pre><code class="language-bash">qm set [VMのID] -[virtio,sata,scsi][数値] /dev/disk/by-id/[ストレージの情報]
</code></pre>
<p><code>-[virtio,sata,scsi][数値]</code> の数値の部分は0からSATAなら5、virtioは15、SCSIなら30 までの範囲で自由に設定可能。<br>
同じ番号で別のストレージを設定すると上書きされてしまうそうなので注意。<br>
参考にさせてもらったページではvirtioで行っていたけれど、当方環境では認識されず。<br>
多分ドライバの設定とか別の要因。環境再構築する際にまた確認したい。</p>
<p>ストレージの情報の部分は下記の構成。</p>
<pre><code>ata-[モデル名]_[シリアル番号]
</code></pre>
<p>CLIで取得した場合はこの構成で取れるので、CLI側から確認するのがおすすめ。</p>
<p>当方の環境でのコマンド例。</p>
<pre><code class="language-bash">qm set 101 -sata0 /dev/disk/by-id/ata-ST8000DM004-2CX188_ZR12CVD6
qm set 101 -sata1 /dev/disk/by-id/ata-WDC_WD40EZAZ-00SF3B0_WD-WX62D32A0AJN
qm set 101 -sata2 /dev/disk/by-id/ata-WDC_WD60EZAZ-00ZGHB0_WD-WX32D90PC38X
qm set 101 -sata3 /dev/disk/by-id/ata-WDC_WD80EAZZ-00BKLB0_WD-CA2EKA7K
qm set 101 -sata4 /dev/disk/by-id/ata-TOSHIBA_DT02ABA400_X991S1LFS75H
qm set 101 -sata5 /dev/disk/by-id/ata-WDC_WD40EZRZ-00GXCB0_WD-WCC7K6RC5S88
</code></pre>
<p><img src="/attachstorage.png" alt="">
実行するとこんな感じでVMのハードウェア一覧に表示される。</p>
<h3 id="section-2">参考</h3>
<!--?# OEmbed "https://nofu.jp/wiki/virtualization/proxmox_ve_6_2_rdm" /?-->
<p>今回構築したProxmoxマシンは録画マシンも兼ねているため、大容量HDDを直接VMから読み書きできるようにしたい。</p>
/entry/2023/05/16/proxmox-createlxccontainer
Proxmoxで仮想環境をお手軽構築する話 LXC作成
2023-05-16T00:30:00Z
<p>ProxmoxではKVMを利用した仮想マシン作成だけでなく、LXCコンテナの作成も可能。</p>
<p>LXCはまるで仮想マシンのようにそれぞれのコンテナ単位で独立したOSをインストールして構築するわけではなく、一つのLinuxカーネルを利用して複数の独立した環境を作ることができるため、リソースの消費が少ないのが特徴。<br>
またDockerとは違い1コンテナ当たり1プロセスというわけではないので、複数のプロセスを同時に動かせることがメリット。</p>
<p>Dockerはアプリケーションの隔離環境で、LXCは軽量な仮想マシン環境というイメージ。</p>
<h3 id="section">テンプレートのダウンロード</h3>
<p>LXCは一つのテンプレートから作成するので、まずはテンプレートをProxmoxにダウンロードするところから。</p>
<p>まずはProxmoxはテンプレートをGUIからダウンロード可能。<br>
ただしそのテンプレート一覧が古い可能性があるので更新を最初に実施。</p>
<p>Proxmoxのシェルで下記のコマンドを実施。</p>
<pre><code class="language-bash">pveam update
</code></pre>
<p><img src="/templatedownload1.png" alt="">
<code>local(host名)→CTテンプレート</code> から <code>テンプレート</code> ボタンを押下。</p>
<p><img src="/templatedownload2.png" alt=""></p>
<p>テンプレートのリストが表示されるので、利用したいテンプレートを選択。<br>
今回はUbuntu 22.10のテンプレートを選択。</p>
<p><img src="/templatedownload3.png" alt=""></p>
<p><code>ダウンロード</code>ボタンを押下するとProxmoxが自動的にテンプレートファイルをダウンロード、 <code>/var/lib/vz/template/cache</code> に格納してくれる。</p>
<p>もちろんリストにないテンプレートも自分で用意すれば利用可能。</p>
<p>下記の記事が詳しい。</p>
<!--?# OEmbed "https://qiita.com/waigoma/items/762aa95e3d564d8955d4" /?-->
<h3 id="lxc">LXCコンテナ作成</h3>
<p><img src="/createlxc01.png" alt=""></p>
<p>画面右上の<code>CTを作成</code> を押下。</p>
<p><img src="/createlxc02.png" alt=""></p>
<p>CT IDは自動的に発行される番号でOK。
ホスト名は自分がわかりやすい名前を。<br>
基本的には非特権コンテナとしつつ、どうしても権限的に必要な場合だけチェックを外す。<br>
ネストはチェックを入れておくとDockerが起動できる。</p>
<p>パスワードはログインする際のパスワードになるので必須入力。<br>
SSH公開鍵を設定しておけばProxmoxコンソールを利用せずとも好きなターミナルソフトでSSHログインできる。</p>
<p><img src="/createlxc03.png" alt=""></p>
<p>テンプレートから先ほどダウンロードしたテンプレートを選択。</p>
<p><img src="/createlxc04.png" alt=""></p>
<p>LXCを配置したいストレージの選択とサイズを指定。</p>
<p><img src="/createlxc05.png" alt="">
割り当てるCPUのコア数を指定。</p>
<p><img src="/createlxc06.png" alt=""></p>
<p>割り当てるメモリー量を指定。</p>
<p><img src="/createlxc07.png" alt=""></p>
<p>ネットワーク設定。<br>
IPアドレスをDHCPで割り当てる場合は <code>DHCP</code>に変更。<br>
指定したい場合はIPv4欄には <code>192.168.0.100/24</code> のようにCIDRまで指定。</p>
<p><img src="/createlxc08.png" alt="">
DNSの指定。<br>
基本的にはホスト設定を使用する形で何も入れなくてもいいはず。</p>
<p><img src="/createlxc09.png" alt="">
設定内容の確認。<br>
問題なければ <code>完了</code> ボタンを押下。</p>
<p><img src="/createlxc10.png" alt=""></p>
<p>テンプレートが展開され、コンテナが作成される。</p>
<p><img src="/createlxc11.png" alt=""></p>
<p>コンテナが作成され、メニューに表示された。</p>
<p><img src="/createlxc12.png" alt=""></p>
<p>作成したコンテナを選択した状態で右上の<code>開始</code>ボタン押下でコンテナ起動。</p>
<p>あとは普通に利用するだけ。 ログインユーザーはroot。<br>
必要に応じてユーザーを作成するなり肉なり焼くなり。</p>
<h3 id="section-1">参考</h3>
<!--?# OEmbed "https://qiita.com/onokatio/items/969e3b470359e4c47a04" /?-->
<!--?# OEmbed "https://qiita.com/waigoma/items/762aa95e3d564d8955d4" /?-->
<p>ProxmoxではKVMを利用した仮想マシン作成だけでなく、LXCコンテナの作成も可能。</p>
/entry/2023/05/15/proxmox-createvmwin
Proxmoxで仮想環境をお手軽構築する話 Windows 11VM作成
2023-05-15T00:15:00Z
<p>前回までにProxmoxのインストールと初期設定が完了したので、今度は仮想マシンを作成するところから。</p>
<p>今回はWindows 11の仮想マシン作成。</p>
<h3 id="windows-11iso">Windows 11のISOイメージダウンロード</h3>
<!--?# OEmbed "https://www.microsoft.com/ja-jp/software-download/windows11" /?-->
<p>Microsoftのサイトからダウンロードできる。</p>
<p><img src="/downloadiso.png" alt=""></p>
<h3 id="iso">ドライバーのISOイメージダウンロード</h3>
<p>VMWare ESXiではインストール中特に何もせずともインストールできるものの、Proxmoxではネットワークドライバなどを別途入れる必要があるため、<a href="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso">VirtIOのドライバISOイメージ</a>をダウンロードしておく。</p>
<h3 id="iso-1">ISOイメージのアップロード</h3>
<p><img src="/imageupload1.png" alt=""></p>
<p>ホスト配下のストレージリストから <code>local(hostname)</code> を選択し、 <code>ISOイメージ</code> メニューを開き、 <code>アップロード</code> ボタンを押下。</p>
<p><img src="/imageupload2.png" alt="">
<img src="/2023-05-13-20-53-58.png" alt="">
<code>ファイルを選択</code> ボタンを押下するとファイル選択ウィンドウが表示されるので、アップロードしたいイメージファイルを選択。 <code>アップロード</code>ボタンを押下でサーバー側にイメージファイルが転送される。</p>
<p><img src="/imageupload3.png" alt=""></p>
<p>転送が完了すると画像のように <code>TASK OK</code> というモーダルが表示される。</p>
<p>Windows 11のISOイメージとVirtIOのISOイメージをそれぞれアップロードすること。</p>
<h3 id="section">仮想マシンの作成</h3>
<p>インストールするイメージファイルをProxmoxに転送したらVMの作成へ。</p>
<p><img src="/createvm1.png" alt=""></p>
<p>Webインターフェース右上の <code>VMを作成</code> ボタンを押下。</p>
<p><img src="/createvm2.png" alt="">
仮想マシン名を名前欄に入力。VM IDなどはデフォルトでOK。</p>
<p><img src="/createvm3.png" alt="">
ISOイメージは先ほどアップロードしたWindows 11のISOイメージを選択。<br>
ゲストOSは標準だとLinuxになっているので、種別を<code>Windows</code>、バージョンを <code>11/2022</code>に変更。</p>
<p><img src="/createvm4.png" alt="">
システム設定。<br>
標準から下記の設定を変更。</p>
<ul>
<li>SCSIコントローラーを<code>VirtIO SCSI Single</code> から <code>VirtIO SCSI</code>に変更(性能が良いらしい)</li>
<li>EFIストレージをVMを配置するストレージに変更</li>
<li>TPMストレージをVMを配置するストレージに変更</li>
<li><code>Qemuエージェント</code> にチェックを入れる
<ul>
<li>VMWareでいうVMware Tools的なもの</li>
</ul>
</li>
</ul>
<p><img src="/createvm5.png" alt=""></p>
<p>VMを配置するストレージの設定。<br>
標準からは下記の設定を変更。</p>
<ul>
<li>バス/デバイスを <code>IDE</code> から <code>SCSI</code> に変更
<ul>
<li>IDEだと性能が非常に悪くなる</li>
</ul>
</li>
<li>ストレージをVMを配置したいストレージに変更</li>
<li>ディスクサイズをVMで利用したいサイズに変更</li>
</ul>
<p><img src="/createvm6.png" alt="">
CPU設定。<br>
Windowsで利用する分のコア数の設定。<br>
Windows 11は最低2コア必要なので注意。</p>
<p><img src="/createvm7.png" alt=""></p>
<p>Windowsに割り当てるメモリーサイズを指定。<br>
Windows 11は最低4GB必要。<br>
詳細設定にチェックを入れると出てくるBallooning デバイスは、VMが確保しているメモリーのうち使っていないメモリーを一旦開放し別のVMが利用できるようにするもの。<br>
利用する場合後で専用のドライバをインストールする必要がある。</p>
<p><img src="/createvm8.png" alt="">
ネットワーク設定はモデルを <code>Intel E1000</code> から <code>VirtIO</code>に変更。</p>
<p><img src="/createvm9.png" alt=""></p>
<p>確認画面。<br>
今回は別途設定が必要なので作成後に起動にチェックを入れずに完了。</p>
<p><img src="/createvm10.png" alt="">
VMが作成されると左のメニューに出てくるので選択。<br>
ハードウェアメニューの追加ボタンを押下し、<code>CD/DVDドライブ</code>を選択。</p>
<p><img src="/createvm11.png" alt=""></p>
<p><code>CD/DVDイメージファイル(ISO)を使用する</code> を選択した状態で、ISOイメージで先ほどアップロードしておいたVirtIOドライバのISOイメージファイルを選択して追加ボタンを押下。</p>
<p>これでWindows 11インストールまでのVM設定は完了。</p>
<h3 id="windows-11">Windows 11のインストール</h3>
<p><img src="/installwindows01.png" alt=""></p>
<p>画面右上の <code>開始</code> を押すか、コンソールを開いて <code>Start Now</code> を押すとVMが起動する。</p>
<p>起動したら <code>Press any key to boot from CD or DVD......</code> が出てる間に適当なキーを押下。</p>
<p>Windows 11のインストール画面がでたら通常通りインストールを進める。</p>
<p><img src="/installwindows02.png" alt=""></p>
<p>途中Windowsのインストール場所を選択する画面になるとドライブが見つからないと警告が表示され、進めることができない。</p>
<p><img src="/installwindows03.png" alt="">
ここで、ドライバの読み込み から先ほどのVirtIOのドライブを開き、ドライバをインストールする。 4</p>
<p><img src="/installwindows04.png" alt="">
まず最低限必要なのがストレージ用のドライバなので、
<code>CDドライブ(D:)virtio-win-x.x.xxx</code>から <code>vioscsi\w11\amd64</code> を選択しOKを押下。</p>
<p><img src="/installwindows05.png" alt="">
<code>Red Hat VirtIO SCSI pass-through controller</code> が表示されていることを確認して <code>次へ</code> を押下。</p>
<p><img src="/installwindows06.png" alt="">
これでストレージドライバがインストールされ、インストールドライブが表示されるはず。</p>
<p>同じ要領でネットワークドライバと、メモリーバルーンを使いたい場合はBallooningドライバ、QEMUエージェントを利用する場合はIOドライバをインストール。</p>
<p>ネットワークドライバの場合 <code>NetKVM\w11\amd64</code>、Ballooningドライバの場合 <code>Balloon\w11\amd64</code> のドライバ、QEMUエージェントを利用する場合は <code>vioserial\w11\amd64</code>をインストールすればOK。<br>
VM作成時にメモリーバルーンやQEMUの設定を有効にしなかった場合はドライバを選んでも <code>インストールするドライバーの選択</code> にドライバが表示されない。</p>
<p>あとは普通にインストールを進めればOK。</p>
<p>なお、QEMUエージェントを利用する場合はWindowsのインストール後別途別途QEMUエージェント自体のインストールが必要。</p>
<p><code>VirtIOのドライブ\guest-agent\qemu-ga-x86_64.msi</code> を実行すればOK。特にウィザードなどは出なかった。</p>
<p>こちらの環境だとWindowsインストール段階でQEMUエージェントを有効にしない場合、Windowsインストール後にProxmox側の設定からQEMUエージェントを有効にするとWindowsが起動しないという問題にぶち当たった。</p>
<p><img src="/qemuagentafter.png" alt=""></p>
<p>多分何か方法が間違ってると思うものの、できればVM作成段階で有効にして、インストールをしたほうが良いと思われる。</p>
<h3 id="section-1">トラブルシューティング</h3>
<h4 id="cant-lock-file-varlockqemu-serverlock-id.conf-got-timeout"><code>can't lock file '/var/lock/qemu-server/lock-[ID].conf' - got timeout.</code> と表示されてシャットダウンできない</h4>
<p>上記のWindowsインストール前にQEMUエージェントを有効にせず、後から有効化してWindowsを起動した際、コンソールが完全に真っ暗な状態でにっちもさっちも動かず、あきらめてProxmox側からシャットダウンをした際に発生。<br>
<img src="/trouble01.png" alt=""></p>
<p>どうもこういう時はシャットダウンをせず停止を選択したほうがうまくいったようなのだけど(シャットダウンはOSにシャットダウン命令をするので、OSがハングアップしてるとうまくいかない)、こうなってしまうと改めて停止を行おうとしてもロックファイルが邪魔をして停止すらできない。</p>
<p>この場合、Proxmox側のコンソール側から下記のコマンドを実行し、改めて停止させるとうまくいった。</p>
<pre><code class="language-bash">rm /var/lock/qemu-server/lock-[VMのID].conf
qm stop [VMのID]
</code></pre>
<h4 id="section-2">別のストレージに仮想マシンイメージを移動したい</h4>
<p>間違えて予定していたストレージと違うところにVMを作成してしまったり、新しいSSDを取り付けたなどで移動したい場合。</p>
<p><img src="/movestorage01.png" alt=""></p>
<p>移動したいストレージのVMを選択し、ハードウェアメニューを開く。<br>
VMが停止している状態で対象のストレージを選択した状態で上部のディスクの動作から <code>ストレージの移動</code> を選択。</p>
<p><img src="/movestorage02.png" alt=""></p>
<p>ターゲットストレージから移動先のストレージを選択。<br>
コピーの場合は <code>ソースの削除</code> にチェックを入れず、移動する場合はチェックを入れる。</p>
<p>あとは <code>ディスクの移動</code> を押下すると移動できる。</p>
<p>前回までにProxmoxのインストールと初期設定が完了したので、今度は仮想マシンを作成するところから。</p>
/entry/2023/05/14/install-proxmox
Proxmoxで仮想環境をお手軽構築する話 インストールと初期設定
2023-05-14T23:00:00Z
<p>これまでVMWare ESXiを利用して仮想環境を構築していたんですが、</p>
<ul>
<li>ESXi 7.0からRealtekのNICドライバがインストールできない
<ul>
<li>正確にはこれまでコミュニティが提供していたが、最新のドライバ形式に対応できない</li>
</ul>
</li>
<li>無償ESXiはTPM対応ができないか、手段が複雑</li>
</ul>
<p>という問題があり、また今後も継続的に無償で使うことができない可能性も否定できないこともあり、そろそろ別の仮想化ソリューションを検討したいなぁと。</p>
<p>そんなわけでいろいろ調べたところ Proxmoxというソリューションが大変よさげだったので導入しました。</p>
<p>なお、今回は一旦ESXi上で作っていた仮想化環境をすべてふっ飛ばして一から作ることにしたので移行作業はなし。</p>
<h3 id="proxmox">Proxmoxの特徴</h3>
<ul>
<li>VMware ESXiはベースがDebianなのでESXiと違ってドライバーがインストールしやすい</li>
<li>ハードウェアの対応が幅広い
<ul>
<li>CPUサポートはLinuxカーネルのサポートに準ずるのでESXiよりサポートが長くなる</li>
</ul>
</li>
<li>KVMによる仮想マシンとLinux Container(LXC)が利用可能</li>
<li>VMあたりのコア数制限なし</li>
<li>ウェブコンソール対応</li>
</ul>
<p>標準で日本語に対応しており、GPUパススルーなどの設定も割と簡単。<br>
いくらか使った感想として、ESXiと比べて遜色ないか下手したらProxmoxのほうが使い勝手が良いなぁという感触。</p>
<h3 id="proxmox-1">Proxmoxインストール</h3>
<p><a href="https://proxmox.com/en/downloads">公式サイト</a>からProxmox VEのISOファイルをダウンロード。</p>
<p><img src="/proxmoxdownload.png" alt=""></p>
<p>ダウンロードしたISOイメージをDVDに焼くか、USBメモリーでブートできる形で書き込み。<br>
私はIODDというイメージブート可能なストレージを持っているのでこれを利用。</p>
<!--?# AmazonAffiliate B0B3HQMV5T /?-->
<p>インストールするマシンのUEFIからCPU Virtualizationのサポートを有効化しておいたうえでブート。</p>
<p><img src="/proxmoxinstall1.png" alt=""></p>
<p>起動するとこの画面になるので <code>Install Proxmox VE</code> を選択している状態でEnter。</p>
<p><img src="/proxmoxinstall2.png" alt="">
EULA画面になるのでチェックしてから <code>I agree</code> を押下。</p>
<p><img src="/proxmoxinstall3.png" alt="">
インストール先のストレージ選択。</p>
<p><img src="/proxmoxinstall4.png" alt="">
Optionsからファイルシステムの選択などが可能。</p>
<p><img src="/proxmoxinstall5.png" alt="">
タイムゾーン、キーボードレイアウトの指定。</p>
<p><img src="/proxmoxinstall6.png" alt="">
rootユーザーのパスワード指定。</p>
<p><img src="/proxmoxinstall7.png" alt="">
サーバーのネットワーク設定。</p>
<p><img src="/proxmoxinstall8.png" alt="">
設定した内容が表示されるので確認し、 <code>Install</code> ボタンを押下。<br>
あとはインストールが完了してProxmoxが立ち上がるのを待つだけ。</p>
<p><img src="/proxmoxinstall9.png" alt="">
ベースがDebianなので起動するとコンソールが表示。<br>
通常はコンソールで作業することはなく、表示されてるURLをブラウザで開いてWebインターフェースを使って作業する。</p>
<h3 id="web">Webインターフェースへログイン</h3>
<p>コンソールに表示されていたURLをブラウザで開くと下記のようにログイン画面が表示される。(SSLの自己証明書を利用してる関係で警告が出るけども無視)</p>
<p><img src="/web_login.png" alt=""></p>
<p>初期表示時点では英語表記。<br>
LanguageのところをJapaneseにすれば日本語UIに変更可能。<br>
Languageを変更するとUsername、Passwordの入力内容がリセットされるので、言語を変えるなら最初に変えること。</p>
<p><img src="/web_logined.png" alt=""></p>
<p>Proxmoxはサブスクリプションサポートを採用してるので、サブスクリプション契約してないとログインするたびに <code>有効なサブスクリプションがありません</code> とアラートが表示される。<br>
サブスクリプション契約がなくとも普通に使えるので気にしない。</p>
<h3 id="section">無償版のリポジトリを設定</h3>
<p>初期インストール時点ではパッケージ管理システムのリポジトリに有償版のものしか登録されてないためProxmoxのアップデートができない状態。<br>
サブスクリプション契約しないのであれば無償版のリポジトリを設定する必要がある。</p>
<p>DebianのAPTパッケージマネージャを使っているので、コンソールから無償版のリポジトリを登録してもよいけども、Webインターフェースからも設定が可能。</p>
<p>まずリポジトリメニューを開く。<br>
左側のサーバーツリーから、 <code>データセンター > (インストール時指定したホスト名) </code> を選び、<code>アップデート > リポジトリ</code> を選択。</p>
<p><img src="/repository1.png" alt=""></p>
<p><code>APT リポジトリ</code> の追加ボタンを押すとリポジトリ追加ウィンドウが表示されるので、リポジトリリストから<code>No-Subscription</code>を選択し追加。</p>
<p><img src="/repository2.png" alt=""></p>
<p>これでサブスクリプション無しの無償版リポジトリが追加されたので、サブスクリプション契約が必要なエンタープライズリポジトリを無効化。<br>
<code>pve-enterprise</code> の項目を選択してから<code>Disable</code> を押せばOK。<br>
<img src="/repository3.png" alt=""></p>
<p>これができたら一旦最新状態に更新するために、アップデートメニューを開き、 <code>再表示</code>ボタン(英語UIだと<code>Refresh</code>、多分誤訳)を押して最新のリポジトリ情報を取得。</p>
<p><img src="/repository4.png" alt=""></p>
<p><code>再表示</code> ボタンを押すとログイン時と同じく有効なサブスクリプション契約がない胸のメッセージが表示されるものの無視してOKボタンを押す。すると <code>apt-get update</code> 処理がログ画面に表示される。<br>
<code>TASK OK</code>と表示されたら 右上の×ボタンを押して閉じる。<br>
<img src="/repository5.png" alt=""></p>
<p><code>アップグレード</code> ボタンを押すと別ウィンドウが開き、コンソールで <code>apt-get dist-upgrade</code> 処理が走り、続行してよいか聞かれるので <code>y</code> ボタンを押下。</p>
<p><img src="/repository6.png" alt=""></p>
<p>アップグレードが完了しても自動的にウィンドウは閉じないので自分で閉じる。今回の場合カーネル更新があり再起動が必要なので、リブートコマンドをたたくなり上部メニューの<code>再起動</code>ボタンを押下して再起動。</p>
<p><img src="/repository7.png" alt=""></p>
<h3 id="section-1">ストレージの追加</h3>
<p>Proxmoxをインストールしたマシンにストレージが一つだけならここまででいいんですけども、他にもストレージを追加する場合はディスク追加を行う必要があります。</p>
<p><img src="/adddisk1.png" alt=""></p>
<p>ホスト選択状態でディスクメニューを開き、追加したいディスクを選んで <code>GPTでディスクを初期化</code> を選択。</p>
<p>終わったらディスクメニュー配下にある <code>LVM</code> <code>LVM-Thin</code> <code>ZFS</code> のうち利用するファイルシステムを選択。今回はZFS。</p>
<p><img src="/adddisk2.png" alt=""></p>
<p>接続されているストレージがリストに表示されているので、対象のディスクを選択、名前も後で把握できる名前で。<br>
RAIDを組みたい場合はRAIDレベルを変更。</p>
<p><img src="/adddisk3.png" alt=""></p>
<p>必要な設定が終わったら <code>作成</code> ボタンを押下すればストレージが追加される。</p>
<p><img src="/adddisk4.png" alt=""></p>
<p>これでProxmoxの最低限の導入は完了。<br>
次からVMのインストールへ。</p>
<p>これまでVMWare ESXiを利用して仮想環境を構築していたんですが、</p>
/entry/2023/05/05/oobebluetooth
Windows 11のインストール画面でBluetoothマウスを使う話
2023-05-05T16:00:00Z
<p>Windows 11の再インストールをする際、OOBE画面の操作でいちいちUSB接続のマウスを使う必要があるのは面倒だなぁと思っていたところ、知り合いから良い方法を教えてもらったのでメモ。</p>
<p><img src="/oobe.png" alt=""></p>
<p>OOBE画面では Shiftキーを押しながらF10を押すとコマンドプロンプトが起動する。</p>
<p>コマンドプロンプトで <code>start ms-settings:</code> を実行すると、Windowsの設定画面が表示されるので、あとは頑張ってキーボードでBluetooth接続すればOK。</p>
<p>ネットワークを切断した状態でOOBE画面を進めることができる <code>oobe\bypassnro</code> も別途覚えておくとローカルアカウントでセットアップしたいときに便利。</p>
<!--?# OEmbed "https://forest.watch.impress.co.jp/docs/serial/yajiuma/1401644.html" /?-->
<p>Windows 11の再インストールをする際、OOBE画面の操作でいちいちUSB接続のマウスを使う必要があるのは面倒だなぁと思っていたところ、知り合いから良い方法を教えてもらったのでメモ。</p>
/entry/2023/05/04/130020
HTMLFormElement.submit()では制約検証が行われないので明示的に制約検証させる必要がある話
2023-05-04T13:00:20Z
<p>ウェブサイト構築中にちょっとはまったのでメモ。</p>
<p>Formタグの中にSubmitを行うボタンをおけない場合、 <code>input="submit"</code> のボタンをFormタグ内にhidden状態で記載し、Formの外のボタンを置きたい場所にラベルタグとfor属性を利用してボタンを設けるという方法がありますが、これだとEnter押下時にSubmitが走ってしまうという問題があったため、 <a href="https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement/submit">HTMLFormElement.submit()</a>を利用して回避。</p>
<p>ただ、これはMDNにも記載されている通りsubmitイベントが発生せず、制約検証も行われない問題が。</p>
<h3 id="htmlformelement.reportvalidity">HTMLFormElement.reportValidity()</h3>
<p>HTML5.1から <code>HTMLFormElement.reportValidity()</code> という制約検証を行うための機能が追加されてた模様。知らなかった・・・。</p>
<p>これを <code>HTMLFormElement.submit()</code> 実行前に呼び出して結果が <code>true</code> だった場合にだけsubmit処理させるようにしてやればOK。</p>
<p><code>reportValidity()</code> はエラーが存在する場合、<code>required</code> などの制約検証に対するメッセージが該当のフォーム要素に表示されるそう。</p>
<p>似たようなもので <code>checkValidity()</code> があり、こちらは制約検証結果をtrueかfalseかで返すだけ。エラーメッセージは表示されないので、独自にメッセージを調整したい場合などには有用。</p>
<p>ウェブサイト構築中にちょっとはまったのでメモ。</p>
/entry/2023/03/22/000611
Windows 11のリモートデスクトップでWindows Defender Credential Guardが自動ログインをはじいてしまう問題の対処
2023-03-22T00:06:11Z
<p>新しくマシンを組んでWindows 11を入れてから、リモートデスクトップで正しいパスワードを入力して自動ログインできるよう設定していても、</p>
<pre><code>Windows Defender Credential Guard では、保存された資格情報を使用できません。資格情報を入力してください。
</code></pre>
<p>というエラーが表示されるように。</p>
<p>仕事用の接続先に入るときならともかく、録画マシンにログインするときに毎回パスワードを入力するのも面倒なので調べてみたところ、下記のサイトがヒット。</p>
<?# OEmbed "https://www.orangeitems.com/entry/2022/10/05/182144" /?>
<p>バグというか、パスワードを入力せず自動ログインさせるなんて危ないからとはじいてるだけかなぁとは思うものの、とりあえず私の運用ではそこまで厳密にしなくてもよいので無効化することに。</p>
<pre><code class="language-ini">Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard]
"RequirePlatformSecurityFeatures"=dword:00000000
"EnableVirtualizationBasedSecurity"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"LsaCfgFlags"=dword:00000000
</code></pre>
<p>上記内容のレジストリファイルを作成して実行し、PCを再起動すれば <code>Windows Defender Credential Guard</code> が無効化され、これまで通り自動ログインできるようになるはず。</p>
<p><code>Windows Defender Credential Guard</code>ってWindows 10ではEnterprise向けだったはずなんですけど、11ではProfessionalでも有効になったのかな・・・。<br />
本来無効化するのは脆弱になるという意味でよろしくないので、何か他の方法があればいいんですけど。</p>
<p>新しくマシンを組んでWindows 11を入れてから、リモートデスクトップで正しいパスワードを入力して自動ログインできるよう設定していても、</p>
/entry/2022/12/30/222025
サブスク・契約の棚卸しをした話 2022
2022-12-30T22:20:25Z
<p><a href="https://blog.ch3cooh.jp/entry/2022/12/30/113000">酢酸先生</a>や<a href="https://bps-tomoya.hateblo.jp/entry/2022/12/22/192451">しばた氏</a>のとこでやってたので私も。<br />
棚卸しといっても結局解約はなし。<br />
サブスクとかに限らず、光熱費、税金、保険以外の定期的な支出を計上。</p>
<h3 id="section">月間契約</h3>
<table>
<thead>
<tr>
<th>品目</th>
<th>費用</th>
<th>備考</th>
</tr>
</thead>
<tbody>
<tr>
<td>SoftBank</td>
<td>993円</td>
<td>3GBデータSIM契約、メインスマホのサブSIM、PayPayクーポン</td>
</tr>
<tr>
<td>OCNモバイルONE</td>
<td>1,356円</td>
<td>メイン契約、6GB</td>
</tr>
<tr>
<td>povo</td>
<td>0 or 330円</td>
<td>SurfaceDuo用 出かけた時にたまに利用</td>
</tr>
<tr>
<td>YouTube Premium</td>
<td>1,180円</td>
<td>広告邪魔なので</td>
</tr>
<tr>
<td>enひかり</td>
<td>5,445円</td>
<td>ネット回線 フレッツ光クロス</td>
</tr>
<tr>
<td>TSUTAYA DISCUS</td>
<td>2,052円</td>
<td>CD宅配レンタル サブスク全盛だけど音源は手元に置いておきたい派</td>
</tr>
<tr>
<td>pixiv fanbox</td>
<td>2,300円</td>
<td>実は政治献金</td>
</tr>
<tr>
<td>スポーツジム</td>
<td>2,420円</td>
<td>安くて助かってる。来年は行く頻度を上げたい・・・</td>
</tr>
<tr>
<td>ツイキャス</td>
<td>500円</td>
<td>サクラ大戦から派生した(?)ダンディ商会というところのお布施的な</td>
</tr>
<tr>
<td>ゲームセンターCX FC</td>
<td>550円</td>
<td>あまり見てないものの、好きな番組なので今後とも頑張ってほしい</td>
</tr>
<tr>
<td>radiko プレミアム</td>
<td>385円</td>
<td>ラジオ文化は残ってほしいな、という気持ちと文化放送でやってるラジオ番組視聴のため</td>
</tr>
<tr>
<td>WealthNavi</td>
<td>50,000円</td>
<td>投資信託</td>
</tr>
<tr>
<td>住友生命 たのしみワンダフル</td>
<td>10,000円</td>
<td>個人年金</td>
</tr>
<tr>
<td>iDeco</td>
<td>68,000円</td>
<td>個人型確定拠出年金 個人事業主は年金がないので</td>
</tr>
<tr>
<td>車購入費</td>
<td>50,000円</td>
<td>今年購入した車の一部代金を父から借りたので(別に金がなかったわけではないよ!!)</td>
</tr>
</tbody>
</table>
<h4 id="section-1">年間契約</h4>
<table>
<thead>
<tr>
<th>品目</th>
<th>費用</th>
<th>備考</th>
</tr>
</thead>
<tbody>
<tr>
<td>Amazon Prime</td>
<td>4,900円</td>
<td>Amazon Photoとか使っているので必須</td>
</tr>
<tr>
<td>Nintendo Switch Online Family</td>
<td>4,500円</td>
<td>弟と加入 あまり使ってはいない</td>
</tr>
<tr>
<td>Microsoft 365 Business Standard</td>
<td>17,952円</td>
<td>今年からはサブスク契約せず、1年分のPOSAカードを安いときに購入することにした</td>
</tr>
<tr>
<td>Moneyforward</td>
<td>5,500円</td>
<td>家計簿つけないと際限なく使うので ここには載せてないけど個人事業用のビジネス契約(1,1760円)もしてる</td>
</tr>
<tr>
<td>あすけん</td>
<td>3,600円</td>
<td>あすけんで食事記録しているもののいまだ痩せてないけど、記録しないと多分太る</td>
</tr>
<tr>
<td>1Passwordファミリープラン</td>
<td>12,800円(3年分)</td>
<td>もともと個人プラン契約しており、母のパスワード管理が必要になってきたのでファミリープランへ</td>
</tr>
</tbody>
</table>
<h4 id="section-2">振り返って</h4>
<p>投資信託とか車の購入費とか除けば、そこまでサブスク契約はしてない?<br />
ただ、この記事を書くために確認していたところ、MoneyforwardをGoogle Play経由で契約してるところ、クレカ決済だとさらに200円安いことを知ってしまった。次回更新時一旦継続キャンセルして切り替えることを検討しないと。</p>
<p><a href="https://blog.ch3cooh.jp/entry/2022/12/30/113000">酢酸先生</a>や<a href="https://bps-tomoya.hateblo.jp/entry/2022/12/22/192451">しばた氏</a>のとこでやってたので私も。<br>
棚卸しといっても結局解約はなし。<br>
サブスクとかに限らず、光熱費、税金、保険以外の定期的な支出を計上。</p>
/entry/2022/12/12/234211
Git Submoduleを削除したプルリクエストをマージ後、別のブランチに取り込んだ時にGitHub Actionsでエラーが出た話
2022-12-12T23:42:11Z
<p>セルフランナーでの挙動なので通常環境で起きるかどうか検証してないのですが、とりあえずメモとして。</p>
<p>とある案件でNuGetパッケージが更新されず、GitHub上のリポジトリは更新されているライブラリを利用するため、Submoduleを利用してました。<br>
最近NuGetパッケージも更新されるようになり、Submoduleを利用する必要性が薄れたため、Submoduleを削除してNuGetパッケージを利用するプルリクエストを作成し、メインブランチにマージを行いました。</p>
<p>このメインブランチに反映したものを別のブランチにもマージしてプッシュしたところ、下記のエラーが。</p>
<p><img src="/error.png" alt=""></p>
<p>GitHub Actionsのワークフローでは、<code>actions/checkout@v2</code> の処理中にSubmoduleの処理をしているのですが、ここでなぜか削除したはずのライブラリの取得でエラーになってる様子。</p>
<pre><code class="language-yml"> steps:
- uses: actions/checkout@v2
with:
submodules: recursive
</code></pre>
<p>セルフランナーのワーキングディレクトリを消してもらったりしてもうまくいかなかったのですが、最終的にメインブランチからマージして取得せず、rebaseする形で取り込むと問題なく動きました。<br>
Submoduleの削除で.gitmoduleからライブラリのプロジェクト参照を消していたとしても、そのブランチのもととなる位置の段階でSubmoduleを参照している場合エラーとなる?</p>
<p>セルフランナーでの挙動なので通常環境で起きるかどうか検証してないのですが、とりあえずメモとして。</p>