<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6249206638265403625</id><updated>2011-11-27T17:16:08.324-08:00</updated><category term='saas'/><category term='scm'/><category term='innosetup'/><category term='msysgit'/><category term='ubuntu'/><category term='cloud'/><category term='s3'/><category term='git'/><category term='python'/><category term='ec2'/><category term='amazon'/><category term='gitosis'/><title type='text'>De tudo um pouco</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://weverton09.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6249206638265403625/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://weverton09.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Weverton Gomes de Morais</name><uri>http://www.blogger.com/profile/05358134601093627279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6249206638265403625.post-8853080101688888805</id><published>2011-02-18T02:34:00.001-08:00</published><updated>2011-02-18T11:36:14.619-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='msysgit'/><title type='text'>mSysGit - Cliente Git nativo para Windows</title><content type='html'>&lt;div style="text-align: justify;"&gt;Seguindo minha série de posts sobre &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt;, vou falar hoje da parte cliente, especificamente para &lt;a href="http://pt.wikipedia.org/wiki/Windows"&gt;Windows&lt;/a&gt;. Quando comecei a trabalhar com o Git no Windows a única opção que tinha disponível era via &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;, um emulador de &lt;a href="http://pt.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt; para Windows; porém tinhamos problema com pastas e arquivos acentuados. Depois de algum tempo tive uma grata surpresa ao conhecer um projeto que visava ser um cliente git nativo para Windows: o &lt;a href="http://code.google.com/p/msysgit/"&gt;mSysGit&lt;/a&gt;. Atualmente, na data que escrevo este artigo, está na versão 1.7.4. Porém este cliente não é visual; é um cliente de linha de comando. Existem clientes visuais, dos quais falarei em outros posts, porém todos rodam sobre o mSysGit.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;Instalação&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Após fazer o &lt;a href="http://msysgit.googlecode.com/files/Git-1.7.4-preview20110204.exe"&gt;download &lt;/a&gt;do instalador, vamos à instalação então:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://1.bp.blogspot.com/-qT6BDpFOCJo/TV61ywEp2fI/AAAAAAAAAtg/ijCEyP2IPXc/s320/01%2B-welcome.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5575093272233761266" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Tela inicial&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/-QXYm2jBQ_Vg/TV61zPQwcfI/AAAAAAAAAto/z0XdBa9_slk/s320/02%2B-licence.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5575093280606024178" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Contrato&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-udsS5abMhYM/TV61zXOYwuI/AAAAAAAAAtw/cMWKPPuIV4k/s1600/03%2B-%2Bdestination.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://2.bp.blogspot.com/-udsS5abMhYM/TV61zXOYwuI/AAAAAAAAAtw/cMWKPPuIV4k/s320/03%2B-%2Bdestination.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575093282743567074" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Caminho para instalação&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Na tela abaixo temos algumas opções interessantes como a parte de integração com o menu de contexto do Windows Explorer (o &lt;a href="https://git.wiki.kernel.org/index.php/MSysGit:GitCheetah"&gt;git-cheetah&lt;/a&gt; possui opções a mais que Git Bash e Git GUI) e associação de arquivos que começam com o padrão .git* com o editor de texto padrão.&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-CSNJjCyaY68/TV61zvdb5II/AAAAAAAAAt4/NLPzMDa7v1w/s1600/04%2B-components.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://2.bp.blogspot.com/-CSNJjCyaY68/TV61zvdb5II/AAAAAAAAAt4/NLPzMDa7v1w/s320/04%2B-components.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575093289249137794" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Componentes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-r56swu3uXcQ/TV61z7w4DcI/AAAAAAAAAuA/J4KdtJZQVOc/s1600/05%2B-%2Bstart%2Bfolder.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://4.bp.blogspot.com/-r56swu3uXcQ/TV61z7w4DcI/AAAAAAAAAuA/J4KdtJZQVOc/s320/05%2B-%2Bstart%2Bfolder.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575093292551900610" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Pasta no Menu Iniciar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Na tela abaixo será definindo como o git funcionará via linha de comando: se somente dentro do Git Bash ou se o git será adicionado ao PATH do SO podendo ser usado pelo prompt de comando ou se, além do git, as demais ferramentas Unix que acompanham o mSysGit (comandos Unix diversos como ls, cp, mv, ssh-keygen) também serão adicionadas ao PATH. Nesta última opção ele avisa que alguns comandos do Windows poderão ser sobrepostos. O padrão é usar somente Git Bash.&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-sAFb2-6cjeY/TV64GvUmtyI/AAAAAAAAAuI/42hws8OUatU/s1600/06%2B-%2Bpath.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://1.bp.blogspot.com/-sAFb2-6cjeY/TV64GvUmtyI/AAAAAAAAAuI/42hws8OUatU/s320/06%2B-%2Bpath.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575095814652868386" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Configuração do PATH&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Na tela abaixo é definido como o Git irá tratar as quebras de linha nos arquivos (devido ao fato que o Git é muito usado em projetos que também são desenvolvidos em ambiente Linux/Unix e os dois SO's tratam de maneira diferem a quebra de linha): com a primeira opção ele ira usar quebra de linha padrão Windows quando fizer checkout dos arquivos e vai usar quebra de linha padrão Unix quando der commit (é a opção mais aconselhável); na segunda opção, a quebra de linha não será alterada no momento do checkout, porém vai usar quebra de linha padrão Unit no momento do commit; na terceira opção a quebra de linha não será alterada em nenhum momento.&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-dvJ5fDD5Jo8/TV64G2r5FgI/AAAAAAAAAuQ/HN3Krx_BDXk/s1600/07%2B-%2Bline%2Bending.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://1.bp.blogspot.com/-dvJ5fDD5Jo8/TV64G2r5FgI/AAAAAAAAAuQ/HN3Krx_BDXk/s320/07%2B-%2Bline%2Bending.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575095816629589506" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: center;"&gt;Estilo de quebra de linha&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-30Plr5Nt16Y/TV64HFcI-dI/AAAAAAAAAuY/Lf_WMnCyZK0/s1600/08%2B-%2Binstall.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://1.bp.blogspot.com/-30Plr5Nt16Y/TV64HFcI-dI/AAAAAAAAAuY/Lf_WMnCyZK0/s320/08%2B-%2Binstall.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575095820590053842" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Instalando&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-K3tQCW0brnU/TV64HWSt3eI/AAAAAAAAAug/ISdJspEq4Mw/s1600/09%2B-%2Bcomplete.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://3.bp.blogspot.com/-K3tQCW0brnU/TV64HWSt3eI/AAAAAAAAAug/ISdJspEq4Mw/s320/09%2B-%2Bcomplete.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575095825113931234" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Finalizando&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;Utilização&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Após a instalação, você poderá ver os ícones do Git disponíveis no menu iniciar.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-KYzwIMxdXak/TV6-oWUz5WI/AAAAAAAAAuo/_KO6QxKKfYI/s1600/10%2B-%2Bgit%2Bmenu.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 42px;" src="http://1.bp.blogspot.com/-KYzwIMxdXak/TV6-oWUz5WI/AAAAAAAAAuo/_KO6QxKKfYI/s320/10%2B-%2Bgit%2Bmenu.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575102989128164706" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Ícones do Git no menu iniciar do Windows&lt;/span&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ele também se integra com o menu de contexto do Windows Explorer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-UoPGoJCAAPk/TV6_Ow-VEXI/AAAAAAAAAuw/825SwUSJF1E/s1600/11%2B-%2Bgit%2Bcontext%2Bmenu.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 148px;" src="http://1.bp.blogspot.com/-UoPGoJCAAPk/TV6_Ow-VEXI/AAAAAAAAAuw/825SwUSJF1E/s320/11%2B-%2Bgit%2Bcontext%2Bmenu.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575103649116655986" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Git integrado com o menu de contexto do Windows Explorer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A partir daí, você pode usar as ferramentas que o mSysGit disponibiliza:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Rg4kcce5yXE/TV7Aab1oiXI/AAAAAAAAAu4/eKPH6YK8waA/s1600/13%2B-%2Bgit%2Bbash.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 158px;" src="http://2.bp.blogspot.com/-Rg4kcce5yXE/TV7Aab1oiXI/AAAAAAAAAu4/eKPH6YK8waA/s320/13%2B-%2Bgit%2Bbash.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575104949113096562" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"&gt;Git Bash&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-8Ho40sLLLOg/TV7AanqF1lI/AAAAAAAAAvA/JvE3hhcPen4/s1600/12%2B-%2Bgit%2Bgui.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 170px;" src="http://4.bp.blogspot.com/-8Ho40sLLLOg/TV7AanqF1lI/AAAAAAAAAvA/JvE3hhcPen4/s320/12%2B-%2Bgit%2Bgui.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575104952285910610" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: center;"&gt;Gui GUI&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-CZ80upIkVdE/TV7Aa6AoZnI/AAAAAAAAAvI/oCLQr1Jrq34/s1600/14%2B-%2Bgitk.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 184px;" src="http://4.bp.blogspot.com/-CZ80upIkVdE/TV7Aa6AoZnI/AAAAAAAAAvI/oCLQr1Jrq34/s320/14%2B-%2Bgitk.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575104957212288626" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: center;"&gt;GitK&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Em breve escreverei sobre alguns clientes Git com interface gráfica mais elaborada, porém que não dispensam a necessitam do mSysGit.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6249206638265403625-8853080101688888805?l=weverton09.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weverton09.blogspot.com/feeds/8853080101688888805/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6249206638265403625&amp;postID=8853080101688888805' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6249206638265403625/posts/default/8853080101688888805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6249206638265403625/posts/default/8853080101688888805'/><link rel='alternate' type='text/html' href='http://weverton09.blogspot.com/2011/02/msysgit-cliente-git-nativo-para-windows.html' title='mSysGit - Cliente Git nativo para Windows'/><author><name>Weverton Gomes de Morais</name><uri>http://www.blogger.com/profile/05358134601093627279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-qT6BDpFOCJo/TV61ywEp2fI/AAAAAAAAAtg/ijCEyP2IPXc/s72-c/01%2B-welcome.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6249206638265403625.post-8046016062435581894</id><published>2010-05-25T20:26:00.000-07:00</published><updated>2010-05-26T20:04:59.365-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scm'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='gitosis'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Instalando e Configurando o Gitosis no Ubuntu</title><content type='html'>&lt;div style="text-align: justify;"&gt;Este é primeiro artigo de uma série que irei escrever falando sobre o &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; que, na minha opinião, é uma das melhores ferramentas de &lt;a href="http://en.wikipedia.org/wiki/Software_configuration_management"&gt;SCM&lt;/a&gt; disponíveis no mercado. Posteriormente falarei um pouco sobre o histórico do Git, porém no momento vou me concentrar em como configurar um servidor para servir de repositório central para todos os seus repositórios Git. Apesar de ser um &lt;a href="http://en.wikipedia.org/wiki/Distributed_Concurrent_Versions_System"&gt;DCVS&lt;/a&gt;, ter um repositório centralizado oferece diversas facilidades como, por exemplo, um referência de onde todos os desenvolvedores podem atualizar seus repositórios locais.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Existem bons serviços disponíveis na web para armazenar repositórios Git como, por exemplo, o &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt; e o &lt;a href="http://www.assembla.com/"&gt;Assembla&lt;/a&gt;, sendo que este último é um portal de gerenciamento de projetos que oferece também o serviço de armazenamento de repositórios. Porém, devido aos mais variados motivos, pode ser conveniente ou necessário que os nossos repositórios sejam armazenados num servidor próprio, seja local ou nas &lt;a href="http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_em_nuvem"&gt;nuvens&lt;/a&gt;. Assim sendo, vou mostrar neste tutorial como instalar e configurar o Gitosis, que é uma ferramenta para armazenar repositórios Git, numa máquina rodando Ubuntu.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Instalando o Gitosis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Antes de iniciar, é sempre bom atualizarmos nossos repositórios do Ubuntu:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;sudo apt-get update&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Feito isso, vamos criar um diretório onde vamos clonar o Gitosis:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;cd ~&lt;br /&gt;mkdir src&lt;br /&gt;cd src&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Tudo pronto pra clonagem (lembrei de alguns filmes de ficção científica e da novela "&lt;a href="http://pt.wikipedia.org/wiki/O_Clone"&gt;O Clone&lt;/a&gt;" :D ):&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;git clone git://eagain.net/gitosis.git&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Se aparecer uma mensagem de erro, falando que o git não está instalado, você pode instala-lo da seguinte maneira:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;sudo apt-get install git-core&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Após finalizar o clone, vai ser criado dentro de &lt;span style="font-family:courier new;"&gt;~/src&lt;/span&gt; um diretório &lt;span style="font-family:courier new;"&gt;gitosis&lt;/span&gt;. Para prosseguir com a instalação:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;cd gitosis&lt;br /&gt;sudo python setup.py install&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Normalmente você não terá problemas com o &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;, pois o mesmo já vem instalado por padrão, mas pode ocorrer um erro relacionado ao &lt;span style="font-family:courier new;"&gt;setuptools&lt;/span&gt;, que é uma biblioteca python usada em scripts de instalação. Para resolver este problema:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;sudo apt-get install python-setuptools&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Feito isso, o Gitosis estará instalado. Passamos, então, à fase de configuração.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Configurando o Gitosis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A primeira coisa a fazermos é criar o usuário sob o qual rodará o Gitosis:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;sudo adduser \&lt;br /&gt;--system \&lt;br /&gt;--shell /bin/sh \&lt;br /&gt;--gecos 'git version control' \&lt;br /&gt;--group \&lt;br /&gt;--disabled-password \&lt;br /&gt;--home /home/git \&lt;br /&gt;git&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;No comando acima estamos criando um usuario chamado git, que não precisa ter senha (&lt;span style="font-family:courier new;"&gt;--disable-password&lt;/span&gt;), porém precisa de um shell válido (&lt;span style="font-family:courier new;"&gt;--shell /bin/sh&lt;/span&gt;). O diretório home (&lt;span style="font-family:courier new;"&gt;--home /home/git&lt;/span&gt;) foi definindo seguindo o padrão linux, porém poderia ser configurado para qualquer outra pasta; neste diretório serão armazenados os repositórios Git.&lt;br /&gt;&lt;br /&gt;Agora precisamos gerar uma chave &lt;a href="http://pt.wikipedia.org/wiki/RSA"&gt;RSA&lt;/a&gt; de acesso, visto que o Git roda sobre &lt;a href="http://pt.wikipedia.org/wiki/SSH"&gt;SSH&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;&lt;/pre&gt;Vamos, então, iniciar o nosso repositório de configuração do Gitosis:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;sudo -H -u git gitosis-init &lt; ~/.ssh/id_rsa.pub&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Isso já vai incluir a chave do nosso servidor na lista de permissões do Gitosis. Se tudo der certo, aparecerá duas vezes uma mensagem falando que o repositório foi inicializado.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Por segurança, devemos garantir que o hook de post-update do repostório de configuração está com permissão de execução:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Agora vamos clonar o repositório de configuração do Gitosis:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;cd ~&lt;br /&gt;git clone git@localhost:gitosis-admin.git&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Se ocorrer um erro de &lt;span style="font-family:courier new;"&gt;connection refused&lt;/span&gt; na porta 22, é preciso instalar o OpenSSH-Server (lembra-se que o Git roda sobre SSH??):&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;sudo apt-get install openssh-server&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Quando ele perguntar se você deseja adicionar a chave do servidor na lista de hosts conhecidos, responda &lt;span style="font-family:courier new;"&gt;yes&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;OK, agora dentro de &lt;span style="font-family:courier new;"&gt;~&lt;/span&gt; temos o diretório &lt;span style="font-family:courier new;"&gt;gitosis-admin&lt;/span&gt; e dentro dele temos os seguintes itens:&lt;br /&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;Arquivo &lt;span style="font-family:courier new;"&gt;gitosis.conf&lt;/span&gt; =&gt; Onde configuramos os repositórios disponíveis e o acesso dos usuários a eles;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Diretório &lt;span style="font-family:courier new;"&gt;keydir&lt;/span&gt; =&gt; Onde devem ser armazenadas as chaves RSA dos usuários que poderão acessar os repositórios do servidor.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Como o diretório gitosis-admin é um repositório Git, todas as alteração feitas nele deverão ser comitadas (&lt;span style="font-family:courier new;"&gt;git commit&lt;/span&gt;) e enviadas para o repositório central (&lt;span style="font-family:courier new;"&gt;git push&lt;/span&gt;).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Criando novos repositórios&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para começar, abra o arquivo gitosis.conf. Ele deve parecer da seguinte forma:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;[gitosis]&lt;br /&gt;&lt;br /&gt;[group gitosis-admin]&lt;br /&gt;writable = gitosis-admin&lt;br /&gt;members = usuario@nome_ubuntu&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Onde temos o nome do grupo entre &lt;span style="font-family:courier new;"&gt;[]&lt;/span&gt;, o nome dos projetos com permissão de escrita (&lt;span style="font-family:courier new;"&gt;writeable&lt;/span&gt;) e o usuário que possui esta permissão. Para adicionar um novo projeto, podemos adicionar as  seguintes linhas:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;[group equipe]&lt;br /&gt;writable = projeto1 projeto2 projeto3&lt;br /&gt;readonly = projeto4&lt;br /&gt;members = usuario1@maquina1 usuario2@maquina2&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;No exemplo acima, estamos dando permissão de escrita para os &lt;span style="font-family:courier new;"&gt;projetos 1, 2&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;3&lt;/span&gt; e acesso somente leitura (&lt;span style="font-family:courier new;"&gt;readonly&lt;/span&gt;) ao &lt;span style="font-family:courier new;"&gt;projeto4 &lt;/span&gt;para os usuários &lt;span style="font-family:courier new;"&gt;usuario1@maquina1&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;usuario2@maquina2&lt;/span&gt;. Esses nomes de usuario vem do arquivo &lt;span style="font-family:courier new;"&gt;id_rsa.pub&lt;/span&gt; que é gerado em cada máquina:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAniABr9ynN57KK0ScYDM0lM3h9KBRpa7b&lt;br /&gt;FBIM1aoX2slOKbj4gSdFk2P29tmFb505lly+xsXXCJ//iHheLgpRUcIPG+fLUXYiOhT6&lt;br /&gt;+dv3ERlrhHQ0XmByayMafWyKvsQw6HYjfPNbt4RUnKSLuERSuQsiORCrT0j34lg2ASMk&lt;br /&gt;0+QLOl6HRI1+4GQHXnLydMVbV1dvHeCf1hHfRMcjk5dAmb8m+EW7JJuNjnCby4psEFpG&lt;br /&gt;70ff1T8l8JL1bUwcECfoEQ7GtpjeOTdGCW14D0cb36uXRWvU03kBLJFBbGn7Wuu4VPFz&lt;br /&gt;t2ACPfim8fe9LWGguVVcEKjFonxXJs9BJsMecQ== usuario1@maquina1&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Após serem gerados nas máquinas, os arquivos &lt;span style="font-family:courier new;"&gt;id_rsa.pub&lt;/span&gt; devem ser copiados para a pasta &lt;span style="font-family:courier new;"&gt;~/gitosis-admin/keydir&lt;/span&gt; e renomeados de acordo com o nome do usuário. Seguindo o exemplo acima, teriamos 2 arquivos dentro do diretório &lt;span style="font-family:courier new;"&gt;keydir &lt;/span&gt;chamados &lt;span style="font-family:courier new;"&gt;usuario1@maquina1.pub&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;usuario2@maquina2.pub&lt;/span&gt; .&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Após feitas estas configurações, como já foi dito anteriormente, devemos comitar as alterações e enviar para o repositório central:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;cd ~/gitosis-admin&lt;br /&gt;git add keydir&lt;br /&gt;git add gitosis.conf&lt;br /&gt;git commit -m "Adicionados novos projetos e usuarios"&lt;br /&gt;git push&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Feito isso, as configurações já estão valendo no servidor e os usuários que tiverem acesso já podem clonar os repositórios normalmente.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Referência: &lt;a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way"&gt;http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6249206638265403625-8046016062435581894?l=weverton09.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weverton09.blogspot.com/feeds/8046016062435581894/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6249206638265403625&amp;postID=8046016062435581894' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6249206638265403625/posts/default/8046016062435581894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6249206638265403625/posts/default/8046016062435581894'/><link rel='alternate' type='text/html' href='http://weverton09.blogspot.com/2010/05/instalando-e-configurando-o-gitosis-no.html' title='Instalando e Configurando o Gitosis no Ubuntu'/><author><name>Weverton Gomes de Morais</name><uri>http://www.blogger.com/profile/05358134601093627279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6249206638265403625.post-3862919928629233852</id><published>2009-04-28T13:53:00.000-07:00</published><updated>2009-05-04T10:12:11.645-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='saas'/><category scheme='http://www.blogger.com/atom/ns#' term='s3'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><title type='text'>Configurando o Amazon EC2 e S3</title><content type='html'>Para quem não conhece o &lt;a href="http://aws.amazon.com/ec2/"&gt;EC2&lt;/a&gt; (Elastic Compute Cloud), é um serviço oferecido pela Amazon para soluções de &lt;a href="http://en.wikipedia.org/wiki/Cloud_Computing"&gt;cloud computing&lt;/a&gt;, assim como o &lt;a href="http://aws.amazon.com/s3/"&gt;S3&lt;/a&gt; (Simple Storage Service) é oferecido para armazenamento de dados na nuvem. Ambos são taxados pela Amazon pela quantidade usada: no caso do EC2, no modo on-demand, é cobrado por hora de uso e no caso do S3, é cobrado por GB armazenado. Ou seja, são oferecidos como serviço, utilizando o conceito de &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_Service"&gt;SaaS&lt;/a&gt; (Software as Service) , onde pagamos pelo serviço que consumimos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Características&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;EC2&lt;br /&gt;&lt;/span&gt;O EC2 possui a característica de permitir a virtualização de diversos tipos de SO's, como Windows, Linux e Solaris, similar ao que faz o VMWare, Virtual PC, etc., com a grande diferença que isso estará rodando remotamente.&lt;br /&gt;Existem duas modalidades disponíveis para contratação: on-demand e reserved, cada qual com diversas configurações disponíveis. Na modalidade on-demand, você paga pela hora de processamento que você usa, ou seja, pelo tempo que a instância vai ficar rodando. Já na modalidade reserved, você tem uma fidelização de 1 ou 3 anos, pagando de uma só vez por todo o período contratado, porém ganhando um expressivo desconto no valor cobrado por hora.&lt;br /&gt;Um detalhe muito importante sobre o EC2, e que às vezes causa muitas dúvidas, é que as instâncias só existem enquanto estão rodando. Se um instância for desligada, ele simplesmente deixa de existir, não sendo possível inicia-la novamente. Ou seja, se você criou uma instância linux, instalou todos os programas que você precisa, salvou arquivos, etc e tal, e desligou a instância, você perde todo o seu trabalho. Você pode até dizer "Ah, mas isso é o fim do mundo...", "Como uma empresa do porte da Amazon faz uma coisa dessas?", etc. Calma, calma, não priemos cânico (quem lembrou do Chapolin Colorado??). Como iremos posteriormente, existem soluções para não "perder" todo o seu trabalho.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;S3&lt;br /&gt;&lt;/span&gt;Esse é o melhor amigo do EC2, tanto que você não consegue contratar o EC2 sem contratar o S3. Ele serve para armazenar os dados que precisam ser persistentes e também as AMI's (Amazon Machine Images) que você criar. Se você não sabe o que é uma AMI, não se desespere, pois também vamos falar disso logo abaixo.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Como começar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bem, a primeira coisa a fazer para começar usar o serviço é, logicamente, contratar o serviço. Isso pode ser feito acessando http://aws.amazon.com/ec2/ e clicando na opção 'Sign Up for Amazon EC2'.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QT-8AxgVlj8/SfhVMSTO4OI/AAAAAAAAApw/BGX6rLgJMSI/s1600-h/inicio_ec2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 181px;" src="http://2.bp.blogspot.com/_QT-8AxgVlj8/SfhVMSTO4OI/AAAAAAAAApw/BGX6rLgJMSI/s320/inicio_ec2.png" alt="" id="BLOGGER_PHOTO_ID_5330103828552278242" border="0" /&gt;&lt;/a&gt;Na tela seguinte, faça o login usando uma conta já existente um crie uma nova conta. Depois disso serão mostrados os preços do serviço, solicitados os dados do cartão, a modalidade e configuração desejada.&lt;br /&gt;Quando for solicitado o certificado X.509, peça pra criar um novo e salve os arquivos de chave pública e privada em um local que você se lembre posteriormente, pois eles serão necessários para acessar o serviço. No caso de perda, não há como recuperar o certificado, sendo necessário criar um novo certificado.&lt;br /&gt;Depois no portal da sua conta ("Your Account"), no item "Access Identifiers", se tem acesso a informações muitos importantes, como o &lt;span style="font-style: italic;"&gt;Account Number&lt;/span&gt;, o &lt;span style="font-style: italic;"&gt;Access Key ID&lt;/span&gt; e a &lt;span style="font-style: italic;"&gt;Secret Access Key&lt;/span&gt;, além do certificado X.509 já criado anteriormente.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QT-8AxgVlj8/Sfitlk5j9cI/AAAAAAAAAp4/H6zzsg2bUAw/s1600-h/access_id.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 205px;" src="http://4.bp.blogspot.com/_QT-8AxgVlj8/Sfitlk5j9cI/AAAAAAAAAp4/H6zzsg2bUAw/s320/access_id.png" alt="" id="BLOGGER_PHOTO_ID_5330201020064855490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Criando a primeira instância&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para iniciar  instâncias e, posteriormente, gerencia-las, existe a opção do &lt;a href="https://console.aws.amazon.com/"&gt;AWS Management Console&lt;/a&gt;, que é a 3ª opção abaixo de Access Identifiers. As instâncias são criadas com base em AMI's (Amazon Machine Images), que são modelos de instalações, ou seja, após criar uma instância com base em uma determinada AMI, esta instância já virá com todas as configurações que foram definidas na imagem, ou seja, não será necessário realizar o processo de instalação do SO. Ao acessar o console, clique na aba "Amazon EC2" e logo após em "Launch Instance".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QT-8AxgVlj8/Sfiyy6ramnI/AAAAAAAAAqA/EB-sB0thy-A/s1600-h/new_instance.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 204px;" src="http://4.bp.blogspot.com/_QT-8AxgVlj8/Sfiyy6ramnI/AAAAAAAAAqA/EB-sB0thy-A/s320/new_instance.png" alt="" id="BLOGGER_PHOTO_ID_5330206746807540338" border="0" /&gt;&lt;/a&gt;Na tela que abre ("Choose an AMI"), existem 3 opções:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Quick Start: mostra as AMIs disponibilizadas pela próprima Amazon. Atualmente são diponibilizadas nessa opção algumas configurações de Fedora e Windows.&lt;/li&gt;&lt;li&gt;My AMIs: mostra as AMIs criadas pelo usuário.&lt;/li&gt;&lt;li&gt;Community AMIs: mostra as AMI criadas por outros usuários EC2 e que as tornaram públicas. Nessa opções existem diversas configurações de CentOS, Debian, Fedora, Gentoo, Open Solaris, Red Hat, SUSE, Ubuntu e Windows.&lt;/li&gt;&lt;/ul&gt;Neste tutorial vamos escolher, em QuickStart, a primeira opção, &lt;span style="font-weight: bold;"&gt;Getting Stared on Fedora Core 8&lt;/span&gt;, e clicar em &lt;span style="font-weight: bold;"&gt;Select&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QT-8AxgVlj8/Sfi6LTVOMTI/AAAAAAAAAqI/kQrHXhr6sBg/s1600-h/choose_ami.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 227px;" src="http://2.bp.blogspot.com/_QT-8AxgVlj8/Sfi6LTVOMTI/AAAAAAAAAqI/kQrHXhr6sBg/s320/choose_ami.png" alt="" id="BLOGGER_PHOTO_ID_5330214862323593522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Na próxima tela ("Create Key Pair"), poderá ser criada a chave que permitirá a conexão via ssh. Informe um nome para a chave e clique na opção &lt;span style="font-weight: bold;"&gt;Create &amp;amp; Download Your Key Pair&lt;/span&gt; para efetuar o download do arquivo gerado. É aconselhável salvar esse arquivo juntamente com os arquivos do certificado X.509 já gerados anteriormente. Após o término do download, clique na opção &lt;span style="font-weight: bold;"&gt;Continue&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QT-8AxgVlj8/Sfi8JaSSLwI/AAAAAAAAAqQ/8WRVtarnzJA/s1600-h/key_pair.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 226px;" src="http://2.bp.blogspot.com/_QT-8AxgVlj8/Sfi8JaSSLwI/AAAAAAAAAqQ/8WRVtarnzJA/s320/key_pair.png" alt="" id="BLOGGER_PHOTO_ID_5330217028853837570" border="0" /&gt;&lt;/a&gt;Na próxima tela ("Configure Firewall"), poderá ser criado um grupo de segurança, através do qual poderemos definir restrições de portas no Firewall. Informe o nome do grupo, a descrição e selecione as portas que estarão liberadas para este grupo. Neste momente, só são disponibilizadas para liberação as portas 80(HTTP) e 22(SSH). Posteriormente poderão ser liberadas outras portas. Ao término, clique no botão &lt;span style="font-weight: bold;"&gt;Continue&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QT-8AxgVlj8/SfjDvEOLUBI/AAAAAAAAAqY/7NB1M0EXyrI/s1600-h/firewall.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 229px;" src="http://2.bp.blogspot.com/_QT-8AxgVlj8/SfjDvEOLUBI/AAAAAAAAAqY/7NB1M0EXyrI/s320/firewall.png" alt="" id="BLOGGER_PHOTO_ID_5330225372347453458" border="0" /&gt;&lt;/a&gt;Na última tela ("Launch"), poderá ser definido a quantidade de instâncias que se deseja rodar com as configurações previamente definidas e o tipo de instância desejado, cujas opções variam de acordo com a modalidade contratada. Além disso, você poderá rever as configurações das telas anterior. Ao término, clique no botão &lt;span style="font-weight: bold;"&gt;Launch&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QT-8AxgVlj8/Sf72mj4mlFI/AAAAAAAAAqg/e-SXI4YsuGE/s1600-h/launch.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 231px;" src="http://1.bp.blogspot.com/_QT-8AxgVlj8/Sf72mj4mlFI/AAAAAAAAAqg/e-SXI4YsuGE/s320/launch.png" alt="" id="BLOGGER_PHOTO_ID_5331970151181358162" border="0" /&gt;&lt;/a&gt;Após isso, a instância será iniciada e, em alguns segundos, está disponível para seu uso. Isso pode ser verificado na opção &lt;span style="font-style: italic;"&gt;Instances&lt;/span&gt; do AWS Console, que vai listar todas as instâncias que estão rodando. Quando o status da instância mudar para &lt;span style="font-style: italic;"&gt;running&lt;/span&gt;, a mesma estará pronta para uso.&lt;br /&gt;&lt;br /&gt;Neste &lt;a href="http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/putty.html"&gt;link&lt;/a&gt; você pode ver como usar o &lt;a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html"&gt;putty&lt;/a&gt; para se conectar à sua instância no EC2.&lt;br /&gt;&lt;br /&gt;Nos próximos posts, falaremos, dentre outros assuntos, sobre o plugin Elasticfox e sobre criar sua própria AMI.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6249206638265403625-3862919928629233852?l=weverton09.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weverton09.blogspot.com/feeds/3862919928629233852/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6249206638265403625&amp;postID=3862919928629233852' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6249206638265403625/posts/default/3862919928629233852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6249206638265403625/posts/default/3862919928629233852'/><link rel='alternate' type='text/html' href='http://weverton09.blogspot.com/2009/04/configurando-o-amazon-ec2-e-s3.html' title='Configurando o Amazon EC2 e S3'/><author><name>Weverton Gomes de Morais</name><uri>http://www.blogger.com/profile/05358134601093627279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_QT-8AxgVlj8/SfhVMSTO4OI/AAAAAAAAApw/BGX6rLgJMSI/s72-c/inicio_ec2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6249206638265403625.post-5295129498440669934</id><published>2007-10-10T05:32:00.000-07:00</published><updated>2009-05-04T10:04:52.543-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='innosetup'/><title type='text'>Lista de funções pascal script do InnoSetup</title><content type='html'>Exception functions&lt;br /&gt;procedure Abort;&lt;br /&gt;procedure RaiseException(const Msg: String);&lt;br /&gt;function GetExceptionMessage: String;&lt;br /&gt;procedure ShowExceptionMessage;&lt;br /&gt;&lt;br /&gt;System functions&lt;br /&gt;function IsAdminLoggedOn: Boolean;&lt;br /&gt;function IsPowerUserLoggedOn: Boolean;&lt;br /&gt;function UsingWinNT: Boolean;&lt;br /&gt;function GetWindowsVersion: Cardinal;&lt;br /&gt;procedure GetWindowsVersionEx(var Version: TWindowsVersion);&lt;br /&gt;function GetWindowsVersionString: String;&lt;br /&gt;function IsWin64: Boolean;&lt;br /&gt;function Is64BitInstallMode: Boolean;&lt;br /&gt;function ProcessorArchitecture: TSetupProcessorArchitecture;&lt;br /&gt;function InstallOnThisVersion(const MinVersion, OnlyBelowVersion: String): Integer;&lt;br /&gt;function GetEnv(const EnvVar: String): String;&lt;br /&gt;function GetUserNameString: String;&lt;br /&gt;function GetComputerNameString: String;&lt;br /&gt;function GetUILanguage: Integer;&lt;br /&gt;function FindWindowByClassName(const ClassName: String): HWND;&lt;br /&gt;function FindWindowByWindowName(const WindowName: String): HWND;&lt;br /&gt;function SendMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Longint;&lt;br /&gt;function PostMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Boolean;&lt;br /&gt;function SendNotifyMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Boolean;&lt;br /&gt;function RegisterWindowMessage(const Name: String): Longint;&lt;br /&gt;function SendBroadcastMessage(const Msg, WParam, LParam: Longint): Longint;&lt;br /&gt;function PostBroadcastMessage(const Msg, WParam, LParam: Longint): Boolean;&lt;br /&gt;function SendBroadcastNotifyMessage(const Msg, WParam, LParam: Longint): Boolean;&lt;br /&gt;procedure CreateMutex(const Name: String);&lt;br /&gt;function CheckForMutexes(Mutexes: String): Boolean;&lt;br /&gt;procedure MakePendingFileRenameOperationsChecksum: String;&lt;br /&gt;procedure UnloadDLL(Filename: String);&lt;br /&gt;function DLLGetLastError(): Longint;&lt;br /&gt;&lt;br /&gt;String functions&lt;br /&gt;function Chr(B: Byte): Char;&lt;br /&gt;function Ord(C: Char): Byte;&lt;br /&gt;function Copy(S: String; Indx, Count: Integer): String;&lt;br /&gt;function Length(s: String): Longint;&lt;br /&gt;function Lowercase(S: String): String;&lt;br /&gt;function Uppercase(S: String): String;&lt;br /&gt;function AnsiLowercase(S: String): String;&lt;br /&gt;function AnsiUppercase(S: String): String;&lt;br /&gt;function StringOfChar(c: Char; I : Longint): String;&lt;br /&gt;procedure Delete(var S: String; Indx, Count: Integer);&lt;br /&gt;procedure Insert(Source: String; var Dest: String; Indx: Integer);&lt;br /&gt;procedure StringChange(var S: String; const FromStr, ToStr: String);&lt;br /&gt;function Pos(SubStr, S: String): Integer;&lt;br /&gt;function AddQuotes(const S: String): String;&lt;br /&gt;function RemoveQuotes(const S: String): String;&lt;br /&gt;function ConvertPercentStr(var S: String): Boolean;&lt;br /&gt;function CompareText(const S1, S2: string): Integer;&lt;br /&gt;function CompareStr(const S1, S2: string): Integer;&lt;br /&gt;function Format(const Format: string; const Args: array of const): string;&lt;br /&gt;function Trim(const S: string): String;&lt;br /&gt;function TrimLeft(const S: string): String;&lt;br /&gt;function TrimRight(const S: string): String;&lt;br /&gt;function StrToIntDef(s: string; def: Longint): Longint;&lt;br /&gt;function StrToInt(s: string): Longint;&lt;br /&gt;function IntToStr(i: Longint): String;&lt;br /&gt;function CharLength(const S: String; const Index: Integer): Integer;&lt;br /&gt;function AddBackslash(const S: String): String;&lt;br /&gt;function RemoveBackslashUnlessRoot(const S: String): String;&lt;br /&gt;function RemoveBackslash(const S: String): String;&lt;br /&gt;function AddPeriod(const S: String): String;&lt;br /&gt;function ExtractFileExt(const FileName: string): String;&lt;br /&gt;function ExtractFileDir(const FileName: string): String;&lt;br /&gt;function ExtractFilePath(const FileName: string): String;&lt;br /&gt;function ExtractFileName(const FileName: string): String;&lt;br /&gt;function ExtractFileDrive(const FileName: string): String;&lt;br /&gt;function ExtractRelativePath(const BaseName, DestName: String): String;&lt;br /&gt;function ExpandFileName(const FileName: string): String;&lt;br /&gt;function ExpandUNCFileName(const FileName: string): String;&lt;br /&gt;function GetDateTimeString(const DateTimeFormat: String; const DateSeparator, TimeSeparator: Char): String;&lt;br /&gt;procedure SetLength(var S: String; L: Longint);&lt;br /&gt;procedure CharToOemBuff(var S: String);&lt;br /&gt;procedure OemToCharBuff(var S: String);&lt;br /&gt;function GetMD5OfString(const S: String): String;&lt;br /&gt;function SysErrorMessage(ErrorCode: Integer): String;&lt;br /&gt;&lt;br /&gt;Array functions&lt;br /&gt;function GetArrayLength(var Arr: Array): Longint;&lt;br /&gt;procedure SetArrayLength(var Arr: Array; I: Longint);&lt;br /&gt;&lt;br /&gt;File System functions&lt;br /&gt;function DirExists(const Name: String): Boolean;&lt;br /&gt;function FileExists(const Name: String): Boolean;&lt;br /&gt;function FileOrDirExists(const Name: String): Boolean;&lt;br /&gt;function FileSize(const Name: String; var Size: Integer): Boolean;&lt;br /&gt;function GetSpaceOnDisk(const Path: String; const InMegabytes: Boolean; var Free, Total: Cardinal): Boolean;&lt;br /&gt;function FileSearch(const Name, DirList: string): String;&lt;br /&gt;function FindFirst(const FileName: String; var FindRec: TFindRec): Boolean;&lt;br /&gt;function FindNext(var FindRec: TFindRec): Boolean;&lt;br /&gt;procedure FindClose(var FindRec: TFindRec);&lt;br /&gt;function GetCurrentDir: String;&lt;br /&gt;function SetCurrentDir(const Dir: string): Boolean;&lt;br /&gt;function GetWinDir: String;&lt;br /&gt;function GetSystemDir: String;&lt;br /&gt;function GetSysWow64Dir: String;&lt;br /&gt;function GetTempDir: String;&lt;br /&gt;function GetShellFolder(Common: Boolean; const ID: TShellFolderID): String;&lt;br /&gt;function GetShellFolderByCSIDL(const Folder: Integer; const Create: Boolean): String;&lt;br /&gt;function GetShortName(const LongName: String): String;&lt;br /&gt;function GenerateUniqueName(Path: String; const Extension: String): String;&lt;br /&gt;function GetVersionNumbers(const Filename: String; var VersionMS, VersionLS: Cardinal): Boolean;&lt;br /&gt;function GetVersionNumbersString(const Filename: String; var Version: String): Boolean;&lt;br /&gt;function IsProtectedSystemFile(const Filename: String): Boolean;&lt;br /&gt;function GetMD5OfFile(const Filename: String): String;&lt;br /&gt;&lt;br /&gt;File functions&lt;br /&gt;function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;&lt;br /&gt;function ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;&lt;br /&gt;function RenameFile(const OldName, NewName: string): Boolean;&lt;br /&gt;function ChangeFileExt(const FileName, Extension: string): String;&lt;br /&gt;function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean;&lt;br /&gt;function DeleteFile(const FileName: string): Boolean;&lt;br /&gt;procedure DelayDeleteFile(const Filename: String; const Tries: Integer);&lt;br /&gt;function LoadStringFromFile(const FileName: String; var S: String): Boolean;&lt;br /&gt;function LoadStringsFromFile(const FileName: String; var S: TArrayOfString): Boolean;&lt;br /&gt;function SaveStringToFile(const FileName, S: String; const Append: Boolean): Boolean;&lt;br /&gt;function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;&lt;br /&gt;function CreateDir(const Dir: string): Boolean;&lt;br /&gt;function ForceDirectories(Dir: string): Boolean;&lt;br /&gt;function RemoveDir(const Dir: string): Boolean;&lt;br /&gt;function DelTree(const Path: String; const IsDir, DeleteFiles, DeleteSubdirsAlso: Boolean): Boolean;&lt;br /&gt;function CreateShellLink(const Filename, Description, ShortcutTo, Parameters, WorkingDir, IconFilename: String; const IconIndex, ShowCmd: Integer): String;&lt;br /&gt;procedure RegisterServer(const Is64Bit: Boolean; const Filename: String; const FailCriticalErrors: Boolean);&lt;br /&gt;function UnregisterServer(const Is64Bit: Boolean; const Filename: String; const FailCriticalErrors: Boolean): Boolean;&lt;br /&gt;procedure RegisterTypeLibrary(const Is64Bit: Boolean; const Filename: String);&lt;br /&gt;function UnregisterTypeLibrary(const Is64Bit: Boolean; const Filename: String): Boolean&lt;br /&gt;procedure IncrementSharedCount(const Is64Bit: Boolean; const Filename: String; const AlreadyExisted: Boolean);&lt;br /&gt;function DecrementSharedCount(const Is64Bit: Boolean; const Filename: String): Boolean;&lt;br /&gt;procedure RestartReplace(const TempFile, DestFile: String);&lt;br /&gt;procedure UnregisterFont(const FontName, FontFilename: String);&lt;br /&gt;function ModifyPifFile(const Filename: String; const CloseOnExit: Boolean): Boolean;&lt;br /&gt;&lt;br /&gt;Registry functions&lt;br /&gt;function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean;&lt;br /&gt;function RegValueExists(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;&lt;br /&gt;function RegGetSubkeyNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;&lt;br /&gt;function RegGetValueNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;&lt;br /&gt;function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;&lt;br /&gt;function RegQueryMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;&lt;br /&gt;function RegQueryDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultDWord: Cardinal): Boolean;&lt;br /&gt;function RegQueryBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;&lt;br /&gt;function RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;&lt;br /&gt;function RegWriteExpandStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;&lt;br /&gt;function RegWriteMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;&lt;br /&gt;function RegWriteDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: Cardinal): Boolean;&lt;br /&gt;function RegWriteBinaryValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;&lt;br /&gt;function RegDeleteKeyIncludingSubkeys(const RootKey: Integer; const SubkeyName: String): Boolean;&lt;br /&gt;function RegDeleteKeyIfEmpty(const RootKey: Integer; const SubkeyName: String): Boolean;&lt;br /&gt;function RegDeleteValue(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;&lt;br /&gt;&lt;br /&gt;INI File functions&lt;br /&gt;function IniKeyExists(const Section, Key, Filename: String): Boolean;&lt;br /&gt;function IsIniSectionEmpty(const Section, Filename: String): Boolean;&lt;br /&gt;function GetIniBool(const Section, Key: String; const Default: Boolean; const Filename: String): Boolean&lt;br /&gt;function GetIniInt(const Section, Key: String; const Default, Min, Max: Longint; const Filename: String): Longint;&lt;br /&gt;function GetIniString(const Section, Key, Default, Filename: String): String;&lt;br /&gt;function SetIniBool(const Section, Key: String; const Value: Boolean; const Filename: String): Boolean;&lt;br /&gt;function SetIniInt(const Section, Key: String; const Value: Longint; const Filename: String): Boolean;&lt;br /&gt;function SetIniString(const Section, Key, Value, Filename: String): Boolean;&lt;br /&gt;procedure DeleteIniSection(const Section, Filename: String);&lt;br /&gt;procedure DeleteIniEntry(const Section, Key, Filename: String);&lt;br /&gt;Custom Setup Wizard Page functions&lt;br /&gt;function CreateInputQueryPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputQueryWizardPage;&lt;br /&gt;function CreateInputOptionPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; Exclusive, ListBox: Boolean): TInputOptionWizardPage;&lt;br /&gt;function CreateInputDirPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage;&lt;br /&gt;function CreateInputFilePage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputFileWizardPage;&lt;br /&gt;function CreateOutputMsgPage(const AfterID: Integer; const ACaption, ADescription, AMsg: String): TOutputMsgWizardPage;&lt;br /&gt;function CreateOutputMsgMemoPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption, AMsg: String): TOutputMsgMemoWizardPage;&lt;br /&gt;function CreateOutputProgressPage(const ACaption, ADescription: String): TOutputProgressWizardPage;&lt;br /&gt;function CreateCustomPage(const AfterID: Integer; const ACaption, ADescription: String): TWizardPage;&lt;br /&gt;function CreateCustomForm: TSetupForm;&lt;br /&gt;function PageFromID(const ID: Integer): TWizardPage;&lt;br /&gt;function ScaleX(X: Integer): Integer;&lt;br /&gt;function ScaleY(Y: Integer): Integer;&lt;br /&gt;&lt;br /&gt;Dialog functions&lt;br /&gt;function MsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons: Integer): Integer;&lt;br /&gt;function SuppressibleMsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons, Default: Integer): Integer;&lt;br /&gt;function GetOpenFileName(const Prompt: String; var FileName: String; const InitialDirectory, Filter, DefaultExtension: String): Boolean;&lt;br /&gt;function BrowseForFolder(const Prompt: String; var Directory: String; const NewFolderButton: Boolean): Boolean;&lt;br /&gt;function ExitSetupMsgBox: Boolean;&lt;br /&gt;COM Automation objects support functions&lt;br /&gt;function CreateOleObject(const ClassName: string): Variant;&lt;br /&gt;function GetActiveOleObject(const ClassName: string): Variant;&lt;br /&gt;procedure CoFreeUnusedLibraries;&lt;br /&gt;Setup Logging functions&lt;br /&gt;procedure Log(const S: String);&lt;br /&gt;&lt;br /&gt;Other functions&lt;br /&gt;procedure Sleep(const Milliseconds: LongInt);&lt;br /&gt;function Random(const Range: Integer): Integer;&lt;br /&gt;procedure Beep;&lt;br /&gt;procedure BringToFrontAndRestore;&lt;br /&gt;Deprecated functions&lt;br /&gt;function LoadDLL(const DLLName: String; var ErrorCode: Integer): Longint;&lt;br /&gt;function CallDLLProc(const DLLHandle: Longint; const ProcName: String; const Param1, Param2: Longint; var Result: Longint): Boolean;&lt;br /&gt;function FreeDLL(const DLLHandle: Longint): Boolean;&lt;br /&gt;function CastStringToInteger(var S: String): Longint;&lt;br /&gt;function CastIntegerToString(const L: Longint): String;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6249206638265403625-5295129498440669934?l=weverton09.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://weverton09.blogspot.com/feeds/5295129498440669934/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6249206638265403625&amp;postID=5295129498440669934' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6249206638265403625/posts/default/5295129498440669934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6249206638265403625/posts/default/5295129498440669934'/><link rel='alternate' type='text/html' href='http://weverton09.blogspot.com/2007/10/exception-functions-procedure-abort.html' title='Lista de funções pascal script do InnoSetup'/><author><name>Weverton Gomes de Morais</name><uri>http://www.blogger.com/profile/05358134601093627279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
