DKMS package guidelines (Português)

Diretrizes de pacotes do Arch
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.