Eucalyptus LiveDVD を作ってみる 3日目

これは (1枚目) Japan Eucalyptus Advent Calendar 2015 の3日目のエントリです。

え?更新が途切れた?そんなバカな…。2日目の続きをやりまぁす。

2日目のログをもう少し遡ると以下のように変なところで umount が走ってコケてます。

  Installing: comps-extras                 ##################### [456/456]warning: %posttrans(nfs-uti
-1:1.2.3-64.el6.x86_64) scriptlet failed, exit status 6
error reading information on service NetworkManager: No such file or directory
error reading information on service sshd: No such file or directory
+ echo RUN_FIRSTBOOT=NO
+ sed -i -e 's/^Defaults    requiretty/#Defaults    requiretty/' /etc/sudoers
+ /usr/sbin/useradd -c 'LiveMedia default user' eucalyquitous
+ /usr/bin/passwd -d eucalyquitous
+ echo 'eucalyquitous     ALL=(ALL)     NOPASSWD: ALL'
+ /bin/sed -i -e 's|^\(exec /sbin/mingetty \)\(.*\)|\1 --autologin eucalyquitous \2|' /etc/init/tty.c
f
umount: /mnt/livecd/tmp/imgcreate-6F78B4/install_root/proc: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /mnt/livecd/tmp/imgcreate-6F78B4/install_root: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
loop: can't delete device /dev/loop0: Device or resource busy
e2fsck 1.41.12 (17-May-2010)
_Eucalyquitous: recovering journal
Pass 1: Checking inodes, blocks, and sizes

んじゃー、ビルドが成功している Wakame-vdc の LiveDVD ではここはどうなっているのかと言うと、

  Installing: gnome-backgrounds            ##################### [907/907]error reading information
 on service NetworkManager: No such file or directory
cp: cannot stat `/etc/resolv.conf': No such file or directory
+ echo RUN_FIRSTBOOT=NO
+ sed -i -e 's/^Defaults    requiretty/#Defaults    requiretty/' /etc/sudoers
+ /usr/sbin/useradd -c 'LiveMedia default user' wakame
+ /usr/bin/passwd -d wakame
+ echo 'wakame     ALL=(ALL)     NOPASSWD: ALL'
+ /bin/sed -i -e 's|^\(exec /sbin/mingetty \)\(.*\)|\1 --autologin wakame \2|' /etc/init/tty.conf
+ sed -i -e 's/\[daemon\]/[daemon]\nTimedLoginEnable=true\nTimedLogin=wakame\nTimedLoginDelay=10/' /etc/gdm/custom.conf

やはり変な umount は発生していないようです。

違う点と言えば Wakame-vdc LiveDVD のほうでは他にも処理を入れていることと、%post –nochroot のセクションもあるという点です。なのでバッドノウハウな気もしますが、以下の処理を追加で kickstart に入れて再度ビルドしてみました。

%post --nochroot

cat > /root/postnochroot-install << EOF_postnochroot
#!/bin/bash

rm -rf ${INSTALL_ROOT}/usr/share/{doc,man,info}

EOF_postnochroot

/bin/bash -x /root/postnochroot-install 2>&1 | tee /root/postnochroot-install.log

うーん、やっぱり以下のように失敗します。

+ rm -rf /mnt/livecd/tmp/imgcreate-O60XR_/install_root/usr/share/doc /mnt/livecd/tmp/imgcreate-O60XR_
/install_root/usr/share/man /mnt/livecd/tmp/imgcreate-O60XR_/install_root/usr/share/info
umount: /mnt/livecd/tmp/imgcreate-O60XR_/install_root/proc: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /mnt/livecd/tmp/imgcreate-O60XR_/install_root: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
loop: can't delete device /dev/loop1: Device or resource busy

fuser で見てみます。

+ rm -rf /mnt/livecd/tmp/imgcreate-lWxyO0/install_root/usr/share/doc /mnt/livecd/tmp/imgcreate-lWxyO0
/install_root/usr/share/man /mnt/livecd/tmp/imgcreate-lWxyO0/install_root/usr/share/info
+ /sbin/fuser -vm /mnt/livecd/tmp/imgcreate-lWxyO0/install_root/proc/
                     USER        PID ACCESS COMMAND
/mnt/livecd/tmp/imgcreate-lWxyO0/install_root/proc/:
                     root       1355 f.... rsyslogd
                     root       1445 f.... acpid
                     haldaemon   1457 f.... hald
                     root       3440 F.... libvirtd
                     root       7273 F.... libvirtd
                     root      13917 F.... libvirtd
                     root      14660 F.... libvirtd
                     root      19529 F.... libvirtd
                     root      28104 F.... libvirtd
umount: /mnt/livecd/tmp/imgcreate-lWxyO0/install_root/proc: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /mnt/livecd/tmp/imgcreate-lWxyO0/install_root: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
loop: can't delete device /dev/loop5: Device or resource busy

libvirtd….?あぁ!もしかして!と思い Eucalyptus に関するパッケージのインストール指定を外してビルドしてみると

+ rm -rf /mnt/livecd/tmp/imgcreate-tERkpC/install_root/usr/share/doc /mnt/livecd/tmp/imgcreate-tERkpC
/install_root/usr/share/man /mnt/livecd/tmp/imgcreate-tERkpC/install_root/usr/share/info
+ /sbin/fuser -vm /mnt/livecd/tmp/imgcreate-tERkpC/install_root/proc/
                     USER        PID ACCESS COMMAND
/mnt/livecd/tmp/imgcreate-tERkpC/install_root/proc/:
                     root       1355 f.... rsyslogd
                     root       1445 f.... acpid
                     haldaemon   1457 f.... hald
                     root       3440 F.... libvirtd
                     root       7273 F.... libvirtd
                     root      13917 F.... libvirtd
                     root      14660 F.... libvirtd
                     root      19529 F.... libvirtd
                     root      28104 F.... libvirtd
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes

あれ?半分勘違い。てっきり libvirtd はインストールした Eucalyptus のパッケージに動かされたのかと思いましたが、どうやら表示されているのはビルド環境のホスト側の情報だったみたいです。が、一方で umount のエラーが消えたのはやはり Eucalyptus のパッケージが関係しているようです。

ということで、Eucalyptus のパッケージをインストールすると何が起きるのかを見てみたいと思います。

まずインストールされるパッケージは以下。

# grep "Installing: euca" 20151203-4.eucaly.log
  Installing: eucalyptus                   ##################### [251/456] 
  Installing: eucalyptus-blockdev-utils    ##################### [259/456]/var/tmp/rpm-tmp.EoxuZE: line 2: /sbin/service: No such file or directory
  Installing: eucalyptus-axis2c-common     ##################### [377/456] 
  Installing: euca2ools                    ##################### [379/456] 
  Installing: eucalyptus-admin-tools       ##################### [380/456] 
  Installing: eucalyptus-imaging-toolkit   ##################### [389/456] 
  Installing: eucanetd                     ##################### [418/456] 
  Installing: eucalyptus-common-java-libs  ##################### [423/456] 
  Installing: eucalyptus-common-java       ##################### [424/456] 
  Installing: eucalyptus-nc                ##################### [442/456]Stopping libvirtd daemon: [FAILED]
  Installing: eucalyptus-sc                ##################### [444/456]Starting SCSI target daemon: [  OK  ]
  Installing: eucalyptus-cloud             ##################### [445/456] 
  Installing: eucalyptus-walrus            ##################### [446/456] 
  Installing: eucalyptus-cc                ##################### [447/456] 
  Installing: eucaconsole                  ##################### [449/456] 
  Installing: eucalyptus-service-image     ##################### [450/456] 

これらのパッケージをダウンロードして何が実行されるかを見ます。で、全部をここに貼るのもアレなので原因になるものだけ。

# rpm -qp --scripts eucalyptus-nc-4.2.0-0.0.24054.2.el6.x86_64.rpm 
警告: eucalyptus-nc-4.2.0-0.0.24054.2.el6.x86_64.rpm: ヘッダ V4 RSA/SHA1 Signature, key ID c1240596: NOKEY
postinstall scriptlet (using /bin/sh):
if [ -e /etc/rc.d/init.d/libvirtd ]; then
    chkconfig --add libvirtd
    /sbin/service libvirtd restart
fi
chkconfig --add eucalyptus-nc
usermod -a -G kvm eucalyptus
exit 0
preuninstall scriptlet (using /bin/sh):
if [ "$1" = "0" ]; then
    if [ -f /etc/eucalyptus/eucalyptus.conf ]; then
        /sbin/service eucalyptus-nc stop
    fi
    chkconfig --del eucalyptus-nc
fi
exit 0

あぁ、やっぱり libvirtd を起動してますね。あとは

# rpm -qp --scripts eucalyptus-sc-4.2.0-0.0.24054.2.el6.x86_64.rpm 
警告: eucalyptus-sc-4.2.0-0.0.24054.2.el6.x86_64.rpm: ヘッダ V4 RSA/SHA1 Signature, key ID c1240596: NOKEY
postinstall scriptlet (using /bin/sh):
if [ -e /etc/rc.d/init.d/tgtd ]; then
    chkconfig --add tgtd
    /sbin/service tgtd start
fi
exit 0

あぁ、tgtd も起動してますね。他は無さそうですので、この2つを停止するように kickstart ファイルに書いてビルドします。

+ /bin/sed -i -e 's|^\(exec /sbin/mingetty \)\(.*\)|\1 --autologin eucalyquitous \2|' /etc/init/tty.c
onf
+ /sbin/service libvirtd stop
Stopping libvirtd daemon:                                  [  OK  ]
+ /sbin/service tgtd stop
Stopping SCSI target daemon:                               [  OK  ]
+ rm -rf /mnt/livecd/tmp/imgcreate-ST404K/install_root/usr/share/doc /mnt/livecd/tmp/imgcreate-ST404K
/install_root/usr/share/man /mnt/livecd/tmp/imgcreate-ST404K/install_root/usr/share/info
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes

やったー。成功です。ってことで、明日はこの作成した ISO ファイルで起動して Eucalyptus のセットアップができるかを試してみます。