Скрипты, установленные пакетом deb, имеют неправильный префикс

Создавая наши собственные пакеты deb, мы столкнулись с проблемой необходимости вручную исправлять некоторые скрипты, чтобы они получали правильный префикс.

Особенно,

  • Мы создаем mono.
  • Мы используем официальные архивы.
  • Скрипты с неправильным префиксом: mcs, xbuild , nunit-console4 и т. д.

Пример неправильного скрипта:

#!/bin/sh
exec /root/7digital-mono/mono/bin/mono \
      --debug $MONO_OPTIONS \
      /root/7digital-mono/mono/lib/mono/2.0/nunit-console.exe "$@"

Каким должен быть правильный конечный результат:

#!/bin/sh
exec /usr/bin/mono \
      --debug $MONO_OPTIONS \
      /usr/lib/mono/2.0/nunit-console.exe "$@"

Обходной путь, который мы используем в нашем скрипте build-package перед вызов dpkg-buildpackage:

sed -i s,`pwd`/mono,/usr,g $TARGET_DIR/bin/mcs
sed -i s,`pwd`/mono,/usr,g $TARGET_DIR/bin/xbuild
sed -i s,`pwd`/mono,/usr,g $TARGET_DIR/bin/nunit-console
sed -i s,`pwd`/mono,/usr,g $TARGET_DIR/bin/nunit-console2
sed -i s,`pwd`/mono,/usr,g $TARGET_DIR/bin/nunit-console4

Теперь, каков ПРАВИЛЬНЫЙ способ исправить это? Полные сценарии создания пакетов Debian здесь.

Отказ от ответственности: я знаю, что есть предварительные пакеты Mono 3 здесь! Но они не работают для Squeeze.


person knocte    schedule 05.02.2013    source источник


Ответы (1)


правильный способ - не вызывать ./configure --prefix=$TARGET_DIR

это сообщает всем двоичным файлам/скриптам/..., что установленные файлы закончатся в ${TARGET_DIR}, тогда как они действительно должны закончиться в /usr.

вы можете использовать переменную DESTDIR (как в make install DESTDIR=${TARGET_DIR}) для изменения (префикса) цели установки во время установки (файлы будут заканчиваться в ${TARGET_DIR}/${prefix}, но будут иметь только ${prefix} «встроенный»)

person umläute    schedule 06.02.2013
comment
ммм, когда я это сделаю, это не удастся, я схвачу ошибку как можно скорее и дам вам знать - person knocte; 20.02.2013
comment
что вы делаете, и как это терпит неудачу? - person umläute; 20.02.2013
comment
тест -z /usr/доля/libgc-моно || /bin/mkdir -p /usr/share/libgc-mono /bin/mkdir: невозможно создать каталог /usr/share/libgc-mono': Permission denied make[3]: *** [install-dist_pkgdataDATA] Error 1 make[3]: Leaving directory /home/lockerteam/7digital-mono/mono-3.0.3/libgc/doc' make[2]: *** [install-am] Ошибка 2 make[2]: Выход из каталога /home/lockerteam/7digital-mono/mono-3.0.3/libgc/doc' make[1]: *** [install-recursive] Error 1 make[1]: Leaving directory /home/lockerteam/7digital-mono/mono-3.0.3/libgc' make: *** [install-recursive] Ошибка 1 - person knocte; 20.02.2013
comment
так что это означает, что он пытается установить в / usr на машине, которая создает deb, почему? - person knocte; 20.02.2013
comment
ммм, одну секунду, я думаю, проблема в моем скрипте, может быть, мне следует использовать DESTDIR=$TARGET_DIR вместо DESTDIR=$(TARGET_DIR)? тестирование.... - person knocte; 20.02.2013
comment
оказывается, это на самом деле не работает, я получаю эту ошибку: stackoverflow.com/questions/15187344/ причина, по которой я, возможно, не заметил раньше, заключается в том, что Я мог установить предыдущий пакет, и это заставляло работать новое поколение пакетов deb; но в ванильном дебиане без моно ничего не получается - person knocte; 04.03.2013