Справаздача аб развіцці 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 код з падсістэмы netgraph пераведзены на выкарыстанне сістэмнай рэалізацыі 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/XNUMX;
    • Для сістэмных выклікаў 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 для даследчай працэсарнай архітэктуры CHERI (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;
    • Працягнута партаванне 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

Дадаць каментар