Izvještaj o razvoju FreeBSD-a za treće tromjesečje 2019

objavljeno izvještaj o razvoju FreeBSD projekta od jula do septembra 2019. Među promjenama možemo primijetiti:

  • Opća i sistemska pitanja
    • Core tim je generalno odobrio mogućnost uključivanja koda u sistem koji se distribuira pod BSD licencom uz dodatni ugovor o patentu (BSD+Patent), ali odluka o uključivanju svake komponente u sistem pod ovom licencom mora biti posebno odobrena;
    • Održan je prvi sastanak radne grupe stvorene da izvrši migraciju izvornih kodova sa centralizovanog sistema za kontrolu izvora Subversion na decentralizovani sistem Git. Rasprava o izvodljivosti migracije je još uvijek u toku i odluke o mnogim pitanjima tek treba da se donesu (na primjer, šta učiniti sa contrib/, da li je potrebno regenerisati hasheve u trenutnom git repozitorijumu i kako najbolje implementirati testiranje obvezuje);
    • Iz NetBSD-a ported KCSAN (Kernel Concurrency Sanitizer) komplet alata, koji vam omogućava da otkrijete uslove trke između niti kernela koji rade na različitim CPU-ima;
    • U toku je rad na korištenju Clang-ovog ugrađenog asemblera (IAS) umjesto GNU binutils asemblera;
    • Infrastruktura emulacije Linux okruženja (Linuxulator) je prilagođena za rad na ARM64 arhitekturi. Implementiran sistemski poziv “renameat2”. Uslužni program strace je poboljšan za dijagnosticiranje problema u Linux izvršnim datotekama koje se pokreću u Linuxulatoru. Problem s rušenjem prilikom povezivanja izvršnih datoteka sa svježim glibc-om je riješen. Portovi sa Linux komponentama za Linuxulator su ažurirani na CentOS 7.7;
    • U sklopu programa Google Summer of Code studenti su uspješno završili šest projekata: pripremljena je implementacija objedinjene (IPv4/IPv6) ping uslužnog programa, razvijeni alati za testiranje firewall-a i prepoznavanje grešaka u kernelu (Kernel sanitizer), mac_ipacl predložen je modul, napisan je kod za kompresiju virtuelne memorije i obavljeno je odvajanje procesa izgradnje porta od lokalne instalacije;
    • Projekat za fuzzing testiranje FreeBSD kernela korišćenjem sistema nastavlja da se razvija syzkaller. Tokom izvještajnog perioda, više od deset grešaka je identifikovano i otklonjeno korištenjem syzkallera. Za pokretanje syzkallera u virtuelnim mašinama zasnovanim na bhyve-u, poseban server je posvećen i koristi
      syzbot je uspostavio testiranje različitih FreeBSD podsistema u Google infrastrukturi. Organizirao prijenos informacija o svim padovima na backtrace.io servis radi pojednostavljenja njihovog grupisanja i analize;

    • U toku je rad na ažuriranju zlib implementacije na nivou kernela.
      Kôd koji se odnosi na kompresiju je migriran sa zlib 1.0.4, objavljen prije više od 20 godina, na trenutnu zlib 1.2.11 kodnu bazu. Da bi se objedinio pristup zlibu, funkcije compress, compress2 i uncompress su dodate jezgru. Kod koji osigurava rad PPP protokola iz netgraph podsistema prebačen je na korištenje sistemske implementacije zlib, umjesto vlastitog izdanja ove biblioteke. Podsistemi kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor, takođe su prebačeni u novi zlib.
      if_mxge, bxe ažuriran i ng_deflate;

    • Razvija se novi interfejs kernela sysctlinfo, koji vam omogućava da pronađete elemente u bazi parametara sysctl, obrađene u obliku MIB-a (Management Information Base), i prenesete informacije o objektima u korisnički prostor.
  • Sigurnost
    • Razvijen modul kernela mac_ipacl, zasnovan na TrustedBSD MAC Framework-u i implementira sistem kontrole pristupa za postavke mrežnog steka za okruženja u zatvoru. Na primjer, koristeći mac_ipacl, administrator host sistema može spriječiti root korisnika u zatvorskom okruženju da mijenja ili postavlja IP adrese ili postavke podmreže za određena mrežna sučelja. Predložen sistem obavezne kontrole pristupa dozvoljava postaviti liste IP adresa i podmreža dozvoljenih za Jail, zabraniti instalaciju određenih IP adresa i podmreža u Jail-u, ili ograničiti promjenu parametara samo za određene mrežne interfejse;
    • Intel je projektu donirao port za softverski stog TPM 2.0 (Modul pouzdane platforme) za povezivanje sa sigurnim računarskim čipom, koji se obično koristi za verifikovano učitavanje firmvera i pokretača operativnog sistema. Komponente steka predstavljene su u obliku portova security/tpm2-tss, security/tpm2-tools i security/tpm2-abrmd. tpm2-tss port uključuje biblioteke za korištenje TPM2 API-ja, tpm2-tools obezbjeđuje pomoćne programe komandne linije za izvođenje TPM operacija, a tpm2-abrmd sadrži implementaciju pozadinskog procesa komponenti TPM Access Broker i Resource Manager koji multipleksira zahtjeve različitih TPM korisnika. na jedan uređaj. Pored verifikovanog pokretanja na FreeBSD-u, TPM se može koristiti za poboljšanje sigurnosti Strongswan IPsec, SSH i TLS izvođenjem kriptografskih operacija na zasebnom čipu;
    • Kernel za amd64 arhitekturu je prilagođen za podizanje pomoću tehnike zaštite W^X (write XOR execute), što znači da se memorijskim stranicama ne može istovremeno pristupiti za pisanje i izvršavanje (jezgro se sada može učitati pomoću izvršnih memorijskih stranica za koje se upisuje je zabranjeno). Nova metoda zaštite kernela uključena je u granu HEAD i biće uključena u izdanja FreeBSD 13.0 i 12.2;
    • Za mmap i mprotect sistemske pozive implementirano makro PROT_MAX(), koji vam omogućava da odredite skup oznaka ograničenja pristupa dozvoljenih za dalje promjene (PROT_READ, PROT_WRITE, PROT_EXEC). Koristeći PROT_MAX(), programer može zabraniti prijenos memorijskog područja u izvršnu kategoriju ili zatražiti memoriju koja ne dozvoljava izvršenje, ali se kasnije može konvertirati u izvršnu. Na primjer, područje memorije može biti otvoreno za pisanje samo za vrijeme trajanja dinamičkog povezivanja ili generiranja JIT koda, ali kada se upisivanje završi, ograničeno je samo na čitanje i izvršavanje, au budućnosti, ako bude ugroženo, napadač neće moći omogućiti pisanje za taj memorijski blok. Pored PROT_MAX(), implementiran je i sysctl vm.imply_prot_max, koji kada se aktivira, određuje skup važećih zastavica na osnovu početnih parametara prvog poziva mmap;
    • Da bi se poboljšala zaštita od iskorištavanja ranjivosti, pored tehnike randomizacije adresnog prostora (ASLR), mehanizam za randomiziranje pomaka pokazivača koji adresiraju početni okvir steka i strukture postavljene na stek sa informacijama o okruženju, parametrima pokretanja programa i podacima za izvršne slike u ELF formatu predlaže se;
    • Posao je obavljen na uklanjanju nesigurne get funkcije iz libc-a (počevši od standarda C11, ova funkcija je isključena iz specifikacije) i na ispravljanju portova koji još uvijek koriste ovu funkciju. Planirano je da se promjena ponudi u FreeBSD 13.0;
    • Pokrenut je eksperimentalni projekat za kreiranje alata za orkestriranje zatvorskih okruženja na osnovu okvira lonac za kreiranje i izvoz slika, implementiran slično Dockeru, i drajver NOMAD, koji pruža interfejs za dinamičko pokretanje aplikacija u zatvorskom okruženju. Predloženi model nam omogućava da razdvojimo procese stvaranja zatvorskih okruženja i implementacije aplikacija u njima. Jedan od ciljeva projekta je da se obezbedi sredstvo za manipulisanje zatvorima kao kontejnerima u stilu Dockera;
  • Skladištenje i sistemi datoteka
    • Od NetBSD-a do uslužnog programa "makefs". preselio Podrška FAT sistema datoteka (msdosfs). Pripremljene izmene vam omogućavaju da kreirate FS slike sa FAT-om bez korišćenja md drajvera i bez root autoriteta;
    • Završena je prerada FUSE (File system in USERspace) drajvera podsistema, omogućavajući kreiranje implementacija sistema datoteka u korisničkom prostoru. Upravljački program koji je prvobitno isporučen sadržavao je mnogo grešaka i bio je zasnovan na FUSE 7.8, koji je objavljen prije 11 godina. U sklopu projekta modernizacije drajvera implementirana je podrška za FUSE 7.23 protokol, dodat je kod za provjeru prava pristupa na strani kernela (“-o default_permissions”), dodani su pozivi na VOP_MKNOD, VOP_BMAP i VOP_ADVLOCK, omogućena je mogućnost prekida FUSE operacija, dodata je podrška za neimenovane cijevi i unix utičnice u fusefovima, postalo je moguće koristiti kqueue za /dev/fuse, bilo je moguće ažurirati parametre montiranja putem “mount -u”, dodata podrška za izvoz fusefova preko NFS-a, implementirano računovodstvo RLIMIT_FSIZE, dodane oznake FOPEN_KEEP_CACHE i FUSE_ASYNC_READ, napravljene su značajne optimizacije performansi i poboljšana organizacija keširanja. Novi drajver je uključen u glavu i stabilne/12 grana (uključeno u FreeBSD 12.1);
    • Implementacija NFSv4.2 (RFC-7862) za FreeBSD je skoro završena. Glavni fokus tokom izvještajnog perioda bio je na testiranju. Testovi su završeni kako bi se provjerila kompatibilnost sa implementacijom Linuxa, ali testiranje pNFS servera sa NFSv4.2 još uvijek traje. Generalno, kod se već smatra spremnim za integraciju u FreeBSD head/trenutne grane. Nova verzija NFS-a dodaje podršku za funkcije posix_fadvise, posix_fallocate, SEEKHOLE/SEEKDATA modove u lseek-u, operaciju lokalnog kopiranja dijelova datoteke na serveru (bez prijenosa na klijenta);
  • Hardverska podrška
    • Pokrenut je projekat za poboljšanje performansi FreeBSD-a na laptopima. Prvi uređaj koji je revidiran za hardversku podršku u FreeBSD-u bio je laptop Lenovo X1 Carbon sedme generacije;
    • CheriBSD, fork FreeBSD-a za istraživačku arhitekturu procesora CHERI (Capability Hardware Enhanced RISC Instrukcije), ažurirano da podrži nadolazeći ARM Morello procesor, koji će podržavati CHERI sistem kontrole pristupa memoriji zasnovan na sigurnosnom modelu Capsicum dizajna. Morello čip planiraju izdanje 2021. CheriBSD programeri takođe nastavljaju da prate razvoj CHERI referentnog prototipa zasnovanog na MIPS arhitekturi;
    • Proširena podrška za RockChip RK3399 čipove koji se koriste u RockPro64 i NanoPC-T4 pločama. Najznačajnije poboljšanje je podrška za eMMC i razvoj novog drajvera za eMMC kontroler koji se koristi na ploči;
    • Nastavlja se rad na implementaciji podrške za ARM64 SoC Broadcom BCM5871X sa ARMv8 Cortex-A57 procesorima, koji imaju za cilj upotrebu u ruterima, gatewayima i mrežnim pohranama. Tokom izvještajnog perioda
      Podrška za iProc PCIe je proširena i dodata je mogućnost korištenja hardverskih kriptografskih operacija za ubrzanje IPsec-a.
      Integracija koda u HEAD granu se očekuje u četvrtom kvartalu;

    • Bilo je značajnog napretka u razvoju FreeBSD porta za platformu powerpc64. Fokus je na pružanju kvalitetnih performansi na sistemima sa IBM POWER8 i POWER9 procesorima, ali opciono podržava rad na starijim Apple Power Mac računarima, x500 i Amiga A1222. Powerpc*/12 grana nastavlja da se isporučuje sa gcc 4.2.1, a grana powerpc*/13 će uskoro biti migrirana na llvm90. Od 33306 portova, 30514 je uspješno sklopljeno;
    • FreeBSD portiranje se nastavlja za 64-bitni SoC NXP LS1046A baziran na ARMv8 Cortex-A72 procesoru sa integrisanim motorom za ubrzanje obrade mrežnih paketa, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 i USB 3.0. U izvještajnom periodu implementirana je podrška za USB 3.0, SD/MMC, I2C, DPAA i GPIO mrežni interfejs. Postoje planovi za podršku QSPI i optimizaciju performansi mrežnog interfejsa. Završetak radova i uključivanje u HEAD filijalu očekuje se u 4. kvartalu 2019. godine;
    • Ena drajver je ažuriran kako bi podržao drugu generaciju ENAv2 (Elastic Network Adapter) mrežnih adaptera koji se koriste u infrastrukturi Elastic Compute Cloud (EC2) za organizaciju komunikacije između EC2 čvorova pri brzinama do 25 Gb/s. NETMAP podrška je dodana i testirana za ena drajver, a raspored memorije je prilagođen da omogući LLQ režim u Amazon EC2 A1 okruženjima;
  • Aplikacije i sistem portova
    • Ažurirane komponente grafičkog steka i portovi vezani za xorg. Portovi koji koriste USE_XORG i XORG_CAT premješteni su u okvir USES umjesto pozivanja bsd.xorg.mk preko bsd.port.mk. Takvi portovi sada uključuju oznaku "USES=xorg" u svoje makefile. XORG_CAT funkcionalnost je odvojena od bsd.xorg.mk i sada je omogućena zastavicom "USES=xorg-cat". Dodati alati za direktno generisanje xorg portova iz git repozitorija
      freedesktop.org, koji vam, na primjer, omogućava kreiranje portova za još neobjavljene verzije. U budućnosti planiramo da pripremimo alate za korišćenje meson asemblerskog sistema umesto auto-alata za izgradnju xorg portova.

      Radovi su obavljeni na čišćenju starih xorg portova vezanih za komponente koje više nisu podržane, na primjer, x11/libXp port je uklonjen, a x11/Xxf86misc, x11-fonts/libXfontcache i graphics/libGLw portovi su zastarjeli ;

    • Radilo se na poboljšanju podrške za Javu 11 i novijim izdanjima u FreeBSD-u, kao i na prenošenju nekih promjena u granu Java 8. Nakon podrške za takve nove karakteristike Java 11 kao što su Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger je implementiran za FreeBSD, DTrace, Javac Server, Java Sound i SCTP, posao je prebačen na osiguranje da su svi testovi kompatibilnosti prošli. Broj grešaka pri polaganju testova smanjen je sa 50 na 2;
    • KDE Plasma desktop, KDE Frameworks, KDE aplikacije i Qt se ažuriraju i ažuriraju do najnovijih izdanja;
    • Portovi sa Xfce desktopom su ažurirani za izdavanje 4.14;
    • FreeBSD stablo portova je premašilo 38000 portova, broj nezatvorenih PR-ova je nešto veći od 2000, od kojih 400 PR-ova još nije riješeno. Tokom izvještajnog perioda napravljeno je 7340 izmjena od 169 programera. Dva nova učesnika (Santhosh Raju i Dmitri Goutnik) dobila su prava na uključivanje. Objavljeno je novo izdanje menadžera paketa pkg 1.12, sa podrškom za preklapanje u stablu portova i čišćenje bsd.sites.mk. Među značajnim ažuriranjima verzija na portovima su: Lazarus 2.0.4, LLVM 9.0, Perl5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
    • Razvoj projekta se nastavlja ClonOS, razvija specijalizovana distribucija za implementaciju virtuelne serverske infrastrukture. U pogledu zadataka koje rješava, ClonOS podsjeća na sisteme kao što su Proxmox, Triton (Joyent), OpenStack, OpenNebula i Amazon AWS, od kojih je glavna razlika korištenje FreeBSD-a i mogućnost upravljanja, implementacije i upravljanja FreeBSD Jail kontejnerima i virtuelna okruženja zasnovana na Bhyve i Xen hipervizorima. Nedavne promjene uključuju podršku
      cloud-init za Linux/BSD VM i cloudbase-init za Windows VM, započinjući tranziciju na korištenje izvornih slika, koristeći Jenkins CI za testiranje build-a i novo pkg spremište za instalaciju
      ClonOS iz paketa.

izvor: opennet.ru

Dodajte komentar