DKMS パッケージガイドライン
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
以下は DKMS パッケージを作成するときのガイドラインです。
目次
パッケージの名前
DKMS パッケージはオリジナルのパッケージ名に "-dkms" を加えた名前を付けます。
"-dkms" を削ったパッケージ名を表すのによく $pkgname
の下に $_pkgname
変数が使われます (例: _pkgname=${pkgname%-*}
)。
依存パッケージ
依存パッケージは元のパッケージから継承するのに加えて、dkms を追加して linux-headers を削除します (dkms パッケージは任意パッケージとして並べられます)。
ビルドソースの場所
ビルドソースは次の場所に配置します (DKMS のデフォルトビルドディレクトリです):
/usr/src/PACKAGE_NAME-PACKAGE_VERSION
パッケージディレクトリ内の、モジュールのビルド方法を記述した DKMS の設定 (dkms.conf
) には PACKAGE_NAME
と PACKAGE_VERSION
変数を含めます。
PACKAGE_NAME
- 実際のプロジェクト名 (通常は$_pkgname
または$_pkgbase
)。PACKAGE_VERSION
-$pkgver
にするのが慣例です。
パッチ
PKGBUILD または dkms.conf
でソースにパッチを適用できます。
.install でモジュールを自動的にロード
モジュールのロードやアンロードはユーザーが行うようにしてください。モジュールがロードされたときにクラッシュする可能性を考慮します。
また、カーネルモジュールの依存関係を更新するのに depmod
を明示的に呼び出す必要はありません。Pacman はフックによって自動的に DKMS の dkms install
と dkms remove
を実行します。dkms install
によって最後に必ず depmod
が呼びだれます。dkms install
は dkms build
に依存しており (最新カーネルに対してソースがビルドされます)、さらに dkms build
は dkms add
に依存しています (/var/lib/dkms/<package>/<version>/source
から /usr/src/<package>
にシンボリックリンクが張られます)。
サンプル
以下はパッケージ名とバージョンにあわせて dkms.conf
を編集するサンプルパッケージです。
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
pacman には DKMS フックが実装されており、.install ファイルで DKMS 固有の設定を指定する必要はありません。dkms install
や dkms remove
は自動的に呼び出されます。