LPIC パッケージ管理周りについて

かなり長いです。

Linuxインストールに必要なパーティション

以下に示すディレクトリは独立したパーティションに割り当てるのが一般的

  • /home
  • /var 更新頻度が高いため
  • /usr プログラムやライブラリ、ドキュメントが置かれるあとからプログラムを追加することがなければ読み込み専用でマウントするのが良い。
  • /boot
  • /swap 物理メモリの1〜2倍
  • / 言うまでも無し

パーティションのレイアウト

用途によって色々変化させる

  • スワップパーティションは前述のとおりのルールで割り当てる。
  • WEBサーバであれば/var/logに多めに容量をわりあてたり
  • ファイルサーバであれば/homeに容量を割り当てたり

ブートローダGRUB

GRand Unified Bootloader (GRUB)にはGrub LegacyとGrub 2の二種類がある。

grub-installコマンドでGRUBのインストールを行う。
以下の例では/dev/hdaのMaster Boot Record(MBR)^mbr上にGRUBをインストールする。

# grub-install /dev/hda

設定ファイル

GRUB Legacyの設定ファイルは/boot/grub/menu.lst
パラメータは以下のとおり

パラメータ 説明
timeout メニューを表示している時間(秒)
title メニューに表示されるエントリ名
root ルートデバイスの指定
kernel 起動するカネールイメージファイルと起動オプションの指定
makeactive ルートパーティションのアクティブ化
chainloader 指定されたセクタの読み込みと実行
hidemenu 起動時にメニューを表示しない
# cat /boot/grub/menu.lst
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda #ブートデバイス
default=0 #デフォルトは一番目のエントリ
timeout=5 # タイムアウトまで5秒
splashimage=(hd0,0)/grub/splash.xpm.gz #メニュー表示時の背景画像
hiddenmenu
title CentOS (2.6.32-358.2.1.el6.x86_64) # 1番目のエントリ
        root (hd0,0) #/dev/sda1
        kernel /vmlinuz-2.6.32-358.2.1.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-358.2.1.el6.x86_64.img
title CentOS (2.6.32-358.el6.x86_64) # 2番目のエントリ
        root (hd0,0)
        kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-358.el6.x86_64.img

GRUB2の設定ファイルは/boot/grub/grub.cfgだが、直接編集はせず、/etc/default/grubで設定を行い、update-grubコマンドを実行すると、設定に基づいて/boot/grub/grub.cfgが生成される。

パラメータは以下のとおり

パラメータ 説明
GRUB_DEFAULT デフォルトで起動するOSの番号
GRUB_HIDDEN_TIMEOUT メニューを非表示する秒数
GRUB_HIDDEN_TIMEOUT_QUIET trueならメニュー非表示 | false なら残り時間表示
GRUB_TIMEOUT デフォルトOSを起動するまでの秒数
GRB_CMDLINE_LINUX_DEFAULT ブートオプション
GRUB_CMDLINE_LINUX カーネルに渡すオプション

ブートオプション

ブートローダ起動時にAキーを押すとブートオプションを指定できる。

パラメータは以下のとおり

パラメータ 説明
root=デバイス ルートパーティションとしてマウントするデバイス
noscsi SCSIデバイスを使用しない
nousb usbデバイスを使用しない
single シングルユーザモードで起動
1~5 指定したランレベルで起動

共有ライブラリ管理

ライブラリの利用方法(リンク)には2種類ある。

  • スタティックリンク
    • コンパイル時にライブラリを読み込む。1つのライブラリがプログラム数分用意されて使用されるため冗長。
  • ダイナミックリンク
    • 実行時にライブラリを読み込む。1つのライブラリを1つ用意すればよい。

ダイナミックリンクで呼び出されるライブラリを共有ライブラリという。共有ライブラリはlib*.so*という名前が付けられて/lib,/usr/lib以下に配置されている。

必要な共有ライブラリの確認

lddコマンドで確認できる。

# ldd /bin/cat
    linux-vdso.so.1 =>  (0x00007fff9cb9e000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f8482c97000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8483033000)

/lib/,/usr/lib以外のディレクトリを指定する場合は/etc/ld.so.confに記述する。 最近は/etc/ld.so.confに読み込む設定ファイルを書き、/etc/ld.so.conf.d/以下に設定ファルを設置することもある。

# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# cat /etc/ld.so.conf.d/mysql-x86_64.conf
/usr/lib64/mysql

いちいちプログラムが起動時にこれらの設定ファイルを読んでライブラリを探すのは非効率なので、 その代わりに/etc/ld.so.cacheが参照される。ldconfigコマンドが/etc/ld.so.cacheを再生成する。

それとLD_LIBRARY_PATH環境変数を更新してライブラリの配置されているディレクトリを追加指定することも可能。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/fakeyakuza/lib` 

パッケージ管理まわり

パッケージ管理周りはさすがにさんざんやっているしLinuxを自分のマシンに入れた人の多くが避けて通れぬ道なので概念的なことは割愛

dpkgコマンド

Debianではdpkgコマンドを利用してパッケージ管理を行う。

dpkg [option] action
option 説明
-E 既に同一バージョンがインストールされていればインストールしない
-G 既に新バージョンがインストールされていればインストールしない
-R (--recursive) ディレクトリ内を再帰的に処理する
action 説明
-i パッケージファイル名 (--install) パッケージファイルをインストールする
-r パッケージ名 (--remove) 設定ファイルを残してパッケージをアンインストールする
-P パッケージ名 (--purge) 設定ファイルを含めて完全にパッケージをアンインストールする
-l 検索パターン (--list) インストール済みパッケージを検索して表示する
-S ファイル名検索パターン (--search) 指定したファイルがどのパッケージからインストールされたか検索する
-L パッケージ名 (--listfiles) 指定したパッケージからインストールされたファイルを一覧表示する
-s パッケージ名 指定したパッケージの状態を表示する
--configure パッケージ名 展開されたパッケージを構成する
--unpack パッケージ名 パッケージを展開する(インストールはしない)

パッケージの命名規則は以下のとおり

<パッケージ名称>_<バージョン>_<リリース番号>_<アーキテクチャ>.deb

パッケージのインストール

# dpkg -l sl
dpkg-query: sl に一致するパッケージが見つかりません

# wget http://ftp.nara.wide.ad.jp/debian/pool/main/s/sl/sl_3.03-17_i386.deb
# dpkg -s sl
dpkg-query: パッケージ 'sl' はまだインストールされておらず情報の利用は不可能です
アーカイブファイルを調べるためには dpkg --info (= dpkg-deb --info) を、
その内容一覧を表示するには dpkg --contents (= dpkg-deb --contents) を使います。
# dpkg -EG -i sl_3.03-17_i386.deb 
以前に未選択のパッケージ sl を選択しています。
(データベースを読み込んでいます ... 現在 143321 個のファイルとディレクトリがインストールされています。)
(sl_3.03-17_i386.deb から) sl を展開しています...
sl (3.03-17) を設定しています ...
man-db のトリガを処理しています ...
# dpkg -s sl
Package: sl
Status: install ok installed
Priority: optional
Section: games
Installed-Size: 114
Maintainer: Hiroyuki Yamamoto <yama1066@gmail.com>
Architecture: i386
Version: 3.03-17
Depends: libc6 (>= 2.0), libncurses5 (>= 5.5-5~), libtinfo5
Description: Correct you if you type `sl' by mistake
 Sl is a program that can display animations aimed to correct you
 if you type 'sl' by mistake.
 SL stands for Steam Locomotive.
Homepage: http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html

指定したファイルがどのパッケージからインストールされたか

# dpkg -S /usr/games/sl
sl: /usr/games/sl

指定したパッケージからどのファイルがインストールされたか

# dpkg -L  sl
/.
/usr
/usr/games
/usr/games/sl-h
/usr/games/sl
/usr/share
/usr/share/doc
/usr/share/doc/sl
/usr/share/doc/sl/README.sl-h.jp
/usr/share/doc/sl/changelog.Debian.gz
/usr/share/doc/sl/README
/usr/share/doc/sl/copyright
/usr/share/doc/sl/README.Debian
/usr/share/doc/sl/README.jp
/usr/share/man

パッケージを設定ファイルごと削除(パージ)

# dpkg -P sl
(データベースを読み込んでいます ... 現在 143351 個のファイルとディレクトリがインストールされています。)
sl を削除しています ...
man-db のトリガを処理しています ...
## dpkg -l sl
dpkg-query: sl に一致するパッケージが見つかりません

apt-getコマンド

apt-getのaptはadvanced packaging toolの略

apt-get [オプション] サブコマンド パッケージ名
オプション 説明
-d ファイルをダウンロードする(インストールはしない)
-s システムを変更せず動作をシミュレートする
サブコマンド 説明
clean 過去に取得して保存中のパッケージを削除する
dist-upgrade Debianシステムのアップグレード
install パッケージのインストール
remove パッケージのアンインストール
update パッケージデータベースの更新
upgrade システムの全パッケージを安全にアップグレード

リポジトリ設定ファイルの書式は以下のとおり

deb/deb-src [url] バージョン名 main/contrib/non-free

設定例

# cat /etc/apt/sources.list
# 

# deb cdrom:[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20]/ wheezy contrib main

deb cdrom:[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20]/ wheezy contrib main

deb http://ftp.jaist.ac.jp/debian/ wheezy main
deb-src http://ftp.jaist.ac.jp/debian/ wheezy main

deb http://security.debian.org/ wheezy/updates main contrib
deb-src http://security.debian.org/ wheezy/updates main contrib

# wheezy-updates, previously known as 'volatile'
deb http://ftp.jaist.ac.jp/debian/ wheezy-updates main contrib
deb-src http://ftp.jaist.ac.jp/debian/ wheezy-updates main contrib

最新のパッケージ情報の取得

# apt-get update
無視 cdrom://[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20] wheezy Release.gpg
無視 cdrom://[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20] wheezy Release
無視 cdrom://[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20] wheezy/contrib i386 Packages/DiffIndex
無視 cdrom://[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20] wheezy/main i386 Packages/DiffIndex
無視 cdrom://[Debian GNU/Lin
(省略)
118 kB を 3秒 で取得しました (30.3 kB/s)
パッケージリストを読み込んでいます... 完了

パッケージのインストール

apt-get install sl
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  sl
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
26.1 kB のアーカイブを取得する必要があります。
この操作後に追加で 117 kB のディスク容量が消費されます。
取得:1 http://ftp.jaist.ac.jp/debian/ wheezy/main sl i386 3.03-17 [26.1 kB]
26.1 kB を 0秒 で取得しました (136 kB/s)
以前に未選択のパッケージ sl を選択しています。
(データベースを読み込んでいます ... 現在 143317 個のファイルとディレクトリがインストールされています。)
(.../archives/sl_3.03-17_i386.deb から) sl を展開しています...
man-db のトリガを処理しています ...
sl (3.03-17) を設定しています ...

パッケージの削除

# apt-get remove sl
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
  sl
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
この操作後に 117 kB のディスク容量が解放されます。
続行しますか [Y/n]? y
(データベースを読み込んでいます ... 現在 143347 個のファイルとディレクトリがインストールされています。)
sl を削除しています ...
man-db のトリガを処理しています ...

apt-cacheコマンド

パッケージ情報を検索、参照できるコマンド

apt-cache サブコマンド
サブコマンド 説明
searchキーワード 指定したキーワード検索
show パッケージ名 パッケージ詳細情報
showpkg パッケージ情報
depends パッケージ名 依存関係情報

キーワード検索

# apt-cache search yatex
yatex - もうひとつの Emacs 用 TeX モード

パッケージ情報まわり

# apt-cache show vim
Package: vim
Priority: optional
Section: editors
Installed-Size: 1797
Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
Architecture: i386
Version: 2:7.3.547-7
Provides: editor
(省略)
# apt-cache showpkg vim
Package: vim
Versions: 
2:7.3.547-7 (/var/lib/apt/lists/Debian%20GNU_Linux%207.0.0%20%5fWheezy%5f%20-%20Official%20i386%20DVD%20Binary-1%2020130504-15:20_dists_wheezy_main_binary-i386_Packages) (/var/lib/apt/lists/ftp.jaist.ac.jp_debian_dists_wheezy_main_binary-i386_Packages)

aptitude

apt-getの高機能版

aptitude サブコマンド

サブコマンドは大体apt-getと同じだが、一部異なる部分があるのでそこだけ記録

サブコマンド|説明 show パッケージ名|パッケージ情報 search パターン|検索 remove パッケージ名|設定ファイルを残してアンインストール purge パッケージ名|完全にアンインストール download パッケージ名|パッケージのダウンロード

# aptitude install sl

rpmコマンド

RH系列におけるdpkgコマンドみたいなもの。よく使っているので(rpm -ivh *.rpmなど)、抜けている具体例だけを追う。

# rpm -ivh jdk-7u21-linux-i586.rpm
Preparing...                ########################################### [100%]
   1:jdk                    ########################################### [100%]
Unpacking JAR files...

アンインストール

# rpm -e samba (--nodepsを加えると依存関係を無視する)

インストール済みパッケージ検索

# rpm -qa | grep vim
vim-enhanced-7.2.411-1.8.el6.x86_64
vim-minimal-7.2.411-1.8.el6.x86_64
vim-common-7.2.411-1.8.el6.x86_64

パッケージ情報

# rpm -qi 
rpm -qi bash
Name        : bash                         Relocations: (not relocatable)
Version     : 4.1.2                             Vendor: CentOS
Release     : 14.el6                        Build Date: Fri 22 Feb 2013 06:12:09 AM JST
Install Date: Thu 04 Apr 2013 04:58:46 PM JST      Build Host: c6b7.bsys.dev.centos.org
Group       : System Environment/Shells     Source RPM: bash-4.1.2-14.el6.src.rpm
Size        : 3139227                          License: GPLv3+
Signature   : RSA/SHA1, Sun 24 Feb 2013 02:39:30 AM JST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.gnu.org/software/bash
Summary     : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.

指定したファイルの元となるパッケージ

# rpm -qf /bin/echo
coreutils-8.4-19.el6.x86_64

インストールされるファイルの一覧

# rpm -qlp jdk-7u21-linux-i586.rpm
/etc
/etc/.java
/etc/.java/.systemPrefs
/etc/.java/.systemPrefs/.system.lock
/etc/.java/.systemPrefs/.systemRootModFile
/etc/init.d/jexec
/usr
/usr/java
/usr/java/jdk1.7.0_21
/usr/java/jdk1.7.0_21/COPYRIGHT
/usr/java/jdk1.7.0_21/LICENSE
/usr/java/jdk1.7.0_21/README.html
/usr/java/jdk1.7.0_21/THIRDPARTYLICENSEREADME-JAVAFX.txt
/usr/java/jdk1.7.0_21/THIRDPARTYLICENSEREADME.txt
/usr/java/jdk1.7.0_21/bin
/usr/java/jdk1.7.0_21/bin/ControlPanel
/usr/java/jdk1.7.0_21/bin/appletviewer
/usr/java/jdk1.7.0_21/bin/apt
/usr/java/jdk1.7.0_21/bin/extcheck
/usr/java/jdk1.7.0_21/bin/idlj
/usr/java/jdk1.7.0_21/bin/jar
/usr/java/jdk1.7.0_21/bin/jarsigner
/usr/java/jdk1.7.0_21/bin/java
/usr/java/jdk1.7.0_21/bin/java-rmi.cgi
/usr/java/jdk1.7.0_21/bin/javac
/usr/java/jdk1.7.0_21/bin/javadoc
/usr/java/jdk1.7.0_21/bin/javafxpackager
/usr/java/jdk1.7.0_21/bin/javah
/usr/java/jdk1.7.0_21/bin/javap
/usr/java/jdk1.7.0_21/bin/javaws
(省略)

依存関係

# rpm -qR perl
/usr/bin/perl
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.2)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libcrypt.so.1()(64bit)
libdb-4.7.so()(64bit)
libdl.so.2()(64bit)

YUMコマンド

言うまでもなし。Yello dog Updater Modified.

設定ファイル

# 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=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
(以下はコメントだけなので省略)

リポジトリ設定ファイル

ls /etc/yum.repos.d/
CentOS-Base.repo       CentOS-Vault.repo  mirrors-rpmforge          rpmforge.repo
CentOS-Debuginfo.repo  epel.repo          mirrors-rpmforge-extras
CentOS-Media.repo      epel-testing.repo  mirrors-rpmforge-testing

アプデート可能パッケージ一覧

# yum check-update
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
epel/metalink                                                                 | 3.9 kB     00:00
 * base: www.ftp.ne.jp
 * epel: ftp.iij.ad.jp
 * extras: www.ftp.ne.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: www.ftp.ne.jp
base                                                                          | 3.7 kB     00:00
epel                                                                          | 4.2 kB     00:00
epel/primary_db                                                               | 5.2 MB     00:05
extras                                                                        | 3.5 kB     00:00
rpmforge                                                                      | 1.9 kB     00:00
updates                                                                       | 3.4 kB     00:00
93 packages excluded due to repository priority protections

coreutils.x86_64                                    8.4-19.el6_4.2                            updates
coreutils-libs.x86_64                               8.4-19.el6_4.2                            updates
curl.x86_64                                         7.19.7-36.el6_4                           updates
gnutls.x86_64                                       2.8.5-10.el6_4.2                          updates
gzip.x86_64                                         1.3.12-19.el6_4                           updates
kernel.x86_64                                       2.6.32-358.6.2.el6                        updates
kernel-firmware.noarch                              2.6.32-358.6.2.el6                        updates
kernel-headers.x86_64                               2.6.32-358.6.2.el6                        updates
(以下省略)

すべてのパッケージをアップデート

yum update

指定パッケージをアップデート

yum update パッケージ名

インストール

yum install パッケージ名

アンインストール

yum install パッケージ名

パッケージ情報を確認(未インストールも含む)

# yum info sl
(中略)
Available Packages
Name        : sl
Arch        : x86_64
Version     : 3.03
Release     : 6.el6
Size        : 11 k
Repo        : epel
Summary     : Joke command for when you type 'sl' instead of 'ls'
URL         : http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html
License     : Freely redistributable without restriction
Description : The sl (Steam Locomotive) command is a joke which displays a train on your
            : terminal when you accidentally type 'sl' instead of 'ls'.

リポジトリ上のすべてのパッケージ情報と、インストールの有無の確認

# yum list

パッケージ情報をキーワード検索

# yum search ruby
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.iij.ad.jp
 * extras: www.ftp.ne.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: www.ftp.ne.jp
93 packages excluded due to repository priority protections
epel/pkgtags                                                                  | 300 kB     00:00
========================================= N/S Matched: ruby =========================================
rubygem-ZenTest.noarch : Automated test scaffolding for Ruby
rubygem-flexmock.noarch : Mock object library for ruby
rubygem-git.noarch : A package for using Git in Ruby code
rubygem-hoe.noarch : rake/rubygems helper for Rakefiles

パッケージグループの一覧

# yum grouplist
Loaded plugins: fastestmirror, priorities
Setting up Group Process
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.iij.ad.jp
 * extras: www.ftp.ne.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: www.ftp.ne.jp
base/group_gz                                                                 | 212 kB     00:00
epel/group_gz                                                                 | 237 kB     00:00
Installed Groups:
   Additional Development
   Compatibility libraries
   E-mail server
   Haskell
   Milkymist
   Perl Support
   Ruby Support
   System administration tools
Available Groups:
   Backup Client
   Backup Server
   Base
   CIFS file server
   Client management tools
   Console internet tools
   Debugging Tools
   Desktop
   Desktop Debugging and Performance Tools
   Desktop Platform
   Desktop Platform Development

パッケージグループ単位でのインストール

# yum groupinstall "Desktop Platform"

パッケージのダウンロード(インストールはしない)

# yumdownload パッケージ名

雑感

意外と知らないことが多かった。aptitudeとapt-getの違いなんかも理解できた。 正直疲れた。。