カテゴリー
Linux

【Packer】【Vagrant】OS がインストールされただけの最小限の CentOS 5 x86_64 の Vagrant Box を作成

はじめに

上記の 2 つの投稿で、自動化されていないものもございますけれども、スクラッチで CentOS 6、CentOS 7 の Vagrant Box を作成してまいりました。

今回は、Packer を使用した、CentOS 5 の Vagrant Box 作成の自動化を行いました。その手順を残しますわ♪

大まかな手順

  1. VirtualBox、Vagrant、Packer を Windows にインストール
  2. テンプレートファイルを作成
    • テンプレート JSON
    • キックスタートファイル
    • 初期設定、VirtualBox Guest Additions をインストールするシェルファイル
  3. packer build machine.json

テンプレートファイルの内容

テンプレート JSON

  • iso_url がローカルのパスとなっている。何度も試行錯誤したため予めダウンロードしたものを使用した。これは ISO を配布している URL を指定してよい。
  • チェックサムはダウンロードページのものを使用する。が、自己責任で自分で計算してもよい。
    • 【Windows 7】ファイルの md5 ハッシュ値を得るコマンド – oki2a24
      {
        "builders": [{
          "type": "virtualbox-iso",
          "guest_os_type": "RedHat_64",
          "iso_url": "C:/Users/username/iso/CentOS-5.11-x86_64-bin-DVD-1of2.iso",
          "iso_checksum": "2deb566098aa21ebfd829ff147a1f71c",
          "iso_checksum_type": "md5",
          "vm_name": "packer-centos-5-x86_64",
          "ssh_pty": true,
          "http_directory": "./",
          "boot_wait": "5s",
          "boot_command": [
            "<esc>",
            "<wait>",
            "linux ks=http://{{.HTTPIP}}:{{.HTTPPort}}/anaconda-ks.cfg",
            "<enter>"
          ],
          "ssh_wait_timeout": "60m",
          "ssh_username": "vagrant",
          "ssh_password": "vagrant",
          "shutdown_command": "sudo poweroff"
        }],
        "provisioners": [{
          "type": "shell",
          "scripts": "scripts.sh"
        }],
        "post-processors": [{
          "type": "vagrant",
          "output": "centos-5-x86_64.box"
        }]
      }
      

キックスタートファイル

  • 言語は日本語
  • キーボードは日本語キーボード
  • sudo 設定は外部ファイルを読み込む設定となっていないため、読みこむよう設定を追加し、配置ディレクトリ /etc/sudoers.d/ を作成
    install
    text
    cdrom
    reboot
    
    lang ja_JP.UTF-8
    keyboard jp106
    
    timezone --utc Asia/Tokyo
    rootpw vagrant
    user --name=vagrant --groups=vagrant --password=vagrant
    services --disabled=iscsi,iscsid,lvm2-monitor,netfs,rawdevices
    
    zerombr
    clearpart --all
    part /boot --size=200
    part swap --recommended
    part / --size=1 --grow
    bootloader
    
    %packages --nobase
    @core
    @japanese-support
    curl
    openssh-clients
    sudo
    -Deployment_Guide-ja-JP
    -desktop-file-utils
    -udftools
    
    %post --erroronfail
    yum -y update
    
    sed -i -e 's/Defaults    requiretty/#Defaults    requiretty/' /etc/sudoers
    cat >> /etc/sudoers <<EOF
    
    #includedir /etc/sudoers.d
    EOF
    mkdir /etc/sudoers.d
    cat <<EOF > /etc/sudoers.d/vagrant
    Defaults:vagrant !requiretty
    vagrant ALL=(ALL) NOPASSWD: ALL
    EOF
    chmod 440 /etc/sudoers.d/vagrant
    
    sed -i -e 's/^timeout=.*$/timeout=1/' /boot/grub/grub.conf
    
    cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
    DEVICE="eth0"
    BOOTPROTO="dhcp"
    ONBOOT="yes"
    TYPE="Ethernet"
    EOF
    

初期設定、VirtualBox Guest Additions をインストールするシェルファイル

  • VirtualBox Guest Additions のインストール時、 sudo yum -y install kernel-devel を除いた。dkms インストールで既にインストールされていたため。
  • cleanup 部分はいらないかも。参考リポジトリからそのまま拝借して検証していない部分。
    #!/bin/bash
    
    set -e
    set -x
    
    # 不要な inittab 無効化
    sudo sed -i -e 's,^.*:/sbin/mingetty\s\+tty[2-6],#\0,' /etc/inittab
    
    # vagrant insecure private key 設定
    date | sudo tee /etc/vagrant_box_build_time
    
    mkdir ~/.ssh
    chmod 700 ~/.ssh/
    curl -fsSLo ~/.ssh/authorized_keys https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
    chmod 600 ~/.ssh/authorized_keys
    chown -R vagrant ~/.ssh
    
    # sshd 設定
    sudo sed -i -e 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
    
    # VirtualBox Guest Additions のインストール
    # リポジトリ導入、無効化
    curl -L -O https://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-5
    sudo rpm --import RPM-GPG-KEY-EPEL-5
    rm RPM-GPG-KEY-EPEL-5
    curl -L -O https://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
    sudo yum -y install epel-release-5-4.noarch.rpm
    rm epel-release-5-4.noarch.rpm
    sudo sed -i -e 's/^enabled=1/enabled=0/' /etc/yum.repos.d/epel.repo
    
    sudo yum -y install bzip2
    sudo yum -y --enablerepo=epel install dkms
    sudo yum -y install make
    sudo yum -y install perl
    
    sudo mount -o loop,ro ~/VBoxGuestAdditions.iso /mnt/
    sudo /mnt/VBoxLinuxAdditions.run || :
    sudo umount /mnt/
    rm -f ~/VBoxGuestAdditions.iso
    
    # locale
    sudo find /usr/lib/locale -mindepth 1 -maxdepth 1 -type d -not -name ja_JP.utf8 -exec rm -r {} +
    sudo /usr/sbin/build-locale-archive
    sudo rm -r /usr/lib/locale/ja_JP.utf8
    
    # cleanup
    if rpm -q --whatprovides kernel | grep -Fqv $(uname -r); then
      rpm -q --whatprovides kernel | grep -Fv $(uname -r) | xargs sudo yum -y remove
    fi
    
    sudo yum --enablerepo=epel clean all
    sudo tee /var/log/yum.log < /dev/null
    
    # minimize
    sudo dd if=/dev/zero of=/EMPTY bs=1M || :
    sudo rm /EMPTY
    

おわりに

参考ページです。ありがとう存じます!特に、kaorimatz/packer-templates リポジトリには、大変お世話になりました♪

以上です。

コメントを残す