배포 할 Ubuntu VM 만들기


19

나는 프로그래밍 과정의 TA이며 Ubuntu 14.04 LTS 기반의 가상 머신 이미지를 만드는 데 필요한 모든 소프트웨어 (C ++ 및 Python 개발 용)가 사전 설치되어 학생들이 동일한 가상 시스템을 실행하고 투쟁을 피할 수 있습니다. 다양한 기계 및 운영 체제에서 모든 것이 작동하도록합니다. 무료이며 사용 가능한 크로스 플랫폼이므로 Virtual Box를 호스트 VM 소프트웨어로 사용하려고합니다.

순진하게 Ubuntu 14.04 LTS 디스크 이미지를 사용하고 가상 상자에서 실행하고 VDI (가상 하드 디스크)에 설치하고 사전 정의 된 비밀번호로 "학생"계정을 설정하고 필요한 모든 소프트웨어를 설치하고 종료합니다. 가상 머신을 다운하고 VDI 파일을 분배하십시오. 각 학생에게 VDI를 Virtual Box로 가져 와서 실행하고 개인 계정을 설정하도록 요청합니다 (또는 기본 학생 계정 만 사용).

  • 위 절차가 실행 가능합니까?
  • 주의해야 할 함정은 무엇입니까? 우리는 이것을 아주 바보가 아니어야합니다. 우리는 80 명 이상의 학생들을 기대하고 TA가 4 명에 불과하므로 개별 지원을 제공 할 수 없습니다.
  • 동적으로 할당 된 VDI 유형 가상 HDD를 사용하는 데 단점이 있습니까?
  • Virtual Box의 Guest Additions를 즉시 설치할 수 있습니까? 아니면 호스트별로 다른 작업을 수행합니까?
  • 사용자 계정 생성을 처리하는 더 우아한 방법이 있습니까? 이상적으로 Ubuntu는 계정 생성 마법사를 통해 이미지를 처음 부팅 할 때 암호를 설정하고 sudoers 파일에 추가하도록하는 것이 이상적입니다. 그러나 이것은 우선 순위가 아닙니다. 기본 계정을 사용하는 것이 좋습니다.

3
GPL 조건에 따라 소프트웨어를 배포 할 때 소스 코드에 대한 오퍼를 포함시켜야합니다.
ChrisInEdmonton

@ChrisInEdmonton 좋은 지적입니다. 직접 코드를 작성하지 않기 때문에 기술적으로 수정되었거나 재배포입니까? 학생들이 우분투 나 제 3의 출처를 지적해야하는 것으로 충분합니까? 이미지를 게시하지 않고 제한된 액세스 권한을 가진 제한된 대상에게 이미지를 제공하는 것이 중요합니까?
Jonas Greitemann

내가 변호사가 아니기 때문에 GPL을 가리 키도록하겠습니다. 여기서 문제가 될 가능성은 거의 없습니다. :)
ChrisInEdmonton

2
우분투 이미지 자체와 함께 할 필요는 없다 : gnu.org/licenses/… 단지 소스 코드를 다운로드하는 방법에 대한 지침을 작성하십시오.
Markon

1
이를 수행하기 전에 Canonical의 지적 재산권 및 재배포 정책을 신중하게 검토 할 수 있습니다. GPL 소프트웨어는 소스와 함께 무료로 재배포 할 수 있으며, 일반적인 Linux 배포판에서 라이센스를받은 소프트웨어는 거의 모든 기간 동안 합리적인 조건에서 재배포 할 수 있지만 최소한 최근에는 Canonical의 IP 정책에 대해 논란 이있었습니다 .
CVn

답변:


18

이 질문은 학위에 따라 다소 의견이 있지만 :

예,이 절차는 실행 가능합니다-나는 그것이 당신이 찾고있는 것을 성취 할 것이라고 믿으며 그것은 다른 리눅스 배포판으로 과거에 한 일입니다.

유일한 실제 함정은 디스크 간격과 관련된 것입니다 ... 학생들의 컴퓨터에 가상 디스크의 크기를 처리 할 수있는 충분한 디스크 공간이 있는지 확인하십시오. 또한 학생이 컴퓨터를 죽일 때 템플릿 / 참조 디스크를 사용하여 디스크를 빠르게 다시 만들 수 있도록 하나 이상의 컴퓨터에서 복사본을 오프라인으로 유지해야합니다.

동적 디스크의 단점은 데이터 / 업데이트에 따라 VM이 증가함에 따라 호스트 OS에서 더 많은 디스크 공간을 계속 할당해야한다는 것입니다. 저전력 VM에서 실행중인 경우 (특히 호스트 시스템 전원에서 디스크를 확장하는 데 사용되는 전력으로 인해 VM이 약간 지연되는 경향이 있음) 성능 오버 헤드가 발생하기도합니다. 그런 다음 휴대 할 수 없음 (학생이 VM을 엉망으로 만들면 실험실의 모든 컴퓨터에 100GB 이상이있는 것은 아닙니다)

게스트 애드온은 머신별로 다르지 않습니다. 대부분 드라이버 세트입니다. VM을 새 호스트로 가져 오면 VM 드라이버가 하드웨어를 감지하고 조정하여 새 호스트에서 작동합니다.

우아한 사용자 생성-확실하지 않을 수 있습니다. 아마도 처음 시작할 때 실행되고 스크립트 자체가 파괴되기 전에 사용자에게 새 계정을 만들도록 요청하는 스크립트일까요? 5 분 남았을 때 좀 파고 다시 연락 드리겠습니다.

이것이 적어도 부분적으로 도움이되기를 바랍니다.


2
고마워, 그것은 많은 도움이됩니다. 내 주요 관심사는 기본 사항을 망치지 않는 것입니다. 사용자 생성에 너무 많은 시간을 소비하지 마십시오. 그렇게 중요하지 않습니다. 어쨌든 물어 봤기 때문에 꽤 일반적인 문제라고 가정하기 때문에 처리 할 수있는 내장 메커니즘이 있는지 물어볼 수도 있습니다.
Jonas Greitemann

1
절대적으로-내장 된 솔루션이있을 수 있으므로 완전히 찾고 싶습니다.
Fazer87

13

질문에 정확하게 대답하고 VM을 조정하고 제공 가능한 VirtualBox VM을 제공해야하는 경우 Packer 를 사용 하여 필요한 모든 종속성으로 VM을 사전 패키지화하는 것이 좋습니다 . 이 목적을 위해 제작되었으며 ISO에서 이미지 를 회전 시키고 해당 이미지에 대해 원하는 프로비저닝을 수행 한 다음 제공 가능한 VirtualBox VM 이미지를 생성 할 수 있습니다. 결과물을 재생산하거나 무언가를 추가하려는 경우에 전달 물에 수행 된 작업을 정확하게 문서화하기 때문에이 기능도 유용합니다. 또한 프로젝트를 소스 제어 시스템으로 체크인하고 변경할 수 있습니다. 다음은 시작하기 위해 수행 되는 예 입니다.

그러나 빠르게 실행되도록하려면 Vagrant를 사용 하고 표준 Ubuntu 이미지 에서 원하는 프로비저닝을 수행하는 Vagrantfile을 학생들에게 배포하는 것이 좋습니다 . 여기에는 몇 가지 장점이 있습니다.

  • Vagrant는 VirtualBox와 함께 즉시 작동하며 공유 폴더 설정과 같은 학생들의 모든 어려운 부분을 처리하여 VM과 호스트 컴퓨터간에 파일을 쉽게 복사하고 상자에 대한 인터넷 액세스를 허용하도록 네트워킹을 구성합니다. 또한 VirtualBox 설정 문제를 문서화 / 디버깅해야하는 시간도 절약됩니다.
  • Vagrantfile은 제공 가능한 VM보다 훨씬 작습니다. 과정 중간에 VM에 무언가를 변경 / 추가하려면 새 VM을 다시 만들 필요가 없으며 업데이트 된 Vagrantfile을 제공하십시오.
  • 수리 할 수없는 것 이상으로 엉망인 경우 고통없이 VM을 다시 파괴 / 재배치 할 수 있습니다.
  • Vagrantfile은 학생들에게 VM에 대해 수행 한 작업을 정확하게 보여 주므로 충분히 이해하는 지점에 도달하면 후드 아래에서 진행되는 작업을보고 그로부터 배울 수도 있습니다.

다음 은 Ubuntu 14.04 이미지에서 일부 프로비저닝을 수행하는 방법을 보여주는 Vagrantfile의 예 입니다.


3
유랑자 및 / 또는 패커가이를위한 길입니다.
Sandy Chapman

9

완벽하게 실현 가능합니다. 대안은 Vagrant, Puppet, Chef 또는 VM을 처음부터 구축하는 것과 비슷한 것이지만 설정하는 데 많은 작업이 필요합니다.

내 사이트 중 하나의 개발 팀도 새로운 개발자를 신속하게 시작하고 실행시키기 위해 동일한 작업을 수행합니다.
이미지에 사전 설정 계정 1 개 (Sudo 권한 포함)와 개인 계정을 만들기 위해 수행해야하는 단계가 포함 된 간단한 지침 문서

참고 : VM 내부에서 네트워크 / 인터넷 액세스가 필요할 수 있습니다. 호스트로 브리지되거나 NAT 될 수 있습니다. 어떤 것을 선택하든 학생들에게 호스트의 구성 방법을 알려 주어야합니다. VM 내부의 NIC를 DHCP 장치로 설정하기 만하면됩니다. 나중에 사용자가 고정 IP 주소를 수동으로 구성해야하더라도 대부분의 구성에서 안전한 시작점이됩니다.
VM에 고정 IP 주소를 넣으면 실제로 문제가 발생합니다. 동일한 LAN에서 다른 VM이 온라인 상태로 이미 사용 중입니다 ...


3
"설정 작업"은 이미지 작성 빈도에 따라 다릅니다. 다음 학기에도 같은 과정을 다시하고 있습니까? 다음 학기에는 다른 언어로 비슷한 과정을 수행하고 있습니까? 후임자들의 삶을 편하게 만들고 싶습니까? C ++ 컴파일러에는 이후 버전에서 수정되는 버그가 있습니다. 새로운 C ++ 표준은 2017 년에 나옵니다. 프로그래머는 2 분 안에 2 분 정도 걸리는 작업을 수행하기 위해 프로그램을 작성하는 데 2 ​​시간을 소비하는 사람입니다. ;-)
Jörg W Mittag

2
@ JörgWMittag 물론 포인트가 있습니다. 그러나 Vagrant에 익숙하지 않으면 학습 곡선이 상당히 가파르고 시간이 많이 걸릴 수 있습니다. 개인적으로 저는 이번 학기에 빠른 솔루션을 위해 VM 솔루션을 선택하고 학기 중에는 장기적인 접근을 위해 다른 솔루션으로 개발하는 데 시간을 할애합니다.
Tonny

2
네트워크 액세스와 관련하여 분산 VM은 아마도 동일한 MAC 주소를 갖습니다. NAT에는 문제가되지 않지만 어쨌든 MAC 주소를 재설정하는 것이 좋습니다.
user1937198

1
@ user1937198 MAC은 VDI 자체에서 설정되지 않고 VirtualBox / vmdk에서 설정됩니다. VirtualBox에서 새 VM을 가리키고 클릭 한 다음 VDI 파일을 추가하면 새로운 MAC을 얻게됩니다. (OVA에서 가져 오면 MAC 재설정 여부를 묻는 메시지가 나타납니다.)하지만 그렇습니다. 네트워크가 브리징에서 실행되는 경우 고려해야 할 또 다른 문제입니다.
Tonny

1
@SteveBarnes 나는 특히 당신에게 마지막 문구에 동의합니다 : 작동 지침이 아무리 훌륭하더라도 사람들은 그것을 따라갈 때 잘못 얻을 것입니다. 그들은 단계를 건너 뛰거나 (또는 ​​잘못된 순서로) 실행 해야하는 명령을 오타하거나 더 잘 알고 스크립트에서 벗어났다고 생각합니다. 자동화 할 수 있다면 (내 철자 검사기가 실제로 단어인지 확실하지 않은 경우) 가장 좋은 방법은 여전히 ​​자동화하는 것입니다. 오류의 여지가 없습니다.
Tonny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.