「DKMS パッケージガイドライン」の版間の差分
(翻訳。「Dynamic Kernel Module Support」から移動。) |
細 (セクションの階層構造を修正) |
||
12行目: | 12行目: | ||
"''-dkms''" を削ったパッケージ名を表すのによく {{ic|$pkgname}} の下に {{ic|$_pkgname}} 変数が使われます (例: {{ic|1=_pkgname=${pkgname%-*} }})。 |
"''-dkms''" を削ったパッケージ名を表すのによく {{ic|$pkgname}} の下に {{ic|$_pkgname}} 変数が使われます (例: {{ic|1=_pkgname=${pkgname%-*} }})。 |
||
− | + | == 依存パッケージ == |
|
依存パッケージは元のパッケージから継承するのに加えて、{{pkg|dkms}} を追加して {{pkg|linux-headers}} を削除します (dkms パッケージは''任意パッケージ''として並べられます)。 |
依存パッケージは元のパッケージから継承するのに加えて、{{pkg|dkms}} を追加して {{pkg|linux-headers}} を削除します (dkms パッケージは''任意パッケージ''として並べられます)。 |
||
− | + | == ビルドソースの場所 == |
|
ビルドソースは次の場所に配置します (DKMS のデフォルトビルドディレクトリです): |
ビルドソースは次の場所に配置します (DKMS のデフォルトビルドディレクトリです): |
||
27行目: | 27行目: | ||
* {{ic|PACKAGE_VERSION}} - {{ic|$pkgver}} にするのが慣例です。 |
* {{ic|PACKAGE_VERSION}} - {{ic|$pkgver}} にするのが慣例です。 |
||
− | + | == パッチ == |
|
PKGBUILD または {{ic|dkms.conf}} でソースにパッチを適用できます。 |
PKGBUILD または {{ic|dkms.conf}} でソースにパッチを適用できます。 |
||
− | + | == .install でモジュールを自動的にロード == |
|
モジュールのロードやアンロードはユーザーが行うようにしてください。モジュールがロードされたときにクラッシュする可能性を考慮します。 |
モジュールのロードやアンロードはユーザーが行うようにしてください。モジュールがロードされたときにクラッシュする可能性を考慮します。 |
||
37行目: | 37行目: | ||
また、カーネルモジュールの依存関係を更新するのに {{ic|depmod}} を明示的に呼び出す必要はありません。Pacman はフックによって自動的に DKMS の {{ic|dkms install}} と {{ic|dkms remove}} を実行します。{{ic|dkms install}} によって最後に必ず {{ic|depmod}} が呼びだれます。{{ic|dkms install}} は {{ic|dkms build}} に依存しており (最新カーネルに対してソースがビルドされます)、さらに {{ic|dkms build}} は {{ic|dkms add}} に依存しています ({{ic|/var/lib/dkms/<package>/<version>/source}} から {{ic|/usr/src/<package>}} にシンボリックリンクが張られます)。 |
また、カーネルモジュールの依存関係を更新するのに {{ic|depmod}} を明示的に呼び出す必要はありません。Pacman はフックによって自動的に DKMS の {{ic|dkms install}} と {{ic|dkms remove}} を実行します。{{ic|dkms install}} によって最後に必ず {{ic|depmod}} が呼びだれます。{{ic|dkms install}} は {{ic|dkms build}} に依存しており (最新カーネルに対してソースがビルドされます)、さらに {{ic|dkms build}} は {{ic|dkms add}} に依存しています ({{ic|/var/lib/dkms/<package>/<version>/source}} から {{ic|/usr/src/<package>}} にシンボリックリンクが張られます)。 |
||
− | + | == サンプル == |
|
以下はパッケージ名とバージョンにあわせて {{ic|dkms.conf}} を編集するサンプルパッケージです。 |
以下はパッケージ名とバージョンにあわせて {{ic|dkms.conf}} を編集するサンプルパッケージです。 |
||
100行目: | 100行目: | ||
}} |
}} |
||
− | + | === .install === |
|
pacman には DKMS フックが実装されており、.install ファイルで DKMS 固有の設定を指定する必要はありません。{{ic|dkms install}} や {{ic|dkms remove}} は自動的に呼び出されます。 |
pacman には DKMS フックが実装されており、.install ファイルで DKMS 固有の設定を指定する必要はありません。{{ic|dkms install}} や {{ic|dkms remove}} は自動的に呼び出されます。 |
2022年4月20日 (水) 11:50時点における最新版
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
は自動的に呼び出されます。