注意
あまり詳しくない人はやらないほうがいいと思います.
まえがき
ROSのパッケージを使うとapt-get
で必要なパッケージ・機能がビルド済みの状態でインストールすることができる反面,新しい機能やバグフィクスなどを利用したいときは次のリリースを待つか,最新のソースを自分でビルドする必要があります.
自分でビルドするためにはワークスペースをオーバーレイする必要があり,この作業自体は簡単にできますが,roslaunch
やrosrun
に相当する作業をupstartやsystemdに登録してコンピュータの起動時にROSのノードを起動するときなどに変更しなければならないファイルが増えてしまい,複数人で共有するコンピュータ(ロボット実機含む)の場合面倒になってしまいます.
そこで一時的にオレオレバージョンを作ってローカルにインストールすることで次のリリースまで凌ぐことを目的にします.
debパッケージを作るインストーラを作る
-
まず必要なパッケージをインストールします.
sudo apt install python-bloom fakeroot dpkg-dev debhelper
-
一時的にパッチを当てたいパッケージに移動
roscd awesome_pkg
ソースを変更する(パッチを当てる)
-
debパッケージを作るためのインストーラを作成
bloom-generate rosdebian --os-name ubuntu --os-version xenial --ros-distro kinetic
xenial
やkinetic
などのdistroは各自の環境によって変更してくださいコマンド実行後に
debian
というフォルダができます.$ ls debian changelog compat control rules source
-
バージョンをオレオレ仕様に変更
このままだと普通に
apt
で入るバージョンと競合するので,changelog
ファイルを編集してオレオレバージョンに変更します.
ここで,コツとして,現在のリリースバージョンより大きく,次にリリースされる予定のバージョンより小さいバージョンにしておくと,次にリリースされたタイミングでapt-get upgrade
をしたときに,このパッチから自動でアップグレードされるようにすることができます.
(もちろん次のリリースではこのパッチが不要になっているはずという前提)$ diff debian/changelog # 最初の行 - ros-kinetic-awesome-pkg (2.2.26-0xenial) xenial; urgency=high + ros-kinetic-awesome-pkg (2.2.99-0xenial) xenial; urgency=high
ここでは次のリリースで
2.3
以降がリリースされることとします. -
deb
ファイルの作成deb
ファイルをビルドします.$ fakeroot debian/rules binary # <中略> dpkg-deb: building package 'ros-kinetic-awesome-pkg' in '../ros-kinetic-awesome-pkg_2.2.99-0xenial_amd64.deb'.
現在のディレクトリから1つ上のディレクトリに
deb
ファイルができているはずです.
あとはこれをパッチを当てたい環境に持って行き,dpkg -i
でインストールすれば終わりです.