Verslag over de ontwikkeling van het FreeBSD-project van juli tot september 2019. Belangrijke wijzigingen zijn onder meer:
- Algemene en systeemkwesties
- De Core team heeft in het algemeen goedgekeurd dat code die onder de BSD-licentie wordt geleverd, met een aanvullend gebruiksovereenkomst voor patenten (), maar de beslissing om elk component onder deze licentie op te nemen, moet afzonderlijk worden goedgekeurd;
- De eerste vergadering van de werkgroep die is opgericht voor de migratie van de bronteksten uit het gecentraliseerde versiebeheersysteem Subversion naar het gedecentraliseerde systeem Git heeft plaatsgevonden. De discussie over de haalbaarheid van de migratie gaat nog steeds door en in veel opzichten moeten er nog besluiten worden genomen (bijvoorbeeld hoe om te gaan met contrib/, of het nodig is om hashes in de huidige git-repository opnieuw te genereren en hoe de testing van commits het beste kan worden gerealiseerd);
- Vanuit NetBSD KCSAN-instrumentatie (Kernel Concurrency Sanitizer) geport, waarmee het ontstaan van racecondities tussen kernelthreads die op verschillende CPU's worden uitgevoerd, kan worden opgespoord;
- Er wordt gewerkt aan het gebruik van de ingebouwde assembler (IAS) in Clang in plaats van de assembler uit de GNU binutils;
- De infrastructuur van de Linux-emulatieomgeving (Linuxulator) is aangepast voor gebruik op de ARM64-architectuur. De systeemaanroep 'renameat2' is gerealiseerd. De tool strace is verbeterd voor het diagnosticeren van problemen met uitvoerbare bestanden van Linux die in de Linuxulator worden uitgevoerd. Het probleem met het optreden van fouten bij het linken van uitvoerbare bestanden met de recente glibc is opgelost. De ports met Linux-componenten voor Linuxulator zijn bijgewerkt naar CentOS 7.7;
- In het kader van het Google Summer of Code-programma hebben studenten met succes zes projecten uitgevoerd: er is een implementatie voorbereid van een uniforme (IPv4/IPv6) ping-tool, er zijn tools ontwikkeld voor het testen van firewalls en het opsporen van fouten in de kernel (Kernel sanitizer), een mac_ipacl-module voorgesteld, code geschreven voor het comprimeren van virtueel geheugen, en er is gewerkt aan het scheiden van het proces voor het bouwen van ports van de lokale installatie;
- Het project voor fuzzing-testing van de FreeBSD-kernel met behulp van het systeem . Gedurende de verslagperiode zijn met behulp van syzkaller meer dan tien fouten ontdekt en verholpen. Voor het draaien van syzkaller in virtuele machines op basis van bhyve is een aparte server toegewezen, en met behulp van
De syzbot heeft de controle van verschillende FreeBSD-subsystemen binnen de Google-infrastructuur geregeld. Er is een systeem opgezet om informatie over alle crashes naar de backtrace.io-service te sturen voor het vergemakkelijken van hun groepering en analyse; - Er wordt gewerkt aan de update van de zlib-implementatie op kernniveau.
De code gerelateerd aan compressie is vertaald van zlib 1.0.4, dat meer dan 20 jaar geleden is uitgebracht, naar de actuele codebase zlib 1.2.11. Om de toegang tot zlib in de kernel te uniformiseren, zijn de functies compress, compress2 en uncompress toegevoegd. De code die het PPP-protocol ondersteunt, afkomstig uit de netgraph-subsystemen, is overgezet naar de systeemimplementatie van zlib in plaats van de eigen versie van deze bibliotheek. Ook zijn de subsysteemkern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
if_mxge, bxe updated en ng_deflate overgezet naar de nieuwe zlib; - Er wordt een nieuwe kernelinterface ontwikkeld , die het mogelijk maakt om elementen in de sysctl-parameterdatabase, verwerkt in de vorm van MIB (Management Information Base), te vinden en informatie over objecten aan de gebruikersruimte door te geven.
- Beveiliging
- Er is een kernelmodule ontwikkeld , gebaseerd op het TrustedBSD MAC Framework, dat een toegangsbeheersysteem voor de netwerkinstellingen in jail-omgevingen implementeert. Bijvoorbeeld, met behulp van mac_ipacl kan de beheerder van het hostsysteem de root-gebruiker in de jail-omgeving verbieden om IP-adressen of subnetparameters voor bepaalde netwerkinterfaces te wijzigen of in te stellen. Het voorgestelde systeem van mandaattoegangsbeheer kan IP-adres- en subnetlijsten voor Jail definiëren, de instelling van bepaalde IP's en subnets in Jail verbieden of de wijziging van parameters beperken tot bepaalde netwerkinterfaces;
- Het bedrijf Intel heeft het project de poort van de softwarestack (Trusted Platform Module) voor interactie met een chip voor veilige berekeningen, die doorgaans wordt gebruikt voor geverifieerde opstart van firmware en besturingssysteembootloaders. De stackcomponenten worden gepresenteerd in de vorm van ports security/tpm2-tss, security/tpm2-tools en security/tpm2-abrmd. De port tpm2-tss omvat bibliotheken voor het gebruik van de TPM2 API, tpm2-tools biedt commandoregelhulpmiddelen voor het uitvoeren van operaties met TPM, en tpm2-abrmd bevat een achtergrondproces met de implementatie van de components TPM Access Broker en Resource Manager, die verzoeken van verschillende TPM-gebruikers multiplexen naar één apparaat. Naast geverifieerde opstart kan TPM onder FreeBSD ook worden gebruikt om de beveiliging van Strongswan IPsec, SSH en TLS te versterken door cryptografische operaties op een aparte chip uit te voeren;
- De kernel voor de amd64-architectuur is aangepast voor opstart met behulp van de W^X (write XOR execute) beveiligingstechniek, wat inhoudt dat geheugens pagina's niet tegelijkertijd toegankelijk kunnen zijn voor schrijven en uitvoering (de kernel kan nu opstarten met uitvoerbare geheugens pagina's waarvoor schrijven is verboden). De nieuwe beveiligingsmethode voor de kernel is opgenomen in de HEAD-tak en zal deel uitmaken van de releases FreeBSD 13.0 en 12.2;
- Voor de systeemaanroepen mmap en mprotect macro PROT_MAX(), dat het mogelijk maakt om de toegestane set van toegangsbeperkingsvlaggen (PROT_READ, PROT_WRITE, PROT_EXEC) bij verdere wijziging te bepalen. Met PROT_MAX() kan een ontwikkelaar het vertalen van een geheugenadres naar de uitvoerbare categorie verbieden of geheugen aanvragen dat geen uitvoering toestaat, maar later kan worden omgezet naar uitvoerbaar geheugen. Bijvoorbeeld, een geheugenadres kan alleen voor schrijfdoeleinden worden geopend tijdens dynamische linking of JIT-codegeneratie, maar na het beëindigen van het schrijven kan het worden beperkt tot alleen lezen en uitvoering, en in het geval van compromittering kan de aanvaller geen schrijven voor dat geheugenblok toestaan. Naast PROT_MAX() is ook sysctl vm.imply_prot_max geïmplementeerd, waarbij de set toegestane vlaggen wordt bepaald op basis van de oorspronkelijke parameters van de eerste aanroep van mmap;
- Om de bescherming tegen kwetsbaarheden te versterken, is naast de techniek van adresruimte-randomisatie (ASLR) een mechanisme voor het randomiseren van de verschuivingen van pointers voorgesteld. Dit betreft pointers die naar de aanroepstack verwijzen en structuren in de stack bevatten met informatie over de omgeving, opstartparameters en gegevens voor uitvoerbare bestanden in ELF-formaat;
- Er is gewerkt aan het verwijderen van de onveilige functie gets uit libc (vanaf de C11-standaard is deze functie uit de specificatie geschrapt) en aanpassingen aan poorten die deze functie nog gebruiken. De wijziging wordt voorgesteld voor FreeBSD 13.0;
- Er is een experimenteel project gestart om hulpmiddelen voor de orkestratie van jail-omgevingen te creëren op basis van het framework voor het maken en exporteren van beelden, geïmplementeerd naar analogie van Docker, en de driver , die een interface biedt voor het dynamisch starten van applicaties in een jail-omgeving. Het voorgestelde model maakt het mogelijk om de processen voor het creëren van jail-omgevingen en het implementeren van applicaties daarin te scheiden. Een van de doelstellingen van het project is het bieden van een middel om jail-omgevingen te manipuleren als containers in Docker-stijl;
- Opslag- en bestandssystemen
- Van NetBSD is de ondersteuning voor het bestandssysteem FAT (msdosfs) overgebracht naar de tool «makefs» . De voorbereide wijzigingen maken het mogelijk om FS-images met FAT te creëren zonder gebruik te maken van de md-driver en zonder root-rechten;
- De herontwikkeling van de FUSE (File system in USErspace) subsystemen driver is voltooid, waardoor het mogelijk is om bestandssystemen in de gebruikersruimte te implementeren. De oorspronkelijk geleverde driver bevatte veel fouten en was gebaseerd op versie FUSE 7.8, die 11 jaar geleden werd uitgebracht. In het kader van het project voor de modernisering van de driver is ondersteuning voor het FUSE 7.23 protocol geïmplementeerd, zijn er code toegevoegd voor controle van toegangsrechten aan de kernelzijde ('-o default_permissions'), zijn er oproepen toegevoegd voor VOP_MKNOD, VOP_BMAP en VOP_ADVLOCK, is de mogelijkheid om FUSE-operaties te onderbreken gerealiseerd, is er ondersteuning voor ongebenoemde kanalen en Unix-sockets in fusefs toegevoegd, is het gebruik van kqueue voor /dev/fuse mogelijk gemaakt, is het bijwerken van montagetypes via 'mount -u' toegestaan, is de export van fusefs via NFS geïmplementeerd, is rekening gehouden met RLIMIT_FSIZE, zijn de vlaggen FOPEN_KEEP_CACHE en FUSE_ASYNC_READ toegevoegd, zijn er aanzienlijke prestatieoptimalisaties doorgevoerd en is de cache-organisatie verbeterd. De nieuwe driver is opgenomen in de head- en stable/12-takken (is deel van FreeBSD 12.1);
- Het werk aan de implementatie van NFSv4.2 (RFC-7862) voor FreeBSD is bijna voltooid. In de rapportageperiode was er veel aandacht voor testen. Tests ter controle van de compatibiliteit met de implementatie uit Linux zijn afgerond, maar de controle van de werking van de pNFS-server met NFSv4.2 is nog gaande. In algemene zin wordt de code al als klaar voor integratie in de FreeBSD head/current takken beschouwd. In de nieuwe versie van NFS is ondersteuning voor de functies posix_fadvise, posix_fallocate, SEEKHOLE/SEEKDATA modi in lseek, en lokale kopieeroperaties van bestandshalen op de server (zonder overdracht naar de klant) toegevoegd;
- Ondersteuning voor hardware
- Er is een project gestart om de werking van FreeBSD op laptops te verbeteren. De eerste apparaten voor de audit van de hardwareondersteuning in FreeBSD was de Lenovo X1 Carbon van de zevende generatie;
- CheriBSD, een afgeleide van FreeBSD voor een experimentele processorarchitectuur (Capability Hardware Enhanced RISC Instructions) is bijgewerkt ter ondersteuning van de aanstaande ARM Morello processor, die het CHERI-geheugenbeheer systeem zal ondersteunen, gebaseerd op het beveiligingsmodel van het Capsicum-project. De Morello-chip in 2021 uit te brengen. De ontwikkelaars van CheriBSD houden ook de ontwikkeling van het referentieprototype van CHERI op basis van de MIPS-architectuur in de gaten;
- De ondersteuning voor RockChip RK3399-chips, die worden gebruikt in de RockPro64- en NanoPC-T4-borden, is uitgebreid. De belangrijkste verbetering is de ondersteuning voor eMMC en de ontwikkeling van een nieuwe driver voor de gebruikte eMMC-controller op het bord.
- De werkzaamheden aan de ondersteuning van de ARM64 SoC Broadcom BCM5871X met ARMv8 Cortex-A57-processors, gericht op gebruik in routers, gateways en netopslag, zijn voortgezet. In de verslagperiode
is de ondersteuning voor iProc PCIe uitgebreid en is de mogelijkheid tot hardwarematige cryptografische bewerkingen toegevoegd ter versnelling van IPsec.
De integratie van de code in de HEAD-tak wordt verwacht in het vierde kwartaal; - Er zijn significante vooruitgangen geboekt in de ontwikkeling van de FreeBSD-port voor het powerpc64-platform. De focus ligt op het garanderen van een goede werking op systemen met IBM POWER8 en POWER9-processors, maar optioneel wordt ook ondersteuning geboden voor oudere Apple Power Mac, x500 en Amiga A1222. De powerpc*/12-tak blijft worden geleverd met gcc 4.2.1, terwijl de powerpc*/13-tak binnenkort zal worden overgezet naar llvm90. Van de 33306 poorten kunnen er 30514 succesvol worden gebouwd;
- De portering van FreeBSD naar de 64-bits SoC NXP LS1046A op basis van de ARMv8 Cortex-A72-processor met een geïntegreerde netwerkverwerkingsversneller, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 en USB 3.0 is voortgezet. In de verslagperiode is ondersteuning voor USB 3.0, SD/MMC, I2C, het netwerkinterface DPAA en GPIO gerealiseerd. In de plannen staat ondersteuning voor QSPI en het optimaliseren van de netwerkinterfaceprestaties. De voltooiing van het werk en opname in de HEAD-tak wordt verwacht in het vierde kwartaal van 2019;
- De ena-driver is bijgewerkt met ondersteuning voor de tweede generatie ENAv2 (Elastic Network Adapter) netwerkadapters, die worden gebruikt in de Elastic Compute Cloud (EC2) infrastructuur voor communicatie tussen EC2-knooppunten met snelheden tot 25 Gb/s. In de ena-driver is ondersteuning voor NETMAP toegevoegd en getest, en is de geheugenlay-out aangepast om LLQ-modus in Amazon EC2 A1-omgevingen in te schakelen;
- Toepassingen en het poortsysteem
- De componenten van de grafische stack en de poorten gerelateerd aan xorg zijn bijgewerkt. Poorten die USE_XORG en XORG_CAT gebruiken, zijn overgezet naar het USES-framework in plaats van bsd.xorg.mk via bsd.port.mk aan te roepen. Dergelijke poorten bevatten nu de vlag "USES=xorg" in make-bestanden. De functionaliteit van XORG_CAT is uit bsd.xorg.mk geëxtraheerd en wordt nu geactiveerd door de vlag "USES=xorg-cat". Er is een toolkit toegevoegd voor het rechtstreeks bouwen van xorg-poorten vanuit de git-repository.
freedesktop.org, wat bijvoorbeeld het mogelijk maakt om ports te creëren voor nog niet uitgebracht versies. In de toekomst is het de bedoeling om gereedschap voor te bereiden voor het gebruik van het build-systeem meson in plaats van autotools voor het bouwen van ports xorg.Er is gewerkt aan het opruimen van oude ports xorg, die gekoppeld zijn aan al niet-ondersteunde componenten, zoals het verwijderen van de port x11/libXp, terwijl de ports x11/Xxf86misc, x11-fonts/libXfontcache en graphics/libGLw zijn gemigreerd naar verouderd.
- Er is gewerkt aan het verbeteren van de ondersteuning voor Java 11 en nieuwere uitgaven in FreeBSD, evenals aan het porteren van enkele wijzigingen naar de Java 8-tak. Nadat ondersteuning voor nieuwe functies van Java 11 zoals Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound en SCTP was geïmplementeerd in FreeBSD, werd de focus verlegd naar het garanderen van compatibiliteitstests. Het aantal testfouten is verminderd van 50 naar 2.
- De desktop KDE Plasma, KDE Frameworks, KDE Applications en Qt zijn bijgewerkt en onderhouden met de meest recente uitgaven.
- Ports met de desktop Xfce zijn bijgewerkt naar de release. ;
- De portboom van FreeBSD heeft de mijlpaal van 38000 ports overschreden, het aantal openstaande PR's ligt iets boven de 2000, waarvan 400 PR's nog niet zijn behandeld. In de rapportageperiode zijn er 7340 wijzigingen aangebracht door 169 ontwikkelaars. Twee nieuwe deelnemers (Santhosh Raju en Dmitri Goutnik) hebben commitrechten gekregen. Een nieuwe release van de package manager pkg 1.12 is gepubliceerd met ondersteuning voor overlays in de portboom en opschoning van bsd.sites.mk. Onder de significante versies in de ports zijn de volgende vermeld: 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 ontwikkeling van het project gaat door. , is een gespecialiseerde distributie voor het implementeren van virtuele serverinfrastructuur. Wat betreft de op te lossen taken lijkt ClonOS op systemen zoals Proxmox, Triton (Joyent), OpenStack, OpenNebula en Amazon AWS, het belangrijkste verschil is het gebruik van FreeBSD en de mogelijkheid om Jail-containers van FreeBSD en virtuele omgevingen op basis van de hypervisors Bhyve en Xen te beheren, te implementeren en te controleren. Recent is ondersteuning toegevoegd voor
cloud-init voor Linux/BSD VM en cloudbase-init voor Windows VM, de overgang naar het gebruik van eigen beelden begonnen, het gebruik van Jenkins CI voor tests van builds en een nieuwe pkg-repository voor installatie.
ClonOS uit pakketten.
- De componenten van de grafische stack en de poorten gerelateerd aan xorg zijn bijgewerkt. Poorten die USE_XORG en XORG_CAT gebruiken, zijn overgezet naar het USES-framework in plaats van bsd.xorg.mk via bsd.port.mk aan te roepen. Dergelijke poorten bevatten nu de vlag "USES=xorg" in make-bestanden. De functionaliteit van XORG_CAT is uit bsd.xorg.mk geëxtraheerd en wordt nu geactiveerd door de vlag "USES=xorg-cat". Er is een toolkit toegevoegd voor het rechtstreeks bouwen van xorg-poorten vanuit de git-repository.
Bron: opennet.ru
