Звіт про розвиток FreeBSD за третій квартал 2019 року

Опубліковано звіт про розвиток проекту FreeBSD з липня до вересня 2019 року. Зі змін можна відзначити:

  • Загальні та системні питання
    • Core team у загальному вигляді схвалив можливість включення до системи коду, що постачається під ліцензією BSD з додатковою угодою про використання патентів (BSD+Patent), але рішення щодо включення до системи кожного компонента під цією ліцензією має затверджуватись окремо;
    • Відбулося перше засідання робочої групи, створеної для міграції вихідних текстів із централізованої системи управління вихідними текстами Subversion до децентралізованої системи Git. Дискусія щодо доцільності міграції поки триває і з багатьох питань ще потрібно виробити рішення (наприклад, як вчинити з contrib/, чи потрібно перегенерувати хеші в поточному git-репозиторії і як найкраще реалізувати тестування коммітів);
    • З NetBSD портований інструментарій KCSAN (Kernel Concurrency Sanitizer), що дозволяє виявляти виникнення станів перегонів між потоками ядра, що виконуються на різних CPU;
    • Ведеться робота з використання вбудованого в Clang асемблера (IAS) замість асемблера з GNU binutils;
    • Інфраструктура емуляції оточення Linux (Linuxulator) адаптована до роботи на архітектурі ARM64. Реалізовано системний виклик "renameat2". Утиліта strace допрацьована для діагностики проблем у файлах Linux, що виконуються, що запускаються в Linuxulator. Вирішено проблему з виникненням збоїв при зв'язуванні виконуваних файлів зі свіжим glibc. Порти з Linux-компонентами для Linuxulator оновлено до CentOS 7.7;
    • У рамках програми Google Summer of Code студентами успішно виконано шість проектів: підготовлено реалізацію уніфікованої (IPv4/IPv6) утиліти ping, розроблено інструментарії для тестування міжмережевих екранів та виявлення помилок у ядрі (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 до ядра додані функції compress, compress2 і uncompress. Код PPP, що забезпечує роботу протоколу PPP, переведений на використання системної реалізації zlib, замість власної редакції даної бібліотеки. На новий zlib також переведені підсистеми kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
      if_mxge, bxe updated та ng_deflate;

    • Розвивається новий інтерфейс ядра sysctlinfoдозволяє знаходити елементи в базі параметрів sysctl, оброблюваної у формі MIB (Management Information Base), і передавати інформації про об'єкти в простір користувача.
  • Безпека
    • Розроблено модуль ядра mac_ipacl, заснований на TrustedBSD MAC Framework та реалізує систему керування доступом до налаштувань мережевого стека для jail-оточень. Наприклад, за допомогою mac_ipacl адміністратор хост-системи може заборонити користувачеві root в jail-оточенні змінювати або встановлювати IP-адреси або параметри підмереж для певних мережевих інтерфейсів. Запропонована система мандатного керування доступом дозволяє задавати списки IP-адрес та підмереж, допустимих для Jail, забороняти встановлення певних IP та підмереж у Jail або обмежувати зміну параметрів тільки для певних мережевих інтерфейсів;
    • Компанія Intel передала проекту порт програмного стека ТРМ 2.0 (Trusted Platform Module) для взаємодії з чіпом для безпечних обчислень, який зазвичай застосовується для верифікованого завантаження прошивок та завантажувача ОС. Компоненти стека представлені у формі портів securtity/tpm2-tss, security/tpm2-tools та security/tpm2-abrmd. Порт tpm2-tss включає бібліотеки для використання API TPM2, 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;
    • Проведено роботу з видалення небезпечної функції gets з libc (починаючи зі стандарту C11, ця функція виключена зі специфікації) та коригування портів, що ще використовують цю функцію. Зміна планується запропонувати в FreeBSD 13.0;
    • Запущено експериментальний проект зі створення засобів оркестрування jail-оточень на основі фреймворку горщик для створення та експортування образів, реалізованого за аналогією з Docker, та драйвера кочівник, що надає інтерфейс для динамічного запуску додатків у jail-оточенні. Запропонована модель дозволяє розділити процеси створення jail-оточень та розгортання в них додатків. Однією з цілей проекту є надання засобу для маніпуляції jail-ами як контейнерів у стилі Docker;
  • Системи зберігання та файлові системи
    • З NetBSD в утиліту makefs перенесено - підтримка файлової системи FAT (msdosfs). Підготовлені зміни дозволяють створювати образи ФС з FAT без використання драйвера md та без повноважень root;
    • Завершено переробку драйвера підсистеми FUSE (File system in USErspace), що дозволяє створювати реалізації файлових систем у просторі користувача. Драйвер, що спочатку поставлявся, містив багато помилок і був заснований на версії FUSE 7.8, випущеної 11 років тому. В рамках проекту з модернізації драйвера реалізована підтримка протоколу FUSE 7.23 доданий код для перевірки прав доступу на стороні ядра («-o default_permissions»), додані виклики VOP_MKNOD, VOP_BMAP і VOP_ADVLOCK, забезпечена можливість переривання операцій FUSE, додана підтримка у fusefs, з'явилася можливість використання kqueue для /dev/fuse, дозволено оновлення параметрів монтування через «mount -u», додано підтримку експорту fusefs через 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 head/current. У новій версії NFS додано підтримку функцій posix_fadvise, posix_fallocate, режимів SEEKHOLE/SEEKDATA в lseek, операції локального копіювання частин файлу на сервері (без передачі клієнту);
  • Підтримка обладнання
    • Стартував проект з покращення роботи FreeBSD на ноутбуках. Першим пристроєм, для якого проведено аудит підтримки обладнання у FreeBSD, став ноутбук Lenovo X1 Carbon сьомого покоління;
    • CheriBSD, відгалуження від FreeBSD для дослідницької процесорної архітектури ШЕРІ (Capability Hardware Enhanced RISC Instructions), оновлено для підтримки майбутнього процесора ARM Morello, який підтримуватиме систему керування доступом до пам'яті CHERI, що ґрунтується на моделі захисту проекту Capsicum. Чіп Morello планує випустити у 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 портів успішно збирається XNUMX XNUMX;
    • Продовжено портування 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. У драйвер ena додано та протестовано підтримку NETMAP, а також проведено адаптацію розкладки пам'яті для включення режиму 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. Після того як для FreeBSD була реалізована підтримка таких нових можливостей Java 11, як Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger , DTrace, Javac Server, Java Sound та SCTP, робота переключилася на забезпечення проходження всіх тестів на сумісність. Число збоїв при проходженні тестів знижено з 50 до 2;
    • Робочий стіл KDE Plasma, KDE Frameworks, KDE Applications та Qt підтримуються в актуальному стані та оновлені до найсвіжіших випусків;
    • Порти з робочим столом Xfce оновлено до випуску 4.14;
    • Дерево портів FreeBSD подолало кордон у 38000 портів, число незакритих PR трохи перевищує 2000, з яких 400 PR ще не розібрані. За звітний період внесено 7340 змін від 169 розробників. Права комітера отримали два нових учасники (Santhosh Raju та Dmitri Goutnik). Опубліковано новий випуск пакетного менеджера pkg 1.12 з підтримкою оверлеїв у дереві портів та проведенням чищення bsd.sites.mk. Серед значних оновлень версій портів відзначаються: 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;
    • Продовжується розвиток проекту ClonOS, розвиваючого спеціалізований дистрибутив для розгортання інфраструктури віртуальних серверів. За розв'язаними завданнями ClonOS нагадує такі системи, як Proxmox, Triton (Joyent), OpenStack, OpenNebula та Amazon AWS, головною відмінністю від яких є використання FreeBSD та можливість управління, розгортання та управління Jail-контейнерами FreeBSD та віртуальними середовищами на базі гіпервізорів Bhyve . З недавніх змін наголошується підтримка
      cloud-init для Linux/BSD VM та cloudbase-init для Windows VM, початок переходу на використання власних образів, задіяння Jenkins CI для тестування збірок та новий pkg-репозиторій для встановлення
      ClonOS із пакетів.

Джерело: opennet.ru

Додати коментар або відгук