2018-10-28

PKG_CONFIG_PATHを使用したビルド

複数のバージョンのライブラリをインストールしたいなどの場合, バージョンごとにインストール先のディレクトリを分けることがある. その場合に, そのライブラリをリンクして別のソフトをビルドする方法をメモしておく.

ライブラリ (この例ではx264) のビルド・インストールをする. 以下の例では, /usr/local/x264/2018092の下にインストールする設定でビルド・インストールする.

$ mkdir b && cd b
$ ../configure --prefix=/usr/local/x264/20180923
$ make
$ sudo make install

上記のライブラリをリンクするソフト (この例ではffmpeg) のビルド・インストールをする.

$ mkdir b && cd b
$ PKG_CONFIG_PATH=/usr/local/x264/20180923/lib/pkgconfig: ../configure --enable-libx264 --prefix=/usr/local/ffmpeg/4.0.git
$ make
$ sudo make install
例で使用したffmpegでは --extra-cflags--extra-ldflagsというオプションでx264のパスを設定することもできるが, pkg-configを使用したほうが, よりライブラリ開発者の意図した設定でビルドすることができる.

あとは, 以下のようなラッパーを用意しておく.

#! /bin/bash
export LD_LIBRARY_PATH=/usr/local/ffmpeg/4.0.git/lib:/usr/local/x264/20180923/lib:
exec /usr/local/ffmpeg/4.0.git/bin/"$(basename "$0")" "$@"

2018-10-21

EL7にてユーザーのpublic_htmlを公開する手順

Scientific Linux 7 (CentOS 7と同様にRedhat Enterprise Linux 7のクローン, 以下EL7) において, ユーザーのpublic_html下にあるコンテンツをApacheで公開するときの手順をまとめる.

Apacheのインストール

$ sudo yum install httpd

Apache上の設定

$ sudoedit /etc/httpd/conf.d/userdir.conf
以下のように disable の部分をコメントアウトし, 代わりに public_html の箇所を有効にする.
<IfModule mod_userdir.c>
    # UserDir disabled
    UserDir public_html
</IfModule>

SELinuxの設定

$ restorecon -R ~/public_html
$ sudo setsebool -P httpd_enable_homedirs 1
EL7ではデフォルトでhttpd_enable_homedirsが無効に設定されているので, これを有効にする必要がある.

Wirewalldの設定

$ sudo firewall-cmd --add-service=http
これでアクセスできることを確認したのち, 以下のコマンドでパーマネントな設定にする.
$ sudo firewall-cmd --permanent --add-service=http

2018-10-20

新規インストールしたサーバーにSSHの公開鍵認証でログインできない

新しくインストールしたScientific Linux 7 (CentOSと同様にRedhat Enterprise Linuxのクローン) サーバーに公開鍵認証をつかってSSHログインしようとすると, なぜか公開鍵をつかってくれない...

クライアント側のデバッグ情報を ssh -vvv で表示.

  debug1: Offering public key: RSA SHA256:xxxx /home/dir/.ssh/id_rsa
  debug3: send_pubkey_test
  debug3: send packet: type 50
  debug2: we sent a publickey packet, wait for reply
  debug3: receive packet: type 51
  debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
  debug2: we did not send a packet, disable method

サーバー側にデバッグ設定を追加. ファイル

LogLevel DEBUG
サーバー側のログ /var/log/secure
Oct 20 13:37:14 host sshd[xxxx]: debug1: trying public key file /home/xxxx/.ssh/authorized_keys
Oct 20 13:37:14 host sshd[xxxx]: debug1: Could not open authorized keys '/home/xxxx/.ssh/authorized_keys': Permission denied

結局のところ, SELinuxが原因だった. .sshを古いマシンからコピーしたので, 正しくコンテクストが設定されていなかった.

restorecon -R ~/.ssh
これまでは, chmodだけで良かった...
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

2018-10-07

An alternative script for Dropbox

Dropboxが使えなくなるので, 代替のツールを探している. やりたいことは, 自宅サーバ上と別のPCとの間のファイル同期なので, とりあえず, rsyncをcronで実行して, 同期を取ることにした.

以下のようなスクリプトを用意しておき, 各PCでcronから呼び出す.

#! /bin/bash

cd "$(dirname "$0")"

rsync=(rsync -aku --backup --backup-dir .rsync-backup --suffix="-$(date +%Y%m%d-%H%M)" --exclude '*~' --exclude '.*.sw*' --exclude .rsync-backup "$@")

dirs=()
test "$HOSTNAME" != s1.example.com && dirs=("${dirs[@]}" s1.example.com:rsync/)
test "$HOSTNAME" != s2.example.com && dirs=("${dirs[@]}" s2.example.com:rsync/)
# and more servers...

# receiving
for d in "${dirs[@]}"; do
 "${rsync[@]}" "$d"/ ./
done

# sending
for d in "${dirs[@]}"; do
 "${rsync[@]}" ./ "$d"/
done
うーん, ファイルの削除のためにオプション--delをつけると, 新しいファイルが消えてしまう...

なお, 以下のサービスが代替候補.

  • pCloud - Githubにクライアントプログラムが出ていて, ソースからビルドして使用する.
  • Mega
  • Spideroak - 無料ではなくなった???

2018-10-06

自作PC組み立て

概要

1年位前に, OBS-Studioをつかう目的で, 古いPCの部品を入れ替えて, 新しいPCを組み立てた. 今でも問題なく動いているので, そのときに購入した部品を紹介する. なお, 自分用ではない. 使用頻度は, 週に半日くらい.

PCIおよびPCIEのカードでカメラからの映像をキャプチャし配信することが目的. 映像は複数あって, CPU上でスイッチする. 1K程度の映像を処理する. OSには, 安定していると期待してScientific Linux 7を選んだ.

使用部品

以下の部品を新たに購入した.

CPU: Intel Core i7-7700

Memory: Team TED48G2400C16BK

Mother board: Asus H270-Pro
PCI, PCIEのボードをいくつか載せたかったので, これにした.

Display port to VGA変換アダプタ
自分でつかうならHDMIかDisplay Portのモニタを選ぶのだが... 予算の都合でモニタは古いアナログのまま. この種の変換アダプタは故障が心配なので, レビューを注意深く確認した. この製品は未だ故障していない.

Blackmagic Intensity Pro 4K
業務用の製品も出している会社なので, Linuxのサポートも謳っており, OBS-Studioでサポートしていることを確認して, 購入した. Scientific Linux 7へのインストールはとても苦労した. Kernelのアップデートでも, カーネルモジュールのための色々な作業が必要だ.