プロジェクト

全般

プロフィール

Debパッケージ作成時のバージョン番号取得について

  • debパッケージ作成時、インストール先を「openrtm-1.2」とした場合、この1.2のバージョン番号を deb/debian/rules で取得するため、dpkg-parsechangelog コマンドを利用した
  • この動作確認メモ
  • シェルスクリプトならば、以下で取得できるのだが、これをrulesに定義すると、カッコの数が合わないと怒られる
    $ head -n 1 changelog | sed 's/.*(\([0-9].[0-9]\).*/\1/'
    1.2
    
  • dpkg-parsechangelogコマンドの--show-fieldオプションを利用できる
    $ dpkg-parsechangelog --show-field Version
    1.2.0-0
    $ dpkg-parsechangelog --show-field Version | cut -b 1-3
    1.2
    
  • ところが、この --show-field オプションはバージョン1.17から追加されたということで、現在サポートしている環境全てで利用できない
    dpkg-parsechangelogのバージョン確認結果
        debian 70, 70-64   ・・・1.16.18(--show-field 使えない)
        debian 80, 80-64   ・・・1.17.27
        ubuntu 1204, 1204-64 ・・・1.16.1.2(--show-field 使えない)
        ubuntu 1404, 1404-64 ・・・1.17.5
        ubuntu 1604, 1604-64 ・・・1.18.4
        ubuntu 1610, 1610-64 ・・・1.18.10
    
  • dpkg-parsechangelogを実行すると下記の情報を得られる
    $ dpkg-parsechangelog
    Source: openrtp
    Version: 1.2.0-0
    Distribution: experimental
    Urgency: low
    Maintainer: Noriaki Ando <n-ando@aist.go.jp>
    Date: Mon, 12 Dec 2016 18:36:29 +0900
    Changes:
     openrtp (1.2.0-0) experimental; urgency=low
     .
       * 1.2.0-0 (1.2.0-RELEASE). OpenRTP-1.2.0-RELEASE
    
  • --show-fieldオプションを使わずに取得するためには、
    $ dpkg-parsechangelog | grep Version: | cut -d' ' -f2- | cut -b 1-3
    1.2
    

    または
    $ dpkg-parsechangelog | sed -n 's/^Version: //p' | cut -b 1-3
    1.2
    
  • 後者を使い、deb/debian/rules では以下のように定義している
    # short version number
    SHORT_VER := $(shell dpkg-parsechangelog | sed -n 's/^Version: //p' | cut -b 1-3)
    
      :
    
    # for openrtp package
    (cd $(CURDIR) ; mkdir -p $(CURDIR)/debian/openrtp/usr/lib/$(DEB_HOST_MULTIARCH)/openrtm-$(SHORT_VER)/openrtp)