Freebsd unremoveable directories
When I was trying to get my FreeBSD working as a XenU, I used the make option DESTDIR= for installworld and installkernel.
After the files had been installed in my DESTDIR directory however, I wasn’t able to remove certain directories when I tried to remove my DESTDIR for a clean new install:
rm: /usr/local/xen/current-root/bin: Directory not empty
rm: /usr/local/xen/current-root/lib/libc.so.7: Operation not permitted
rm: /usr/local/xen/current-root/lib/libcrypt.so.5: Operation not permitted
rm: /usr/local/xen/current-root/lib/libthr.so.3: Operation not permitted
rm: /usr/local/xen/current-root/lib: Directory not empty
rm: /usr/local/xen/current-root/libexec/ld-elf.so.1: Operation not permitted
rm: /usr/local/xen/current-root/libexec: Directory not empty
rm: /usr/local/xen/current-root/sbin/init: Operation not permitted
rm: /usr/local/xen/current-root/sbin: Directory not empty
rm: /usr/local/xen/current-root/usr/bin/chpass: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/chfn: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/chsh: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/ypchpass: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/ypchfn: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/ypchsh: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/login: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/opieinfo: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/opiepasswd: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/passwd: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/yppasswd: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/rlogin: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/rsh: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/su: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin/crontab: Operation not permitted
rm: /usr/local/xen/current-root/usr/bin: Directory not empty
rm: /usr/local/xen/current-root/usr/lib/librt.so.1: Operation not permitted
rm: /usr/local/xen/current-root/usr/lib: Directory not empty
rm: /usr/local/xen/current-root/usr: Directory not empty
rm: /usr/local/xen/current-root/var/empty: Operation not permitted
rm: /usr/local/xen/current-root/var: Directory not empty
rm: /usr/local/xen/current-root: Directory not empty
After getting really annoyed with all the directories piling up in my /usr/local/xen directory, Benv offered to try and find out why the hell these directories didn’t want to get deleted.
It seemed that the directories had a flag ’schg’ which you can see by doing an ‘ls -lo’ on the directory. The ’schg’ flag means that the directory is system immutable and only the owner and superuser are allowed to remove this flag.
This is done by calling chflags 0 on the directory. This clears all it’s flags.
I fixed my problem by doing:
find . -exec chflags 0 "{}" \;
rm -rf /usr/local/xen/current-root