ソースビルドしたROS環境上でdebパッケージを作成する

※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. 依存関係の除外リストを作成
適当なテキストファイルに、依存させたくないパッケージを記述していきます。

```ignore.txt
# このようにコメントを書くことも可能（#がコメント修飾）
# 一行に一つずつ、除外したいパッケージを記述する
roscpp
rospy
std_msgs
```

# 3. パッケージ化
あとは、https://qiita.com/musubi05/items/e01684625b6f3917b10b と同様ですが、bloom-generate実行時に，`--skip-package-name <file path>`のオプションを追加します。


出来上がったdebファイルは、先ほど指定したパッケージの依存関係が除外されているはずです。

``` bash:aptでインストールしたbloom
$ 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'
$
```

``` bash:修正したbloom
$ 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`などが必要です。