2016年10月23日日曜日

Debian unstableのgcc-6 6.2.0-7以降でLinux kernelなどのbuildができない件への対処 (2016-12-03更新)

Debian unstableのgcc-6は、6.2.0-7から--enable-default-pieというflag付きでbuildされており、これがあちこちで問題を引き起こしている。

cf. https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=gcc-6

影響を受けているのはLinux kernelやSeaBIOSなど。

今の所backoutされる予定はなさそうなので、upstream (kernel側)で対応する迄は以下のworkaroundで我慢するか、自前でgcc-6 (6.2.0-6)をbuildするしかない。

Linux kernelのbuild

(2016-12-03追記)

Linux kernel 4.8.11でDebianのGCCで行われた変更に対応した。よって、それ以降のversionを利用する場合以下のworkaroundは不要。

stack protectorをenableにしていると:

> -fstack-protector not supported by compiler

と出てbuildが止まったり、そうでなくても:

> error: code model kernel does not support PIC mode

と出てbuildが止まったりする。

何れも、KCPPFLAGS=-fno-picをmake-kpkgあたりに渡してbuildするというworkaroundが紹介されている (cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=841533)。

著者の環境ではworkaroundによりmake-kpkgでkernelがbuildできた。

ccache userへ


FirefoxやEmacsのbuildにも影響が出た。

一旦、ccache -C -zでcacheを破棄してrebuildすると良い。


ZoL (ZFS on Linux)

(2016-10-28追記)

ZoLはkernel modulesとしてbuildする関係から、もろにこの変更の影響を受ける。しかも、KCPPFLAGS=-fno-picを渡しても./configure scriptが途中でコケる。

(2016-12-03追記)

SPLもZFSも正常にbuildできるようになった。

それがGCC側の変更なのか、kernel sourceのupgradeの結果なのかは切り分けられなかった。

2016年10月5日水曜日

PulseAudio w/o systemd

以前、ffmpegでsound cardからのrecordingを取り扱ったが、systemdを排除した場合に変化が生じたのでメモ。

無論、以下のcommand lineで示すのは著者の環境に固有のものである。

以前:

% XDG_RUNTIME_DIR=/run/user/1000 ffmpeg -f pulse -ac 2 -ar 44100 -i alsa_input.pci-0000_00_1f.3.analog-stereo -acodec libvorbis -q 3 output.ogg

以降:

% ffmpeg -f pulse -ac 2 -ar 44100 -i alsa_input.pci-0000_00_1f.3.analog-stereo -acodec libvorbis -q 3 output.ogg

systemdを排除した場合、XDG_RUNTIME_DIRを設定しているpam_systemdも排除されるので、この指定が不要になる。というか/run/userが作られないのでerrorになる。