Raport rozwoju FreeBSD za trzeci kwartał 2019 r

opublikowany raport z rozwoju projektu FreeBSD od lipca do września 2019 r. Wśród zmian możemy odnotować:

  • Zagadnienia ogólne i systemowe
    • Zespół Core ogólnie zaakceptował możliwość włączenia do systemu kodu dystrybuowanego na licencji BSD z dodatkową umową patentową (BSD+Patent), ale decyzja o włączeniu każdego komponentu do systemu w ramach tej licencji musi zostać zatwierdzona osobno;
    • Odbyło się pierwsze spotkanie grupy roboczej utworzonej w celu przeprowadzenia migracji kodów źródłowych ze scentralizowanego systemu kontroli źródeł Subversion do zdecentralizowanego systemu Git. Dyskusja na temat wykonalności migracji wciąż trwa i nie podjęto jeszcze decyzji w wielu kwestiach (na przykład, co zrobić z contrib/, czy konieczna jest regeneracja skrótów w obecnym repozytorium git i jak najlepiej wdrożyć testowanie popełnia);
    • Z NetBSD przeniesiony Zestaw narzędzi KCSAN (Kernel Concurrency Sanitizer), który pozwala wykryć warunki wyścigu pomiędzy wątkami jądra działającymi na różnych procesorach;
    • Trwają prace nad wykorzystaniem wbudowanego asemblera (IAS) Clanga zamiast asemblera binutils GNU;
    • Infrastruktura emulacji środowiska Linux (Linuxulator) jest przystosowana do pracy na architekturze ARM64. Zaimplementowano wywołanie systemowe „renameat2”. Narzędzie strace zostało ulepszone w celu diagnozowania problemów w plikach wykonywalnych systemu Linux działających w Linuxulatorze. Rozwiązano problem zawieszania się plików wykonywalnych przy użyciu świeżej biblioteki glibc. Porty z komponentami Linux dla Linuxulatora zostały zaktualizowane do CentOS 7.7;
    • W ramach programu Google Summer of Code studenci pomyślnie zrealizowali sześć projektów: przygotowano implementację ujednoliconego narzędzia ping (IPv4/IPv6), opracowano narzędzia do testowania zapór sieciowych i identyfikacji błędów w jądrze (Kernel Sanizer), narzędzie mac_ipacl zaproponowano moduł, napisano kod do kompresji pamięci wirtualnej i wykonano prace nad oddzieleniem procesu budowy portu od instalacji lokalnej;
    • Projekt fuzzingowego testowania jądra FreeBSD przy użyciu systemu wciąż się rozwija syzkaler. W raportowanym okresie zidentyfikowano i wyeliminowano kilkanaście błędów za pomocą syzkallera. Aby uruchomić syzkaller na maszynach wirtualnych opartych na bhyve, dedykowany jest oddzielny serwer i używany
      syzbot przeprowadził testy różnych podsystemów FreeBSD w infrastrukturze Google. Zorganizowano przesyłanie informacji o wszystkich awariach do usługi backtrace.io, aby uprościć ich grupowanie i analizę;

    • Trwają prace nad aktualizacją implementacji zlib na poziomie jądra.
      Kod związany z kompresją został przeniesiony z wersji zlib 1.0.4 wydanej ponad 20 lat temu do aktualnej bazy kodu zlib 1.2.11. Aby ujednolicić dostęp do zlib, do jądra dodano funkcje compress, compress2 i uncompress. Kod zapewniający działanie protokołu PPP z podsystemu netgraph został przeniesiony do wykorzystania systemowej implementacji zlib, zamiast własnej edycji tej biblioteki. Podsystemy kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor, również zostały przeniesione do nowego zlib.
      if_mxge, bxe zaktualizowano i ng_deflate;

    • Trwają prace nad nowym interfejsem jądra sysctlinfo, co pozwala na wyszukiwanie elementów w bazie parametrów sysctl, przetwarzanych w formie MIB (Management Information Base) i przekazywanie informacji o obiektach do przestrzeni użytkownika.
  • bezpieczeństwo
    • Opracowano moduł jądra mac_ipacl, oparty na TrustedBSD MAC Framework i wdrażający system kontroli dostępu do ustawień stosu sieciowego dla środowisk więziennych. Na przykład, używając mac_ipacl, administrator systemu hosta może uniemożliwić użytkownikowi root w środowisku więzienia zmianę lub ustawienie adresów IP lub ustawień podsieci dla niektórych interfejsów sieciowych. Proponowany obowiązkowy system kontroli dostępu pozwala on ustawić listy adresów IP i podsieci dozwolonych dla Jail, zabronić instalacji niektórych adresów IP i podsieci w Jail lub ograniczyć zmianę parametrów tylko dla niektórych interfejsów sieciowych;
    • Firma Intel przekazała projektowi port stosu oprogramowania TPM 2.0 (Trusted Platform Module) do połączenia z bezpiecznym chipem komputerowym, który jest zwykle używany do zweryfikowanego ładowania oprogramowania sprzętowego i programu ładującego system operacyjny. Komponenty stosu są prezentowane w postaci portów security/tpm2-tss, security/tpm2-tools i security/tpm2-abrmd. Port tpm2-tss zawiera biblioteki do korzystania z interfejsu API TPM2, tpm2-tools zapewnia narzędzia wiersza poleceń do wykonywania operacji TPM, a tpm2-abrmd zawiera implementację procesów w tle komponentów Broker dostępu TPM i Menedżer zasobów, które multipleksują żądania od różnych użytkowników modułu TPM do jednego urządzenia. Oprócz zweryfikowanego rozruchu na FreeBSD, TPM można wykorzystać do zwiększenia bezpieczeństwa Strongswan IPsec, SSH i TLS poprzez wykonywanie operacji kryptograficznych na oddzielnym chipie;
    • Jądro dla architektury amd64 jest przystosowane do rozruchu z wykorzystaniem techniki ochrony W^X (write XOR Wykonywanie), co oznacza, że ​​strony pamięci nie mogą być jednocześnie dostępne w celu zapisu i wykonania (jądro można teraz ładować przy użyciu wykonywalnych stron pamięci, dla których zapis jest zabronione). Nowa metoda ochrony jądra jest zawarta w gałęzi HEAD i będzie uwzględniona w wydaniach FreeBSD 13.0 i 12.2;
    • Dla wywołań systemowych mmap i mprotect wdrożone makro PROT_MAX(), które pozwala określić zestaw flag ograniczeń dostępu dozwolonych dla dalszych zmian (PROT_READ, PROT_WRITE, PROT_EXEC). Używając PROT_MAX(), programista może zabronić transferu obszaru pamięci do kategorii wykonywalnej lub zażądać pamięci, która nie pozwala na wykonanie, ale może zostać później przekonwertowana na plik wykonywalny. Na przykład obszar pamięci może być otwarty do zapisu tylko na czas łączenia dynamicznego lub generowania kodu JIT, ale po zakończeniu zapisu może być ograniczony tylko do odczytu i wykonywania, a w przyszłości, jeśli zostanie naruszony, atakujący nie będzie możliwe umożliwienie zapisu dla tego bloku pamięci. Oprócz PROT_MAX() zaimplementowany jest także sysctl vm.imply_prot_max, który po aktywacji określa zestaw prawidłowych flag na podstawie parametrów początkowych pierwszego wywołania mmap;
    • Aby zwiększyć ochronę przed wykorzystaniem luk, oprócz techniki randomizacji przestrzeni adresowej (ASLR), wprowadzono mechanizm losowania przesunięć wskaźników adresujących początkową ramkę stosu i struktury umieszczone na stosie z informacjami o środowisku, parametrach uruchamiania programu i danych dla obrazów wykonywalnych proponuje się format ELF;
    • Wykonano prace, aby usunąć z libc funkcję unsafe gets (począwszy od standardu C11, funkcja ta została wyłączona ze specyfikacji) i poprawić porty, które nadal korzystają z tej funkcji. Planuje się, że zmiana będzie oferowana we FreeBSD 13.0;
    • Rozpoczęto eksperymentalny projekt mający na celu stworzenie narzędzi do orkiestracji środowisk więziennych w oparciu o framework puszka do tworzenia i eksportowania obrazów, zaimplementowany podobnie do Dockera oraz sterownik koczownik, który zapewnia interfejs do dynamicznego uruchamiania aplikacji w środowisku więzienia. Zaproponowany model pozwala na oddzielenie procesów tworzenia środowisk więziennych od wdrażania w nich aplikacji. Jednym z celów projektu jest zapewnienie możliwości manipulowania więzieniami w formie kontenerów typu Docker;
  • Systemy pamięci i plików
    • Z NetBSD do narzędzia „makefs”. przeniósł Obsługa systemu plików FAT (msdosfs). Przygotowane zmiany umożliwiają tworzenie obrazów FS z systemem FAT bez użycia sterownika md i bez uprawnień roota;
    • Zakończono przeróbkę sterownika podsystemu FUSE (File system in USErspace), umożliwiającego tworzenie implementacji systemów plików w przestrzeni użytkownika. Pierwotnie dostarczony sterownik zawierał wiele błędów i był oparty na wydaniu FUSE 7.8, które zostało wydane 11 lat temu. W ramach projektu modernizacji sterowników zaimplementowano obsługę protokołu FUSE 7.23, dodano kod sprawdzający uprawnienia dostępu po stronie jądra („-o default_permissions”), dodano wywołania VOP_MKNOD, VOP_BMAP i VOP_ADVLOCK, dodano możliwość przerywania operacji FUSE, dodano obsługę nienazwanych potoków i gniazd unixowych w bezpiecznikach, możliwe stało się użycie kqueue dla /dev/fuse, możliwa była aktualizacja parametrów montowania poprzez „mount -u”, dodano obsługę do eksportowania bezpieczników przez NFS, zaimplementowano rozliczanie RLIMIT_FSIZE, dodano flagi FOPEN_KEEP_CACHE i FUSE_ASYNC_READ, dokonano znaczących optymalizacji wydajności i poprawiono organizację buforowania. Nowy sterownik jest zawarty w gałęziach głównych i stabilnych/12 (zawartych we FreeBSD 12.1);
    • Implementacja NFSv4.2 (RFC-7862) dla FreeBSD jest prawie ukończona. W okresie sprawozdawczym główny nacisk położono na testowanie. Zakończono testy sprawdzające kompatybilność z implementacją Linuksa, ale nadal trwają testy serwera pNFS z NFSv4.2. Ogólnie rzecz biorąc, kod jest już uważany za gotowy do integracji z głównymi/bieżącymi gałęziami FreeBSD. Nowa wersja NFS dodaje obsługę funkcji posix_fadvise, posix_fallocate, trybów SEEKHOLE/SEEKDATA w lseek, operację lokalnego kopiowania części pliku na serwerze (bez przesyłania do klienta);
  • Wsparcie sprzętowe
    • Uruchomiono projekt mający na celu poprawę wydajności FreeBSD na laptopach. Pierwszym urządzeniem poddanym audytowi pod kątem obsługi sprzętowej we FreeBSD był laptop Lenovo X1 Carbon siódmej generacji;
    • CheriBSD, rozwidlenie FreeBSD do badań architektury procesorów UKOCHANA (Instrukcje RISC Capability Hardware Enhanced), zaktualizowane w celu obsługi nadchodzącego procesora ARM Morello, który będzie obsługiwał system kontroli dostępu do pamięci CHERI oparty na modelu bezpieczeństwa projektu Capsicum. Chip Morello planują wydanie w 2021 roku. Twórcy CheriBSD w dalszym ciągu monitorują także rozwój prototypu referencyjnego CHERI opartego na architekturze MIPS;
    • Rozszerzona obsługa chipów RockChip RK3399 stosowanych w płytach RockPro64 i NanoPC-T4. Najbardziej znaczącym usprawnieniem była obsługa eMMC oraz opracowanie nowego sterownika dla zastosowanego na płycie kontrolera eMMC;
    • Trwają prace nad wdrożeniem obsługi ARM64 SoC Broadcom BCM5871X z procesorami ARMv8 Cortex-A57, przeznaczonej do zastosowania w routerach, bramach i pamięciach sieciowych. W okresie sprawozdawczym
      Rozszerzono obsługę iProc PCIe i dodano możliwość wykorzystania sprzętowych operacji kryptograficznych w celu przyspieszenia IPsec.
      Integracja kodu z gałęzią HEAD przewidywana jest w czwartym kwartale;

    • Poczyniono znaczne postępy w rozwoju portu FreeBSD dla platformy powerpc64. Nacisk położony jest na zapewnienie wysokiej jakości wydajności w systemach z procesorami IBM POWER8 i POWER9, ale opcjonalnie obsługuje działanie na starszych Apple Power Mac, x500 i Amiga A1222. Gałąź powerpc*/12 jest nadal dostarczana z gcc 4.2.1, a gałąź powerpc*/13 zostanie wkrótce przeniesiona do llvm90. Z 33306 portów 30514 zostało pomyślnie zamontowanych;
    • Kontynuacja przenoszenia FreeBSD dla 64-bitowego SoC NXP LS1046A opartego na procesorze ARMv8 Cortex-A72 ze zintegrowanym silnikiem akceleracji przetwarzania pakietów sieciowych, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 i USB 3.0. W raportowanym okresie wdrożono obsługę interfejsu sieciowego USB 3.0, SD/MMC, I2C, DPAA i GPIO. W planach jest obsługa QSPI i optymalizacja wydajności interfejsu sieciowego. Zakończenie prac i włączenie do oddziału HEAD przewidywane jest na IV kwartał 4 roku;
    • Sterownik ena został zaktualizowany w celu obsługi drugiej generacji kart sieciowych ENAv2 (Elastic Network Adapter) używanych w infrastrukturze Elastic Compute Cloud (EC2) w celu organizowania komunikacji pomiędzy węzłami EC2 z szybkością do 25 Gb/s. Do sterownika ena dodano i przetestowano obsługę NETMAP, a układ pamięci dostosowano tak, aby umożliwić tryb LLQ w środowiskach Amazon EC2 A1;
  • Aplikacje i system portów
    • Zaktualizowano komponenty stosu graficznego i porty powiązane z xorg. Porty używające USE_XORG i XORG_CAT zostały przeniesione do frameworka USES zamiast wywoływania bsd.xorg.mk poprzez bsd.port.mk. Takie porty zawierają teraz flagę „USES=xorg” w swoich plikach make. Funkcjonalność XORG_CAT została oddzielona od bsd.xorg.mk i jest teraz włączona za pomocą flagi „USES=xorg-cat”. Dodano narzędzia do bezpośredniego generowania portów xorg z repozytorium git
      freedesktop.org, który umożliwia np. tworzenie portów dla jeszcze nie wydanych wersji. W przyszłości planujemy przygotować narzędzia umożliwiające wykorzystanie systemu montażu mezonów zamiast autotools do budowy portów xorg.

      Wykonano prace mające na celu oczyszczenie starych portów xorg powiązanych z komponentami, które nie są już obsługiwane, na przykład port x11/libXp został usunięty, a porty x11/Xxf86misc, x11-fonts/libXfontcache i grafika/libGLw stały się przestarzałe ;

    • Wykonano prace mające na celu ulepszenie obsługi Java 11 i nowszych wersji we FreeBSD, a także przeniesienie niektórych zmian do gałęzi Java 8. Po wsparciu dla nowych funkcji Java 11, takich jak Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger został zaimplementowany w przypadku FreeBSD, DTrace, Javac Server, Java Sound i SCTP prace przesunięto na zapewnienie, że wszystkie testy zgodności przeszły pomyślnie. Zmniejszono liczbę niepowodzeń przy zaliczaniu testów z 50 do 2;
    • Pulpit KDE Plasma, Frameworki KDE, Aplikacje KDE i Qt są na bieżąco aktualizowane do najnowszych wydań;
    • Porty z pulpitem Xfce zaktualizowane do wydania 4.14;
    • Drzewo portów FreeBSD przekroczyło 38000 2000 portów, liczba niezamkniętych PR wynosi nieco ponad 400, z czego 7340 PR nie zostało jeszcze rozwiązanych. W raportowanym okresie 169 deweloperów wprowadziło 1.12 zmian. Dwóch nowych uczestników (Santhosh Raju i Dmitri Goutnik) otrzymało uprawnienia sprawcy. Opublikowano nową wersję menedżera pakietów pkg 2.0.4, z obsługą nakładek w drzewie portów i czyszczeniem bsd.sites.mk. Wśród znaczących aktualizacji wersji w portach znajdują się: Lazarus 9.0, LLVM 5.30, Perl11, PostgreSQL 2.6, Ruby 69.0.1, Firefox 68.1.0, Firefox-esr 76.0, Chromium XNUMX;
    • Rozwój projektu trwa KlonOS, rozwijający się wyspecjalizowana dystrybucja służąca do wdrażania infrastruktury serwerów wirtualnych. Pod względem zadań, które rozwiązuje, ClonOS przypomina systemy takie jak Proxmox, Triton (Joyent), OpenStack, OpenNebula i Amazon AWS, od których główną różnicą jest wykorzystanie FreeBSD oraz możliwość zarządzania, wdrażania i zarządzania kontenerami FreeBSD Jail oraz środowiska wirtualne oparte na hypervisorach Bhyve i Xen. Ostatnie zmiany obejmują wsparcie
      cloud-init dla maszyn wirtualnych Linux/BSD i cloudbase-init dla maszyn wirtualnych z systemem Windows, rozpoczęcie przejścia na używanie obrazów natywnych, używanie Jenkins CI do testowania kompilacji i nowe repozytorium pkg do instalacji
      ClonOS z pakietów.

Źródło: opennet.ru

Dodaj komentarz