kmuto’s blog

はてな社でMackerel CREをやっています。料理と旅行といろんなIT技術

仮想マシン作り:UTMとVirtualBox

去年の会社引越しに伴うオンプレ→VPS+SaaSの切り替え決意のときにかなり大々的にサービス類を作り直し、まだまだ現役でいけそうな1Uサーバ類やラックなども全部捨てて、それが当時としては大正解ではあった。しかし、それでもVPSという、IaaS的に全部管理しなければいけないものはやはり管理コストが高い(自分の技術関心方向と合っていたので格安で済んでいるが、企業としては隠れ管理コストになっていてよろしくない)。

 

ということで、いろいろヘンテコピタゴラ技術でやっていたところは諦めたりSaaSに切り替えたり(DNS bindをついに追放)というのを最近の作業の1つとしているのだが、厄介な問題としてずっと引き継いできた社内用データチェックツールの存在がある。

中身的には、ログインしてLinux CUIで動かすコマンド類(VPSでは証明書+shellinaboxで入って作業。データはNextCloud経由でやりとり)と、Web UIでやり取りするものの2種類。どちらもDebian上で動かしている。CUIについては大丈夫か不安はあったのだが、操作的には定型だし、オンプレ時代から皆チェックツール自体は使ってきているので、そのあたりは今のところ問題はない(GUIやWeb UI化できればそれに越したことはないのだろうけれども)。

 

SaaSでできるものでもないし、かといってこのためだけにIaaS運用を続けるのもなぁ…というあたりで、結局ローカルのデータに対してチェックするためのものだから、ローカルで動かせるようにするのが妥当だろうと考えた。

Docker化はユーザーへの説明がそもそも大変そうだし、うまく扱ってくれる気もまったくしないので、ホストOS型仮想化向けに、Debian環境+CUIツール+Web UIを提供することにする。

 

Intel WindowsIntel Macには無難にVirtualBoxで良いだろうと判断。UIもあか抜けていて、混乱する要素が少ない。ほかの仮想化ソリューションを入れている環境だと競合するかもしれないが…そのときにはイメージファイルを変換すればいいという話だし。

 

問題なのはM1/M2系(といってもM2はまだ社内で誰も持ってないけど)で、VirtualBoxはarm64アーキテクチャ対応についてはベータ版で対応を進めてはいるものの、速度が出なかったりいろいろ不具合があるようだ。そもそもamd64アーキテクチャで構成したVMイメージを持っていったところでトランスレーションでの速度低下でメリットがなさそうなので、普通にVM内もarm64アーキテクチャで構築したい。

 

で、探してみたところ、M1/M2向けにはUTMという仮想化ソフトウェアが開発されていた。QEMUベース。

github.com

 

早速Macbook Air M1 16GBモデルでpre-release版を試してみたところ、普通に速い。SSDなこともあるが、ネイティブとそんなに違和感がない。Debian arm64のインストールではCUIインストールだと日本語が出なかったが、GUIインストーラを選んでみるとちゃんと日本語でセットアップができた。shutdown -h nowだと電源が落ちないのだが、halt -pだと落ちるのは少々謎めいている。

 

あとはVirtualBox、UTMともにツールとそれに必要なパッケージをインストールし、細々した設定をしていく。片方でうまくいっているのにもう片方でダメなのはなぜ…と思っていたらパッケージが不足していたりして、IaCの大切さをつくづく感じるけど、どうするのがいいんだろうね。Ansibleあたりでまじめに考えるのがいいのだろうか。

 

親環境とは共有フォルダでやりとりする。

UTMだとDavFS経由で操作する。spice-vdagent、spice-webdavd、davfs2のパッケージをインストールし、http://127.0.0.1:9843にアクセスすると共有フォルダが見える。マウント・永続化設定はGitHub issueにそのまま書いてあったので、これを参考に設定した。

github.com

 

/workにマウントするとして、/etc/davfs2/secretsにダミーのユーザー名、パスワードを指定。

/work  anyuser  anypass

/etc/fstabで永続化。

http://127.0.0.1:9843/  /work  davfs  _netdev,uid=1000,gid=1000  0  0

DavFSは微妙にラグがあって、VM内で生成したPDFをすぐに見ようとすると0バイトだコラと怒られることがあった。あと、DavFSへの書き込み時にダメなパターンがあるようで、pdftk burstで作成されるdoc_data.txtが書き込み時エラーになってしまう。普通の書き込みは問題ないのでちょっと謎。pdftkのopenモードが何か特殊なんだろうか。DavFSではないホームフォルダなどで実行すると問題ない。

VirtualBoxのほうは仮想メディアインストーラからカーネルモジュールアドオンをインストールして、vboxsfファイルシステムからマウントするよう永続化するだけで済む。shareという名前の共有フォルダを内部的に/workというフォルダに自動マウント、かつ初期ユーザー所有にする/etc/fstabエントリ例は以下。

share  /work  vboxsf  uid=1000,gid=1000   0  0

 

Web UIについては、親環境からVMへブラウザでアクセスするということになる。

UTMのNATは親から見えるルーティングなので、ユーザーへのネットワーク回りの説明は手短かで済む。かたやVirtualBoxのNATは親のルーティングテーブルには乗らず、これだとVMへブラウザでアクセスできないので、結局ブリッジのほうをデフォルト設定にしておいた。ただこの場合だと各ユーザーごとにインターフェイス調整が必要になる。

とはいえ、共有フォルダについてはUTMにせよVirtualBoxにせよユーザー個々に設定が違うものなので、結局設定という手順を外すことはできないのでまぁいいか、とした。

あとはブラウザアクセスする対象のVMIPアドレスを調べるのに、一度ログインしてip addrで確認するというのを手順書には書いたのだが、/etc/issueを動的に書き換えておくといいのかなぁとちょっと思いつきはした。でも面倒そうな気もする。

 

ともあれ、これまでサーバーの必要性に挙げられていたものがユーザーそれぞれで動かせるようになったので、IaaS廃止にまた一歩近づいた(VMの更新が面倒そうというのはさておき…。諸々の事情でツール類はVCS経由では入れていない)。

 

残る大物はWiki。議事録や業務メモなどで、それなりに使っている人は使っている。データ変換はともかくとして、置く場所が問題。

365ライセンス由来でTeamsのWikiというのが妥当なところではあるのだが、Teams Wikiが壊滅的に悲惨な代物なのでどうしたものか。Teamsに有償のPerfect Wikiを突っ込むというのがまっとう、か。ただコスト対効果的にうーんというところがあり、まだしばらく悩むことになりそう。

技術書典13 読書感想文その4

技術書典13読書シリーズ、その4完結編。

techbookfest.org

『交通とUI Vol.1』

公共交通機関の案内の特に国際化表示まわりの精緻な観察・考察。東京モノレール羽田空港、JR東、東京メトロ都営地下鉄京王井の頭線、京成、ゆりかもめが対象となっている。
イラレで全部作ってるのね。紙面が完全にプロの仕事だ。ダウンロードファイルについては、配布ファイルの圧縮効果はなく、環境によっては展開時にファイル名化けを引き起こすことになるので、zipパックしないほうがよいのではと思った。


そういえば車内案内で時計表示をしているのってJRくらいなのかな。腕やスマホを見ればわかるだろうといえばそうなんだろうけど。あとは会社によっては車両の全画面がCM再生で現在の情報が一切わからないのが困るのをなんとかしてほしい…。

 

techbookfest.org

『最高のおうちオフィスではたらく vol. 2 ~快適なリモートワーク環境の作り方~』

前作『最高のおうちオフィスではたらく』で部屋の大胆な改造と散財っぷりを魅せた@mochikoAsTechさんの続刊。今回はあんまり散財してないなぁ(※毒されている)と思っていたら、回線二重化していた。

今回で参考になりそうなのだと

  • シュレッダー:家のシュレッダーは引出物ギフトで購入したものなんだけど、容量とパワーが小さく、アダプタだけはでかくてどうにも使い勝手が悪い。A4ザクザク入れてダイヤ型に切れて収容デカめなのがほしい気もする。でも邪魔な気もする…。
  • ヘッドセット:Jabraのイヤフォン悪くないのか。テレワーク用でマイク性能が良いのを探してて、e-イヤホン店はそのうち行かないとなと思っていたところ。Air Podsのほうが耳が痛くならずラクという記載もあるので迷う。BTだと遅延が気になるので有線USB-C接続型のほうが無難かなぁ。
  • PCトレイ:PCアームトレイはちょっと必要そうな状況になってきたので、探そうかな。あとUSB切替器も。

今回も皆さまの力作、拝見させていただきました。