Hatena::ブログ(Diary)

わすれないうちにメモしよう

2017-11-08

CentOS7 WAF(ModSecurity)のインストール

apacheインストール

# yum install httpd


・ModSecurityのインストール
# yum install mod_security mod_security_crs


・設定
# cp -p /etc/httpd/conf.d/mod_security.conf /etc/httpd/conf.d/mod_security.conf.org
# vi /etc/httpd/conf.d/mod_security.conf  # Default recommended configuration  # SecRuleEngine On ←コメントアウト  SecRuleEngine DetectionOnly ←検知はするが、遮断はしない


apache再起動
# systemctl restart apache


・ログ確認
# less /var/log/httpd/modsec_audit.log


・ルールの場所
# cd /etc/httpd/modsecurity.d/

2017-08-13

KVM VMの自動起動/自動シャットダウン設定

・ホスト側の設定

# vi /etc/sysconfig/libvirt-guests
START_DELAY=30
ON_SHUTDOWN=shutdown
SHUTDOWN_TIMEOUT=180
# virsh autostart <自動起動したいVM名> # ls /etc/libvirt/qemu/autostart


・ゲスト側の設定
ホストのシャットダウン命令を受け付けるようにする
# yum -y install acpid
# systemctl start acpid
# systemctl enable acpid

2017-07-30

KVM libvirt で cdrom をマウントする

# virus edit vm_name

<controller type='ide' index='0'>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>

<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source file='/mnt/storage-1/application_installer/ISO/virtio-win-0.1.139.iso'/>
  <target dev='hdb' bus='ide'/>
  <readonly/>
  <address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>

2017-07-23

CentOS7 VAAPIでHWエンコード

リポジトリの追加

# yum -y install yum-utils epel-release
# yum-config-manager --disable epel-release
# yum-config-manager --add-repo=http://negativo17.org/repos/epel-multimedia.repo
# yum-config-manager --disable epel-multimedia


インストール
# yum --enablerepo=epel,epel-multimedia install libva libva-devel libva-intel-driver libva-utils
# vainfo ※利用可能なプロファイル一覧が表示されればOK


ffmpegインストール
https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

ffmpegで動作確認
※vaapi_device で指定するHWエンコードデバイスls -n /dev/dri で確認
# ffmpeg -vaapi_device /dev/dri/card0 \ -hwaccel vaapi \ -hwaccel_output_format vaapi \ -i input.mp4 \ -c:v h264_vaapi -profile:v 100 -level 40 -qp 22 \ -c:a copy \ output.mp4


・TSのエンコード
# ffmpeg \
  -vaapi_device /dev/dri/card0 \
  -hwaccel vaapi \
  -hwaccel_output_format vaapi \
  -i input.ts \
  -analyzeduration 30M -probesize 30M \
  -vf 'format=nv12|vaapi,hwupload,scale_vaapi=w=720:h=480' \
  -c:v h264_vaapi -profile:v 77 -level 31 -qp 22 -quality 0 -aspect 16:9 \
  -c:a libfdk_aac  -ac 2 -ab 96k -ar 48000 \
  output.mp4
hwaccel vaapi  → HWデコードする hwaccel_output_format vaapi  → HWデコード結果をそのままHWエンコーダに渡す    ※ソフトウェアフィルタを使う場合はyuv420p等を指定する analyzeduration、probesize  → TSなどのフォーマットでは読み込みのために動画ストリームの解析が必要    デフォルトの解析時間・解析サイズでは動画を読み込めない場合があるため、長めに修正する    analyzeduration:デフォルト 5秒(5Mマイクロ秒)    probesize:デフォルト 5Mバイト scale_vaapi  → HWエンコーダでリサイズ profile:v  → h.264のプロファイル    High:100 Main:77 Baseline:66 level  → h.264のレベル    4.0 → 40 3.1 → 31 1.3 → 13 qp  → 画質    デフォルト20    数値が低いほど高画質、高ビットレート quality  → 品質    デフォルト0    数値が低いほど高画質、低速


・VAAPIの情報
https://wiki.libav.org/Hardware/vaapi
https://gist.github.com/Brainiarc7/95c9338a737aa36d9bb2931bed379219
https://trac.ffmpeg.org/wiki/Hardware/VAAPI

CentOS7 HandBrakeを野良リポジトリからインストールする

リポジトリの追加

# yum -y install yum-utils epel-release
# yum-config-manager --disable epel-release
# yum-config-manager --add-repo=http://negativo17.org/repos/epel-multimedia.repo
# yum-config-manager --disable epel-multimedia


インストール
# yum --enablerepo=epel install libmfx
# yum --enablerepo=epel-multimedia install HandBrake-cli

2017-07-16

CentOS7 KVMでNVIDIAのGPUをWindowsにパススルーする

WindowsNVIDIAドライバOSKVMハイパーバイザー環境で動作していることを検知すると error 43 で動作停止するという仕様のため、回避するために以下の対策が必要。
1. libvirtドメイン設定でハイパーバイザーのベンダーIDを偽装する
2. libvirtドメイン設定で hidden state を on にする

詳細は下記
 https://wiki.archlinuxjp.org/index.php/OVMF_による_PCI_パススルー
 9.1	Windows仮想マシンNVIDIAGPU をパススルーした場合に "Error 43 : Driver failed to load"


上記対策はUEFIモードでインストールしたWindowsのみで有効。
BIOSモードでインストールしたWindowsではエラーが出る)

UEFIモードでインストールできるようにするために、OVMF(Open Virtual Machine Firmware)のインストール・設定を行う。

・OVMFのインストール
# vi /etc/yum.repos.d/kraxel.repo
include=https://www.kraxel.org/repos/firmware.repo
# yum install edk2.git-ovmf-x64


virt-installの設定
vert-install で --boot uefi オプションを指定できるようにするために、下記設定を追加する
# /usr/local/etc/libvirt/qemu.conf 
nvram = [
    "/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd",
    "/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw"
]


virt-installUEFI を指定してインストール
# virt-install \
   --boot uefi \
  <省略>
virt-managerインストールする場合はファームウェアの指定でUEFIを選択する ※OVMFは virtioで接続したディスクからOS起動できないため、IDE もしくは virtio-scsi での接続が必要

2017-06-24

CentOS7 KVM virt-installで仮想マシンをインストールする一例

・仮想ディスク作成

# qemu-img create -f qcow2 /usr/local/var/lib/libvirt/images/vm1.qcow2 8G


virt-install
# virt-install \
 --connect qemu:///system \
 --boot uefi \  ← UEFIモードでインストールしたい場合は指定する。OVMFの事前設定が必要。
 --name vm1 \
 --vcpus=1 \
 --cpu host \
 --ram=1024 \
 --os-type=linux \
 --os-variant=rhel7.3 \
 --disk=/usr/local/var/lib/libvirt/images/vm1.qcow2 \
 --cdrom=/mnt/storage-1/application_installer/ISO/CentOS-7-x86_64-NetInstall-1611.iso \
 --network bridge=br0 \
 --graphics vnc,password=foobar,port=5910,listen=0.0.0.0,keymap=us
os-type は linux, windows, unix, other のいずれか ※os-variant で指定できるパラメータは下記コマンドで確認  # osinfo-query os ※指定できる cpu の種類は下記コマンドで確認  # virsh cpu-models x86_64 ※使用できるCPU機能は下記で確認  # cat /usr/share/libvirt/cpu_map.xml


VNC仮想マシンに接続
上記の例では <ホストのIP>:5910 にアクセスし、パスワード:foobar を入力


各種パラメータについては下記を参照。
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/

2017-06-23

CentOS7 KVM ksmdを停止する

ksm は複数のVMが持っている同一メモリーページを集約してメモリー使用量を減らすことができる。
ただしCPUリソースをそれなりに食うのと、十分なメモリーがあればあまり恩恵がないので、不要であれば無効化する。

# systemctl stop ksmtuned
# systemctl disable ksmtuned
# systemctl stop ksm # systemctl disable ksm

2017-06-21

CentOS7 KVMをネストする

・状態確認

# cat /sys/module/kvm_intel/parameters/nested 
N
※無効化されている


・有効化
# vi /etc/modprobe.d/kvm-nested.conf
options kvm_intel nested=1
# modprobe -r kvm_intel # modprobe kvm_intel ※仮想マシンはすべて停止しておくこと
# cat /sys/module/kvm_intel/parameters/nested Y


CPUのパススルー設定
# virsh edit centos7
<cpu mode='host-passthrough'>

パススルーした仮想マシン上でKVM環境を構築する

2017-06-17

CentOS7 KVM 最新のQEMUとlibvirtをインストールする

どちらも yumインストールできるが、
2017/6時点で古いバージョンがインストールされる。
最新のものを使いたい場合は手動でインストールする。

インストール済みの QEMUlibvirtアンインストール

# yum -y remove qemu-kvm libvirt virt-manager


QEMUインストール
# yum -y groupinstall 'Development tools'
# yum -y install zlib zlib-devel glib2 glib2-devel ncurses-devel SDL-devel
# cd /usr/local/src/ # wget http://download.qemu-project.org/qemu-2.9.0.tar.xz # xz -dv qemu-2.9.0.tar.xz # tar xvf qemu-2.9.0.tar # cd qemu-2.9.0/ # ./configure # make # make install


libvirtインストール
# yum install -y libnl-devel libxml2-devel yajl-devel device-mapper-devel libpciaccess-devel
# cd /usr/local/src/ # wget http://libvirt.org/sources/libvirt-3.4.0.tar.xz # xz -dv libvirt-3.4.0.tar.xz # tar xvf libvirt-3.4.0.tar # cd libvirt-3.4.0/ # ./configure # make # make install
# systemctl enable libvirtd # systemctl start libvirtd


virt-installインストール
# yum install -y virt-install
virt-install は /var/run/libvirt/libvirt-sock 経由で libvirt に接続するが、 libvirt を手動インストールした場合、socket は /usr/local/var/libvirt/libvirt-sock に作成されるため、 virt-install が参照できるようにシンボリックリンクを作成しておく
# ln -s /usr/local/var/run/libvirt/ /var/run/libvirt

CentOS7 最新の安定板カーネルへの更新方法

・最新カーネルyumで追加できるようにする

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm


・通常時は epel を無効化する
# yum -y install yum-utils
# yum-config-manager --disable elrepo-kernel


・最新カーネルインストール
# yum -y --enablerepo=elrepo-kernel install kernel-ml


・起動するカーネルの変更
# rpm -qa | grep "^kernel" | sort
# grub2-editenv list
# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
# grub2-set-default 0
 ※デフォルトにしたいkernelの番号を指定
# grub2-editenv list
# reboot
# uname -a


・関連パッケージの入れ替え
# rpm -qa | grep "^kernel" | sort
# yum -y --enablerepo=elrepo-kernel swap kernel-headers -- kernel-ml-headers
# yum -y --enablerepo=elrepo-kernel swap kernel-tools-libs -- kernel-ml-tools-libs
# yum -y --enablerepo=elrepo-kernel swap kernel-tools kernel-ml-tools
# yum -y --enablerepo=elrepo-kernel swap kernel-devel -- kernel-ml-devel
# rpm -qa | grep "^kernel" | sort


・旧カーネルの削除
# yum -y remove kernel
# rpm -qa | grep "^kernel" | sort

2017-04-01

Zabbix で smartctl の値を監視する

・エージェント側の smartctl で値を取得できることを確認

# smartctl -A /dev/sda | grep Temperature | awk '{print $10}'
# smartctl -A /dev/sda | grep Offline_Uncorrectable | awk '{print $10}'
# smartctl -A /dev/sda | grep Reallocated_Sector_Ct | awk '{print $10}'
# smartctl -A /dev/sda | grep Current_Pending_Sector | awk '{print $10}'


・エージェント側の zabbixユーザで、リモート/パスワードなしで sudo smartctl が実行できるように設定変更
# visudo
Defaults:zabbix !requiretty
※zabbixユーザにtty接続なしで sudo 実行を許可する
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/smartctl -A /dev/sd? ※zabbixユーザにパスワードなしで sudo smartctl を実行することを許可する


・エージェント側でzabbixユーザパラメータ設定
# vi /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1
UserParameter=hdd.smart[*],sudo smartctl -A /dev/$1 | grep $2 | awk '{print $$10}'
※$$10 は $ のエスケープ処理
# systemctl restart zabbix-agent.service


・値取得テスト
エージェント側で実施
# zabbix_agentd -t hdd.smart[sda,Temperature]
サーバ側で実施 # zabbix_get -s <エージェントのIPアドレス> -k hdd.smart[sda,Temperature]


・Zabbix管理画面でアイテム設定
名前:$1 - Current_Pending_Sector
タイプ:Zabbixエージェント
キー:hdd.smart[sda,Current_Pending_Sector]


・Zabbix管理画面でトリガー設定
名前:sda Pre-fail
条件式
{host:hdd.smart[sda,Offline_Uncorrectable].last()}>0 | 
{host:hdd.smart[sda,Reallocated_Sector_Ct].last()}>0 |
{host:hdd.smart[sda,Current_Pending_Sector].last()}>0
深刻度:任意