"alien some-package.rpm"でディレクトリが作成できないと怒られるときは
alienコマンドの謎のエラー(?)
"*.rpm"をNFS Exportされた/homeとかに置いた状態でalienを実行していると、下記のように怒られる場合があります。
root@some-pc:/home/babydaemons# alien gnush_v0903_elf-1-1.i386.rpm Warning: Skipping conversion of scripts in package gnush_v0903_elf: postinst postrm Warning: Use the --scripts parameter to include the scripts. mkdir: ディレクトリ `gnush_v0903_elf-1' を作成できません: Permission denied unable to mkdir gnush_v0903_elf-1: at /usr/share/perl5/Alien/Package.pm line 257.
とりあえず、下記の姑息な手段で逃げましたが。
root@some-pc:/home/babydaemons# cp gnush_v0903_elf-1-1.i386.rpm /tmp; cd /tmp; !!
原因を調べてみる
/usr/share/perl5/Alien/Package.pmの257行めあたりを見てみると、
=item unpack This method unpacks the package into a temporary directory. It sets unpacked_tree to point to that directory. (This is just a stub method that makes a directory below the current working directory, and sets unpacked_tree to point to it. It should be overridden by child classes to actually unpack the package as well.) =cut sub unpack { my $this=shift; my $workdir = $this->name."-".$this->version; $this->do("mkdir $workdir") or die "unable to mkdir $workdir: $!"; # If the parent directory is suid/sgid, mkdir will make the root # directory of the package inherit those bits. That is a bad thing, # so explicitly force perms to 755. $this->do("chmod 755 $workdir"); $this->unpacked_tree($workdir); }
てな感じで、
This is just a stub method that makes a directory below the current working directory
カレントディレクトリに書き込み権限が必要だよーん
root様はどこでも書けちゃうんじゃないの?
と思いがちですが、/etc/exportsで明示的に許可しない限り、NFS clientからはroot権限で書き込みできません。理由がclientがsetuidなバイナリ・スクリプトを置けちゃうとセキュリティホールになるからです。
root@student-pc:/home/student# df . Filesystem 1M-blocks Used Available Use% Mounted on professor-pc:/home 2016M 309M 1605M 17% /home root@student-pc:/home/student# cp -p /bin/sh . root@student-pc:/home/student# chowm root ./sh root@student-pc:/home/student# chmod s+rwx ./sh root@student-pc:/home/student# ^D student@student-pc:~$ ssh professor-pc student@professor-pc:~$ ./sh
ところで、
Ubuntuだからsudo使えよ>俺