CentOS 7インストーラの「ソフトウェアの選択」の中身を調べてみた

# 前提条件

この資料では、CentOS 7のインストーラの言語選択で「日本語」を選択したものとしている。

# 「ソフトウェアの選択」の方式

CentOS 7のインストーラでは6までとは違い、インストールするパッケージを1つ1つ選択することはできない。
まず9種類の大枠（environment group）から1つを選び、さらにオプションで追加したいパッケージのgroupを選択する形になっている。しかしそのパッケージのgroupも何でも追加できるわけではなく、environment groupごとに決められたものだけを追加できる。

さて、一度CentOS 7のインストールを終わらせてしまえば、`yum groups list`を実行すれば「Available environment groups」にenvironment groupの一覧が書かれていることがわかる。以下の9つであり、インストーラの中で見えたものと完全に一致する。

```
最小限のインストール
インフラストラクチャサーバー
ファイルとプリントサーバー
ベーシック Web サーバー
仮想化ホスト
サーバー (GUI 使用)
GNOME Desktop
KDE Plasma Workspaces
開発およびクリエイティブワークステーション
```

ちなみに、`yum groups list`はCentOS 6で使われているバージョンのyumでは`yum grouplist`に当たるコマンドであるが、CentOS 6にはenvironment groupはまだ使われていない。
CentOS 6での「yum groupなんとか」はCentOS 7ではすべて「yum groups なんとか」となっているが、「yum groupなんとか」もまだ通してくれる。

# 「ソフトウェアの選択」の中身

## environment groupの中身

それぞれのenvironment groupの中身を知るには`yum groups info <environment group名とかIDとか>`を実行すれば良い。"インフラストラクチャサーバー"だと`yum groups info インフラストラクチャサーバー`を実行すると以下が出力される。
なお、この例の通りコマンド実行の際のenvironment groupの名前が日本語でも問題なく処理されるが、スペースが入っている場合は""で囲むこと。

```
Environment Group: インフラストラクチャサーバー
 Environment-Id: infrastructure-server-environment
 説明: ネットワークインフラストラクチャのサービスを動作させるサーバーです。
 Mandatory Groups:
   +base
   +core
 Optional Groups:
   +backup-server
   +directory-client
   +directory-server
   +dns-server
   +file-server
   +ftp-server
   +guest-agents
   +ha
   +hardware-monitoring
   +identity-management-server
   +infiniband
   +java-platform
   +large-systems
   +load-balancer
   +mail-server
   +mariadb
   +network-file-system-client
   +performance
   +postgresql
   +print-server
   +remote-system-management
   +resilient-storage
   +virtualization-hypervisor
```

Mandatory Groupsに書かれたgroup ID、つまり"インフラストラクチャサーバー"においては「base」と「core」が、このenvironment groupをインストーラのソフトウェアの選択で選んだ場合に必ずインストールされるgroupになる。

Optional Groupsに書かれたgroup IDは、このenvironment groupをインストーラのソフトウェアの選択でオプションとして選ぶことができる選択肢と一致する（もっとも、インストーラではgroup IDではなく日本語のgroup名が表示される）。
ただしこれ以外にも「compat-libraries（互換性ライブラリ）」「development（開発ツール）」「smart-card（スマートカードサポート）」の3つのgroupは必ずオプションとして表示されるようだ。

以下に9つのenvironment groupのyum groups infoの結果を貼っておく。
https://gist.github.com/yunano/38d3a79e28c58d4a4ce0

## groupの中身

これらgroupに含まれるパッケージの一覧は、また`yum groups info <group名とかIDとか>`で知ることができる。
以下は`yum groups info core`の出力である。

```
グループ: コア
 グループ ID: core
 説明: 最小限のインストール
 強制的なパッケージ:
    audit
    basesystem
    bash
    biosdevname
    btrfs-progs
    coreutils
    cronie
    curl
    dhclient
    e2fsprogs
    filesystem
    glibc
    hostname
    initscripts
    iproute
    iprutils
    iptables
    iputils
    irqbalance
    kbd
    kexec-tools
    less
    man-db
    ncurses
    openssh-clients
    openssh-server
    parted
    passwd
    plymouth
    policycoreutils
    procps-ng
    rootfiles
    rpm
    rsyslog
    selinux-policy-targeted
    setup
    shadow-utils
    sudo
    systemd
    tar
    tuned
    util-linux
    vim-minimal
    xfsprogs
    yum
 標準パッケージ:
    NetworkManager
    NetworkManager-tui
    aic94xx-firmware
    alsa-firmware
   +bfa-firmware
    dracut-config-rescue
    ivtv-firmware
    iwl100-firmware
    iwl1000-firmware
    iwl105-firmware
    iwl135-firmware
    iwl2000-firmware
    iwl2030-firmware
    iwl3160-firmware
    iwl3945-firmware
    iwl4965-firmware
    iwl5000-firmware
    iwl5150-firmware
    iwl6000-firmware
    iwl6000g2a-firmware
    iwl6000g2b-firmware
    iwl6050-firmware
    iwl7260-firmware
    kernel-tools
    libertas-sd8686-firmware
    libertas-sd8787-firmware
    libertas-usb8388-firmware
    linux-firmware
    microcode_ctl
    postfix
   +ql2100-firmware
   +ql2200-firmware
   +ql23xx-firmware
 オプション パッケージ:
   dracut-config-generic
   dracut-fips
   dracut-fips-aesni
   dracut-network
   openssh-keycat
   selinux-policy-mls
   tboot
```

「強制的なパッケージ」「標準パッケージ」「オプションパッケージ」の3つがあるが、インストーラによってインストールされるのは「強制的なパッケージ」「標準パッケージ」に書かれたパッケージであり、「オプションパッケージ」はインストールされない。

ちなみにコマンドラインでなら`yum --setopt=group_package_types=optional groups install core`でオプションパッケージをインストールすることができる。optionalの代わりにmandatoryで強制的なパッケージ、defaultで標準パッケージ。カンマ区切りで複数指定もできる。

一部のパッケージ名の前に付いている+は、要はこのgroupをインストールすれば今はまだインストールされていない+の付いたパッケージがインストールされる、という意味である（ただし、`yum groups mark convert`を実行しないと現状に合わない旨が、上記の出力結果から省略した部分に書かれている。この辺りは`man yum`を見ろとのこと）。よってどれに+が付くかは環境によって違う。

# 結局のところ

私はMandatory Groupsに「core」しか含まれない"最小限のインストール"より、「base」も含む"インフラストラクチャサーバー"を選ぶことにする、というおはなし。

以下は`yum groups info base`の出力である。これのすべてが欲しいわけではないが、個別にインストールするにはちょっと多い程度には欲しいものがある。"最小限のインストール"ではインストールされないと話題のifconfigやnetstatを含むパッケージであるnet-toolsもここにあるね。

まあ「base」に含まれていて「core」にないパッケージでも、"最小限のインストール"であっても依存関係でインストールされるものも一部ある。whichとか。

```
グループ: ベース
 グループ ID: base
 説明: CentOS Linux の基本インストール
 強制的なパッケージ:
    acl
    at
    attr
    authconfig
    bc
    bind-utils
    centos-indexhtml
    cpio
    crda
    crontabs
    cyrus-sasl-plain
    dbus
    ed
    file
    firewalld
    logrotate
    lsof
    man-db
    net-tools
    ntsysv
    pciutils
    psacct
    quota
    setserial
    traceroute
    usb_modeswitch
 標準パッケージ:
    abrt-addon-ccpp
    abrt-addon-python
    abrt-cli
    abrt-console-notification
    bash-completion
    blktrace
    bridge-utils
    bzip2
    chrony
    cryptsetup
    dmraid
    dosfstools
    ethtool
    fprintd-pam
    gnupg2
    hunspell
    hunspell-en
    kpatch
    ledmon
    libaio
    libreport-plugin-mailx
    libstoragemgmt
    lvm2
    man-pages
    man-pages-overrides
    mdadm
    mlocate
    mtr
    nano
    ntpdate
    pinfo
    plymouth
    pm-utils
    rdate
    rfkill
    rng-tools
    rsync
    scl-utils
    setuptool
    smartmontools
    sos
    sssd-client
    strace
    sysstat
    systemtap-runtime
    tcpdump
    tcsh
    teamd
    time
    unzip
    usbutils
    vim-enhanced
    virt-what
    wget
    which
    words
    xfsdump
    xz
    yum-langpacks
   +yum-plugin-security
    yum-utils
    zip
 オプション パッケージ:
   PyPAM
   acpid
   audispd-plugins
   brltty
   cryptsetup-reencrypt
   device-mapper-persistent-data
   dos2unix
   dumpet
   genisoimage
   gpm
   i2c-tools
   kabi-yum-plugins
   libatomic
   libcgroup
   libcgroup-tools
   libitm
   libstoragemgmt-netapp-plugin
   libstoragemgmt-nstor-plugin
   libstoragemgmt-smis-plugin
   libstoragemgmt-targetd-plugin
   libstoragemgmt-udev
   linuxptp
   logwatch
   mkbootdisk
   mtools
   ncurses-term
   ntp
   oddjob
   pax
   prelink
   python-volume_key
   redhat-lsb-core
   redhat-upgrade-dracut
   redhat-upgrade-tool
   rsyslog-gnutls
   rsyslog-gssapi
   rsyslog-relp
   sgpio
   sox
   squashfs-tools
   star
   tmpwatch
   udftools
   uuidd
   volume_key
   wodim
   x86info
   yum-plugin-aliases
   yum-plugin-changelog
   yum-plugin-tmprepo
   yum-plugin-verify
   yum-plugin-versionlock
   zsh
 条件付パッケージ:
   +rubygem-abrt
```