# 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.

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.

Category:

- Arch package guidelines (Português)