Mengasingkan persekitaran pembangunan dengan bekas LXD

Saya akan bercakap tentang pendekatan untuk mengatur persekitaran pembangunan terpencil tempatan di stesen kerja saya. Pendekatan ini dibangunkan di bawah pengaruh faktor-faktor berikut:

  • Bahasa yang berbeza memerlukan IDE dan rantai alat yang berbeza;
  • Projek yang berbeza mungkin menggunakan versi rantai alat dan perpustakaan yang berbeza.

Pendekatannya adalah untuk membangunkan dalam bekas LXD yang berjalan secara tempatan pada komputer riba atau stesen kerja dengan output grafik diubah hala ke hos.

Contoh konfigurasi Ubuntu 20.04.

Refleksi tentang pilihan dan alasan diberikan pada akhir artikel.

1. Pemasangan LXD

Π’ Ubuntu 20.04 LXD tidak lagi tersedia untuk pemasangan sebagai pakej deb, hanya melalui snap:

$ snap install lxd

Selepas pemasangan anda perlu melakukan permulaan:

$ lxd init

Satu-satunya parameter yang saya ubah ialah storage bakend - Saya guna dir sebagai yang paling mudah. Memandangkan saya tidak menggunakan gambar dan salinan, amaran masuk dokumentasi Mereka tidak menakutkan saya:

Begitu juga, bahagian belakang direktori harus dipertimbangkan sebagai pilihan terakhir.
Ia menyokong semua ciri LXD utama, tetapi sangat perlahan dan tidak cekap kerana ia tidak dapat berfungsi
salinan segera atau syot kilat dan sebagainya perlu menyalin keseluruhan storan tika setiap kali.

2. Persediaan profil LXD

Profil dalam LXD β€” ini ialah set parameter yang digunakan pada beberapa bekas. Untuk keperluan saya, satu-satunya profil yang dibuat secara lalai sudah memadai untuk saya default dengan perubahan berikut:

  • $ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 β€” supaya aplikasi dalam bekas boleh berinteraksi dengan pelayan X11 hos;
  • $ lxc profile set default environment.DISPLAY :0 - supaya pembolehubah persekitaran DISPLAY telah dipasang dengan betul dalam bekas;
  • $ lxc profile set default raw.idmap "both 1000 1000" - untuk yang betul pemetaan pengecam.

3. Mencipta dan menyediakan bekas

Mencipta bekas berdasarkan imej images:ubuntu/20.04:

$ lxc launch images:ubuntu/20.04 dev1

Saya lebih suka imej dari repositori https://images.linuxcontainers.org, kerana mereka mempunyai kurang perisian prapasang. Atas sebab ini saya menambah awalan images: kepada nama imej. Mencipta bekas berdasarkan imej dari repositori Ubuntu boleh dilakukan seperti berikut: $ lxc launch ubuntu/20.04 dev1.

Akses kepada kulit akar bekas:

$ lxc exec dev1 -- bash

Saya akan memasang Firefox dan Kod VS (daripada repositori mengikut arahan):

$ apt update
$ apt install curl gpg firefox

$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
$ install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list

$ apt update
$ apt install code

Saya akan sertakan bekas untuk kejelasan.

poweroff

Bonus! Agak mudah untuk membuang GPU ke dalam bekas supaya aplikasi yang berjalan di dalamnya boleh menggunakan kad grafik. Untuk melakukan ini, anda perlu:

  • Tambah peranti $ lxc config device add dev1 mygpu gpu;
  • pasang pemacu kad video dalam bekas - yang sama yang dipasang pada hos.

4. Menggunakan bekas

Jika bekas belum berjalan, anda perlu memulakannya:

lxc start dev1

Menjalankan Kod VS sebagai pengguna bukan root ubuntu:

lxc exec dev1 -- sudo --login --user ubuntu code

Lancarkan Firefox:

lxc exec dev1 -- sudo --login --user ubuntu firefox

Tetingkap aplikasi akan dipaparkan pada hos, tetapi ia akan dilaksanakan di dalam bekas - serupa dengan pemajuan grafik menggunakan ssh.

Saya tidak menutup bekas yang sedang berjalan secara manual, kerana saya tidak melihat banyak perkara di dalamnya - Saya mengehadkan diri saya untuk menutup tetingkap aplikasi yang sedang berjalan.

5. Kesimpulannya

Saya lebih suka untuk tidak menggunakan OS hos untuk pembangunan, kerana ini memerlukan pemasangan alat pembangunan, versi nyahpepijat perpustakaan, mengkonfigurasi komponen sistem dengan cara tertentu dan manipulasi lain. Semua ini boleh membawa kepada tingkah laku yang tidak dijangka dalam seluruh perisian bukan pembangunan, atau bahkan keseluruhan OS. Sebagai contoh, perubahan dalam konfigurasi OpenSSL mungkin menyebabkan OS tidak lagi dimulakan dengan betul.

Saya telah mencuba alat yang berbeza untuk mengasingkan persekitaran pembangunan:

  • mesin maya (KVM, VirtualBox, dll.) adalah pilihan yang paling jelas, tetapi mereka menggunakan lebih banyak sumber, walaupun tiada pilihan lain untuk pembangunan di bawah Windows (jika hosnya adalah Linux);
  • alat pembangunan awan yang berjalan pada mesin tempatan (Cloud9 dalam bekas atau mesin maya, Eclipse Che, dsb.) - ia tidak dibangunkan untuk mod operasi ini, ia memerlukan konfigurasi dan penyelenggaraan tambahan, lebih baik menggunakannya untuk tujuannya. tujuan - di awan;
  • Bekas Docker sekali lagi bertujuan untuk sesuatu yang lain; pada pendapat saya, mereka tidak begitu mudah untuk membuat prototaip dengan cepat menggunakan perisian yang belum dibungkus dalam bekas yang berasingan.

Pendekatan yang dipilih mengagumkan saya dengan kesederhanaan dan halangan yang rendah untuk masuk. Dalam bekas itu sendiri, anda boleh menggunakan pendekatan khusus projek: pasang dan konfigurasikan semuanya secara manual, atau gunakan automasi (Boneka, Ansible, dll.), malah gunakan Infrastruktur berasaskan Docker. Saya juga menggunakan bekas LXD untuk menjalankan perisian tertentu yang sama ada memerlukan pemasangan sejumlah besar kebergantungan atau versi OS yang berbeza - dalam kes ini, anda boleh mencipta bekas dengan versi OS yang dikehendaki, contohnya $ lxc launch images:ubuntu/16.04 dev16.

Adalah penting untuk diingat bahawa dari segi pengasingan, kontena mempunyai permukaan serangan yang lebih besar berbanding dengan virtualisasi - hos dan kontena berkongsi teras tunggal, kelemahan yang membolehkan perisian hasad melarikan diri daripada bekas. Apabila bereksperimen dengan perisian yang meragukan, lebih baik menggunakan mekanisme pengasingan yang lebih sesuai.

Pautan berguna

Sumber: www.habr.com

Tambah komen