restricted や multiverse のパッケージをどれだけインストールしているか調べる

Ubuntu の公式リポジトリに収録されているパッケージは、ライセンスやサポート形態によって main, restricted, universe, multiverse の4つに分けて収録されています。その中でも multiverse や restricted は「フリー」でないソフトウェアが収録されているのですが、これらのパッケージをどれだけインストールしているか調べてみました。

## 方針

* インストールされているパッケージ一覧を installed.txt に保存
* restricted に収録されているパッケージ一覧を restricted.txt に保存
* multiverse も同様
* moreutils の combine コマンドを使って積集合を計算する

## インストールされているパッケージ一覧を取得

いろいろやり方はありますが `apt list --installed` の結果を加工するのが一番簡単なように思います。とはいえ、これはこれで先頭に `Listing...` というメッセージが標準出力に出るので万全ではありません。



```console
$ apt list --installed | head

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Listing...
a2ps/bionic,now 1:4.14-3 amd64 [installed]
accountsservice/bionic,now 0.6.45-1ubuntu1 amd64 [installed]
adduser/bionic,bionic,now 3.116ubuntu1 all [installed]
amd64-microcode/bionic-updates,now 3.20180524.1~ubuntu0.18.04.2 amd64 [installed,automatic]
apache2/bionic-updates,bionic-security,now 2.4.29-1ubuntu4.11 amd64 [installed]
apache2-bin/bionic-updates,bionic-security,now 2.4.29-1ubuntu4.11 amd64 [installed,automatic]
apache2-data/bionic-updates,bionic-updates,bionic-security,bionic-security,now 2.4.29-1ubuntu4.11 all [installed,automatic]
apache2-utils/bionic-updates,bionic-security,now 2.4.29-1ubuntu4.11 amd64 [installed,automatic]
apparmor/bionic-updates,bionic-security,now 2.12-4ubuntu5.1 amd64 [installed]
$ apt list --installed | grep -Fxv 'Listing...' | grep -Po '^[^/]+' > installed.txt

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

$ head installed.txt
a2ps
accountsservice
adduser
amd64-microcode
apache2
apache2-bin
apache2-data
apache2-utils
apparmor
apt
$
```

* [apt \- How to list all installed packages \- Ask Ubuntu](https://askubuntu.com/questions/17823/how-to-list-all-installed-packages)

## restricted, multiverse に収録されているパッケージ一覧を取得

`/var/lib/apt/lists` 以下にあるインデックスファイルを利用しました。別のリポジトリを利用している場合には別のファイルを使うことになることでしょう。

```console
$ cat /var/lib/apt/lists/jp.archive.ubuntu.com_ubuntu_dists_bionic_restricted_binary-amd64_Packages | head
Package: bcmwl-kernel-source
Architecture: amd64
Version: 6.30.223.271+bdcom-0ubuntu4
Priority: optional
Section: restricted/admin
Source: bcmwl
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Alberto Milone <alberto.milone@canonical.com>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
$ grep ^Package: /var/lib/apt/lists/jp.archive.ubuntu.com_ubuntu_dists_bionic_restricted_binary-amd64_Packages | grep -Po '\S+$' > restricted.txt
$ cat restricted.txt | head
bcmwl-kernel-source
libcuda1-340
libnvidia-cfg1-390
libnvidia-common-390
libnvidia-compute-390
libnvidia-decode-390
libnvidia-encode-390
libnvidia-fbc1-390
libnvidia-gl-390
libnvidia-ifr1-390
$
```

## combine コマンドを使って積集合を計算

```console
$ combine installed.txt and restricted.txt
$ combine installed.txt and multiverse.txt
$
```

幸か不幸か、使っているパッケージはなかったです。universe のものでテストすると以下のようになりました。

```console
$ combine installed.txt and universe.txt | head
a2ps
certbot
libapache2-mod-fcgid
libapache2-mod-rpaf
libgsasl7
libkyotocabinet16v5
libmailutils5
libntlm0
lpr
mailutils
shora@jag:~$
```

## References

* [APT の設定 \(/etc/apt/sources\.list\) をちゃんと理解する \- くじらにっき\+\+](https://kujira16.hateblo.jp/entry/2019/10/14/190008)
* [moreutils について \- Qiita](https://qiita.com/cuzic/items/1837cfe6572cbd3f09c2)
* [シェル芸力向上のため moreutils を一通り試してみた \- Qiita](https://qiita.com/ngyuki/items/ad7d52186a84cc973438)