Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "centos/stream8"
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.synced_folder ".", "/vagrant", type:"virtualbox"
config.vm.provider "virtualbox" do |vb|
# vb.gui = true
vb.memory = "1024"
end
#if Vagrant.has_plugin?("vagrant-vbguest")
# config.vbguest.auto_update = false
#end
config.omnibus.chef_version = :latest
config.vm.provision "chef_zero" do |chef|
chef.install = false
chef.cookbooks_path = ["chef-repo/cookbooks", "chef-repo/site-cookbooks"]
chef.nodes_path = ["chef-repo/nodes"]
chef.node_name = "server"
chef.arguments = "--chef-license accept"
end
end
ポートフォワーディングはフォワード先を考えるのが面倒くさいのでやらない。プライベートネットワークは hostonlyアダプターに設定されたネットワークアドレス内のアドレスを設定する
最近のchef がライセンス許諾必要らしいので chef.arguments = "--chef-license accept"
を追加する。
レシピ postgresql
chef-repo/Berksfile
cookbook 'postgresql', '~> 10.0.1', :supermarket
Berksfile に書いたレシピを取り込む
> cd chef-repo
> berks vendor cookbooks
インストール用レシピを作成する
> mkdir site-cookbooks
> cd site-cookbooks
> chef generate cookbook pgsql
berkshelf の postgresql を参照する
chef-repo/site-cookbooks/pgsql/metadata.rm
name 'pgsql'
maintainer 'The Authors'
maintainer_email 'you@example.com'
license 'All Rights Reserved'
description 'Installs/Configures pgsql'
long_description 'Installs/Configures pgsql'
version '0.1.0'
chef_version '>= 14.0'
depends 'postgresql'
レシピ編集
chef-repo/site-cookbooks/pgsql/recipes/default.rb
#
# Cookbook:: pgsql
# Recipe:: default
#
# Copyright:: 2022, The Authors, All Rights Reserved.
postgresql_client_install 'My PostgreSQL Client install' do
version '10'
action :install
end
postgresql_server_install 'My PostgreSQL Server install' do
version '10'
initdb_locale 'ja_JP.UTF-8'
initdb_encoding 'UTF8'
action [:install, :create]
end
postgresql_server_conf 'PostgreSQL Config' do
additional_config({
:listen_addresses => '*'
})
notifies :reload, 'service[postgresql]'
end
postgresql_access 'postgresql access' do
access_type 'host'
access_db 'all'
access_user 'all'
access_addr '192.168.56.0/24'
access_method 'password'
notifies :reload, 'service[postgresql]'
end
postgresql_database 'postgresql database' do
database 'testdb2'
encoding 'UTF8'
template 'template0'
locale 'ja_JP.UTF-8'
end
postgresql_user 'postgresql user' do
create_user 'testuser'
password 'password'
end
service 'postgresql' do
service_name 'postgresql-10'
supports restart: true, status: true, reload: true, enable: true
action [:enable, :reload]
end
レシピ jdk
デフォルトのパッケージリポジトリに openjdk があるので使う
インストール用レシピを作成する
> mkdir site-cookbooks
> cd site-cookbooks
> chef generate cookbook jdk
レシピ編集
chef-repo/site-cookbooks/jdk/recipes/default.rb
package "java-1.8.0-openjdk" do
action [ :install, :upgrade ]
end
package "java-1.8.0-openjdk-devel" do
action [ :install, :upgrade ]
end
*-devel がないと javac できない
レシピ その他一般
centos/stream8 とか、日本語ロケールがインストールされてないので追加する
インストール用レシピを作成する
> mkdir site-cookbooks
> cd site-cookbooks
> chef generate cookbook init
レシピ編集
chef-repo/site-cookbooks/init/recipes/default.rb
execute "install-locale-ja" do
command "yum -y install glibc-langpack-ja"
end
execute "set-locale-ja" do
command "localectl set-locale LANG=ja_JP.utf8"
end
run list
chef-repo/nodes/server.json
{
"name": "server",
"normal": {
"tags": [
]
},
"run_list": [
"recipe[init]",
"recipe[pgsql]",
"recipe[jdk]"
]
}
起動
vagrant up --provider virtualbox
vagrant のバージョンと vitualbox のバージョンによっては vboxguestadditions がインストールに失敗する場合があるので、その場合 kernel をアップデートしてからリロードする
> vagrant ssh
... ここから VM内
$ sudo dnf install -y wget
$ sudo dnf install -y epel-release
$ sudo dnf -y update
$ exit
... ここからホスト側
> vagrant reload --provision
その他
postgresql を使うだけ(のこりは Windowsにインストールしたものでまかなうとか) なら docker の方が簡単。springとかでも同じ。
今回は jdkでなにかビルドして動かすコンソールアプリを意図しているのでvagrantでやる。