Hypervisor Steroid: FreeBSD + ZFS + cbsd

Dalam tutorial ini, saya ingin menjelaskan betapa mudah dan anggunnya menginstal FreeBSD di lingkungan server - pada perangkat sewaan atau di pusat data Anda sendiri, secara manual atau menggunakan alat orkestrasi seperti Ansible. Enkripsi disk, manajemen ruang yang nyaman, hypervisor untuk wadah dan VM penuh, firewall yang praktis dan intuitif - ini semua dan tidak hanya tersedia di luar kotak dan membutuhkan sedikit waktu untuk mengonfigurasi dengan pendekatan yang tepat.


Instalasi


Mari kita mulai dengan skenario paling sederhana. Kami memiliki sepotong besi atau ada di suatu tempat di luar sana, tetapi kami dapat memberi makan .iso (atau .img) pada CD-ROM atau menggunakan IPMI. Atau bahkan lebih sederhana - hoster menawarkan gambar mfsbsd langsung dari antarmuka. Bagaimanapun, boot dari mfsbsd .


CD penyelamatan Linux


Kebetulan bahwa hoster tidak memberikan FreeBSD dalam bentuk apa pun, tetapi ia melakukan Linux Rescue. Kita boot ke Linux, unduh image disk mfsbsd dan putar ke hard:


root@rescue:~# wget https://mfsbsd.vx.sk/files/images/12/amd64/mfsbsd-12.1-RELEASE-amd64.img


 root@rescue:~# dd if=mfsbsd-12.1-RELEASE-amd64.img of=/dev/sda bs=4M 22+1 records in 22+1 records out 92307456 bytes (92 MB) copied, 0.386325 s, 239 MB/s 

root@rescue:~# reboot


Pengaturan adaptor jaringan


Semuanya baik ketika kita memiliki akses langsung ke monitor atau menerima sinyal melalui jaringan melalui IPMI / VNC / web. Tetapi bagaimana jika tidak ada kemungkinan seperti itu dan hanya koneksi jaringan yang mungkin? Untuk melakukan ini, kita memerlukan gambar mfsbsd dengan pengaturan jaringan yang sudah ditetapkan. Mari kita kumpulkan gambar individual kita dengan pengaturan untuk adapter jaringan dan daemon SSH. Untuk melakukan ini, kita memerlukan semacam host FreeBSD untuk membangun gambar.


Unduh .iso yang asli


root@ns312777:~ # fetch https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-dvd1.iso


Mountim


root@ns312777:~ # mount -t cd9660 /dev/ mdconfig -f FreeBSD-12.0-RELEASE-amd64-dvd1.iso /root/cd-rom


Unduh mfsbsd


root@ns312777:~ # fetch https://github.com/mmatuska/mfsbsd/archive/master.zip


root@ns312777:~ # unzip master.zip && cd mfsbsd-master


Kami mengubah file konfigurasi. Untuk konfigurasi IP, cukup ubah untuk membuat conf/rc.conf dari conf/rc.conf.sample . Anda juga harus membuat conf/authorized_keys dan menambahkan kunci Anda.


root@ns312777:~/mfsbsd-master # ls -la conf/


 total 55 drwxr-xr-x 2 root wheel 13 Dec 8 10:06 . drwxr-xr-x 7 root wheel 13 Dec 8 10:11 .. -rw-r--r-- 1 root wheel 451 Dec 8 10:06 authorized_keys -rw-r--r-- 1 root wheel 50 Nov 30 22:54 authorized_keys.sample -rw-r--r-- 1 root wheel 3 Nov 30 22:54 boot.config.sample -rw-r--r-- 1 root wheel 156 Nov 30 22:54 hosts.sample -rw-r--r-- 1 root wheel 592 Nov 30 22:54 interfaces.conf.sample -rw-r--r-- 1 root wheel 1310 Nov 30 22:54 loader.conf.sample -rw-r--r-- 1 root wheel 739 Dec 8 10:06 rc.conf -rw-r--r-- 1 root wheel 689 Nov 30 22:54 rc.conf.sample -rw-r--r-- 1 root wheel 40 Nov 30 22:54 rc.local.sample -rw-r--r-- 1 root wheel 108 Nov 30 22:54 resolv.conf.sample -rw-r--r-- 1 root wheel 898 Nov 30 22:54 ttys.sample 

Ayo pergi!


root@ns312777:~/mfsbsd-master # make BASE=/root/cd-rom/usr/freebsd-dist


 Extracting base and kernel ... done Removing selected files from distribution ... done Installing configuration scripts and files ... done Generating SSH host keys ... done Configuring boot environment ...x ./ x ./linker.hints x ./kernel done Installing pkgng ... done Compressing usr ... done Creating and compressing mfsroot ... done Creating image file ...87072+0 records in 87072+0 records out 89161728 bytes transferred in 0.905906 secs (98422727 bytes/sec) 87040+0 records in 87040+0 records out 89128960 bytes transferred in 0.877165 secs (101610229 bytes/sec) md3 created md3p1 added partcode written to md3p1 bootcode written to md3 md3p2 added Calculated size of `./mfsbsd-12.0-RELEASE-p10-amd64.img.a47DUe1j': 80281600 bytes, 65 inodes Extent size set to 32768 ./mfsbsd-12.0-RELEASE-p10-amd64.img.a47DUe1j: 76.6MB (156800 sectors) block size 32768, fragment size 4096 using 1 cylinder groups of 76.56MB, 2450 blks, 256 inodes. super-block backups (for fsck -b #) at: 64, Populating `./mfsbsd-12.0-RELEASE-p10-amd64.img.a47DUe1j' Image `./mfsbsd-12.0-RELEASE-p10-amd64.img.a47DUe1j' complete 612+1 records in 612+1 records out 80281600 bytes transferred in 36.018812 secs (2228880 bytes/sec) done 

Kenapa mfsbsd?


Ini adalah rakitan kompak OS FreeBSD yang dimuat langsung ke memori, yang berarti kita dapat dengan bebas melakukan apa yang kita inginkan dengan semua media yang tersedia. Sesuatu seperti CD penyelamatan Linux. Seluruh pesona dari majelis ini adalah memungkinkan Anda menginstal FreeBSD secara harfiah dalam satu perintah.


Setelah Linux menyelamatkan CD atau boot dari .iso / .img kita masuk ke shell mfsbsd.


root@mfsbsd:~ # cd bin/


Kami membersihkan disk


 root@mfsbsd:~/bin # gpart destroy -F /dev/ada0 root@mfsbsd:~/bin # gpart destroy -F /dev/ada1 

atau


root@mfsbsd:~/bin # ./destroygeom -d /dev/ada0 -d /dev/ada1


 Destroying geom ada0: Deleting partition 1 ... done Deleting partition 2 ... done Destroying geom ada1: Deleting partition 1 ... done Deleting partition 2 ... done 

kemudian instal sistem kami.


 root@mfsbsd:~/bin # ./zfsinstall Usage: ./zfsinstall [-h] -d geom_provider [-d geom_provider ...] [ -u dist_url ] [-r mirror|raidz] [-m mount_point] [-p zfs_pool_name] [-s swap_partition_size] [-z zfs_partition_size] [-c] [-C] [-l] [-4] [-A] 

karena pada host dengan hingga 3 disk, saya lebih suka meletakkan sistem di mirror pada semua disk di partisi kecil. Berkat ZFS, ruang yang tersisa dapat dikonfigurasikan sesuka Anda, tetapi lebih dari itu nanti. Di sini dia adalah satu-satunya tim yang menginstal seluruh sistem.


root@mfsbsd:~/bin # ./zfsinstall -d /dev/ada0 -d /dev/ada1 -d /dev/ada2 -r mirror -p zsys -z 25G


untuk menginstal sistem pada tiga disk di mirror


 Fetching base files from: ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/12.0-RELEASE /tmp/base.txz 147 MB 3670 kBps 41s /tmp/kernel.txz 39 MB 2344 kBps 18s Creating GUID partitions on ada0 ... done Configuring ZFS bootcode on ada0 ... done => 40 937703008 ada0 GPT (447G) 40 472 1 freebsd-boot (236K) 512 52428800 2 freebsd-zfs (25G) 52429312 885273736 - free - (422G) Creating GUID partitions on ada1 ... done Configuring ZFS bootcode on ada1 ... done => 40 937703008 ada1 GPT (447G) 40 472 1 freebsd-boot (236K) 512 52428800 2 freebsd-zfs (25G) 52429312 885273736 - free - (422G) Creating GUID partitions on ada2 ... done Configuring ZFS bootcode on ada2 ... done => 40 937703008 ada2 GPT (447G) 40 472 1 freebsd-boot (236K) 512 52428800 2 freebsd-zfs (25G) 52429312 885273736 - free - (422G) Creating ZFS pool zsys on ada0p2 ada1p2 ada2p2 ... done Creating zsys root partition: ... done Creating zsys partitions: var tmp ... done Setting bootfs for zsys to zsys/root ... done NAME USED AVAIL REFER MOUNTPOINT zsys 712K 23.7G 88K none zsys/root 264K 23.7G 88K /mnt zsys/root/tmp 88K 23.7G 88K /mnt/tmp zsys/root/var 88K 23.7G 88K /mnt/var Extracting FreeBSD distribution ... done Writing /boot/loader.conf... done Writing /etc/fstab...Writing /etc/rc.conf... done Copying /boot/zfs/zpool.cache ... done Installation complete. The system will boot from ZFS with clean install on next reboot You may make adjustments to the installed system using chroot: chroot /mnt Some adjustments may require a mounted devfs: mount -t devfs devfs /mnt/dev WARNING - Don't export ZFS pool "zsys"! 

Setelah instalasi, sistem file OS yang diinstal tersedia di /mnt/ , jadi kami membuat beberapa konfigurasi sebelum masuk ke reboot:


Salin kunci yang sudah ditambahkan ke gambar mfsbsd ke sistem


root@mfsbsd:~/bin # mkdir /mnt/root/.ssh && cp /root/.ssh/authorized_keys /mnt/root/.ssh/


Kami mengedit konfigurasi SSH (misalnya, mengubah porta dan izinkan login root )


root@mfsbsd:~/bin # ee /mnt/etc/ssh/sshd_config


edit file sistem bootloader


root@mfsbsd:~/bin # ee /mnt/etc/rc.conf


 zfs_enable="YES" sshd_enable="YES" hostname="hyper.bitbsd.org" # # You need a gateway defined for a working network setup defaultrouter="37.79.8.254" ifconfig_em0="inet 37.79.8.111 netmask 255.255.255.0" 

Perhatikan produsen mahir jaringan Anda, seperti nama antarmuka tergantung padanya. Dalam beberapa kasus, Anda dapat melakukan ini:


ifconfig_DEFAULT="DHCP" di /etc/rc.conf


Kami mengekspos DNS


root@mfsbsd:~/bin # ee /mnt/etc/resolv.conf


 nameserver 8.8.8.8 

Nah, secara umum Anda bisa melakukannya


root@mfsbsd:~ # chroot /mnt


dan menambahkan pengguna dan umumnya melakukan segalanya dari lingkungan OS yang baru diinstal.


Yah, kita teruskan


root@mfsbsd:~ # reboot


Lebih banyak bermata merah


Sebelum melanjutkan dengan konfigurasi OS yang diinstal, saya ingin mencatat dua cara lagi untuk boot ke mfsbsd.


Pemasang FreeBSD Standar:



Memilih CD Langsung


Buat disk memori


 # mdconfig -a -t swap -s 2g -u 9 # newfs -U md9 # mount /dev/md9 /tmp # cd /tmp 

Disk dalam memori tidak diperlukan untuk bekerja dengan file mfsbsd, apalagi, mfsbsd menggunakan /tmp/ selama instalasi, jadi harus ada cukup ruang kosong di sana.


# fetch https://github.com/mmatuska/mfsbsd/archive/master.zip


# unzip master.zip && cd mfsbsd-master/tools


Nah, maka hal yang sama - ./destroygeom dan ./zfsinstall


Instalasi dari citra Linux yang sudah diinstal:


Jika penyedia server memberi Anda sudah menginstal Linux, maka kami juga dapat "menginstal" dengan cara kami sendiri dengan mengubah konfigurasi bootloader GRUB . Untuk melakukan ini, tambahkan baris berikut ke grub.cfg pada sistem saat ini:


 menuentry "mfsbsd-10.0-RELEASE-amd64.iso" { # Path to the iso set isofile=/boot/boot-isos/mfsbsd-12.0-RELEASE-amd64.iso # (hd0,1) here may need to be adjusted of course depending where the partition is loopback loop (hd0,1)$isofile kfreebsd (loop)/boot/kernel/kernel.gz -v # kfreebsd_loadenv (loop)/boot/device.hints # kfreebsd_module (loop)/boot/kernel/geom_uzip.ko kfreebsd_module (loop)/boot/kernel/ahci.ko kfreebsd_module (loop)/mfsroot.gz type=mfs_root set kFreeBSD.vfs.root.mountfrom="ufs:/dev/md0" set kFreeBSD.mfsbsd.autodhcp="YES" # Define a new root password # set kFreeBSD.mfsbsd.rootpw="foobar" # Alternatively define hashed root password # set kFreeBSD.mfsbsd.rootpwhash="" } 

Nah, masukkan .iso sesuai di /boot/boot-isos/


Saya tidak pernah melakukannya sendiri, jadi jika Anda menemukan kesalahan atau cacat pada konfigurasi, beri tahu saya.


Mungkin bagaimana lagi saya bisa mengelak untuk menginstal FreeBSD, saya tidak tahu.


Konfigurasi sistem


Yah, kita sudah menginstal semuanya, memuat ... Untuk memulai, kita perlu menginstal dan mengkonfigurasi jaringan - dalam kasus kami, pf akan memainkan peran utama, saya suka solusi ini karena kesederhanaan dan kejelasannya. Kita perlu mengkonfigurasi sistem file server - kita menggunakan ZFS karena ini adalah sistem file yang sangat fleksibel dan efisien. Ketika jaringan dan FS dikonfigurasi, kami akan menginstal hypervisor. Jika kita membutuhkan tingkat keamanan yang ditingkatkan, Anda dapat mengkonfigurasi utilitas tambahan , saya akan menghilangkan deskripsi mereka dalam tutorial ini. Sebagai demonstrasi fleksibilitas ZFS, saya akan menjelaskan konfigurasi dua server, satu dengan 2 disk dan satu dengan 3 disk. Juga, jangan lupa untuk meningkatkan sistem setelah instalasi, kadang-kadang ternyata hanya ada sesuatu yang kuno yang tersedia untuk instalasi.


freebsd-update -r 12.1-RELEASE upgrade


Pada saat penulisan ini, 12.1 adalah versi terbaru


Server disk ganda


Kami membuatnya dalam konfigurasi berikut:


 root@:~ # gpart show /dev/ada0 => 40 5860533088 ada0 GPT (2.7T) 40 472 1 freebsd-boot (236K) 512 8388608 2 freebsd-swap (4.0G) 8389120 167772160 3 freebsd-zfs (80G) 176161280 2097152000 4 freebsd-zfs (1.0T) 2273313280 3587219848 5 freebsd-zfs (1.7T) root@:~ # gpart show /dev/ada1 => 40 5860533088 ada1 GPT (2.7T) 40 472 1 freebsd-boot (236K) 512 8388608 2 freebsd-swap (4.0G) 8389120 167772160 3 freebsd-zfs (80G) 176161280 2097152000 4 freebsd-zfs (1.0T) 2273313280 3587219848 5 freebsd-zfs (1.7T) 

 root@:~ # zpool status pool: appdata state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM appdata ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ada0p4.eli ONLINE 0 0 0 ada1p4.eli ONLINE 0 0 0 errors: No known data errors pool: miscdata state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM miscdata ONLINE 0 0 0 ada0p5.eli ONLINE 0 0 0 ada1p5.eli ONLINE 0 0 0 errors: No known data errors pool: zsys state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM zsys ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ada0p3 ONLINE 0 0 0 ada1p3 ONLINE 0 0 0 errors: No known data errors 

Apa artinya semua ini? Kami memiliki sepotong besi dengan dua disk, kedua disk ini memiliki volume 3TB. Kami akan meluncurkan beberapa aplikasi di server, beberapa di antaranya kritis kondisional, beberapa "untuk bermain-main", jadi tidak sayang kehilangan data. Untuk konfigurasi ruang disk paling efisien. Apa yang kita dapatkan sebagai akibat dari manipulasi singkat?


 root@:~ # zfs list NAME USED AVAIL REFER MOUNTPOINT appdata 75.5K 961G 23K /appdata miscdata 75.5K 3.21T 23K /miscdata zsys 2.02G 75.0G 88K none zsys/root 2.02G 75.0G 1.18G / zsys/root/tmp 88K 75.0G 88K /tmp zsys/root/var 862M 75.0G 862M /var 

Kumpulan appdata (cermin dari bagian /dev/ada0p4.eli dan /dev/ada1p4.eli) untuk data aplikasi penting, kumpulan miscdata ("stripe", yaitu, data di /dev/ada0p5.eli dan / dev / ada1p5.eli) untuk semua omong kosong. Ada juga pool sistem dan swap, ini juga mirror dari partisi kedua disk.


Total untuk aplikasi kami, kami memiliki 1TB ruang cermin dan 3,2TB untuk percobaan.


Bagaimana cara mengaturnya? Itu mudah. Setelah instalasi awal, disk kami terlihat seperti ini:


 root@:~ # gpart show /dev/ada0 => 40 5860533088 ada0 GPT (2.7T) 40 472 1 freebsd-boot (236K) 512 8388608 2 freebsd-swap (4.0G) 8389120 167772160 3 freebsd-zfs (80G) 176161280 684371848 free (2.7T) 

Kami menambahkan bagian ke disk, pada awalnya kami akan mirror


root@:~ # gpart add -t freebsd-zfs -s 1000g /dev/ada0


root@:~ # gpart add -t freebsd-zfs -s 1000g /dev/ada1


dan kemudian semuanya


root@:~ # gpart add -t freebsd-zfs /dev/ada0


root@:~ # gpart add -t freebsd-zfs /dev/ada1


kita sekarang memiliki partisi / dev / ada0p4, / dev / ada0p5, / dev / ada1p4, dan / dev / ada0p5. Karena kami tidak memiliki akses fisik ke server di hoster di DC, disarankan untuk mengenkripsi bagian dengan data kami.


root@:~ # geli init /dev/ada0p4


root@:~ # geli init /dev/ada0p5


root@:~ # geli init /dev/ada1p4


root@:~ # geli init /dev/ada1p5


masukkan kata sandi enkripsi, lalu dekripsi bagian:


root@:~ # geli attach /dev/ada0p4


root@:~ # geli attach /dev/ada0p5


root@:~ # geli attach /dev/ada1p4


root@:~ # geli attach /dev/ada1p5


sekarang kita memiliki bagian /dev/ada0p4.eli, /dev/ada0p5.eli, /dev/ada1p4.eli dan /dev/ada0p5.eli, kita dapat membangun kumpulan dari bagian ini


Anda dapat menulis ini:


 root@:~ # cat /root/attach_disks.sh #!/bin/sh geli attach /dev/ada0p4 geli attach /dev/ada0p5 geli attach /dev/ada1p4 geli attach /dev/ada1p5 

root@:~ # zpool create appdata mirror /dev/ada0p4.eli /dev/ada1p4.eli


dan untuk data tanpa mirroring


root@:~ # zpool create miscdata /dev/ada0p5.eli /dev/ada1p5.eli


Nah, server kami siap untuk berperang. Kami memiliki kumpulan yang dapat kami kembangkan di masa mendatang dengan menambahkan ekstra. drive. Dan ada snapshot, cara menggunakannya saya akan menjelaskan sedikit lebih rendah.


Server dengan tiga drive


Di sini konfigurasi yang sedikit berbeda. Kami memiliki perangkat keras dengan tiga SSD 450GB. Server ini akan digunakan terutama untuk virtualisasi penuh, jadi kami membutuhkan ruang sebanyak mungkin, tetapi mungkin untuk terus bekerja setelah kehilangan salah satu disk. Setelah instalasi awal, disk kami terlihat seperti ini:


root@:~ # gpart show /dev/ada[0-9]


 => 40 937703008 ada0 GPT (447G) 40 472 1 freebsd-boot (236K) 512 52428800 2 freebsd-zfs (25G) 52429312 885273736 - free - (422G) => 40 937703008 ada1 GPT (447G) 40 472 1 freebsd-boot (236K) 512 52428800 2 freebsd-zfs (25G) 52429312 885273736 - free - (422G) => 40 937703008 ada2 GPT (447G) 40 472 1 freebsd-boot (236K) 512 52428800 2 freebsd-zfs (25G) 52429312 885273736 - free - (422G) 

Kami membuat partisi 420 GB (sampai akhir disk tidak kami buat, karena ketika mengganti disk, ukuran sebenarnya mungkin sedikit berbeda)


 root@hyper:~ # gpart add -t freebsd-zfs -s 420g /dev/ada0 ada0p3 added root@hyper:~ # gpart add -t freebsd-zfs -s 420g /dev/ada1 ada1p3 added root@hyper:~ # gpart add -t freebsd-zfs -s 420g /dev/ada2 ada2p3 added 

Kami mengenkripsi


 root@hyper:~ # geli init /dev/ada0p3 Enter new passphrase: Reenter new passphrase: Metadata backup for provider /dev/ada0p3 can be found in /var/backups/ada0p3.eli and can be restored with the following command: # geli restore /var/backups/ada0p3.eli /dev/ada0p3 root@hyper:~ # geli init /dev/ada1p3 Enter new passphrase: Reenter new passphrase: Metadata backup for provider /dev/ada1p3 can be found in /var/backups/ada1p3.eli and can be restored with the following command: # geli restore /var/backups/ada1p3.eli /dev/ada1p3 root@hyper:~ # geli init /dev/ada2p3 Enter new passphrase: Reenter new passphrase: Metadata backup for provider /dev/ada2p3 can be found in /var/backups/ada2p3.eli and can be restored with the following command: # geli restore /var/backups/ada2p3.eli /dev/ada2p3 

Apakah cadangan Metadata?


Ini adalah file yang dengannya Anda dapat mereset kata sandi enkripsi ke yang kami masukkan. Nah, ini kalau-kalau nanti saya berubah dan lupa. Bagaimanapun, perlu diingat nuansa ini.


Pasang disk dan buat pool


 root@hyper:~ # geli attach /dev/ada0p3 Enter passphrase: root@hyper:~ # geli attach /dev/ada1p3 Enter passphrase: root@hyper:~ # geli attach /dev/ada2p3 Enter passphrase: root@hyper:~ # zpool create safestore raidz1 /dev/ada0p3.eli /dev/ada1p3.eli /dev/ada2p3.eli 

dan pada output kami mendapatkan kolam dengan 820 GB ruang disk


 root@hyper:~ # zfs list NAME USED AVAIL REFER MOUNTPOINT safestore 89.2K 810G 29.3K /safestore ... 

Dimungkinkan untuk mengumpulkan kumpulan ZFS dan disk berbeda dari konfigurasi yang berbeda sesuka Anda. Ini adalah jenis perancang penyimpanan yang dapat diperluas selamanya. ZFS menciptakan lapisan abstraksi di atas perangkat yang memungkinkan Anda untuk mencapai konfigurasi yang sangat luar biasa.


Instalasi dan konfigurasi hypervisor


FreeBSD menawarkan dua solusi OS tamu di luar kotak - penjara dan bhyve. Ada cbsd , ini adalah pembungkus untuk FreeBSD Jails, bhyve dan XEN. Dalam panduan ini, saya tidak akan menyentuh yang terakhir, karena tidak pernah menggunakannya sendiri.


Sel adalah klon dari sistem FreeBSD. Alat yang sangat nyaman untuk mengisolasi proses. Sistem host dapat meng-host sel dari versi apa pun di bawahnya. Sel dapat ditransfer antar host, snapshot, dan putar kembali dengan cepat. Sebaiknya gunakan klektki bila memungkinkan, sehingga secara optimal menggunakan sumber daya sistem tanpa menghabiskannya pada virtualisasi penuh.


gambar


bhyve, pada gilirannya, adalah hypervisor lengkap yang dapat digunakan untuk meningkatkan semua jenis Ubuntu dan buruh pelabuhan.


gambar


root@:~ # pkg install cbsd


Perlu dicatat bahwa pada saat penulisan, cbsd hanya menarik 11 dependensi ukuran 35 MB.


 New packages to be INSTALLED: cbsd: 12.1.2 sudo: 1.8.28 gettext-runtime: 0.20.1 indexinfo: 0.3.1 libssh2: 1.8.2,3 ca_root_nss: 3.47.1 rsync: 3.1.3_1 libiconv: 1.14_11 pkgconf: 1.6.3,1 libedit: 3.1.20190324,1 sqlite3: 3.29.0 readline: 8.0.0 Number of packages to be installed: 12 The process will require 33 MiB more space. 8 MiB to be downloaded. Proceed with this action? [y/N]: y 

buat bagian terpisah di kumpulan sel


root@:~ # zfs create miscdata/jails


inisialisasi cbsd


root@:~ # env workdir="/miscdata/jails" /usr/local/cbsd/sudoexec/initenv


mnogabukaf
 -------[CBSD v.12.1.2]------- This is install/upgrade scripts for CBSD. Don't forget to backup. ----------------------------- Do you want prepare or upgrade hier environment for CBSD now? [yes(1) or no(0)] 1 >>> Installing or upgrading [Stage 1: account & dir hier] * Check hier and permission... ./.rssh missing (created) ./.ssh missing (created) ./.ssh/sockets missing (created) ./basejail missing (created) ./etc missing (created) ./etc/defaults missing (created) ./export missing (created) ./ftmp missing (created) ./import missing (created) ./jails missing (created) ./jails-data missing (created) ./jails-fstab missing (created) ./jails-rcconf missing (created) ./jails-system missing (created) ./share missing (created) ./share/dialog missing (created) ./share/helpers missing (created) ./share/FreeBSD-jail-puppet-skel missing (created) ./share/FreeBSD-jail-skel missing (created) ./share/FreeBSD-jail-vnet-skel missing (created) ./share/emulators missing (created) ./src missing (created) ./tmp missing (created) ./var missing (created) ./var/cron missing (created) ./var/cron/tabs missing (created) ./var/db missing (created) ./var/log missing (created) ./var/mail missing (created) ./var/run missing (created) ./var/spool missing (created) * write directory id: jaildatadir * write directory id: jailsysdir * write directory id: jailrcconfdir * write directory id: dbdir [Stage 2: build tools] Shall i add cbsd user into /usr/local/etc/sudoers.d/cbsd_sudoers sudo file to obtain root privileges for the most cbsd commands? [yes(1) or no(0)] 1 [Stage 3: local settings] Shall i modify the /etc/rc.conf to sets cbsd_workdir="/miscdata/jails"?: [yes(1) or no(0)] 1 /etc/rc.conf: cbsd_workdir: -> /miscdata/jails [Stage 4: update default skel resolv.conf] [Stage 5: refreshing inventory] nodename: CBSD Nodename for this host eg the hostname. Warning: this operation will recreate the ssh keys in /miscdata/jails/.ssh dir: hostname.org Empty inventory database created: /miscdata/jails/var/db/inv.hostname.org.sqlite nodeip: Node management IPv4 or IPv6 address (used for node interconnection), eg: 151.106.27.106 jnameserver: Jails default DNS name-server (for jails resolv.conf), eg: 9.9.9.9,149.112.112.112 8.8.8.8,8.8.4.4 nodeippool: Jail pool IP address range (networks for jails) Hint: use space as delimiter for multiple networks, eg: 10.0.0.0/16 151.106.27.106/24 192.168.0.0/24 nat_enable: Enable NAT for RFC1918 networks? [yes(1) or no(0)] 0 fbsdrepo: Use official FreeBSD repository? When no (0) the repository of CBSD is preferred (useful for stable=1) for fetching base/kernel? [yes(1) or no(0)] 1 zfsfeat: You are running on a ZFS-based system. Enable ZFS feature? [yes(1) or no(0)] 1 parallel: Parallel mode stop/start ? (0 - no parallel or positive value (in seconds) as timeout for next parallel sequence) eg: 5 0 stable: Use STABLE branch instead of RELEASE by default? Attention: only the CBSD repository has a binary base for STABLE branch ? (STABLE_X instead of RELEASE_X_Y branch for base/kernel will be used), eg: 0 (use release) 0 sqlreplica: Enable sqlite3 replication to remote nodes ? (0 - no replica, 1 - try to replicate all local events to remote nodes) eg: 1 0 statsd_bhyve_enable: Configure CBSD statsd services for collect RACCT bhyve statistics? ? (EXPERIMENTAL FEATURE)? eg: 0 0 statsd_jail_enable: Configure CBSD statsd services for collect RACCT jail statistics? ? (EXPERIMENTAL FEATURE)? eg: 0 0 statsd_hoster_enable: Configure CBSD statsd services for collect RACCT hoster statistics? ? (EXPERIMENTAL FEATURE)? eg: 0 0 [Stage 6: authentication keys] Generating public/private rsa key pair. Your identification has been saved in /miscdata/jails/.ssh/8a3574aa0ec0ad3056e7dcf0f48adb01.id_rsa. Your public key has been saved in /miscdata/jails/.ssh/8a3574aa0ec0ad3056e7dcf0f48adb01.id_rsa.pub. The key fingerprint is: SHA256:bZM/lo6lx40vE48MxZea1KQMKYIBq3HyPWQrF0xn980 root@hostname.org The key's randomart image is: +---[RSA 2048]----+ | ..ooo . . | | +.o....oo . | |oo = . ..+E+ . | | * + o . .* + | |. o = S =o + | | o . ..o+. | | +** | | *Oo | | o..+. | +----[SHA256]-----+ [Stage 7: modules] Installing module pkg.d cmd: pkg Installing module bsdconf.d cmd: tzsetup Installing module bsdconf.d cmd: ssh Installing module bsdconf.d cmd: ftp Installing module bsdconf.d cmd: adduser Installing module bsdconf.d cmd: passwd Installing module bsdconf.d cmd: service Installing module bsdconf.d cmd: sysrc Installing module bsdconf.d cmd: userlist Installing module bsdconf.d cmd: grouplist Installing module bsdconf.d cmd: adduser-tui Installing module bsdconf.d cmd: pw Installing module bsdconf.d cmd: cloudinit Installing module zfsinstall.d cmd: zfsinstall [Stage 9: cleanup] * Remove obsolete files... Configure RSYNC services for jail migration? [yes(1) or no(0)] 0 cbsdrsyncd_enable: -> YES Do you want to enable RACCT feature for resource accounting? [yes(1) or no(0)] 0 Shall i modify the /etc/rc.conf to sets cbsdd_enable=YES ? [yes(1) or no(0)] 0 cbsdd_enable: -> NO Shall i modify the /etc/rc.conf to sets rcshutdown_timeout="900"? [yes(1) or no(0)] 0 rcshutdown_timeout: 90 -> 900 [Stage X: upgrading] * Insert default topology into vm_cpu_topology table * Insert small1 group into vmpackage table >>> Done First CBSD initialization complete. Now your can run: service cbsdd start to run CBSD services. For change initenv settings in next time, use: cbsd initenv-tui Also don't forget to execute: cbsd initenv every time when you upgrade CBSD version. preseedinit: Would you like a config for "cbsd init" preseed to be printed? [yes(1) or no(0)] 0 

Jalankan daemon cbsd. Kami mulai sejak saat itu kami tidak menambahkan cbsd ke autorun saat startup sistem, seperti bagian dengan data OS tamu dienkripsi.


root@:~ # service cbsdd onestart


Ketika server melakukan booting, Anda perlu menghubungkannya melalui SSH (itulah sebabnya partisi sistem tidak dienkripsi sehingga sistem berhasil melakukan booting tanpa entri kata sandi VNC / IPMI) dan mendekripsi partisi disk kami dengan skrip ./root/attach_disks.sh .


Saat menginisialisasi cbsd, kami mengindikasikan bahwa 192.168.0.0/24 akan menjadi subnet untuk sel kami. Saya berencana untuk menggunakan subnet yang sama untuk virtualisasi penuh. Kami memutar beberapa sel pada host, tetapi sebelum itu kami membuat dinding api sehingga NAT untuk sel bekerja melalui host.


 root@:~ # sysrc pf_enable=YES pf_enable: NO -> YES root@:~ # service pf start /etc/rc.d/pf: WARNING: /etc/pf.conf is not readable. 

buat file aturan untuk firewall


root@:~ # ee /etc/pf.conf


 IF_PUBLIC="igb0" IP_PUBLIC="XXXX" JAIL_IP_POOL="192.168.0.0/24" icmp_types="echoreq" set limit { states 100000, frags 20000, src-nodes 20000 } set skip on lo0 scrub in all #NAT for others nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC ## Jail HTTP/S port forward IP_JAIL="192.168.0.2" PORT_JAIL="{ 80, 443 }" rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL 

memuat aturan


 root@:~ # service pf start Enabling pf. root@:~ # pfctl -f /etc/pf.conf 

Nah, sekarang kita buat sel


root@:~ # cbsd jconstruct-tui



Pilih unduhan dari repositori dasar untuk sel



dan beberapa sel lagi melalui root@:~ # cbsd jconstruct-tui


lalu kita mulai sel


root@:~ # cbsd jstart webapp


dan di dalam kita sudah melakukan apa yang kita inginkan


root@:~ # cbsd jlogin webapp


misalnya instal nginx
 webapp:/root@[12:58] # pkg install nginx Updating FreeBSD repository catalogue... FreeBSD repository is up to date. All repositories are up to date. Updating database digests format: 100% The following 2 package(s) will be affected (of 0 checked): New packages to be INSTALLED: nginx: 1.16.1_4,2 pcre: 8.43_2 Number of packages to be installed: 2 The process will require 8 MiB more space. 2 MiB to be downloaded. Proceed with this action? [y/N]: y [webapp.host.org] [1/2] Fetching nginx-1.16.1_4,2.txz: 100% 442 KiB 452.8kB/s 00:01 [webapp.host.org] [2/2] Fetching pcre-8.43_2.txz: 100% 1 MiB 638.0kB/s 00:02 Checking integrity... done (0 conflicting) [webapp.host.org] [1/2] Installing pcre-8.43_2... [webapp.host.org] [1/2] Extracting pcre-8.43_2: 100% [webapp.host.org] [2/2] Installing nginx-1.16.1_4,2... ===> Creating groups. Using existing group 'www'. ===> Creating users Using existing user 'www'. [webapp.host.org] [2/2] Extracting nginx-1.16.1_4,2: 100% ===== Message from nginx-1.16.1_4,2: -- Recent version of the NGINX introduces dynamic modules support. In FreeBSD ports tree this feature was enabled by default with the DSO knob. Several vendor's and third-party modules have been converted to dynamic modules. Unset the DSO knob builds an NGINX without dynamic modules support. To load a module at runtime, include the new `load_module' directive in the main context, specifying the path to the shared object file for the module, enclosed in quotation marks. When you reload the configuration or restart NGINX, the module is loaded in. It is possible to specify a path relative to the source directory, or a full path, please see https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/ and http://nginx.org/en/docs/ngx_core_module.html#load_module for details. Default path for the NGINX dynamic modules is /usr/local/libexec/nginx. webapp:/root@[12:59] # sysrc nginx_enable=YES nginx_enable: -> YES webapp:/root@[12:59] # service nginx start Performing sanity check on nginx configuration: nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful Starting nginx. webapp:/root@[DING!] # sockstat -l4 USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS www nginx 27982 6 tcp4 192.168.0.2:80 *:* root nginx 27981 6 tcp4 192.168.0.2:80 *:* root sendmail 25361 4 tcp4 192.168.0.2:25 *:* webapp:/root@[13:00] # 

Inilah yang terlihat seperti kebun binatang sel:


 root@:~ # jls JID IP Address Hostname Path 1 192.168.0.1 tor.host.org /miscdata/jails/jails/tor 2 192.168.0.2 webapp.host.org /miscdata/jails/jails/webapp 3 192.168.0.3 bitcoind.host.org /miscdata/jails/jails/bitcoind 4 192.168.0.4 ethd.host.org /miscdata/jails/jails/ethd 

Di webapp, sel mendengarkan kami nginx, tetapi dapat diakses dari luar hanya dengan merekam/etc/pf.conf


Virtualisasi penuh


Untuk virtualisasi penuh, Anda perlu menghubungkan tambahan. modul kernel. Ambil server kami dengan tiga drive


The /etc/rc.confmodus diaktifkan router dan mengkonfigurasi sel IP host dan subnet maya ok


 ifconfig_igb0_alias="inet 192.168.0.1 netmask 255.255.255.0" gateway_enable="YES" 

 root@hyper:~ # echo 'vmm_load="YES"' >> /boot/loader.conf root@hyper:~ # echo 'kld_list="vmm if_tap if_bridge nmdm"' >> /etc/rc.conf root@hyper:~ # reboot 

Sekarang konfigurasikan firewall, dengan cara yang sama seperti host hanya untuk sel.


/etc/pf.conf

IF_PUBLIC="igb0"
IP_PUBLIC="YYYY"


JAIL_IP_POOL="192.168.0.0/24"


icmp_types="echoreq"


set limit { states 100000, frags 20000, src-nodes 20000 }
set skip on lo0
scrub in all


NAT for others


nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC


Jail HTTP/S port forward


IP_JAIL="192.168.0.2"
PORT_JAIL="{ 80, 443 }"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL


 root@hyper:~ # sysrc pf_enable=YES pf_enable: NO -> YES root@hyper:~ # service pf start Enabling pf. 

Dachshund, sekarang buat mesin virtual


root@hyper:~ # cbsd bconstruct-tui



yah, ayo pergi

root@hyper:~ # cbsd bstart debian
init_systap: waiting for link: igb0
Looks like /safestore/jails/vm/debian/dsk1.vhd is empty.
May be you want to boot from CD?
[yes(1) or no(0)]
1
Temporary boot device: cd
vm_iso_path: iso-debian-10.1.0-amd64-DVD-1.iso
No such media: /safestore/jails/src/iso/cbsd-iso-debian-10.1.0-amd64-DVD-1.iso in /safestore/jails/src/iso
Shall i download it from: https://ftp.acc.umu.se/debian-cd/current/amd64/iso-dvd/ http://debian-cd.repulsive.eu/10.1.0/amd64/iso-dvd/ https://gensho.ftp.acc.umu.se/debian-cd/current/amd64/iso-dvd/ http://cdimage.debian.org/cdimage/release/10.1.0/amd64/iso-dvd/ http://debian.mirror.cambrium.nl/debian-cd/10.1.0/amd64/iso-dvd/ http://mirror.overthewire.com.au/debian-cd/10.1.0/amd64/iso-dvd/ http://ftp.crifo.org/debian-cd/10.1.0/amd64/iso-dvd/ http://debian.cse.msu.edu/debian-cd/10.1.0/amd64/iso-dvd/ ?
[yes(1) or no(0)]
1
Download to: /safestore/jails/src/iso/cbsd-iso-debian-10.1.0-amd64-DVD-1.iso
Scanning for fastest mirror…
Mirror source: Bytes per 3sec:



Maka kita perlu terhubung melalui VNC ke port host 5900, saya menggunakan penerusan port SSH untuk ini


ssh hyperhost -L 5900:localhost:5900



Instal sistem. Alamat IP dapat dipilih seperti 192.168.0.100.


Tambahkan ke /etc/pf.confPenerusan SSH


 ## VM SSH port forward IP_VM="192.168.0.100" PORT_VM="{ 22100 }" rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_VM -> $IP_VM port 22 

Jadi kita bisa terhubung ke debian kita. Tapi sebelum itu, kita akan melakukan satu hal.


 root@hyper:~ # zfs list NAME USED AVAIL REFER MOUNTPOINT safestore 5.89G 804G 29.3K /safestore safestore/jails 5.89G 804G 4.46G /safestore/jails safestore/jails/debian 920M 804G 208K /safestore/jails/vm/debian safestore/jails/debian/dsk1.vhd 919M 804G 919M - safestore/jails/linuxjail 329M 804G 329M /safestore/jails/jails-data/linuxjail-data safestore/jails/nginx 89.2M 804G 89.2M /safestore/jails/jails-data/nginx-data safestore/jails/tor 117M 804G 117M /safestore/jails/jails-data/tor-data zsystem 1.85G 21.9G 88K none zsystem/root 1.85G 21.9G 1.20G / zsystem/root/tmp 120K 21.9G 120K /tmp zsystem/root/var 662M 21.9G 662M /var 

root@hyper:~ # zfs snap safestore/jails/debian/dsk1.vhd@fresh


. .


β€” Ansible


3, 1300 . .


/etc/ansible/hosts
 [hyper-debian-group] hyper-debian [hyper-group] hyper [hyper-group:vars] ansible_python_interpreter=/usr/local/bin/python3.7 

~/.ssh/config
 Host hyper Hostname YYYY User root Port 33696 Host hyper-debian Hostname YYYY User root Port 22100 

~/deploy-docker.yml
 - hosts: hyper-debian gather_facts: no tasks: - name: Install a list of misc packages apt: update_cache: yes pkg: - apt-transport-https - ca-certificates - curl - gnupg2 - software-properties-common - name: Add Docker repo shell: curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - - name: Add Docker repo shell: apt-key fingerprint 0EBFCD88 - name: Do some linux repo magic shell: add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" - name: Install Docker CE suite & composer apt: update_cache: yes pkg: - docker-ce - docker-ce-cli - containerd.io - docker-compose - name: Update all packages to the latest version apt: upgrade: dist 

~/rollback-debian.yml
 - hosts: hyper gather_facts: no tasks: - name: stop debian shell: cbsd bstop debian - name: list ZFS datasets shell: zfs list | grep debian register: zfslist - debug: var=zfslist.stdout_lines - name: rollback debian shell: zfs rollback safestore/jails/debian/dsk1.vhd@fresh - name: list ZFS datasets shell: zfs list | grep debian register: zfslist - debug: var=zfslist.stdout_lines - name: start debian shell: cbsd bstart debian 

, TerraForm



 [user@localhost ~]$ ansible-playbook deploy-docker.yml PLAY [hyper-debian] ******************************************************************************************************* TASK [Install a list of misc packages] ********************************************************************************************* changed: [hyper-debian] TASK [Add Docker repo] ******************************************************************************************************** changed: [hyper-debian] TASK [Add Docker repo] ******************************************************************************************************** changed: [hyper-debian] TASK [Do some linux repo magic] ********************************************************************************************************changed: [hyper-debian] TASK [Install Docker CE suite & composer] ********************************************************************************************************changed: [hyper-debian] TASK [Update all packages to the latest version] ********************************************************************************************************ok: [hyper-debian] PLAY RECAP ********************************************************************************************************hyper-debian : ok=6 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 

, iRedMail.


 docker run --privileged -p 80:80 -p 443:443 \ -e "DOMAIN=example.com" -e "HOSTNAME=mail" \ -e "MYSQL_ROOT_PASSWORD=password" \ -e "SOGO_WORKERS=1" \ -e "TIMEZONE=Europe/Prague" \ -e "POSTMASTER_PASSWORD=password" \ -e "IREDAPD_PLUGINS=['reject_null_sender', 'reject_sender_login_mismatch', 'greylisting', 'throttle', 'amavisd_wblist', 'sql_alias_access_policy']" \ -v PATH/mysql:/var/lib/mysql \ -v PATH/vmail:/var/vmail \ -v PATH/clamav:/var/lib/clamav \ --name=iredmail lejmr/iredmail:mysql-latest 

? - Debian.


 [user@localhost ~]$ ansible-playbook rollback-debian.yml PLAY [hyper] ******************************************************************************************************** TASK [stop debian] ********************************************************************************************************changed: [hyper] TASK [list ZFS datasets] ********************************************************************************************************changed: [hyper] TASK [debug] ********************************************************************************************************ok: [hyper] => { "zfslist.stdout_lines": [ "safestore/jails/debian 2.65G 803G 206K /safestore/jails/vm/debian", "safestore/jails/debian/dsk1.vhd 2.65G 803G 2.34G -" ] } TASK [rollback debian] ********************************************************************************************************changed: [hyper] TASK [list ZFS datasets] ********************************************************************************************************changed: [hyper] TASK [debug] ********************************************************************************************************ok: [hyper] => { "zfslist.stdout_lines": [ "safestore/jails/debian 920M 804G 206K /safestore/jails/vm/debian", "safestore/jails/debian/dsk1.vhd 919M 804G 919M -" ] } TASK [start debian] ********************************************************************************************************changed: [hyper] PLAY RECAP ********************************************************************************************************hyper : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 

, .


, , 1baysxTdXkwZnBosDdL1veb2zWDo6DC5b


!

Source: https://habr.com/ru/post/id479192/


All Articles