helio.loureiro.eng.br
  • Home
  • Unix
  • Linux
  • Blog
  • Python
  • Programação
  • Tudo
  • Suécia
  1. You are here:  
  2. Home
  3. Unix
  4. FreeBSD

Os artigos mais lidos de 2024

  • linux-br.org num ritmo mais lento
  • Criando um serviço de relay de DNS-over-HTTPS
  • Minha palestra sobre a história do Unix na IX BSD Day
  • Pedal forte de 2023 em dados do Google
  • Linux vs GNU/Linux

Atualizando pra FreeBSD 13.0

Details
Written by: Helio Loureiro
Category: FreeBSD
Published: March 19, 2021
Hits: 4147
  • freebsd
  • pkg
  • freebsd-update

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.

Frequências de vídeo

Details
Written by: Helio Loureiro
Category: FreeBSD
Published: November 18, 2010
Hits: 12684

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

Configurando Xorg no FreeBSD dentro do VirtualBox

Details
Written by: Helio Loureiro
Category: FreeBSD
Published: January 23, 2010
Hits: 11647

 

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.

VirtualboxTentando 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.

BSD is Dying (é, tá morrendo)

Details
Written by: Helio Loureiro
Category: FreeBSD
Published: April 21, 2009
Hits: 10194

FreeBSDA 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.

ls: /mnt/ext2: Bad file descriptor

Details
Written by: Helio Loureiro
Category: FreeBSD
Published: January 15, 2009
Hits: 9454

FreeBSD laptop 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.

Disco externo 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:

  • Re: Mounting ext3fs partition
  • Re: ext2 inode size patch - RE: PR kern/124621

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:

http://www.freebsd.org/cgi/query-pr.cgi?pr=124621&cat=
  1. Freebsd 7.1-RELEASED
  2. FreeBSD 7.1-BETA/6.4-BETA Available...
  3. FreeBSD-7.1 chegando...
  4. Ativando journaling no FreeBSD

Page 1 of 7

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Estatísticas

  • Users 2
  • Articles 460
  • Articles View Hits 3255475

Imagem aleatória