Help us understand the problem. What is going on with this article?

簡易ツールだって、パッケージで行こう!

More than 3 years have passed since last update.

仕事でUbuntu向けの簡単なシェルスクリプトを書くことがありますが、喫緊の課題に対処するために遣っ付け仕事で作成することが多く、再利用時に以下のような問題になることも度々です。

  • 時間が経過して使用方法が解らなくなる
  • システムのアップグレードで動かなくなる

上記問題への対処として、短手番で作成したスクリプトをオンラインマニュアル添付のパッケージ化することができればと思い、テンプレートを準備しました。

前提条件

以下のパッケージがインストールされている必要があります。

  • autoconf
  • automake
  • dh-make
  • dpkg-deb
  • ruby-ronn

テンプレート

ダウンロード先

https://github.com/takushi1969/shellDpkgTemplate/archive/master.zip

構成

テンプレートのパッケージ名は、hello、バージョンは、1.0としました。
パッケージ名とバージョンの間は、dh_makeを使用するために、'-'で結ぶ必要があります。

hello-1.0
├── hello-1.0/configure.ac
├── hello-1.0/Makefile.am
└── hello-1.0/src
    ├── hello-1.0/src/Makefile.am
    ├── hello-1.0/src/hello.1.ronn
    └── hello-1.0/src/hello.sh

パッケージの作成

では、テンプレートを使用して実際にパッケージを作成してみましょう。

  1. 環境変数の設定

    export EMAIL="takushi1969@hoge.hoge"
    export DEBFULLNAME="takushi1969 hoge"

    これらの環境変数は、インストール済のパッケージをdpkg-query -pコマンドで参照した時の情報として展開されます。

  2. テンプレートの展開

    コマンド: unzip shellDpkgTemplate-master.zip

  3. 作業ディレクトリへの移動

    コマンド: cd shellDpkgTemplate-master/hello-1.0

    上記の手順で展開した作業ディレクトリに移動します。

  4. GNU build systemのスクリプトの生成

    コマンド: autoreconf -i

    テンプレート内にある*ac、*amファイルから、GNU build systemのスクリプトを生成します。

  5. debianコントロールファイルの生成

    コマンド: dh_make -n

    dh_makeコマンドを実行すると、作成予定のパッケージを適用するアーキテクチャの入力を求められます。
    今回のパッケージはスクリプトのインストールで、アーキテクチャ依存ではありませんので、'i'を入力します。
    dh_make.png

  6. パッケージの生成

    コマンド: dpkg-buildpackage -uc -us

    deb形式のパッケージを生成します。
    生成したパケージは、親ディレクトリにhello1.0_all.debとして保存されます。

  7. パッケージのインストール

    コマンド: cd ..;sudo dpkg -i hello1.0_all.deb

    保存されたパッケージを、上記のコマンドでインストールします。
    また、インストールされたファイルは、以下のコマンドで確認することができます。

    コマンド: dpkg -L hello、およびマニュアル参照
    dpkg_L.png

流用の勘所

パッケージ名の変更

上記手順のパッケージの作成 2. テンプレートの展開の後、以下の部分を変更します。

  • ディレクトリ名の変更

    ディレクトリ: shelldpkgtemplate-master/hello-1.0
    helloの部分を修正

  • configure.acの定義の変更

    ファイル:shelldpkgtemplate-master/hello-1.0/configure.ac
    AC_INIT定義のhelloの部分を、上記のディレクトリと同じ名前に。

バージョンアップする

上記手順のパッケージの作成 2. テンプレートの展開の後、以下の部分を変更します。

  • ディレクトリ名の変更

    ディレクトリ: shelldpkgtemplate-master/hello-1.0
    1.0の部分を修正

  • configure.acの定義の変更

    ファイル:shelldpkgtemplate-master/hello-1.0/configure.ac
    AC_INIT定義の1.0の部分を、上記のディレクトリと同じ値に。

スクリプトを増やす

上記手順のパッケージの作成 2. テンプレートの展開の後、以下の部分を変更します。

  • スクリプトを追加

    追加するスクリプトを、ディレクトリ: shelldpkgtemplate-master/hello-1.0/srcに配置
    以下の説明では、追加するスクリプトをgoodbye.shとして説明します。

  • オンラインマニュアルの追加

    オンラインマニュアル:ronn-format(7)を参考に、オンラインマニュアルのソースイファイル: shelldpkgtemplate-master/hello-1.0/src/goodbye.ronnを作成します。

  • Makefile.acの変更

    ファイル : shelldpkgtemplate-master/hello-1.0/src/Makeiflle.ac
    googbye.shを追加する場合は、以下のように設定します。

    dist_man_MANS = hello.1 goodbye.1
    dist_bin_SCRIPTS = hello.sh goodbye.sh
    CLEANFILES = $(dist_man_MANS)
    
    hello.1: hello.1.ronn 
       ronn --roff $?
    goodbye.1: goodbye.1.ronn
       ronn --roff $?
    

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away