Chapter 04

実習環境

y_mrok
y_mrok
2022.04.24に更新

技術を学ぶときは「手を動かしてナンボ」なので、パソコン上に実習環境を作成します。

全体イメージ

実習環境の全体イメージです。

青色がコントロールノード、緑色が管理対象ノードです。ドメインは "example.jp" を使用します。

コントロールノード

環境について

Ubuntu 20.04 LTS Desktop 上に Ansible をインストールしてコントロールノードを作成します。大まかな手順です。

  1. Oracle VirtualBox 上に Ubuntu 20.04 LTS Desktop をインストール
  2. Ubuntu に Ansible をインストール
  3. Ubuntu に VS Code をインストール

仮想マシンの仕様

Ubuntu をインストールする仮想マシンの仕様です。

各値はご自身のパソコンの仕様にあわせて調整ください。ネットワークアダプターが 2 つあるのは、 1 つはインターネット用 (NAT) 、もう 1 つは実習環境用 (intnet) です。

Ubuntu をインストール

自身の環境を踏まえて、基本は画面に表示される指示どおりに行います。

インストール後の初期設定も自身の環境を踏まえながら画面に従って設定します。

実習環境用のネットワークアダプターが無効 ( オフ ) になっています。

全体イメージの図に従って実習環境用の IP アドレスを設定します。

Ubuntu をアップデート

インストールした Ubuntu を最新の状態に更新します。

sudo apt -y update
sudo apt -y dist-upgrade
reboot

Guest Additions をインストール

マウス操作や画面周りの改善などのために Guest Additions をインストールします。

  1. Oracle VirtulBox メニューバーの [デバイス] をクリック → [Guest Additions CD イメージの挿入...]をクリック
  2. 次のコマンドを実行して Guest Additions をインストール
sudo apt -y install dkms
sudo mount -r /dev/cdrom /mnt
sudo /mnt/VBoxLinuxAdditions.run
reboot
modinfo vboxguest

Ansible をインストール

Ansible をインストールします。

sudo apt -y install sshpass
sudo apt -y install python3-pip
pip3 install ansible
source ~/.profile
pip3 show ansible-core
pip3 show ansible
ansible --version

2021-08-26 には次のバージョンがインストールされました。

y_mrok@ctrl:~/デスクトップ$ pip3 show ansible-core
Name: ansible-core
Version: 2.11.4
Summary: Radically simple IT automation
Home-page: https://ansible.com/
Author: Ansible, Inc.
Author-email: info@ansible.com
License: GPLv3+
Location: /home/y_mrok/.local/lib/python3.8/site-packages
Requires: jinja2, packaging, cryptography, resolvelib, PyYAML
Required-by: ansible

y_mrok@ctrl:~/デスクトップ$ pip3 show ansible
Name: ansible
Version: 4.4.0
Summary: Radically simple IT automation
Home-page: https://ansible.com/
Author: Ansible, Inc.
Author-email: info@ansible.com
License: GPLv3+
Location: /home/y_mrok/.local/lib/python3.8/site-packages
Requires: ansible-core
Required-by: 

y_mrok@ctrl:~/デスクトップ$ ansible --version
ansible [core 2.11.4] 
  config file = None
  configured module search path = ['/home/y_mrok/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/y_mrok/.local/lib/python3.8/site-packages/ansible
  ansible collection location = /home/y_mrok/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/y_mrok/.local/bin/ansible
  python version = 3.8.10 (default, Jun  2 2021, 10:49:15) [GCC 9.4.0]
  jinja version = 3.0.1
  libyaml = True

Ansible をアップデート

インストールした Ansible を最新の状態に更新します。

pip3 install -U ansible

管理対象ノードのフィンガープリントを無視

ホストに初めて SSH 接続した時に表示されるメッセージです。

The authenticity of host '192.168.23.11 (192.168.23.11)' can't be established.
ECDSA key fingerprint is SHA256:bseUaGSFrQPNkB2peSUrhJCC+qzS3xRsOg6dT4CQqL0.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

このメッセージを無視[1]するよう設定します。

mkdir ~/.ssh
chmod 0700 ~/.ssh
echo "Host *" > ~/.ssh/config
echo "  StrictHostKeyChecking no" >> ~/.ssh/config
echo "  UserKnownHostsFile=/dev/null" >> ~/.ssh/config
chmod 0600 ~/.ssh/config
ls -l ~/.ssh
cat ~/.ssh/config

VS Code

インストール

インベントリーやプレイを書くためにお好みのテキストエディターをインストールします。ここでは VS Code を使用します。

  1. 公式サイトから ".deb" パッケージをダウンロード[2][3]
  2. ダウンロードしたファイル[4]をインストール
sudo apt -y install ~/ダウンロード/code_1.59.1-1629375198_amd64.deb

拡張機能

VS Code は拡張機能が豊富です。今回は以下の拡張機能をインストールしました。

  • Japanese Language Pack for Visual Studio Code
  • indent-rainbow
  • GitHub Theme
  • zenkaku
  • Material Icon Theme

GitHub などと連携しているのであれば次の拡張機能が便利です。

  • Git History

管理対象ノード

Vagrant を使用して 6 台の管理対象ノードを作成します。 Vagrant を使用するのは、簡単に管理対象ノードを作成したり、廃棄できたりするからです。管理対象ノードの状態が汚れたら簡単に作り直しできるのは学習上の大きなメリットです。

# ホスト名 IP アドレス os ユーザー名 パスワード
1 marutamachi 192.168.111.101/24 CentOS/8 vagrant vagrant
2 takeyamachi 192.168.111.102/24 CentOS/7 vagrant vagrant
3 ebisugawa 192.168.111.103/24 Ubuntu 20.04 LTS vagrant vagrant
4 nijyo 192.168.111.104/24 Ubuntu 18.04 LTS vagrant vagrant
5 oshikoji 192.168.111.105/24 Debian 10 vagrant vagrant
6 oike 192.168.111.106/24 AlmaLinux 8 vagrant vagrant

"Vagrantfile" です。ご自身のパソコンの仕様にあわせてメモリサイズなどを調整してください。

Vagrantfile
#
# Common settings for all virtual machines
#
Vagrant.configure("2") do |config|
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "4096"
    vb.cpus = 1
    vb.gui = true
    vb.customize [
      "modifyvm", :id,
      "--ioapic", "on",
      "--graphicscontroller", "vmsvga",
      "--nicpromisc2", "allow-all"
    ]
  end

#
# CentOS 8 / marutamachi
#
  config.vm.define :marutamachi do |marutamachi|
    marutamachi.vm.box = "centos/8"
    marutamachi.vm.network "private_network", mac: "00006c000101", ip: "192.168.111.101", virtualbox__intnet: true
    marutamachi.vm.hostname = "marutamachi.example.jp"
    marutamachi.vm.provider "virtualbox" do |vb|
      vb.name = "marutamachi"
    end
    marutamachi.vm.provision "shell", inline: $remove_vmtools
    marutamachi.vm.provision "shell", inline: $common_provisioning
    marutamachi.vm.provision "shell", inline: $centos8_provisioning
  end

#
# CentOS 7 / takeyamachi
#
  config.vm.define :takeyamachi do |takeyamachi|
    takeyamachi.vm.box = "centos/7"
    takeyamachi.vm.network "private_network", mac: "00006c000102", ip: "192.168.111.102", virtualbox__intnet: true
    takeyamachi.vm.hostname = "takeyamachi.example.jp"
    takeyamachi.vm.provider "virtualbox" do |vb|
      vb.name = "takeyamachi"
    end
    takeyamachi.vm.provision "shell", inline: $remove_vmtools_yum
    takeyamachi.vm.provision "shell", inline: $common_provisioning
    takeyamachi.vm.provision "shell", inline: $centos7_provisioning
  end

#
# Ubuntu 20.04 LTS / ebisugawa
#
  config.vm.define :ebisugawa do |ebisugawa|
    ebisugawa.vm.box = "ubuntu/focal64"
    ebisugawa.vm.network "private_network", mac: "00006c000103", ip: "192.168.111.103", virtualbox__intnet: true
    ebisugawa.vm.hostname = "ebisugawa.example.jp"
    ebisugawa.vm.provider "virtualbox" do |vb|
      vb.name = "ebisugawa"
    end
    ebisugawa.vm.provision "shell", inline: $remove_vmtools_apt
    ebisugawa.vm.provision "shell", inline: $common_provisioning
    ebisugawa.vm.provision "shell", inline: $ubuntu_provisioning
  end

#
# Ubuntu 18.04 LTS / nijyo
#
  config.vm.define :nijyo do |nijyo|
    nijyo.vm.box = "ubuntu/bionic64"
    nijyo.vm.network "private_network", mac: "00006c000104", ip: "192.168.111.104", virtualbox__intnet: true
    nijyo.vm.hostname = "nijyo.example.jp"
    nijyo.vm.provider "virtualbox" do |vb|
      vb.name = "nijyo"
    end
    nijyo.vm.provision "shell", inline: $remove_vmtools_apt
    nijyo.vm.provision "shell", inline: $common_provisioning
    nijyo.vm.provision "shell", inline: $ubuntu_provisioning
  end

#
# Debian 10 / oshikoji
#
  config.vm.define :oshikoji do |oshikoji|
    oshikoji.vm.box = "debian/buster64"
    oshikoji.vm.network "private_network", mac: "00006c000105", ip: "192.168.111.105", virtualbox__intnet: true
    oshikoji.vm.hostname = "oshikoji.example.jp"
    oshikoji.vm.provider "virtualbox" do |vb|
      vb.name = "oshikoji"
    end
    oshikoji.vm.provision "shell", inline: $common_provisioning
    oshikoji.vm.provision "shell", inline: $set_vagrant_password
    oshikoji.vm.provision "shell", inline: $debian_provisioning
  end

#
# AlmaLinux 8 / oike
#
  config.vm.define :oike do |oike|
    oike.vm.box = "almalinux/8"
    oike.vm.network "private_network", mac: "00006c000106", ip: "192.168.111.106", virtualbox__intnet: true
    oike.vm.hostname = "oike.example.jp"
    oike.vm.provider "virtualbox" do |vb|
      vb.name = "oike"
    end
    oike.vm.provision "shell", inline: $common_provisioning
    oike.vm.provision "shell", inline: $centos8_provisioning
  end

end

#
# Common provisioning for all virtual machines
#
$common_provisioning = <<-'SCRIPT'
timedatectl set-timezone Asia/Tokyo
sed -e s/^'PasswordAuthentication no'/'PasswordAuthentication yes'/ /etc/ssh/sshd_config > /tmp/sshd_config
mv -f /tmp/sshd_config /etc/ssh/
chmod 0600 /etc/ssh/sshd_config
systemctl restart sshd.service
SCRIPT

#
# Remove open-vm-tools
#
$remove_vmtools = <<-'SCRIPT'
dnf -y remove open-vm-tools
SCRIPT

#
# Remove open-vm-tools (yum command)
#
$remove_vmtools_yum = <<-'SCRIPT'
yum -y remove open-vm-tools
SCRIPT

#
# Remove open-vm-tools (apt command)
#
$remove_vmtools_apt = <<-'SCRIPT'
apt -y remove open-vm-tools
SCRIPT

#
# Set the password for the account vagrant
#
$set_vagrant_password = <<-'SCRIPT'
echo 'vagrant' > pass.txt
echo 'vagrant' >> pass.txt
passwd vagrant < pass.txt
SCRIPT

#
# Provisioning for CentOS8
#
$centos8_provisioning = <<-'SCRIPT'
dnf -y update
reboot
SCRIPT

#
# Provisioning for CentOS7
#
$centos7_provisioning = <<-'SCRIPT'
yum -y update
reboot
SCRIPT

#
# Provisioning for Ubuntu
#
$ubuntu_provisioning = <<-'SCRIPT'
apt -y update
apt -y dist-upgrade
reboot
SCRIPT

#
# Provisioning for Debian
#
$debian_provisioning = <<-'SCRIPT'
apt -y update
apt -y upgrade
reboot
SCRIPT

リンク

演習問題

演習問題はこのリンクをクリックしてください。

脚注
  1. ホストのフィンガープリントを無視するのはセキュリティ上の問題があるのは承知しています。しかし、今回は実習環境ということで敢えて無視します。 ↩︎

  2. snap コマンドでもインストールした VS Code は日本語入力が正しく動作しませんでした。 ↩︎

  3. 通常は "~/ダウンロード" フォルダーにダウンロードします。 ↩︎

  4. 例示したコマンドのファイル名は 2021-08-26 のものです。実際にダウンロードしたファイル名を指定してください。 ↩︎