技術者になりたい何か

技術者になりたい何かの覚書的な何かです

パッケージ管理しりーず リポジトリについて(Red Hat系)

リポジトリとは

リポジトリとはネットワーク上のソフトウェアの倉庫のようなもの。
デフォルトで置いてあるリポジトリに追加することによって、参照する倉庫が増える(=使用可能なソフトが増える)。
だがやたら増やし過ぎると依存関係でエラーが出たり、yum の読み込みがやたら遅くなったりするのでそのあたりはお好みで。


追加と削除

リポジトリは追加と削除が可能。
CentOSの場合、リポジトリは/etc/repos.d/にある。
.repoというのがリポジトリ

$ ls -la /etc/yum.repos.d/
合計 60
drwxr-xr-x.   2 root root  4096  4月 11 05:51 2016 .
drwxr-xr-x. 114 root root 12288  5月  7 11:54 2016 ..
-rw-r--r--    1 root root  1991  8月  4 01:13 2015 CentOS-Base.repo
-rw-r--r--    1 root root   647  8月  4 01:13 2015 CentOS-Debuginfo.repo
-rw-r--r--    1 root root   630  8月  4 01:13 2015 CentOS-Media.repo
-rw-r--r--    1 root root  6259  8月  4 01:13 2015 CentOS-Vault.repo
-rw-r--r--    1 root root   289  8月  4 01:13 2015 CentOS-fasttrack.repo
-rw-r--r--    1 root root   180  9月 30 16:30 2014 WANdisco.repo
-rw-r--r--    1 root root   183  4月  2 02:00 2011 adobe-linux-x86_64.repo
-rw-r--r--    1 root root   193  4月 11 05:51 2016 emacs.repo
-rw-r--r--    1 root root  1056 11月  5 12:52 2012 epel-testing.repo
-rw-r--r--    1 root root   957 11月  5 12:52 2012 epel.repo

 

追加したいリポジトリがある場合、基本的にはDLしてここに突っ込めばいい。


実行例

CentOS6系のemacsは23系しかなく、24系を入れるにはリポジトリ追加か自前ビルドしかない。
ちなみにemacsは24系で新機能がたくさん搭載されてて24系が使いたい。

$ cd /etc/yum.repos.d/
$ sudo wget https://gist.githubusercontent.com/AaronTheApe/5540012/raw/5782a8d6a95f76daeed6073dc0c90612fefe2fb3/emacs.repo
$ sudo yum install emacs --nogpgcheck
$ emacs --version
GNU Emacs 24.5.1
Copyright (C) 2015 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

 
なお、追加したリポジトリを削除したいときは単純に/etc/yum.repos.d/hoge.repoを削除すればよい。
また、リポジトリをいじったおかげでなんだかyumの動きがおかしくなった(エラーが出るようになった)際には
デフォルトに戻す→キャッシュクリア→check-update→updateで通ることを確認すると良いだろう。

$ sudo mv /etc/yum/repos.d/emacs.repo ~/emacs.repo.bac
$ sudo yum clean
$ sudo yum check-update
$ sudo yum update

 


リポジトリファイルの中身


なんのことはない。参照するリポジトリのURLとgpg公開鍵情報が書いてあるだけ。

$ cat /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

 

リポジトリ追加するたびにyum実行時に読み込みに行くURLが増えるため、追加しすぎるとyumが遅くなる。
ちなみにgpgは公開鍵。鍵が無いと認証エラーが出ることがあるが、--nogpgcheckで飛ばすことが可能。
ただしこれをやると、配布元が信頼できないときにおかしなパッケージ混ぜられたりすることがあるかもしれない。


yumの設定ファイル


/etc/yum.conf

$ cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

cachedir=/var/cache/yum/$basearch/$releasever

 


 キャッシュおいておくディレクトリ。この場合、/var/cache/yum/配下に
 $basearch(x86_64 or i386)ディレクトリ/リリース番号(CentOS 6.xなら6)というディレクトリが作られ、
 そこにキャッシュが保存される。

$ ls /var/cache/yum/x86_64/6
WANdisco  adobe-linux-x86_64  base  emacs  epel  extras  pjku  timedhosts.txt  updates

keepcache=0

 
 インストール成功後、ヘッダーとパッケージのキャッシュを保持しない。
 0⇒1にすると保持するようになる。

logfile=/var/log/yum.log

 
 ログファイルの保管場所。上記場合は/var/log/yum.logがログファイルになる。

gpgcheck=1

 
 GPG署名(リポジトリが本物であるか)のチェック。0で無効。

plugins=1

 
 プラグイン有効。0で無効。
 yumプラグインはシステム根幹に大きくかかわる為有効が推奨。

distroverpkg=centos-release

 
 デストリビューション判別する項目。

Linuxのパッケージ管理しりーず(yum)

yumRed Hat系のパッケージ管理コマンド。

リポジトリ経由のあれやこれやに使う。実際のサーバ運用とか構築でパッケージ入れたり更新したり削除したりみたいな時には主にこれでやることが多い。

 

yum rpmパッケージの管理

Red Hat系で使われるパッケージ管理コマンド。

リポジトリ参照してインストール・アンインストール、アップデート、パッケージの検索など、
大抵のことはできる。
基本的に普通にCentOSを使うとした場合、yumによるパッケージ管理で事足りる。

基本的な使い方

# yum サブコマンド [パッケージ名]

 

主なサブコマンド

check-update アップデート対象のパッケージリストを表示。アップデート前のチェックとかに使う。
update パッケージ名 指定したパッケージをアップデートする。パッケージ指定しないときはアップデートがあるパッケージを全て更新する。
install パッケージ名 指定したパッケージをインストールする。
remove パッケージ名 指定したパッケージをアンインストールする。
info パッケージ名 指定したパッケージの情報を表示する。バージョンとか確認するのに便利。
list 全パッケージの情報をリスト表示する。
repolist リポジトリ一覧情報を表示する。
search キーワード パッケージ情報をキーワードで検索する。
search all キーワード パッケージをパッケージ名、説明文全て対象にキーワードで検索する。
grouplist パッケージグループをリスト表示する
groupinstall 指定したグループのパッケージをインストールする。
clean リポジトリからダウンロードしたヘッダーファイルとパッケージを削除する。

実行例

yum check-update
 
$ yum check-update
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.kddilabs.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp

ImageMagick.x86_64 6.7.2.7-2.el6 base
ImageMagick-devel.x86_64 6.7.2.7-2.el6 base
NetworkManager.x86_64 1:0.8.1-99.el6 base
NetworkManager-glib.x86_64 1:0.8.1-99.el6 base
NetworkManager-gnome.x86_64 1:0.8.1-99.el6 base
PackageKit.x86_64 0.5.8-25.el6 base
PackageKit-device-rebind.x86_64 0.5.8-25.el6 base
PackageKit-glib.x86_64 0.5.8-25.el6 base
PackageKit-gstreamer-plugin.x86_64 0.5.8-25.el6

 

check-updateでは更新を確認するだけで、実際に更新はされない。
そのため、常時稼働のサーバーなどでもこれは実行しても直ちにサービスに影響が出ることは無い。
大抵の場合、あまり止めたくないサーバーの更新前チェックなどに使う。
ちなみにあまり気を遣わなくても良いシステムでは、下記のupdateをいきなり実行するのもありではある。

yum update
 

# yum update
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
更新処理の設定をしています
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.iij.ad.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package ImageMagick.x86_64 0:6.5.4.7-7.el6_5 will be 更新
---> Package ImageMagick.x86_64 0:6.7.2.7-2.el6 will be an update
--> 依存性の処理をしています: libwmf-0.2.so.7()(64bit) のパッケージ: ImageMagick-6.7.2.7-2.el6.x86_64
---> Package ImageMagick-devel.x86_64 0:6.5.4.7-7.el6_5 will be 更新
---> Package ImageMagick-devel.x86_64 0:6.7.2.7-2.el6 will be an update
---> Package NetworkManager.x86_64 1:0.8.1-75.el6 will be 更新

(中略)

依存性を解決しました

============================================================================================================================================
パッケージ アーキテクチャ
バージョン リポジトリー 容量
============================================================================================================================================
インストールしています:
kernel x86_64 2.6.32-573.12.1.el6 updates 30 M
kernel-devel x86_64 2.6.32-573.12.1.el6 updates 10 M
更新:
ImageMagick x86_64 6.7.2.7-2.el6 base 1.9 M
ImageMagick-devel x86_64 6.7.2.7-2.el6 base 94 k
NetworkManager x86_64 1:0.8.1-99.el6 base 1.1 M
NetworkManager-glib x86_64 1:0.8.1-99.el6 base
(中略)

トランザクションの要約
============================================================================================================================================
インストール 13 パッケージ
アップグレード 364 パッケージ
削除 2 パッケージ

総ダウンロード容量: 515 M
これでいいですか? [y/N]y

(中略)
完了しました!

 

実際にupdateをかけると、更新した際の依存関係が解決できるかをまず検証する。
次に新規インストールになるもの、更新になるものがリスト表示され、
(たぶん多数のupdateがあるときには)同意を求められる。
ここで y を入力すると、実際にパッケージをダウンロード→インストールという動作を行う。
ちなみに -y を付けることで、この同意を求める部分をスキップすることも可能である。

yum info

$ yum info openssl
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.jaist.ac.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
インストール済みパッケージ
名前 : openssl
アーキテクチャ : x86_64
バージョン : 1.0.1e
リリース : 42.el6_7.2
容量 : 4.0 M
リポジトリー : installed
提供元リポジトリー : updates
要約 : A general purpose cryptography library with TLS implementation
URL : http://www.openssl.org/
ライセンス : OpenSSL
説明 : The OpenSSL toolkit provides support for secure communications between
: machines. OpenSSL includes a certificate management tool and shared
: libraries which provide various cryptographic algorithms and
: protocols.

利用可能なパッケージ
名前 : openssl
アーキテクチャ : i686
バージョン : 1.0.1e
リリース : 42.el6_7.2
容量 : 1.5 M
リポジトリー : updates
要約 : A general purpose cryptography library with TLS implementation
URL : http://www.openssl.org/
ライセンス : OpenSSL
説明 : The OpenSSL toolkit provides support for secure communications between
: machines. OpenSSL includes a certificate management tool and shared
: libraries which provide various cryptographic algorithms and
: protocols.

 

上記例ではopensslというパッケージの情報を表示している。
基本的に詳細が出るので見ればわかる感じではある。
更新がある(より新しいパッケージがリポジトリに降りてきている)ときは
インストール済みと利用可能のバージョンを見ればよいだろう。
あるパッケージで脆弱性が見つかったなどして、特定のパッケージのみ急いでupdateしなくてはいけないが、
システム全体のアップデートをする(ものによってはプロセスなりそのシステム自体の再起動が必要)のは避けたい、
みたいなときの下調べに使える。

これで確認した後、更新が見つかればそのパッケージ名指定でupdateをかけるという事が可能。

# yum update openssl


この場合、opensslのみupdateをする。

yum list

$ yum list
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
Determining fastest mirrors
epel/metalink | 5.3 kB 00:00
* base: www.ftp.ne.jp
* epel: ftp.riken.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
WANdisco | 951 B 00:00
WANdisco 73/73
adobe-linux-x86_64 | 951 B 00:00
base | 3.7 kB 00:00
emacs | 2.9 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
インストール済みパッケージ
Canna-libs.x86_64 3.7p3-28.el6 @epel
ConsoleKit.x86_64 0.4.1-3.el6 @anaconda-CentOS-201311291202.x86_64/6.5
ConsoleKit-libs.x86_64 0.4.1-3.el6 @anaconda-CentOS-201311291202.x86_64/6.5
ConsoleKit-x11.x86_64 0.4.1-3.el6 @anaconda-CentOS-201311291202.x86_64/6.5
DeviceKit-power.x86_64 014-3.el6 @anaconda-CentOS-201311291202.x86_64/6.5

(中略)
利用可能なパッケージ
2048-cli.x86_64 0.9.1-1.el6 epel
2048-cli-nocurses.x86_64 0.9.1-1.el6 epel
2ping.noarch 3.2.1-2.el6 epel
389-admin.i686 1.1.35-1.el6 epel
389-admin.x86_64 1.1.35-1.el6 epel
389-admin-console.noarch 1.1.8-1.el6 epel
389-admin-console-doc.noarch 1.1.8-1.el6 epel
389-adminutil.i686 1.1.19-1.el6 epel
389-adminutil.x86_64 1.1.19-1.el6 epel
389-adminutil-devel.i686 1.1.19-1.el6 epel
389-adminutil-devel.x86_64 1.1.19-1.el6 epel
389-console.noarch 1.1.7-1.el6 epel
(以下略)

 

 

大量に出る。
リポジトリ参照→インストール済みリスト→利用可能パッケージの「全て」を表示する。
grepとかに渡せばいい仕事してくれるかもしれないが、ぶっちゃけ見切れる気がしない。
また、grepするくらいなら下記searchとか上記infoとかを使った方がいいだろう。
まぁインストールしてるパッケージをログとして保存しておくにはいいかもしれないが。

yum search

$ yum search httpd
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.riken.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
============================================================ N/S Matched: httpd ============================================================
iipsrv-httpd-fcgi.noarch : Apache HTTPD files for iipsrv
libmicrohttpd-devel.i686 : Development files for libmicrohttpd
libmicrohttpd-devel.x86_64 : Development files for libmicrohttpd
libmicrohttpd-doc.noarch : Documentation for libmicrohttpd
lighttpd-fastcgi.x86_64 : FastCGI module and spawning helper for lighttpd and PHP configuration
lighttpd-mod_geoip.x86_64 : GeoIP module for lighttpd to use for location lookups
lighttpd-mod_mysql_vhost.x86_64 : Virtual host module for lighttpd that uses a MySQL database
owncloud-httpd.noarch : Httpd integration for ownCloud
httpd.x86_64 : Apache HTTP Server
httpd-devel.i686 : Development interfaces for the Apache HTTP server
httpd-devel.x86_64 : Development interfaces for the Apache HTTP server
httpd-itk.x86_64 : MPM Itk for Apache HTTP Server
httpd-manual.noarch : Documentation for the Apache HTTP server
httpd-tools.x86_64 : Tools for use with the Apache HTTP Server
libmicrohttpd.i686 : Lightweight library for embedding a webserver in applications
libmicrohttpd.x86_64 : Lightweight library for embedding a webserver in applications
lighttpd.x86_64 : Lightning fast webserver with light system requirements
mirmon-httpd.noarch : Apache configuration for mirmon
mod_auth_mellon.x86_64 : A SAML 2.0 authentication module for the Apache Httpd Server
mod_dav_svn.x86_64 : Apache httpd module for Subversion server
mod_dnssd.x86_64 : An Apache HTTPD module which adds Zeroconf support
python-mozhttpd.noarch : Basic Python webserver
python-sphinxcontrib-httpdomain.noarch : Sphinx domain for documenting HTTP APIs
sysusage-httpd.noarch : Apache configuration for sysusage
thttpd.x86_64 : Tiny, turbo, throttleable lightweight http server
viewvc-httpd.noarch : ViewVC configuration for Apache/mod_python
web-assets-httpd.noarch : Web Assets aliases for the Apache HTTP daemon

Name and summary matches only, use "search all" for everything.

 


httpdで検索。パッケージ名にhttpdが入っているものを表示する。
入れたいパッケージないし入っているパッケージで正式名称が判らなくなってしまったときに便利。

yum search all

$ yum search-all httpd
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
コマンド「search-all」が見つかりません。「/usr/bin/yum --help」を実行してください。
[cmc@redmine-svn-serv ~]$ yum search all httpd
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.riken.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
=============================================================== 一致: httpd ================================================================
libmicrohttpd-doc.noarch : Documentation for libmicrohttpd
lighttpd-fastcgi.x86_64 : FastCGI module and spawning helper for lighttpd and PHP configuration
lighttpd-mod_geoip.x86_64 : GeoIP module for lighttpd to use for location lookups
lighttpd-mod_mysql_vhost.x86_64 : Virtual host module for lighttpd that uses a MySQL database
(中略)
qgis-mapserver.x86_64 : FCGI based OGC web map server
spawn-fcgi.x86_64 : Simple program for spawning FastCGI processes
sysusage-httpd.noarch : Apache configuration for sysusage
trafficserver-devel.i686 : Apache Traffic Server development libraries and header files
trafficserver-devel.x86_64 : Apache Traffic Server development libraries and header files
viewvc-httpd.noarch : ViewVC configuration for Apache/mod_python
web-assets-httpd.noarch : Web Assets aliases for the Apache HTTP daemon
xcache-admin.noarch : XCache Administration


最後の方を見ると分かるが、パッケージ名にhttpdが入っていないものも表示される。
これは説明文の中にhttpdが入っているから。

httpdが含まれなかった「xcache-admin.noarch」を見てみよう。

$ yum info xcache-admin.noarch
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.riken.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
利用可能なパッケージ
名前 : xcache-admin
アーキテクチャ : noarch
バージョン : 3.0.4
リリース : 1.el6
容量 : 46 k
リポジトリー : epel
要約 : XCache Administration
URL : http://xcache.lighttpd.net/
ライセンス : BSD
説明 : This package provides the XCache Administration web application,
: with Apache configuration, on http://localhost/xcache
:
: This requires to configure, in XCache configuration file (xcache.ini):
: - xcache.admin.user
: - xcache.admin.pass
: - xcache.coveragedump_directory


なんということだ。URLの中のlig*httpd*.netに反応してるじゃないか。(たぶん)

yum grouplist

$ yum grouplist
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
グループ処理の設定をしています
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.riken.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
インストール済みグループ:
Emacs
FTP サーバー
Java プラットフォーム
Milkymist
MySQL データベースサーバー
MySQL データベース接続クライアント
PHP サポート
Perl のサポート
(以下省略)


ある環境を構築したいときにグループで関連パッケージ全部入れられると便利だよねー、というコマンド。
MySQL データベースサーバー」とかだとmySQLサーバー構築に必要なパッケージ丸ごとインストールしてくれる。
サーバー構築時に必要な環境(WebサーバーとしてPHPApacheMySQLをいれよう)とかいうときに便利かもしれない。
ただし、実際には不必要なパッケージも一緒に入ってくることはままある。(Gnomeデスクトップ環境入れたら付属のミニゲームが入ってくるとか)
しかい、これって日本語化されてて大丈夫なのか?⇒大丈夫っぽい

yum groupinstall


上記グループ丸ごとインストールしたいときに使う。
環境を一気の整えられるので楽できる反面、本当に必要なパッケージのみ選択して入れるという事は出来ない為、好みが分かれるところ。
実行例

$ sudo yum groupinstall "KDE デスクトップ"
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
グループ処理の設定をしています
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* epel: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
パッケージ alsa-plugins-pulseaudio-1.0.21-3.el6.x86_64 はインストール済みか最新バージョンです
パッケージ 1:NetworkManager-gnome-0.8.1-99.el6.x86_64 はインストール済みか最新バージョンです
パッケージ ibus-qt-1.3.0-2.el6.x86_64 はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package k3b.x86_64 1:1.0.5-13.el6 will be インストール
--> 依存性の処理をしています: k3b-libs(x86-64) = 1:1.0.5-13.el6 のパッケージ: 1:k3b-1.0.5-13.el6.x86_64
--> 依存性の処理をしています: k3b-common = 1:1.0.5-13.el6 のパッケージ: 1:k3b-1.0.5-13.el6.x86_64
--> 依存性の処理をしています: libmusicbrainz.so.4()(64bit) のパッケージ: 1:k3b-1.0.5-13.el6.x86_64
--> 依存性の処理をしています: libkparts.so.2()(64bit) のパッケージ: 1:k3b-1.0.5-13.el6.x86_64
(中略)
依存性を解決しました

============================================================================================================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
============================================================================================================================================
インストールしています:
k3b x86_64 1:1.0.5-13.el6 base 758 k
kcoloredit x86_64 4.3.3-2.el6 base 165 k
kde-settings-pulseaudio noarch 4.3.1-2.el6.centos base 16 k
kdeaccessibility x86_64 1:4.3.4-5.el6 base 6.1 M
kdeadmin x86_64 7:4.3.4-5.el6 base 1.3 M
kdeartwork-screensavers x86_64 4.3.4-7.el6 base 386 k
kdebase x86_64 6:4.3.4-7.el6_7 updates 4.5 M
kdebase-workspace x86_64 4.3.4-33.el6_7 updates 12 M
kdegames x86_64 6:4.3.4-5.el6 base 41 M
kdegraphics x86_64 7:4.3.4-6.el6 base 3.0 M
kdelibs x86_64 6:4.3.4-24.el6_7 updates 11 M
(中略)
トランザクションの要約
============================================================================================================================================
インストール 102 パッケージ

総ダウンロード容量: 239 M
インストール済み容量: 544 M
これでいいですか? [y/N]

 


この場合、KDEデスクトップ環境を一気に整えられる。
しかしk3bとか、CD、DVDのツールだろ別にKDE環境欲しいだけならいらないじゃん、みたいなことがままある。

・clean


updateが途中で止まってしまったりしてリポジトリや依存関係がおかしくなってしまったときに
yumが保存しているキャッシュを削除するとなおるときもあったりする。
ちなみにキャッシュは/var/cache/yumにある。

$ du -sh /var/cache/yum

521M /var/cache/yum

$ sudo yum clean all

 読み込んだプラグイン:fastestmirror, refresh-packagekit, security

リポジトリーを清掃しています: WANdisco adobe-linux-x86_64 base emacs epel extras updates
すべて掃除しています
Cleaning up list of fastest mirrors

$ du -sh /var/cache/yum
14M /var/cache/yum

$ ls /var/cache/yum/
timedhosts.txt x86_64

$ yum check-update
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
(以下略)
$ sudo yum update
(以下略)

$ du -sh /var/cache/yum
100M /var/cache/yum

 

おまけ


パッケージファイルのダウンロードだけしてインストールはしない。


yumdownloader

$ yumdownloader zsh
読み込んだプラグイン:fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.riken.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
zsh-4.3.11-4.el6.centos.2.x86_64.rpm | 2.2 MB 00:00

 

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が多い。(世界ではUbuntuDebian系)が多くなってるって話聞いたけどどうなんだろう?)

リポジトリとは

ネットワーク上にあるファイルサーバー。
ここに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 playiPhoneでいうitunesに近い)
これに対しdpkgはローカルに保存したdebパッケージをインストールするときなどに使う。(WindowsでいうexeとかmsiをDLしてインストールするに近い)

yumrpm

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のトラブル率を考えると自前ビルドの方がまだマシのように思う)

使用方法

rpmdebに変換

$ alien --to-deb tree-1.5.3-2.el6.x86_64.rpm

 

debrpmに変換

$ alien --to-rpm tree_1.5.3-2_amd64.deb

 

商用サーバの場合は近い道やら大人の事情やらで色々と制約があったりする。
例えばyum updateで一括updateすると、現在提供中のあのサービスやこのサービスが一旦止まっちゃう可能性があるため、
yum downloaderとか、普通にwgetとかでupdateしたいパッケージだけrpmパッケージを落としてきて、
rpm コマンドで入れたりすることも多々ある。めんどくさいね!!

自分用サーバとかなら基本的にyumとかaptで一括update,upgradeして、必要ならそのサービス再起動、とかした方がいいと思う。
気楽でいいよね!!

 

Sponsored Link