ラベル linux の投稿を表示しています。 すべての投稿を表示
ラベル linux の投稿を表示しています。 すべての投稿を表示

2024-09-21

Postfix に DKIM の設定を行う方法

はじめに

DMARCでメールの検証を行うには、SPFとDKIM両方を設定しないといけない。 この記事では、DKIMの設定を取り上げる。

DKIMの概要

SPF が配送もとの IP アドレス (つまりヘッダーの `Received: from helo-host.example.org (resolved-host.example.org [192.0.2.27])` の部分) を検証するのに対して、 DKIM では、メールを配送する際に、主要なヘッダー情報 (`Date`, `From`, `Reply-To`, `To`, `Subject` など) に対して署名を付加する。 公開鍵を DNS の TXT レコードに設定することになっており、受信側のメールサーバーで署名を検証する。

SPF と同様に DNS レコードを使ってメールを検証するので、 DNS が改ざんされると第三者がなりすましメールを送ることができてしまう。また、メール本文の改ざんは DKIM では検知できない。

設定手順

このセクションでは、 EL9 (AlmaLinux 9 や Rocky Linux 9) 上の Postfix で DKIM 署名を付加するための設定を説明する。 EL8 でもほぼ同様の方法で設定できる。

OpenDKIM のインストール

前もって CRB と EPEL をインストールしておき、以下のコマンドで OpenDKIM をインストールする。
sudo dnf --enablerepo=epel,crb install opendkim opendkim-tools

キーの作成

cd $(mktemp -d)
opendkim-genkey --directory ./ --domain example.com --selector 20240921 --bit 2048 --append-domain
sudo cp 20240921.private /etc/opendkim/keys/ -i
sudo chown opendkim:opendkim /etc/opendkim/keys/20240921.private

DNSレコードの設定

公開鍵が記載されたファイル 20240921.txt が生成されるので、これを参照してDNSレコードを設定する。 上記の例の場合、 20240921._domainkey.example.com. の TXT レコードを設定する。 TXT以降はカッコでかこまれてダブルクオートがついているが、例えば Cloudflare の DNS 場合は、カッコ・ダブルクオート・改行を取って Content に登録する。

設定ファイルの編集

sudo cp /etc/opendkim.conf /etc/opendkim.conf-20240921
sudoedit /etc/opendkim.conf
以下のように編集して保存する。
@@ -36,7 +36,7 @@
 ##  Selects operating modes. Valid modes are s (sign) and v (verify). Default is v.
 ##  Must be changed to s (sign only) or sv (sign and verify) in order to sign outgoing
 ##  messages.
-Mode	v
+Mode	sv
 
 ##  Log activity to the system log.
 Syslog	yes
@@ -101,12 +101,12 @@
 ##  Gives the location of a file mapping key names to signing keys. In simple terms,
 ##  this tells OpenDKIM where to find your keys. If present, overrides any KeyFile
 ##  directive in the configuration file. Requires SigningTable be enabled.
-# KeyTable	/etc/opendkim/KeyTable
+KeyTable	/etc/opendkim/KeyTable
 
 ##  Defines a table used to select one or more signatures to apply to a message based
 ##  on the address found in the From: header field. In simple terms, this tells
 ##  OpenDKIM how to use your keys. Requires KeyTable be enabled.
-# SigningTable	refile:/etc/opendkim/SigningTable
+SigningTable	refile:/etc/opendkim/SigningTable
 
 ##  Identifies a set of "external" hosts that may send mail through the server as one
 ##  of the signing domains without credentials as such.

sudoedit /etc/opendkim/KeyTable
以下の1行を加える。
20240921._domainkey.example.com example.com:20240921:/etc/opendkim/keys/20240921.private

sudoedit /etc/opendkim/SigningTable 
以下の1行を加える。
*@example.com 20240921._domainkey.example.com

OpenDKIMを起動する

sudo systemctl enable --now opendkim.service
sudo systemctl status opendkim.service

Postfixの設定

cd /etc/postfix/
sudo cp main.cf main.cf-20240921
sudoedit main.cf
以下の3行を追加する。
smtpd_milters = local:/run/opendkim/opendkim.sock
non_smtpd_milters = local:/run/opendkim/opendkim.sock
milter_default_action = accept
もしローカルからしか配送しないなら、 smtpd_milters は設定しなくてよさそう。

Postfixを再起動する

グループも設定したので、再起動する。
sudo systemctl restart postfix
sudo systemctl status postfix

動作確認

TXTレコードが設定されているかどうか確認する。
dig txt 20240921._domainkey.example.com
他のメールサーバーへ送信してみる。 Gmailなどへ送付すれば、「メッセージのソースを表示」からDKIMの検証状況を確認できる。
date -R | mutt -s 'DKIM key should be added' user@example.org
もし問題があれば、 /etc/postfix/main.cf をもとに戻して確認しよう。

小言

SSLのように外部の機関に認証してもらう必要がなく、コストがかからないのがありがたい。

参考

2024-07-16

Screenの設定により、Screen上のVimの起動時に誤動作

Screenの中でVimを起動するとなぜか変な文字が入力されるという問題が起こっていたのだけれど、ようやく回避方法がわかった。

前提として、 .screenrc に以下のように設定して Ctrl+G で screen のコマンドを入力するようにしていた。 これを他のキーに変えると問題が起こらない。

.vimrc に以下の記述を加えると、問題が起こらなくなった。

if &term=="screen.xterm-256color"
        set t_RB=
endif
このことから、t_RB (request terminal background color) が悪さをしているらしい。 おそらく、リクエストを出すと screen を通り越して端末に伝わり、端末が結果を返すときに、私が割り当てた Ctrl+G のコードが送られ、それを screen が処理してしまうのだろう。

最終的に、以下のように記述することにした。

if &term=="screen.xterm-256color"
        " For .screenrc setting 'escape ^Ww', t_RB caused an issue.
        " Let's disable all request-type termcap settings.
        set t_RB= t_RF= t_RC= t_RI= t_Ri= t_RS= t_RT= t_RV=
endif

2023-05-03

iptables hashlimitを使ったSSH攻撃のログ削減

SSHサーバーを運用していると、ユーザー名・パスワードの総当たり攻撃を受けることがある。ログが膨らんで嫌なので、減らす方法をメモする。

接続の試行を複数回行わないと、SSH接続を受け付けなくする。これにより、SSHサーバーが走っていることに気づかれない。この代償として、自身で接続するときには何度かSSHコマンドを打ち直す必要がある。

以下の例だと、最初の10回分の接続はドロップする。必要に応じて、sourceのネットワークを限定するか、リミット値を調整すると良いだろう。

sudo iptables -I INPUT 1 -p tcp -m tcp -m state --state NEW --dport 22 -m hashlimit --hashlimit-upto 50/hour --hashlimit-burst 10 --hashlimit-mode srcip,dstport --hashlimit-name ssh-limit -j DROP

ちなみに、--hashlimit-burst2くらいに設定すると、SSH接続するときに数秒の待ち時間で接続できるが、SSH攻撃はさほど減らなかった。

2023-02-20

avrdude: target doesn't answer というエラーが出るときの対処

問題

ATtiny44Aを使った回路を組んだところ、以下のようなエラーが出て、プログラムできなくて困っていた。
$ avrdude -v -c usbasp -p t44 -U signature:r:/dev/stdout:i
avrdude: error: program enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

このようなトラブル時に何を試行錯誤すると良いのかも含め、備忘録として残しておく。

解決方法

結局のところ、SCKの周波数が高いことが原因だったようで、-B 10をつけて解決した。

以下が実行例。

$ avrdude -B 10 -F -c usbasp -p t44 -U signature:r:/dev/stdout:i

avrdude: set SCK frequency to 93750 Hz
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9207 (probably t44)
avrdude: reading signature memory:

Reading | ################################################## | 100% 0.00s

avrdude: writing output file "/dev/stdout"
:030000001E920746
:00000001FF

avrdude: safemode: Fuses OK (E:FF, H:DF, L:62)

avrdude done.  Thank you.

試行錯誤

情報通りに-Fをつけて試しにsignatureを読んでみると、以下のように変なdevice signatureが表示され、この値が毎回変わる。
$ avrdude -F -c usbasp -p t44 -U signature:r:/dev/stdout:i

avrdude: error: program enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x37f912
avrdude: Expected signature for ATtiny44 is 1E 92 07

avrdude done.  Thank you.

データシートを再確認し、ATtiny44AはATtiny44と同じsignatureが書かれているようなので、-p t44でプログラムできることを確かめた。配線間違いが心配になり、配線を再確認したが異常は見つからない。

Verboseオプションをつけて表示される内容を確認した。 すると、以下のような情報が表示されていたので、SCKを遅くしたところ動作した。

avrdude: auto set sck period (because given equals null)

2022-09-01

RPMとDPKGとの比較

最近Ubuntuを使うことが出てきたが、パッケージツールの使い方で苦労している。RPMとDPKGとの違いをまとめておく。
rpm dpkg
rpm -qa dpkg -l
rpm -ql pkg-name dpkg -L pkg-name
rpm -qi pkg-name dpkg -s pkg-name
rpm -e pkg-name dpkg -r pkg-name
rpm -qf /path/to/file dpkg -S /path/to/file
DNFとAPTの比較もまとめておく。
dnf apt
dnf provides */file apt-file search file
なお、apt-fileを使用するには、パッケージをインストールする必要がある。
sudo apt install apt-file
sudo apt-file update

外部のレポジトリは、 add-apt-repository というコマンドで追加できる。software-properties-commonというパッケージをインストールする。

sudo apt install software-properties-common

2022-08-24

MOTU M2 on Fedora 35

Fedora 35でdnf updateにより、MOTU M2を使用できなくなった。 どうやらalsaの更新が原因だった。

Googleで検索していると、以下のバグレポートと修正を見つけた。 /

以下のようにalsa-ucm-confの修正をパッチにして、手元の設定に当てた。

gh repo clone alsa-project/alsa-ucm-conf
cd alsa-ucm-conf/
git show 3a6acaa509 > /tmp/motu-m2-ucm2.patch
cd /usr/share/alsa
sudo patch -p1 < /tmp/motu-m2-ucm2.patch

2022-02-28

ウインドウサイズをxdotoolで設定する方法

xdotoolを使うと、ウインドウのサイズをコマンドから設定できる。1920x1080などきりのいい大きさに設定することで、ソフトの使用方法の解説動画を作る際に役立つだろう。
xdotool search --name 'name of the window' windowsize %@ 1920 1080

2022-02-27

FFmpegでPulseAudio入力の量子化ビット幅を設定する方法

FFmpegでPulseAudioの音声を録音する際、デフォルトでは16ビットになる。 24ビットや32ビットに設定するには、 -c:a オプションを使用する。

例えば、以下のようなコマンドで、32ビットで録音することができる。

-c:a pcm_s32le -f pulse -i alsa_input.device_name.analog-stereo -c pcm_s32le output.wav

なお、 -cオプションを使用した場合、中途半端に設定が変わるようで、左右のデータが混じったりと正しく動作しない。 ソースコードを追ったところ、pulse audioへはS16LEを要求し、受け取ったデータを -c で設定したフォーマットでそのまま処理するように見える。

2021-10-11

OBS Studioの音声モニターをGoogle Meetへ送る方法

NDIからの音声を、Linux上のOBS Studioの音声モニターを経由して、Google Meetへ送る方法を考えている。 まだ音声が聞こえるかどうかまでは試していないが、アイデアを記事に残しておく。

手順

  1. loopbackモジュールをロードする。
    pactl load-module module-loopback sink=Virtual1
  2. OBS StudioとGoogle Meetを起動する。
  3. pavucontrolを起動し、OBS Studioのモニター出力をVirtual1へ切り替え、Google Meetの入力をVritual1.monitorへ切り替える。 (もしかすると、OBS Studioでモニターデバイスを予め設定しておく方が良いかもしれない。)

その他

おそらく、Zoomのように.monitorを除外するようなアプリケーションでは、この方法は使用できない。

2021-09-24

Redhat Enterprise Linux 9で何が新しくなるのか

Redhat Enterprise Linuxのアルファ版は、今の所Fedora 34がベースとなっているらしい。 Fedora 34を使用していてどんな違いがあるのか、メモを残しておく。

この記事は未完成で、これから加筆してゆく予定。

  • Kernel version: 4.18.0 -> 5.13.16
  • iostatでdiscard数・サイズも表示されるようになる。
  • qt6が加わる。
  • すべてのオーディオがPipewireを通るようになる。 [記事] 使用する上で何が変わるのか良くわからないが、音響を扱うなら知っておいて損はないだろう。
  • 2021-09-09

    Bashにて複数行の貼り付けが1コマンドになる

    Fedora 34のBashを使っていると、中ボタンクリックで改行付のコマンドを貼り付けると、コマンドが実行されなくなった。 例えば、
    pwd
    ls
    
    というテキストを貼り付けると、
    [user@localhost ~]$ pwd
    ls
    
    と表示され、改行を含めて一つのコマンドとしてプロンプトに入ってしまう。このあとEnterキーを押せば各行が実行されるのだが、これまで中ボタンクリックだけでコマンドを実行していたので、不便に感じている。

    解決方法は、~/.inputrcに以下の設定を追記する。

    set enable-bracketed-paste off
    起動済のbashの設定を変えるには、以下のコマンドを実行する。
    bind 'set enable-bracketed-paste off'

    参考記事:

    Rocket Lakeでvaapiを使用する方法

    Fedora 34で、Intel第11世代のCore i7でvaapiを使用する方法の概略をメモしておく。

    セットアップの概略

    1. rpmfusionをセットアップする。
    2. ffmpeg などをDNFでインストールする。
    3. libva libva-intel-driver などをDNFでインストールする。
    4. intel-media-driver をソースからビルドする。21.1.3では動作せず、21.2.3にしたら動作した。
      1. rpmfusionからsrpmをダウンロード
        dnf download --source intel-media-driver
      2. ダウンロードしたsrpmを展開
        rpm -Uvh intel-media-driver-21.1.3-1.fc34.src.rpm
      3. specファイルを編集
        vim rpmbuild/SPECS/intel-media-driver.spec
        Version, Source0, %changelog を編集した。
      4. ビルドしてインストールする
        rpmbuild -ba rpmbuild/SPECS/intel-media-driver-21.2.3.spec
        sudo rpm -Uvh /home/kamae/rpmbuild/RPMS/x86_64/intel-media-driver-21.2.3-1.fc34.x86_64.rpm

      使用

      LIBVA_DRIVERS_PATH=/usr/lib64/dri/ \
      LIBVA_DRIVER_NAME=iHD \
      ffmpeg \
      -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_output_format vaapi \
      -i input.mkv -vf 'format=nv12|vaapi,hwupload,deinterlace_vaapi,scale_vaapi=w=1920:h=1080' -c:v h264_vaapi -c:a copy -y output.mp4
      

      これ以外に、ソースからビルドしたOBS Studioでも動作した。

    2021-04-17

    DHCP classless static routesを使用したグローバルIPアドレスによるローカルサーバ接続

    はじめに

    自宅サーバーを運営していて、LANからもサーバーにアクセスしたい場合は、LAN向けにDNSサーバーを立てる方法がよく取られる。 これは、LANの接続点が1個のルーターであり、このルーター上でNATにより自宅サーバーへのアクセスをLANアドレスへ変換するようなネットワーク設定で取られる方法である。 この方法では、DNSサーバーで、自宅サーバーのホスト名を引いた時にLAN内のローカルアドレスを指すように設定しておく。 しかしながら、この方法では、携帯電話などでLANからWANへと移動した際に、古いアドレスがキャッシュに残っていてすぐには名前解決できなくなる。 ルーターによっては、このような設定を行わなくても、WANアドレスでのアクセスもNATでアドレス変換してくれることがあるが、いくつかのルーターではそのようなことができない。

    この記事では、上記の問題を回避する別の方法を紹介する。 LAN上でホストにIPアドレスを割り振る際にDHCPを使用するが、DHCPのオプション121で静的ルーティングテーブルを送ることができる。 サーバーのアドレスが頻繁には変更されない場合、ルーティングテーブルを送りつけることで、自宅サーバーのグローバルIPアドレスをクライアント側で実際のサーバーへルーティングすることができ、グローバルIPアドレスのままで自宅サーバーへ接続できるようになる。

    Dnsmasq

    今回の記事では、DHCPサーバーとしてdnsmasqを使用する。 サーバーのグローバルIPアドレスが203.0.113.40で、LAN上でのサーバーアドレスが192.168.0.2である場合、以下のように/etc/dnsmasq.confに設定する。
    dhcp-option=203.0.113.40/32,192.168.0.2
    

    ネットワークデバイスの設定

    雑な方法だが、NICにグローバルIPアドレスを追加すると、203.0.113.40宛のパケットが自身宛だと思い込み、通信出来るようになる。
    sudo ip addr add 203.0.113.40/32 dev enp11s0
    

    クライアント側での確認

    $ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 eth1
    203.0.113.40    192.168.0.2     255.255.255.255 UGH   100    0        0 eth1
    192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth1
    

    2021-01-30

    FFplay disappears when loosing focus

    デュアルディスプレイ環境で、片方にffplayで動画を再生しもう一方で作業しようとすると、ffplayがフォーカスを失ったときにウィンドウが消えるという問題に遭遇した。

    この原因は、SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSSというヒントが設定されているためで、これを無効にすればよい。

    以下のようにffplay.cに1行加えることで、問題を解決できた。

    diff --git a/fftools/ffplay.c b/fftools/ffplay.c
    index 9ff0425163..2e3d7a18cc 100644
    --- a/fftools/ffplay.c
    +++ b/fftools/ffplay.c
    @@ -3755,6 +3755,7 @@ int main(int argc, char **argv)
                 flags |= SDL_WINDOW_RESIZABLE;
             window = SDL_CreateWindow(program_name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, default_width, default_height, flags);
             SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
    +        SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0");
             if (window) {
                 renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
                 if (!renderer) {
    
    

    2020-12-10

    CentOS8でグラフィカルログインを有効にする

    手順

    gdmをインストールして、getty@tty1を無効に設定すれば良い。
    $ sudo dnf install gdm
    $ systemctl set-default graphical.target
    

    メモ

    gdmをインストールするだけでは、gdmが有効になっているにも関わらず、gdmが起動しなかった。

    2020-11-28

    SSH経由で遠隔のホストからPulseAudioの音を出す方法

    TigerVNC viewerはオプション-viaを使用することで簡単にSSH経由で遠隔のVNCサーバーへ接続することができる。 残念なことに、VNCのプロトコルには音声を転送するプロトコルが定義されていないので、たいていのVNCサーバー・クライアントでは音声を送ることが出来ない。

    このページでは、サーバー上で、vncserverを使用して起動したVNCのセッション内で音声を再生するアプリケーションを起動し、遠隔のクライアントでその音声を聴く方法を説明する。

    クライアント側の設定

    pactl load-module module-native-protocol-tcp 'auth-ip-acl=127.0.0.1'
    もしauth-ip-aclに複数のホスト・ネットワークを設定したい場合、;で区切って記載する。

    サーバー側の設定

    環境変数PULSE_SERVERを以下のように設定する。
    export PULSE_SERVER=tcp:127.0.0.1:4715
    ポート番号4715の部分は、後述のトンネリングの設定とあわせておけば何でも良い。 この設定をした上で、PulseAudioを使用するアプリケーションを起動する。

    SSHトンネリングの設定

    クライアント側から、以下のようにトンネルを掘る。
    ssh -NfR 4715:127.0.0.1:4713 server.example.net

    制限事項

    サーバー側で環境変数が設定されたアプリケーションの音声しか送ることが出来ないため、既に起動しているアプリケーションの音声は送ることが出来ない。 従って、例えばx11vncと併用する使用方法には適していない。 既に起動している (ローカルの) デスクトップの音声を送る場合、以下のページが参考になる。

    2020-11-03

    SSHを通して遠隔にあるLinuxマシンのデスクトップ音声を聴く方法

    はじめに

    SSHでログインできるLinuxマシンのデスクトップ音声を聴く方法を説明する。 X11VNCを使うとデスクトップを操作することが可能だ。しかしながら、VNCには音声を転送する機能が付いていない。このようなとき、音声を圧縮してSSH経由で送ることで、やや遅延があるが、音声を一緒に聴くことができるようになる。

    環境

    接続先は、Pulse Audioが動いており、オーディオデバイスが接続されていることが必要である。 以下の手順は、遠隔ホストとしてScientific Linux 7を使用した。

    手順

    1. まず、出力デバイスのモニターを確認する。最後に.monitorと名前が着いているものが出力デバイスのモニター (出力中の音を入力できる) である。
      $ LANG=C pactl list sources | grep Name
    2. 予め、無音の音声を再生しておく。
      $ ffplay -loglevel error -vn -nodisp -f s16le /dev/zero &
    3. SSHで接続した先でffmpegによりモニターをmp3に変換し、ローカルへパイプして、ffplayで再生する。
      $ input=alsa_output.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo.monitor # 上記で取得したモニターの名前
      $ ssh user@example.com ffmpeg -fflags nobuffer -flags low_delay -loglevel error -f pulse -ac 2 -i ${input} -c:a aac -f flv - | ffplay -fflags nobuffer -flags low_delay -nodisp -loglevel error -f flv -
    ここで重要なのは、ffmpegとffplayそれぞれに-fflags nobuffer -flags low_delayを付けることだ。これらのオプションがなくても機能するが、段々と音声のバッファリングが増え、徐々に遅れが目立ち始める。

    2020-08-30

    Kdenlive 20をScientific Linux 7上でビルド

    EL7でKdenlive 20をビルドするメモ。

    FFmpegをビルド・インストール

    mkdir b
    cd b
    ../configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --arch=x86_64 --enable-libmp3lame --enable-pic --enable-libfreetype --enable-shared --enable-libxcb --enable-libmfx --enable-vaapi --disable-nvenc --enable-libpulse --enable-libx264 --enable-libx265
    make -j8 && sudo make install
    

    SCLのdevtoolset-9をインストール

    Meltをビルド・インストール

    git checkout v6.22.1
    scl enable devtoolset-9 bash
    PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --prefix=/usr/local/mlt-6.22.1
    make -j8 && sudo make install 
    
    注意: sclでbashが起動し、その中でconfigureやmakeを実行する。

    ビルド

    scl enable devtoolset-9 bash
    PKG_CONFIG_PATH=/usr/local/mlt-6.22.1/lib/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH LANG=C cmake3 -DCMAKE_INSTALL_PREFIX=/usr/local/kdenlive-20.08.0 ..
    make && sudo make install
    

    起動スクリプト

    以下のシェルスクリプトを用意する。
    #! /bin/bash
    
    export PATH="/usr/local/kdenlive-20.08.0/bin:/usr/local/mlt-6.22.1/bin:$PATH"
    export LD_LIBRARY_PATH=/usr/local/kdenlive-20.08.0/lib64:/usr/local/mlt-6.22.1/lib:/usr/local/lib:/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib:/opt/rh/devtoolset-9/root/usr/lib64/dyninst:/opt/rh/devtoolset-9/root/usr/lib/dyninst:/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib:
    
    exec /usr/local/kdenlive-20.08.0/bin/kdenlive "$@"
    
    LD_LIBRARY_PATHにはKdenliveのパス、mltのライブラリパス、ffmpegのライブラリパス、devtoolで設定されたパスを記載し、最後に:を付ける。

    QMLのエラー

    以下のようなエラーが出たので、ソースコード中のQMLを修正する。
    qrc:/qml/kdenliveclipmonitor.qml:1:1: module "QtQuick.Controls" version 2.4 is not installed
    
    2.4が新しすぎるのだろうと予想して、インストールされているQt5がどのバージョンまでをサポートしているのか確認する。 どうもqmlファイルがいくつかインストールされているようなので、その中のimportコードを確認する。
    grep -h -r 'import QtQuick.Controls '  /usr/lib64/qt5/qml/QtQuick/Controls.2/ | sort -u
    import QtQuick.Controls 2.2
    import QtQuick.Controls 2.2 as Controls
    
    2.2が使われているようなので、2.42.2に置き換える。 たくさんあるのでsedを使った。
    sed -i 's/^import QtQuick.Controls 2.4$/import QtQuick.Controls 2.2/' $(git grep -l 'import QtQuick.Controls 2.4')
    
    他にもimportを変更してゆく。
    sed -i 's/^import QtQuick 2.11$/import QtQuick 2.9/' $(git grep -l 'import QtQuick.2.11')
    sed -i 's/^import QtQuick.Layouts 1.11$/import QtQuick.Layouts 1.3/' $(git grep -l 'import QtQuick.Layouts ')
    sed -i 's/^import QtQml.Models 2.11$/import QtQml.Models 2.1/' $(git grep -l 'import QtQml.Models ')
    
    qrc:/qml/kdenliveclipmonitor.qml:514:21: Cannot assign to non-existent property "icon"
    
    src/monitor/view/kdenliveclipmonitor.qml中のicon.name (2箇所) を削除した。

    その他

    以下のメッセージでFrei0rが見つからない旨が表示された場合、frei0r-pluginsをインストールしてmltをビルドし直す。
    Missing package: Frei0r effects (frei0r-plugins) provides many effects and transitions. Install recommended
    

    追記

    なぜかeffectsやcompositionsがなにも出てこなかった。 実は、ビルドすると、prefix.shというファイルが生成され、環境変数を設定することになっている。 後日、CentOS 8でKdenliveをビルドしたのだが、このファイルの中身を含んだ起動スクリプトを作成することで、Kdenliveが無事に起動した。

    2020-04-14

    cmake: makeがインストールされていないときのエラー

    CentOS 8にて、CMakeを実行すると、以下のエラーが出て、(最後のエラーだけを見ていて) なかなか解決出来なかったので、メモしておく。
    CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
    CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
    

    原因はmakeがインストールされていないことだったので、以下のコマンドで解決した。

    sudo dnf install make

    2020-04-04

    Git-clone ストレージ容量の削減

    Git-cloneをつかうと、すべての履歴がコピーされるため、時間がかかるし、ストレージ容量をかなり消費する。 クローン元に応じて2種類の方法により消費するストレージを削減することができる。

    ハードリンク - 同じファイルシステムからクローンする場合

    同じファイルシステムからクローンする場合、.git/objects下のデータをハードリンクで作成することで、時間・容量を減らせる。
    git clone --local repository [directory]
    
    objectsのファイルは、一度作成されると中身が書き換えられることはないので、特に使用する上で制約はないはずだ。 Git-fetchで新しいコミットを取り込んだ場合は、新しいファイルが作成されるようだ。 また、元のrepositoryでgit-gcを使った場合など、ハードリンクが切れて、消費する容量は大きくなる可能性がある。

    浅いクローンをつくる - 外部のURLからクローンする場合

    他のファイルシステムや外部のURL (git://...など) からクローンする場合、--depthオプションで浅いクローンを作ることで時間・容量を節約できる。
    git clone --depth 1 repository [directory]
    
    もしローカルのレポジトリからクローンする場合、file://を前につけないと、--depthオプションが無視されてそのままクローンが開始されてしまう。

    浅いクローンでは、変更履歴が取得されないので、履歴を遡るような用途には使用できない。 もし後で履歴が必要になった場合、git fetchで取得することができる。

    もともと、何かのプロジェクトのソースを探していたらgit clone --depthで取得する方法が書かれていてこの方法を見つけたのだが、 git clone --depthについては以下のサイトにわかりやすく書かれている。