Форум русскоязычного сообщества Xubuntu

Разное => Новости => Тема начата: denkin от июня 16, 2018, 13:45:10

Название: Скрипт Microsoft в deb-пакет с Open R принудительно заменяет /bin/sh на bash
Отправлено: denkin от июня 16, 2018, 13:45:10
ЦитироватьКомпания 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 остаётся удалённым и пользователь получает неработающее окружение.

Новость на Opennet. (https://www.opennet.ru/opennews/art.shtml?num=48778)

Подробности

"Примечательно, что на идентичный код удаления /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" "
(ц)

[свернуть]