FreeBSD-voortgangsrapport voor Q2019 XNUMX

gepubliceerd rapport over de ontwikkeling van het FreeBSD-project van juli tot september 2019. Onder de veranderingen kunnen we het volgende opmerken:

  • Algemene en systeemvragen
    • Het kernteam heeft over het algemeen de mogelijkheid goedgekeurd om code op te nemen in het systeem dat wordt gedistribueerd onder de BSD-licentie met een aanvullende patentovereenkomst (BSD+Patent), maar de beslissing om elk onderdeel in het systeem op te nemen onder deze licentie moet afzonderlijk worden goedgekeurd;
    • De eerste bijeenkomst van de werkgroep die was opgericht om de migratie van broncodes van het gecentraliseerde broncontrolesysteem Subversion naar het gedecentraliseerde systeem Git uit te voeren, vond plaats. De discussie over de haalbaarheid van migratie is nog steeds aan de gang en beslissingen over veel kwesties moeten nog worden ontwikkeld (bijvoorbeeld wat te doen met contrib/, of het nodig is om hashes in de huidige git-repository te regenereren en hoe het testen van verbindt);
    • Van NetBSD geporteerd KCSAN-toolkit (Kernel Concurrency Sanitizer), waarmee u race-omstandigheden kunt detecteren tussen kernelthreads die op verschillende CPU's draaien;
    • Er wordt gewerkt aan het gebruik van Clang's ingebouwde assembler (IAS) in plaats van de GNU binutils assembler;
    • De emulatie-infrastructuur voor de Linux-omgeving (Linuxulator) is aangepast om te werken op de ARM64-architectuur. Implementeerde de “renameat2” systeemaanroep. Het strace-hulpprogramma is verbeterd om problemen te diagnosticeren in uitvoerbare Linux-bestanden die in de Linuxulator worden uitgevoerd. Er is een probleem opgelost met crashes bij het koppelen van uitvoerbare bestanden met nieuwe glibc. Poorten met Linux-componenten voor Linuxulator zijn bijgewerkt naar CentOS 7.7;
    • Als onderdeel van het Google Summer of Code-programma voltooiden studenten met succes zes projecten: er werd een implementatie van een uniform (IPv4/IPv6) ping-hulpprogramma voorbereid, er werden tools ontwikkeld voor het testen van firewalls en het identificeren van fouten in de kernel (Kernel sanitizer), de mac_ipacl Er werd een module voorgesteld, er werd code geschreven voor compressie van virtueel geheugen en er werd gewerkt om het poortbouwproces te scheiden van de lokale installatie;
    • Het project voor het fuzzing-testen van de FreeBSD-kernel met behulp van het systeem blijft zich ontwikkelen syzkaller. Tijdens de rapportageperiode zijn met behulp van syzkaller ruim tien fouten geïdentificeerd en geëlimineerd. Om syzkaller uit te voeren in virtuele machines op basis van bhyve, wordt een aparte server toegewezen en gebruikt
      syzbot heeft het testen van verschillende FreeBSD-subsystemen in de Google-infrastructuur opgezet. Organiseerde de overdracht van informatie over alle crashes naar de backtrace.io-service om de groepering en analyse ervan te vereenvoudigen;

    • Er wordt gewerkt aan het bijwerken van de zlib-implementatie op kernelniveau.
      Compressiegerelateerde code is gemigreerd van zlib 1.0.4, meer dan 20 jaar geleden uitgebracht, naar de huidige codebase van zlib 1.2.11. Om de toegang tot zlib te verenigen, zijn de functies compress, compress2 en uncompress aan de kernel toegevoegd. De code die de werking van het PPP-protocol vanuit het netgraph-subsysteem garandeert, is overgebracht naar de systeemimplementatie van zlib, in plaats van de eigen editie van deze bibliotheek. De kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor, subsystemen zijn ook overgebracht naar de nieuwe zlib.
      if_mxge, bxe bijgewerkt en ng_deflate;

    • Er wordt een nieuwe kernelinterface ontwikkeld systeeminfo, waarmee u elementen in de sysctl-parameterdatabase kunt vinden, verwerkt in de vorm van een MIB (Management Information Base), en informatie over objecten naar de gebruikersruimte kunt overbrengen.
  • veiligheid
    • Kernelmodule ontwikkeld mac_ipacl, gebaseerd op het TrustedBSD MAC Framework en met implementatie van een toegangscontrolesysteem voor netwerkstackinstellingen voor gevangenisomgevingen. Met mac_ipacl kan een hostsysteembeheerder bijvoorbeeld voorkomen dat de rootgebruiker in een gevangenisomgeving IP-adressen of subnetinstellingen voor bepaalde netwerkinterfaces wijzigt of instelt. Voorgesteld verplicht toegangscontrolesysteem laat lijsten instellen met IP-adressen en subnetten die zijn toegestaan ​​voor de gevangenis, de installatie van bepaalde IP's en subnetten in de gevangenis verbieden, of het wijzigen van parameters beperken tot alleen bepaalde netwerkinterfaces;
    • Intel schonk een softwarestackpoort aan het project TPM 2.0 (Trusted Platform Module) om te communiceren met de beveiligde computerchip, die meestal wordt gebruikt voor het geverifieerd laden van firmware en de bootloader van het besturingssysteem. De stapelcomponenten worden gepresenteerd in de vorm van ports security/tpm2-tss, security/tpm2-tools en security/tpm2-abrmd. De tpm2-tss-poort bevat bibliotheken voor het gebruik van de TPM2 API, tpm2-tools biedt opdrachtregelhulpprogramma's voor het uitvoeren van TPM-bewerkingen, en tpm2-abrmd bevat een achtergrondprocesimplementatie van de TPM Access Broker- en Resource Manager-componenten die verzoeken van verschillende TPM-gebruikers multiplexen naar één enkel apparaat. Naast het geverifieerd opstarten op FreeBSD kan TPM worden gebruikt om de beveiliging van Strongswan IPsec, SSH en TLS te verbeteren door cryptografische bewerkingen op een aparte chip uit te voeren;
    • De kernel voor de amd64-architectuur is aangepast om op te starten met behulp van de W^X-beveiligingstechniek (write XOR execute), wat betekent dat geheugenpagina's niet tegelijkertijd toegankelijk zijn voor schrijven en uitvoeren (de kernel kan nu worden geladen met behulp van uitvoerbare geheugenpagina's waarvoor schrijven is verboden). De nieuwe kernelbeschermingsmethode is opgenomen in de HEAD-branch en zal worden opgenomen in de FreeBSD 13.0- en 12.2-releases;
    • Voor mmap- en mprotect-systeemoproepen geïmplementeerd macro PROT_MAX(), waarmee u de set toegangsbeperkingsvlaggen kunt bepalen die zijn toegestaan ​​voor verdere wijzigingen (PROT_READ, PROT_WRITE, PROT_EXEC). Met behulp van PROT_MAX() kan een ontwikkelaar de overdracht van een geheugengebied naar de uitvoerbare categorie verbieden of geheugen aanvragen dat geen uitvoering toestaat, maar later kan worden geconverteerd naar een uitvoerbaar bestand. Een geheugengebied kan bijvoorbeeld alleen openstaan ​​voor schrijven gedurende de duur van dynamische koppeling of het genereren van JIT-code, maar zodra het schrijven is voltooid, kan het alleen worden gelezen en uitgevoerd, en in de toekomst kan de aanvaller, als hij wordt gecompromitteerd, zal het schrijven voor dat geheugenblok niet mogelijk maken. Naast PROT_MAX() is ook sysctl vm.imply_prot_max geïmplementeerd, dat, indien geactiveerd, de set geldige vlaggen bepaalt op basis van de initiële parameters van de eerste aanroep naar mmap;
    • Om de bescherming tegen misbruik van kwetsbaarheden te verbeteren, naast de adresruimterandomisatietechniek (ASLR), een mechanisme voor het willekeurig maken van de offsets van pointers die het initiële stapelframe en de op de stapel geplaatste structuren aanspreken met informatie over de omgeving, programmastartparameters en gegevens voor uitvoerbare afbeeldingen in ELF-formaat wordt voorgesteld;
    • Er is gewerkt aan het verwijderen van de unsafe get-functie uit libc (vanaf de C11-standaard is deze functie uitgesloten van de specificatie) en aan het corrigeren van de poorten die deze functie nog steeds gebruiken. Het is de bedoeling dat de verandering wordt aangeboden in FreeBSD 13.0;
    • Er is een experimenteel project gelanceerd om tools te creëren voor het orkestreren van gevangenisomgevingen op basis van het raamwerk kan voor het maken en exporteren van afbeeldingen, vergelijkbaar met Docker geïmplementeerd, en een stuurprogramma nomade, dat een interface biedt voor het dynamisch starten van applicaties in een gevangenisomgeving. Het voorgestelde model stelt ons in staat de processen van het creëren van gevangenisomgevingen en het inzetten van applicaties daarin te scheiden. Een van de doelstellingen van het project is het bieden van een manier om gevangenissen te manipuleren als containers in Docker-stijl;
  • Opslag- en bestandssystemen
    • Van NetBSD naar het hulpprogramma "makefs". verhuisd Ondersteuning voor FAT-bestandssysteem (msdosfs). Met de voorbereide wijzigingen kunt u FS-images met FAT maken zonder het MD-stuurprogramma te gebruiken en zonder root-autoriteit;
    • De herwerking van het FUSE-subsysteemstuurprogramma (File system in USErspace) is voltooid, waardoor bestandssysteemimplementaties in de gebruikersruimte kunnen worden gemaakt. De oorspronkelijk geleverde driver bevatte veel bugs en was gebaseerd op FUSE 7.8, die 11 jaar geleden werd uitgebracht. Als onderdeel van het drivermoderniseringsproject is ondersteuning voor het FUSE 7.23-protocol geïmplementeerd, is code voor het controleren van toegangsrechten aan de kernelzijde (“-o default_permissions”) toegevoegd, zijn oproepen naar VOP_MKNOD, VOP_BMAP en VOP_ADVLOCK toegevoegd, zijn de Er is de mogelijkheid geboden om FUSE-bewerkingen te onderbreken, er is ondersteuning voor naamloze pipelines en Unix-sockets toegevoegd in fusefs, het is mogelijk geworden om kqueue te gebruiken voor /dev/fuse, het was mogelijk om mount-parameters bij te werken via “mount -u”, ondersteuning toegevoegd voor het exporteren van fusefs via NFS, RLIMIT_FSIZE-boekhouding geïmplementeerd, de vlaggen FOPEN_KEEP_CACHE en FUSE_ASYNC_READ toegevoegd, aanzienlijke prestatie-optimalisaties doorgevoerd en de caching-organisatie verbeterd. Het nieuwe stuurprogramma is opgenomen in de branches head en stable/12 (inbegrepen in FreeBSD 12.1);
    • De implementatie van NFSv4.2 (RFC-7862) voor FreeBSD is bijna voltooid. Tijdens de verslagperiode lag de nadruk vooral op testen. Er zijn tests voltooid om de compatibiliteit met de Linux-implementatie te verifiëren, maar het testen van de pNFS-server met NFSv4.2 is nog steeds aan de gang. Over het algemeen wordt de code al als gereed beschouwd voor integratie in de hoofd-/huidige branches van FreeBSD. De nieuwe versie van NFS voegt ondersteuning toe voor de functies posix_fadvise, posix_fallocate, SEEKHOLE/SEEKDATA-modi in lseek, de werking van het lokaal kopiëren van delen van een bestand op de server (zonder overdracht naar de client);
  • Hardware-ondersteuning
    • Er is een project gelanceerd om de prestaties van FreeBSD op laptops te verbeteren. Het eerste apparaat dat werd gecontroleerd op hardwareondersteuning in FreeBSD was de Lenovo X1 Carbon-laptop van de zevende generatie;
    • CheriBSD, een afsplitsing van FreeBSD voor onderzoeksprocessorarchitectuur CHERI (Capability Hardware Enhanced RISC Instructions), bijgewerkt ter ondersteuning van de aankomende ARM Morello-processor, die het CHERI-geheugentoegangscontrolesysteem zal ondersteunen op basis van het beveiligingsmodel van het Capsicum-ontwerp. Morello-chip zijn aan het plannen uitgave in 2021. De CheriBSD-ontwikkelaars blijven ook de ontwikkeling van het CHERI-referentieprototype op basis van de MIPS-architectuur volgen;
    • Uitgebreide ondersteuning voor RockChip RK3399-chips die worden gebruikt in RockPro64- en NanoPC-T4-borden. De belangrijkste verbetering was de ondersteuning voor eMMC en de ontwikkeling van een nieuwe driver voor de eMMC-controller die op het bord wordt gebruikt;
    • Er wordt verder gewerkt aan de implementatie van ondersteuning voor ARM64 SoC Broadcom BCM5871X met ARMv8 Cortex-A57-processors, gericht op gebruik in routers, gateways en netwerkopslag. Tijdens de verslagperiode
      iProc PCIe-ondersteuning is uitgebreid en de mogelijkheid om hardwarecryptografische bewerkingen te gebruiken om IPsec te versnellen is toegevoegd.
      Code-integratie in de HEAD-tak wordt verwacht in het vierde kwartaal;

    • Er zijn aanzienlijke vorderingen gemaakt bij de ontwikkeling van een FreeBSD-poort voor het powerpc64-platform. De focus ligt op het leveren van kwaliteitsprestaties op systemen met IBM POWER8- en POWER9-processors, maar ondersteunt optioneel de werking op oudere Apple Power Macs, x500 en Amiga A1222. De powerpc*/12 branch wordt nog steeds geleverd met gcc 4.2.1, en de powerpc*/13 branch zal binnenkort worden gemigreerd naar llvm90. Van de 33306 poorten zijn er 30514 met succes geassembleerd;
    • FreeBSD-porting gaat door voor de 64-bit SoC NXP LS1046A, gebaseerd op de ARMv8 Cortex-A72-processor met een geïntegreerde versnellingsengine voor netwerkpakketverwerking, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 en USB 3.0. Tijdens de rapportageperiode werd ondersteuning voor USB 3.0-, SD/MMC-, I2C-, DPAA- en GPIO-netwerkinterfaces geïmplementeerd. Er zijn plannen om QSPI te ondersteunen en de prestaties van de netwerkinterface te optimaliseren. De voltooiing van de werkzaamheden en opname in de HEAD-tak wordt verwacht in het 4e kwartaal van 2019;
    • Het ena-stuurprogramma is bijgewerkt ter ondersteuning van de tweede generatie ENAv2-netwerkadapters (Elastic Network Adapter) die worden gebruikt in de Elastic Compute Cloud (EC2)-infrastructuur om de communicatie tussen EC2-knooppunten te organiseren met snelheden tot 25 Gb/s. NETMAP-ondersteuning is toegevoegd en getest aan het ena-stuurprogramma, en de geheugenindeling is aangepast om de LLQ-modus in Amazon EC2 A1-omgevingen mogelijk te maken;
  • Applicaties en poortsysteem
    • Bijgewerkte componenten van de grafische stapel en xorg-gerelateerde poorten. Poorten die USE_XORG en XORG_CAT gebruiken, zijn verplaatst naar het USES-framework in plaats van bsd.xorg.mk aan te roepen via bsd.port.mk. Dergelijke ports bevatten nu de vlag "USES=xorg" in hun makefiles. De XORG_CAT-functionaliteit is gescheiden van bsd.xorg.mk en wordt nu ingeschakeld door de vlag "USES=xorg-cat". Tools toegevoegd voor het direct genereren van xorg-poorten vanuit een git-repository
      freedesktop.org, waarmee u bijvoorbeeld ports kunt maken voor nog niet uitgebrachte versies. In de toekomst zijn we van plan tools te ontwikkelen voor het gebruik van het meson-assemblagesysteem in plaats van autotools om xorg-poorten te bouwen.

      Er is gewerkt aan het opruimen van oude xorg-poorten die zijn gekoppeld aan componenten die niet langer worden ondersteund. De x11/libXp-poort is bijvoorbeeld verwijderd en de x11/Xxf86misc-, x11-fonts/libXfontcache en graphics/libGLw-poorten zijn verouderd ;

    • Er is gewerkt aan het verbeteren van de ondersteuning voor Java 11 en nieuwere releases in FreeBSD, en aan het porten van enkele wijzigingen in de Java 8-branch. Nadat ondersteuning voor nieuwe Java 11-functies als Java Flight Recorder, HotSpot Serviceability Agent en HotSpot Debugger was geïmplementeerd voor FreeBSD, DTrace, Javac Server, Java Sound en SCTP werd het werk verschoven om ervoor te zorgen dat alle compatibiliteitstests slaagden. Het aantal mislukkingen bij het behalen van tests is teruggebracht van 50 naar 2;
    • Het KDE Plasma-bureaublad, KDE Frameworks, KDE Applications en Qt worden up-to-date gehouden en bijgewerkt naar de nieuwste releases;
    • Poorten met Xfce-desktop bijgewerkt voor release 4.14;
    • De FreeBSD-poortenboom heeft de 38000 poorten overschreden, het aantal niet-gesloten PR's is iets meer dan 2000, waarvan 400 PR's nog niet zijn opgelost. Tijdens de rapportageperiode zijn er 7340 wijzigingen aangebracht door 169 ontwikkelaars. Twee nieuwe deelnemers (Santhosh Raju en Dmitri Goutnik) ontvingen committerrechten. Er is een nieuwe release van de pakketbeheerder pkg 1.12 gepubliceerd, met ondersteuning voor overlays in de ports-boom en het opschonen van bsd.sites.mk. Tot de belangrijke versie-updates in de ports behoren: 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;
    • De projectontwikkeling gaat door ClonOS, ontwikkelen een gespecialiseerde distributie voor het inzetten van virtuele serverinfrastructuur. Wat betreft de taken die het oplost, lijkt ClonOS op systemen als Proxmox, Triton (Joyent), OpenStack, OpenNebula en Amazon AWS, met als belangrijkste verschil het gebruik van FreeBSD en de mogelijkheid om FreeBSD Jail-containers en -containers te beheren, implementeren en beheren. virtuele omgevingen gebaseerd op Bhyve- en Xen-hypervisors. Recente wijzigingen omvatten ondersteuning
      cloud-init voor Linux/BSD VM en cloudbase-init voor Windows VM, waarmee de overgang naar het gebruik van native images begint, Jenkins CI wordt gebruikt voor het testen van builds en een nieuwe pkg-repository voor installatie
      ClonOS uit pakketten.

Bron: opennet.ru

Voeg een reactie