epgrecUNA on Fedora 20

2014/05/07
epgrecUNAをFedoraで動かす上で困るのは、カーネルのアップデート毎にpt1_drvをビルドする必要があるのと、SELinuxが有効の環境ではepgrecUNAが動かない。そこでモジュールを自動でビルドするためにDKMSを使用する。また、クリーンインストールする機会があったので、epgrecUNA用のポリシーも作ってみた。

DKMS

pt1_drvのソースを配置する。Makefileとかいじったような気もするけど、前の環境からコピってきてるので、どこをいじったかよくわからない。他の情報も参考にしつつ、ビルドできるようにいい感じに修正して下さいすみません。
# tree -A /usr/src/pt1_drv-1.1.0 /usr/src/pt1_drv-1.1.0 ├── dkms.conf └── src ├── Makefile ├── etc │ └── 99-pt1.rules ├── modules.order ├── pt1_com.h ├── pt1_i2c.c ├── pt1_i2c.h ├── pt1_ioctl.h ├── pt1_pci.c ├── pt1_pci.h ├── pt1_tuner.c ├── pt1_tuner.h ├── pt1_tuner_data.c └── pt1_tuner_data.h # ln /usr/src/pt1_drv-1.1.0/src/etc/99-pt1.rules /etc/udev/rules.d/99-pt1.rules
pt1_drvは、もともとあるearth-pt1とかぶっているので、earth-pt1を無効にしないと読み込まれない
# echo "blacklist earth-pt1" >> /etc/modprobe.d/blacklist.conf
DKMSパッケージをインスコ
# yum install dkms
dkms.confを書く
# cat /usr/src/pt1_drv-1.1.0/dkms.conf #パッケージの名前 PACKAGE_NAME="pt1_drv" #パッケージのバージョン PACKAGE_VERSION="1.1.0" #ビルドするコマンド MAKE="cd src/ && BUILD_KERNEL=${kernelver} make" #中間ファイルの削除コマンド CLEAN="cd src/ && make clean" #作成されるモジュールの名前(拡張子.koは付けない) BUILT_MODULE_NAME="pt1_drv" #モジュールが作成される場所(ソースディレクトリからの相対パス) BUILT_MODULE_LOCATION="src/" #元々のインストール先(/lib/modules/`uname -r`をルートとしたパス) DEST_MODULE_LOCATION="/kernel/drivers/video/" REMAKE_INITRD="yes" #自動更新の有効化 AUTOINSTALL="yes"
add! build! install!
# dkms add -m pt1_drv -v 1.1.0 Creating symlink /var/lib/dkms/pt1_drv/1.1.0/source -> /usr/src/pt1_drv-1.1.0 DKMS: add completed.
# dkms build -m pt1_drv -v 1.1.0 Kernel preparation unnecessary for this kernel. Skipping... Building module: cleaning build area... cd src/ && BUILD_KERNEL=3.14.2-200.fc20.x86_64 make... cleaning build area... DKMS: build completed.
# dkms install -m pt1_drv -v 1.1.0 pt1_drv: Running module version sanity check. - Original module - No original module exists within this kernel - Installation - Installing to /lib/modules/3.14.2-200.fc20.x86_64/extra/ Adding any weak-modules depmod... Backing up initramfs-3.14.2-200.fc20.x86_64.img to /boot/initramfs-3.14.2-200.fc20.x86_64.img.old-dkms Making new initramfs-3.14.2-200.fc20.x86_64.img (If next boot fails, revert to initramfs-3.14.2-200.fc20.x86_64.img.old-dkms image) dracut........ DKMS: install completed.
yumでカーネルのアップデートがあった場合には、勝手にビルドしてくれるサービスを起動。いらないかも?
# systemctl start dkms # systemctl status dkms dkms.service - Builds and install new kernel modules through DKMS Loaded: loaded (/usr/lib/systemd/system/dkms.service; enabled) Active: active (exited) since 月 2014-05-12 23:22:07 JST; 5s ago Docs: man:dkms(8) Process: 20572 ExecStart=/bin/sh -c dkms autoinstall --verbose --kernelver $(uname -r) (code=exited, status=0/SUCCESS) Main PID: 20572 (code=exited, status=0/SUCCESS) # systemctl enable dkms ln -s '/usr/lib/systemd/system/dkms.service' '/etc/systemd/system/multi-user.target.wants/dkms.service'

ポリシー

何か足りないかもしれないけど、一応これでひと通り動いてる
# cat epgrecUNA.te module epgrecUNA 1.0; require { type httpd_t; type httpd_sys_script_t; type unconfined_t; type shadow_t; type device_t; type crond_t; type crond_var_run_t; type user_cron_spool_t; type user_tmpfs_t; class process signal; class msgq { unix_read destroy create }; class file { read write create setattr getattr open unlink }; class dir { write search read add_name remove_name open getattr }; class sem { unix_read read write unix_write associate }; class shm { unix_read read write unix_write associate getattr }; class chr_file { read ioctl open }; } allow httpd_t shadow_t:file { read getattr open }; allow httpd_t user_cron_spool_t:dir { write search read add_name remove_name open getattr }; allow httpd_t user_cron_spool_t:file { open create setattr unlink }; allow httpd_t crond_t:process signal; allow httpd_t crond_var_run_t:file { read open }; allow httpd_t unconfined_t:sem { unix_read read unix_write write associate }; allow httpd_t unconfined_t:shm { unix_read read unix_write write associate getattr }; allow httpd_sys_script_t device_t:chr_file { read ioctl open }; allow httpd_sys_script_t self:msgq { unix_read destroy create }; allow httpd_t user_tmpfs_t:file { read write };
ポリシーのコンパイルとインストールは、下記を使わせてもらいましょう
SELinux - Take's Wiki
# ./installSELPolicy epgrecUNA # setsebool -P httpd_mod_auth_pam 1 # semanage fcontext -a -t httpd_sys_content_t "/usr/share/epgrecUNA(/.*)?" # restorecon -RF /usr/share/epgrecUNA
動かない時は、以下で足りないポリシーを探して追加する
# setenforce 0 (動かなかった動作をもう一度。それでも動かない場合は、SELinux以外の原因と思われ) # setenforce 1 # sealert -l* # grep httpd /var/log/audit/audit.log | audit2allow -M mypol # cat mypol.te
あとffmpegは、rpmfusionリポジトリを追加しないと入らない
# rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm # yum install ffmpeg
Read more ...