Poročilo o razvoju FreeBSD Q2019 XNUMX

Objavljeno poročilo o razvoju projekta FreeBSD od julija do septembra 2019. Med spremembami lahko opazimo:

  • Splošna in sistemska vprašanja
    • Osnovna ekipa je na splošno odobrila možnost vključitve kode v sistem, ki se distribuira pod licenco BSD z dodatno patentno pogodbo (BSD+patent), vendar je treba odločitev o vključitvi vsake komponente v sistem po tej licenci odobriti posebej;
    • Zgodilo se je prvo srečanje delovne skupine, ki je bila ustanovljena za izvedbo migracije izvornih kod iz centraliziranega sistema za nadzor izvorne kode Subversion v decentraliziran sistem Git. Razprava o izvedljivosti selitve še vedno poteka in odločitve o številnih vprašanjih je treba šele razviti (na primer, kaj storiti s contrib/, ali je treba znova generirati zgoščene vrednosti v trenutnem repozitoriju git in kako najbolje izvesti testiranje zavez);
    • Iz NetBSD prenesen Komplet orodij KCSAN (Kernel Concurrency Sanitizer), ki vam omogoča zaznavanje pogojev tekmovanja med nitmi jedra, ki se izvajajo na različnih procesorjih;
    • Poteka delo za uporabo Clangovega vgrajenega sestavljalnika (IAS) namesto sestavljalnika GNU binutils;
    • Infrastruktura emulacije okolja Linux (Linuxulator) je prilagojena delovanju na arhitekturi ARM64. Implementiran sistemski klic »renameat2«. Pripomoček strace je bil izboljšan za diagnosticiranje težav v izvedljivih datotekah Linuxa, ki se izvajajo v Linuxulatorju. Težava z zrušitvami pri povezovanju izvršljivih datotek s svežim glibc je bila odpravljena. Vrata s komponentami Linuxa za Linuxulator so posodobljena na CentOS 7.7;
    • Študenti so v okviru programa Google Summer of Code uspešno zaključili šest projektov: pripravljena je bila implementacija enotnega (IPv4/IPv6) ping pripomočka, razvita so bila orodja za testiranje požarnih zidov in odkrivanje napak v jedru (Kernel sanitizer), mac_ipacl. predlagan je bil modul, napisana je bila koda za stiskanje navideznega pomnilnika in opravljeno je bilo delo za ločitev procesa gradnje vrat od lokalne namestitve;
    • Projekt za fuzzing testiranje jedra FreeBSD z uporabo sistema se še naprej razvija syzkaller. V poročevalnem obdobju je bilo s pomočjo syzkallerja ugotovljenih in odpravljenih več kot deset napak. Za zagon syzkallerja v virtualnih strojih, ki temeljijo na bhyve, je namenjen ločen strežnik, ki uporablja
      syzbot je vzpostavil testiranje različnih podsistemov FreeBSD v Googlovi infrastrukturi. Organiziran prenos informacij o vseh zrušitvah v storitev backtrace.io za poenostavitev njihovega združevanja in analize;

    • Potekajo dela za posodobitev izvedbe zlib na ravni jedra.
      Koda, povezana s stiskanjem, je bila preseljena iz zlib 1.0.4, ki je bil izdan pred več kot 20 leti, v trenutno kodno zbirko zlib 1.2.11. Za poenotenje dostopa do zliba so v jedro dodane funkcije stisniti, stisniti2 in razpakirati. Koda, ki zagotavlja delovanje protokola PPP iz podsistema netgraph, je bila prenesena na uporabo sistemske implementacije zlib, namesto lastne izdaje te knjižnice. V novi zlib so bili preneseni tudi podsistemi kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,.
      if_mxge, bxe posodobljen in ng_deflate;

    • V razvoju je nov vmesnik jedra sysctlinfo, ki omogoča iskanje elementov v bazi parametrov sysctl, obdelanih v obliki MIB (Management Information Base), in prenos informacij o objektih v uporabniški prostor.
  • varnost
    • Razvit modul jedra mac_ipacl, ki temelji na TrustedBSD MAC Framework in izvaja sistem za nadzor dostopa za nastavitve omrežnega sklada za zaporna okolja. Na primer, z uporabo mac_ipacl lahko skrbnik gostiteljskega sistema prepreči korenskemu uporabniku v zaprtem okolju spreminjanje ali nastavitev naslovov IP ali nastavitev podomrežja za določene omrežne vmesnike. Predlagan sistem obvezne kontrole dostopa omogoča nastavite sezname naslovov IP in podomrežij, dovoljenih za Jail, prepove namestitev določenih naslovov IP in podomrežij v Jail ali omejite spreminjanje parametrov samo za določene omrežne vmesnike;
    • Intel je projektu podaril vrata sklada programske opreme TPM 2.0 (Trusted Platform Module) za vmesnik z varnim računalniškim čipom, ki se običajno uporablja za preverjeno nalaganje vdelane programske opreme in zagonskega nalagalnika OS. Komponente sklada so predstavljene v obliki vrat security/tpm2-tss, security/tpm2-tools in security/tpm2-abrmd. Vrata tpm2-tss vključujejo knjižnice za uporabo API-ja TPM2, tpm2-tools ponuja pripomočke ukazne vrstice za izvajanje operacij TPM, tpm2-abrmd pa vsebuje implementacijo procesa v ozadju komponent TPM Access Broker in Resource Manager, ki multipleksira zahteve različnih uporabnikov TPM na eno samo napravo. Poleg preverjenega zagona na FreeBSD se lahko TPM uporablja za izboljšanje varnosti Strongswan IPsec, SSH in TLS z izvajanjem kriptografskih operacij na ločenem čipu;
    • Jedro za arhitekturo amd64 je prilagojeno za zagon z zaščitno tehniko W^X (write XOR execute), kar pomeni, da do pomnilniških strani ni mogoče istočasno dostopati za pisanje in izvajanje (jedro je zdaj mogoče naložiti z uporabo izvršljivih pomnilniških strani, za katere pisanje je prepovedano). Nova metoda zaščite jedra je vključena v vejo HEAD in bo vključena v izdaji FreeBSD 13.0 in 12.2;
    • Za sistemske klice mmap in mprotect izvajati makro PROT_MAX(), ki vam omogoča določitev nabora zastavic za omejitev dostopa, dovoljenih za nadaljnje spremembe (PROT_READ, PROT_WRITE, PROT_EXEC). Z uporabo PROT_MAX() lahko razvijalec prepove prenos območja pomnilnika v kategorijo izvršljivih datotek ali zahteva pomnilnik, ki ne dovoljuje izvajanja, vendar ga je mogoče pozneje pretvoriti v izvedljivo. Na primer, območje pomnilnika je lahko odprto samo za pisanje med trajanjem dinamičnega povezovanja ali generiranja kode JIT, ko pa je pisanje končano, je omejeno samo na branje in izvajanje, in v prihodnosti, če je ogroženo, napadalec ne bo mogel omogočiti pisanja za ta pomnilniški blok. Poleg PROT_MAX() je implementiran tudi sysctl vm.imply_prot_max, ki ob aktiviranju določi nabor veljavnih zastavic na podlagi začetnih parametrov prvega klica mmap;
    • Za izboljšanje zaščite pred izkoriščanjem ranljivosti, poleg tehnike naključnega naslovnega prostora (ASLR), mehanizem za naključno določanje odmikov kazalcev, ki obravnavajo začetni okvir sklada in strukture, postavljene na sklad, z informacijami o okolju, parametrih zagona programa in podatki za izvršljive slike je predlagan format ELF;
    • Opravljeno je bilo delo za odstranitev funkcije unsafe gets iz libc (začenši s standardom C11 je bila ta funkcija izključena iz specifikacije) in za popravljanje vrat, ki še vedno uporabljajo to funkcijo. Sprememba naj bi bila na voljo v FreeBSD 13.0;
    • Začel se je eksperimentalni projekt za ustvarjanje orodij za orkestriranje zaporniških okolij, ki temeljijo na ogrodju lahko za ustvarjanje in izvoz slik, implementirano podobno kot Docker, in gonilnik nomad, ki nudi vmesnik za dinamično zagon aplikacij v zapornem okolju. Predlagani model nam omogoča ločitev procesov ustvarjanja zapornih okolij in nameščanja aplikacij v njih. Eden od ciljev projekta je zagotoviti sredstvo za manipulacijo zaporov kot vsebnikov v slogu Docker;
  • Shranjevanje in datotečni sistemi
    • Od NetBSD do pripomočka "makefs". premaknjen Podpora za datotečni sistem FAT (msdosfs). Pripravljene spremembe vam omogočajo ustvarjanje slik FS s FAT brez uporabe gonilnika md in brez pooblastila root;
    • Dokončana je bila predelava gonilnika podsistema FUSE (File system in USErspace), ki omogoča ustvarjanje implementacij datotečnega sistema v uporabniškem prostoru. Gonilnik, ki je bil prvotno poslan, je vseboval veliko hroščev in je temeljil na FUSE 7.8, ki je bil izdan pred 11 leti. V okviru projekta posodobitve gonilnikov je implementirana podpora za protokol FUSE 7.23, dodana koda za preverjanje pravic dostopa na strani jedra (»-o default_permissions«), dodani so klici VOP_MKNOD, VOP_BMAP in VOP_ADVLOCK, zagotovljena je bila zmožnost prekinitve operacij FUSE, podpora za neimenovane cevi in ​​vtičnice unix je bila dodana v fusefs, postala je možna uporaba kqueue za /dev/fuse, bilo je mogoče posodobiti parametre priklopa prek »mount -u«, dodana podpora za izvažanje varovalk prek NFS, implementirano obračunavanje RLIMIT_FSIZE, dodani zastavici FOPEN_KEEP_CACHE in FUSE_ASYNC_READ, narejene pomembne optimizacije delovanja in izboljšana organizacija predpomnjenja. Nov gonilnik je vključen v veje head in stable/12 (vključeno v FreeBSD 12.1);
    • Implementacija NFSv4.2 (RFC-7862) za FreeBSD je skoraj končana. Glavni poudarek v obdobju poročanja je bil na testiranju. Preizkusi so bili zaključeni za preverjanje združljivosti z implementacijo Linuxa, vendar testiranje strežnika pNFS z NFSv4.2 še vedno poteka. Na splošno velja, da je koda že pripravljena za integracijo v glavne/trenutne veje FreeBSD. Nova različica NFS dodaja podporo za funkcije posix_fadvise, posix_fallocate, načine SEEKHOLE/SEEKDATA v lseek, delovanje lokalnega kopiranja delov datoteke na strežnik (brez prenosa na odjemalca);
  • Strojna podpora
    • Začel se je projekt za izboljšanje zmogljivosti FreeBSD na prenosnikih. Prva naprava, ki je bila revidirana glede podpore strojne opreme v FreeBSD, je bil prenosni računalnik Lenovo X1 Carbon sedme generacije;
    • CheriBSD, razcep FreeBSD za raziskovalno arhitekturo procesorjev CHERI (Capability Hardware Enhanced RISC Instructions), posodobljen za podporo prihajajočemu procesorju ARM Morello, ki bo podpiral sistem za nadzor dostopa do pomnilnika CHERI, ki temelji na varnostnem modelu zasnove Capsicum. Čip Morello načrtujejo izid leta 2021. Razvijalci CheriBSD še naprej spremljajo tudi razvoj referenčnega prototipa CHERI, ki temelji na arhitekturi MIPS;
    • Razširjena podpora za čipe RockChip RK3399, ki se uporabljajo v ploščah RockPro64 in NanoPC-T4. Najpomembnejša izboljšava je bila podpora za eMMC in razvoj novega gonilnika za krmilnik eMMC, ki se uporablja na plošči;
    • Nadaljuje se delo za implementacijo podpore za ARM64 SoC Broadcom BCM5871X s procesorji ARMv8 Cortex-A57, namenjeno uporabi v usmerjevalnikih, prehodih in omrežnem shranjevanju. V obdobju poročanja
      Podpora za iProc PCIe je bila razširjena in dodana je bila možnost uporabe kriptografskih operacij strojne opreme za pospešitev IPsec.
      Integracija kode v vejo HEAD se pričakuje v četrtem četrtletju;

    • Pri razvoju vrat FreeBSD za platformo powerpc64 je bil dosežen pomemben napredek. Poudarek je na zagotavljanju kakovostne zmogljivosti na sistemih s procesorji IBM POWER8 in POWER9, vendar po želji podpira delovanje na starejših Apple Power Mac, x500 in Amiga A1222. Veja powerpc*/12 se še naprej dobavlja z gcc 4.2.1, veja powerpc*/13 pa bo kmalu preseljena na llvm90. Od 33306 vrat je 30514 uspešno sestavljenih;
    • Prenos FreeBSD se nadaljuje za 64-bitni SoC NXP LS1046A, ki temelji na procesorju ARMv8 Cortex-A72 z integriranim motorjem za pospeševanje obdelave omrežnih paketov, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 in USB 3.0. V obdobju poročanja je bila implementirana podpora za omrežni vmesnik USB 3.0, SD/MMC, I2C, DPAA in GPIO. Obstajajo načrti za podporo QSPI in optimizacijo delovanja omrežnega vmesnika. Zaključek del in vključitev v podružnico HEAD je predviden v 4. kvartalu 2019;
    • Gonilnik ena je bil posodobljen za podporo druge generacije omrežnih adapterjev ENAv2 (Elastic Network Adapter), ki se uporabljajo v infrastrukturi Elastic Compute Cloud (EC2) za organizacijo komunikacije med vozlišči EC2 pri hitrostih do 25 Gb/s. Podpora za NETMAP je bila dodana in preizkušena gonilniku ena, postavitev pomnilnika pa je bila prilagojena za omogočanje načina LLQ v okoljih Amazon EC2 A1;
  • Aplikacije in sistem vrat
    • Posodobljene komponente grafičnih skladov in vrata, povezana z xorg. Vrata, ki uporabljajo USE_XORG in XORG_CAT, so bila premaknjena v ogrodje USES, namesto da kličejo bsd.xorg.mk prek bsd.port.mk. Takšna vrata zdaj vključujejo zastavico "USES=xorg" v svoje make datoteke. Funkcionalnost XORG_CAT je bila ločena od bsd.xorg.mk in je zdaj omogočena z zastavico "USES=xorg-cat". Dodana orodja za neposredno generiranje vrat xorg iz repozitorija git
      freedesktop.org, ki na primer omogoča ustvarjanje vrat za še neizdane različice. V prihodnosti načrtujemo pripravo orodij za uporabo sistema za sestavljanje meson namesto autotools za gradnjo xorg portov.

      Opravljeno je bilo delo za čiščenje starih vrat xorg, povezanih s komponentami, ki niso več podprte, na primer vrata x11/libXp so bila odstranjena, vrata x11/Xxf86misc, x11-fonts/libXfontcache in graphics/libGLw pa so bila opuščena ;

    • Opravljeno je bilo delo za izboljšanje podpore za Javo 11 in novejše izdaje v FreeBSD, kot tudi za prenos nekaterih sprememb v vejo Jave 8. Po uvedbi podpore za nove funkcije Jave 11, kot so Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger za FreeBSD, DTrace, Javac Server, Java Sound in SCTP se je delo preusmerilo na zagotavljanje uspešnosti vseh testov združljivosti. Število neuspehov pri opravljanju testov se je zmanjšalo s 50 na 2;
    • Namizje KDE Plasma, ogrodja KDE, aplikacije KDE in Qt so posodobljeni in posodobljeni na najnovejše izdaje;
    • Vrata z namizjem Xfce posodobljena za izdajo 4.14;
    • Drevo vrat FreeBSD je preseglo 38000 vrat, število nezaprtih PR je nekaj več kot 2000, od tega 400 PR še ni rešenih. V obdobju poročanja je 7340 razvijalcev naredilo 169 sprememb. Dva nova udeleženca (Santhosh Raju in Dmitri Goutnik) sta prejela pravice pošiljatelja. Objavljena je bila nova izdaja upravitelja paketov pkg 1.12 s podporo za prekrivanja v drevesu vrat in čiščenjem bsd.sites.mk. Med pomembnimi posodobitvami različic v vratih so: 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 nadaljuje ClonOS, razvoju specializirana distribucija za postavitev virtualne strežniške infrastrukture. Po nalogah, ki jih rešuje, ClonOS spominja na sisteme, kot so Proxmox, Triton (Joyent), OpenStack, OpenNebula in Amazon AWS, glavna razlika od katerih je uporaba FreeBSD ter možnost upravljanja, nameščanja in upravljanja FreeBSD Jail kontejnerjev in virtualna okolja, ki temeljijo na hipervizorjih Bhyve in Xen. Nedavne spremembe vključujejo podporo
      cloud-init za Linux/BSD VM in cloudbase-init za Windows VM, začetek prehoda na uporabo izvornih slik, uporaba Jenkins CI za preskušanje gradenj in novo skladišče pkg za namestitev
      ClonOS iz paketov.

Vir: opennet.ru

Dodaj komentar