Como criar um link simbólico variável? (ou algo similar)

6

Como posso fazer um link simbólico variável que aponte para um local diferente de acordo com o usuário atual? É possível? Devo usar outra coisa em vez disso? Um ponto de montagem? Como?

Aqui está o problema caso você encontre uma solução diferente:

Aqui no trabalho, somos uma equipe que desenvolve no Unix com o SVN. Todos usamos a mesma máquina de desenvolvimento (remotamente). Portanto, temos checkouts em lugares diferentes (não / home, mas um diretório específico montado em outro disco, digamos / svn / [userlogin] /).

Nós usamos scripts e ferramentas. Algumas ferramentas especiais têm uma configuração complexa e um arquivo de projeto que inclui o caminho dos arquivos de origem. Isso é propenso a erros e perdemos muito tempo devido a configurações incorretas ou 'projetos' que precisam ser recriados o tempo todo. Eu gostaria de compartilhar essa configuração complexa e os arquivos de projeto em todos os desenvolvedores.

Mas, para que esses arquivos sejam compartilhados durante o trabalho em checkouts diferentes, devo:

  • corrige on-the-fly os caminhos armazenados em config / project para adaptá-los ao usuário atual
  • cria um caminho fixo "mágico" que o link simbólico / mount / point aponta para um lugar diferente de acordo com o usuário (portanto, mesmo arquivo de projeto, mas apontando para uma fonte diferente)

Antes disso, usamos clearcase, que estava montando uma visão do mesmo caminho para todos (digamos / vob), cada desenvolvedor vendo sua própria visão. Isso foi conveniente.

Como posso fazer algo semelhante? Você consegue pensar em outra solução? Obrigado.

- Editar -

Eu estava pensando no Eclipse IDE. Eu quero compartilhar algumas configurações de espaço de trabalho, o projeto e as configurações de execução / depuração. As configurações do Eclipse (+ plugin) consistem em mais de 50 arquivos pequenos, portanto, editá-los está fora de questão.

Com o clearcase foi fácil graças ao caminho fixo "/ vob" que, para cada terminal, apontava automaticamente para a "visão" que escolhemos.

Eu gostaria de algo parecido. Eu quero um / svn / mysource que, para cada terminal, aponte para o checkout atual do usuário, que está em um caminho dependente do usuário.

    
por Offirmo 06.01.2012 / 12:31

6 respostas

2

Para as pessoas que estão vendo isso mais recentemente, eu escrevi um pequeno sistema de arquivos FUSE chamado HomeFS que encaminha chamadas para um diretório relativo para os diretórios home dos usuários chamadores.

Ou seja, se você tiver um usuário Tyler e um usuário Sarah com um ponto de montagem HomeFS em /usr/share/bigsoft/config e um diretório relativo de .config/bigsoft , quando Tyler fizer ls /usr/share/bigsoft , ele verá o conteúdo de /home/tyler/.config/bigsoft e Sarah verá o conteúdo de /home/sarah/.config/bigsoft .

Principalmente, isso é para trabalhar em torno de software proprietário que insiste que seus arquivos variáveis estejam em algum diretório de instalação, assim como alguns softwares do Windows tendem a funcionar.

    
por 05.11.2015 / 21:41
1

Isso depende se a configuração do aplicativo pode processar comandos ou interpolar variáveis do shell.

O shell de login bash define a variável de ambiente LOGNAME em um shell de login.
Você poderia usar / svn / $ {LOGNAME} / na configuração, se o aplicativo interpolar as variáveis do shell em config. Então você pode compartilhar a configuração comum com cada usuário referindo-se ao seu próprio caminho.

Se o aplicativo não interpolar as variáveis do shell na configuração, você poderá criar um symlink para cada usuário fazendo referência genérica ao caminho / svn e usar o nome genérico na configuração compartilhada.

who listará o nome de usuário atual.
Se você quiser escrever um script que cada usuário executa uma vez na instalação para criar um symlink.

ln -s /svn/$(who) /svn/anyuser

Em seguida, compartilhe a configuração comum consultando / svn / anyuser (escolha um nome genérico que seja adequado para você)

Cuidado com o usuário noob ignorando o uso dos links e removendo-o (você acabou de ser promovido para admin :)

    
por 06.01.2012 / 14:37
1

Então você quer que cada usuário veja algo diferente no sistema de arquivos. O Unix não é realmente projetado dessa maneira (o VMS e o Plan9 facilitam isso).

O único método que eu conheço é usar o chroot (), mas você mascara tudo que não está na hierarquia onde você trocou, o link simbólico permanecerá na sua hierarquia e não será útil com diretórios. Deve ser possível usar um sistema de arquivos FUSE para espelhar a raiz verdadeira enquanto fornece a visão desejada. Você então chroot para essa posição. Se você não encontrar um já existente, você poderia escrever um ...

    
por 06.01.2012 / 17:15
1

GFS ou OCFS podem ser usados para atingir seu objetivo. Ambos os sistemas de arquivos podem apresentar o mesmo ponto de montagem com diferentes conteúdos baseados em várias coisas. Ambos devem ser usados como sistemas de arquivos de cluster e ter a capacidade de apresentar o mesmo diretório com conteúdo diferente para diferentes arquiteturas.

A questão que me surge se vale a pena o esforço. Tenho certeza de que você pode resolver isso com outros truques (talvez um mapa automático de executáveis?).

    
por 06.01.2012 / 21:59
0

Você não pode criar links simbólicos com conteúdos diferentes para usuários diferentes no Linux ou na maioria dos outros unices. Ou melhor, você pode, mas apenas através de sistemas de arquivos incomuns (provavelmente baseados em FUSE ) e a configuração seria bastante difícil.

Organize todas as configurações relativas ao diretório pessoal do usuário. Não importa que alguns arquivos estejam em /svn/$USER em vez de /home/$USER : basta que cada usuário crie um link simbólico /home/$USER/svn -> /svn/$USER (ou crie-o para eles).

Se alguns aplicativos insistirem em ter um caminho absoluto, escreva um script que realize a substituição do caminho marcado para o caminho correto para o usuário, por exemplo

sed -i -e "s:/home/\$USER/:/home/$USER/:g" .eclipse/*

Certifique-se de converter /home/bob de volta na string literal /home/$USER em um gancho de pré-consolidação.

    
por 08.01.2012 / 23:16
0

Você provavelmente poderia hackar amd (o daemon automounter) para isso, já que ele já faz algo semelhante.

linux# df /home
Filesystem           1K-blocks Used Avail Capacity  Mounted on
pid174@repoman:/home         0    0     0   100%    /home
linux# ps 174
  PID  TT  STAT      TIME COMMAND
  174  ??  Ss     0:15.76 amd -p -a /.amd_mnt -l syslog /home /etc/amd.home

Com o automounter, / home parece ser um diretório, e fazer um stat ("/ home / user") retorna informações que indicam que "user" é um symlink para algum outro diretório. O automounter se envolve na criação desses "links simbólicos" em tempo real e na sua remoção após um período de desuso. Se você usar isso como base e modificar o código-fonte, poderá fazer com que o processo retorne diferentes links simbólicos para diferentes usuários.

    
por 23.03.2012 / 23:52