CentOSで動作検証環境をVagrantで作る話
CentOS … 今ディストリビューションまわりで人気のトピックです!
ってか、CentOS (2020/11/30 没) CentOS 6.10(Final) to CentOS 7.9な話
ねたに少々していましたが、CentOS 8にしても、CentOS自体がなくなるんで…. 無駄なあがきですねw
と、今回ですが、このCentOSの動作検証環境を作る!って話です。
開発環境の話
私流の開発環境をまとめますと
- ローカル開発環境
- ローカル動作検証環境
- 動作検証環境
- 本番環境
ローカル開発環境 : ズバリソースを作るときに動いている環境ですね
動作検証環境 : 出来上がったプログラムを走らせて確認する環境
本番環境 : ずばり!運用している環境です
となると、ローカル動作検証環境ってのが説明が難しいですかね
動作環境ってのは基本的には多人数で使います。そこで、マージ完了した状態でも動作を確認したほうが良いので
動作検証環境を一人で使えば楽じゃんってことです。
チームが増えると、動作検証環境って触るのが安易ではいれませんしね
具体的な動作しているプログラムってのまとめると
OS | Webサーバ | 言語バージョン | DBバージョン | |
開発環境 | 自由 | 自由 | 基本自由 | 一致させたい |
ローカル動作環境 | 自由 | 本番と同じ | 本番と同じ | 本番と同じ |
動作環境 | 本番と同じ | 本番と同じ | 本番と同じ | 本番と同じ |
本番環境 | 本番と同じ | 本番と同じ | 本番と同じ | 本番と同じ |
動作環境と本番環境はハードスペック。インストールパッケージまで一致させたい最終動作確認です
ま、本番は物理サーバ、動作環境はVMってのが普通とは思いますが…
となると、ローカル動作環境はvm 開発環境はdockerとなるでしょうけね
環境 | ||||
開発環境 | Docker | |||
ローカル動作環境 | 仮想 | |||
動作環境 | 仮想 | |||
本番環境 | 物理 |
はい… はい、これまでで、なんとなく環境周りは紹介できましたでしょうか
え!?動作環境を二重化する!
今回なぜゆえCentOSとか言っているのかというと…
本番環境 未だに、死んでいるCentOSとか使っているものあるんや…
先日 Apache 2.4.49の脆弱性でも調べましたが、CentOSでyumではサポート切れのapache 2.2しか対応していないし… セキュリティはズタボロですw
そうするとどうするのかというと新しいディストリビューションに移行させよう!とか言いますよねw
開発環境にもよりますが、ほとんどおいそれ!と以降は可能です。
でも、でもでも、でもでもでもでも
動作環境を新しいディストリビューションにして、本番に移行する!とか言われても、開発環境にて確認していないし… とかなりますわね。
するってーと、以下の部分が新・旧環境を作って移植動作を確認する必要が出ます
- ローカル開発環境
- 動作環境
うん、だったら!作ろう!
とか言いますが、一番の問題は… CentOSはサポートを終えています!
サポートが切れると、パッケージ公開されない!?
今回のフェーズでは、新しいディストリビューションを作るってことですから、あまり影響がないですが
移行に新メンバーが追加した時を想定しています。
いつもどおりに… DockerはOK。 環境構築するvagrantを….
そんなの、公式のBOX使えば
https://app.vagrantup.com/centos
使えば…
もちろん!7,8だけですw
じゃ、じゃぁ、サードパーティで… 根本的な部分で諦めてください…
サポートが終わるってそんなことですw
当たり前ですが、boxを使うと…
$ vagrant init centos/6
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
ここまで来ると、悲しいから諦め…
られないのが漢だろう!
意地でもCentOS6を作る!
意地でもCentOS6の環境を作る方法ですが、周りに使っている人がいることが前提です!
トリッキーですが、Boxのキャッシュを拝借しますw
$ ls ~/.vagrant.d/boxes/
bento-VAGRANTSLASH-centos-6.10 ubuntu-VAGRANTSLASH-bionic64
bento-VAGRANTSLASH-centos-6.9 ubuntu-VAGRANTSLASH-focal64
centos-VAGRANTSLASH-7 ubuntu-VAGRANTSLASH-trusty64
generic-VAGRANTSLASH-centos6 ubuntu-VAGRANTSLASH-xenial64
p0bailey-VAGRANTSLASH-centos-7
ホーム直下のvagrant.dにあります! windowsでもそのあたりに
ここに公式のcentos6 boxをいれます!
$ ls ~/.vagrant.d/boxes/
bento-VAGRANTSLASH-centos-6.10 p0bailey-VAGRANTSLASH-centos-7
bento-VAGRANTSLASH-centos-6.9 ubuntu-VAGRANTSLASH-bionic64
centos-VAGRANTSLASH-6 ubuntu-VAGRANTSLASH-focal64
centos-VAGRANTSLASH-7 ubuntu-VAGRANTSLASH-trusty64
generic-VAGRANTSLASH-centos6 ubuntu-VAGRANTSLASH-xenial64
centos-VAGRANTSLASH-6これです。
作成してみます…
$ vagrant init centos/6
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
作れました!
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos/6'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'centos/6' version '2004.01' is up to date...
==> default: There was a problem while downloading the metadata for your box
==> default: to check for updates. This is not an error, since it is usually due
動きましたw
キャッシュさえ手に入れば無理やりに動かすことができるわけで
無理やり動かすことでの不具合周り
はじめに環境周りをまとめます
アプリ | バージョン |
Virtual box | Version 6.1.26 |
vagrant | 2.2.14 |
$ vagrant plugin list | vagrant-docker-compose (1.5.1, global) – Version Constraint: > 0 vagrant-share (1.1.11, global) – Version Constraint: > 0 vagrant-vbguest (0.28.0, global) – Version Constraint: > 0 |
はい、無理やり動かすとなにか問題があるのでしょうか?
その部分を書いておきます!
ま、プレーンではできませんので簡単なWebサーバを想定してみましょう
8888ポートでnginx にてページ表示… って程度
ファイルはプロジェクト直下のpublicがwwwルート
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "centos/6"
config.vm.network "forwarded_port", guest: 80, host: 8888, auto_config: false
config.vm.synced_folder ".", "/var/share/www", type: "virtualbox"
end
まだ、nginxの指定はしていないですが、こんな感じでOKですわね
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'centos/6' version '2004.01' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 80 (guest) => 8888 (host) (adapter 1)
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
[default] No Virtualbox Guest Additions installation found.
Loaded plugins: fastestmirror, security
Setting up Install Process
Loading mirror speeds from cached hostfile
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base
Unmounting Virtualbox Guest Additions ISO from: /mnt
umount: /mnt: not mounted
==> default: Checking for guest additions in VM...
default: No guest additions were detected on the base box for this VM! Guest
default: additions are required for forwarded ports, shared folders, host only
default: networking, and more. If SSH fails on this machine, please install
default: the guest additions and repackage the box to continue.
default:
default: This is not an error message; everything may continue to work properly,
default: in which case you may ignore this message.
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
umount /mnt
Stdout from the command:
Stderr from the command:
umount: /mnt: not mounted
あぼーんw Virtualboxのマウントを使うためにVirtualbox Guest Addtions ISOをインストールタイミングで死んでいますね。
理由としてはミラーが見つからないってことですわね
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
だったら、どうするか!
Guest ISOをインストール直前でmirrorを書き換えれば…OK!
config.vbguest.installer_hooks[:before_install] = [
'sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo' ,
'sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo',
'yum -y update'
]
Installing Virtualbox Guest Additions 6.1.26 - guest version is unknown
入りました!ぱちぱちぃ〜
解説は… ま、デフォルトのカーネルバージョンとかGuestのカーネルバージョンのミスマッチとかだったはずです
そもそも、yumのリポジトリがないので… それどころではないってことですw
簡単なhttpアクセスできるVagrantfileファイル
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "centos/6"
config.vm.network "forwarded_port", guest: 80, host: 8888, auto_config: false
config.vbguest.installer_hooks[:before_install] = [
'sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo' ,
'sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo',
'yum -y update'
]
config.vm.synced_folder "./public", "/var/www/html/", type: "virtualbox"
config.vm.provision "shell", inline: <<-SHELL
sudo yum -y install httpd
sudo service httpd start
httpd -v
SHELL
end
8888ポートにアクセスするとpublicのhtmlが表示されます。難しくないですねw
ただ、apache http serverのバージョンが…
default: Server version: Apache/2.2.15 (Unix)
default: Server built: Jun 19 2018 15:45:13
終わっていますねw
まともなApache http serverを使う!
先日の脆弱性を放置しないように最新ソースを使いましょう!
httpd-2.4.51.tar.gzを使いますw
バージョンとかは、自分でなんとかしてね
メモ : コンパイルが予想以上に難産だったw
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "centos/6"
config.vm.network "forwarded_port", guest: 80, host: 8888, auto_config: false
config.vbguest.installer_hooks[:before_install] = [
'sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo' ,
'sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo',
'yum -y update'
]
config.vm.synced_folder "./public", "/usr/local/apache2/htdocs/", type: "virtualbox"
config.vm.provision "shell", inline: <<-SHELL
yum -y -q install gcc-c++ expat-devel
curl --silent -o pcre-8.45.tar.gz https://free.nchc.org.tw/osdn//sfnet/p/pc/pcre/pcre/8.45/pcre-8.45.tar.gz
tar zvfx pcre-8.45.tar.gz
sudo tar zfx pcre-8.45.tar.gz -C /usr/local/src/
cd /usr/local/src/pcre-8.45
./configure --prefix=/usr/local/pcre --silent
make
make install
curl --silent -o apr-1.7.0.tar.gz https://dlcdn.apache.org//apr/apr-1.7.0.tar.gz
sudo tar zfx apr-1.7.0.tar.gz -C /usr/local/src/
cd /usr/local/src/apr-1.7.0
./configure --silent
make
make install
curl --silent -o apr-util-1.6.1.tar.gz https://dlcdn.apache.org//apr/apr-util-1.6.1.tar.gz
sudo tar zfx apr-util-1.6.1.tar.gz -C /usr/local/src/
cd /usr/local/src/apr-util-1.6.1
./configure --with-apr=/usr/local/apr --silent
make
make install
curl --silent -o httpd-2.4.51.tar.gz https://dlcdn.apache.org//httpd/httpd-2.4.51.tar.gz
sudo tar zfx httpd-2.4.51.tar.gz -C /usr/local/src/
cd /usr/local/src/httpd-2.4.51
./configure --with-apr=/usr/local/apr --with-pcre=/usr/local/pcre --silent
make
make install
sudo /usr/local/apache2/bin/apachectl start
/usr/local/apache2/bin/apachectl -v
SHELL
end
ま、これで、最新のapache http serverが使えました!
default: Server version: Apache/2.4.51 (Unix)
default: Server built: Oct 15 2021 06:02:28