Usuários NFS obtendo uma experiência de GUI lenta

0

Estou configurando um sistema (Ubuntu 12.04) que usa ldap, pam e autofs para carregar usuários e suas pastas base a partir de um servidor remoto. Uma das opções de login é sentar na máquina e iniciar uma sessão da GUI. Programas como o chormium (navegador) que preformam muitas operações de leitura / gravação nos arquivos ~ / .cache e ~ / .config estão diminuindo a experiência da GUI, bem como sobrecarregando o servidor NFS que está causando outros usuários a terem problemas.

O Ubuntu tinha as variáveis XDG_CONFIG_HOME e XDG_CACHE_HOME que podem ser configuradas para alterar a localização padrão de .cache e .config da pasta home para algum outro lugar. Existem vários lugares para configurá-los, mas a maioria deles não é ideal.

  1. / etc / environment

    • pros: funcionará em todos os shells
    • cons: não é possível usar variáveis como $ USER para que você não possa fazer com que os usuários tenham novos locais diferentes para .cache e .config. A nova localização de todos os usuários seria o mesmo diretório.
  2. /etc/bash.bashrc

    • pros: $ USER funciona, então você pode colocá-los em pastas diferentes
    • cons: só é executado para shells compatíveis com o bash
  3. ~ / .pam_environment

    • pros: funciona independentemente do shell
    • cons: não pode usar variáveis de sistema (como $ USER), tem sua própria sintaxe e precisa ser criado para cada usuário
por elzilrac 02.10.2012 / 22:27

2 respostas

1

Minha solução funciona para todos os shells e é feita automaticamente, portanto, não é necessária uma ação administrativa para novos usuários. Ele usa ~ / .pam_environment junto com um script curto para ser executado no login.

No login de um usuário, o script curto procura no diretório home dos usuários o arquivo .pam_environment. Se não estiver presente, ele cria e adiciona as linhas para definir XDG_CACHE_HOME e XDG_CONFIG_HOME. Note que no meu exemplo, estou colocando os arquivos .config e .cache em / home / nfs_users / username /

Também é possível colocá-los em / tmp / username /. Estes serão destruídos a cada reinicialização. Você pode querer colocar o seu em algum lugar mais permanente.

  1. Ative o uso de ~ / .pam_environment:

    • no arquivo "/etc/pam.d/common-session" adicione a seguinte linha ao final do arquivo:

      sessão requerida pam_env.so

  2. Crie um script de shell para ser executado no login do usuário. É "/etc/profile.d/local.sh". Você pode ou não já ter algo neste arquivo. Você pode adicionar o seguinte código ou criar o arquivo se ele não existir. NOTA: o diretório escolhido (neste caso / home / nfs_users /) deve existir e ser gravável por todos os usuários que fizerem login.

    if [ ! -d '/home/nfs_users/'${USER} ]; then
        mkdir '/home/nfs_users/'${USER}
    fi
    if [ ! -e ${HOME}/.pam_environment ]; then
        echo 'XDG_CACHE_HOME DEFAULT="/home/nfs_users/'${USER}'/.cache"' > ${HOME}"/.pam_environment"
        echo 'XDG_CONFIG_HOME DEFAULT="/home/nfs_users/'${USER}'/.config"' >> ${HOME}"/.pam_environment"
    fi
    
  3. Em seguida, torne o script executável:

    sudo chmod +x /etc/profile.d/local.sh

  4. Verifique se funciona. Efetue logout e login novamente. echo $XDG_CONFIG_HOME e echo $XDG_CACHE_HOME devem retornar os diretórios apropriados. Além disso, quando você inicia a execução de aplicativos de GUI que usam o cache, os arquivos .config e .cache devem ter alguns itens neles (verifique seu conteúdo com ls).

ATUALIZAÇÃO:

Portanto, a solução antiga armazena os arquivos na memória temporária, portanto, ela será redefinida no logout e no encerramento. Para evitar isso, não armazene os arquivos em / tmp

Isso muda o passo 2. Eu escolhi criar uma pasta em / home para o nfs_users (/ home / nfs_users) que precisa ser gravável por todos os usuários que podem efetuar login. Você pode optar por colocá-lo em outro lugar. / p>     

por elzilrac 02.10.2012 / 22:27
2

Você tem variáveis de sistema em pam, então eu usaria a opção 3.

Defina a variável em /etc/security/pam_env.conf :

XDG_CACHE_HOME  DEFAULT="/var/cache/users/@{PAM_USER}/.cache" #or any other place

E verifique se o diretório existe em /etc/profile :

if [ "$USER" == "root" ]; then   
  unset XDG_CACHE_HOME 
else   
  test -d $XDG_CACHE_HOME || mkdir -p $XDG_CACHE_HOME
fi
    
por user112594 04.12.2012 / 11:19