So-net無料ブログ作成

Emacs 24でのコマンド引数のファイル名補完 [CentOS]

# Emacs のバージョン
emacs-24.3-11.el7.x86_64
emacs-24.3-18.el7.x86_64

1. 発生事象


inferior shell において、コマンド引数のファイル名補完が想定通りにならないことがある。

(例)
rpm コマンドの引数指定で、指定ディレクトリのファイル名が補完されない。
・インストール済の RPM パッケージが補完対象となる。
 (ミニバッファに "Getting list of installed rpms...done" と表示される。)

% ls -1
fcitx-4.2.8.4-1.fc20.x86_64.rpm
fcitx-anthy-0.2.0-2.fc20.x86_64.rpm

% ls -l fcitx
<= Tab の押下後、カレントディレクトリのファイルで補完される

% rpm -qpi fcitx
<= Tab の押下後、カレントディレクトリのファイルで補完されない

2. 原因


Emacs 24 において、仕様が変更されたためである。


3. 対処方法


上記のような場合には、下記の手順を実施する。

(1) *Completions* バッファを kill-buffer する。

(2) M-? を押下し、補完候補を表示する。


M-? は comint-dynamic-list-filename-completions にバインドされている。


(3) *Completions* バッファ内の補完候補を選択する。


補完候補にカーソルを移動し、Enter を押下する。

または

補完候補をマウスの中ボタンでクリックする。


4. 備考


以前の仕様に近い動作にするためには、~/.emacs に下記の設定を追加する。

(add-hook 'shell-mode-hook
          '(lambda ()
             (add-to-list 'completion-at-point-functions
                          'comint-dynamic-complete-filename)))


(補足)
・ミニバッファに余分なメッセージが表示されることがある。
・コマンド名の補完では、一度 "No match" と表示される。
 (しばらく待つか、再度 Tab を押下すると補完される。)



KVMのゲストOSでのDVD/CDブート [Linux]

KVM のゲスト OS での DVD/CD ブートの実現に手間取ったため、備忘録としてまとめてみた。

1. DVD/CD ブートの手順


(1) virt-manager の起動

(2) メディアのセット


・DVD/CD メディアを使用する場合には、メディアをドライブにセットする。
 (ISO ファイルを使用する場合には、特に操作は不要)


(3) ゲスト OS の設定変更


(a) DVD/CD のマウント


・ゲスト OS を選択する。
・メニューから [View] -> [Details] を選択する。
・左側のリスト [CDROM 1] で、[Connetct] を選択する。
・メディアのパスを設定する(DVD/CD、ISO ファイル)。

(補足)
DVD/CD が不要となった時点で、マウントの解除を実施する。
・[Disconnect] を選択する。


(b) ブートメニューの表示


・左側のリストから [Boot Options] を選択する。
・[Enable boot menu] にチェックを入れる。
・[Apply] を選択する。


(4) ゲスト OS の起動


ESC キーを押下し、DVD/CD からのブートを選択する。


2. 備考


上記により、インストールメディアでの rescue モードの実行等が可能となる。



KVM上のVMへのP2V [CentOS]

先日作成した KVM 上の VM への P2V を行った。
実施した手順は、以下の通りである。

## OS のバージョン
・KVM ホスト: CentOS 7.2
・ゲスト OS: CentOS 6.7
## 方針
可能な限り、OS の提供する機能を使用する。

1. 準備


VM 上にコピーする OS のインストールメディアを用意する。


・rescue モードの command shell を使用するだけなので、minimail.iso で充分である。
・メジャーバージョンが一致すれは問題ないと思われる。


2. 物理サーバーのバックアップの取得


(1) パーティション毎のパックアップ

(例)
# dump -0 -f - /dev/sda1 | gzip > root.dmp.gz
# dump -0 -f - /dev/sda2 | gzip > home.dmp.gz


(2) KVM ホスト上へのバックアップデータのコピー


上記で取得したバックアップデータを KVM ホスト上へコピーする。


3. VM の作成


(1) VM の作成


・ディスクのサイズは、物理サーバーでの設定と同等にする。
・インストールメディアとして、上記で準備したファイルを指定する。


(2) Rescue モードの command shell の起動


(a) [Rescue installed system] の選択

(b) 言語、キーボードタイプの選択


・[Choose a Language] で [English] または [Japanese] を選択する。
・[Keyboard Type] で [jp106] を選択する。


(c) Network I/F の設定


・[Setup Networking] で [Yes] を選択する。
・IP address、Gateway、Name server に適当な設定を行う。


(d) command shell の起動


・[Rescue] で [Skip] を選択する。
・[shell] を選択した状態で、[Ok] を選択する。


4. command shell でのバックアップデータのリストア


(1) パーティションの作成


・fdisk が使用可能である。
・cfdisk を使用する場合には、KVM ホスト経由でコピーする。
 (scp、rcp、ftp が使用可能)
・作成したパーティションには、ファイルシステムを作成する。
 (mke2fs を使用)


(2) バックアップデータのリストア

(例)
# mkdir /tmp/root
# mount -t ext3 /dev/sda1 /tmp/root
# cd /tmp/root
# ssh <kvm_host> gzip -dc /work/root.dmp.gz | restore -rf -
# rm restoresymtable
# umount /tmp/root
(/home についても同様)


(3) デバイスパスの変更


デバイスパスが変わる場合には、下記ファイルの設定を対応させる。

・/etc/fstab
・/boot/grub/grub.conf


(4) GRUB のインストール

(例)
# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit


(5) command shell の終了

# exit
その後、[reboot] を選択した状態で、[Ok] を選択する。

5. ゲスト OS での設定


・IP アドレス、ホスト名の変更
・swap の設定



KVMでのマイグレーションの実施 [CentOS]

先日 CentOS 7.2 上に作成した KVM の仮想環境へ、マイグレーションの実行環境を追加した。
実施手順は、以下の通りである。

# IP アドレスに関する情報
・192.168.0.12 … 既存の KVM ホスト、NFS サーバー
・192.168.0.11 … 追加した KVM ホスト

1. パッケージの追加


(1) openssh-askpass (SSH でのパスワードの入力機能)

# yum install openssh-askpass.x86_64

2. マイグレーションの実行環境の構築

2-1. KVM ホストの追加


(1) KVM ホストの複製


(a) 既存の KVM ホストを複製し、2 個目の KVM ホストを作成する。

(b) ホスト名、IP アドレスを変更する。


編集するファイルは、下記の通りである。

・/etc/sysconfig/network-scripts/ifcfg-enp2s0
・/etc/hostname
・/etc/hosts


(2) /etc/hosts の編集


KVM ホスト間で名前解決ができるように、当該ホストの設定を追加する。


2-2. 共有ディスクの設定


2 ノードからアクセスできる外部ディスクがないため、NFS を使用する。
実施手順は、下記の通りである。

(1) NFS サーバーの設定


KVM ホストの一方を NFS サーバーにする。

(a) NFS サービスの自動起動の設定

# systemctl enable nfs


(b) ディスクイメージの保存領域の別パーティション化


・/var/lib/libvirt/images 用のパーティションを作成する。
・上記パーティションを /kvm_data にマウントする。
・/var/lib/libvirt/images を /kvm_data にコピーする。


(c) /etc/exports ファイルの編集 (設定例)

# cat /etc/exports
/kvm_data 192.168.0.0/24(rw,no_root_squash,sync)


(d) /etc/fstab の編集 (設定例、各エントリは一行で設定)

# /kvm_data のマウント
/dev/sdc11  /kvm_data  ext3  defaults  0  2

# /var/lib/libvirt/images の NFS マウント(ローカルディスクの NFS マウント)
192.168.0.12:/kvm_data  /var/lib/libvirt/images  nfs \
defaults,noac,hard,intr  0  0


(e) KVM ホストの再起動


(2) NFS クライアントの設定


他方の KVM ホストで、NFS サーバーの /kvm_data を NFS マウントする。
(NFS サーバーの起動が完了した後に実施する。)

(a) /etc/fstab の編集 (設定例、各エントリは一行で設定)

192.168.0.12:/kvm_data  /var/lib/libvirt/images  nfs \
defaults,noac,hard,intr  0  0


(b) KVM ホストの再起動

(補足)
NFS マウントは、KVM の設定で対応することも可能である。
手順は、下記の通りである。
・KVM の Storage 設定で、netfs タイプの Storage Pool を作成

Name: NFS (任意の名前で可)
Type: netfs
Target Path: /var/lib/libvirt/images
Host Name: NFS サーバーのホスト名
Source Path: /kvm_data (NFS サーバー上のパス)


・Storage Pool の AutoStart 設定の変更
 default(Filesystem Directory) を false に変更
 NFS(Network Exported Directory) を ture に変更


2-3. virt-manager の設定


マイグレーション先の KVM ホストを追加する。

(1) virt-manager の起動

% virt-manager


(2) 接続先の追加


[File] -> [Add Connection] を選択し、接続先を登録する。


(a) 接続先の指定

Hypervisor: QEMU/KVM
Connection to remote host: 選択
Method: SSH
Username: root
Hostname: マイグレーション先のホスト名


(b) [Connect] を選択


接続先での root のパスワードの入力が求められる。


2-4. その他の設定


(1) KVM ホストの UUID の変更


2 ノードで UUID が同じ場合には、下記の手順を実施する。
未実施の場合、同一のホストと判断され、マイグレーションを実施できない。

(a) KVM ホストの UUID の確認


2 ノードで下記のコマンドを実行する。

# dmidecode -s system-uuid


(b) random UUID の取得

# cat /proc/sys/kernel/random/uuid


(c) /etc/libvirt/libvirtd.conf の編集


host_uuid に上記の random UUID の値を設定する。


(d) libvirtd の再起動

# systemctl restart libvirtd


(2) ディスク・キャッシュの設定設定


下記の手順を実施し、キャッシュを none にする。
未実施の場合、下記メッセージが表示され、マイグレーションを実施できない。
(マイグレーション時に、[Allow unsafe] を選択する場合を除く。)

(a) 表示されるメッセージ

Unable to migrate guest:
安全ではないマイグレーション:
ディスクが cache != none を使用していると、マイグレーションにより
データが破損するかもしれません。


(b) 対処方法


VM 毎に下記の手順を実施する。

・メニューのアイコンから [Show virrual hardware details] を実行
・左側の一覧から該当するディスクを選択
・[Performance options] を展開
・[Cache mode] で [none] を選択
・[Apply] を選択
・ゲスト OS を shutdown
・ゲスト OS を 起動


3. マイグレーションの実施


(1) KVM ホストへの接続


マイグレーション元/先となる KVM ホストに接続する。


(2) VM の開始


マイグレーションを行う VM を起動する。


(3) マイグレーションの開始


・VM を選択し、右クリックで [Migrate] を選択
・マイグレーション先の VM ホストを選択



KVMでの仮想環境の構築 [CentOS]

テストのため、Linux サーバーが 3 台必要となり、KVM を使用した仮想化で対応した。
詳細は、以下の通りである。

1. ソフトウェアのバージョン


(1) KVM (on CentOS 7.2)


qemu-kvm-1.5.3-105.el7_2.3.x86_64
libvirt-1.2.17-13.el7_2.3.x86_64
bridge-utils-1.5-9.el7.x86_64


(2) 仮想マシンマネージャー (on CentOS 7.2)


virt-manager-1.2.1-8.el7.noarch


(3) ゲスト OS


centos-6.7


(補足)
・KVM ホストとするノードは、物理サーバーとして使用していたサーバーである。
・CentOS 7.2/6.7 とも、NetworkManager は使用しない(無効化する)。


2. 実施手順


(1) パッケージのインストール

# yum install qemu-kvm libvirt virt-install bridge-utils
# yum install virt-manager


(2) 仮想ディスク用の領域の確保


/var/lib/libvirt/images に十分な空き容量がない場合、下記の手順を実施する。

・/var/lib/libvirt/images 用のパーティションを作成する。
・上記パーティションを /var/lib/libvirt/images にマウントする。


3. ネットワークの設定

3-1. ブリッジ・インターフェースの作成


外部からのゲスト OS への接続を可能にするため、ブリッジ I/Fを作成する。

(1) /etc/sysconfig/network-scripts/ifcfg-br0 の編集


(a) ifcfg-br0 の作成


ifcfg-enp2s0 を複製し、ifcfg-br0 を作成する。


(b) ifcfg-br0 の編集


下記のように変更する。

・TYPE
 Ethernet → Bridge
・NAME
 enp2s0 → br0
・DEVICE
 enp2s0 → br0
・UUID の設定のコメント化
・MAC アドレスの設定のコメント化


(2) /etc/sysconfig/network-scripts/ifcfg-enp2s0 の編集


(a) 設定の追加


BRIDGE=br0


(b) 設定の削除(またはコメント化)


UUID の設定
IP アドレス/サブネットマスクの設定
デフォルト・ゲートウェイの設定
DNS の設定


(3) ネットワークの再起動

# systemctl restart network


・br0 に指定した IP アドレスが設定され、UP となっていること。
・enp2s0 が存在し、UP となっていること。


(4) ブリッジ・インターフェースの確認

# brctl show


・br0 が存在し、interface が eth0 であること。


3-2. カーネル・パラメーターの設定


(1) カーネル・パラメーターの設定


/etc/sysctl.conf に下記の設定を追加する。

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0


(2) 設定の反映

# sysctl -p /etc/sysctl.conf

4. virt-manager のための設定


(1) root 以外で virt-manager を実行する場合の設定


該当するユーザーを libvirt グループのメンバーに追加する。


5. 仮想マシンの作成とゲスト OS のインストール


(1) virt-manager の起動

% virt-manager


GNOME の場合には、メニューから起動可能である。
・[アプリケーション] -> [システムツール] -> [仮想マシンマネージャー]


(2) 仮想マシンの作成


[QEMU/KVM] を右クリックし、[新規] を選択する。

・VM 作成時に、ゲスト OS のインストールを行う。
・ネットワークの選択では、Bridge br0 を選択する。


6. ゲスト OS の設定


(1) パッケージの追加


(a) acpid


virt-manager からのリブート/シャットダウンを行うために追加する。
また、インストール後、下記のコマンドを実行する。

# chkconfig acpid on
# /etc/init.d/acpid start


(b) ntp


/etc/ntp.conf の編集後、下記のコマンドを実行する。

# chkconfig ntpd on
# /etc/init.d/ntpd start


(2) シリアルコンソールの設定


/boot/grub/grub.conf を編集する。

(a) 下記の設定を追加する。

・serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
・terminal --timeout=5 serial console


(b) カーネルの起動オプションに、下記のオプションを追加する。

console=tty0 console=ttyS0,115200


(補足)
115200 は 115200n8 と同意
・115200: 通信速度(bps)
・n: パリティなし (デフォルト値)
・8: データビット数 (デフォルト値)
・"": フロー制御なし (デフォルト値、r: フロー制御あり)


7. VM の複製


(1) 複製元の VM の停止


virt-manager で当該 VM を停止する。


(2) VM の複製


(a) virt-clone コマンドを使用する場合

# virt-clone -o <org_guest_name> -n <new_guest_name> -f <new_disk_file>


(b) virt-manager を使用する場合


・既存のゲスト OS を選択し、右クリックで、[クローン] を選択する。
・クローン先の名前、ストレージのパスを入力する。
・[クローン] を選択し、処理を開始する。


(3) ゲスト OS の IP アドレス、ホスト名の変更


複製した VM を起動し、ゲスト OS の IP アドレス、ホスト名を変更する。
編集するファイルは、下記の通りである。

・/etc/udev/rules.d/70-persistent-net.rules
・/etc/sysconfig/network-scripts/ifcfg-eth0
・/etc/sysconfig/network
・/etc/hosts


8. その他


(1) virtbr0 の停止


NAT を使用しないため、virtbr0 の自動起動を無効化する。

・virt-manager を起動する。
・メニューから [Edit] -> [Connection Details] を選択する。
・[Virtual Networks] を選択する。
・[default] の [Autostart] のチェックを外す。


(2) シリアルコンソールの使用方法


(a) 接続の開始


・root でログインする(または su する)。
・virsh console <domain-name> を実行する。
・Enter キーを押下する。
・ユーザー名、パスワードを入力する。


(b) 接続の終了


・ログインシェルからログアウトする。
・Ctrl + ] を押下する。