Building perl-5.10.0

Reini Urban rurban@x-ray.at
Sat Mar 22 16:48:00 GMT 2008


Sisyphus schrieb:
> ----- Original Message ----- From: "Matthew Persico" 
>> Well after a bit of googling around, the answer is this:
>>
>> 1) In a Windows cmd command prompt, cd where your cygwin lives - mine
>> is at c:\opt\cygwin
> Mine is at C:\cygwin.
> 
>> 2) cd ..
> I first ran 'attrib cygwin' to see what was already there:

Within cygwin you have better tools than the attrib or cacls.
Use your shell and the posix tools, and don't add additional ACL's by 
using the explorer!

> C:\>attrib cygwin
>             C:\cygwin
> 
>> 3) attrib -r cywgin - that removed the read-only bit. Don't try it in
>> Windows Explorer; it does not "stick"
 >
> I then ran 'attrib -r cygwin' (even though it doesn't appear to be 
> readonly to begin with).
> 
>> 4) Then in a Cygwin window, cd /
>> 5) chmod 777 .
> 
> That errors out as follows:
> 
> Rob@desktop2 /
> $ chmod 777 .
> chmod: changing permissions of `.': Permission denied
> 
> After all that I get:
> 
> Rob@desktop2 /
> $ ls -alrt
> total 165
> dr-xr-xr-x   1     0 root       0 Jan  1  1970 cygdrive
> dr-xr-xr-x   1 Rob   None       0 Dec  1  2006 proc
> d---r-x---+  7 admin Users      0 Mar 12 12:37 var
> d---r-x---+  2 admin Users      0 Mar 12 12:37 dev
> d---r-x---+  2 admin Users      0 Mar 12 12:37 tmp
> ----r-x---+  1 admin Users     57 Mar 12 12:38 Cygwin.bat
> drwxrwxrwx+  3 Rob   None       0 Mar 12 12:38 home
> d---r-x---+ 12 admin Users   4096 Mar 12 12:38 ..
> d---r-x---+ 12 admin Users   4096 Mar 12 12:38 .
> d---r-x---+ 11 admin Users   4096 Mar 12 12:50 etc
> d---r-x---+ 11 admin Users  12288 Mar 12 12:51 lib
> d---r-x---+ 16 admin Users   4096 Mar 12 12:51 usr
> d---r-x---+  2 admin Users 131072 Mar 15 21:20 bin
> ----r-x---+  1 admin Users   7022 Mar 15 21:20 Cygwin.ico

With such a mess, first fix your directories, than the files.
Or better start from scratch.

A sane initial permission concept for cygwin would help.
Your big problem is that cygwin has no write access, the user even no 
read access! d---r-x---+

The second problem is the +, the special Windows ACL, which should not 
be here on a plain new cygwin installation.
POSIX access() doesn't check the additional ACL's, just the underlying 
windows calls allow or deny access then. This can be right or this can 
be contradictive.

> and running 'make' terminates as before.

Besides the obvious not-writable lib/auto dir, note that Dynaloader 
requires the generated dll to be +x. Of course the blib/arch dir also as 
for every dir.

Module::Install had a recent bug in doing POSIX::access() checks for 
writable dirs, which is wrong for your cases. Without the +
(additional ACL's) it works fine.

> This is a fairly new installation of Cygwin, btw. (I stuffed up the old 
> one trying to install rsync and had to delete the lot.) So there could 
> be some additional stuff here that needs sorting out. I have, however, 
> already built some perl extensions using the 5.8.8 build that was 
> installed when I created this fresh build of Cygwin.
> 
> And the fact that I can build 5.8.8 from source, but not 5.10.0 leads me 
> to wonder whether this is instead a query that should be raised on p5p ?

I would rather blaim cygwin and esp. you. Module::Install is also faulty.
Note that perl 5.10 is a bit stricter, mainly in taint checking. Group 
writable is forbidden with 5.10 taint now.

> Thanks for the reply, Matthew ... appreciated.

I have a ACL sanifier in my /usr/local/bin/fixfacl,
which recursively removes first the additional ACL's for directories, 
and then for the files, and simply overwrites it with my preferred 
user/group.

But this a special hack just for me and my seperation into executable or 
non executable files. I don't care for the additional ACL's.
Don't touch symlinks with setfacl or chmod!

#!/bin/sh
if [ "$1"="." ]; then
   setfacl -f /etc/facl.dir .
   find -type d \! -name '.*' -exec setfacl -f /etc/facl.dir '{}' \;
   find -type f -executable -exec setfacl -f /etc/faclx.file '{}' \;
   find -type f \! -executable -exec setfacl -f /etc/facl.file '{}' \;
   exit
fi
if test -d "$1"; then
   setfacl -f /etc/facl.dir "$1"
   exit
fi
if test -f "$1"; then
   test -x "$1" && setfacl -f /etc/faclx.file "$1" && exit
   setfacl -f /etc/facl.file "$1"
   exit
fi

The simple and destructive way would be:
   find -type d -exec setfacl -f /etc/facl.dir '{}' \;
   find -type f -exec setfacl -f /etc/facl.file '{}' \;
This would destroy all executable bits.
-- 
Reini Urban
http://phpwiki.org/  http://murbreak.at/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: facl.dir
Type: application/x-director
Size: 80 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin/attachments/20080322/5637e29d/attachment.dir>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: facl.file
URL: <http://cygwin.com/pipermail/cygwin/attachments/20080322/5637e29d/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: faclx.file
URL: <http://cygwin.com/pipermail/cygwin/attachments/20080322/5637e29d/attachment-0001.ksh>
-------------- next part --------------
--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


More information about the Cygwin mailing list