Membuat VM Ubuntu untuk didistribusikan

19

Saya seorang TA untuk kursus pemrograman dan ditugaskan untuk membuat gambar mesin virtual berdasarkan Ubuntu 14.04 LTS dengan semua perangkat lunak yang diperlukan (untuk pengembangan C ++ dan Python) telah terinstal sedemikian rupa sehingga para siswa semua memiliki sistem virtual yang sama yang berjalan dan kami menghindari kesulitan untuk membuat semuanya bekerja pada berbagai mesin dan sistem operasi yang berbeda. Kami bermaksud untuk menggunakan Virtual Box sebagai perangkat lunak host VM karena itu gratis dan tersedia lintas platform.

Naif, saya hanya akan menggunakan image disk Ubuntu 14,04 LTS, jalankan di Virtual Box saya, instal ke virtual hard disk (VDI), buat akun "pelajar" dengan kata sandi yang telah ditentukan, instal semua perangkat lunak yang diperlukan, tutup semua ke mesin virtual dan mendistribusikan file VDI. Kami akan meminta setiap siswa untuk mengimpor VDI ke Virtual Box, menjalankannya dan mengatur akun pribadi mereka (atau cukup gunakan akun siswa default).

  • Apakah prosedur di atas layak?
  • Apa perangkap yang harus diwaspadai? Kita perlu ini menjadi bukti yang sangat bodoh. Kami mengharapkan lebih dari 80 siswa dan hanya empat TA, sehingga kami tidak dapat memberikan dukungan individu.
  • Apakah ada kerugian menggunakan HDD virtual tipe VDI yang dialokasikan secara dinamis?
  • Apakah saya boleh menginstal Penambahan Tamu Kotak Virtual langsung dari kelelawar atau apakah melakukan sesuatu yang khusus untuk host?
  • Apakah ada cara yang lebih elegan untuk menangani pembuatan akun pengguna? Idealnya, Ubuntu akan menempatkan mereka melalui panduan pembuatan akun dan meminta mereka mengatur kata sandi mereka (serta menambahkannya ke file sudoers) saat pertama kali mereka mem-boot gambar. Ini bukan prioritas. Saya kira memiliki akun default baik-baik saja.
Jonas Greitemann
sumber
3
Perhatikan bahwa Anda harus memasukkan tawaran untuk kode sumber, karena Anda mendistribusikan perangkat lunak berdasarkan ketentuan GPL.
ChrisInEdmonton
@ChrisInEdmonton Poin bagus. Karena saya tidak menulis kode apa pun, apakah ini modifikasi atau hanya redistribusi? Apakah cukup untuk mengarahkan siswa ke Ubuntu atau sumber pihak ketiga jika mereka meminta (mereka tidak akan) atau apakah saya secara hukum berkewajiban untuk menyediakan sumber secara proaktif? Apakah penting bahwa saya tidak mempublikasikan gambar tetapi memberikannya kepada audiens terbatas dengan akses terbatas?
Jonas Greitemann
Saya hanya akan mengarahkan Anda ke GPL karena saya bukan pengacara. Sangat tidak mungkin menjadi masalah di sini. :)
ChrisInEdmonton
2
Saya akan mengatakan bahwa Anda tidak perlu melakukannya bersama dengan gambar Ubuntu itu sendiri: gnu.org/licenses/… Cukup tulis di suatu tempat dalam instruksi bagaimana cara mengunduh kode sumber.
Markon
1
Anda mungkin ingin meninjau dengan cermat properti intelektual dan kebijakan redistribusi Canonical sebelum melakukan ini. Meskipun perangkat lunak GPL bebas untuk didistribusikan ulang dengan sumber, dan hampir setiap lisensi lain yang Anda temukan perangkat lunaknya dilisensikan dalam distribusi Linux yang khas memungkinkan redistribusi dengan ketentuan yang masuk akal, setidaknya baru-baru ini ada beberapa kontroversi tentang kebijakan IP Canonical.
CVn

Jawaban:

18

Sementara pertanyaan ini agaknya berdasarkan opini:

Ya, prosedur ini layak - saya percaya ini akan mencapai apa yang Anda cari dan ini adalah sesuatu yang telah saya lakukan di masa lalu dengan distribusi linux lainnya.

Satu-satunya perangkap nyata adalah sekitar jarak disk ... pastikan bahwa mesin siswa Anda memiliki ruang disk yang cukup untuk menangani ukuran Disk Virtual. Selain itu, pastikan Anda menyimpan salinan secara offline di setidaknya satu mesin sehingga Anda dapat menggunakan disk templat / referensi untuk membuat ulang disk dengan cepat ketika seorang siswa membunuh mesin mereka.

Kerugian dari disk dinamis adalah bahwa OS host harus terus mengalokasikan semakin banyak ruang disk sebagai VM tumbuh dengan data / pembaruan. Ini memiliki overhead kinerja yang dapat menjadi sakit kepala di kali - terutama jika Anda menjalankan pada VM bertenaga rendah (daya mesin Host dikurangi daya yang digunakan untuk memperluas disk cenderung membuat VM sedikit ketinggalan) .. itu juga berpotensi membuat lalu tidak dapat dibawa-bawa (tidak semua mesin di lab Anda mungkin memiliki 100GB + setelah seorang siswa mengacaukan VM mereka)

Addons tamu bukan mesin khusus. Mereka cukup banyak driver. Ketika Anda mengimpor VM ke host baru, driver VM akan mendeteksi dan men-tweak perangkat keras Anda untuk bekerja pada host baru.

Pembuatan pengguna yang elegan - tidak yakin, mungkin skrip yang berjalan pada peluncuran pertama dan meminta pengguna untuk membuat akun baru sebelum skrip dirusak sendiri? Saya akan melakukan penggalian dan kembali kepada Anda ketika saya punya waktu 5 menit.

Semoga ini setidaknya sebagian membantu.

Fazer87
sumber
2
Terima kasih, ini banyak membantu. Perhatian utama saya adalah tidak mengacaukan dasar-dasarnya. Jangan menghabiskan terlalu banyak waktu untuk hal pembuatan pengguna. Ini benar-benar tidak penting. Saya hanya berpikir, karena saya tetap bertanya, saya mungkin juga bertanya apakah ada mekanisme built-in untuk menanganinya, karena saya menganggap itu masalah yang cukup umum.
Jonas Greitemann
1
benar-benar - dan sangat mungkin ada solusi bawaan, jadi saya ingin menemukannya.
Fazer87
13

Menjawab pertanyaan Anda dengan tepat, jika Anda perlu menyesuaikan VM dan memberikan VM VirtualBox yang dapat dikirimkan, saya sarankan menggunakan Packer untuk mengemas VM dengan semua dependensi yang diperlukan. Itu dibangun hanya untuk tujuan ini dan memungkinkan Anda untuk memutar gambar dari ISO , melakukan ketentuan apa pun yang Anda inginkan terhadap gambar itu, dan kemudian membuat gambar VM VirtualBox yang dapat disampaikan. Ini juga baik untuk Anda karena ia mendokumentasikan dengan tepat apa yang dilakukan pada hasil jika Anda ingin mereproduksi / menambahkan sesuatu ke dalamnya. Selain itu, Anda dapat memeriksa proyek ke sistem kontrol sumber dan membuat perubahan. Berikut ini contoh yang dilakukan untuk membantu Anda memulai.

Namun, jika Anda ingin mereka berjalan dengan cepat, saya sarankan menggunakan Vagrant dan mendistribusikan kepada siswa Anda sebuah Vagrantfile yang melakukan penyediaan yang diinginkan yang Anda butuhkan pada gambar Ubuntu standar . Ini memiliki beberapa keunggulan:

  • Vagrant bekerja di luar kotak dengan VirtualBox dan akan menangani semua bagian sulit bagi siswa seperti mengatur folder bersama sehingga mereka dapat menyalin file dengan mudah antara mesin VM dan host, mengkonfigurasi jaringan sehingga memungkinkan akses internet ke kotak untuk mereka , dll. Ini juga menghemat waktu Anda harus mendokumentasikan / men-debug masalah pengaturan VirtualBox untuk mereka.
  • Vagrantfile jauh lebih kecil dari VM yang dapat dikirim. Jika Anda ingin mengubah / menambahkan sesuatu ke setengah jalan melalui kursus Anda tidak harus membangun kembali VM baru, cukup beri mereka Vagrantfile diperbarui.
  • Jika mereka mengacaukan sesuatu di luar kemampuan mereka untuk memperbaikinya, mereka dapat dengan mudah menghancurkan / memindahkan VM lagi
  • Vagrantfile akan menunjukkan kepada siswa Anda apa yang telah dilakukan terhadap VM sehingga ketika sampai pada titik di mana mereka cukup memahami, mereka dapat melihat apa yang terjadi di balik tudung dan mungkin belajar dari itu juga.

Berikut ini adalah contoh Vagrantfile yang menunjukkan bagaimana melakukan beberapa penyediaan pada gambar Ubuntu 14.04.

Joel B
sumber
3
Vagrant dan / atau Packer adalah cara untuk melakukannya.
Sandy Chapman
9

Sangat layak. Alternatifnya adalah Vagrant, Wayang, Koki atau sesuatu yang serupa untuk membangun VM dari awal tapi itu banyak pekerjaan untuk pengaturan.

Tim pengembang di salah satu situs saya melakukan hal yang sama untuk membuat pengembang baru cepat dan berjalan.
1 akun yang sudah ditentukan sebelumnya (dengan sudo-hak) pada gambar dan dokumen instruksi singkat dengan langkah-langkah yang harus mereka ambil untuk membuat akun pribadi mereka.

Harap dicatat: Anda kemungkinan besar membutuhkan akses jaringan / internet di dalam VM. Itu bisa dijembatani atau disatukan ke host. Apa pun yang Anda pilih, Anda harus menginstruksikan siswa Anda cara mengonfigurasi sisi host ini. Atur saja NIC di dalam VM sebagai perangkat DHCP. Itu adalah titik awal yang aman untuk sebagian besar konfigurasi, bahkan jika pengguna nanti harus secara manual mengkonfigurasi alamat IP statis.
Memasukkan alamat IP statis di VM benar-benar meminta masalah. Sudah pasti sedang digunakan oleh VM lain untuk online pada LAN yang sama ...

Tonny
sumber
3
"Banyak pekerjaan yang harus disiapkan" tergantung pada seberapa sering Anda harus membuat gambar. Apakah Anda akan mengikuti kursus yang sama semester depan lagi? Apakah Anda mungkin TAING kursus serupa dengan bahasa yang berbeda semester depan? Apakah Anda ingin membuat hidup lebih mudah bagi penerus Anda? Kompiler C ++ memiliki bug yang diperbaiki di versi yang lebih baru. Standar C ++ baru keluar pada 2017. Ingat, seorang programmer adalah orang yang menghabiskan waktu 2 jam untuk menulis sebuah program untuk melakukan tugas dalam 2 detik yang akan memakan waktu 2 menit dengan tangan. ;-)
Jörg W Mittag
2
@ JörgWMittag Tentu saja, Anda ada benarnya. Tetapi jika Anda tidak terbiasa dengan Vagrant dan sejenisnya kurva belajar bisa sangat curam / memakan waktu. Secara pribadi saya mungkin akan mencari solusi VM untuk solusi cepat semester ini dan selama semester meluangkan waktu untuk berkembang menjadi solusi lain untuk pendekatan jangka panjang.
Tonny
2
Mengenai akses jaringan, VM terdistribusi mungkin akan memiliki alamat MAC yang identik. Ini mungkin bukan masalah dengan NAT, tetapi itu adalah ide yang baik untuk mengatur ulang alamat MAC.
user1937198
1
@ user1937198 MAC diatur oleh VirtualBox / vmdk, tidak diatur dalam VDI itu sendiri. Jika Anda menunjuk dan mengklik VM baru bersama di VirtualBox dan kemudian menambahkan file VDI Anda akan mendapatkan MAC baru. (Dengan mengimpor dari OVA Anda akan ditanya apakah akan mereset MAC atau tidak.) Tapi Anda benar. Itu sesuatu yang lain untuk dipertimbangkan dan tentu saja masalah jika jaringan dijalankan dalam menjembatani.
Tonny
1
@SteveBarnes Saya terutama setuju dengan Anda kalimat terakhir: Tidak peduli seberapa baik instruksi kerja, orang akan salah ketika mereka mengikutinya. Mereka melewati langkah-langkah (atau melakukannya dengan urutan yang salah), membuat kesalahan ketik pada perintah yang perlu mereka jalankan atau mereka pikir mereka lebih tahu dan menyimpang dari skrip. Jika itu automatable (pemeriksa ejaan saya tidak yakin apakah itu benar-benar sebuah kata) pendekatan terbaik masih untuk mengotomatiskannya: Tidak ada ruang untuk kesalahan.
Tonny