※https://qiita.com/musubi05/items/e01684625b6f3917b10b
※ 2018/4/30 手法を大幅に変更しました
Overview
- ソースビルドで構築したROS環境で動くdebパッケージを作成する
ソースビルドしたROS環境における問題
http://wiki.ros.org/Installation/Source の方法でインストールしたROS環境は、当たり前ですが dpkg に登録されません。
https://qiita.com/musubi05/items/e01684625b6f3917b10b の方法で作成したdebパッケージは、ros-kinetic-roscpp
やros-kinetic-std-msgs
などに依存しているので、このままでは依存関係を解決できずインストールすることができません。
なので、bloomに対し,依存関係を登録しないパッケージリストを渡せる様に修正しました(https://github.com/musubi05/bloom ) 。
※bloom...rosパッケージをdebパッケージにするツール
動作確認環境
- Debian Jessie x64 on Virtualbox
- ROS Kinetic Kame (Source Install)
1. 修正したbloomのインストール
$ git clone https://github.com/musubi05/bloom.git
$ cd bloom
$ sudo python setup.py install
※アンインストール方法は、https://qiita.com/orion46/items/dfe476067e499cca8535 などを参考にしてください。
2. 開発環境のインストール
python-bloomを除くパッケージをインストールします。
$ sudo apt install fakeroot dpkg-dev debhelper
3. 依存関係の除外リストを作成
適当なテキストファイルに、依存させたくないパッケージを記述していきます。
# このようにコメントを書くことも可能(#がコメント修飾)
# 一行に一つずつ、除外したいパッケージを記述する
roscpp
rospy
std_msgs
3. パッケージ化
あとは、https://qiita.com/musubi05/items/e01684625b6f3917b10b と同様ですが、bloom-generate実行時に,--skip-package-name <file path>
のオプションを追加します。
出来上がったdebファイルは、先ほど指定したパッケージの依存関係が除外されているはずです。
$ bloom-generate rosdebian --os-name ubuntu --os-version xenial --ros-distro kinetic
==> Generating debs for ubuntu:xenial for package(s) ['beginner_tutorials']
No historical releaser history, using current maintainer name and email for each versioned changelog entry.
No CHANGELOG.rst found for package 'beginner_tutorials'
Package 'beginner-tutorials' has dependencies:
Run Dependencies:
rosdep key => xenial key
roscpp => ['ros-kinetic-roscpp']
rospy => ['ros-kinetic-rospy']
std_msgs => ['ros-kinetic-std-msgs']
Build and Build Tool Dependencies:
rosdep key => xenial key
roscpp => ['ros-kinetic-roscpp']
rospy => ['ros-kinetic-rospy']
std_msgs => ['ros-kinetic-std-msgs']
catkin => ['ros-kinetic-catkin']
==> Placing templates files in the 'debian' folder.
==> In place processing templates in 'debian' folder.
Expanding 'debian/compat.em' -> 'debian/compat'
Expanding 'debian/rules.em' -> 'debian/rules'
Expanding 'debian/control.em' -> 'debian/control'
Expanding 'debian/source/format.em' -> 'debian/source/format'
Expanding 'debian/source/options.em' -> 'debian/source/options'
Expanding 'debian/changelog.em' -> 'debian/changelog'
$
$ bloom-generate rosdebian --os-name debian --os-version jessie --ros-distro kinetic --skip-package-names ignore.txt
==> Generating debs for debian:jessie for package(s) ['beginner_tutorials']
Dependency-skip packages: ['roscpp', 'rospy', 'std_msgs']
No historical releaser history, using current maintainer name and email for each versioned changelog entry.
No CHANGELOG.rst found for package 'beginner_tutorials'
Package 'beginner-tutorials' has dependencies:
Run Dependencies:
rosdep key => jessie key
Build and Build Tool Dependencies:
rosdep key => jessie key
==> Placing templates files in the 'debian' folder.
==> In place processing templates in 'debian' folder.
Expanding 'debian/changelog.em' -> 'debian/changelog'
Expanding 'debian/compat.em' -> 'debian/compat'
Expanding 'debian/control.em' -> 'debian/control'
Expanding 'debian/rules.em' -> 'debian/rules'
Expanding 'debian/source/format.em' -> 'debian/source/format'
Expanding 'debian/source/options.em' -> 'debian/source/options'
$
もちろん、実行時にはroscpp
などが必要です。