vSphere上でUbuntu 18.04をTerraformでデプロイするのに苦労したのでメモ。
vSphere 6.7U2を使用。
参考にしたページは以下のページ。
- Create a VM Template for Ubuntu 18.04 LTS
- How to make guest customization work on Ubuntu18.04 Server and Desktop (56409)
大まかな手順は以下の通り。
- Ubuntu18.04のインストール
- 必要パッケージのインストール
- テンプレート化のための作業
- ワークアラウンドの適用
- お掃除
目次
Ubuntu18.04のインストール
VMの作成。テンプレートなので、最小限の構成で。
イメージはサーバ用Liveイメージ(ubuntu-18.04-live-server-amd64.iso)を使用。
まずハマったのはここ
最低でもIPのアサインが必須になった?
16.04ではアサイン不要だった気がするのだが、変わったのかも。
他のインストールプロセスは特に問題なし。
必要パッケージのインストール
インストールが完了したVMを起動して、必要なパッケージをインストールする。
まず、既存パッケージのアップグレード後、vSphereのカスタマイゼーションに必要なパッケージをインストール。
sudo apt -y update
sudo apt -y upgrade
sudo apt -y install open-vm-tools
sudo apt -y install perl
もう事前に入っている可能性もあるが念押しでインストール。
他に入れておきたいパッケージがあれば適宜インストール。
kubernetes用なので以下をインストール。 Container runtimeやkubeadmなどは別でテンプレート作って管理したいので、ここではしない。
sudo apt -y install apt-transport-https curl
ここで再起動。
テンプレート化のための作業
16.04と違うところ。かつ、ハマりどころ。
- インストール時に入れたcloud-initの設定を削除。後ほどcloud-initを
sudo rm /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg
sudo rm /etc/netplan/50-cloud-init.yaml
- ホストネームが変更可能なように設定変更
sed -i 's/preserve_hostname: false/preserve_hostname: true/g' /etc/cloud/cloud.cfg
ワークアラウンドの適用
How to make guest customization work on Ubuntu18.04 Server and Desktop (56409)にあるワークアラウンドを適用する。
/usr/lib/tmpfiles.d/tmp.conf
の11行目辺りにあるD /tmp 1777 root root -
をコメントアウト/lib/systemd/system/open-vm-tools.service
の[Unit]にAfter=dbus.service
を追加。
以下が適用後のファイル。
$ cat /usr/lib/tmpfiles.d/tmp.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
# See tmpfiles.d(5) for details
# Clear tmp directories separately, to make them easier to override
# D / 1777 root root -
#q /var/tmp 1777 root root 30d
# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp
# Remove top-level private temporary directories on each boot
R! /tmp/systemd-private-*
R! /var/tmp/systemd-private-*
$ cat /lib/systemd/system/open-vm-tools.service
[Unit]
Description=Service for virtual machines hosted on VMware
Documentation=http://open-vm-tools.sourceforge.net/about.php
ConditionVirtualization=vmware
DefaultDependencies=no
Before=cloud-init-local.service
After=vgauth.service
After=apparmor.service
After=dbus.service
RequiresMountsFor=/tmp
After=systemd-remount-fs.service systemd-tmpfiles-setup.service systemd-modules-load.service
[Service]
ExecStart=/usr/bin/vmtoolsd
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
お掃除
お掃除については、参考にしたページをほぼほぼコピペ。
sudo systemctl stop rsyslog
sudo truncate -s0 /var/log/wtmp
sudo truncate -s0 /var/log/lastlog
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
sudo apt clean
sudo cloud-init clean --logs
cat /dev/null > ~/.bash_history && history -c
history -w
その後シャットダウン。
sudo shutdown -h now
テンプレート化する前に、インタフェースの設定などを見直す。地味ながら、PowerOnしたときにConnectされる設定にしっかりしておく。
このあと、テンプレート化して、terraformなどからIPやhostnameがしっかりつくか確認する。