自分用・検証用 CentOS8 作成手順メモ(2020/01/31 版)
以前に以下のメモを書きました。
CentOS 8.1911 がリリースされた為、改めて「検証用 Linux の作り方」メモをアップデートしておきます。 以下を前提にしています。
- vSphere 上に作成する仮想マシンである
- ベースは CentOS8 64bit とする
- CentOS8 は最小構成でインストールする
- 作成した仮想マシンはテンプレート化する
尚、「完全に初期状態からインストールする」よりも、ある程度の設定は Kickstart 化してインストールするのも楽かも知れません。
SSH 接続時の警告時を表示しない
別のホストへ SSH 接続する際、警告が表示されないように設定しておきます。 また「Unable to negotiate with 192.168.1.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
」等のエラーを回避する為に、必要な鍵交換アルゴリズムを追加しておきます。
| cat << EOF > /etc/ssh/ssh_config.d/99_lab.conf
KexAlgorithms +diffie-hellman-group1-sha1
Ciphers aes128-cbc
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
EOF
|
SSH 公開鍵をコピーする
ログイン処理をセキュア、且つ簡略化する為に公開鍵をコピーしておきます。 RSA 形式よりは ED25519 形式が推奨です (速くて強固である為)。
| cat << 'EOS' >> ~/.ssh/authorized_keys
(公開鍵)
EOS
chmod 600 ~/.ssh/authorized_keys
|
/root に存在する不要ファイルを削除する
インストール直後は /root
配下に *.cfg
が存在します。 不要であれば削除しておきます (Kickstart 用の設定ファイルとして参考にしたい場合はコピーするなり、退避しておきます)。
| rm /root/anaconda-ks.cfg
rm /root/ks-post-anaconda.log
rm /root/original-ks.cfg
|
NTP サーバを指定する
NTP サーバを指定しておきます。 /etc/chrony.conf
に時刻同期したいサーバを指定します。 検証環境に併せたサーバを指定すれば良いと思いますが、特に指定が無く、インターネットにアクセス可能な場合は Google Time Server 等で良いと思います (設定変更を反映したい場合は chronyd を再起動しておきます)。
| server 216.239.35.12 iburst
server 216.239.35.8 iburst
server 216.239.35.4 iburst
server 216.239.35.0 iburst
|
NTP サーバとの同期状態は chronyc sources
で確認します。
| # chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* time4.google.com 1 8 377 216 +795us[ +368us] +/- 18ms
^+ time3.google.com 1 8 377 26 +8126us[+8126us] +/- 25ms
^+ time2.google.com 1 8 377 89 +3367us[+3367us] +/- 24ms
^+ time1.google.com 1 8 377 410 +2815us[+2366us] +/- 21ms
|
firewalld を停止する
firewalld は停止しておきます。
| systemctl stop firewalld
systemctl disable firewalld
|
SELinux を停止する
SELinux は停止しておきます。
| sed -i -e "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
|
プロンプトの色を変更する
一般ユーザのプロンプトは緑色に、root ユーザのプロンプトは赤色に変更します。
| echo "export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /etc/profile.d/prompt.sh
echo "export PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\\$ '" >> /root/.bashrc
|
対話的な alias を無効化する
検証環境ではコマンドを実行する度に対話的な確認は不必要なので、alias を無効化しておきます。
| sed -i -e "s/alias rm='rm -i'/#alias rm='rm -i'/g" /root/.bashrc
sed -i -e "s/alias cp='cp -i'/#alias cp='cp -i'/g" /root/.bashrc
sed -i -e "s/alias mv='mv -i'/#alias mv='mv -i'/g" /root/.bashrc
|
GRUB のタイムアウト時間を短くする
デフォルトでは GRUB のタイムアウト時間が 5 秒になっています。 検証環境の仮想マシンは少しでも早く起動して欲しいので、タイムアウト時間を 1 秒に縮めます。
| sed -i -e "s/^GRUB_TIMEOUT=5/GRUB_TIMEOUT=1/g" /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
|
基本的なパッケージを追加する
普段、よく使うであろうパッケージを追加しておきます。
1
2
3
4
5
6
7
8
9
10
11
12 | dnf -y install \
bash-completion \
bind-utils \
git \
lsof \
tcpdump \
tree \
unzip \
vim-enhanced \
wget \
yum-utils \
zip
|
vi → vim の alias を追加する
root ユーザでも vi とタイプしたら vim が起動するようにエイリアスを設定しておきます。
| echo "alias vi='vim'" >> /root/.bashrc
|
.vimrc も好みで設定しておきます。
| cat << EOF > /root/.vimrc
set paste
EOF
|
EPEL からパッケージを追加する
必要であれば、EPEL からパッケージを追加しておきます。 以下は fping や nmap を追加する例です。
| dnf -y install epel-release
dnf -y install \
fping \
nmap
|
パッケージを最新にする
インストールされているパッケージを最新にします。 カーネルがアップデートされている場合を想定し、併せて再起動しておきます。
| dnf -y update
dnf clean all
sync
sync
sync
reboot
|
古い世代のカーネル等、不要になったパッケージは削除します。
| dnf -y remove $(dnf repoquery --installonly --latest-limit=-1 -q)
|
pyenv をインストールする
CentOS8 の最小インストールでは Python がインストールされていません。 pyenv をインストールし、任意の Python バージョンを利用できるようにします。 まず、必要なパッケージをインストールし、続いて pyenv をインストールします。
| dnf -y install \
bzip2-devel \
gcc \
gcc-c++ \
git \
libffi-devel \
make \
openssl-devel \
readline-devel \
sqlite-devel \
zlib-devel
|
pyenv を clone します。
| git clone https://github.com/pyenv/pyenv.git /usr/local/pyenv
|
全ユーザから参照されるように必要な環境変数を設定します。
| cat << EOF > /etc/profile.d/pyenv.sh
export PYENV_ROOT="/usr/local/pyenv"
export PATH="\${PYENV_ROOT}/bin:\${PATH}"
eval "\$(pyenv init -)"
EOF
|
ログアウト・ログインし直すか、または下記を実行して環境変数を反映します。
pyenv install --list
でインストール可能な Python バージョンを確認します。 現時点では 3.8.1 が最新でした。
今回は 3.8.1 をインストールします。
インストールした Python バージョンが利用されるように設定しておきます。
| pyenv global 3.8.1
pyenv rehash
|
pip をインストールする
pyenv をインストール後、必要であれば pip をアップデートしておきます。
| pip install --upgrade pip setuptools
|
現時点では pip 20.0.2 がインストールされました。
キャッシュ / コマンド実行履歴を削除しておく
テンプレート化する際には不要なので dnf のキャッシュとシェルのコマンド実行履歴を削除しておきます。 ここまで完了したら仮想マシンの電源をオフにします。
| dnf clean all
history -c
poweroff
|
VM から DVD メディアを取り出しておく
テンプレート化する前に仮想マシンの光学ドライブから CentOS8 のインストールに利用した DVD メディアを取り出しておきます。
テンプレート化する
ここまで用意が出来たら仮想マシンをテンプレート化します。 以降、検証用の仮想マシンを作成したい場合はこのテンプレートから複製します。
補足
以下は補足です。
sshd は設定変更しない
DNS が利用できない環境でテストする場合は ssnd を UseDNS = no
にしておく方がタイムアウトを待たずに済み、効率が良いかも知れません。 しかし、CentOS8 の初期状態では UseDNS = no
になっていました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 | # sshd -T -f /dev/null | sort
addressfamily any
allowagentforwarding yes
allowstreamlocalforwarding yes
allowtcpforwarding yes
authenticationmethods any
authorizedkeyscommand none
authorizedkeyscommanduser none
authorizedkeysfile .ssh/authorized_keys .ssh/authorized_keys2
authorizedprincipalscommand none
authorizedprincipalscommanduser none
authorizedprincipalsfile none
banner none
challengeresponseauthentication yes
chrootdirectory none
ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
clientalivecountmax 3
clientaliveinterval 0
compression yes
disableforwarding no
exposeauthinfo no
fingerprinthash SHA256
forcecommand none
gatewayports no
gssapiauthentication no
gssapicleanupcredentials yes
gssapienablek5users no
gssapikexalgorithms gss-gex-sha1-,gss-group14-sha1-
gssapikeyexchange no
gssapistorecredentialsonrekey no
gssapistrictacceptorcheck yes
hostbasedacceptedkeytypes ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
hostbasedauthentication no
hostbasedusesnamefrompacketonly no
hostkey /etc/ssh/ssh_host_ecdsa_key
hostkey /etc/ssh/ssh_host_ed25519_key
hostkey /etc/ssh/ssh_host_rsa_key
hostkeyagent none
hostkeyalgorithms ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
ignorerhosts yes
ignoreuserknownhosts no
ipqos af21 cs1
kbdinteractiveauthentication yes
kerberosauthentication no
kerberosorlocalpasswd yes
kerberosticketcleanup yes
kerberosuniqueccache no
kerberosusekuserok yes
kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
listenaddress 0.0.0.0:22
listenaddress [::]:22
logingracetime 120
loglevel INFO
macs umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
maxauthtries 6
maxsessions 10
maxstartups 10:30:100
passwordauthentication yes
permitemptypasswords no
permitlisten any
permitopen any
permitrootlogin without-password
permittty yes
permittunnel no
permituserenvironment no
permituserrc yes
pidfile /var/run/sshd.pid
port 22
printlastlog yes
printmotd yes
pubkeyacceptedkeytypes ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
pubkeyauthentication yes
rdomain none
rekeylimit 0 0
revokedkeys none
showpatchlevel no
streamlocalbindmask 0177
streamlocalbindunlink no
strictmodes yes
syslogfacility AUTH
tcpkeepalive yes
trustedusercakeys none
usedns no
usepam no
versionaddendum none
x11displayoffset 10
x11forwarding no
x11maxdisplays 1000
x11uselocalhost yes
xauthlocation /usr/bin/xauth
|