
Ubuntu日本語フォーラム

ログインしていません。
いつもお世話になっております。
Synapticパッケージマネージャや「アプリケーションの追加と削除」で参照できるリポジトリにパッケージとして
登録されていないソフトウェアをソースからインストールする場合について、2つ教えて下さい。
■make; make install でインストールする:
ソースからインストールする場合の通常の方法でインストールすることは可能だと思います。
この場合、アンインストールや、バージョンアップはどうやって行えばいいのでしょうか?
アンインストールについては、make uninstallが使えれば簡単なんでしょうけど、ほとんどの
アプリケーションでは用意されてない(Makefileに定義されてない?)と聞きます。
■ソースからパッケージを作成する:
ソースからではなく、まずパッケージ化してインストールすれば、OSのパッケージ管理システムで
管理できるので、依存関係を管理できるなどの理由により、システムが不安定になったり、起動しなく
なるといったリスクを減らせるかと思います。
Ubuntuでパッケージを作成するにはどうすればいいでしょうか?
それは簡単にできるでしょうか?私のような初心者にはハードルが高いでしょうか?
私としては、後者のパッケージ作成を出来ればと思っています。
どうぞ、よろしくお願い致します。
オフライン
■make; make install でインストールする:
ソースからインストールする場合の通常の方法でインストールすることは可能だと思います。
この場合、アンインストールや、バージョンアップはどうやって行えばいいのでしょうか?
アンインストールについては、make uninstallが使えれば簡単なんでしょうけど、ほとんどの
アプリケーションでは用意されてない(Makefileに定義されてない?)と聞きます。
make uninstall がない場合は、インストールされたファイルをメモっておき、手動でいちいち全部それらを削除して行きます。バージョンアップはそのまま上書きか、ubuntuの場合は次のバージョンでリポジトリに取り込まれることが多いので、あまり気にしたことはないですね。
■ソースからパッケージを作成する:
Ubuntuでパッケージを作成するにはどうすればいいでしょうか?
それは簡単にできるでしょうか?私のような初心者にはハードルが高いでしょうか?
パッケージを作成してインストールが、正道だと思います。でも初心者にはいきなりは無理でしょう。
debianの方にパッケージの作り方の文書が公開されています。そちらを読んでちんぷんかんぷんなら無理でしょう。
そこで、checkinstall というツールを用いて、簡易的なパッケージを作成してインストールするという手段があります。
あくまでも簡易的なパッケージなので、出来たパッケージを他者に配布するということには向いてないし、迷惑なのでしてほしくないのですが、自分の環境だけで使うには大変便利な道具です。
他にも似たようなツールがありますが、どちらにしろパッケージ管理が複雑になり、Ubuntuのメジャーアップデートの時にトラぶったりとか、リスクが増える可能性もありますので、よく理解してから運用を行なうことが望ましいでしょう。
# メジャーアップの時は自家製パッケージを全てpurgeしてからアップデートが安全。
オフライン
こんにちは,deb パッケージの作り方はこれから勉強予定なので,
詳しい方の書き込みを読んで私も学んで行きたいと思っています.
uchan21さん による投稿:
■make; make install でインストールする:
GNU 標準に準じ counfigure スクリプトが用意されている場合,
インストール先を自分のホームディレクトリの中に指定できます.
例えば,$HOME/foo にインストールするとして,大まかには次の3つのコマンドで OK です.
(補足:HOME はホームディレクトリの絶対パスを示す環境変数です.)
$ ./configure --prefix=$HOME/foo
$ make
$ make install
出来た実行ファイルのシンボリックリンクをパスの通ったディレクトリ(ここでは$HOME/bin)に作ります.
(補足:$HOME/bin を作成して置くと,次回ログインから .profile がパスを通す処理をしてくれます.)
$ ln -s $HOME/foo/bin/* $HOME/bin
アンインストールは $HOME/foo を削除します.
$ rm -rf $HOME/foo
後,無効なったシンボリックリンクを $HOME/bin から消去します.
ルーチンワークとなっているので,ソースのダウンロードと展開を含め,
シェルスクリプトを作成して特殊なパッケージ(クロスコンパイラ等)をインストールしています.
バージョンアップは新バージョンのソースを取ってきてもう一度インストールが基本です.
新バージョンが出たとの情報は自分で収集します.独自 deb パッケージを作ったとしても同じことでしょう.
メリット:
インストール,アンインストールを含め,すべて一般ユーザ権限で実行可能(sudoはいらない)であり,
システム全体にはほとんど影響が無い.システムを破壊する恐れが少ない.
デメリット:
依存関係はすべて自分で管理しなくてはならない.ライブラリのインストールには不向き.
ライブラリをこの方法でインストールした場合,それに依存するパッケージの configure に明示せねばならないし,
実行ファイル(ダイナミックリンカ)に共有ライブラリが特殊な場所にあることを伝えないといけない.それなりの知識が必要.
補足:
UNIX が現在の ubuntu の様にパーソナルユースで使われることが無かった時代からの由緒深い方法です.
ユーザそれぞれがスーパユーザ権限を持つことは有りませんでしたから.
最後の編集者: einundzwanzighundertsechs (2009-03-04 14:39:23)
オフライン
yama様 ありがとうございます。
そこで、checkinstall というツールを用いて、簡易的なパッケージを作成してインストールするという手段があります。
ほぼ、私のイメージ通りのソフトです。
これを使ってみたいと思います。
#決して公開は致しませんのでご安心を。
どちらにしろパッケージ管理が複雑になり、Ubuntuのメジャーアップデートの時にトラぶったりとか、リスクが増える可能性もありますので、よく理解してから運用を行なうことが望ましいでしょう。
[# メジャーアップの時は自家製パッケージを全てpurgeしてからアップデートが安全。
了解です。
オフライン
einundzwanzighundertsechs様
ソースからのインストール方法を詳しく解説していただきましてありがとうございます。
バージョンアップは新バージョンのソースを取ってきてもう一度インストールが基本です.
新バージョンが出たとの情報は自分で収集します.独自 deb パッケージを作ったとしても同じことでしょう.
今回は、checkinstallで対処したいと思いますが、やはり、正規のリポジトリ登録パッケージでない以上、
こういう知識を持った上でやることが重要ということですね。
オフライン
すみません、追加で2つ教えて下さい。
”Debian用”と指定され、「XXX.deb」というファイル名で公開されているパッケージも、Ubuntuで
インストール自体は出来ると思いますが、実際にちゃんと動作するものでしょうか?
おそらく答えは、動作するものもあれば、しないものもある、やってみなければ分からない、だと
思うんですが、ざっくりとしたイメージ的にはいかがでしょうか?
「大抵はうまくいく」なのか、「滅多にうまくいかない」なのか。
checkinstallで自前で作成したパッケージと上記のDebian用パッケージの違いは何かありますでしょうか?
もちろん、checkinstallは簡易パッケージ作成ツールで、教えて頂きました通り、通常は、公開も出来ない
ものなので、明らかに違うということは承知しております。お聞きしたいのは、インストールしたソフトウェアが
きちんと動作するという最低限の用件を満たしているか否かという観点での違いがあるか?ということです。
このような質問をさせていただくのは、目当てのアプリケーションソフトウェアで、ソースとDebian用パッケージ
の両方が公開されている場合に、ソースからcheckinstallで作成したパッケージを使うべきか、Debian用
パッケージを使うべきか、判断がつかないためです。
どうそ、よろしくお願い致します。
オフライン
uchan21 による投稿:
”Debian用”と指定され、「XXX.deb」というファイル名で公開されているパッケージも、Ubuntuで
インストール自体は出来ると思いますが、実際にちゃんと動作するものでしょうか?
動作することも多いですが、破滅的なトラブルを引き起こす可能性もあります。
ソースパッケージがあればリビルドすることで多少マシになりますし、リビルドはたいした手間ではないのでやり方を覚えると良いでしょう。
# 具体的な手順は敢えて書きません。
# 検索エンジンを活用すればやりかたは出てくるはずです。このあたりを自分で探せないようでは確実に致命的な事態が起きるでしょう。ただ、出てきた情報が正しいかどうか、という点については回答したいと思いますので、「こういう手順のURLがありましたが、これは言い換えると〜〜〜ということですか?」的な質問であれば真偽はお答えします。
このような質問をさせていただくのは、目当てのアプリケーションソフトウェアで、ソースとDebian用パッケージ
の両方が公開されている場合に、ソースからcheckinstallで作成したパッケージを使うべきか、Debian用
パッケージを使うべきか、判断がつかないためです。
Debianのソースパッケージがあるならそれをリビルドし、なければcheckinstallしてください。バイナリのままDebianパッケージを導入するのは、ほんとうに最後の手段です(少なくともやるならシステムの再インストールの覚悟が必須)。
オフライン
hito様 ありがとうございます。
”ソースパッケージからのリビルド”とは、下記の1のことでしょうか。であれば、やり方は分かります。
1.ソースからmake; make install;でインストールする方法
2.ソースからcheckinstallで自前のパッケージを作成してインストールする方法
でも、以下を読むと、そうではないように見えます。
Debianのソースパッケージがあるならそれをリビルドし、なければcheckinstallしてください。
私は、「Debian用パッケージ(XXX.deb)」がそのまま使えるなら一番お手軽でいいかなと思ったのですが、
それは最終手段だと教えていただきました。
1と2は同等だと思っていましたので、アンインストールのやりやすさを考えて、checkinstallにしようと思っていたのですが、
”ソースパッケージからのリビルド”の方が良いならそうすべきかと思います。
すみません、ちょっとGoogleで検索してみたんですが、混乱してきてしまいました。
オフライン
uchan21さんへ,重点の置き場の違いが混乱の元ではないですか?
最初の投稿でリスクについて触れられていますがその後の投稿では--
uchan21さん による投稿:
インストールしたソフトウェアが
きちんと動作するという最低限の用件を満たしているか否かという観点での違いがあるか?
私は、「Debian用パッケージ(XXX.deb)」がそのまま使えるなら一番お手軽でいいかな
1と2は同等だと思っていましたので、アンインストールのやりやすさを考えて、checkinstallにしようと思っていたのですが、
経験者はシステムに障害を与えることを第一に恐れます.以下それが伺える部分の引用です.
yamaさん による投稿:
出来たパッケージを他者に配布するということには向いてないし、迷惑なのでしてほしくないのですが、
どちらにしろパッケージ管理が複雑になり、Ubuntuのメジャーアップデートの時にトラぶったりとか、リスクが増える可能性もありますので、
hitoさん による投稿:
動作することも多いですが、破滅的なトラブルを引き起こす可能性もあります。
ソースパッケージがあればリビルドすることで多少マシになりますし、
バイナリのままDebianパッケージを導入するのは、ほんとうに最後の手段です(少なくともやるならシステムの再インストールの覚悟が必須)。
ついでに私(も経験者の一人だとして) による投稿:
インストール,アンインストールを含め,すべて一般ユーザ権限で実行可能(sudoはいらない)であり,
システム全体にはほとんど影響が無い.システムを破壊する恐れが少ない.
複雑なインストールの手順が「危険な」操作ミスを誘発することがよく有ります.
簡易であることを目指すのは決して間違っていません.
個人的には「スーパユーザ権限で作業することの危険性」を強調して置きます.
deb パッケージのインストールも sudo して行うので本来危険なのです.
ソースパッケージからのリビルドで少しだけ安全になります.
伝統的なパッケージのインストールが make と make install に分けてあるのもリスクを最小に抑えるためです.
追記:ack さんの投稿を読んで,当然と思っていろ語感が通じない可能性が有ることに気付きました.有り難うございます.
上記3行では,
「deb パッケージ」 = Debian のバイナリパッケージ
「ソースパッケージ」 = Debian のソースパッケージ
「伝統的なパッケージ」 = いわゆる tarball
のつもりでした.
最後の編集者: einundzwanzighundertsechs (2009-03-07 07:22:35)
オフライン
uchan21 による投稿:
Debianのソースパッケージがあるならそれをリビルドし、なければcheckinstallしてください。
私は、「Debian用パッケージ(XXX.deb)」がそのまま使えるなら一番お手軽でいいかなと思ったのですが、
それは最終手段だと教えていただきました。
1と2は同等だと思っていましたので、アンインストールのやりやすさを考えて、checkinstallにしようと思っていたのですが、
”ソースパッケージからのリビルド”の方が良いならそうすべきかと思います。
すみません、ちょっとGoogleで検索してみたんですが、混乱してきてしまいました。
「Debianのソースパッケージ」と、tar.gzなどのオリジナルの「ソース」は別のものです。
「Debianのソースパッケージ」は、例えば
http://packages.debian.org/ja/lenny/bash
の右側
* [bash_3.2-4.dsc]
* [bash_3.2.orig.tar.gz]
* [bash_3.2-4.diff.gz]
にあるような、オリジナルソース、Debian用に修正した部分(ファイルのインストール先や、プログラム本体に修正が入る事も多いです)、パッケージとしての情報のの3つの組です。
Ubuntuの物も
http://packages.ubuntu.com/ja/intrepid/bash
* [bash_3.2-4ubuntu1.dsc]
* [bash_3.2.orig.tar.gz]
* [bash_3.2-4ubuntu1.diff.gz]
とやはり3つの組です。
checkinstall は、make installがどこに何のファイルを書き込むかを覚えて、簡易的にパッケージに仕立て、後でapt-get remove等で削除命令を受けた時に覚えていたファイルを消すだけです。
そのため、Ubuntu用に修正が入っていない事になります。
DebianとUbuntuは似ているため、Debian用の修正がUbuntuにとっても好ましい可能性が高いので、
そのソースコードをUbuntuの環境でビルドしたものは問題が発生しにくい可能性が高い、という事と思います。
※認識がおかしかったらご指摘の程お願い致します。
---
とりあえず動作してしまうが後で問題が起きた例
バイナリパッケージを入れようとして、インストールは行われるが動作に問題が起きてしまう場合
Debianソースをリビルドして少しだけ安全になる場合
システムが壊れる場合
などの具体例があると、これらパッケージの安全性の件の啓蒙には良いと思います。
オフライン
私なりに2点ほど。
まず1点目:
checkinstallは確かにアンインストールは楽ですが、インストール時に思わぬリスクもあります。
既にシステムにインストール済みのパッケージと「同じ」パッケージ名でcheckinstallを実行してしまうと、システム上のパッケージ状態が崩れてしまう事がある、というリスクです。
私は過去に不注意で、pythonがインストール済みなのに、より新しいバージョンのpythonをpythonという同名パッケージ名でcheckinstallしてしまうという大失敗をしました。
ただ幸運にも仮想環境のゲストOSだったので簡単に元に戻せました。
checkinstallする際はパッケージ名の衝突に十分注意してくださいね。
# 個人的には、checkinstallはかなり好きなツールです。
次に2点目:
実ホストであれこれ実験的な事をやるのは本質的にリスクがあると、私は思っています。
その為、ソフトウェアのビルド、ならびにビルドしたソフトウェアの使用については、極力仮想環境のゲストOS上で行っています。
例えば、仮想環境のゲストOSでソースビルドしたffmpegをゲストOS上で使うという運用です。
これだと、ホストOS側を汚したり壊す心配も一切なく、ソースビルドしたソフトウェアの恩恵を受けられます。
仮想環境のゲストOSだとスナップショット機能で元の状態に戻すのも簡単なので、色々と便利です。
仮にインストールに失敗してしまっても平気ですし、気が変わって辞める時もすぐに元に戻せます。
最後の編集者: STGSAGWAN (2009-03-06 20:16:15)
* バイナリパッケージを入れようとして、インストールは行われるが動作に問題が起きてしまう場合
ubuntu/Debian 歴が短いので Fedora/RedHat での経験を1つ.
Fedora 10 リリース直後の dbus パッケージの公式アップデートで起こりました.
dbus の API が変化したのにそれに依存したパッケージがアップデートされず,
GUI のシステム管理ツールがパッケージアップデータを含めいくつか使用不可になりました.
依存関係がしっかり記述してあれば防げた事例だと思います.
レポジトリの公式パッケージでこれなので,Fedora を使っていると腕が磨かれる気がします.
とりわけ,非公式パッケージの依存関係記述, postinst, postrm スクリプトの堅牢性を盲目的に信頼するのは危険でしょう.
腕に自信が無い限りシステム全体の再インストールは覚悟の上で,と言うのは誇張では無いと思います.
* Debianソースをリビルドして少しだけ安全になる場合
本当に危険なパッケージはリビルドしても危険なままですから.具体例を挙げるのは難しいです.
例えば上記 dbus パッケージを rpm ソースパッケージからリビルドしても障害は防げなかったでしょう.
牽強付会な話になりますが ---
バイナリパッケージの動作が確認されているのは本来それをビルドした環境だけです.
レポジトリ外のバイナリパッケージの場合,動作が確認されているのはそれを Web に公開した人達の環境だけということです.
それが違う環境にインストール出来てしまう場合,動作してシステムを破壊するよりは動作しない方が「幸運」です.
ソースパッケージからリビルドすると,通常 configure スクリプトが環境を詳細に調査し,
「幸運にも」環境に合ったバイナリパッケージが出来る場合も有り,
環境が合わずバイナリパッケージが「幸運にも」作られない場合も有ります.
-- ほんの少しだけ安全な気分になりませんか?
最後の編集者: einundzwanzighundertsechs (2009-03-07 07:02:37)
オフライン
einundzwanzighundertsechs様、ack様、STGSAGWAN様 ありがとうございます。
私は単純な話だと思って気軽に質問してしまったのですが、かなり奥深い問題だということがよく分かりました。
アドバイスいただきましたことは、全部は理解出来ていないのですが、理解するためには、私自身がもっと
経験を積む必要がありそうです。
さて、ここで、具体的に私が何をしようとしているかについて、もっとお伝えする必要性を感じました。
openSIPSというソフトウェアをインストールしたいと考えています。ところが、Ubuntuのリポジトリには登録されていません。
したがって、openSIPSのサイトからダウンロードしてきてインストールしようと考えました。
このサイトには、Debian用パッケージもあれば、ソース(Debian用のソースではなく、一般の(?)ソース)もあります。
この状況に直面し一連の質問をさせていただきまして、次の3つをインストール方法の候補としました。
1.ソースからmake; make install
2.ソースからcheckinstallでパッケージを作成して、dpkgでインストール
3.Debian用パッケージをdpkgでインストール
その後、さらに質問をさせていただき、3は却下、1と2を比較して、sudoを使う回数、パッケージ名衝突リスク等を考慮すると、
1が最も安全という結論を得ました。(あってますでしょうか、、、汗)
以上を踏まえまして、openSIPSのインストールについて、今回の私の対処としては、1が最も安全ではありますが、アンインストールの
しやすさを優先して、パッケージ名の衝突に気を付けてcheckinstallを使う、つまり2の方法で進めることにしようと思っています。
どうも、ありがとうございました。
最後の編集者: uchan21 (2009-03-07 14:46:03)
オフライン
uchan21さん による投稿:
さて、ここで、具体的に私が何をしようとしているかについて、もっとお伝えする必要性を感じました。
最初にそうして下されば展開は違ってきたと思います.uchan21 さんがどうシステムを運用しているのかも必要です.
-- 試験用で無理がきくなのか,業務用でシステムの停止が致命的なのか --
一般論としては威すぐらいがちょうど良いと思いました.薬が効きすぎたでしょうか?
実はインストールしたいパッケージは何なのか尋ねようかと思ったのですが,
折角一般論で始まった貴重な機会で勿体ない感じがして尋ねるのを止めました.
そこで,敢えて一般論を続けます.openSIPS について質問したい場合はパッケージ名入れたスレッドを立ててください.
uchan21さん による投稿:
sudoを使う回数
回数ではなく覚悟の問題なのです.私は sudo を「取り返しの付かないことになるかもしれない危険な標識」と思って手順を読みます.
伝統的ソース(.tar.gz, .tar.bz2)のインストールマニュアル(パッケージ同梱のREADMEやINSTALL)には,大抵
$ ./configure $ make $ su # ここで root 権限取得 # make install
と言った手順のみが書いてあります.経験から私はこれを
$ ./configure $ make 一般ユーザでできる予防策 $ su # 覚悟の印 root でできる予防策 # make install
と,読みます.具体的に何が予防策になるのかを一番教えてくれたのは失敗でした.
uchan21さん による投稿:
理解するためには、私自身がもっと経験を積む必要がありそうです。
矛盾するようですが,システムを破壊するような失敗が一番の経験になります.
make install でやらかした私の失敗例:
* ls, cp 等コアツールが起動しなくなる.
* シェルが起動しなくなる.
* リモートでしか作業できないのに sshd が落ちてしまった.
復旧に丸一日ぐらいかかるとその過程で本当にいろんなことが学べます.
-- あくまで,試験用システムでの話です.稼働中のシステムでは怖くて出来ません.
パッケージシステムが進歩しすぎると再インストールで済んでしまうので,学ぶ機会が減ってしまいます.
一長一短(長所がずっと大きいので百長一短ぐらい)です.
最後の編集者: einundzwanzighundertsechs (2009-03-08 12:01:27)
オフライン
einundzwanzighundertsechs様 ありがとうございます。
einundzwanzighundertsechsさん による投稿:
最初にそうして下されば展開は違ってきたと思います.uchan21 さんがどうシステムを運用しているのかも必要です.
-- 試験用で無理がきくなのか,業務用でシステムの停止が致命的なのか --
一般論としては威すぐらいがちょうど良いと思いました.薬が効きすぎたでしょうか?
そうですね。。問題が単純だと思い込んでいて、一般論で質問してしまいました。申し訳ありませんでした。
もう遅いかもしれませんが、私のシステム運用ですが、”試験用で無理がきく”です。最悪、OSの再インストールとなっても
誰にも迷惑はかからない環境です。
einundzwanzighundertsechsさん による投稿:
具体的に何が予防策になるのかを一番教えてくれたのは失敗でした.
make install でやらかした私の失敗例:
分かる気が致します。
それにしても、怖いトラブルが起きてしまうものですね。
貴重な情報をありがとうございました。
einundzwanzighundertsechsさん による投稿:
openSIPS について質問したい場合はパッケージ名入れたスレッドを立ててください.
実は、chekcinstallを実行してみたんですが、いろいろとエラーが出まして結局断念しました。
それで、make; make install;でやっているんですが、makeで、エラーが出てしまって、どうしても
compileできないモジュールがありまして、質問を続けたいところですが、別スレッドを立てさせていただきます。
オフライン