DKMS package guidelines (Português)
32-bit – CLR – CMake – Cross – DKMS – Eclipse – Electron – Fonte – 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
Aqui estão algumas diretrizes para seguir ao criar um pacote DKMS.
Nome de pacote
Os pacotes DKMS são nomeados anexando "-dkms" ao nome do pacote original.
A variável $_pkgname
é frequentemente usada abaixo de $pkgname
para descrever o nome do pacote menos o sufixo "-dkms" "(por exemplo, _pkgname=${pkgname%-*
}). Isso é útil para ajudar a manter semelhanças entre o pacote original PKGBUILD e a variante DKMS.
Dependências
As dependências devem ser herdadas da versão original com o dkms adicionado e o linux-headers removidos (como listado no pacote dkms como opcional).
Local de fontes de compilação
As fontes de compilação devem entrar (este é o diretório de compilação padrão do DKMS):
/usr/src/NOME_PACOTE-VERSÃO_PACOTE
No diretório do pacote, uma configuração de DKMS informa ao DKMS como compilar o módulo (dkms.conf
), incluindo as variáveis NOME_PACOTE
e VERSÃO_PACOTE
.
-
NOME_PACOTE
- o nome real do projeto (geralmente$_pkgname
ou$_pkgbase
). -
VERSÃO_PACOTE
- por convenção, este também deve ser o$pkgver
.
Correções
Pode-se aplicar patches corrigindo os fontes diretamente no PKGBUILD ou através de dkms.conf
.
Carregamento de módulos automaticamente em .install
Carregar ou descarregar os módulos devem ser deixados para o usuário. Considere a possibilidade de um módulo travar ao ser carregado.
Além disso, observe que você não precisa chamar depmod
explicitamente para atualizar as dependências do seu módulo do kernel. Agora, o pacman está chamando o dkms install
e o dkms remove
do DKMS automaticamente como ganchos (hooks). dkms install
está certificando-se de que depmod
seja chamado no final de seu processo. O dkms install
depende do dkms build
(para compilar o fonte no kernel atual), que depende do dkms add
(para adicionar um link simbólico de /var/lib/dkms/<pacote>/<versão>/fonte
para /usr/src/<pacote>
).
Exemplo
Aqui está um exemplo de pacote que edita dkms.conf
de acordo com o nome e a versão do pacote.
PKGBUILD
PKGBUILD
# Maintainer: foo <foo(at)example(dot)org> # Contributor: bar <bar(at)example(dot)org> _pkgbase=example pkgname=example-dkms pkgver=1 pkgrel=1 pkgdesc="The Example kernel modules (DKMS)" arch=('i686' 'x86_64') url="https://www.example.org/" license=('GPL2') depends=('dkms') conflicts=("${_pkgbase}") install=${pkgname}.install source=("${url}/files/tarball.tar.gz" 'dkms.conf' 'linux-3.14.patch') md5sums=(use 'updpkgsums') prepare() { cd ${_pkgbase}-${pkgver} # Patch patch -p1 -i "${srcdir}"/linux-3.14.patch } package() { # Install make DESTDIR="${pkgdir}" install # Copy dkms.conf install -Dm644 dkms.conf "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/dkms.conf # Set name and version sed -e "s/@_PKGBASE@/${_pkgbase}/" \ -e "s/@PKGVER@/${pkgver}/" \ -i "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/dkms.conf # Copy sources (including Makefile) cp -r ${_pkgbase}/* "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/ }
dkms.conf
dkms.conf
PACKAGE_NAME="@_PKGBASE@" PACKAGE_VERSION="@PKGVER@" MAKE[0]="make --uname_r=$kernelver" CLEAN="make clean" BUILT_MODULE_NAME[0]="@_PKGBASE@" DEST_MODULE_LOCATION[0]="/kernel/drivers/misc" AUTOINSTALL="yes"
.install
Agora, o pacman possui hooks de DKMS implementados. Você não precisa especificar a configuração específica do DKMS no seu arquivo .install. As chamadas para dkms install
e dkms remove
serão automáticas.