Nuvem Oracle: transformando ubuntu 20.04 em gentoo

A nuvem Oracle oferece alguns recursos totalmente gratuitos. Em particular, você pode obter 2 máquinas virtuais gratuitamente. Ao criar uma máquina, você pode escolher entre centos, Ubuntu ou oracle linux. Dados os recursos limitados da máquina virtual, gostaria de saber se o gentoo poderia ser usado nesta máquina.



A documentação do gentoo descreve como você pode transformar qualquer Linux em gentoo na hora. Infelizmente, a instrução foi atualizada pela última vez em 2014 e se você aplicá-la diretamente, provavelmente terá problemas. Porém, no github você pode encontrar um script que, segundo o autor, pode transformar automaticamente qualquer Linux em gentoo. O script não é atualizado há muito tempo, mas após pequenas alterações ele funcionou como deveria. O autor do script original decidiu não aplicar minha solicitação de pull, mas modificou seu script com base em minhas sugestões. Minha versão do script pode ser encontrada aqui .



Então, vamos seguir em frente e transformar o ubuntu 20.04 em gentoo. Para fazer isso, crie uma máquina virtual usando a imagem mínima do ubuntu 20.04 e faça login como um usuário do ubuntu. Depois disso, mude para o usuário root:



sudo -i
      
      





Mude para o modo de usuário único:



systemctl rescue
      
      





Em condições normais, a rede cai. Isso não acontece na nuvem oracle, mas o processo resolvido pelo systemd termina e, como resultado, o dns para de funcionar. Vamos consertar:



rm /etc/resolv.conf && echo 'nameserver 8.8.8.8' >/etc/resolv.conf
      
      





Agora você pode executar o script de migração e ir tomar um chá, vai demorar um pouco:



wget -qO- https://raw.githubusercontent.com/kt97679/to-gentoo/master/to-gentoo|bash
      
      





Quando o script for concluído, ele solicitará que você reinicie. Antes de fazer isso, você precisa ter certeza de não perder o acesso root após uma reinicialização. Para fazer isso, você precisa permitir o acesso root via ssh:



sed -i -e '/^PermitRootLogin.*/d' /etc/ssh/sshd_config && echo -e "\nPermitRootLogin without-password" >>/etc/ssh/sshd_config
      
      





E corrija o arquivo /root/.ssh/authorized_keys:



sed -i -e 's/.*\(ssh-rsa.*\)/\1/' /root/.ssh/authorized_keys
      
      





Agora você pode reiniciar, mas o comando reboot não ajudará, então vamos trazer um pouco de artilharia pesada:



sync && echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger
      
      





A máquina é reinicializada e após alguns minutos você será capaz de efetuar login através do ssh como root. Você está em um ambiente gentoo, mas ainda está usando o kernel antigo e o initrd. Vamos consertar isso.



Vamos habilitar o swap, sem ele você não terá memória suficiente para compilar um novo kernel.



fallocate -l2G /var/tmp/swap && chmod 0600 /var/tmp/swap && mkswap /var/tmp/swap && swapon /var/tmp/swap
      
      





Não pretendo usar o systemd nesta máquina, então eu mascarei e udev:



echo -e 'sys-apps/systemd\nsys-fs/udev'> /etc/portage/package.mask/systemd
      
      





Depois disso, você pode instalar os pacotes necessários para compilar o kernel:



emerge gentoo-sources app-arch/lz4
      
      





Agora você pode ir para o diretório com as fontes do kernel,



cd /usr/src/linux
      
      





gerar uma nova configuração de kernel usando a configuração de kernel carregada,



yes ""|make oldconfig
      
      





e deixe na configuração apenas os módulos que estão sendo usados.



yes ""|make localmodconfig
      
      





Eu planejo não usar initrd nesta máquina, então todos os módulos serão compilados no kernel:



yes ""|make localyesconfig
      
      





Começamos a compilar e instalar o kernel:



make && make INSTALL_MOD_STRIP=1 modules_install && make install
      
      





Nossa máquina é muito fraca, então esse processo demorará muito. Quando a compilação terminar, você precisa atualizar a configuração do carregador de inicialização. Eu adicionei opções de kernel que foram usadas no ubuntu original.



cat >/boot/grub/grub.cfg <<EOF
set timeout=1
menuentry 'gentoo' {
  linux $(ls -t /boot/vmlinuz-*|head -n1) root=/dev/sda1 console=tty1 console=ttyS0 nvme.shutdown_timeout=10 libiscsi.debug_libiscsi_eh=1
}
EOF
      
      





Faz sentido permitir o login no console serial se houver problemas de rede:



sed -i -e 's/^#\(.*ttyS0.*\)/\1/' /etc/inittab
      
      





Saiu um pouco. Após a reinicialização, a interface de rede não será nomeada ens3, mas eth0. É necessário remover o script de inicialização da interface antiga e adicionar a inicialização da nova:



cd /etc/init.d && rm net.ens3 && ln -s net.lo net.eth0
      
      





Se você precisar fazer login por meio do console serial, será necessário definir uma senha para o usuário root:



passwd
      
      





Tudo está pronto, você pode reiniciar.



Se após a reinicialização você não conseguir entrar na máquina via ssh, crie uma conexão de console e use-a para depuração.



Agora você tem uma instalação básica do gentoo que pode ser modificada para atender às suas necessidades. Existem artefatos deixados no sistema do ubuntu original. Eles não são mais necessários e podem ser removidos. Os scripts com comandos de migração podem ser encontrados aqui .



All Articles