screwed up permissions in tree

Scot Hetzel swhetzel at gmail.com
Fri May 7 17:21:40 UTC 2010


On Fri, May 7, 2010 at 11:05 AM, Christian Baer
<christian.baer at uni-dortmund.de> wrote:
> Hi there people!
>
> I guess I really screwed up the rights within my source-tree (and maybe
> share too). It all started pretty innocent. :-)
>
> I wanted to encrypt /usr and /var, which are both mounted on dedicated
> partions on this machine. There was still one unused partition, which I
> will call (and mount) /enctmp for the steps I took. This is how I did it:
>
> - cp -rpv /usr/* /enctmp

This is where you went wrong.  -r = -RL (see cp(1) man page). This
caused cp change the symbolic links to directories.  You should have
used either:

cp -Rpv /usr/* /enctmp

or used tar:

tar -cf -cf - -C /usr/ . | tar -xpf - -C destdir

NOTE: tar would have preserved the hardlinks.

> What doesn't work, is installing world! :-O I went to /usr/src/, did a
> make buildworld and make buildkernel (both of which worked). Even make
> installkernel worked, just the world refuses to be installed:
>
> --------------------------------------------------------------
>>>> Making hierarchy
> --------------------------------------------------------------
> cd /usr/src; make -f Makefile.inc1 hierarchy
> cd /usr/src/etc;                make distrib-dirs
> mtree -eU  -f /usr/src/etc/mtree/BSD.root.dist -p /
> mtree -eU  -f /usr/src/etc/mtree/BSD.var.dist -p /var
> mtree -eU  -f /usr/src/etc/mtree/BSD.usr.dist -p /usr
> mtree -eU  -f /usr/src/etc/mtree/BSD.include.dist  -p /usr/include
> mtree -deU  -f /usr/src/etc/mtree/BSD.sendmail.dist -p /
> cd /; rm -f /sys; ln -s usr/src/sys sys
> cd /usr/share/man/en.ISO8859-1; ln -sf ../man* .
> ln: ./man1: Operation not permitted
> ln: ./man1aout: Operation not permitted
> ln: ./man2: Operation not permitted
> ln: ./man3: Operation not permitted
> ln: ./man4: Operation not permitted
> ln: ./man5: Operation not permitted
> ln: ./man6: Operation not permitted
> ln: ./man7: Operation not permitted
> ln: ./man8: Operation not permitted
> ln: ./man9: Operation not permitted

The problem here is that these are now directories, instead of links.
Your /usr/share/man/en.ISO8859-1 shoud look like:

# ls -l /usr/share/man/en.ISO8859-1
total 20
drwxr-xr-x  2 man   wheel   2 Feb  7 09:47 cat1
drwxr-xr-x  2 man   wheel   2 Feb  7 09:47 cat1aout
drwxr-xr-x  2 man   wheel   2 Feb  7 09:47 cat2
drwxr-xr-x  2 man   wheel   2 Feb  7 09:47 cat3
drwxr-xr-x  7 man   wheel   7 Feb  7 09:47 cat4
drwxr-xr-x  2 man   wheel   2 Feb  7 09:47 cat5
drwxr-xr-x  2 man   wheel   2 Feb  7 09:47 cat6
drwxr-xr-x  2 man   wheel   2 Feb  7 09:47 cat7
drwxr-xr-x  6 man   wheel   6 Feb  7 09:47 cat8
drwxr-xr-x  2 man   wheel   2 Feb  7 09:47 cat9
lrwxr-xr-x  1 root  wheel   7 May  6 07:24 man1 -> ../man1
lrwxr-xr-x  1 root  wheel  11 May  6 07:24 man1aout -> ../man1aout
lrwxr-xr-x  1 root  wheel   7 May  6 07:24 man2 -> ../man2
lrwxr-xr-x  1 root  wheel   7 May  6 07:24 man3 -> ../man3
lrwxr-xr-x  1 root  wheel   7 May  6 07:24 man4 -> ../man4
lrwxr-xr-x  1 root  wheel   7 May  6 07:24 man5 -> ../man5
lrwxr-xr-x  1 root  wheel   7 May  6 07:24 man6 -> ../man6
lrwxr-xr-x  1 root  wheel   7 May  6 07:24 man7 -> ../man7
lrwxr-xr-x  1 root  wheel   7 May  6 07:24 man8 -> ../man8
lrwxr-xr-x  1 root  wheel   7 May  6 07:24 man9 -> ../man9

To fix this, just delete the man1* - man9 directories, and run make
installworld.  Since /usr/share/man is not needed during an
installworld, the best solution to recover diskspace is to remove this
directory:

cd /usr/src
rm -rf /usr/share/man
make installworld

This would let installworld recreate the man hierarchy.

NOTE: There might be other locations where symbolic links were changed
to directories, just remove those directories and re-run 'make
installworld'.

Scot


More information about the freebsd-stable mailing list