CLR package guidelines (Русский)
CLR – Cross – Eclipse – Free Pascal – GNOME – Go – Haskell – Java – KDE – Kernel – Lisp – MinGW – Nonfree – OCaml – Perl – PHP – Python – Ruby – VCS – Web – Wine
Этот документ определяет стандарты для создания пакетов 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" }