君は心理学者なのか?

大学時代に心理学を専攻しなぜかプログラマになった、サイコ(心理学)プログラマかろてんの雑記。

apt-get updateは何を行っているのか調べてみた〜パッケージインデックスファイルとは何か〜

f:id:karoten512:20180109003450p:plain

結論

$ 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について調べてみると、

以下の記事が見つかった。

kledgeb.blogspot.jp

つまり、

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

にあるパッケージインデックスファイルが更新される。