VyOS1.5 OpenVPN設定

基本のコマンド

設定の確認
$ show configuration
$ show configuration commands

設定モードに移行
$ configure

設定の追加/削除
# set ***
# delete ***

設定反映
# commit

設定保存
# save

基本設定

# set service ssh port '22'
# set system time-zone Asia/Tokyo
# set interfaces ethernet eth0 address '192.168.0.102/24'
# set protocols static route 0.0.0.0/0 next-hop 192.168.0.1

証明書の作成

# run generate pki dh install dh-1
# run generate pki openvpn shared-secret install shared-1
# run generate pki ca install ca-1
# run generate pki certificate sign ca-1 install srv-1
# run generate pki certificate sign ca-1 install client-1
※クライアント証明書は必要な数だけ作成
※show configuration commands コマンドで証明書内容やキー内容を確認可能

OpenVPN設定

# set interfaces openvpn vtun0 encryption cipher 'aes256'
# set interfaces openvpn vtun0 hash 'sha512'
# set interfaces openvpn vtun0 mode 'server'
# set interfaces openvpn vtun0 local-port '1195'
# set interfaces openvpn vtun0 protocol 'tcp-passive'
# set interfaces openvpn vtun0 server subnet '192.168.100.0/24'
# set interfaces openvpn vtun0 openvpn-option '--client-to-client'
# set interfaces openvpn vtun0 openvpn-option '--mssfix 1280'
# set interfaces openvpn vtun0 use-lzo-compression
# set interfaces openvpn vtun0 tls ca-cert ca-1
# set interfaces openvpn vtun0 tls certificate srv-1
# set interfaces openvpn vtun0 tls dh-params dh-1

NAT設定

# set nat destination rule 100 destination address '192.168.100.100'
# set nat destination rule 100 inbound-interface name vtun0
# set nat destination rule 100 translation address '192.168.0.100'
# set nat destination rule 101 destination address '192.168.100.101'
# set nat destination rule 101 inbound-interface name vtun0
# set nat destination rule 101 translation address '192.168.0.101'
# set nat destination rule 102 destination address '192.168.100.102'
# set nat destination rule 102 inbound-interface name vtun0
# set nat destination rule 102 translation address '192.168.0.102'
# set nat destination rule 103 destination address '192.168.100.103'
# set nat destination rule 103 inbound-interface name vtun0
# set nat destination rule 103 translation address '192.168.0.103'
# set nat destination rule 104 destination address '192.168.100.104'
# set nat destination rule 104 inbound-interface name vtun0
# set nat destination rule 104 translation address '192.168.0.104'
# set nat destination rule 105 destination address '192.168.100.105'
# set nat destination rule 105 inbound-interface name vtun0
# set nat destination rule 105 translation address '192.168.0.105'
# set nat destination rule 106 destination address '192.168.100.106'
# set nat destination rule 106 inbound-interface name vtun0
# set nat destination rule 106 translation address '192.168.0.106'
# set nat destination rule 107 destination address '192.168.100.107'
# set nat destination rule 107 inbound-interface name vtun0
# set nat destination rule 107 translation address '192.168.0.107'
# set nat destination rule 108 destination address '192.168.100.108'
# set nat destination rule 108 inbound-interface name vtun0
# set nat destination rule 108 translation address '192.168.0.108'
# set nat source rule 100 source address '192.168.100.0/24'
# set nat source rule 100 translation address '192.168.0.107'
# set nat source rule 100 outbound-interface name eth0

Ubuntu22 KVM環境の構築

日本語化

# apt -y install language-pack-ja-base language-pack-ja
# localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja" 
# source /etc/default/locale

パッケージインストール

# apt install qemu-kvm libvirt-daemon libvirt-daemon-system libvirt-clients virtinst libosinfo-bin bridge-utils ovmf

ブリッジ作成

# vi /etc/netplan/01-network-manager-all.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s1: # ここを自分の実際のデバイスに置き換える
      dhcp4: no
  bridges:
    br0:
      interfaces: [enp0s1] # ここも自分の実際のデバイスに置き換える
      addresses: [192.168.1.2/24] # 任意の固定IPアドレスを設定
      gateway4: 192.168.1.1 # ゲートウェイのIPを設定
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4] # DNSサーバーのIPを設定
注意: enp0s1 や br0 などのインターフェース名は、自分の環境に合わせて変更してください。

# sudo netplan apply
# systemctl restart systemd-networkd

AlmaLinux9 Windows11をKVMでインストール

事前準備

Windows11のダウンロード
https://www.microsoft.com/en-us/software-download/windows11
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
必要パッケージのインストール
# dnf install edk2-ovmf
# dnf install swtpm swtpm-tools

Windows11のインストール

仮想ディスクの作成
# mkdir /var/lib/libvirt/images/win11
# cd /var/lib/libvirt/images/win11
# qemu-img create -f qcow2 win11pro.qcow2 40G
OVMFファイルのコピー
# cp /usr/share/edk2/ovmf/OVMF_VARS.secboot.fd .
# cp /usr/share/edk2/ovmf/OVMF_CODE.secboot.fd .
インストール
# virt-install \
--name Windows11pro \
--ram 4096 \
--disk path=/var/lib/libvirt/images/win11/win11pro.qcow2 \
--cpu host-passthrough \
--vcpus=4 \
--os-variant=win11 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0,password=foobar,port=5907,keymap=en-us \
--video virtio \
--cdrom /mnt/storage-2/temp/Win11_22H2_Japanese_x64v2.iso \
--features kvm_hidden=on,smm=on \
--tpm backend.type=emulator,backend.version=2.0,model=tpm-tis \
--boot loader=/home/images/OVMF_CODE.secboot.fd,loader_ro=yes,loader_type=pflash,nvram_template=/home/images/OVMF_VARS.secboot.fd 

VNCクライアントで接続し、インストールを行う

mdadm RAID5構築方法

mdadm動作試験用パーティションの作成

# parted -s -a optimal /dev/vdb -- mklabel gpt mkpart p1 ext4 0G 1G mkpart p2 ext4 1G 2G mkpart p3 ext4 2G 3G  mkpart p4 ext4 3G 4G

RAID5作成

# mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/vdb1 /dev/vdb2 /dev/vdb3
# mdadm --detail /dev/md1
# mkfs.ext4 /dev/md1
# mount /dev/md1 /mnt
# df -h
# umount /mnt

故障とディスク交換のシミュレーション

# mdadm --manage /dev/md1 --fail /dev/vdb1
# mdadm --manage /dev/md1 --remove /dev/vdb1
# mdadm --manage /dev/md1 --add /dev/vdb1
# mdadm --detail /dev/md1

ディスク追加

# mdadm --manage /dev/md1 --add /dev/vdb4
# mdadm --detail /dev/md1
※スペアディスクとして追加される。RAIDディスクが故障するとスペアディスクがRAIDディスクに組み込まれる。
# mdadm --grow --raid-devices=4 /dev/md1
# mdadm --detail /dev/md1

ディスク削除

※増やすのは簡単だが削除は大変なので、一度別ディスクにバックアップしてからRAIDを組み直してデータを書き戻した方が無難

RAIDアレイ構成情報のバックアップ

# mdadm --detail --scan /dev/md1 > /etc/mdadm.conf

RAIDアレイの削除と復元

# mdadm --stop /dev/md1
# mdadm --detail /dev/md1
# mdadm --assemble --scan --verbose
# mdadm --detail /dev/md1
※別システムへの移行時等に使用
※RAIDディスク上に保存された構成情報を自動で読み取り、RAIDアレイを自動で再構築する

RAIDアレイとデータの完全削除

# mdadm --stop /dev/md1
# mdadm --zero-superblock /dev/vdb1
# mdadm --zero-superblock /dev/vdb2
# mdadm --zero-superblock /dev/vdb3
# mdadm --zero-superblock /dev/vdb4

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