<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rafael Liu Blog &#187; Linux</title>
	<atom:link href="http://rafaelliu.net/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://rafaelliu.net</link>
	<description>Café, pinguins e outras coisas</description>
	<lastBuildDate>Wed, 28 Mar 2012 21:54:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Medindo consecutivos tempos de subida do JBoss</title>
		<link>http://rafaelliu.net/2011/12/05/medindo-consecutivos-tempos-de-subida-do-jboss/</link>
		<comments>http://rafaelliu.net/2011/12/05/medindo-consecutivos-tempos-de-subida-do-jboss/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 19:01:26 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Diverso]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=585</guid>
		<description><![CDATA[Estava com um problema que causava congelamentos de até 10 minutos nas máquinas do JBoss em um cliente. Estes congelamentos eram intermitentes e aconteciam sempre no boot do JBoss. A fim de fazer testes com várias configurações diferentes e gerar um relatório com dados precisos, escrevi um script que executa o init script do JBoss, [...]]]></description>
			<content:encoded><![CDATA[<p>Estava com um problema que causava congelamentos de até 10 minutos nas máquinas do JBoss em um cliente. Estes congelamentos eram intermitentes e aconteciam sempre no boot do JBoss.</p>
<p>A fim de fazer testes com várias configurações diferentes e gerar um relatório com dados precisos, escrevi um script que executa o init script do JBoss, espera ele inicializar completamente, grava o tempo de inicialização e mata o processo. Faz isso 50 vezes.</p>
<p>Estou postando ele aqui na esperança de ser útil para mais alguém. Ele é bastante auto-explicativo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #666666; font-style: italic;"># Notes: all Java processes are going to the KILLED and</span>
<span style="color: #666666; font-style: italic;"># previous probe.log ERASED!</span>
&nbsp;
<span style="color: #007800;">JBOSS_LOG_FILE</span>=<span style="color: #ff0000;">&quot;/opt/jboss/server/default/log/server.log&quot;</span>
<span style="color: #007800;">REPEAT</span>=<span style="color: #000000;">50</span>
&nbsp;
<span style="color: #007800;">START_STRING</span>=<span style="color: #ff0000;">&quot;Started in&quot;</span>
<span style="color: #007800;">RESULT_FILE</span>=<span style="color: #ff0000;">&quot;/root/probe.log-<span style="color: #780078;">`date +%F`</span>&quot;</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$RESULT_FILE</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">1</span> <span style="color: #007800;">$REPEAT</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #666666; font-style: italic;"># clean</span>
	<span style="color: #c20cb9; font-weight: bold;">killall</span> <span style="color: #660033;">-9</span> java
	<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$JBOSS_LOG_FILE</span>
&nbsp;
	<span style="color: #666666; font-style: italic;"># init and wait</span>
	<span style="color: #c20cb9; font-weight: bold;">sh</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>jboss start
	<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;x<span style="color: #007800;">$( grep &quot;$START_STRING&quot; $JBOSS_LOG_FILE )</span>&quot;</span> == <span style="color: #ff0000;">&quot;x&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">do</span>
		<span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">1</span>
	<span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
	<span style="color: #666666; font-style: italic;"># log</span>
	<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #007800;">$JBOSS_LOG_FILE</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$START_STRING</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #007800;">$RESULT_FILE</span>
<span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Done&quot;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/12/05/medindo-consecutivos-tempos-de-subida-do-jboss/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Agente JON/Jopr não sobre no boot</title>
		<link>http://rafaelliu.net/2010/01/26/agente-jonjopr-nao-sobre-no-boot/</link>
		<comments>http://rafaelliu.net/2010/01/26/agente-jonjopr-nao-sobre-no-boot/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 15:50:58 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[fedora]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=328</guid>
		<description><![CDATA[JON 2.3.0.GA O jeito mais comun de se adicionar o JON/Jopr para subir no boot (Red Hat Enterprise Linux) criar um link simbólico: ln -sf $RHQ_AGENT_HOME/bin/rhq-agent-wrapper.sh /etc/init.d/rhq-agent adicionar à lista de serviços: chkconfig --add rhq-agent Agora basta rebootar e&#8230; Não funciona. Agora tente executar /etc/init.d/rhq-agent start. Funciona!! A razão é que o bash script rhq-agent-wrapper.sh [...]]]></description>
			<content:encoded><![CDATA[<p>JON 2.3.0.GA</p>
<p>O jeito mais comun de se adicionar o JON/Jopr para subir no boot (Red Hat Enterprise Linux)</p>
<ol>
<li>criar um link simbólico:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-sf</span> <span style="color: #007800;">$RHQ_AGENT_HOME</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>rhq-agent-wrapper.sh <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>rhq-agent</pre></div></div>

</li>
<li>adicionar à lista de serviços:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">chkconfig <span style="color: #660033;">--add</span> rhq-agent</pre></div></div>

</li>
</ol>
<p>Agora basta rebootar e&#8230; Não funciona. Agora tente executar /etc/init.d/rhq-agent start. Funciona!!</p>
<p>A razão é que o bash script rhq-agent-wrapper.sh tenta achar o $RHQ_AGENT_HOME automaticamente através do path do script. Dá para ver isso na linha:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">_DOLLARZERO</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">readlink</span> <span style="color: #ff0000;">&quot;$0&quot;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;$0&quot;</span><span style="color: #000000; font-weight: bold;">`</span></pre></div></div>

<p>Para quem não conhece bash script o $0 é o argumento 0, que corresponde ao caminho do arquivo sendo executado. O que acontece nessa linha é que a variável recebe o caminho do link derreferenciado, caso o arquivo seja um link, ou o caminho do arquivo, caso seja um arquivo mesmo (aliás é por isso que usamos um link no passo 1, senão o script acharia que /etc/init.d é o $RHQ_AGENT_HOME).</p>
<p>O chkconfig é a ferramenta usada no RHEL para registrar serviços. Nela registramos que serviços queremos subir em que níveis de inicialização. Esses níveis são (direto do inittab):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#   0 - halt (Do NOT set initdefault to this)</span>
<span style="color: #666666; font-style: italic;">#   1 - Single user mode</span>
<span style="color: #666666; font-style: italic;">#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)</span>
<span style="color: #666666; font-style: italic;">#   3 - Full multiuser mode</span>
<span style="color: #666666; font-style: italic;">#   4 - unused</span>
<span style="color: #666666; font-style: italic;">#   5 - X11</span>
<span style="color: #666666; font-style: italic;">#   6 - reboot (Do NOT set initdefault to this)</span></pre></div></div>

<p>O problema é que o chkconfig usa, para registrar os serviços, links simbólicos nas pastas /etc/rcX.d (onde X é o nível de inicialização). O que acontece então é o que é executado é um link simbólico em /etc/rc3.d apontando para o link simbólico /etc/init.d apontando para $RHQ_AGENT_HOME/bin. Algo do tipo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc3.d<span style="color: #000000; font-weight: bold;">/</span>S93rhq-agent -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>rhq-agent -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #007800;">$RHQ_AGENT_HOME</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>rhq-agent-wrapper.sh</pre></div></div>

<p>E o comando readlink não é recursivo por padrão, ou seja, se o link derreferenciado apontar para outro link, o readlink não o derreferencia.. A solução está no readlink &#8211;help: adicionar a flag -e.</p>
<p>Ou seja, basta mudar a linha 102 para:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">_DOLLARZERO</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">readlink</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;$0&quot;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;$0&quot;</span><span style="color: #000000; font-weight: bold;">`</span></pre></div></div>

<p>Fonte: <a title="rhq-agent-wrapper.sh needs to be modified to work with SYSV init systems and chkconfig " href="http://jira.rhq-project.org/browse/RHQ-2444" target="_blank">JIRA</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2010/01/26/agente-jonjopr-nao-sobre-no-boot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Contribuam com o projeto Fedora Brasil!</title>
		<link>http://rafaelliu.net/2008/08/04/44/</link>
		<comments>http://rafaelliu.net/2008/08/04/44/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 13:52:10 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://rafaelliu.wordpress.com/2008/08/04/44/</guid>
		<description><![CDATA[Foi aberta a campanha para comprarmos uma Impressora/Duplicadora de CDs/DVDS, fazendo parte do projeto de embaixadores e representando Brasília vim convocar no blog toda comunidade Fedora, e Open Source em geral, a contribuir. O Rodrigo Padula, Fedora LATAM Ambassadors Administrator, está tomando conta da campanha e o equipamento será usado para distribuição de mídias no [...]]]></description>
			<content:encoded><![CDATA[<p>Foi aberta a <a title="Campanha de doações para compra de Impressora/Duplicadora de CDs/DVDS" href="http://www.projetofedora.org/node/79" target="_blank">campanha para comprarmos uma Impressora/Duplicadora de CDs/DVDS</a>, fazendo parte do projeto de embaixadores e representando Brasília vim convocar no blog toda comunidade Fedora, e Open Source em geral, a contribuir. O <a title="Rodrigop" href="http://fedoraproject.org/wiki/RodrigoPadula" target="_blank">Rodrigo Padula</a>, Fedora LATAM Ambassadors Administrator, está tomando conta da campanha e o equipamento será usado para distribuição de mídias no Brasil pelo projeto Free Media.</p>
<p>São distribuidos prêmios dependendo da contribuição dada, inclusive para empresas, que também podem contribuir. Contribui com R$ 60,00 (e ganhei uma camiseta Fedora). Contribuam também!</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2008/08/04/44/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semana de Extensão na UnB</title>
		<link>http://rafaelliu.net/2008/07/06/semana-de-extensao/</link>
		<comments>http://rafaelliu.net/2008/07/06/semana-de-extensao/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 02:23:48 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Evento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[fedora]]></category>

		<guid isPermaLink="false">http://rafaelliu.wordpress.com/?p=25</guid>
		<description><![CDATA[A Universidade de Brasília anualmente promove um evento chamado Semana de Extensão, que em sua oitava edição esse ano, será realizada de 30 de setembro à 3 de outubro na própria UnB. É basicamente um monte de eventos &#8211; palestras, mini cursos, oficinas &#8211; em todas as áreas do conhecimento. Para se ter idéia do [...]]]></description>
			<content:encoded><![CDATA[<p>A Universidade de Brasília anualmente promove um evento chamado <a title="Site da Semana de Extensão" href="http://www.semanadeextensao.unb.br/" target="_blank">Semana de Extensão</a>, que em sua oitava edição esse ano, será realizada de 30 de setembro à 3 de outubro na própria UnB. É basicamente um monte de eventos &#8211; palestras, mini cursos, oficinas &#8211; em todas as áreas do conhecimento. Para se ter idéia do tamanho, a edição passada teve 272 atividades e um público de 35.893 pessoas. O tema desse ano é <em>Universidade de Democracia</em>. As inscrições para eventos estão abertas até dia 11 de julho.</p>
<p>Todo ano participo como público e já fazia tempo, queria participar como colaborador. Nesse ano me inscrevi para o programa de embaixadores do projeto Fedora e aproveitando o embalo cadastrei o evento <em>Introdução ao SELinux</em>, que pretendo dar usando Fedora.</p>
<p>Enviei ainda outra proposta de palestra com o título<em> Entendendo SOA.</em> Por enquanto enviei apenas as propostas, elas ainda devem ser avaliadas. Assim que tiver a confimação faço um <em>post</em> com mais informações e depois com o material da apresentação. Mas já fica o aviso, todo ano tem coisa interessante na área de TI, quem puder compareça!</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2008/07/06/semana-de-extensao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>LPI 101</title>
		<link>http://rafaelliu.net/2008/06/13/lpi-101/</link>
		<comments>http://rafaelliu.net/2008/06/13/lpi-101/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 19:55:36 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Certificação]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[lpi]]></category>

		<guid isPermaLink="false">http://rafaelliu.wordpress.com/?p=18</guid>
		<description><![CDATA[Passei hoje na LPI 101 com 630 pontos, o mínimo era 500. Terminei a prova de 120 minutos em apenas 40. Como esperava foi pura decoreba, você sabia responder ou não. Como material utilizei muito as MAN pages, principalmente para gerência de usuários e pacotes e para conceitos em geral o livro LPIC-1: Linux Professional [...]]]></description>
			<content:encoded><![CDATA[<p>Passei hoje na <em>LPI 101</em> com 630 pontos, o mínimo era 500. Terminei a prova de 120 minutos em apenas 40. Como esperava foi pura decoreba, você sabia responder ou não. Como material utilizei muito as MAN pages, principalmente para gerência de usuários e pacotes e para conceitos em geral o livro <a title="Linux Professional Institute Certification Study Guide" href="http://www.amazon.com/LPIC-1-Linux-Professional-Institute-Certification/dp/078214425X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1213386498&amp;sr=8-1" target="_blank">LPIC-1: Linux Professional Institute Certification Study Guide</a>. Fiz também alguns testes do TestKing que foram muito úteis, com algumas perguntas muito parecidas com as do exame.</p>
<p>Para obter o LPIC1 falta ainda passar no exame LPI 102, que cobre as partes kernel, rede e seguraça. Não sei ao certo quando farei, mas não pretendo demorar muito já que minha LPI 101 seria inútil.</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2008/06/13/lpi-101/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fedora 9</title>
		<link>http://rafaelliu.net/2008/06/08/fedora-9/</link>
		<comments>http://rafaelliu.net/2008/06/08/fedora-9/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 20:41:45 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://rafaelliu.wordpress.com/?p=14</guid>
		<description><![CDATA[O Fedora 9 saiu já faz algum tempo, fiquei de fazer um review mas outras coisas sempre iam aparecendo. Aproveitei esse finalzinho de tarde de domingo para finalmente escrever minhas impressões. Primeiro a instalação. Instalei o F9 no meu notebook, um HP Pavillion dv2000. Tive problemas na parte final da instalação, quando chegava nos últimos [...]]]></description>
			<content:encoded><![CDATA[<p>O Fedora 9 saiu já faz algum tempo, fiquei de fazer um review mas outras coisas sempre iam aparecendo. Aproveitei esse finalzinho de tarde de domingo para finalmente escrever minhas impressões.</p>
<p>Primeiro a instalação. Instalei o F9 no meu notebook, um HP Pavillion dv2000. Tive problemas na parte final da instalação, quando chegava nos últimos pacotes o Anaconda travava e era sempre no mesmo pacote. Instalações travando já aconteceram comigo antes, já tive isso instalando o Windows XP também. Fato é que um teste no meu desktop logo pôs a culpa no meu note. Tive então que remover alguns pacotes e a instalação foi concluida.</p>
<p>Senti o boot com o novo Upstart mais rápido e mais novidades tela de login: ferramentas de acessibilidade, gerenciador de energia e seletor de língua. Ao tentar logar, um problema estranho: na tela de login, quando eu entrava com o login a tela de login parecia apenas dar um refresh. Bootei com init=/bin/bash e vi que era um erro de permissão quando ia-se iniciar o gdm. Desconfiado do SELinux, desabilitei-o e dei reboot para então consegui logar.</p>
<p>Depois disso só alegria. É só habilitar o som que vem mute por padrão, instalar o xorg-x11-drv-nvidia do repositório do livna e deixar o gnome mais com a sua cara.</p>
<p>As novidades que mais notei foram:</p>
<ul>
<li> OpenJDK 6! &#8211; vem sem algumas ferramentas com que estava acostumado no JDK da Sun, mas apoio incondicionalmente esse projeto;</li>
<li> PackageKit &#8211; uma idéia interessante de fazer uma GUI unificada para todos os gerenciadores de pacotes;</li>
<li>Keyring integrado &#8211; usando PAM;</li>
<li>Firefox 3 &#8211; tá muito bom =) só me deixou na mão uma ou duas vezes, fechando do nada, mas é beta ainda.</li>
</ul>
<p>Fora essas novidade o F9 possibilita ainda a criação de um Live USB persistente, algo muito interessante. Bom, um ponto fraco: não vi conector Xen para o Virtual Machine Manager.</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2008/06/08/fedora-9/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quick one</title>
		<link>http://rafaelliu.net/2008/05/26/quick-one/</link>
		<comments>http://rafaelliu.net/2008/05/26/quick-one/#comments</comments>
		<pubDate>Mon, 26 May 2008 19:03:28 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[jar]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://rafaelliu.wordpress.com/?p=12</guid>
		<description><![CDATA[This one is for all of you who (like me) keeps wasting time using commands such as find, jar and grep each time you get a classpath error: #!/bin/bash if &#91; &#34;$1&#34; = &#34;&#34; &#93;; then echo &#34;Usage: jarfind REGEXP&#34;; exit; fi &#160; for d in `find . -name '*.jar'` ; do FILES=`unzip -l $d [...]]]></description>
			<content:encoded><![CDATA[<p>This one is for all of you who (like me) keeps wasting time using commands such as find, jar and grep each time you get a classpath error:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;$1&quot;</span> = <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: jarfind REGEXP&quot;</span>;
	<span style="color: #7a0874; font-weight: bold;">exit</span>;
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> d <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> . <span style="color: #660033;">-name</span> <span style="color: #ff0000;">'*.jar'</span><span style="color: #000000; font-weight: bold;">`</span> ; <span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #007800;">FILES</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">unzip</span> <span style="color: #660033;">-l</span> <span style="color: #007800;">$d</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">29</span>- <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">egrep</span> <span style="color: #ff0000;">''</span><span style="color: #007800;">$1</span><span style="color: #ff0000;">''</span><span style="color: #000000; font-weight: bold;">`</span>;
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$FILES</span>&quot;</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$d</span>&quot;</span>;
&nbsp;
		<span style="color: #000000; font-weight: bold;">for</span> f <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$FILES</span> ; <span style="color: #000000; font-weight: bold;">do</span>
			<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot; - <span style="color: #007800;">$f</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">done</span>
	<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>I&#8217;ve chose to use unzip instead of jar since it&#8217;s far more commonly seem. Move it to /usr/local/bin/jarfind  (well, that&#8217;s a little personal) and chmod it to +x.</p>
<p>I works searching all jars under the current directory for a regular expression, most commonly a simple class name. It returns the jar&#8217;s names and all corresponding class matches.</p>
<p>I&#8217;m <span style="text-decoration:underline;">not</span> a bash programmer, so it may not look that pretty to experienced bash programmers, but it looks beautiful to me, as it saves me a lot of time =). Feel free to make any comments.</p>
<p><strong>EDIT:</strong></p>
<p>first known bug: doesn&#8217;t escape special characters in paths =/</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2008/05/26/quick-one/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java portável?</title>
		<link>http://rafaelliu.net/2008/02/11/java-portavel/</link>
		<comments>http://rafaelliu.net/2008/02/11/java-portavel/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 12:35:13 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[portabilidade]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://rafaelliu.wordpress.com/?p=5</guid>
		<description><![CDATA[Há pouco tempo enviei um email com recomendações para o pessoal de desenvolvimento da minha empresa, transcrevi muito do email aqui e alterei algumas coisa: Tenho visto muito problema para fazer deploy de aplicações no que diz respeito à portabilidade das aplicações. Em minha empresa desenvolvemos em Windows mas no cliente usamos servidores Linux. Aqui [...]]]></description>
			<content:encoded><![CDATA[<p>Há pouco tempo enviei um email com recomendações para o pessoal de desenvolvimento da minha empresa, transcrevi muito do email aqui e alterei algumas coisa:</p>
<p>Tenho visto muito problema para fazer deploy de aplicações no que diz respeito à portabilidade das aplicações. Em minha empresa desenvolvemos em Windows mas no cliente usamos servidores Linux. Aqui vão algumas recomendações para evitar esses problemas:</p>
<ul>
<li>Evitem sempre que possível classes do pacote com.sun.*, nem sempre o cliente usa a JVM da sun (no meu caso era mais simples copiar o rt.jar da JVM da Sun para o lib/ext, mas é um tanto gambiarra.. além do mais esse jar tem mais de 40mb);</li>
<li>Quando chamarem comandos externos no Ant chamem pelo nome em minúsculo, há diferenças de case <em>senssitiveness </em>entre OS&#8217;s, e os comandos em geral são em minúsculo em OS&#8217;s Unix-like. E antes de fazer qualquer dessas chamadas, procurem se já não existe uma task para isso, o script fica muito mais limpo e utiliza-se a portabilidade do Java corretamente;</li>
<li>Tomem cuidado também com o nome que vocês dão às pastas e arquivos. Estabeleçam um nome e sigam ele, não misturem &#8220;InfraEstrutura.txt&#8221; com &#8220;infraestrutura.txt&#8221;;</li>
<li>Quando forem compilar qualquer coisa para distribuição usem o parâmetro encoding do javac, iso-8859-1 no caso de se usar Windows e os arquivos estarem salvos no encoding padrão. Na verdade, creio que o mais correto seria desenvolver em utf-8, mas&#8230;</li>
<li>Evitem caminhos absolutos! Nem todo OS tem c:\!</li>
</ul>
<p>Mais alguns toques para scripts Ant de distribuição: habilitem o nowarn, os warnings dão impressão de má qualidade e sujam o log; tentem fazer um script que possa ser robotizado (sem nenhum input), muitas vezes é interessante criar cron jobs para ele.</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2008/02/11/java-portavel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

