Penyimpanan cloud komponen: tahap baru dalam pengembangan gateway Internet ICS

Mulailah



Popularitas solusi UTM modern terutama dikaitkan dengan multifungsinya. Kemampuan untuk menyelesaikan semua tugas TI perusahaan dengan cepat, dan bahkan dari satu antarmuka web, menarik banyak administrator sistem.



Solusi kami, Server Kontrol Internet , juga termasuk dalam kelas produk UTM, menggabungkan fungsi perlindungan jaringan, manajemen koneksi Internet, pemfilteran konten, dan banyak lainnya.



Terlepas dari keuntungan yang jelas, ada sisi negatif untuk menggunakan solusi seperti itu - solusi tersebut seringkali monolitik, yang tidak memungkinkan untuk menanggapi perubahan pasar dengan cara yang lebih fleksibel.



Dari sudut pandang ini, produk yang lebih menarik adalah UTM gateway, yang dapat dibangun sendiri oleh pengguna berdasarkan tugas nyata perusahaan.



Dalam hal ini, sysadmin membangun gateway-nya dari “blok bangunan” komponen, hanya menginstal modul yang ia butuhkan. Semua alat ada di cloud pengembang, dan pengguna mengunduh dan menginstal paket yang diperlukan. Prinsip ini menjadi dasar perkembangan kita di masa depan.



Ekosistem FreeBSD historis baik-baik saja dan dipahami dengan baik. Kami telah memilih penginstal paket FreeBSD tradisional, pkg, sebagai metode yang paling tepat untuk mendistribusikan paket. Repositori dikumpulkan di cloud kami, dan akses ke sana ditentukan pada klien dalam konfigurasi pkg tradisional.



Apa yang kami rencanakan



Sistem harus berupa konstruktor dalam bentuk inti tempat komponen dirangkai. Pengguna menerima kit distribusi yang hanya menyertakan plugin minimum yang diperlukan (router, fierwall, dll.). Sisanya dipasang sesuai kebutuhan.



Agar sistem berfungsi, kami perlu mengimplementasikan komponen berikut:



  • sistem - kernel FreeBSD yang dimodifikasi
  • core - paket khusus dengan pengaturan produk, yang merupakan ketergantungan induk untuk semua plugin
  • plugin - masing-masing adalah paket terkompilasi yang diinstal secara teratur menggunakan utilitas pkg


Struktur plugin



Seperti yang dinyatakan, plugin adalah paket biasa. Ini dapat diinstal dengan utilitas pkg.

Untuk menjaga kompatibilitas ke belakang, diputuskan bahwa versi utama baru dari plugin akan menjadi paket terpisah, tidak terkait dengan versi utama sebelumnya. Misalnya plugin-v1 dan plugin-v2 . Alasannya adalah bahwa mereka mungkin memiliki ketergantungan yang sangat berbeda, bahkan mungkin saling bertentangan.



Versi minor hanya mengubah nomor versi dari paket tersebut, semuanya seperti biasa di sini.



Bekerja dengan plugin



Agar sistem berfungsi seperti yang kita butuhkan, utilitas add-on telah dibuat di atas pkg.



Alat utama untuk pekerjaan adalah pkg query dan pkg rquery .



Yang pertama mengumpulkan informasi tentang plugin yang dipasang di sistem, yang kedua mengakses repositori.



Agar utilitas dapat mengontrol eksekusi perintah yang benar dalam sistem, eksekusi setiap perintah diperiksa untuk mendapatkan kode kembali. Jika kode pengembalian 0 diterima, maka perintah dijalankan, jika sesuatu yang lain, maka terjadi kesalahan. Dengan demikian, Anda dapat melacak, misalnya, masalah koneksi jaringan.



Nuansa yang menarik muncul di sini. Misalnya







, jika Anda mencari semua paket berdasarkan pola: maka jika tidak ada paket yang diinstal yang cocok dengan kondisi pola, kesalahan 69 akan ditampilkan tanpa pesan kesalahan. Pengembang utilitas menganggap bahwa jika pencarian tidak menghasilkan apa pun, maka ini adalah perilaku abnormal. Baiklah. Saya harus menangani kasus seperti itu dengan cara yang khusus.



Perbarui masalah



Kemudian masalah dengan pembuatan versi dimulai saat memperbarui plugin.



Pertama, utilitas pkg, saat menjalankan perintah pkg upgrade <pkg_name>, juga memperbarui SEMUA dependensi paket langsung, perilaku ini dirancang oleh pengembang. Tetapi dalam kasus kami, ini termasuk pembaruan dan inti, jika versi minor telah dirilis untuknya, yang tidak diinginkan, karena inti mengubah parameter sistem, dan juga memerlukan boot ulang sistem setelah pembaruan.



Artinya, jika kita telah menginstal SP2 - pkg-1 dan pkg-2 , dan tergantung pkg-1 Set pkg-2 , jika kita menjalankan perintah pkg tingkatkan pkg-1 , lalu pkg-2 juga ditingkatkan .



Ayo pergi ke arah lain.



Mari buat pohon ketergantungan paket ke atas dan ke bawah.

Temukan nama semua paket yang bergantung pada paket kita:



pkg rquery% rn <pkg_name>



Sekarang semua paket yang bergantung pada paket kita:



pkg rquery% dn <pkg_name>



Mari hapus semua entitas yang bergantung pada paket. Selanjutnya, kita akan mulai menghapus entitas di mana paket kita bergantung pada pohonnya sampai kita menemukan diri kita sendiri di dalam inti (tentu saja kita tidak akan menghapusnya). Anda sekarang dapat memulihkan pohon dengan menginstal versi minor terbaru dari semua paket di dalamnya.







Sebagai contoh, pada gambar di atas, kita dapat melihat bahwa paket ics-plugin-a-v1 bergantung pada plugin ics-plugin-b-v1 . Jika kita perlu memperbarui paket ke versi ics-plugin-v2 , ini juga akan memerlukan pembaruan paket ics-plugin-b-v1 , yang memiliki 2 versi utama - ics-plugin-b-v2 dan ics-plugin -b-v3 . Namun, tidak ada yang mendukung plugin ics-plugin-c-v1 . Artinya, update pertama-tama akan menginstal paket ics-plugin-b-v2 atau -v3 , lalu ics-plugin-a-v1dan ics-plugin-c akan dihapus dan tidak diinstal.



Selain itu, inti mungkin memiliki versi utama, dalam hal ini seluruh rangkaian plugin harus diperbarui agar sesuai.







Untuk menginstal paket ics-plugin-a , yang bergantung pada ics-core-v2, Anda perlu mengupdate ics-core, setelah itu hanya paket utama yang bergantung pada ics-core-v2 yang akan diinstal .



Pencadangan database



Saat bekerja dengan repositori, situasi dimungkinkan ketika selama pembaruan koneksi akan hilang (kode kesalahan sistem 70 atau 3 terjadi). Selain itu, untuk menghapus penginstalan plugin dengan benar, sistem memerlukan basis pkg yang valid di sistem. Saat menjalankan perintah pembaruan pkg , jika tidak ada koneksi, basis melaporkan kesalahan dan bahkan secara lokal tidak menjalankan fungsinya sampai pembaruan selesai dengan benar.



Untuk menghindari situasi seperti itu, kami akan menggunakan utilitas backup pkg . Sebelum operasi apa pun, selama ada kemungkinan tidak mendapatkan hasil yang diinginkan, simpan database:



pkg backup -d <backup_dir>



Jika operasi tidak selesai dengan benar, kembalikan database ke tempatnya:



pkg backup -r <backup_dir>



Inti



Sejauh ini, semuanya cukup sederhana. Jika ada pembaruan untuk kernel, maka:



  1. unduh citra kernel baru di arsip
  2. buat dataset baru di zfs
  3. pasang dataset ke dalam sistem
  4. buka kemasan gambar
  5. instal paket khusus dengan opsi kernel yang diperlukan untuk operasi normal
  6. daftarkan gambar baru sebagai bootable
  7. ???


Keuntungan?



Belum.



Kita perlu mengembalikan plugin sistem yang diinstal sebelumnya oleh pengguna (jika didukung oleh kernel baru, tentunya). Karenanya, Anda perlu membuat repositori plugin terpisah untuk setiap versi kernel.



Tapi (seperti biasa) ada nuansa.

Kami belum menginstal kernel versi yang akan datang, dan kami tidak dapat menginstal plugin untuk versi lain. Jika kita mem-boot sistem dari gambar baru, maka kita tidak akan dapat mengakses repositori (karena alasan historis dan teknis, perutean juga merupakan plugin).



Apa yang harus dilakukan?



Kami meningkatkan server dengan api, yang akan menyajikan arsip dengan repositori plugin untuk versi kernel yang ditentukan.



Kemudian utilitas kami akan menghasilkan file konfigurasi repositori dengan jalur ke folder dengan arsip yang belum dibuka.



Untuk FreeBSD, ini akan menjadi file <repo_name> .conf di / usr / local / etc / repos atau / etc / repos . Perlu dicatat di sini bahwa jalurnya ditulis sebagai berikut: url: “file: /// path_to_repo” ( 3 garis miring! )



Simpan data tentang plugin yang diinstal dan periksa kompatibilitasnya dengan versi kernel yang akan datang (jika ada yang tidak kompatibel , kami akan memberi tahu pengguna tentang hal itu).



Sekarang Anda bisa reboot.



Hal terakhir



Pkg membutuhkan inisialisasi (bootstrap) setelah peningkatan sistem. Oleh karena itu, jika Anda menjalankan perintah apa pun, Anda akan diminta untuk melakukannya. Dalam kasus kami, utilitas pengikatan tidak akan memahami bahwa mereka menginginkannya dan akan menganggap bahwa operasi tersebut dilakukan secara tidak benar.



Untuk melakukan ini, kami membuat penangan kesalahan inisialisasi, untungnya, ia memiliki kode operasi sistem yang terpisah 1. Oleh karena itu, jika utilitas menemukan kode seperti itu, ia cukup mengeksekusi



pkg -y



Pkg membuat bootstrap, dan kemudian Anda dapat bekerja secara normal.



Total



Ini adalah cara kami membangun repositori kami. Meskipun ini adalah prototipe, dan di masa depan kemungkinan besar akan berubah dan menjadi lebih kompleks, tetapi basis desain telah diletakkan dan tidak akan berubah.



Teknologi yang dijelaskan akan diterapkan dalam perkembangan baru Server Kontrol Internet, membuatnya lebih nyaman untuk digunakan di jaringan perusahaan perusahaan. Anda dapat mengunduh dan menguji versi terbaru ICS di tautan .



Masa percobaan, versi gratis untuk 9 pengguna, demo online dan dukungan teknis responsif.



Ikuti beritanya dan tetap bersama kami!



All Articles