Colin Percival, Security Officer do FreeBSD, autor do freebsd-update e um dos autores da popular dupla bsdiff e bspatch , sistemas de criação e aplicação de patches binários, acaba de lançar uma rotina que usa o freebsd-update para atualizar um sistema FreeBSD de qualquer ramo (BRANCH) da versão 6.0 para o 6.1-RELEASE. O processo de atualização padrão do FreeBSD, através de código fonte, é muito simples e eficiente, mas não é rápido. Dependendo da situação e da função do servidor, o administrador de sistemas pode jugar mais conveniente uma atualização binária. Se for esse o seu caso, essa rotina criada por Colin Percival lhe ajudará bastante. Ao longo desse artigo você acompanhará como fazer essa atualização.
Mas o primeiro objetivo é entender o que é e como funciona a atualização binária, e ver se ela serve para você. Sobre o FreeBSD Update. FreeBSD Update é um sistema que permite criação, distribuição, obtenção e aplicação de atualizações binárias de segurança no FreeBSD. Com ele é possível acompanhar os ramos de segurança do sistema sem a necessidade de sincronizar a árvore fonte e recompilar todo o sistema localmente. Essa tarefa é realizada por um servidor centralizado, o servidor que provê os meta-arquivos binários para aplicação das correções. FreeBSD Update utliza a dupla bsdiff para diff binário e bspatch para patch binário, de forma que você faz download apenas da comparação binária do arquivo de sua versão com o mais recente, melhorando o consumo de banda e evitando desperdícios. As atualizações são assinadas criptograficamente. O FreeBSD Update é projeto para atualizações de sistemas atualmente dispostos sob uma base binária, ou seja uma versão -RELEASE oficial do FreeBSD, e que não teve customizações compiladas localmente. Portanto entenda quando o FreeBSD Update vai servir para você, e quando não vai. O FreeBSD Update atualizará toda sua base binária, se necessário, e seu kernel, apenas se o seu kernel for GENERIC. Se o kernel não for GENERIC, for uma versão customizada, o FreeBSD Update identificará essa versão customizada, e, não só para o kernel como para qualquer outro trecho do sistema, te dará as opções de substituir seu arquivo localmente compilado pela versão remota, ou de deixar seu arquivo localmente modificado intacto. Então no caso do kernel é possível decidir se quer deixar seu kernel como está ou se quer atualizar para o GENERIC mais recente. Note, que este é um momento fundamental para sua decisão. Se você estiver trocando de versão, por exemplo de 4.10 para 4.11 é inapropriado deixar o kernel intocado, pois dessa forma você terá um kernel 4.10 e todo o restante do sistema operacional, 4.11. Sem ter a userland e o kernel em sincronia você pode ter problemas. Portanto o FreeBSD Update em sí é indicado caso você queira acompanhar atualizações de segurança apenas da mesma versão. Se você quiser atualizar de versão, precisará de um conjunto composto e mais elaborado de rotinas de atualização. Para instalar o freebsd-update, faça-o através do /usr/ports/security/freebsd-update/ Atualização binária entre versões distintas. Anteriormente Colin Percival disponibilizou rotinas pré-definidas de como atualizar um FreeBSD 4.8 para FreeBSD 4.11, também de FreeBSD 5.3 para FreeBSD 5.4, e recentemente de FreeBSD 5.4 para FreeBSD 6.0. Em todos esses casos as rotinas envolviam vários passos detalhados e um previo conhecimento do administrador de sistemas que estaria realizando a operação. Agora Percival disponibilizou um script para atualizar de FreeBSD 6.0 para FreeBSD 6.1-RELEASE de forma muito mais simples e rápida. A própria rotina já traz os meta-arquivos de patch binário, e ocupa de 15 a 20 MB ao invés dos tradicionais 650MB da imagem ISO. O script está voltado apenas para plataforma i386. Note bem qual é a situação: Você tem um FreeBSD 6.0 de qualquer ramo (BRANCH). Como ramo estamos nos referindo a um FreeBSD 6.0-RELEASE, ou FreeBSD 6.0-STABLE ou FreeBSD 6.0-RC1, ou FreeBSD 6.0-RELEASE-pX. O fato é que é algum FreeBSD 6.0 em um dos ramos de manutenção dessa versão, e você quer atualizar para o 6.1-RELEASE sem fazer atualização por código fonte. O script em questão fará toda a atualização da base binária do sistema, e também do kernel. Ao final do processo você estará com um FreeBSD 6.1-RELEASE em seu kernel GENERIC. Sim, com kernel GENERIC. Seu kernel atual será movido para kernel.old. Porque GENERIC? Porque a função primária desse script é colocar seu sistema na posição exata de quando o FreeBSD 6.1-RELEASE foi lançado, então o próprio kernel é o mesmo GENERIC do 6.1-RELEASE. Se seu kernel está customizado, você terá que recompilar ele manualmente depois, ou se você não jugar conveniente, melhor deixar de ler este artigo e voltar à boa, velha e prática atualização por código fonte. As atualizações do FreeBSD após o 6.1-RELEASE, como os patch levels dos Security Branches (ramos de segurança) podem ser feitas normalmente com freebsd-update. Mão na massa. Estado claras as circunstâncias as quais a atualização binária se aplica, vamos atualizar o sistema. Primeiro pegue o script de atualização: # fetch http://www.daemonology.net/freebsd-upgrade-6.0-to-6.1/upgrade-6.0-to-6.1.tgz Verifique a integridade desse script, para não correr o risco de ter baixado algum arquivo que não é seguro ou de não ter pego um arquivo corrompido. Para isso verifique a assinatura sha2256 do arquivo: # sha256 upgrade-6.0-to-6.1.tgz SHA256 (upgrade-6.0-to-6.1.tgz) = 29075fc5711e0b20d879c69d12bbe5414c1c56d597c8116da7acc0d291116d2f Confira, a assinatura SHA256 deve ser mesmo essa: 29075fc5711e0b20d879c69d12bbe5414c1c56d597c8116da7acc0d291116d2f Agora descompacte o script recém baixado: # tar vxjf upgrade-6.0-to-6.1.tgz x upgrade x upgrade/upgrade.sh x upgrade/6.1-index x upgrade/6.0-index Entre no diretório upgrade/, e como root, rode a rotina de atualização: # cd upgrade/ # ./upgrade.sh O script é interativo, você não deve ter maiores problemas para entender seu comportamento, mas vamos acompanhar como se dará o processo de atualização. Examining system... done. Aqui o script verifica se seu sistema é 6.0 e é de arquitetura i386. Se não satisfazer essas necessidades, o script abortará (com exit 1). The following components of FreeBSD seem to be installed: kernel|generic world|base world|dict world|doc world|manpages The following components of FreeBSD do not seem to be installed: kernel|smp src|base src|bin src|contrib src|crypto src|etc src|games src|gnu src|include src|krb5 src|libexec src|lib src|release src|rescue src|sbin src|secure src|share src|sys src|tools src|ubin src|usbin world|catpages world|games world|info world|proflibs Does this look reasonable (y/n)? y Aqui o script identifica que componentes (parte do perfil de instalação do FreeBSD) estão instalados e quais não estão. Analise corretamente essas informações, se elas não condizerem com seu sistema, não prossiga. Em algumas situações o scrpit indicará base customizada ou kernel customizado ao invés de base genérica e kernel genérico. Examining system (this will take a bit longer)... done. Aqui o script levantará todos os arquivos customizados do seu sistema. The following files from FreeBSD 6.0 have been modified since they were installed, but will be deleted or overwritten by new versions: /usr/share/examples/etc/group /usr/share/man/whatis E aqui ele listará os arquivos customizados que serão apagados ou sobrescritos pela atualização atual. Na maioria das situações você não deve se preocupar, pois aqui estarão listados apenas arquivos de exemplo e de configuração padrão. Verifique se não tem nenhum arquivo fundamental ao seu sistema listado, como arquivo de usuários, sejas, e .conf em geral. The following files from FreeBSD 6.0 have been modified since they were installed, and will not be touched: /etc/crontab /etc/hosts /etc/mail/aliases /etc/manpath.config /etc/master.passwd /etc/motd /etc/passwd /etc/pwd.db /etc/shells /etc/spwd.db /var/db/locate.database /var/log/sendmail.st Agora a rotina identifica as customizações do seu sistema, os arquivos de sua base de usuários, rotinas agendadas, grupos, e customizações em geral do seu sistema. Nenhum desses arquivos listados acima serão tocados pelo script. Em situações especiais alguns desses arquivos poderão ser fundidos (merge) com os novos, mas as customizações não serão perdidas. Contudo, não se preocupe, mesmo as fusões (merge) serão claramente identificadas para você. The following files from FreeBSD 6.0 have been modified since they were installed, and the changes in FreeBSD 6.1 will be merged into the existing files: /etc/group Como comentado anteriormente, agora as rotinas identificam quais arquivos precisam ser complementados no seu sistema instalado, ou seja, onde haverão fusões (merge) da versão local com a nova versão. Essas fusões não destruirão ou comprometirão suas informações, apenas as complementarão. Does this look reasonable (y/n)? y Se você não estiver de acordo com a modificação dos arquivos mencionados (no caso, apenas o /etc/group) esse é o momento para abortar seu processo de atualização. Preparing to fetch files... done. Fetching 1728 patches....10....20....30....40....50 ....60....70....80....90....100 ....110....120....130....140....150 ....160....170....180....190....200 ....210....220....230....240....250 ....260....270....280....290....300 ....310....320....330....340....350 ....360....370....380....390....400 ....410....420....430....440....450 ....460....470....480....490....500 ....510....520....530....540....550 ....560....570....580....590....600 ....610....620....630....640....650 ....660....670....680....690....700 ....710....720....730....740....750 ....760....770....780....790....800 ....810....820....830....840....850 ....860....870....880....890....900 ....910....920....930....940....950 ....960....970....980....990....1000 ....1010....1020....1030....1040....1050 ....1060....1070....1080....1090....1100 ....1110....1120....1130....1140....1150 ....1160....1170....1180....1190....1200 ....1210....1220....1230....1240....1250 ....1260....1270....1280....1290....1300 ....1310....1320....1330....1340....1350 ....1360....1370....1380....1390....1400 ....1410....1420....1430....1440....1450 ....1460....1470....1480....1490....1500 ....1510....1520....1530....1540....1550 ....1560....1570....1580....1590....1600 ....1610....1620....1630....1640....1650 ....1660....1670....1680....1690....1700 ....1710....1720.... done. Aqui os patches binários foram obtidos e baixados. Applying patches... done. E agora as modificações comecam ser aplicadas. Fetching 434 files....10....20....30....40....50 ....60....70....80....90....100 ....110....120....130....140....150 ....160....170....180....190....200 ....210....220....230....240....250 ....260....270....280....290....300 ....310....320....330....340....350 ....360....370....380....390....400 ....410....420....430.. done. Decompressing and verifying... done. A segunda etapa de aquisições, serão os arquivos de configuração sendo baixados, descomprimidos e verificados. Attempting to automatically merge configuration files... done. Nesse momento a rotina de atualização binária do FreeBSD 6.0 para o 6.1-RELEASE tentará fazer a fusão (merge) automática de suas configurações. Se não conseguir, permitirá que você escolha manualmente o que e como unificar durante essa etapa de merge. The following changes, which occurred between FreeBSD 6.0 and FreeBSD 6.1, have been merged into /etc/group: --- merge/old/etc/group Thu Jun 29 05:39:28 2006 +++ merge/new/etc/group Thu Jun 29 05:39:28 2006 @@ -28,5 +28,6 @@ nobody:*:65534: <CENSORED>:*:1001: <CENSORED>:*:1002: _dhcp:*:65: <CENSORED>:*:1003: +audit:*:77: Does this look reasonable (y/n)? y Pronto, nesse momento todas as modificações de fusão (merge), antes de ser realizadas, lhe serão apresentadas. Depende de você concordar ou não com essa fusão. Tudo sob seu controle. Installing new kernel into /boot/GENERIC... done. Moving /boot/kernel to /boot/kernel.old... done. Moving /boot/GENERIC to /boot/kernel... done. Agora seu kernel atual é renomeado para kernel.old e o kernel GENERIC é instalado, e depois se torna seu kernel padrão. Portanto seu próximo boot será com o kernel GENERIC, no sistema recém atualizado. Depois disso você pode customizar o kernel se jugar necessário. Removing schg flag from existing files... done. Installing new non-kernel files... done. Removing left-over files from FreeBSD 6.0... done. To start running FreeBSD 6.1, reboot. Agora os outros arquivos da userland são atualizados e instalados, seu sistema está pronto, e após o próximo boot você terá um FreeBSD 6.1-RELEASE com a mesma base binária do CD-ROM. Como você acompanhou, o processo de atualização binário em questão é simples e seguro, o sysadmin mantém controle sobre tudo que está acontecendo. Mais Considerações. Se o processo de atualização binária serve ou não à suas necessidades, só você poderá identificar. Em algumas situações pode ser mais conveniente atualizar a base binária de um servidor FreeBSD que represente papel menos importante no seu ambiente, ou em uma situação onde por velocidade (evitar o make world) você jugue conveniente apenas customizar seu kernel depois da atualização binária. Como de costume, há pontos positivos e negativos. Considere-os: Sistemas como PC-BSD, e o Mac OS X da Apple, usam constantemente atualizações binárias, oferecendo à seus usuários uma maneira prática de manter o sistema atualizado sem necessitar que eles tenham conhecimento para atualizar seu sistema por código fonte. No FreeBSD, a situação pode ser similar. Se você mantém uma grande base de FreeBSD não customizada, como ambiente Desktop em um laboratório Universitário, ou centro de pesquisas de qualquer gênero, ou mesmo em casa, talvez essa seja uma opção conviente. Em ambiente de produção é conhecido que alguns servidores dedicados à serviços como DNS por exemplo, não precisam de muita customização. Se o sysadmin usa um sistema base, trabalhar com atualizações binárias lhe poupará um bom tempo e trabalho. Porém, as desvantagens podem ser maiores que as vantagens. Apenas com compilação local você pode customizar seu sistema o máximo, colocando opções especiais no kernel, removendo recursos desnecessários, e também configurando o /etc/make.conf para usar flags especiais de compilação de códigos de baixo-nível para sua arquitetura em especial, não trabalhando com binários de propósito geral que muitas vezes não fazem uso de todas as características internas de sua arquitetura de hardware específica. Pese muito bem os prós e contras. O método de atualização indicado continua sendo através de sincronia de código-fonte e o make world. Nesse caso refira-se a esse artigo publicado aqui na FUG-BR, de autoria de Renato Botelho e Cristopher Giese. Essa é uma excelente referência para os processos de atualização do FreeBSD por código fonte. Como dito, método de atualização por aquisição remota indicado continua sendo através de sincronia de código-fonte e o make world. Mas agora você sabe que essa não é a única opção. Saiba mais: Além das referências linkadas ao longo do artigo, você pode complementar a leitura nas seguintes URLs: Redação FUG-BR, Com contribuição da FreeBSD Brasil LTDA. |