ま、そんなところで。

ニッチな技術系メモとか、車輪を再発明してみたりとか.

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

参考