Como aplicar patches no OpenBSD

Como aplicar patches no OpenBSD
Q: Eu sou um usuário regular do Linux. No Linux (especialmente no Elementary), estou acostumado a aplicar atualizações algumas vezes por semana usando o comando apt, mas como faço isso no meu OpenBSD? Como faço para aplicar atualizações no sistema operacional OpenBSD?

O OpenBSD é como Linux. No entanto, ele não usa o comando apt. Depende de uma ferramenta chamada pkg_add. Você pode usar o pkg_add para aplicar atualizações ou instalar novos pacotes binários. Há três maneiras de atualizar os pacotes baseados em OpenBSD, Kernel e bases do sistema. O primeiro método requer a aplicação de patches e a compilação do software. O segundo método depende de terceiros para aplicar kernel e patches de pacotes binários. O terceiro método usa o comando syspatch. Eu recomendo usar o terceiro método para os usuários do OpenBSD 6.1 e acima.

Método #1: Mantendo seu OpenBSD 6.2 atualizado usando o código-fonte

Primeiro baixe o código fonte do OpenBSD 6.2. Utilize o comando cd:

Etapa 1: pegue o código-fonte

cd /usr/src

Configure o espelho do OpenBSD para usar e o número da versão para facilidade de uso:

BASE="http://mirror.esc7.net/pub/OpenBSD"
VER="6.2"

Agora pegue o código-fonte para o OpenBSD userland/base system e kernel, usando o comando ftp, execute:

ftp ${BASE}/${VER}/src.tar.gz \
    ${BASE}/${VER}/sys.tar.gz \
    ${BASE}/${VER}/SHA256.sig

Deve retornar algo parecido com isto:

Como aplicar patches no OpenBSD system/kernel e pacotes facilmente

Etapa 2: verifique arquivos baixados:

Use o comando signify:

signify -C -p /etc/signify/openbsd-62-base.pub -x SHA256.sig src.tar.gz
signify -C -p /etc/signify/openbsd-62-base.pub -x SHA256.sig sys.tar.gz

Deve retornar algo parecido com isto:

Como Aplicar Patches No OpenBSD System/Kernel E Pacotes Facilmente

Desempacote os tarballs usando o comando tar:

tar zxf src.tar.gz
tar zxf sys.tar.gz
## [ delete file using rm command ##
rm SHA256.sig *.tar.gz
ls

Como Aplicar Patches No OpenBSD System/Kernel E Pacotes Facilmente

Passo 3: Baixe a errata para o OpenBSD 6.2 Stable

Baixe os arquivos remotos errata 6.1 e aplique-o. Neste exemplo, vou buscar um arquivo tar.gz contendo todos os patches da versão 6.2:

cd /tmp
ftp https://ftp.openbsd.org/pub/OpenBSD/patches/6.2.tar.gz

Novamente, desempacote os patches:

cd /tmp/6.2/common/
ls

Deve retornar algo parecido com isto:

Como Aplicar Patches No OpenBSD System/Kernel E Pacotes Facilmente

Então, eu tenho 25 patches para o meu servidor OpenBSD 6.2 recentemente instalado.

Etapa 4: aplique o patch (kernel e base system) um a um:

Vamos começar pelo arquivo de patch 001_sshd.patch.sig. Você precisa digitar o seguinte comando para ver as informações do errata/path:

more 001_sshd.patch.sig

Como Aplicar Patches No OpenBSD System/Kernel E Pacotes Facilmente

Você pode aplicar o patch fazendo:

signify -Vep /etc/signify/openbsd-59-base.pub -x 001_sshd.patch.sig -m - | (cd /usr/src && patch -p0)

Deve retornar algo parecido com isto:

Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Signature Verified
|
|OpenBSD 5.9 errata 1, Mar 10, 2016:
|
|Lack of credential sanitization allows injection of commands to xauth(1).
|More information: http://www.openssh.com/txt/x11fwd.adv
|
|Prevent this problem immediately by not using the "X11Forwarding" feature
|(which is disabled by default).
|
|Apply by doing:
|    signify -Vep /etc/signify/openbsd-59-base.pub -x 001_sshd.patch.sig \
|        -m - | (cd /usr/src && patch -p0)
|
|And then rebuild and install sshd:
|    cd /usr/src/usr.bin/ssh
|    make obj
|    make depend
|    make
|    make install
|
|Index: usr.bin/ssh/session.c
|===================================================================
|RCS file: /cvs/src/usr.bin/ssh/session.c,v
|retrieving revision 1.280
|diff -u -p -u -r1.280 session.c
|--- usr.bin/ssh/session.c      16 Feb 2016 03:37:48 -0000      1.280
|+++ usr.bin/ssh/session.c      9 Mar 2016 17:02:44 -0000
--------------------------
Patching file usr.bin/ssh/session.c using Plan A...
Hunk #1 succeeded at 40.
Hunk #2 succeeded at 257.
Hunk #3 succeeded at 346.
Hunk #4 succeeded at 1826.
done

E, em seguida, reconstrua e instale o sshd corrigido:

cd /usr/src/usr.bin/ssh
make obj && make depend && make && make install

Talvez seja necessário reiniciar o sistema para atualizações do kernel. Observe que cada patch de errata terá informações diferentes sobre como aplicar e instalar o patch, então você precisa lê-los com cuidado usando mais comandos. Você precisa repetir este procedimento para todos os patches. Eu sugiro que você se inscreva para o OpenBSD announce mailing list para obter informações sobre a errata. Você precisa repetir o procedimento para o resto de todos os patches baixados.

Etapa 5: atualize todos os pacotes de terceiros

Basta digitar o seguinte comando pkg_add:

export PKG_PATH=ftp://mirror.planetunix.net/pub/OpenBSD/`uname -r`/packages/`machine -a`/
pkg_add -Uuv

Veja esta página para maiores informações.

Método #2: Mantendo seu OpenBSD 5.9 atualizado usando o modo de patches binários (3rd party)

Aqui estão algumas informações sobre M: Tier:

Manter os pacotes instalados do OpenBSD atualizados é difícil e demorado. Ninguém quer ler as listas de endereços para detectar reparações de segurança e / ou atualizações que não desejam criar novos pacotes de suas portas e instalá-los manualmente em cada um dos seus servidores e / ou desktops.

Por esta razão, M: Tier está lançando um novo repositório de pacotes que inclui as últimas correções de segurança e atualizações críticas para o OpenBSD desde 5.3

É fácil de configurar e ainda mais fácil de manter … você não precisa mais fazer nada. M: Tier até o notificará por e-mail se houver uma atualização disponível (a menos que você exclua).

Diga Olá para o openup da mtier

Você pode usar o comando openup. É um pequeno utilitário para o OpenBSD que pode ser executado de forma autônoma e que verifica se há atualizações de segurança em ambos os pacotes e no sistema base. O openup usa as ferramentas regulares do pkg, não implementa nada no topo. Você precisa confiar nos mantedores do projeto mtier para usar esse comando. Este comando funciona como o comando ‘yum update’ ou ‘apt-get upgrade’. Primeiro passo é adquirir o openup:

cd /root
ftp https://stable.mtier.org/openup
chmod +x openup

Execute-o para atualizar seu sistema, incluindo pacotes:

./openup

Saída do comando em um sistema OpenBSD 5.9 recentemente instalado:

Como Aplicar Patches No OpenBSD System/Kernel E Pacotes Facilmente

Aqui está outro exemplo. Neste caso, estou abrindo o OpenBSD recentemente atualizado de 5.9 para 6.0:

/root/openup
===> Checking for openup update
===> Downloading and installing public key
===> Removing old release binpatch entries
===> Installing/updating binpatch(es)
quirks-2.241 signed on 2016-07-26T16:56:10Z
binpatch60-amd64-kernel-1.0: ok
binpatch60-amd64-perl-1.0: ok
binpatch60-amd64-relayd-1.0: ok
binpatch60-amd64-smtpd-1.0: ok
===> Updating package(s)
quirks-2.241 signed on 2016-07-26T16:56:10Z
!!!
!!! System must be rebooted after the last kernel update
!!!
#

Observe que M: Tier oferece dois níveis de serviço:

  1. LTS: binpatches, atualizações de pacotes LTS e suporte para os dois lançamentos mais recentes
  2. livre: binpatches e pacotes estáveis para a versão mais recente

Veja esta página para obter mais informações sobre openup e seus serviços pagos e gratuitos.

Método #3: Mantendo seu servidor OpenBSD 6.1 atualizado usando o método syspatch para amd64/i386

O OpenBSD versão 6.1 vem com o comando syspatch para buscar, verificar, instalar e reverter os patches binários do OpenBSD para o sistema base. Este método agora é recomendado para todos os usuários do OpenBSD.

Aplique todos os patches

Escreva o seguinte comando:

doas syspatch

Deve retornar algo semelhante a isto:

Get/Verify syspatch61-007_freetyp... 100% |*************************| 732 KB 00:01 
Installing patch 007_freetype
Missing set, skipping patch 007_freetype
Get/Verify syspatch61-025_ieee802... 100% |*************************| 9356 KB 00:14 
Installing patch 025_ieee80211

Para ver os patches disponíveis, execute:

doas syspatch -c

Deve retornar algo semelhante a isto:

007_freetype

Para ver todos os patches instalados, execute:

doas syspatch -l

Deve retornar algo semelhante a isto:

001_dhcpd
002_vmmfpu
003_libressl
004_softraid_concat
005_pf_src_tracking
006_libssl
008_exec_subr
009_icmp_opts
010_perl
012_wsmux
013_icmp6_linklocal
014_libcrypto
015_sigio
016_sendsyslog
017_fuse
018_recv
019_tcp_usrreq
020_sockaddr
021_ptrace
022_fcntl
023_wsdisplay
024_sosplice
025_ieee80211

Para reverter o patch mais recentemente instalado, execute:

doas syspatch -r

Deve retornar algo semelhante a isto:

Reverting patch 025_ieee80211

Como atualizar todas as aplicações

Execute o seguinte comando:

doas pkg_add -Uuv

Deve retornar algo semelhante a isto:

Update candidates: quirks-2.304 -> quirks-2.304
quirks-2.304 signed on 2017-04-02T15:01:33Z
Update candidates: bash-4.4.12 -> bash-4.4.12
Update candidates: curl-7.53.1 -> curl-7.53.1
Update candidates: gettext-0.19.8.1 -> gettext-0.19.8.1
Update candidates: libiconv-1.14p3 -> libiconv-1.14p3
Update candidates: libidn2-0.16 -> libidn2-0.16
Update candidates: libpsl-0.17.0 -> libpsl-0.17.0
Update candidates: libunistring-0.9.7 -> libunistring-0.9.7
Update candidates: nghttp2-1.21.0 -> nghttp2-1.21.0
Update candidates: pcre-8.38p0 -> pcre-8.38p0
Update candidates: pftop-0.7p15 -> pftop-0.7p15
Update candidates: wget-1.19.1 -> wget-1.19.1

Para mais informações confira o syspatch man page:

man syspatch
man pkg_add