debとrpmパッケージの命名規則
パッケージ命名規則
Linuxのパッケージを作ることになったので調査したメモです.
debパッケージの命名規則
${PACKAGE_NAME}_${VER_MAJ}.${VER_MIN}.${VER_BUILD}(-${VER_RELEASE}(${VER_RELEASE_SUFFIX}))_${ARCH_NAME}.deb
各要素は'_' (アンダーバー)を使用する.
- PACKAGE_NAME --- パッケージ名
- VER_MAJ --- メジャーバージョン
- VER_MIN --- マイナーバージョン
- VER_BUILD --- ビルドバージョン
- VER_RELEASE --- リリース番号
- VER_RELEASE_SUFFIX
リビジョン修飾文字列.
deb/rpm共通して文字列として使用できるのは、アルファベット小文字, 数字, '~'(チルダ) '+'(プラス).
リビジョン番号の前後関係にも影響する. - ARCH_NAME --- アーキテクチャ (amd64, x86, etc..)
debパッケージのバージョン比較テスト
バージョン比較テストは dpkg --compare-versions
を使用する.
演算子は 'lt'(<) 'gt'(>), 'le'(<=) 'ge'(>=)', 'eq'(==), 'ne'(!=)
# リリース番号ありを後発と判定 $ if $(dpkg --compare-versions "1.3.0" "lt" "1.3.0-1"); then echo true; else echo false; fi true # '~'はpreバージョンとして認識される. # '+'は数字順 $ if $(dpkg --compare-versions "1.3.0-2~1" "lt" "1.3.0-2"); then echo true; else echo false; fi true $ if $(dpkg --compare-versions "1.3.0-3+1" "lt" "1.3.0-3"); then echo true; else echo false; fi false # ひとつ前のリリースより後発リリースのpreバージョンのほうが新しい $ if $(dpkg --compare-versions "1.3.0-3~rc1" "lt" "1.3.0-2"); then echo true; else echo false; fi false
rpmパッケージの命名規則
${PACKAGE_NAME}-${VER_MAJ}.${VER_MIN}.${VER_BUILD}(-${VER_RELEASE}(${VER_RELEASE_SUFFIX})).${DIST_NAME}.${ARCH_NAME}.rpm
こちらは'-'(ハイフン)を使って要素を接続.
- PACKAGE_NAME --- パッケージ名
- VER_MAJ --- メジャーバージョン
- VER_MIN --- マイナーバージョン
- VER_BUILD --- ビルドバージョン
- VER_RELEASE --- リリース番号
- VER_RELEASE_SUFFIX
リビジョン修飾文字列.
deb/rpm共通して文字列として使用できるのは、アルファベット小文字, 数字, '~'(チルダ) '+'(プラス).
リビジョン番号の前後関係にも影響する. - DIST_NAME
パッケージの対象ディストリビューション.
(ex. 'el7' -> RHEL7, 'el7_9' -> RHEL7〜9, 'centos' -> centos, etc..) - ARCH_NAME --- アーキテクチャ
(x86, x86_64, noarch, etc..)
rpmパッケージのバージョン比較テスト
rpmdev-vercmp コマンドを使う.
rpmdevtools パッケージをインストールすると使える.
# インストール $ sudo yum install -y rpmdevtools
バージョン比較テスト
$ rpmdev-vercmp mypkg-2.2.1-3 mypkg-2.2.1-4 mypkg-2.2.1-3 < mypkg-2.2.1-4 $ rpmdev-vercmp mypkg-1.2.0 mypkg-1.2.0-1 mypkg-1.2.0 < mypkg-1.2.0-1 $ rpmdev-vercmp mypkg-3.2.1-3 mypkg-3.2.0-4 mypkg-3.2.1-3 > mypkg-3.2.0-4 # (注意) yumは'~'をpreバージョンとしては扱わないようです. $ rpmdev-vercmp mypkg-2.2.0-1~rc1 mypkg-2.2.0-1 mypkg-2.2.0-1~rc1 < mypkg-2.2.0-1