Configuração manual do ArchLinux (convidado do Virtualbox)

Pensei em compartilhar essa percepção repentina que tive depois de fazer algumas configurações do ArchLinux. Este fim de semana tive uma .vdifalha (dinâmica) e fiquei corrompido. Já que era uma dor recalcular os setores e como eu não tinha boot no disco (era um clone de outro dinâmico, complicando bastante e eu sou um n00b no que diz respeito aos formatos de disco (avançados), imaginei seria muito mais rápido começar tudo de novo. Pode conter algumas dicas úteis para qualquer pessoa que esteja fazendo uma configuração semelhante.

Como você pode ou não saber, o Arch tem um ótimo wiki que contém muitas informações de qualidade sobre muitas das etapas que devo seguir. Sua máquina / hardware / configuração / preferências podem muito bem diferir, então pegue o que você precisa e pesquise o resto.

A propósito, o Arch ISO vem com o zsh 🙂

Primeiros passos:

pacman -Syy
pacman
-S vim

Visto que o ‘disco’ está realmente armazenado na RAM, mantenha o software instalado neste ponto ao mínimo necessário. Vim vai acelerar bastante o processo (ou Emacs, mas tendem a encontrar nanomaneira underqualified para o trabalho. Eu quero copiar linhas, fazer edições multi-line e muito mais. Eu nem sequer se preocuparam em ir ~/.vimrce set nocompatible, neste ponto, uma vez que são dados temporários de qualquer maneira. Em seguida, normalmente vou formatar meus discos. Gosto de dispersar fortemente meus dados nas principais pastas de nível superior FSH. Eu costumava usar gdiskpara isso, mas em vez disso, usaremos sgdiskagora.

vim 01
#/root/01 file (inside)
sgdisk
-Z /dev/sda
sgdisk
-a 4096 /dev/sda

Usei o vim para criar um arquivo chamado 01e dentro coloquei duas linhas (por enquanto, para explicar) e estas zeram o disco (disco virtual, usei um tamanho fixo desta vez 50G. A última linha define o formato avançado que são setores de 4096 bytes e que faz um uso mais eficiente do espaço em disco disponível. O dispositivo de bloco agora está pronto para ser particionado. Não vou digitar todos os bits das partições, mas o suficiente para ter uma ideia para você, as linhas a seguir o arquivo seria:/dev/sda01

sgdisk -n 1:0:+2M -t 1:ef02 -c 1:bios /dev/sda
sgdisk
-n 2:0:+200M -t 2:8300 -c 2:boot /dev/sda
sgdisk
-n 3:0:+3G -t 3:8300 -c 3:root /dev/sda
sgdisk
-n 4:0:+10G -t 4:8300 -c 4:usr /dev/sda
sgdisk
-n 5:0:+5G -t 5:8300 -c 5:usr_local /dev/sda
...
sgdisk
-n 9:0:13G -t 9:8300 -c 9:var
sgdisk
-n 10:0:0 -t 10:8200 -c 10:swap

Eu reservei 2Mno início do disco para o carregador de inicialização Grub para instalar o esquema GPT na lacuna pós-MBR posteriormente. O tipo é de bios bootou ef02. Use ef00se quiser usar no EFIlugar. Se você escrever uma vez e yy(arrancar) as linhas no vim, certifique-se de manter os números corretos, embora os comandos sejam executados na ordem consecutiva de (novo tamanho do disco, digite, depois nome), cada um deles precisa do número da partição (assim, pode-se criar um novo e em uma outra partição mudar o nome). O tamanho da troca irá ocupar qualquer espaço restante (então calcule os tamanhos das suas partições para que o resto sejan, t, c02x available RAM. Também gosto de trocar no final ou no início do disco para tempos de acesso mais rápidos em discos especialmente magnéticos, é claro.

Outra coisa a observar é que também gosto de manter minha usrpartição separada e isso exigirá algumas etapas adicionais mais tarde.

Saia do arquivo e execute o script com e a primeira etapa está concluída. Em seguida, crie um novo arquivo e escreva as informações do sistema de arquivos. Você poderia fazer algo assim:zsh 01vim 02

for i (${(A)=fslist::= 2 3 4 5 6 7 8}) cmd='mkfs.ext4 /dev/sda$i' && print ${(e)cmd}

mkswap
/dev/sda10
mkfs
.reiserfs -q /dev/sda9

Algumas notas. A primeira expressão é minha preguiça de digitar expressões mais elaboradas e longas. Tento ser sucinto no código e detalhado na documentação. Normalmente, esses forloops zsh abreviados não são a melhor prática e provavelmente devem ser feitos no próprio cli, não em scripts (uma vez que não é muito legível para começar). Você sempre pode fazer um trabalho seguir o adicionando um para colocar os comandos, mas isso é muuuuito curto, imaginei que não teria problema. A parte final avalia o comando preparado para fazer todos os sistemas de arquivos. Finalmente, os dois obstáculos estranhos são e o formato do sistema de arquivos, que é melhor e mais rápido para partições que têm muita E / S de disco (como logs, cache, tudo realmente) acontecendo.8}){ ... }ext4mkswapreiserfs/var

É hora de montar tudo. Abra um novo arquivo de script, por exemplo, 03e digite algo ao longo das linhas de:

mount /dev/sda3 /mnt
cd
/mnt
mkdir boot usr opt srv home
var
mount
/dev/sda2 boot
# /dev/sda3 is / and already mounted as such
mount
/dev/sda4 usr
# now, make the super-op owned local folder
# this allows to separate usr (root:root) and (sop:sop)
# which e.g. node.js loves and others too as you can
# freely write stuff to disk without root access
mkdir usr
/local
mount
/dev/sda5 usr/local
mount
/dev/sda6 opt
mount
/dev/sda7 srv
mount
/dev/sda8 home
mount
/dev/sda9 var
swapon
/dev/sda10

Legal, tudo montado agora para que possamos começar a inicializar o ArchLinux e qualquer software adicional que quisermos. Minha lista inicial dos aplicativos mais preferidos e necessários no início é algo como abaixo e, claro, eu crio outro arquivo 04agora e executo depois:

pacstrap /mnt base base-devel linux-headers dkms zsh sudo tree htop vim dfc git xorg-server xorg-xauth xorg-xhost net-tools dnsutils grub wget httpie elinks virtualbox-guest-utils virtualbox-guest-dkms jshon

Os últimos garante entrada que e entre outros são instalados como são dependências do pacote utils. Além disso, antes de executar isso, você pode querer verificar e modificar e mover um servidor perto de você (se for um espelho confiável, alguns tendem a atrasar ou ficar inativos ocasionalmente) para o topo da lista. Também é por isso que os elinks e algumas ferramentas de rede estão presentes na minha lista, para verificar o status do servidor e se necessário fazer o download manualmente através do link do arch linux ../<grupo>/<pacote>/download que sempre resolve um servidor funcionando para fornecer tarball ou makepkg PKGBUILD. O pacote é uma dependência de um bom envoltório bash para download de software (repositório do usuário do arch). Você terá que obter esse usando, por exemplo, elinks ou wget e, em seguida, no arquivo.virtualbox-guest-modulesxorg-xrandr/etc/pacman.d/mirrorlistjshonpacker-gitaurmakepkgPKGBUILD

Em seguida, é hora de gerar o arquivo na instalação do novo root. Isso conterá as informações do disco que acabamos de criar por todas as etapas anteriores e nos permitirá inicializar o chroot com mais facilidade depois de concluído./etc/fstab

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

Isso grava nossas opções de partição e montagem de disco no local apropriado usando o GUID , ao contrário do formato de disco potencialmente sequestrado por discos anteriores . Eu geralmente edito isso imediatamente e, por exemplo, para ajustar o desempenho e a velocidade, defina várias montagens para:/dev/sdaN

noatime
noexec
,nosuid,nodev

para aqueles que podem lidar com isso. Não vou fornecer muitos detalhes aqui, pois a) sua segurança eb) muito pode dar errado, então você está sozinho aí. Por fim, garanto que o nosso está funcionando com metade da RAM padrão, mas pode ser ajustado, é claro./tmptmpfs

Legal. É hora de fazer o chroot. Mas antes de fazer isso, você pode querer manter seus novos scripts para uso na próxima vez e ser capaz de criar uma nova instalação mais rapidamente:

cd && cp 0* install.txt /mnt/root/
arch
-chroot /mnt /usr/bin/zsh

A última linha na verdade fará o chroot usando zshem oposição ao regular, bashuma vez que é definida como a $SHELLvariável de ambiente. Faça um rápido se você deseja persistir através da inicialização.chsh -s /usr/bin/zsh root

As opções a seguir são mais ou menos pessoais e localizadas, mas para fins de integridade, irei referenciá-las de qualquer maneira – ajuste conforme necessário, obviamente:

print 'localhost' >> /etc/hostname

ln
-s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime

# stream editor in-place edit of only matched locales without pound in column 1
sed
-i -n -r 's/#((en_US|nl_NL).UTF-8)/1/p' /etc/locale.gen

# create language files (removes the not used)
locale
-gen

cat
<<-eos > /etc/locale.conf
LANG
=en_US.UTF-8
LC_COLLATE
=C
eos


cat
<<-eos > /etc/vconsole.conf
KEYMAP
=us
kbdrate
-d 200 -r 30
eos

A vantagem das 2 últimas formas é que é muito conveniente escrever arquivos de várias linhas do console desta forma, já que o catdoc (uma forma de heredoc) continuará criando novas linhas até encontrar o valor de fim da string eos. Isso é igualmente útil em scripts.

Aliás, esqueci e gosto de usá-lo às vezes para ler alguns passos como referência. Normalmente, excluo a maioria das linhas e economizo, já que odeio rolar em um console serial e, dessa forma, posso usá-lo para controlar meus passos ou construir um script a partir dele, se necessário. Use como quiser, apenas saiba que você sempre pode sair do chroot (como se eu tivesse que pegar o arquivo) por sinal e os arquivos ainda estarão lá (já que não reinicializamos, não é?) E, em seguida, copie tudo o que você precisar ou algo assim e chroot novamente usando . Apenas uma pequena indicação para novatos entre nós.install.txtCtrl-D/mnt/rootarch-chroot

Erh. Vamos ver. Agora vem uma parte muito importante, então preste atenção se você está acompanhando e também tem uma configuração de disco BIOS baseada em Grub separada porque você pode facilmente errar./usr

# it needs to find the 2M MBR although at /dev/sda1
grub
-install /dev/sda #<--- use /dev/sda !!

Se tudo correr bem, você verá:

Installing for i386-platform.
Installation finished. No error reported.

Ok, agora temos uma configuração adequada do carregador de inicialização do BIOS para o nosso disco. Eu não uso nenhum dos outros, então não posso fornecer instruções sobre eles, mas o Arch tem artigos wiki muito bem escritos (novamente, me repetindo), então certifique-se de dar uma olhada.

Uma das coisas que gosto de fazer no início é garantir que meus módulos de convidado do Virtualbox sejam carregados corretamente. Então, mais uma vez, o lendário catdoc é utilizado:

cat <<-eos > /etc/modules-load.d/virtualbox.conf
vboxguest

vboxsf

vboxvideo

eos

Isso garantirá o carregamento dos módulos do kernel no momento da inicialização. Mas, por enquanto, você não pode usar isso em um chroot ainda, então basta habilitar o serviço systemd na inicialização:

systemctl enable vboxservice

Uma vez que estes são todos (geralmente aqueles em ) até agora tudo bem. Uma vez que você configurar o seu super-operador (que provavelmente tem e associação de grupo), você vai querer ter o VirtualBox apoiar o seu gerenciador de desktop (que deve, desde que seu vídeo não iria funcionar sem) para que não se esqueça então fazer algo parecido :system-wide/etcwheelvboxuser

rm ~/.xinitrc
ln
-s ~/.xsession ~/.xinitrc
print '/usr/bin/VBoxClient-all' >> ~/.xinitrc

Eu faço isso (remoção de uma vez que está obsoleto e é o novo a ser usado. Embora essas mudanças normalmente sejam muito lentas no nível do sistema operacional * nix e dificilmente tenha qualquer impacto, além de muitas, muitas variantes de * nix por aí que utilização . de qualquer forma, hábito pessoal e muito dos meus dotfiles são simbolicamente aos meus dotfiles git qualquer maneira repositório.~/.xinitrc~/.xsessionxserver

Edite o initramfsarquivo de configuração do sistema de inicialização antecipada para
garantir que a partição / usr seja carregada ou a inicialização irá falhar. Use o vim ou qualquer outro editor e mude para isso (configurações mínimas, adicione outras conforme necessário / aplicável, por exemplo, ext2 ou btrfs etc)

MODULES="ext4 reiserfs"    
HOOKS
="base udev autodetect usr modconf block filesystems keyboard fsck shutdown"

Agora execute: para gerar os arquivos (ignore os avisos, eles acontecem somente no retorno e você não pode mesmo ter o hardware – uma vez que eles são avisos de firmware – em sua máquina: são e e estão atualmente emitindo avisos que eu não gostam, mas são um fato da vida atm).mkinitcpio -p linuxaic94xxsmsmdtv

Se todas as outras saídas (e especialmente na primeira entrada do carregador de boot principal) parecerem ok, é hora de gerar as entradas do carregador de boot Grub:

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

Eu poderia ter definido mais algumas opções de linha do kernel no arquivo, mas realmente não é necessário já que não hiberno uma máquina virtual como esta, então não é necessário e, embora possa parecer que o Arch ainda está usando o antigo , este é na verdade apenas o systemd rodando como uma máscara. Já que posso usar tudo de e não me importo. Certifique-se de verificar pelo menos algo como se você é um otimizador fanático por velocidade ou deseja ser um, já que ele dirá quais serviços demoram mais para inicializar de forma assíncrona./etc/default/grubresume=sysinitsystemctljournalctlsystemd-analyze blame

Uma dica / ponteiro final ou a partição de inicialização do grub. Gosto de montar a partição para proteção adicional. Você pode querer fazer uma função de wrapper nesse caso que garanta que um seja executado antes que quaisquer alterações sejam feitas. Estas são quaisquer atualizações para um Linux (já que a imagem initramfs tem que ser gravada nessa partição, assim como o arquivo, mas também o nosso arquivo recém-gerado vai precisar. Caso contrário, você pode acabar fazendo uma atualização de vez em quando e depois falhando devido a essas atualizações / changes não pode ser persistido. Tendo feito isso, uma ferramenta e comando se tornam legais também (ele irá avisá-lo se algo mudou em / boot – um pouco como uma ferramenta anti-malfeita)./bootromount -o rw,remount /dev/sda2/bootvmlinuz-linuxgrub-mkconfigckboot-init

Agora que estamos quase prontos, ele mostra que precisaremos de uma senha para o root, então faça algo como e preencha-a. Além disso, você vai querer ter um usuário super-op ao qual eu gosto de dar permissões baseadas em grupo . Algo como:install.txtpasswdvisudo%wheel

useradd -m -G floppy,optical,storage,power,network,video,scanner,disk,log,wheel,systemd-journal <sop-name>

e, posteriormente, defina o também.passwd <sop-name>

Além disso, seria ótimo configurar manualmente sua rede (estático, desabilitar ipv6 possivelmente – o que eu costumo fazer) ou, se não estiver familiarizado, apenas habilite o serviço:

systemctl enabled dhcpcd

e você vai ficar bem. Por fim, sempre configuro o autologin do vconsole do systemd para meu superusuário, para não precisar digitar a senha para fazer o login. Ou você pode querer inicializar em um gerenciador de janelas gráfico mais tarde, você escolhe.

Saia do chroot e desmonte todos os discos: Ctrl-De umount -R /mnt. Então reboot. Desligue a máquina virtual e altere a ordem de inicialização dos discos, possivelmente, faça com que o HDD seja o primeiro e o CDROM / DVD (ISO) o segundo para ignorar a tela do grub bios da imagem do disco de configuração e usar aquele que acabamos de instalar /bootou /dev/sda2.

Claro que sempre se poderia ter usado um Docker ou Virtualbox ou Vagrant box pré-construídos … mas qual seria a diversão nisso? 🙂

Aproveite e tenha um bom aprendizado.