Você está na página 1de 103

Criando um Arch Linux de bolso a partir de

qualquer distribuição

INTRODUÇÃO

O Arch Linux é uma distribuição rolling release que encanta pelo seu vasto
repositório, mas que põe medo em muitos, por sua fama de "distro para usuários
avançados".

Que o Arch é uma distro muito versátil todos nós já sabemos, e por conta disso
podemos adaptar o sistema para os mais diversos cenários, inclusive para ser
um sistema de bolso, num pendrive.

A não muito tempo atrás ajudei um amigo a criar um pendrive com o Arch Linux
instalado, e procurando na internet, não achei muito conteúdo sobre essa
operação, muito menos sobre fazer direto de um terminal do Arch. Sendo assim,
venho trazer no VOL um método de realizar esse processo, sem muita
complicação.

ESCLARECIMENTOS

O artigo foi escrito para pendrives iniciarem em dispositivos UEFI. Mas o que vai
diferenciar a instalação para BIOS e UEFI é justamente a criação da partição
EFI, e também a instalação do Grub para um ou outro. Sendo assim, sinta-se
livre para adaptar à sua necessidade. Está contido o processo para instalação do
Grub Bios na documentação do Arch.

É importante salientar que para instalar o Arch Linux e tudo que é necessário,
recomendo um pendrive de no mínimo 16GB, porém um de 8GB já consegue
suportar algumas poucas coisas e pode ser o suficiente para alguns, é relativo
ao uso que você vai destinar ao aparato.

Os procedimentos aqui descritos foram testados no Arch, Manjaro, Endeavour


OS, Ubuntu, Debian e Fedora. As fontes de pesquisa estão contidas no final do
artigo.

Dito isso, vamos começar.


PREPARANDO O PENDRIVE

Primeiro devemos criar as partições no nosso pendrive, sendo elas: uma para
efi, uma para swap e a partição raiz, onde vai ficar o sistema e nossos arquivos.

Utilize o gparted ou o cfdisk para criar as três partições. A partição efi deve ter no
mínimo 260MB, e recomendo colocar 2GB para a partição de swap, porém, se
tiver apenas um pendrive de 8GB disponível, coloque 1GB para swap. A partição
efi deve ser criada em FAT ou FAT32, e as outras duas em ext4.

Estando o meu pendrive em /dev/sdb e as partições dele sendo sdb1 (FAT ou


FAT32 - efi), sdb2 (ext4 - swap) e sdb3 (ext4 - raiz), devemos realizar o seguinte
processo:

Observações:
■ o nome do pendrive e o nome das partições pode variar pra você, então

use a nomenclatura do seu dispositivo

■ para saber o nome das partições do seu pendrive, rode o seguinte

comando como superusuário:

# fdisk -l

1. Formate a partição efi:

# mkfs.vfat /dev/sdb1 -I

2. Formate a partição de swap:

# mkswap /dev/sdb2

3. Ative a partição de swap:

# swapon /dev/sdb2

Para verificar se o swap está funcionando, utilize:


# swapon -s

4. Formate a partição raiz:

# mkfs.ext4 /dev/sdb3

5. Use o seguinte comando para verificar as partições, se quiser:

# lsblk /dev/sdb

Pronto! Seu pendrive já está ajustado para receber o Arch.

INSTALAÇÃO A PARTIR DE OUTROS SISTEMAS LINUX

Algumas distros, como o Fedora e o Gentoo, têm o gerenciador de pacotes


pacman e o utilitário arch-install-scripts em seu repositório. Nessas distros, o
processo de instalação ocorre da mesma forma do Arch Linux e distros
baseadas no mesmo. Todavia, em distros como o Ubuntu, que não tem o
pacman em sua coleção, o processo é um pouco mais trabalhoso.

Além de prepararmos o pendrive, devemos preparar um ambiente Arch Linux,


para que possamos trabalhar de dentro dele.

Primeiro, é necessário baixar a imagem bootstrap do Arch Linux. Para isso, entre
num dos espelhos do site do Arch, ou acesse diretamente o link:
■ http://br.mirror.archlinux-br.org/iso/latest/

Baixe a imagem bootstrap em tar.gz.

1. Extraia no diretório /tmp:

# tar -xf archlinux-bootstrap-*-x86_64.tar.gz -C /tmp/

Essa extração vai criar a pasta root.x86_64.

2. Descomente o espelho da sua preferência no arquivo mirrorlist:


# nano /tmp/root.x86_64/etc/pacman.d/mirrorlist

3. Para criar o ambiente chroot, rode os seguintes comandos:

# cd /tmp/root.x86_64
# cp /etc/resolv.conf etc/
# mount -t proc /proc proc/
# mount --rbind /sys sys/
# mount --rbind /dev dev/
# mount --rbind /run run/

4. Finalmente, para entrar no ambiente chroot:

# chroot /tmp/root.x86_64 /bin/bash

5. Iniciar o chaveiro do Pacman:

# pacman-key --init
# pacman-key --populate archlinux

Para sair do chroot, utilize exit ou ctrl+d.

A partir do ambiente Arch que acabamos de criar, você pode utilizar o mesmo
procedimento para Arch Linux e distros Arch-based.

CRIANDO UM ARCH LINUX DE BOLSO A PARTIR DO ARCH E DISTROS

ARCH-BASED

Para instalar a partir de sistemas Arch ou Arch-based, é necessário o pacote


arch-install-scripts, que vai nos fornecer comandos como pacstrap e arch-chroot.

1. Monte a partição raiz do pendrive em /mnt:

# mount /dev/sdb3 /mnt

2. Instale o sistema base e alguns outros componentes na partição raiz:

# pacstrap /mnt base base-devel linux linux-firmware


3. Gerar arquivo fstab (File System Table). Utilizaremos o parâmetro -U para criar
uma UUID exclusiva para cada partição.

# genfstab -U -p /mnt/ >> /mnt/etc/fstab

Caso você queira conferir ou editar o fstab:

# nano /mnt/etc/fstab

4. Para entrarmos dentro do nosso pendrive:

# arch-chroot /mnt

5. Recomendo habilitar o repositório multilib, para que aplicações de 32 bits


rodem no seu sistema. Para isso, edite o arquivo pacman.conf:

# nano /etc/pacman.conf

Descomente essas linhas:

include = /etc/pacman.d/mirrorlist

Agora sincronize os repositórios:

# pacman -Sy

Caso o nano não esteja instalado:

# pacman -Sy nano

6. Configurar a localização (descomente essa linha: pt_BR.UTF-8 UTF-8):

# nano /etc/locale.gen

Ler o locale.gen e gerar nossa localização:

# locale-gen

Criar arquivo de configuração de língua:

# echo LANG=pt_BR.UTF-8 > /etc/locale.conf


# export LANG=pt.BR.UTF-8
7. Para configurar o teclado, edite o arquivo vconsole.conf:

# nano /etc/vconsole.conf

Adicione essa linha no arquivo:

KEYMAP=br-abnt2

8. Configurar o fuso-horário:

# ls /usr/share/zoneinfo/America

Identifique o seu estado ou um estado que corresponda ao seu fuso-horário, no


meu caso é Belém, adapte o comando para sua necessidade:

# ln -sf /usr/share/zoneinfo/America/Belem /etc/localtime

Sincronizar o relógio do hardware com o do sistema:

# hwclock --systohc --utc

9. Dê um nome para sua máquina:

# echo archlinux > /etc/hostname

Adicione a linha equivalente:

127.0.1.1 archlinux.localdomain archlinux

10. Instale o microcódigo:

Se você tiver processador Intel:

# pacman -S intel-ucode

No caso de processadores da AMD, o pacote linux-firmware já cobre.

11. Crie uma imagem init ram disk:

# mkinitcpio -p linux
12. Baixe e instale o GRUB. Para baixar:

# pacman -S grub

Monte a partição efi em /boot/efi:

# mkdir /boot/efi
# mount /dev/sdb1 /boot/efi

Instale o GRUB:

# grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable --recheck


# grub-mkconfig -o /boot/grub/grub.cfg

13. Definir senha de root:

# passwd

14. Crie um usuário e defina a senha:

# useradd -m -g users -G wheel,storage,power -s /bin/bash pedro


# passwd pedro

15. Editar o arquivo sudoers:

# nano /etc/sudoers

Encontre essas linhas:

## Uncomment to allow members of group wheel to execute any command


# %wheel ALL=(ALL) ALL

Descomente a linha: %wheel ALL=(ALL) ALL

16. Instale componentes de Wifi e gerenciamento de rede, se quiser:

# pacman -S wpa_supplicant networkmanager net-tools dhcpcd


# systemctl enable NetworkManager

Pronto! Nossa instalação está finalizada :)

Desmonte a partição em /boot/efi:


# umount /boot/efi

Saia do chroot utilizando ctrl+d ou exit.

Desmonte a partição raiz do pendrive:

# umount /mnt

Quando você iniciar o sistema contido no pendrive, pode ativar a conexão com a
internet rodando o comando dhcpcd (ethernet) ou nmtui (wireless).

FONTES

■ Instale o Arch Linux a partir do Linux existente - ArchWiki

■ Installation guide - ArchWiki

■ Install Arch Linux on a removable medium (Português) - ArchWiki

■ GRUB (Português) - ArchWiki

■ GitHub - tokland/arch-bootstrap: Bootstrap a base Arch Linux system


Trilha Filesystems Linux - Operação de Sistemas de Arquivos

Gostaria de compartilhar com vocês um assunto bem importante para administração de


sistemas Linux, que são os filesystems. Vou dividir o assunto em 3 partes, acredito que seja
melhor para o entendimento e os testes, assim poderemos avançar seguramente. Nesse
artigo, destaco o arquivo /etc/fstab, alguns comandos e também uma forma de montar
partições usando o systemd. Pegue seu café e venha curtir essa leitura!

/ETC/FSTAB E MOUNT

Um arquivo e um comando que sempre andam juntos no Linux /etc/fstab e


mount.

1. /etc/fstab:

O que precisamos entender nesse arquivo:


■ O filesystem (UUID, dispositivo /dev/sdb1 ou LABEL);

■ O ponto de montagem (/opt/teste /);

■ O tipo do filesystem (ext4, xfs, auto) - auto identifica automaticamente o

tipo do filesystem;

■ As opções, aqui podemos usar o defaults (ele agrupa alguns tipos de

opções);

■ O dump (usado para backup, ele faz um dump da partição, normalmente

se usa 0);

■ O pass (se vai rodar um fsck toda vez que inicia o sistema, o / sempre

com 1, as demais usam o 2).


2. mount (lê as informações do /etc/fstab e faz a montagem das partições):

Algumas opções de uso do comando mount:

mount -a

Monta tudo que esta dentro do /etc/fstab - com a opção (auto) setada.

df -Th

Mostra as partições do sistema e se estão montadas:


Sist. Arq. Tipo Blocos de 1K Usado
Disponível Uso% Montado em
udev devtmpfs 498448 0
498448 0% /dev
tmpfs tmpfs 102036 1784
100252 2% /run
/dev/sda1 ext4 19862136 3748892
15081260 20% /
tmpfs tmpfs 510160 0
510160 0% /dev/shm
tmpfs tmpfs 5120 0
5120 0% /run/lock
tmpfs tmpfs 510160 0
510160 0% /sys/fs/cgroup
tmpfs tmpfs 102032 0
102032 0% /run/user/1000
/dev/sdb1 ext4 5095040 20472
4796040 1% /opt/montagem

Pode ver que o /dev/sdb1 está montado em /opt/montagem.

Algumas opções usadas no comando mount:


■ asysnc (joga em cache, buffer os dados e depois que isso é gravado no

disco, performance do sistema);


■ auto (significa que a partição será montada no boot do sistema e quando

usado mount -a);

■ noauto (é o contrário do auto);

■ defaults (contem um grupo de opções, que são: rw, suid, dev, exec,

auto, nouser, async);

■ dev (blocos especiais que serão interpretados);

■ nodev (ao contrário);

■ exec (permite executável);

■ noexec (ao contrário);

■ group (permite que um usuário comum faça a montagem da partição se

o dono pertencer a esse grupo);

■ user (permite que qualquer usuário possa manter o filesystem, mas só

quem montou pode desmontar);

■ nouser (qualquer usuário pode montar a partição e qualquer usuário

pode desmontar a partição).

3. mount mais detalhado:

Veja abaixo alguns exemplos de uso do comando mount:

O comando que monta as partições estando ou não montadas:

mount (rodando apenas esse comando ele mostra apenas as partições que
estão montadas)

mount | grep sd
/dev/sda1 on / type ext4
(rw,relatime,errors=remount-ro,data=ordered)
/dev/sdb1 on /opt/montagem type ext4
(rw,relatime,data=ordered)

cat /proc/mounts (seria outro comando que mostra a mesma coisa)


cat /etc/mtab (seria outra forma, também de visualizar as partições que estão
montadas)

Mostra o que está montado nesse momento:

mount -h (algumas opções do comando mount)

Monta um sistema de arquivos. Opções:


■ -a, --all :: monta todos os sistemas de arquivos mencionados no fstab;

■ -c, --no-canonicalize :: não canoniza caminhos;

■ -f, --fake :: teste; ignora a chamada de sistema do mount(2);

■ -F, --fork :: faz fork de cada dispositivo (usa com -a);

■ -T, --fstab <caminho> :: arquivo alternativo ao /etc/fstab;

■ -i, --internal-only :: não chama os ajudantes de mount.<tipo>;

■ -l, --show-labels :: mostra também os rótulos dos sistemas de arquivos;

■ -n, --no-mtab :: não escreve para no /etc/mtab;

■ -o, --options <lista> :: lista separada por vírgula de opções de

montagem;

■ -O, --test-opts <lista> :: limita o conjunto de sistemas de arquivos (usa

com -a).

mount -t ext4 (mostra apenas as partições do tipo ext4)


/dev/sda1 on / type ext4
(rw,relatime,errors=remount-ro,data=ordered)
/dev/sdb1 on /opt/montagem type ext4
(rw,relatime,data=ordered)

Se a partição estiver setada no /etc/fstab:

mount /dev/sdb1 ou $ mount /opt/montagem

Se a partição não estiver no /etc/fstab:


mount /dev/sdb1 /opt/teste (primeiro o dispositivo e depois o ponto de
montagem)
umount /dev/sdb1 (para desmontar essa partição)
mount -t ext4 /dev/sdb1 /opt/teste (monta usando o tipo ext4)
mount -o ro,user,auto,exec /dev/sdb1 /opt/teste

UUID, DISPOSITIVOS E LABEL DE PARTIÇÃO

E como eu posso encontrar mais informações como UUID, dispositivos, LABEL


de uma partição?

Faça:

# blkid (mostra o UUID de todas as partições)

blkid
/dev/sda1: UUID="4d8a74e7-adfe-440e-8f10-050e48099a93"
TYPE="ext4" PARTUUID="c0b6c47f-01"
/dev/sda5: UUID="9261dd6f-5839-4d26-8f56-6fe73575dbb6"
TYPE="swap" PARTUUID="c0b6c47f-05"
/dev/sdb1: UUID="0849ccae-5119-4542-994b-f51a81c06af5"
TYPE="ext4" PARTUUID="5bf7c908-01"

mount -U 0849ccae-5119-4542-994b-f51a81c06af5 /opt/teste (montagem


usando o UUID)
ou:
mount UUID=0849ccae-5119-4542-994b-f51a81c06af5 /opt/teste

Para montar com LABEL:

mount LABEL=partiçãox /opt/teste

# lsblk (mostra informações sobre os dispositivos/partição)


NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20,4G 0 disk
├─sda1 8:1 0 19,4G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 1023M 0 part [SWAP]
sdb 8:16 0 20,5G 0 disk
└─sdb1 8:17 0 5G 0 part /opt/montagem
sr0 11:0 1 1024M 0 rom

lsblk -f (mostra o UUID)


NAME FSTYPE LABEL UUID
MOUNTPOINT
sda
├─sda1 xfs
c65b472f-08c5-4ea5-a913-1735eaf817c3 /boot
└─sda2 LVM2_member
iKi6g2-As53-dcoX-cp1a-RD8q-GWUN-XpMQ65
├─centos-root xfs
227ab08e-6fe4-43b7-bdc7-ae34cdb2c7b4 /
└─centos-swap swap
ca56a6b0-c654-4f0f-b5e3-0c27b3190403 [SWAP]
sdb
├─sdb1 LVM2_member
rApJfu-38zu-CXro-1FKz-nk22-SF31-HHi4zw
└─sdb2 LVM2_member
Q2fDSU-FWcn-gXhI-DudD-M9sG-XsMH-LTP9RY
sdc
├─sdc1 LVM2_member
db2i8b-46gF-9whc-HAxB-9n9j-Z1ny-zClZx6
└─sdc2
sr0

# e2label /dev/sda2 (mostra o LABEL dessa partição)


# findfs UUID=4d8a74e7-adfe-440e-8f10-050e48099a93 (mostra o filesystem
desse UUID)
/dev/sda1

findfs LABEL=partiçãon (trás o filesystem dessa LABEL)

findmnt (mostra as partições e pontos de montagem)


TARGET SOURCE
FSTYPE OPTIONS
/ /dev/sda1
ext4
rw,relatime,errors=remount-ro,data=ordered
├─/sys sysfs
sysfs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/kernel/security securityfs
securityfs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/fs/cgroup tmpfs
tmpfs ro,nosuid,nodev,noexec,mode=755
│ │ ├─/sys/fs/cgroup/systemd cgroup
cgroup
rw,nosuid,nodev,noexec,relatime,xattr,release_agen
t=/lib/systemd/systemd-cgroups
│ │ ├─/sys/fs/cgroup/memory cgroup
cgroup rw,nosuid,nodev,noexec,relatime,memory
│ │ ├─/sys/fs/cgroup/net_cls,net_prio cgroup
cgroup
rw,nosuid,nodev,noexec,relatime,net_cls,net_prio
│ │ ├─/sys/fs/cgroup/freezer cgroup
cgroup
rw,nosuid,nodev,noexec,relatime,freezer
│ │ ├─/sys/fs/cgroup/cpu,cpuacct cgroup
cgroup
rw,nosuid,nodev,noexec,relatime,cpu,cpuacct
│ │ ├─/sys/fs/cgroup/cpuset cgroup
cgroup rw,nosuid,nodev,noexec,relatime,cpuset
│ │ ├─/sys/fs/cgroup/perf_event cgroup
cgroup
rw,nosuid,nodev,noexec,relatime,perf_event
│ │ ├─/sys/fs/cgroup/pids cgroup
cgroup rw,nosuid,nodev,noexec,relatime,pids
│ │ ├─/sys/fs/cgroup/devices cgroup
cgroup
rw,nosuid,nodev,noexec,relatime,devices
│ │ └─/sys/fs/cgroup/blkio cgroup
cgroup rw,nosuid,nodev,noexec,relatime,blkio
│ ├─/sys/fs/pstore pstore
pstore rw,nosuid,nodev,noexec,relatime
│ └─/sys/kernel/debug debugfs
debugfs rw,relatime

MONTANDO PARTIÇÕES COM O SYSTEMD

Vimos até o momento que as partições são montadas com base nas informações
do arquivo /etc/fstab. Mas existe uma outra forma de se fazer isso, usando o
systemd para gerenciar pontos de montagem.

Vamos até o diretório /etc/systemd/system:

cd /etc/systemd/system

Lembrando que vamos usar o ponto de montagem (/opt/montagem). É


necessário criar um arquivo chamado (vim opt-montagem.mount) - esse nome
precisa ser o caminho do diretório de montagem.

Nesse arquivo, escrevemos o seguinte:

[Unit]
Description=Ponto de Montagem Teste

[Mount]
What=/dev/sdb1
Where=/opt/montagem
Type=ext4
Options=defaults

[Install]
WantedBy=multi.user.target

Agora, vamos usar o comando systemctl para gerenciar isso:


systemctl status opt-montagem.mount
opt-montagem.mount - Ponto de Montagem Teste
Loaded: loaded
(/etc/systemd/system/opt-montagem.mount; disabled;
vendor preset: enabled)
Active: inactive (dead)
Where: /opt/montagem
What: /dev/sdb1

systemctl status opt-montagem.mount


opt-montagem.mount - Ponto de Montagem Teste
Loaded: loaded
(/etc/systemd/system/opt-montagem.mount; disabled;
vendor preset: enabled)
Active: active (mounted) since Sat 2020-08-01
22:09:12 -03; 2s ago
Where: /opt/montagem
What: /dev/sdb1
Process: 22565 ExecMount=/bin/mount /dev/sdb1
/opt/montagem -t ext4 -o defaults (code=exited,
status=0/SUCCESS)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/opt-montagem.mount

df -Th
Sist. Arq. Tipo Tam. Usado Disp. Uso%
Montado em
udev devtmpfs 487M 0 487M 0%
/dev
tmpfs tmpfs 100M 3,1M 97M 4%
/run
/dev/sda1 ext4 19G 4,6G 14G 26% /
tmpfs tmpfs 499M 0 499M 0%
/dev/shm
tmpfs tmpfs 5,0M 0 5,0M 0%
/run/lock
tmpfs tmpfs 499M 0 499M 0%
/sys/fs/cgroup
tmpfs tmpfs 100M 0 100M 0%
/run/user/1000
/dev/sdb1 ext4 4,9G 20M 4,6G 1%
/opt/montagem

Se eu executar um stop no serviço, ele desmonta a partição:

systemctl stop opt-montagem.mount #(ele executa o umount da partição)

Para que essa partição sempre seja montada no boot, basta:

systemctl enable opt-montagem.mount


Created symlink
/etc/systemd/system/multi.user.target.wants/opt-montagem.m
ount → /etc/systemd/system/opt-montagem.mount.

CONCLUSÃO

Obrigado pela leitura pessoal, fico à disposição para comentar sobre.

Agradeço imensamente ao professor de Linux Ricardo, por todo o ensinamento


até o momento e à comunidade Linux.
FIND - Encontrar informações no Linux

INTRODUÇÃO

Administradores de sistemas e usuários finais costumam precisar encontrar


informações, como arquivos e diretórios em suas máquinas ou servidores. Um
dos comandos mais utilizados no Linux para essa tarefa é o find, que pode ser
utilizado com diversas opções nas pesquisas realizadas.

Dentre as funcionalidades desse comando, podemos destacar: tamanho; data;


horário de modificação; permissões; usuários; dentre diversas outras. Outro
ponto interessante, é que esse comando está instalado por padrão na grande
maioria das distribuições Linux.

O layout mais comum desse comando é:

find <startingdirectory> <opções> <termo de busca>

Inicia-se com o comando find, depois o argumento <startingdirectory>, que é o


ponto de origem onde iremos iniciar a pesquisa. Quando o usuário desejar
buscar o sistema todo, irá utilizar a raiz do sistema, o / neste argumento.

O segundo argumento utilizado é o filtro para procurar os arquivos (informações).


Pode-se utilizar o nome de um arquivo, tipo, data de criação ou modificação,
dentre outras opções. Já o terceiro argumento é um acompanhamento do
segundo, onde especifica-se o termo de busca relevante.

Irei agora apresentar algumas opções de utilização esse comando.

Busca simples pelo nome de um arquivo:

find . -name arquivo.txt


./arquivo.txt

Neste exemplo, buscou-se na pasta atual (.), um arquivo como o nome


arquivo.txt (-name arquivo.txt). O retorno foi de 1 arquivo com esse nome.

Busca ignorando case sensitive:


find /home/ -iname arquivo.txt
./arquivo.txt
./Arquivo.txt

Agora, buscou-se no diretório /home qualquer arquivo com o nome arquivo.txt,


com letras maiúsculas ou minúsculas. Como retorno obteve-se 2 arquivos.

Busca com coringas:

find /home/ -name *rquivo*


./home/arquivo.txt
./home/Arquivo.txt
./home/Meus_Arquivo-NOVOS.txt
./home/arquivo.sh

Busca realizada no diretório /home, para qualquer arquivo que possua "rquivo".
Como retorno obteve-se 4 arquivos.

Busca por diretórios:

find / -type -d -name Fotos arquivo.txt


/home/user/Fotos

Na busca por diretórios, utilizou-se "-type -d", obtendo 1 resultado no retorno.

Buscar por um tipo de arquivo:

find / -type f -name "*.odt"


./cursos.odt
./artigos.odt

Utilizou-se a opção -name para buscar arquivos com a extensão odt.

Buscar arquivos com a permissão 777:

find . -type f -perm 0777 -print

Este tipo de busca é muito utilizada em servidores Linux, para verificar se os


usuários estão deixando arquivos com esse tipo de permissão, que é vulnerável,
neste tipo de máquina.
Buscar arquivos e diretórios vazios:

find ArquivosCompartilhados/ -empty


ArquivosCompartilhados /DirVazio
ArquivosCompartilhados /arquivoVazio.txt

Buscar pastas ocultas:

find /tmp -type d -name ".*"

Buscar arquivos maiores que 50MB no diretório atual:

find . -type f -size +50M

Buscar e remover um arquivo:

find . -type f -name arquivoVazio.txt -exec rm -f {} ;

Neste exemplo, busca-se o arquivoVazio.txt, e caso ele seja encontrado, será


removido do sistema.

Buscar por uma informações dentro do arquivo:

find ArquivosCompartilhados/ -name "*.*" -exec grep -Hin "drSolutions" {} ;


ArquivosCompartilhados/fornecedores.txt:1:drSolutions

Buscamos arquivos com o texto "drSolutions" dentro deles.

Buscar arquivos acessados nas últimas 24 horas:

find . -type f -atime -1 -exec ls -l {} ;

Buscar arquivos acessados nos últimos 5 minutos:

find . -type f -amin -5

Buscar arquivos criados nas últimas 12 horas:

find . -type f -ctime -0.5 -exec ls -l {} ;

Buscar arquivos executáveis:


find / -perm /a=x

Buscar arquivos disponíveis apenas para leitura:

find / -perm /u=r

Caso você queira conhecer melhor o comando find, utilize o manual da seguinte
forma:

man find

E você, como utiliza o comando find?


Saiba como compilar e instalar
programas Linux distribuídos
diretamente pelo código-fonte [tar.gz]

Hoje em dia, instalar programas no Linux se tornou a coisa mais simples de se


fazer no sistema. Dependendo da distribuição Linux, você tem recursos
complementares que facilitam ainda mais o processo.

Gerenciadores de pacotes e repositórios oficiais, mantidos pela comunidade


mantenedora da distribuição, enriquecem o processo de instalação dos programas.
Contudo, em muitos momentos você se depara com programas disponibilizados
diretamente pelo código-fonte. Assim, cabe ao usuário ter conhecimento prévio para
compilar e instalar programas Linux distribuídos diretamente pelo código-fonte,
normalmente compactados via tar.gz.

Contextualizando
As distribuições Linux, ao longo do tempo, vem melhorando e criando métodos para
facilitar a instalação de pacotes no Linux. Gerenciadores de pacotes, bem como: apt
e yum, são exemplos legados dessas mudanças. Atualmente, existem projetos
que visam a universalização do modo e distribuição de programas para os
sistemas Linux. Entre eles, destaco o Snap e Flatpak; Canonical e Red Hat como
mantenedoras, respectivamente.

Entretanto, vão aparecer situações onde você não terá nenhuma dessas opções
disponíveis… pois alguns desenvolvedores de softwares disponibilizam seus
programas diretamente pelo código-fonte (source) – que por sinal era, nos
primórdios, o único método utilizado para instalação de programas no Linux
(algumas distribuições ainda mantêm essa técnica com frequência).Em resumo,
você tem acesso a um arquivo compactado no formato .tar.gz (maioria das vezes),
contendo o código-fonte do programa, e a instalação consiste em compilar e
instalar os executáveis gerados na máquina.

Mas por quê ainda se preocupar com isso se existem pacotes pré-compilados
para instalação?!

SAIBA MAIS

Pacotes pré-compilados são pacotes já compilados e distribuídos num arquivo


pronto, com dependências já configuradas, em um formato simples de instalar (.deb
– Debian e .rpm – Red Hat, por exemplo).

Devido às diferenças que existem entre uma distribuição e outra um pacote do


Fedora não funcionará no Debian, por exemplo. Assim, essa técnica garante
suporte a todas as distribuições Linux, universalmente! Ou seja, baixando um
programa distribuído a partir do código-fonte (source), não será preciso se ater a
qual distro Linux você está usando; pois, verificada as dependências necessárias,
será possível compilar e instalar o programa.

Isso se deve ao fato de que essa maneira de distribuir os programas, diretamente


pelo código-fonte (source), não é feita por empacotamento pré-compilado (pacote
.deb ou .rpm, por exemplo). Assim, cabe ao usuário ter conhecimento prévio para
compilar e instalar programas Linux distribuídos diretamente pelo código-fonte,
normalmente compactados via tar.gz.

SAIBA MAIS

Compilar significa transformar o código-fonte, escrito pelo programador, nos


arquivos binários que são executados pelo sistema.

Por outro lado, um problema, em compilar e instalar programas a partir dos fontes, é
que o processo é demorado e, para muitos, nem sempre simples. É preciso ter
instalado uma grande quantidade de compiladores e bibliotecas, necessários para
compilar os mais diversos programas. E isso causa bastante dificuldade para os
usuários, principalmente iniciantes.

Em 4 passos…
Resumindo o processo de instalação de programas disponibilizados a partir do
código-fonte, informo que o mesmo se dá em 4 passos:

1- Descompactar o arquivo tar.gz que contém o código-fonte;

2- Resolver dependências necessárias para a instalação correta do programa –


cada programa possui suas próprias dependências, e isso torna processo demorado
e um pouco mais complicado. Cada programa tem sua peculiaridade;

3- Compilar;

4- Instalar;

DETALHES

Neste tutorial usei como exemplo o programa Pidgin IM e o sistema OpenSUSE


Tumbleweed

1- Baixar e descompactar o arquivo tar.gz

Primeiramente, faça o download do arquivo pidgin-2.11.0.tar.gz AQUI [ Versão


2.11.0 ]
O arquivo baixado é um tarball, geralmente é identificado através do uso de duas
extensões “.tar” e “.gz”, combinadas para formar “.tar.gz”. Uma extensão combinada
simples, .tar.bz também é popular. Esse formato usa o utilitário tar para criar um
único tarfile com todo o conteúdo do diretório – o código-fonte do programa, no
caso.

Para descompactar o conteúdo do arquivo arquivo pidgin-2.11.0.tar.gz, você deve


executar o comando:

tar -xzvf pidgin-2.11.0.tar.gz

Entre no diretório descompactado:

cd pidgin-2.11.0

O conteúdo do diretório contém o código-fonte da aplicação e o arquivo

😉
Makefile, entre outros arquivos. Essa estrutura garante um programa distribuído
a partir do código-fonte (source) Por isso, nem todo arquivo “tar.gz”
significará um programa distribuído dessa forma; poderá ser apenas um arquivo
compactado.

SAIBA MAIS

O Makefile é um arquivo para configuração de compilação utilizado pelo programa


make, cuja ideia é simplificar e agilizar a compilação de programas.

2- Resolver dependências

Esta etapa pode ser considerada a mais “complexa” do processo, pois caso as
dependências necessárias, da aplicação, não sejam atendidas o código-fonte não
poderá ser compilado e instalado, futuramente. E cada aplicação possui um leque
diferente de dependências.
No caso do programa Pidgin existem algumas dependências que precisam ser
resolvidas – ou seja pacotes que já precisam estar instalados no sistema, pois caso
contrário dará erro no processo!

Em distribuições derivadas do Debian, a principal dependência é pacote de


compiladores que contém todas as ferramentas básicas para compilação de um
programa. Muito conhecido, chamado de build-essential:

sudo apt-get install build-essential

Como usei o OpenSUSE, o pacote equivalente é o devel_basis:

sudo zypper install -t pattern devel_basis

Assim, depois de satisfazer as dependências do sistema, é preciso resolver as


pendências da aplicação. Para isso, você DEVE executar o comando:

./configure

Esse comando verifica todas dependências que o programa precisa, como se o


pacote de compiladores está instalado; por exemplo. O prefixo ./ diz ao sistema
Linux para procurar o arquivo de configuração no diretório atual e executá-lo.
Assim, você precisa estar dentro do diretório do programa (pidgin-2.11.0) para
poder executar esse comando:

[….] checking for strdup… yes

checking for strstr… yes

checking for atexit… yes….]


Se tudo correr bem, você não verá quaisquer erros:

] Build with Perl support……. : yes

Build with Tcl support…….. : yes

Build with Tk support……… : yes

Print debugging messages…… : no

Pidgin will be installed in /usr/local/bin.

configure complete, now type ‘make’

Caso apresente algum erro, basta examinar a saída do comando ./configure e


instalar/configurar todas as dependências ausentes usando seu gerenciador de

😉
pacotes. Execute ./configure quantos vezes for preciso até que você não veja
mais erros

No meu caso (com o openSUSE Tumbleweed instalado), tive alguns erros que
avisaram a ausência de alguns pacotes. Portanto, segue lista de todos os pacotes
que foi precisa instalar no meu ambiente de testes:
AVISO

Cada sistema vai apresentar resultados diferentes. Pois, poderão surgir


dependências que estarão resolvidas e outras não. Por isso, essa etapa requer mais
atenção do usuário Linux.

sudo zypper install intltool glib2-devel gtk2-devel libXss1 libXss.so.1 libXss-devel


libSM-devel meanwhile-devel libgnutls-devel tcl-devel tk-devel

3- Compilação

Depois de ter resolvido todas as dependências, você deve compilar o programa.


Use o comando make para fazer isso:

make

Este processo pode demorar alguns minutos, dependendo do programa.

😉
Certifique-se de que a saída não exibirá quaisquer erros antes de continuar para o
próximo passo

4- Instalação

Pronto… não tendo apresentado nenhum erro até agora, você precisa instalar o
programa. Basta executar sudo make install. Este passo move todos os binários
em seu local correto no seu sistema para que o programa fique pronto para usar:

sudo make install

Programa instalado!!
Mas, se você desejar remover o programa, que acabou de instalar, basta entrar no
diretório que você instalou o programa e executar os 2 comandos abaixo:

sudo make uninstall

sudo make clean

Por fim, informo que para instalar a maioria dos programas a partir do código-fonte
(source), você passará pelas mesmas situações do exemplo. Contudo, com
algumas diferenças das mostrados aqui. Por exemplo, você pode precisar usar
cmake em vez de make. Por isso, sempre leia o arquivo “README” contido no

😉
diretório de cada programa!! Além dele, normalmente, existe o arquivo “Install”
também
Compilação do Kernel

INTRODUÇÃO

Vamos começar com a boa e velha máxima:

Leia todo o artigo antes de sair executando comandos!

Será uma compilação entre básica e intermediária. O objetivo é o aprendizado


do Linux. A compilação foi voltada para o Debian e derivados, mas nada impede
que você tome por base e adapte ela para a tua distribuição. Talvez ocorram
alguns erros durante a compilação, mas faz parte. Eu procurei minimizar ao
máximo os erros que porventura aconteceram. Os erros foram acontecendo e eu
fui sanando. Caso aconteça algum erro para você, leia a mensagem de erro,
pesquise e procure solucioná-lo ou poste o erro nos comentários.

Vamos ver, inicialmente, a versão atual do kernel.

# uname -r

O kernel aqui é o 4.9.0-16-amd64. Caso queira mais informações:

# uname -a

No link https://www.kernel.org/ vemos que a versão mais atualizada é a 5.13.10.


Podemos baixá-la clicando no ícone amarelão ali ou podemos fazer na linha de
comando. Faremos na linha de comando porque é mais divertido.

Veremos também alguma coisa de otimização do kernel, mas nada muito


profundo. O Kernel que se encontra em kernel.org é genérico, se adapta a
qualquer distribuição Linux. Quando você baixa uma distribuição Linux
atualizada ela já vem com o kernel mais recente. Porém, muitas vezes, na
compilação podemos habilitar módulos e suportes específicos para cada
arquitetura de computador.

São muitas opções de configuração no Kernel Linux, portanto, antes de sair


configurando, estude e saiba o que está fazendo... ou saia mexendo feito louco e
bagunce toda tua máquina, pelo menos aprenderá alguma coisa. Então, o
presente artigo tem a finalidade útil de aprendizado.

Esta compilação é a mesma que eu faço já há uns 10 anos, somente atualizei


por causa das dependências, comandos etc. A vantagem de um kernel
atualizado e otimizado é óbvia: maior durabilidade do sistema, melhor
desempenho etc. Tenho esse Debian desde 2012, somente fui atualizando,
compilando kernel e atualizando programas. Isso vale para qualquer distribuição
Linux. Nesse anos compilei o kernel desse mesmo sistema somente três vezes.

INSTALAÇÃO

As instalações seguiram o básico:


■ Instalar o sistema;

■ Particionar manualmente;

■ Configurar o arquivo sources.list;

■ Atualizar o sistema.

Aqui não será abordada a instalação do sistema, somente a compilação do


kernel.

Preparando a compilação (no Debian e derivados):

# apt-get update
# aptitude safe-upgrade
# aptitude install vim vim-doc

O último comando não é necessário (o Vim é um editor de texto, pode usar o


editor da tua preferência).

Caso tua distribuição tenha o Yum, o RPM ou outro gerenciador de pacotes, a


estrutura básica da coisa é a mesma: atualize.

Instalando os pacotes necessários (a maioria dos pacotes abaixo, necessários


para a compilação, tem para a maioria das distribuições, alguns mudam de
nome, mas durante a instalação você verá a mensagem):
# apt-get install build-essential module-init-tools kernel-package
initramfs-tools libaal-dev wget liblzo2-dev gzip libncurses5 libncurses5-dev
dpatch udev binutils module-assistant
# apt-get install binutils module-assistant libelf-dev bin86 flex bison
# apt-get install linux-headers-`uname -r`
# cd /usr/src
(entrando no diretório próprio para isso)
# wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.13.10.tar.xz
(baixando)

Essa versão deu 113,82M.

Caso queira conferir se baixou, execute:

# ls
(para ver o conteúdo do diretório)

# tar -xv --xz -f linux-5.13.10.tar.xz


(descompactando)

# cd linux-5.13.10
(não utilizamos link simbólico)

# make mrproper
(limpa prováveis compilações anteriores e deleta o arquivo .config)

# make-kpkg clean
(limpa prováveis compilações anteriores, provavelmente aparecerá "sem regra
para processar o alvo...", esse aviso é normal, pois deve ser uma compilação
"limpa")

Agora vamos descobrir qual o processador da máquina:

# cat /proc/cpuinfo

Abaixo está uma parte da saída do comando acima.


processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i5-2430M CPU @
2.40GHz
stepping : 7
microcode : 0x1b
cpu MHz : 1150.781
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8
apic sep mtrr pge mca cmov pat pse36 clflush dts
acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
rdtscp lm constant_tsc arch_perfmon pebs bts
rep_good nopl xtopology nonstop_tsc aperfmperf pni
pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3
cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt
tsc_deadline_timer aes xsave avx lahf_lm epb
kaiser tpr_shadow vnmi flexpriority ept vpid
xsaveopt dtherm ida arat pln pts
bugs : cpu_meltdown spectre_v1 spectre_v2
spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips : 4789.33
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits
virtual
power management:
Porém, a informação desse comando não é suficiente, execute:

# cc -march=native -E -v - </dev/null 2>&1 | grep cc1

Veja a saída desse comando, que beleza:

/usr/lib/gcc/x86_64-linux-gnu/6/cc1 -E -quiet -v
-imultiarch x86_64-linux-gnu - -march=sandybridge -mmmx
-mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16
-msahf -mno-movbe -maes -mno-sha -mpclmul -mpopcnt
-mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi
-mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1
-mno-lzcnt -mno-rtm -mno-hle -mno-rdrnd -mno-f16c
-mno-fsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr
-mxsave -mxsaveopt -mno-avx512f -mno-avx512er
-mno-avx512cd -mno-avx512pf -mno-prefetchwt1
-mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq
-mno-avx512bw -mno-avx512vl -mno-avx512ifma
-mno-avx512vbmi -mno-clwb -mno-mwaitx -mno-clzero -mno-pku
--param l1-cache-size=32 --param l1-cache-line-size=64
--param l2-cache-size=3072 -mtune=sandybridge

Na última opção (-mtune=xxxxx), está a informação que precisamos junto com a


de cima, para saber o que colocar na opção do menuconfig.

Antes saía o tipo mtune (Core2, Dual Core etc), agora saiu o nome da "família".
No caso é um Core i5, por isso execute os dois comandos: cat /proc/cpuinfo e a
linha acima do cc). Qualquer dúvida, jogue na internet o nome da "família" que
aparecer em -mtune.

No caso do Core 2 Duo, do Dual Core e dos Pentium 4, foi marcada a opção
Core 2/newer Xeon, por eles terem dois núcleos (cores).

A saída do comando anterior será mais amplamente utilizada adiante. Capture a


tela, ou execute o comando novamente depois de configurar o kernel pelo make
menuconfig. Mas não se preocupe, depois isso será lembrado.

CONFIGURANDO E OTIMIZANDO
Execute:

# make menuconfig
(entra nas configurações do kernel)

Para entrar nas opções, dê Enter e para alterar de "M" para "*", e vice-versa, é
só pressionar a barra de espaços. A opção "M" compila como módulo, a opção
"*" compila embutido no kernel. A escolha vai de cada parâmetro. Como módulo
não fará parte do "monólito" do kernel.

Para sair de uma opção, dê Esc duas vezes seguidas. Navegue com as setas de
direção.

Vá em: Processor type and features (enter) → Processor Family


(Generic-x86-64)

...navegue e marque (barra de espaços) a opção que corresponde ao


processador da sua máquina. Ao dar barra de espaços o menu voltará
automaticamente. No meu caso, marquei Core 2/newer Xeon, por ele ter quatro
núcleos (Cores). Caso ficar na dúvida, deixe a opção padrão: Generic-x86-64

Mais abaixo, vá em "Timer frequency". Se a sua instalação for para servidor,


marque a opção "100 HZ" (isso melhorará o tempo de resposta do servidor para
as requisições). Para Desktop, deixe "250 HZ".

Retorne ao menu principal: Esc + Esc

Vá em: Networking support → Networking options → Network packet filtering


framework (netfilter) → IP: Netfilter Configuration

E marque todas as opções relativas ao nf_tables. Esse parâmetro não tem a ver
com otimização, mas com suporte ao nftables.

Tecle: Esc + Esc

Vá em IPv6: "Netfilter Configuration" e marque as duas opções do Nftables.


Tecle: Esc + Esc

Vá em "IPv4/IPV6 bridge connection tracking support" e marque essa opção.

Volte ao menu principal dando ESC e cuidando até aparecer o menu principal
"Linux/x86 5.13.10 Kernel Configuration".
Vá em "File Systems", marque os sistemas de arquivos utilizados com "*". No
meu caso, ext4 (/boot) com btrfs (demais partições).

* Dica: para ext4, marque a primeira opção (The Extended 4 (ext4) filesystem)
com "*", e deixe as 3 seguintes marcadas.

Caso você quiser, os parâmetros com os arquivos de sistemas os quais tem no


seu sistema Linux você pode colocar "*" para compilar embutido no kernel, o
suporte do kernel ao sistema de arquivos fica melhor, porém, quanto mais
opções se coloca como "*" maior ficará o tamanho do kernel após a compilação.
Alguns parâmetros é melhor ficarem como módulo (M).

Na dúvida, deixe como no padrão que já está ali.

Para o btrfs, ficaram marcadas as opções:


■ Btrfs filesystem support;

■ Btrfs POSIX Access Control Lists e

■ Btrfs will run sanity tests upon loading.

■ Btrfs debugging support

De acordo com os sistemas de arquivos que você tem no seu Linux (ext4, Btrfs
etc) configure como queira.

Mais abaixo, vá em: "Network File Systems"

E se for servidor, coloque um "*" na opção "NFS server support".

Volte: Esc + Esc

Logo abaixo, vá em "Native language support" e marque com "*", as opções:


■ Codepage 860 (Portuguese)

■ ASCII (United States)

■ NLS ISO 8859-1 (Latin 1; Western European Languages)

■ LS UTF-8
Retorne ao menu principal selecionando EXIT. Após o último EXIT, aparecerá a
janela "Do you wish...", deixe como: "Yes" e dê Enter.

Execute:

# ls -a

E veja se o arquivo ".config" foi gravado. Se não, repita a operação.

Agora, vamos alterar os arquivos necessários para otimizar a compilação de


acordo com o processador da máquina:

# cc -march=native -E -v - &1 | grep cc1

Veja a saída desse comando, que beleza de novo:

/usr/lib/gcc/x86_64-linux-gnu/6/cc1 -E -quiet -v
-imultiarch x86_64-linux-gnu - -march=sandybridge -mmmx
-mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16
-msahf -mno-movbe -maes -mno-sha -mpclmul -mpopcnt
-mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi
-mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1
-mno-lzcnt -mno-rtm -mno-hle -mno-rdrnd -mno-f16c
-mno-fsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr
-mxsave -mxsaveopt -mno-avx512f -mno-avx512er
-mno-avx512cd -mno-avx512pf -mno-prefetchwt1
-mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq
-mno-avx512bwroot@seibei:/usr/src/linux-5.13.10#
-mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb
-mno-mwaitx -mno-clzero -mno-pku --param l1-cache-size=32
--param l1-cache-line-size=64 --param l2-cache-size=3072
-mtune=sandybridge
ignoring nonexistent directory
"/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory
"/usr/lib/gcc/x86_64-linux-gnu/6/../../../../x86_64-linux-
gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/6/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.

Para sair, dê enter.

Vamos alterar os arquivos (segue uma lista completa dos arquivos com as linhas
a serem alteradas). É necessário alterar somente 3 arquivos (os 3 primeiros
abaixo), porém, se você é paranoico e obcecado, altere os outros 10 também:

* IMPORTANTE: em todos os arquivos, altere as opções "march" para


"-march=native", as opções "mcpu" para "-mcpu=native" e as opções "mtune"
para "mtune=processador". Nesta última opção, "mtune", coloque o que aparecer
na saída do comando cc -march=native -E -v - &1 | grep cc1. No meu caso ficou
"-mtune=sandybridge".

Se a versão do GCC for 4.5.1, inclusive, para baixo, deixe "-mtune=generic".


Como anteriormente instalamos e atualizamos a versão do GCC (o GCC, o G++
e o MAKE, entre outros, estão no pacotão "build-essential"), não precisa se
preocupar muito com isso. A não ser que seu sistema e seu hardware sejam
bem antigos.

Para ver a versão do GCC, digite:

# gcc --version

Para os arquivos abaixo utilize a busca do editor de texto, as linhas coloquei


somente como parâmetro. Aconselho a alterar manualmente e não usar ctrl+c,
ctrl+v.

Lista de arquivos:

# vim /usr/src/.../...
(use teu editor de texto preferido)

1. /usr/src/linux-5.13.10/arch/x86/boot/compressed/Makefile - linha ~35, opção


march=native;

2. /usr/src/linux-5.13.10/arch/x86/Makefile - linhas 25, 28, 123, 124, 127 e 128


(march); linhas 127, 129 e 130, (mtune);
3. /usr/src/linux-5.13.10/arch/x86/Makefile_32.cpu - tem várias linhas, utilize a
busca do seu editor de texto. Neste arquivo tem duas opções que não devem ser
mudadas: -mtune=$(1),$(2)) e -mcpu=$(1),$(2)), as outras pode mudar.

Neste último arquivo acima, atenção especial na linha 47


"cflags-$(CONFIG_X86_GENERIC += $(call tune,generic,$(call tune,i686))", que
deverá ficar assim:

cflags-$(CONFIG_X86_GENERIC += $(call tune,sandybridge,$(call


tune,sandybridge))

(coloque o correspondente ao teu processador)

Este arquivo de número 3 é o que otimizará a compilação para o processador da


máquina.

A partir daqui, continue se quiser extrair mais, mas preste atenção para alterar
os arquivos da forma certa.

Faça com calma, cuidado e divirta-se, se quiser, mas não é necessário. Veja
bem, talvez ao entrar em algum arquivo abaixo você não encontre as opções,
isso ocorre por causa das distribuições. Recomendo pular essa etapa.
■ /usr/src/Linux-3.10.7/arch/alpha/Makefile;

■ /usr/src/Linux-3.10.7/arch/arm/Makefile;

■ /usr/src/Linux-3.10.7/arch/avr32/Makefile;

■ /usr/src/Linux-3.10.7/arch/frv/Makefile;

■ /usr/src/Linux-3.10.7/arch/m68k/Makefile;

■ /usr/src/Linux-3.10.7/arch/mips/Makefile;

■ /usr/src/Linux-3.10.7/arch/parisc/Makefile;

■ /usr/src/Linux-3.10.7/arch/powerpc/Makefile;

■ /usr/src/Linux-3.10.7/arch/s390/Makefile;

■ /usr/src/Linux-3.10.7/arch/sparc/Makefile.

COMPILANDO E OTIMIZANDO
Execute:

# make config_debug_section_mismatch=y

Configura e previne possíveis erros de compatibilidade durante a compilação.

Deverá demorar de uma a três horas, dependendo do processador. Antes de

dar enter, sugiro fechar os outros programas (não que seja necessário, mas é

recomendável) e após dar enter sugiro deixar a máquina trabalhando e vá fazer

outra coisa. Deixe o terminal aberto e fique monitorando.

# make modules

Compila os módulos. Sempre se deve rodar make modules e make

modules_install.

# make modules_install

(instala os módulos)

# make install

(instala o kernel)
O make install instala o kernel, gera a imagem e atualiza o GRUB, deixando

tudo pronto para reiniciar.

Reiniciando:

# shutdown -r now

Após reiniciar, verifique o kernel:

# uname -r

Deverá aparecer:

5.13.10

Confirme:

# uname -a

Linux xxxxx 5.13.10 #1 SMP Thu Aug 12 20:26:52 -03 2021

x86_64 GNU/Linux
Atualize:

# apt-get update

# aptitude safe-upgrade

Agora vamos remover os kernel antigos.

# apt search linux-image | grep 'installed'

Saída, no meu caso:

WARNING: apt does not have a stable CLI interface. Use

with caution in scripts.

linux-headers-4.9.0-16-amd64/oldstable,now 4.9.272-2 amd64

[installed]

linux-image-4.9.0-15-amd64/oldstable,now 4.9.258-1 amd64

[installed,automatic]

linux-image-4.9.0-16-amd64/oldstable,now 4.9.272-2 amd64

[installed,automatic]

linux-image-amd64/oldstable,now 4.9+80+deb9u14 amd64

[installed]
Veja as versões.

# ls /boot | grep vmlinuz | cut -d'-' -f2,3

4.9.0-15

4.9.0-16

5.13.10

Remova os mais antigos:

# dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed

"s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo

apt-get -y purge

Confirme:

# ls /boot | grep vmlinuz | cut -d'-' -f2,3

Deverá aparecer o último instalado.

5.13.10
Daí:

# update-grub

E é isso.

Você acabou de compilar um kernel no Linux. O aprendizado será imenso.

Um kernel atualizado dura anos e você não precisa ficar reinstalando o sistema

toda hora porque não dará muitos problemas. E quando der problemas, eles

serão de fácil solução.


TRUQUES ÚTEIS DE LINHA DE COMANDO

LINUX PARA INICIANTES

Diversos novos usuários Linux estão muito acostumados com a interface gráfica
do Windows e possuem receio em utilizar o terminal do Linux. Com o passar do
tempo, percebem a grande versatilidade que podem ter ao utilizar a "tela preta",
onde devemos escrever os comandos, ao invés de clicar nos botões de interface
com o mouse. Depois de algum tempo, costumam utilizar com tanta frequência
esses diversos comandos, buscando sempre conhecer melhor esse tipo de
interface.

Neste material trago alguns truques úteis, principalmente para os iniciantes no


mundo Linux, para que eles tenham mais facilidade na utilização desse sistema
operacional.

ENCONTRAR O COMANDO CORRETO

Executar o comando correto pode ser vital na utilização do sistema, mas existem
diversas opções de comandos no Linux. Muitos me perguntam: Como posso
encontrar o comando que devo utilizar? A resposta é o comando apropos.

Para encontrar quais comandos posso utilizar para listar um diretório (list
directory), devo utilizar:

apropos "list directory"


dir (1) - list directory contents
ls (1) - list directory contents
ntfsls (8) - list directory contents on an NTFS filesystem
vdir (1) - list directory contents
EXECUTAR SEU ÚLTIMO COMANDO

Algumas vezes, você precisa executar o mesmo comando diversas vezes, ou


precisa lembrar de um comando utilizado no passado. Para isso podemos utilizar
o history ou o !<id>.

history
Observe na imagem acima que o comando history traz um histórico com todos
os últimos comandos digitados, sendo que cada comando possui um número
indicando sua linha. Caso eu queira executar novamente o comando que está na
linha 52 (lslogins), poderia fazer da seguinte forma:

!52

UTILIZE O COMANDO MIDNIGHT

Caso você prefira um alternativa aos comandos cd, cp, mv, rm etc, pode utilizar o
comando midnight. Ele possui uma interface visual no modo de texto, onde a
maioria dos comandos são realizados utilizando as teclas F1, F2 etc.

sudo apt install mc


mc
Utilize a tecla <TAB> para alternar entre o painel direito e o esquerdo.

Caso você queira, por exemplo, copiar um arquivo (install.sh) que está no meu
diretório home (~), para a pasta temporária do sistema (/tmp), primeiro navegue
até a pasta temporária no painel direito. Depois volte para o painel esquerdo e
selecione o arquivo que será copiado.

Agora pressione <F5> para realizar a cópia. Veja que agora o arquivo install.sh
está também no diretório /tmp.
DESLIGAR OU REINICIAR O COMPUTADOR EM UM HORÁRIO ESPECÍFICO

Para desligar e reiniciar o computador utilizamos o comando shutdown. Caso


você queira desligar o computador às 21h00, utilize:

sudo shutdown 21:00

Caso queira reiniciar seu computador daqui 15 minutos, utilize:

sudo shutdown -r +15

ENCONTRAR ARQUIVOS

A busca por arquivos pode ser mais simples do que a maioria das pessoas
imagina, utilizando o comando find.

Buscar os arquivos com mais de 10 MB no diretório atual:

find . -type f -size 10M

Buscar arquivos com um nome:

find . -name livros.txt

Buscar os arquivos em uma pasta e alterar suas permissões para 644:


find /home/user/files/ -type f -exec chmod 644 {} ;

Em um próximo artigo irei demonstrar diversas utilizações do comando find.

CRIAR UMA ÁRVORE DE DIRETÓRIOS COM UM ÚNICO COMANDO

O comando mkdir é utilizando para criarmos diretórios.

Caso você queira, por exemplo, criar a seguinte árvore:

Livros/
Livros/Acao
Livros/Drama
Livros/TI

Se você utilizar o comando mkdir da forma tradicional, executaria ele 4 vezes!


Tente usar da seguinte forma, com o argumento -p:

mkdir -p Livros/{Acao,Drama,TI}
ls Livros/

COPIAR UM ARQUIVO PARA DIVERSOS DIRETÓRIOS

Suponha que eu tenha o arquivo autores.txt que é um modelo, que será utilizado
em todos os diretórios de Livros criados no exemplo anterior. Como posso
copiá-lo para todos eles, utilizando um único comando? A solução está no
exemplo abaixo.

echo /home/diego/Livros/Acao/ /home/diego/Livros/Drama/


/home/diego/Livros/TI/ | xargs -n 1 cp /home/diego/autores.txt

EXCLUIR ARQUIVOS MUITO GRANDES

Algumas vezes os arquivos podem crescer muito, ficando enormes! Um exemplo


clássico são os arquivos de log não rotacionados, com 300GB, 500GB , ou
maiores, podendo causar dificuldades para os administradores de sistemas. Em
muitos casos, remover esses arquivos com o comando rm pode não funcionar, já
que eles são muito grandes e essa ação será muito "pesada" para o sistema.
Uma alternativa é limpar o arquivo antes de excluir. No exemplo abaixo, irei
limpar o arquivo log_enorme.log.

> /path-to-file/log_enorme.log

O que aconteceu no comando acima é que foi escrito um arquivo vazio sobre o
log_enorme.log.
LER UM ARQUIVO DE LOG EM TEMPO REAL

Em diversos casos precisamos ler e exibir um arquivo de log em tempo real,


como por exemplo o arquivo de log do Apache, WebLogic, Tomcat etc. Para isto,
utilizamos o "tail -f".
tail -f /var/log/syslog

UTILIZAR O HELP NOS COMANDOS LINUX

Esta dever ser uma das dicas mais importantes, a utilização do parâmetro help
nos comandos Linux. Desta forma, você pode exibir as principais opções de
cada comando, sem utilizar o manual do sistema. No comando abaixo, utilizo o
help com o comando ls.

ls --help

CONCLUSÕES
Espero que os truques expostos acima te ajudem na jornada de utilização do
terminal Linux.
Virtualização com Proxmox VE

INTRODUÇÃO

Proxmox VE é uma plataforma para executar máquinas virtuais e contêineres.


Ele é baseado no Debian Linux e completamente código aberto. Para máxima
flexibilidade, implementamos duas tecnologias de virtualização - máquina virtual
baseada em kernel (KVM) e virtualização baseada em contêiner (LXC).

Um dos principais objetivos do design é tornar a administração mais fácil


possível. Você pode usar Proxmox VE em um único nó ou montar um cluster de
muitos nós. Todas as tarefas de gerenciamento podem ser feitas usando a
interface de gerenciamento via web e até mesmo um usuário novato pode
configurar e instalar o Proxmox VE em minutos.

GERENCIAMENTO CENTRAL

Embora muitas pessoas comecem com um único nó, o Proxmox VE pode ser
dimensionado para um grande conjunto de nós agrupados. A pilha do cluster é
totalmente integrada e acompanha a instalação padrão.

DESIGN MULTI-MASTER ÚNICO

A interface de gerenciamento baseada na web oferece uma visão clara de todos


os seus convidados KVM e contêineres Linux e até mesmo de todo o cluster.
Você pode gerenciar facilmente suas VMs e contêineres, armazenamento ou
cluster a partir da GUI. Não há necessidade de instalar em separado um servidor
de gerenciamento.

SISTEMA DE ARQUIVOS DE CLUSTER PROXMOX (PMXCFS)

Proxmox VE usa o exclusivo sistema de arquivos Proxmox Cluster (pmxcfs), um


sistema de arquivos orientado por banco de dados para armazenar arquivos de
configuração. Isso permite que você armazene a configuração de milhares de
máquinas virtuais.
Ao usar o corosync, esses arquivos são replicados em tempo real em todos os
nós do cluster. O sistema de arquivos armazena todos os dados dentro de um
banco de dados persistente em disco, no entanto, uma cópia dos dados reside
na RAM que fornece um tamanho máximo de armazenamento de 30 MB - mais
do que o suficiente para milhares de VMs. Proxmox VE é a única plataforma de
virtualização que usa este sistema de arquivos de cluster exclusivo.

INTERFACE DE GERENCIAMENTO BASEADA NA WEB

O Proxmox VE é simples de usar. As tarefas de gerenciamento podem ser feitas


através da interface de gerenciamento baseada na web - não há necessidade de
instalar uma ferramenta de gerenciamento separada ou qualquer gerenciamento
adicional nó com bancos de dados enormes.

A ferramenta multimestre permite que você gerencie todo o seu cluster a partir
de qualquer nó do seu cluster. O gerenciamento central baseado na Web -
baseado no JavaScript Framework (ExtJS) - permite que você controle todas as
funcionalidades da GUI e uma visão geral do histórico e syslogs de cada nó
único. Isso inclui a execução de trabalhos de backup ou restauração, migração
ao vivo ou atividades acionadas por HA.

LINHA DE COMANDO

Para usuários avançados que estão acostumados com o conforto do Shell Unix
ou Windows Powershell, Proxmox VE fornece uma interface de linha de
comando para gerenciar todos os componentes do seu ambiente virtual. Esta
interface de linha de comando possui preenchimento de guia inteligente e
documentação completa na forma de UNIX man pages.

API REST

Proxmox VE usa uma API RESTful. Escolhemos JSON como formato de dados
primário e toda a API é formalmente definida usando o esquema JSON. Isso
permite uma integração rápida e fácil para gerenciamento de terceiros
ferramentas como ambientes de hospedagem personalizados.

ADMINISTRAÇÃO BASEADA EM FUNÇÕES

Você pode definir o acesso granular para todos os objetos (como VMs,
armazenamentos, nós etc) usando a função baseada em gerenciamento de
usuários e permissões. Isso permite que você defina privilégios e ajude a
controlar acesso a objetos. Este conceito também é conhecido como listas de
controle de acesso, onde cada permissão especifica um sujeito (um usuário ou
grupo) e uma função (conjunto de privilégios) em um caminho específico.

AUTENTICAÇÃO REALMS

Proxmox VE oferece suporte a várias fontes de autenticação, como Microsoft


Active Directory, LDAP, Linux PAM autenticação padrão ou o servidor de
autenticação Proxmox VE integrado.

ARMAZENAMENTO FLEXÍVEL

O modelo de armazenamento Proxmox VE é muito flexível. As imagens de


máquina virtual podem ser armazenadas em um ou vários armazenamentos
locais ou em armazenamento compartilhado como NFS e em SAN. Não há
limites, você pode configurar como muitas definições de armazenamento como
você gosta. Você pode usar todas as tecnologias de armazenamento disponíveis
para Debian Linux.

Um grande benefício de armazenar VMs em armazenamento compartilhado é a


capacidade de migrar ao vivo máquinas em execução sem qualquer tempo de
inatividade, pois todos os nós do cluster têm acesso direto às imagens de disco
da VM.

Atualmente, oferecemos suporte para os seguintes tipos de armazenamento de


rede:
■ Grupo LVM (suporte de rede com alvos iSCSI);

■ Alvo iSCSI;

■ Compartilhamento NFS;

■ Compartilhamento CIFS;

■ Ceph RBD;

■ Use diretamente iSCSI LUNs;

■ GlusterFS.
Os tipos de armazenamento local suportados, são:
■ Grupo LVM (dispositivos auxiliares locais, como dispositivos de bloco,

dispositivos FC, DRBD etc);

■ Diretório (armazenamento no sistema de arquivos existente);

■ ZFS.

BACKUP E RESTAURAÇÃO INTEGRADOS

A ferramenta de backup integrada (vzdump) cria instantâneos consistentes de


contêineres em execução e convidados KVM. Basicamente, ele cria um arquivo
dos dados VM ou CT que inclui os arquivos de configuração VM / CT. O backup
ao vivo em KVM funciona para todos os tipos de armazenamento, incluindo
imagens VM em NFS, CIFS, iSCSI LUN, Ceph RBD.

O novo formato de backup é otimizado para armazenar backups de VM rápida e


eficaz (arquivos esparsos, dados fora de ordem, E/S minimizada).

CLUSTER DE ALTA DISPONIBILIDADE

Um cluster Proxmox VE HA de vários nós, permite a definição de servidores


virtuais altamente disponíveis. The Proxmox VE HA Cluster é baseado em
tecnologias comprovadas de HA Linux, fornecendo serviços HA estáveis e
confiáveis.

REDE FLEXÍVEL

O Proxmox VE usa um modelo de rede em bridge (ponte). Todas as VMs podem


compartilhar uma ponte como se os cabos de rede virtual de cada convidado
fossem todos conectados ao mesmo switch. Para conectar VMs ao mundo
exterior, bridges são anexados às placas de rede físicas e atribuídos a uma
configuração TCP / IP.

Para maior flexibilidade, VLANs (IEEE 802.1q) e ligação/agregação de rede são


possíveis. Assim é possível construir redes virtuais complexas e flexíveis para os
hosts Proxmox VE, aproveitando todo o poder do Pilha de rede Linux.
FIREWALL INTEGRADO

O firewall integrado permite filtrar pacotes de rede em qualquer VM ou interface


de contêiner. Conjuntos comuns de regras de firewall podem ser agrupadas em
"grupos de segurança".

INFRAESTRUTURA HIPERCONVERGENTE

Proxmox VE é uma plataforma de virtualização que integra totalmente recursos


de computação, armazenamento e rede, gerencia clusters altamente disponíveis,
backup/restauração e recuperação de desastres. Todos os componentes são
definidos por software e compatíveis uns com os outros.

Portanto, é possível administrá-los como um único sistema por meio da interface


de gerenciamento web centralizado. Esses recursos tornam o Proxmox VE a
escolha ideal para implantar e gerenciar uma infraestrutura hiperconvergente de
código aberto.

BENEFÍCIOS DE UMA INFRAESTRUTURA HIPERCONVERGENTE (HCI) COM

PROXMOX VE

Uma infraestrutura hiperconvergente (HCI) é especialmente útil para


implantações em que uma alta infraestrutura à demanda atenda a um baixo
orçamento de administração, para configurações distribuídas, como ambientes
remotos e de filiais ou para nuvens públicas e privadas virtuais.

HCI oferece as seguintes vantagens:


■ Escalabilidade: expansão contínua de dispositivos de computação, rede

e armazenamento (ou seja, aumentar a escala de servidores e

armazenamento de forma rápida e independente um do outro).

■ Baixo custo: Proxmox VE é open source e integra todos os componentes

de que você precisa, como computação, armazenamento, centro de

rede, backup e gerenciamento. Ele pode substituir uma infraestrutura de

computação / armazenamento cara.


■ Proteção e eficiência de dados: serviços como backup e recuperação de

desastres estão integrados.

■ Simplicidade: fácil configuração e administração centralizada.

■ Código aberto: sem dependência de fornecedor.

INSTALAÇÃO E CONFIGURAÇÃO

Bom, agora vamos colocar a mão na massa e efetuar a instalação do Proxmox!

Baixe a ISO do Proxmox:


https://www.proxmox.com/en/downloads/category/iso-images-pve

Agora grave em um DVD ou Pendrive e só dê o boot para a instalação:

Aceite os termos da EULA:


Selecione o device para ser instalado, geralmente deixamos no primeiro mesmo:

Agora selecione o País, timezone e layout do teclado:


Vamos definir uma senha e um endereço de email:

Agora defina as configurações de rede, hostname, interface de rede:


Após, ira aparecer um sumário de como vão ficar as configurações:

E agora instalado, ele irá reiniciar:


Iniciando o seu boot:

Podes logar no terminal com a senha que foi definido na instalação:


Podemos acessa via web: https://<ip ou FQDN>:8006

Caso queira usar sem o suporte pago da empresa, vamos alterar o sources.list.
asta alterar o arquivo /etc/apt/source.list.d/pve-enterprise.list e deixá-lo assim:

deb http://download.proxmox.com/debian buster pve-no-subscription


Salve, saia e digite:

# apt update

E depois só executar o comando:

# apt upgrade -y

E reiniciar o Proxmox:

# reboot

CRIANDO UMA MÁQUINA VIRTUAL

Vamos agora subir na primeira máquina virtual.

Acesse o seu Proxmox e vá em: Local > ISO > Upload - é onde vamos subir uma
ISO:
Após efetuar o upload da ISO, vamos criar a nossa máquina virtual. Vá em
"Create VM":

Nessa tela vamos configurar em qual o node do Proxmox vamos subir a VM,
caso tenha mais de um node. Defina o nome da sua máquina virtual:

Selecione a ISO:
A configuração do sistema, pode deixar default mesmo:

Selecione onde ficará o disco da VM e a sua capacidade, como teste deixei com
32GB:
Configure a CPU da VM:

Configure a memória:
Configure a rede:

Verifique se as configurações estão de acordo:


Após criar a máquina virtual, só iniciá-la:

Espero que ajude.

Guia de referência: Proxmox - Powerful open-source server solutions


Dicas para aprender programação

Neste artigo você vai aprender algumas dicas básicas que costumo usar com meus
"discípulos" quando quero ensinar programação para alguém via internet.

DICA 1: INPUT/OUTPUT - PRIMEIRO DECORAR, DEPOIS APRENDER

INTRODUÇÃO

Algumas vezes pode ser complicado aprender programar, ainda mais sozinho.
Programação é algo que exige mais um esforço solitário do que propriamente de
um grupo de pessoas ao mesmo tempo. Neste artigo veremos algumas dicas
simples para aprender melhor programação e não perder tanto tempo
reinventando a roda, melhor aprender com a experiência de alguém que já
percorreu o caminho do que tentar fazer um caminho novo.

DICA 1: INPUT/OUTPUT - PRIMEIRO DECORAR, DEPOIS APRENDER

Essa é provavelmente a técnica mais efetiva no estudo de programação.


Quando você deve aprender uma linguagem ou iniciar os estudos de
programação, a melhor estratégia é apenas decorar (input) o máximo que puder
para depois aprender como fazer (output). Essa técnica eu aprendi com meu
amigo Thiago Hupner (thihup) quando eu ajudava ele a aprender programação.

Ele fazia exatamente isso e eu ficava surpreso porque ele conseguia decorar o
programa inteiro escrito em C++ com a lib Irrlicht e eu ainda estava
engatinhando no hello world com a mesma lib. Perguntei a ele como era essa
mágica e ele me explicou como fazia. No caso, quanto mais você decorar
programas ou comandos, mais você terá experiência para aprender. Essa
técnica me lembra a teoria do Input/Output da aquisição de língua estrangeira de
Stephen Krashen:

Sugiro que leia este site: Stephen Krashen's Theory of Second Language
Acquisition (Assimilação Natural - o Construtivismo no Ensino de Línguas)

Ou pesquise no Google: teoria do input de Stephen Krashen


Nessa técnica o que você faz é o seguinte:

Se você tem que aprender uma nova linguagem, ou uma nova lib, ou qualquer
tecnologia que seja, siga estes passos:

Supondo que queira aprender uma nova linguagem mas você NÃO sabe
nenhuma linguagem:

1. Pegue um exemplo de programa com poucas linhas, tipo algo como um


programa que imprime a soma de dois números.

2. Como você não tem nenhuma noção (input) do que faz aquilo, então, tente
apenas ler e entender o que faz o programa, assim você ganha input
compreensivo sobre aquele assunto.

3. Depois de ter certeza que você decorou (sim, decorou mesmo!) o programa e
consegue mentalmente visualizar como ele é, basta agora praticar (output).
Tente reproduzir todo o programa como você entende ele, caso surja dúvidas,
olhe imediatamente no código que você decorou para ganhar ainda mais input
(compreensão).

4. Não deixe nenhuma dúvida passar sem resposta no momento de reproduzir o


código do programa.

5. Dicas de sites com códigos de programas para estudar:


■ https://www.vivaolinux.com.br/scripts/

■ https://www.github.com/

■ https://www.sourceforge.net/

No caso, nessa prática eu recomendo que você tente reproduzir todo o programa
a partir de sua mentalização/decorar de antes.

Por exemplo, supondo que você decorou os comandos de um programa que


soma dois números e mostra na tela, então, tente reproduzir todo o programa
DEPOIS de mentalizado.
Reproduzir o mesmo programa já mentalizado é o mesmo que fazer um output
da sua mente para o computador. No caso o input (compreensão) veio dos
comandos decorados.

Quanto mais você decorar programas, maiores serão as chances de mais rápido
você entender qualquer outro programa no mesmo nível dos que você decorou.

NOTA: aqui prefira mais a quantidade de programas entendidos ao invés da


qualidade dos programas que você entendeu. Por exemplo, é melhor você saber
refazer mentalmente 50 programas de 10 linhas do que saber fazer um de 500
linhas, porque no quesito experiência, você possuirá 50 programas
mentalizados, enquanto que mentalizar apenas um de 500 linhas não te fará tão
experiente na habilidade de programação.

O foco principal é apenas esse: ganhar o máximo de input possível


(compreensão do assunto), para depois tentar reproduzi-lo (output) fazendo o
que já se entendeu mas não sabe o significado.

De forma genérica, abaixo segue algo que serve para aprender tudo na
programação:

1. Pegue exemplos de código do que deseja aprender, exemplos pequenos e


não tão complexos, primeiro olhe o código inteiro e veja se você é capaz de
entendê-los. Se sim, siga para o passo 2. Senão, procure outro código mais
simples.

2. [INPUT] depois de ter alguns exemplos que você sentiu ser capaz de
aprender, chegou a hora de decorar (input). Então, leia o programa e tente
apenas entender como ele executa cada instrução. Comece do primeiro
comando, vá para o segundo, depois o terceiro etc, até chegar no fim da
execução. Aqui você está ganhando entendimento sobre o que fazer no passo
seguinte. Só siga para o passo 3 se realmente sentir que é capaz de repetir o
código de exemplo exatamente como você entendeu neste passo.

3. [OUTPUT] agora nesta etapa chegou a hora da prática, apenas tente


reproduzir todo o programa de exemplo que você decorou no passo 2. Se chegar
num ponto onde você esqueceu como o exemplo fazia, imediatamente vá ao
programa de exemplo e veja como ele faça, não deixe nenhuma dúvida viva!
Essa fase é a fase onde você terá dúvidas e isso é normal, então, apenas
procure saná-las o quanto antes. Depois de conseguir refazer todo o programa,
siga para o quarto passo se quiser.
4. [RELEMBRANDO - opcional] neste passo é tipo um desafio para você
realmente aprender de verdade. Aqui, mais do que programar, você irá escrever
num txt ou num caderno, ou em algo que você possa escrever frases. O que eu
sugiro é: escreva o algoritmo do programa completo, sem código, só o algoritmo.
Por exemplo, supondo que o programa do passo 2 que você decorou some dois
números numA e numB e então mostre na tela, assim, seu objetivo neste quarto
passo é apenas escrever todo o algoritmo usado no programa. Esse passo serve
para fixar em seu cérebro o entendimento do programa.

DICA 2: SE NÃO SABE MAIS O QUE FAZER, APENAS ESCREVA OS PASSOS.

Muitas vezes um problema de programação só está mal compreendido, e no


caso para entender melhor você deve fazer algumas perguntas:

1. Pergunte a si mesmo "O que fazer?" e não "Como fazer?"

Nessa dica perguntar "Como fazer tal programa?" é pior do que perguntar "O
que fazer neste programa?". Percebeu a diferença? Quando você usa "O que
fazer" ao invés de "Como fazer", você passa a ser mais objetivo e direcionado
para a solução do problema em questão.

Vamos supor que você tenha o vetor:

int vetor[] = {1, 2, 3, 2, 3, 5, 4};

O possível problema para fazer pode ser:

Ordene este vetor do menor para o maior.

Então, se você perguntar a si mesmo "Como fazer para ordenar este vetor?"
pode dar tantas possibilidades que você será incapaz de usar uma delas. Mas se
você perguntar "O que fazer para ordenar este vetor?", então você poderia
pensar melhor num algoritmo (passo a passo) de como fazer para ordenar este
vetor especificamente:

1. Pegar o terceiro número (3) e o quarto numero (2).

2. Inverter a posição dos dois números.


3. Pegar o sexto número (5) e o sétimo número (4).

4. Inverter a posição dos dois números.

Se você observar bem, este algoritmo serve apenas para este vetor em
particular. Mas se você olhar de forma mais genérica, poderá ver que este
algoritmo pode ser transformado em algo que pode ser reaproveitado para
qualquer vetor:

//passos 1 e 3 são o mesmo que: 1. Vá do primeiro ao penúltimo, chame de


índice i. 1.1. Vá do i + 1 ao último, chame de índice j. 1.1.2. Se o número no
índice i for maior que o número no índice j.

//passos 2 e 5 são o mesmo que 1.1.2.1. Pegue o número no índice i, salve


numa variável auxiliar chamada aux. 1.1.2.2. Faça o número no índice i igual ao
número no índice j. 1.1.2.3. Faça o número no índice j igual à variável auxiliar
aux.

2. Continue percorrendo o vetor até a conclusão do passos 1 e 2.

Esse algoritmo acima é o famoso algoritmo da bolha.

DICA 3: APRENDA ALGORITMOS OU LÓGICA DE PROGRAMAÇÃO, MAS USE

UMA LINGUAGEM DE PROGRAMAÇÃO

Se você for esperar para ter primeiro a lógica afiada para depois aprender
programar de verdade, pode acabar perdendo um tempo precioso. Então, pra
treinar a lógica e ao mesmo tempo aprender uma linguagem, você deve sempre
tentar com uma linguagem de programação.

Exemplo:

Se você ainda não sabe nenhuma linguagem de programação, eu sugiro que


escolha uma, qualquer uma do seu interesse e então estude a lógica de
programação ao mesmo tempo em que tenta programar. Como eu disse na dica
1, aqui o que vale não é a qualidade mas a quantidade de input que você tem da
linguagem, quanto mais input você obtém mais fácil será aprender programar e
por consequência, aprender algoritmos de forma prática.
Mas, como praticar enquanto treina programação com uma linguagem?

Vou tentar transformar em passos:

1. Procure um problema de programação parta estudar

2. Se já sabe algo da linguagem que você quer aprender, então, tente fazer ele
nessa linguagem.

2.1. Se não conseguir, tente escrever o passo a passo num caderno até você ter
uma ideia de "O que fazer?" e não "Como fazer?"

3. Se não sabe nenhuma linguagem, então, sugiro que escreva o algoritmo


primeiro e só depois tente procurar fazer numa linguagem qualquer. Assim você
pode também procurar no Google que comandos são usados na linguagem que
você quer aprender.

Em geral, as primeiras linguagens aprendidas são estruturadas, com comandos


comuns tipo if, eles, while, for etc. Aprendendo estes primeiros comandos, você
já será capaz de fazer pequenos programas.

DICA 4: IDENTIFIQUE PRIMEIRO OS BLOCOS DO PROGRAMA: ENTRADA,

PROCESSAMENTO E SAÍDA

Quando você vai aprender uma nova linguagem, há certas coisas que passam
sem ser percebidas, uma delas é a estrutura lógica da maioria dos programa. No
caso, estou falando das 3 palavrinhas mágicas da computação: entrada,
processamento e saída.

Então, quando você tem um problema como este:

- leia dois números A e B, some eles e mostre o resultado na tela.

Você deve primeiro, começar identificando quem são as entradas, quem é


processamento e quem é saída. No nosso exemplo:

Entradas:

- ler dois números A e B.


Processamento:

- somar A com B.

Saída:

■ mostrar na tela o resultado.

Esse exemplo é muito simples, mas em geral é nesse estilo que se trata
programar. Se você identificar cada parte, poderá facilmente desenvolver um
programa ou algoritmo que resolve o problema em questão.

DICA 5: FAÇA AMIGOS PELA INTERNET E/OU AJUDE PESSOAS COM O QUE

VOCÊ SABE

Essa também é uma dica efetiva, mas as vezes é difícil fazer, porque é difícil
enxergar benefícios diretos de fazer amigos e/ou ajudar pessoas online.

Nessa eu sugiro o seguinte:

- participe de fóruns, grupos do Facebook, grupos do Discord etc, com o assunto


programação. Tente responder dúvidas de outras pessoas que você conhece
porque estas dúvidas são perfeitas para você treinar sua habilidade com
programação, e isso é uma "piranha" oportunidade.

- use a busca do Google para achar estes grupos, exemplo:


■ grupos de programação Facebook

■ grupo de programação iniciantes Discord

Eu consegui meu primeiro emprego graças a um amigo que conheci aqui mesmo
no Viva o Linux, conheci de forma aleatória e eu ajudei ele a aprender
programação e anos mais tarde a arranjar o primeiro emprego dele também, e
depois, ele me ajudou entrar na mesma empresa que está.
Por isso eu reforço: ajude alguém na internet, mesmo que você não veja os
resultados de forma imediata, a longo prazo vale muito a pena.

Se você ajudar alguém de alguma forma, essa pessoa pode acabar


recompensando seu esforço, não apenas com agradecimentos. Siga o velho
conselho do cabelo:

"Competir atrai inimigos, cooperar atrai amigos!"

DICA 6 - AUMENTE SUA AUTODISCIPLINA

Nesta dica você verá um método simples para criar autodisciplina. Ele é
comprovado cientificamente e não é simples achismo.

Então, o método é: fazer meditação.

Simples assim, fazer meditação fará você ser auto disciplinado e talvez até fazer
você ser menos idiota (se isso for um problema pra você).

Segue alguns artigos em inglês:

NOTA: quando você vê algum método para aumentar a inteligência, desconfie


logo, porque ele pode até funcionar mas não vai lhe fazer inteligente de forma
alguma se você não estudar. O que esses métodos mágicos fazem é apenas
melhorar sua cognição e NÃO inserir conhecimento em seu cérebro. O único
modo atual de inserir conhecimento no cérebro é via estudar muito. Você pode
ser muito capaz de aprender mas se não estudar nada, você continuará no
mesmo nível de conhecimento.

Matéria sobre como "aumentar" a inteligência: How Meditation Increases


Intelligence (just 20 minutes a day) - The Best Brain Possible

Artigo sobre meditação mindfullness e aumento do QI: Meditation Increases IQ -


4 Days of Meditation Improves Cognitive Efficiency

Aqui meu canal favorito de meditação guiada: [você pode começar por ele] Canal
Fábio Lima
Depois que você começar meditar, sugiro ainda mais uma coisa: marque um X
no calendário toda vez você conseguir cumprir um meta. Por exemplo, se você
não sabe programar e quer aprender programação, pegue um calendário e
escreva nele ou cole um papel com a meta: "estudar programação", quando você
estudar programação no dia atual, marque um X no dia que você estudar. Se
não estudar, não marque nada. Assim você terá um feedback de progresso e
saberá se conseguiu ou não cumprir a meta.

Ter metas e cumprir partes dela na semana (não precisa ser todo dia) lhe fará
um tremendo bem e até você sentirá que está progredindo e não apenas
sonhando em ser bom em alguma coisa.

Essa técnica de meditação e calendário, funcionam para qualquer tipo de meta.


Se não acredite, seria bom experimentar e tirar suas próprias conclusões antes
mais do que só achar que não funciona.

E o que fazer quando não conseguir cumprir nada da meta?

Simples, apenas abandone tal meta! O que importa mesmo no final das contas é
apenas o que você se interessa, se você focar no que te interessa não precisará
mais se importar com metas ou cumprir qualquer coisa que seja além do seu
alcance.

Como diria Sadhguru: "...se preocupe mais com o processo ou sua meta não
passará de desejos fantasiosos...Se você tiver devoção absoluta ao que você
está fazendo no momento presente, dependendo do tempo e das oportunidades,
iremos até onde for possível.".

Vídeo recomendado:
CONCLUSÃO

Neste artigo foi visto certas dicas que são úteis para quem está querendo
aprender programação, mesmo que sozinho ou com alguns amigos.

Nele, compartilhei algumas coisas de prática deliberada e experiências no


ensino de alguns amigos que aprenderam programar comigo ou que os ajudei a
subir seu nível de habilidade.

Espero que você tenha gostado deste conteúdo, e caso queira saber mais sobre
mim, pode me encontrar nestes links:
Meu perfil no GitHub: https://github.com/cpusam

Meu perfil no Deviantart: (tá meio abandonado)


https://www.deviantart.com/samuelleonardo

Blog que escrevo com meu amigo Patrick: https://nerdki.blogspot.com/


Instalação do Gentoo GNU/Linux em um SSD

NVMe (UEFI/GPT)

INSTALAÇÃO

Artigo testado em:

■ AMD Ryzen 7 3700X

■ 32 GB RAM SSD4

■ 128 GB SSD NVMe

■ GPU RADEON R5220 2GB

Para a instalação foi usado o "Minimal Installation CD" disponível em:

■ https://www.gentoo.org/downloads/

Obs 1.: este artigo é bem específico para a minha situação (não poderia ser de

outra forma se tratando do Gentoo GNU/Linux). Serve como guia superficial e

lembrete do processo de instalação que pode, talvez, ajudá-lo de alguma forma.

Mas caso queira um conteúdo "genérico" que se adapte a todas as situações, a

melhor a opção seria ler o "handbook" do Gentoo.


Obs 2.: caso você tenha alguma sugestão ou crítica construtiva, por favor deixe

um comentário. Não tenho muita experiência com Gentoo GNU/Linux e estou

constantemente aprendendo.

PARTIÇÕES

Crie duas partições:

■ 128 MB para UEFI ESP

■ E o restante para a raiz

Para isso use o "gdisk".

Exemplo:

# gdisk /dev/nvme0n1

Tecle "o" para criar uma tabela de partição GPT, e confirme com "y".

Criação da tabela de partição GPT:

Command: o (Enter)

This option deletes all partitions and creates a new

protective MBR.
Proceed? (Y/N): y (Enter)

Criação da Partição 1 (UEFI ESP):

Command: n (Enter)

Partition Number: 1 (Enter)

First sector: (Enter)

Last sector: +128M (Enter)

Hex Code: EF00 (Enter)

Criação da Partição 2 (/):

Command: n (Enter)

Partition Number: 2 (Enter)

First sector: (Enter)

Last sector: (Enter)

Hex Code: (Enter)

Salvar alterações no disco:

Command: w (Enter)
Do you want to proceed? (Y/N): Y (Enter)

Formate:

# mkfs.xfs /dev/nvme0n1p2

# mkfs.vfat -F 32 /dev/nvme0n1p1

Monte:

# mkdir -p /mnt/gentoo

# mount /dev/nvme0n1p2 /mnt/gentoo

# mkdir -p /mnt/gentoo/boot/efi

# mount /dev/nvme0n1p1 /mnt/gentoo/boot/efi

STAGE 3 E CHROOT

Baixe o stage3 da versão "openrc" usando o navegador Links e extraia-o:

# cd /mnt/gentoo

# links https://www.gentoo.org/downloads/

# tar --xattrs-include='*.*' --numeric-owner -xpf stage3*


Chroot:

# cd /mnt/gentoo

# mount -t proc none proc

# mount --rbind /sys sys

# mount --make-rslave sys

# mount --rbind /dev dev

# mount --make-rslave dev

# cp /etc/resolv.conf etc

# chroot . /bin/bash

# source /etc/profile

Em uma linha:

# mount -t proc none proc; mount --rbind /sys sys; mount --make-rslave sys;

mount --rbind /dev dev; mount --make-rslave dev; cp /etc/resolv.conf etc;

chroot . /bin/bash; source /etc/profile

Sincronize o repositório:

# emerge-webrsync
CRIAÇÃO DO USUÁRIO E DAS SENHAS

Exemplo com usuário "xerxes":

# sed -i s/everyone/none/ /etc/security/passwdqc.conf

# passwd

# useradd -g users -G wheel,portage,audio,video,usb,cdrom -m xerxes

# passwd xerxes

ARQUIVOS DE CONFIGURAÇÃO

Instale o Vim:

# emerge -vaq app-editors/vim

Edite o Fstab:

# vim /etc/fstab

Exemplo:

/dev/nvme0n1p2 / xfs defaults 0 1

/dev/nvme0n1p1 /boot/efi vfat defaults 0 0


tmpfs /tmp tmpfs noatime,nodev,nosuid,size=20G 0 0

Configure o make.conf:

# vim /etc/portage/make.conf

Exemplo:

# These settings were set by the catalyst build script that automatically

# built this stage.

# Please consult /usr/share/portage/config/make.conf.example for a more

# detailed example.

COMMON_FLAGS="-march=native -O2 -pipe"

CFLAGS="${COMMON_FLAGS}"

CXXFLAGS="${COMMON_FLAGS}"

FCFLAGS="${COMMON_FLAGS}"

FFLAGS="${COMMON_FLAGS}"

# NOTE: This stage was built with the bindist Use flag enabled

PORTDIR="/var/db/repos/gentoo"

DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"

# This sets the language of build output to English.

# Please keep this setting intact when reporting bugs.

LC_MESSAGES=C

EMERGE_DEFAULT_OPTS="${EMERGE_DEFAULT_OPTS} --jobs=16

--load-average=16"

MAKEOPTS="-j16"

GRUB_PLATFORMS="efi-64"

USE="X elogind alsa pulseaudio -ahavi -dbus -systemd -wayland -nls -doc

-bluetooth -ios -aqua -cdrom -dvd -kde -qt -qt4 -qt5"

VIDEO_CARDS="radeon r600"

ACCEPT_LICENSE="*"

CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand

sha sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3"


PORTAGE_TMPDIR="/tmp"

Configure o "locale":

# vim /etc/locale.gen

Adicione:

en_US.UTF8 UTF-8

pt_BR.UTF8 UTF-8

C.UTF8 UTF-8

# locale-gen

# eselect locale list

# eselect locale set [número]

Troque o "hostname", se quiser. Por exemplo, se quiser trocar o nome da

máquina para "ladybug":

# sed -i s/localhost/ladybug/ /etc/conf.d/hostname


Relógio (opcional):

# vi /etc/conf.d/hwclock

Escolha "local" ou "UTC".

Fuso-horário:

# ln -sf /usr/share/zoneinfo/America/Recife /etc/localtime

Obs.: troque "America/Recife" para sua capital.

# emerge --config sys-libs/timezone-data

KERNEL

Instale o "gentoo-sources" e compile:

# emerge -av sys-kernel/gentoo-sources sys-kernel/linux-firmware

# cd /usr/src/linux

# make localyesconfig

# make menuconfig (ou nconfig)


# make -j16

# make modules_install

# make install

GRUB

Certifique-se de ter colocado GRUB_PLATFORMS="efi-64" no arquivo

"make.conf". Depois execute:

# emerge --ask sys-boot/grub

# grub-install --target=x86_64-efi --efi-directory=/boot/efi

# grub-mkconfig -o /boot/grub/grub.cfg

ESCOLHENDO O "PROFILE"

Mude o perfil, se quiser:

# eselect profile list

# eselect profile set [número]

FERRAMENTAS DE REDE

Instale as ferramentas de rede com:


# emerge --ask sys-apps/iproute2 net-misc/dhcpcd

Se precisar se conectar à uma rede sem fio, instale:

# emerge --ask net-wireless/wireless-tools net-wireless/iw

net-wireless/wpa_supplicant

Habilite o dhcpcd:

# rc-update add dhcpcd default

APLICATIVOS ÚTEIS

Se quiser, aproveite para instalar algumas coisas a mais.

Algumas utilidades:

# emerge --ask gentoolkit eix flaggie layman

Mais aplicativos, incluindo o openssh:

# flaggie p7zip +rar


# emerge --ask www-client/google-chrome sakura dmenu dwm slock

xautolock p7zip htop openssh rust-bin xorg-server pulseaudio pulsemixer

# rc-update add sshd default

# rc-service sshd start

Truque para "enganar" o DWM e usar Sakura ao invés do St:

# ln -s /usr/bin/sakura /usr/bin/st

Finalizando:

# exit

# cd /mnt

# umount -lR gentoo

# reboot

Agora veremos a pós-instalação.

Você também pode gostar