Windows 10のBash on Windowsで、apt-getを使ってパッケージをインストールするTech TIPS

Windows 10のLinux/Ubuntu互換環境に機能を追加したり、削除したりするには、aptコマンドを使ってパッケージを操作する。

» 2016年08月24日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 10バージョン1607以降(64bit版のみ)



解説

 TIPS「Windows 10のLinux/Ubuntu互換環境でbashを使う」では、Windows 10のバージョン1607(ビルド14393、Anniversary Update)に新たに導入された、Ubuntu互換の実行環境「Windows Subsystem for Linux(WSL)」と「bash(Bourne Again Shell)」のインストール方法について解説した。

 このbash環境を利用すると、Linux/Ubuntu向けの「パッケージ」(プログラムのソースコードもしくはバイナリファイルなどを1つにまとめたもの)をそのままインストールして利用できるようになる。ただしパッケージの管理方法(追加や削除などの方法)はLinuxのディストリビューションごとにいくらか異なっているので、少し面倒である。

 本TIPSでは、Windows 10のWSL向けのパッケージ管理方法についてまとめておく。

Windows Subsystem for Linuxに新しいパッケージをインストールする Windows Subsystem for Linuxに新しいパッケージをインストールする
Linuxの管理はCUIが基本。Windows 10のWindows Subsystem for Linuxに新しいパッケージを追加するには、apt-getコマンドを使って手動で追加するのが一般的。GUIのコマンドもあるが、今後のためにもCUIコマンドでの操作に慣れておこう。

操作方法

 Windows 10のWSLはUbuntuをベースとしたLinux互換環境である。そのUbuntuはDebianディストリビューションから派生したものなので、Debian系のパッケージ管理ツールを利用することになる。

 Ubuntuで利用できるパッケージ管理ツールには、「apt(advanced packaging tool)」や「dpkg(Debian's package management system)」「aptitude」など複数ある。このうち、Windows 10のWSL向けのブログや解説記事などではapt-get(aptの、より低レベルなコマンド)を使う例が多く出てくるので、本TIPSでは主にこれを紹介しておく。

 dpkgが一番基本となるパッケージ管理ツールである。これを使いやすくしたフロントエンドツールとしてaptが広く利用されている。aptitudeはこれをさらに強化し、CUIだけでなく、GUIの操作画面なども備えたツールとなっているが、その分やや重い。まずはapt-getやaptコマンドを覚えておこう。

 パッケージはインターネット上のサーバからダウンロードされるので、対象のPCはインターネットに接続している必要がある。

●[事前準備]sudoで名前解決エラーが出ないように、ホスト名を設定する

 パッケージを追加するにはsudoというコマンドを使って、apt-getコマンドをroot(管理者)権限で実行する必要がある。だが最初にsudoコマンドを実行しようとすると、次のようなエラーメッセージが表示されることがある。

user01@PC01:~$ sudo
sudo: ホスト PC01 の名前解決ができません  ……名前解決できないというエラー
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
……(以下省略)……
user01@PC01:~$



 これは、コンピュータ名からIPアドレスを求めることができないというエラーであり、このメッセージを表示するために非常に長く待たされることになる。

 これを避けるためには、コンピュータ名(この例ではPC01)を/etc/hostsというテキストファイルに追加登録すればよい。このファイルの先頭に「127.0.0.1 localhost」という行があるので、この行末にホスト名(と、場合によってはFQDN名)を追加して「127.0.0.1 localhost PC01」のようにする。hostsファイルそのものについては、TIPS「Windowsにおけるhostsとlmhostsの違い」が参考になる。

Column「/etc/hostsファイルを編集する」

 LinuxやUNIXを使ったことのないユーザーにとっては、どうやってファイルを編集するかは大きな問題かもしれない。通常はvimやvi(これはvimと同じ)エディタを使う。起動するコマンドは「sudo vim /etc/hosts」か「sudo vi /etc/hosts」だ(どちらも同じ)。ルートのパスワードを入力するとroot権限でvimが起動するので、(大文字の)「A」キーを押して行末に追加すればよい。入力が終わったら[Esc]キーで入力モードを終了し、最後に(大文字の)[Z][Z]キーでエディタを終了する。GUIのエディタと比較すると、コマンドモードと文字入力モードが分かれているのが少し面倒かもしれないが、慣れると非常に便利なので、LinuxをCUIで使うなら、ぜひvi/vimを習得しておいていただきたい。

 viが使えないならnanoというGUIのエディタも用意されているので、「sudo nano /etc/hosts」として編集してもよいだろう。

 


●パッケージのインストールソース情報の更新

 インストールするパッケージの索引情報はローカルにキャッシュされている。この情報が自動的に更新されることはなく、デフォルトではWSLをインストールした直後の状態のままである。なので次のapt-get installを実行する前に「apt-get update」で更新しておくとよい。

user01@PC01:~$ sudo apt-get update  ……パッケージソース情報の更新
無視 http://archive.ubuntu.com trusty InRelease
取得:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
ヒット http://archive.ubuntu.com trusty Release.gpg
……(中略)……
パッケージリストを読み込んでいます... 完了%
user01@PC01:~$



●新しいパッケージのインストール

 WSLに新しいパッケージを追加したい場合は、インストールしたいパッケージの名前を引数にして「apt-get install <パッケージ名>」コマンドを実行すればよい。

※Git(バージョン管理ツール)やRubyをインストールする例
user01@PC01:~$ sudo apt-get install git  ……Gitのインストール
[sudo] password for user01:  ……最初に1回、rootのパスワード入力が必要
パッケージリストを読み込んでいます... 完了0%
依存関係ツリーを作成しています
状態情報を読み取っています... 完了%
以下の特別パッケージがインストールされます:
  git-man liberror-perl
……(中略)……
この操作後に追加で 21.9 MB のディスク容量が消費されます。
続行しますか? [Y/n] ……インストールの確認
取得:1 http://archive.ubuntu.com/ubuntu/ trusty/main liberror-perl all 0.17-1.1 [21.1 kB]
……(中略)……
user01@PC01:~$ sudo apt-get install ruby  ……rubyのインストール
パッケージリストを読み込んでいます... 完了0%
……(中略)……
user01@PC01:~$



 複数のパッケージをインストールしたい場合は、それらを列挙してもよい。

※日本語マニュアルページ(一般コマンド向けと開発者向け)をまとめてインストールする例
user01@PC01:~$ sudo apt-get install manpages-ja manpages-ja-dev  ……パッケージを2つまとめてインストールする
パッケージリストを読み込んでいます... 完了0%
依存関係ツリーを作成しています
状態情報を読み取っています... 完了%
以下のパッケージが新たにインストールされます:
  manpages-ja manpages-ja-dev
……(中略)……
user01@PC01:~$



●ローカルにインストールされているパッケージ情報の確認

 既にローカルにインストールされているパッケージ名の一覧をリストにするには、apt-getではなく「dpkg -l <検索パターン>」を使う。また、その中の特定のパッケージのインストール情報を調べるには「dpkg -L <パッケージ名>」を実行する。

user01@PC01:~$ dpkg -l *tools*  ……toolsが含まれるパッケージの列挙
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前                    バージョン       アーキテクチャ   説明
+++-========== ============= - ======== ========-========= =======-==== === ====== ===== =====
un  atm-tools               <なし>           <なし>           (説明 (description) がありません)
un  console-tools           <なし>           <なし>           (説明 (description) がありません)
ii  dosfstools              3.0.26-1ubuntu0. amd64            utilities for making and checking MS-DOS FAT filesys
ii  initramfs-tools         0.103ubuntu4.4   all              tools for generating an initramfs
……(中略)……
un  xen-tools               <なし>           <なし>           (説明 (description) がありません)

user01@PC01:~$ dpkg -L python  ……pythonパッケージの詳細情報
/.  ……これらのファイルがインストールされる
/usr
/usr/bin
/usr/bin/dh_python2
/usr/lib
/usr/lib/valgrind
……(中略)……
/usr/share/doc/python2.7/python-policy.sgml.gz
user01@PC01:~$



●パッケージの検索

 ローカルにパッケージを追加するには、あらかじめインストール可能なパッケージの名前を知っておく必要がある。どのようなパッケージが利用できるかは「apt-cache search <検索語>」で探すことができる。このコマンドを実行すると、ローカルにキャッシュされているパッケージの一覧から該当するパッケージが列挙される。全部検索するには「apt-cache search .」とする。

user01@PC01:~$ apt-cache search compiler  ……「compiler」を含むパッケージの検索
antlr - language tool for constructing recognizers, compilers etc
antlr-doc - language tool for constructing recognizers, compilers etc
automoc - automatic moc for Qt 4 packages
binutils-multiarch - Binary utilities that support multi-arch targets
cmake - cross-platform, open-source make system
cmake-dbg - debugging symbols for CMake
cmake-doc - extended documentation in various formats for CMake
……(中略)……
python-clang-3.8 - Clang Python Bindings
user01@PC01:~$

user01@PC01:~$ apt-cache search . | wc  ……パッケージの総数は?
  47292  380738 3133294  ……4万7292パッケージあった
user01@PC01:~$



●パッケージ名の詳細情報の取得

 各パッケージのより詳細な情報を知りたければ、「apt-cache show <パッケージ名>」を実行する(ローカルにキャッシュされているパッケージの情報が表示される)。

user01@PC01:~$ apt-cache show mono-mcs  ……パッケージ情報の詳細
Package: mono-mcs
Priority: optional
Section: devel
Installed-Size: 1807
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Mono Group <pkg-mono-group@lists.alioth.debian.org>
Architecture: all
Source: mono
Version: 3.2.8+dfsg-4ubuntu1.1
……(中略)……
Origin: Ubuntu
Supported: 9m

user01@PC01:~$



●パッケージの内容の更新(最新版へ更新する)

 ローカルにインストールされている各パッケージの内容(ファイルなど)を、インターネット上からダウンロードしてきた最新版に自動的に更新するには、「apt-get upgrade」コマンドを実行する。

user01@PC01:~$ sudo apt-get upgrade  ……パッケージ内容の更新
パッケージリストを読み込んでいます... 完了0%
依存関係ツリーを作成しています
状態情報を読み取っています... 完了%
アップグレードパッケージを検出しています ... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libfreetype6 os-prober
……(中略)……
libc-bin (2.19-0ubuntu6.9) のトリガを処理しています ...
initramfs-tools (0.103ubuntu4.4) のトリガを処理しています ...
user01@PC01:~$



●パッケージを削除する

 パッケージをローカルから削除するには、「apt-get remove <パッケージ名>」か「apt-get purge <パッケージ名>」(「apt-get remove --purge <パッケージ名>」と同じ)を利用する。前者はパッケージのみを削除、後者はパッケージと、関連する設定ファイルも削除、という違いがある。

user01@PC01:~$ sudo apt-get remove ruby  ……パッケージの削除
パッケージリストを読み込んでいます... 完了0%
依存関係ツリーを作成しています
状態情報を読み取っています... 完了%
以下のパッケージは「削除」されます:
  libruby1.9.1 ruby ruby1.9.1
……(中略)……
libc-bin (2.19-0ubuntu6.9) のトリガを処理しています ...
man-db (2.6.7.1-1ubuntu1) のトリガを処理しています ...
user01@PC01:~$

user01@PC01:~$ sudo apt-get purge ppp  ……設定ファイルごとパッケージを削除する
パッケージリストを読み込んでいます... 完了0%
依存関係ツリーを作成しています
状態情報を読み取っています... 完了%
以下のパッケージは「削除」されます:
  ppp* pppconfig* pppoeconf*
……(中略)……
Stopping all PPP connections...done.
ppp (2.4.5-5.1ubuntu2.2) の設定ファイルを削除しています ...
man-db (2.6.7.1-1ubuntu1) のトリガを処理しています ...
user01@PC01:~$



●不要なパッケージを自動削除する

 パッケージの追加や削除を繰り返した結果、どのパッケージからも参照されていない、孤立したパッケージが残ってしまうこともある。それらを自動的に見つけて削除(掃除)するには「apt-get autoremove」を利用する。

user01@PC01:~$ sudo apt-get autoremove  ……不要なパッケージの自動削除
パッケージリストを読み込んでいます... 完了0%
依存関係ツリーを作成しています
状態情報を読み取っています... 完了%
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
user01@PC01:~$



●aptコマンドでパッケージを操作する

 apt-getやapt-cacheなどを統合して使いやすくしたものとして、「apt」というコマンドも利用できる。「apt install <パッケージ名>」や「apt remove <パッケージ名>」「apt list」など、すべて1つのaptコマンドで実行できるようになっている。


 以上、apt-getやapt-cache、dpkgコマンドの使い方を簡単に説明した。より詳しい情報は「man apt-get」や「man apt」などのヘルプを参照していただきたい。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。