Instalando Arch Linux no pendrive

No final do ano passado realizei a compra de um HP Proliant N40L [1] [2] [3], como passei quase 3 meses sem internet em casa e estava ansioso para botar para funcionar, resolvi instalar usando os conhecimentos e ferramentas que tinha em mãos (meu notebook, Arch Linux atualizado, um pendrive de 8gb San Cruzer, 2 discos adicionais e o NAS) naquele momento.

Desta resolvi instalar o Arch Linux em um PenDrive e montar um NAS/HTPC caseiro.
Escolhi instalar num pendrive para tentar economizar energia e fazer spindown nos discos caso necessário sem afetar o funcionamento do sistema.
Abaixo mostro um breve resumo do que fiz para deixar o Arch rodando a partir de um pendrive.

Primeiro tive que copiar a mbr existente do disco local (notebook) para o pendrive, isso evita problemas na instalação do grub.

# dd if=/dev/sda of=/dev/sdc bs=512 count=1

Em caso de dúvidas, ver este link e este outro.

Crie as partições /boot, swap e /.
Você pode criar mais partições como /var e /usr para melhorar a segurança caso ache necessário e se seu pendrive possuir espaço suficiente.

# cfdisk /dev/sdc

Formate as partições e ative a swap

# mkfs.ext4 -m 1 -L BOOT /dev/sdc1
# mkfs.ext4 -m 1 -L ROOT /dev/sdc3
# mkswap -L SWAP /dev/sdc2

# swapon /dev/sdc2

Crie os diretórios e monte as partições

# mount /dev/sdc3 /mnt/
# mkdir -p /mnt/boot
# mount /dev/sdc1 /mnt/boot/

# mkdir -m 0755 -p /mnt/{dev,run,etc}
# mkdir -m 1777 -p /mnt/tmp
# mkdir -m 0555 -p /mnt/{sys,proc}

# mount -t proc proc /mnt/proc -o nosuid,noexec,nodev
# mount -t sysfs sys /mnt/sys -o nosuid,noexec,nodev
# mount -t devtmpfs udev /mnt/dev -o mode=0755,nosuid
# mount -t devpts devpts /mnt/dev/pts -o mode=0620,gid=5,nosuid,noexec
# mount -t tmpfs shm /mnt/dev/shm -o mode=1777,nosuid,nodev
# mount -t tmpfs run /mnt/run -o nosuid,nodev,mode=0755
# mount -t tmpfs tmp /mnt/tmp -o mode=1777,strictatime,nodev,nosuid,size=50M

Crie as partições do pacman

# mkdir -m 0755 -p /mnt/var/{cache/pacman/pkg,lib/pacman,log}

Copie o sync do host para o pendrive

# cp -a /var/lib/pacman/sync/ /mnt/var/lib/pacman/

Instale o sistema e pacotes adicionais

# pacman -r /mnt/ -S base –ignore netcfg
# pacman -r /mnt/ -S grub-bios grub-common ntfs-3g fuse iptables vim arch-install-scripts wget mlocate screen

Copie as chaves do host para o pendrive

# cp -a /etc/pacman.d/gnupg /mnt/etc/pacman.d/

Monte o chroot

# cd /mnt/
# chroot /mnt/ /bin/bash

Gere e configure o fstab conforme o funcionamento do seu computador e identificação do device, neste caso, tenho 3 HDs, ajusto o fstab para pegar o UUID e adiciono mais um disco para ser a home do usuário no NAS caseiro.
Para pegar o UUID do disco, use o comando blkid.

# genfstab / >> /etc/fstab
# vim /etc/fstab

/proc                   /proc           proc            rw,nosuid,nodev,noexec,relatime                                 0 0
/sys                    /sys            sysfs           rw,nosuid,nodev,noexec,relatime                                 0 0
udev                    /dev            devtmpfs        rw,nosuid,relatime,size=3980200k,nr_inodes=995050,mode=755      0 0
devpts                  /dev/pts        devpts          rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000           0 0
shm                     /dev/shm        tmpfs           rw,nosuid,nodev,relatime                                        0 0
/run                    /run            tmpfs           rw,nosuid,nodev,relatime,mode=755                               0 0
/tmp                    /tmp            tmpfs           rw,nosuid,nodev,size=51200k                                     0 0

UUID="8ef1e29a-2330-40ff-a626-0dc212bdce69"             none            swap            defaults
UUID="f6d5e6a2-147a-4cd5-9254-7c5cb84099bc"             /               ext4            rw,relatime,data=ordered,noatime                        0 1
UUID="83e6cddd-a986-41e5-879e-162de68336a0"             /boot           ext4            rw,relatime,data=ordered,noatime,noexec,nosuid,nodev    0 2
UUID="413bda0e-1031-4ca8-9e9d-4d96962b4dcd"             /home           ext4            rw,relatime,data=ordered,noatime,noexec,nosuid,nodev    0 2

Agora continue com a instalação e configure a interface de rede.
Se for dhcp, faça:

# dhcpd eth0

Se for ip fixo, faça:

# ip addr add 192.168.1.12/24 dev eth0
# ip route add default via 192.168.1.1

Configure o resolv.config para usar o DNS do google

# vim /etc/resolv.conf

8.8.8.8
8.8.4.4

Agora inicialize as chaves e depois popule-as:

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

Configuração de rede

# vim /etc/hosts

127.0.0.1       archNAS.localdomain     archNAS

# vim /etc/hostname

archNAS

Configure o NETCFG:

Se você não instalou o netcfg, instale, atualmente é o padrão para configuração de rede no Arch e está incluso no grupo base.

# pacman -S netcfg
# cd /etc/network.d/
# cp examples/ethernet-iproute .

Copiado o exemplo, vamos mudar o nome do profile e editar.

# mv ethernet-iproute eth0
# vim eth0

CONNECTION='ethernet'
DESCRIPTION='A more versatile static ethernet connection using iproute'
INTERFACE='eth0'
IP='static'
# Any valid iproute command can be placed in this array
IPCFG=('addr add dev eth0 192.168.1.10/24 brd +' 'route add default via 192.168.1.1')
DNS=('192.168.1.1')

# vim /etc/conf.d/netcfg

Edite e identifique as interfaces de rede que são usadas no seu computador.
Mantenha AUTO_PROFILES padrão.

E em NETWORKS, tire o last e defina o profile “eth0” que foi criado.

Habilite o netcfg para iniciar no boot.

# systemctl enable netcfg
# systemctl start netcfg

Fontes do console e Keymap

# vim /etc/vconsole.conf

KEYMAP=br-abnt2
FONT=
FONT_MAP=
FONT_UNIMAP=

Configure as locales

# vim /etc/locale.gen

en_US.UTF-8 UTF-8
en_US ISO-8859-1
pt_BR.UTF-8 UTF-8
pt_BR ISO-8859-1

# locale -v > /etc/locale.conf

Ajuste o LC_ALL, caso ache necessário e coloque a locale usada no /etc/locale.conf.

LANG=pt_BR.UTF-8
LC_MESSAGES=C
LC_CTYPE="pt_BR.UTF-8"
LC_NUMERIC="pt_BR.UTF-8"
LC_TIME="pt_BR.UTF-8"
LC_COLLATE="pt_BR.UTF-8"
LC_MONETARY="pt_BR.UTF-8"
LC_MESSAGES="pt_BR.UTF-8"
LC_PAPER="pt_BR.UTF-8"
LC_NAME="pt_BR.UTF-8"
LC_ADDRESS="pt_BR.UTF-8"
LC_TELEPHONE="pt_BR.UTF-8"
LC_MEASUREMENT="pt_BR.UTF-8"
LC_IDENTIFICATION="pt_BR.UTF-8"
LC_ALL=pt_BR.UTF-8

# vim /etc/locale.conf
# locale-gen

Ajuste o localtime criando um link simbolico e o adjtime:

# ln -s /usr/share/zoneinfo/America/Maceio /etc/localtime
# vim /etc/timezone

America/Maceio

# adjtime

0.0 0.0 0.0
0
LOCAL

Configure os módulos que você precise para usar o sistema, neste caso vou usar iptables como firewall local e alguns serviços como samba, transmission, etc.

# vim /etc/modules-load.d/firewall.conf

ip_tables
nf_conntrack_netbios_ns
nf_conntrack

Caso queria bloquear algum módulo, crie o arquivo:

# vim /etc/modprobe.d/nobeep.config

blacklist pcspkr

Configurando algumas opções do KERNEL

# vim /etc/mkinitcpio.conf

HOOKS="base udev autodetect pata scsi sata filesystems usbinput fsck usb"

Adicione “usb” ao final pois você está instalando arch num pendrive, desta forma o sistema vai reconhecer os módulos da USB ao iniciar o sistema para bootar normalmente pelo pendrive.

OBS.: Depois de alguns updates no HOOKS “block” substitui pata, scsi, sata e usb, e “keyboard” substitui usbinput, ficando da seguinte forma:

HOOKS="base udev autodetect filesystems keyboard fsck block"

Descomente a linha do COMPRESSION referente ao xz

COMPRESSION="xz"

Agora atualize a imagem do kernel:

# mkinitcpio -p linux

Configurando algumas opções do GRUB

# vim /etc/default/grub
Descomente

GRUB_DISABLE_LINUX_UUID=false
GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

# grub-mkconfig -o /boot/grub/grub.cfg
# grub-install –recheck /dev/sdc

Instale o Microcode da AMD para não visualizar mensagens de error como:
microcode: failed to load file amd-ucode/microcode_amd.bin

# pacman -Sy amd-ucode

Defina a senha de root

# passwd

Adicione um usuário

# useradd -d /home/leandrocarvalho -k /etc/skel -m -s /bin/bash leandrocarvalho
# passwd leandrocarvalho

Defina multi-user.target como run level default (runlevel de 2-3) no lugar do graphics (runlevel 5), para não receber mensagens de warning no boot.

# systemctl enable multi-user.target

Saia do chroot e desmonte todas as partições:

# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/dev/pts
# umount /mnt/dev/shm
# umount /mnt/dev
# umount /mnt/run
# umount /mnt/tmp
# umount /mnt/boot/
# umount /mnt/

Agora, só botar para o pc iniciar pelo pendrive e “correr para o abraço”! 😀
Configuração dos serviços, hardening e otimização do filesystem no pendrive ficará para os próximos post.

5 comments

  1. Rafael disse:

    Show de bola Leandro! próxima tarefa a fazer aqui em casa e de certa forma economizar espaço no disco

  2. Collinslacker disse:

    Obrigado pelo post. Continue com seu trabalho com o ARCH, precisamos de pessoas esforçadas como vc pra que as coisas possam funcionar.

  3. Jose pedro de oliveira Junior disse:

    Leandro, tem como instalar o grub na MBR do pendrive? Por exemplo:

    # grub-install –target=i386-pc /dev/sdb (sendo sdb meu pendrive)

    não consigo instalar o grub2 no pendrive dá erro, ele só grava na MBR do HardDisk.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *