Подготовленный в Microsoft deb-пакет с Open R принудительно заменяет /bin/sh на bash

Компания Microsoft опубликовала deb-пакет (microsoft-r-open-mro-3.5.0) с инструментарием Open R (вариант языка R от Microsoft) для Debian и Ubuntu, в установочном сценарии которого обнаружена серия недопустимых оплошностей. В частности, скрипт настройки, вызываемый после установки пакета (postinstall), удаляет /bin/sh, после чего создаёт символическую ссылку /bin/sh на /bin/bash. Если в системе нет /bin/bash то /bin/sh остаётся удалённым и пользователь получает неработающее окружение.

Примечательно, что на идентичный код удаления /bin/sh в RPM-пакетах пользователи обращали внимание ещё в 2016 году. В то время проблема осталась нерешённой, а представитель Microsoft лишь пояснил, что /bin/sh заменяется, так как в Ubuntu в качестве shell по умолчанию применяется dash, а shell-обвязка над Microsoft R Server может работать только в bash. На этот раз критика не осталась без внимания и инженеры из Microsoft обновили deb- и rpm-пакеты, удалив в скрипте postinstall строки замены /bin/sh, вместо которых задействованы dpkg-divert для DEB и update-alternatives для RPM.

     #!/bin/bash        #TODO: Avoid hard code VERSION number in all scripts     VERSION=`echo $DPKG_MAINTSCRIPT_PACKAGE | sed 's/[[:alpha:]|(|[:space:]]//g' | sed 's/\-*//' | awk  -F. '{print $1 "." $2 "." $3}'`     INSTALL_PREFIX="/opt/microsoft/ropen/${VERSION}"        echo $VERSION        ln -s "${INSTALL_PREFIX}/lib64/R/bin/R" /usr/bin/R     ln -s "${INSTALL_PREFIX}/lib64/R/bin/Rscript" /usr/bin/Rscript        rm /bin/sh     ln -s /bin/bash /bin/sh    

Кроме того, в скриптах есть и другие ошибки, например, в случае наличия уже установленного оригинального R, установочный скрипт завершается ошибкой, а в случае удаления пакета Microsoft удаляет за одним и исполняемые файлы оригинального R (/usr/bin/R, /usr/bin/Rscript). Скрипт prerm:

     #!/bin/bash        VERSION=`echo $DPKG_MAINTSCRIPT_PACKAGE | sed 's/[[:alpha:]|(|[:space:]]//g' | sed 's/\-*//' | awk  -F. '{print $1 "." $2 "." $3}'`     INSTALL_PREFIX="/opt/microsoft/ropen/${VERSION}/"        rm /usr/bin/R     rm /usr/bin/Rscript     rm -rf "${INSTALL_PREFIX}/lib64/R/backup"    

©  OpenNet