apt-get updateは何を行っているのか調べてみた〜パッケージインデックスファイルとは何か〜
結論
$ apt-get update
は、パッケージリストの更新を行う。
具体的に言うと、
/etc/apt/sources.list
にかかれているURLから、
パッケージインデックスファイルを引っ張ってきて、
$ cd /var/lib/apt/lists
に格納している。
いきさつ
1. Dockerで構築したubuntuにてfileコマンドが使えない
$ file bash: file: command not found
2. fileコマンドをinstallしてみる
$ apt-get install file Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package file
まじか。。 installできない。
3. fileコマンドがないことをdpkgコマンドで確かめる
$ dpkg -K file dpkg-query: package 'file' is not installed
やっぱりないね。
なんでや
apt-getについて調べてみると、
以下の記事が見つかった。
つまり、
apt-get install package_name
を実行した際には、
$ cd /var/lib/apt/lists
にある
パッケージインデックスファイルを参照して、
その中に含まれるパッケージがinstallされる。
対処
1. パッケージインデックスファイルがあるかどうか確認
$ cd /var/lib/apt/lists $ ls
パッケージインデックスファイルが、空。
参照されるインデックスファイルがないので、
このままではinstallできない。
2. パッケージインデックスファイルのダウンロード
つまり、パッケージリストの更新を行う。
$ apt-get update
/etc/apt/sources.list
に指定されているリストにもとづいて、
パッケージインデックスファイルがダウンロードされる。
3. パッケージインデックスファイルを確認
$ ls archive.ubuntu.com_ubuntu_dists_xenial-backports_InRelease archive.ubuntu.com_ubuntu_dists_xenial-backports_main_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial-backports_universe_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial-updates_InRelease archive.ubuntu.com_ubuntu_dists_xenial-updates_main_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial-updates_multiverse_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial-updates_restricted_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial-updates_universe_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial-updates_universe_source_Sources.lz4 archive.ubuntu.com_ubuntu_dists_xenial_InRelease archive.ubuntu.com_ubuntu_dists_xenial_main_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial_multiverse_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial_restricted_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial_universe_binary-amd64_Packages.lz4 archive.ubuntu.com_ubuntu_dists_xenial_universe_source_Sources.lz4 lock partial security.ubuntu.com_ubuntu_dists_xenial-security_InRelease security.ubuntu.com_ubuntu_dists_xenial-security_main_binary-amd64_Packages.lz4 security.ubuntu.com_ubuntu_dists_xenial-security_multiverse_binary-amd64_Packages.lz4 security.ubuntu.com_ubuntu_dists_xenial-security_restricted_binary-amd64_Packages.lz4 security.ubuntu.com_ubuntu_dists_xenial-security_universe_binary-amd64_Packages.lz4 security.ubuntu.com_ubuntu_dists_xenial-security_universe_source_Sources.lz4
たしかにパッケージインデックスファイルがダウンロードされた。
4. fileコマンドをinstall
$ apt-get install file
今度はinstallできた。
5. fileコマンドを実行
$ file Usage: file [-bcEhikLlNnprsvzZ0] [--apple] [--extension] [--mime-encoding] [--mime-type] [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ... file -C [-m magicfiles] file [--help]
fileコマンドが入った。
まとめ
installしたばかりのubuntuには、
パッケージをinstallする際に参照するインデックスファイルが存在しない。
なので、パッケージをinstallすることができない。
よって、
はじめにインデックスファイルをダウンロード(更新)する必要がある。
そのために用いられるのが
$ apt-get update
であり、
その結果
$ cd /var/lib/apt/lists
にあるパッケージインデックスファイルが更新される。