tech_memo / linux / cobbler


tech_memo/linux

デュアルブート

トラブルシュート

oldserverサーバにOSインストールするときに、DHCPに失敗する

  • 2016/06/16に発生。サーバ移設後、初のcobbler使用。
  • oldserver01(GW)とtestserver18(GW+DHCPサーバ)を結ぶスイッチングハブが移設前と変わっており、これがブロードキャストを通過させていない可能性が高い
  • 回避策として、oldserver01でDHCPサーバを起動して、testserver18のDHCPサーバにリレーさせる
  • 以下のように、/etc/dhcpd.confを編集して、dhcpdの再起動をかける
    • /etc/dhcpd.confに、対象ホスト単位での設定がある場合
         host generic145 {
             hardware ethernet 00:0C:29:67:5E:6C;
             fixed-address 192.168.0.66;
             option host-name "vm66a";
             option routers 192.168.0.1; # ★ 要設定
             if substring(vendorclass, 0, 9)="PXEClient" {
               if pxetype=00:06 or pxetype=00:07 {
                   filename "/grub/grubx64.efi";
               } else {
                   filename "/pxelinux.0";
               }
             }
             next-server cobblerserver; # ★ 要設定
         }
    • /etc/dhcpd.confに、対象ホスト用のコンフィグがない場合 subnet 192.168.0.0 netmask 255.255.255.0 {
          #option routers             192.168.1.5;
          #option domain-name-servers 192.168.1.1;
          option subnet-mask         255.255.255.0;
          option routers 192.168.0.1; # ★ 要設定
          range dynamic-bootp        192.168.0.200 192.168.0.240;
          filename                   "/pxelinux.0";
          default-lease-time         21600;
          max-lease-time             43200;
          next-server                cobblerserver; # ★ 要設定
      }
  • 注意点は、oldserver01のDHCPサービスは、cobblerでのインストールが完了するまで起動させておくこと。
  • IP取得できた時点で停止してもよいと思ったが、停止するとその後のtestserver18との通信ができなくなる。。。

RHEL7.1で複数NICのサーバのインストール時に、「/dev/root does not exist」のWARNが出力されてインストールが失敗

  • 以下のようなWARNが出力されて、emagencyモードになってしまう
    dracut-initqueue: Warning: Could not boot
    dracut-initqueue: Warning: /dev/root does not exist
  • シングルNICのサーバのpxeコンフィグの差分を確認したところ、kickstartのNICデバイスの指定部分に差があった。
    append initrd=/images/RHEL7.1-x86_64/initrd.img ksdevice=eth0   lang=  kssendmac text  ks=http://....  # testserver11 (複数NICサーバ)
    append initrd=/images/RHEL7.1-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text  ks=http://....  # testserver04
  • ひとまず、testserver04と同じ設定にしたところ、インストールができた。以下、設定を同じにするための手順。
  1. 上記パラメータの差分ができるのは、以下の設定値の違いによるもの(by cobbler system report)
     # testserver11                                                      |  # testserver04
     Kernel Options                 : {'ksdevice': 'eth0'}       |  Kernel Options                 : {}
     Management Interface           :                            |  Management Interface           : False
  2. 設定値を以下のコマンドでtestserver04に合わせる
    cobbler system edit --name=testserver11_rhel71_dual --kopts="" --management=False

RHEL7.1でkoanを使用した場合、インストール時に「WARN : /dev/VolGroup00/LogVol00 does not exists」のメッセージが表示され、インストールが失敗する

  • koanを使用した場合、grubのrootパーティションパラメータに、現在起動しているOSのそれが入力される。下記例。
    kernel /vmlinuz_koan ro root=/dev/VolGroup00/LogVol00 rhgb quiet ks=http://cobblerserver/cblr/svc/op/ks/system/testserver10_rhel61 ksdevice=link kssendmac 
  • RHEL7.1の場合は、rootパーティションパラメータを削除しないと、掲題のWARNNINGが出力され、インストールが中断する。
  • OS再起動前に手動で、root=/dev/VolGroup00/LogVol00 を削除することで回避できる。

cobbler importでTASK FAILED

  • RHEL6.7をimport時に以下のようになった
    [root@testserver18 shishimaru]# cobbler import --path=/root/personal/shishimaru/RHEL-6.7 --name=RHEL6.7
    task started: 2015-11-11_101217_import
    task started (id=Media import, time=Wed Nov 11 10:12:17 2015)
    Found a redhat compatible signature: Packages
    adding distros
    - Warning : Multiple archs found : ['x86_64', 'i386']
    creating new distro: RHEL6.7-x86_64
    creating new profile: RHEL6.7-x86_64
    creating new distro: RHEL6.7-i386
    creating new profile: RHEL6.7-i386
    !!! TASK FAILED !!!
  • /var/log/cobbler/cobbler.logに以下のようなメッセージが出力されていたが、情報不足で根本原因はわからない
    Wed Nov 11 10:12:36 2015 - INFO | an exception occured while running the import manager
    Wed Nov 11 10:12:36 2015 - INFO | error was: [Errno 9] Bad file descriptor
    Wed Nov 11 10:12:36 2015 - INFO | No import managers found a valid signature at the location specified
  • 本事象が発生しても、distroとprofileは登録されている。ただし、yumのリポジトリがkickstartファイルに反映されなくなるなど、RHEL7.1をimportしたときと同じ状態になっている
  • tech_memo/linux/cobbler/add_distribution_rhel71と同じ手順を踏むことで設定不足になった箇所を手動で補える。

追加DiskにRHEL7をインストールして起動しようとするとgrubがカーネル起動時にError 15: File not found

  • grub編集画面でtabを押してもRHEL7のカーネルイメージが見つからない。(tab補完で表示されるのが、RHEL6のものだけ)
  • 外付けUSB HDDが接続されているサーバで発生する
  • grubから認識されているhd1(/dev/sdb)が、外付けUSB HDDのものっぽい(tab補完で確認できるパーティションの数などから推測)
  • 原因はわからないが、以下の操作を実行していると起動できた
    • RHEL7をcobblerで再インストール。その際、MBRを再インストールするよう設定(この前のインストールではMBRは更新していない(RHEL6のもの))
    • インストール完了後、再起動で「no such device: XXXX-XXXXXXXXX」 が表示されgrub rescueが実行されてしまう
    • ブートローダ関連のファイルが存在せず、復旧不可。
    • 再起動後、BIOSにログイン
    • Boot diskをローカルHDDだけにして、他を除外。PXEブートになってしまう。再起動して再度BIOSへ。
    • Boot diskをもとに戻し外付けUSB HDDだけ除外。RHEL7が起動された
    • RHEL6も起動できるようにgrub2-mkconfigで更新。その後の再起動でまたgrub rescueになってしまう

RHEL6がインストールされているサーバに別ディスクでRHEL7をインストールした場合に、RHEL7が起動できない

  • RHEL7インストール時にMBRをインストールしなかったケース。
  • RHEL6のgrub.confにRHEL7の設定を追加して、RHEL7を起動しようとしたところ、カーネルパニックが発生。
  • RHEL6までは、/bootパーティションに100MBの領域を割り当てていたが、RHEL7では256MB以上を推奨とのこと。
  • cobblerのpartition_configで300MBの割り当てをしたところ、RHEL6のgrubからでもRHEL7を起動できるようになった。
  • ちなみに、100MBだとgrub2のインストール(OSインストールの終盤)の時点でpythonエラーが起きることもあった。(必ずではない)

インストール時のパーティション作成でエラー

  • Diskを新規追加して、そのDiskにインストールを試みると、以下のようなエラーが出力される
    specified unpartitioned disk <Disk名> in partition command
  • 解決方法 1
    • kickstartファイルのclearpartオプションで初期化処理をしてやれば解消されるが、Disk構成がサーバごとに異なると、1サーバ 1Kickstartファイルとなってしまう。。。
      clearpart --drives=/dev/disk/by-path/pci-0000:60:00.0-scsi-0:2:1:0 --initlabel
  • 解決方法 2
    • インストール前に、fdiskで何かしらの初期化処理を加える
      fdisk <Deviceファイル>
      Command (m for help): g
      Building a new GPT disklabel (GUID: AF7B5C40-E8B8-44DF-98C5-D0F99FE8EF63)
       
      Command (m for help): w

PXEブート時にインストールイメージがダウンロードされない

  • 1つのMACアドレスに対して、複数のsystemを作成した場合に遭遇する。
  • 原因は、Netboot Enabled=Trueのsystemが存在していても、最後に設定したNetboot Enabledオプションがtftbootのpxebootコンフィグファイルに反映されるため。(最後にFalse設定されていると、本問題が発生する)
  • 手動で一度、Netboot Enabled=Trueを実行してやればよい
    [root@testserver18 ~]# cobbler system edit --name=testserver13_rhel71_dual --netboot=True
  • PXEブート時に、インストールイメージがダウンロードされるように設定されているかは、以下のファイルから確認できる
    [root@testserver18 ~]# vim /tftpboot/pxelinux.cfg/01-<MACアドレス>
    default linux
    prompt 0
    timeout 1
    label linux
            kernel /images/RHEL7.1-x86_64/vmlinuz
            ipappend 2
            append initrd=/images/RHEL7.1-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text ks=http://cobblerserver/cblr/svc/op/ks/system/testserver13_rhel71_dual
  • ちなみに、イメージダウンロードされない場合は、下記のような設定になっている。
    DEFAULT local
    PROMPT 0
    TIMEOUT 0
    TOTALTIMEOUT 0
    ONTIMEOUT local
    
    LABEL local
            LOCALBOOT -1

LiveDVDをPXEブート

UEFIでの設定

PXEブートだけどマニュアル(インタラクティブ)でインストール

  • /tftpboot/pxelinux.cfg/01-<MAC-Address>のksオプションを削除してやればよい(下記は説明のためコメントアウトっぽいことをしているが本当にコメントアウトが有効かは未確証)
    default linux
    prompt 0
    timeout 1
    label linux
           kernel /images/RHEL7.1-x86_64/vmlinuz
           ipappend 2
         # append initrd=/images/RHEL6.7-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text  ks=http://cobblerserver/cblr/svc/op/ks/system/vmdb6_rhel67
           append initrd=/images/RHEL6.7-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text
  • インストール設定の途中で、インストールイメージのロケーションを聞かれる(NFS or HTTPサーバ or ローカルディスク)ので、適切な値を指定してやればよい
  • RHEL7の場合は、inst.repoオプションを指定する必要がある
    default linux
    prompt 0
    timeout 1
    label linux
           kernel /images/RHEL7.1-x86_64/vmlinuz
           ipappend 2
         # append initrd=/images/RHEL7.1-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text  ks=http://cobblerserver/cblr/svc/op/ks/system/vmdb6_rhel71
           append initrd=/images/RHEL7.1-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text inst.repo=http://cobblerserver/cblr/ks_mirror/RHEL7.1/
  • なお、kickstartのオプションにインタラクティブモードがあるが、RHEL7では使用できないのと、RHEL6でも一部の設定しかインタラクティブ設定ができない
  • textオプションがついている場合は、CUIでのインストールとなる。GUIインストールしたい場合は、上記textオプションを削除すればよい

Kickstart

SNIPPETファイルの優先順位

  • 以下の順番で探しにいく。
    /var/lib/cobbler/snippets/per_system/$snippet_name/$system_name
    /var/lib/cobbler/snippets/per_profile/$snippet_name/$profile_name
    /var/lib/cobbler/snippets/per_distro/$snippet_name/$distro_name
    /var/lib/cobbler/snippets/$snippet_name

Cobblerサーバ構築

Distributionの追加

RHEL7.1

RHEL6.5

ESXi5.5


ESXi6.0 for EUFI

Cobbler System(クライアント)を新規追加

[root@testserver18 cobbler]# cobbler system add --profile=RHEL6.1-x86_64 --name=21F-17_rhel61 --interface=eth0 --static=yes --mac-address=D4:3D:7E:82:9A:6B --ip-address=192.168.23.101 --subnet=255.255.255.0 --gateway=192.168.23.211 --hostname=21F-17 --kickstart=/var/lib/cobbler/kickstarts/myapp.ks
  • NICが複数ある場合は、対象のNICを指定するよう、--kopts="ksdevice=eth0" のオプションを追加する
  • 追加後はcobbler syncを忘れずに。

NICが複数ある場合のIPアドレス設定

  • 以下のように--interfaceオプションと一緒にアドレスを指定する
    [root@testserver18 ~]# cobbler system edit --name=racdb1_rhel71 --interface=eth1 --ip-address=192.168.112.11 --mac-address=8C:89:A5:2C:00:17

要設定

  • OSインストール前に実行
  • 新らしく、サーバを追加した際には、cobblerで、/etc/hostsにエイリアスを追加されるように設定しておかないと、OracleClient?の自動インストールに失敗する
  • cobbler実行前に、以下のシェルにエイリアスを追加しておく。
    testserver18:/var/www/cobbler/localmirror/os/hosts_setup.sh
  • ホストベース認証が利用できるように以下のファイルにも新規追加のhost名を追記
    testserver18:/var/www/cobbler/localmirror/ssh/ssh_setup.sh

OS再インストール手順

  • cobblerサーバはセットアップされている状態からOSの再インストールをする場合。
  • cobblerに必要なdaemonのチェック(httpdなど)
    [root@testserver18 ~]# cobbler check
    The following are potential configuration items that you may want to fix:
    
    1 : some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely.  Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobbler get-loaders' command is the easiest way to resolve these requirements.
    2 : since iptables may be running, ensure 69, 80, and 25151 are unblocked
    3 : debmirror package is not installed, it will be required to manage debian deployments and repositories
    4 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one
    5 : One or more repos referenced by profile objects is no longer defined in cobbler: CentOS5-epel, CentOS5-dag
    6 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them 
    
    Restart cobblerd and then run 'cobbler sync' to apply changes.
  • psでもチェック
    [root@testserver18 ~]# ps -ef | grep http
    root      5120     1  0 Feb13 ?        00:00:00 /usr/sbin/httpd
    ・
    ・
    ・
    [root@testserver18 ~]# ps -ef | grep cobbler
    root     10352     1  0 Feb17 ?        00:00:00 /usr/bin/python /usr/bin/cobblerd --daemonize
    root     28573 26341  0 21:06 pts/5    00:00:00 grep cobbler
    
    [root@testserver18 ~]# ps -ef  | grep dhcp
    root     13015 12310  0 22:10 pts/14   00:00:00 grep dhcp
    root     28921     1  0 21:07 ?        00:00:00 /usr/sbin/dhcpd
  • cobbler sync
    [root@testserver18 ~]# cobbler sync
    task started: 2013-02-19_210741_sync
    task started (id=Sync, time=Tue Feb 19 21:07:41 2013)
    running pre-sync triggers
    cleaning trees
    ・
    ・
    ・
  • system(OSインストールサーバ)の登録。先述の項目を参照
  • 再インストール対象サーバ設定確認。ProfileやIP、MACアドレスが正しいか確認する。
    [root@testserver18 ~]# cobbler system report --name=testserver10_rhel61                                                                                         [4/462]
    Name                           : testserver10_rhel61
    Comment                        :
    Gateway                        : cobblerserver
    Hostname                       : testserver10
    Image                          :
    Kernel Options                 : {}
    Kernel Options (Post Install)  : {}
    Kickstart                      : <<inherit>>
    Kickstart Metadata             : {}
    Management Classes             : []
    Name Servers                   : []
    Name Servers Search Path       : []
    Netboot Enabled                : False
    Owners                         : ['admin']
    Power Management Address       :
    Power ID                       :
    Power Password                 :
    Power Management Type          : ipmitool
    Power Username                 :
    Profile                        : RHEL6.1-x86_64
    Red Hat Management Key         : <<inherit>>
    Red Hat Management Server      : <<inherit>>
    Server Override                : <<inherit>>
    Template Files                 : {}
    Virt Auto Boot                 : <<inherit>>
    Virt CPUs                      : <<inherit>>
    Virt File Size(GB)             : <<inherit>>
    Virt Path                      : <<inherit>>
    Virt RAM (MB)                  : <<inherit>>
    Virt Type                      : <<inherit>>
    Interface =====                : eth0
    Bonding Mode                   :
    Bonding Master                 :
    Bonding Opts                   :
    DHCP Tag                       :
    DNS Name                       :
    IP Address                     : 192.168.0.110
    MAC Address                    : 6C:62:6D:0E:52:FA
    Static                         : True
    Static Routes                  : []
    Subnet                         : 255.255.255.0
    Virt Bridge                    :
  • Netboot ONに変更(clientがkoanを使える場合は不要。まだOSがインストールされていないときなどに利用)
    [root@testserver18 cobbler]# cobbler system edit --name=testserver10_rhel61 --netboot-enabled=True
    • property名は--小文字で指定可能。スペースはハイフンで置き換える
      • Network boot --> --network-boot
    • 複数指定する場合はvalueをダブルクォーテーションで囲んで、その中でスペースで区切る。
      [root@testserver18 cobbler]# cobbler distro edit --name=RHEL6.1-x86_64 --kopts-post="processor.max_cstate=1 intel_idle.max_cstate=0 transparent_hugepage=never"
  • 後はclient再起動して、起動画面でF12を押してPXEブートを実行する。F12を押さない方法(Koanを利用する方法)は、下記「Koanを利用する場合」を参照
  • 正常にinstall開始されれば、cobblerサーバにログが出力される。
    [root@testserver18 cobbler]# cd /var/log/cobbler
    [root@testserver18 cobbler]# less install.log

Koanを利用する場合

  • clientのCOBBLER_SERVER環境変数確認
    [root@testserver18 cobbler]# ssh testserver10
    Last login: Tue Feb 19 21:34:21 2013 from myserver
    [root@testserver10 ~]# env | grep COBBLER
    COBBLER_SERVER=cobblerserver
  • clientでkoanコマンド
    • koanがインストールされていなかった。yumで入れる場合はepelのレポジトリとkeyを認証できるよう、以下のrpmをinstallする。(RHELのバージョンにあったやつを選択)
      [root@testserver18 yum.repos.d]# cd /var/www/cobbler/localmirror/epel/
      [root@testserver18 epel]# ls
      epel-release-5-4.noarch.rpm  epel-release-6-8.noarch.rpm
    • その他色々rpmが足りない(RHEL5.5)。以下をInstallする。
      [root@testserver18 ~]# cd /var/www/cobbler/localmirror/cobbler
      [root@testserver18 cobbler]# ls
      cobbler-2.0.4-1.el5.noarch.rpm  koan-2.2.3-2.el6.noarch.rpm     python-cheetah-2.0.1-1.el5.x86_64.rpm  python-simplejson-2.0.9-1.el5.x86_64.rpm
      koan-2.0.5-1.el5.noarch.rpm     libyaml-0.1.2-3.el5.x86_64.rpm  python-netaddr-0.5.2-1.el5.noarch.rpm  PyYAML-3.08-4.el5.x86_64.rpm
  • koanでcobblerサーバのシステム見れるか確認
    [root@testserver10 ~]# koan --server=cobblerserver --list=systems
    - looking for Cobbler at http://cobblerserver:80/cobbler_api
    testserver04_rhel55
    testserver06_rhel63
    ・
    ・
    ・
  • koanで入れ替えOS設定
    [root@testserver10 ~]# koan --server=cobblerserver --system=testserver10_rhel61 --replace-self
    - looking for Cobbler at http://cobblerserver:80/cobbler_api
    - reading URL: http://cobblerserver/cblr/svc/op/ks/system/testserver10_rhel61
    install_tree: http://cobblerserver/cblr/links/RHEL6.1-x86_64
    downloading initrd initrd.img to /boot/initrd.img_koan
    url=http://cobblerserver/cobbler/images/RHEL6.1-x86_64/initrd.img
    - reading URL: http://cobblerserver/cobbler/images/RHEL6.1-x86_64/initrd.img
    downloading kernel vmlinuz to /boot/vmlinuz_koan
    url=http://cobblerserver/cobbler/images/RHEL6.1-x86_64/vmlinuz
    - reading URL: http://cobblerserver/cobbler/images/RHEL6.1-x86_64/vmlinuz
    - ['/sbin/grubby', '--add-kernel', '/boot/vmlinuz_koan', '--initrd', '/boot/initrd.img_koan', '--args', '"ks=http://cobblerserver/cblr/svc/op/ks/system/testserver10_rhel61 ksdevice=link kssendmac lang= text "', '--copy-default', '--make-default', '--title=kick1361279390']
    - reboot to apply changes
  • /etc/grub.confにtitle kick1361279390〜が追加されたこと確認。
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that 
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title kick1361279390
            root (hd0,0)
            kernel /vmlinuz_koan ro root=/dev/VolGroup00/LogVol00 rhgb quiet ks=http://cobblerserver/cblr/svc/op/ks/system/testserver10_rhel61 ksdevice=link kssendmac lang= text
            initrd /initrd.img_koan
    title Red Hat Enterprise Linux Server (2.6.18-194.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
            initrd /initrd-2.6.18-194.el5.img

Other

  • cobbler設定リスト表示
    [root@testserver18 ~]# cobbler system list
       dbserver
       k1_rhel55
       ・
       ・
       ・
       ・

Cobbler自前スクリプト格納場所

  • testserver18:/var/www/cobbler/localmirror

Install先Diskスペース不足による、OracleClient?がインストール失敗

  • VM環境で、20GBのDiskスペースでCobblerインストールを実行したところ、16GBをSWAP領域にとられ、Disk不足により、OracleClient?がインストールされない問題が起きた。
    その場合、SWAPからDiskに割り当てを移して、OracleClient?のインストールスクリプトを手動で実行する
    • 1. SWAPからDiskへの割り当て移動
    • 2. OracleClient?インストールスクリプト実行
      [root@vm63a config_on_1stboot]# pwd
      /var/tmp/config_on_1stboot
      [root@vm63a config_on_1stboot]# sh oracle_go.sh
      Changing permissions of /home/oracle/oraInventory.
      Adding read,write permissions for group.
      Removing read,write,execute permissions for world.
      
      Changing groupname of /home/oracle/oraInventory to oinstall.
      The execution of the script is complete.
      Check /home/oracle/app/oracle/product/11.2.0/client_1/install/root_vm63a_2014-06-06_15-00-14.log for the output of root script

Tips


PXEブートの仕組み

pxelinux.0とかの役割メモ