[devel] [#210757] EPERM (try 3) bash3.git=3.2.57-alt4 bash.git=4.4.23-alt1 bash-completion.git=2.8-alt1
Aleksei Nikiforov
darktemplar на altlinux.org
Чт Авг 2 11:38:15 MSK 2018
Здравствуйте.
26.07.2018 12:53, Dmitry V. Levin пишет:
> On Wed, Jul 25, 2018 at 06:21:46PM +0300, Aleksei Nikiforov wrote:
>> Здравствуйте.
>>
>> Сделал новую тестовую сборку bash-4, в этот раз также с отдельным bash-3
>> и свежим bash-completion. Прошу заинтересованных потестировать.
>
> Спасибо. Ввиду того, что у нас bash-5 не за горами, может быть, упаковать
> bash-4 как bash4 (с подпакетами sh4, bash4, bash4-devel, bash4-doc,
> bash4-examples), и, по аналогии с gcc-defaults, сделать bash-defaults
> c подпакетами sh, bash, bash-devel, bash-doc, bash-examples,
> содержащие общие файлы (такие как bashrc) и переключающие bash
> на нужную версию?
>
Я попробовал собрать bash3 и bash4 таким образом, с отдельными пакетами
sh и bash с симлинками и зависимостями на последнюю версию sh4 и bash4
соответственно.
Проблема при такой сборке возникает с плагинами bash. Сейчас плагины для
bash3 лежат в /usr/lib/bash. Плагины bash4 лучше держать отдельно - их
больше по сравнению с bash3, да и совместимость не гарантированна. То,
что собранный для bash3 пакет bash-builtin-lockf работает с bash4 скорее
стоит считать удачей и не рассчитывать на такое поведение, особенно при
обновлении до следующих версий bash.
В связи со всем вышесказанным, для плагинов bash4 нужна отдельная
директория.
Если для совместимости с текущим сетапом использовать /usr/lib/bash для
плагинов bash3, то плагины bash4 можно положить в /usr/lib/bash4,
например. Но тогда в некоторых пакетах для переезда на bash4 прийдётся
явно менять захардкоженный путь до /usr/lib/bash/lockf, либо скриптовать
поведение по поиску пути до lockf в зависимости от версии bash, а если
lockf для bash4 будет в отдельном пакете - ещё и менять зависимости.
Например, такой путь захардкожен в girar, hasher, gnupg2. Для такого
сетапа сделано тестовое задание #210913 (но указанные пакеты ещё не
обновлены).
Если же попытаться использовать директорию /usr/lib/bash3 для плагинов
bash3, /usr/lib/bash4 - для bash4, и сделать symlink /usr/lib/bash для
текущей версии, то такому сетапу помешает rpm - нет прямого способа
заменить директорию на symlink, т.е. прямая миграция невозможна. Есть
незавершённое тестовое задание #210931 с таким сетапом.
Если же в /usr/lib/bash держать плагины для текущей версии bash, а для
bash3 их пересобрать в /usr/lib/bash3, то такой сетап уже есть в
тестовом задании #210757. Разве что нет симлинков sh -> sh4, bash ->
bash4, и можно дособрать lockf для bash3 в /usr/lib/bash3, но
актуальность всех этих действий в таком случае под вопросом, особенно
необходимости таких симлинков. И не нужно при апгрейде bash пересобирать
дополнительные пакеты лишь для смены захардкоженного пути и зависимостей.
Какие есть идеи по поводу данной проблемы?
С уважением,
Алексей Никифоров
Подробная информация о списке рассылки Devel