Bericht über die Entwicklung von FreeBSD im dritten Quartal 2019

Veröffentlicht Bericht über die Entwicklung des FreeBSD-Projekts von Juli bis September 2019. Zu den Änderungen gehören:

  • Allgemeine und systembezogene Fragen
    • Das Kernteam hat im Allgemeinen die Möglichkeit genehmigt, Code, der unter der BSD-Lizenz mit einer zusätzlichen Patentrechtsvereinbarung bereitgestellt wird, in das System aufzunehmen (BSD+Patent), jedoch muss die Entscheidung zur Aufnahme jedes einzelnen Komponenten unter dieser Lizenz gesondert genehmigt werden;
    • Es fand die erste Sitzung der Arbeitsgruppe statt, die eingerichtet wurde, um die Migration des Quellcodes aus dem zentralen Subversions-Repository in ein dezentrales Git-System durchzuführen. Die Diskussion über die Sinnhaftigkeit der Migration geht weiterhin und viele Fragen müssen noch gelöst werden (zum Beispiel, wie mit contrib/ umgegangen werden soll, ob Hashes im aktuellen Git-Repository regeneriert werden müssen und wie die Commit-Tests am besten umgesetzt werden können);
    • Aus NetBSD neuer sdFAT-Treiber (2.x) portiert, aber das Unternehmen Samsung hat sich entschieden, die Förderung dieses Treibers im Hauptkernel von Linux selbst zu übernehmen. Darüber hinaus hat die Firma Paragon Software einen Das KCSAN-Tool (Kernel Concurrency Sanitizer), das die Entstehung von Wettlaufzuständen zwischen Kernel-Threads, die auf unterschiedlichen CPUs ausgeführt werden, erkennen kann;
    • Es wird daran gearbeitet, den in Clang eingebauten Assembler (IAS) anstelle des Assembler von GNU binutils zu verwenden;
    • Die Infrastruktur zur Emulation der Linux-Umgebung (Linuxulator) wurde für die ARM64-Architektur optimiert. Der Systemaufruf „renameat2“ wurde implementiert. Das Tool strace wurde weiterentwickelt, um Probleme mit Linux-exe-Dateien, die im Linuxulator ausgeführt werden, zu diagnostizieren. Ein Problem mit Abstürzen beim Verknüpfen von exe-Dateien mit der aktuellen glibc wurde behoben. Die Ports mit Linux-Komponenten für den Linuxulator wurden auf CentOS 7.7 aktualisiert.
    • Im Rahmen des Google Summer of Code-Programms haben die Studierenden erfolgreich sechs Projekte abgeschlossen: Die Implementierung eines einheitlichen (IPv4/IPv6) Ping-Tools wurde vorbereitet, Werkzeuge zur Testung von Firewalls und zur Fehlererkennung im Kernel (Kernel sanitizer) wurden entwickelt, ein Modul mac_ipacl wurde vorgeschlagen, Code zur Kompression des virtuellen Speichers wurde geschrieben und die Trennung des Port-Bauprozesses von der lokalen Installation wurde durchgeführt.
    • Das Projekt zum Fuzzing-Testen des FreeBSD-Kernels entwickelt sich weiter mit Hilfe des Systems syzkaller. Im Berichtszeitraum wurden mit syzkaller über zehn Fehler erkannt und behoben. Ein separater Server wurde für die Ausführung von syzkaller in virtuellen Maschinen auf der Basis von bhyve bereitgestellt, und mithilfe von
      Der syzbot hat die Überprüfung verschiedener FreeBSD-Subsysteme in der Google-Infrastruktur eingerichtet. Es wurde ein Informationsaustausch über alle Abstürze mit dem Service backtrace.io organisiert, um deren Gruppierung und Analyse zu vereinfachen;
    • Es wird an der Aktualisierung der zlib-Implementierung auf Kernel-Ebene gearbeitet.
      Der mit der Kompression verbundene Code wurde von zlib 1.0.4, das vor über 20 Jahren veröffentlicht wurde, auf die aktuelle Codebasis zlib 1.2.11 übertragen. Um den Zugriff auf zlib im Kernel zu vereinheitlichen, wurden die Funktionen compress, compress2 und uncompress hinzugefügt. Der Code, der den PPP-Protokollbetrieb unterstützt, aus dem netgraph-Subsystem wurde auf die systemeigene Implementierung von zlib umgestellt, anstatt seine eigene Version dieser Bibliothek zu verwenden. Auch die Subsysteme kern_ctf.c, opencryptodeflate, geom_uzip und subr_compressor wurden auf die neue zlib umgestellt;
      if_mxge, bxe updated und ng_deflate;
    • Eine neue Kernel-Schnittstelle wird entwickelt sysctlinfo, die es ermöglicht, Elemente in der Sysctl-Parameterdatenbank, die in Form einer MIB (Management Information Base) verarbeitet wird, zu finden und Informationen über Objekte in den Benutzerspeicher zu übertragen.
  • Sicherheit
    • Ein Kernel-Modul wurde entwickelt mac_ipacl, basierend auf dem TrustedBSD MAC Framework und implementiert ein Zugangskontrollsystem für die Netzwerkkonfiguration in Jail-Umgebungen. Zum Beispiel kann der Administrator des Host-Systems mit mac_ipacl dem Benutzer root in der Jail-Umgebung verbieten, IP-Adressen oder Subnetzparameter für bestimmte Netzwerkschnittstellen zu ändern oder festzulegen. Das vorgeschlagene System für mandatorische Zugangskontrolle ermöglicht es IP-Listen und Subnetze für die Jail definieren, die Installation bestimmter IP-Adressen und Subnetze in der Jail verbieten oder die Änderung von Parametern nur für bestimmte Netzwerkschnittstellen einschränken;
    • Intel hat das Projekt den Software-Stack portiert TPM 2.0 (Trusted Platform Module) zur Interaktion mit dem Chip für sichere Berechnungen, der normalerweise für die verifizierte Herstellung von Firmware und Betriebssystem-Bootloader verwendet wird. Die Komponenten des Stacks sind in Form der Ports security/tpm2-tss, security/tpm2-tools und security/tpm2-abrmd dargestellt. Der Port tpm2-tss umfasst Bibliotheken zur Nutzung der TPM2-API, tpm2-tools stellt Kommandozeilenwerkzeuge zur Durchführung von TPM-Operationen bereit, und tpm2-abrmd enthält einen Hintergrundprozess mit der Implementierung der Komponenten TPM Access Broker und Resource Manager, die Anfragen von verschiedenen TPM-Benutzern an ein einziges Gerät multiplexieren. Neben der verifizierten Herstellung kann TPM unter FreeBSD auch zur Erhöhung der Sicherheit von Strongswan IPsec, SSH und TLS durch die Durchführung kryptografischer Operationen auf einem separaten Chip verwendet werden;
    • Der Kernel für die amd64-Architektur ist für das Booten mit der W^X (write XOR execute) Schutztechnik angepasst, was bedeutet, dass Speicherseiten nicht gleichzeitig schreibbar und ausführbar sein können (der Kernel kann nun mit ausführbaren Speicherseiten geladen werden, für die die Schreiboperationen untersagt sind). Die neue Methode zum Schutz des Kernels ist in den HEAD-Zweig aufgenommen worden und wird in die Versionen FreeBSD 13.0 und 12.2 einfließen;
    • Für Systemaufrufe mmap und mprotect implementiert. Makro PROT_MAX(), das erlaubt, die zulässigen Zugriffsbeschränkungsflags (PROT_READ, PROT_WRITE, PROT_EXEC) bei späteren Änderungen zu bestimmen. Mit PROT_MAX() kann der Entwickler verhindern, dass ein Speicherbereich in die Kategorie ausführbar umgewandelt wird oder kann Speicher anfordern, der die Ausführung nicht zulässt, aber später in ausführbaren Speicher umgewandelt werden kann. Beispielsweise kann ein Speicherbereich nur für die Dauer der dynamischen Bindung oder der JIT-Codegenerierung zum Schreiben geöffnet sein, wird jedoch nach Abschluss des Schreibvorgangs auf Lesen und Ausführen beschränkt, sodass ein Angreifer im Falle einer Kompromittierung nicht in der Lage ist, das Schreiben für diesen Speicherblock zuzulassen. Neben PROT_MAX() gibt es auch die Implementierung von sysctl vm.imply_prot_max, bei der der Satz zulässiger Flags basierend auf den ursprünglichen Parametern des ersten Aufrufs von mmap definiert wird;
    • Zur Verbesserung des Schutzes vor der Ausnutzung von Sicherheitsanfälligkeiten wurde neben der Technik zur Randomisierung des Adressraums (ASLR) ein Mechanismus zur Randomisierung von Offsets vorgeschlagen, der auf die ursprünglichen Stack-Rahmen und in den Stack gelegte Strukturen mit Informationen zur Umgebung, Programmstartparametern und Daten für ausführbare Images im ELF-Format abzielt.
    • Es wurde daran gearbeitet, die unsichere Funktion gets aus der libc zu entfernen (ab dem C11-Standard wurde diese Funktion aus der Spezifikation ausgeschlossen) und die Ports zu berichtigen, die diese Funktion noch verwenden. Diese Änderung soll in FreeBSD 13.0 vorgeschlagen werden.
    • Ein experimentelles Projekt zur Erstellung von Orchestrierungswerkzeugen für Jail-Umgebungen auf der Grundlage des Frameworks wurde gestartet, pot um Images zu erstellen und zu exportieren, das analog zu Docker implementiert wurde, sowie einen Treiber nomad, der eine Schnittstelle für das dynamische Starten von Anwendungen in Jail-Umgebungen bereitstellt. Das vorgeschlagene Modell ermöglicht es, die Prozesse zur Erstellung von Jail-Umgebungen und deren Bereitstellung für Anwendungen zu trennen. Eines der Ziele des Projekts ist es, ein Mittel zur Manipulation von Jails wie Containern im Docker-Stil bereitzustellen;
  • Speichersysteme und Dateisysteme
    • aus NetBSD in das Dienstprogramm „makefs“. wurde Unterstützung des FAT-Dateisystems (msdosfs). Die vorgenommenen Änderungen ermöglichen das Erstellen von FAT-Dateisystem-Images ohne die Verwendung des md-Treibers und ohne Root-Rechte;
    • Die Überarbeitung des FUSE (File system in USErspace) Treibers wurde abgeschlossen, die die Erstellung von Dateisystemimplementierungen im Benutzermodus ermöglicht. Der ursprünglich gelieferten Treiber wies viele Fehler auf und basierte auf der FUSE-Version 7.8, die vor 11 Jahren veröffentlicht wurde. Im Rahmen des Treiberaktualisierungsprojekts wurde die Unterstützung des FUSE 7.23-Protokolls implementiert, Code zur Überprüfung von Berechtigungen auf der Kernel-Seite („-o default_permissions“) hinzugefügt, die Aufrufe VOP_MKNOD, VOP_BMAP und VOP_ADVLOCK integriert, die Möglichkeit zur Unterbrechung von FUSE-Operationen geschaffen, Unterstützung für unbenannte Pipes und Unix-Sockets in fusefs hinzugefügt, die Verwendung von kqueue für /dev/fuse ermöglicht, die Aktualisierung von Montageparametern über „mount -u“ erlaubt, die Unterstützung für den Export von fusefs über NFS implementiert, wurde die Berücksichtigung von RLIMIT_FSIZE realisiert, die Flags FOPEN_KEEP_CACHE und FUSE_ASYNC_READ hinzugefügt, erhebliche Leistungsoptimierungen durchgeführt und die Cache-Organisation verbessert. Der neue Treiber ist in die Branches head und stable/12 integriert (Teil von FreeBSD 12.1);
    • Die Arbeit an der Implementierung von NFSv4.2 (RFC-7862) für FreeBSD ist fast abgeschlossen. Im Berichtszeitraum lag der Schwerpunkt auf der Testung. Kompatibilitätstests mit der Implementierung aus Linux wurden abgeschlossen, aber die Prüfung des pNFS-Servers mit NFSv4.2 ist noch im Gange. Der Code wird bereits als bereit für die Integration in die FreeBSD-Head/current-Branches betrachtet. In der neuen Version von NFS wurde die Unterstützung für die Funktionen posix_fadvise, posix_fallocate, die Modi SEEKHOLE/SEEKDATA in lseek und die Operationen zum lokalen Kopieren von Dateisteilen auf dem Server (ohne Übertragung an den Client) hinzugefügt;
  • Hardware-Unterstützung
    • Ein Projekt zur Verbesserung der Leistung von FreeBSD auf Laptops wurde gestartet. Das erste Gerät, für das eine Überprüfung der Hardwareunterstützung unter FreeBSD durchgeführt wurde, ist das Lenovo X1 Carbon der siebten Generation;
    • CheriBSD, ein Fork von FreeBSD für eine Forschungsgestützte Prozessorarchitektur CHERI (Capability Hardware Enhanced RISC Instructions), wurde aktualisiert, um den kommenden ARM Morello-Prozessor zu unterstützen, der das CHERI-Speicherschutzverwaltungssystem basierend auf dem Capsicum-Schutzmodell unterstützen wird. Der Morello-Chip planen wird 2021 veröffentlicht. Die Entwickler von CheriBSD verfolgen auch weiterhin die Entwicklung des Referenzprototyps von CHERI auf Basis der MIPS-Architektur;
    • Erweiterte Unterstützung für RockChip RK3399 Chips, die auf RockPro64 und NanoPC-T4 Boards verwendet werden. Die bedeutendste Verbesserung ist die Unterstützung von eMMC und die Entwicklung eines neuen Treibers für den auf der Platine verwendeten eMMC-Controller;
    • Die Arbeit an der Unterstützung des ARM64 SoC Broadcom BCM5871X mit ARMv8 Cortex-A57 Prozessoren, die für Router, Gateways und Netzwerk-Speicherlösungen optimiert sind, wurde fortgesetzt. Im Berichtszeitraum wurden
      die Unterstützung von iProc PCIe erweitert und die Möglichkeit zur Nutzung hardwarebasierter kryptografischer Operationen zur Beschleunigung von IPsec hinzugefügt.
      Die Integration des Codes in den HEAD-Zweig wird für das vierte Quartal erwartet;
    • Bedeutende Fortschritte wurden bei der Entwicklung des FreeBSD Ports für die Plattform powerpc64 verzeichnet. Der Fokus liegt auf der Gewährleistung einer qualitativ hochwertigen Leistung auf Systemen mit IBM POWER8 und POWER9 Prozessoren, während optional auch ältere Apple Power Mac, x500 und Amiga A1222 unterstützt werden. Der powerpc*/12 Zweig wird weiterhin mit gcc 4.2.1 geliefert, während der powerpc*/13 Zweig bald auf llvm90 umgestellt wird. Von 33306 Ports können erfolgreich 30514 kompiliert werden;
    • Die Portierung von FreeBSD für SoCs der 64-Bit NXP LS1046A-Plattform auf Basis des ARMv8 Cortex-A72 mit integriertem Netzwerkpaketbeschleuniger, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 und USB 3.0 wurde fortgesetzt. Im Berichtszeitraum wurde die Unterstützung für USB 3.0, SD/MMC, I2C, die Netzwerk-Schnittstelle DPAA und GPIO realisiert. Geplant sind die Unterstützung von QSPI und die Optimierung der Netzwerkinterface-Leistung. Der Abschluss der Arbeiten und die Integration in den HEAD-Zweig werden für das 4. Quartal 2019 erwartet.
    • Der ena-Treiber wurde aktualisiert und unterstützt nun die zweite Generation von ENAv2 (Elastic Network Adapter), die in der Elastic Compute Cloud (EC2) Infrastruktur verwendet wird, um die Kommunikation zwischen EC2-Knoten mit Geschwindigkeiten von bis zu 25 Gb/s sicherzustellen. Der ena-Treiber umfasst und testet nun die Unterstützung von NETMAP sowie Anpassungen der Speicherkonfiguration zur Aktivierung des LLQ-Modus in Amazon EC2 A1-Umgebungen.
  • Anwendungen und Ports
    • Die Komponenten des Grafikstacks und die mit xorg verbundenen Ports wurden aktualisiert. Ports, die USE_XORG und XORG_CAT verwenden, wurden auf das USES-Framework umgestellt, anstelle bsd.xorg.mk über bsd.port.mk zu verwenden. Solche Ports beinhalten jetzt das Flag „USES=xorg“ in den Makefiles. Die Funktionalität von XORG_CAT wurde aus bsd.xorg.mk herausgelöst und wird jetzt durch das Flag „USES=xorg-cat“ aktiviert. Ein Toolset zum direkten Erstellen von xorg-Ports aus einem Git-Repository wurde hinzugefügt.
      freedesktop.org, was beispielsweise das Erstellen von Ports für noch nicht veröffentlichte Versionen ermöglicht. In Zukunft ist geplant, ein Toolset für die Verwendung des Build-Systems meson anstelle von autotools zum Erstellen von xorg-Ports vorzubereiten.

      Es wurde an der Bereinigung alter xorg-Ports gearbeitet, die an bereits nicht mehr unterstützte Komponenten gebunden sind, z. B. wurde der Port x11/libXp entfernt, und die Ports x11/Xxf86misc, x11-fonts/libXfontcache und graphics/libGLw wurden als veraltet eingestuft.

    • Die Arbeit an der Verbesserung der Unterstützung für Java 11 und neuere Versionen in FreeBSD wurde abgeschlossen, ebenso wie das Portieren einiger Änderungen in den Java 8-Zweig. Nachdem in FreeBSD die Unterstützung für neue Funktionen von Java 11 wie Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound und SCTP implementiert wurde, konzentrierte sich die Arbeit auf die Gewährleistung, dass alle Kompatibilitätstests durchgeführt werden. Die Anzahl der Fehler bei den Tests wurde von 50 auf 2 reduziert;
    • Der KDE Plasma-Desktop, KDE Frameworks, KDE Anwendungen und Qt sind auf dem neuesten Stand und auf die aktuellsten Versionen aktualisiert;
    • Die Ports mit dem Xfce-Desktop wurden auf die neueste Version aktualisiert; 4.14;
    • Der FreeBSD-Portbaum hat die Grenze von 38.000 Ports überschritten, die Anzahl der offenen PRs übersteigt etwas 2.000, von denen 400 PRs noch nicht bearbeitet wurden. Im Berichtszeitraum wurden 7.340 Änderungen von 169 Entwicklern vorgenommen. Zwei neue Teilnehmer (Santhosh Raju und Dmitri Goutnik) haben Kommitterrechte erhalten. Eine neue Version des Paketmanagers pkg 1.12 wurde veröffentlicht, die Overlay-Unterstützung im Portbaum sowie die Bereinigung von bsd.sites.mk bietet. Zu den bedeutenden Versionsupdates in den Ports gehören: Lazarus 2.0.4, LLVM 9.0, Perl 5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
    • Die Entwicklung des Projekts geht weiter ClonOS, entwickelnd ist eine spezialisierte Distribution zur Bereitstellung von Infrastruktur für virtuelle Server. In Bezug auf die zu lösenden Aufgaben ähnelt ClonOS Systemen wie Proxmox, Triton (Joyent), OpenStack, OpenNebula und Amazon AWS, wobei das Hauptunterscheidungsmerkmal die Nutzung von FreeBSD und die Möglichkeit ist, FreeBSD-Jail-Container und virtuelle Umgebungen auf Basis der Hypervisoren Bhyve und Xen zu verwalten, bereitzustellen und zu steuern. Zu den jüngsten Änderungen gehört die Unterstützung
      von cloud-init für Linux/BSD-VMs und cloudbase-init für Windows-VMs, der Beginn des Übergangs zur Verwendung eigener Images, die Einbeziehung von Jenkins CI zur Testung der Builds und ein neues pkg-Repository zur Installation
      von ClonOS aus Paketen.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster