Já faz anos que deixei de usar FreeBSD como principal systema operacional, inclusive no meu laptop. Um dos motivos que me levaram a isso na época foi o fato da hibernação não funcionar corretamente (naquela época). O post que fiz da migração foi esse aqui: Migrando para OpenSuse. Como mudei pra Suécia pra virar um desenvolvedor de software em Linux, não fazia muito sentido continuar ou tentar voltar ao FreeBSD como sistema principal.
Mas sempre tentei manter um pé por ali. FreeBSD é um sistema fantástico pra ser usado. E com as facilidades de CPUs com múltiplos núcleos e avanço no sistemas de virtualização, ficou fácil ter sempre à mão uma VMzinha com o diabinho rodando.
Meu eu sempre criava a VM, usava por um tempo, e depois removia. Simplesmente parei de fazer upgrades. Só testava algumas features e ficava por isso mesmo.
Após uma explicação muito boa do sistema de upgrades feita pelo Garga (@rbgarga) no grupo de FreeBSD (FUG-BR) no Telegram (https://t.me/fug_br), eu resolvi experimentar.
A explicação:
Existem 3 casos de uso do freebsd-update:
1. Atualizar de X.Y pra X.Y-p1
2. Atualizar de X.Y pra X.Y+1
3. Atualizar de X.Y pra X+1.Y
No caso 1, apenas correções de segurança, então vc vai rodar freebsd-update fetch install, reboot e já era.
No caso 2, como vc tá atualizando pra uma nova versão de kernel, dentro da mesma série, vc vai fazer freebsd-update -r X.Y+1 upgrade pra ele baixar tudo o que precisa, aí vai fazer freebsd-update install pra ele instalar o kernel novo, então reboot no kernel novo, confere que tá tudo em ordem e freebsd-update install novamente pra ele atualizar o world, aí vc reinicia ( ou faz um reboot se for possível ) e pronto.
No caso 3 você tá trocando de major version, do 12 pro 13 por exemplo, então vc repete o processo do caso 2, porém, depois do segundo freebsd-update install vc vai estar em um sistema rodando world e kernel do 13, porém com pacotes ainda do 12. Então vc atualiza todos os pacotes e depois roda o último freebsd-update install pra ele remover todos os arquivos antigos do 12 que não são mais usados no 13 (equivalente ao make delete-old delete-old-libs). Se rodar isso antes de reinstalar todos os pacotes, com certeza vai quebrar coisas
Então segui as direções num upgrade do 12.2-RELEASE pro 13.0-RC1, o caso 3.
root@freebsd:~ # freebsd-update -r 13.0-RC1 upgrade
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 12.2-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.
The following components of FreeBSD seem to be installed:
kernel/generic kernel/generic-dbg world/base world/base-dbg world/doc
world/lib32 world/lib32-dbg
The following components of FreeBSD do not seem to be installed:
Does this look reasonable (y/n)? y
Fetching metadata signature for 13.0-RC1 from update4.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... done.
Fetching files from 12.2-RELEASE for merging... done.
Preparing to download files... done.
Fetching 10251 patches.....10....20....30....40....
[editado]
....10230....10240....10250 done.
Applying patches...
Fetching 638 files... ....10....20....
[editado]
...620....630.... done.
Attempting to automatically merge changes in files... done.
The following file will be removed, as it no longer exists in
FreeBSD 13.0-RC1: /etc/motd
Does this look reasonable (y/n)? y
The following files are affected by updates. No changes have
been downloaded, however, because the files have been modified
locally:
/var/db/etcupdate/log
The following files will be removed as part of updating to
13.0-RC1-p0:
/boot/boot1.efifat
13.0-RC1-p0:
/boot/boot1.efifat
/boot/gptboot.efifat
/boot/kernel/aha.ko
[...]
The following files will be added as part of updating to
13.0-RC1-p0:
/boot/fonts
/boot/fonts/10x18.fnt.gz
/boot/fonts/10x20.fnt.gz
/boot/fonts/11x22.fnt.gz
[...]
The following files will be updated as part of updating to
13.0-RC1-p0:
/.cshrc
/.profile
/COPYRIGHT
/bin/[
/bin/cat
/bin/chflags
[...]
To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
root@freebsd:~ # /usr/sbin/freebsd-update install
src component not installed, skipped
Installing updates...
Kernel updates have been installed. Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.
root@freebsd:~ # reboot
Mar 10 11:39:50 freebsd reboot[65100]: rebooted by root
Mar 10 11:39:50 freebsd syslogd: exiting on signal 15
[...]
root@freebsd:~ # uname -a
FreeBSD freebsd 13.0-RC1 FreeBSD 13.0-RC1 #0 releng/13.0-n244639-60e8939aa85: Fri Mar 5 05:01:01 UTC 2021 This email address is being protected from spambots. You need JavaScript enabled to view it. :/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd
64
root@freebsd:~ # /usr/sbin/freebsd-update install
src component not installed, skipped
Installing updates...
Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
/bin/[
/bin/cat
/bin/chflags
[...]
To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
root@freebsd:~ # /usr/sbin/freebsd-update install
src component not installed, skipped
Installing updates...
Kernel updates have been installed. Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.
root@freebsd:~ # reboot
Mar 10 11:39:50 freebsd reboot[65100]: rebooted by root
Mar 10 11:39:50 freebsd syslogd: exiting on signal 15
[...]
root@freebsd:~ # uname -a
FreeBSD freebsd 13.0-RC1 FreeBSD 13.0-RC1 #0 releng/13.0-n244639-60e8939aa85: Fri Mar 5 05:01:01 UTC 2021 This email address is being protected from spambots. You need JavaScript enabled to view it. :/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd
64
root@freebsd:~ # /usr/sbin/freebsd-update install
src component not installed, skipped
Installing updates...
Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run "/usr/sbin/freebsd-update install"
again to finish installing updates.
root@freebsd:~ # reboot
Mar 11 17:25:34 freebsd reboot[43513]: rebooted by root
Mar 11 17:25:34 freebsd syslogd: exiting on signal 15
[...]
root@freebsd:~ # file /usr/local/bin/htop
/usr/local/bin/htop: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 12.0 (1200086), FreeBSD-style, stripped
root@freebsd:/usr/ports/ports-mgmt/pkg # pkg update -f
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100% 163 B 0.2kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 6.4MB/s 00:01
pkg: No trusted certificates
Unable to update repository FreeBSD
Error updating repositories!
E fiquei travado nesse problema de "no trusted certificates" pra atualizar os pacotes.
Levei um tempo buscando solução, que indicavam pegar os certificados do /usr/src, que eu não instalo mais, mas achei a informação de ouro que corrigiu o problema. A instalação sobrescreveu a configuração em /etc/pkg/FreeBSD.conf e isso causou o erro. Bastou trocar o parâmetro "signature_type" para "none" que consegui atualizar os pacotes pra binários do FreeBSD-13.0-RC1.
root@freebsd:~ # cat /etc/pkg/FreeBSD.conf
# $FreeBSD$
# echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf
#
FreeBSD: {
url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
mirror_type: "srv",
signature_type: "none",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}
Sobre o FreeBSD-13.0? Não muito a dizer até onde mexi, mas tem novas features interessantes que espero testar mais a fundo. No momento estou deixando o ambiente preparado pra talvez fazer uma palestra dobre Python no FreeBSD.
Invariavelmente tenho de mexer no xorg e acertar as frequências do monitor. Isso não é tão necessário no Linux, mas em FreeBSD é impossível ter uma tela gráfica usável sem o xorg.conf criado.
E testando no Dell Vostro 3500, só consigo uma tela 1024x768 justamente pela falta das frequências suportadas. Para corrigir isso, criei um script já faz alguns anos, mas não tinha publicado ainda. É baseado no xrandr e deve ser rodado a partir da tela gráfica, por pior que seja sua resolução.
#! /usr/bin/perl
$H_SIZE = 1280; # standard horizontal size
$V_SIZE = 800; # standard vertical size
@SIZES = qw( 1280 1152 1024 800 1200 1400 1600 1800 1900 1920 2048);
print "Section \"Modes\"\n\tIdentifier \"MyModes\"\n";
foreach $hs (@SIZES) {
$rate = $hs / $H_SIZE;
$vs = $V_SIZE * $rate;
foreach $freq qw(60 75) {
print "\t\t# $hs x $vs ($rate - $freq Hz)\n";
$output = `gtf $hs $vs $freq -x`;
foreach $line (split(/\n/, $output)) {
next if ($line !~ /[0-9a-z]/);
$line =~ s/ *//;
print "\t\t".$line."\n";
next if ($line =~ "#");
$line =~ s/\"//g;
$line =~ s/_(\d+)//g;
$line =~ s/Modeline //g;
$cmd = "xrandr --newmode ".$line ;
system($cmd."> /dev/null 2>&1");
#print $cmd."\n";
$modeline = $line;
$modeline =~ s/ .*//g;
#print "Mode: $modeline\n";
$cmd = "xrandr --addmode LVDS $modeline > /dev/null 2>&1";
system($cmd);
}
}
}
print "EndSection\n";
O resultado já sai no formato do xorg.conf:
Section "Modes"
Identifier "MyModes"
# 1280 x 800 (1 - 60 Hz)
# 1280x800 @ 60.00 Hz (GTF) hsync: 49.68 kHz; pclk: 83.46 MHz
Modeline "1280x800_60.00" 83.46 1280 1344 1480 1680 800 801 804 828 -HSync +Vsync
# 1280 x 800 (1 - 75 Hz)
# 1280x800 @ 75.00 Hz (GTF) hsync: 62.62 kHz; pclk: 107.21 MHz
Modeline "1280x800_75.00" 107.21 1280 1360 1496 1712 800 801 804 835 -HSync +Vsync
# 1152 x 720 (0.9 - 60 Hz)
# 1152x720 @ 60.00 Hz (GTF) hsync: 44.76 kHz; pclk: 67.32 MHz
Modeline "1152x720_60.00" 67.32 1152 1208 1328 1504 720 721 724 746 -HSync +Vsync
# 1152 x 720 (0.9 - 75 Hz)
# 1152x720 @ 75.00 Hz (GTF) hsync: 56.40 kHz; pclk: 86.63 MHz
Modeline "1152x720_75.00" 86.63 1152 1224 1344 1536 720 721 724 752 -HSync +Vsync
# 1024 x 640 (0.8 - 60 Hz)
# 1024x640 @ 60.00 Hz (GTF) hsync: 39.78 kHz; pclk: 52.83 MHz
Modeline "1024x640_60.00" 52.83 1024 1072 1176 1328 640 641 644 663 -HSync +Vsync
# 1024 x 640 (0.8 - 75 Hz)
# 1024x640 @ 75.00 Hz (GTF) hsync: 50.17 kHz; pclk: 67.44 MHz
Modeline "1024x640_75.00" 67.44 1024 1080 1184 1344 640 641 644 669 -HSync +Vsync
# 800 x 500 (0.625 - 60 Hz)
# 800x500 @ 60.00 Hz (GTF) hsync: 31.08 kHz; pclk: 31.33 MHz
Modeline "800x500_60.00" 31.33 800 824 904 1008 500 501 504 518 -HSync +Vsync
# 800 x 500 (0.625 - 75 Hz)
# 800x500 @ 75.00 Hz (GTF) hsync: 39.22 kHz; pclk: 40.17 MHz
Modeline "800x500_75.00" 40.17 800 832 912 1024 500 501 504 523 -HSync +Vsync
# 1200 x 750 (0.9375 - 60 Hz)
# 1200x750 @ 60.00 Hz (GTF) hsync: 46.62 kHz; pclk: 73.10 MHz
Modeline "1200x750_60.00" 73.10 1200 1256 1384 1568 750 751 754 777 -HSync +Vsync
# 1200 x 750 (0.9375 - 75 Hz)
# 1200x750 @ 75.00 Hz (GTF) hsync: 58.73 kHz; pclk: 93.96 MHz
Modeline "1200x750_75.00" 93.96 1200 1272 1400 1600 750 751 754 783 -HSync +Vsync
# 1400 x 875 (1.09375 - 60 Hz)
# 1400x875 @ 60.00 Hz (GTF) hsync: 54.36 kHz; pclk: 100.46 MHz
Modeline "1400x875_60.00" 100.46 1400 1480 1624 1848 875 876 879 906 -HSync +Vsync
# 1400 x 875 (1.09375 - 75 Hz)
# 1400x875 @ 75.00 Hz (GTF) hsync: 68.55 kHz; pclk: 128.87 MHz
Modeline "1400x875_75.00" 128.87 1400 1488 1640 1880 875 876 879 914 -HSync +Vsync
# 1600 x 1000 (1.25 - 60 Hz)
# 1600x1000 @ 60.00 Hz (GTF) hsync: 62.10 kHz; pclk: 133.14 MHz
Modeline "1600x1000_60.00" 133.14 1600 1704 1872 2144 1000 1001 1004 1035 -HSync +Vsync
# 1600 x 1000 (1.25 - 75 Hz)
# 1600x1000 @ 75.00 Hz (GTF) hsync: 78.30 kHz; pclk: 169.13 MHz
Modeline "1600x1000_75.00" 169.13 1600 1704 1880 2160 1000 1001 1004 1044 -HSync +Vsync
# 1800 x 1125 (1.40625 - 60 Hz)
# 1800x1125 @ 60.00 Hz (GTF) hsync: 69.84 kHz; pclk: 169.29 MHz
Modeline "1800x1125_60.00" 169.29 1800 1920 2112 2424 1125 1126 1129 1164 -HSync +Vsync
# 1800 x 1125 (1.40625 - 75 Hz)
# 1800x1125 @ 75.00 Hz (GTF) hsync: 88.05 kHz; pclk: 216.25 MHz
Modeline "1800x1125_75.00" 216.25 1800 1928 2128 2456 1125 1126 1129 1174 -HSync +Vsync
# 1900 x 1187.5 (1.484375 - 60 Hz)
# 1904x1187 @ 60.00 Hz (GTF) hsync: 73.74 kHz; pclk: 189.95 MHz
Modeline "1904x1187_60.00" 189.95 1904 2032 2240 2576 1187 1188 1191 1229 -HSync +Vsync
# 1900 x 1187.5 (1.484375 - 75 Hz)
# 1904x1187 @ 75.00 Hz (GTF) hsync: 92.92 kHz; pclk: 242.35 MHz
Modeline "1904x1187_75.00" 242.35 1904 2048 2256 2608 1187 1188 1191 1239 -HSync +Vsync
# 1920 x 1200 (1.5 - 60 Hz)
# 1920x1200 @ 60.00 Hz (GTF) hsync: 74.52 kHz; pclk: 193.16 MHz
Modeline "1920x1200_60.00" 193.16 1920 2048 2256 2592 1200 1201 1204 1242 -HSync +Vsync
# 1920 x 1200 (1.5 - 75 Hz)
# 1920x1200 @ 75.00 Hz (GTF) hsync: 93.97 kHz; pclk: 246.59 MHz
Modeline "1920x1200_75.00" 246.59 1920 2064 2272 2624 1200 1201 1204 1253 -HSync +Vsync
# 2048 x 1280 (1.6 - 60 Hz)
# 2048x1280 @ 60.00 Hz (GTF) hsync: 79.50 kHz; pclk: 221.33 MHz
Modeline "2048x1280_60.00" 221.33 2048 2192 2416 2784 1280 1281 1284 1325 -HSync +Vsync
# 2048 x 1280 (1.6 - 75 Hz)
# 2048x1280 @ 75.00 Hz (GTF) hsync: 100.20 kHz; pclk: 280.56 MHz
Modeline "2048x1280_75.00" 280.56 2048 2200 2424 2800 1280 1281 1284 1336 -HSync +Vsync
EndSection
Bastando somente adicionar os valores de frequência, cujo nome é "MyModes", dentro de "Monitor", como abaixo:
Section "Monitor"
DisplaySize 300 230
HorizSync 28-82
Identifier "Monitor1"
ModelName "1280X1024@60HZ"
Option "DPMS"
VendorName "--> LCD"
VertRefresh 50-60
UseModes "MyModes"
EndSection
Uma vez que mudei para OpenSuse, todo os projetos e uso de FreeBSD pararam completamente.
Eu tinha conseguido a autorização do dono do projeto finstall, uma interface gráfica de instalação para o FreeBSD baseado em Python e Glade, para participar, sendo incluido como commiter, mas nunca atualizei nada. Vergonha pura.
Tentando retomar os trabalhos, instalei o FreeBSD 8.0 num ambiente VirtualBox. Um dos primeiros problemas que notei de cara foi o Xorg. O ambiente inicia com 800x600 e não há meios de mudar isso (o ambiente hospedeiro tem tela de 1280x800). Problema que não encontrei no Windão dentro do VirtualBox.
Googleando por aí, encontrei a sugestão para alterar meu xorg.conf com os parâmetros:
Section "Monitor" #Add the following two lines: HorizSync 31-80 VertRefresh 30-100
e
#add your mode: SubSection "Display" Viewport 0 0 Depth 16 Modes "1280x800" EndSubSection
ambos não funcionaram.
Buscando mais um pouco no Google, segui uma lista do próprio VirtualBox, sobre o mesmo problema. A dica matadora foi utilizar:
VBoxManage setextradata your_machines_name CustomVideoMode1xx
No meu caso:
VBoxManage setextradata FreeBSD CustomVideoMode1 1280x800x16
Existem algumas dicas no FreeBSD Wiki, como o uso do driver "vboxvideo", mas para mim nada deu certo (só funcionou com o driver "vesa").
Outra coisa que levei um certo tempo pra me ligar e arrumar foi em relação ao teclado e mouse. Não havia meio de funcionar. Somente depois de umas 2 horas batendo cabeça lembrei que precisava da instalação do hald e dbus. Instalando o hald, o restante vem automagicamente como dependência.
Agora estou feliz com meu FreeBSD funcionando no VirtualBox, falando com a Internet e o Linux através de uma interface bridged. Espero conseguir fazer alguma coisa logo pro finstall.
A alegria do homem é realmente fugaz. Só o fato de olhar meu site e ver que não foi hackeado (SIC) novamente já me deixa feliz.
Assistindo alguns vídeos de umas palestras, encontrei por acaso o vídeo abaixo. Desconsiderando o título (BSD está morrendo), é uma palestra muito legal e engraçada. Infelizmente totalmente em inglês e sem legendas. Mas não se acanhe: eu também não entendi boa parte do que foi dito! Mas dá pra acompanhar bem a idéia pelos slides.
Essa foi a mensagem que recebi tentando acessar meu disco externo. Retrocedendo um pouco e adicionando a explicação.
No meu HD externo, de 160 GB (já falei dele anteriormente), tenho instalado Ubuntu. Ou tinha. Instalei via Qemu num host FreeBSD. Mas funcionava perfeitamente utilizando boot via USB. Estava testando uns aplicativos quando notei que a versão era 7.4, da época de quando instalei (e comprei o HD), e que por isso os aplicativos não funcionavam. Seguindo um passo-a-passo moroso, atualizei para o o 7.10 e depois para o 8.10. Ao terminar o upgrade para 8.10, nem testei com boot via USB, já voltei ao FreeBSD, com a pretensão de utilizar o mesmo via qemu. Ao acessar o disco... falha... utilizei o fsck.ext2 do FreeBSD, mas acho que foi a pior coisa que fiz: perdi a partição raiz (/) e alguns dados do /home. Tentei recuperar, mas... no fim reinstalei o Ubuntu 8.10.
Dessa vez aguardei o final da instalação (fiz via qemu) e dei um boot via USB para verificar. O sistema rodou perfeitamente ajustado (melhor até que o FreeBSD), o que me fez voltar a pensar em voltar a usar Linux no meu laptop. Ao reiniciar no FreeBSD, tive uma surpresa tentando montar a partição ext3 que foi formatada durante a instalação, justamente a raiz (/). O erro foi o descrito acima:
ls: /mnt/ext2: Bad file descriptor
Verifiquei as outras partições ext3 e... todas funcionando perfeitamente no FreeBSD (por funcionando, entenda como fsck.ext3 e mount_ext2 na partição). Uma busca no google não mostrou muitos resultados úteis, mas dentro do site do FreeBSD, encontrei alguns usuários com o mesmo problema:
Aparentemente um problema relacionado ao "inode size", que era anteriormente formatado como 128, mas passou a utilizar 256 e até 128.
Felizmente esse último link, além de apresentar uma solução, mostrou uma dica para buscar no sistemas de bug do FreeBSD (PR kern/124621). Encontrei o referido problema, ainda como "open", e a mesma solução do último link, via patch. Tentei a sugestão do responsável pelo ticket, que era atualizar a e2fsprogs. Depois apelei para o patch. E inclui minha contribuição. Pequena, irrisória, até mesmo ridícula, mas foi minha primeira contribuição ao projeto... Developers do kernel, aguardem que aqui vou eu :-)
O link do registro de minha proeza: