Доклад за развитието на FreeBSD Q2019 XNUMX

публикувани доклад за развитието на проекта FreeBSD от юли до септември 2019 г. Сред промените можем да отбележим:

  • Общи и системни проблеми
    • Основният екип като цяло одобри възможността за включване на код в системата, който се разпространява под BSD лиценз с допълнително патентно споразумение (BSD+патент), но решението за включване на всеки компонент в системата съгласно този лиценз трябва да бъде одобрено отделно;
    • Проведе се първата среща на работната група, създадена за осъществяване на миграцията на изходните кодове от централизираната система за контрол на изходния код Subversion към децентрализираната система Git. Дискусията относно осъществимостта на миграцията все още продължава и решенията по много въпроси все още не са разработени (например какво да се прави с contrib/, дали е необходимо да се регенерират хешове в текущото git хранилище и как най-добре да се приложи тестване на ангажира);
    • От NetBSD пренесен KCSAN (Kernel Concurrency Sanitizer) инструментариум, който ви позволява да откривате условия на състезание между нишки на ядрото, работещи на различни процесори;
    • Работи се по използването на вградения асемблер на Clang (IAS) вместо асемблера на GNU binutils;
    • Инфраструктурата за емулация на средата на Linux (Linuxulator) е адаптирана да работи върху архитектурата ARM64. Внедрено е системното повикване „renameat2“. Помощната програма strace е подобрена за диагностициране на проблеми в изпълнимите файлове на Linux, работещи в Linuxulator. Проблемът със сривовете при свързване на изпълними файлове с пресен glibc е разрешен. Портовете с Linux компоненти за Linuxulator са актуализирани до CentOS 7.7;
    • Като част от програмата Google Summer of Code студентите успешно завършиха шест проекта: беше подготвена реализация на унифицирана (IPv4/IPv6) помощна програма за пинг, бяха разработени инструменти за тестване на защитни стени и идентифициране на грешки в ядрото (Kernel sanitizer), mac_ipacl предложен е модул, написан е код за компресиране на виртуална памет и е извършена работа за отделяне на процеса на изграждане на порт от локалната инсталация;
    • Проектът за fuzzing тестване на ядрото на FreeBSD с помощта на системата продължава да се развива syzkaller. През отчетния период бяха идентифицирани и отстранени повече от десет грешки с помощта на syzkaller. За да стартирате syzkaller във виртуални машини, базирани на bhyve, е отделен отделен сървър, който използва
      syzbot установи тестване на различни FreeBSD подсистеми в инфраструктурата на Google. Организира прехвърлянето на информация за всички сривове към услугата backtrace.io за опростяване на тяхното групиране и анализ;

    • Работи се по актуализиране на изпълнението на zlib на ниво ядро.
      Кодът, свързан с компресията, е мигриран от zlib 1.0.4, издаден преди повече от 20 години, към текущата кодова база zlib 1.2.11. За уеднаквяване на достъпа до zlib, функциите компресиране, компресиране2 и декомпресиране са добавени към ядрото. Кодът, който осигурява работата на PPP протокола от подсистемата netgraph, е прехвърлен, за да използва системната реализация на zlib, вместо собственото си издание на тази библиотека. Подсистемите kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor, също са прехвърлени към новия zlib.
      if_mxge, bxe актуализиран и ng_deflate;

    • Разработва се нов интерфейс на ядрото sysctlinfo, което ви позволява да намирате елементи в базата данни с параметри sysctl, обработени под формата на MIB (информационна база за управление) и да прехвърляте информация за обекти в потребителското пространство.
  • сигурност
    • Разработен модул на ядрото mac_ipacl, базиран на TrustedBSD MAC Framework и внедряващ система за контрол на достъпа за настройки на мрежов стек за затворни среди. Например, използвайки mac_ipacl, системният администратор на хост може да попречи на root потребителя в затворническа среда да променя или задава IP адреси или настройки на подмрежа за определени мрежови интерфейси. Предложена система за задължителен контрол на достъпа Тя позволява на задайте списъци с IP адреси и подмрежи, разрешени за Jail, забранете инсталирането на определени IP адреси и подмрежи в Jail или ограничете променящите се параметри само за определени мрежови интерфейси;
    • Intel дари порт за софтуерен стек на проекта TPM 2.0 (Trusted Platform Module) за взаимодействие със защитения изчислителен чип, който обикновено се използва за проверено зареждане на фърмуера и зареждащата програма за ОС. Компонентите на стека са представени под формата на портове security/tpm2-tss, security/tpm2-tools и security/tpm2-abrmd. Портът tpm2-tss включва библиотеки за използване на TPM2 API, tpm2-tools предоставя помощни програми за команден ред за извършване на TPM операции, а tpm2-abrmd съдържа изпълнение на фонов процес на TPM Access Broker и Resource Manager компоненти, които мултиплексират заявки от различни TPM потребители към едно устройство. В допълнение към проверено зареждане на FreeBSD, TPM може да се използва за подобряване на сигурността на Strongswan IPsec, SSH и TLS чрез извършване на криптографски операции на отделен чип;
    • Ядрото за архитектурата amd64 е адаптирано за зареждане с помощта на техниката за защита W^X (write XOR execute), което означава, че страниците на паметта не могат да бъдат едновременно достъпвани за писане и изпълнение (ядрото вече може да бъде заредено с помощта на страници с изпълнима памет, за които писането е забранено). Новият метод за защита на ядрото е включен в клона HEAD и ще бъде включен във версиите FreeBSD 13.0 и 12.2;
    • За mmap и mprotect системни повиквания изпълнени макрос PROT_MAX(), който ви позволява да определите набора от флагове за ограничаване на достъпа, разрешени за по-нататъшни промени (PROT_READ, PROT_WRITE, PROT_EXEC). Използвайки PROT_MAX(), разработчикът може да забрани прехвърлянето на област на паметта в категорията на изпълнимия файл или да поиска памет, която не позволява изпълнение, но по-късно може да бъде преобразувана в изпълнима. Например област от паметта може да бъде отворена само за запис по време на динамичното свързване или генерирането на JIT код, но след като записът приключи, той е ограничен само за четене и изпълнение и в бъдеще, ако бъде компрометиран, атакуващият няма да може да активира запис за този блок памет. В допълнение към PROT_MAX(), sysctl vm.imply_prot_max също е имплементиран, който, когато е активиран, определя набора от валидни флагове въз основа на първоначалните параметри на първото извикване на mmap;
    • За подобряване на защитата срещу използване на уязвимости, в допълнение към техниката за рандомизиране на адресно пространство (ASLR), механизъм за рандомизиране на отместванията на указателите, адресиращи първоначалната рамка на стека и структурите, поставени в стека с информация за средата, параметри за стартиране на програма и данни за изпълними изображения се предлага формат ELF;
    • Извършена е работа за премахване на функцията unsafe gets от libc (започвайки от стандарта C11, тази функция е изключена от спецификацията) и за коригиране на портовете, които все още използват тази функция. Планира се промяната да бъде предложена във FreeBSD 13.0;
    • Беше стартиран експериментален проект за създаване на инструменти за оркестриране на затворни среди, базирани на рамката гърне за създаване и експортиране на изображения, реализиран подобно на Docker, и драйвер номад, който предоставя интерфейс за динамично стартиране на приложения в затворническа среда. Предложеният модел ни позволява да разделим процесите на създаване на затворнически среди и внедряване на приложения в тях. Една от целите на проекта е да осигури средство за манипулиране на затвори като контейнери в стил Docker;
  • Системи за съхранение и файлове
    • От NetBSD до помощната програма "makefs". преместен Поддръжка на FAT файлова система (msdosfs). Подготвените промени ви позволяват да създавате FS изображения с FAT, без да използвате md драйвера и без root права;
    • Преработката на драйвера на подсистемата FUSE (Файлова система в USErspace) е завършена, което позволява създаването на реализации на файлова система в потребителското пространство. Драйверът, който първоначално беше изпратен, съдържаше много грешки и беше базиран на FUSE 7.8, който беше пуснат преди 11 години. Като част от проекта за модернизация на драйвера е внедрена поддръжка за протокола FUSE 7.23, добавен е код за проверка на правата за достъп от страна на ядрото (“-o default_permissions”), добавени са извиквания към VOP_MKNOD, VOP_BMAP и VOP_ADVLOCK, осигурена е възможност за прекъсване на операциите на FUSE, добавена е поддръжка за неименувани канали и unix сокети във fusefs, стана възможно използването на kqueue за /dev/fuse, беше възможно да се актуализират параметрите за монтиране чрез „mount -u“, добавена поддръжка за експортиране на предпазители чрез NFS, имплементирано отчитане на RLIMIT_FSIZE, добавени флагове FOPEN_KEEP_CACHE и FUSE_ASYNC_READ, направени значителни оптимизации на производителността и подобрена организация на кеширането. Новият драйвер е включен в клоновете head и stable/12 (включени във FreeBSD 12.1);
    • Внедряването на NFSv4.2 (RFC-7862) за FreeBSD е почти завършено. Основният акцент през отчетния период беше тестването. Завършени са тестове за проверка на съвместимостта с изпълнението на Linux, но тестването на pNFS сървъра с NFSv4.2 все още продължава. Като цяло, кодът вече се счита за готов за интегриране в главните/текущите клонове на FreeBSD. Новата версия на NFS добавя поддръжка за функциите posix_fadvise, posix_fallocate, режимите SEEKHOLE/SEEKDATA в lseek, операцията за локално копиране на части от файл на сървъра (без прехвърляне към клиента);
  • Хардуерна поддръжка
    • Беше стартиран проект за подобряване на производителността на FreeBSD на лаптопи. Първото устройство, което беше одитирано за хардуерна поддръжка във FreeBSD, беше лаптопът Lenovo X1 Carbon от седмо поколение;
    • CheriBSD, разклонение на FreeBSD за изследователска процесорна архитектура ЧЕРИ (Capability Hardware Enhanced RISC Instructions), актуализиран, за да поддържа предстоящия процесор ARM Morello, който ще поддържа системата за контрол на достъпа до паметта CHERI, базирана на модела за сигурност на дизайна Capsicum. Чип Морело планират издаване през 2021 г. Разработчиците на CheriBSD също продължават да наблюдават развитието на референтния прототип CHERI, базиран на MIPS архитектурата;
    • Разширена поддръжка за чипове RockChip RK3399, използвани в платките RockPro64 и NanoPC-T4. Най-значимото подобрение беше поддръжката за eMMC и разработването на нов драйвер за eMMC контролера, използван на платката;
    • Продължава работата по внедряването на поддръжка за ARM64 SoC Broadcom BCM5871X с процесори ARMv8 Cortex-A57, насочени към използване в рутери, шлюзове и мрежово съхранение. През отчетния период
      Поддръжката на iProc PCIe е разширена и е добавена възможност за използване на хардуерни криптографски операции за ускоряване на IPsec.
      Интегрирането на кода в клона HEAD се очаква през четвъртото тримесечие;

    • Има значителен напредък в разработването на порт на FreeBSD за платформата powerpc64. Фокусът е върху осигуряването на качествена производителност на системи с IBM POWER8 и POWER9 процесори, но по избор поддържа работа на по-стари Apple Power Mac, x500 и Amiga A1222. Клонът powerpc*/12 продължава да се доставя с gcc 4.2.1, а клонът powerpc*/13 скоро ще бъде мигриран към llvm90. От 33306 порта, 30514 са успешно сглобени;
    • Продължава пренасянето на FreeBSD за 64-битовия SoC NXP LS1046A, базиран на процесора ARMv8 Cortex-A72 с интегрирана машина за ускоряване на обработката на мрежови пакети, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 и USB 3.0. През отчетния период беше внедрена поддръжка на USB 3.0, SD/MMC, I2C, DPAA и мрежов интерфейс GPIO. Има планове за поддръжка на QSPI и оптимизиране на производителността на мрежовия интерфейс. Приключване на работата и включване в клон HEAD се очаква през 4-то тримесечие на 2019 г.;
    • Драйверът ena е актуализиран, за да поддържа второ поколение мрежови адаптери ENAv2 (Elastic Network Adapter), използвани в инфраструктурата на Elastic Compute Cloud (EC2) за организиране на комуникация между EC2 възли при скорости до 25 Gb/s. Поддръжката на NETMAP е добавена и тествана към драйвера ena, а оформлението на паметта е адаптирано, за да активира режим LLQ в среди на Amazon EC2 A1;
  • Приложения и портова система
    • Актуализирани компоненти на графичен стек и портове, свързани с xorg. Портовете, използващи USE_XORG и XORG_CAT, са преместени в рамката USES, вместо да извикват bsd.xorg.mk чрез bsd.port.mk. Такива портове вече включват флага "USES=xorg" в своите make-файлове. Функционалността XORG_CAT е отделена от bsd.xorg.mk и сега е разрешена от флага "USES=xorg-cat". Добавени са инструменти за директно генериране на xorg портове от git хранилище
      freedesktop.org, който например ви позволява да създавате портове за все още неиздадени версии. В бъдеще планираме да подготвим инструменти за използване на системата за сглобяване на meson вместо autotools за изграждане на xorg портове.

      Извършена е работа за почистване на стари xorg портове, свързани с компоненти, които вече не се поддържат, например, портът x11/libXp е премахнат, а портовете x11/Xxf86misc, x11-fonts/libXfontcache и graphics/libGLw са отхвърлени ;

    • Беше извършена работа за подобряване на поддръжката за Java 11 и по-нови версии във FreeBSD, както и за пренасяне на някои промени в клона на Java 8. След внедряване на поддръжка за такива нови функции на Java 11 като Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger за FreeBSD, DTrace, Javac Server, Java Sound и SCTP, работата се насочи към гарантиране, че всички тестове за съвместимост са преминали. Броят на неуспехите при преминаване на тестовете е намален от 50 на 2;
    • Работният плот на KDE Plasma, KDE Frameworks, KDE приложенията и Qt се поддържат актуални и актуализирани до най-новите версии;
    • Портове с работния плот на Xfce, актуализирани за пускане 4.14;
    • Дървото на портовете на FreeBSD надхвърли 38000 2000 порта, броят на незатворените PR е малко над 400, от които 7340 PR все още не са разрешени. През отчетния период са направени 169 промени от 1.12 разработчици. Двама нови участници (Santhosh Raju и Dmitri Goutnik) получиха права за комитиране. Беше публикувана нова версия на мениджъра на пакети pkg 2.0.4 с поддръжка за наслагвания в дървото на портовете и почистване на bsd.sites.mk. Сред значимите актуализации на версиите в портовете са: Lazarus 9.0, LLVM 5.30, Perl11, PostgreSQL 2.6, Ruby 69.0.1, Firefox 68.1.0, Firefox-esr 76.0, Chromium XNUMX;
    • Развитието на проекта продължава ClonOS, развиващи се специализирана дистрибуция за внедряване на виртуална сървърна инфраструктура. По отношение на задачите, които решава, ClonOS прилича на системи като Proxmox, Triton (Joyent), OpenStack, OpenNebula и Amazon AWS, основната разлика от които е използването на FreeBSD и възможността за управление, разполагане и управление на FreeBSD Jail контейнери и виртуални среди, базирани на Bhyve и Xen хипервайзори. Последните промени включват поддръжка
      cloud-init за Linux/BSD VM и cloudbase-init за Windows VM, започване на прехода към използване на оригинални изображения, използване на Jenkins CI за тестване на компилации и ново pkg хранилище за инсталиране
      ClonOS от пакети.

Източник: opennet.ru

Добавяне на нов коментар