Open18

OpenSUSEにXen環境を構築したいのでそこに至るまでのメモ

MaretolMaretol

OpenSUSEを使ってみたのでいろいろ忘備録

というかすでにインストールして1ヶ月ぐらい経っているのだがzypper等の使い方がおぼつかないので一旦スクラップでまとめておこう的な意図もある

MaretolMaretol

インストール

すでに終わっているので記憶を元に
というかインストール自体はそんなに難しくはないので他の資料とか見てね

印象深かったのは今のWindowsはisoファイルをマウントして中身を直接見れるんだな……という点だった

ちなみになぜかWindows標準のインストールディスク生成が上手くいかなかったのだが、isoファイルをマウントして中身を見て直接コピペでフラッシュメモリに入れたところ普通にインストールディスクになった。いい時代だ

MaretolMaretol

あとゴール地点がなにかも記載しておこう

OpenSUSEにXen環境を構築して仮想マシンでDNSとファイルサーバを動かす。ファイルサーバはiPadとPC(同一LAN上)でクリスタのファイルをやり取りできる状態、というのがゴール

DNSはローカル内での名前解決の役割を担ってほしい。外向きには動かさない予定

あとできればIPv6でいろいろお試ししたいのでIPv6の通信疎通というのもあるがこれは二次ゴールでまずは上記の一次ゴールが目標

MaretolMaretol

インストール情報(すでにいくつかのアップデートを済ませてある)

$ cat /etc/os-release
NAME="openSUSE Leap"
VERSION="15.5"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.5"
PRETTY_NAME="openSUSE Leap 15.5"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.5"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
DOCUMENTATION_URL="https://en.opensuse.org/Portal:Leap"
LOGO="distributor-logo-Leap"

見ての通り。Leapの15.5

インストールしてやったこと

  • ユーザーをsudoerに追加する
    • usermod でユーザーを wheel に追加
    • wheel で sudo が使えるように設定
  • パッケージ更新
    • OpenSUSE は zypper という管理マネージャ?的なのがあるのでそれを使ってみる
    • sudo zypper up
  • SSHの設定
    • 外からつなぎたいので。とりあえずローカルのみ接続可にする
    • 他のOSでも同じだが、「すべてのIPで拒否設定→ローカルのIPのみ可の設定で上書き」というやつ

確かこの辺の設定を済ませていたはず

MaretolMaretol

現状抱えてる?問題点

  • ディスク暗号化したので起動時にパスフレーズの入力が必要
    • リモートで reboot すると物理アクセスが必要になる
    • でもセキュリティ的に必要経費な気はする
    • 別に悪いことに使おうってわけじゃないが

できれば自動で入ってほしいがまあしょうがない

MaretolMaretol

あと数日前に話題になったOpenSSHの脆弱性(CVE-2024-6387)の対応を先に済ませる

とりあえず公式のアナウンスはこれ

15.5は影響を受けないらしいが、15.6は影響ありの様子

せっかくなので15.6にあげてリリース済みの修正があたってるか確認したいのでアップデートをしてみる

ここからリアルタイムでやったことを記す

MaretolMaretol

まず現状のバージョン確認(上と同じ)

$ cat /etc/os-release
NAME="openSUSE Leap"
VERSION="15.5"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.5"
PRETTY_NAME="openSUSE Leap 15.5"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.5"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
DOCUMENTATION_URL="https://en.opensuse.org/Portal:Leap"
LOGO="distributor-logo-Leap"

公式のドキュメントに従ってコマンドを打っていく

まずパッケージの更新

# zypper reflesh
# zypper update

で、リポジトリのアップデート。バージョンによって注意事項が多い

# sed -i 's/15.5/${releasever}/g' /etc/zypp/repos.d/*.repo

もっともこれは特に何もなかった。

そしてリリースバージョンを指定して再度更新

# zypper --releasever=15.6 refresh

最後に更新(と、再起動)

# zypper --releasever=15.6 dup

完了後に reboot する

MaretolMaretol
$ cat /etc/os-release
NAME="openSUSE Leap"
VERSION="15.6"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.6"
PRETTY_NAME="openSUSE Leap 15.6"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.6"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
DOCUMENTATION_URL="https://en.opensuse.org/Portal:Leap"
LOGO="distributor-logo-Leap"

はいおっけー

MaretolMaretol

というわけで本題のSSH関係のパッケージの確認

$ sudo zypper info openssh
Loading repository data...
Reading installed packages...


Information for package openssh:
--------------------------------
Repository     : Update repository with updates from SUSE Linux Enterprise 15
Name           : openssh
Version        : 9.6p1-150600.6.3.1
Arch           : x86_64
Vendor         : SUSE LLC <https://www.suse.com/>
Installed Size : 0 B
Installed      : Yes
Status         : up-to-date
Source package : openssh-9.6p1-150600.6.3.1.src
Upstream URL   : https://www.openssh.com/
Summary        : Secure Shell Client and Server (Remote Login Program)
Description    :
    SSH (Secure Shell) is a program for logging into and executing commands
    on a remote machine. It replaces rsh (rlogin and rsh) and
    provides secure encrypted communication between two untrusted
    hosts over an insecure network.

    xorg-x11 (X Window System) connections and arbitrary TCP/IP ports can
    also be forwarded over the secure channel.

    This is a dummy package that pulls in both the client and server
    components.

Version : 9.6p1-150600.6.3.1

ちゃんと修正済みバージョンがリリースされてる( https://www.suse.com/security/cve/CVE-2024-6387.html より)

他のパッケージも同様に確認したところ修正済みだったのでヨシ

MaretolMaretol

ようやく本編。Xenのインストール

$ sudo zypper search xen
Loading repository data...
Reading installed packages...

S  | Name                           | Summary                                                    | Type
---+--------------------------------+------------------------------------------------------------+-----------
   | grub2-i386-xen                 | Bootloader with support for Linux, Multiboot and more      | package
   | grub2-i386-xen-extras          | Unsupported modules for i386-xen                           | package
i  | grub2-x86_64-xen               | Bootloader with support for Linux, Multiboot and more      | package
   | grub2-x86_64-xen-extras        | Unsupported modules for x86_64-xen                         | package
   | jaxen                          | An XPath engine written in Java                            | package
   | jaxen                          | An XPath engine written in Java                            | srcpackage
   | jaxen-bootstrap                | A convenience package for build of dom4j                   | package
   | libptexenc1                    | Libraries of Kanji code convert library for pTeX           | package
   | librfxencode0                  | Library for the JPEG2000 codec for RDP                     | package
i  | libvirt-daemon-xen             | Server side daemon & driver required to run XEN guests     | package
i+ | patterns-server-xen_server     | Xen Virtual Machine Host Server                            | package
   | patterns-server-xen_tools      | XEN Virtualization Host and tools                          | package
   | system-role-xen                | Server Xen role definition                                 | package
   | texlive-bxenclose              | Enclose the document body with some pieces of code         | package
   | texlive-bxenclose-doc          | Documentation for texlive-bxenclose                        | package
   | texlive-lexend                 | The Lexend fonts for XeLaTeX and LuaLaTeX through fontspec | package
   | texlive-lexend-doc             | Documentation for texlive-lexend                           | package
   | texlive-lexend-fonts           | Severed fonts for texlive-lexend                           | package
   | texlive-ptexenc-devel          | Libraries of Kanji code convert library for pTeX           | package
i+ | xen                            | Xen Virtualization: Hypervisor (aka VMM aka Microkernel)   | package
   | xen-devel                      | Xen Virtualization: Headers and libraries for development  | package
   | xen-doc-html                   | Xen Virtualization: HTML documentation                     | package
i  | xen-libs                       | Xen Virtualization: Libraries                              | package
   | xen-libs-32bit                 | Xen Virtualization: Libraries                              | package
i+ | xen-tools                      | Xen Virtualization: Control tools for domain 0             | package
   | xen-tools-domU                 | Xen Virtualization: Control tools for domain U             | package
   | xen-tools-xendomains-wait-disk | Adds a new xendomains-wait-disks.service                   | package
i+ | xen_server                     | Xen Virtual Machine Host Server                            | pattern
   | xen_tools                      | XEN Virtualization Host and tools                          | pattern
   | xengine                        | Reciprocating engine for X                                 | package

とりあえず必要そうなやつはインストールした はず

MaretolMaretol

動いてないっぽいし動かし方を調べていても特に引っかからずちょっと足止め中

いろいろ調べていたがboot関連をいじらないといけないっぽい?

Arch WikiのXenの項目

確かXenってホストマシンも仮想環境に乗っけるような起動方法だった気がするのでそれだろうか

Arch Wikiを参考にしてみる。どうでもいいがLinuxで調べごとをしているとArch Wikiに衝突する確率めっちゃ高い気がする

MaretolMaretol

boot関連を弄る前に色々調べてたら /boot 内に xen.gz があった

が、これってUEFIだと xen.efi じゃないとだめじゃなかったっけ?となっている

MaretolMaretol

xen.efi はなかったけどバージョン情報?がつながってるファイルは /boot/efi/EFI/opensuse/ にあった
これはboot関係(というかgrub?)を先に勉強しないとわからん気がするので先に grub を追ってみる

MaretolMaretol

/etc/default/grub の GRUB_CMDLINE_XEN_DEFAULT を

GRUB_CMDLINE_XEN_DEFAULT="vga=gfx-1024x768x16"

から

GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=1024M,max:1024M"

に書き換えて grub2-mkconfig -o /boot/grub2/grub.cfg コマンドを叩いた

出力にいくつかのイメージを見つけたの表示が出たがこれで再起動するといいのだろうか?

ちょっと先に上の設定の正体だけ掴んでおきたいので再起動は一旦待ち
見たところブートメニューに加わるっぽい気がするが

MaretolMaretol

この設定だけじゃだめで、dom0にネットワークブリッジしてあげる設定を書く必要があるっぽい

というかこれは dom0 の概念をしっかり理解しとかないとだめっぽいので今度はそっちを追う

MaretolMaretol

https://wiki.xenproject.org/wiki/Dom0

普通にxenのwiki見ろよって気持ちになってきたので見る

Dom0 is the initial domain started by the Xen hypervisor on boot. Dom0 is an abbrevation of "Domain 0" (sometimes written as "domain zero" or the "host domain"). Dom0 is a privileged domain that starts first and manages the DomU unprivileged domains.

Dom0 はXenハイパーバイザー起動時に開始される初期ドメインです(ここのドメインはXenの概念、後で訳す)
Dom0は "Domain 0" の略語です(ときに "domain zero" や "host domain" とも記されます)。
Dom0は最初に開始され非特権ドメインであるDomUを管理する特権的ドメインです。

まだ続く。Dom0の役割的なことが書いてるが一旦省略

つまるところホストマシンのこと。ただ、Xenはホストの上に仮想環境が乗るのではなく、仮想環境の上にホストが乗る(これは知識的に知ってた。Hyper-Vと同じらしい)
仮想環境を親とし、その上にDom0がホストマシン相当の役割として動く構造になっている

Dom0の設定はそういう設定なのだということで理解。ドメインの概念も訳しておきたい(たぶん知っておいたほうがいい気がする

MaretolMaretol

https://wiki.xenproject.org/wiki/Domain

When we are talking about virtualization, a domain is one of the virtual machines that run on the system. Domain0 is the first domain started by the Xen hypervisor at boot, and will be running a Linux OS. This domain is privileged: it may access the hardware and can run the XenControlTools that manage other domains. These other domains are referred to as DomUs, the U standing for "user". They are unprivileged, and could be running any operating system that has been ported to Xen.

仮想化について話しているとき、ドメインはシステム上で動く仮想マシンのことを指します。ドメイン0は(略。上とほぼ同じでホストとしての役割の話)。Xenシステムで管理されるドメインをDomUと表現し、Uはuserを指しています。これらは非特権で、あらゆるOSをXen上で走らせることができます

はい

MaretolMaretol

つまるところXen環境は

  • Xenというハイパーバイザーを起動させる
    • これは boot 設定で読み込ませる
  • 既存のホストマシンをDom0に割り当てる必要がある
    • これはいくつかの設定ファイルを変更する必要がある

たぶんこう