ルギア君の戯言

雑多な記事。

NFS に httpd をインストール

Momonga Linux のビルド用の環境として、NFSchroot 環境 を用意したんだけど、NFSsetcap に対応してない (setcaplinux だけの機能と考えれば、当たり前か・・・。) ということで、インストールに失敗します。NFS にインストール、というのは、(パフォーマンス的に) 阿呆な考えなので、あまりしないだろうけど、AUFS や nilfs (後述) でも発生します。

NFS を使っている理由は SSD へのダメージが読めないのと、(Momonga を動かしている) VirtualBox の USB 接続が不安定であることと、机の上に置くことになる外付けHDDが邪魔。

[momonga@lunastra httpd]$ mount
192.168.1.8:/mnt/root on / type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.0.2.15,local_lock=none,addr=192.168.1.8)
devtmpfs on /dev type devtmpfs (rw,relatime,size=4080496k,nr_inodes=1020124,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
tmpfs on /dev/shm type tmpfs (rw,relatime)
tmpfs on /tmp type tmpfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
proc on /proc type proc (rw,relatime)
[momonga@lunastra httpd]$ sudo yum install httpd
Loaded plugins: aliases, auto-update-debuginfo, changelog, dellsysid, download-
              : order, etckeeper, fastestmirror, filter-data, fs-snapshot, keys,
              : langpacks, list-data, local, merge-conf, post-transaction-
              : actions, presto, priorities, protectbase, ps, puppetverify,
              : refresh-packagekit, remove-with-leaves, rpm-warm-cache, show-
              : leaves, tmprepo, tsflags, upgrade-helper, verify, versionlock
Unable to connect to dbus
local-development                                        | 2.9 kB     00:00     
local-development-nonfree                                | 2.9 kB     00:00     
trunk                                                    | 3.6 kB     00:00     
Loading mirror speeds from cached hostfile
 * trunk: ftp.kddilabs.jp
Skipping filters plugin, no data
0 packages excluded due to repository protections
Resolving Dependencies
Skipping filters plugin, no data
--> Running transaction check
---> Package httpd.x86_64 0:2.4.16-1m.mo8 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package      Arch          Version              Repository                Size
================================================================================
Installing:
 httpd        x86_64        2.4.16-1m.mo8        local-development        1.0 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 1.0 M
Installed size: 3.6 M
Is this ok [y/d/N]: y
Downloading packages:
Loaded plugins: auto-update-debuginfo, dellsysid, etckeeper, fastestmirror, fs-
              : snapshot, langpacks, local, post-transaction-actions, presto,
              : priorities, protectbase, puppetverify, refresh-packagekit,
              : remove-with-leaves, rpm-warm-cache, upgrade-helper, versionlock
Unable to connect to dbus
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
etckeeper: pre transaction commit
  Installing : httpd-2.4.16-1m.mo8.x86_64                                   1/1 
Error unpacking rpm package httpd-2.4.16-1m.mo8.x86_64
error: unpacking of archive failed on file /usr/sbin/suexec: cpio: cap_set_file
etckeeper: post transaction commit
Unable to connect to dbus
  Verifying  : httpd-2.4.16-1m.mo8.x86_64                                   1/1 

Failed:
  httpd.x86_64 0:2.4.16-1m.mo8                                                  

Complete!
[momonga@lunastra pkgs]$ svn diff httpd/httpd.spec
Index: httpd/httpd.spec
===================================================================
--- httpd/httpd.spec    (revision 68789)
+++ httpd/httpd.spec    (working copy)
@@ -548,7 +548,7 @@
 %{_sbindir}/fcgistarter
 %{_sbindir}/apachectl
 %{_sbindir}/rotatelogs
-%caps(cap_setuid,cap_setgid+pe) %attr(510,root,%{suexec_caller_user}) %{_sbindir}/suexec
+%attr(6510,root,%{suexec_caller_user}) %{_sbindir}/suexec
 
 %dir %{_libdir}/httpd
 %dir %{_libdir}/httpd/modules
[momonga@lunastra pkgs]$ ../tools/OmoiKondara -f httpd
[momonga@lunastra pkgs]$ sudo rpm -ivh ../PKGS/RPMS/httpd-2.4.16-1m.mo8.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:httpd                  ########################################### [100%]
[momonga@lunastra pkgs]$ ls -l /usr/sbin/suexec
-r-s--s--- 1 root apache 14280 Oct 16 23:53 /usr/sbin/suexec
[momonga@lunastra pkgs]$ getcap /usr/sbin/suexec
Failed to get capabilities of file `/usr/sbin/suexec' (Operation not supported)

一応、こんな感じでインストールは出来るけど、setcap による設定よりやや緩い権限設定になっちゃっているので、本当は、setcap できなかったら、fallback 出来るのが理想だとどっかの記事に書いてあった。

ちなみに、実際のファイルシステムは、下に示すように、btrfs です。(もともとは、nilfs でやってたのだが、nilfs も setcap をサポートしてないことがわかったので、急遽 btrfs に変更したわけだが、結局、NFS の方が問題だったので意味なし。)

linaro@linaro-nano:~/parallella-linux$ mount
  (省略)
/dev/sda1 on /mnt type nilfs2 (rw)
/dev/sda2 on /mnt/root type btrfs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)

httpd のビルドができているのは、tmpfs でビルドしたから。

おまけ。

(特に意味はない)

linaro@linaro-nano:~/parallella-linux$ sudo chmod ug-s /mnt/root/usr/sbin/suexec 
linaro@linaro-nano:~/parallella-linux$ sudo ls -l /mnt/root/usr/sbin/suexec
-r-x--x--- 1 root rtkit 14280 Oct 16 14:53 /mnt/root/usr/sbin/suexec
linaro@linaro-nano:~/parallella-linux$ sudo setcap cap_setuid,cap_setgid+pe /mnt/root/usr/sbin/suexec
linaro@linaro-nano:~/parallella-linux$ sudo ls -l /mnt/root/usr/sbin/suexec
-r-x--x--- 1 root rtkit 14280 Oct 16 14:53 /mnt/root/usr/sbin/suexec
linaro@linaro-nano:~/parallella-linux$ 
[momonga@lunastra pkgs]$ ls -l /usr/sbin/suexec
-r-x--x--- 1 root apache 14280 Oct 16 23:53 /usr/sbin/suexec
[momonga@lunastra pkgs]$ /usr/sbin/suexec
-bash: /usr/sbin/suexec: Permission denied