Monthly Archive for janeiro, 2009

Como funciona: Pacotes RPM

A pala­vra RPM é um acrô­nimo recur­sivo que sig­ni­fica RPM Package Mana­ger. De modo resu­mido ele é o equi­va­lente aos paco­tes .deb ou, se pre­fe­rir, aos arqui­vos .exe do Win­dows, já que serve para ins­ta­lar, desins­ta­lar e atu­a­li­zar arqui­vos e/ou softwa­res no sis­tema operacional.

Se você não gosta de his­tó­ria, pode pular a seção seguinte e ir direto para “Como funciona?”.

Um pouco de história

No iní­cio da década de 90 já era evi­dente a neces­si­dade de criar um “geren­ci­a­mento de paco­tes” que fosse fun­ci­o­nal e sim­ples de usar. Até então, o método mais comum de ins­ta­la­ção de softwa­res era a tra­di­ci­o­nal com­pi­la­ção e ins­ta­la­ção direta pelo código fonte. Esse método, no entanto, era uma clara des­van­ta­gem por­que excluía os usuá­rios menos téc­ni­cos e fazia com que o sis­tema ope­ra­ci­o­nal tivesse quase ou nenhum con­trole sobre os softwa­res que eram ins­ta­la­dos. Era comum que um soft­ware não pudesse mais ser desins­ta­lado ou que, para garan­tir a desins­ta­la­ção, o código fonte tivesse que ser man­tido no sis­tema. Foi por isso que a Red Hat ini­ciou as pes­qui­sas em busca de um método de geren­ci­a­mento de paco­tes que fosse efe­tivo e simples.

RPP

Foi o nome do geren­ci­a­dor de paco­tes usado pelos pri­mei­ros Red Hats. O RPP foi a “musa ins­pi­ra­dora” para mui­tas das habi­li­da­des que o RPM de hoje em dia aca­bou her­dando. Ele tinha uma uti­li­za­ção sim­ples, bas­tando uma linha de comando para ins­ta­lar um pacote; per­mi­tia a exe­cu­ção de scripts de pré e pós instalação/desinstalação; era capaz de fazer uma veri­fi­ca­ção dos paco­tes para des­co­brir se alguma alte­ra­ção nos arqui­vos tinha sido feita e sal­vava as infor­ma­ções do pacote (como des­cri­ção, ver­são, nome e lis­tas de paco­tes) em um banco de dados. Aca­bou não vin­gando por­que, embora fosse rela­ti­va­mente efi­ci­ente, não con­se­guia tra­ba­lhar com o código fonte ori­gi­nal dos softwa­res que ins­ta­lava. Isso que­ria dizer que cada empa­co­ta­dor pre­ci­sava hac­kear o soft­ware antes de empacotá-lo para que ele fun­ci­o­nasse bem com o RPP. Além disso, o RPP era inca­paz de tra­ba­lhar com arqui­te­tu­ras dife­ren­tes da x86… Embora tenha sido o geren­ci­a­dor de paco­tes RPP o grande dife­ren­cial da Red Hat no iní­cio da empresa, logo ficou claro que a limi­ta­ção de não poder tra­ba­lhar com outras arqui­te­tu­ras viria a se tor­nar um pro­blema e por esse motivo, as pes­qui­sas por um geren­ci­a­mento melhor de paco­tes continuou.

PMS (Pac­kage Mana­ge­ment System)

O PMS não foi desen­vol­vido pela Red Hat. Ao con­trá­rio, era desen­vol­vido por um grupo de desen­vol­ve­do­res che­fi­a­dos por Rik Faith que cri­a­ram a dis­tri­bui­ção cha­mada Bogus Linux . Os paco­tes PMS não eram muito bons por­que usa­vam um banco de dados pobre­mente dse­nhado e facil­mente cor­rup­tí­vel, tam­bém esta­vam limi­ta­dos a ape­nas uma arqui­te­tura mas intro­du­zi­ram o con­ceito de tra­ba­lhar dire­ta­mente com o código fonte do “ups­tream” (i.e. dos desen­vol­ve­do­res ori­gi­nais). Qual­quer mudança neces­sá­ria para que o soft­ware fun­ci­o­nasse era apli­cada por sim­ples patches.

PM

Pouco depois, Rik Faith e Doug Hoff­man , já con­tra­ta­dos pela Red Hat, con­ti­nu­a­ram tra­ba­lhando num geren­ci­a­dor de paco­tes e desen­vol­ve­ram o PM, que jun­tava todas as van­ta­gens do RPP e do PMS. Infe­liz­mente, her­dou tam­bém as fra­que­zas dos dois geren­ci­a­do­res de paco­tes e pos­suía um banco de dados muito cor­rup­tí­vel, além de, claro, con­ti­nuar sendo com­pa­tí­vel com somente um tipo de arquitetura.

RPM 1 (Finalmente)

Espelhando-se nas duas bem suce­di­das ten­ta­ti­vas de cri­a­ção de geren­ci­a­mento (RPP e PMS), Marc Ewing e Erik Troan come­ça­ram a tra­ba­lhar em um ter­ceiro geren­ci­a­dor de paco­tes que se cha­ma­ria RPM (Red Hat PackageManager).

Ape­sar de ins­pi­rado pelo RPP, PMS e PM, o RPM iria focar em resol­ver todos os pro­ble­mas que esses geren­ci­a­do­res antes não tinham con­se­guido resol­ver. A lin­gua­gem de pro­gra­ma­ção esco­lhida foi o Perl, por ser fácil e rápido de programar.

Ape­sar do RPM 1 ter sido, rela­ti­va­mente, um êxito, apre­sen­tava diver­sos problemas:

  • Era muito mais lento do que se tivesse sido escrito em C;
  • O banco de dados era extre­ma­mente frá­gil e que­bra­diço, corrompendo-se à toa;
  • Não era pos­sí­vel exe­cu­tar o geren­ci­a­dor por um dis­quete, já que o fato de ser escrito em perl con­su­mi­ria um espaço extra;
  • Embora fun­ci­o­nasse em outras arqui­te­tu­ras, o fun­ci­o­na­mento ocor­ria com problemas
  • O geren­ci­a­dor de paco­tes não era “expan­sí­vel’. O que sig­ni­fi­cava que qual­quer mudança maior no código faria com que os paco­tes ante­ri­o­res se tor­nas­sem incom­pa­tí­veis com as ver­sões futuras.

RPM 2

Marc e Eric rees­cre­ve­ram o RPM total­mente, usando dessa vez a lin­gua­gem C. Essa deci­são aumen­tou em muito a velo­ci­dade de exe­cu­ção do geren­ci­a­dor de paco­tes. Adi­ci­o­nal­mente, o banco de dados foi rede­se­nhado e per­mi­tia que as con­sul­tas fos­sem exe­cu­ta­das em 1/10 do tempo que antes era tomado pelo RPM 1. Atu­al­mente, o RPM está na ver­são 4.4.2.3.

Como fun­ci­ona?

Um RPM é, na ver­dade, um meta pacote. Para faci­li­tar o enten­di­mento, pense nele como um pacote com diver­sos rótu­los cola­dos nele e que cada um des­ses rótu­los con­tém um tipo de infor­ma­ção que é “inte­res­sante” que seu sis­tema saiba. O soft­ware que você deseja ins­ta­lar está lá, com­pac­tado por um pro­cesso antigo e efi­ci­ente cha­mado cpio.

O que vem no RPM está “pré-compilado”. Isso quer dizer que o soft­ware foi pre­pa­rado em outra máquina, o resul­tado da com­pi­la­ção foi empa­co­tado e tudo que você faz é ins­ta­lar o soft­ware pronto para usar.

A ana­to­mia de um pacote RPM é a seguinte:

  1. O iní­cio do pacote RPM é a “guia” que ensina ao sis­tema ope­ra­ci­o­nal que se trata de um pacote RPM. Nessa seção exis­tem cabe­ça­lhos lidos pelo sis­tema que são impor­tan­tes para o manu­seio do pacote. Aqui cabe uma boa ana­lo­gia com o GRUB.
  2. Esta seção arma­zena assi­na­tu­ras que garan­tem a auten­ti­ci­dade dos paco­tes. É pos­sí­vel, por exem­plo que um dis­tri­bui­dor assine seus RPMs com sua pró­pria marca, que é iden­ti­fi­cada pelo sis­tema. Isso reforça a segu­rança e per­mite a um usuá­rio ins­ta­lar (ou não) somente softwa­res dis­po­ni­bi­li­za­dos por dis­tri­bui­do­res cuja assi­na­tura seja con­fiá­vel (como Fedora, Red Hat, Man­driva, Opensuse…).
  3. Na ter­ceira seção per­ma­ne­cem as infor­ma­ções como nome do soft­ware, ver­são, rele­ase, des­cri­ção, lista de arqui­vos, depen­dên­cias… Essas entra­das são arma­ze­na­das no banco de dados do RPM.
  4. A quarta (e maior) seção con­tém, final­mente, os arqui­vos com­pac­ta­dos. Na figura ela é repre­sen­tada por .tar.gz mas isso é mera­mente ilus­tra­tivo. Na ver­dade, o método de com­pres­são é o cpio. Cada pacote RPM tem uma limi­ta­ção de tama­nho: 2 GB para sis­te­mas 32 bits e 4 GB para sis­te­mas 64 bits.

g2474

Agora que você já entende como é um pacote RPM, está pronto para des­co­brir o que ele faz. Não vou entrar aqui em deta­lhes de como criar um pacote, isso foge ao escopo do nosso artigo, no entanto, de qual­quer forma, antes de botar a mão na massa para fazer um RPM é sem­pre bom enten­der como ele funciona.

Quando você ins­tala um soft­ware qual­quer com o ./configure, make e make install, ele veri­fica se seu sis­tema está ok para rodá-lo, busca as pas­tas cor­re­tas, gera os links, ins­tala as pági­nas de manual e exe­cuta quais­quer outras ope­ra­ções neces­sá­rias. Num pacote RPM ocorre exa­ta­mente o mesmo, mas o soft­ware é enga­nado e acaba se ins­ta­lando numa árvore de dire­tó­rios falsa cha­mada “fake root”. A árvore falsa é exa­ta­mente igual á árvore do seu sis­tema ope­ra­ci­o­nal, mas é “vazia”, sem nenhum outro soft­ware; tudo que existe nessa árvore falsa é o soft­ware que foi “enga­nado” e se ins­ta­lou na árvore de dire­tó­rios falsa. Depois disso, o soft­ware que monta os RPMs (cha­mado RPM­Build) pega essa árvore falsa e a com­pacta den­tro do pacote.

Durante a ins­ta­la­ção do soft­ware que, agora, está den­tro do RPM o soft­ware é des­com­pac­tado e “colado” em cima da árvore de dire­tó­rios de verdade.

Como a árvore falsa e a árvore ver­da­deira são exa­ta­mente iguais, o resul­tado disso é que o RPM acres­centa o novo soft­ware com seus arqui­vos, links e docu­men­ta­ções à árvore exis­tente, algo muito pare­cido com um “copiar e colar” em larga escala.

Tudo que você ins­ta­lou via RPM fica regis­trado num banco de dados SQLite que fica loca­li­zado em /var/lib/rpm (mas não tente abrir esse banco de dados dire­ta­mente, geral­mente o resul­tado é amargo). Se seu RPM foi bem feito ele con­tém uma lista de todo e qual­quer arquivo que foi copi­ado para o seu HD. Cabe ao pro­gra­ma­dor do pacote (empa­co­ta­dor) dizer ao RPM o que ele está jogando no disco, caso con­trá­rio, um RPM mal feito, ao ser desins­ta­lado, pode dei­xar lixo inú­til para trás.

Um pacote RPM é, afi­nal, algo muito simples.

  • Share/Bookmark

Quando chega a hora de morrer…

Em infor­má­tica, todo mundo já ouviu falar e conhece pro­je­tos que tem grande lon­ge­vi­dade e que pros­pe­ra­ram, cres­cendo em impor­tân­cia e 30982-portatil-olpccon­quista de público. Nin­guém nega, por exem­plo, o aspecto clás­sico de um Slackware ou toda a tra­di­ção que há por trás de um Mplayer. São softwa­res que estão aí há anos (e que não tem a menor inten­ção de parar tão cedo).

Por outro lado, na contra-mão dos pro­je­tos que alçam voo temos aque­les que mesmo depois de um grande esforço e mui­tos anos de ten­ta­ti­vas, não con­se­guem decolar.

Esse assunto me sur­giu semana pas­sada quando li uma maté­ria que falava sobre a redu­ção pela metade da equipe de tra­ba­lho do OLPC. Ini­ciei uma dis­cus­são na lista de mar­ke­ting do Fedora falando jus­ta­mente sobre isso: OLPC.

Segue a men­sa­gem abaixo:

Aqui deixo minha opi­nião: O OLPC não deu e nem vai dar em nada.

Quando foi ide­a­li­zado a idéia era boa, mas hoje em dia virou assunto redun­dante, pro­messa que nin­guém mais acre­dita e des­per­dí­cio de tempo e recursos.

Para tudo tem um tempo nessa vida, o OLPC vem ras­te­jando há anos para con­se­guir virar um pro­jeto sério; atu­al­mente me lem­bra o disco do Guns’n Roses “Chi­nese Demo­cracy”, foram 17 anos para ser lan­çado, gran­des dis­cur­sos, gran­des pro­mes­sas, mas quando o álbum saiu, pare­cia exa­ta­mente aquilo que era: um álbum que parece ter vindo da década de 90 em pleno século XXI. Pobre Guns’n Roses… Pobre OLPC… Tomara que alguém com bom senso sejá sábio o bas­tante para des­li­gar os apa­re­lhos e dei­xar que ele des­canse em paz logo.

P.S.: Bem diz a minha avó: “o que começa errado ter­mina errado”. Melhor seria dei­xar disso de OLPC e come­çar um pro­jeto novo agora que o OLPC já virou mais-do-mesmo.”

A ques­tão por trás disso tudo e que ficou mar­te­lando na minha cabeça por um tempo foi “o que fazer quando chega a hora de mor­rer?” e “será que é fácil ter o dis­cer­ni­mento neces­sá­rio para encer­rar um projeto?”.

Mesmo que o assunto possa pare­cer meio bizarro (e é mesmo), para muito pro­je­tos chega um dia em que é pre­ciso parar, ava­liar a rela­ção custo/benefício e deci­dir se che­gou a hora de encer­rar os tra­ba­lhos ou se vale a pena con­ti­nuar, espe­rando por aquela deci­são que muda tudo no último momento. Quem se lem­bra do Lin­dows , que pro­me­tia rodar apli­ca­ti­vos Linux e Win­dows nati­va­mente e sem dis­tin­ção? (con­su­mindo rios de dinheiro em ten­ta­ti­vas frus­tra­das), ou do velho player Soni­que, que deu vexame até na hora do adeus?

A deci­são não é fácil. Tam­bém já tive pro­je­tos que me con­su­mi­ram as noi­tes lutando con­tra a tei­mo­sia de con­ti­nuar e o bom senso de “lar­gar mão” e ir fazer outras coi­sas. Até deci­dir pelo fim do pro­jeto você passa pelo modelo de Kübler-Ross, mais conhe­cido como “Os 5 está­gios de morrer”:

Nega­ção:

Nesse momento você vê que o tempo pas­sou, que deze­nas ou cen­te­nas de horas de tra­ba­lho foram gas­tas mas, ainda assim, o pro­jeto não andou. A sua rea­ção nesse pri­meiro ins­tante é dar um sor­riso e dizer “Está tudo bem. O pro­jeto logo deslancha!”.

Cólera (Raiva):

Pode levar muito tempo entre o pri­meiro está­gio e o segundo. Pro­va­vel­mente numa madru­gada, depois de fumar o quinto cigarro em menos de uma hora, cabe­los des­gre­nha­dos e barba por fazer você amal­di­çoa a hora em que come­çou esse pro­jeto, manda pro inferno todos os seus col­gas de equipe, joga o moni­tor no chão, que­bra todos os móveis do escritório…

Nego­ci­a­ção:

Você já sabe que todas as suas pro­mes­sas não pode­rão ser cum­pri­das em tempo. É hora de cor­rer atrás dos che­fes e expli­car que vai haver atra­sos, pro­va­vel­mente algu­mas mudan­ças para tor­nar o pro­jeto mais sim­ples, quem sabe demi­tir aquele cara que está “empa­cando” o trabalho.

Depres­são:

Aqui você já acha que não adi­anta mais. Acorda cada dia mais tarde e já não pega no pro­jeto por­que, afi­nal de con­tas, “não vai adi­an­tar em nada ficar se pre­o­cu­pando com isso”.

Acei­ta­ção:

Enfim, você reúne a equipe e publica um texto sim­pá­tico (quem sabe até com alguma ani­ma­ção?). Diz que foi ótimo ter tra­ba­lhado no pro­jeto, mas as coi­sas muda­ram e o pro­jeto vai ser des­con­ti­nu­ado para dar lugar a outros trabalhos.

Vale a pena lem­brar, que nem todos che­gam a essa con­clu­são; alguns gas­tam milhões de dóla­res até se con­ven­cer de que as coi­sas estão indo de mal a pior, outros se arras­tam por anos e anos com pro­mes­sas nas quais nin­guém mais acre­dita e outros sim­ples­mente somem.

Fica o melhor exem­plo do Car­los Mori­moto. Embora o Kuru­min fosse uma dis­tro muito amada era redun­dante e con­su­mia muito tempo O fim do pro­jeto foi motivo de tris­teza, mas per­fei­ta­mente com­pre­en­sí­vel. Quem sabe, o pes­soal do OLPC devesse seguir o exem­plo, apro­vei­tar que a ide­o­lo­gia do pro­jeto gerou bons fru­tos, mas acei­tar que o OLPC em si já per­deu o bonde há muito tempo.

  • Share/Bookmark

Twitter? To fora!

2050782994_ccae96c336redimensionadoSei que muita gente vai chiar, dizer que estou por fora, que sou retró­grado e que estou indo na contra-mão do futuro, mas o Twit­ter me incomoda.

Tal­vez a minha resis­tên­cia em ade­rir ao con­ceito de micro blog­ging derive da minha des­con­fi­ança e pes­si­mismo quanto aos rumos que a cul­tura e o hábito da lei­tura e da escrita estão tomando na soci­e­dade moderna. A inter­net trouxe agi­li­dade e trouxe como­di­dade, mas como toda moeda tem dois lados, tam­bém trouxe pre­guiça, incluiu digi­tal­mente os incom­pe­ten­tes e pro­pa­gou como padrão um con­teúdo de qua­li­dade tão baixa que, natu­ral­mente, pro­du­ziu uma horda de pes­soas com con­cei­tos equivocados.

A nossa soci­e­dade, que cada vez lê menos, agora tam­bém está escre­vendo menos e chama isso de “agi­li­dade”, por­que os dados tra­fe­gam na velo­ci­dade da luz e o homem moderno pre­cisa (e deve) se adaptar.

Bem, que me des­cul­pem os lei­to­res assí­duos do pas­sa­ri­nho azul, mas pre­firo me man­ter fiel ao con­ceito de que as pes­soas pre­ci­sam de bons tex­tos, com infor­ma­ção rele­vante e com­pleta, mesmo que isso sig­ni­fi­que tex­tos mai­o­res e menos posts por semana.

A minha conta no Twit­ter vai ficar lá, meio aban­do­nada, espe­rando que eu poste cada vez que sol­tar um espirro ou aceite mais um miguxo no Orkut.

  • Share/Bookmark

Escolhido o codinome para o Fedora 11

Recen­te­mente, no dia 5 de janeiro, o Pro­jeto Fedora ini­ciou as vota­ções para esco­lha do codi­nome do Fedora 11. Essa vota­ção mar­cou uma mudança no pro­cesso de esco­lha do nome: seguindo uma filo­so­fia total­mente vol­tada à comu­ni­dade do Pro­jeto, o líder, Paul Fri­elds, abriu a pos­si­bi­li­dade de qual­quer mem­bro do Pro­jeto Fedora poder suge­rir um codinome.

No prin­cí­pio, os codi­no­mes do Fedora eram esco­lhi­dos exclu­si­va­mente por enge­nhei­ros da Red Hat que esti­ves­sem envol­vi­dos no desen­vol­vi­mento da dis­tro; depois, o pri­vi­lé­gio de suge­rir os codi­no­mes foi ampli­ado para a equipe de desen­vol­vi­mento do Fedora, mesmo que não fos­sem empre­ga­dos da Red Hat, agora, mesmo quem não faz parte do desen­vol­vi­mento direto do “core” (mesmo aque­les que não estão pro­gra­mando código mas que aju­dam em outros fato­res como tra­du­ção, arte, mar­ke­ting…) podem suge­rir codinomes.

Para suge­rir um codi­nome é pre­ciso par­ti­ci­par a brin­ca­deira de quebra-cabeças:

Nome antigo é um(a) <link>, assim como <novo nome>.

Depois de uma longa lista de nomes suge­ri­dos, a equipe de advo­ga­dos da Red Hat começa a pes­qui­sar se os nomes não vio­lam a pro­pri­e­dade de nenhuma empresa e, como já é de cos­tume, a lista fica redu­zida ape­nas a um punhado de nomes:

  • Blar­ney
  • Bra­sí­lia
  • Clay­pool
  • Duchess
  • Eurya­lus
  • Indo­mi­ta­ble
  • Leo­ni­das
  • Zam­pone

O codi­nome ven­ce­dor foi Leo­ni­das e a liga­ção entre Leo­ni­das e Cam­bridge (o codi­nome do fedora atual), foi a seguinte:

Cam­bridge é um navio da mari­nha americana

assim como Leo­ni­das é um navio da mari­nha americana.

Se você ficou curi­oso para ver todas as suges­tões de nome, basta olhar AQUI.

  • Share/Bookmark