Adição de symlinks ao GIT

Índice

<- Anterior: Verificação de integridade do Dispatcher

No AMS, você terá um repositório GIT pré-preenchido contendo o código-fonte do dispatcher pronto para iniciar o desenvolvimento e a personalização.

Após criar o primeiro arquivo .vhost ou o arquivo farm.any de nível superior, será necessário criar um link simbólico do diretório available_* para o diretório enabled_*. O uso do tipo de link apropriado será fundamental para uma implantação bem-sucedida por meio do pipeline da Cloud Manager. Esta página ajudará você a saber como fazer isso.

Arquétipo do Dispatcher

O desenvolvedor do AEM inicia seu projeto normalmente a partir do arquétipo do AEM

Esta é uma amostra da área do código-fonte onde você pode ver os symlinks usados:

$ tree dispatcher
dispatcher
└── src
   ├── conf.d
.....SNIP.....
    │   └── available_vhosts
    │   │   ├── 000_unhealthy_author.vhost
    │   │   ├── 000_unhealthy_publish.vhost
    │   │   ├── aem_author.vhost
    │   │   ├── aem_flush.vhost
    │   │   ├── aem_health.vhost
    │   │   ├── aem_lc.vhost
    │   │   └── aem_publish.vhost
    └── dispatcher_vhost.conf
    │   └── enabled_vhosts
    │   │   ├── aem_author.vhost -> ../available_vhosts/aem_author.vhost
    │   │   ├── aem_flush.vhost -> ../available_vhosts/aem_flush.vhost
    │   │   ├── aem_health.vhost -> ../available_vhosts/aem_health.vhost
    │   │   └── aem_publish.vhost -> ../available_vhosts/aem_publish.vhost
.....SNIP.....
    └── conf.dispatcher.d
    │   ├── available_farms
    │   │   ├── 000_ams_author_farm.any
    │   │   ├── 001_ams_lc_farm.any
    │   │   └── 002_ams_publish_farm.any
.....SNIP.....
    │   └── enabled_farms
    │   │   ├── 000_ams_author_farm.any -> ../available_farms/000_ams_author_farm.any
    │   │   └── 002_ams_publish_farm.any -> ../available_farms/002_ams_publish_farm.any
.....SNIP.....
17 directories, 60 files

Como exemplo, o diretório /etc/httpd/conf.d/available_vhosts/ contém os arquivos .vhost potenciais preparados que podemos usar em nossa configuração em execução.

Os arquivos .vhost habilitados serão exibidos como um caminho relativo symlinks dentro do diretório /etc/httpd/conf.d/enabled_vhosts/.

Criação de uma ligação simbólica

Usamos links simbólicos para o arquivo, de modo que o Apache Webserver trate o arquivo de destino como o mesmo arquivo. Não queremos duplicar o arquivo em ambos os diretórios. Em vez disso, basta um atalho de um diretório (link simbólico) para o outro.

Reconhecer que suas configurações implantadas terão como alvo um host Linux. A criação de um link simbólico incompatível com o sistema de destino causará falhas e resultados indesejados.

Se sua estação de trabalho não for uma máquina Linux, você provavelmente se perguntará quais comandos usar para criar esses links corretamente para que eles possam confirmá-los no GIT.

TIP: É importante usar links relativos, pois se você instalasse uma cópia local do Apache Webserver e tivesse uma base de instalação diferente, os links ainda funcionariam. Se você usar um caminho absoluto, sua estação de trabalho ou outros sistemas deverão corresponder à mesma estrutura de diretório exata.

OSX/Linux

Os symlinks são nativos para esses sistemas operacionais e aqui estão alguns exemplos de como criar esses links. Abra seu aplicativo de terminal favorito e use os seguintes comandos de exemplo para criar o link:

$ cd <LOCATION OF CLONED GIT REPO>\src\conf.d\enabled_vhosts
$ ln -s ../available_vhosts/<Destination File Name> <Target File Name>

Este é um exemplo de comando preenchido para referência:

$ git clone https://github.com/adobe/aem-project-archetype.git
$ cd aem-project-archetype/src/main/archetype/dispatcher.ams/src/conf.d/enabled_vhosts/
$ ln -s ../available_vhosts/aem_flush.vhost aem_flush.vhost

Este é um exemplo do link agora, se você listar o arquivo usando o comando ls:

ls -l
total 0
lrwxrwxrwx. 1 root root 35 Oct 13 21:38 aem_flush.vhost -> ../available_vhosts/aem_flush.vhost

Windows

Note: Acontece que o MS Windows (melhor, NTFS) suporta links simbólicos desde… Windows Vista

Imagem do Prompt de Comando do Windows mostrando a saída de ajuda do comando mklink

O comando mklink Warning: para criar symlinks requer privilégios de administrador para ser executado corretamente. Mesmo como uma conta de administrador, será necessário executar o Prompt de comando "Como administrador", a menos que o modo de desenvolvedor esteja ativado

Permissões impróprias:
Imagem do Prompt de Comando do Windows mostrando falha do comando devido a permissões

Permissões adequadas:
Imagem do Prompt de Comando do Windows executada como Administrador

Estes são os comandos para criar o link:

C:\<PATH TO SRC>\enabled_vhosts> mklink <Target File Name> ..\available_vhosts\<Destination File Name>

Este é um exemplo de comando preenchido para referência:

C:\> git clone https://github.com/adobe/aem-project-archetype.git
C:\> cd aem-project-archetype\src\main\archetype\dispatcher.ams\src\conf.d\enabled_vhosts\
C:\aem-project-archetype\src\main\archetype\dispatcher.ams\src\conf.d\enabled_vhosts> mklink aem_flush.vhost ..\available_vhost\aem_flush.vhost
symbolic link created for aem_flush.vhost <<===>> ..\available_vhosts\aem_flush.vhost

Modo de desenvolvedor ( Windows 10 )

Quando colocado no Modo de desenvolvedor, o Windows 10 permite testar mais facilmente os aplicativos que você está desenvolvendo, usar o ambiente shell do Ubuntu Bash, alterar uma variedade de configurações focadas no desenvolvedor e fazer outras coisas desse tipo.

O Microsoft parece continuar a adicionar recursos ao Modo de desenvolvedor ou habilitar alguns desses recursos por padrão, uma vez que alcançam uma adoção mais generalizada e são considerados estáveis (por exemplo, com a Atualização de criadores, o ambiente do Ubuntu Bash Shell não precisa mais do Modo de desenvolvedor).

E as ligações simbólicas? Com o Modo de desenvolvedor ATIVADO, não há necessidade de executar um prompt de comando com privilégios elevados para poder criar symlinks. Portanto, quando o Modo de desenvolvedor estiver ativado, qualquer usuário poderá criar symlinks.

Depois de ativar o Modo de desenvolvedor, os usuários devem fazer logoff/logon para que as alterações entrem em vigor.

Agora você pode ver sem executar o como um administrador o comando funciona

Imagem do Prompt de Comando do Windows executada como um usuário normal com o Modo de Desenvolvedor habilitado

Abordagem alternativa/programática

Há uma política específica que pode permitir que determinados usuários criem links simbólicos → Criar links simbólicos (Windows 10) - Segurança do Windows | Documentação do Microsoft

PROs:

  • Isso pode ser aproveitado pelos clientes para permitir programaticamente a criação de links simbólicos para todos os desenvolvedores em sua organização (ou seja, o Ative Diretory) sem precisar habilitar o Modo de desenvolvedor manualmente em cada dispositivo.
  • Além disso, essa política deve estar disponível em versões anteriores do MS Windows que não oferecem o Modo de Desenvolvedor.

Ícones:

  • Esta política parece não ter efeito sobre os usuários pertencentes ao grupo Administradores. Os administradores ainda precisariam executar o prompt de comando com privilégios elevados. Estranho.

O logoff/logon do usuário será necessário para que as alterações na diretiva local/de grupo tenham efeito.

Execute gpedit.msc, adicione/altere usuários conforme necessário. Administradores estão lá por padrão

Janela do Editor de Diretiva de Grupo mostrando permissão para ajustar

O Git lida com symlinks de acordo com a opção core.symlinks

Source: Git - Documentação de git-config

Se core.symlinks for falso, os links simbólicos serão verificados como arquivos simples pequenos que contêm o texto do link. git-update-index[1] e git-add[1] não alterarão o tipo gravado para arquivo regular. Útil em sistemas de arquivos como FAT, que não suportam links simbólicos.
O padrão é verdadeiro, exceto git-clone[1] ou git-init[1] will probe and set core.symlinks false if appropriate when the repository is created.. Na maioria dos casos, o Git presumirá que o Windows não é bom para symlinks e definirá como falso.

O comportamento do Git no Windows é bem explicado aqui: Links simbólicos · Wiki git para windows/git · GitHub

Info: As suposições listadas na documentação vinculada acima parecem estar corretas com uma possível configuração do desenvolvedor de AEM no Windows, principalmente o NTFS e o fato de que temos apenas links simbólicos de arquivo vs. Links simbólicos de diretório

Esta é a boa notícia: desde o Git para Windows versão 2.10.2, o instalador tem uma opção explícita para habilitar o suporte a links simbólicos.

Warning: a opção core.symlink pode ser fornecida no tempo de execução durante a clonagem do repositório, ou pode ser armazenada como uma configuração global.

Mostrando o instalador do GIT mostrando suporte para symlinks

O Git para Windows armazenará preferências globais em "C:\Program Files\Git\etc\gitconfig". Essas configurações podem não ser consideradas por outros aplicativos clientes Git.
Este é o ponto positivo, nem todos os desenvolvedores usarão o cliente nativo Git (ou seja, Git Cmd, Git Bash) e alguns dos aplicativos do Git Desktop (por exemplo, GitHub Desktop, Atlassian Sourcetree) podem ter configurações/padrões diferentes para usar o Sistema ou um Git incorporado

Aqui está uma amostra do que está dentro do arquivo gitconfig

[diff "astextplain"]
    textconv = astextplain
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
[http]
    sslBackend = openssl
    sslCAInfo = C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
[core]
    autocrlf = true
    fscache = true
    symlinks = true
[pull]
    rebase = false
[credential]
    helper = manager-core
[credential "https://dev.azure.com"]
    useHttpPath = true
[init]
    defaultBranch = master

Dicas da linha de comando Git

Pode haver cenários em que seja necessário criar novos links simbólicos (por exemplo, adicionar um novo vhost ou um novo farm).

Vimos na documentação acima que o Windows oferece um comando "mklink" para criar links simbólicos.

Se você trabalhar em um ambiente Git Bash, poderá usar o comando Bash padrão ln -s, mas ele precisará ter o prefixo de uma instrução especial, como o exemplo aqui:

MSYS=winsymlinks:nativestrict ln -s test_vhost_symlink ../dispatcher/src/conf.d/available_vhosts/default.vhost

Resumo

Para que o Git manipule links simbólicos corretamente (pelo menos para o escopo da linha de base de configuração atual do Dispatcher do AEM) em um sistema operacional Microsoft Windows, você precisará:

Item
Versão/configuração mínima
Versão/configuração recomendada
Sistema Operacional
Windows Vista ou mais recente
Atualização do Windows 10 Creator ou mais recente
Sistema de arquivos
NTFS
NTFS
Capacidade de lidar com symlinks para o usuário do Windows
"Create symbolic links" Grupo/Política local under "Group Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment"
Modo de Desenvolvedor do Windows 10 habilitado
GIT
Versão 1.5.3 do cliente nativo
Native Client versão 2.10.2 ou mais recente
Configuração do Git
Opção --core.symlinks=true ao fazer um clone git da linha de comando
Configuração global do Git
[core]
symlinks = true
Caminho de configuração do cliente Git nativo: C:\Program Files\Git\etc\gitconfig
Local padrão para clientes Git Desktop: %HOMEPATH%\.gitconfig

Note: Se você já tiver um repositório local, precisará clonar novamente a partir da origem. Você pode clonar para um novo local e mesclar manualmente suas alterações locais não confirmadas/não preparadas no repositório recém-clonado.

recommendation-more-help
fd0a4cf8-7fa9-4716-b40f-9320d981f47a