Linuxゲリラ戦記

基本的にソフトウェアのインストールはコマンドで。

左を向いているペンギンみたいなキャラクター、ナックス

8.ソフトウェアの検索・インストール・削除・更新

デビー君「ねぇねぇ、ナックス。インターネットで探してみたんだけど、Linux用のソフトが見つからないんだけど?」

ナックス「そうですね。ネット上ではLinuxのソフトはほとんどありません。Windowsでは『欲しいソフトをネットから探す』という文化ですが、Linuxでは『欲しいソフトをコマンドからインストールする』という文化があります」

デビー君「『コマンドからインストール』?」

ナックス「そうです。『Linuxで使えるソフトの名前と説明が書かれているリストを元に、ネットで注文(ダウンロード)する』というイメージです」

デビー君「それもCUIでやるの?」

ナックス「はい。ですが、もちろんGUIでやる方法もあります。私が以前初心者にお勧めと言って紹介したopenSUSEUbuntuは両方ともGUIでソフトをダウンロード・及びインストールができます。また、現在のLinuxのほとんどは特にCUIに特化したものでなければ、大体GUIでのソフトのダウンロード・インストール環境が備わっています」

デビー君「うーん。でも『リストを元に』っていうのがひっかかるなぁ。Windowsはインターネットっていう膨大な世界で好きなだけソフトをインストールできるのに、Linuxは『リスト』に書かれたソフトしかインストール出来ないの?」

ナックス「リストは別に固定ではなく、ネットから常に最新のリストを取得することができ、また、そのリストにのっているソフトの数は膨大です。特にLinuxの中でも最大級のソフトウェアの数を誇るDebianでは2万5113を越えるフリーのソフトウェアが存在し、こうしている現在でもその数は増えつづけています」

デビー君「2万個以上!?」

ナックス「Windowsの『ネットで検索してインストールする』という方法では『どのサイトで友達が言っていたあの素晴らしいソフトがダウンロード出来るのか?』と『僕のWindowsは古いけど、このソフトは使えるのだろうか?』という問題が存在します。しかし、Linuxの場合はソフト注文の窓口が一つな為、『Linuxのあのソフトが良いらしいぜ』と聞けば、すぐにインストール出来ます。また、Linuxの『注文リスト』はそのディストリビューションの配布元が一元管理している場合が多く『必ずそのLinuxディストリビューションで使える』という保証があります」

デビー君「へー」

ナックス「ちなみに、Linuxでは『ソフト』のことを『パッケージ』と言います。ぜひ覚えておいてください」

デビー君「はーい」

ナックス「ただ、Linuxディストリビューションによってそれぞれパッケージをインストールする為のコマンドが違います。yumコマンドやapt-getコマンドが主流ですが、他にもrpm、pacman、conary、portage、aptitudeなどがあります。今回は一例としてdebianでパッケージのインストールに推奨されているコマンド、aptitudeコマンドを解説します」

デビー君「えー?僕のLinuxはyumコマンドだぞー!yumコマンドの解説もしやがれー!ぶーぶー!」

ナックス「他のコマンドを推奨されているディストリビューションは他のサイトなどを参考にしてください。ではでは、早速CUI環境を立ち上げて、以下の様にコマンドを入力してみてください」

$ aptitude search browser

デビー君「おぉ!?何か出た!」

ナックス「はい。今のはaptitudeコマンドを使って『browser』をキーワードとして、インストールできるパッケージの検索を行ったのです」

$ aptitude search browser
p   browser-history         - User daemon that tracks URLs looked at and logs them         
p   cbrowser          - a C/C++ source code indexing, querying and browsing tool           
i   epiphany-browser        - Intuitive web browser - dummy package                  
i A epiphany-browser-data         - Data files for the GNOME web browser                   
p   epiphany-browser-dbg    - Debugging symbols for the GNOME web browser            
p   epiphany-browser-dev    - Development files for the GNOME web browser            
p   file-browser-applet     - browse and open files on your computer from the GNOME panel        
v   gimp-helpbrowser        -                                
v   gnome-www-browser       -                                
p   gnu-smalltalk-browser         - GNU Smalltalk browser                      
v   info-browser            -                                
p   libhttp-browserdetect-perl    - Determine the Web browser, version, and platform from an HTTP user agent 
v   man-browser             -                                
p   monodoc-browser         - MonoDoc GTK+ based viewer                        
p   mysql-query-browser     - Official GUI tool to query MySQL database              
p   podbrowser        - Documentation browser for Perl                   
p   pop3browser             - Allows to check a pop3 mailbox before downloading any mail         
p   sqlitebrowser           - GUI editor for SQLite databases                  
v   vrml-browser            -                                
v   www-browser             -                                
p   xsmbrowser        - X11 tool for navigating SMB Networks                   
$

ナックス「パッケージを検索する時は以下のようなコマンドになります」

$ aptitude search 検索したいパッケージ名

ナックス「検索したパッケージの中で詳しい情報を知りたいものがあれば、showオプションを使います」

$ aptitude show パッケージ名

ナックス「例えば以下のようになります」

$ aptitude show browser-history
パッケージ: browser-history
状態: インストールされていません
バージョン: 2.8-10
優先度: 任意
セクション: web
メンテナ: Colin Watson <cjwatson@debian.org>
展開サイズ: 139k
依存: libc6 (>= 2.7-1), libx11-6, libxmu6
提案: cgiwrap | apache | apache-ssl, perl-modules | libcgi-pm-perl
説明: User daemon that tracks URLs looked at and logs them
 Browser-history came from the will to overcome a Netscape bug: there is no global history, and if you close a window, its whole history is
 lost. For people browsing lots of sites, having the possibility of backtracking to where one has been before means that you don't have to put
 everything in your bookmarks file. If you are not sure if a site may be worth remembering, don't add it in your bookmarks. If you need it
 later, just browse your history files. 
 
 It works with: Netscape Navigator, Arena, and Amaya. Support for `browser-history' can easily be added to other browsers, provided you can
 program and have the browser sources. 
 
 A manual page and simple documentation will be installed in /usr/share/doc/browser-history/browser-history.html, along with a simple CGI
 interface to grep the history log and display the result.  The optional CGI program requires `cgiwrap' or Apache configured with `suexec'.

$ 

ナックス「パッケージのインストールは以下のようなコマンドを使います」

# aptitude install パッケージ名

ナックス「情報の検索や詳細は一般ユーザーでもできますが、実際のインストールや削除、更新はrootユーザー権限が無ければ行えないことに注意してください」

ナックス「実際にインストールを行う例は以下の様になります」

$ aptitude install gpaint
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています          
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます      
パッケージの状態を初期化しています... 完了
タスクの記述を読み込んでいます... 完了        
E: ロックファイル /var/lib/dpkg/lock をオープンできません - open (13 許可がありません)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
$ su -
パスワード:
# aptitude install gpaint
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています          
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます      
パッケージの状態を初期化しています... 完了
タスクの記述を読み込んでいます... 完了        
以下の新規パッケージがインストールされます:
  gpaint 
更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
125kB のアーカイブを取得する必要があります。展開後に 741kB のディスク領域が新たに消費されます。
拡張状態情報を書き込んでいます... 完了
取得:1 http://ftp.jp.debian.org lenny/main gpaint 0.3.3-2 [125kB]
125kB を 0s 秒でダウンロードしました (126kB/s) 
未選択パッケージ gpaint を選択しています。
(データベースを読み込んでいます ... 現在 127021 個のファイルとディレクトリがインストールされています。)
(.../gpaint_0.3.3-2_i386.deb から) gpaint を展開しています...
menu のトリガを処理しています ...
man-db のトリガを処理しています ...
gpaint (0.3.3-2) を設定しています ...
menu のトリガを処理しています ...
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています          
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます       
パッケージの状態を初期化しています... 完了
拡張状態情報を書き込んでいます... 完了        
タスクの記述を読み込んでいます... 完了  

# exit
logout
$

ナックス「試しに、一般ユーザーからインストールをしようとしてみるとエラーが起こりました。rootユーザーになって再度挑戦すると今度はうまく行ったようです。追加されたパッケージがコマンドであれば、インストール後にそのコマンドが使えるようになり、今回試しにインストールしたペイントソフトのようなものであれば、実際にGUIのメニューからソフトウェアが選べるようになります。(ちなみに、私の場合は「アプリケーション」->「グラフィックス」に「GNU Paint」メニューが追加されていました)」

ナックス「インストールしたいパッケージによっては、インストール途中に『このパッケージを使うにはこれとこれもインストールしないといけないんだけどいい?(y/n)』みたいなことを聞いてくる場合があります。もし良ければ、yesの意味であるyを、やっぱりやめておく、と言う場合はnoの意味であるnを入力してEnterキーを押しましょう」

ナックス「コマンド操作になれていない場合は、聞かれると『え?そんなの分かるわけねぇよ!』と思うかもしれませんが、大抵の場合はyと答えちゃって問題ありませんし、心配であればnと答えて、調べ終わったのちに再度インストール操作を行えば良いと思います」

ナックス「念のために言っておきますが、別にnと答えたからといって、そのパッケージが二度と使えなくなるわけではありません。『とりあえず今回はやめとくわ』的な意味であって、後から普通にインストール出来ます」

ナックス「なお、前回お話しした通り、rootユーザーは大変権限が強く、あまり長い間意味もなくrootユーザーでいるべきではありません。rootユーザーで行うべき作業が終わったら、すぐにexitコマンドで一般ユーザーに戻るクセをつけておきましょう」

ナックス「削除は以下のようなコマンドで行います」

# aptitude remove パッケージ名

ナックス「これもroot権限が無ければ出来ません。実際には以下のようになります」

# aptitude remove gpaint
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています          
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます       
パッケージの状態を初期化しています... 完了
タスクの記述を読み込んでいます... 完了        
以下のパッケージが削除されます:
  gpaint 
更新: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
0B のアーカイブを取得する必要があります。展開後に 741kB のディスク領域が解放されます。
拡張状態情報を書き込んでいます... 完了
(データベースを読み込んでいます ... 現在 127050 個のファイルとディレクトリがインストールされています。)
gpaint を削除しています ...
man-db のトリガを処理しています ...
menu のトリガを処理しています ...
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています          
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます      
パッケージの状態を初期化しています... 完了
拡張状態情報を書き込んでいます... 完了        
タスクの記述を読み込んでいます... 完了  

#

ナックス「一般ユーザーから作業を行うとエラーが出ます。これも偶に『本当に消していいの?(y/n)』的なことを聞いてきやがりますので、良い場合はyを、ダメな場合はnを選びましょう」

ナックス「最後にパッケージ全体の更新です。これは以下の2つのコマンドをこの順番で行います」

# aptitude update
# aptitude safe-upgrade

ナックス「これにより、現在インストールしているすべてのパッケージの安全な更新が可能です」

ナックス「最初に言った通り、Linuxはパッケージの為の『注文リスト』を持っています。 aptitude update は最新の注文リストをネットから取得するためのコマンドです。ちょっと分かりやすく解説してみましょう」

Linuxが持っている『注文リスト』の例
ハッカーアタックバージョン1   - なんかすごい攻撃が出来る。
お絵描きソフトバージョン1.3   - お絵描きが出来る。

ナックス「一つ目のコマンドaptitude updateで、この『注文リスト』を更新します。この情報の大元はネット上にあるので、つまり、ネットから新しい情報をダウンロードすることになります」

# aptitude update
ハッカーアタックバージョン1.5   - なんかすごい攻撃が出来る。
お絵描きソフトバージョン1.3   - お絵描きが出来る。

ナックス「ハッカーアタックバージョン1が、1.5と新しいものになっています。ですが、まだ注文リストが更新されただけで、ハッカーアタックそのもののパッケージを更新したわけではありません」

ナックス「aptitude safe-upgradeにより、この注文リストを元に『もしそのパッケージを既にインストールしていて、かつ注文リストに書かれている情報に新しいバージョンが出ていると書かれていれば』そのパッケージを実際に新しいものに変えるということになります」

ナックス「実際には以下のようになります」

# aptitude update
発見 http://ftp.jp.debian.org lenny Release.gpg
取得:1 http://ftp.jp.debian.org lenny/main Translation-ja [911kB]                          
発見 http://ftp.jp.debian.org lenny Release                                        
無視 http://ftp.jp.debian.org lenny/main Packages/DiffIndex                                    
無視 http://ftp.jp.debian.org lenny/main Sources/DiffIndex                                  
発見 http://ftp.jp.debian.org lenny/main Packages                                     
発見 http://ftp.jp.debian.org lenny/main Sources                                      
発見 http://security.debian.org lenny/updates Release.gpg                                      
無視 http://security.debian.org lenny/updates/main Translation-ja                        
発見 http://security.debian.org lenny/updates Release               
無視 http://security.debian.org lenny/updates/main Packages/DiffIndex  
無視 http://security.debian.org lenny/updates/main Sources/DiffIndex
発見 http://security.debian.org lenny/updates/main Packages
発見 http://security.debian.org lenny/updates/main Sources
発見 http://volatile.debian.org lenny/volatile Release.gpg        
無視 http://volatile.debian.org lenny/volatile/main Translation-ja
発見 http://volatile.debian.org lenny/volatile Release
無視 http://volatile.debian.org lenny/volatile/main Packages/DiffIndex                               
無視 http://volatile.debian.org lenny/volatile/main Sources/DiffIndex                                
発見 http://volatile.debian.org lenny/volatile/main Packages                                   
発見 http://volatile.debian.org lenny/volatile/main Sources                                    
911kB を 7s 秒でダウンロードしました (122kB/s)                                           
パッケージリストを読み込んでいます... 完了

debian:~# aptitude safe-upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています          
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます      
パッケージの状態を初期化しています... 完了
タスクの記述を読み込んでいます... 完了        
インストール・削除・更新されるパッケージがありません。
更新: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
0B のアーカイブを取得する必要があります。展開後に 0B のディスク領域が新たに消費されます。
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています          
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます      
パッケージの状態を初期化しています... 完了
タスクの記述を読み込んでいます... 完了        

# 

ナックス「今回は特に新しい更新は無かった様です」

ナックス「また、特に更新するわけではなく、情報の更新のupdateだけ行うことも可能です。updateだけで、今まで無かったパッケージがsearch出来るようになるということもあります」

ナックス「また、safe-upgradeではなくfull-upgradeという物もあります。これも、実際に行う場合は以下の順番でコマンドを打ってください」

# aptitude update
# aptitude full-upgrade

ナックス「これも、ほぼ同じ『更新』と言う意味ですが、safe-upgradeはより安全性を重視した更新を行い、full-upgradeはより積極的な更新を行います」

デビー君「更新に『安全な』とか『積極的な』とかあるの?」

ナックス「Linuxはご覧の様に好きなパッケージをインストールして好きなようにカスタマイズ出来ます。そのパッケージの組み合わせによっては『これとこれのパッケージを削除しないと新しいのをインストールできない』みたいなことが偶にあります」

ナックス「多分『いいよいいよ。新しい物が使えるならそんなパッケージは消しちゃっていいよ(full-upgrade)』派と、『え、マジっすか……。念のためにその更新だけやめてもらっていいっすか(safe-upgrade)』派に分かれると思います。というわけで、どちらの方法でも好きな更新方法を選んで頂いて構いません」

ナックス「今回、一応概要だけ説明しましたが、かなり表面的な事だけなので、出来ればaptitudeコマンドの説明の方も参考にして頂ければ幸いです。またデビー君みたいな『あーあ。俺、aptitudeコマンドを使うディストリビューションじゃないからなー』って言う人も、パッケージのインストールは基本なので、他のサイトなどを参考に、出来れば自分のディストリビューションでCUIからパッケージをインストールする方法等を知っておいていただければ嬉しいです。次回、9.Linuxの取扱説明書・manコマンド