技術者になりたい何か

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

パッケージ管理しりーず aptのリポジトリ (Debian系)

リポジトリの設定(apt用)

Debian系のリポジトリの設定ファイルは/etc/apt/sources.list

 

デフォルト

$ sudo cat /etc/apt/sources.list

# セキュリティ更新
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

## Debian アーカイブミラー

# ベースリポジトリ
deb http://ftp.debian.org/debian jessie main contrib non-free
deb-src http://ftp.debian.org/debian jessie main contrib non-free

# 安定版更新
deb http://ftp.debian.org/debian jessie-updates main contrib non-free
deb-src http://ftp.debian.org/debian jessie-updates main contrib non-free

# 安定版バックポート
deb http://ftp.debian.org/debian jessie-backports main contrib non-free
deb-src http://ftp.debian.org/debian jessie-backports main contrib non-free

 

設定変更は

ここ(/etc/apt/sources.list)に追記することでリポジトリ追加、記述削除することでリポジトリ削除。
ちなみに先頭の#がアンコメントになるので、無効にしたいリポジトリの行をアンコメントして無効にすることも可能。

$ sudo apt-get update

で接続エラーが出るようなリポジトリが混じってる時は一旦アンコメントするのも良いだろう。

なお、上記ファイルを書き換えたのちは、キャッシュ更新の為必ず

$ sudo apt-get update
$ sudo apt-get upgrade

してから目的のパッケージを入れた方が良い。

 

追記するときはこんな感じ。

$ sudo emacs /etc/apt/sources.list

# セキュリティ更新
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

## Debian アーカイブミラー

# ベースリポジトリ
deb http://ftp.debian.org/debian jessie main contrib non-free
deb-src http://ftp.debian.org/debian jessie main contrib non-free

# 安定版更新
deb http://ftp.debian.org/debian jessie-updates main contrib non-free
deb-src http://ftp.debian.org/debian jessie-updates main contrib non-free

# 安定版バックポート
deb http://ftp.debian.org/debian jessie-backports main contrib non-free
deb-src http://ftp.debian.org/debian jessie-backports main contrib non-free

#Deb-Multimedia Reposito
deb http://www.deb-multimedia.org wheezy main non-free
deb-src http://www.deb-multimedia.org wheezy main non-free

 

最後の

#Deb-Multimedia Reposito
deb http://www.deb-multimedia.org wheezy main non-free
deb-src http://www.deb-multimedia.org wheezy main non-free 

 

を追記。

この上で

$ sudo apt-get update
Ign http://ftp.jp.debian.org jessie InRelease
~~中略~~
Get:18 http://security.debian.org jessie/updates/contrib Translation-en [1,211 B]
Get:19 http://security.debian.org jessie/updates/main Translation-en [198 kB]
Hit http://ftp.jp.debian.org jessie/contrib Translation-en
Hit http://ftp.jp.debian.org jessie/main Translation-en
Hit http://ftp.jp.debian.org jessie/main Translation-ja
Hit http://ftp.jp.debian.org jessie/non-free Translation-en
Get:20 http://security.debian.org jessie/updates/non-free Translation-en [14 B]
Ign http://nginx.org jessie/nginx Translation-en_US
Ign http://nginx.org jessie/nginx Translation-en
Ign http://nginx.org jessie/nginx Translation-ja
Get:21 http://www.deb-multimedia.org wheezy InRelease [41.2 kB] ←ここから下
Ign http://www.deb-multimedia.org wheezy InRelease
Get:22 http://www.deb-multimedia.org wheezy/main Sources [47.2 kB]
Get:23 http://www.deb-multimedia.org wheezy/non-free Sources [2,932 B]
Get:24 http://www.deb-multimedia.org wheezy/main amd64 Packages [79.5 kB]
Get:25 http://www.deb-multimedia.org wheezy/non-free amd64 Packages [2,153 B]
Get:26 http://www.deb-multimedia.org wheezy/main Translation-en [39.2 kB]
Get:27 http://www.deb-multimedia.org wheezy/non-free Translation-en [2,933 B]
Ign http://www.deb-multimedia.org wheezy/main Translation-en_US
Ign http://www.deb-multimedia.org wheezy/main Translation-ja
Ign http://www.deb-multimedia.org wheezy/non-free Translation-en_US
Ign http://www.deb-multimedia.org wheezy/non-free Translation-ja
Fetched 1,207 kB in 17s (68.3 kB/s)
Reading package lists... Done

上記リポジトリの情報を読み込んでいるのが見られるはず。

また、読み込みが遅い時にはより速いミラーサイトに書き換えるなども試すことが可能。
パッケージダウンロードに利用するミラーサイトについて

要するにこの/etc/apt/sources.listがCentOSにおける/etc/yum.repos.d/epel.repoのようなものと思っておけば良い。

ちなみに/etc/apt/apt.confをはじめ、/etc/apt配下にいろいろ設定ファイルがあったりなかったりするが、
よほどのことが無い限り触ることは無いような。。。

 

パッケージ管理しりーず 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パッケージを落としてきたり持ち込んで、それをインストールしたりすることはよくある。

 

 

Sponsored Link