自作ユーティリティをaptで管理したいという動機で、debパッケージの作り方を調べました。
真面目にやろうとすると色々情報を揃えてやらないといけないのですが、いきなり全部整備するのではなく、ステップバイステップで書いていこうと思います。なお、筆者の環境はUbuntu 18.04LTSです。
#debパッケージを作成する最小構成
最初のサンプルとして、次のシェルスクリプトをパッケージ化することを考えます。
#!/bin/sh
echo " ^ ^"
echo "=o.o="
echo " m m_|~"
exit 0
これを/usr/bin/mycatというファイル名で管理すれば、シェル上でmycatと入力すればいつでも可愛らしい猫を呼び出せるようになります。素晴らしい。
#念のため、mycatという名の実行ファイルが他に存在しないことを確認しておきましょう。
% which mycat
mycat not found
さて、debパッケージを作るための最小構成条件は次の通りです。
- パッケージ管理ディレクトリ(任意の名前で構いません)の下にフェイクのルートディレクトリがあること
- さらにその下に
- インストールイメージがあること
- DEBIANディレクトリ(許可属性755または775)があること
- さらにその下にcontrolファイルがあること
ここでは次のようなディレクトリ構成にしましょう。
mycat
└── Debian
├── DEBIAN
│ └── control
└── usr
└── bin
└── mycat
最初の"mycat"がパッケージ管理ディレクトリ、その下にある"Debian"がフェイクのルートディレクトリです。さらにその下にあるusr/bin/mycatが、aptインストール後には/usr/bin/mycatとなるイメージです。mycatの許可属性は755としておいて下さい。
% mkdir -p mycat/Debian
% cd Debian
% mkdir -m 755 DEBIAN
% mkdir -p usr/bin
% cd usr/bin
(〜mycatを上の中身に編集〜)
% chmod 755 mycat
% cd ../../DEBIAN
(controlを以下の要領で作成)
controlの中身は、少なくとも次の5項目を含んでいなければなりません。
- Package - パッケージ名
- Version - パッケージバージョン番号
- Description - パッケージの説明
- Maintainer - メンテナの名前と連絡先
- Architecture - 実行可能アーキテクチャ
各項目は':'(コロン)で区切られた後に書かれます。例えば次のような具合です。
Package: mycat
Version: 1.0
Description: Call your lovely cat!
Maintainer: (あなたの名前) <(あなたのe-mailアドレス)>
Architecture: all
#バージョン番号の付け方や実行アーキテクチャについてはここでは説明しませんが、お調べになることを強くお勧めします。
この上でパッケージ管理ディレクトリmycatまで戻り、dpkg-debコマンドでdebファイルを作成します。
% cd ../..
% fakeroot dpkg-deb --build Debian .
fakerootコマンドはfakerootパッケージに、dpkg-debコマンドはdpkg-devパッケージにそれぞれ入っています。コマンドが無いという人はそれぞれ上記をインストールしましょう。
% apt install fakeroot dpkg-dev
dpkg-debが成功したら、debパッケージファイルmycat_1.0_all.debが出来ているはずです。dpkgコマンドを使ってインストールしてみましょう。
% sudo dpkg -i mycat_1.0_all.deb
途中、パスワード入力を求められます。成功したら、早速mycatコマンドを試してみましょう。
% which mycat
/usr/bin/mycat
% mycat
^ ^
=o.o=
m m_|~
やったー可愛い猫ちゃんが表示されました!アンインストールも試してみましょう。
% sudo dpkg -r mycat
% which mycat
mycat not found
パッケージを誰にも公開するつもりが無く、単にインストール&アンインストールを簡単にすることだけが目的ならば、ここで示したように野良パッケージを作れば十分だと思います。ただし、誰にも公開しないとしてもパッケージをきちんと管理したいならば、やはり情報を整備すべきです。次回以降、少しずつ説明して参ります。