Тачка с Gentoo Linux включена в домен.
Домашние папки - примонтированные шары.
В начале kde'шной сессии получаем сообщение:
startkde: Call to lnusertemp failed (temporary directories full?). Check your installation.
Давайте же разберемся, почему такое происходит!
lnusertemp - прога, которая создает папки
/tmp/kde-$USER
/tmp/ksocket-$USER
/var/tmp/kdecache-$USER
и делает на них символические ссылки
$KDEHOME/tmp-$HOSTNAME
$KDEHOME/socket-$HOSTNAME
$KDEHOME/cache-$HOSTNAME
( $KDEHOME - это обычно ~/.kde или ~/.kde4 )
Тут мы видим две причины проблемы:
1. Не во всех дистрах users могут по дефолту писать в /var/tmp
2. Ну какие могут быть симлинки на шаре? ^_^
Замечу, что lnusertemp ничего не делает, если заранее создать папки
$KDEHOME/tmp-$HOSTNAME
$KDEHOME/socket-$HOSTNAME
$KDEHOME/cache-$HOSTNAME
- и кеды успешно запускаются... но временные файлы на шаре - это ... кхм... немного медленно ^_^
Что ж, напишем свою замену lnusertemp'у: хоть cifs и не понимает симлинков (а ntfs-то, кстати, понимает!), перед "mount -obind" он не устоит ^_^
Создадим где-нибудь файлик bindusertemp и напишем в нем:
#!/bin/bash
host=$( hostname )
user=$1
for target in "tmp" "cache" "socket";
do
umount ~/.kde4/$target-$host
rm -rf ~/.kde4/$target-$host
mkdir ~/.kde4/$target-$host
chown -R $user ~/.kde4/$target-$host
rm -rf /tmp/k$target-$user
mkdir /tmp/k$target-$user
chown -R $user /tmp/k$target-$user
mount -obind /tmp/k$target-$user ~/.kde4/$target-$host
done
Строчку host= $( hostname ) я добавил потому, что в переменной окружения HOSTNAME у меня нету постфикса с доменом.
Что побиндили, то надо бы когда-нибудь и разбиндить!
Пишем в unbindusertemp:
#!/bin/bash
host=$( hostname )
user=$1
for target in "tmp" "cache" "socket";
do
umount ~/.kde4/$target-$host
rm -rf ~/.kde4/$target-$host
rm -rf /tmp/k$target-$user
done
Эти файлы надо запускать от имени рута. Для подобных случаев мудрецы древности придумали suid-бит в правах файла... но потом стали еще мудрее и написали sudo ^_^.
Добавим в /etc/sudoers две новые строчки:
ALL ALL = NOPASSWD: /абсолютный путь/bindusertemp
ALL ALL = NOPASSWD: /абсолютный путь/unbindusertemp
Теперь пришла пора модифицировать скрипт startkde.
До запуска lnusertemp (Но после создание kdehome!) пишем
sudo /root/bin/bindusertemp $USER
А в конце скрипта добавим
sudo /root/bin/unbindusertemp $USER
Все строчки, связанные с lnusertemp можно просто закомментировать (а можно и не комментировать - ничего не изменится ^_^ )
Вуа-ля! Теперь кеды работают с хоумом-шарой.
А не возниклет ли подобных проблем с другими приложениями? Еще как возникнет!
В первую очередь глючит OpenOffice: он пишет, что не может создать lockfile.
Это лечится проще и без ковыряния в недрах: дом надо просто-напросто монтировать с опцией nobrl.
Еслы хоумы подключаются при помощи модуля pam-mount, то отвечающая за них часть в /etc/security/pam_mount.conf.xml будет выглядеть примерно так:
<volume
user="*"
fstype="cifs"
server="csfs"
path="home$/%(USER)"
mountpoint="~"
options="rw,workgroup=CS,iocharset=utf8,
codepage=cp866,sec=ntlmv2,nobrl"
/>
эх... не у мею я писать гайды :] .. но мож кому и поможет ^_^
четверг, 26 февраля 2009 г.
Подписаться на:
Комментарии к сообщению (Atom)
Крут 0о..... Респект и уважуха!
ОтветитьУдалить