<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://slx.jp/feed.xml" rel="self" type="application/atom+xml" /><link href="https://slx.jp/" rel="alternate" type="text/html" hreflang="ja" /><updated>2026-02-21T22:09:08+09:00</updated><id>https://slx.jp/feed.xml</id><title type="html">slx.jp</title><author><name>saasan</name></author><entry><title type="html">[VS Code] Python の開発コンテナで Gemini CLI を使う</title><link href="https://slx.jp/blog/2026/02/21/vs-code-python%E3%81%AE%E9%96%8B%E7%99%BA%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%A7gemini-cli%E3%82%92%E4%BD%BF%E3%81%86.html" rel="alternate" type="text/html" title="[VS Code] Python の開発コンテナで Gemini CLI を使う" /><published>2026-02-21T22:05:00+09:00</published><updated>2026-02-21T22:05:00+09:00</updated><id>https://slx.jp/blog/2026/02/21/vs-code-python%E3%81%AE%E9%96%8B%E7%99%BA%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%A7gemini-cli%E3%82%92%E4%BD%BF%E3%81%86</id><content type="html" xml:base="https://slx.jp/blog/2026/02/21/vs-code-python%E3%81%AE%E9%96%8B%E7%99%BA%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%A7gemini-cli%E3%82%92%E4%BD%BF%E3%81%86.html"><![CDATA[<p>Python の開発コンテナ (Dev Containers) で Gemini CLI を使う方法のメモ。</p>

<p>「開発コンテナー: 開発コンテナー構成ファイルを追加…」で JSON ファイルを作成する場合は
「機能の選択」で Node.js を追加する。</p>

<p>devcontainer.json を直接編集する場合は以下の通り。</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">//</span><span class="w"> </span><span class="err">.devcontainer/devcontainer.json</span><span class="w">

</span><span class="p">{</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Python 3"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"image"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mcr.microsoft.com/devcontainers/python:2-3.14-trixie"</span><span class="p">,</span><span class="w">

    </span><span class="err">//</span><span class="w"> </span><span class="err">Node.jsを追加</span><span class="w">
    </span><span class="nl">"features"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"ghcr.io/devcontainers/features/node:1"</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span><span class="w">
    </span><span class="p">},</span><span class="w">

    </span><span class="err">//</span><span class="w"> </span><span class="err">コンテナ作成後にGemini</span><span class="w"> </span><span class="err">CLIをインストール</span><span class="w">
    </span><span class="nl">"postCreateCommand"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sh .devcontainer/install-dependencies.sh"</span><span class="p">,</span><span class="w">

    </span><span class="err">//</span><span class="w"> </span><span class="err">ホストのGemini</span><span class="w"> </span><span class="err">CLIの設定をコンテナ内にマウント</span><span class="w">
    </span><span class="nl">"mounts"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
        </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="s2">"${localEnv:HOME}${localEnv:USERPROFILE}/.gemini"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"target"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/home/vscode/.gemini"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"bind"</span><span class="w">
        </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># .devcontainer/install-dependencies.sh</span>

<span class="c"># Gemini CLIのインストール</span>
npm <span class="nb">install</span> <span class="nt">-g</span> @google/gemini-cli
</code></pre></div></div>]]></content><author><name>saasan</name></author><category term="blog" /><category term="VS Code" /><category term="Python" /><category term="開発コンテナ" /><category term="Dev Containers" /><category term="Gemini CLI" /><summary type="html"><![CDATA[Python の開発コンテナ (Dev Containers) で Gemini CLI を使う方法のメモ。]]></summary></entry><entry><title type="html">【2025年】今年買ってよかったもの</title><link href="https://slx.jp/blog/2025/12/29/2025%E5%B9%B4-%E4%BB%8A%E5%B9%B4%E8%B2%B7%E3%81%A3%E3%81%A6%E3%82%88%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE.html" rel="alternate" type="text/html" title="【2025年】今年買ってよかったもの" /><published>2025-12-29T20:50:00+09:00</published><updated>2025-12-29T20:50:00+09:00</updated><id>https://slx.jp/blog/2025/12/29/%E3%80%902025%E5%B9%B4%E3%80%91%E4%BB%8A%E5%B9%B4%E8%B2%B7%E3%81%A3%E3%81%A6%E3%82%88%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE</id><content type="html" xml:base="https://slx.jp/blog/2025/12/29/2025%E5%B9%B4-%E4%BB%8A%E5%B9%B4%E8%B2%B7%E3%81%A3%E3%81%A6%E3%82%88%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE.html"><![CDATA[<p>個人的に今年買ってよかったもののメモ</p>

<h2 id="samsung-galaxy-z-fold7">Samsung Galaxy Z Fold7</h2>

<p>Fold5 から買い替え。</p>

<p>大画面化と薄型化により、閉じていても普通のスマホとして使いやすくなったのが良い。</p>

<p>画面のパンチホールも気になる場面はほとんどない。</p>

<p>カメラが大きく飛び出しておりケースを付けても平坦にならないため、机に置いて使いづらいのが難点。</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0FGNN555T/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/51UtYeTOUlL._AC_SX679_.jpg" alt="Samsung Galaxy Z Fold7 256GB \|ジェットブラック\|Galaxy AI対応\|SIMフリースマホ 本体 端末\|FeliCa対応\|8.0インチ\|軽量215g\|IP48防水防塵\|QXGA+\|バッテリー 4,400mAh\|Android\|SM-F966QZKASJP" />
        <span class="affiliate-product-name">Samsung Galaxy Z Fold7 256GB \|ジェットブラック\|Galaxy AI対応\|SIMフリースマホ 本体 端末\|FeliCa対応\|8.0インチ\|軽量215g\|IP48防水防塵\|QXGA+\|バッテリー 4,400mAh\|Android\|SM-F966QZKASJP</span>
    </a>
    <a href="https://www.amazon.co.jp/dp/B0F1BZ8YGD/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/71FwUZ6OoJL._AC_SX679_.jpg" alt="Spigen 【創業18年の技術力】Galaxy Z Fold7 ケース ヒンジ保護 耐衝撃 MagFit対応 指紋防止 レンズ保護 タフアーマー・プロ・マグフィット ACS09549 (ブラック)" />
        <span class="affiliate-product-name">Spigen 【創業18年の技術力】Galaxy Z Fold7 ケース ヒンジ保護 耐衝撃 MagFit対応 指紋防止 レンズ保護 タフアーマー・プロ・マグフィット ACS09549 (ブラック)</span>
    </a>
    <a href="https://www.amazon.co.jp/dp/B0F8RDXNY5/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/71Q97RcfG7L._AC_SX679_.jpg" alt="Spigen Galaxy Z Fold7 ガラスフィルム EZ Fit Pro 貼り付けキット付き 9H硬度強化ガラス ナノコーティング 飛散防止 2枚入 AGL09576" />
        <span class="affiliate-product-name">Spigen Galaxy Z Fold7 ガラスフィルム EZ Fit Pro 貼り付けキット付き 9H硬度強化ガラス ナノコーティング 飛散防止 2枚入 AGL09576</span>
    </a>
</div>

<h2 id="スターツ-startts-su02-bk-suvbag-3way-タテ">スターツ STARTTS SU02 BK [SUVBAG 3WAY タテ]</h2>

<p>壊れても同じものに買い替えるほど気に入ってた
STARTTS FS02 が廃番になってしまったんで、同社の SU02 を購入。</p>

<p>PC/タブレットが入れられるクッション付きスペース、
内ポケットが多いが、それぞれに物を入れても互いに干渉しない作りなど、
整理しつつもたくさん入れられるのは変わらずで良い。</p>

<p>リュックのハーネス間を繋ぐチェストベルトが追加され、肩からすべり落ちなくなったのも良い。</p>

<p>13インチノートPCが入るギリギリのコンパクトサイズで取り回しがよかった
FS02 と比べ一回り大きいのが最初は不満だったけど、
その分収納力があるんで荷物が多いときは助かる。</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B085T3K6M6/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/41AniZsZaZL._AC_.jpg" alt="[STARTTS] SUV ビジネスバッグ SUVシリーズ" />
        <span class="affiliate-product-name">[STARTTS] SUV ビジネスバッグ SUVシリーズ</span>
    </a>
</div>

<h2 id="4-tb-ssd">4 TB SSD</h2>

<p>やはりストレージはデカければデカいほどいい</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0DFG4DL36/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/61YYKR4CZWL._AC_SX679_.jpg" alt="Western Digital ウエスタンデジタル WD BLACK M.2 SSD 内蔵 ヒートシンク搭載 4TB PS5動作確認済 NVMe PCIe Gen4 x4 WDS400T2XHE-EC SN850X 【国内正規取扱代理店】" />
        <span class="affiliate-product-name">Western Digital ウエスタンデジタル WD BLACK M.2 SSD 内蔵 ヒートシンク搭載 4TB PS5動作確認済 NVMe PCIe Gen4 x4 WDS400T2XHE-EC SN850X 【国内正規取扱代理店】</span>
    </a>
</div>

<h2 id="冷蔵庫とレンジ">冷蔵庫とレンジ</h2>

<p>20年くらい使ってた冷蔵庫とレンジを買い替え。</p>

<p>以前の冷蔵庫は冷凍庫に nosh 10個入れると他になにも入らなかった。
これは余裕があるんで、氷作ったり他の冷凍食品入れたりできて助かった。</p>

<p>以前のレンジは回転するタイプだったけど、
回転しないタイプになって大きめのものも温められるようになった。</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0DN4LZXH6/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/31Z2DOjGrmL._AC_SX679_.jpg" alt="シャープ 冷蔵庫 幅49.5cm 152L 両開き(つけかえどっちもドア) SJ-GD15P-B ピュアブラック 大容量冷凍室 プラズマクラスター 高品位ガラスドア" />
        <span class="affiliate-product-name">シャープ 冷蔵庫 幅49.5cm 152L 両開き(つけかえどっちもドア) SJ-GD15P-B ピュアブラック 大容量冷凍室 プラズマクラスター 高品位ガラスドア</span>
    </a>
    <a href="https://www.amazon.co.jp/dp/B0F1T24TC3/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/51pBN+RVp8L._AC_SX679_.jpg" alt="シャープ オーブンレンジ PLAINLY RE-WF185-B ブラック系[18L]" />
        <span class="affiliate-product-name">シャープ オーブンレンジ PLAINLY RE-WF185-B ブラック系[18L]</span>
    </a>
</div>

<h2 id="icカードセパレーター">ICカードセパレーター</h2>

<p>去年買った Secrid カードケースに非接触型 IC カードを入れているが、
ケースを開かずにタッチしたとき Suica の反応が悪い自販機あったため購入。
(改札だけなら問題ない)</p>

<p>これを間に挟んだら一発で問題が解消した。</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B08GYBT34F/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/61aadTRN2wL._AC_SY879_.jpg" alt="[Pretimo] 社員証 IDカード ICカードセパレーター 薄型 両面対応 ICカード 2枚用 防磁シート 磁気遮断 入退室 改札 エラー防止 干渉防止 パスケース対応" />
        <span class="affiliate-product-name">[Pretimo] 社員証 IDカード ICカードセパレーター 薄型 両面対応 ICカード 2枚用 防磁シート 磁気遮断 入退室 改札 エラー防止 干渉防止 パスケース対応</span>
    </a>
    <a href="https://www.amazon.co.jp/dp/B074MN1146/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/61Iur4dn5yL._AC_SX679_.jpg" alt="Secrid (シークリッド) - ミニ 財布 本革 RFID保護 カードケース カード最大12枚用, RFID財布。, ブラックオリーブ, 21 mm" />
        <span class="affiliate-product-name">Secrid (シークリッド) - ミニ 財布 本革 RFID保護 カードケース カード最大12枚用, RFID財布。, ブラックオリーブ, 21 mm</span>
    </a>
</div>

<h2 id="自転車用スマホホルダー">自転車用スマホホルダー</h2>

<p>駐輪場で他の自転車のハンドルでも当たったのか、
以前使っていたものが破損したためシリコン製のものを購入。</p>

<p>保持力は問題無し。プラスチック製と比べて壊れる心配もない。</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B08BHQSNP8/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/71Hb4ojFaZL._AC_SX679_.jpg" alt="【Bone】Bike Tie Pro 4 自転車 スマホホルダー シリコン製 ステム用 スマートフォンホルダー, 携帯ホルダー, 自転車すまほホルダー, ケータイホルダー, smartphone holder, 落下防止, 防振, 振動吸収, 滑り止め, 簡単取付, ロードバイク, bike phone mount, iPhone, android, 4.7〜7.2インチ 縦型 黒ブラック" />
        <span class="affiliate-product-name">【Bone】Bike Tie Pro 4 自転車 スマホホルダー シリコン製 ステム用 スマートフォンホルダー, 携帯ホルダー, 自転車すまほホルダー, ケータイホルダー, smartphone holder, 落下防止, 防振, 振動吸収, 滑り止め, 簡単取付, ロードバイク, bike phone mount, iPhone, android, 4.7〜7.2インチ 縦型 黒ブラック</span>
    </a>
</div>

<h2 id="クリーニングクロス">クリーニングクロス</h2>

<p>複数人が勧めてるのを見て半信半疑で購入したら、
本当に驚くくらいスマホ/タブレットの指紋などが綺麗に落ちる</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0725FN1HM/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/71UdQSM41pL._AC_SX679_.jpg" alt="エレコム クリーニングクロス 超極細繊維 Lサイズ クリーナー マイクロファイバー 水性/油性汚れ対応 強力 ウォッシャブル 【日本製】 グレー KCT-008GY" />
        <span class="affiliate-product-name">エレコム クリーニングクロス 超極細繊維 Lサイズ クリーナー マイクロファイバー 水性/油性汚れ対応 強力 ウォッシャブル 【日本製】 グレー KCT-008GY</span>
    </a>
</div>

<h2 id="ノートpcタブレットスタンド">ノートPC/タブレットスタンド</h2>

<p>5台まで立てられるんで平置きしてたのがスッキリ</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0DFWJJLSV/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/6146fZ2nr2L._AC_SX679_.jpg" alt="YIK TUNG ノートパソコンスタンド 縦置き 5台 収納 冷却 pcスタンド 縦型 収納 5スロット 幅調整可能 アルミ合金製 シリコーンゴム傷防止 パソコンスタンド 全機種対応 MacBook Pro Surface iPad HP Lenovo ThinkPad Huawei Surface Dell、HP、Lenovoなど" />
        <span class="affiliate-product-name">YIK TUNG ノートパソコンスタンド 縦置き 5台 収納 冷却 pcスタンド 縦型 収納 5スロット 幅調整可能 アルミ合金製 シリコーンゴム傷防止 パソコンスタンド 全機種対応 MacBook Pro Surface iPad HP Lenovo ThinkPad Huawei Surface Dell、HP、Lenovoなど</span>
    </a>
</div>

<h2 id="アイマスクとめぐりズム">アイマスクとめぐりズム</h2>

<p>先に買ったアイマスクも使い心地が良かったんだけど、
試しにポケモンスリープコラボのめぐりズムを買ってみたらこれがさらに良かった。</p>

<p>めぐりズムは目元を温めて緊張をほぐすのが本来の効果だけど、
開けたら最後の「使い捨て」だから「絶対に寝なきゃいけない」という気持ちになり、
布団の中でだらだらとスマホ使うのを止められるのが個人的には良い。</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0CQWX8942/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/71f2-EgEBuL._AC_SX679_.jpg" alt="aimeve アイマスク 睡眠用 安眠 快眠 【光の遮断 premium】 遮光率99.99％ (睡眠栄養指導士推薦) 3D 立体 軽量 目隠し (ブラック)" />
        <span class="affiliate-product-name">aimeve アイマスク 睡眠用 安眠 快眠 【光の遮断 premium】 遮光率99.99％ (睡眠栄養指導士推薦) 3D 立体 軽量 目隠し (ブラック)</span>
    </a>
    <a href="https://www.amazon.co.jp/dp/B0DDL7FSDP/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/81oNWJtWuaL._AC_SX679_PIbundle-12,TopRight,0,0_SH20_.jpg" alt="めぐりズム蒸気でホットアイマスク PoKéMoN企画品 12枚入" />
        <span class="affiliate-product-name">めぐりズム蒸気でホットアイマスク PoKéMoN企画品 12枚入</span>
    </a>
</div>

<h2 id="にゃんぷっぷーぬいぐるみ">にゃんぷっぷーぬいぐるみ</h2>

<p>かわいい</p>

<p>去年バージョン2を買ったけど、バージョン1が安くなってたので</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0D454WCKD/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/61VI0KFp8mL._AC_SX679_.jpg" alt="にゃんぷっぷーぬいぐるみ" />
        <span class="affiliate-product-name">にゃんぷっぷーぬいぐるみ</span>
    </a>
    <a href="https://www.amazon.co.jp/dp/B0DL2J55RJ/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/71jC-E6oyfL._AC_SX679_.jpg" alt="meowcat にゃんぷっぷー ぬいぐるみ" />
        <span class="affiliate-product-name">meowcat にゃんぷっぷー ぬいぐるみ</span>
    </a>
</div>

<h2 id="青を踏む">青を踏む</h2>

<p>ぱっつんツリ目好きなんでヒロインだけ見て連載読み始めた足フェチ漫画。</p>

<p>残念ながら足フェチ要素はよくわからんが、
こじらせてる跡辺くんを弄ぶ小悪魔の荊さんと天使の天川さんがかわいいし、話も面白い。</p>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0FFGV8VKB/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/81Pmr+zpItL._SY522_.jpg" alt="青を踏む　１巻 (ＦＵＺコミックス)" />
        <span class="affiliate-product-name">青を踏む　１巻 (ＦＵＺコミックス)</span>
    </a>
</div>]]></content><author><name>saasan</name></author><category term="blog" /><category term="ガジェット" /><summary type="html"><![CDATA[2025年に買ってよかったものをご紹介]]></summary></entry><entry><title type="html">コマンドラインを使用した VMware ESXi ホストのパッチ適用</title><link href="https://slx.jp/blog/2025/10/18/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9Fvmware-esxi%E3%83%9B%E3%82%B9%E3%83%88%E3%81%AE%E3%83%91%E3%83%83%E3%83%81%E9%81%A9%E7%94%A8.html" rel="alternate" type="text/html" title="コマンドラインを使用した VMware ESXi ホストのパッチ適用" /><published>2025-10-18T12:36:47+09:00</published><updated>2025-10-18T12:36:47+09:00</updated><id>https://slx.jp/blog/2025/10/18/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9Fvmware-esxi%E3%83%9B%E3%82%B9%E3%83%88%E3%81%AE%E3%83%91%E3%83%83%E3%83%81%E9%81%A9%E7%94%A8</id><content type="html" xml:base="https://slx.jp/blog/2025/10/18/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9Fvmware-esxi%E3%83%9B%E3%82%B9%E3%83%88%E3%81%AE%E3%83%91%E3%83%83%E3%83%81%E9%81%A9%E7%94%A8.html"><![CDATA[<p>手順を忘れがちなのでメモしておく。</p>

<h2 id="手順">手順</h2>

<ul>
  <li>事前に Broadcom のサイトからパッチをダウンロードしてデータストアに格納しておくこと</li>
  <li>SSH で接続できない場合は vCenter や Host Client の Web 画面から SSH のサービスを有効化すること</li>
</ul>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># バージョン確認</span>
vmware <span class="nt">-v</span>
<span class="c"># メンテナンスモードへの移行</span>
vim-cmd /hostsvc/maintenance_mode_enter
<span class="c"># ホストがメンテナンスモードか確認</span>
vim-cmd /hostsvc/hostsummary | <span class="nb">grep </span>inMaintenanceMode
<span class="c"># プロファイルリストの表示</span>
esxcli software sources profile list <span class="nt">--depot</span> /vmfs/volumes/datastore1/VMware-ESXi-8.0U3f-24784735-depot.zip
<span class="c"># ドライラン</span>
esxcli software profile update <span class="nt">--dry-run</span> <span class="nt">--profile</span> ESXi-8.0U3f-24784735-standard <span class="nt">--depot</span> /vmfs/volumes/datastore1/VMware-ESXi-8.0U3f-24784735-depot.zip
<span class="c"># パッチ適用</span>
esxcli software profile update <span class="nt">--profile</span> ESXi-8.0U3f-24784735-standard <span class="nt">--depot</span> /vmfs/volumes/datastore1/VMware-ESXi-8.0U3f-24784735-depot.zip
<span class="c"># ESXi ホストを再起動</span>
esxcli system shutdown reboot <span class="nt">-r</span> <span class="s1">'apply patch'</span>
</code></pre></div></div>
<p>再起動を待って SSH で再接続</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># メンテナンスモードの終了</span>
vim-cmd hostsvc/maintenance_mode_exit
<span class="c"># ホストがメンテナンスモードか確認</span>
vim-cmd /hostsvc/hostsummary | <span class="nb">grep </span>inMaintenanceMode
<span class="c"># バージョン確認</span>
vmware <span class="nt">-v</span>
</code></pre></div></div>

<h2 id="参考サイト">参考サイト</h2>

<p><a href="https://knowledge.broadcom.com/external/article/343840/patching-esxi-host-using-command-line.html" target="_blank">Patching ESXi host using Command Line</a></p>]]></content><author><name>saasan</name></author><category term="blog" /><category term="VMware" /><category term="ESXi" /><summary type="html"><![CDATA[手順を忘れがちなのでメモしておく。]]></summary></entry><entry><title type="html">Optimize-VHD に破壊された WSL の ext4.vhdx からファイルを取り出す</title><link href="https://slx.jp/blog/2025/07/26/optimize-vhd%E3%81%A7%E7%A0%B4%E5%A3%8A%E3%81%95%E3%82%8C%E3%81%9Fwsl%E3%81%AEext4.vhdx%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%99.html" rel="alternate" type="text/html" title="Optimize-VHD に破壊された WSL の ext4.vhdx からファイルを取り出す" /><published>2025-07-26T14:50:00+09:00</published><updated>2025-07-26T14:50:00+09:00</updated><id>https://slx.jp/blog/2025/07/26/optimize-vhd%E3%81%A7%E7%A0%B4%E5%A3%8A%E3%81%95%E3%82%8C%E3%81%9Fwsl%E3%81%AEext4.vhdx%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%99</id><content type="html" xml:base="https://slx.jp/blog/2025/07/26/optimize-vhd%E3%81%A7%E7%A0%B4%E5%A3%8A%E3%81%95%E3%82%8C%E3%81%9Fwsl%E3%81%AEext4.vhdx%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%99.html"><![CDATA[<p>WSL の VHDX ファイルが 850GB くらいまで肥大化してたんで
Optimize-VHD を実行したら、ファイルが破損して WSL が起動しなくなった。
Windows 11 自体でのマウントや diskpart での認識、
Hyper-V マネージャーのディスクの検査、市販 VHD 修復ソフトの無料デモなど試したけどどれもダメ。</p>

<p>最近開発は全部 WSL 上でやってたうえに、
作りかけのものは GitHub に push しておらずバックアップなし。
数ヶ月の作業が消えてしまった…。</p>

<h2 id="状況確認">状況確認</h2>

<p>諦めきれないので Claude に相談しつつ状況確認と復旧を試みる。</p>

<p>まずは ext4.vhdx をいつも使ってる Zorin OS へ持っていき <code class="language-plaintext highlighter-rouge">qemu-img info ext4.vhdx</code> を実行。<br />
※Zorin OS は Ubuntu 系 Linux ディストリビューション</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>apt <span class="nb">install </span>libguestfs-tools qemu-utils
<span class="o">(</span>略<span class="o">)</span>
<span class="nv">$ </span>qemu-img info ext4.vhdx
qemu-img: VHDX BAT entry 5939 start offset 211707494400 points after end of file <span class="o">(</span>27629977600<span class="o">)</span><span class="nb">.</span> Image has probably been truncated.
qemu-img: Could not open <span class="s1">'ext4.vhdx'</span>: Could not open <span class="s1">'ext4.vhdx'</span>: Invalid argument
</code></pre></div></div>

<h3 id="claude-による解説">Claude による解説</h3>

<blockquote>
  <p>このエラーメッセージは、VHDXファイルが<strong>深刻に破損している</strong>ことを示しています。</p>

  <h4 id="エラーの詳細解析">エラーの詳細解析</h4>

  <p><code class="language-plaintext highlighter-rouge">VHDX BAT entry 5939 start offset 211707494400 points after end of file (27629977600)</code></p>

  <p><strong>BAT (Block Allocation Table)</strong>: VHDXファイル内のデータブロックの位置を管理するテーブル</p>

  <ul>
    <li><strong>エントリ5939</strong>: データブロック#5939の位置情報</li>
    <li><strong>start offset 211707494400</strong>: このブロックが211GB地点にあるとBAT記録</li>
    <li><strong>end of file (27629977600)</strong>: 実際のファイルサイズは約27GB</li>
    <li><strong>問題</strong>: 27GBしかないファイルの211GB地点を参照しようとしている</li>
  </ul>

  <p><code class="language-plaintext highlighter-rouge">Image has probably been truncated</code></p>

  <p>ファイルが途中で切断されている（不完全な状態）</p>

  <p><code class="language-plaintext highlighter-rouge">Could not open 'ext4.vhdx': Invalid argument</code></p>

  <p>QEMU/libguestfsがファイルを認識できない</p>
</blockquote>

<p>うおお…</p>

<blockquote>
  <p><strong>深刻に破損している</strong></p>
</blockquote>

<p>終わった……</p>

<p>と思ったが Claude は部分的なデータ救出方法も提案してくれた。</p>

<h2 id="claude-による現実的な復旧方法の提案">Claude による現実的な復旧方法の提案</h2>

<blockquote>
  <h3 id="期待できる救出レベル">期待できる救出レベル</h3>

  <ul>
    <li><strong>完全復旧</strong>: 困難（BAT破損のため）</li>
    <li><strong>部分データ</strong>: 可能性あり</li>
    <li><strong>設定ファイル</strong>: 救出可能かも</li>
  </ul>

  <h3 id="推奨アプローチ">推奨アプローチ</h3>

  <ol>
    <li><strong>ddrescue</strong>で読み取り可能な部分をコピー</li>
    <li>部分イメージから<strong>testdisk/photorec</strong>でファイル救出</li>
    <li>重要データのみ手動で救出</li>
    <li>WSL環境は<strong>再構築</strong></li>
  </ol>

  <h3 id="データ救出の順序">データ救出の順序</h3>

  <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1. 部分コピー作成</span>
ddrescue <span class="nt">-d</span> <span class="nt">-r3</span> ext4.vhdx recovered.raw recovery.log

<span class="c"># 2. パーティション情報の確認</span>
testdisk recovered.raw

<span class="c"># 3. ファイル救出</span>
photorec recovered.raw
</code></pre></div>  </div>

  <p>残念ながら、このレベルの破損では完全復旧は困難です。部分的なデータ救出に焦点を当てることをお勧めします。</p>
</blockquote>

<h2 id="データの救出">データの救出</h2>

<h3 id="ddrescue">ddrescue</h3>

<p><code class="language-plaintext highlighter-rouge">ddrescue -d -r3 ext4.vhdx recovered.raw recovery.log</code></p>

<p><code class="language-plaintext highlighter-rouge">ddrescue</code> は不良セクタの多いディスクを扱える dd の強化版みたいなものらしい
(<a href="https://ja.wikipedia.org/wiki/Ddrescue" target="_blank">Wikipedia</a> 調べ)。</p>

<p><code class="language-plaintext highlighter-rouge">-d</code> が入力ファイルへのダイレクトディスクアクセス、<code class="language-plaintext highlighter-rouge">-r</code> が試行回数の指定。
問題なさそうなのでそのまま実行したあと、しばらく待つと <code class="language-plaintext highlighter-rouge">recovered.raw</code> が出力された。</p>

<h3 id="testdisk">TestDisk</h3>

<p><code class="language-plaintext highlighter-rouge">testdisk recovered.raw</code></p>

<p><code class="language-plaintext highlighter-rouge">testdisk</code> は失われたパーティションの復元や壊れたファイルシステムの復元ができるらしい
(<a href="https://ja.wikipedia.org/wiki/TestDisk" target="_blank">Wikipedia</a> 調べ)。</p>

<p>実行してみたが ext4 パーティションの存在が確認できただけで、ファイルの救出には至らなかった。</p>

<h3 id="photorec">PhotoRec</h3>

<p><code class="language-plaintext highlighter-rouge">photorec recovered.raw</code></p>

<p><code class="language-plaintext highlighter-rouge">photorec</code> は失われたファイルを回復することができるらしい
(<a href="https://ja.wikipedia.org/wiki/PhotoRec" target="_blank">Wikipedia</a> 調べ)。</p>

<p>救出対象とするファイルは拡張子単位で指定可能だが、
今回はできる限り復旧したかったため指定せずに実行。
約15万ファイルが出力された。</p>

<p>救出されたファイルは <code class="language-plaintext highlighter-rouge">recup_dir.x</code> というディレクトリに
<code class="language-plaintext highlighter-rouge">fxxxxxxx.ext</code> というファイル名で出力される (<code class="language-plaintext highlighter-rouge">x</code> は数字)。
救出したかった JavaScript と JSON ファイルは
テキストファイル (<code class="language-plaintext highlighter-rouge">*.txt</code>) として出力されていた。</p>

<p>以下のように検索・コピーして、ファイルの一部を取り出すことができた。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 検索</span>
<span class="nv">$ </span>find recup_dir.<span class="k">*</span> <span class="nt">-name</span> <span class="s1">'*.txt'</span> <span class="nt">-print0</span> | xargs <span class="nt">-0</span> <span class="nb">grep</span> <span class="nt">-l</span> <span class="s1">'検索する文字列'</span>
<span class="c"># コピー</span>
<span class="nv">$ </span>find recup_dir.<span class="k">*</span> <span class="nt">-name</span> <span class="s1">'*.txt'</span> <span class="nt">-print0</span> | xargs <span class="nt">-0</span> <span class="nb">grep</span> <span class="nt">-l</span> <span class="s1">'検索する文字列'</span> | xargs <span class="nt">-I</span> <span class="o">{}</span> <span class="nb">cp</span> <span class="o">{}</span> コピー先
</code></pre></div></div>

<h2 id="まとめ">まとめ</h2>

<p>ちゃんとバックアップは取ろう！</p>]]></content><author><name>saasan</name></author><category term="blog" /><category term="WSL" /><summary type="html"><![CDATA[バックアップは取っとけ！]]></summary></entry><entry><title type="html">「WSL の起動中にエラーが発生しました」への対応</title><link href="https://slx.jp/blog/2025/07/13/wsl-%E3%81%AE%E8%B5%B7%E5%8B%95%E4%B8%AD%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F-%E3%81%B8%E3%81%AE%E5%AF%BE%E5%BF%9C.html" rel="alternate" type="text/html" title="「WSL の起動中にエラーが発生しました」への対応" /><published>2025-07-13T23:45:00+09:00</published><updated>2025-07-13T23:45:00+09:00</updated><id>https://slx.jp/blog/2025/07/13/%E3%80%8Cwsl-%E3%81%AE%E8%B5%B7%E5%8B%95%E4%B8%AD%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%8D%E3%81%B8%E3%81%AE%E5%AF%BE%E5%BF%9C</id><content type="html" xml:base="https://slx.jp/blog/2025/07/13/wsl-%E3%81%AE%E8%B5%B7%E5%8B%95%E4%B8%AD%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F-%E3%81%B8%E3%81%AE%E5%AF%BE%E5%BF%9C.html"><![CDATA[<p>結論から言うと Docker Desktop を更新したら直った。</p>

<p>今後のために原因の確認方法を残しておく。</p>

<ol>
  <li>イベントビューアーを起動</li>
  <li>「Windows ログ」&gt;「Application」を開く</li>
  <li>右側の「現在のログをフィルター…」をクリック</li>
  <li>イベントソースに「WSL」と入力してフィルタをかける</li>
</ol>

<p>最新の警告イベント内容を確認すると以下の通りだった。</p>

<blockquote>
  <p>ソース “WSL” からのイベント ID 0 の説明が見つかりません。このイベントを発生させるコンポーネントがローカル コンピューターにインストールされていないか、インストールが壊れています。ローカル コンピューターにコンポーネントをインストールするか、コンポーネントを修復してください。</p>

  <p>イベントが別のコンピューターから発生している場合、イベントと共に表示情報を保存する必要があります。</p>

  <p>イベントには次の情報が含まれています:</p>

  <p>Unknown key ‘automount.crossDistro’ in /etc/wsl.conf:3</p>

  <p>メッセージ リソースは存在しますが、メッセージがメッセージ テーブルに見つかりませんでした。</p>
</blockquote>

<p><code class="language-plaintext highlighter-rouge">/etc/wsl.conf</code> に問題があるようだが
Ubuntu のものをを見ても <code class="language-plaintext highlighter-rouge">automount.crossDistro</code> という記述はない。</p>

<p><code class="language-plaintext highlighter-rouge">wsl -l -v</code> でディストリビューションを確認する。</p>

<pre><code class="language-cmd">&gt;wsl -l -v
  NAME              STATE           VERSION
* Ubuntu            Running         2
  docker-desktop    Running         2
</code></pre>

<p>Ubuntu 以外に
<code class="language-plaintext highlighter-rouge">docker-desktop</code> があるため Docker の問題と判断。
Docker Desktop を更新したところ問題が解消した。</p>

<p>更新前に確認するのを忘れていたが、
更新後に <code class="language-plaintext highlighter-rouge">docker-desktop</code> の
<code class="language-plaintext highlighter-rouge">/etc/wsl.conf</code> を確認しところ以下のようになっていた。</p>

<pre><code class="language-cmd">&gt;wsl -d docker-desktop cat /etc/wsl.conf
[automount]
root = /mnt/host
options = "metadata"
[interop]
enabled = true
</code></pre>]]></content><author><name>saasan</name></author><category term="blog" /><category term="WSL" /><category term="Docker" /><summary type="html"><![CDATA[結論から言うと Docker Desktop を更新したら直った。]]></summary></entry><entry><title type="html">Claude for Desktop で AWS Documentation MCP Server を使ってみる</title><link href="https://slx.jp/blog/2025/06/22/claude-for-desktop%E3%81%A7aws-documentation-mcp-server%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B.html" rel="alternate" type="text/html" title="Claude for Desktop で AWS Documentation MCP Server を使ってみる" /><published>2025-06-22T23:00:00+09:00</published><updated>2025-06-22T23:00:00+09:00</updated><id>https://slx.jp/blog/2025/06/22/claude-for-desktop%E3%81%A7aws-documentation-mcp-server%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B</id><content type="html" xml:base="https://slx.jp/blog/2025/06/22/claude-for-desktop%E3%81%A7aws-documentation-mcp-server%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B.html"><![CDATA[<p>MCP の使い道を調べているうちに知った
AWS Documentation MCP Server が便利そうだったので使ってみた。</p>

<h2 id="aws-documentation-mcp-server-とは">AWS Documentation MCP Server とは？</h2>

<p>AI アシスタントが AWS の公式ドキュメントを参照して回答できるようにする MCP Server。
これにより、AWS に関する質問に対してより正確で詳細な回答が提供されるようになる。</p>

<p><a href="https://awslabs.github.io/mcp/servers/aws-documentation-mcp-server/" target="_blank">AWS Documentation MCP Server - AWS MCP Servers</a></p>

<h2 id="aws-documentation-mcp-server-を起動する">AWS Documentation MCP Server を起動する</h2>

<p>GitHub の
<a href="https://github.com/awslabs/mcp" target="_blank">awslabs/mcp</a>
を git clone して docker build で起動するだけ。</p>

<p>uv と Python のインストールから説明しているサイトもあるが、
 現状 Dockerfile が提供されておりインストール不要になっている。</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone git@github.com:awslabs/mcp.git aws-mcp
docker build <span class="nt">-t</span> mcp/aws-documentation aws-mcp/src/aws-documentation-mcp-server
</code></pre></div></div>

<h2 id="claude-for-desktop-の設定">Claude for Desktop の設定</h2>

<ol>
  <li>ウィンドウ左上のハンバーガーボタンから「ファイル &gt; 設定…」をクリックする
<img src="/assets/images/blog/2025-06-22/claude-for-desktop1.png" alt="設定画面を開く" /></li>
  <li>「開発者」をクリックする</li>
  <li>「構成を編集」をクリックする</li>
  <li><code class="language-plaintext highlighter-rouge">claude_desktop_config.json</code> があるフォルダが開く</li>
  <li><code class="language-plaintext highlighter-rouge">claude_desktop_config.json</code> へ
<a href="https://awslabs.github.io/mcp/servers/aws-documentation-mcp-server/#installation" target="_blank">Installation</a>
にかかれている Docker 用 JSON を書き込む
1． 設定画面を閉じる</li>
  <li>ウィンドウ左上のハンバーガーボタンから「ファイル &gt; 終了」をクリックし Claude for Desktop を終了させる</li>
  <li>再度 Claude for Desktop を起動すると、チャット入力欄のメニューに追加されている
<img src="/assets/images/blog/2025-06-22/claude-for-desktop2.png" alt="チャット入力欄のメニューに追加された AWS Documentation MCP Server" /></li>
</ol>

<h2 id="使ってみる">使ってみる</h2>

<p>AWS に関する質問をすると外部連携の許可を何度か確認される。</p>

<p><img src="/assets/images/blog/2025-06-22/claude-for-desktop3.png" alt="外部連携の許可" /></p>

<p>しばらく待つと AWS の公式ドキュメントを元にした回答が提示される。</p>

<p><img src="/assets/images/blog/2025-06-22/claude-for-desktop4.png" alt="AWS の公式ドキュメントを元にした回答" /></p>]]></content><author><name>saasan</name></author><category term="blog" /><category term="Claude" /><category term="AWS" /><category term="MCP" /><summary type="html"><![CDATA[MCP の使い道を調べているうちに知った AWS Documentation MCP Server が便利そうだったので使ってみた。]]></summary></entry><entry><title type="html">cloud-config で固定 IP アドレスを設定し Amazon Linux 2023 をオンプレミスの VMware ESXi サーバ上にデプロイする</title><link href="https://slx.jp/blog/2025/06/22/cloud-config%E3%81%A7%E5%9B%BA%E5%AE%9Aip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97amazon-linux-2023%E3%82%92%E3%82%AA%E3%83%B3%E3%83%97%E3%83%AC%E3%83%9F%E3%82%B9%E3%81%AEvmware-esxi%E3%82%B5%E3%83%BC%E3%83%90%E4%B8%8A%E3%81%AB%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%99%E3%82%8B.html" rel="alternate" type="text/html" title="cloud-config で固定 IP アドレスを設定し Amazon Linux 2023 をオンプレミスの VMware ESXi サーバ上にデプロイする" /><published>2025-06-22T09:55:00+09:00</published><updated>2025-06-22T09:55:00+09:00</updated><id>https://slx.jp/blog/2025/06/22/cloud-config%E3%81%A7%E5%9B%BA%E5%AE%9Aip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97amazon-linux-2023%E3%82%92%E3%82%AA%E3%83%B3%E3%83%97%E3%83%AC%E3%83%9F%E3%82%B9%E3%81%AEvmware-esxi%E3%82%B5%E3%83%BC%E3%83%90%E4%B8%8A%E3%81%AB%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%99%E3%82%8B</id><content type="html" xml:base="https://slx.jp/blog/2025/06/22/cloud-config%E3%81%A7%E5%9B%BA%E5%AE%9Aip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97amazon-linux-2023%E3%82%92%E3%82%AA%E3%83%B3%E3%83%97%E3%83%AC%E3%83%9F%E3%82%B9%E3%81%AEvmware-esxi%E3%82%B5%E3%83%BC%E3%83%90%E4%B8%8A%E3%81%AB%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%99%E3%82%8B.html"><![CDATA[<p>AWS の公式ドキュメントが分かりづらい上に面倒な手順となっているため、
簡単にデプロイできる手順をメモしておく。</p>

<h2 id="amazon-linux-2023-ova-ファイルのダウンロード">Amazon Linux 2023 OVA ファイルのダウンロード</h2>

<p><a href="https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/outside-ec2-download.html" target="_blank">KVM、VMware、Hyper-V で使用する Amazon Linux 2023 イメージをダウンロードする - Amazon Linux 2023</a>
に書かれている
<a href="https://cdn.amazonlinux.com/al2023/os-images/latest/" target="_blank">cdn.amazonlinux.com</a>
から VMware 用の OVA ファイルをダウンロードする。</p>

<h2 id="ovftool-のダウンロードとインストール">ovftool のダウンロードとインストール</h2>

<p><a href="https://developer.broadcom.com/tools/open-virtualization-format-ovf-tool/latest" target="_blank">ovftool</a>
をダウンロード・展開しパスを通しておく。
base64 コマンドを使用するため、Windows 環境の場合は WSL に Linux 版を入れいると楽。</p>

<h2 id="cloud-config-ファイルの準備">cloud-config ファイルの準備</h2>

<p><a href="https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/seed-iso.html" target="_blank">公式の手順</a>
だと <code class="language-plaintext highlighter-rouge">meta-data</code>, <code class="language-plaintext highlighter-rouge">user-data</code>, <code class="language-plaintext highlighter-rouge">network-config</code> の3ファイルを用意し
<code class="language-plaintext highlighter-rouge">seed.iso</code> ディスクイメージを作成するが、
<code class="language-plaintext highlighter-rouge">network-config</code> と <code class="language-plaintext highlighter-rouge">seed.iso</code> は不要。</p>

<p>以下のように <code class="language-plaintext highlighter-rouge">meta-data</code> と <code class="language-plaintext highlighter-rouge">user-data</code> を作成し、
<code class="language-plaintext highlighter-rouge">meta-data</code> にネットワーク設定を記載すればよい。</p>

<p>meta-data.yaml</p>
<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#cloud-config</span>
<span class="na">local-hostname</span><span class="pi">:</span> <span class="s">al2023-server</span>

<span class="na">network</span><span class="pi">:</span>
  <span class="na">version</span><span class="pi">:</span> <span class="m">2</span>
  <span class="na">ethernets</span><span class="pi">:</span>
    <span class="na">ens192</span><span class="pi">:</span>
      <span class="na">addresses</span><span class="pi">:</span>
        <span class="pi">-</span> <span class="s">192.168.1.100/24</span>
      <span class="na">routes</span><span class="pi">:</span>
        <span class="pi">-</span> <span class="na">to</span><span class="pi">:</span> <span class="s">0.0.0.0/0</span>
          <span class="na">via</span><span class="pi">:</span> <span class="s">192.168.1.1</span>
      <span class="na">nameservers</span><span class="pi">:</span>
        <span class="na">addresses</span><span class="pi">:</span>
          <span class="pi">-</span> <span class="s">8.8.8.8</span>
          <span class="pi">-</span> <span class="s">8.8.4.4</span>
</code></pre></div></div>

<p>user-data.yaml</p>
<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#cloud-config</span>
<span class="na">users</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s">default</span>
  <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">ec2-user</span>
    <span class="na">sudo</span><span class="pi">:</span> <span class="s2">"</span><span class="s">ALL=(ALL)</span><span class="nv"> </span><span class="s">NOPASSWD:ALL"</span>
    <span class="na">groups</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">wheel</span><span class="pi">,</span> <span class="nv">adm</span><span class="pi">,</span> <span class="nv">systemd-journal</span><span class="pi">]</span>
    <span class="na">ssh_authorized_keys</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">ssh-rsa ssh-key</span>

<span class="na">timezone</span><span class="pi">:</span> <span class="s">Asia/Tokyo</span>
<span class="na">locale</span><span class="pi">:</span> <span class="s">ja_JP.UTF-8</span>
</code></pre></div></div>

<h2 id="ovftool-を使用したデプロイ">ovftool を使用したデプロイ</h2>

<p>仮想マシンの構成パラメータ <code class="language-plaintext highlighter-rouge">guestinfo.metadata</code> 等に作成済みの cloud-config を指定し、
ovftool で OVA ファイルを ESXi サーバにデプロイする。</p>

<p><code class="language-plaintext highlighter-rouge">guestinfo.metadata</code> 等は <code class="language-plaintext highlighter-rouge">--extraConfig</code> を使用して指定する。
AI に聞くと <code class="language-plaintext highlighter-rouge">--prop</code> で指定する方法を提案されるがそれは誤り。</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ovftool <span class="se">\</span>
  <span class="nt">--name</span><span class="o">=</span>al2023-server <span class="se">\</span>
  <span class="nt">--datastore</span><span class="o">=</span>datastore1 <span class="se">\</span>
  <span class="nt">--diskMode</span><span class="o">=</span>thin <span class="se">\</span>
  <span class="nt">--network</span><span class="o">=</span><span class="s2">"VM Network"</span> <span class="se">\</span>
  <span class="nt">--allowExtraConfig</span> <span class="se">\</span>
  <span class="nt">--extraConfig</span>:guestinfo.metadata<span class="o">=</span><span class="s2">"</span><span class="si">$(</span><span class="nb">base64</span> <span class="nt">-w0</span> meta-data.yaml<span class="si">)</span><span class="s2">"</span> <span class="se">\</span>
  <span class="nt">--extraConfig</span>:guestinfo.metadata.encoding<span class="o">=</span><span class="s2">"base64"</span> <span class="se">\</span>
  <span class="nt">--extraConfig</span>:guestinfo.userdata<span class="o">=</span><span class="s2">"</span><span class="si">$(</span><span class="nb">base64</span> <span class="nt">-w0</span> user-data.yaml<span class="si">)</span><span class="s2">"</span> <span class="se">\</span>
  <span class="nt">--extraConfig</span>:guestinfo.userdata.encoding<span class="o">=</span><span class="s2">"base64"</span> <span class="se">\</span>
  <span class="nt">--powerOn</span> <span class="se">\</span>
  al2023-vmware_esx-2023.7.20250609.0-kernel-6.1-x86_64.xfs.gpt.ova <span class="se">\</span>
  <span class="s1">'vi://&lt;YOUR_USER&gt;@&lt;ESXI_HOST_IP&gt;'</span>
</code></pre></div></div>]]></content><author><name>saasan</name></author><category term="blog" /><category term="VMware" /><category term="ESXi" /><category term="Amazon Linux 2023" /><category term="cloud-config" /><summary type="html"><![CDATA[AWS の公式ドキュメントが分かりづらい上に面倒な手順となっているため、 簡単にデプロイできる手順をメモしておく。]]></summary></entry><entry><title type="html">VMware ESXi 上に Flatcar Container Linux のサーバを立てる</title><link href="https://slx.jp/blog/2025/03/22/vmware-esxi%E4%B8%8A%E3%81%ABflatcar-container-linux%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E7%AB%8B%E3%81%A6%E3%82%8B.html" rel="alternate" type="text/html" title="VMware ESXi 上に Flatcar Container Linux のサーバを立てる" /><published>2025-03-22T23:55:00+09:00</published><updated>2025-03-22T23:55:00+09:00</updated><id>https://slx.jp/blog/2025/03/22/vmware-esxi%E4%B8%8A%E3%81%ABflatcar-container-linux%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E7%AB%8B%E3%81%A6%E3%82%8B</id><content type="html" xml:base="https://slx.jp/blog/2025/03/22/vmware-esxi%E4%B8%8A%E3%81%ABflatcar-container-linux%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E7%AB%8B%E3%81%A6%E3%82%8B.html"><![CDATA[<p>ChatGPT に Docker コンテナの実行・運用に最適な OS を聞いたところ、
その中のひとつに「Flatcar Container Linux」があった。
気になったのでとりあえず VMware ESXi 上にサーバを立ててみた。</p>

<h2 id="flatcar-container-linux-とは">Flatcar Container Linux とは？</h2>

<p>Flatcar Container Linux は、コンテナの運用に特化した軽量 Linux ディストリビューションである。
自動更新機能を備え、シンプルな構成でセキュリティと安定性を重視している。</p>

<h3 id="特徴">特徴</h3>

<ul>
  <li><strong>自動アップデート</strong>: システムのアップデートが自動で適用され、セキュリティと安定性を確保する。</li>
  <li><strong>イミュータブルな設計</strong>: ルートファイルシステムが書き換え不可のため、一貫性が保たれ、運用時のトラブルを低減できる。</li>
</ul>

<p>本記事では、VMware ESXi 上に Flatcar Container Linux を導入する手順を解説する。</p>

<h2 id="事前準備">事前準備</h2>

<p>作業 PC にて事前に以下を準備しておく。</p>

<h3 id="vmware-用-ova-ファイルのダウンロード">VMware 用 OVA ファイルのダウンロード</h3>

<p>OVA ファイルのダウンロード元は、以下の公式ドキュメントに書かれている。</p>

<ul>
  <li><a href="https://www.flatcar.org/docs/latest/installing/cloud/vmware/" target="_blank">Running Flatcar Container Linux on VMware</a></li>
</ul>

<h3 id="ovf-tool-のインストール">OVF Tool のインストール</h3>

<p>仮想マシン作成時に Base64 エンコードした設定ファイルを指定する必要がある。
GUI でも構築可能だが、CLI で
<a href="https://developer.broadcom.com/tools/open-virtualization-format-ovf-tool/latest" target="_blank">OVF Tool</a>
を使用したほうが楽。</p>

<h2 id="butane-設定ファイルを作成">Butane 設定ファイルを作成</h2>

<p>Butane 設定ファイル (<code class="language-plaintext highlighter-rouge">butane_config.yaml</code>) を作成する。
以下は静的 IP アドレスとホスト名、SSH 公開鍵の設定例である。</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">variant</span><span class="pi">:</span> <span class="s">flatcar</span>
<span class="na">version</span><span class="pi">:</span> <span class="s">1.0.0</span>

<span class="na">passwd</span><span class="pi">:</span>
  <span class="na">users</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">core</span>
      <span class="na">ssh_authorized_keys</span><span class="pi">:</span>
        <span class="pi">-</span> <span class="s">SSH公開鍵</span>

<span class="na">storage</span><span class="pi">:</span>
  <span class="na">files</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="na">path</span><span class="pi">:</span> <span class="s">/etc/systemd/network/00-static.network</span>
      <span class="na">mode</span><span class="pi">:</span> <span class="m">0644</span>
      <span class="na">contents</span><span class="pi">:</span>
        <span class="na">inline</span><span class="pi">:</span> <span class="pi">|</span>
          <span class="s">[Match]</span>
          <span class="s">Name=ens192</span>
          <span class="s">[Network]</span>
          <span class="s">Address=192.168.xxx.xxx/24</span>
          <span class="s">Gateway=192.168.xxx.xxx</span>
          <span class="s">DNS=192.168.xxx.xxx</span>
          <span class="s">LinkLocalAddressing=no</span>
          <span class="s">IPv6AcceptRA=no</span>
    <span class="pi">-</span> <span class="na">path</span><span class="pi">:</span> <span class="s">/etc/hostname</span>
      <span class="na">mode</span><span class="pi">:</span> <span class="m">0644</span>
      <span class="na">contents</span><span class="pi">:</span>
        <span class="na">inline</span><span class="pi">:</span> <span class="s">ホスト名</span>
</code></pre></div></div>

<h2 id="ignition-設定ファイルへトランスパイル">Ignition 設定ファイルへトランスパイル</h2>

<p>Butane 設定ファイルを Ignition 設定ファイル (<code class="language-plaintext highlighter-rouge">ignition_config.json</code>) へ変換する。</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">--interactive</span> <span class="nt">--rm</span> quay.io/coreos/butane:release <span class="nt">--pretty</span> <span class="nt">--strict</span> &lt; butane_config.yaml <span class="o">&gt;</span> ignition_config.json
</code></pre></div></div>

<h2 id="ignition-設定ファイルを検証">Ignition 設定ファイルを検証</h2>

<p>変換した <code class="language-plaintext highlighter-rouge">ignition_config.json</code> を検証する。</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">--pull</span><span class="o">=</span>always <span class="nt">--rm</span> <span class="nt">-i</span> quay.io/coreos/ignition-validate:release - &lt; ignition_config.json
</code></pre></div></div>

<p>エラーメッセージが表示されなければ問題なし。</p>

<h2 id="ovf-tool-で-ignition-設定ファイルを指定して起動">OVF Tool で Ignition 設定ファイルを指定して起動</h2>

<p>作業 PC にて ovftool を実行する。
オプションとして Ignition 設定ファイルを指定し
ESXi サーバ上で仮想マシンを作成・起動する。</p>

<p><code class="language-plaintext highlighter-rouge">vi://～</code> は デプロイ先の ESXi サーバの情報。</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ovftool <span class="se">\</span>
  <span class="nt">--name</span><span class="o">=</span>testvm <span class="se">\</span>
  <span class="nt">--datastore</span><span class="o">=</span>datastore1 <span class="se">\</span>
  <span class="nt">--diskMode</span><span class="o">=</span>thin <span class="se">\</span>
  <span class="nt">--network</span><span class="o">=</span><span class="s2">"VM Network"</span> <span class="se">\</span>
  <span class="nt">--allowExtraConfig</span> <span class="se">\</span>
  <span class="nt">--extraConfig</span>:guestinfo.ignition.config.data<span class="o">=</span><span class="s2">"</span><span class="si">$(</span><span class="nb">base64</span> <span class="nt">-w0</span> ignition_config.json<span class="si">)</span><span class="s2">"</span> <span class="se">\</span>
  <span class="nt">--extraConfig</span>:guestinfo.ignition.config.data.encoding<span class="o">=</span><span class="s2">"base64"</span> <span class="se">\</span>
  <span class="nt">--powerOn</span> <span class="se">\</span>
  <span class="nt">--overwrite</span> <span class="nt">--powerOffTarget</span> <span class="se">\</span>
  <span class="nt">--X</span>:waitForIp <span class="se">\</span>
  flatcar_production_vmware_ova.ova <span class="se">\</span>
  <span class="s1">'vi://&lt;YOUR_USER&gt;@&lt;ESXI_HOST_IP&gt;'</span>
</code></pre></div></div>

<p>実行後、コンソール上に設定した IP アドレスが表示されれば OK。
SSH で接続し <code class="language-plaintext highlighter-rouge">docker</code> コマンドも実行できた。</p>

<h2 id="docker-サービスの自動起動設定">Docker サービスの自動起動設定</h2>

<p>標準状態では Docker サービスが無効となっている。</p>

<p>Flatcar は自動アップデート機能があり、システムが自動的に再起動することがある。
この時、Docker サービスが無効のままだと、再起動後にコンテナが自動で立ち上がらない。</p>

<h3 id="必要な設定">必要な設定</h3>

<h4 id="docker-サービスの有効化">Docker サービスの有効化</h4>

<p><a href="https://www.flatcar.org/docs/latest/container-runtimes/getting-started-with-docker/#permanently-running-a-container" target="_blank">Permanently running a container</a>
に書かれている設定を追加し Docker サービスを有効化する。</p>

<h4 id="コンテナの再起動ポリシー設定">コンテナの再起動ポリシー設定</h4>

<p>コンテナ作成時に <code class="language-plaintext highlighter-rouge">--restart=always</code> または <code class="language-plaintext highlighter-rouge">--restart=unless-stopped</code> オプションを指定する。</p>

<h2 id="docker-compose-の追加">Docker Compose の追加</h2>

<p>Flatcar では <code class="language-plaintext highlighter-rouge">systemd-sysext</code> を利用して機能を拡張する仕組みになっている。
Docker Compose を利用するには、以下の公式ドキュメントを参考に Butane 設定ファイルを変更する。</p>

<ul>
  <li><a href="https://flatcar.github.io/sysext-bakery/docker_compose/" target="_blank">Docker-compose sysext | sysext-bakery</a></li>
</ul>

<p>また、利用可能な Docker Compose のバージョンは以下で確認できる。</p>

<ul>
  <li><a href="https://github.com/flatcar/sysext-bakery/releases/tag/docker-compose" target="_blank">Release docker-compose · flatcar/sysext-bakery</a></li>
</ul>

<h2 id="最終的な-butane-設定ファイル">最終的な Butane 設定ファイル</h2>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">variant</span><span class="pi">:</span> <span class="s">flatcar</span>
<span class="na">version</span><span class="pi">:</span> <span class="s">1.0.0</span>

<span class="na">passwd</span><span class="pi">:</span>
  <span class="na">users</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">core</span>
      <span class="na">ssh_authorized_keys</span><span class="pi">:</span>
        <span class="pi">-</span> <span class="s">SSH公開鍵</span>

<span class="na">storage</span><span class="pi">:</span>
  <span class="na">files</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="na">path</span><span class="pi">:</span> <span class="s">/etc/systemd/network/00-static.network</span>
      <span class="na">mode</span><span class="pi">:</span> <span class="m">0644</span>
      <span class="na">contents</span><span class="pi">:</span>
        <span class="na">inline</span><span class="pi">:</span> <span class="pi">|</span>
          <span class="s">[Match]</span>
          <span class="s">Name=ens192</span>
          <span class="s">[Network]</span>
          <span class="s">Address=192.168.xxx.xxx/24</span>
          <span class="s">Gateway=192.168.xxx.xxx</span>
          <span class="s">DNS=192.168.xxx.xxx</span>
          <span class="s">LinkLocalAddressing=no</span>
          <span class="s">IPv6AcceptRA=no</span>
    <span class="pi">-</span> <span class="na">path</span><span class="pi">:</span> <span class="s">/etc/hostname</span>
      <span class="na">mode</span><span class="pi">:</span> <span class="m">0644</span>
      <span class="na">contents</span><span class="pi">:</span>
        <span class="na">inline</span><span class="pi">:</span> <span class="s">ホスト名</span>

    <span class="c1"># Docker-compose sysext</span>
    <span class="pi">-</span> <span class="na">path</span><span class="pi">:</span> <span class="s">/opt/extensions/docker-compose/docker-compose-2.39.2-x86-64.raw</span>
      <span class="na">mode</span><span class="pi">:</span> <span class="m">0644</span>
      <span class="na">contents</span><span class="pi">:</span>
        <span class="na">source</span><span class="pi">:</span> <span class="s">https://extensions.flatcar.org/extensions/docker-compose-2.39.2-x86-64.raw</span>
    <span class="pi">-</span> <span class="na">path</span><span class="pi">:</span> <span class="s">/etc/sysupdate.docker-compose.d/docker-compose.conf</span>
      <span class="na">contents</span><span class="pi">:</span>
        <span class="na">source</span><span class="pi">:</span> <span class="s">https://extensions.flatcar.org/extensions/docker-compose.conf</span>
    <span class="pi">-</span> <span class="na">path</span><span class="pi">:</span> <span class="s">/etc/sysupdate.d/noop.conf</span>
      <span class="na">contents</span><span class="pi">:</span>
        <span class="na">source</span><span class="pi">:</span> <span class="s">https://extensions.flatcar.org/extensions/noop.conf</span>

    <span class="c1"># Dockerのアドレスプール設定</span>
    <span class="pi">-</span> <span class="na">path</span><span class="pi">:</span> <span class="s">/etc/docker/daemon.json</span>
      <span class="na">mode</span><span class="pi">:</span> <span class="m">0644</span>
      <span class="na">contents</span><span class="pi">:</span>
        <span class="na">inline</span><span class="pi">:</span> <span class="pi">|</span>
          <span class="s">{</span>
            <span class="s">"default-address-pools": [</span>
              <span class="s">{</span>
                <span class="s">"base": "172.17.0.0/12",</span>
                <span class="s">"size": 24</span>
              <span class="s">}</span>
            <span class="s">]</span>
          <span class="s">}</span>

  <span class="na">links</span><span class="pi">:</span>
    <span class="c1"># Dockerサービスの有効化</span>
    <span class="pi">-</span> <span class="na">path</span><span class="pi">:</span> <span class="s">/etc/systemd/system/multi-user.target.wants/docker.service</span>
      <span class="na">target</span><span class="pi">:</span> <span class="s">/usr/lib/systemd/system/docker.service</span>
      <span class="na">hard</span><span class="pi">:</span> <span class="kc">false</span>
      <span class="na">overwrite</span><span class="pi">:</span> <span class="kc">true</span>

    <span class="c1"># Docker-compose sysext</span>
    <span class="pi">-</span> <span class="na">target</span><span class="pi">:</span> <span class="s">/opt/extensions/docker-compose/docker-compose-2.39.2-x86-64.raw</span>
      <span class="na">path</span><span class="pi">:</span> <span class="s">/etc/extensions/docker-compose.raw</span>
      <span class="na">hard</span><span class="pi">:</span> <span class="kc">false</span>

<span class="na">systemd</span><span class="pi">:</span>
  <span class="na">units</span><span class="pi">:</span>
    <span class="c1"># Dockerサービスの有効化</span>
    <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">docker.service</span>
      <span class="na">enabled</span><span class="pi">:</span> <span class="kc">true</span>

    <span class="c1"># Docker-compose sysext</span>
    <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">systemd-sysupdate.timer</span>
      <span class="na">enabled</span><span class="pi">:</span> <span class="kc">true</span>
    <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">systemd-sysupdate.service</span>
      <span class="na">dropins</span><span class="pi">:</span>
        <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">docker-compose.conf</span>
          <span class="na">contents</span><span class="pi">:</span> <span class="pi">|</span>
            <span class="s">[Service]</span>
            <span class="s">ExecStartPre=/usr/bin/sh -c "readlink --canonicalize /etc/extensions/docker-compose.raw &gt; /tmp/docker-compose"</span>
            <span class="s">ExecStartPre=/usr/lib/systemd/systemd-sysupdate -C docker-compose update</span>
            <span class="s">ExecStartPost=/usr/bin/sh -c "readlink --canonicalize /etc/extensions/docker-compose.raw &gt; /tmp/docker-compose-new"</span>
            <span class="s">ExecStartPost=/usr/bin/sh -c "if ! cmp --silent /tmp/docker-compose /tmp/docker-compose-new; then touch /run/reboot-required; fi"</span>
</code></pre></div></div>

<p>Ignition の仕様的には <code class="language-plaintext highlighter-rouge">ignition.config.merge</code> で他のファイルを取り込むことができるようだが、
これを使用したところ OS が起動しなかったためベタ書きしている。</p>

<p>先ほど作成した仮想マシンを削除し再構築したところ、
無事 Docker Compose が利用できる環境ができあがった。</p>

<h2 id="参考サイト">参考サイト</h2>

<ul>
  <li><a href="https://www.flatcar.org/docs/latest/installing/cloud/vmware/" target="_blank">Running Flatcar Container Linux on VMware | Flatcar Container Linux</a></li>
  <li><a href="https://www.flatcar.org/docs/latest/container-runtimes/getting-started-with-docker/" target="_blank">Getting started with Docker | Flatcar Container Linux</a></li>
  <li><a href="https://coreos.github.io/ignition/getting-started/#config-validation" target="_blank">Getting Started | Ignition</a></li>
  <li><a href="https://coreos.github.io/butane/getting-started/" target="_blank">Getting started | Butane</a></li>
  <li><a href="https://www.flatcar.org/docs/latest/setup/customization/network-config-with-networkd/" target="_blank">Network configuration with networkd</a></li>
  <li><a href="https://www.flatcar.org/docs/latest/provisioning/config-transpiler/" target="_blank">Butane Config Transpiler</a></li>
  <li><a href="https://flatcar.github.io/sysext-bakery/docker_compose/" target="_blank">Docker-compose sysext | sysext-bakery</a></li>
  <li><a href="https://github.com/flatcar/sysext-bakery/releases/tag/docker-compose" target="_blank">Release docker-compose · flatcar/sysext-bakery</a></li>
</ul>]]></content><author><name>saasan</name></author><category term="blog" /><category term="VMware" /><category term="ESXi" /><category term="Flatcar Container Linux" /><summary type="html"><![CDATA[VMware ESXi 上に Flatcar Container Linux のサーバを立てた際のメモ]]></summary></entry><entry><title type="html">Windows 11 の WSL で ext4 ファイルシステムのドライブの内容を確認する</title><link href="https://slx.jp/blog/2025/02/23/windows-11%E3%81%AEWSL%E3%81%A7ext4%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B.html" rel="alternate" type="text/html" title="Windows 11 の WSL で ext4 ファイルシステムのドライブの内容を確認する" /><published>2025-02-23T03:20:00+09:00</published><updated>2025-02-23T03:20:00+09:00</updated><id>https://slx.jp/blog/2025/02/23/windows-11%E3%81%AEWSL%E3%81%A7ext4%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B</id><content type="html" xml:base="https://slx.jp/blog/2025/02/23/windows-11%E3%81%AEWSL%E3%81%A7ext4%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B.html"><![CDATA[<p><a href="https://learn.microsoft.com/ja-jp/windows/wsl/wsl2-mount-disk" target="_blank">WSL 2 で Linux ディスクのマウントを開始する</a>
の内容を自分用にまとめたやつ</p>

<ol>
  <li>
    <p>PowerShell でドライブを確認</p>

    <div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">GET-CimInstance</span><span class="w"> </span><span class="nt">-query</span><span class="w"> </span><span class="s2">"SELECT * from Win32_DiskDrive"</span><span class="w">
</span></code></pre></div>    </div>
  </li>
  <li>
    <p>PowerShell でドライブをマウント (要管理者権限)</p>

    <div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">wsl</span><span class="w"> </span><span class="nt">--mount</span><span class="w"> </span><span class="nx">\\.\PHYSICALDRIVE5</span><span class="w"> </span><span class="nt">--bare</span><span class="w">
</span></code></pre></div>    </div>

    <p>PHYSICALDRIVE5 は確認したいドライブ</p>
  </li>
  <li>
    <p>WSL 内でパーティション番号とファイルシステムを確認</p>

    <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>lsblk <span class="nt">-f</span>
<span class="nb">sudo </span>blkid
</code></pre></div>    </div>
  </li>
  <li>
    <p>PowerShell でパーティションをマウント</p>

    <div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">wsl</span><span class="w"> </span><span class="nt">--mount</span><span class="w"> </span><span class="nx">\\.\PHYSICALDRIVE5</span><span class="w"> </span><span class="nt">--partition</span><span class="w"> </span><span class="nx">1</span><span class="w"> </span><span class="nt">--type</span><span class="w"> </span><span class="nx">ext4</span><span class="w">
</span></code></pre></div>    </div>
  </li>
  <li>
    <p>WSL 内でパーティションをマウント</p>

    <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo mkdir</span> /mnt/external
<span class="nb">sudo </span>mount /dev/sdf1 /mnt/external
</code></pre></div>    </div>

    <p>sdf1 は確認したいパーティション</p>
  </li>
  <li>
    <p>ドライブの内容を確認</p>

    <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">ls</span> /mnt/external
</code></pre></div>    </div>
  </li>
  <li>
    <p>WSL 内でマウント解除</p>

    <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>umount /mnt/external
<span class="nb">ls</span> /mnt/external
</code></pre></div>    </div>
  </li>
  <li>
    <p>PowerShell でマウント解除 (要管理者権限)</p>

    <div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">wsl.exe</span><span class="w"> </span><span class="nt">--unmount</span><span class="w"> </span><span class="nx">\\.\PHYSICALDRIVE5</span><span class="w">
</span></code></pre></div>    </div>
  </li>
</ol>]]></content><author><name>saasan</name></author><category term="blog" /><category term="Windows" /><category term="WSL" /><summary type="html"><![CDATA[WSL 2 で Linux ディスクのマウントを開始する の内容を自分用にまとめたやつ]]></summary></entry><entry><title type="html">【2024年最新版】今年買ってよかったもの</title><link href="https://slx.jp/blog/2024/12/31/2024%E5%B9%B4%E6%9C%80%E6%96%B0%E7%89%88-%E4%BB%8A%E5%B9%B4%E8%B2%B7%E3%81%A3%E3%81%A6%E3%82%88%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE.html" rel="alternate" type="text/html" title="【2024年最新版】今年買ってよかったもの" /><published>2024-12-31T08:30:00+09:00</published><updated>2024-12-31T08:30:00+09:00</updated><id>https://slx.jp/blog/2024/12/31/%E3%80%902024%E5%B9%B4%E6%9C%80%E6%96%B0%E7%89%88%E3%80%91%E4%BB%8A%E5%B9%B4%E8%B2%B7%E3%81%A3%E3%81%A6%E3%82%88%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE</id><content type="html" xml:base="https://slx.jp/blog/2024/12/31/2024%E5%B9%B4%E6%9C%80%E6%96%B0%E7%89%88-%E4%BB%8A%E5%B9%B4%E8%B2%B7%E3%81%A3%E3%81%A6%E3%82%88%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE.html"><![CDATA[<p>1年以上このサイトを放置してたんで更新方法すら忘れてる感があるが、
今年買ってよかったものを羅列していく。</p>

<h2 id="skagen-jorn-hybrid-hr-スマートウォッチ-skt3000">SKAGEN JORN HYBRID HR スマートウォッチ SKT3000</h2>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B08RDJSZ71?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/81pMxAixRUL._AC_SX679_.jpg" alt="[スカーゲン] 腕時計 JORN 42MM HYBRID HR SKT3000 メンズ ブラウン" />
        <span class="affiliate-product-name">[スカーゲン] 腕時計 JORN 42MM HYBRID HR SKT3000 メンズ ブラウン</span>
    </a>
</div>

<p>今年一番買ってよかったやつ。
アナログ腕時計の文字盤が電子ペーパーになってるタイプのスマートウォッチ。</p>

<ul>
  <li>良い点
    <ul>
      <li>見た目が普通の腕時計</li>
      <li>スマホの通知確認、アラームに使えて便利</li>
      <li>電子ペーパーのためバッテリーが数週間もつ</li>
    </ul>
  </li>
  <li>悪い点
    <ul>
      <li>電子ペーパーのため画面の更新は若干もたつく (画面が小さいこともあり1秒もかからないが)</li>
      <li>タッチパネルではないため、側面にある3つのボタンでの操作が必要
        <ul>
          <li>ボタンを押し込む際の荷重は軽めで 3mm ほど出っ張っている</li>
          <li>手の甲などにあたって画面が勝手に変わっていることがある</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">先日買ったハイブリッドスマートウォッチのベルト交換してきた <a href="https://t.co/8iD071xftc">pic.twitter.com/8iD071xftc</a></p>&mdash; カガミ (@saasan) <a href="https://twitter.com/saasan/status/1788145173278691625?ref_src=twsrc%5Etfw">May 8, 2024</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<h2 id="エレコム-bluetooth50-マウス-ex-g-pro-lサイズ-m-xgl50mbskbk">エレコム Bluetooth5.0 マウス EX-G PRO Lサイズ M-XGL50MBSKBK</h2>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0CGWN5V9N/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/71lZi6zwg1L._AC_SX679_.jpg" alt="エレコム ワイヤレスマウス 静音 EX-G PRO Lサイズ Bluetooth 無線2.4GHz 両対応 充電式 8ボタン 高速スクロール チルトホイール 抗菌 ブラック M-XGL50MBSKBK" />
        <span class="affiliate-product-name">エレコム ワイヤレスマウス 静音 EX-G PRO Lサイズ Bluetooth 無線2.4GHz 両対応 充電式 8ボタン 高速スクロール チルトホイール 抗菌 ブラック M-XGL50MBSKBK</span>
    </a>
</div>

<p>長年使ってた Microsoft Sculpt Ergonomic Mouse が廃番になっていたため乗り換え</p>

<ul>
  <li>良い点
    <ul>
      <li>高さがあり持ちやすい</li>
      <li>M、XL サイズも試したが、L サイズの握り心地が一番良かった</li>
      <li>ボタン数多め</li>
    </ul>
  </li>
  <li>悪い点
    <ul>
      <li>充電式のバッテリーは数日しかもたないため、頻繁に充電が必要</li>
      <li>中クリック(ホイールクリック)がかなり固くて押しづらい</li>
      <li>充電ケーブルの差込口が狭く、付属の USB Type-C ケーブルでしか充電できない</li>
    </ul>
  </li>
</ul>

<h2 id="電動空気入れ-panp-ride-mini">電動空気入れ PANP RIDE MINI</h2>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0D7MMH36N/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/61csfSJXeKL._AC_SY879_.jpg" alt="PANP RIDE MINI 空気入れ 自転車 ロードバイク ツーリング 日本 メーカー (全バルブ対応) 米式 英式 仏式 バイク ボール 電動空気入れ 自動 軽量 小型コンパクト エアコンプレッサー KUKIIRE スマート空気入れ【保証2年間】" />
        <span class="affiliate-product-name">PANP RIDE MINI 空気入れ 自転車 ロードバイク ツーリング 日本 メーカー (全バルブ対応) 米式 英式 仏式 バイク ボール 電動空気入れ 自動 軽量 小型コンパクト エアコンプレッサー KUKIIRE スマート空気入れ【保証2年間】</span>
    </a>
</div>

<p>ボタンを押すだけで、事前に設定しておいた空気圧まで自動で空気が入る。便利。</p>

<h2 id="créer-人感センサーライト">créer 人感センサーライト</h2>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0B11ZVBQ5/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/61Pzaizi-nL._AC_SX679_.jpg" alt="créer(クレエ) 人感 センサーライト 室内 【PSE取得済】 明るさ調節(10段階)・点灯時間設定可能/足元灯 コンセント式 省エネ フットライト 電球色 暖色/白色 照明 (ホワイト)" />
        <span class="affiliate-product-name">créer(クレエ) 人感 センサーライト 室内 【PSE取得済】 明るさ調節(10段階)・点灯時間設定可能/足元灯 コンセント式 省エネ フットライト 電球色 暖色/白色 照明 (ホワイト)</span>
    </a>
</div>

<p>廊下にこれを付けたら、夜中にトイレへ行く際などわざわざ照明をつけなくてもよくなった。
コンセント式なので電池交換の手間もない。</p>

<h2 id="マキタ-携帯電話ホルダー-a-73162">マキタ 携帯電話ホルダー A-73162</h2>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B0BZCXXQPB/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/81HJjeNtTbL._AC_SX679_.jpg" alt="マキタ(Makita) 携帯電話ホルダー A-73162" />
        <span class="affiliate-product-name">マキタ(Makita) 携帯電話ホルダー A-73162</span>
    </a>
</div>

<p>Galaxy Z Fold5 がデカいんで、ポケットに入れられないとき使ってる</p>

<h2 id="secrid-カードケース">Secrid カードケース</h2>

<div class="affiliate-product-list">
    <a href="https://www.amazon.co.jp/dp/B074MN1146/?tag=saasan-22" target="_blank" class="affiliate-product">
        <img src="https://m.media-amazon.com/images/I/61Iur4dn5yL._AC_SX679_.jpg" alt="Secrid (シークリッド) - ミニ 財布 本革 RFID保護 カードケース カード最大12枚用, RFID財布。, ブラックオリーブ, 21 mm" />
        <span class="affiliate-product-name">Secrid (シークリッド) - ミニ 財布 本革 RFID保護 カードケース カード最大12枚用, RFID財布。, ブラックオリーブ, 21 mm</span>
    </a>
</div>

<p>下のレバーを引くとカードが少しずつズレた状態で飛び出すので取り出しやすい</p>

<h2 id="タニタのツインスティック">タニタのツインスティック</h2>

<p>バーチャロンやるならやっぱりこれ</p>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">PS4発掘してバーチャロン環境整えた<br />フォースのアーケード一周プレイしてみたけど元々ツインスティック自体に重量があるのと吸盤がガラス天板の机と相性よくて安定感ある <a href="https://t.co/XmwsBOK7wE">pic.twitter.com/XmwsBOK7wE</a></p>&mdash; カガミ (@saasan) <a href="https://twitter.com/saasan/status/1816377426865447364?ref_src=twsrc%5Etfw">July 25, 2024</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<h2 id="ロフトベッド">ロフトベッド</h2>

<p>物を置けるスペースが拡大したが、既に埋まってしまった</p>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ロフトベッドとポケットコイルマットレスの設置終わった<br />4時間くらいかかった<br />これで起きたときに身体が痛いの改善するといいんだけど <a href="https://t.co/oaUfnpqpv0">pic.twitter.com/oaUfnpqpv0</a></p>&mdash; カガミ (@saasan) <a href="https://twitter.com/saasan/status/1753680538991579183?ref_src=twsrc%5Etfw">February 3, 2024</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<h2 id="にゃんぷっぷーぬいぐるみ">にゃんぷっぷーぬいぐるみ</h2>

<p>かわいい</p>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">にゃんぷっぷーぬいぐるみ届いた！ <a href="https://t.co/nGSoA3g5kp">pic.twitter.com/nGSoA3g5kp</a></p>&mdash; カガミ (@saasan) <a href="https://twitter.com/saasan/status/1853768089244250293?ref_src=twsrc%5Etfw">November 5, 2024</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>]]></content><author><name>saasan</name></author><category term="blog" /><category term="ガジェット" /><summary type="html"><![CDATA[2024年に買ってよかったものをご紹介]]></summary></entry></feed>