びぃえるくぅと。

ガラケーは打楽器。

改めてメディアファイル形式の話をまとめてみよう

この記事は #VJアドベントカレンダー2024 の 16日目の記事です。 前日は Fumi さんの 電音部のオタクが諸々の経験値ゼロからVJシステムをTouchDesignerで自作するまで でした。

はじめに

この記事は、以前某 Discord サーバー内の人を集めて実施した、動画コンテナやコーデックについてラフに触れようというプチ勉強会の内容をまとめたものです。

「拡張子に mp4 とか mov があるのは知ってるけど、それと H.264 とかとの関係がわからない」という方向けの内容になっていると思います。

あらかじめ断っておきますが自分はコーデックのプロではないのと、動画に関するお仕事などはしていないため、記載内容に誤りや古いものが含まれる可能性があります! 見かけた際はコメントなどで指摘いただけますと幸いです・・・。

目次

メディアファイルの基本的な構造

基本的には「コンテナ」と呼ばれるデータが存在し、そのコンテナが動画データや音声データ、時によっては字幕やその他メタデータをすべて包み込むような構成になっています。

この「コンテナ」には複数の形式(コンテナフォーマット)が存在し、良く知られているものが MP4 や QuickTime (MOV) になります。 また、動画ファイルの拡張子には、.mp4 や .mov など、使用されているコンテナフォーマットが特定できる文字列が使われていることが多いように見受けられます(例外は .mp3 など)。

コンテナに含まれる動画データや音声データは何らかの方法で圧縮されていますが、その圧縮の方式が「コーデック」と呼ばれています。動画コーデックでは H.264、音声コーデックでは AAC が認知されているかと思われます。

また、コンテナには映像や音声以外にも、字幕やその他メタデータなどを持たせることもできます。

コンテナフォーマットとコーデック一覧

拡張子とコンテナフォーマット

拡張子 名称 説明
.avi AVI 古のコンテナフォーマット。
.mov QuickTime Apple製。仕様が公開されている*1。MP4 はこれをベースに設計されたため類似点も多い。
.mp4, .m4a MP4 幅広く使われいる。ISO/IEC 14496-12として策定。iTunes などApple系のソフトにおいて、中身が音声のみの MP4 ファイルの拡張子を .m4a とすることがある。
.mkv Matroska OBS で動画でキャプチャしたときにデフォルトで使われる(MP4 と違って、録画中に一部データの破損があってもファイル全体が開けないことはなく復旧しやすいから*2らしい)。
.wav WAVE 実はコンテナフォーマット。仕様上圧縮された音声も持てるが大体のユースケースで非圧縮の音声を持たされる。
.webm WebM Google製のロイヤリティフリーなコンテナフォーマット。YouTube などで使用されている。Matroska がベース*3。

動画コーデック

名称 説明
H.264, MPEG-4 AVC 幅広く使われている。ITU-T Rec. H.264 などの形で策定。ファイルサイズを小さくしても人間にとって綺麗に見えることが大事なので、再生時の負荷はそれなりに大きい。
H.262, MPEG-2 Video 地デジや DVD で使われている。
Motion JPEG JPEG パラパラ漫画。昔の監視カメラの録画や、VJ 等でも使われていた。
HAP VJ ソフト VDMX を開発している Vidvox が策定したコーデック。仕様が公開されている*4。Snappy という圧縮技術を採用しており、圧縮率は高くないが高速なデコードが可能。
DXV VJ ソフト Avenue, Arena を開発している Resolume によるコーデック。仕様が公開されていない。

音声コーデック

いろいろなサービスや場面での動画形式の例

動画共有サイト

スマートフォンなどで視聴されるため、可能な限り圧縮率が高くなることが求められます。

コンテナ 動画コーデック 音声コーデック
構成例 (YouTube) WebM VP9 Opus
構成例 (ニコニコ動画) MP4 H.264 AAC

ロイヤリティーフリー動画素材

Apple ProRes など、動画編集向けに策定されたコーデックが使用されることがあります。

コンテナ 動画コーデック 音声コーデック
構成例 QuickTime Apple ProRes

地上デジタルテレビ放送

ARIB STD-B10 などで詳細が定義されています。番組の内容や番組表などの情報も MPEG-2 TS 内にパケットとして含まれます。

コンテナ 動画コーデック 音声コーデック
構成例 MPEG-2 TS MPEG-2 Video AAC

VJ

コンテナ 動画コーデック 音声コーデック
構成例 (VDMX) QuickTime HAP
構成例 (Resolume) QuickTime DXV3
2014年頃の自分 QuickTime Motion JPEG

小ネタ

faststart

動画を mp4 や mov で書き出す際に、一部のソフトでは Fast start や類似したオプションが利用できることがあります。

そもそも mp4 や mov には様々な種類のデータ (atom) が格納されており、ftyp atom (ファイルの互換性に関するデータらしい)・mdat atom(動画・音声データ本体)・moov atom(動画の再生に必要なメタデータ群)などが実際に存在します。

普通に mp4 や mov 形式の動画を生成すると ftyp → mdat → moov の順番にデータが格納されるのですが、このままだと動画ファイルの末尾の moov まで読みこまないと動画を再生できず、ウェブサイトで動画をダウンロードしながら再生するといった方法が使えません。

そこで moov atom を mdat atom よりも手前に持ってくることで、動画ファイル全体をダウンロードしなくとも動画の再生を開始できるようにする加工を Fast start と読んだりします。

OBS の Hybrid MP4

OBS は 30.2 から動画の保存形式として Hybrid MP4 を追加しました。OBS のページによると、データを工夫しながら書き出すことで、突然の電源遮断などが起きても従来の MP4 のようにファイル全体が破損せず、正常な区間の復旧がしやすくなるとのことです。

ただ書き出し中は特殊な形でデータを書き出すものの、最終的には一般的な MP4 になるようファイナライズするとのことでした。なので新しいファイル形式を作ったというよりは、ファイル形式を維持したままファイル破損への耐性を高める保存方法を作ったということだと思います。

おわりに

動画形式を変換したり各種ソフトで再生したりする際に、これらの知識があるとトラブルシューティングは少ししやすくなるかな~という内容でした。ちょっとでもお役に立てば幸いです。

脚注

BEHRINGER DDM4000 は VJ コントローラーとして使える

この記事は VRDJ Advent Calender 2023 の 18日目の記事です。

adventar.org

タイトル出オチで本当に申し訳ないとは思うのですが、自分が愛用している DDM4000 という機材の誤った使い方を紹介します。

DDM4000

普段私が VJ で使っている例のミキサーこと BEHRINGER DDM4000 ですが、本来はクラブ常設を想定したであろうDJ向け4chデジタルミキサーです。

www.electori-br.jp

マイク入力になぜかEQがついていたり、サンプラー機能があったり、独特なインターフェースのエフェクターがついていたり、BPMに合わせた自動クロスフェーダー機能があったり、 かなり独創的な製品かと思われます。

また、IN, OUT, THRU の MIDI 端子が生えており、純粋な MIDI コントローラーとして DJ ソフトを制御したり、リズムマシンなどと連携したりする事も考慮にいれた設計になっています(実際に取扱説明書の構成例で言及されている)。ただし Audio IF が内蔵されておらず、現在の視点からみると残念に思えるところ。

実は製品自体はかなり古く、少なくとも 2007 年には発表もしくは発売されています。

www.miroc.co.jp

同世代の Pioneer のミキサー DJM-700 と比べると何となく設計が似ている(MIDI端子出力がある・Audio IF非搭載・マイクにEQが付いている)気がするあたり、さすがベリンガーという感じです。 ただ、DJM-700 には MIDI OUT 端子しか付いていないので、その点は DDM4000 の方が優秀です。

www.pioneerdj.com

ちなみにサウンドハウス https://www.soundhouse.co.jp/products/detail/item/126430/ で何故かまだ取り扱いがあります。生産完了品ですのでお早めに。

VJ コントローラーとして使う

別に VJ だけでなく、MIDI コントローラーとしていろんなソフトの制御に使えると思います。

前述の通り USB 端子ではなく本当に MIDI 端子で接続する必要があるため、YAMAHA や ROLAND から発売されている USB-MIDI 変換アダプタを使用して PC と接続します。

私はケーブルの取り回しが面倒だったので、YAMAHA の MD-BT01 を使って Bluetooth で接続しています。現場でもVRでも使用していますが、接続が不安定になったことはほぼないです。

jp.yamaha.com

MIDI マッピングを凝る

DDM4000 側の設定で細かく「1ch のフェーダーやノブは MIDI コントローラーにする」「2ch のは DDM4000 本来の用途に使う」といった制御ができます。例えば「1ch〜4ch の操作部は普通にDJミキサーとして使うけど、マイク部分の操作部は MIDI コンにして外部制御に使う」みたいな設定も可能です。

また前述した通り MIDI を受信して LED やボタンを光らせたりできるため、VJ ソフト側での ON・OFF など各種ステータスを DDM4000 側で確認できるようにする等、ぜひ活用したいポイントです。

よく使われる VJ コントローラーよりもアグレッシブに操作できる(その他メリット)

よく VJ コントローラーとして使用される KORG nanoKontrol 2 や AKAI APC40 などと比べて優れている(と個人的に感じる)箇所も多いです。

  • フェーダーをガシガシ動かしても壊れない(nanoKontrol だと1ヶ月で壊すレベルのガチャガチャをやっても大丈夫)。
  • フェーダー同士の間隔が広い。特に VRVJ でコントローラーを握ったままやる時にかなり助かる。
  • フェーダーが死ぬほど軽い。デコピンで動かせるレベル。
  • ほとんどのボタンやノブがMIDIマッピングできるので、「普段と違ってなんか変わったことしたいな〜」って思った時にアサインできるボタンやノブが余ってることが多い。
  • 意外と横幅のサイズはコンパクトで AKAI APC40 よりも小さい。奥行きさえ確保できれば狭い VJ 卓でもなんとかなる。

悪いところ

  • ボタン配置が悪く、激しいプレイをしているとボタン誤爆をすることがある。
  • チャンネルをクロスフェーダーのABにアサインするやり方が独特、というか扱いづらい。
  • 重いし大きい。クラブ据え置きサイズなので当たり前。なので持ち運びが大変。
  • アースを取らないと漏電する。アースを取れない現場でのVJ中は軽い感電と戦う必要がある。特に冬は辛い。

結論

MIDI をしゃべる機材はなんでもコントローラーにできる。自分だけの最強コントローラーを見つけよう!

ちなみに次に買うと決めた VJ コントローラーは mixars の quattro です。

www.otaiweb.com

1/2 JUNCTION に遊びに行けて良かった

※ 完全に自分語りなので嫌いな人は逃げてね

恥ずかしながら自分は人様のパーティーに遊びに行くことををほとんどせず、今回も遊びに行くこと自体がとても久々だった中、本当に行けて良かったという気持ちでいっぱいです。訳の分からない楽しさの中に身を投じる事が何事にも代え難いものだなと強く実感しました。

自分は色んな理由をこじつけて行かなかったり先延ばしにする悪癖が強め(今回も行かない理由はたくさん用意していた)ですが、終わった後それらの理由がどうでも良くなって、次もまた行きたいなと思えたのは、この年になってもまだ少しだけ変化できるのかなとポジティブに捉えようと思います。

特に今回のリアル 1/2 JUNCTION は音楽や視覚に対してストイックにのめりこんでいく事と、みんなでわちゃわちゃ楽しむ事が全部実現されてて幸せでした。VRChat のクラブで見られるシーンが本当に良い形で MOGRA に現れているような。多くが VRChat ユーザー同士というのもあって会話も楽しかったのも良かったです。

また、最近自分が好きなジャンルがどうやら Hardgroove と呼ぶらしいことを知ったのですが、今回の minawa さんの DJ が自分の好きな感じそのままだったのが本当に嬉しかったです。初見ということもあってこれは完全に想定外だったので、パーティーに足を運んだからこそ見れたことが大変うれしかったです。

改めて昨晩のおかげで、今年は色んなパーティーに遊びに行って、VJ も引き続きやって、今までしてこなかったこともしてみようというモチベーションにつながりました。ナイスパーティーでした。

#BRAINBREAK_VRC で VJ した時の仕組み等諸々

2022/12/17(土) に邪神先生主催のブレイクコアパーティー #BRAINBREAK_VRC (VRChat) で VJ しました。皆様ご来場いただきありがとうございました。

当日の様子はハッシュタグ #BRAINBREAK_VRC や #VRCatClub を追いかけていただくと異様な雰囲気が少しでもわかるかなと思います。

この記事は、どんな VJ にしようと思ったかとか、どういう仕組みを用意したかを殴り書きにしたものになります。

CatClub SchrBo

当日の会場は skkn (@skknyuki) さんが作られた CatClub SchrBo というワールドで、巨大な立方体の中にDJブースがあり、その立方体6面全部がスクリーンになっている場所でした。また、ワールドギミックやいわゆる視界ジャックが豊富に備えてあり、それらが発動すると一気に異様な空間が出来上がります。

さらに、映像の明るさが照明を兼ねているので、映像を落とすと何も見えなくなる・暗めの映像だとアバターがシルエットっぽくなる点もとても面白い仕様です。

演出

今回 VJ を担当させていただいた DJ の よっとさん (@yox_vrc) と Supire (@NH_supaia) さんは、静かな雰囲気から始まって不穏な空気のなかアーメンが聞こえてくるというのが個人的な印象だったため、それをそのままワールドに落とし込めたら良いなという何のひねりもない発想だけで準備を進めました。

だんだんとおかしくなっていく感じを出すため、以下のようにいくつかモードを用意して、それらを切り替えられる形にしました。

  1. DJ ブースの後ろだけに、普通にありそうなスクリーンサイズで映像を映す。
  2. 写している映像がだんだんランダムに移動しだす。
  3. スクリーンサイズはそのままで、複製されたスクリーンが大量に立方体全面を覆い尽くす。
  4. 覆い尽くしているスクリーンそれぞれもだんだんランダムに移動しだす。
  5. スクリーンサイズを立方体に合わせ、全体を覆う。

はじめは 1 からスタートしてドロップ前までに基本 2 ときどき 3 の状態に持っていき、ドロップでは 3, 4, 5 を切り替えるようにしました。

マッピングと実装

マッピング自体は現実のクラブのLEDマッピングと全く同じ手法で、ワールドに送った映像の部分部分が6面に割り当てられます(VRChat とかだと UVマッピングって呼ばれる方も多いです)。

今回は前述のだんだんとスクリーンがおかしくなっていく様子を作るため、Processing 4 でメインのマッピングを実装しました。なお Processing が死んだ時に備えて Resolume Arena の方でもマッピングは用意していました。

実際のコードとは異なりますが、VDMX5 から Syphon 経由で受け取った映像を力技で切り貼りしているだけなので、概ね下記のようなコードの繰り返しです。

import codeanticode.syphon.*;

PGraphics syphonCanvas;
SyphonClient syphonClient;

// @see https://github.com/processing/processing4/issues/544
{
  GLProfile.initSingleton();
}

void setup() {
  size(1920, 1080, P3D);
  syphonClient = new SyphonClient(this, "VDMX5", "Main Output");
}

void draw() {
  if (syphonClient.newFrame()) {
    syphonCanvas = syphonClient.getGraphics(syphonCanvas);
  }

  if (syphonCanvas != null) {
    clean();

    /**
      * ここで VDMX5 から Syphon 経由で受け取った映像を切り貼り(マッピング)する。
      * Resolume Arena の Advanced Output をコードで書いているイメージ。
      */
    beginShape();
    texture(syphonCanvas);
    vertex(540, 0, 420, 0);
    vertex(1080, 0, 1500, 0);
    vertex(1080, 540, 1500, 1080);
    vertex(540, 540, 420, 1080);
    endShape();
  }
}

また、前述の 5 段階のモードを切り替えるために、まずミキサーのつまみの状態を MIDI で 0 〜 127 の数値で受け取り、「0 〜 25 なら 1 のモード、25 〜 51 なら 2 のモード」のように制御しました。つまみを回せば回すほど狂った演出になるので、VJ している時との相性がよい操作が作れました。

ソフトウェア構成

Processing で雑な書き方をしたのでメモリは 1.5 GB ほど喰われましたが、VDMX や Resolume と比較して CPU 使用率は全然高くなかったのでスペック的な不安はなかったです。

反省点

  • もっとマッピングのバリエーションはあった方がよかった(狂い方が同じなので飽きてしまう)。
  • いままでやってきた映像の選定やミックスに加えて、今回初めて慣れないマッピングの操作をしたので、両方の作業が疎かになってしまった。
  • 眩しくないように狂うのが難しい。
  • CatClub SchrBo さんのワールドギミックとの組み合わせを考えてなかった(ちゃんとワールドで実際に出ている様子を見ながら VJ できるようになりたい)。

おわりに

ブレイクコアと相性抜群のワールドでやってみたかった事ができたので個人的に満足できました。ご来場いただけた方にもっと満足していただけるようこれからも精進します。

あとマッピングですが多分 TouchDesigner 使う方が楽で早いです。

2022/07/15 の KÝUUB で VJ した時の構成など

VRChat に入り始めてからまだ日が浅い自分ですが、2回目の VJ は KÝUUB にて担当させていただきました。

左側が自分です。

本記事は備忘録としてその際の構成や、VJ 中に気づいた事などのメモ書きです。

構成

自分が VDMX を使うとどうしても落ちやすくなってしまうので、MacBook 上では VJ ソフトだけを立ち上げ、VRChat や OBS による配信などその他のタスクは ThinkStation (Win11) に任せる形になっています。

構成要素の詳細は下記の通りです。

構成要素 説明
MacBook Pro macOS Monterey。今回の VJ 専用機
ThinkStation Windows 11。箱だけ ThinkStation E30 を流用して中身全部が違う逆光岡自動車。VRChat、OBS の実行や、コミュニケーションのための Discord を置いたりしました。
VDMX メインで使用しているVJソフト。今回流した映像素材は全て VDMX に入れており、エフェクトなども VDMX で完結しています。
Resolume Arena プロジェクションマッピング用途で使用しているVJソフト。VDMX から Syphon で受け取った映像を切り貼りし、NDI で外部に出力します。
NDI Webcam Input NDI 公式が提供する NDI Tools に含まれるユーティリティーで、名前の通り NDI で受け取った映像を Webcam として扱って他ソフトに渡す役割を担います。OBS が NDI にネイティブで対応していないため導入。
OBS 配信ソフトウェア。DJ さんから受け取った音声と VJ 映像をミックスして配信します。

気づいたことなど

  • NDI は有線 LAN を経由すれば 0.2 秒程度の遅延で済んだので、普段現実で VJ していて「手元とスクリーンで若干ラグあるな〜」とほぼ同じ感覚でできました。
  • 砂嵐ノイズ (static noise) 演出はビットレート爆上がりするのでマジで注意しましょう。OBS でビットレート 3,500 kbps に設定していても実際には余裕で 10,000 kbps 出ます。今回は 8fps かつモノクロの砂嵐ノイズにする事で回避しました。
  • VRChat はインスタンス上限に近い人数が入ったりワールドやアバターが凝っているなどの理由でゲーム自体がカクつき易く、体感では最終的に 15fps くらいの映像になっているように思いました。特にストロボ系と相性が悪く、周期が早すぎると点滅せずにずっと真っ白になってしまったりするので、煽る場面であっても周期は抑えめの方が結果良さそうです。
  • ヘッドマウントディスプレイを装着したまま 5時間連続で VJ をすると首が終わります。2時間経過したあたりから首の痛みが気になり始めます。
  • 現実での LED マッピング ≒ VR での UV マッピング

2年ぶりにホーチミンに来た。

技術系備忘録でもなんでもなく、ふと書き残したくなったので。

前回は仕事で半年(2019/08〜2020/02)ホテル暮らしをしていましたが、今回は純粋に旅行です(ビザなしだと滞在期間聞かれるの知らなくて入国審査で無駄に動揺しました)。あとはつい最近退職した会社で、以前よりお世話になった方に挨拶しに行くというのもあります。

注意

一部コロナウイルス感染症に関する情報が含まれていますが、状況は刻一刻と変わりますので、実際に行かれる際などには政府の文書など公的なものを参照し、その指示に従ってください。こちらの記事に記載されているものはあくまで自身が体験したことです。

出国前にしたこと

  • 渋谷のクリニックでPCR検査を受け、ベトナム向けのCovid-19陰性証明書をゲット。
    • 日本で飛行機のチェックインの前に見せました。
  • 住んでいる自治体から紙のワクチン接種証明書をゲット。
    • スマホアプリだとダメって言われる可能性があるとのことで紙の証明書を入手しましたが、結局入国の時には使いませんでした。

初めての VietJet Air

ベトナムのLCC(のはず)です。JALで行こうと思ったら金額で腰抜かしたので・・・。

仕事で言ってた時はJALだったのですが今回 VietJet Air になって、行きのフライトから日本語が聞こえない環境なのが新鮮でした。(実際には日本語の自動音声が少しだけ流れた。)

到着

タラップで地面に降りてバスでターミナルまで移動だったのですが、タンソンニャットでこれは初めての経験でした。飛行機降りていきなり暑さをダイレクトに体感する結果に。

入国審査は、今までの経験上死ぬほど待つと思っていたのですが、今回ほとんど待たず。

入国後は両替とSIMカードの購入、Grab(東南アジアのUber的存在)のセットアップを終えて、レタントン通りにあるホテルへ直行。

ホテルまでの道中

いつも通りの光景。

ホテル到着後

今日はレタントン通り周辺を歩き回ったりコーヒー買ったりしました。

www.tripadvisor.com

店頭のガラスに「スペシャルティコーヒー」となぜかカタカナが書いてある店です。

変わったなぁと思ったこと

  • バイク乗ってる時以外もみんなマスクしてる。
  • Grab で来たクルマは(日本のタクシーみたいに)運転席が透明なシートで囲っててしっかり対策してた。
  • 2年前工事中だったところが工事完了してた。(ただし地下鉄駅を除く)
  • レタントン通りまた日系のお店増えた?(シャトレーゼとコーナンができてたのびっくりした。特にコーナンはおしゃれな感じを出してて面白かった。)
  • なんか Vinfast のクルマ増えた?

ただ、街の匂いとか暑さとか道路が綺麗なのに歩道はガタガタとか、そういうので一気に懐かしくなりましたとさ。

そのほか

iPhone の地図アプリは飛行機の上でもGPSからちゃんと位置情報拾ってくれたので暇つぶしになりました。

Ubuntu の代わりに RHEL8 を WSL2 で使う

昨日以下のような記事を書いたのですが、その清書に加えて自分が行ったセットアップなどの詳細を追記したものになります。

yadex205.hatenablog.jp

背景

宗教上の理由で Debian 系が使えないので、なんとかして RHEL8 を WSL2 で使いたいと思い立ったのがきっかけです。

CentOS じゃなくって RHEL8 なのは、自分がたまたま Red Hat Enterprise Linux Workstation, Self-support のサブスクリプションを持ってるからですが、 最近だと条件によっては無償で利用できる(※1)ので、是非興味があれば試してみてください。

動作確認環境

事前準備

WSL2 の有効化と Ubuntu のインストール

RHEL8 の Docker イメージである redhat/ubi8 を操作するために、一時的に Ubuntu が必要となります。

# Powershell

# WSL2 を有効化し、Ubuntu をインストールします。
#(Windows 10 Version 2004 以降でこの方法が使えるそうです。※2)
wsl --install -d Ubuntu

Docker Desktop のインストールと設定の確認

Docker Desktop のインストールが完了した後、一度再起動することをおすすめします。

その後、下記の設定がなされていることを確認してください。

  • Settings > General > "Use the WSL 2 based engine" にチェックが入っている
  • Settings > Resources > WSL Integration > "Ubuntu" が有効化されている

RHEL8 を WSL2 に導入する

まず、WSL2 の Ubuntu 環境に入ります。

# Powershell

wsl -d Ubuntu

続いて、Docker を操作し RHEL8 コンテナのファイルシステムを TAR ファイルにまとめます。

# Ubuntu

# docker コマンドが使えることを確認します。
# もしエラーとなった場合は Docker Desktop を再起動することで治る可能性があります。
docker

# RHEL8 のコンテナを作成します。
docker run -t redhat/ubi8 bash ls /

# 作成されたコンテナのIDを取得し、変数 $dockerContainerID に代入します。
dockerContainerID=$(docker container ls -a | grep -i redhat/ubi8 | awk '{print $1}')

# TAR ファイルの置き場所を用意します。
mkdir /mnt/c/wslrhel8

# TAR ファイルを生成します。
docker export $dockerContainerID > /mnt/c/wslrhel8/rhel8_base.tar

ここで Ubuntu 環境を抜け、Windows の CUI 環境に戻り、RHEL8 を WSL2 で使えるようにします。

# Powershell

# ファイルシステムの置き場所を用意します。
mkdir C:\wslrhel8\filesystem

# 先ほど生成した RHEL8 ファイルシステムの TAR ファイルをインポートします。
wsl --import RHEL8 C:\wslrhel8\filesystem C:\wslrhel8\rhel8_base.tar

# RHEL8 環境に入れることを確認します。
wsl -d RHEL8

# (任意)wsl で `-d RHEL8` オプションをつけずに RHEL8 環境に入れるように、
# デフォルトのディストリビューションを設定します。
wsl -s RHEL8

これで WSL2 で RHEL8 を使うこと自体はできるようになりました。

導入した RHEL8(というか redhat/ubi8)を通常使用に耐えうるようセットアップする

redhat/ubi8 というイメージは(おそらく想定される使用目的からして)sudo すら含まれていません。

ですので、参考文献に記載されていたものに加え、個人的に最低限必要と思われた下記のセットアップを実施しています。

# RHEL8

# この時点で root でログインした状態になっています。

# まず `sudo` をインストールします。
dnf install -y sudo

# 次に、普段使いのユーザーを作成します。ここでは例として `bob` とします。
adduser -G wheel bob

# 追加したユーザー `bob` のパスワードを設定します。
passwd bob

# 次に `wsl` コマンドで RHEL8 環境に入った際に `bob` としてログインするよう、
# `/etc/wsl.conf` ファイルを編集します。
echo -e "[user]\ndefault=bob" >> /etc/wsl.conf

ここで RHEL8 環境を抜け、RHEL8 を再起動したあと再び環境に入ります。

# Powershell

# RHEL8 環境をいったん落とします。
wsl --terminate RHEL8

# もう一度 RHEL8 環境に入りなおします。
wsl -d RHEL8

ここで RHEL8 環境に入った際に bash のプロンプトが [bob@******] のようになっていれば成功です。 念のため、併せて sudo できることも確認してください。

次に、subscription-manager を使い、今動かしている RHEL8 環境と RedHat アカウントを紐づけます。 この時点で何らかのサブスクリプションを購入しているか、無償利用のための下準備を完了している必要があります。

# RHEL8

sudo subscription-manager register --auto-attach

最後に、ロケール関連の設定を行います(これをしないと tmux とかで日本語表示できなかった)。

# RHEL8

# 今回は `en_US.UTF-8` と `ja_JP.UTF-8` が使える状態にします。
sudo dnf install -y glibc-locale-source glibc-langpack-en glibc-langpack-ja
sudo localedef -f UTF-8 -i en_US en_US.UTF-8
sudo localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

# あとは適宜 `.bash_profile` などで `LANG` 環境変数を設定してあげてください。

これでようやく(個人的には)通常利用できる状態になりました。

RHEL8 環境のスナップショットを撮る

このまま使い続けてもよいのですが、設定を間違えたなどで環境を一度再構築したくなった時に、上記の手順をもう一度やるのは手間です。

なので今回のような初期セットアップ直後や、節目節目でスナップショットを撮っておくことをおすすめします。

# Powershell

wsl --terminate RHEL8

wsl --export RHEL8 C:\wslrhel8\rhel8_initial_setup.tar

なおスナップショットから環境を復元する場合は下記の手順で可能です。

# Powershell

wsl --unregister RHEL8

wsl --import RHEL8 C:\wslrhel8\filesystem C:\wslrhel8\rhel8_initial_setup.tar

# (任意)RHEL8 をデフォルトのディストリビューションに再設定します。
wsl -s RHEL8

最後に

普通に CentOS のイメージを使うと楽だと思います。

注記

※1 https://www.publickey1.jp/blog/21/red_hat_enterprise_linux16okred_hat.html
※2 https://forest.watch.impress.co.jp/docs/news/1342078.html

参考文献

docs.microsoft.com

developers.redhat.com

Copyright © 2015 Yadex205