ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [개발환경 구축] Linux 가상 환경 구축 이야기
    기타 프로그래밍 2023. 4. 6. 20:12

    서론

    개발 환경 분리를 위해 Linux 가상 환경을 구성하고 개발 환경을 구축하고자 했다.

    그러나 개발 환경은 무슨 퇴근하고 하루 종일 Hyper-V와 Virtual Box에 Linux 올리기에만 끙끙댔다.

    혹시 모를 미래의 나와 나 같은 사람을 위해 글을 남긴다.

     


    목차

       


      1. Linux 가상 환경 구축 이유

      일단 Linux 가상 환경을 구축하려는 이유에 대해 가볍게 짚고 넘어가야 할 것 같다.

      먼저, 컴퓨터를 새로 맞췄다.
      슬슬 개발하려면 개발 환경을 새로 구축해야 한다.

      그런데 내가 지금까지 개발을 하면서 깨달은게 있다면, 오픈소스를 다운 받는 것은 쉬워도 지우는건 힘들다는 거다.
      삭제하더라도 쓰레기 파일을 어딘가에 남기는 경우가 많다.
      후술하겠지만 Hyper-V의 경우에도 가상환경을 지워도 가상파일은 남아있어서 수동으로 삭제해야 한다.

      학생 때만 해도 파이썬 주피터 노트북, Visual Studio C/C++, 안드로이드 스튜디오, 이클립스 등등의 여러가지 개발 툴들을 깔았었다.
      정리를 잘하지 못해서인 것도 있겠지만, 어찌저찌 정리하더라도 컴퓨터가 점점 쓰레기통이 되어가는 느낌을 받았다.
      결국 찌꺼기 파일을 찾는 것이 쉽지 않아 1학기~2학기 마다 포맷했다.

      또, 처음 파이썬을 사용할 땐 가상환경을 잘 몰라서 사용하지 못했다.
      그랬더니 서로 다른 개발 환경으로 인해서 파이썬 버전이 충돌하는 등 여러 가지로 문제를 겪었다.

      그간 고생했기에 개발 환경은 내가 사용하는 컴퓨터 환경하고 분리하고 싶었다.
      그래서 현재의 환경하고 분리되어있어 무언가 코드가 꼬이더라도 안전하며,
      언제든 부담없이 날려버릴 수 있는 가상 환경을 구축하려고 했다.

      물론 윈도우 위에 윈도우 가상 환경을 구축하면 개발 환경으로써 이건 좀 아니지 않나?
      역시 리눅스를 써야지 라는 생각으로 Ubuntu 22.04 LTS를 구축하자고 생각했다.

      Docker..는 컨테이너 가상 환경이지만 GUI는 권장하지 않는 것으로 알아 패스했으며
      내가 아는 Hyper-V, Virtual Box 등을 사용하기로 했다.

       

       

       

      2. Hyper-V

      먼저 학부생 때 Hyper-V를 잘 썼던 기억이 있기 때문에 Hyper-V를 사용하려고 했다.

      처음에는 Hyper-V가 지원하는 빨리 만들기로 Ubuntu 22.04 LTS를 다운 받았다.
      그런데 설치가 끝나자 XRDP 로그인창이 뜨고 로그인을 했는데 화면에 cyan 색만 계속 떠있었다.
      RDP라는 걸 사용해본 적도 없고 문제에 대해 알아볼만한 시간도 없어서 그냥 인스턴스를 지운 다음 빨리 만들기가 아닌 우분투 공식 홈페이지에서 iso 파일 다운 받아서 인스턴스를 다시 만들었다.
      추후에 찾아보니 문제되는 상황이 맞고, 해결 방법이 있다는데... 그 전에 Virtual Box를 사용하기로 결정했기 때문에 시도는 해보지 않았다.

      https://github.com/neutrinolabs/xrdp/issues/1260

       

      Cannot establish RDP connection to Ubuntu VM made with Hyper-V Quick Create · Issue #1260 · neutrinolabs/xrdp

      I created Ubuntu VM on Windows by following Hyper-V Quick Create (https://blogs.windows.com/buildingapps/2018/09/17/run-ubuntu-virtual-machines-made-even-easier-with-hyper-v-quick-create/). Connect...

      github.com

      혹시 모르니 비슷한 이슈의 링크를 남겨둔다.

      그리고 Hyper-V는 가상 환경을 삭제한다고 파일이 전부 삭제되지 않는다.
      VHD 파일이 남게 되는데 깨끗이 삭제하고 싶다면 아래 링크를 참고하길 바란다.
      https://m.blog.naver.com/reinstate10/220585192417

      참고로 빨리 만들기로 이미지를 다운 받을 경우 C:\Users\(사용자명)\AppData\Local\Temp 에 이미지가 임시로 저장되어있다.
      파일명은 뭔가 일련번호.. 컨테이너 번호.. 같이 생겼으니 용량으로 인해 삭제가 필요하다면 찾아서 지우자.
      2기가나 되는 큰 이미지를 다운 받아서 찝찝함에 구글링해보니 그 경로에 존재했다.

      아무튼 위와 같은 문제로 시간을 소비한 뒤, 공식 iso 파일을 받아 제대로 구동시킨 후 이리 저리 만져보다가 불편함을 느꼈고, 그 때문에 Hyper-V를 포기했다.

      불편했던 점은 Hyper-V엔 자유로운 창 크기 조절 기능이 없다는 것이다.

      별 거 아니지만 없으면 불편해지는 기능인데, 현재 회사에서는 Virtual Box를 사용하고 있다.
      Virtual Box에서는 Guest Additions로 호스트-게스트 간 기능을 확장할 수 있고, 그 기능 중 하나가 자유로운 창 크기 조절이다.
      리눅스가 창 크기를 조절하는 대로 늘었다 줄었다 하는데 이게 정말 편하다.
      특히 자택에서의 개발 환경은 공간 상의 문제로 듀얼 모니터가 아닌데, 창 크기를 자유롭게 조절하지 못하면 상당히 불편함을 느낄 것이다.

      따라서 Hyper-V를 포기하고 Virtual Box를 사용하기로 했다.

       

       

       

      3. Virtual Box

      예전에 Virtual Box와 Hyper-V는 충돌이 나서 동시 사용이 불가능했기 때문에 먼저 Hyper-V 기능을 껐다. 
      현재는 Hyper-V를 사용하도록 개선되었다고 어디선가 글을 봤지만... 불안정하게 사용하고 싶지는 않았다.

      Hyper-V와 Virtual Box 충돌로 무슨 일을 겪었었냐면, AVX/AVX2 intruction을 Virtual Box에서 인식하지 못했다.
      그래서 Hyper-V를 끄고 Virtual Box를 몇번이고 재설치했지만 문제가 해결되지 않았다.
      처음에는 무엇이 문제인지 조차 알 수 없어서 원인을 찾느라 꽤나 고생했다.
      해결 방법은 아래 링크를 참조하면 된다.
      https://stackoverflow.com/questions/65780506/how-to-enable-avx-avx2-in-virtualbox-6-1-16-with-ubuntu-20-04-64bit

       

      How to enable AVX / AVX2 in VirtualBox 6.1.16 with Ubuntu 20.04 64bit?

      TL;DR: Tensorflow 1.15 crashes on my virtual machine when imported by Python (error message is Illegal instruction (core dumped)), very probably thanks to AVX and AVX2 being disabled on it. My host

      stackoverflow.com

      그래서 이번에는 Hyper-V 기능을 끄고 클린하게 시작했다.

      하지만 Vitual Box 7.0에 Ubuntu 22.04를 받기 위해 꽤나 많은 시행착오를 겪었다.
      모든 방법을 해본 건 아니고 언제 다시 문제가 생길지 모르지만 당장은 해결됐으니 기록한다.

      Vitual Box 7.0에 Ubuntu 22.04를 올리려면 여러 가지 오류가 있다.

       

      먼저 "가상 머신 만들기" 단계에서 Skip Unattended Installation(무인 설치) 체크 박스가 해제되어 있으면 Guest Additions과 리눅스를 자동으로 설치할 수 있는 것 같다.
      이게 기본 설정이다.

      현재는 체크박스가 비활성화 되어있지만 ISO 이미지를 선택하면 해당 체크 박스가 설정할 수 있도록 활성화 된다.

       

      그 다음 단계에서 Guest Additions과 리눅스를 자동으로 설치하기 위한 설정을 입력해달라고 한다.
      Username and Password는 초기 리눅스 계정이고 그 옆은 나도 잘 모르겠다.
      아래 Guest Additions의 체크 박스를 설정하면 리눅스가 설치되면서 자동으로 Guest Additions도 설치해주는 것 같다.

      난 첫번째 설치 당시 해당 체크 박스를 해제했다.
      그래서 자동으로 확장 기능이 설치되지 않았고, 해보니 자동 창 크기 조절이 안됐다.
      따라서 이를 설치하고자 리눅스 가상 머신을 실행시킨 후 '장치 -> 게스트 확장 CD 이미지 삽입'을 눌렀으나...
      원래 이 경우 자동으로 CD를 인식하고 설치하겠냐는 물음이 떠야하지만 뜨지 않았다.
      그래서 리눅스 터미널으로라도 수동으로 설치받고자 터미널을 실행시켰지만... 터미널도 실행되지 않았다!
      Terminal을 열려고 하면 로딩만 돌아가다가 안 열린다...
      결국 뭔가 꼬였나? 하고 가상 머신을 삭제했다.

       

      두번째 설치 당시에는 Guest Additions 체크 박스를 설정했다.
      그랬더니 리눅스를 실행시키자 이미 확장 기능이 설치되었는지 자동 창 크기 조절이 되었다.
      난 문제가 해결된 줄 알았으나, 이 경우에도 Terminal이 실행되지 않았다.

      당연히 이 문제를 겪은 수많은 사람들이 존재하며, 각기 다른 해결법을 제시한다.
      아래 링크를 참고하자.
      https://askubuntu.com/questions/1435918/terminal-not-opening-on-ubuntu-22-04-on-virtual-box-7-0-0

      나 같은 경우엔 처음엔 첫번째 답변에 적혀있는 대로 언어 설정을 UK로 바꾸고 터미널을 켜볼까 했지만...
      Region & Language를 다 US로 바꿔도 된다는 댓글을 보고 둘 다 US로 설정했다.
      그리고 나타난 현상은.. 블랙 스크린이었다.
      그렇게 두번째 VM을 지웠다.

       

      두번째 VM을 지운 후에는 세번째 답변에 따라 Skip Unattended Installation 체크 박스를 설정해서 설정 과정을 스킵하고 수동으로 리눅스를 설치했다.
      아마 무언가 해당 기능에 문제가 있는 듯 하다.
      아무튼 체크 박스를 설정하면 터미널이 안 켜지는 문제는 해결된다.

      그런데 그렇게 되면 첫번째 VM을 만들었을 때처럼 '장치 -> 게스트 확장 CD 이미지 삽입'으로 직접 확장 기능을 설치해야 한다.
      앞서 말했던 것처럼 설치하겠냐는 물음은 뜨지 않으니, 아래 링크를 참고하여 직접 터미널에 명령어를 입력하여 설치하자.
      https://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/how-to-install-virtualbox-guest-additions-on-ubuntu-22-04.html

       

      위와 같은 과정을 통해 드디어 자동 창 크기 조절이 되며 터미널이 켜지는 Ubuntu 22.04 LTS 가상 머신을 생성할 수 있었다...

       

      + 추가 내용 (23.04.09)
      창 사이즈를 전체화면으로 했을 때 블랙스크린으로 변한 후 리부트를 해도 블랙 스크린이 지속되는 현상이 발생했다.
      구글링 결과 디스플레이 메모리 부족 문제인 것 같다. 아래 링크를 참조하자.
      https://forums.virtualbox.org/viewtopic.php?t=91084
      가상 머신을 종료하고 가상 머신의 설정에서 디스플레이 쪽에 비디오 메모리를 128MB로 조정하자.
      회사에서 FHD 모니터를 사용할 때는 괜찮았는데... 집에서는 QHD 모니터를 사용하는데 그게 문제였던 건가..
      아무튼 어떻게든 또 문제를 해결했다..

       

       

       

      4. WSL

      WSL은 듣기만 했지 사용해본적은 없다.

      윈도우에서 리눅스를 사용하려면 해당 기능을 이용하라고 적극 추천하는 지인 이야기를 들었다.
      몇 가지 정보를 간단하게 찾아봤는데 호스트 시스템과 완벽한 분리가 되지는 않는 것 같다.
      보안 상을 이유로 직접 호스트를 서버로 열기는 무섭고, 리눅스 가상 머신을 서버로 사용할 생각도 있었기 때문에 해당 선택지는 일단 제외했다.

      이 부분은 잘 모르고, 일단 트러블 슈팅 과정을 남기기 위해 글을 작성해서 나중에 보충해서 적든가 하겠다.

      + 추가 내용 (24.08.17)
      윈도우 11 기준으로 윈도우는 Hyper-V 기능을 축소하고 WSL 기능을 중심으로 리눅스 환경을 지원하는 것으로 보인다.

       


      참고문헌

       


      개인적인 자료 정리이기 때문에 잘못된 부분이 있다면 지적해주시면 감사하겠습니다.

      댓글

    Designed by Tistory.