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.