'vagrant up'이 때로'Segmentation fault'이 발생하기 때문에 조사를 진행했습니다.

5384 단어 Vagrant
  • 향후 고장 조사 시 사용될 수 있는 정보이기 때문에 스스로 필기를 한다
  • 개요
  • vagrant up 이후 한 번 정상 가동vagrant halt 등 VM이 정지되면 다시 vagrant up 공유 폴더의 설치 처리 중 Segmentation Fault 발생, 부팅 실패
  • 구글에서도 비슷한 현상이 보이지 않기 때문에 결국おま環의 문제는 가능하면 만나고 싶지 않은 장애물로 상당한 시간을 낭비했다는 것이다.
  • 컨디션
  • 호스트 OS: 윈도우즈 10 홈 1709(1629.64) ※ winver 확인
  • 공급자: Virtualbox 5.2.0r118431(Qt5.6.2) + 확장 패키지(5.2.0r118431)
  • Vagrant : 2.0.1
  • Vagrant plugin :
  • $ vagrant plugin list
    vagrant-cachier (1.2.1)
    vagrant-hostsupdater (1.0.2)
      - Version Constraint: > 0
    vagrant-ignition (0.0.3)
      - Version Constraint: > 0
    vagrant-share (1.1.9, system)
      - Version Constraint: > 0
    vagrant-vbguest (0.15.0)
      - Version Constraint: > 0
    
  • 컨트롤러:git for 윈도우즈에 첨부된git bash 컨트롤러를 사용하여 작업
  • 정황
  • 에 익숙한 vagrant up에서 가상 시스템을 시작할 때 익숙하지 않은 Segmentation fault 오류가 발생할 수 있습니다.호스트를 재부팅해도 변경되지 않습니다.
  • $ vagrant up
    Bringing machine 'develop.vm' up with 'virtualbox' provider...
    ==> develop.vm: Checking if box 'minimal/centos7' is up to date...
    ==> develop.vm: Fixed port collision for 22 => 2222. Now on port 2200.
    Segmentation fault
    
    Segmentation fault만 나와도 뭔지 몰라!
    Vagrant에 대한 디버그 정보 내보내기

  • vagrant 명령 전에 부여VAGRANT_LOG=DEBUG할 때 디버깅 정보를 볼 수 있음
  • vagrant --debug도 가능
  • $ VAGRANT_LOG=DEBUG vagrant up
    ~ 
    いろいろログが流れて最終的に下記の箇所で停止する
    ~
    DEBUG subprocess: Waiting for process to exit. Remaining to timeout: 32000
    DEBUG subprocess: Exit status: 0
     INFO warden: Calling IN action: #<Vagrant::Action::Builtin::SyncedFolders:0x00000000075b3860>
     INFO synced_folders: SyncedFolders loading from cache: false
     INFO synced_folders: Synced Folder Implementation: virtualbox
     INFO synced_folders:   - /vagrant: . => /vagrant
     INFO synced_folders:   - vagrant-cache: C:/Users/name/.vagrant.d/cache/minimal/centos7 => /tmp/vagrant-cache
    Segmentation fault
    
  • up,destroy,status 등 다른 Vagrant의 전체 조작 명령에서도 같은 상세한 디버깅 정보를 볼 수 있다.아무 단서도 없는 상황보다 훨씬 구조될 수 있어.
  • 대책 등 토론
  • 최초 Plugin의 충돌은 무엇입니까?그렇게 생각하지만 손 옆 환경에서 Segmentation Fault가 나오면 반드시 이 설치 부분에서 멈춘다.
  • 지금까지 자신의 환경에서 나타나지 않았지만 이전부터 윈도+VirtualBOX+Vagrant에서 파일 공유 문제가 뚜렷하게 드러났다는 주장이 있었다.
  • 최근에 Virtualbox와Vagrant 주위의 업데이트가 진행되었고 호스트 측의 Windows 업데이트도 매일 진행되었는데 이 방면의 조합은 충분한 이유가 있다
  • Vagrant에서 NFC에서 호스트 게스트 간의 설치를 하는 것이 최선의 실천인 것 같다.
  • 호스트가 Windows이기 때문에 NFC를 실현하기 어려우므로 vagrant 플러그인vagrant-winnfsd:https://github.com/winnfsd/vagrant-winnfsd 등을 도입하는 것을 고려한다.
  • 또는 급하게 Virtualbox와Vagrant 버전을 업그레이드하고 검증했는데...
  • 해결하다
  • 최종적으로 VirtualBOX(확장 포함)와Vagrant 분리+vagrant-winnfsd를 플러그인을 가져와 앞의 환경이 안정되었기 때문에 잠시 이렇게 사용해서 해결했습니다.
  • VirtualBOX → 5.1.30
  • Vagrant → 1.9.8
  • 조만간 최신판으로 업그레이드에 도전하고 싶습니다.
  • Vagrant 플러그인vagrant-winnfsd 사용 방법
  • 공식 준수: https://github.com/winnfsd/vagrant-winnfsd
  • vagrant plugin install vagrant-winnfsd
  • Vagrantfile에 다음 내용을 추가합니다.
  • if Vagrant.has_plugin?("vagrant-winnfsd")
      config.winnfsd.uid = 500
      config.winnfsd.gid = 500
    end
    config.vm.synced_folder ".", "/vagrant", type: "nfs"
    
  • 참고로 UID/GID는 내가 자주 사용하는 BOX bento의 고객 OS 환경에서vagrant의 UID/GID는 500이기 때문에 500이다.사용하는 BOX에 따라 차이가 있다고 생각합니다.
  • 추기
  • 설치된vagrant 호스트가Vagrant 플러그인의 버전과 다르더라도 오류가 발생할 수 있으므로 플러그인을 업데이트하려고 합니다.
  • vagrant plugin update
    
  • 또는 플러그 인 재삽입
  • vagrant plugin expunge --reinstall
    
    기타
  • Vagrant+Virtualbox+Windows의 파일 공유는 Virtualbox 호스트와 VirtualBox Extension Pack과Vagrant 버전의 조합으로 번거로운 모습이 많기 때문에 이번vagrant-winnfsd을 사용했습니다. 공유 기능이 다양한 장애물에서 해방되어 행복해질 수 있습니다.
  • Vagrant+VirtualBOX에서도 Linux/macOS 환경에서 개발이 안정적이죠
  • 참고 자료
  • https://qiita.com/Ping/items/9bc6e4492b22d1ff2db4
  • https://www.vagrantup.com/docs/synced-folders/nfs.html
  • https://github.com/winnfsd/vagrant-winnfsd
  • https://blog.hiratama.net/windows%E3%81%A7vagrant%E4%BD%BF%E3%81%86%E3%81%AA%E3%82%89vagrant-winnfsd%E3%82%92%E5%85%A5%E3%82%8C%E3%81%9F%E6%96%B9%E3%81%8C%E3%82%88%E3%81%84/
  • 좋은 웹페이지 즐겨찾기