#Linux
#plamolinux

Plamo Linux 7.0 パッケージ作成メモ

Plamo 7.0 リリース後も環境に合わせたり、MLでの質問の回答を載せたりと更新を続けています。

glibc 2.26

基本はこれまでと変化はありませんが、ロケールの部分が少し変わっています。

(あまり理解していないので以下は間違ってるかも)

Plamo-6.x までは /usr/share/locale 以下にすべての関連ファイルがそろっていましたが、イマドキは /usr/share/localeは各種ソフトウェアのメッセージカタログが置かれているだけで、システム上で定義されている(使える)ロケールは /usr/share/i18n のデータを元に localedef コマンドを実行すると、/usr/lib/locale/locale-archive ファイルに保存されるようです。

glibc では、コンパイル後のインストール時に

$ make localedata/install-locales

と実行すると、localedata/SUPPORTED ファイルに定義されているロケールに対して localedef コマンドが実行されます。このファイルにはデフォルトでは glibc がサポートしている全ロケールが書かれていますが、Plamo では全部は不要ですので、

SUPPORTED-LOCALES=\
C.UTF-8/UTF-8 \
en_US.UTF-8/UTF-8 \
ja_JP.EUC-JP/EUC-JP \
ja_JP.UTF-8/UTF-8 \

というファイルに差し替えて make localedata/install-locales を実行しています。なお、C.UTF-8 は標準では含まれていませんので、パッチを適用しています(Red Hat系、Debian/Ubuntu、Slackware 辺りには同様のパッチが当たっているようです)。

このように作られたパッケージをインストールすると、

$ locale -a
C
C.utf8
POSIX
en_US.utf8
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc

japanese とかは /usr/share/locale/locale.alias ファイル辺りからエイリアスとして作られるのでしょうか。

起動時処理・デーモン起動

これまでは起動時の処理は /etc/rc.S、/etc/rc.M、/etc/rc.inet{1,2} などで BSD 的に書かれていました。以前良くあった /etc/init.d などに置かれる起動スクリプトは rc.M から呼ばれていましたが、Plamo 7.0 では、以前のメジャーなディストリビューションが採用していた /etc/rc.d/init.d 以下にスクリプトを置き、/etc/rc${runlevel}.d/ 以下に起動順に並ぶようなシンボリックリンクが置かれる形式になりました(LFS/BLFSの起動スクリプトを採用しています)。

起動する、しないは、CentOS6 や以前の Debian なんかのようにコマンドで /etc/rc.d/rc${runlevel}/ 以下のリンクを動的に生成するのではありません。リンクはパッケージに含まれていますが、その先の /etc/rc.d/init.d/ 以下のスクリプトに実行権限があるかないかによって決まります。

全員が起動して使うわけでもないだろう、というデーモンについては、起動スクリプトをインストールはするものの、実行権を付けていませんので必要に応じて chmod コマンドで /etc/rc.d/init.d/ 以下のスクリプトに実行権をつけてください。

キーボード設定

Plamo-6.2 までは /etc/rc.d/rc.keymap みたいなファイルを呼んでいたと思いますが、7.0 からは /etc/rc.d/init.d/console ファイルでキーボードを設定します(他にコンソールフォントも設定できるようです)。

日本語キーボード(jp106)の場合、/etc/sysconfig/console ファイルを次のような内容で作成すれば OK です。

KEYMAP="jp106"

Plamo 7.0 リリース時点で、インストーラで日本語キーボードを選んだ場合(そしてオプションのキーバインド(CtrlとCapsLockを逆にするとを選択した場合)、インストーラがこの設定を行ってくれるはずです。

run ディレクトリ

実行時の可変データを置くディレクトリは、イマドキの FHS に従って /run になりました。パッケージでも必要に応じて configure オプションでそちらを指定しています。

/run は tmpfs です。/var/run/run へのリンクになっています。

$ ls -l /var/run
lrwxrwxrwx 1 root root 4  1月 12日  20:30 /var/run -> /run/
$ cat /proc/self/mounts | grep run
tmpfs /run tmpfs rw,relatime 0 0

まだ決め打ちで /var/run を向いてるソフトウェアもありますね。

ご自分でパッケージを作ったり、何かインストールする際に /var/run のリンクを消してしまったり、普通にディレクトリにしてしまったりすると色々と問題が生じますので注意が必要です。

pam

/etc/pam.d 以下は従来とは大きく変わりました。システム共通の include 用のファイルとして

  • system-account
  • system-auth
  • system-password
  • system-session

の 4 ファイルがあります。以前のようにデフォルトの system-auth に全エントリを書いてそれを参照する方式ではありませんのでご注意を。plamo-default ファイルもありません。

デフォルトのパスワードは sha512 で生成されます(system-passwordファイルを参照してください)。

この 4 つのファイルを必要に応じて include します。

account     include system-account
auth        include system-auth
password    include system-password
session     include system-session

カーネルモジュール

起動時に読み込ませたいカーネルモジュールがある場合は /etc/sysconfig/modules ファイルにモジュール名を書きます。

コンソールログがうざい

Linux カーネルでデフォルトで設定されているコンソールログのレベルがそれなりにたくさんのログが表示されるようになっているためのようです。

起動後に

dmesg -n 1

のように調整するか、カーネルの起動パラメータに

loglevel=1

を追加してみてください。

eudev

udev は今や systemd に統合されていますので、systemd を使っていない Plamo では gentoo 由来の eudev を使用しています。

複数の NIC がある場合

Plamo マシンで複数 NIC があるってケースはあまりないのかもしれませんが…

Plamo-6.x のときの udev では、標準でインストールされるファイルの中に NIC に与えられる名前が起動するたびに変わらないようにするために /lib/udev/rules.d/75-persistent-net-generator.rules というルールが、/etc/udev/rules.d/70-persistent-net.rules が存在しない場合にはこのファイルを生成して、常に特定の NIC には特定の名前が割り当たるようになっていました(CentOS 6なんかでもそうでした)。

eudev になってからそのような処理を行うルールはなさそうですので、LFS では udev-lfs という LFS カスタムのルールやスクリプトをまとめたものを準備しています。

Plamo-7.0 でも、この udev-lfs のファイルをインストールするようにしてあります(55-lfs.rules だけはインストールしてません)。

ただ、前述の 70-persistent-net.rules ファイルを生成するような処理は含まれていませんので、複数 NIC を使っている場合は手動でスクリプトを実行して、このファイルを作る必要があります(いまのところ)。

sh /lib/udev/init-net-rules.sh

ただ、今の eudev では、カーネルが付与する NIC の名前 eth*、wlan* をルールの中で決めるのはちゃんと動かないようですので(よく理解してないけどたぶん)、複数 NIC があって、固定した名前を使いたい場合は、上で紹介したコマンドで生成した /etc/udev/rules.d/70-persistent-net.rules ファイルで指定する名前は、例えば net0net1 など、バッティングしない名前にするのが良いようです。

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="(MAC Address)", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="net0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="(MAC Address)", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="net1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="(MAC Address)", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="net2"

Plamo ではデフォルトではカーネルの起動パラメータで net.ifnames=0 というのを指定しています。これが指定されていると、/lib/udev/rules.d/80-net-name-slot.rules 内の処理はスキップされますので、上記のように指定すると、対応する MAC Address に対応して net0net1net2 で起動してくるはずです。

起動パラメータで net.ifnames=0 を指定する代わりに

touch /etc/udev/rules.d/80-net-name.slot.rules

とすると、/lib/udev にある方のルールが /etd/udev の方のファイルで上書きされますので同じように動くはずです。

Network I/F デバイス名を変えた場合は /etc/sysconfig/ifconfig.* ファイルの名前と中身も変えるのをお忘れなく。

Predictable Network Interface Names

もしくは起動パラメータで net.ifname=0 を指定せず、/etc/udev/rules.d/80-net-name.slot.rules も作成せずに起動すると Predictable Network Interface Names と呼ばれる規則性があり、かならず一意に名前が決まる方法で名前が決まって起動してきます。ただ enp1s1 とか覚えにくい名前なので使いづらい気がするなあ。

network

ネットワークインターフェースの設定は lfs/blfs の方法に従うようになりました。

DHCPの場合(dhclient)

例えば eth1 を DHCP で設定したい場合、/etc/sysconfig/ifconfig.eth1

ONBOOT="yes"
IFACE="eth1"
SERVICE="dhclient"

のように書けば eth1 を dhclient を使って DHCP で設定してくれます。

dhclient は /sbin/dhclient-script を呼びますが、 /etc/dhclient-enter-hooks スクリプトを準備しておくと、 resolve.conf ファイルを作成する関数を定義した直後にこのスクリプトが呼ばれます。

私はこの /etc/dhclient-enter-hooks の中身を以下のようにして /etc/resolv.conf ファイルを dhclient が生成(書き換え)しないようにしています。

make_resolv_conf() { :; }

dhclient-scirpt の処理終了直前に /etc/dhclient-exit-hooks スクリプトが呼ばれます。

dhclient-script には、/etc/dhclient-enter-hooks.d//etc/dhclient-exit-hooks.d/ 以下に存在する実行ファイルを実行するような処理が書かれていますが、Plamo 7.0 の run-parts コマンドが、 dhclient-script での呼び方と非互換なので動きません(しかもrun-partsコマンドはlibpaperパッケージに含まれているので必ずしもあるわけではない)。

固定IPアドレスの場合

eth0 を固定 IP アドレスで設定する場合、以下のような /etc/sysconfig/ifconfig.eth0 ファイルを作成します(基本はインストール時に質問に答えると作ってくれるはず)。

ONBOOT=yes
IFACE=eth0
SERVICE=ipv4-static
IP=192.168.1.2
GATEWAY=192.168.1.1
PREFIX=24
BROADCAST=192.168.1.255

bridge の場合

ブリッジ br0 を作成し、物理インターフェース eth0 に接続したい場合は、以下のように /etc/sysconfig/ifconfig.br0 を作成します(blfsのbridge-utilsページのパクりです)。

ONBOOT=yes
IFACE=br0
SERVICE="bridge ipv4-static"  # Space separated
IP=192.168.1.32
GATEWAY=192.168.1.1
PREFIX=24
BROADCAST=192.168.1.255
CHECK_LINK=no                 # Don't check before bridge is created
STP=no                        # Spanning tree protocol, default no
INTERFACE_COMPONENTS="eth0"   # Add to IFACE, space separated devices
IP_FORWARD=true

無線LAN

(注意!!)ここは筆者が無線LAN環境でPlamoを試していません。こうすれば動くはずというものなので動かないかもしれません

wpa_supplicant をインストールすると、サンプルとして /etc/sysconfig/ifconfig_wlan0-sample をインストールしますので、中を DHCP か static かに応じて編集し、例えば /etc/sysconfig/ifconfig.wlan0 として保存します。

続いてSSID、パスフレーズなどの情報を書いた設定ファイルを以下のように /etc/sysconfig/wpa_supplicant-wlan0.conf に作成します。

wpa_passphrase SSID SECRET_PASSWORD > /etc/sysconfig/wpa_supplicant-wlan0.conf

/etc/sysconfig/ifconfig.wlan0 のサフィックス(wlan0)の部分と設定ファイル /etc/sysconfig/wpa_supplicant-wlan0.conf-.conf に挟まれた部分が一致していることが重要です。

詳しくは

をご覧ください。(スクリプトをみる限りではファイル名の wlan0 みたいな文字列と実際のインターフェース名は違っていても OK っぽいです。ifconfig.* ファイルの IFACE 変数が一致していれば)

perl

Perlの site_{lib,arch} と vendor_{lib,arch} をきちっとわけてみました。公式パッケージではパスに perl のバージョン番号が入りません。

perl 5.24.0 パッケージ作成時には以下のようにオプションを与えています。

    if [ $arch = "x86_64" ]; then
        arch_opts="-Dcccdlflags='-fPIC'"
    else
        arch_opts=""
    fi
  :(snip)
    sh Configure \
       -des \
       -Dprefix=/usr \
       -Dvendorprefix=/usr \
       -Dprivlib=/usr/share/perl5/core_perl \
       -Darchlib=/usr/${libdir}/perl5 \
       -Dsitelib=/usr/share/perl5/site_perl \
       -Dsitearch=/usr/${libdir}/perl5/site_perl \
       -Dvendorlib=/usr/share/perl5/vendor_perl \
       -Dvendorarch=/usr/${libdir}/perl5/vendor_perl \
       -Dman1dir=/usr/share/man/man1 \
       -Dman3dir=/usr/share/man/man3 \
       -Dpager="/usr/bin/less -isR"  \
       -Dcc='gcc -isystem /usr/include' \
       -Dlddlflags="-shared ${LDFLAGS}" \
       -Dldflags="${LDFLAGS}" \
       -Dusethreads \
       ${arch_opts} \
       -Duseshrplib

perl module のパッケージ作成の際は

perl Makefile.PL INSTALLDIRS=vendor

のように実行しています。

Python

Python は 3 がデフォルトです。

$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7  1月 12日  18:43 /usr/bin/python -> python3*

Python モジュール作成の際は

  • 2, 3 用のモジュールがひとつのパッケージに同梱可能であれば同梱(実行コマンドがなくライブラリコードのみの場合なんかがこれに当たるかな?)
  • 2, 3 用は分けて作る必要がある場合は python2_(package), python3_(package) のような名前でパッケージを作るようにしています(全部当てはまるとは限らないけど)
  • パッケージ作成の際は /usr/bin/python ではなく、なるべく /usr/bin/python2/usr/bin/python3 を指定するようにしています。

iptables

/etc/rc.d/init.d/iptables スクリプトは blfs バージョンを元にカスタマイズしています。オプションとして取れる引数の種類を増やしました。

$ ./iptables help
Usage: ./iptables {start|stop|clear|lock|status|status6|save}
  • start は起動時に実行されるものです。/etc/sysconfig 直下に:
    • iptablesファイルがあれば iptables-restore /etc/sysconfig/iptables を実行します
    • ip6tables ファイルがあれば ip6tables-restore /etc/sysconfif/ip6tables を実行します
  • stopclear は同じ処理です。INPUT、OUTPUT、FORWARDING のポリシーを ACCEPT に設定し、Flush を行い、チェーンを削除します(iptables が設定されない状態になります)。IPv4、v6 両方に適用されます
  • lock は INPUT、OUTPUT、FORWARDING のポリシーを DROP に設定し、Flush を行い、チェーンを削除します(ローカルからはアクセスできます)。IPv4、v6 両方に適用されます
  • save は現在のルールを /etc/sysconfig/iptables/etc/sysconfig/ip6tables にそれぞれ保存します(ip{,6}tables-save を呼んでいるだけです)
  • status は IPv4 向けに設定されているルールを、status6 は IPv6 向けに設定されているルールを表示します

BLFS で使われる /etc/rc.d/rc.iptables ファイルは使いません。

Firefox/Thunderbird

これまで通り Firefox は unofficial で作成していますので "Nighty" で作成されています。

ただ、適用する日本語リソースをちょっといじって、ブラウザ名は "Plamo Browser" となるようにしてあります。

firefox1.png

ただ、「Plamo Browser について」というメニューを選択すると、"Nighty" と出てきます(これは画像なのかな?)。このダイアログ中のリンクをクリックすると、mozilla のページに飛びます。

firefox2.png

Thunderbird も "Plamo Mailer" という名前が表示されます。

各種サーバプログラム

Plamo 7.0 では一部の人しか使わないであろうサーバプログラムについては開発の優先度を下げていました(というつもりで私はパッケージを作っていた)。

とりあえず私が必要とするであろうサーバプログラムは作りましたがテストは不十分です。

Apache httpd

Web サーバは従来通り Apache httpd です。nghttp2 パッケージを 03_libs に含めてあり、これを有効にして mod_http2 を作成してありますので HTTP/2 にも対応できます。ただし全くテストしていません。

PHP

従来の cli, modules 版に加え、--enable-cgi --enable-fpm を指定した CGI 版も同梱しています。BLFS の起動スクリプトも同梱しています。Apache で mod_proxy_fcgi を有効にすると例えば次のように設定したりして使えるでしょう。

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/srv/httpd/htdocs/$1

PHP の configure オプションについては phpinfo() でご確認ください。ビルドスクリプト でどのような configure オプション付けているのかはちょっと見づらいと思うので。

bind / DNS 関連

bind は dig などのクライアントコマンドのみインストールする bind_tools パッケージになりました。サーバプログラムはパッケージを作成していません。

Plamo で DNS の権威サーバを運用する人はほとんどいないでしょうけど、サーバプログラムとしては nsd のパッケージを準備しました。デフォルトでは設定ファイルなどはインストールされませんので、すべて自分で設定する必要があります。

キャッシュサーバは unbound パッケージを準備しています。こちらは起動させれば最低限の設定で起動するような設定ファイルにしてあります。

bind のように権威サーバとキャッシュサーバを同居させたい場合は工夫が必要です。

その他

  • DB エンジンは mariadb を作成してあります
  • Mail 関係は postfix, dovecot を作成しているのでとりあえずサーバは運用できるはず。ただし、この辺りもテストが不十分です

音楽プレーヤー

個人的にはこれまで Rhythmbox を使ってきましたが、気分を変えて lollypop パッケージを作ってみました。問題なく動いています。

lollipop.png

フォント

TrueType/OpenType フォントはこじまさん作成のパッケージとして

  • B&H Lucida
  • Liberation
  • Dejavu
  • Migu
  • MiguMix

あたりが基本的なフォントとして入っているところに、Google の

  • Noto
  • NotoCJK

を入れています。Noto フォントシリーズは全部入れるととんでもないことになるので、基本的なアルファベット系のフォントだけ選んで入れています。

もしかしたらVLゴシックあたりも入れるかも(Noto の Mono フォントが細すぎて見づらい…)

日本語入力

uim に加えて fcitx のパッケージを作成しました。ibus、scim は作りません。

fcitx に対する日本語入力エンジンは mozc を準備しています。emacs から使う場合は XIM でも使えますが、ちょっと使いづらいので、mozc.el と mozc_emacs_helper をインストールしますので、そちらで使うのが良いと思います。

Emacs は XIM を使わないように

Emacs*useXIM: false

.Xdefaults.Xresources で指定すると良いでしょう。

fcitx

adduser コマンドでユーザを作成する際に fcitx を指定しても ~/.xinitrc~/.xsession 内で静的に指定されている uim が起動しますので、fcitx を使う場合はコメントアウトしてください。(adduser コマンドでそのあたりも処理しようかと思ったけど面倒だったのでやめたのと、あまり完璧にやるよりは自分で調整するのが Plamo らしいと思ったので)

fcitx を使用するように設定し、最初に Desktop 環境を起動した場合は、キーボードが英語キーボードの設定になっているようです。

他に runlevel 5 で起動したり、もしかすると runlevel 3 で起動した場合も fcitx が起動するようになっていると同様かもしれません。

fcitx1.png

日本語キーボードを使う場合は「+」ボタンを押し、「キーボード - 日本語」を選択して追加します。

fcitx2.png

そして「キーボード - 英語」を削除し、「キーボード - 日本語」を一番上に持っていけば OK です。

fcitx3.png

(筆者は英語キーボードを使っているのでこのあたり間違えていたらご報告ください)

emacsでの日本語入力

adduserコマンドでユーザ登録すると、/etc/template/Default 以下のファイルがホームディレクトリにコピーされます。この時、$HOME/.emacs.d/site-start.d/ 以下に emacs の日本語入力関係のファイルが3つコピーされます。

  • uim.el
  • mozc_el
  • skk_el

このうち、そのままの状態で読み込まれるのは .el で終わるファイルだけなので uim.el が読み込まれます。もし Desktop 環境で fcitx を使っている場合は mozc を使うと良いでしょう。

$ cd ~/.emacs.d/site-start.d
$ mv uim.el uim_el (uimの設定が読み込まれないようにする)
$ mv mozc_el mozc.el (mozcの設定が読み込まれるようにする)

mozc_elの中にはサンプル設定が書かれているので必要に応じてコメントを外したり、設定を追加したりしてください。

(ちなみに ~/.emacs.d/site-start.d 以下のファイルでデフォルトでは読み込まないファイルが他にもいくつかディレクトリには存在するはずです)

現時点では、もうひとつ mozc 用の設定ファイルとして mozc-el_el というファイルがありますが、これは不要ですので消しても OK です(fcitx_mozc パッケージを作り直す時に消します)。

CA証明書

curl や wget で使う信頼する root CA の証明書群は、Plamo-6.2 以前は openssl コマンドに含まれていました。

しかし、Plamo-7.0 では ca_certificate という独立したパッケージとなりました。これは mozilla からダウンロードした rootCA の証明書データ(firefoxなどで使われるnss内のものです)を元に、使えるデータに変換を行っています。

この変換を行うのが

スクリプトです。

このスクリプトは

$ sudo make-ca -g

というように -g オプションを付けると mozilla のサーバに繋いで最新の root CA 証明書のデータファイルを取得し、ホスト上の証明書データを更新しますので、cron で定期的に実行するようにしておくと、root CA の証明書データを定期的に更新できます(自分ではやってないのでちゃんと動くかは未確認ですが)。

lightdm

ここしばらくは Plamo は runlevel 3 で、コンソールログインした後に startx コマンドで X を起動するのが通常で、runlevel 5 の調整はほとんどされていなかったと思います。

今回、少しモダンに(というか今や普通ですが)runlevel 5 で起動してディスプレイマネージャ経由でログインできるように調整してみました。デフォルトは runlevel 3 ですが、たまには気分を変えて runlevel 5 で起動してみてはいかがでしょう?

lightdm 起動時はセッションラッパーとして /usr/bin/lightdm-session が実行されます。この中で設定ファイルとして、

  1. /etc/profile
  2. $HOME/.profile
  3. /etc/xprofile
  4. $HOME/.xprofile
  5. /etc/X11/app-defaults/xinitrc./ 以下のスクリプト
  6. $HOME/.xsession(実行権がついている場合のみ)

を順に読み込みの記述を実行します。adduser でコピーされる $HOME 以下のファイルでは、.xprofile を準備していますので、この中で起動時に設定したい環境変数を設定します。具体的には LANG やインプットメソッド方面の、従来は .xinitrc で実行していたことを実行すれば良いでしょう。

つまり、.xprofile は、.xinitrc の最後でデスクトップ環境を起動する記述がありますが、その部分だけ除いた記述になります。

他に

  • /etc/X11/Xresources, $HOME/.Xresources があれば xrdb を実行する
  • /etc/X11/Xmodmap, $HOME/.Xmodmap があれば xmodmap を実行する

という処理が行われます。

私は普段 2 画面環境なのですが、何も設定しないと lightdm のログインダイアログがどっか行ってしまったり、表示が変だったりしますので、/etc/lightdm/lightdm.confに以下のような設定をしています(左側に HDMI、右側に VGA のモニタ)。

[Seat:*]
display-setup-script=xrandr --output HDMI1 --primary --left-of VGA1

lightdm-gtk-greeter を使っていますので、/etc/lightdm/lightdm-gtk-greeter.conf でログインダイアログを設定します。

[greeter]
active-monitor=0

libvirt, qemu

Plamo 7.0 リリース時点の libvirt, qemu ではローカルに VM を作るには色々と足りていませんでした。パッケージを更新、追加していますのでパッケージを更新してください。contrib/virtualization 以下のパッケージすべてが必要なはずです(contrib/network/ 以下の ebtables 含め)。

すべて更新すると Windows も動きます。

Windows10_install.png

virt-manager

これは contrib パッケージですし、あまり使う人はいないかもしれませんが、6.x のころから kvm や libvirt などとともに contrib に置いてあって、私は仕事で使っています。最近は kvm + libvirt は別に準備した Ubuntu マシンに構築し、virt-manager を使ってリモートの libvirt を操作しています。

Plamo 7.0 用の virt-manager を作成するにあたって、ちょっと Plamo 用のパッチを適用してみました。

libosinfo

virt-manager を使って VM を作成する際に、OS を指定しますが、OS/Distribution の一覧は libosinfo というライブラリを使って取得します。この OS などの DB は libosinfoの公式サイトのリリースディレクトリ に osinfo-db-(日付).tar.gz のように置かれています。

ダウンロードして見てみると、単に XML ファイルがディレクトリに分類されて収録されているだけでした。そこで Plamo 用の XML ファイルを他のディストリビューションのファイルをコピーして変更してでっち上げました。

$ osinfo-query os
 短縮 ID            | 名前                                             | バージョン | ID                                      
----------------------+----------------------------------------------------+----------+-----------------------------------------

  : (snip)
 opensuse42.1         | openSUSE Leap 42.1                                 | 42.1     | http://opensuse.org/opensuse/42.1       
 opensuse42.2         | openSUSE Leap 42.2                                 | 42.2     | http://opensuse.org/opensuse/42.2       
 opensusetumbleweed   | openSUSE Tumbleweed                                | tumbleweed | http://opensuse.org/opensuse/tumbleweed 
 plamo6.2             | Plamo 6.2                                          | 6.2      | http://plamolinux.org/plamo/6.2         
 plamo7.0             | Plamo 7.0                                          | 7.0_20180220 | http://plamolinux.org/plamo/7.0         
 rhel-atomic-7.0      | Red Hat Enterprise Linux Atomic Host 7.0           | 7.0      | http://redhat.com/rhel-atomic/7.0       
 rhel-atomic-7.1      | Red Hat Enterprise Linux Atomic Host 7.1           | 7.1      | http://redhat.com/rhel-atomic/7.1       
 rhel-atomic-7.2      | Red Hat Enterprise Linux Atomic Host 7.2           |
  : (snip)

というような感じで Plamo もリストアップされます。

virt-manager

virt-manage の VM 作成時の OS 一覧は、"Linux" を選択するとメジャーなディストリビューションが一覧されますが、「すべての OS オプションの表示」を選ぶと、ディストリビューションがグループ分けされてメニュー表示されます。

virt-manager1.png

この中に Plamo というグループを作ってみました。このグループはコードに直に書かれていました。

virt-manager2.png

これで Plamo から "Plamo 7.0" を選択すると、あらかじめ定義されたリソース値を指定した状態で VM 作成画面が現れます。

これだけだとまあ見た目だけの問題ですが、一応 Plamo 7.0 を選択すると、デフォルトのでディスクは virtio ディスクに、デフォルトの NIC は virtio-net になるように osinfo の DB を調整してあります。これがないと IDE で rt8139 とかで作られて遅いので、一度 VM 作成前に定義し直さないとだめで意外に面倒です。

virt-manager4.png