AlmaLinux9 KVM設定(初期設定+GPUパススルー)

OS設定

ホスト名の変更
# hostnamectl set-hostname AlmaLinux9-kvm-host
SELinuxの無効化
# vi /etc/selinux/config
SELINUX=disabled

# reboot
firewalldの無効化
# systemctl stop firewalld
# systemctl disable firewalld 

KVM設定

パッケージインストール
# dnf update
# dnf install qemu-kvm libvirt virt-install 
ブリッジの作成
# nmcli device
# nmcli connection show

# nmcli connection add type bridge ifname br0
# nmcli device
# nmcli connection show

# nmcli connection modify bridge-br0 ipv4.addresses 192.168.0.90/24 ipv4.method manual
# nmcli connection modify bridge-br0 ipv4.gateway 192.168.0.1
# nmcli connection modify bridge-br0 ipv4.dns 8.8.8.8

# nmcli connection add type bridge-slave ifname enp4s0 master br0
# nmcli device
# nmcli connection show

# nmcli connection del enp4s0 ; reboot

ブリッジへのインターフェース登録状態の確認
# nmcli c show bridge-slave-enp4s0 | grep master

仮想マシンの作成

OS種別の確認
# osinfo-query os
Windowsのインポート(EFI
# virt-install \
 --boot uefi \
 --name Windows10-uefi \
 --vcpus=4 \
 --cpu host-passthrough,cache.mode=passthrough \
 --ram=4096 \
 --os-type=windows \
 --os-variant=win10 \
 --disk=/mnt/storage-2/temp//Windows10-uefi_2.qcow2 \
 --import \
 --network bridge=br0 \
 --graphics vnc,password=foobar,port=5908,listen=0.0.0.0,keymap=en-us
Linuxのインポート
virt-install \
 --name Ubuntu16-tuner \
 --vcpus=4 \
 --cpu host-passthrough,cache.mode=passthrough \
 --ram=2048 \
 --os-type=linux \
 --os-variant=ubuntu16.04 \
 --disk=/var/lib/libvirt/images/Ubuntu16-tuner.qcow2  \
 --import \
 --network bridge=br0 \
 --graphics vnc,password=foobar,port=5901,listen=0.0.0.0,keymap=en-us

PCIパススルー設定

BIOS設定
BIOSで「Intel VT-d」「I/O Virtualization Technology」などの名前の設定項目を有効にする。
IOMMU有効化
# vi /etc/default/grub
GRUB_CMDLINE_LINUX の末尾に「intel_iommu=on」もしくは「amd_iommu=on」を追加

# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot

# dmesg | grep -e DMAR -e IOMMU
[    0.000000] Intel-IOMMU: enabled
ホストのドライバ読み込み無効化設定

grub に nomodeset を追加

# vi /etc/default/grub 
GRUB_CMDLINE_LINUX="vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 intel_iommu=on nomodeset"

# grub2-mkconfig -o /boot/grub2/grub.cfg

・ドライバをブラックリストに追加
# lspci -v -d 1002:68f9 | grep Kernel
	Kernel driver in use: radeon

# lspci -v -d 1002:aa68 | grep Kernel
	Kernel driver in use: snd_hda_intel

# lsmod | grep radeon
drm                   297829  2 ttm,drm_kms_helper,radeon

# vi /etc/modprobe.d/blacklist.conf
blacklist drm
blacklist radeon
blacklist snd-hda-intel

# reboot
NVIDIAグラボをパススルーする場合の error 43 対策

OVMF による PCI パススルー - ArchWiki

仮想マシン設定に下記を追加する

<features>
	<hyperv>
		...
		<vendor_id state='on' value='1234567890ab'/>
		...
	</hyperv>
	...
	<kvm>
	<hidden state='on'/>
	</kvm>
</features>
PCIパススルー設定

PCIパススルーするデバイスを特定

# lspci
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cedar [Radeon HD 5000/6000/7350/8350 Series]
01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cedar HDMI Audio [Radeon HD 5400/6300 Series]

# lspci -n
01:00.0 0300: 1002:68f9
01:00.1 0403: 1002:aa68

仮想マシンの設定でPCIバイスを追加

<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0' bus='0' slot='0x1a' function='0'/>
  </source>
</hostdev>
※lspci で追加したいデバイスが 01:00.0 の場合、bus='1' slot='0' function='0' を指定する。

Ubuntu22.04 docker と docker compose のインストール

dockerのインストール

$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

$ sudo apt update
$ sudo apt-cache policy docker-ce

$ sudo apt install docker-ce
$ sudo systemctl status docker

$ sudo usermod -aG docker username
※dockerグループにユーザを追加して、sudoなしでdockerコマンドを実行できるようにする

$ docker run hello-world

docker compose のインストール

$ mkdir -p ~/.docker/cli-plugins/
$ curl -SL https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
$ chmod +x ~/.docker/cli-plugins/docker-compose

$ docker compose version

Ubuntu22.04 FFmpeg + AviSynth + JoinLogoScp + delogo でSVT-AV1対応自動CMカットエンコード環境構築

avisynth+ のインストール

# apt update
# apt install build-essential cmake git ninja-build checkinstall

# cd /usr/local/src
# git clone --depth 1 -b v3.7.2 https://github.com/AviSynth/AviSynthPlus.git
# cd AviSynthPlus
# mkdir avisynth-build
# cd avisynth-build
# cmake ../ -G Ninja
# ninja
# checkinstall --pkgname=avisynth --pkgversion="$(grep -r \
   Version avs_core/avisynth.pc | cut -f2 -d " ")-$(date --rfc-3339=date | \
   sed 's/-//g')-git" --backup=no --deldoc=yes --delspec=yes --deldesc=yes \
   --strip=yes --stripso=yes --addso=yes --fstrans=no --default ninja install
# ldconfig

## libsvtav1のインストール

# cd /usr/local/src
# git clone --depth 1 https://gitlab.com/AOMediaCodec/SVT-AV1.git
# cd SVT-AV1/Build
# cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
# make -j $(nproc)
# make install

ffmpeg のインストール

# apt install nasm libfdk-aac-dev libx264-dev libx265-dev

# cd /usr/local/src
# git clone --depth 1 -b n4.4.2 git://git.ffmpeg.org/ffmpeg.git
# cd ffmpeg
# ./configure \
      --enable-gpl \
      --enable-version3 \
      --disable-doc \
      --disable-debug \
      --enable-avisynth \
      --enable-libfdk-aac \
      --enable-libx264 \
      --enable-libx265 \
      --enable-libsvtav1 \
      --enable-nonfree
# make
# make install

l-smash のインストール

# cd /usr/local/src
# git clone --depth 1 https://github.com/l-smash/l-smash.git
# cd l-smash
# ./configure --enable-shared
# make
# make install
# ldconfig

l-smash-works のインストール(avisynth で l-smash を使用するためのプラグイン

# apt install python3-pip
# pip3 install meson==0.62.0

# cd /usr/local/src
# git clone --depth 1 -b 20210423 https://github.com/HolyWu/L-SMASH-Works.git
# cd L-SMASH-Works/AviSynth
# LDFLAGS="-Wl,-Bsymbolic" meson build
# cd build
# ninja -v
# ninja install
# ldconfig

JoinLogoScpTrialSet for Linux and Avisynth+3.5.x のインストール

https://github.com/tobitti0/JoinLogoScpTrialSetLinux

# cd /usr/local/src
# git clone --depth 1 --recursive https://github.com/tobitti0/JoinLogoScpTrialSetLinux.git
# cd JoinLogoScpTrialSetLinux/modules/chapter_exe/src/
# make
# cp -a chapter_exe /usr/local/bin/.
# cd ../../logoframe/src/
# make
# cp -a logoframe /usr/local/bin/.
# cd ../../join_logo_scp/src/
# make
# cp -a join_logo_scp /usr/local/bin/.

join_logo_scp の動作確認

# cd ~
# vi join_temp.avs
TSFilePath="GR27_test.ts"
LWLibavVideoSource(TSFilePath, repeat=true, dominance=1)
AudioDub(last,LWLibavAudioSource(TSFilePath, av_sync=true))

# chapter_exe -v join_temp.avs -oa temp_inscp.txt
# logoframe join_temp.avs -logo GR27.lgd -oa temp_inlogo.txt
# join_logo_scp -inlogo temp_inlogo.txt -inscp temp_inscp.txt -incmd JL_標準.txt -o temp_join_logo_scp.txt

# cat temp_join_logo_scp.txt
※Trim情報が記載されていること

透過性ロゴ フィルタ for AviSynth+ 3.5.x & Linux のインストール

https://github.com/tobitti0/delogo-AviSynthPlus-Linux

# apt install gcc-9 g++-9

# cd /usr/local/src/
# git clone --depth 1 https://github.com/tobitti0/delogo-AviSynthPlus-Linux.git
# cd delogo-AviSynthPlus-Linux/src
# make CC=gcc-9 CXX=gcc-9 LD=gcc-9
# make install
# ldconfig

delogo の動作確認

# cd ~
# vi delogo_temp.avs
TSFilePath="GR27_test.ts"
LWLibavVideoSource(TSFilePath, repeat=true, dominance=1)
AudioDub(last,LWLibavAudioSource(TSFilePath, av_sync=true))
EraseLOGO(logofile="GR27.lgd", interlaced=true)

# ffmpeg -f avisynth -i delogo_temp.avs -c:v libsvtav1 -c:a libfdk_aac GR27_test.mp4

基本のdocker-composeコマンド

docker-composeファイルの作成

lamp環境を構築する
※「./php533/Dockerfile」にDockerfileを作成している想定

# vi docker-compose.yml
-------------------------
version : "3"
services:
  mariadb:
    image: mariadb
    restart: always
    ports:
      - 3306:3306
    volumes:
      - "./mariadb:/var/lib/mysql"
      - "./initdb.d:/docker-entrypoint-initdb.d"
    environment:
      - MYSQL_ROOT_PASSWORD=nekodamashi
      - MYSQL_DATABASE=test
      - MYSQL_USER=hiro
      - MYSQL_PASSWORD=nyanko

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

  php533:
    build: ./php533
    volumes:
      - "./html:/var/www/html"
    restart: always
    ports:
      - "80:80"
    depends_on:
      - mariadb
-------------------------

コンテナイメージのbuild

# docker-compose build php533

キャッシュを使わずに再buildする場合は下記

# docker-compose build --no-cache php533

コンテナ開始/再起動

# docker-compose up -d

コンテナ停止

# docker-compose stop

コンテナ開始(停止したコンテナのスタート)

# docker-compose start

コンテナを停止して削除

# docker-compose down

基本のdockerコマンド

基本操作

イメージ検索

# docker search ubuntu

イメージ取得

# docker pull ubuntu

コンテナ作成

# docker run --name container_name -it ubuntu /bin/bash

コンテナ確認

# docker ps

コンテナ操作

# docker exec -it container_name /bin/bash

コンテナ起動

# docker start container_name

コンテナ停止

# docker stop container_name

コンテナ削除

# docker rm container_name

イメージ確認

# docker images

イメージ削除

# docker rmi ubuntu

イメージ作成

Dockerfile作成

※古いWebアプリを動かすためにPHP5環境を構築する

# mkdir php533
# vi php533/Dockerfile
----------------
FROM centos:7
ENV PHP_VERSION 5.3.3

# タイムゾーンをJSTに変更
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ENV TZ Asia/Tokyo

# apache + PHP5 インストール
RUN yum install -y php php-devel php-mbstring php-pdo \
php-gd php-mysql php-pgsql php-xml php-mcrypt php-pecl-zip
RUN yum install -y httpd
RUN yum clean all

# 80ポートでapache起動
EXPOSE 80
CMD ["/usr/sbin/apachectl","-DFOREGROUND"]
----------------

イメージビルド

# docker build -t php533 . -f ./php533/Dockerfile

コンテナ起動

# docker run --name container_name -d -p 8080:80 php533

Ubuntu20.04 FFmpeg + AviSynth + JoinLogoScp + delogo で自動CMカットエンコード環境構築

avisynth+ の公式インストール手順
AviSynthPlus/posix.rst at master · AviSynth/AviSynthPlus · GitHub


avisynth+ のインストール

# apt update
# apt install build-essential cmake git ninja-build checkinstall

# cd /usr/local/src
# git clone --depth 1 -b v3.6.1 https://github.com/AviSynth/AviSynthPlus.git
# cd AviSynthPlus
# mkdir avisynth-build
# cd avisynth-build
# CC=gcc-9 CXX=gcc-9 LD=gcc-9 cmake ../ -G Ninja
# ninja
# ninja install
# ldconfig


ffmpeg のインストール

# apt install nasm libfdk-aac-dev libx264-dev libx265-dev

# cd /usr/local/src
# git clone --depth 1 -b n4.3.1 git://git.ffmpeg.org/ffmpeg.git
# cd ffmpeg
# ./configure \
      --enable-gpl \
      --enable-version3 \
      --disable-doc \
      --disable-debug \
      --enable-avisynth \
      --enable-libfdk-aac \
      --enable-libx264 \
      --enable-libx265 \
      --enable-nonfree
# make
# make install


・l-smash のインストール

# cd /usr/local/src
# git clone --depth 1 https://github.com/l-smash/l-smash.git
# cd l-smash
# ./configure --enable-shared
# make
# make install
# ldconfig


・l-smash-works のインストール(avisynth で l-smash を使用するためのプラグイン

# apt install python3-pip
# pip3 install meson==0.62.0

# cd /usr/local/src
# git clone --depth 1 -b 20200728 https://github.com/HolyWu/L-SMASH-Works.git
# cd L-SMASH-Works/AviSynth
# LDFLAGS="-Wl,-Bsymbolic" meson build
# cd build
# ninja -v
# ninja install
# ldconfig


・JoinLogoScpTrialSet for Linux and Avisynth+3.5.x のインストール
https://github.com/tobitti0/JoinLogoScpTrialSetLinux

# cd /usr/local/src
# git clone --depth 1 --recursive https://github.com/tobitti0/JoinLogoScpTrialSetLinux.git
# cd JoinLogoScpTrialSetLinux/modules/chapter_exe/src/
# make
# cp -a chapter_exe /usr/local/bin/.
# cd ../../logoframe/src/
# make
# cp -a logoframe /usr/local/bin/.
# cd ../../join_logo_scp/src/
# make
# cp -a join_logo_scp /usr/local/bin/.


・join_logo_scp の動作確認

# cd ~
# vi join_temp.avs
TSFilePath="GR27_test.ts"
LWLibavVideoSource(TSFilePath, repeat=true, dominance=1)
AudioDub(last,LWLibavAudioSource(TSFilePath, av_sync=true))

# chapter_exe -v join_temp.avs -oa temp_inscp.txt
# logoframe join_temp.avs -logo GR27.lgd -oa temp_inlogo.txt
# join_logo_scp -inlogo temp_inlogo.txt -inscp temp_inscp.txt -incmd JL_標準.txt -o temp_join_logo_scp.txt

# cat temp_join_logo_scp.txt
※Trim情報が記載されていること


・透過性ロゴ フィルタ for AviSynth+ 3.5.x & Linux のインストール
https://github.com/tobitti0/delogo-AviSynthPlus-Linux

# apt install gcc-9 g++-9

# cd /usr/local/src/
# git clone --depth 1 https://github.com/tobitti0/delogo-AviSynthPlus-Linux.git
# cd delogo-AviSynthPlus-Linux/src
# make CC=gcc-9 CXX=gcc-9 LD=gcc-9
# make install
# ldconfig


・delogo の動作確認

# cd ~
# vi delogo_temp.avs
TSFilePath="GR27_test.ts"
LWLibavVideoSource(TSFilePath, repeat=true, dominance=1)
AudioDub(last,LWLibavAudioSource(TSFilePath, av_sync=true))
EraseLOGO(logofile="GR27.lgd", interlaced=true)

# ffmpeg -f avisynth -i delogo_temp.avs -c:v  libx264 -c:a libfdk_aac GR27_test.mp4

Gitの使い方

本番環境Git

$ cd ~/
$ mkdir local_git
$ cd local_git
$ git init
$ touch test.txt
$ git add test.txt
$ git commit -m 'first commit'

更新管理用Gitの作成

$ cd ~/
$ mkdir remote_git
$ cd remote_git
$ git clone --bare ~/local_git/ .

本番環境Git

$ cd ~/local_git
$ touch test2.txt
$ git add test2.txt
$ git commit -m 'first commit'
$ git remote add origin ~/remote_git/
$ git push origin master

テスト環境Git

$ cd ~/
$ mkdir test_git
$ cd test_git
$ git clone ssh://git@192.168.0.24/~/remote_git/ test_git/

コマンド早見表
https://qiita.com/kohga/items/dccf135b0af395f69144