技術を学ぶときは「手を動かしてナンボ」なので、パソコン上に実習環境を作成します。
全体イメージ
実習環境の全体イメージです。
青色がコントロールノード、緑色が管理対象ノードです。ドメインは "example.jp" を使用します。
コントロールノード
環境について
Ubuntu 20.04 LTS Desktop 上に Ansible をインストールしてコントロールノードを作成します。大まかな手順です。
- Oracle VirtualBox 上に Ubuntu 20.04 LTS Desktop をインストール
- Ubuntu に Ansible をインストール
- 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 をインストールします。
- Oracle VirtulBox メニューバーの [デバイス] をクリック → [Guest Additions CD イメージの挿入...]をクリック
- 次のコマンドを実行して 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 を使用します。
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" です。ご自身のパソコンの仕様にあわせてメモリサイズなどを調整してください。
#
# 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
リンク
- Oracle VirtualBox
https://www.virtualbox.org/wiki/Downloads - Ubuntu 20.04 LTS Desktop
https://www.ubuntulinux.jp/News/ubuntu2004-ja-remix - Vagrant
https://www.vagrantup.com/downloads - VS Code
https://code.visualstudio.com/download