CentOS7が7月7日にリリースされた。
これまでLinux系のテスト他は、CentOS6.5のVMwareイメージでやっていたのだけれど、ようやく CentOS7 のイメージも作成したので、その時のメモ。
関連して、RHEL7系のNIC port名の決定ルールも記載しておく。
大まかな流れ
- 最小構成の仮想マシンを作成
- 準仮想化ドライバ向けマシン設定(SCSIとNIC)
- CentOS7のインストール
- 不要パッケージの削りこみ
- アップデート
- NIC port名を旧仕様(ethN)に戻す
- VMware Tools のインストール
- 公開鍵の登録
- 仮想マシンの調整とテンプレート化
NIC port名について
CentOS7では、Systemdとudevの仕組みによって、ハードウェア情報からNIC port名(
eth0
など)を固定的に決めている。
一方、VMをクローンすると、普通は仮想NICのMACアドレスが変化する。そうしないと、クローンしたVM間で通信できないから。
すると、CentOS7のデフォルト動作では、仮想NICとNIC設定ファイル(
/etc/sysconfig/network-scripts/ifcfg-eno16780032
など)の対応関係が取れなくなり、NICにIPアドレスが設定されない、といったことになる。
対策は色々と考えられるけど、今回は単純にNIC port名を旧仕様に戻すことにした。
そうすれば、最初に見つけたNIC port に対して昔ながらの
eth0
というNIC Port名が使われ、”DEVICE=eth0” の指定を持つ設定ファイルを単純に参照するようになる。
仮想NICは、勝手に壊れることはないので、今回の利用目的には十分。
ダウンロードISO
以下のサイトにあるミラーから、ISOファイルを取得。
- http://isoredirect.centos.org/centos/7/isos/x86_64/
“CentOS-7.0-1406-x86_64-Minimal.iso”(566MB)
その他、こんなISOイメージもあるけれど
ISO | 内容物 |
---|---|
CentOS-7.0-1406-x86_64-DVD.iso | インストーラがインストールできる全パッケージを含む |
CentOS-7.0-1406-x86_64-Everything.iso | インストーラが直接インストールできないパッケージも含む |
足りないパッケージは必要に応じて yum すれば良いので、今回は Minimal を使う。
CentOS7 リリースメモ(参考)
以下の場所にあり。
1. 最小構成の仮想マシンを作成
以下の構成で作成。さくらのマイクロサーバやAmazon EC2のt2.microと同じ程度。
要素 | 値 | 補足 |
---|---|---|
CPU | プロセッサ数1、コア数1 | 後で増やせる |
メモリ | 1GB | 普通に使えるレベルの最少値 |
HDD | 20GB SCSI | 5GBでもインストールは可能 |
手順の詳細:
- 新規仮想マシン作成ウィザード
“カスタム(C) (上級)” を選択 - 仮想マシンのハードウェア互換性の選択
“Workstation 10.0” を選択(デフォルト) - ゲストOSのインストール
インストーラディスクイメージファイル(M)(iso):
ダウンロードしたファイル “CentOS-7.0-1406-x86_64-Minimal.iso” を選択 - ゲストOSの選択
Linux|”Red Hat Enterprise Linux 6 64 ビット” を選択(CentOS7推奨値) - 仮想マシンの名前
“CentOS7 x86_64 Micro Basic Server” と入力
VMイメージの格納場所も指定 - プロセッサ構成
プロセッサ数(P): “1”、プロセッサごとのコアの数(C): “1” を選択 - 仮想マシンのメモリ
“1024MB” を指定 - ネットワークの種類
“NATを使用(E)” を選択 - I/Oコントローラタイプの選択
“LSI Logic(L) (推奨)” を選択 - ディスクタイプの選択
“SCSI(S) (推奨)” を選択 - ディスクの選択
“仮想ディスクの新規作成(V)” を選択 - ディスク容量の指定
- ディスク最大サイズ(GB)(S): “20.0GB” を指定(VMwareによる推奨値)
- 今すぐ全ディスク容量を割り当てる(A) をチェック
- 仮想ディスクを単一ファイルとして格納(O) を選択
- ディスクファイルの指定
デフォルトでOK - 仮想マシンを作成する準備完了
「ハードウェアをカスタマイズ(C)…」ボタンをクリック - ハードウェア
- プロセッサ|”Intel VT-x/EPTまたはAMD-V/RVIを仮想化(V)” をチェック
- プロセッサ|”CPUパフォーマンスカウンタを仮想化(U)” をチェック
- USBコントローラ|削除
- サウンドカード|削除
- プリンタ|削除
- ディスプレイ|”3Dグラフィックのアクセラレーション(3)” をチェック
以上で仮想マシンを作成完了。
一旦、VMware Workstation を閉じる。
2. 準仮想化ドライバ向けマシン設定
SCSIとNICに準仮想化ドライバ(Paravirtual Driver)を利用するため、仮想マシンのコントローラの種類を変える。
VMware Workstationでは、GUIによる変更はできないため、直接エディタで変更する。
編集するファイルは、作成したVMイメージの格納ディレクトリ内にある vmx ファイル。
前述の手順の通りなら、ファイル名はこれ。
- “CentOS7 x86_64 Micro Basic Server.vmx”
変更は2点(イメージのオレンジ色部分)
- scsi0.virtualDev = "lsilogic"
+ scsi0.virtualDev = "pvscsi"
- ethernet0.virtualDev = "e1000"
+ ethernet0.virtualDev = "vmxnet3"
3. CentOS7のインストール
仮想マシンをPower Onして、CentOS7のインストールを開始。
- Language: “English” を選択
- DATE&TIME: “Asia/Tokyo timezone” を選択
- KEYBOARD: “Japanese(OADG 109A)” を選択
- INSTALLATION DESTINATION
- Local Standard Disks: “VMware, VMware Virtual S” をチェック
- Other Storage Options: “I will configure partitioning” を選択
Doneを選ぶと、パーティション作成画面に入る。以下のように切る。
- New mount points will use the following partitioning scheme
“Standard Partition” を選択 - 「+」ボタンでパーティションを入力
Mount Point | Desired Capacity |
---|---|
swap | 1GB |
/boot | 1GB |
/ | 空欄(=残り全部) |
その後「Done」ボタン→「Accept Changes」ボタン→「Begin Installation」ボタンへ。
インストールは1~2分で完了(速い!)。その間に”Root Password”を入力しておく。
Rebootボタンを押すと、約10秒ほどで再起動した。CentOS6と較べて、速いね!
起動確認
rootでログインし、SCSIとNICに、ちゃんと準仮想化ドライバが利用されているか確認。
[root@localhost ~]# dmesg | egrep 'vmx|pv|SCSI'
[ 0.312693] SCSI subsystem initialized
[ 0.612189] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[ 0.876010] VMware PVSCSI driver - version 1.0.2.0-k
[ 0.876321] vmw_pvscsi: using 64bit dma
[ 0.905027] vmw_pvscsi 0000:03:00.0: vmw_pvscsi: host->max_id: 16
[ 0.905462] vmw_pvscsi 0000:03:00.0: irq 73 for MSI/MSI-X
[ 0.905541] vmw_pvscsi: using MSI-X
[ 0.905621] scsi0 : VMware PVSCSI storage adapter rev 2, req/cmp/msg rings: 8/8/1 pages, cmd_per_lun=64
[ 0.905826] vmw_pvscsi 0000:03:00.0: VMware PVSCSI rev 2 host #0
[ 1.046887] sd 0:0:0:0: [sda] Attached SCSI disk
[ 5.055713] VMware vmxnet3 virtual NIC driver - version 1.1.30.0-k-NAPI
[ 5.055822] vmxnet3 0000:0b:00.0: # of Tx queues : 1, # of Rx queues : 1
[ 5.073693] vmxnet3 0000:0b:00.0: irq 76 for MSI/MSI-X
[ 5.073776] vmxnet3 0000:0b:00.0: irq 77 for MSI/MSI-X
[ 5.074981] vmxnet3 0000:0b:00.0 eth0: NIC Link is Up 10000 Mbps
[ 10.387881] vmxnet3 0000:0b:00.0 eno16777728: intr type 3, mode 0, 2 vectors allocated
[ 10.388222] vmxnet3 0000:0b:00.0 eno16777728: NIC Link is Up 10000 Mbps
vmxファイルを編集したとおり、pvscsiとvmxnet3になっている。
この時点で、Root領域(”/“ パーティション)の使用量は 800MB 程度だった。Mininalはさすがに小さい。
4. 不要パッケージの削りこみ
この仮想マシンでは使わないパッケージを削除。
削ったパッケージは、もし必要になったら、その段階で yum で組み込むことにする。
4.1. kdump
kexec-tools(kdump)は、メモリを1GBに設定したのと(=1GB以下だとデフォルトでは無効化されている)、たぶんカーネルダンプを見ることは、しばらく無いので削除。
[root@localhost ~]# rpm -e iprutils alsa-tools-firmware alsa-lib alsa-firmware btrfs-progs fxload-2002_04_11 postfix kexec-tools biosdevname
4.2. NetworkManager
CentOS7で導入された NetworkManager も、当面利用しないので削除してしまう。
関連パッケージは意外に多い。
関連パッケージは意外に多い。
[root@localhost ~]# rpm -e NetworkManager NetworkManager-tui NetworkManager-glib avahi avahi-libs avahi-autoipd dnsmasq gsettings-desktop-schemas glib-networking libsoup ModemManager-glib ppp
5. アップデート
先週水曜の 9/24 に、20年モノの、とっても怖いBashバグ Shellshock が公表された。今後もいつ何が公表されるかわからないし、OSインストールした後は、必ずアップデートもしておく。
5.1. IPアドレスの仮設定
下準備として、IPアドレスを仮設定する。
まず、NIC port名を調べる。
[root@localhost ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
NIC port名は eno16777728 (enはEtherNet、oはOn-board、数字は様々)なので、これに仮IPを設定する。デフォルトゲートウェイとDNSサーバも。
[root@localhost ~]# ip addr add 192.168.170.64/24 dev eno16777728
[root@localhost ~]# ip route add default via 192.168.170.2
[root@localhost ~]# echo "nameserver 192.168.170.2" > /etc/resolv.conf
導通確認:
[root@localhost ~]# curl -s --get http://www.google.co.jp | head -1 | cut -b-70
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage"
5.2. yum update
[root@localhost ~]# yum update
...
Install 1 Package
Upgrade 61 Packages
Total download size: 88 M
Is this ok [y/d/N]: y
...
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-0.1406.el7.centos.2.3.x86_64 (@anaconda)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]: y
...
Complete!
おまけ1:カーネル
新カーネル kernel-3.10.0-123.8.1.el7.x86_64 もインストールされた。
[root@localhost ~]# rpm -q kernel
kernel-3.10.0-123.el7.x86_64
kernel-3.10.0-123.8.1.el7.x86_64
おまけ2: Shellshock
Shellshockもパッチがあたった(10/1時点では、水平展開中なので完全Fix版ではないらしい)
Bashのチェンジログ:
[root@localhost ~]# rpm -q --changelog bash | head
* Thu Sep 25 2014 Ondrej Oprala <ooprala@redhat.com> - 4.2.45-5.4
- CVE-2014-7169
Resolves: #1146324
* Thu Sep 25 2014 Ondrej Oprala <ooprala@redhat.com> - 4.2.45-5.3
- amend patch to match upstream's
Related: #1146324
* Mon Sep 15 2014 Ondrej Oprala <ooprala@redhat.com - 4.2.45-5.2
- Fix-up the patch
実際にバグを試してみると…
アップデート前のBashの動作:
[root@localhost ~]# env x='(){ :;};echo Vulnerable' bash -c "echo this is a test"
Vulnerable
this is a test
アップデート後のBashの動作:
[root@localhost ~]# env x='(){ :;};echo Vulnerable' bash -c "echo this is a test"
this is a test
“Vulnerable” という文字列が表示されなくなって、無事に修正された。
- Shellshock / CVE-2014-6271他:
http://en.wikipedia.org/wiki/Shellshock_(software_bug)
6. NIC port名を旧仕様に戻す
やることは3つ。
- /etc/default/grubを編集して “net.ifnames=0” をカーネルに渡す
- /etc/sysconfig/network-scripts/ifcfg-eth0 を作成する
- 再起動して動作を確認
6.1. /etc/default/grubを編集
以下のように変更した。”net.ifnames=0” を渡す。ついでに “rhgb” も削除している。
--- grub.bak 2014-10-01 18:47:06.089423340 +0900
+++ /etc/default/grub 2014-10-01 18:47:23.068425001 +0900
@@ -5,3 +5,3 @@
GRUB_TERMINAL_OUTPUT="console"
-GRUB_CMDLINE_LINUX="vconsole.keymap=jp106 crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet"
+GRUB_CMDLINE_LINUX="vconsole.keymap=jp106 crashkernel=auto vconsole.font=latarcyrheb-sun16 net.ifnames=0 quiet"
GRUB_DISABLE_RECOVERY="true"
initramfsへ反映。
grub2-mkconfig
コマンドを使う。[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-123.8.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.8.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-5a1329a865ac45aa959bb41cf24662cf
Found initrd image: /boot/initramfs-0-rescue-5a1329a865ac45aa959bb41cf24662cf.img
done
6.2. ifcfg-eth0 を作成
/etc/sysconfig/network-scripts/ifcfg-eth0 を作成する。
[root@localhost ~]# cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
TYPE=Ethernet
DEVICE="eth0"
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.170.64
NETMASK=255.255.255.0
GATEWAY=192.168.170.2
EOF
6.3. 再起動して動作確認
仮想マシンを “shutdown -r now” で再起動し、rootで再びログイン。
新カーネル(ついで)
せっかく再起動するので、grub のブート画面で新カーネルを選び、新カーネルが起動できることも確認。
[root@localhost ~]# uname -r
3.10.0-123.8.1.el7.x86_64
特にエラーなどなければ、旧カーネルは削除。
[root@localhost ~]# rpm -e kernel-3.10.0-123.el7.x86_64
syslog
/var/log/messagesに変なエラーが出ていないことを確認。特に eth 周り。
NIC port名、通信
設定の反映状況の確認と、導通確認する。
[root@localhost ~]# ip addr show | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.170.64/24 brd 192.168.170.255 scope global eth0
[root@localhost ~]# curl -s --get http://www.google.co.jp | head -1 | cut -b-70
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage"
www.google.co.jp からデータを取ってこれている。
クローン後の通信(気になる場合)
この仮想マシンを一旦落とし、VMware で仮想マシンをクローンして、同じIPアドレスで同様に通信できることを確認。
6.4. NIC port命名ルール(補足)
RHEL7では、次のようにNIC port名は決まる仕様とのこと。
1から順に、どれかのルールに該当したら命名が完了する。
- もし ifcfg-xxxx に
HWADDR
指定があり、NICのMACアドレスとマッチすれば、そのファイルのDEVICE
に指定した名前になる。ファイル名の xxxx 部分は何でもOK- 関連ファイル /usr/lib/udev/rules.d/60-net.rules
- もし kernel cmdline に
biosdevname=0
の指定がなく、かつ “biosdevname” コマンドの結果を利用できるなら、その結果が名前となる- 関連ファイル /usr/lib/udev/rules.d/71-biosdevname.rules
- もし kernel cmdline に
net.ifnames=0
の指定がないなら、変数ID_NET_{ONBOARD, SLOT, PATH}
をこの順に見て、値があれば、その名前になる- 関連ファイル
/usr/lib/udev/rules.d/75-net-description.rules
/usr/lib/udev/rules.d/80-net-name-slot.rules
- 関連ファイル
- 以上のどれにも該当しなければ、昔ながらの ethN を使う。
今回、ifcfg-eth0 に HWADDR を書いておらず(ルール1適用外)、biosdevname をアンインストールしており(ルール2適用外)、kernel cmdlineに
net.ifnames=0
を指定したから(ルール3適用外)、結局、NIC port名は eth0 となった。
ルール3で使われる変数の値は、以下のように調べることができる。
[root@localhost ~]# ls /sys/class/net/ | while read f
> do { echo "$f:"; udevadm info /sys/class/net/$f|grep ID_NET_; } done
eno16777728:
E: ID_NET_LABEL_ONBOARD=enEthernet0
E: ID_NET_NAME_MAC=enx000c299129d8
E: ID_NET_NAME_ONBOARD=eno16777728
E: ID_NET_NAME_PATH=enp2s0
E: ID_NET_NAME_SLOT=ens32
lo:
参考にした資料は以下。udevルールを工夫すると、もっと色々とできるみたい。
- RHEL7 Networking Guide | 9. Consistent Network Device Naming
- CentOS7 FAQ | 3. And what if I want the old naming back?
- Ask Xmodulo | How to change a network interface name on CentOS 7
- Systemd Wiki | PredictableNetworkInterfaceNames
- Systemd NetID Build-inソース - “eno” 他の意味定義
CentOS6.5の実装(70-persistent-net.rules)より、筋が良くなっていると思う。
7. VMware Tools のインストール
VMware Workstation “10.0.3 build-1895310” が提供する VMware Tools は、RHEL7 に対応していない(今後も対応するのか不明)。
以下の公式ページをみると、Open-vmware-toolsを使えとのこと。
- VMware | Guest Operating System Installation Guide > RHEL7
- VMware Tools in a Red Hat Enterprise Linux 7 Guest
また、次のページのFAQには、各OSディストリビューションに含まれるものを使えば良いとあるので、yumで入れる。
- VMware | Knowledge Base | VMware support of open-vm-tools (2073803)
- Contents - open-vm-tools や open-vm-tools-desktop 等を説明
- Frequently asked questions - “Updates of open-vm-tools are distributed with operating system updates and patches” の記述あり
7.1. yumでインストール
[root@localhost ~]# yum install open-vm-tools
...
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
open-vm-tools x86_64 9.4.0-3.el7 base 429 k
Installing for dependencies:
libdnet x86_64 1.12-13.1.el7 base 31 k
libicu x86_64 50.1.2-11.el7 base 6.9 M
...
Total download size: 7.3 M
Installed size: 25 M
Is this ok [y/d/N]: y
...
Complete!
インストール完了!
systemctl status vmtoolsd
でサービスを確認できる。7.2. パワーオン スクリプトが正常に実行されません
しかし今度は、仮想マシンの起動時に以下のメッセージで怒られるようになる。
この仮想マシンで VMware Tools パワーオン スクリプトが正常に実行されませんでした。カスタム パワーオン スクリプトをこの仮想マシンで構成している場合は、スクリプトにエラーがないことを確認してください。サポート リクエストを提出してこの問題を報告することもできます。
この辺りを参考に調べると、
ifconfig
コマンドが存在しないことが原因↓と判明。[root@localhost ~]# /etc/vmware-tools/poweron-vm-default
Wed Oct 1 12:01:55 JST 2014 : Executing '/etc/vmware-tools/poweron-vm-default'
Wed Oct 1 12:01:55 JST 2014 : Executing '/etc/vmware-tools/scripts/vmware/network'
Oct 01 12:01:55 network: ifconfig not in search path.
それはそうだ、CentOS7だもん。
準仮想化ドライバを導入した時のように、vmxファイルを編集して、機能を無効化できるようだけど、今回は素直に
ifconfig
コマンド(net-tools)を入れます。[root@localhost ~]# yum install net-tools
...
Total download size: 304 k
Installed size: 917 k
Is this ok [y/d/N]: y
...
Installed:
net-tools.x86_64 0:2.0-0.17.20131004git.el7
Complete!
今度は、同じスクリプトでエラーがでなくなった。OS起動での文句も無くなった。
[root@localhost ~]# /etc/vmware-tools/poweron-vm-default
Wed Oct 1 12:07:16 JST 2014 : Executing '/etc/vmware-tools/poweron-vm-default'
Wed Oct 1 12:07:16 JST 2014 : Executing '/etc/vmware-tools/scripts/vmware/network'
8. 公開鍵の登録
この仮想マシンはテンプレート化するので、クローンしたもの全て、手元の秘密鍵でログインできるようにし、今後のSSHログインを簡単にする。
SSHクライアントの公開鍵を転送して
~/.ssh/authorized_keys
に登録しておく。
終わったら
shutdown -h now
でOSを落とす。9. 仮想マシンの調整とテンプレート化
仮想マシンの最終調整をして、テンプレート化する。
- ハードウェア|CD/DVD(SATA)
“起動時に接続(O)”をチェックOFF、物理ドライブを使用する(P):”自動検出” を選択 - ハードウェア|ディスプレイ
モニタ設定を指定(S):各モニタの最大解像度(N): 640x480
※ ほとんどリモートログインでしか利用しないので。 - オプション|VMware Tools
“ホストとゲスト時間を同期(S)”をチェック - オプション|詳細
デバッグ情報を収集(O): “なし”
“クローン作成に使用するテンプレートモードを有効にする(T)”をチェック
VMware WorkstationのUIを使い、テンプレートとなるスナップショットを作成する。
Ctrl-Mからスナップショットマネージャを起動。スナップショット名は「OS基本設定済み2014/10/1」など。詳細にはIPアドレスなどを書いておく。
以上で、クローンして直ぐ使えるイメージができた。大団円。
1 コメント:
Centos7のvmwareイメージを作成 >>>>> Download Now
Reply>>>>> Download Full
Centos7のvmwareイメージを作成 >>>>> Download LINK
>>>>> Download Now
Centos7のvmwareイメージを作成 >>>>> Download Full
>>>>> Download LINK
コメントを投稿