質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Vagrant

    1415questions

    Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

  • bash

    820questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • UNIX

    433questions

    UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

vagrant ssh後の挙動が変わった

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,140

azuno_mix

score 63

現在、VagrantでRails開発環境を作っています。
主に下記の通り構築をすすめてきました。

VagrantとVirtualBoxでCentOS-6.7の仮想マシンを作成 - Qiita

そこで、「ゲストOSとホストOSのフォルダを共有する」まで行ったところで、うまく共有ができなかったため、ゲストに接続した上で、

[vagrant@localhost ~]$  sudo yum update kernel -y

としゲストを抜けた上で、ホストからvagrant reloadし、うまく共有が完了したようでした。
しかし、vagrant sshすると

今まで

$ vagrant ssh
Last login: Tue Oct  4 14:13:45 2016 from 10.0.2.2
[vagrant@localhost ~]$

といった表示だったものが、

$ vagrant ssh
vagrant@127.0.0.1's password:
Last login: Tue Oct  4 15:08:16 2016 from 10.0.2.2
-bash-4.1$ ls

というものに変更されてしまいました。
また、それまでセットアップしてきたRubyやRailsもコマンドを叩くと、コマンドがありませんと表示されます。

おそらくカーネルのアップデートが今回の挙動の変化のキッカケだったと思うのですが、前の状態に戻すためにはどういった操作が必要なのでしょうか。
Unix関連の経験が浅く、自分としてはまたVagrantの環境を一から作り直す程度の解決策しか思い浮かばないため質問させていただきました。

よろしくお願いいたします。

 追記

mit0223 さん 編集・追記依頼ありがとうございます。

フォルダ共有でvagrant ユーザのホームディレクトリがおかしくなったのではないでしょうか。
仰るとおりでした。共有設定の部分をコメントアウトしてreloadすると、正常に接続することが出来ました。

実はこれまでも似たような現象に悩んでいたこともあったため、大変勉強になりました。
ありがとうございました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mit0223

    2016/10/05 00:54

    フォルダ共有でvagrant ユーザのホームディレクトリがおかしくなったのではないでしょうか。共有設定を戻して(コメントアウトしてvagrant reload)も同じですか?その場合、ssh でログインした状態で pwd, ls -la, env コマンドの結果を載せてもらえますか。

    キャンセル

回答 2

+1

今回の現象自体には解決済みのようですので、
自分で投稿 -> BA設定を行っておいてください。

さて、それとは別方面でVagrantのベストプラクティス的なお話をさせてください(長文)

 Vagrantのベストプラクティス的な話

Vagrantは1コマンドで開発環境を整える事が目的のツールです。
これの何が良いかと言うと、Vagrantファイルやプロビジョンファイル郡を見せれば新規参入メンバーや未来の自分が理解出来ることです。
また、必要な時に作って、複製して、要らなくなったらすぐ壊せるフットワークの軽さが武器です。

rbenvを導入して、rubyの最新バージョンをインストールして……
これらはプロビジョニングが終わったタイミングで完了している事が望ましいです。
また、冪等性を保つ為に「○○の場合はカーネルをアップグレード」という事は避けるべきでしょう。
やるなら全てのケースに於いて真っ先に実施すべきです。

AnsibleなりChefなり入れて頑張った方が良いと思うのですが、
その第一歩という事でshellを使ったプロビジョニングを紹介します。
Vagrantfileの下部にこのようなコメントアウトされた一体があるかと思います。
この下4行のコメントアウトを削る事で、vagrant upで仮想環境が作られた直後にapache2のインストールを行い、Webサーバーとして動きますよという内容がサンプルとして紹介されています。

# Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL

今回のQiitaの記事を参考に下記のような感じに修正してみました。
これを参考に自分なりのベストな状態に仕上げてください。

config.vm.provision "shell", inline: <<-SHELL
    who
    echo "----- provision -----"
    sudo yum update kernel -y
    sudo yum install -y git gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel sqlite-devel kernel-devel
    git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
    echo 'export RBENV_ROOT="/home/vagrant/.rbenv"' >> ~/.bashrc
    echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> ~/.bashrc
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc
    git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
    source ~/.bashrc
    rbenv install 2.3.1
    rbenv rehash
    rbenv global 2.3.1
    rbenv rehash
  SHELL

今回はQiitaの記事で紹介されているコマンドをコピペしただけなので、
真っ先にwhoコマンドを実行してログイン中のユーザーが何者かを調べる事にしました。
もしrootユーザーでログインして実行しているならば以後に続くsudoは全て外し、~/で始まるディレクトリは全て/home/vagrant/に置換してください。
またsource ~/.bashrcに代わり、su vagrantで動きそうです。

(動くか否かは未確認ですので、暇なときにでも作って壊して確認してみてください)

 フォルダ共有に関して

Vagrantの共有フォルダはデフォルト状態では、VirtualBOXの機能を利用する形になっていますが、
開発者として中々致命的なあれこれを抱えています。

  • 共有フォルダ内のファイルの更新がとてつもなく遅い
  • ゲストでパーミッションの変更ができない
  • Apache等のツールがファイルの更新を検知できない
  • docker run時、共有フォルダ設定が失敗する

デフォルト以外にもRsync等のファイル共有の仕組みは複数存在します。
これらの問題が表面化してきて困るようなら乗り換えましょう。
vagrant rsync等で調べてみてください。

(Rsyncに乗り換えればカーネルのアップグレードは必要なくなりますね。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/11 16:17

    大変実践的な知識を教えていただきありがとうございます。
    将来的に複数人で開発する見込みもあるので、vagrant upで一発で環境ができあがるように仕上げたいと思います。
    フォルダ共有に関してもデフォルトのものしか知りませんでした。
    ありがとうございました!

    キャンセル

check解決した方法

0

mit0223 さん の編集・追記依頼により解決いたしました!

フォルダ共有でvagrant ユーザのホームディレクトリがおかしくなったのではないでしょうか。 

共有設定の部分をコメントアウトしてreloadすると、正常に接続することが出来ました。
設定がうまくいっていないものを正しいものに変更すると共有も正常に行うことができました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Vagrant

    1415questions

    Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

  • bash

    820questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • UNIX

    433questions

    UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。