2023年8月13日日曜日

debファイルを作る


背景

debファイルとはdebianで利用されるパッケージ管理ファイルです。
配布したいubuntu向けのバイナリファイルを作ったものの関連ライブラリのインストールやコードのダウンロードとビルド手順の解説が面倒だったので、debファイルとして配布するために作り方を調べて作ってみました。

把握した作り方を記事に残します。

参考にした記事

自分の調査した範囲では下記記事のdpkg-debコマンドを利用したdebファイル作成手順が最も分かりやすかったので、それを利用しています。

社内利用のための deb パッケージング入門

実行環境

ubuntu22.04

debian系のOSなら同じことができると思います。

フォルダとファイル作成

WORK_DIRとCURRENT_DIRを作成し、WORK_DIRにインストール対象のファイルや設定ファイルを配置し、CURRENT_DIRにdebファイルを出力します。

この記事ではWORK_DIRとCURRENT_DIRを下記のパスで扱いますが、好きなパスをご利用ください。
CURRENT_DIR=~/debprojects/practice-deb-package
WORK_DIR=$CURRENT_DIR/work
mkdir -p $CURRENT_DIR $WORK_DIR

WORK_DIRの中にDEBIANというフォルダを作り、その中にdebファイルのビルドに必要な設定ファイルcontrol作ります。
動作に必要な関連ライブラリはcontrolのDependsに記述します。
Dependsはカンマ「,」区切りで複数指定したりor(|)で複数の中から1つ指定したりできます。
$WORK_DIR/DEBIAN/control
Package: practice-deb-pack
Maintainer: Your Name <your-email-address@sample.com>
Architecture: amd64
Version: 1.0.0-1
Description: Practice deb pack project.
Supply simple script.
Depends: sl

WORK_DIR以下のDEBIANフォルダ以外のフォルダやファイルが/に配置されるので、/usr/binにインストールされるスクリプトを配置します。
文字を表示しつつslコマンド(cli画面にslが走るお遊びコマンド)を実行するスクリプトです。
$WORK_DIR/usr/bin/practice-deb-pack
#!/bin/bash
echo this is practice-deb-pack
sl

スクリプトは実行可能にしておきます。
chmod a+x $WORK_DIR/usr/bin/practice-deb-pack

作成したフォルダとファイルの構成がこちらです
~/debprojects/practice-deb-pack  // CURRENT_DIR
└── work // WORK_DIR
├── DEBIAN
│   └── control
└── usr
└── bin
└── practice-deb-pack

ビルド

dpkg-debコマンドでWORK_DIRの中身をビルドします。
ビルド後のファイル出力先をCURRENT_DIRにしています。
dpkg-deb --build $WORK_DIR $CURRENT_DIR

成功するとCURRENT_DIRにdebファイルが生成されます。

インストール

生成したdebファイルのパスを指定してapt installコマンドを実行してインストールします。
cd $CURRENT_DIR
sudo apt install ./practice-deb-pack_1.0.0-1_amd64.deb


実行


作成したpractice-deb-packスクリプトがOSの実行可能なフォルダ/usb/binに配置されて実行可能な状態になります。
which practice-deb-pack

コマンドを呼べば実行できます。
practice-deb-pack


アンインストール

$WORK_DIR/DEBIAN/controlのPackage Nameで指定した名前をapt purgeやapt autoremoveで呼び出せばアンインストールできます。
sudo apt purge practice-deb-pack --auto-remove

cmakeなどでインストールするプロジェクトの場合は$WORK_DIRをインストール先にしてファイルを配置した後にdebを作れば良い

cmakeは「CMAKE_INSTALL_PREFIX」でインストール先を変更可能です。
それの標準の値は/usr/localなので$WORK_DIR/usr/localとすると期待するファイル配置になります。
cmake .. -DCMAKE_INSTALL_PREFIX=$(realpath $WORK_DIR)/usr/local/

上記のコマンドで設定した環境でmake installしたら$WORK_DIRに必要なファイルが配置されるので、その後dpkg-debのbuildをすればmake install実行時と同じファイルを配置するdebファイルができます。

おわり

debファイルの作り方について調べ始めたときはdebhelperを使う記事が出てきて難解さに戸惑いましたが、dpkg-debで作る方法が分かり、期待通りにdebファイルを作れました。

参考

dpkg-debの使い方を把握したページです。
社内利用のための deb パッケージング入門

controlのDependsの書き方解説ページです。
7. Declaring relationships between packages

purgeとautoremoveの違いを解説してくれているページです。
apt remove、purge、autoremoveコマンドの違い

cmakeのCMAKE_INSTALL_PREFIX説明ページです。
CMAKE_INSTALL_PREFIX

0 件のコメント :