This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Building perl-5.10.0

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

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!

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 '{}' \;
if test -d "$1"; then
  setfacl -f /etc/facl.dir "$1"
if test -f "$1"; then
  test -x "$1" && setfacl -f /etc/faclx.file "$1" && exit
  setfacl -f /etc/facl.file "$1"

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

Attachment: facl.dir
Description: application/director

# file: lines.png
# owner: rurban
# group: users
# file: .
# owner: root
# group: users

Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]