Linuxのパッケージ管理その1(概要的ななにか
パッケージ管理は前提となる知識がある程度必要なので、まずは前提的な何か。
気が向いて暇があるときに続きのパッケージ系コマンドのあれやこれやを書いていこうかと思う。
Linuxにおけるパッケージ
Linux上でのパッケージ(つまりソフトウェア)は基本的にリポジトリ経由でインストールする。
リポジトリとはネットワーク上にあるソフトウェアの倉庫のようなもの。
WindowsでいうexeファイルをDLしてインストール、というのは基本的手法ではない。
デストリビューションによってパッケージ管理方法は違う。
Debian系とRedhat系
Linuxのデストリビューションのうち、大きいものとしてDebian系とRedhat系が有り、
それぞれパッケージ管理の方法が大きく異なる。
(厳密にはemergeでパッケージいちいちコンパイルしながらインストールするGentooや、
Pacmanとかいう独自の管理システム使うArchや、
rpmも使えるんだけどrpm派生(?)のzypperとかいうコマンドでパッケージ管理するOpen Suseとかあるけど、
マイナーなので基本的にシカトしてよい。
使う時になったら覚えよう。)
Debian系はapt,dpkgを基本とする。(Debian,Ubuntu,Linux Mint,Knoppix等)
Redhat系はyum,rpmを基本とする。(CentOS,RedHatLinux,Fedra等)
因みに日本での商用サーバーはCentOSが多い。(世界ではUbuntu(Debian系)が多くなってるって話聞いたけどどうなんだろう?)
リポジトリとは
ネットワーク上にあるファイルサーバー。
ここにaptやyumで取ってこれるrpmパッケージやdebパッケージがおいてある。
Debianの場合
http://ftp.jp.debian.org/debian/
↑jessie main contrib non-freeのリポジトリ
のぞいてみるとわかるようになんのそっけもないファイルサーバー。
http://ftp.jp.debian.org/debian/pool/main/a/apache2/
のようにたどると、apache2のdebパッケージが置いてあるのがわかる。
これを登録しておくとaptやyumはこれらを参照して
パッケージのインストール、アンインストール、更新などをしてくれるというもの。
ちなみに非公式(ライセンスの都合上公式に入れられない)とか、
開発中のプロジェクトで最新を常に置いてあるリポジトリとかもあり、
適宜必要なものを追加したりすることによって自分の必要な環境を整えやすくなったりする。
aptとdpkg
Debian系で使う基本のパッケージ管理コマンド。
乱暴に超基本を言うならば、
aptはネットワーク上のリポジトリ参照してパッケージの色々操作を行うもの(AndroidでいうGoogle play、iPhoneでいうitunesに近い)
これに対しdpkgはローカルに保存したdebパッケージをインストールするときなどに使う。(WindowsでいうexeとかmsiをDLしてインストールするに近い)
yumとrpm
RedHat系で使う基本のパッケージ管理コマンド。
上記にならって乱暴に超基本を言うならば、
yumはネットワーク上のリポジトリ参照してパッケージの色々操作を行うもの
これに対しrpmはローカルに保存したrpmパッケージをインストールするときなどに使う。
運用に関して
基本的にはapt,yumといったリポジトリを参照する管理コマンドで出来る限りやった方がいい。
理由はいくつかあるが、
・更新、依存関係の解決、インストール・アンインストールが簡単。
・依存関係で必要なものを自動で入れてくれる。
・デストリビューションに最適化された状態でビルドされたものが用意されている(ことが多い)
・すでに十分にテストされたものが用意されている(ことが多い)
・セキュリティパッチとかちゃんと降りてくる(ことが多い)
というのが主な理由。
対し、dpkg,rpmによって野良deb、野良rpmを入れる際には、
・依存関係上ライブラリのバージョン違いなどでトラブル事が多い。
・依存関係上必要なものがリポジトリにない場合、自分で探してまた入れなければならない。
・古かったり、ちゃんとメンテされていないことがある。
・脆弱性などが有った場合、自分で新しいパッケージDLしてきて入れなければならない(場合によってはビルドして入れることになる)
ただし、リポジトリにないマイナーパッケージや、特定のバージョンのものを使いたいときなどにはこちらを使用した方が良いことも有る。
ソースファイルに関して
Linuxのパッケージはtarで配布されている事も多い。
リポジトリになく、deb,rpmパッケージも見つからない時は、このソースを落として
自前でビルドしてインストール、ということもまれにしばしばある。
しかし自前ビルドしたものに関しては、上記のようなパッケージ管理コマンドによる管理からは外れるため、
全ての事を自分でやらなくてはならない。
(アンインストール時に関連ファイルを全て手動削除することになる、など)
たまにアンインストールスクリプトが付属している親切なパッケージもあるが、
依存関係崩れた時に直すのが非常に面倒なので、避けられるものなら避けた方が良く、
避けられない場合にはトラブル対応の準備と心構えをしてから実施すべきである。
以上の事から、あるパッケージを使用したい(インストールしたい)時には
リポジトリの使用
deb,rpm パッケージから手動インストール
自前ビルド
の優先順位で動くのが安全かつ楽である(一部例外有)
alienに関して
本来互換性のないdebパッケージとrpmパッケージを相互に変換するコマンド。
これを使うと「これ使いたいんだけどrpmパッケージしか配布してないじゃん。俺Ubuntu使ってるんですけど!!」
というようなときに、該当パッケージをdebに変換してdpkgでインストールとかできる、
だが、変換したパッケージはインストール時にエラーを吐くことも少なくない。
過信は禁物。(個人的にはalienのトラブル率を考えると自前ビルドの方がまだマシのように思う)
使用方法
商用サーバの場合は近い道やら大人の事情やらで色々と制約があったりする。
例えばyum updateで一括updateすると、現在提供中のあのサービスやこのサービスが一旦止まっちゃう可能性があるため、
yum downloaderとか、普通にwgetとかでupdateしたいパッケージだけrpmパッケージを落としてきて、
rpm コマンドで入れたりすることも多々ある。めんどくさいね!!
自分用サーバとかなら基本的にyumとかaptで一括update,upgradeして、必要ならそのサービス再起動、とかした方がいいと思う。
気楽でいいよね!!