{"id":4123,"date":"2015-07-31T18:22:51","date_gmt":"2015-07-31T21:22:51","guid":{"rendered":"https:\/\/www.viazap.com.br\/?p=4123"},"modified":"2015-07-29T11:24:58","modified_gmt":"2015-07-29T14:24:58","slug":"reduzindo-problemas-de-atualizacoes-no-debian-ubuntu-e-derivados","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=4123","title":{"rendered":"REDUZINDO PROBLEMAS DE ATUALIZA\u00c7\u00d5ES NO DEBIAN, UBUNTU E DERIVADOS"},"content":{"rendered":"<h1>ONDE E PORQUE UTILIZAR ESSA ALTERA\u00c7\u00c3O<\/h1>\n<p>&nbsp;<\/p>\n<div>No long\u00ednquo ano de 2012 fiz uma configura\u00e7\u00e3o para o <em>apt-get<\/em> que reduzia bastante a quebra de pacotes na atualiza\u00e7\u00e3o de sistemas que usam empacotamento .deb, voc\u00ea pode conferir aqui:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.vivaolinux.com.br\/artigo\/Reduzindo-problemas-de-atualizacoes-no-Debian-Ubuntu-e-derivados\">Reduzindo problemas de atualiza\u00e7\u00f5es no Debian, Ubuntu e derivados [Artigo]<\/a><\/li>\n<\/ul>\n<p>Para facilitar a compreens\u00e3o dos que n\u00e3o est\u00e3o habituados aos nomes utilizados, sabe quando voc\u00ea instala um programa, ou vai atualizar o sistema e o instalador para antes do fim e ent\u00e3o voc\u00ea \u00e0s vezes n\u00e3o consegue mais instalar ou remover nada? \u00c9 justamente uma solu\u00e7\u00e3o para isso que proponho nesse artigo.<\/p>\n<p>Se voc\u00ea tem curiosidade para saber o que as altera\u00e7\u00f5es fazem, continue lendo o artigo, se deseja apenas instalar essa melhoria em seu sistema, ao final do artigo est\u00e1 o link para download e instala\u00e7\u00e3o.<\/p>\n<p>Explica\u00e7\u00e3o sobre porqu\u00ea e onde utilizar a modifica\u00e7\u00e3o:<\/p>\n<p>Talvez o que mais me incomode nas distribui\u00e7\u00f5es como um todo seja o processo de atualiza\u00e7\u00e3o, que tende a ocasionalmente quebrar o sistema, utilizo diariamente distribui\u00e7\u00f5es que utilizam pacotes .deb h\u00e1 mais de 10 anos e observei que o gerenciador de pacotes considera como pacote quebrado uma s\u00e9ria de pequenas falhas na execu\u00e7\u00e3o de scripts de p\u00f3s-instala\u00e7\u00e3o, o que na verdade em nada interferem no uso do sistema. Por\u00e9m, ao considerar que o pacote est\u00e1 quebrado ficamos com todo o gerenciador de pacotes comprometido, at\u00e9 que seja dada uma solu\u00e7\u00e3o para esse determinado pacote.<\/p><\/div>\n<div><\/div>\n<div><!--more--><br \/>\nN\u00e3o recomendo que essas altera\u00e7\u00f5es sejam feitas em servidores, pois nesse caso \u00e9 preciso ter algu\u00e9m com experi\u00eancia para efetuar os procedimentos e cada pequeno erro deve ser analisado e resolvido para evitar que o servidor deixe servi\u00e7os indispon\u00edveis, ainda que por per\u00edodos breves.<\/p>\n<p>No caso de computadores pessoais ou de escrit\u00f3rios, onde o usu\u00e1rio muitas vezes tem pouco conhecimento sobre o sistema, ou ainda que tenha conhecimento n\u00e3o deseja se preocupar a cada pequena falha de pacotes, que em geral n\u00e3o muda em nada o uso do sistema, acredito que a abordagem a seguir \u00e9 a melhor solu\u00e7\u00e3o. No momento a instala\u00e7\u00e3o da distribui\u00e7\u00e3o que estou utilizando possui 3450 pacotes instalados, de tal forma \u00e9 bastante improv\u00e1vel que durante uma atualiza\u00e7\u00e3o de tantos pacotes alguns n\u00e3o apresentem erros em seus arquivos de p\u00f3s-instala\u00e7\u00e3o.<\/p>\n<p>Outra caracter\u00edstica que me faz acreditar nessa abordagem \u00e9 que os pacotes realmente essenciais ao funcionamento do sistema tendem a ser muito bem testados e empacotados, ficando para os pacotes de menor import\u00e2ncia a maior quantidade de erros. Existem in\u00fameros casos que j\u00e1 presenciei, por exemplo, de um gerenciador de pacotes travado por erro em um pacote que provia op\u00e7\u00f5es de mais \u00edcones para personalizar o desktop.<\/p><\/div>\n<h1>PASSO A PASSO DAS ALTERA\u00c7\u00d5ES E EXPLICA\u00c7\u00c3O T\u00c9CNICA<\/h1>\n<p>&nbsp;<\/p>\n<div>Cada pacote .deb pode conter at\u00e9 2 scripts a serem executados automaticamente no momento de sua instala\u00e7\u00e3o e mais 2 scripts a serem executados na sua remo\u00e7\u00e3o.<\/p>\n<p>Ao mandar o sistema instalar um pacote .deb, os scripts s\u00e3o salvos na pasta <em>\/var\/lib\/dpkg\/info\/<\/em> e a partir dela s\u00e3o executados. Suas extens\u00f5es s\u00e3o preinst, postinst, prerm e postrm.<\/p>\n<p>Dentro da maior parte desses scripts \u00e9 informado um par\u00e2metro do terminal bash, o &#8220;set -e&#8221;, isso significa que ao encontrar uma falha durante a execu\u00e7\u00e3o de algum dos comandos contidos no script, o mesmo deve ser finalizado e emitido um sinal de erro, que \u00e9 interpretado pelo gerenciador de pacotes do dpkg como um pacote quebrado.<\/p>\n<p>Tamb\u00e9m existe uma checagem bastante utilizada, a &#8220;exit $?&#8221; que \u00e9 utilizada geralmente em conjunto com comandos de execu\u00e7\u00e3o de um daemon, que ao falhar na execu\u00e7\u00e3o tamb\u00e9m emite um sinal de erro que \u00e9 interpretado como pacote quebrado.<\/p>\n<p>Esses problemas s\u00e3o muito comuns de acontecer, podemos encontrar milhares de ocorr\u00eancias ao buscar pelos mesmos, e em geral \u00e9 resolvido editando o script e eliminando o comando que est\u00e1 falhando.<\/p>\n<p>Para simplificar o uso di\u00e1rio do sistema, fiz um simples shell script que acessa essa pasta e altera todos os arquivos que podem causar esse transtorno, removendo o par\u00e2metro &#8220;set -e&#8221; e trocando o &#8220;exit $?&#8221; por &#8220;exit 0&#8221;.<\/p>\n<p>Veja o c\u00f3digo do script:<\/p>\n<pre class=\"prettyprint\">#!\/bin\/bash\r\n\r\n######################\r\n# Tweaks for dpkg\r\n# by Bruno Gon\u00e7alves Araujo &lt;bigbruno@gmail.com&gt;\r\n# licensed under GPLv2 or greater.\r\n# released in 7\/17\/2015\r\n\r\nfor i  in  $(grep -l \"set -e\" \/var\/lib\/dpkg\/info\/*.pre*); do\r\n    sed -i  's|set -e||g' $i\r\ndone\r\n\r\nfor i  in  $(grep -l \"set -e\" \/var\/lib\/dpkg\/info\/*.post*); do\r\n    sed -i  's|set -e||g' $i\r\ndone\r\n\r\nfor i  in  $(grep -l 'exit $?' \/var\/lib\/dpkg\/info\/*.pre*); do\r\n    sed -i  's|exit $?|exit 0|g' $i\r\ndone\r\n\r\nfor i  in  $(grep -l 'exit $?' \/var\/lib\/dpkg\/info\/*.post*); do\r\n    sed -i  's|exit $?|exit 0|g' $i\r\ndone\r\n<\/pre>\n<p>Salvei o mesmo como <em>\/usr\/bin\/dpkg-clean-set<\/em>, ent\u00e3o cada vez que ocorrer um problema, que geralmente est\u00e1 descrito no log de instala\u00e7\u00e3o de pacotes como:<\/p>\n<p><samp>subprocess installed post-installation script returned error exit status 2 <\/samp><\/p>\n<p>Basta executar esse script e novamente mandar instalar ou atualizar os pacotes desejados.<\/p>\n<p>Para automatizar o uso do script, o adicionei como execu\u00e7\u00e3o autom\u00e1tica em todas as vezes que utilizar o apt-get, criei o arquivo<em>\/etc\/apt\/apt.conf.d\/19bigcleanset<\/em> com o seguinte conte\u00fado:<\/p>\n<div class=\"codigo\">DPkg::Pre-Invoke {&#8220;\/usr\/bin\/dpkg-clean-set &#8220;;};<\/div>\n<p>De tal forma toda vez que for instalar um programa, seja diretamente pelo apt-get, ou por uma interface, por exemplo, o Synaptic, o script ser\u00e1 executado, por\u00e9m ele n\u00e3o \u00e9 executado de forma pr\u00e9via \u00e0 atualiza\u00e7\u00e3o ou instala\u00e7\u00e3o, caso algum pacote a ser instalado ou atualizado gere um sinal de erro, a atualiza\u00e7\u00e3o ou instala\u00e7\u00e3o ir\u00e1 considerar o pacote quebrado, por\u00e9m basta executar novamente a instala\u00e7\u00e3o ou atualiza\u00e7\u00e3o do sistema que a altera\u00e7\u00e3o nos scripts ir\u00e1 resolver tudo de forma autom\u00e1tica.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>TESTES \/ CONFIGURA\u00c7\u00c3O DE FORMA AUTOM\u00c1TICA<\/h1>\n<p>&nbsp;<\/p>\n<div><strong>Teste 1<\/strong> &#8211; atualizei a distribui\u00e7\u00e3o <em>BigLinux 12.04<\/em>, que utiliza reposit\u00f3rios <em>Ubuntu<\/em>, para os reposit\u00f3rios 15.10.<\/p>\n<p>Sem as altera\u00e7\u00f5es foram apresentados diversos problemas, ap\u00f3s as altera\u00e7\u00f5es bastou que abrisse o Synaptic e efetuasse a atualiza\u00e7\u00e3o, todos os pacotes foram atualizados, o \u00fanico por\u00e9m \u00e9 que foi instalado o systemd no lugar do upstart e o mesmo n\u00e3o funcionou de forma adequada, por\u00e9m bastou marcar no Synaptic ap\u00f3s a atualiza\u00e7\u00e3o para instalar o pacote <em>upstart-sysv<\/em>.<\/p>\n<p>Foram mais de 3 anos de atualiza\u00e7\u00f5es acumuladas, o que inclui at\u00e9 a troca do KDE 4 para o KDE 5, que ocorreu de forma bastante f\u00e1cil e autom\u00e1tica.<\/p>\n<p><strong>Teste 2<\/strong> &#8211; atualizei uma vers\u00e3o do <em>Linux Mint Debian Edition<\/em> de 2012 para o reposit\u00f3rio <em>Debian Testing<\/em> de hoje, 17 de julho de 2015.<\/p>\n<p>A atualiza\u00e7\u00e3o foi tamb\u00e9m autom\u00e1tica e sequer tive que efetuar alguma interven\u00e7\u00e3o extra, nesse caso n\u00e3o houve mudan\u00e7a para o systemd e tamb\u00e9m n\u00e3o ocorreu mudan\u00e7a maior na vers\u00e3o do desktop.<\/p>\n<p>Tentei efetuar ambas as atualiza\u00e7\u00f5es sem as altera\u00e7\u00f5es contidas nesse artigo e ambos falharam e precisaram de diversas interven\u00e7\u00f5es manuais para que fossem conclu\u00eddas.<\/p>\n<p>Observa\u00e7\u00e3o &#8211; essas atualiza\u00e7\u00f5es foram feitas como teste extremo para avaliar se as altera\u00e7\u00f5es desse artigo s\u00e3o realmente v\u00e1lidas, n\u00e3o \u00e9 algo que me parece sensato de fazer no dia a dia. Portanto se funcionou em casos extremos, deve facilitar muito nosso dia a dia com as pequenas atualiza\u00e7\u00f5es quase di\u00e1rias que s\u00e3o disponibilizadas pela maior parte das distribui\u00e7\u00f5es.<\/p>\n<h1>ARQUIVO .DEB PARA EFETUAR A CONFIGURA\u00c7\u00c3O DE FORMA AUTOM\u00c1TICA<\/h1>\n<p>Se voc\u00ea quer utilizar dos benef\u00edcios listados nesse artigo sem ter trabalho, instale esse arquivo .deb e tudo estar\u00e1 pronto:<\/p>\n<ul>\n<li><a href=\"http:\/\/repo.uniaolivre.com\/packages\/trusty\/main\/big-apt-get-tweaks_2.0.0-1kaiana2_all.deb\" target=\"_blank\" rel=\"nofollow\">http:\/\/repo.uniaolivre.com\/packages\/trusty\/main\/big-apt-get-tweaks_2.0.0-1kaiana2_all.deb<\/a><\/li>\n<\/ul>\n<p>Esse arquivo .deb tamb\u00e9m ir\u00e1 aplicar as configura\u00e7\u00f5es do artigo anterior sobre melhorias na configura\u00e7\u00e3o do apt-get:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.vivaolinux.com.br\/artigo\/Reduzindo-problemas-de-atualizacoes-no-Debian-Ubuntu-e-derivados\">Reduzindo problemas de atualiza\u00e7\u00f5es no Debian, Ubuntu e derivados [Artigo]<\/a><\/li>\n<\/ul>\n<p>Caso esse link saia do ar procure por novas vers\u00f5es nos projetos <em>Uni\u00e3o Livre\/Kaiana<\/em>.<\/p>\n<p>Lembre que mesmo com todas as altera\u00e7\u00f5es propostas n\u00e3o s\u00e3o eliminados todos os problemas, ainda podem ocorrer problemas nas atualiza\u00e7\u00f5es, por\u00e9m de acordo com meus testes e experi\u00eancia, existe uma redu\u00e7\u00e3o gigantesca no n\u00famero de problemas, acredito que mais de 80%.<\/p>\n<p>Aguardo o retorno de voc\u00eas nos coment\u00e1rios desse artigo para ver o que mais pode ser aprimorado para tornar o processo de atualiza\u00e7\u00e3o das distribui\u00e7\u00f5es que utilizam .deb ainda mais pr\u00e1tico.<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>ONDE E PORQUE UTILIZAR ESSA ALTERA\u00c7\u00c3O &nbsp; No long\u00ednquo ano de 2012 fiz uma configura\u00e7\u00e3o para o apt-get que reduzia bastante a quebra de pacotes na atualiza\u00e7\u00e3o de sistemas que usam empacotamento .deb, voc\u00ea pode conferir aqui: Reduzindo problemas de atualiza\u00e7\u00f5es no Debian, Ubuntu e derivados [Artigo] Para facilitar a compreens\u00e3o dos que n\u00e3o est\u00e3o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[477,91,1,730,830,256,42,51,495,68,271,548],"tags":[955,353,17,956,351,361,815,954,273],"class_list":["post-4123","post","type-post","status-publish","format-standard","hentry","category-backup-2","category-banco-de-dados","category-viazap","category-clusterweb","category-debian","category-desktop","category-leitura-recomendada","category-linux-linuxrs","category-profissional-de-ti","category-redes-2","category-seguranca-2","category-ubuntu-2","tag-atualizacoes","tag-de","tag-debian","tag-derivados","tag-e","tag-no","tag-problemas","tag-reduzindo","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4123"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4123\/revisions"}],"predecessor-version":[{"id":4124,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4123\/revisions\/4124"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}