Отчёт о развитии OpenBSD за сентябрь 2010
Основные изменения в базовой системе:
- Заметно переработан pflog(4). Теперь в log-пакете при редиректе исходного пакета дополнительно сохраняется изначальный адрес, а сами log-пакеты генерируются по мере прохода по соответствующим match-правилам. В частности, это позволяет теперь полностью в реальном времени отлаживать сложные наборы правил.
- Исправлена семантика работы match- и pass/block-правил: теперь последним применяется итоговое pass/block-правило, даже если подходящее match-правило было обнаружено позднее. Нынешняя логика работы выглядит следующим образом:
- Правила проходятся по порядку, сверху вниз.
- Изначально перед началом обхода считается последним подошедшим правило
pass all
. Дальше шаги 3-6 выполняются для каждого имеющегося в наборе правила. - Если это pass- или block-правило и оно подошло к пакету, то оно запоминается как последнее подошедшее.
- Если это pass- или block-правило, оно подошло к пакету и содержит опцию quick, то обход списка правил заканчивается (переход на шаг 7).
- Если это match-правило, и оно подошло к пакету, то оно применяется.
- Происходит переход к следующему правилу в списке (на шаг 3).
- Если правил в списке больше нет, применяется последнее подошедшее правило.
Также добавлена новая опция логирования
matches
. При её использовании все подходящие пакеты будут отмечаться на pflog(4) не только для указанного правила, но и для всех последующих подошедших к данному пакету правил. - pfctl(8) теперь разрешает
rdr-to
для исходящих правил иnat-to
для входящих. Собственно, сам PF это уже давно позволял делать. Оставлено лишь требование указания направления для таких правил (хотя ядро, опять-таки, позволит создать и такое правило). Помимо прочего, теперь можно использоватьrdr-to
иnat-to
одновременно в одном правиле. - В route(8) добавлен параметр командной строки
-label
, позволяющий ограничить список отображаемых маршрутов только теми, которые имеют заданную метку. - Для доступа к tun(4)-интерфейсам более не требуются в обязательном порядке права root: для создания интерфейсов без участия файловой системы эти права всё равно требуются, а для файлов
/dev/tun*
по умолчанию владельцем файлов и так является root. В то же время теперь по необходимости доступ к tun(4)-интерфейсам может быть дан отдельным пользователям, для чего раньше было необходимо использовать sudo(8) или другие способы эскалации привилегий. - В OCF (OpenBSD/FreeBSD Cryptographic Framework) добавлена поддержка AES-GCM; и в ядре, и в userland-утилитах isakmpd(8), ipsecctl(8) и iked(8)). На данный момент поддерживается только 128-битный вариант.
- Добавлен новый псевдоинтерфейс pppx(4) — PPP-мультиплексор. pppx(4) создаёт интерфейс в момент установки сессии, благодаря чему ALTQ и PF могут с ней взаимодействовать.
- Улучшена пропускная способность сетевого стека под высокими нагрузками и общее поведение ядра в условиях острой нехватки памяти. В частности, буфер отправки TCP теперь автоматически подстраивается без учёта посланных, но не подтверждённых, пакетов. А буфер приёма автоматически подстраивается аналогично FreeBSD, базируясь на произведении задержки и пропускной способности. Это позволило поднять скорость загрузки для ftp.eu.openbsd.org с 300кбит/с до 4.4Мбит/с. Также исправлена ошибка в коде генерации отметок времени для TCP, проявившаяся в результате вышеописанных изменений.
- На loopback-интерфейсах более не производится откладывание ACK-пакетов.
- Добавлена поддержка чипов SiS191 в se(4).
- Завершена переработка кода, работающего с управлением питанием. Жалобы на проблемы с ACPI к концу сентября практически сошли на нет.
- Поддержка файловой системы NTFS включена теперь по умолчанию в GENERIC-ядре после исправления ряда проблем с надёжностью работы. В ближайшее время ожидается дальнейшее развитие.
- Исправлен ряд проблем с отрисовкой псевдографики на UTF8-терминалах, в частности, PuTTY.
- Исправлена как минимум одна из серьёзных проблем, мешающих использованию опции
bigmem
на платформе amd64. - Добавлена поддержка чипов 82583V в em(4).
- Исправлены проблемы с atw(4), возникшие после переезда на GCC 4.
- Функциональность pmsi(4) перемещена в состав pms(4).
- Исправлены досадные, периодически проявляющиеся ошибки в umass(4), один из которых приводил к kernel panic при работе с umass-устройствами, имеющими несколько логических подустройств (LUN-ов), а другой — при подключении umass-устройств без подключённых дисков.
- Некоторых дисковые устройства (например, CD-приводы) теперь не читают разметку своего диска сразу при подключении; вместо этого принудительно используется псевдоразметка, что позволяет использовать уникальные идентификаторы с такими устройствами.
- uyurex(4) переименован в utwitch(4) и включён в сборку по умолчанию.
- Для glob(3) добавлен новый флаг, GLOB_KEEPSTAT, который позволяет сохранить копию использовавшейся структуры
stat
, дабы избежать последующего вызова stat(2)/lstat(2). - Также в libc добавлена timingsafe_bcmp(3), функция, реализующая сравнение областей памяти за непредсказуемое время. Изначально она была создана и использовалась в OpenSSH для предотвращения раскрытия косвенной информации.
- Добавлен новый демон iscsid(8), iSCSI-инициатор, использующий ранее созданный vscsi(4). На данный момент реализован абсолютный минимум протокола, необходимый для работы, поэтому для production пока не подходит (даже формат конфигурационного файла iscsi.conf пока что ещё не устоялся). В сопутствующей утилите iscsictl(8) реализованы пока что только обнаружение устройств и перезагрузка конфигурации. iscsid(8), iscsictl(8) и собственно vscsi(4) включены в базовую сборку.
- Убраны утилиты msgs(1) и tn3270, как неактуальные в современном мире.
- В ldapd(8) реализована прямая поддержка BSD-аутентификации, без использования SASL, посредством использования префикса
{BSDAUTH}
. - Приятная мелочь: dhclient(8) теперь можно указать в качестве интерфейса egress, что позволяет принудительно обновлять аренду без необходимости знать, на каком интерфейсе dhclient(8) запускали до этого.
- GCC 4 теперь успешно работает на MIPS64-архитектурах, а также корректно делает кросс-компиляцию как таковую. Все MIPS-архитектуры переведены на GCC 4.
- Добавлена поддержка L2TP для PIPEX в ядре и npppd, в том числе для IPv6.
- После исправления проблем со сборкой на архитектурах, не поддерживающих динамическое связывание, утилита для работы с Web-камерами video(1) вновь включена в сборку.
- Продолжена работа на OpenRCS/OpenCVS. В частности, исправлены досадные проблема с рекурсивным созданием каталогов и с не-игнорированием каталогов
CVS
при некоторых операциях в OpenCVS. Возможно, OpenCVS снова будет поставляться в OpenBSD 4.9. - Perl обновлён до версии 5.12.2.
- В
mod_headers
системного Apache 1.3 добавлена поддержка директивыRequestHeader
аналогично Apache 2.x. - Новые опции в tmux:
- Опция сервера
exit-unattached
- указывает серверной части завершиться после отключения последнего клиента, даже если остались какие-то сессии.
- Опция сессии
destroy-unattached
- указывает, что сессию следует завершить после отключения последнего клиента.
- Опция сервера
Изменения в OpenSSH:
- Добавлена опция
KexAlgorithms
, позволяющая выбирать среди поддерживаемых алгоритмов обмена ключевой информацией. - Исправлена проблема вида «гонка ресурсов» с управляющими сокетами; теперь дохлые серверные сокеты будут автоматически убираться клиентами.
- В sftp(1) добавлена поддержка управления скоростью потока (опция командной строки
-l
), аналогично scp(1).
Заметные изменения в портах:
- Вместо GNU libtool по умолчанию теперь используется собственная версия libtool, написанная на Perl. Основные плюсы альтернативной реализации:
- Отсутствие проблем при сборке пакетов параллельно с наличием их же установленных: GNU libtool зачастую подцепляет в этих случаях библиотеки из системы, а не из того места, в котором идёт сборка, что приводит к конфликтам при использовании программ из данных пакетов и от них зависящих.
- Большая скорость работы: общая скорость полной сборки портов возросла на 15%.
- Более компактный и простой в понимании код, который проще поддерживать и который лучше учитывает специфику OpenBSD.
Практически все пакеты успешно собираются с помощью собственной реализации, а для немногих, закладывающихся на ещё нереализованные особенности поведения GNU libtool, по-прежнему используется последняя.
- Порт Ruby разбит на две версии, 1.8 и 1.9, аналогично тому как это делается для Python. По умолчанию на данный момент используется 1.8. Программы из портов проверены на работу без наличия симлинка
/usr/local/bin/ruby
, однако для сторонних программ он может понадобиться.
Также ряд (других) улучшений наблюдался в USB- и звуковой подсистемах (прежде всего касаемо поддержки ждущего режима), программных реализациях RAID, подсистеме IEEE 802.11, поддержке NetAtalk, bridge(4), cwm, gcvt(3), iked(8), mandoc(1), npppd(8), procfs, softraid(4), tcpbench и других многочисленных частях ОС.
Большая часть описанных изменений была произведена во время хакатона, проведённого в Нагано, Япония. Спасибо всем, кто помог осуществлению этой встречи, материально или организационно.
Полный текст статьи читайте на OpenNet