ブログ

  • mise を使ってみる

    新しい開発環境を Ubuntu 24.04 上に構築中。Xorg にしないで、デフォルトの Wayland のまま使う。Firefox も snap のまま使う。日本語入力はデフォルトの ibus と mozc の組み合わせのまま。ログインシェルも bash のまま。

    いろいろ設定したいが最低限したらコードを書かねばならない。最初は node.js とかはローカルには入れずにと思ったけど、やっぱり入れたほうが便利。ということで、どうせなら asdf ではなくて mise にしようかと思った。Getting Started を読みながら入れていこう。

    ローカルに node.js とか入れないでと思ったけど、やっぱ入れたほうが便利。いるものは入れよう。

  • Cloudflare DNS を使ってみる

    Cloudflare DNS を使ってみる

    Cloudflare Tunnel を使おうと思っている。DNS サーバを Cloudflare に持っていくといろいろ便利だとのことで、ドメインを 1 つ Cloudflare DNS を使うようにしてみた(登録自体は別業者)。

    現状と希望

    現状、ムームードメインで登録しているドメイン adaptivenode.com のネームサーバとして Cloudflare DNS を使うようにしてみる。Cloudflare へは以前に登録したことがあったので、そのアカウントを使用してやってみる。

    adaptivenode.com は heteml を使っていて、ムームードメイン側で「サーバは heteml を使う」と言うとよしなに設定してくれる。

    Cloudflare 側で設定

    まず Cloudflare にログインする。Cloudflare の Web コンソールは非常にわかりにくい(自分にとって)。今、どこにいるのかわからなくなる。似たような(もしくは同じ)名前の項目が複数個所にあり、どこがどこなんだか。Zero Trust に入る前、入った後とか、本当にわかりづらい(自分が理解できていないだけだと思うんだが)。

    左のナビゲーションから Account home を表示すると「<ユーザ名>’s Account」が表示され、その下にタブが表示される。この状態では Zero TrustDomainDeveloper Platform の 3 つがある。この Domain をクリックする。

    Domain タブが選択された状態になると、Boost your site’s speed and security と表示されているので、使うドメイン名を入力して、ラジオボタンでは Quick scan for DNS records を選択、Instruct AI bot traffic with robots.txt をオフにして、Continue をクリックする。

    プランをどれにするか聞かれるので、Free を選択する。

    スキャン結果が表示される。普通ならこの段階で変更することはないはず。Cloudflare に DNS サーバを移すことで MX などちゃんと使えるのかという問題もあるので、必要ないレコードは削除して良いだろう。

    あああ

  • 青梗菜と玉子の中華スープ

    材料(2人分)

    • 青梗菜: 1 株
    • 玉子: 1個
    • 人参: 厚さ 2〜3 mm の輪切りを 3 枚程度(いちょう切りに)
    • 水: 400 ml
    • 鶏ガラスープの素: 小さじ2
    • ごま油: 小さじ1/2
    • 白ごま: 少々

    下ごしらえ

    青梗菜

    1. 根元を落とす
    2. 茎と葉を分ける
      • 茎: 3cm幅
      • 葉: ざく切り

    人参

    1. 2〜3 mm 厚のいちょう切り

    1. 軽く溶く

    作り方

    1. スープを作る
      鍋に水+鶏ガラスープの素を入れ、中火で温める。
    2. 人参を入れる
      1~2 分煮て透明感が出たら良い。
    3. 青梗菜の茎と葉を入れる(茎を入れて 1 分、葉を入れて 30秒。色鮮やかになったら良い)
    4. 玉子を入れる(火を弱めて卵を細く回し入れ、触らず10秒待つ)
    5. 仕上げにごま油と白ごまを

    コツ

    • 人参は色担当・味は脇役
    • 青梗菜は加熱しすぎない
    • 卵は弱火で投入。まぜない
    • ごま油は最後に入れて香りをつける
  • ファイルのハッシュ値

    ファイルが正しいものか確認するためにハッシュ値を使って確認することがある。

    $ sha256sum test.zip
    644ea473790342daed66e6d9f24f42bf2bc6ce8735903c9f667299b8baf42c20  test.zip
    
    $

    ハッシュ値はこんな感じで算出できる。この場合は SHA-256 ハッシュ値。md5 ハッシュ値を求めるなら md5sum を使う。このあたりのコマンドは coreutils パッケージに含まれている(Debian/Ubuntu)。

    そして、Windows の場合。PowerShell で Get-FileHash という関数を使って算出する。

    > Get-FileHash test.zip -Algorithm sha256
    
    Algorithm       Hash                                                                   Path
    ---------       ----                                                                   ----
    MD5             361A00D9E62B7A4DC01DDC2D0A236715                                       C:\Users\nakase\tmp\test.zip
    
    >

    ハッシュ値のみを表示したいなら、

    > (Get-FileHash test.zip -Algorithm sha256).Hash
    644EA473790342DAED66E6D9F24F42BF2BC6CE8735903C9F667299B8BAF42C20
    >

    sha256sum と同じように小文字で表示させたいなら、

    > (Get-FileHash test.zip -Algorithm sha256).Hash.toLower()
    644ea473790342daed66e6d9f24f42bf2bc6ce8735903c9f667299b8baf42c20
    >

    md5 ハッシュ値を算出したいなら、-Algorithm sha256-Algorithm md5 にする。

  • tree-sitter をインストールする

    tree-sitter をインストールする

    パーサージェネレーターツール、増分解析ライブラリの tree-sitter をインストールする。
    tree-sitter はソースファイルの構文ツリーを構築し、ソースファイルの編集に応じて構文ツリーを効率的に更新できるということ。

    Releases を見ると、2025/12/17 現在の最新リリースは v0.26.3 みたいなので、これをダウンロードして解凍する。解凍したものを /usr/local/bin に配置する。

    $ wget https://github.com/tree-sitter/tree-sitter/releases/download/v0.26.3/tree-sitter-linux-x64.gz
    $ gunzip tree-sitter-linux-x64.gz
    $ chmod +x tree-sitter-linux-x64
    $ sudo mv tree-sitter-linux-x64 /usr/local/bin/tree-sitter

    これで完了。念のため、確認。

    $ tree-sitter -V
    tree-sitter 0.26.3

    大丈夫みたい。

  • Proxmox 9 を使ってみる

    Proxmox 9 を使ってみる

    これまで触ってきた Proxmox が 8 だったので 9 にする。Proxmox 9 はベースが Debian 13 Trixie らしい。動作検証しかしていなかったので、特にこれといったものも動かしていないので、サクッと入れなおす。

    最近の(と言っても結構前からだけど)ネットワークのいろいろの知識が不足していることがこれまでの検証でわかったので、そのあたりの学習をしながら進める。

    Beelink MINI S12 Pro という N100 を搭載したメモリ 16GB、ストレージは M.2 NVMe の SSD 500GB と SATA 2.5 インチの SSD 500GB を積んだもの。ネットワークは Wi-Fi をつながずに有線 LAN を使用する。

    宅内のネットワークは TP-Link のルータ(AX3000)でインターネットにつながっている(インターリンクZOOT NATIVE)。ルータの内側のネットワークは 172.16.128.0/24 でルータの内側 IP アドレスは 172.16.128.1 になっている。

    最終的には LXC/VM で Web サービスを公開したいと思っているので、ネットワークを切ってそこにそれらで使う LXC/VM を入れる。このネットワークは 172.16.192.0/24 にしようと思っている。

    Proxmox のインストール

    Proxmox のサイトの Proxmox Virtual Environment のダウンロードページから ISO をダウンロードする。今回ダウンロードするタイミングでは、Proxmox VE 9.1 ISO Installer でバージョンは 9.1-1 だった。ISO をダウンロードしたら rufus で USB メモリに焼く。

    焼き終わったら再起動して、USB から PC を起動する。インストーラが起動する。IP アドレスを設定する部分以外は特に悩むこともないと思う。自分はノード名を pve-n100 とした。

    インストールが完了して再起動したら、Linux へのログイン画面になっている(テキスト画面の方ね)。「この URL にアクセスして設定しなよ」と書かれているので作業用 PC のブラウザでアクセスする。

    とりあえずの設定

    apt リポジトリの変更

    初期状態では Enterprise のリポジトリを参照している。とりあえずは無償で利用できる範囲で使おうと思っているので、そのあたりを調整する。

    pve-n100/etc/apt/sources.list.d/ には、ceph.sources, debian.sources, pve-enterprise.sources と 3 ファイルあった。順番がずれるが pve-enterprise.sources が Proxmox の Enterprise 版のリポジトリ、ceph.sources が Ceph とかいうクラスタとかを扱うもののリポジトリ(有償版でしか使えないはず)、debian.sources が Trixie のリポジトリ。

    pve-enterprise.sourcesceph.sources を無効にする。各ファイルの末尾に Enabled: no を追記する。

    /etc/apt/sources.list.d/pve-no-subscription.sources を作成する。ファイルの内容は以下の通り。

    Types: deb
    URIs: http://download.proxmox.com/debian/pve
    Suites: trixie
    Components: pve-no-subscription
    Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg

    これで apt update して apt upgrade できれば OK。

    SATA SSD を Proxmox で使えるように

    lsblk -o name,size,type,mountpoint してディスクの様子を確認。

    自分の環境では、nvme0n1 というディスクと sda がつながっていた。nvme0n1 は M.2 NVMe ディスクで、sda が SATA 2.5 インチ SSD になる。sda には sata500 というボリュームグループがある。これをいったんきれいにするため、lvremove -y sata500 して(論理ボリュームの削除)、vgremove -y sata500 して(ボリュームグループの削除)、pvremove -y /dev/sda した(物理ボリュームの削除)。lsblk して sda に何もぶら下がっていないことを確認。

    Proxmox の Web コンソールのツリーで、ノード pve-n100 を選ぶ(Datacenter の中にある)。
    追加したボリュームは MV/LXC のストレージとして使おうと思っているので LVM-Thin にする。Disks の中の LVM-Thin を選択しておく。

    Create Thinpool ボタンをクリックするとダイアログが開く。Disk ポップアップメニューは使えるものが /dev/hda しかないのでそれが選択されている。Name テキストボックスに sata500 と入力として Create ボタンをクリックする。

    sata500 ができた画面。LVM-Thin のリストにも、左側ツリーの部分にも sata500 がある。

    左側ツリーで Datacenter を選択して、Storage を見ると sata500 が作成されている。

    ネットワーク

    vmbr1 をつくってみる。/etc/network/interfaces に vmbr1 を追加(下の赤字部分)。

    auto lo
    iface lo inet loopback

    iface nic0 inet manual

    auto vmbr0
    iface vmbr0 inet static
    address 172.16.128.130/24
    gateway 172.16.128.1
    bridge-ports nic0
    bridge-stp off
    bridge-fd 0

    iface nic1 inet manual

    auto vmbr1
    iface vmbr1 inet static
    address 172.16.192.1/24
    bridge_ports none
    bridge_stp off
    bridge_fd 0

    source /etc/network/interfaces.d/*

    どんな具合か確認する。

    root@pve-n100:~# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
    valid_lft forever preferred_lft forever
    2: nic0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr0 state UP group default qlen 1000
    link/ether e8:ff:1e:df:52:93 brd ff:ff:ff:ff:ff:ff
    altname enxe8ff1edf5293
    3: wlo1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether bc:cd:99:af:31:3d brd ff:ff:ff:ff:ff:ff
    altname wlp0s20f3
    altname wlxbccd99af313d
    5: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e8:ff:1e:df:52:93 brd ff:ff:ff:ff:ff:ff
    inet 172.16.128.130/24 scope global vmbr0
    valid_lft forever preferred_lft forever
    inet6 fe80::eaff:1eff:fedf:5293/64 scope link proto kernel_ll
    valid_lft forever preferred_lft forever
    6: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether da:76:5a:11:d3:2f brd ff:ff:ff:ff:ff:ff
    inet 172.16.192.1/24 scope global vmbr1
    valid_lft forever preferred_lft forever
    inet6 fe80::d876:5aff:fe11:d32f/64 scope link proto kernel_ll
    valid_lft forever preferred_lft forever
    root@pve-n100:~# ip route
    default via 172.16.128.1 dev vmbr0 proto kernel onlink
    172.16.128.0/24 dev vmbr0 proto kernel scope link src 172.16.128.130
    172.16.192.0/24 dev vmbr1 proto kernel scope link src 172.16.192.1

    良さげな感じです。

    LXC のテンプレートをダウンロード

    LXC をあげるときにテンプレートがいるので、ダウンロードしておく。

    # テンプレートのリストを最新にしておく
    root@pve-n100:~# pveam update
    update successful
    # テンプレートのリストで debian が含まれているものを抽出
    root@pve-n100:~# pveam available | grep debian
    system debian-12-standard_12.12-1_amd64.tar.zst
    system debian-13-standard_13.1-2_amd64.tar.zst
    turnkeylinux debian-10-turnkey-collabtive_16.1-1_amd64.tar.gz
    <SNIP!>
    turnkeylinux debian-12-turnkey-zoneminder_18.0-1_amd64.tar.gz
    # テンプレート debian-13-standard_13.1-2_amd64.tar.zst をダウンロード
    root@pve-n100:~# pveam download local debian-13-standard_13.1-2_amd64.tar.zst
    downloading http://download.proxmox.com/images/system/debian-13-standard_13.1-2_amd64.tar.zst to /var/lib/vz/template/cache/debian-13-standard_13.1-2_amd64.tar.zst
    --2025-12-01 16:25:35-- http://download.proxmox.com/images/system/debian-13-standard_13.1-2_amd64.tar.zst
    Resolving download.proxmox.com (download.proxmox.com)... 103.76.41.50, 2400:ed00:3::2
    Connecting to download.proxmox.com (download.proxmox.com)|103.76.41.50|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 129710398 (124M) [application/octet-stream]
    Saving to: '/var/lib/vz/template/cache/debian-13-standard_13.1-2_amd64.tar.zst.tmp_dwnl.160968'
    0K ........ ........ ........ ........ 25% 975K 96s
    32768K ........ ........ ........ ........ 51% 1.41M 53s
    65536K ........ ........ ........ ........ 77% 1.05M 25s
    98304K ........ ........ ........ ... 100% 901K=1m58s
    2025-12-01 16:27:39 (1.05 MB/s) - '/var/lib/vz/template/cache/debian-13-standard_13.1-2_amd64.tar.zst.tmp_dwnl.160968' saved [129710398/129710398]
    calculating checksum...OK, checksum verified
    download of 'http://download.proxmox.com/images/system/debian-13-standard_13.1-2_amd64.tar.zst' to '/var/lib/vz/template/cache/debian-13-standard_13.1-2_amd64.tar.zst' finished

    vmbr1 から宅内ネットワークへの NAT

    /etc/network/interfacesvmbr1 の部分に赤字の部分を追記。

    auto lo
    iface lo inet loopback

    iface nic0 inet manual

    auto vmbr0
    iface vmbr0 inet static
    address 172.16.128.130/24
    gateway 172.16.128.1
    bridge-ports nic0
    bridge-stp off
    bridge-fd 0

    iface nic1 inet manual

    auto vmbr1
    iface vmbr1 inet static
    address 172.16.192.1/24
    bridge_ports none
    bridge_stp off
    bridge_fd 0
    post-up iptables -t nat -A POSTROUTING -s 172.16.192.0/24 -o vmbr0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s 172.16.192.0/24 -o vmbr0 -j MASQUERADE

    source /etc/network/interfaces.d/*

    cat /proc/sys/net/ipv4/ip_forward0 になっているので、IPv4 パケット転送は無効になっている。これを echo 1 > /proc/sys/net/ipv4/ip_forward として 1 にしておく。永続化するには、echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-forwarding.conf して、sysctl --system しておく。sysctl net.ipv4.ip_forward して net.ipv4.ip_forward = 1 と出力されれば OK。

    最終的に以下のようになれば OK。

    root@pve-n100:~# ifreload -a
    root@pve-n100:~# iptables -t nat -L -n -v
    Chain PREROUTING (policy ACCEPT 60 packets, 10005 bytes)
    pkts bytes target prot opt in out source destination

    Chain INPUT (policy ACCEPT 15 packets, 3260 bytes)
    pkts bytes target prot opt in out source destination

    Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination

    Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    0 0 MASQUERADE all -- * vmbr0 172.16.192.0/24 0.0.0.0/0

    vmbr1 側に LXC をあげる

    左のツリーで Datacenter > pve-n100 を選択して、Create CT ボタンをクリック。あとから dnsmasq を入れるのでちゃんとつくる。

    Create LXC Container のダイアログが開く。今回は CT ID: 100Hostname: dnsmasq01 とした。パスワードは適切なものを。

    テンプレートはさっきダウンロードした debian-13-standard_13.1-2_amd64.tar.zst を選択。

    ストレージは Disk size (GiB): 8 で設定。

    CPU は Cores: 1 で設定。

    メモリは Memory (MiB): 256Swap (MiB): 256 で設定。

    肝心のネットワーク。Bridge: vmbr1IPv4/CIDR: 172.16.192.2/24Gateway (IPv4): 172.16.192.1 としておく。

    DNS は一応設定しておく。DSN Servers: 172.16.128.1 としておく。

    内容を確認して Finish ボタンをクリック。

    左側のツリー Datacenter >pve-n100 > 100 (dnsmasq01) ができた。

    Datacenter >pve-n100 > 100 (dnsmasq01) を選択した状態で、Start ボタンをクリック。Console を選択する。

    とりあえずログインして、apt update して apt upgrade -y する。ping を打ってみて、ネットワークの疎通と名前解決できていることを確認。

    root@dnsmasq01:~# ping -c 3 172.16.128.192
    PING 172.16.128.192 (172.16.128.192) 56(84) bytes of data.
    64 bytes from 172.16.128.192: icmp_seq=1 ttl=127 time=0.689 ms
    64 bytes from 172.16.128.192: icmp_seq=2 ttl=127 time=0.978 ms
    64 bytes from 172.16.128.192: icmp_seq=3 ttl=127 time=0.930 ms

    --- 172.16.128.192 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2024ms
    rtt min/avg/max/mdev = 0.689/0.865/0.978/0.126 ms
    root@dnsmasq01:~# ping -c 3 172.16.128.41
    PING 172.16.128.41 (172.16.128.41) 56(84) bytes of data.
    64 bytes from 172.16.128.41: icmp_seq=1 ttl=63 time=0.514 ms
    64 bytes from 172.16.128.41: icmp_seq=2 ttl=63 time=0.482 ms
    64 bytes from 172.16.128.41: icmp_seq=3 ttl=63 time=0.464 ms

    --- 172.16.128.41 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2043ms
    rtt min/avg/max/mdev = 0.464/0.486/0.514/0.020 ms
    root@dnsmasq01:~# ping -c 3 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=4.82 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=3.73 ms
    64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=3.42 ms

    --- 8.8.8.8 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2004ms
    rtt min/avg/max/mdev = 3.417/3.987/4.816/0.599 ms
    root@dnsmasq01:~# ping -c 3 google.com
    PING google.com (172.217.161.46) 56(84) bytes of data.
    64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=1 ttl=116 time=6.69 ms
    64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=2 ttl=116 time=4.21 ms
    64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=3 ttl=116 time=3.72 ms

    --- google.com ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2003ms
    rtt min/avg/max/mdev = 3.720/4.873/6.693/1.301 ms

    LXC に dnsmasq を入れる

    DHCP と DNS を動かすので、apt で dnsmasq を入れる。apt install -y dnsmasq するだけ。

    root@dnsmasq01:systemctl status dnsmasq
    * dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
    Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; preset: enabled)
    Active: active (running) since Mon 2025-12-01 09:04:59 UTC; 1min 23s ago
    Invocation: 75c968bbaf954d9788983a2a1776287a
    Docs: man:dnsmasq(8)
    Process: 1875 ExecStartPre=/usr/share/dnsmasq/systemd-helper checkconfig (code=exited, status=0/SUCCESS)
    Process: 1881 ExecStart=/usr/share/dnsmasq/systemd-helper exec (code=exited, status=0/SUCCESS)
    Process: 1887 ExecStartPost=/usr/share/dnsmasq/systemd-helper start-resolvconf (code=exited, status=0/SUCCESS)
    Main PID: 1886 (dnsmasq)
    Tasks: 1 (limit: 18623)
    Memory: 2M (peak: 4.6M)
    CPU: 26ms
    CGroup: /system.slice/dnsmasq.service
    `-1886 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new>

    Dec 01 09:04:59 dnsmasq01 systemd[1]: Starting dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server...
    Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: started, version 2.91 cachesize 150
    Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: DNS service limited to local subnets
    Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: compile time options: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP>
    Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: reading /etc/resolv.conf
    Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: using nameserver 172.16.128.1#53
    Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: read /etc/hosts - 8 names
    Dec 01 09:04:59 dnsmasq01 systemd[1]: Started dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server.
    lines 1-23/23 (END)

    /etc/dnsmasq.conf を編集する。

    # If you want dnsmasq to listen for DHCP and DNS requests only on
    # specified interfaces (and the loopback) give the name of the
    # interface (eg eth0) here.
    # Repeat the line for more than one interface.
    interface=eth0

    # Uncomment this to enable the integrated DHCP server, you need
    # to supply the range of addresses available for lease and optionally
    # a lease time. If you have more than one network, you will need to
    # repeat this for each network on which you want to supply DHCP
    # service.
    dhcp-range=172.16.192.129,172.16.192.159,12h

    # Override the default route supplied by dnsmasq, which assumes the
    # router is the same machine as the one running dnsmasq.
    dhcp-option=3,172.16.192.1

    dhcp-option=6,172.16.128.1

    domain-needed
    bogus-priv

    systemctl restart dnsmasq する。

    適当に LXC をあげて、確認。journalctl -xeu dnsmasq.service してみる。

    -- The job identifier is 494.
    Dec 01 09:30:04 dnsmasq01 dnsmasq-dhcp[1970]: DHCPDISCOVER(eth0) bc:24:11:31:cf:85
    Dec 01 09:30:04 dnsmasq01 dnsmasq-dhcp[1970]: DHCPOFFER(eth0) 172.16.192.148 bc:24:11:31:cf:85
    Dec 01 09:30:04 dnsmasq01 dnsmasq-dhcp[1970]: DHCPREQUEST(eth0) 172.16.192.148 bc:24:11:31:cf:85
    Dec 01 09:30:04 dnsmasq01 dnsmasq-dhcp[1970]: DHCPACK(eth0) 172.16.192.148 bc:24:11:31:cf:85 test01

  • 現在の Proxmox がらみの環境

    現在の Proxmox がらみの環境

    ┌─────┐
    │ Internet │
    └──┬──┘
       │ [V6 プラス]
    ┌──┴──┐
    │ Router │ <- 経路情報 172.16.192.0/24 → 172.16.128.130
    └──┬──┘
       │ 172.16.128.1
       │
       │
      ─┴──┬──────────── 172.16.128.0/24
          │
          │
          │ 172.16.128.130 (vmbr0)
       ┌──┴──┐
       │ Proxmox │
       └──┬──┘
          │ 172.16.192.1 (vmbr1)
          │
          │
      ────┴──────────── 172.16.192.0/24

    自分としては、こんな感じのネットワークになっていると思っている。

    宅内のネットワーク(既存)は 172.16.128.0/24 で、インターネットに接続するルータの内側のインタフェースは 172.16.128.1 となっている。

    ここにミニ PC を置いて Proxmox を入れている(Proxmox のノード名は pve-n100 になっている)。インストール時に IP アドレスは 172.16.128.130 を振った。

    2: enp1s0: mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000
    link/ether e8:ff:1e:df:52:93 brd ff:ff:ff:ff:ff:ff

    4: vmbr0: mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e8:ff:1e:df:52:93 brd ff:ff:ff:ff:ff:ff
    inet 172.16.128.130/24 scope global vmbr0
    valid_lft forever preferred_lft forever
    inet6 fe80::eaff:1eff:fedf:5293/64 scope link
    valid_lft forever preferred_lft forever

    これがあまりちゃんと理解していないのだけれど enp1s0 という実インタフェース(物理的な NIC。実機に Linux を入れたときに出てきたことがある名前なのでこれは実インタフェースなんだろうと思っている。昔の記憶では eth0 だったような気がするけど、いつからか変わったような)に master vmbr0 とあるので vmbr0 というブリッジにぶら下がっている状態なんだと思っている。で、vmbr0172.16.128.130 というアドレスを持っているとか、よくわからないのだ。

    vmbr0 とかを見てネットワークインタフェースみたいなものかと勝手に思っているだけなのかもしれない(というか、勝手に思っているだけと思っているが)。

      ─┴──┬──────────── 172.16.128.0/24
          │
          │
          │ 172.16.128.130 (vmbr0)
       ┌──┴──┐
       │ Proxmox │
       └──┬──┘

    と書いてあるが、実際は、

      ─┴──┬──────────── 172.16.128.0/24
          ┃(enp1s0) ←これがブリッジ?
         ━┻━━┳━━━━━━━━━ ←ここに仮想的なネットワークがある?
             ┃ 172.16.128.130 (vmbr0) ←Proxmox が持つ仮想 NIC?
          ┌──┴──┐
          │ Proxmox │
          └──┬──┘

    なのかなとも思っている。enp1s0 は宅内ネットワークと vmbr0 がつながっているネットワークをつなぐための単純なブリッジということなんだろうかと。ここで vmbr0 がつながっているネットワークは単純にブリッジで宅内ネットワークとつながっているだけなので vmbr0 が宅内ネットワークにつながっていると理解しておいて問題ないかなと思っていた。

    しかしどうも単純にはつながってくれないような感じなのだ。最初の図のような状態と考えると、普通に内部ネットワークと宅内ネットワークの端末が通信できそうなものなのに(インターネットに接続しているルータの経路情報もあるので)、内部ネットワークから宅内ネットワークに出て内部ネットワークに戻ってこないようなのだ。iptables -t nat -A POSTROUTING -s 172.16.192.0/24 -o vmbr0 -j MASQUERADE と NAT をかけると戻ってきているような気がする。このあたりをちゃんと理解したいと思っている(ARP が通っていないような気がする。もしかしたら、ここまでに単純なチョンボをしているだけかもしれない)。

    いずれにせよ Linux Bridge をちゃんと理解しないとダメなんだろうなと思っている。昔、Netware サーバや FreeBSD 3.X でやっていた頃の知識では足りない状態なんだろうなと。

  • Proxmox に Windows 11 Home の VM をつくる

    Proxmox に Windows 11 Home の VM をつくる

    Proxmox に Windows 11 Home の VM をつくる。Proxmox はいわゆるミニ PC にいれているんだけれども、そもそもついていた Windows 11 Home を VM に入れるのは「その PC」で動かしているんだから良い、と思ったから。

    仮想化環境での使用
    このライセンスにより、お客様は、デバイスが物理であると仮想であるとにかかわらず、1 台のデバイスで使用するために本ソフトウェアの 1 つのインスタンスのみをインストールすることができます。

    とあるので、自分は本来のライセンスで仮想マシンで動かしても良いだろうと判断した。

    インストールメディア

    まずはインストール ISO を用意する。Microsoft の Windows 11 のダウンロードページからダウンロードする。「x64 デバイス用 Windows 11 ディスク イメージ (ISO) をダウンロードする」のプルダウンメニューで「Windows 11 (x64 デバイス用のマルチエディション ISO)」を選択して、その下にある「今すぐダウンロード」ボタンをクリックしてダウンロード。Proxmox の Web インタフェースで Datacenter > pve-n100 > local を選択する。ISO Image を選択すると「Upload」ボタンがあるのでクリックしてアップロードしておく。

    あと VirtIO の ISO も入れておく。Fedra のサイトのここから stable-virtio に入って virtio-win.iso をダウンロードする。Windows のインストールイメージと同様に Proxmox にアップロードしておく。

    VM をつくる

    次に VM をつくる。Proxmox の Web インタフェースで Datacenter > pve-n100 を選択する。pve-n100 はその人々が付ける名前なんで、各人違うと思う。

    画面右上の Create CT をクリックすると Create: Virtual Machine というダイアログが開くので、まずは General タブから設定していくが、適当な VM ID と名前を設定するだけ。

    OS タブでは Use CD/DVD disc image file (iso) を選択して、先ほど保存した ISO を選択する(local に保存した Windows 11 のインストール ISO)。Guest OS は Type で Microsoft Windows を選択する。自動的に Version が入る。
    あと Add additional drive for VirtIO drivers チェックボックスをオンにして、先ほど保存した ISO を選択する(local に保存した VirtIO の ISO)。

    どこを変更したか忘れた。BIOS を変更した記憶。SCSI Controller は VirtIO SCSI に、Add EFI Disk をオンにして EFI Strage は local-lvm に、Add TMP をオンにして TPM Strage も local-lvm に。

    Strage の sata500 は SATA の 500GB SSD を接続していて、それになります。Cache を Default にしているけど、Write back にした方が良かったのか?

    CPU では、Windows は 2 core 以上必要で、Type は host にした。

    ホストが 16 GB だけど常用はしないということで、Memory は 8192 MB にした。

    作成時にスクショを取れていなかった。Proxmox の内部ネットワーク vmbr1 に接続。

    あとは確認して進む。

    Windows のライセンス関係の情報等は firmware(?)に入っているようで、それを仮想マシンに反映する。以下、Proxmox ホストで確認。Proxmox の Web コンソールで Datacenter > pve-n100 を選択。Shell を選択してシェルで操作。

    とりあえずホストの PC の MSDM の情報を確認する。cat /sys/firmware/acpi/tables/MSDM で表示。モザイクがかかっている部分がプロダクトキーになる。

    /etc/pve/qemu-server/ に 100.conf というファイルが生成されているのでそのあたりで諸々を用意する。

    100/ というディレクトリを作成してその中に MSDM の情報を slic_table というファイル名で保存する。

    dmidecode というコマンドでホストの情報を確認する。使うのは UUID の値。/etc/pve/qemu-server/100.conf を編集する。

    smbios1uuid の 値を上記で確認した値にする。そして args を追加(args: -acpitable file=/etc/pve/qemu-server/100/slic_table)。file の値はさっき保存した場所とファイル名に合わせる。

    最後に

    Proxmox が Linux 上で動くので、ライセンスの問題はないと考えた。Proxmox が Windows の上で動いているなら別途ライセンスを入手する必要があるだろう。

    ライセンスについて問題はないと判断できるなら、上記のような方法で実機のライセンスを使って仮想マシンで動かすことはできたということで。

  • Proxmox の内部ネットワークに DHCP の LXC をあげる

    Proxmox の内部ネットワークに DHCP の LXC をあげる

    Proxmox の内部ネットワーク 172.16.192.0/24 に DHCP サーバをあげる。ちょっと VM をつないでテストしたりするときに必要なので。

    LXC の作成

    Proxmox で自ノード(pve-n100)を選択した状態で、右上の Create CT をクリックする。すると Create LXC Container ダイアログが開かれる。

    CT ID は任意の値を。Hostname にはわかりやすいものを。管理用の Password も入力しておく。

    Storage はテンプレートを保存した場所を指定。Template は Debian 13 を選択。

    Strage は任意(上図では、増設した SATA 500GB のディスクを指定)。Disk size は 4 で大丈夫。

    Core は 1 で大丈夫。

    Memory も 256 に減らしておく。Swap も同様。

    Bridge は内部ネットワークの vmbr1 にする。IPv4/CIDR は 172.16.192.1 が Proxmox ホストなので 172.16.192.2 とした。Gateway は 172.16.192.1 にする。

    DNS サーバは任意のものを。Google なら 8.8.8.8 にする。自分は自宅ネットワークの DNS サーバ 172.16.128.1 にした(上図では Typo して 172.16.192.1 にしてしまっている)。

    確認画面で内容を確認して Finish をクリックする。

    DHCP サーバのインストール・設定

    Proxmox Web コンソールで Datacenter > pve-n100 > 500 (dhcp01) を選択。Console を選択する。

    # apt update
    # apt upgrade -y
    
    # apt install -y dnsmasq
    # vi /etc/dnsmasq.d/vmbr1.conf
    # systemctl enable dnsmasq
    # systemctl restart dnsmasq
    # systemctl status dnsmasq
    
    # journalctl -u dnsmasq -f

    apt を更新しておく。

    その後 dnsmasq をインストール。vmbr1 のネットワークの設定ファイルを作成する。

    /etc/dnsmasq.d/vmbr1.conf:
    interface=eth0
    bind-interfaces
    dhcp-range=172.16.192.192,172.16.192.239,255.255.255.0,12h
    dhcp-option=3,172.16.192.1
    dhcp-option=6,172.16.128.1

    dhcp-range にあるように、リースする IP アドレスのレンジは 172.16.192.192~172.16.192.239 で、ネットマスクは 255.255.255.0 でリース期間は 12h となっている。dhcp-option=3 はゲートウェイの設定で、172.16.192.1 にしている(Proxmox ホスト)。dhcp-option=6 は DNS サーバで、172.16.128.1 にしている(宅内ネットワークの DNS サーバ)。

  • 悩み事

    悩み事

    今、使っている Linux のディストリビューションは Debian 13 trixie なんだけど、Desktop 環境は KDE Plasma を使っている。というか、最初から Gnome ではなく Plasma を使うようにインストールした。

    基本的に UI は Gnome より使いやすいと思っている。日本語変換は Fcitx5 + Mozc にして特に大きな問題はなし。ちょっと前は Wayland の関係か、特定のアプリケーションではオンザスポットで変換できなかったりしていたが、今は起こっていない(気付いていないのかもしれない)。

    しかし、目指すところは Plasma が良いのだが、使い心地は Gnome の方が良い。KDE Plasma では雑になっているのがデザインにおいても実装においても目立つ感じがするのだ。マウスを動かしたときにスカスカした感じがするとか、ボタンクリックしたときのキャレットの入り心地とか。Gnome が最高というわけではなく macOS と比べたら全然なんだけれど(macOS も最初に Mac OS X が出たときにはそれまでの Mac OS と違った感じで気持ち悪かった)。

    あまりにも気持ちが悪いので、Desktop 環境を Gnome にしようかと考えている。いっそのことデスクトップ環境を捨てて Twm とかも考えたけど、仕事の関係で Excel のファイルを開くとかすることが多々あり、そこからコピペとかを考えると LibreOffice あたりを使うことを考えるとおとなしく Gnome か Plasma あたりが落としどころなんだろう。

    Gnome を使うんなら、いっそ Ubuntu に戻した方が良いだろうなぁ。なんだかんだ言って Ubuntu は使いやすいから。Ubuntu だと基本から外れない限りは楽だ。