vagrantで作ったCentOS環境にcomposerがインストできない
Couldn’t resolve host ‘getcomposer.org’
なんなんだろ?Couldn’t resolve host ‘getcomposer.org’。ホストが解決できないとな??
調べてみると、外部のネットワークに繋がらない状態に陥ると このエラーが発生する模様。
試しにwgetで適当に外にアクセスしてみる
だめ、繋がらない。
とりあえず対象のvagrantをhaltしてもう一度 vagrant upで起動したら解決しました。
もしまた次同様の問題発生したら
ネットワーク設定を確認してみようっと。
Vagrantでpingが通らない!ゆえにVagrantネットワークを学び直したよ
Vagrantでpingが通らない発生
こんにちは、大変ご無沙汰しております。仕事忙しくて死んでましたが比較的元気です。
比較的元気めに死んでました。
Vagrant環境を構築したら事件に遭遇。
問題解決するまでに3連休使ってしまいましたよ。
結果として、ネットワーク失敗したvagrantを一度destroyしてもう一度upするとうまくいったのですが、vagrantはもとい、centos7のネットワーク関係を学ぶのによい機会となったので備考録として残しておきたいと思います。
Vagrantfileを今一度しっかり読もう
明らかにVagrantのネットワークに関する問題にぶつかって、初めてしっかりとVagrantfileに目を通しました。
(遅せーよ)
私が今回使ったVagrantfileはこちらです。まっさらな状態からvagrant環境を作る手順を記載してあります。
空っぽのCentOS7のboxを追加して、環境を作ります。
initしたVagrantfileの中身を確認
今回使ったvagrantfileをそのまま記載。vagrantfileのあるところでvagrant upをするとまっさらなCentOS7の環境が出来ます。
Vagrant network
お手軽に自分のマシンに仮想環境が作れると思っていたvagrantですが、Vagrantfileのネットワークについてちゃんと理解できていなかったので復習。
forwarded_port
public_networkでもprivate_networkを設定していても設定することが出来る。
ゲストは80ポートへアクセスすると8080ポートへ転送されることになります。urlに
http://192.168.10:8080 とか、URLにポートが含まれるのが嫌な場合、forwarded_portの設定が必要。
firewall側ではゲスト向けの80ポートだけ開放すればよい。
特にURLにポートが含まれても別にどうって子とない場合、この設定はなくても大丈夫。
public_network
他の端末からもアクセスする可能性がある,複数人で作業する場合はpublic_networkがよいですね。
vagrant upで起動する際、publicでよいか聞かれるので、「1」を入力するとpublic_networkで起動できます。
private_network
自分1人で作業するならprivate_networkで十分そうです。
vagrant upでサーバー起動したらまずすること
vagrant upでVMサーバー起動したら最初にすることはapacheやら必要なソフトのインストールではなくネットワークやfirewallの確認をします。
itKaasan-MacBook-Pro:root# vagrant ssh
[vagrant@localhost ~]$ ifconfig
enp0s3: flags=4163
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::a00:27ff:fede:e0e prefixlen 64 scopeid 0x20 ether 08:00:27:de:0e:0e txqueuelen 1000 (Ethernet)
RX packets 1831 bytes 151847 (148.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1356 bytes 161553 (157.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163
inet 192.168.33.12 netmask 255.255.255.0 broadcast 192.168.33.255
inet6 fe80::a00:27ff:fe9f:1d69 prefixlen 64 scopeid 0x20
ether 08:00:27:9f:1d:69 txqueuelen 1000 (Ethernet)
RX packets 5362 bytes 768787 (750.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5694 bytes 10079743 (9.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 0 (Lokale Schleife)
RX packets 76 bytes 10872 (10.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 76 bytes 10872 (10.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vagrant upで起動したらサーバーログインをして、ifconfigでvagrant fileに記載したIPアドレスがちゃんと設定されているかを確認します。
なお、私はこれが何をやっても出ませんでした!(これで3日潰したのですが、腹がたってvagrant destroyして再度vagrant upしてifconfigでIPアドレス確認したら設定したIPアドレスが出現したんです!)
私はvagrantを再構築することで思った通りのIPアドレスを確認出来ましたが、centos7のネットワークマネージャー(nmtui)で固定IP設定出来ます。なければnmtuiでvagrantfileに記載のIPアドレスを追加設定するというやり方もあります。案外vagrant再構築すれば復活したのは私の例ですが。
config.vm.synced_folder
synced_folderはまんまフォルダの設定のこと。vagrantfileと同じ階層にappフォルダがあって、vagrant sshでサーバーログインすると、appフォルダという名称ではなくvagrantフォルダという名称にappフォルダが変わっています。
vagrantのサーバーの中からみたフォルダ名と、ホストマシンから見たフォルダの名称が違うという点に注意してください。
pingで外からのアクセスをチェック
一度vagrant sshをexitしてvagrantのサーバーから離脱するか、ターミナルをもうひとつ立ち上げてvagrantfileに記載のIPアドレスに接続できるかチェックしてみましょう。
itKaasan-MacBook-Pro:chihiro-matsuda$ ping 192.168.33.12
PING 192.168.0.1 (192.168.33.121) 56(84) bytes of data.
64 bytes from 192.168.33.12: icmp_seq=1 ttl=255 time=0.574 ms
64 bytes from 192.168.33.12: icmp_seq=2 ttl=255 time=0.536 ms
このとき、pingテストで「Request timed out.」が出たらこの後どんなにWebサーバーを立てようがブラウザアクセスも何も出来ません。
私はsshでログインは出来るのにpingがどうしても通らない問題が解決せず、destroyしてからvagrant upしたら普通につながりました。なんだったんだろうね。
firewallを空ける
firewall-cmd –add-port=22/tcp –zone=public –permanent
firewall-cmd –add-service=ssh –zone=public –permanent
# サービスの削除
firewall-cmd –remove-port=22/tcp –zone=public –permanent
# 利用可能なサービス一覧
firewall-cmd –get-services
# firewalldのリロード
firewall-cmd –reload
# firewallの無効化
systemctl stop firewalld
# OS起動時無効化
systemctl disable firewalld
仮想VMであってもポートはデフォルトでは全て閉じているので必要最低限だけ空けるか、
あるいは自分1人しか使わないprivate_networkならいっそfirewallを切ってもいいかなって思ってる。
(ただし本番のサーバーでやったらダメ、絶対)
vagrantのネットワーク関連まとめ
手順として、
・vagrant init
・vagrant up
・vagrant ssh
・ifconfig
・pingで確認
実は以前node.jsでスクレイピングでデータを自働取得するスクリプトをvagrantの中に立てたCentOSサーバーでやってたんです。
全てsshでログインしてlocalhost内でスクリプト実行していたのでguestからのアクセスはテストしていませんでした。
で、そこにwebサーバーをいざ立ててウェブブラウザからアクセスしても全くつながらず連休3日つぶした次第。。
結局なぜsshでログインできるのにprivate_networkでホストマシンからping叩いても通らなかったのはなぞですが
サーバー立てた直後にpingテストさえしておけば原因究明には時間がかかりませんでした。
おかげでvagrantのネットワーク設定の部分は勉強しなおすよいきっかけになったのでよかったと言えばよかったかも。
vagrant環境構したら、epelリポジトリエラーでPHPもApacheもインストール出来なかった問題
vagrant upしても Apacheはおろか、PHPもmySQLも入らない!
とにかくエラーばかり!CentOSだけが入り、何もインストールされない!
今回試したvagrant ファイルはこちら
上記2つを試したのですが、PHPやら何やら入らず、びっくり!で、冷静にコマンドのエラーをたどると、
奥様!リポジトリよ!リポジトリエラーでございますよ!
リポジトリエラーなら、当然PHPすら入らないのも納得。
同じようにリポジトリにつながらない問題はあるようで、vagrant sshで対象のサーバーにSSHで入って、
epelリポジトリのファイル
/etc/yum.repos.d/epel.repoこちらを編集します。
//コメントアウトをはずす baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch こちらをコメントアウトに #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
これでOK。あとは、vagrant provisionを実行すればリポジトリのエラーを回避することができます。
もう一つ問題発生。VirtualBoxで、新規仮想環境作成が失敗する
このepelリポジトリの解決方法は分かっていたのに、なぜかVirtualBoxでvagrant upで仮想環境を作ることすら失敗する問題
エラーはこの通り。どうやら、何度もvagrant upに失敗した際にゴミファイルが残ってしまったようです。
Command: ["modifyvm", "6516deb0-e52b-4950-86ef-321cd4891baf", "--name", "lamp-sample"] Stderr: VBoxManage: error: Could not rename the directory '/Users/matsudachihiro/VirtualBox VMs/cakephp' to '/Users/matsudachihiro/VirtualBox VMs/lamp-sample' to save the settings file (VERR_ALREADY_EXISTS)
/Users/matsudachihiro/VirtualBox VMs/までcdコマンドで移動して、ゴミファイルを削除して、再度vagrant upすると、無事仮想環境構築できました!ちゃんちゃん!
覚えておきたい基本のVagrantコマンド 基本のき!
基本のVagrantコマンド 基本のき
とかなる前に基本のVagrantコマンドを覚えておこう。かあさんVagrantコマンドはvagrant upしか知らなくて、
超!ドキドキしました。なので、基本のvagrantコマンドはしっかり覚えておきまっしょい。
なお、Vagrantコマンドはvagrantファイルの存在する場所までcdコマンドで移動してから実行します。
仮想マシンの起動
vagrant upは仮想マシンの起動コマンドです。Vagrantfileと同じディレクトリまでターミナルでcdコマンドで移動してからこのコマンドをぽちります。初めてVagrantFileを設置したら、一番最初に打つのがこのコマンドですね。
仮想マシンへSSHログイン
例えば前回の記事での仮想環境はCentOS系です。もちろん、ファイルの編集は自分のローカル環境のファイルを自分の好きなエディタで編集すればよいのですが、やれMySQLだー、あーyumコマンド打ちたいわーとかあるじゃないですか。なのでvagrant環境で作った仮想環境には
これだけでvagrantでつくった仮想環境にログインすることが出来ます。
The following plugins were installed with a version of Vagrant
that had different versions of underlying components. Because
these component versions were changed (which rarely happens),
the plugins must be uninstalled and reinstalled.
トップにcdで移動します
$cd /
ls コマンドで share ディレクトリの存在を確認します。
[vagrant@cakephp /]$ ls
bin dev home lib64 media opt root selinux srv tmp vagrant
boot etc lib lost+found mnt proc sbin share sys usr var
今回だとshareフォルダ以下がドキュメントルート直下になります。
$ cd share/
[vagrant@cakephp share]$ ls
README.md cake composer.lock crontab lib vagrant
app composer.json composer.phar deployer up vendor
仮想マシンの状態の確認
vagrant-vbguest
Current machine states:
default running (virtualbox)
The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
default running (virtualbox)
となっているので、defaultという名前のvirtualboxが起動しているのが分かります。
仮想マシンの停止
仮想マシンの停止するには
…
vagrant-vbguest
[default] Attempting graceful shutdown of VM…
仮想マシンの消去
すると、削除してもよか質問されるので、yキーを押して実行します
-fのオプションで強制的に実行します。
プロビジョニングとかscript.shを何か変更したら
起動している仮想マシンに対して実行します。プロビジョニングをします。
後からモジュールやらナンやら追加したい場合もありますね。
そんな時はscript.shに追記するのですが、追記してから
vagrant provisionを実行します。
すると、追記した分のインストールも実行してくれます。
Macの電源が落ちる→vagrant upしてもダメ。
そういう時は
(一度正しく終了)
$ vagrant up(起動)
$ vagrant provision(プロビジョニングを実行)
正しく終了して、vagrant up実行してから vagrant provisionを実行します。
なお、haltしてからupなら
(再起動)
これでも同じです。
この他にもプラグインインストールのvagrant plunin installやsuspendなど色々あるのですが、配布されているVagrantfileを利用して仮想サーバーを運用するだけならこれら基本コマンドだけで大丈夫かも。