LoginSignup
1
5

ESXiにCentOS7をきちんと大量に作成したかった(kickstart + PowerCLI)

Last updated at Posted at 2019-01-12

proxmoxでリベンジしました

はじめに

このエントリではESXi上にCentOS7(1810)を同一構成で多数展開する方法を記載 します したかったのですが、中途半端に終わりました。

テンプレートからのクローンや、vCenterがない場合の丸ごとコピーなど、仮想マシンの作成後にIPアドレス、ホスト名の修正箇所しても、ESXiホスト上やゲストOSの根っこのほうでインストール時のパラメータを持っててしまい、動作に影響がでるのかも?
と、おもったので、仮想マシンを新規作成してISOからインストールしたものを、省エネかつ同一環境の多数展開できるような力技を考えました。
が、あまり省力化できなかった。。。

対象機器および環境

  • ESXi(6.5 Update1)
  • Centos7(Ver18.10)

要件

テストなどの検証環境に利用したりするので、「まったく同一の環境」が欲しいとします。
最小インストールしたのでは、必要なパッケージが入りません。
かといってインストール作業時に必要なパッケージをポチポチするのも面倒。
だし、「あれ?さっきどれ入れたっけ?」病がでるので、再現性が重要。
本番も検証もサーバ用途になるので、IPは固定じゃなきゃダメ。

考え方

kickstart用にインストールISOファイルを修正 → これをkickstartのマスタISOにする。
マスタISOを修正して、展開ホスト用にパラメータ修正したインストールISOをマスタISOから生成する。
そのISOを利用してVMを作成→電源ONすれば、自動的にゲストが展開される。

構成要素

  • CentOS7のインストールISO
  • isolinux.cfg(自動起動用コンフィグ)
  • ks.cfg(Kickstart用コンフィグ)
  • PowerCLI(コマンドラインでESXiを操作するため) ← ライセンス(?)の関係でダメだった

インストール状態で、ある程度利用したいので、以下のパッケージも全自動でインストールできるようにする。

  • open-vm-tools
  • mlocate
  • screen
  • lftp
  • tcpdump
  • unzip
  • vim
  • wget
  • epelリポジトリ

あと、firewallDはSSH以外のポリシーを消すのも、自動処理にいれました。

Kickstart用ISOファイルの作成

CentOSのインストールISOをまるごとコピーして作業する

近くのミラーからダウンロード
CentOS Mirror
下記の例では ftp.riken.jp からダウンロードしています。

ダウンロードしたらマウントして中身を別ディレクトリに丸ごとコピーします。
ここでkickstartマスタイメージの作成を行います。

mkdir -p /root/work/kickstart/mnt
cd /root/work/kickstart/
wget http://ftp.riken.jp/Linux/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso
mount -t iso9660 -o loop ./CentOS-7-x86_64-Minimal-1810.iso ./mnt
cp -rp ./mnt ./ks
umount ./mnt
rm -f ./CentOS-7-x86_64-Minimal-1810.iso

マスター用Kickstartコンフィグ

ここでは、マスター用のkickstartコンフィグを作成します。
さいしょにマスター用KickstartのISOを作成しておき、展開時にアドレスやホスト名のみ修正したISOを作成し、利用するようにします。

以下のコンフィグでは、インストール完了後に自動的に yum update -y を実行させています。
検証環境などで、いつ作成しても、常に同じパッケージのみが導入されている状態にしたい場合、そのあたりを除外したほうがよいかもです。

kickstartコンフィグ

/root/work/kickstart/ks/isolinux/ks.cfg
# System authorization information
auth --enableshadow --passalgo=sha512

# Install OS instead of upgrade
install

# Use CDROM installation media
cdrom

# Use text mode install
text
firstboot --disable
ignoredisk --only-use=sda

# Keyboard layouts
keyboard --vckeymap=jp --xlayouts='jp'

# System language
lang ja_JP.UTF-8

# Network information
network  --bootproto=static --device=ens192 --gateway=10.254.10.254 --hostname=VMinfraserv00.prosper2.net --ip=10.254.10.100 --nameserver=10.254.10.231,10.254.10.232 --netmask=255.255.255.0 --noipv6 --activate

# Reboot after installation
reboot --eject

# Root password
rootpw --iscrypted $6$mUcdnvhr0AoBlPsi$eZ5RAc/Y06s0eQna.S32UlByCvkjqj6LBg8fUB2QxNMpP.Na5HnnDp2TOGNtfuzE2i6k1.Hu7ktAi3WqEtc6U0

# SELinux configuration
selinux --disabled

# System services
services --enabled="chronyd,firewalld"

# Do not configure the X Window System
skipx

# System timezone
timezone Asia/Tokyo --isUtc
user --groups=wheel --name=nteam --password=$6$uKHSpxHoKWtyQTgG$cDSsLr462JXKZMLhHBBQwW6kPo0CCKzeJAhZJ2Yx5Fp78TdfD3kR88r5Jy5jg9pT644bjWFIldODGgpU1mwXj/ --iscrypted --gecos="nteam"

# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm

# Clear the Master Boot Record
zerombr

# Partition clearing information
clearpart --none --initlabel

%post --logfile=/root/ks.post.log

yum update -y
yum install epel-release -y
yum install net-snmp net-snmp-utils screen lftp tcpdump unzip vim wget  open-vm-tools mlocate -y

updatedb

firewall-offline-cmd --remove-service=dhcpv6-client
firewall-offline-cmd --add-service=snmp

cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig

cat <<EOF >>/etc/snmp/snmpd.conf

com2sec p2user  default rocommunity
group   p2group v2c p2user
view    p2view    included   .1
access  p2group ""      any       noauth    exact     p2view none none

EOF

systemctl enable snmpd
systemctl start snmpd


%end


%packages
@^minimal
@core
chrony
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

起動時メニュー表示用のisolinux.cfg

もとISOに isolinux.cfg があるが、中身は削除して以下に置き換える。

/root/work/kickstart/ks/isolinux/isolinux.cfg
timeout 600
default setup

label setup
  menu default
  kernel vmlinuz
  append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img text

ISOファイルの生成

作業用フォルダからISOファイルを作成してマスタとして保管しておきます。
マスターを作成した作業用フォルダはまぎらわしいので、いったん削除しておきます。

mkisofs -J -r -o ./centos7ksmaster.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./ks
rm -rf ./ks

実機用のインストーラを作成

一度マスタのISOを作成しておけば、展開するたびにアドレスとホスト名を修正したISOを生成すればよいです。

実機パラメータ

以下の実機用に修正するものとします。 

項目
FQDN VMinfraserv01.prosper2.net
IF ens192
IP 10.254.10.101
Mask 255.255.255.0
GW 10.254.10.254
DNS Pri 10.254.10.231
DNS Sec 10.254.10.232
domain prosper2.net
IPv6 無効

マスタを作業フォルダにコピー

cd /root/work/kickstart/
mount -t iso9660 -o loop  ./centos7ksmaster.iso ./mnt
cp -rp mnt ksmod
umount ./mnt

パラメーラ修正

 sed -i -e 's/VMinfraserv00/VMinfraserv01/' ./ksmod/isolinux/ks.cfg
 sed -i -e 's/10.254.10.100/10.254.10.101/' ./ksmod/isolinux/ks.cfg

ISOを生成してESXiに転送する。

mkisofs -J -r -o ./VMinfraserv01_10.254.10.101.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./ksmod
scp ./VMinfraserv01_10.254.10.101.iso esxi01:/vmfs/volumes/local_ds01/images/
rm -f ./VMinfraserv01_10.254.10.101.iso
rm -rf ./ksmod

ESXiで仮想マシンを展開(失敗編)

コマンドラインで操作するため、PowerCLIをインストールする。

PowerCLIはMSのPowerShellが必要らしい

# curl https://packages.microsoft.com/config/rhel/7/prod.repo tee | /etc/yum.repos.d/microsoft.repo
# yum install powershell
# pwsh
(で、PowerShellになる)
PS /root> Install-Module -Name VMware.PowerCLI
PS /root> Set-PowerCLIConfiguration -InvalidCertificateAction Ignore

インストール時に、「信頼されていないリポジトリからモジュールをインストールしようとしています。」とかでるので、許可してあげる。

PowerCLIでESXiに接続

PS /root> Connect-VIServer [-Server] <String[]> [-User <String>] [-Password <String>]

Name                           Port  User
----                           ----  ----
esxi01                         443   root

PS /root> get-vm

Name                 PowerState Num CPUs MemoryGB
----                 ---------- -------- --------
VMwin01              PoweredOff 4        4.000
vMA                  PoweredOff 1        0.500
VMwinserv02          PoweredOn  4        2.000
vGNS3                PoweredOff 4        4.000
VMwinserv01          PoweredOn  2        2.000
VMwindows01          PoweredOn  4        4.000
VMwlc01              PoweredOn  2        8.000
VMcheck01            PoweredOn  2        2.000
VMnetserv01          PoweredOn  1        1.000


PS /root> new-vm -name VMinfraserv01 -vmhost esxi01 -Datastore local_ds01  -NumCpu 8 -DiskGB 8  -MemoryGB 1 -DiskStorageFormat thin -CD -GuestId centos7_64Guest -NetworkName PG_GuestOS_V0010
new-vm : 2019/01/12 20:19:50    New-VM          Current license or ESXi version prohibits execution of the requested operation.
At line:1 char:1
+ new-vm -name VMinfraserv01 -vmhost esxi01 -Datastore local_ds01  -Num ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [New-VM], RestrictedVersion
+ FullyQualifiedErrorId : Client20_VmServiceImpl_NewVM_ViError,VMware.VimAutomation.ViCore.Cmdlets.Commands.NewVM

ま、まじか。
ライセンスがないとだめってこと?

ESXiで仮想マシンを展開(妥協編)

いたしかたない。

新規作成して
image.png

 
さっき作成したIOSを選択して
image.png

 
起動させると勝手にインストールしてくれる
image.png

 
待つこと約15分
image.png

無事にインストールできていました。

なんども中途半端。。。

おわりに

感想

最後までコマンドラインでやりたかったのですが、ESXiのライセンス(?)が無く全自動まではこぎつけられませんでした。
あぁ、残念。

vim-cmd で VMXファイル自動生成して~ という方法がありそうですが、ちょっと自分にはハードルが高いです。。。

出典

https://www.certdepot.net/rhel7-get-started-firewalld/
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/installation_guide/sect-kickstart-syntax
https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-6#centos-7
https://code.vmware.com/doc/preview?id=5975#/doc/New-VM.html

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5