Это был "случайный" выпуск, эквивалентный Yöntem 3.9.3.
--help
в fuse_new(), должны теперь обрабатывать эту опцию внутренне и вызывать fuse_lib_help() для вывода справки по общим опциям FUSE.$DESTDIR/etc/init.d
вместо $prefix/$sysconfdir/init.d
).libfuse 3.0.1 (2017-04-10) ==========================* Вновь введен пример examples/null.c. * Добавлена экспериментальная поддержка сборки с использованием Meson. * Документация указывает, что -o auto_unmount подразумевает -o nodev,nosuid. * Документация указывает, что опция use_ino высокого уровня API не влияет на inode, используемые libfuse и ядром. * Исправлены тестовые случаи для примеров passthrough* (они фактически не тестировали примеры). * Исправлены несколько ошибок в примерах passthrough*.
ОБСУЖДЕНИЕ ДЛЯ ПАКЕТОВЩИКОВ:
libfuse 3 спроектирован для совместной установки с libfuse 2. Однако некоторые файлы будут установлены как libfuse 2, так и libfuse 3 (например, /etc/fuse.conf, скрипты udev и init, и мануал mount.fuse(8)). Эти файлы следует брать из libfuse 3. Формат/содержимое гарантированно остаётся обратно совместимым с libfuse 2.
Мы рекомендуем выпускать три отдельных пакета: libfuse-common, содержащий файлы, общие для libfuse 2 и 3 (взятые из tar-архива libfuse3), и libfuse2 и libfuse3, содержащие общую библиотеку и вспомогательные программы для соответствующей версии.
Исправлены ошибки тестирования при выполнении тестов от имени root.
Улучшен контроль за версией util-linux.
Добавлена документация для всех флагов способностей FUSE (FUSE_CAP_*) и полей struct fuse_conn_info.
fuse_loop(), fuse_loop_mt(), fuse_session_loop() и fuse_session_loop_mt() теперь возвращают более подробные коды ошибок вместо просто -1. Подробнее см. документацию fuse_session_loop().
Основной цикл FUSE теперь прерывается, если файловая система запрашивает возможности, которые не поддерживаются ядром. В этом случае сессия завершается с кодом выхода -EPROTO
.
Большинство возможностей файловой системы, которые были опциональными в libfuse2, теперь активируются по умолчанию. Разработчикам файловых систем рекомендуется просмотреть документацию по фичам FUSE_CAP_* для обеспечения совместимости своей файловой системы с новыми семантиками. Как прежде, конкретная возможность всё ещё может быть отключена путём сброса соответствующего бита fuse_conn_info.wants в обработчике init().
Добавлены флаги способностей FUSE_CAP_PARALLEL_DIROPS и FUSE_CAP_POSIX_ACL, а также флаг FUSE_HANDLE_KILLPRIV.
Файловые системы, использующие низкий уровень API, теперь ответственны за сброс флагов setuid/setgid при записи файла, его обрезании или изменении владельца. Ранее это было обязанностью ядра, но подвержено расхождениям.
Бинарники fusermount и mount.fuse переименованы в fusermount3 и mount.fuse3 для совместной установки libfuse 2.x и 3.x.
Добавлено поле max_read в struct fuse_conn_info. На данный момент максимальный размер запроса чтения должен быть указан как там, так и передан через fuse_session_new() с помощью опции монтирования -o max_read=<n>
. В будущем указание этой опции может стать необязательным.
Документация: уточнено, что структура fuse_argv, передаваемая в fuse_new() и fuse_lowlevel_new(), всегда должна содержать хотя бы один элемент.
Обработчик init() высокого уровня API теперь получает дополнительный указатель на структуру fuse_config, который можно использовать для настройки специфических опций API высокого уровня.
Поле nopath_flag структуры fuse_operations удалено. Вместо этого новый флаг nullpath_ok теперь может быть установлен в структуре fuse_config.
Файловые системы, использующие низкий уровень API и поддерживающие запросы поиска для '.' и '..' должны продолжать убедиться, что они устанавливают бит FUSE_CAP_EXPORT_SUPPORT в fuse_conn_info->want.
(Это было всегда так, но не очевидно из документации).
Текст помощи, генерируемый fuse_lowlevel_help(), fuse_new() (и косвенно fuse_main()), больше не включает опции, которые маловероятно интересуют конечных пользователей. Полный список принимаемых опций теперь включен в документацию соответствующих функций (расположены в fuse.h/fuse_lowlevel.h и doc/html).
Опция монтирования -o nopath
удалена — она никогда не делала ничего (поскольку она условно перезаписывается значением флага nopath в структуре fuse_operations).
Опция монтирования -o large_read
удалена. Надеюсь, никто уже не использует Linux 2.4.
Опция монтирования -o nonempty
удалена, монтирование над непустыми директориями теперь всегда разрешено. Это приводит поведение файловых систем FUSE в соответствие с поведением обычной команды mount.
Файловые системы, которые не хотят позволять монтирование на непустые директории, должны выполнять эту проверку самостоятельно перед тем, как передать управление libfuse.
Обработчики chmod, chown, truncate, utimens и getattr высокого уровня API теперь все получают дополнительный указатель на структуру fuse_file_info (хотя он может быть NULL даже если файл открыт).
Обработчики fgetattr и ftruncate стали устаревшими и удалены.
Функция fuse_session_new больше не принимает опцию -o clone_fd
. Вместо этого это стало параметром функций fuse_session_loop_mt и fuse_loop_mt.
Для низкого уровня файловых систем, реализующих обработчик write_buf, опция splice_read теперь активируется по умолчанию. Как обычно, это можно изменить в обработчике init() файловой системы.
Обработка низкого уровня опций стала более последовательной:
Опции, которые могут быть установлены в обработчике init() (через параметр fuse_conn_info), теперь могут быть установлены только здесь, то есть fuse_session_new() больше не принимает аргументы, меняющие объект fuse_conn_info до или после вызова init(). В результате этого устранены двусмысленности, где некоторые опции могут быть перезаписаны init(), а другие перезаписывают выборы, сделанные init().
Для файловых систем, которые хотят предлагать командные строки для этих настроек, доступны новые функции fuse_parse_conn_info_opts() и fuse_apply_conn_info_opts().
Соответственно, метод fuse_lowlevel_help() был удален.* Поле async_read структуры fuse_conn_info удалено. Чтобы определить, поддерживает ли ядро асинхронное чтение, файловые системы должны проверять бит FUSE_CAP_ASYNC_READ поля capable. Чтобы включить/выключить асинхронное чтение, файловые системы должны установить этот флаг в поле wanted.
Функция fuse_parse_cmdline больше не выводит помощь при наличии флагов --verbose
или --help
. Это должно быть сделано файловой системой (например, используя функции fuse_cmdline_help() и fuse_lowlevel_help()).
Добавлен пример example/cuse_client.c для тестирования example/cuse.c.
Удалён пример example/null.c. Он не работал некоторое время по неизвестной причине — возможно потому, что он пытался рассматривать точку монтирования как файл, а не директорию?
Есть несколько новых примеров, демонстрирующих использование функций fuse_lowlevel_notify_*:
Опция монтирования -o big_writes
удалена. Она теперь всегда активна. Файловые системы, которые хотят ограничивать размер запросов записи, должны использовать опцию -o max_write=<N>
.
Функция fuse_lowlevel_new переименована в fuse_session_new и больше не интерпретирует опции --version или --help. Чтобы выводить информацию о помощи или версии, используйте новые функции fuse_lowlevel_help и fuse_lowlevel_version.
Опции монтирования allow_other и allow_root (принимаемые функцией fuse_session_new()) теперь могут быть указаны вместе. В этом случае allow_root имеет приоритет.
Есть новые функции fuse_session_unmount и fuse_session_mount, которые должны использоваться в низком уровне API. Функции fuse_mount и fuse_unmount должны использоваться только с высоким уровнем API.
Ни fuse_mount, ни fuse_session_mount больше не принимают параметры типа struct fuse_opts. Опции монтирования парсятся функциями fuse_new (для высокого уровня API) и fuse_session_new (для низкого уровня API). Чтобы выводить информацию о помощи или версии, используйте новые функции fuse_mount_help и fuse_mount_version.
Все функции fuse_lowlevel_notify_* теперь принимают параметр типа struct fuse_session вместо struct fuse_chan. Интерфейс канала (функции fuse_chan_*
) был сделан приватным. В результате типичная последовательность инициализации низкоуровневой файловой системы изменилась с:
ch = fuse_mount(mountpoint, &args); se = fuse_lowlevel_new(&args, &lo_oper, sizeof(lo_oper), &lo); fuse_set_signal_handlers(se); fuse_session_add_chan(se, ch); fuse_daemonize(fg); if (mt)
fuse_session_loop_mt(se);
- else
fuse_session_loop(se);
fuse_remove_signal_handlers(se); fuse_session_remove_chan(ch); fuse_session_destroy(se); fuse_unmount(mountpoint, ch);
на:
se = fuse_session_new(&args, &ll_ops, sizeof(ll_ops), NULL); fuse_set_signal_handlers(se); fuse_session_mount(se, mountpoint); fuse_daemonize(fg); if (mt)
fuse_session_loop_mt(se);
- else
- fuse_session_loop(se);
fuse_remove_signal_handlers(se); fuse_session_unmount(se); fuse_lowlevel_destroy(se);
Типовая конфигурация высокого уровня изменилась с:
ch = fuse_mount(*mountpoint, &args); fuse = fuse_new(ch, &args, op, op_size, user_data); se = fuse_get_session(fuse); fuse_set_signal_handlers(se); fuse_daemonize(fg); if (mt)
fuse_loop_mt(fuse);
- else
- fuse_loop(fuse);
fuse_remove_signal_handlers(se); fuse_unmount(mountpoint, ch); fuse_destroy(fuse);
на:
fuse = fuse_new(&args, op, op_size, user_data); se = fuse_get_session(fuse); fuse_set_signal_handlers(se); fuse_mount(fuse, mountpoint); fuse_daemonize(fg); if (mt)
fuse_loop_mt(fuse);
- else
- fuse_loop(fuse);
fuse_remove_signal_handlers(se); fuse_unmount(fuse); fuse_destroy(fuse)
Файловые системы, использующие fuse_main, не затронуты этим изменением.
Для интеграции с пользовательскими циклами событий новая функция fuse_session_fd предоставляет файловый дескриптор, используемый для связи с ядром.
examples/fuse_lo-plus.c
и новым API-функционалом fuse_add_direntry_plus.Пожалуйста, просмотрите историю Git, например здесь: https://github.com/libfuse/libfuse/blob/fuse_2_9_3/ChangeLog.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )