読者です 読者をやめる 読者になる 読者になる

技術者になりたい何か

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

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

dpkgとは


Debian系で使われているパッケージ管理コマンド。
Red Hat系のrpmコマンドとほぼ対応する立ち位置にいる。
対象となるファイルはDebian形式のパッケージファイルで、拡張子は.debである。

主なオプション


-E 同バージョンが既にインストールされていればインストールを行わない
-Q 新バージョンが既にインストールされていればインストールを行わない
-R ディレクトリを再帰的に処理

-i(--install) パッケージファイル名 パッケージのインストール
-r(--remove) パッケージ名 パッケージのアンインストール
-P(--purge) パッケージ名 パッケージの完全削除(設定ファイルも含めて削除)
-l(--list) [検索パターン] インストール済みパッケージを検索して表示
-L(--listfiles) パッケージ名 指定したパッケージからインストールされたファイルを一覧表示
-s(--status) パッケージ名 指定したファイルがどのパッケージからインストールされたか表示
-C(--audit) 壊れているパッケージのチェック

使い方

$ sudo dpkg -i hoge.deb
$ sudo dpkg -l hoge

vimdebパッケージをDLしてインストールとかだとこんな感じ。

$ ls -l | grep vim
-rw-r--r-- 1 tmin tmin 952724 Nov 23 01:53 vim_7.4.488-7+deb8u1_amd64.deb

$ sudo dpkg -i vim_7.4.488-7+deb8u1_amd64.deb

 

rpmコマンドと同じく、リポジトリを参照してパッケージインストールとかはできないので、
基本的には配布されている必要なパッケージにリポジトリが用意されていなかったりして、aptが使えないときに使用することになる。
パッケージをDLしてきて手元に置いてインストールするという手法である。
検索についても、リポジトリ上のパッケージ群から探すのではなく、そのシステムにインストールされているパッケージから選択をする。

よって、dpkg -l 以外はaptが使用できる環境であればaptを使うべきだし、dpkgを使用して直接にdebパッケージをインストールする前に
そのパッケージを配布しているリポジトリが無いか探すべきである。

しかし、どうしてもない場合ないしバージョンにこだわりがある場合、もしくはネット環境が無い場合など、まれに必要になることもある。
ちなみにGUIでパッケージインストーラーにてdebファイルをインスコしようとして、リポジトリにそのパッケージのより新しいバージョンがある場合、
リポジトリから入れてよね!!と言わんばかりの警告が出るが、無視してインストールすることは依存関係を満たせば可能である。
また、依存関係で警告が出ている際にも--forceをつけることによって強制的にhogehogeしたりできる。
しかし、のちにupdateでエラー吐いたり、upgradeでエラー吐いたり色んなトラブルのもとになるのであまりお勧めしない。

なお、aptは裏でdpkgを呼んでいるらしい。


こわれたときのなおしかた

dokgでリポジトリ経由しないでdebパッケージインストールしたりして、
依存関係がおかしくなったりするとこんなエラーが出たりする。


You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
vim : Depends: vim-common (= 2:7.4.488-7+deb8u1) but 2:7.4.488-7+deb8u2 is installed
Depends: vim-runtime (= 2:7.4.488-7+deb8u1) but 2:7.4.488-7+deb8u2 is installed
zsh : Depends: zsh-common (= 5.3.1-4) but it is not installed
Depends: libtinfo5 (>= 6) but 5.9+20140913-1+b1 is installed
Recommends: libc6 (>= 2.23) but 2.19-18+deb8u7 is installed
Recommends: libncursesw5 (>= 6) but 5.9+20140913-1+b1 is installed
E: Unmet dependencies. Try using -f.

上記の場合はvimzshの依存関係で問題有り。

こんな感じで直せることが多い。

$ sudo dpkg --configure -a
$ sudo apt-get -f install

 

実行例

$ sudo dpkg --configure -a
dpkg: dependency problems prevent configuration of vim:
vim depends on vim-common (= 2:7.4.488-7+deb8u1); however:
Version of vim-common on system is 2:7.4.488-7+deb8u2.
vim depends on vim-runtime (= 2:7.4.488-7+deb8u1); however:
Version of vim-runtime on system is 2:7.4.488-7+deb8u2.

dpkg: error processing package vim (--configure):
dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of zsh:
zsh depends on zsh-common (= 5.3.1-4); however:
Package zsh-common is not installed.
zsh depends on libtinfo5 (>= 6); however:
Version of libtinfo5:amd64 on system is 5.9+20140913-1+b1.

dpkg: error processing package zsh (--configure):
dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of zsh-static:
zsh-static depends on zsh; however:
Package zsh is not configured yet.

dpkg: error processing package zsh-static (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
vim
zsh
zsh-static

sudo apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
vim
Suggested packages:
ctags vim-doc vim-scripts
The following packages will be REMOVED:
zsh zsh-static
The following packages will be upgraded:
vim
1 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
3 not fully installed or removed.
Need to get 0 B/953 kB of archives.
After this operation, 4,776 kB disk space will be freed.
Do you want to continue? [Y/n] y
Reading changelogs... Done
(Reading database ... 164824 files and directories currently installed.)
Removing zsh-static (5.3.1-4) ...
Removing zsh (5.3.1-4) ...
Processing triggers for man-db (2.7.0.2-5) ...
(Reading database ... 164760 files and directories currently installed.)
Preparing to unpack .../vim_2%3a7.4.488-7+deb8u2_amd64.deb ...
Unpacking vim (2:7.4.488-7+deb8u2) over (2:7.4.488-7+deb8u1) ...
Setting up vim (2:7.4.488-7+deb8u2) ...

$ sudo dpkg --configure -a

 

2回めのdpkg --configure -a で出力がなければ問題解決してるはず。

 

 

図解でわかるLinuxのすべて―コマンド操作&パッケージ管理

図解でわかるLinuxのすべて―コマンド操作&パッケージ管理

 

 

[入門] Debian パッケージ

[入門] Debian パッケージ

 

 

パッケージ管理しりーず 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配下にいろいろ設定ファイルがあったりなかったりするが、
よほどのことが無い限り触ることは無いような。。。

 

 

[入門] Debian パッケージ

[入門] Debian パッケージ

 

 

Linuxシステム[実践]入門 (Software Design plus)

Linuxシステム[実践]入門 (Software Design plus)

 

 

パッケージ管理しりーず 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 自動的にインストールされたパッケージを検索する

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

 

 

図解でわかるLinuxのすべて―コマンド操作&パッケージ管理

図解でわかるLinuxのすべて―コマンド操作&パッケージ管理

 

  

[入門] Debian パッケージ

[入門] Debian パッケージ