segunda-feira, 28 de outubro de 2019

Fazendo automount no Raspberry

Neste post vou mostrar como configurar o Raspberry para que ele sempre monte um disco rígido (externo) conectado via USB.

Você irá precisar do pacote autofs, que pode ser instalado usando o comando abaixo:
sudo apt-get install autofs
Para saber qual é o dispositivo do seu disco rígido, você pode utilizar a saída do dmesg que irá mostrar algo semelhante ao conjunto de linhas abaixo
[  228.147834] scsi 0:0:0:0: Direct-Access     ST2000DM 001-1CH164            PQ: 0 ANSI: 2 CCS
[  228.149532] sd 0:0:0:0: [sda] 3907029168 512-byte logical blocks: (2.00 TB/1.82 TiB)
[  228.150010] sd 0:0:0:0: [sda] Write Protect is off
[  228.150031] sd 0:0:0:0: [sda] Mode Sense: 00 38 00 00
[  228.150702] sd 0:0:0:0: [sda] Asking for cache data failed
[  228.150727] sd 0:0:0:0: [sda] Assuming drive cache: write through
[  228.169859]  sda: sda1
[  228.173948] sd 0:0:0:0: [sda] Attached SCSI disk
[  228.177756] sd 0:0:0:0: Attached scsi generic sg0 type 0
ou pode utilizar o fdisk com a opção -l que vai mostrar algo
$ sudo fdisk -l
Disk /dev/sda: 1,8 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: 001-1CH164      
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x04db6408

Device     Boot Start        End    Sectors  Size Id Type
/dev/sda1        2048 3907026943 3907024896  1,8T  7 HPFS/NTFS/exFAT

Configurando autofs

Por padrão, autofs monta dispositivos em /var/autofs/. 
Precisamos configurá-lo para montar os dispositivos.

1- começamos editando o arquivo /etc/auto.master e acrescentado a linha abaixo no final do arquivo. A linha inserida contem diversos campos separados por espaços. O primeiro campo é o caminho sob o qual autofs monta os dispositivos. O segundo campo indica o arquivo de configuração para esta entrada. O último campo lista as opções para este diretório. timeout indica o tempo limite mínimo até que os itens sejam desmontados.

 /mnt   /etc/auto.removable --timeout=2,sync,nodev,nosuid
2- Agora acrescentamos no arquivo de reconfiguração o disco rígido. O nome do arquivo de configuração é /etc/auto.removable neste nosso exemplo. Ele é definido no passo (1) mostrado anteriormente. Este arquivo pode ter diversas linhas. Uma para cada partição que você quiser montar. Como no nosso caso só temos uma partição, o arquivo terá somente uma linha (como mostrado abaixo). A linha é composta por diversos campos. O primeiro campo indica o ponto de montagem (local no seu filesystem onde ficará o acesso para a partição), o segundo campo tem opções (use man 5 autofs para mais detalhes) e o terceiro campo é o dispositivo a ser montado (que a gente descobriu com o fdisk).
SSD            -fstype=ntfs-3g            :/dev/sda1

4- Reinicie o autofs e a partição deve ser montada se não houve qualquer erro nos passos acima.

 sudo service autofs restart



domingo, 20 de outubro de 2019

Backup de um diretório para outro servidor utilizando SSH

Se você tem dois computadores linux é possível fazer o backup de um computador no outro utilizando um aplicativo gratuito e que é facilmente instalado.
Vou mostrar neste post como fazer isto no Ubuntu (outras distribuições o funcionamento é parecido, mas a instalação é muitas vezes diferente).
O rsync permite transferir e sincronizar dados entre computadores linux (existe uma instalação do rsync para o Windows, mas não é muito comum vê-la). O comando pode ser usado com o protocolo SSH, que criptografa a conexão e assim evita que alguém possa ler seus dados. Note que o acesso é via TCP-IP, isto significa que os computadores podem estar em dois lugares bem diferentes no mundo.
O rsync também fornece uma grande quantidade de opções que podem ser usadas, como modo de arquivamento, modo de backup, compactação de dados durante a transferência etc.
Vou mostrar aqui um exemplo simples que é normalmente o que eu utilizo.
Neste exemplo considero que o backup será feito a partir do meu computador chamado mycomp para outro computador que chamo myserver.

Instalação do rsync

A instalação no Ubuntu/Debian é feita com um comando simples mostrado abaixo. Neste nosso exemplo ele irá rodar no mycomp.

h3dema@mycomp $ sudo apt-get install rsync

Instalação do cliente SSH

Para utilizar a conexão via SSH, você irá precisar ter o cliente SSH instalado no computador que irá rodar o comando rsync. Neste nosso exemplo é o computador mycomp. Em muitas versões este cliente já está instalado, mas se não estiver use o comando abaixo para instalar

h3dema@mycomp $ apt-get install openssh-client

Vamos testar se o cliente está funcionando. Para isto utilizamos o comando abaixo. Veja que meu usuário é h3dema e meu servidor é myserver. Você deve trocar estes dois valores para o seu usuário e computador. Note que o nome do servidor pode ser o nome completo na rede, tipo myserver.mydomain.com.br.

h3dema@mycomp $ ssh h3dema@myserver


Instalação do servidor SSH

Você precisa que o computador myserver tenha o servidor SSH instalado e ativo. A instalação é bem simples também bastando um comando.

h3dema@myserver $ apt-get install openssh-server
h3dema@myserver $ service sshd start

Fazendo o backup

O commando que eu utilizo para fazer o backup é mostrado abaixo.
O parâmetro “-a” é de archive, ele irá copiar recursivamente, copia links como links e muito mais.
O parâmetro “-v” é de verbose, que força o rsync a mostrar o que ele esta fazendo. Eu gosto de habilitá-lo porque assim consigo acompanhar o que esta sendo backupeado.
O parâmetro “—delete-excluded” ira apagar no destino os arquivos que foram removidos na origem.
“-e ssh” indica para o rsync que ele deve utilizar o cliente SSH.
 O comando irá copiar o diretório “mydir” na origem (e todos os subdiretórios e arquivos) para o computador myserver, utilizando o usuário h3dema e vai colocar estes dados da origem no diretório “mynewdir” no destino.

h3dema@mycomp $ rsync -av --delete-excluded -e ssh ./mydir h3dema@myserver:mynewdir

Dependendo de como for sua configuração do SSH o comando acima irá utilizar um certificado local para fazer o login no computador remoto, ou irá apresentar uma linha de login onde você deverá digitar a senha do usuário h3dema.

quinta-feira, 20 de junho de 2019

Erro de protocolo no TMUX

Se você utiliza TMUX para poder acessar (e criar) diversos ambientes de terminal no seu linux, você pode ter um problema. Se algumas sessões estiverem rodando no seu computador, enquanto o tmux é atualizado, você pode receber uma mensagem de erro ao tentar reconectar.

Por exemplo, o comando abaixo deveria mostrar todas as sessões ativas, mas retorna uma mensagem de erro. Mesmo se você já souber a número da sessão, tentar conectar diretamente com ela vai gerar o mesmo erro.


 # tmux list-sessions
protocol version mismatch (client 8, server 7)

# tmux attach-session -t 0
protocol version mismatch (client 8, server 7)



Isso basicamente diz a você, que você já tem um servidor tmux (antigo) rodando e o novo tmux não pode se conectar a ele porque eles não se entendem mais. Uma opção é sair de todas as suas sessões tmux existentes e começar uma nova usando a nova versão e tudo ficará bem. Contudo e se você não puder (ou quiser) matar a sua sessão?

Um hack bacana é mostrado a seguir. Você precisa identificar qual o ID da sua sessão. Use o comando pgrep mostrado abaixo. Ele irá fornecer o ID, que o meu caso é 32726.
# pgrep tmux
32726

Agora você deve rodar um comando que é criado dentro de /proc/. Vamos listar o diretório /proc/32726 para ver o que tem lá. Basta dar um ls: 

# ls /proc/32726/
attr             cpuset   limits      net            projid_map  stat
autogroup        cwd      loginuid    ns             root        statm
auxv             environ  map_files   numa_maps      sched       status
cgroup           exe      maps        oom_adj        schedstat   syscall
clear_refs       fd       mem         oom_score      sessionid   task
cmdline          fdinfo   mountinfo   oom_score_adj  setgroups   timers
comm             gid_map  mounts      pagemap        smaps       uid_map
coredump_filter  io       mountstats  personality    stack       wchan
root@arpia:/home/h3dema#


Veja que tem um comando exe neste diretório. É ele que precisamos. Basta dar o comando abaixo e você será conectado de novo na sua sessão, com a versão antiga.

 /proc/32726/exe attach

Agora você pode terminar a sua sessão normalmente.

sexta-feira, 14 de junho de 2019

GPG error: http://extras.ubuntu.com

Ao dar manutenção em um computador com Ubuntu 14 LTS me deparei com um erro durante a atualização. Ao tentar executar o comando abaixo para obter as atualizações

$ sudo apt-get -y update


Obtive a seguinte mensagem de erro.

....
Lendo listas de pacotes... Pronto
W: Erro GPG: http://extras.ubuntu.com trusty Release: As assinaturas a seguir não puderam ser verificadas devido à chave pública não estar disponível: NO_PUBKEY 16126D3A3E5C1192

E com isto o Ubuntu não atualiza mais.
O problema é que a chave não está mais disponível e portanto precisa ser reinstalada.
Depois de alguma busca na Internet, achei a solução para o problema que compartilho aqui.
São dois comandos que precisam ser dados como superusuário para atualizar a chave, a saída e os comandos são mostrados abaixo:

$ gpg --keyserver keyserver.ubuntu.com --recv 3E5C1192
gpg: requisitando chave 3E5C1192 de servidor hkp - keyserver.ubuntu.com
gpg: chave 3E5C1192: chave pública "Ubuntu Extras Archive Automatic Signing Key <ftpmaster@ubuntu.com>" importada
gpg: ultimamente não encontradas chaves confiáveis
gpg: Número total processado: 1
gpg:               importados: 1
$ gpg --export --armor  3E5C1192 | sudo apt-key add -
OK

Agora o comando de atualização pode ser chamado novamente e ele funciona corretamente.

$ sudo apt-get -y update

domingo, 5 de maio de 2019

Como encolher uma máquina virtual do VirtualBox e liberar espaço em disco

Por padrão, o VirtualBox cria discos dinâmicos (.vdi) que crescem com o tempo à medida que você adiciona dados. Contudo, se você excluir dados da máquina virtual posteriormente, você verá que  que o disco não diminui automaticamente.

Você pode reduzir manualmente um disco dinâmico usando  um conjunto de comandos.

Primeiro passo - remover arquivos desnecessários

Você deve apagar todos os dados que você não deseja mais no disco dentro da máquina virtual para liberar espaço antes de continuar. Exclua os arquivos que você não precisa, desinstale os programas que não são mais usados e esvazie sua lixeira.

Segundo passo - zerar os blocos não usados

Então, você precisará substituir esse espaço vazio por zeros.
Você precisará instalar o utilitário zerofree. Ele está disponível nos repositórios de software de muitas distribuições Linux - com o Ubuntu.
No Ubuntu para instalar este programa basta executar o seguinte comando no terminal dentro de sua máquina virtual:
$ sudo apt-get install zerofree

Você não pode usar o zerofree na sua partição raiz (/) no ambiente Linux padrão.
Para liberar espaço nesta partição, você precisará inicializar em um modo de recuperação no qual a partição raiz normal não está montada. Assim você precisará parar o funcionamento da máquina virtual para isto.

Para entrar neste modo de recuparação, reinicie sua máquina virtual e pressione repetidamente a tecla "Esc" enquanto estiver inicializando para acessar o menu do GRUB. Quando o menu GRUB aparecer, selecione “* Opções avançadas para o Ubuntu” e pressione Enter.
Selecione a opção (modo de recuperação) associada ao kernel mais recente do Linux - ou seja, a opção que tenha o maior número de versão próximo ao topo da lista. Pressione Enter para selecioná-la. Selecione no menu que aparece a opção de obter o shell do linux.



Se sua máquina virtual foi criada com as configurações padrão do VirtualBox com Ubuntu, ela terá apenas uma partição denominada /dev/sda1 que é a partição raiz.
Você precisará adaptar o próximo comando se você configurou de maneira diferente seu Linux, por exemplo, com vários discos ou várias partições. Se tiver várias partições ou discos, você deverá usar o zerofree para cada um deles
O comando abaixo zera os blocos não usados de /dev/sda1 (note que ele não apaga arquivos):

$ zerofree -v /dev/sda1

Terceiro passo - liberar o espaço

Desligue a máquina virtual e entre no shell de sua máquina física.
Primeiro localize o disco que você quer reduzir usando o comando

$ VBoxManage list hdds


Agora você deve dar o comando para reduzir o tamanho do disco:
$ VBoxManage.exe modifymedium disk /VMS/VM/WINET/Simulação/Simulação.vdi --compact


Instalar o OMNET++ no Ubuntu

Você deve ler o guia de instalação do omnet no link https://doc.omnetpp.org/omnetpp/InstallGuide.pdf.
Contudo, no meu Ubuntu 18. Alguns passos estão faltando.

Vamos começar abrindo um Terminal (CRTL + ALT + T) no Ubuntu para que vocẽ entre com os comandos de instalação.

Pre-requisitos

A primeira parte da instalação consiste em instalar pacotes de pré-requisitos
Você pode executar a instalação usando a interface gráfica do usuário ou a partir do terminal, o que você preferir. Vou exemplificar com os comandos no terminal.

$ sudo apt-get install build-essential gcc g++ bison flex perl \
       python python3 qt5-default libqt5opengl5-dev tcl-dev tk-dev \
      libxml2-dev zlib1g-dev default-jre doxygen graphviz libwebkitgtk-1.0

$ sudo apt-get install openmpi-bin libopenmpi-dev

$ sudo apt-get install libwebkitgtk-3.0-0 libopenscenegraph-dev  openscenegraph-plugin-osgearth  libosgearth-dev

$ sudo apt-get install libpcap-dev

$ sudo apt-get install osgearth osgearth-data

$ sudo apt-get install gnome-color-chooser

Instalando o OMNET

Faça o download do OMNeT ++ a partir do site http://omnetpp.org.
Certifique-se de selecionar o download do omnetpp-5.4.1-src.tgz. (Este post foi testado com a versão 5.4.1) Copie o arquivo para o diretório em que você deseja instalá-lo.
No meu caso preferi colocar no $HOME (que é o home do meu usuário).

No terminal e extraimos o arquivo usando o seguinte comando:
$ tar xvfz omnetpp-5.4.1-src.tgz

Isso cria um subdiretório omnetpp-5.4.1 com os arquivos OMNeT ++ nele.
O OMNeT ++ precisa que seu diretório bin esteja no PATH.
Para adicionar bin ao PATH temporariamente (apenas no shell atual), mude para o diretório OMNeT ++ e dê o comando:
$ cd omnetpp-5.4.1
$ . setenv

O script também adiciona o subdiretório lib a LD_LIBRARY_PATH, que pode ser necessário em sistemas que não suportam o mecanismo de rpath.

Para definir as variáveis de ambiente permanentemente, edite .bashrc no seu diretório pessoal.
Use seu editor de texto favorito para editar .bashrc, por exemplo gedit:
$ gedit ~ / .bashrc

Adicione as seguintes linhas no final do arquivo e salve o arquivo. Na minha instalação a segunda linha é desnecessária e pode ser omitda.
$ export PATH=$HOME/omnetpp-5.4.1/bin:$PATH
$ export LD_LIBRARY_PATH=$HOME/omnetpp-5.4.1/lib:$LD_LIBRARY_PATH

Você precisa fechar e reabrir o terminal para que as alterações entrem em vigor.

Com isto seu OMNET deve estar funcionando no Ubuntu.

Criar um arquivo de swap no linux

Recentemente encontrei um servidor cujo administrador tinha criado com uma área de swap muito pequena para a memória RAM disponível.

$ swapon --show
NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition   4G   4G   -1

Note que o swap mostrado acima é uma partição, e para alterá-la será necessário utilizar uma ferramenta de edição de partições, que terá que diminuir alguma partição existente para dar espaço para a nova área de swap. 
Como não dava para parar o servidor no momento e eu precisava de mais swap, a solução foi criar um arquivo de swap.

Vamos ver os passos necessários a seguir. Todos os comandos abaixo são dados como root.

1- Precisamos criar o arquivo que irá conter o swap. No meu caso irei criar um swap de 16GB no arquivo /swapfile:
$ fallocate -l 16G /swapfile


2- Vamos preenche-lo de branco. Usamos o dd. Como o tamanho do bloco é de 1024 bytes, precisamos de 12582912 blocos (informados em count) para preencher.
$ dd if=/dev/zero of=/swapfile bs=1024 count=12582912

3- Trocar a permissão (se você esquecer este passo, ao executar o comando do 4º passo, ele irá lembrá-lo disto):
$ chmod 600 /swapfile

4- Definimos agora o arquivo como uma área de swap
$ mkswap /swapfile

5- Ativamos o novo swap
$ swapon /swapfile


6- Para garantir que ele suba em um reboot, precisamos acrescentar a seguinte linha ao arquivo /etc/fstab:
/swapfile swap swap defaults 0 0


7- Verificamos se está tudo ok:
$ swapon --show
NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition   4G   4G   -1
/swapfile file       16G   0B   -2

Pronto, o seu linux está com um swap adicional de 16GB.

Transforme seu Raspberry Pi em um Servidor de Desenvolvimento Completo (Debian 13 Trixie, ARM64)

  O Raspberry Pi evoluiu muito desde seus primeiros dias como uma placa para experimentos. Hoje, com o Debian 13 (Trixie) rodando em ARM64, ...