「DKMS パッケージガイドライン」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (typo) |
細 (セクションの階層構造を修正) |
||
(同じ利用者による、間の1版が非表示) | |||
4行目: | 4行目: | ||
{{Package Guidelines}} |
{{Package Guidelines}} |
||
+ | 以下は [[DKMS]] パッケージを作成するときのガイドラインです。 |
||
− | Here are some guidelines to follow when creating a [[DKMS]] package. |
||
+ | == パッケージの名前 == |
||
− | == Package name == |
||
+ | DKMS パッケージはオリジナルのパッケージ名に "''-dkms''" を加えた名前を付けます。 |
||
− | DKMS packages are named by appending "''-dkms''" to the original package name. |
||
− | + | "''-dkms''" を削ったパッケージ名を表すのによく {{ic|$pkgname}} の下に {{ic|$_pkgname}} 変数が使われます (例: {{ic|1=_pkgname=${pkgname%-*} }})。 |
|
− | == |
+ | == 依存パッケージ == |
+ | 依存パッケージは元のパッケージから継承するのに加えて、{{pkg|dkms}} を追加して {{pkg|linux-headers}} を削除します (dkms パッケージは''任意パッケージ''として並べられます)。 |
||
− | Dependencies should be inherited from the original version with {{Pkg|dkms}} added and {{Pkg|linux-headers}} removed (as it is listed by the dkms package as ''optional''). |
||
+ | == ビルドソースの場所 == |
||
− | == Build source location == |
||
+ | ビルドソースは次の場所に配置します (DKMS のデフォルトビルドディレクトリです): |
||
− | Build sources should go into (this is the default build directory for DKMS): |
||
/usr/src/''PACKAGE_NAME''-''PACKAGE_VERSION'' |
/usr/src/''PACKAGE_NAME''-''PACKAGE_VERSION'' |
||
− | + | パッケージディレクトリ内の、モジュールのビルド方法を記述した DKMS の設定 ({{ic|dkms.conf}}) には {{ic|PACKAGE_NAME}} と {{ic|PACKAGE_VERSION}} 変数を含めます。 |
|
− | * {{ic|PACKAGE_NAME}} - |
+ | * {{ic|PACKAGE_NAME}} - 実際のプロジェクト名 (通常は {{ic|$_pkgname}} または {{ic|$_pkgbase}})。 |
− | * {{ic|PACKAGE_VERSION}} - |
+ | * {{ic|PACKAGE_VERSION}} - {{ic|$pkgver}} にするのが慣例です。 |
− | == |
+ | == パッチ == |
+ | PKGBUILD または {{ic|dkms.conf}} でソースにパッチを適用できます。 |
||
− | The sources can be patched either directly in the PKGBUILD or through {{ic|dkms.conf}}. |
||
+ | == .install でモジュールを自動的にロード == |
||
− | == Module loading automatically in .install == |
||
+ | モジュールのロードやアンロードはユーザーが行うようにしてください。モジュールがロードされたときにクラッシュする可能性を考慮します。 |
||
− | Loading and unloading modules should be left to the user. Consider the possibility a module may crash when loaded. |
||
− | + | また、カーネルモジュールの依存関係を更新するのに {{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}} を編集するサンプルパッケージです。 |
||
− | Here is an example package that edits {{ic|dkms.conf}} according to the package name and version. |
||
=== PKGBUILD === |
=== PKGBUILD === |
||
102行目: | 102行目: | ||
=== .install === |
=== .install === |
||
− | + | 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
は自動的に呼び出されます。