技術者になりたい何か

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

パッケージ管理しりーず apt,aptitudeによるパッケージ管理 (Debian系)

apt,aptitudeとは

Debian系のデストリビューションで使用されるパッケージ管理システム。

リポジトリを参照してパッケージのインストール・アンインストールといった操作をするもの。
ということでRed Hat系のyumに相当するものである。
Linuxデストリビューションは数多くあるが、なかでもRedHat系(CentOS,Fedoraなど)とDebian系(Debian,Ubuntu,Linux Mintなど)
が二大メジャーな流れなので、必然yum or apt, rpm or dpkgを使用することが多くなる。
pacmanとがemergeはほっときます。GentooとかArchのひとすみません殴らないで下さい。

ちなみにDebianyumは使用できるがCentOSでaptは使用できない。(CentOSでもdpkgはある

 

aptとaptitude

基本的には同じような動きをする。aptitudeの方が若干高機能らしいが、最近のDebian自体がapt推奨してたりする。

apt-get

パッケージの操作の為のコマンドである。

オプション
-d ファイルをダウンロードする。インストールはしない。
-s システムに変更を加えずに動作をシミュレートする。

サブコマンド
clean 過去に取得し保持していたパッケージファイルのキャッシュを削除する。
update パッケージデータベースを更新する。
upgrade インストールされているパッケージの内、他のパッケージを削除しないものを全て更新する。
dist-upgrade インストールされているパッケージ全て更新する。
       (更新に伴い削除されるパッケージ、新規インストールされるパッケージが有ったらそれぞれ削除・インストールをする)
remove パッケージをアンインストールする。
autoclean 保持しているパッケージのキャッシュから必要なくなったものを削除する。
autoremove インストールされているパッケージの内、必要なくなったものを削除する。
purge インストールされているパッケージを設定ファイル含めて削除する。

実行例


通常の運用システムに置いて全パッケージを普通に更新するとき。

$ sudo apt-get update
Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB]
Hit http://nginx.org jessie InRelease
Get:2 http://security.debian.org jessie/updates/main Sources [193 kB]
Ign http://ftp.jp.debian.org jessie InRelease
Get:3 http://ftp.jp.debian.org jessie-updates InRelease [145 kB]
Get:4 http://security.debian.org jessie/updates/contrib Sources [1,439 B]
Get:5 http://security.debian.org jessie/updates/non-free Sources [14 B]
(中略)
Ign http://nginx.org jessie/nginx Translation-ja
Fetched 991 kB in 12s (78.3 kB/s)
Reading package lists... Done

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

 

 

上記2つを合わせてyumにおけるyum updateとほぼ同じ動作をする。

 

インストール・アンインストール

$ sudo apt-get install apache2

$ sudo apt-get remove [パッケージ]

$ sudo apt-get purge [パッケージ]

 

remove したときは設定ファイルは残る。よって、removeでアンインストールしたパッケージを再インストールしたときは、基本的に以前使っていた設定で動く。
purge したときは設定ファイル含めて削除されるので、再インストールしたときはデフォルト設定で動く。
よって、設定ファイルをいじって動作がおかしくなってしまったときはpurgeしてからインストールしたほうがよいし、使ってないからアンインストールするけどまた今度使うかもなぁ、ってときはremoveの方がいいかもしれない。
なお、運用ポリシーとしては設定ファイルは必要ならバックアップを取り、使用しないパッケージはpurgeで完全削除するのがあるべき姿らしい(聞いたところ)

 

apt-cache

パッケージ情報の照会・検索用コマンド。
なお、対象パッケージはインストールされてなくても良い。
主なサブコマンド
serch キーワード キーワードで検索
show パッケージ名 パッケージ詳細情報表示
showpkg パッケージ名 パッケージについての情報表示
depends パッケージ名 指定パッケージの依存関係情報表示

yum search, yum infoあたりとそっくり。
searchは実際よく使う。

 

aptitude

apt-get よりも高度な機能を持っている。検索時に正規表現が使える。
apt-getとapt-cacheの両方の機能をカバーする。
しかし最近はDebianのバージョンアップ時の推奨コマンドがapt-getになったりしてるので、ちょっと落ち目な感じがする。
ぶっちゃけ実際の運用に置いてはたいして違わないので好きな方を使えばいいと思う。

主な違いは
・インストール時、apt-getは推奨パッケージを提案するが、aptitudeは問答無用でインストールする。
・アンインストール時、apt-getは推奨パッケージを残す(よって不要になったパッケージ=孤児パッケージが生じる)が、aptitudeは問答無用で案インストールする。
 (とはいえ、apt-get autoremoveが実装されたおかげでこの問題はほぼ解決されている)
・apt-get dist-upgrade よりも aptitude full-upgradeの方が大体良い(と言われていた?)
aptitudeの方が単体で高機能な分バグやエラーが多い。
(筆者はapt-get派の為若干主観が混じっています)

 

サブコマンド
update パッケージデータベース更新
show パッケージ名 パッケージ情報を表示する
search パターン 指定したパターンでパッケージを検索する
install パッケージ名 指定したパッケージをインストールする
remove パッケージ名 指定したパッケージを削除する
purge パッケージ名 指定したパッケージを設定ファイルも含めて削除する
full-upgrade システムの全パッケージを最新に更新する
safe-upgrade インストールされているパッケージのうち他のパッケージを削除しないものを更新する
download パッケージ名 パッケージをカレントディレクトリにDLする

基本的にはサブコマンドもapt-getとほぼ同じ。


正規表現を使った検索

$ aptitude search "~napahe2~i"

~n正規表現 パッケージ名が正規表現パターンにマッチするパッケージを探す
~d正規表現 パッケージの説明が正規表現パターンにry
~V正規表現 パッケージのバージョンがry
~i インストール済みのパッケージを検索する
~U 更新可能なパッケージを更新する
~M 自動的にインストールされたパッケージを検索する

というか、正規表現でパッケージ探す状況って思い浮かばないんですが・・・あるんですかね・・・

 

パッケージ管理しりーず (RedHat系-rpmによるパッケージ管理)

rpmパッケージとは

rpmパッケージはRed Hat系のデストリビューション用のパッケージ。

Windowsでいうところのexe,msiに近いけど、別にインストーラーというわけではない。
rpmコマンドに渡すことによって、インストール・アンインストールなどの操作ができる。
yumリポジトリを参照してこれらの操作を行うのに対し、rpmは基本的にrpmパッケージを手元に置いて操作する際に使う。

ちなみに自前ビルドしてmake installとかで入れてしまったパッケージは、
展開されて作成されたディレクトリ、ファイルを全て手動で削除するという非常に面倒な作業によってアンインストールすることになる
(たまにアンインストールスクリプトが付属している親切なパッケージもある)
が、rpmで入れたパッケージはrpmの管理下に置かれるため、rpm -e パッケージ名 で一発で安全に削除できる。

yumで見つからないパッケージの際はどこかでrpmパッケージを配布していないかをビルドする前に探すのがおすすめだが、
いわゆる野良パッケージとなる為、配布元の信頼度などを考慮して使用するのが良い。

rpmコマンドとその使い方

主なオプション

-i パッケージ名 インストール
-U パッケージ名 パッケージをアップグレードする(なかったらインストールする)
-F パッケージ名 パッケージをアップグレードする(なかったら何もしない)
-e パッケージ名 パッケージをアンインストールする
(併用オプション)
-v 詳細情報表示(インストール時)
-h 進行状況を####で表示
--nodeps 依存関係を無視してインストールする(依存関係でエラーが出たけど強引にインストールしたいとき)
--force 既存ファイルを新しいものに置き換える(競合エラーが出たけど強引にインストールしたいとき)
--test インストールはしないでテストする

 

rpmコマンドを使ったパッケージのインストール

実行例

zsh-4.3.11-4.el6.centos.2.x86_64.rpmをカレントディレクトリに置いた状態で以下を実行。

$ sudo rpm -ihv zsh-4.3.11-4.el6.centos.2.x86_64.rpm
準備中... ########################################### [100%]
1:zsh ########################################### [100%]
$ sudo rpm -U zsh
エラー: zsh のオープンに失敗: そのようなファイルやディレクトリはありません
$ sudo rpm -U zsh-4.3.11-4.el6.centos.2.x86_64.rpm
パッケージ zsh-4.3.11-4.el6.centos.2.x86_64 は既にインストールされています。


アップグレードしようとしても新しいバージョンが無いので怒られる。

 

rpmコマンドを使ってパッケージ情報を調べる

主なオプション2

-q パッケージ名 指定したパッケージがインストールされているか表示する

(併用オプション)
-a (--all) インストール済みの全てのパッケージを表示する
-f ファイル名 指定したパッケージを含むパッケージ名を表示する
-p パッケージファイル名 対象としてパッケージファイルを指定する。
-c(--configfiles) 設定ファイルのみ表示する
-d(--docfiles) ドキュメントのみ表示する
-i(--info) インストール済みパッケージの情報を表示する
-l(--list) 指定したパッケージに含まれるファイルを表示する
-R(--requires) 指定したパッケージが依存しているファイル等を表示する
--changelog 変更履歴を表示する

 

-qで指定パッケージのなにかを尋ねるモード

実行例

パッケージ情報

$ rpm -qa zsh
zsh-4.3.11-4.el6.centos.2.x86_64

依存ファイルを表示

$ rpm -qR zsh
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/bin/zsh
/sbin/install-info
/sbin/install-info
config(zsh) = 4.3.11-4.el6.centos.2
coreutils
grep
grep
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libncursesw.so.5()(64bit)
libtinfo.so.5()(64bit)
mktemp
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

変更履歴を表示する

 

$ rpm -q --changelog zsh
* 火 3月 01 2016 Kamil Dudka <kdudka@redhat.com> - 4.3.11-5.el6_7.2
- signal-handling related fixes collected from upstream (#1316945)

* 火 10月 20 2015 Kamil Dudka <kdudka@redhat.com> - 4.3.11-4.el6_7.1
- fix malloc() signal leak in lexsave() (#1267903)

* 月 5月 18 2015 Kamil Dudka <kdudka@redhat.com> - 4.3.11-4
- signal safety when updating global state (#978613)

* 月 2月 23 2015 Kamil Dudka <kdudka@redhat.com> - 4.3.11-3
- signal safety when updating global state in execshfunc() (#978613)

* 火 1月 13 2015 Kamil Dudka <kdudka@redhat.com> - 4.3.11-2
- fix defects found by GCC and Coverity Analysis (#1181608)
(以下略)

 インストールされてるパッケージの情報

 

$ rpm -qi zsh
Name : zsh Relocations: (not relocatable)
Version : 4.3.11 Vendor: CentOS
Release : 4.el6.centos.2 Build Date: 2016年03月23日 03時57分38秒
Install Date: 2016年06月18日 03時08分30秒 Build Host: c6b8.bsys.dev.centos.org
Group : System Environment/Shells Source RPM: zsh-4.3.11-4.el6.centos.2.src.rpm
Size : 5298977 License: BSD
Signature : RSA/SHA1, 2016年03月23日 04時39分32秒, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://zsh.sunsite.dk/
Summary : A powerful interactive shell
Description :
The zsh shell is a command interpreter usable as an interactive login
shell and as a shell script command processor. Zsh resembles the ksh
shell (the Korn shell), but includes many enhancements. Zsh supports
command line editing, built-in spelling correction, programmable
command completion, shell functions (with autoloading), a history
mechanism, and more.

rpmコマンドを使ったパッケージのアンインストール

アンインストール実行例

$ yum info zsh
読み込んだプラグイン: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
インストール済みパッケージ
名前 : zsh
アーキテクチャ : x86_64
バージョン : 4.3.11
リリース : 4.el6.centos.2
容量 : 5.1 M
リポジトリー : installed
要約 : A powerful interactive shell
URL : http://zsh.sunsite.dk/
ライセンス : BSD
説明 : The zsh shell is a command interpreter usable as an interactive login
: shell and as a shell script command processor. Zsh resembles the ksh
: shell (the Korn shell), but includes many enhancements. Zsh supports
: command line editing, built-in spelling correction, programmable
: command completion, shell functions (with autoloading), a history
: mechanism, and more.

 

$ sudo rpm -e zsh

$ rpm -qi zsh
パッケージ zsh はインストールされていません。

$ yum info zsh
読み込んだプラグイン: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
利用可能なパッケージ
名前 : zsh
アーキテクチャ : x86_64
バージョン : 4.3.11
リリース : 4.el6.centos.2
容量 : 2.2 M
リポジトリー : updates
要約 : A powerful interactive shell
URL : http://zsh.sunsite.dk/
ライセンス : BSD
説明 : The zsh shell is a command interpreter usable as an interactive login
: shell and as a shell script command processor. Zsh resembles the ksh
: shell (the Korn shell), but includes many enhancements. Zsh supports
: command line editing, built-in spelling correction, programmable
: command completion, shell functions (with autoloading), a history
: mechanism, and more.

ちなみにrpmコマンドで参照するのはrpmのデータベースだが、実際には「インストールされているrpmパッケージ」についてしか参照できない。
また、インストール時も対象パッケージのフルパスでかつパッケージ名もフルでいれなくてはならない。


よって、特に制約のないサーバの運用においては基本的にはyumで事足りるし、yumを使うべきだし、yumのほうが便利だと思う。

商用サーバとかでバージョンの制約が有ったり、他のパッケージとの兼ね合いで・・・というときはrpmパッケージを落としてきたり持ち込んで、それをインストールしたりすることはよくある。

 

 

パッケージ管理しりーず リポジトリについて(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

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

Sponsored Link