32-bit – CLR – CMake – Cross – DKMS – Eclipse – Electron – Font – Free Pascal – GNOME – Go – Haskell – Java – KDE – Kernel – Lisp – Meson – MinGW – Node.js – Nonfree – OCaml – Perl – PHP – Python – R – Ruby – Rust – Shell – 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 package guidelines (Русский).
Подготовка к сборке пакетов
- Всегда добавляйте mono в
depends - Всегда выставляйте
archвany. Mono не поддерживает сборку (запуск) 64-битных приложений. - Всегда добавляйте
!stripвoptions - Если Вы собираете библиотеку (DLL), установите её в Mono global assembly cache (GAC), если она будет использоваться в качестве зависимости.
- Если приложение/библиотека поставляется с отладочной базой данных (program debug database file, Foo.dll.pdb), переконвертируйте её:
pdb2mdb Foo.dll - Если Вы собираете приложение (EXE), убедитесь в том, что добавили скрипт для запуска в
/usr/bin. Пример скрипта:
#!/bin/sh exec mono foo.exe "$@"
Подписанные сборки
Если пакет будет установлен в GAC, убедитесь, что у Вас есть ключ для подписи. Если нет, то сгенерируйте его: sn -k 1024 Foo.snk.
Затем Вам нужно дизассемблировать пакет: monodis Foo.dll --output=Foo.il. После чего собрать снова, но уже с подписью: ilasm /dll /key:Foo.snk Foo.il
Примеры PKGBUILD
Следующие примеры стараются охватить некоторые из наиболее распространённых соглашений и систем сборки.
xbuild
Неподписанные DLL
# Maintainer: ваше имя <ваша@почта>
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
# если пакет не подписан, сделайте следующее:
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"
# Регистрация в Mono GAC
gacutil -i Foo.dll -root "$pkgdir/usr/lib"
}