CLR package guidelines (Русский)

From ArchWiki
Указания по созданию пакетов

CLRCrossEclipseFree PascalGNOMEGoHaskellJavaKDEKernelLispMinGWNonfreeOCamlPerlPHPPythonRubyVCSWebWine

Этот документ определяет стандарты для создания пакетов Common Language Runtime (.NET) для Arch Linux. На текущий момент только Mono способен обеспечить эффективный и работоспособный запуск CLR в смешанных системах. Будьте внимательны - большинство CLR программ разработанных в среде Microsoft .NET могут не запустится в Mono, так как содержат платформозависимые .NET-факторы: вызовы P/Invoke и Microsoft DRM API (цифровые средства защиты авторских прав). Однако, в связке с Wine (версия 1.5.6 и выше), у Вас есть некоторая вероятность запустить ваше приложение. Для получения информации смотрите Wine PKGBUILD Guidelines.

Подготовка к сборке пакетов

  • Всегда добавляйте mono в depends
  • Всегда выставляйте arch в any. Mono не поддерживает сборку (запуск) 64-битных приложений.
  • Всегда добавляйте !strip в options
  • Если Вы собираете библиотеку (DLL), которая будет установлена в Mono's global assembly cache (GAC), добавте GAS в зависимости (к пакету) .
  • Если приложение/библиотека поставляется с отладочной базой данных (program debug database file, Foo.dll.pdb), переконвертируйте её: pdb2mdb Foo.dll
  • Если Вы собираете приложение (EXE), убедитесь в том, что добавили скрипт для запуска в /usr/bin. Пример скрипта:
#!/bin/sh
mono foo.exe $@

Подписанные сборки

Если пакет будет установлен в GAC, убедитесь, что у Вас есть ключ для подписи. Если нет, то сгенерируйте его: sn -k 1024 Foo.snk. Затем Вам нужно дизасембелировать пакет: monodis Foo.dll --output=Foo.il. После чего соберать снова, но уже с подписью: ilasm /dll /key:Foo.snk Foo.il

Примеры PKGBUILDs

xbuild

Неподписанные DLL

# Maintainer: yourname <yourmail>
pkgname=foo
pkgver=1.0
pkgrel=1
pkgdesc="Fantabulous library for .Net"
arch=('any')
url="http://www.foo.bar"
license=('GPL')
depends=('mono')
options=('!strip')
source=("http://www.foo.bar/foobar.tar.gz")
md5sums=('4736ac4f34fd9a41fa0197eac23bbc24')

build() {
  cd "${srcdir}/foobar"

  xbuild Foo.sln

  # if the package is unsigned, do the following:
  cd "/bin/x86/Debug"
  monodis Foo.dll --output=Foo.il
  sn -k 1024 Foo.snk
  ilasm /dll /key:Foo.snk Foo.il
}

package() {
  cd "${srcdir}/foobar/bin/x86/Debug"

  install -Dm644 Foo.dll "$pkgdir/usr/lib/foobar/Foo.dll"
  install -Dm644 Foo.dll.mdb "$pkgdir/usr/lib/foobar/Foo.dll.mdb"
  
  # Register assembly into Mono's GAC
  gacutil -i Foo.dll -root "$pkgdir/usr/lib"
}

NAnt

Prebuild