Izvješće o napretku FreeBSD-a za Q2019 XNUMX

Objavljeno izvješće o razvoju FreeBSD projekta od srpnja do rujna 2019. Među promjenama možemo primijetiti:

  • Opća i sustavna pitanja
    • Glavni tim općenito je odobrio mogućnost uključivanja koda u sustav koji se distribuira pod BSD licencom uz dodatni patentni ugovor (BSD+Patent), ali odluka o uključivanju svake komponente u sustav prema ovoj licenci mora biti odobrena zasebno;
    • Održan je prvi sastanak radne skupine stvorene za provedbu migracije izvornih kodova iz centraliziranog sustava za kontrolu izvora Subversion na decentralizirani sustav Git. Rasprava o izvedivosti migracije još je u tijeku i odluke o mnogim pitanjima tek treba donijeti (na primjer, što učiniti s contrib/, je li potrebno ponovno generirati hashove u trenutnom git repozitoriju i kako najbolje implementirati testiranje obveza);
    • Iz NetBSD-a portiran KCSAN (Kernel Concurrency Sanitizer) skup alata, koji vam omogućuje otkrivanje uvjeta utrke između niti kernela koje se izvode na različitim CPU-ima;
    • U tijeku je rad na korištenju Clangovog ugrađenog asemblera (IAS) umjesto GNU binutils asemblera;
    • Infrastruktura emulacije Linux okruženja (Linuxulator) prilagođena je za rad na ARM64 arhitekturi. Implementiran je sistemski poziv "renameat2". Uslužni program strace poboljšan je za dijagnosticiranje problema u izvršnim datotekama Linuxa koje se izvode u Linuxulatoru. Problem s rušenjima prilikom povezivanja izvršnih datoteka sa svježim glibc-om je riješen. Portovi s Linux komponentama za Linuxulator ažurirani su na CentOS 7.7;
    • U sklopu programa Google Summer of Code studenti su uspješno odradili šest projekata: pripremljena je implementacija unificiranog (IPv4/IPv6) ping alata, razvijeni su alati za testiranje vatrozida i prepoznavanje grešaka u kernelu (Kernel sanitizer), mac_ipacl predložen je modul, napisan je kod za kompresiju virtualne memorije i obavljen je rad na odvajanju procesa izgradnje porta od lokalne instalacije;
    • Projekt fuzzing testiranja jezgre FreeBSD pomoću sustava nastavlja se razvijati syzkaller. Tijekom izvještajnog razdoblja identificirano je i otklonjeno više od deset grešaka pomoću syzkallera. Za pokretanje syzkallera u virtualnim strojevima koji se temelje na bhyveu, poseban je poslužitelj namijenjen i koristi se
      syzbot je uspostavio testiranje raznih FreeBSD podsustava u Google infrastrukturi. Organizirao prijenos informacija o svim padovima na backtrace.io servis kako bi se pojednostavnilo njihovo grupiranje i analiza;

    • U tijeku je rad na ažuriranju zlib implementacije na razini jezgre.
      Kod koji se odnosi na kompresiju migriran je iz zlib 1.0.4, izdanog prije više od 20 godina, u trenutnu bazu kodova zlib 1.2.11. Kako bi se unificirao pristup zlibu, u kernel su dodane funkcije compress, compress2 i uncompress. Kod koji osigurava rad PPP protokola iz podsustava netgraph prebačen je na korištenje sistemske implementacije zlib-a, umjesto vlastitog izdanja ove biblioteke. Podsustavi kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor, također su prebačeni u novi zlib.
      if_mxge, bxe ažuriran i ng_deflate;

    • Novo sučelje kernela je u razvoju sysctlinfo, koji omogućuje pronalaženje elemenata u bazi parametara sysctl, obrađenih u obliku MIB-a (Management Information Base), te prijenos informacija o objektima u korisnički prostor.
  • sigurnosti
    • Razvijen kernel modul mac_ipacl, koji se temelji na TrustedBSD MAC okviru i implementira sustav kontrole pristupa za postavke mrežnog skupa za zatvorska okruženja. Na primjer, koristeći mac_ipacl, administrator glavnog sustava može spriječiti root korisnika u okruženju zatvora da mijenja ili postavlja IP adrese ili postavke podmreže za određena mrežna sučelja. Predloženi obvezni sustav kontrole pristupa to omogućuje postavite popise IP adresa i podmreža dopuštenih za Jail, zabranite instaliranje određenih IP adresa i podmreža u Jail ili ograničite promjenu parametara samo za određena mrežna sučelja;
    • Intel je projektu donirao port softverskog skupa TPM 2.0 (Trusted Platform Module) za sučelje sa sigurnim računalnim čipom, koji se obično koristi za verificirano učitavanje firmware-a i OS bootloadera. Komponente steka predstavljene su u obliku portova security/tpm2-tss, security/tpm2-tools i security/tpm2-abrmd. Port tpm2-tss uključuje biblioteke za korištenje TPM2 API-ja, tpm2-tools pruža pomoćne programe naredbenog retka za izvođenje TPM operacija, a tpm2-abrmd sadrži implementaciju pozadinskog procesa komponenti TPM Access Broker i Resource Manager koji multipleksiraju zahtjeve različitih TPM korisnika na jedan uređaj. Osim provjerenog 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 arhitekturu amd64 prilagođen je za pokretanje korištenjem W^X (write XOR execute) zaštitne tehnike, što znači da se memorijskim stranicama ne može istovremeno pristupiti za pisanje i izvođenje (kernel se sada može učitati pomoću izvršnih memorijskih stranica za koje pisanje je zabranjeno). Nova metoda zaštite jezgre uključena je u granu HEAD i bit će uključena u izdanja FreeBSD 13.0 i 12.2;
    • Za mmap i mprotect pozive sustava implementiran makro PROT_MAX(), koji vam omogućuje određivanje skupa zastavica ograničenja pristupa dopuštenih za daljnje promjene (PROT_READ, PROT_WRITE, PROT_EXEC). Koristeći PROT_MAX(), programer može zabraniti prijenos memorijske regije u izvršnu kategoriju ili zahtijevati memoriju koja ne dopušta izvršenje, ali se kasnije može pretvoriti u izvršnu. Na primjer, područje memorije može biti otvoreno samo za pisanje za vrijeme trajanja dinamičkog povezivanja ili generiranja JIT koda, ali kada je pisanje završeno, ograničeno je samo na čitanje i izvršavanje, a u budućnosti, ako bude ugroženo, napadač neće moći omogućiti pisanje za taj memorijski blok. Uz PROT_MAX(), također je implementiran sysctl vm.imply_prot_max, koji kada se aktivira, određuje skup važećih oznaka na temelju početnih parametara prvog poziva mmap-u;
    • Kako bi se poboljšala zaštita od iskorištavanja ranjivosti, uz tehniku ​​randomizacije adresnog prostora (ASLR), mehanizam za randomiziranje pomaka pokazivača koji se obraćaju početnom okviru stoga i strukture postavljene na stog s informacijama o okruženju, parametrima pokretanja programa i podacima za izvršne slike predlaže se ELF format;
    • Radilo se na uklanjanju funkcije nesigurnog dobivanja iz libc-a (počevši od standarda C11, ova je funkcija isključena iz specifikacije) i ispravljanju portova koji još uvijek koriste ovu funkciju. Promjena se planira ponuditi u FreeBSD 13.0;
    • Pokrenut je eksperimentalni projekt za stvaranje alata za orkestriranje zatvorskih okruženja na temelju okvira lonac za stvaranje i izvoz slika, implementirano slično Dockeru, i upravljački program nomad, koji pruža sučelje za dinamičko pokretanje aplikacija u zatvorskom okruženju. Predloženi model omogućuje nam razdvajanje procesa stvaranja zatvorskih okruženja i postavljanja aplikacija u njih. Jedan od ciljeva projekta je osigurati sredstvo za manipuliranje zatvorima kao kontejnerima u stilu Dockera;
  • Pohranjivanje i datotečni sustavi
    • Od NetBSD-a do uslužnog programa "makefs". pomaknuto Podrška za FAT datotečni sustav (msdosfs). Pripremljene promjene vam omogućuju stvaranje FS slika s FAT-om bez korištenja md upravljačkog programa i bez root ovlasti;
    • Dovršena je prerada upravljačkog programa podsustava FUSE (Datotečni sustav u USErspaceu), što omogućuje stvaranje implementacija datotečnog sustava u korisničkom prostoru. Upravljački program koji je izvorno isporučen sadržavao je mnogo grešaka i temeljio se na FUSE 7.8, koji je objavljen prije 11 godina. U sklopu projekta modernizacije drajvera implementirana je podrška za protokol FUSE 7.23, dodan 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 prekidanja FUSE operacija, podrška za neimenovane cijevi i unix utičnice dodana je u fusefove, postalo je moguće koristiti kqueue za /dev/fuse, bilo je moguće ažurirati parametre montiranja putem “mount -u”, dodana podrška za izvoz osigurača putem NFS-a, implementirao RLIMIT_FSIZE računovodstvo, dodao oznake FOPEN_KEEP_CACHE i FUSE_ASYNC_READ, izvršio značajne optimizacije performansi i poboljšao organizaciju predmemoriranja. Novi upravljački program uključen je u grane head i stable/12 (uključeno u FreeBSD 12.1);
    • Implementacija NFSv4.2 (RFC-7862) za FreeBSD je skoro dovršena. Glavni fokus tijekom izvještajnog razdoblja bio je na testiranju. Testovi su dovršeni kako bi se provjerila kompatibilnost s implementacijom Linuxa, ali testiranje pNFS poslužitelja s NFSv4.2 još uvijek je u tijeku. Općenito, kod se već smatra spremnim za integraciju u FreeBSD head/current grane. Nova verzija NFS-a dodaje podršku za funkcije posix_fadvise, posix_fallocate, režime SEEKHOLE/SEEKDATA u lseek-u, operaciju lokalnog kopiranja dijelova datoteke na poslužitelj (bez prijenosa na klijenta);
  • Hardverska podrška
    • Pokrenut je projekt za poboljšanje performansi FreeBSD-a na prijenosnim računalima. Prvi uređaj koji je revidiran za hardversku podršku u FreeBSD-u bio je prijenosno računalo Lenovo X1 Carbon sedme generacije;
    • CheriBSD, račvanje FreeBSD-a za istraživačku arhitekturu procesora DRAGI (Capability Hardware Enhanced RISC Instructions), ažuriran za podršku nadolazećem ARM Morello procesoru, koji će podržavati CHERI sustav kontrole pristupa memoriji temeljen na sigurnosnom modelu dizajna Capsicum. Morello čip planiraju izdanje 2021. Programeri CheriBSD također nastavljaju pratiti razvoj CHERI referentnog prototipa temeljenog 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 bila je podrška za eMMC i razvoj novog upravljačkog programa za eMMC kontroler koji se koristi na ploči;
    • Nastavlja se rad na implementaciji podrške za ARM64 SoC Broadcom BCM5871X s ARMv8 Cortex-A57 procesorima, s ciljem korištenja u usmjerivačima, pristupnicima i mrežnoj pohrani. Tijekom izvještajnog razdoblja
      Podrška za iProc PCIe je proširena i dodana je mogućnost korištenja hardverskih kriptografskih operacija za ubrzavanje IPsec-a.
      Integracija koda u HEAD granu očekuje se u četvrtom kvartalu;

    • Došlo je do značajnog napretka u razvoju FreeBSD porta za powerpc64 platformu. Fokus je na pružanju kvalitetnih performansi na sustavima s IBM POWER8 i POWER9 procesorima, ali opcionalno podržava rad na starijim Apple Power Macovima, x500 i Amiga A1222. Ogranak powerpc*/12 nastavlja se isporučivati ​​s gcc 4.2.1, a ogranak powerpc*/13 uskoro će biti migriran na llvm90. Od 33306 priključaka, 30514 je uspješno sastavljeno;
    • FreeBSD prijenos se nastavlja za 64-bitni SoC NXP LS1046A temeljen na ARMv8 Cortex-A72 procesoru s integriranim motorom za ubrzanje obrade mrežnih paketa, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 i USB 3.0. Tijekom izvještajnog razdoblja implementirana je podrška za USB 3.0, SD/MMC, I2C, DPAA i GPIO mrežno sučelje. Postoje planovi za podršku QSPI i optimizaciju performansi mrežnog sučelja. Završetak radova i uključenje u HEAD podružnicu očekuje se u 4. kvartalu 2019. godine;
    • Upravljački program ena je ažuriran kako bi podržao drugu generaciju mrežnih adaptera ENAv2 (Elastic Network Adapter) koji se koriste u infrastrukturi Elastic Compute Cloud (EC2) za organiziranje komunikacije između EC2 čvorova brzinama do 25 Gb/s. Podrška za NETMAP je dodana i testirana u upravljački program ena, a raspored memorije je prilagođen za omogućavanje LLQ načina rada u Amazon EC2 A1 okruženjima;
  • Aplikacije i port sustav
    • Ažurirane komponente grafičkog skupa i xorg povezani priključci. Portovi koji koriste USE_XORG i XORG_CAT premješteni su u okvir USES umjesto pozivanja bsd.xorg.mk putem bsd.port.mk. Takvi priključci sada uključuju oznaku "USES=xorg" u svojim make datotekama. Funkcionalnost XORG_CAT je odvojena od bsd.xorg.mk i sada je omogućena zastavom "USES=xorg-cat". Dodani alati za izravno generiranje xorg portova iz git repozitorija
      freedesktop.org, koji vam, na primjer, omogućuje stvaranje portova za još neobjavljene verzije. U budućnosti planiramo pripremiti alate za korištenje meson sklopovskog sustava umjesto autotoola za izgradnju xorg portova.

      Radilo se na čišćenju starih xorg portova povezanih s komponentama 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 novija izdanja u FreeBSD-u, kao i na prijenosu nekih promjena u granu Jave 8. Nakon implementacije podrške za nove značajke Jave 11 kao što su Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger za FreeBSD, DTrace, Javac Server, Java Sound i SCTP, posao je preusmjeren na osiguravanje da su svi testovi kompatibilnosti prošli. Broj neuspjeha pri polaganju testova smanjen je s 50 na 2;
    • Radna površina KDE Plasma, KDE Frameworks, KDE aplikacije i Qt ažuriraju se i ažuriraju na najnovija izdanja;
    • Priključci s Xfce radnom površinom ažurirani za izdanje 4.14;
    • Stablo portova FreeBSD-a premašilo je 38000 portova, broj nezatvorenih PR-ova je nešto veći od 2000, od čega 400 PR-ova još nije riješeno. Tijekom izvještajnog razdoblja napravljeno je 7340 izmjena od 169 programera. Dva nova sudionika (Santhosh Raju i Dmitri Goutnik) dobili su prava komitatora. Objavljeno je novo izdanje upravitelja paketa pkg 1.12, s podrškom za slojeve u stablu portova i čišćenjem bsd.sites.mk. Među značajnim ažuriranjima verzija u 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, razvijanje specijalizirana distribucija za postavljanje virtualne poslužiteljske infrastrukture. Po zadacima koje rješava, ClonOS nalikuje sustavima kao što su Proxmox, Triton (Joyent), OpenStack, OpenNebula i Amazon AWS, od kojih je glavna razlika korištenje FreeBSD-a i mogućnost upravljanja, postavljanja i upravljanja FreeBSD Jail kontejnerima i virtualna okruženja temeljena na Bhyve i Xen hipervizorima. Nedavne promjene uključuju podršku
      cloud-init za Linux/BSD VM i cloudbase-init za Windows VM, početak prijelaza na korištenje izvornih slika, korištenje Jenkins CI-ja za testiranje nadogradnji i novo pkg spremište za instalaciju
      ClonOS iz paketa.

Izvor: opennet.ru

Dodajte komentar