vSphereの上でTerraform用 Ubuntu18.04のテンプレートを作る

vSphere上でUbuntu 18.04をTerraformでデプロイするのに苦労したのでメモ。
vSphere 6.7U2を使用。

参考にしたページは以下のページ。

大まかな手順は以下の通り。

  1. Ubuntu18.04のインストール
  2. 必要パッケージのインストール
  3. テンプレート化のための作業
  4. ワークアラウンドの適用
  5. お掃除

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がしっかりつくか確認する。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください