DKMS package guidelines (Português)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Diretrizes de pacotes do Arch

32-bitCLRCMakeCrossDKMSEclipseElectronFonteFree PascalGNOMEGoHaskellJavaKDEKernelLispMesonMinGWNode.jsNonfreeOCamlPerlPHPPythonRRubyRustVCSWebWine

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.