FreeBSD Development Report Q2019 XNUMX

publiceras rapport om utvecklingen av FreeBSD-projektet från juli till september 2019. Bland förändringarna kan vi notera:

  • Allmänna och systemiska frågor
    • Kärnteamet har generellt godkänt möjligheten att inkludera kod i systemet som distribueras under BSD-licensen med ett ytterligare patentavtal (BSD+Patent), men beslutet att inkludera varje komponent i systemet under denna licens måste godkännas separat;
    • Det första mötet i den arbetsgrupp som skapades för att genomföra migreringen av källkoder från det centraliserade källkontrollsystemet Subversion till det decentraliserade systemet Git ägde rum. Diskussionen om genomförbarheten av migration pågår fortfarande och beslut i många frågor har ännu inte tagits fram (till exempel vad man ska göra med contrib/, om det är nödvändigt att återskapa hash i det nuvarande git-förrådet och hur man bäst implementerar testning av åtaganden);
    • Från NetBSD portad KCSAN (Kernel Concurrency Sanitizer) verktygslåda, som låter dig upptäcka rasförhållanden mellan kärntrådar som körs på olika processorer;
    • Arbete pågår för att använda Clangs inbyggda assembler (IAS) istället för GNU binutils assembler;
    • Linux-miljöemuleringsinfrastrukturen (Linuxulator) är anpassad för att fungera på ARM64-arkitekturen. Implementerade systemanropet "renameat2". Strace-verktyget har förbättrats för att diagnostisera problem i Linux-körbara filer som körs i Linuxulator. Problemet med krascher vid länkning av körbara filer med färsk glibc har lösts. Portar med Linux-komponenter för Linuxulator har uppdaterats till CentOS 7.7;
    • Som en del av programmet Google Summer of Code genomförde eleverna sex projekt framgångsrikt: en implementering av ett enhetligt (IPv4/IPv6) pingverktyg förbereddes, verktyg för att testa brandväggar och identifiera fel i kärnan (Kernel sanitizer) utvecklades, mac_ipacl modul föreslogs, kod skrevs för virtuell minneskomprimering och arbete har gjorts för att separera portbyggeprocessen från den lokala installationen;
    • Projektet för fuzzing-testning av FreeBSD-kärnan med hjälp av systemet fortsätter att utvecklas syzkaller. Under rapporteringsperioden har mer än tio fel identifierats och eliminerats med hjälp av syzkaller. För att köra syzkaller i virtuella maskiner baserade på bhyve, är en separat server dedikerad och använder
      syzbot har etablerat tester av olika FreeBSD-delsystem i Googles infrastruktur. Organiserade överföringen av information om alla krascher till backtrace.io-tjänsten för att förenkla deras gruppering och analys;

    • Arbete pågår för att uppdatera zlib-implementeringen på kärnnivå.
      Kompressionsrelaterad kod har migrerats från zlib 1.0.4, som släpptes för över 20 år sedan, till den nuvarande zlib 1.2.11-kodbasen. För att förena åtkomsten till zlib har funktionerna compress, compress2 och uncompress lagts till i kärnan. Koden som säkerställer driften av PPP-protokollet från netgraph-delsystemet har överförts för att använda systemimplementeringen av zlib, istället för sin egen utgåva av detta bibliotek. Subsystemen kern_ctf.c, opencryptodflate, geom_uzip, subr_compressor, har också överförts till det nya zlib.
      if_mxge, bxe uppdaterad och ng_deflate;

    • Ett nytt kärngränssnitt håller på att utvecklas sysctlinfo, som låter dig hitta element i sysctl-parameterdatabasen, bearbetade i form av en MIB (Management Information Base), och överföra information om objekt till användarutrymmet.
  • Безопасность
    • Kärnmodul utvecklad mac_ipacl, baserat på TrustedBSD MAC Framework och implementerar ett åtkomstkontrollsystem för nätverksstackinställningar för jail-miljöer. Till exempel, med hjälp av mac_ipacl, kan en värdsystemadministratör förhindra rotanvändaren i en jail-miljö från att ändra eller ställa in IP-adresser eller subnätinställningar för vissa nätverksgränssnitt. Föreslagit obligatoriskt passersystem det gör ställa in listor över IP-adresser och undernät som är tillåtna för Jail, förbjuda installation av vissa IP-adresser och subnät i Jail, eller begränsa ändring av parametrar endast för vissa nätverksgränssnitt;
    • Intel donerade en mjukvarustackport till projektet TPM 2.0 (Trusted Platform Module) för gränssnitt med det säkra datorchippet, som vanligtvis används för verifierad laddning av firmware och OS bootloader. Stackkomponenterna presenteras i form av ports security/tpm2-tss, security/tpm2-tools och security/tpm2-abrmd. tpm2-tss-porten innehåller bibliotek för att använda TPM2 API, tpm2-tools tillhandahåller kommandoradsverktyg för att utföra TPM-operationer och tpm2-abrmd innehåller en bakgrundsprocessimplementering av TPM Access Broker och Resource Manager-komponenterna som multiplexerar förfrågningar från olika TPM-användare till en enda enhet. Förutom verifierad uppstart på FreeBSD kan TPM användas för att förbättra säkerheten för Strongswan IPsec, SSH och TLS genom att utföra kryptografiska operationer på ett separat chip;
    • Kärnan för amd64-arkitekturen är anpassad för att starta upp med W^X (write XOR execute) skyddsteknik, vilket innebär att minnessidor inte kan nås samtidigt för skrivning och exekvering (kärnan kan nu laddas med körbara minnessidor för vilka skrivning Det är förbjudet att). Den nya kärnskyddsmetoden ingår i HEAD-grenen och kommer att inkluderas i FreeBSD 13.0 och 12.2-utgåvorna;
    • För mmap och mprotect systemsamtal genomförs makro PROT_MAX(), som låter dig bestämma uppsättningen av åtkomstbegränsningsflaggor som tillåts för ytterligare ändringar (PROT_READ, PROT_WRITE, PROT_EXEC). Med PROT_MAX() kan en utvecklare förbjuda överföringen av en minnesregion till den körbara kategorin eller begära minne som inte tillåter exekvering, men som senare kan konverteras till körbar. Till exempel kan en minnesregion vara öppen för skrivning endast under varaktigheten av dynamisk länkning eller generering av JIT-kod, men när skrivningen är klar är den begränsad till att endast läsa och köras, och i framtiden, om den äventyras, angriparen kommer inte att kunna aktivera skrivning för det minnesblocket. Förutom PROT_MAX() implementeras också sysctl vm.imply_prot_max, som när den är aktiverad bestämmer uppsättningen av giltiga flaggor baserat på de initiala parametrarna för det första anropet till mmap;
    • För att förbättra skyddet mot exploatering av sårbarheter, förutom adressrymdsrandomiseringstekniken (ASLR), en mekanism för randomisering av förskjutningar av pekare som adresserar den initiala stackramen och strukturer placerade på stacken med information om miljön, programstartparametrar och data för körbara bilder i ELF-format föreslås;
    • Arbete har gjorts för att ta bort funktionen unsafe gets från libc (med utgångspunkt från C11-standarden, denna funktion har exkluderats från specifikationen) och för att korrigera de portar som fortfarande använder denna funktion. Förändringen är planerad att erbjudas i FreeBSD 13.0;
    • Ett experimentellt projekt har inletts för att skapa verktyg för att orkestrera fängelsemiljöer utifrån ramverket kruka för att skapa och exportera bilder, implementerade liknande Docker, och en drivrutin nomad, som tillhandahåller ett gränssnitt för att dynamiskt starta applikationer i en fängelsemiljö. Den föreslagna modellen tillåter oss att separera processerna för att skapa fängelsemiljöer och distribuera applikationer i dem. Ett av målen med projektet är att tillhandahålla ett sätt att manipulera fängelser som containrar i Docker-stil;
  • Lagring och filsystem
    • Från NetBSD till "makefs"-verktyget rörd FAT-filsystemstöd (msdosfs). De förberedda ändringarna låter dig skapa FS-bilder med FAT utan att använda md-drivrutinen och utan rotbehörighet;
    • Omarbetningen av FUSE (Filsystem i USErspace) delsystemdrivrutinen har slutförts, vilket gör det möjligt att skapa filsystemimplementationer i användarutrymmet. Drivrutinen som ursprungligen skickades innehöll många buggar och var baserad på FUSE 7.8, som släpptes för 11 år sedan. Som en del av drivrutinsmoderniseringsprojektet har stöd för FUSE 7.23-protokollet implementerats, kod för kontroll av åtkomsträttigheter på kärnsidan ("-o default_permissions") har lagts till, anrop till VOP_MKNOD, VOP_BMAP och VOP_ADVLOCK har lagts till, möjlighet att avbryta FUSE-operationer har tillhandahållits, stöd för namnlösa rör och unix-sockets har lagts till i fusefs, det blev möjligt att använda kqueue för /dev/fuse, det var möjligt att uppdatera monteringsparametrar via "mount -u", lagt till stöd för export av fusefs via NFS, implementerade RLIMIT_FSIZE-redovisning, lade till FOPEN_KEEP_CACHE- och FUSE_ASYNC_READ-flaggorna, gjorde betydande prestandaoptimeringar och förbättrade cachningsorganisationen. Den nya drivrutinen ingår i grenarna head och stabil/12 (ingår i FreeBSD 12.1);
    • Implementeringen av NFSv4.2 (RFC-7862) för FreeBSD är nästan klar. Huvudfokus under rapportperioden låg på testning. Tester har slutförts för att verifiera kompatibiliteten med Linux-implementeringen, men testning av pNFS-servern med NFSv4.2 pågår fortfarande. I allmänhet anses koden redan vara klar för integration i FreeBSD-huvudet/aktuella grenar. Den nya versionen av NFS lägger till stöd för funktionerna posix_fadvise, posix_fallocate, SEEKHOLE/SEEKDATA-lägen i lseek, driften av lokal kopiering av delar av en fil på servern (utan överföring till klienten);
  • Hårdvarustöd
    • Ett projekt har lanserats för att förbättra prestandan för FreeBSD på bärbara datorer. Den första enheten som granskades för hårdvarustöd i FreeBSD var den sjunde generationen Lenovo X1 Carbon laptop;
    • CheriBSD, en gaffel av FreeBSD för forskningsprocessorarkitektur CHERI (Capability Hardware Enhanced RISC Instructions), uppdaterad för att stödja den kommande ARM Morello-processorn, som kommer att stödja CHERI-minnesåtkomstkontrollsystemet baserat på Capsicum-designens säkerhetsmodell. Morello chip planerar släpps 2021. CheriBSD-utvecklarna fortsätter också att övervaka utvecklingen av CHERI-referensprototypen baserad på MIPS-arkitekturen;
    • Utökat stöd för RockChip RK3399-chips som används i RockPro64- och NanoPC-T4-kort. Den mest betydande förbättringen var stödet för eMMC och utvecklingen av en ny drivrutin för eMMC-styrenheten som används på kortet;
    • Arbetet fortsätter med att implementera stöd för ARM64 SoC Broadcom BCM5871X med ARMv8 Cortex-A57-processorer, inriktade på användning i routrar, gateways och nätverkslagring. Under rapportperioden
      Stödet för iProc PCIe har utökats och möjligheten att använda kryptografiska funktioner för hårdvara för att snabba upp IPsec har lagts till.
      Kodintegration i HEAD-grenen förväntas under fjärde kvartalet;

    • Det har gjorts betydande framsteg i utvecklingen av en FreeBSD-port för powerpc64-plattformen. Fokus ligger på att tillhandahålla kvalitetsprestanda på system med IBM POWER8- och POWER9-processorer, men stöder valfritt drift på äldre Apple Power Mac-datorer, x500 och Amiga A1222. Powerpc*/12-grenen fortsätter att levereras med gcc 4.2.1, och powerpc*/13-grenen kommer snart att migreras till llvm90. Av 33306 portar har 30514 lyckats monteras;
    • FreeBSD-porteringen fortsätter för 64-bitars SoC NXP LS1046A baserad på ARMv8 Cortex-A72-processorn med en integrerad accelerationsmotor för nätverkspaketbearbetning, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 och USB 3.0. Under rapportperioden implementerades stöd för USB 3.0, SD/MMC, I2C, DPAA och GPIO nätverksgränssnitt. Det finns planer på att stödja QSPI och optimera prestanda för nätverksgränssnittet. Slutförande av arbete och inkludering i HEAD-grenen förväntas under 4:e kvartalet 2019;
    • Ena-drivrutinen har uppdaterats för att stödja den andra generationen av ENAv2 (Elastic Network Adapter) nätverkskort som används i Elastic Compute Cloud (EC2)-infrastrukturen för att organisera kommunikation mellan EC2-noder med hastigheter upp till 25 Gb/s. NETMAP-stöd har lagts till och testats för ena-drivrutinen, och minneslayouten har anpassats för att aktivera LLQ-läge i Amazon EC2 A1-miljöer;
  • Applikationer och hamnsystem
    • Uppdaterade grafikstackkomponenter och xorg-relaterade portar. Portar som använder USE_XORG och XORG_CAT har flyttats till USES-ramverket istället för att anropa bsd.xorg.mk via bsd.port.mk. Sådana portar inkluderar nu flaggan "USES=xorg" i sina makefiler. XORG_CAT-funktionen har separerats från bsd.xorg.mk och är nu aktiverad av flaggan "USES=xorg-cat". Lade till verktyg för att direkt generera xorg-portar från ett git-förråd
      freedesktop.org, som till exempel låter dig skapa portar för ännu inte släppta versioner. I framtiden planerar vi att förbereda verktyg för att använda meson-monteringssystemet istället för autotools för att bygga xorg-portar.

      Arbete har gjorts för att rensa upp gamla xorg-portar kopplade till komponenter som inte längre stöds, till exempel har x11/libXp-porten tagits bort och portarna x11/Xxf86misc, x11-fonts/libXfontcache och graphics/libGLw har utfasnat ;

    • Arbete har gjorts för att förbättra stödet för Java 11 och nyare utgåvor i FreeBSD, samt att portera några ändringar till Java 8-grenen. Efter stöd för nya Java 11-funktioner som Java Flight Recorder, HotSpot Serviceability Agent, implementerades HotSpot Debugger för FreeBSD , DTrace, Javac Server, Java Sound och SCTP gick arbetet över till att säkerställa att alla kompatibilitetstester klarade. Antalet misslyckanden vid godkända prov har reducerats från 50 till 2;
    • KDE Plasma-skrivbordet, KDE Frameworks, KDE Applications och Qt hålls uppdaterade och uppdaterade till de senaste utgåvorna;
    • Portar med Xfce-skrivbord uppdaterade till release 4.14;
    • FreeBSD-portsträdet har passerat 38000 2000 portar, antalet oavslutna PR är något över 400, varav 7340 PR har ännu inte lösts. Under rapportperioden gjordes 169 1.12 ändringar från 2.0.4 utvecklare. Två nya deltagare (Santhosh Raju och Dmitri Goutnik) fick committerrättigheter. En ny version av pakethanteraren pkg 9.0 har publicerats, med stöd för överlagringar i ports-trädet och rengöring av bsd.sites.mk. Bland de betydande versionsuppdateringarna i portarna är: Lazarus 5.30, LLVM 11, Perl2.6, PostgreSQL 69.0.1, Ruby 68.1.0, Firefox 76.0, Firefox-esr XNUMX, Chromium XNUMX;
    • Projektutvecklingen fortsätter ClonOS, utvecklande en specialiserad distribution för att distribuera virtuell serverinfrastruktur. När det gäller de uppgifter som det löser påminner ClonOS system som Proxmox, Triton (Joyent), OpenStack, OpenNebula och Amazon AWS, vars största skillnad är användningen av FreeBSD och förmågan att hantera, distribuera och hantera FreeBSD Jail-containrar och virtuella miljöer baserade på Bhyve och Xen hypervisorer. De senaste ändringarna inkluderar support
      cloud-init för Linux/BSD VM och cloudbase-init för Windows VM, börjar övergången till att använda inbyggda bilder, använder Jenkins CI för att testa builds och ett nytt pkg-lager för installation
      ClonOS från paket.

Källa: opennet.ru

Lägg en kommentar