<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Bad It Boys Blog</title>
        <link>https://baditboys.netlify.app/blog</link>
        <description>Bad It Boys Blog</description>
        <lastBuildDate>Sat, 02 Jan 2021 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>pt</language>
        <item>
            <title><![CDATA[Código, uma sinfonia com TabNine e Visual Studio Code]]></title>
            <link>https://baditboys.netlify.app/blog/tabnine</link>
            <guid>https://baditboys.netlify.app/blog/tabnine</guid>
            <pubDate>Sat, 02 Jan 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[É um programador apaixonado que procura uma forma de harmonizar o seu código para criar uma sinfonia de linhas de programação? Depois TabNine e Visual Studio Code são as ferramentas para si.]]></description>
            <content:encoded><![CDATA[<p>É um programador apaixonado que procura uma forma de harmonizar o seu código para criar uma sinfonia de linhas de programação? Depois TabNine e Visual Studio Code são as ferramentas para si.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="o-que-é-tabnine">O que é TabNine<a href="#o-que-é-tabnine" class="hash-link" aria-label="Link direto para O que é TabNine" title="Link direto para O que é TabNine">​</a></h2><p>TabNine é o derradeiro add-on de desenvolvimento, oferecendo sugestões de código em tempo real para o ajudar a atingir a perfeição num instante. E com uma instalação fácil no Visual Studio Code, pode começar a tocar a sua sinfonia de código num instante.</p><p>TabNine é um virtuoso de programação, compreendendo o contexto do seu código para sugerir as melhores linhas de código. Isto pode ajudá-lo a evitar erros comuns e a escrever um código mais eficiente. Por exemplo, se estiver a escrever uma peça de código para iterar através de uma lista, TabNine pode sugerir as melhores opções para percorrer essa lista, tais como o laço "para" ou o método "mapa".</p><p>TabNine é também um compositor genial, sempre actualizado com as últimas tendências de desenvolvimento. Isto significa que pode contar com o TabNine para lhe dar as melhores sugestões, independentemente da versão da sua linguagem de programação que utilizar. E com o Visual Studio Code, tem um ambiente de desenvolvimento completo para tocar a sua sinfonia de código.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="instalando-tabnine">Instalando TabNine<a href="#instalando-tabnine" class="hash-link" aria-label="Link direto para Instalando TabNine" title="Link direto para Instalando TabNine">​</a></h2><p>Para utilizar TabNine com Visual Studio Code, basta seguir estes passos simples:</p><ul><li>Abra o Código Visual Studio e vá para a secção Extensões.</li><li>Pesquise TabNine na lista de extensões disponíveis.</li><li>Clique em Instalar para agendar a extensão.</li><li>Uma vez concluída a instalação, clicar em Activate para começar a utilizar o TabNine.</li><li>Para utilizar TabNine, basta começar a digitar o código e seleccionar uma sugestão de código a partir da extensão.</li></ul><p>Uma vez instalado, terá de criar uma conta TabNine para tirar partido de todas as características desta ferramenta de desenvolvimento. Isto leva apenas alguns minutos e permitir-lhe-á beneficiar de todas as sugestões em tempo real e actualizações constantes da TabNine. Por isso não espere mais e adicione hoje o TabNine ao seu ambiente de desenvolvimento do Visual Studio Code!</p><p>TabNine e Visual Studio Code são as ferramentas de desenvolvimento perfeitas para compor a sua sinfonia de código. Com sugestões em tempo real, compreensão do contexto, actualizações constantes e um ambiente de desenvolvimento completo, pode criar peças épicas de desenvolvimento em pouco tempo. Portanto, não espere mais e deixe a sua paixão pela programação fluir com TabNine e Visual Studio Code.</p>]]></content:encoded>
            <category>vscode</category>
            <category>development</category>
        </item>
        <item>
            <title><![CDATA[Dockerfile]]></title>
            <link>https://baditboys.netlify.app/blog/docker-file</link>
            <guid>https://baditboys.netlify.app/blog/docker-file</guid>
            <pubDate>Mon, 19 Oct 2020 09:20:15 GMT</pubDate>
            <description><![CDATA[Olá, este post irá explicar como criar um Dockerfile para um contentor Ruby que já tem MDL instalado.]]></description>
            <content:encoded><![CDATA[<p>Olá, este post irá explicar como criar um Dockerfile para um contentor Ruby que já tem MDL instalado.
Por favor, verifique o meu anterior post para compreender melhor o Docker.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="o-que-é-o-t">O que é o t?<a href="#o-que-é-o-t" class="hash-link" aria-label="Link direto para O que é o t?" title="Link direto para O que é o t?">​</a></h2><p>Um Dockerfile é um documento de texto que contém todos os comandos que um utilizador poderia chamar na linha de comando para montar uma imagem.
Utilizando a construção da doca os utilizadores podem criar uma construção automática que executa sucessivamente várias instruções de linha de comando.</p><p>Tal como o Vagrant que usa um ficheiro vagabundo para criar e personalizar uma máquina virtual de acordo com as suas necessidades, o Docker usa um ficheiro de doca para criar e personalizar um contentor!
Podem ser semelhantes, mas são muito diferentes! (pode aprender como usar o Vagrant para criar um Windows Server vm <a href="https://baditboys.netlify.app/posts/windowsserver/" target="_blank" rel="noopener noreferrer">aqui</a>)</p><p>Como já foi dito anteriormente, para este exemplo, vamos criar um recipiente de rubi com mdl instalado.
Por isso, precisamos de começar o nosso ficheiro portuário:</p><div class="language-dockerfile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-dockerfile codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">FROM ruby:latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>FROM cria uma camada a partir da última imagem Ruby Docker.</p><div class="language-dockerfile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-dockerfile codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">FROM ruby:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WORDIR /mdl</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>A instrução WORDIR define o directório de trabalho para qualquer instrução RUN, CMD, ENTRYPOINT, COPY e ADD que a siga no Dockerfile.
Se o WORKDIR não existir, será criado mesmo que não seja utilizado em qualquer instrução subsequente do Dockerfile.</p><div class="language-dockerfile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-dockerfile codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">FROM ruby:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WORDIR /mdl</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN gem install mdl</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>O RUN tem 2 formas:</p><ul><li>comando RUN (forma shell, o comando é executado numa shell, que por defeito é /bin/sh -c no Linux ou cmd /S /C no Windows)</li><li>RUN <!-- -->["executável", "param1", "param2"]<!-- --> (formulário exec)</li></ul><p>No nosso exemplo, a RUN executa um <strong>comando</strong> que instala MDL directamente no contentor de rubi</p><div class="language-dockerfile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-dockerfile codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">FROM ruby:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WORDIR /mdl</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN gem install mdl</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ENTRYPOINT [ "/bin/bash" ]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>ENTRYPOINT, tal como RUN, tem 2 formas! Forma Shell ou forma executiva.</p><p>A forma exec, que é a forma preferida:</p><p>ENTRYPOINT <!-- -->["executável", "param1", "param2"]</p><p>A forma da concha:</p><p>ENTRYPOINT comando param1 param2</p><p>No nosso caso, estamos a utilizá-lo de forma executiva para que possamos executar a nossa bash.
Isto deixará o nosso contentor aberto porque a bash está a funcionar em segundo plano.</p><p>Por isso, agora que temos o nosso ficheiro portuário, temos de construir o nosso contentor a fim de o executar!</p><div class="language-dockerfile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-dockerfile codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker build --tag user/mdl</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>O comando <strong>---tag*</strong> nomeia a imagem do recipiente em questão.
E agora que o contentor está construído, podemos executá-lo!</p><p>Para tal, será utilizado o seguinte comando:</p><div class="language-dockerfile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-dockerfile codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -tid --name mdl -v /home/vagrant:/mdlfiles user/mdl</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Para ter a certeza se o seu contentor está a funcionar correctamente, faça um simples ``docker ps -a```` apenas para ter a confirmação.
Ao fazê-lo, irá mostrar-lhe todos os detalhes e estado do seu contentor.</p><p>Após confirmar que o contentor está a funcionar, queremos executar <strong>mdl*</strong> para verificar o nosso ficheiro de marcação.
Para o fazer, teremos de executar o comando mdl dentro de uma bash que irá obter o ficheiro .md dentro da pasta que partilhámos e a que demos o nome de "mdlfiles".</p><div class="language-dockerfile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-dockerfile codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker exec mdl bash -c "mdl /mdfile/myfile.md"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Se tiver algumas inconsistências em relação às regras da ferramenta mdl, obterá um resultado como este:</p><div class="language-dockerfile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-dockerfile codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:5: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:77: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:25: MD012 Multiple consecutive blank lines</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:51: MD012 Multiple consecutive blank lines</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:13: MD013 Line length</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:52: MD013 Line length</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:54: MD013 Line length</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:89: MD024 Multiple headers with the same content</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:19: MD026 Trailing punctuation in header</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/mdfile/docker.md:26: MD026 Trailing punctuation in header</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Depois de os corrigir a todos, não deverá ter retorno após o seu comando! :)</p>]]></content:encoded>
            <category>docker</category>
        </item>
        <item>
            <title><![CDATA[Como instalar o Markdown Lint num contentor Docker]]></title>
            <link>https://baditboys.netlify.app/blog/mdldocker</link>
            <guid>https://baditboys.netlify.app/blog/mdldocker</guid>
            <pubDate>Mon, 19 Oct 2020 09:20:15 GMT</pubDate>
            <description><![CDATA[Olá, este post irá explicar como instalar e utilizar Markdown Lint num contentor Docker.]]></description>
            <content:encoded><![CDATA[<p>Olá, este post irá explicar como instalar e utilizar Markdown Lint num contentor Docker.
Por favor, verifique o meu posto anterior para compreender melhor o Docker.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="antes-de-começar">Antes de começar<a href="#antes-de-começar" class="hash-link" aria-label="Link direto para Antes de começar" title="Link direto para Antes de começar">​</a></h2><p>Por favor, certifique-se de que verificou o meu posto Docker anterior, porque vou utilizar algumas referências a esse posto, e seria mais fácil seguir este posto :)</p><p>Neste caso, estará a utilizar um recipiente de rubi para instalar a nossa ferramenta mdl. Mostrará como instalar um contentor de rubi nesse post anterior do Docker que mencionei.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="markdown-lint">Markdown Lint<a href="#markdown-lint" class="hash-link" aria-label="Link direto para Markdown Lint" title="Link direto para Markdown Lint">​</a></h3><p>Esta é uma ferramenta para ficheiros Markdown (md) que inclui uma biblioteca de regras para encorajar normas e consistência para ficheiros Markdown e que confirma se os ficheiros estão a seguir estas regras.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="contentor-ruby">Contentor Ruby<a href="#contentor-ruby" class="hash-link" aria-label="Link direto para Contentor Ruby" title="Link direto para Contentor Ruby">​</a></h3><p>Por isso, para começar, vamos correr o contentor de rubi!
Copie colar a seguinte linha no seu terminal:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">docker</span><span class="token plain"> run -tid -v /home/vagrant:/mdfiles --name ruby --entrypoint</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/bin/bash ruby:latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Muito bem, então olhe para esta linha de comando e pergunte-se o que no mundo é tudo isto!? Bem, deixe-me explicar :)</p><p>A -tid é 3 coisas diferentes:</p><p>-t ou --tty: Atribuir um pseudo-TTY
-i ou --interactiva: Manter STDIN aberto mesmo que não anexado
-d ou --detach: Modo destacado: comando de execução em segundo plano</p><p>Depois, fazemos um -v de volume, que no nosso caso, é utilizado para espelhar a pasta onde temos o nosso ficheiro .md.
Isto permitir-nos-á ter "a mesma pasta" no nosso contentor. Lembre-se que o <strong>/</strong> é a raiz e depois criamos uma nova pasta no contentor chamada "mdfiles".</p><p>Depois utilizamos o --nome e como o nome sugere é para attibuir um nome para o seu contentor.</p><p>Corremos --oponto de entrada /bin/bash para deixar abrir uma cave. Isto permite que o contentor fique aberto (para cima) em vez de fechar logo após a corrida.
Quando se faz um executante, este não vai à batida (execut é sh e não bash).
É por isso que temos de fazer com que o contentor funcione bash, para podermos usar todo o comando bash</p><p>A diferença entre a execução da doca e a execução da doca é que a doca executa um comando sobre um contentor em execução. Por outro lado, a docker run cria um contentor temporário, executa o comando no mesmo e pára o contentor quando este é $ Então usamos --entrypoint para correr um contentor, e deixamo-lo abrir até decidirmos pará-lo</p><p>Também pode dar um comando directamente ao seu contentor, ao fazê-lo:
Nota: Se tiver um contentor com janelas, usa o powerhell em vez de bash</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">docker</span><span class="token plain"> </span><span class="token builtin class-name">exec</span><span class="token plain"> ruby </span><span class="token function" style="color:#d73a49">bash</span><span class="token plain"> -c </span><span class="token string" style="color:#e3116c">"ip add"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Executamos o terminal bash com o comando (-c) "ip add".
Isto mostrar-lhe-á o endereço IP do seu contentor de rubi</p><p>E agora podemos instalar a ferramenta mdl:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">docker</span><span class="token plain"> </span><span class="token builtin class-name">exec</span><span class="token plain"> ruby </span><span class="token function" style="color:#d73a49">bash</span><span class="token plain"> -c </span><span class="token string" style="color:#e3116c">"gem install mdl"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Óptimo, tudo parece agradável e limpo!
Agora, escolha um ficheiro .md à sua escolha, e execute o mdl:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">docker</span><span class="token plain"> </span><span class="token builtin class-name">exec</span><span class="token plain"> ruby </span><span class="token function" style="color:#d73a49">bash</span><span class="token plain"> -c </span><span class="token string" style="color:#e3116c">"mdl /mdfiles/myfile.md"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto fará correr a ferramenta mdl através do seu ficheiro md e informá-lo-á de quantos erros tem, as linhas que são e qual foi a regra que não foi respeitada.</p>]]></content:encoded>
            <category>docker</category>
        </item>
        <item>
            <title><![CDATA[Docker]]></title>
            <link>https://baditboys.netlify.app/blog/docker</link>
            <guid>https://baditboys.netlify.app/blog/docker</guid>
            <pubDate>Thu, 15 Oct 2020 09:20:15 GMT</pubDate>
            <description><![CDATA[Olá, este post irá explicar como funciona o Docker e as suas bases.]]></description>
            <content:encoded><![CDATA[<p>Olá, este post irá explicar como funciona o Docker e as suas bases.
Vamos usar uma Caixa Vagrante e Virual para criar uma Máquina Virtual dedicada ao estivador. Pode obter o ficheiro vagabundo <a href="https://app.vagrantup.com/gusztavvargadr/boxes/docker-linux" target="_blank" rel="noopener noreferrer">aqui</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="o-que-é-isso-">O que é isso ?<a href="#o-que-é-isso-" class="hash-link" aria-label="Link direto para O que é isso ?" title="Link direto para O que é isso ?">​</a></h2><p>Como explicado em <a href="https://opensource.com/resources/what-docker" target="_blank" rel="noopener noreferrer">opensource.com</a> Docker é uma ferramenta concebida para facilitar a criação, implementação e execução de aplicações através da utilização de contentores. Os contentores permitem a um programador empacotar uma aplicação com todas as partes de que necessita, tais como bibliotecas e outras dependências, e implementá-la como um pacote. Ao fazê-lo, graças ao contentor, o programador pode ter a certeza de que a aplicação será executada em qualquer outra máquina Linux, independentemente de qualquer configuração personalizada que a máquina possa ter que possa diferir da máquina utilizada para escrever e testar o código.</p><p>De certa forma, o Docker é um pouco como uma máquina virtual. Mas ao contrário de uma máquina virtual, em vez de criar todo um sistema operativo virtual, Docker permite que as aplicações utilizem o mesmo kernel Linux que o sistema em que estão a correr e apenas requer que as aplicações sejam enviadas com coisas que ainda não estejam a correr no computador anfitrião. Isto dá um impulso significativo ao desempenho e reduz o tamanho da aplicação.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="como-utilizá-lo">Como utilizá-lo<a href="#como-utilizá-lo" class="hash-link" aria-label="Link direto para Como utilizá-lo" title="Link direto para Como utilizá-lo">​</a></h2><p>Para podermos gerir um recipiente, precisamos de o ter disponível para nós.
Assim, para começar precisamos de <strong>puxar</strong> o contentor procurado e para isso vamos a <a href="https://hub.docker.com/" target="_blank" rel="noopener noreferrer">DockerHub</a>.</p><p>Para o exemplo vou usar um contentor Nginx e um Grafana.</p><p>Digite no seu terminal (onde correu o seu ficheiro vagabundo) o seguinte comando:</p><p>Nginx:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">docker</span><span class="token plain"> pull nginx</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Consulte a página do DockerHub Nginx para mais detalhes <a href="https://hub.docker.com/_/nginx" target="_blank" rel="noopener noreferrer">aqui</a></p><p>Grafana:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">docker</span><span class="token plain"> pull grafana/grafana</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Consulte a página do DockerHub Grafana para mais detalhes <a href="https://hub.docker.com/r/grafana/grafana" target="_blank" rel="noopener noreferrer">aqui</a></p><p>Agora que puxámos os recipientes, eles estão "instalados" na sua máquina para que possa utilizá-los.</p><p>Mas agora temos de gerir os nossos contentores e temos de os atribuir com portos específicos.
Para o fazer, precisamos de utilizar o comando -p.</p><p>Portanto, vamos verificar como gerimos um contentor que temos disponível e como lhe atribuímos um número de porta à nossa escolha.
Para isso, copie colar a seguinte linha no seu terminal:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">docker</span><span class="token plain"> run -d --name</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">grafana -p </span><span class="token number" style="color:#36acaa">3000</span><span class="token plain">:3000 grafana/grafana</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto irá funcionar no Grafana no porto 3000. Para confirmar isto, precisaremos de ir à sua corretora e tyoe 127.0.0.1:3000
Ao fazê-lo, deve abrir o site pessoal do Grafana.</p><p>Note que quando o faz -p 3000:3000 o segundo número é o porto designado no seu anfitrião. a opção é "-p container_port_number:host_port_mapped".
Por exemplo, se fizermos -p 3000:6000 então o ip para o seu site grafana será 127.0.0.0.1:6000</p><p><strong>TIP:</strong> Se fez tudo isto e ainda teve um erro ao abrir a página web, vá verificar as suas preferências VM na VIrtualBox e certifique-se de que adiciona a porta 3000 no Port Redirections.
Para chegar ao Port Redirections basta abrir a VirtaulBox, vá à configuração do seu Docker VM à parte Network. Encontrará uma secção Advance e lá dentro estará o Port Redirection.
VB &gt; Configuração VM &gt; Rede &gt; Avanço &gt; Redireccionamento de Portas</p>]]></content:encoded>
            <category>docker</category>
        </item>
        <item>
            <title><![CDATA[Typora / MarktText WYSIWYG Markdown editores]]></title>
            <link>https://baditboys.netlify.app/blog/marktext</link>
            <guid>https://baditboys.netlify.app/blog/marktext</guid>
            <pubDate>Fri, 14 Aug 2020 21:03:59 GMT</pubDate>
            <description><![CDATA[Um editor WYSIWYG para editar ficheiros Markdown?]]></description>
            <content:encoded><![CDATA[<p>Um editor WYSIWYG para editar ficheiros Markdown?</p><p>Interrested ? Siga o guia!</p><p>Actualização: Typora não é um software de código aberto, e apenas a versão beta parece ser livre. Se a adopção de hábitos num software gratuito para software pago mais tarde o aborrece, sugerimos a utilização de um clone typora de código aberto: MarkText.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="marktext-from-markdown-with-love">MarkText, From Markdown, with Love<a href="#marktext-from-markdown-with-love" class="hash-link" aria-label="Link direto para MarkText, From Markdown, with Love" title="Link direto para MarkText, From Markdown, with Love">​</a></h2><p>Esta ferramenta chama-se typora, e o site oficial está lá: <del><a href="https://typora.io/" target="_blank" rel="noopener noreferrer">typora</a></del> <a href="https://github.com/marktext/marktext" target="_blank" rel="noopener noreferrer">MarkText</a></p><p>Apresento-vos esta ferramenta que irei testar para a série de artigos em torno do gitlab CI / CD.</p><p>Está disponível para Windows, Linux, e Mac OS.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="obtenha-o-poder-de-markdown-sem-utilizar-markdown">Obtenha o poder de Markdown, sem utilizar Markdown<a href="#obtenha-o-poder-de-markdown-sem-utilizar-markdown" class="hash-link" aria-label="Link direto para Obtenha o poder de Markdown, sem utilizar Markdown" title="Link direto para Obtenha o poder de Markdown, sem utilizar Markdown">​</a></h3><p>As características do editor fornecem-lhe o poder do formato markdown, porque é possível guardar ficheiros directamente em markdown, mas também copiar o texto em formato markdown.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="what-you-see-is-what-you-get">What You See Is What You Get<a href="#what-you-see-is-what-you-get" class="hash-link" aria-label="Link direto para What You See Is What You Get" title="Link direto para What You See Is What You Get">​</a></h4><p>Aqui está o artigo, na sua versão em francês, aberto com typora. (MarkText teria exactamente o mesmo resultado)</p><p><img loading="lazy" src="https://res.cloudinary.com/j0rdan-m/image/upload/v1597500080/baditboys/posts_content/2020-08-15_15-58_nbf3c2_p4agaz.webp" class="img_ev3q"></p><p>Pode aplicar o estilo que desejar (<em>Header 1-2-3, bold, etc.</em> ) seleccionando-o no menu, ou utilizando os atalhos padrão (CTRL+B, CTRL+I)</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="guardar-em-markdown">Guardar em Markdown<a href="#guardar-em-markdown" class="hash-link" aria-label="Link direto para Guardar em Markdown" title="Link direto para Guardar em Markdown">​</a></h4><p>Só tem de guardar o ficheiro com marktext (apenas .md está autorizado) ou escolher markdown com typora (que propõe também .txt)</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="conteúdo-da-remarcação-para-exportação">Conteúdo da remarcação para exportação<a href="#conteúdo-da-remarcação-para-exportação" class="hash-link" aria-label="Link direto para Conteúdo da remarcação para exportação" title="Link direto para Conteúdo da remarcação para exportação">​</a></h4><p><del>Typora</del> MarkText permite-lhe exportar (ou copiar) uma parte do documento, directamente com a sintaxe de markdown.</p><p>Aqui está o resultado da exportação com a versão em francês do artigo:</p><div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Un éditeur WYSIWYG pour éditer des fichiers Markdown ?</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Si ça vous intrigue, suivez le guide !</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">#</span><span class="token title important"> Typora, par amour du markdown</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">C'est outil s'appelle typora, et le site officiel est là: </span><span class="token url" style="color:#36acaa">[</span><span class="token url content" style="color:#36acaa">typora</span><span class="token url" style="color:#36acaa">](</span><span class="token url" style="color:#36acaa">https://typora.io/</span><span class="token url" style="color:#36acaa">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Je vous présente cet outil que je vais tester pour la série d'article autour de gitlab CI/CD.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Il est disponible pour Windows, Linux, et en version beta (à l'heure d'acriture de ces lignes) pour Mac OS.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> Des fonctionnalités pour profiter de la puissance du markdown</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Les fonctionnalités de l'éditeur permettent de profiter de la puissance du format markdown, car il est à la fois possible de sauvegarder des fichiers directement en markdown, mais également de copier le texte au format markdown.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">###</span><span class="token title important"> Un éditeur wysiwyg</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Voici, par exemple, le rendu de cet article (dans sa version française)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Só tem de seleccionar a peça que pretende exportar, e utilizar a entrada do menu, ou utilizar o atalho: CTRL + MAJ + C (o atalho funciona tanto em typora como em marktext)</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="corrector-ortográfico">Corrector ortográfico<a href="#corrector-ortográfico" class="hash-link" aria-label="Link direto para Corrector ortográfico" title="Link direto para Corrector ortográfico">​</a></h4><p>Presumo que saibam do que estou a falar.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="qualidade-markdown">Qualidade Markdown<a href="#qualidade-markdown" class="hash-link" aria-label="Link direto para Qualidade Markdown" title="Link direto para Qualidade Markdown">​</a></h4><p>Utilizamos, para garantir a qualidade da sintaxe dos nossos ficheiros markdown, uma ferramenta chamada markdownlint. A versão em francês do post obteve esse resultado:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mdl content/posts/*.md --ignore-front-matter --rules ~MD013,~MD026,~MD033</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:13: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:15: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:21: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:23: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:27: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:39: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:45: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:47: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:50: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:52: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:58: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:60: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:64: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:75: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:81: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:82: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:84: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:96: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:100: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:109: MD009 Trailing spaces</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:35: MD012 Multiple consecutive blank lines</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:36: MD012 Multiple consecutive blank lines</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:90: MD012 Multiple consecutive blank lines</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:91: MD012 Multiple consecutive blank lines</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:105: MD012 Multiple consecutive blank lines</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">content/posts/typora_fr.fr.md:106: MD012 Multiple consecutive blank lines</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>A sintaxe de markdown parece ser boa. A única coisa que não é fixada pela ferramenta são as regras que dizem respeito a espaços duplos, espaços no fim das linhas, linhas em branco duplas, etc.</p><p>Numa palavra: tudo o que se pode VER no wySiwyg.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="o-propósito-da-utilização-do-marktexttypora">O propósito da utilização do Marktext/Typora<a href="#o-propósito-da-utilização-do-marktexttypora" class="hash-link" aria-label="Link direto para O propósito da utilização do Marktext/Typora" title="Link direto para O propósito da utilização do Marktext/Typora">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="postagens-de-websites-de-hugo">Postagens de websites de Hugo<a href="#postagens-de-websites-de-hugo" class="hash-link" aria-label="Link direto para Postagens de websites de Hugo" title="Link direto para Postagens de websites de Hugo">​</a></h4><p>O MarkText é muito útil para escrever o conteúdo de texto do sítio de Hugo, gosta de posts ou descrições de autores.</p><p>Por exemplo, pode simplesmente copiar o conteúdo MD no editor web gitlab/github, colá-lo no Marktext, modificá-lo, e copiar como MD para o colar novamente no editor gitlab/github.</p><p>Também pode gerir o foder de conteúdo directamente na ferramenta, mas terá de usar o gitlab/github em bash para empurrar a sua modificação no repositório gitlab/github:</p><p><img loading="lazy" src="https://res.cloudinary.com/j0rdan-m/image/upload/v1597501064/baditboys/posts_content/2020-08-15_16-16_jeccl9_gmj1gh.webp" class="img_ev3q"></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="as-nossas-ferramentas">As nossas ferramentas<a href="#as-nossas-ferramentas" class="hash-link" aria-label="Link direto para As nossas ferramentas" title="Link direto para As nossas ferramentas">​</a></h4><p>Estamos a utilizar um conjunto de ferramentas baseadas em (ou conformes com) markdown:</p><ul><li>Wikis;</li><li>READMEs de código de base;</li><li>Base de Conhecimento;</li><li>Relatórios de Decisão de Arquitectura</li></ul><p>A ferramenta de exportação (também conhecida como <em>copy as markdown</em>) é muito útil para poder editar texto como num editor de texto padrão, mas poder usar o poder de markdown quando se pretende alterar a estrutura de um texto. Este caso aparece normalmente quando se edita um wiki ou uma página kb. Quanto mais acrescentarmos, mais precisamos de rever a estrutura.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusão">Conclusão<a href="#conclusão" class="hash-link" aria-label="Link direto para Conclusão" title="Link direto para Conclusão">​</a></h2><p>Vou começar os artigos sobre o gitlab CI/CD com Marktext, e, para ser honesto, penso realmente que vou voltar a um editor MD.</p><p>Mas tenho de confessar que é uma grande ferramenta para aqueles que querem obter o poder do Marktext sem aprender/exercitar a sintaxe. E não tenho a certeza absoluta de que voltarei a um editor padrão depois de adquirir hábitos no Marktext...</p>]]></content:encoded>
            <category>hugo-tips</category>
            <category>markdown</category>
        </item>
        <item>
            <title><![CDATA[Chocolatey]]></title>
            <link>https://baditboys.netlify.app/blog/chocolatey</link>
            <guid>https://baditboys.netlify.app/blog/chocolatey</guid>
            <pubDate>Fri, 31 Jul 2020 08:39:21 GMT</pubDate>
            <description><![CDATA[Este post serve para explicar o que é o Chocolatey, como podemos instalá-lo e como podemos usá-lo]]></description>
            <content:encoded><![CDATA[<p>Este post serve para explicar o que é o Chocolatey, como podemos instalá-lo e como podemos usá-lo</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="chocolatey">Chocolatey:<a href="#chocolatey" class="hash-link" aria-label="Link direto para Chocolatey:" title="Link direto para Chocolatey:">​</a></h2><p>Chocolatey é um módulo para o Windows instalar pacotes (ferramentas) na máquina. Também conhecida como ferramenta de gerenciamento de software.</p><p>Chocolatey nos permite executar várias tarefas através linha de comando.</p><p>Por exemplo, "choco install aplicação" é o equivalente a "apt install aplicação" no Ubuntu.</p><p>Portanto, para instalá-lo, precisas copiar e colar a linha de comando seguinte no teu terminal:</p><div class="language-cfg codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cfg codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  Set-ExecutionPolicy Bypass -Scope Process -orce; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SHELL</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This command will install chocolatey and allow you to use "choco install" to install other tools into your windows machine such as Git or VSCode.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="exemplo">Exemplo:<a href="#exemplo" class="hash-link" aria-label="Link direto para Exemplo:" title="Link direto para Exemplo:">​</a></h2><p>Digamos que desejas instalar algumas ferramentas necessárias e fazer isso com Chocolatey!</p><p>Portanto, no teu terminal, digita um dos seguintes comandos:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">choco install git -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">choco install vscode -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">choco install hugo -y</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Estes comandos instalam as respectivas ferramentas (aplicação), mas podes instalar as ferramentas que desejas. A única coisa que precisas é <strong>choco install "ferramenta que desejas"</strong> :)</p><p>Nota que <strong>-y</strong> é responder Sim às perguntas feitas pelo processo de instalação;</p>]]></content:encoded>
            <category>windows</category>
            <category>vm</category>
        </item>
        <item>
            <title><![CDATA[Como criar uma máquina virtual Ubuntu com Vagrant]]></title>
            <link>https://baditboys.netlify.app/blog/ubuntu</link>
            <guid>https://baditboys.netlify.app/blog/ubuntu</guid>
            <pubDate>Wed, 29 Jul 2020 15:18:01 GMT</pubDate>
            <description><![CDATA[Este post explicará como criar uma máquina Ubuntu com muita facilidade e rapidez!]]></description>
            <content:encoded><![CDATA[<p>Este post explicará como criar uma máquina Ubuntu com muita facilidade e rapidez!</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="o-que-é-preciso">O que é preciso?<a href="#o-que-é-preciso" class="hash-link" aria-label="Link direto para O que é preciso?" title="Link direto para O que é preciso?">​</a></h2><p>Usaremos duas ferramentas para tornar a implantação da vm Ubuntu muito rápida!</p><p>Essas ferramentas são Vagrant e Virtual Box.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="instalação">Instalação<a href="#instalação" class="hash-link" aria-label="Link direto para Instalação" title="Link direto para Instalação">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-download">Via Download<a href="#via-download" class="hash-link" aria-label="Link direto para Via Download" title="Link direto para Via Download">​</a></h3><p>Nota que podes escolher o sistema operacional em que deseja instalar a ferramenta (Linux, Windows, etc ...)</p><ul><li><p>Vagrant -&gt; <a href="https://www.vagrantup.com/downloads.html" target="_blank" rel="noopener noreferrer">download Vagrant</a></p></li><li><p>Virtual Box -&gt; <a href="https://www.virtualbox.org/wiki/Downloads" target="_blank" rel="noopener noreferrer">download Virtualbox</a></p></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="usando-o-gerencidor-de-pacotes-package-management">Usando o gerencidor de pacotes (package management)<a href="#usando-o-gerencidor-de-pacotes-package-management" class="hash-link" aria-label="Link direto para Usando o gerencidor de pacotes (package management)" title="Link direto para Usando o gerencidor de pacotes (package management)">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="windows---chocolatey">Windows - Chocolatey<a href="#windows---chocolatey" class="hash-link" aria-label="Link direto para Windows - Chocolatey" title="Link direto para Windows - Chocolatey">​</a></h4><p>Para começar, precisas instalar o Chocolatey. Para isso, tenho um post que explica como fazê-lo corretamente aqui -&gt; <a href="https://community.chocolatey.org/packages/vagrant" target="_blank" rel="noopener noreferrer">Chocolatey</a></p><p>Agora que Chocolatey está instalado, vamos usá-lo.</p><p>Vamos começar com o VirtualBox, portanto, para isso, usa a linha de comando seguinte:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">choco install virtualbox</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>E agora, Vagrant:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">choco install vagrant</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linux---apt">Linux - apt<a href="#linux---apt" class="hash-link" aria-label="Link direto para Linux - apt" title="Link direto para Linux - apt">​</a></h4><p>Esse é o mesmo conceito que o <strong>choco install</strong>, mas para o Linux, é claro.</p><p>Portanto, no Linux, usaremos <strong>apt install</strong>.</p><p>VirtualBox:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">apt</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> virtualbox</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Vagrant:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">apt</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> vagrant</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deployment">Deployment<a href="#deployment" class="hash-link" aria-label="Link direto para Deployment" title="Link direto para Deployment">​</a></h3><p>Então, primeiro precisamos da caixa do Vagrant (não te esqueças de ver o post sobre Vagrant na página para aprender um pouco mais sobre as caixas do Vagrant).</p><p>Neste exemplo, usaremos o <a href="https://app.vagrantup.com/ubuntu/boxes/bionic64" target="_blank" rel="noopener noreferrer">Ubuntu 18.04 LTS</a></p><p>Agora, na tua máquina local, acessa o teu terminal, cria uma pasta para a caixa do Vagrant (box) e, dentro da nova pasta, digita:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant init ubuntu/bionic64</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto adicionará a caixa ao teu Vagrant local.</p><p>E agora, vamos criar a nossa máquina virtual Ubuntu! Então escreve no teu terminal:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant up</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>E aí está! A tua primeira vm Ubuntu!</p><p>Continua a explorar os nossos posts para dicas ;)</p>]]></content:encoded>
            <category>ubuntu</category>
            <category>vm</category>
        </item>
        <item>
            <title><![CDATA[Cria uma VM Windows Server com Vagrant]]></title>
            <link>https://baditboys.netlify.app/blog/windowsserver</link>
            <guid>https://baditboys.netlify.app/blog/windowsserver</guid>
            <pubDate>Mon, 27 Jul 2020 09:21:08 GMT</pubDate>
            <description><![CDATA[Olá pessoal, criei este post para explicar como podemos criar uma VM (virtual machine) Windows Server usando Vagrant e com alguns aplicativos extras. Aprenderemos como instalar todas as ferramentas necessárias para criar o nosso servidor.]]></description>
            <content:encoded><![CDATA[<p>Olá pessoal, criei este post para explicar como podemos criar uma VM (virtual machine) Windows Server usando Vagrant e com alguns aplicativos extras. Aprenderemos como instalar todas as ferramentas necessárias para criar o nosso servidor.</p><p>Vamos precisar de Vagrant, Chocolatey, Git, Hugo e VSCode.</p><p>Vamos começar!</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="vagrant">Vagrant<a href="#vagrant" class="hash-link" aria-label="Link direto para Vagrant" title="Link direto para Vagrant">​</a></h2><p>Agora vamos ver como podemos criar um servidor para as nossas necessidades e desejos.</p><p>Primeiro, a VM. Decidimos ir com um sistema operacional Windows Server 2019 e, para isso, procuramos uma box (vagrant box) do Windows Server em <a href="https://app.vagrantup.com/boxes/search" target="_blank" rel="noopener noreferrer">vagrants box website</a></p><p>No site, basta escrever na caixa de pesquisa, o tipo de VM que queres (pode ser Linux, Windows, etc). No nosso caso, basta escrever "mcree / win2019".</p><p>Dentro da página da box, você encontrará "Vagrantfile" e "New". O interesse para este post é o "Vagrantfile".</p><p>Como podes ver na página da box, tem a configuração inicial do Vagrantfile. Vais precisar disso para criar (up) o teu servidor virtual.</p><p>Este é o começo do nosso fichiero Vagrant:</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Como podes ver, temos a caixa para nossa vm e a sua versão.</p><p>Agora, vamos adicionar o nome da nossa vm e a quantidade de memória (RAM) que queremos atribuir:</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">wvm.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Agora que temos o nome da nossa vm e a capacidade de RAM, vamos configurar a rede:</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">wvm.vm.define "Windows Server 2019" do |web|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  web.vm.hostname = "winserver19"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  web.vm.network "public_network"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Aqui, definimos o nome do host da vm e o tipo de rede que desejamos fornecer à vm (pública, privada, etc.)</p><p>Observa que existem várias variantes de configuração de rede; este post mostrará apenas a maneira mais básica de <strong>Up</strong> uma vm;</p><p>E o Vagrantfile está assim agora:</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  wvm.vm.define "Windows Server 2019" do |web|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    web.vm.hostname = "winserver19"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    web.vm.network "public_network"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>É muito simples e fácil (exatamente como gostamos) configurar um Vagrantfile.</p><p>Mas queremos ter algumas ferramentas instaladas na vm quando criamos a nossa máquina virtual. Para fazer isso, vamos usar um terminal (shell).</p><p>Então, precisamos adicionar ao Vagrantfile o terminal:</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SHELL</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Este é o terminal que nos permitirá de dar comandos ao terminal para adicionar, remover, mover e um monte de outras coisas para a vm;</p><p>Então, vamos instalar o Chocolatey (vê abaixo a explicação chocolatey e como instalá-lo) e, usando o Chocolatey, vamos instalar o Git, VSCode e Hugo;</p><p>Repara que <strong>SHELL</strong> no final do terminal substitui o <strong>end</strong> nas outras configurações vistas anteriormente.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="chocolatey">Chocolatey:<a href="#chocolatey" class="hash-link" aria-label="Link direto para Chocolatey:" title="Link direto para Chocolatey:">​</a></h2><p>Chocolatey é um módulo para o Windows instalar pacotes (ferramentas) na máquina. Por exemplo, "choco install tool" é o equivalente a "apt install tool" no Ubuntu.</p><p>Portanto, para instalá-lo, precisamos copiar e colar este comando no shell de vagrantfile:</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  Set-ExecutionPolicy Bypass -Scope Process -orce; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SHELL</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Esta linha de comando instalará o chocolatey e permitirá que uses "choco install" para instalar outras ferramentas no servidor Windows, como Git ou VSCode.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="aplicações">Aplicações:<a href="#aplicações" class="hash-link" aria-label="Link direto para Aplicações:" title="Link direto para Aplicações:">​</a></h2><p>Agora precisas instalar as ferramentas necessárias e usar o Chocolatey!</p><p>Portanto, adiciona ao teu shell de vagranfile os seguintes comandos:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">choco install git -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">choco install vscode -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">choco install hugo -y</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Estas linhas de comandos instalam as respectivas ferramentas, mas podes instalar as ferramentas que desejas e necessitas. A única coisa que precisas é <strong>choco install "ferramenta que desejas"</strong> :)</p><p>NOTA que <strong>- y</strong> é responder Sim às perguntas feitas pelo processo de instalação;</p><p>Então, o nosso Vagrantfile parece completo! Vamos ver como fica com todos os processos realizados juntos:</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="o-vagrantfile-completo">O Vagrantfile completo<a href="#o-vagrantfile-completo" class="hash-link" aria-label="Link direto para O Vagrantfile completo" title="Link direto para O Vagrantfile completo">​</a></h2><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  wvm.vm.define "Windows Server 2019" do |web|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    web.vm.hostname = "winserver19"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    web.vm.network "public_network"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Set-ExecutionPolicy Bypass -Scope Process -orce; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    choco install git -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    choco install vscode -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    choco install hugo -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
            <category>devops</category>
            <category>virtualization</category>
            <category>vagrant</category>
            <category>ansible</category>
        </item>
        <item>
            <title><![CDATA[Iniciar Hugo com GitLab CI/CD]]></title>
            <link>https://baditboys.netlify.app/blog/hugo</link>
            <guid>https://baditboys.netlify.app/blog/hugo</guid>
            <pubDate>Sat, 11 Jul 2020 21:03:59 GMT</pubDate>
            <description><![CDATA[Para ser sincero, não sabia ao certo qual seria a melhor estrutura de site quando comecei com Hugo.]]></description>
            <content:encoded><![CDATA[<p>Para ser sincero, não sabia ao certo qual seria a melhor estrutura de site quando comecei com Hugo.
No entanto, usando arquivos Markdown, um tempo de construção muito performante é necessário apenas para hospedar arquivos html estáticos e a possibilidade de produzir o site no CI / CD do gitlab, que tinha algo para me atrair!</p><p>Mas deves precisa ter cuidado, pois o início rápido do documento oficial não é compatível com uma implantação no Gitlab Pages.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="como-começar-rapidamente-com-hugo">Como começar rapidamente com Hugo<a href="#como-começar-rapidamente-com-hugo" class="hash-link" aria-label="Link direto para Como começar rapidamente com Hugo" title="Link direto para Como começar rapidamente com Hugo">​</a></h2><p>Aqui está a melhor forma de começar com Hugo na minha opinião:</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-1---seleção-de-temas">Etapa 1 - Seleção de temas<a href="#etapa-1---seleção-de-temas" class="hash-link" aria-label="Link direto para Etapa 1 - Seleção de temas" title="Link direto para Etapa 1 - Seleção de temas">​</a></h3><p>Primeiro, <strong><em>cuidadosamente</em></strong> escolhe o tema que desejas usar. Isto é importante porque a maneira como vais configurar o teu site pode ser (muito) específica para o teu tema.</p><p>Para escolher sabiamente, vai a <a href="https://themes.gohugo.io" target="_blank" rel="noopener noreferrer">themes.gohugo.io</a> e assiste à demonstração dos temas que te interessam.
Todas as demos integram a renderização da sintaxe de remarcação, o que garante que o tema atenda aos teus desejos!</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-2---nome-do-site">Etapa 2 - Nome do site<a href="#etapa-2---nome-do-site" class="hash-link" aria-label="Link direto para Etapa 2 - Nome do site" title="Link direto para Etapa 2 - Nome do site">​</a></h3><p>Segundo, escolha o nome do site.
O nome do site tem que ser o mesmo da pasta que vamos cirar para implantar o teu site nas páginas do gitlab, terias o seguinte site <code>URL: http: // username.gitlab.io / nomedapasta /</code></p><p>Se estás a criar um blog, "blog" seria um bom nome. Se o teu site servir para sugerir um produto, "productName" seria relevante.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-3---criação-do-site">Etapa 3 - Criação do site<a href="#etapa-3---criação-do-site" class="hash-link" aria-label="Link direto para Etapa 3 - Criação do site" title="Link direto para Etapa 3 - Criação do site">​</a></h3><p>Esta é a parte mais simples do tutorial. Basta digitar a seguinte linha de comando:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">hugo new site </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">nome da pasta</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Agora tens uma nova pasta chamada <em>foldername</em> com itens. Antes de fazer qualquer coisa, aplica o próximo passo. NÃO ENTRES NA NOVA PASTA</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-4---download-do-tema">Etapa 4 - Download do tema<a href="#etapa-4---download-do-tema" class="hash-link" aria-label="Link direto para Etapa 4 - Download do tema" title="Link direto para Etapa 4 - Download do tema">​</a></h3><p>Acede ao repositório do tema escolhido e NÃO CLONES o repositório git. Obtem o arquivo zip e descompacta-o em <em>nome_da_pasta/themes/theme_name</em>.</p><p>Observa que o conteúdo do tema deve estar em <em>theme_name</em>, não em <em>theme_name/hugo-theme-name-master</em>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-5---usar-examplesite-como-modelo">Etapa 5 - Usar exampleSite como modelo<a href="#etapa-5---usar-examplesite-como-modelo" class="hash-link" aria-label="Link direto para Etapa 5 - Usar exampleSite como modelo" title="Link direto para Etapa 5 - Usar exampleSite como modelo">​</a></h3><p>Copia o <em>topic_name/exampleSite/config.toml</em> diretamente para o teu <em>nome da pasta</em>, substituindo o ficheiro config.toml padrão.</p><p>No arquivo config.toml, altera a linha de seleção do tema para</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">theme = "&lt;nome do tema&gt;"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Como queremos usar o Hugo nas páginas do gitlab, também é necessário alterar o <em>baseURL</em> no config.toml:</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">baseurl = "https://&lt;nomedousuário&gt;.gitlab.io/&lt;nome da pasta&gt;"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="implantação-de-páginas-do-gitlab">Implantação de páginas do Gitlab<a href="#implantação-de-páginas-do-gitlab" class="hash-link" aria-label="Link direto para Implantação de páginas do Gitlab" title="Link direto para Implantação de páginas do Gitlab">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aviso">Aviso<a href="#aviso" class="hash-link" aria-label="Link direto para Aviso" title="Link direto para Aviso">​</a></h3><p>NÃO FAÇAs NADA NO GIT! Vais criar um projeto gitlab que iniciará com o teu <em>foldername</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-6---criar-um-projeto-gitlab">Etapa 6 - Criar um projeto gitlab<a href="#etapa-6---criar-um-projeto-gitlab" class="hash-link" aria-label="Link direto para Etapa 6 - Criar um projeto gitlab" title="Link direto para Etapa 6 - Criar um projeto gitlab">​</a></h3><p>No gitlab, cria um novo projeto, com o mesmo nome que a tua pasta. Não o inicializes com um arquivo README ou com o que seja.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-7---criar-seu-arquivo-de-ic">Etapa 7 - Criar seu arquivo de IC<a href="#etapa-7---criar-seu-arquivo-de-ic" class="hash-link" aria-label="Link direto para Etapa 7 - Criar seu arquivo de IC" title="Link direto para Etapa 7 - Criar seu arquivo de IC">​</a></h3><p>Vai para o nome da tua pasta (a pasta criada anteriormente) e cria um arquivo chamado <code>.gitlab-ci.yml</code></p><p>Edita o arquivo com o código seguinte:</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">image</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> monachus/hugo</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">variables</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">GIT_SUBMODULE_STRATEGY</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> recursive</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">pages</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">script</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> hugo</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">artifacts</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">paths</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> public</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">only</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> master</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-8---empurrar-push-o-site">Etapa 8 - Empurrar (Push) o site<a href="#etapa-8---empurrar-push-o-site" class="hash-link" aria-label="Link direto para Etapa 8 - Empurrar (Push) o site" title="Link direto para Etapa 8 - Empurrar (Push) o site">​</a></h3><p>Primeiro, executa o repositório:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> init</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Em seguida, adiciona o diretório /public ao arquivo .gitignore</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"/public"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;&gt;</span><span class="token plain"> .gitignore</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Por fim, valida e envia o código na ramificação principal</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> </span><span class="token builtin class-name">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> commit -m </span><span class="token string" style="color:#e3116c">"Initial commit"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> remote </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> origin https://gitlab.com/YourUsername/your-hugo-site.git</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> push -u origin master</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-9---vizualiza-e-aguarda">Etapa 9 - Vizualiza e aguarda<a href="#etapa-9---vizualiza-e-aguarda" class="hash-link" aria-label="Link direto para Etapa 9 - Vizualiza e aguarda" title="Link direto para Etapa 9 - Vizualiza e aguarda">​</a></h3><p>Acede ao "Pipeline de CI / CD" do teu repositório gitlab</p><p>Assiste à etapa de compilação e aguarda a aprovação. O teu site será publicado em <em>nome de usuário</em>.gitlab.io/<em>nome de usuário</em></p>]]></content:encoded>
            <category>gitops</category>
            <category>devops</category>
            <category>hugo-tips</category>
        </item>
        <item>
            <title><![CDATA[Como Gerir Características do Windows com Ansible]]></title>
            <link>https://baditboys.netlify.app/blog/winfeaturepost</link>
            <guid>https://baditboys.netlify.app/blog/winfeaturepost</guid>
            <pubDate>Fri, 22 May 2020 09:39:11 GMT</pubDate>
            <description><![CDATA[Olá a todos, o objectivo deste post é explicar como gerir as funcionalidades do Windows utilizando os Ansible playbooks;]]></description>
            <content:encoded><![CDATA[<p>Olá a todos, o objectivo deste post é explicar como gerir as funcionalidades do Windows utilizando os Ansible playbooks;</p><p>Para começar, vamos tentar compreender o que é o quê. Queremos instalar uma funcionalidade de janelas na nossa máquina/vm e queremos fazê-lo utilizando a possibilidade de automatizar todas as instalações e add-ons.</p><p>Para o fazer utilizando o Ansible, precisamos de utilizar módulos Ansible! E, neste caso, queremos usar <strong>win_feature</strong> módulo. Mas o que são módulos? Vamos ver:</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="módulos">Módulos<a href="#módulos" class="hash-link" aria-label="Link direto para Módulos" title="Link direto para Módulos">​</a></h2><p>Os módulos possíveis são reutilizáveis, scripts autônomos que podem ser utilizados pela API Possível, ou pelos programas de livros anáteis ou de livros-jogadores possíveis.</p><p>Podemos utilizar módulos para instalar, copiar, mover, descarregar e muitas outras acções. Há também muitos módulos diferentes, e digo muito!</p><p>Ansible tem módulos para Cloud, Database, Network, Monitoring, Windows, quase tudo o que se possa imaginar!</p><p>Mas para este post vamos focar apenas num módulo específico do Windows fornecido por Ansible que é <strong>win_feature</strong> módulo.</p><p><strong>NOTE*</strong> que isto é apenas uma rápida visão geral do que são módulos! Pode consultar a documentação oficial do Ansible em <a href="https://docs.ansible.com/ansible/latest/modules/modules_by_category.html" target="_blank" rel="noopener noreferrer">Módulos</a> para ter uma análise mais aprofundada.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="funcionalidade_vencedora">Funcionalidade_vencedora<a href="#funcionalidade_vencedora" class="hash-link" aria-label="Link direto para Funcionalidade_vencedora" title="Link direto para Funcionalidade_vencedora">​</a></h2><p>Este módulo instala ou desinstala funções ou funcionalidades do Windows Server.</p><p>Mas, para saber qual a funcionalidade que queremos instalar, precisamos de encontrar o seu nome. E para isso usaremos um comando que listará todas as funcionalidades com a informação adicionada, se estão instaladas ou não.</p><p>Por isso, escreva no seu terminal o seguinte:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Get-WindowsFeature</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto deve devolver uma lista completa das características:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">PS C:\&gt; Get-WindowsFeature</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Display Name                                            Name                       Install State</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">------------                                            ----                       -------------</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[ ] Active Directory Certificate Services               AD-Certificate                 Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [ ] Certification Authority                         ADCS-Cert-Authority            Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [ ] Certificate Enrollment Policy Web Service       ADCS-Enroll-Web-Pol            Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [ ] Certificate Enrollment Web Service              ADCS-Enroll-Web-Svc            Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [ ] Certification Authority Web Enrollment          ADCS-Web-Enrollment            Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [ ] Network Device Enrollment Service               ADCS-Device-Enrollment         Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [ ] Online Responder                                ADCS-Online-Cert               Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">(...)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[X] Web Server (IIS)                                    Web-Server                     Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [X] Web Server                                      Web-WebServer                  Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        [X] Common HTTP Features                        Web-Common-Http                Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] Default Document                        Web-Default-Doc                Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] Directory Browsing                      Web-Dir-Browsing               Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] HTTP Errors                             Web-Http-Errors                Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] Static Content                          Web-Static-Content             Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] HTTP Redirection                        Web-Http-Redirect              Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] WebDAV Publishing                       Web-DAV-Publishing             Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        [X] Health and Diagnostics                      Web-Health                     Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] HTTP Logging                            Web-Http-Logging               Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] Custom Logging                          Web-Custom-Logging             Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] Logging Tools                           Web-Log-Libraries              Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] ODBC Logging                            Web-ODBC-Logging               Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] Request Monitor                         Web-Request-Monitor            Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] Tracing                                 Web-Http-Tracing               Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        [X] Performance                                 Web-Performance                Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] Static Content Compression              Web-Stat-Compression           Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            [X] Dynamic Content Compression             Web-Dyn-Compression            Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">(...)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[X] .NET Framework 4.7 Features                         NET-Framework-45-Fea...        Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [X] .NET Framework 4.7                              NET-Framework-45-Core          Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [ ] ASP.NET 4.7                                     NET-Framework-45-ASPNET        Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [X] WCF Services                                    NET-WCF-Services45             Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        [ ] HTTP Activation                             NET-WCF-HTTP-Activat...        Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        [ ] Message Queuing (MSMQ) Activation           NET-WCF-MSMQ-Activat...        Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        [ ] Named Pipe Activation                       NET-WCF-Pipe-Activat...        Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        [ ] TCP Activation                              NET-WCF-TCP-Activati...        Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        [X] TCP Port Sharing                            NET-WCF-TCP-PortShar...        Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">(...)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Agora podemos ver uma lista completa de todas as funcionalidades do Windows (no exemplo acima só há algumas seleccionadas) com a informação adicional se estiverem instaladas ou não.</p><p>Esta pode ser uma óptima maneira de ver que características precisa de adicionar ao seu livro de jogo.</p><p>Agora, deixe-me mostrar-lhe uma forma de descobrir se uma funcionalidade que já conhece o nome está ou não instalada.</p><p>Para este caso, vamos procurar a funcionalidade .NET Framework. Iremos verificar o nome correcto da funcionalidade e se está ou não instalada.</p><p>Para isso, utilizaremos o comando abaixo:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Get-WindowsFeature | Where-Object {$_. name-match ".Net"} | Format-List Name,DisplayName, Installstate | more</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto irá devolver o seguinte:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Name         : Print-Internet</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : Internet Printing</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : Web-Net-Ext</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : .NET Extensibility 3.5</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : Web-Net-Ext45</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : .NET Extensibility 4.7</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : Web-Asp-Net</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : ASP.NET 3.5</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : Web-Asp-Net45</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : ASP.NET 4.7</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : NET-Framework-45-ASPNET</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : ASP.NET 4.7                             #As you can see the feature is available, therefore not installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : BitLocker-NetworkUnlock</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : BitLocker Network Unlock</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : Internet-Print-Client</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : Internet Printing Client</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : Telnet-Client</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : Telnet Client</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : WAS-NET-Environment</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : .NET Environment 3.5</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Available</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : Wireless-Networking</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : Wireless LAN Service</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Available</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Agora que confirmamos o nome e o estado de instalação podemos adicionar ao nosso playbook.yaml o módulo win_feature de que falámos anteriormente no post.</p><p>Vamos dar uma olhada no playbook.yaml que contém o módulo <strong>win_feature*</strong>.</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">---</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Install Windows Features</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">hosts</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> all</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">tasks</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Install .Net Framework 4.5</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token key atrule" style="color:#00a4db">win_feature</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> NET</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">Framework</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">45</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">ASPNET</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token key atrule" style="color:#00a4db">state</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> present</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Como pode ver, playbook.yaml instalará a mais recente funcionalidade .Net Framework Windows.</p><p>Vamos procurar a funcionalidade .net Framework no nosso terminal e ver o que mudou:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">PS C:\&gt; Get-WindowsFeature | Where-Object {$_. name-match "NET-Framework-45-ASPNET"} | Format-List Name,DisplayName, Installstate | more</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Name         : NET-Framework-45-ASPNET</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DisplayName  : ASP.NET 4.7</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">InstallState : Installed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>E aí está! Instalámos com sucesso uma funcionalidade de janelas da nossa escolha, usando Livros de Jogar Ansíveis!</p><p>Agora, cabe-lhe a si ver qual a funcionalidade Windows que deseja instalar no seu servidor!</p><p>Lembre-se que pode fazer um playbook instalando tantas funcionalidades quantas desejar.
Espero que este post o ajude a compreender um pouco melhor o módulo win_feature :)</p>]]></content:encoded>
            <category>devops</category>
            <category>virtualization</category>
        </item>
        <item>
            <title><![CDATA[Plugins Vagrant]]></title>
            <link>https://baditboys.netlify.app/blog/pluginspost</link>
            <guid>https://baditboys.netlify.app/blog/pluginspost</guid>
            <pubDate>Wed, 20 May 2020 15:44:47 GMT</pubDate>
            <description><![CDATA[Olá a todos, criei este post para explicar o que é um Plugin no Vagrant, como instalá-los e utilizá-los correctamente no nosso ficheiro vagabundo;]]></description>
            <content:encoded><![CDATA[<p>Olá a todos, criei este post para explicar o que é um <strong>Plugin</strong> no Vagrant, como instalá-los e utilizá-los correctamente no nosso ficheiro vagabundo;
Este post será actualizado à medida que eu for obtendo mais informações sobre outros plugins</p><p>Para começar, vamos dar uma vista de olhos a um simples ficheiro vagabundo contendo uma caixa do Windows Server 2019:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto é apenas para lhe dar uma visão de um ficheiro vagabundo muito simples contendo apenas a caixa, o nome do vm, a memória RAM e um terminal de concha pronto a usar.</p><p>Vamos prosseguir!</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="recarregar">Recarregar<a href="#recarregar" class="hash-link" aria-label="Link direto para Recarregar" title="Link direto para Recarregar">​</a></h2><p>Para que serve <strong>carga</strong> ?</p><p>Bem, usar recarregar no seu ficheiro vagabundo é o mesmo que fazer uma reinicialização na sua máquina;</p><p>Portanto, vamos colocar isto em contexto;</p><p>Digamos que instalámos Chocolatey e queremos utilizá-lo para instalar o git.</p><p>Bem, isso é fácil, mas não podemos fazê-lo de imediato porque, uma vez que o vm não foi recarregado (reiniciado), não pode ter em conta a modificação feita anteriormente;</p><p>Por isso, para corrigir isto, precisamos de adicionar um dispositivo de recarga ao nosso ficheiro vagabundo!</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.vm.provision :reload</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>O comando acima é o que precisamos de acrescentar ao nosso <strong>vagrantfile*</strong> mas não o podemos utilizar se não estiver instalado.</p><p>Assim, para instalar o <strong>reload*</strong> porvisionador, abrir um terminal Powershell e digitar:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant plugin install vagrant-reload</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto instalará o plugin que lhe permitirá utilizar o <strong>reload</strong> provisionador no nosso ficheiro vagabundo;</p><p>Lembra-se do nosso simples ficheiro de vagabundagem? Vamos dar uma vista de olhos ao aspecto do ficheiro vagabundo com a instalação de Chocolatey:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>No nosso ficheiro vagabundo acima, instalamos Chocolatey. Mas, lembrem-se, queremos usá-lo para instalar as nossas ferramentas e sem recarregar o vm isto não será possível!</p><p>O que vamos fazer é, recarregar após a instalação de Chocolatey e depois de recarregar onde vai abrir um novo <strong>Provisor de terminal de Chocolatey</strong> para que possamos instalar Git usando Chocolatey;</p><p>Portanto, vamos dar uma vista de olhos ao nosso ficheiro vagabundo e ver como tudo isto funciona, colocando o Git em conjunto:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision :reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    choco install git -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Óptimo! Conseguimos a instalação do plugin e a recarga bem sucedida do nosso vm !</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="tamanho-do-disco">Tamanho do disco<a href="#tamanho-do-disco" class="hash-link" aria-label="Link direto para Tamanho do disco" title="Link direto para Tamanho do disco">​</a></h2><p>Outro plugin útil é o <strong>TamanhoDisk*</strong>!</p><p>Este plugin permitir-nos-á gerir o tamanho do disco do nosso vm (todos os que usam o Vagrant sabem que esta é uma questão sensata :) )</p><p>Como vimos anteriormente, precisamos primeiro de instalar o plugin directamente na nossa máquina para o podermos utilizar no nosso ficheiro vagabundo.</p><p>Portanto, copiar colar o seguinte:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant plugin install vagrant-disksize</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Óptimo, o plugin está instalado e pronto para ser posto a funcionar!</p><p>Vamos ver como fica:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">config.disksize.size = '40GB'</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Como podem ver, quero ter um disco de 40gb de tamanho. mas onde o devemos colocar? Vamos dar uma vista de olhos a um ficheiro básico vagabundo:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Muito simples e básico ficheiro vagabundo, mas falta qualquer coisa! Onde está o <strong>tamanho do disco*</strong>?</p><p>Bem, uma vez que faz parte da configuração do vm, vamos colocá-lo logo após a caixa do vm:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  wvm.disksize.size = "40GB"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>E aí está! Pode agora criar vm's com a quantidade de tamanho de disco que desejar :)</p><p><strong>NOTE:</strong> Se iniciar o seu vm e verificar que o seu vm de janelas não tem o tamanho de disco que atribuiu e provavelmente só tem até 20gb de tamanho de disco.</p><p>A outra quantidade não é atribuída à partição certa.
Para corrigir isto, vamos digitar o seguinte comando em uma Powershell:
(não se esqueça no fim da linha de comando de adicionar o seu GB, no meu caso dei 40gb por isso vou colocar 39 no fim do comando)</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Resize-Partition -DriveLetter C -Size 39gb</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Espero vê-lo em breve no próximo post :)</p>]]></content:encoded>
            <category>devops</category>
            <category>virtualization</category>
        </item>
        <item>
            <title><![CDATA[Gestão de múltiplos autores com a taxonomia]]></title>
            <link>https://baditboys.netlify.app/blog/taxonomy</link>
            <guid>https://baditboys.netlify.app/blog/taxonomy</guid>
            <pubDate>Mon, 18 May 2020 13:49:56 GMT</pubDate>
            <description><![CDATA[Nem todos os temas têm a capacidade de gerir vários autores dentro de um blogue. E sou provavelmente um mau observador, porque não vi, na apresentação dos temas disponíveis, se um tema gere nativamente vários autores ou não.]]></description>
            <content:encoded><![CDATA[<p>Nem todos os temas têm a capacidade de gerir vários autores dentro de um blogue. E sou provavelmente um mau observador, porque não vi, na apresentação dos temas disponíveis, se um tema gere nativamente vários autores ou não.</p><p>É bastante desagradável ter encontrado O tema perfeito, e que falte uma simples funcionalidade. Por isso, decidi utilizar a gestão taxonómica nativa para registar vários autores num blogue. E, por enquanto, funciona bastante bem.</p><p>Para escrever este artigo, fui inspirado pelo seguinte tutorial: <a href="https://www.netlify.com/blog/2018/07/24/hugo-tips-how-to-create-author-pages/" target="_blank" rel="noopener noreferrer">Como criar páginas de autor</a>.</p><p>Estou a ter o cuidado de o completar apenas nos pontos em que tive de experimentar muito.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="usos-das-taxonomias">Usos das taxonomias<a href="#usos-das-taxonomias" class="hash-link" aria-label="Link direto para Usos das taxonomias" title="Link direto para Usos das taxonomias">​</a></h2><p>Existem duas taxonomias padrão em Hugo:</p><ul><li>Etiquetas;</li><li>Categorias.</li></ul><p>Para utilizar as taxonomias padrão de Hugo, ou aquelas nativas do tema escolhido, é muito simples, basta adicionar o seguinte ao seu arquétipo:</p><div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token front-matter-block punctuation" style="color:#393A34">---</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">tags</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml"> faire son site</span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml"> hugo</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml">tips</span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">categories</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml"> hugo</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block"></span><span class="token front-matter-block punctuation" style="color:#393A34">---</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>O princípio é simples: assim que adicionar uma categoria ou uma etiqueta, e o tema a gerir bem, encontrará uma <code>http://[votresite]/tags/</code> e outra <code>/catégories/</code> que listam etiquetas e categorias, e uma página por item listando os artigos que mencionam o item nos seus arquétipos.</p><p>Vejamos agora como criar uma nova taxonomia que abriria a possibilidade de adicionar um ou mais autores a um artigo.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="criar-uma-taxonomia">Criar uma taxonomia<a href="#criar-uma-taxonomia" class="hash-link" aria-label="Link direto para Criar uma taxonomia" title="Link direto para Criar uma taxonomia">​</a></h2><p>Cada taxonomia tem dois modelos:</p><ul><li>list.html, que corresponde ao modelo da página que irá descrever um dos artigos (um autor, para nós, e todos os artigos a ele ligados)</li><li>terms.html, que corresponde à página que listará todos os itens de uma taxonomia (todos os autores, portanto)</li></ul><p>No nosso caso, vamos criar uma taxonomia de autor. Serão pós-autores, e não autores de livros, como no exemplo da ligação anterior.</p><p>Trabalharemos em duas árvores:</p><ul><li>a pasta <em>content</em>, logicamente na raiz do site hugo ;</li><li>a pasta <em>layout</em> do tema utilizado pelo sítio.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="os-dados-relativos-aos-itens-da-taxonomia">Os dados relativos aos itens da taxonomia<a href="#os-dados-relativos-aos-itens-da-taxonomia" class="hash-link" aria-label="Link direto para Os dados relativos aos itens da taxonomia" title="Link direto para Os dados relativos aos itens da taxonomia">​</a></h3><p>Na pasta <em>content</em>, criaremos uma pasta para cada autor, na qual será colocado um ficheiro <em>_index.md</em>,</p><div class="language-txt codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-txt codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">content</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── authors/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ├── j0rdan-m/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    │   └── _index.md</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    └── author-2/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        └── _index.md</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Cada <em>_index.md</em> descreve um autor, e é composto da seguinte forma:</p><div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token front-matter-block punctuation" style="color:#393A34">---</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">name</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> j0rdan</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml">m</span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">photo</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml string" style="color:#e3116c">'https://j0rdan-m.gitlab.io/blog/pearlbonnet.png'</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">twitter</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml string" style="color:#e3116c">'@j0rdan_m'</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block"></span><span class="token front-matter-block punctuation" style="color:#393A34">---</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">j0rdan é um autor do blog</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="metadados">Metadados<a href="#metadados" class="hash-link" aria-label="Link direto para Metadados" title="Link direto para Metadados">​</a></h3><p>Os dados relativos aos autores estão prontos, precisamos agora de estabelecer os meta-dados.</p><p>Para tal, teremos de criar uma pasta <em>outide</em> no layout do nosso tema (e não a pasta de taxonomias, o que pode ser surpreendente).</p><div class="language-txt codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-txt codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">my_theme/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── layout/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    └── authors/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        └── list.html</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        └── terms.html</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>O ficheiro <em>list.html</em> não lista os autores, mas os artigos que mencionam os autores (ou qualquer outra escolha de taxonomia).</p><p>Assim, aqui estão os conteúdos básicos do ficheiro <em>list.hml</em>:</p><div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">{{ .Params.name }}</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">img</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">{{ .Params.photo }}</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">alt</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h2</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Bio</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h2</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{{ .Content }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{{ with .Params.twitter }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">a</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://twitter.com/{{ substr . 1 }}</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      Follow {{ $.Params.name }} on Twitter</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">a</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{{ end }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h2</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Articles</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h2</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">ul</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{{ range .Data.Pages }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">a</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">{{ .Permalink }}</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">{{ .Title }}</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">a</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{{ end }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">ul</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>O ficheiro <em>terms.html</em> é o modelo da página que listará todos os autores, e proporá uma ligação para cada um deles:</p><div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Authors</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">ul</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{{ range .Data.Pages }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">a</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">{{ .Permalink }}</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">{{ .Params.name }}</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">a</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">li</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{{ end }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">ul</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Atenção, será necessário integrar a montante e a jusante dos códigos propostos o conteúdo do tema, tomando o exemplo na página predefinida (provavelmente em <em>temas/meu_tema/layouts/_default/single.html</em>)</p><p>O tema utilizado por este blog ofereceu um comentário agradável para isolar a informação do tema do conteúdo (graças ao <code>&lt;section&gt;&lt;/section&gt;</code>. Outro tema que uso menciona <code>&lt;main&gt;&lt;/main&gt;</code>)</p><p>Uma vez que estamos nesta página <em>single.html</em>, poderemos acrescentar uma menção do autor:</p><div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">{{- range .Params.authors }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  {{- with $.Site.GetPage "taxonomyTerm" (printf "authors/%s" (urlize .)) }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">figure</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">img</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">{{ .Params.photo }}</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">alt</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">figcaption</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">a</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">{{ .Permalink }}</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">{{ .Params.name }}</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">a</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">figcaption</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">figure</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  {{ end }}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{{ end }}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Ce esta menção deve ser acrescentada no local da página onde se pretende que apareça, obviamente.</p><p>Finalmente, agora que tudo está pronto, podemos declarar a taxonomia no nosso ficheiro config.toml, acrescentando a seguinte nota:</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[taxonomies]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  author = "authors"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  tag = "tags"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  category = "categories"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Para os meus próprios fins, adicionei manualmente uma entrada no menu, sabendo que o endereço para visualizar a sua taxonomia será :<code>http://[mon site]/authors/</code></p><p>É assim que, graças às taxonomias, este blog se tornou um blog multi-autor.</p>]]></content:encoded>
            <category>hugo-tips</category>
        </item>
        <item>
            <title><![CDATA[Servidor Windows com Vagrant, WSL e Ansible]]></title>
            <link>https://baditboys.netlify.app/blog/wslvmpost</link>
            <guid>https://baditboys.netlify.app/blog/wslvmpost</guid>
            <pubDate>Tue, 12 May 2020 09:20:15 GMT</pubDate>
            <description><![CDATA[Olá novamente, este post irá explicar como criar uma máquina virtual Windows Server com Vagrant, WSL e Ansible.]]></description>
            <content:encoded><![CDATA[<p>Olá novamente, este post irá explicar como criar uma máquina virtual Windows Server com Vagrant, WSL e Ansible.
Presumo que já tenha visto o meu post anterior do Windows Server onde explico como criar uma máquina virtual Windows Server vm, por isso vá verificar se não viu :)</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="antes-de-começarmos-plugins">Antes de começarmos, Plugins!<a href="#antes-de-começarmos-plugins" class="hash-link" aria-label="Link direto para Antes de começarmos, Plugins!" title="Link direto para Antes de começarmos, Plugins!">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="instalação">Instalação<a href="#instalação" class="hash-link" aria-label="Link direto para Instalação" title="Link direto para Instalação">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="windows">Windows<a href="#windows" class="hash-link" aria-label="Link direto para Windows" title="Link direto para Windows">​</a></h4><p>Assim, para pôr em acção alguns plugins no nosso ficheiro Vagrant, precisamos de os instalar directamente no nosso terminal.</p><p>Para o fazer, abrir um Powershell e instalar os seguintes plugins (note que este plugin é para o SO Windows):</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant plugin </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> vagrant-reload</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto permitir-nos-á recarregar o nosso vm durante a criação do vm.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="outros-os">Outros OS<a href="#outros-os" class="hash-link" aria-label="Link direto para Outros OS" title="Link direto para Outros OS">​</a></h4><p>Agora, queremos utilizar funcionalidades do windows mas estamos a utilizar um Linux ou MacOS.</p><p>Para isso, precisamos de instalar os seguintes plugins na nossa máquina Linux ou MacOS:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vagrant plugin </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> vagrant-reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">vagrant plugin </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> winrm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">vagrant plugin </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> winrm-fs</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">vagrant plugin </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> winrm-elevated</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto permitir-nos-á recarregar o nosso vm e utilizar características de janelas com vagabundos;</p><p>Agora que já temos os nossos plugins instalados, vamos continuar;</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="wsl">WSL<a href="#wsl" class="hash-link" aria-label="Link direto para WSL" title="Link direto para WSL">​</a></h2><p>O que é a WSL e o que ela faz? WSL significa Subsistema Windows para Linux e, ao instalá-lo no nosso Windows Server, permitir-nos-á, basicamente, ter Linux num terminal Windows.</p><p>Isto significa que pode, por exemplo, instalar uma ferramenta no seu Windows vm usando comandos Linux como <strong>wsl sudo apt ansible -y*</strong> (este comando irá instalar Ansible na sua máquina virtual Windows).</p><p>Mas para usar WSL precisamos de o instalar! E para o instalar vamos usar o Vagrant. Vamos dar uma vista de olhos ao nosso ficheiro Vagrant:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Se este ficheiro vagabundo parece familiar, deveria! Este é o ficheiro vagabundo do nosso posto anterior onde definimos a configuração da nossa máquina e instalamos Chocolatey.</p><p>Agora o que queremos fazer é instalar WSL e para o fazer precisamos de adicionar o comando de instalação no nosso fornecedor de Shell.</p><p>Por isso, copie colar isto para o terminal shell no seu vagranfile:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Enable-WindowsOptionalFeature -FeatureName Microsoft-Windows-Subsystem-Linux -Online -NoRestart -WarningAction SilentlyContinue</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Portanto, o nosso ficheiro vagabundo deve ter este aspecto por agora:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Enable-WindowsOptionalFeature -FeatureName Microsoft-Windows-Subsystem-Linux -Online -NoRestart -WarningAction SilentlyContinue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Portanto, temos agora a WSL instalada no nosso Windows Server vm! Isto é óptimo e agora temos a liberdade de o utilizar à vontade!</p><p>Desde que instalámos Chocoaltey e WSL, queremos ter a certeza de que a máquina tem em conta as modificações aplicadas.</p><p>Para isso, utilizaremos um provisionador (shell) de recarga:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision :reload</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Acrescentaremos isto depois do nosso fornecedor de conchas, tal como este:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Enable-WindowsOptionalFeature -FeatureName Microsoft-Windows-Subsystem-Linux -Online -NoRestart -WarningAction SilentlyContinue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # trigger reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision :reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Agora que o nosso provisionador é recarregado, podemos instalar o Kali Linux (base de distribuição Linux em Debian).</p><p>Para isso, vamos abrir outro termninal e usar chocolate para o instalar.</p><p>Logo após a instalação do kali linux, vamos recarregar o nosso provisionador mais uma vez.</p><p>Isto dar-nos-á a certeza de que tudo foi reiniciado, incluindo a própria máquina virtual!</p><p>Portanto, vamos ver o que precisamos de acrescentar:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">  # execute code after reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    choco install wsl-kalilinux -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # trigger reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision :reload</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>E agora que tudo está fresco e limpo, vamos abrir outro terminal de concha e começar a usar a WSL!</p><p>Para começar a usar a WSL e ver se funciona, vamos adicionar uma concha com uma simples actualização do pacote:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">wsl sudo apt update</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Bastante fácil, certo? Então, vejamos como podemos utilizá-lo eficazmente.</p><p>Para o experimentar, vamos instalar algumas ferramentas que vamos precisar.</p><p>Assim, vamos instalar o Ansible e descompactar o pacote:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Enable-WindowsOptionalFeature -FeatureName Microsoft-Windows-Subsystem-Linux -Online -NoRestart -WarningAction SilentlyContinue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # trigger reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision :reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # execute code after reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo apt update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo apt install -y ansible</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo apt install -y unzip</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Porque é que precisamos de instalar o Ansible and Unzip, pode perguntar? Bem, precisamos de descomprimir alguns ficheiros, por isso é que precisamos de descomprimir.</p><p>Para o Ansible é necessário um pouco mais de explicação, venha comigo :)</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="possível">Possível<a href="#possível" class="hash-link" aria-label="Link direto para Possível" title="Link direto para Possível">​</a></h2><p>Ansible é um motor de automação, que funciona com ficheiros <strong>.yml</strong> chamados playbooks, que automatiza o aprovisionamento de nuvens, gestão de configuração, implementação de aplicações, orquestração intra-serviço, e muitas outras necessidades de TI.</p><p>Não utiliza agentes e nenhuma infra-estrutura de segurança adicional personalizada, pelo que é fácil de implementar - e o mais importante, utiliza uma linguagem muito simples (YAML, sob a forma de Ansible Playbooks) que lhe permite descrever os seus trabalhos de automação de uma forma que se aproxima do inglês simples.</p><p>Temos também um ficheiro de <strong>hosts*</strong> (também conhecido como Inventory). É aí que vamos adicionar as nossas máquinas alvo que desejamos para executar os livros de jogo.</p><p>Consulte a ligação para uma informação mais profunda e detalhada sobre <a href="https://www.ansible.com/overview/how-ansible-works" target="_blank" rel="noopener noreferrer">Ansible</a> e o que faz</p><p>Portanto, para usar o Ansible precisamos de um livro de jogo funcional, anfitriões e um monte de outras coisas! E para isso vamos usar <strong>wget*</strong> para donwload um ficheiro zip contendo tudo isto (o nosso pacote unzip virá a calhar :D )</p><p>Basta copiar colar isto ao seu provisionador:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">    wsl wget https://github.com/j0rdan-m/vagrant_wsl_ansible/archive/master.zip</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto irá descarregar o ficheiro zip.</p><p>Mas precisamos de o descomprimir, por isso:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">    wsl unzip master.zip</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Graças a este trabalho, temos agora à nossa disposição livros de exercícios práticos.</p><p>Mas antes de os verificarmos, vamos configurar o nosso ficheiro de <strong>hosts*</strong>. Vamos apenas adicionar a máquina localhost ao ficheiro anfitrião com um utilizador, palavra-passe, método de ligação e configuração de porta.</p><p>Se tudo estiver correcto, isto deve funcionar perfeitamente com os seus livros de jogo</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo [self] &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo 127.0.0.1 &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo [self:vars] &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_port=5985 &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_connection=winrm &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_winrm_transport=basic &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_user=vagrant &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_password=vagrant &gt;&gt; /etc/ansible/hosts"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>E, só para ter a certeza de que tudo está correcto, vamos pingar o nosso vm:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">    wsl ansible self -m win_ping</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Agora que o ficheiro do anfitrião está correcto, podemos avançar para os nossos livros de jogos!</p><p>Temos 3 para ser exatos! Um para instalar IIS, outro para instalar algumas ferramentas (Git, VSCode e SumatraPDF) e o último que cria um utilizador de serviço e lhe dá os direitos às pastas correctas.</p><p>Para as utilizar, precisamos de utilizar <strong>comando um livro de jogo possível</strong>, tal como este:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">    wsl ansible-playbook vagrant_wsl_ansible-master/tools.yml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl ansible-playbook vagrant_wsl_ansible-master/iis.yml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl ansible-playbook vagrant_wsl_ansible-master/users.yml</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Isto lançará cada livro de jogo na ordem apresentada.</p><p>Por isso, o nosso livro de jogo deve ter o seguinte aspecto:</p><div class="language-ruby codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ruby codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># -*- mode: ruby -*-</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># vi: set ft=ruby :</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vagrant.configure("2") do |config|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box = "mcree/win2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.box_version = "1.0.1584095692"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provider "virtualbox" do |v|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.name = "Windows Server 2019"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    v.memory = "2048"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Enable-WindowsOptionalFeature -FeatureName Microsoft-Windows-Subsystem-Linux -Online -NoRestart -WarningAction SilentlyContinue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # trigger reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision :reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # execute code after reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    choco install wsl-kalilinux -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # trigger reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision :reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  # execute code after reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  config.vm.provision "shell", inline: &lt;&lt;-SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo apt update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo apt install -y ansible</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo apt install -y unzip</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl wget https://github.com/j0rdan-m/vagrant_wsl_ansible/archive/master.zip</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl unzip master.zip</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo [self] &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo 127.0.0.1 &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo [self:vars] &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_port=5985 &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_connection=winrm &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_winrm_transport=basic &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_user=vagrant &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl sudo bash -c "echo ansible_password=vagrant &gt;&gt; /etc/ansible/hosts"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl ansible self -m win_ping</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl ansible-playbook vagrant_wsl_ansible-master/tools.yml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl ansible-playbook vagrant_wsl_ansible-master/iis.yml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    wsl ansible-playbook vagrant_wsl_ansible-master/users.yml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  SHELL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Temos agora uma máquina virtual Windows Server totalmente funcional com Ansible e um monte de outras coisas fixes nela!</p><p>Espero que isto tenha sido útil e certifique-se de verificar os outros posts ;)</p>]]></content:encoded>
            <category>devops</category>
            <category>provisionning</category>
            <category>virtualization</category>
        </item>
        <item>
            <title><![CDATA[Escrever um tuto legível com Markdown]]></title>
            <link>https://baditboys.netlify.app/blog/writetips</link>
            <guid>https://baditboys.netlify.app/blog/writetips</guid>
            <pubDate>Tue, 28 Apr 2020 18:49:31 GMT</pubDate>
            <description><![CDATA[Olá a todos,]]></description>
            <content:encoded><![CDATA[<p>Olá a todos,</p><p>Eis como escrevo artigos técnicos, para o tornar legível, e útil para o futuro, eu próprio que quero lembrar-me de como usar esse material técnico sobre o qual escrevi um artigo há vários meses.</p><p>O que está a ler é a introdução. Começo pela introdução, porque o meu tema toma esse texto como resumo na primeira página.</p><p>Aqui está o meu ficheiro post.md começando :</p><div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important">*my archetype*</span><br></span><span class="token-line" style="color:#393A34"><span class="token title important"></span><span class="token title important punctuation" style="color:#393A34">--</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Hoje quero falar sobre os arquétipos do motor de geração do sítio Hugo. Este motor muito potente é utilizado para gerar estas páginas.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">&lt;!--truncate--&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Algum tema compreende o "mais balise", pelo que a minha introdução termina com ele.</p><p>Posso terminar a minha introdução depois da <code>&lt;!--truncate--&gt;</code> se eu achar que é demasiado longo, ou outra coisa qualquer.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="títulos">Títulos<a href="#títulos" class="hash-link" aria-label="Link direto para Títulos" title="Link direto para Títulos">​</a></h2><p>Continuo o post usando o título. Penso que o título é importante, porque nos permite compreender a estrutura do artigo, e permite aos "utilizadores de poder" ir directamente para a parte que eles excepto para encontrar informações.</p><p>No meu artigo anterior, sobre arquétipos, os meus títulos eram :</p><div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> archetypes/Default.md</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">(...)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> archetypes/mon_mien.md</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">(...)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Poderia ter usado uma estrutura mais complexa, utilizando títulos de segundo ou terceiro nível</p><div class="language-md codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-md codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token title important punctuation" style="color:#393A34">#</span><span class="token title important"> First level</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> Second level</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">###</span><span class="token title important"> Third level</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Esse código será exibido assim no blogue :</p><hr><h2 class="anchor anchorWithStickyNavbar_LWe7" id="primeiro-nível">Primeiro nível<a href="#primeiro-nível" class="hash-link" aria-label="Link direto para Primeiro nível" title="Link direto para Primeiro nível">​</a></h2><p>blablabla</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="segundo-nível">Segundo nível<a href="#segundo-nível" class="hash-link" aria-label="Link direto para Segundo nível" title="Link direto para Segundo nível">​</a></h3><p>blablabla explicado</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="terceiro-nível">Terceiro nível<a href="#terceiro-nível" class="hash-link" aria-label="Link direto para Terceiro nível" title="Link direto para Terceiro nível">​</a></h4><p>blablabla mais especificado</p><hr><p>É importante colocar Título no seu tutos. Por vezes, os leitores liam mais do que um tuto ao mesmo tempo, e é mais fácil ir para a parte seguinte quando o título organizava a página.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="exibição-do-código">Exibição do código<a href="#exibição-do-código" class="hash-link" aria-label="Link direto para Exibição do código" title="Link direto para Exibição do código">​</a></h2><p>Há dois tipos de forma de colocar o código no markdown :</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="código-em-linha">código em linha<a href="#código-em-linha" class="hash-link" aria-label="Link direto para código em linha" title="Link direto para código em linha">​</a></h3><p>Isto é quando se usa <code>``` 'my code is cool' ```</code> na mesma linha que o resto do texto</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="código-de-linha-única-isolado">código de linha única isolado<a href="#código-de-linha-única-isolado" class="hash-link" aria-label="Link direto para código de linha única isolado" title="Link direto para código de linha única isolado">​</a></h3><p>Isto é quando se utiliza :</p><div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token code punctuation" style="color:#393A34">```</span><span class="token code"></span><br></span><span class="token-line" style="color:#393A34"><span class="token code"></span><span class="token code code-block">my code is cool</span><span class="token code"></span><br></span><span class="token-line" style="color:#393A34"><span class="token code"></span><span class="token code punctuation" style="color:#393A34">```</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>O código é isolado do resto do parágrafo</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="o-meu-conselho">O meu conselho<a href="#o-meu-conselho" class="hash-link" aria-label="Link direto para O meu conselho" title="Link direto para O meu conselho">​</a></h3><p>Utilizar sempre o segundo. Por uma razão simples : as pessoas utilizam copiar/colar. E é tão mais fácil copiar colar uma única linha.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="próximas-dicas">Próximas dicas<a href="#próximas-dicas" class="hash-link" aria-label="Link direto para Próximas dicas" title="Link direto para Próximas dicas">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="balas">Balas<a href="#balas" class="hash-link" aria-label="Link direto para Balas" title="Link direto para Balas">​</a></h3><ul><li>Não</li><li>utilização</li><li>bala</li><li>em todo o lado</li></ul><p>Faça-o quando for útill. Há dois casos :</p><ul><li>lista de coisas</li><li>lista de coisas</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="usar-citação-para-citação">Usar citação para citação<a href="#usar-citação-para-citação" class="hash-link" aria-label="Link direto para Usar citação para citação" title="Link direto para Usar citação para citação">​</a></h3><p>Usar citação para citação. Sei que parece estranho, mas poderia querer usar o bom formato de citação para outra coisa. Não o faça.</p><blockquote><p>Estilo de citação é para citação - Dr. CssProvider</p></blockquote>]]></content:encoded>
            <category>hugo-tips</category>
        </item>
        <item>
            <title><![CDATA[Usando os arquétipos]]></title>
            <link>https://baditboys.netlify.app/blog/archetypes</link>
            <guid>https://baditboys.netlify.app/blog/archetypes</guid>
            <pubDate>Fri, 17 Apr 2020 12:49:31 GMT</pubDate>
            <description><![CDATA[Hoje quero falar sobre os arquétipos do motor de geração do sítio Hugo.]]></description>
            <content:encoded><![CDATA[<p>Hoje quero falar sobre os arquétipos do motor de geração do sítio Hugo.
Este motor muito potente é utilizado para gerar estas páginas.</p><p>Os arquétipos são os elementos que geram os cabeçalhos das páginas Hugo, quando criados com o comando <code>hugo new my_file.md</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="archetypesdefaultmd">archetypes/Default.md<a href="#archetypesdefaultmd" class="hash-link" aria-label="Link direto para archetypes/Default.md" title="Link direto para archetypes/Default.md">​</a></h2><p>O 'default.md' no arquétipo aplica-se a qualquer 'novo hugo' que criar.
Este 'default.md' é personalizável, como se viu no artigo anterior, Gerir conteúdo num sítio Hugo, mas também pode ser multiplicado.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="archetypescustommd">archetypes/custom.md<a href="#archetypescustommd" class="hash-link" aria-label="Link direto para archetypes/custom.md" title="Link direto para archetypes/custom.md">​</a></h3><p>Imaginemos o caso de um sítio ESN (ao acaso ;) ), no qual encontraremos uma página inicial, um certo número de páginas 'Produtos', páginas 'Ofertas' e uma página 'blogue'.</p><p>Será suficiente criar, na pasta <em>arquivos</em>, três ficheiros :</p><ul><li>produto.md</li><li>oferta.md</li><li>post.md</li></ul><p>Estes três ficheiros conterão os arquétipos apropriados para o tipo de página.</p><p>É muito simples aplicar um arquétipo a uma página: o arquétipo deve ter o mesmo nome que o directório que hospeda o tipo de página!</p><p>Por exemplo, para criar uma página de produto, uma página de oferta e um post de blogue, utilizaremos estes três comandos:</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># Nouvelle page produit</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">hugo new produit/eaviz.md</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Nouvelle offre Marte</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">hugo new offre/expert_ansible.md</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Nouvel article de blog</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">hugo new post/gestion_archetype.md</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="gestão-temática">Gestão temática<a href="#gestão-temática" class="hash-link" aria-label="Link direto para Gestão temática" title="Link direto para Gestão temática">​</a></h2><p>Tal como o config.toml da secção <em>exampleSite</em> de um tema, aconselho-o vivamente a partir do(s) arquétipo(s) proposto(s) por um tema.
Isto permitir-lhe-á conhecer os directórios de trabalho correctos para ver as suas páginas aparecerem nos locais fornecidos pelo tema.</p>]]></content:encoded>
            <category>hugo-tips</category>
        </item>
        <item>
            <title><![CDATA[Gestão de conteúdos num sítio Hugo]]></title>
            <link>https://baditboys.netlify.app/blog/content_management</link>
            <guid>https://baditboys.netlify.app/blog/content_management</guid>
            <pubDate>Tue, 14 Apr 2020 09:39:30 GMT</pubDate>
            <description><![CDATA[Este artigo tem o objectivo muito simples de desmistificar os elementos que queremos ter no site (imagem nos artigos, avatar, etc.). É ainda mais subtil porque o comportamento que se obtém com Hugo como servidor web, um site Hugo implantado em páginas de gitlab ou um cluster de nuvens não são os mesmos, dependendo do padrão que se opte por aplicar.]]></description>
            <content:encoded><![CDATA[<p>Este artigo tem o objectivo muito simples de desmistificar os elementos que queremos ter no site (imagem nos artigos, avatar, etc.). É ainda mais subtil porque o comportamento que se obtém com Hugo como servidor web, um site Hugo implantado em páginas de gitlab ou um cluster de nuvens não são os mesmos, dependendo do padrão que se opte por aplicar.</p><p>O objectivo deste posto é esclarecer como proceder para facilitar a criação do posto.</p><p>*Declaração de responsabilidade: o tutorial oficial é *<strong>* muito mau**</strong> no caso de um site que se queira colocar sob gitlab Pages!</p><hr><h2 class="anchor anchorWithStickyNavbar_LWe7" id="gestão-de-páginas">Gestão de páginas<a href="#gestão-de-páginas" class="hash-link" aria-label="Link direto para Gestão de páginas" title="Link direto para Gestão de páginas">​</a></h2><p>No contexto de um site em modo blogue, isto é relativamente simples.</p><p>O comando ``hugo new directory/postname.md``` permite adicionar mensagens em formato MD à pasta "directório". Normalmente, o "post" é utilizado para um blogue.</p><hr><h3 class="anchor anchorWithStickyNavbar_LWe7" id="propriedades-da-página">Propriedades da página<a href="#propriedades-da-página" class="hash-link" aria-label="Link direto para Propriedades da página" title="Link direto para Propriedades da página">​</a></h3><p>As propriedades de uma página são geridas no cabeçalho das páginas criadas.
Podem ser encontradas na seguinte forma:</p><div class="language-md codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-md codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token hr punctuation" style="color:#393A34">---</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">title: "mon artigo"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">date: AAAA/MM/DD/THH:MM:SS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">draft: true</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Este é o padrão gerado por Hugo. Dois elementos devem ser assinalados:</p><ol><li>Numa implantação de gitlab, apenas páginas de "rascunho: falso" são exibidas. As páginas de "rascunho: verdadeiro" são ignoradas na construção do sítio. É então possível construir um sítio localmente (com a opção -D para draft) e testar algumas páginas enquanto se tira partido do alojamento do gitlab.</li><li>A versão básica pode ser completada com outras informações sobre a página criada:</li></ol><ul><li>subtítulo: para adicionar um subtítulo</li><li>etiquetas: para adicionar etiquetas a um artigo</li><li>categorias: para categorizar artigos</li></ul><p>Em suma, nada de louco, mas é útil. Portanto, o cabeçalho do artigo que está a ler é :</p><div class="language-md codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-md codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token front-matter-block punctuation" style="color:#393A34">---</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">title</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml string" style="color:#e3116c">"Gérer du contenu dans un site Hugo"</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">date</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml datetime number" style="color:#36acaa">2020-04-14T09:39:30Z</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">draft</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml boolean important" style="color:#36acaa">false</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">subtitle</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml string" style="color:#e3116c">"Comment gérer du contenu dans un site statique généré par Hugo"</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">tags</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml"> français</span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml"> hugo</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml">tips</span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">categories</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml"> hugo</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token front-matter-block"></span><span class="token front-matter-block punctuation" style="color:#393A34">---</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><hr><h3 class="anchor anchorWithStickyNavbar_LWe7" id="gestão-de-imagens">Gestão de imagens<a href="#gestão-de-imagens" class="hash-link" aria-label="Link direto para Gestão de imagens" title="Link direto para Gestão de imagens">​</a></h3><p>Para gerir as imagens apresentadas num artigo, eis a solução que proponho, que tem a vantagem de trabalhar com hugo localmente, mas também com uma implantação de gitlab:</p><ol><li>Criar uma subpasta "imagens" no directório "conteúdo</li><li>Coloque aí as imagens que pretende que apareçam no seu artigo</li><li>acrescentar <code>![texte alternatif](../../images/mon_image.jpg)</code> no seu artigo, onde deseja que a imagem apareça.</li></ol><hr><h2 class="anchor anchorWithStickyNavbar_LWe7" id="gerir-conteúdos-relacionados-com-temas-fotos-de-fundo-avatares-etc">Gerir conteúdos relacionados com temas (fotos de fundo, avatares, etc.)<a href="#gerir-conteúdos-relacionados-com-temas-fotos-de-fundo-avatares-etc" class="hash-link" aria-label="Link direto para Gerir conteúdos relacionados com temas (fotos de fundo, avatares, etc.)" title="Link direto para Gerir conteúdos relacionados com temas (fotos de fundo, avatares, etc.)">​</a></h2><p>Nestes casos, a gestão de imagens locais pode ser complicada de gerir se se quiser que a operação seja idêntica quer se utilize o motor hugo localmente ou na versão Gitlab Pages.</p><p>É por isso que proponho a sua gestão da seguinte forma:</p><p>Criar um directório chamado "estático" na raiz do seu site. Coloque as imagens que pretende utilizar directamente neste directório, sem as colocar num subdirectório. Elas serão então utilizáveis no seu ficheiro config.toml, bastando para tal dar o seu nome.</p>]]></content:encoded>
            <category>hugo-tips</category>
        </item>
        <item>
            <title><![CDATA[Sobre]]></title>
            <link>https://baditboys.netlify.app/blog/aboutthepage</link>
            <guid>https://baditboys.netlify.app/blog/aboutthepage</guid>
            <pubDate>Wed, 01 Jan 2020 13:18:41 GMT</pubDate>
            <description><![CDATA[Olá, mundo, este é um blog sobre itens gerais de TI, como Vagrant, Ansible, Docker, Git, CI / CD, etc.]]></description>
            <content:encoded><![CDATA[<p>Olá, mundo, este é um blog sobre itens gerais de TI, como Vagrant, Ansible, Docker, Git, CI / CD, etc.
É apenas um suporte para formalizar as actividades de pesquisa de dois "bad it boys".</p>]]></content:encoded>
        </item>
    </channel>
</rss>