Домой Софт Возврат к GNU Coreutils в Ubuntu: почему Rust-версия cp вызвала сбой сборки

Возврат к GNU Coreutils в Ubuntu: почему Rust-версия cp вызвала сбой сборки

Попытка перевода системных утилит на Rust привела к несовместимости при обработке ключей, что заблокировало создание Live-образов ОС.

Команда разработчиков Ubuntu была вынуждена вновь переключиться на классическую утилиту cp из пакета GNU Coreutils. Причиной стала критическая несовместимость в реализации аналогичного инструмента, написанного на языке Rust (Rust Coreutils), из-за которой процесс автоматической сборки Live-образов системы (скрипт livecd-rootfs) стал завершаться с ошибкой.

История проблемы и детали сбоя

Ранее, при подготовке релиза Ubuntu 24.04, разработчики уже временно возвращались к стандартным утилитам cp, mv и rm из состава GNU Coreutils из-за обнаруженных уязвимостей. Однако с выходом обновления пакета coreutils-from-uutils 0.0.0~ubuntu26 было вновь активировано использование инструментов из проекта Rust Coreutils.

Сбой в работе сборочного конвейера был вызван тем, что скрипт вызывал утилиту cp с флагами -afL. В классической реализации GNU Coreutils эти опции обрабатывались корректно, но Rust-версия утилиты в ответ на этот запрос начала выдавать ошибку: «cp: -r not specified; omitting directory ‹dir-name›».

Технический разбор конфликта опций

Ошибка была спровоцирована различиями в логике обработки конфликтующих параметров -L и -a:

  • Флаг -L требует разыменовывать символические ссылки.
  • Составная опция -a (эквивалент -dR --preserve=all) включает флаг -d, который, напротив, запрещает разыменование символических ссылок.

Выяснилось, что в Rust Coreutils реализация в случае конфликта просто отбрасывала всю составную опцию -a целиком, а не пыталась исключить только противоречивый флаг -d. В результате система теряла флаг -R, отвечающий за рекурсивное копирование директорий, и параметр --preserve=all, необходимый для сохранения оригинальных атрибутов файлов в процессе копирования. Подобное поведение привело к невозможности полноценной сборки корневой файловой системы для Live-образов Ubuntu.

Источник: http://www.opennet.ru