memo: app-text/poppler0.68.0 のビルド失敗 (gentoo)

gentoo にて、app-text/poppler-0.68.0のビルドを行うと以下のように失敗するようになった。
 6%] Building CXX object CMakeFiles/poppler.dir/goo/JpegWriter.cc.o
/usr/lib/ccache/bin/i686-pc-linux-gnu-g++ -Dpoppler_EXPORTS -I/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0 -I/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0/fofi -I/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0/goo -I/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0/poppler -I/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0_build -I/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0_build/poppler -I/usr/include/freetype2 -I/usr/include/openjpeg-2.3   -DNDEBUG -Wall -Wextra -Wpedantic -Wno-unused-parameter -Wcast-align -Wformat-security -Wframe-larger-than=65536 -Wlogical-op -Wmissing-format-attribute -Wnon-virtual-dtor -Woverloaded-virtual -Wmissing-declarations -Wundef -Wzero-as-null-pointer-constant -Wsuggest-override -march=pentium3 -O2 -pipe -std=c++11 -Wnon-virtual-dtor -Woverloaded-virtual -fPIC   -pthread -std=c++11 -o CMakeFiles/poppler.dir/goo/JpegWriter.cc.o -c /var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0/goo/JpegWriter.cc
/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0/goo/JpegWriter.cc: メンバ関数 ‘virtual bool JpegWriter::init(FILE*, int, int, int, int)’ 内:
/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0/goo/JpegWriter.cc:146:39: エラー: cannot convert ‘bool’ to ‘boolean’ in assignment
   priv->cinfo.optimize_coding = priv->optimize;
                                       ^~~~~~~~
make[2]: *** [CMakeFiles/poppler.dir/build.make:303: CMakeFiles/poppler.dir/goo/JpegWriter.cc.o] エラー 1
make[2]: ディレクトリ '/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0_build' から出ます
make[1]: *** [CMakeFiles/Makefile2:100: CMakeFiles/poppler.dir/all] エラー 2
make[1]: ディレクトリ '/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0_build' から出ます
make: *** [Makefile:141: all] エラー 2
 * ERROR: app-text/poppler-0.68.0::gentoo failed (compile phase):
 *   emake failed
 * 
 * If you need support, post the output of `emerge --info '=app-text/poppler-0.68.0::gentoo'`,
 * the complete build log and the output of `emerge -pqv '=app-text/poppler-0.68.0::gentoo'`.
 * The complete build log is located at '/var/log/portage/app-text:poppler-0.68.0:20190110-041935.log'.
 * For convenience, a symlink to the build log is located at '/var/tmp/portage/app-text/poppler-0.68.0/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/app-text/poppler-0.68.0/temp/environment'.
 * Working directory: '/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0_build'
 * S: '/var/tmp/portage/app-text/poppler-0.68.0/work/poppler-0.68.0'
他に失敗してる人いるだろうかと調べたが見あたらなかったので、パッチを当てることにした。

gentooでは任意のパッチを当てる仕組みがあるようだ。

しかし、popplerのebuildではepatch_userを呼んでいないようだったため、以下のbashrcを用意し、/etc/portage/bashrcとして設置した。
if [ "${EBUILD_PHASE}" == "src_prepare" ] && [ "${PN}" == "app-text/poppler" ]; then
epatch_user
fi
そして、/etc/portage/patches/app-text/poppler ディレクトリを作成し、その中に

https://gitlab.freedesktop.org/poppler/poppler/commit/de34900993bff73c8da651319027b2fa8c490172.patch

を設置してbuildしたところ、無事パッチがあたってビルドに成功した。

iptables のログで dmesg を埋めないよう ulogd 経由で syslog に

iptablesのログ出力でdmesgが埋め尽くされると困るので、NFLOGエクステンションを用いて、ulogd経由でsyslogにログを吐くようにしてみた

/etc/ulogd.conf

[global]
logfile="/var/log/ulogd.log"
loglevel=5
rmem=131071
bufsize=150000

plugin="/usr/lib/ulogd/ulogd_inppkt_NFLOG.so"
plugin="/usr/lib/ulogd/ulogd_inpflow_NFCT.so"
plugin="/usr/lib/ulogd/ulogd_raw2packet_BASE.so"
plugin="/usr/lib/ulogd/ulogd_filter_IP2STR.so"
plugin="/usr/lib/ulogd/ulogd_filter_PRINTPKT.so"
plugin="/usr/lib/ulogd/ulogd_output_LOGEMU.so"
plugin="/usr/lib/ulogd/ulogd_filter_IFINDEX.so"
plugin="/usr/lib/ulogd/ulogd_output_SYSLOG.so"

stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU
stack=log2:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,sys1:SYSLOG

[log1]
group=1

[log2]
group=2
numeric_label=1

[emu1]
file=/var/log/ulogd.syslogemu

iptablesの-j LOGな設定も以下のように変更

/bin/iptables -A KZ_DENY -j NFLOG --nflog-prefix="[Kazakhstan] " --nflog-group 2

今回はgroup2としてsyslogで吐かせているが、そこは自由にするとよいだろう

メモメモ

Tweaking:

The Zend MM can be tweaked using ZEND_MM_MEM_TYPE and ZEND_MM_SEG_SIZE environment variables. Default values are “malloc” and “256K”. Dependent on target system you can also use “mmap_anon”, “mmap_zero” and “win32” storage managers.

rsync コマンドの append オプションを resume に使うのは危ない

rsync  には--appendオプションがありますが、3.0.0からは挙動が変わっているようで、 append の動作を高速化するためにchecksumを取らなくなったようです。

3.0.0より前の --append と同じような挙動が必要な場合は、 --append-verify を使っておかないと、とてもひどい目にあうでしょう。

ですが、そもそも --append オプションは名前の通り追記するためのものであり、いろんなサイトで見かけるようなファイル転送のレジュームとは直接関係なく、不用意に使ってはいけません。

 

以下はrsyncのmanより

The use of --append can be dangerous if you aren't 100% sure that the files that are
longer have only grown by the appending of data onto the end. You should thus use
include/exclude/filter rules to ensure that such a transfer is only affecting files
that you know to be growing via appended data.

ルートアール USB to 5.1chオーディオアダプタ [RA-AUD51] S/PDIF Dolby Digital/DTS パススルー

ルートアールのUSB to 5.1chオーディオアダプターを購入して、Windows7 64bitでつかおうと思ったんだけど、
付属のドライバではPowerDVDでS/PDIF出力のDTS/Dolby Digitalのパススルー出力が得られませんでした。

中を開けてみたところ、C-MediaのCM6206-LXというチップを使っているのがわかったので、
他社の製品のドライバをいろいろ試してみたところ、

http://ppa-usa.com/computer-products/sound-cards/6-channel-premium-external-usb-sound.html

のドライバ類を使うといけました、というメモ。

CentOS Source Repository


* CentOSのソースパッケージは http://vault.centos.org にあります
* CentOS上でソースパッケージを取得したいときは、yum-utilsパッケージに含まれる yumdownloaderを使うのが便利です
*
[base-src]
name=CentOS-6.6 - Base - Source
baseurl=http://vault.centos.org/6.6/os/Source/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

[updates-src]
name=CentOS-6.6 - Updates - Source
baseurl=http://vault.centos.org/6.6/updates/Source/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

[extras-src]
name=CentOS-6.6 - Extras - Source
baseurl=http://vault.centos.org/6.6/extras/Source/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

* yumdownloader –source httpd

zfs on linux


==== zpoolにくべるデバイス名について ====
* /dev/disk/by-id/* にしておくのが吉
* /dev/sdc とかでやってると、デバイス名が変わった時に悲しい思いをします
==== 付け替えたい場合 ====
*
$ sudo zpool export tank
$ sudo zpool import -d /dev/disk/by-id tank

directory quota on xfs filesystem


====== XFSファイルシステムにて、ディレクトリに対してQuota制限をかけたときのメモ ======
* XFSファイルシステムはディレクトリ単位でQuotaを設定することができます
* プロジェクトクォータというもので設定します
* プロジェクトクォータはグループクォータと同時に使用することはできません
* 設定
* ファイルシステムを pquotaオプション付きでマウントします
* /etc/projects と /etc/projid で マッピングを行います
* /etc/projects50:/data
* /etc/projidvirtual:50
* 次のように、同じProjectIDをもつものも設定できるようです50:/data/test1
50:/data/test2

* Grace Periodは次のように設定しますxfs_quota -x -c 'timer -p -b 1minutes'
* minutes(m), hours(h), days(d), weeks(w) を認識します
* Projectを設定しますxfs_quota -x -c 'project -s virtual'
* Project virtualに、使用量Quotaを設定
xfs_quota -x -c 'limit -p bsoft=1000m bhard=1200m virtual' /data

* 確認
* quota設定状態の出力[root@rc97 data]# xfs_quota -x -c 'state' /data
User quota state on /data (/dev/mapper/vg0-lv0)
Accounting: OFF
Enforcement: OFF
Inode: #18446744073709551615 (0 blocks, 0 extents)
Group quota state on /data (/dev/mapper/vg0-lv0)
Accounting: OFF
Enforcement: OFF
Inode: #131 (2 blocks, 2 extents)
Project quota state on /data (/dev/mapper/vg0-lv0)
Accounting: ON
Enforcement: ON
Inode: #131 (2 blocks, 2 extents)
Blocks grace time: [7 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]

* ユーザーコマンドでの確認[root@rc97 test2]# xfs_quota -c 'quota -v -p virtual' /data
Disk quotas for Project virtual (50)
Filesystem Blocks Quota Limit Warn/Time Mounted on
/dev/mapper/vg0-lv0 8 51200 102400 00 [--------] /data

* リポートを出力[root@rc97 data]# xfs_quota -x -c 'report -p' /data
Project quota on /data (/dev/mapper/vg0-lv0)
Blocks
Project ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
virtual 0 51200 102400 00 [--------]

* 使用量はsyncされてないと出力に反映されないようですね
* xfs_quotaコマンド
* -x で エキスパートモード
* 例: xfs_quota -x -c 'report -h' /data
* project -c (Checking)
* project -C (Clearing)
* project -s (Setting)