Proxmox VEについて

By ribbon @ 2017-08-13 22:53

2017-08-13 の IRC定例で話題になった Proxmox-VE について、簡単にメモしておきます。

Proxmox-VE の一次情報は、 https://pve.proxmox.com/wiki/Main_Page  です。

Proxmox-VE はVMware ESXiに似た、仮想化アプライアンスで、Webベースで仮想マシンの制御や、LXCベースのコンテナの制御を行えます。オープンソース版と商用版がありますが、kernelがエンタープライズ版か否かくらいの違いしかありません。
ベースは、Debianで、その上にPerlで書かれたVM管理用ツールがインストールされています。ISOイメージからインストールすると、ターンキー仮想ホストとして、ディスクの初期化からパーティションの作成まで一気にやってしまいます。

LVMベースのディスク管理を使用しています。各仮想マシンはLVMのシンプロビジョニングか、通常のファイルで保持されます。スナップショットを使ったバックアップ機能もあります。

openSUSEの検証などにはよく使っています。ほぼすべてメッセージが日本語化されていますので、わかりやすいと思います。ESXiと違ってDebian 9 が動くマシンであればそのまま使えます。お手軽な仮想環境制御ツールをお探しの方は、一度試してみてはいかがでしょうか。

 

2017年1月15日の記事で、firstboot的な機能をautoyastに埋め込む例を紹介しました。しかし、当該記事では、うまくいかない場合があることが分かりました。記事中では

<scripts>
<post-scripts config:type=”list”>
<script>

と言う記載がありましたが、ここが問題でした。

実は、autoyastで、設定後、各種スクリプトを動かすための設定方法は
マニュアルにきちんと書いてあります。<scripts>の次のタグの記述で、どのタイミングでスクリプトを動かすかを決められるのです。そして、<post-scripts>の場合には、再起動後YaSTが各種設定をしている中でスクリプトを動かします。これがどういう問題を引き起こすかというと、スクリプトの中にzypperコマンドでリポジトリを設定しようとするときに、ファイル競合を起こして設定が出来ないという問題が発生してしまうのです。

そこで、<init-scripts>に切り換えて、各種daemon等が起動したあとに、スクリプトを実行するようにします。そうすることで、zypper コマンドが正しく動くようになりました。

google での検索では、当該マニュアルまでうまくたどり着けなかったのですが、/usr/share/doc/packages/autoyast2/ 配下にマニュアルがあり、そこを参照することで原因と対策が分かりました。やはり、マニュアルは読むものですね。

 

下記の記事に対する更新情報があります。こちらを参照してください。

firstboot 機能はautoyastにも組み込めます。しかし、firstbootの解説の所にはあっさりとしか書いてないので、いろいろやってみましたがうまくいきませんでした。しかし、autoyastの設定の中から代替の方法を見つけました。
以下のようにautoinnst.xml に記述を追加すると、再起動後の初期設定中にスクリプトを動かす事が出来ます。

  <scripts>
<post-scripts config:type=”list”>
<script>
<debug config:type=”boolean”>true</debug>
<feedback config:type=”boolean”>false</feedback>
<feedback_type/>
<filename>demo.sh</filename>
<interpreter>shell</interpreter>
<location><![CDATA[]]></location>
<network_needed config:type=”boolean”>false</network_needed>
<notification>demo</notification>
<param-list config:type=”list”/>
<source><![CDATA[#! /bin/sh
touch /root/testend
sleep 50

]]></source>
</script>
</post-scripts>
</scripts>

この設定は autoinst機能を追加したYaSTでも設定出来ます。やってみましょう。

まずYaSTを起動し、「その他」→「独自のスクリプト」を選択し、編集画面に移ります。

170115autoyast01

新規作成を選び、スクリプト名(ファイル名)を入力し、スクリプトの実体を、「スクリプトソース」に記入します。これで、autoyastが生成するautoinstファイルにスクリプトが組み込まれます。

170115autoyast02

さらに、生成されたautoinstスクリプトを適宜編集し、自動実行を行わせるサーバに組み込みます。その後、ネットワーク越しに自動インストールが行われ、再起動後に、先ほど設定したスクリプトが動作します。「demo」というタイトルが表示されています。

170115autoyast03

実行後、ログインしてみると、ちゃんとファイルが出来ています。

170115autoyast04

 

 

firstboot機能を使ってみました

By ribbon @ 2017-01-14 18:14

openSUSEには、起動したときに1回だけ特定の処理を動かす firstboot という機能があります。試しにちょっと使ってみました。

  • モジュールの追加
    YaST2-firstboot モジュールをインストールします。
  • ファイルの作成
    touch /var/lib/YaST2/reconfig_system ファイルを作成します。
  • 再起動

すると、再起動後、インストール時に見たような物と同じような画面が表示されます。

170114firstboot01

一通り先に進んでいって処理を終えると通常のログイン画面になります。その後再起動しても、もうこの画面は出ません。

また、再起動後、表示される手順は /etc/YaST2/firstboot.xml に定義されています。ここでの定義を編集すれば、処理を変更することが可能です。

autoyastがほぼうまくいった

By ribbon @ 2016-05-15 18:10

ほぼ、autoyast がうまくいきました。

うまくいかなかった原因はいくつかありますが、おそらく、openSUSEインストール時に作成するautoinst.xmlがバグってます。たぶん。

通常はインストールするパッケージがずらっと並ぶのですが、なぜか、そのパッケージを*削除*する一覧がくっついているのですね。こんな感じで。

<patterns config:type=”list”>
<pattern>yast2_basis</pattern>
<pattern>x11</pattern>
<pattern>sw_management</pattern>
<pattern>lxde</pattern>
<pattern>fonts</pattern>
<pattern>enhanced_base</pattern>
<pattern>apparmor</pattern>
<pattern>base</pattern>
<pattern>multimedia</pattern>
<pattern>remote_desktop</pattern>
</patterns>
<remove-packages config:type=”list”>
<package>zypp-plugin-python</package>
<package>zisofs-tools</package>
<package>ypbind</package>
<package>yp-tools</package>
<package>yast2-vm</package>
<package>yast2-users</package>
<package>yast2-tune</package>
….

これじゃ、パッケージの依存関係が正しくなるわけがありません。セクションを手動で削ったらほぼうまくいきました。あと、セクションもうまくハンドリング出来ないので、ここも削ります。

ただ、lxde環境だと、更に問題があります。起動時にlxdmが設定されません。xdm になってしまいます。しかし、kde環境を指定してインストールすると、ちゃんとkdm が指定されて、起動するので、lxdmに設定するという部分が抜けちゃっているのだと思います。

 

autoyastがうまくいかない(状況)

By ribbon @ 2016-05-06 22:40

autoyastを使って自動インストールをしようとしていますがうまくいきません。普通にインストールするとき、インストールした状況を/root/autoinst.xml というファイルに書き込むように指示出来るのですが、そのファイルを自動インストール時に使ってもインストール途中に、パッケージの依存関係解決に失敗します。

そもそも、インストールパッケージに不要なものが入ってしまいます。たとえばこんな感じで、本来DVDに入っていないパッケージが入ってしまっています。

autoyastbad01

試しにこれらのファイルを手でautoinst.xml から取り除いても結果は同じでした。途中でこんな感じになります。

autoyastbad02

bashはインストールされ、存在するパッケージなのですが、なぜか依存関係が破綻していると思われています。理由は謎です。

 

前回(http://blog.geeko.jp/ribbon/1296) では、途中までしかうまくいきませんでしたが、その後いろいろとやってみて、ほぼうまくいくようになりました。

大まかな流れは、ipxe起動->pxelinux起動->autoyastによる自動インストールとなります。要するに、pxelinux を ipxeでキックしてあげる、ということになります。よってipxe起動以後の手順は、SUSEのマニュアルにある、自動インストールの説明とほぼ同じになります。


準備

◆1 dhcpの設定

前回と違い、ipxe起動ファイルをtftpのroot直下に置きました。こんな感じになります。

default-lease-time 14400;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.101 192.168.10.127;
default-lease-time 14400;
max-lease-time 172800;
}
if exists user-class and option user-class = "iPXE" {
filename  "boot.ipxe";
}
else  {
filename "iPXE/undionly.kpxe";
}
next-server 192.168.10.41;

この設定により、iPXEが、OSを起動するための初期スクリプト boot.ipxeをダウンロードすることが出来ます。

◆2 boot.ipxe の準備

内容を整理し、以下のようにしました。

#!ipxe
:start
menu Please choose an operating system to install
item --gap openSUSE
item pxelinux    pxelinux boot
item shell       enter iPXE shell
item exit        exit to BIOS

choose --default pxelinux --timeout 30000 target && goto ${target}

:pxelinux
boot http://192.168.10.41/pxelinux.0
boot || goto failed

:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start

:failed
echo Booting failed, dropping to shell
goto shell

◆3 pxelinxの準備

前回の失敗は、ipxeから起動するLinuxローダに、isolinuxを使用したことでした。これはISOしか見ないようで、ネットワークブートには対応していなかったようです。ネットワークブートに必要なのはpxelinuxなので、これを、/usr/share/syslinux/pxelinux.0 から /srv/tftpboot にコピーします。続いて、/srv/tftpboot配下にpxelinux.cfg ディレクトリを用意します。

◆4 ブート用ファイルの準備

SUSEの自動インストールの説明のように、linux initrd message biostest memtest を、インストールCDイメージから(たとえば/srv/tftpboot/install/leap42/CD1/boot/x86_64/loader/から)コピーします。

◆5 pxelinux.cfg/default ファイルの作成

pxelinuxが使う設定ファイルを用意します。基本的には インストールイメージ内にあるisolinux.cfgをコピーし、配下の以下のように用意しました。単なる自動起動だけであれば、不要な項目も多いですが….

default linux

# hard disk
label harddisk
  localboot -2

# install
#label linux
#  kernel linux
#  append initrd=initrd splash=silent showopts

# install
label linux
  kernel linux
  append initrd=initrd splash=silent showopts install=http://192.168.10.41/install/leap42/CD1

# upgrade
label upgrade
  kernel linux
  append initrd=initrd splash=silent upgrade=1 showopts

# rescue
label rescue
  kernel linux
  append initrd=initrd splash=silent rescue=1 showopts

# mediacheck
label mediachk
  kernel linux
  append initrd=initrd splash=silent mediacheck=1 showopts

# memory test
label memtest
  kernel memtest

#ui             gfxboot bootlogo message
implicit        1
prompt          1
timeout         60

◆7 autoyast.xml を用意する

あらかじめ作成したautoyast.xml をインストールイメージに(この場合は、/srv/tftpboot/install/leap42/CD1/)コピーします。

◆8  起動する
まず、ipxeで起動すると以下の画面が出ます。

pxeok

enterを押すか、タイムアウトまで待つと、ipxeがsyslinuxを起動します。

syslinuxok

enterを押すか、タイムアウトまで待つと、openSUSEが起動します。そして、autoyast.xml が処理され、自動インストールが始まります。

autoinstall-01

ただ、手動でインストールしたautoyast.xmlが、なぜか不正なため、インストール処理は失敗します。

autoinstall-02

とりあえずここまで出来るようになりました。