Acontece que estou tentando criar uma distribuição portátil enquanto me preparo para qualquer tipo de falha de hardware.
Estou criando (ou restaurando) uma distribuição Debian por multistrap (ou de meus backups) e exigindo que o disco resultante seja inicializável em um novo hardware (principalmente compatível), incluindo uma máquina VirtualBox .
Como perguntei antes , uma das poucas coisas necessárias para uma "distro portátil" é lidar com os nomes das interfaces de rede.
Por exemplo, na máquina real, o primeiro dispositivo ethernet é nomeado como enp2s0
e no VirtualBox, é nomeado como enp0s3
. Como devo gerar um /etc/network/interfaces
arquivo na inicialização?
Existe uma maneira mais genérica de remapear os nomes da interface de rede (por links simbólicos, talvez) e permitir que cada aplicativo use esses nomes (os nomes das funções) sem a necessidade de conhecer os nomes reais da interface de rede do hardware subjacente?
Existem várias maneiras de você resolver isso.
A maneira mais familiar provavelmente seria desabilitar o novo esquema de nomenclatura da interface de rede usando a opção boot
net.ifnames=0
, ou substituindo/lib/systemd/network/99-default.link
comln -s /dev/null /etc/systemd/network/99-default.link
, ou mascarando o arquivo de regras udev que realmente implementa os nomes de novo estilo comln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
... veja o Debian Wiki para mais informações sobre várias maneiras de reverter para o esquema de nomenclatura clássico. Então você pode reescrever o seu/etc/network/interfaces
para usar apenaseth0
.A maneira mais flexível provavelmente seria parar de usar estático
/etc/network/interfaces
e mudar para o NetworkManager. Ele será automaticamente padronizado para usar DHCP em uma interface de rede que tenha um link ativo, se não houver mais configuração. Isso lidaria automaticamente com os casos em que você tem várias NICs, mas apenas uma (não necessariamente a primeira) está realmente conectada.Ou você pode fazer suas próprias coisas, escrevendo um script personalizado que lerá
ip link show
a saída (ou os links em/sys/class/network
) e reescreverá/etc/network/interfaces
(ou qualquer que seja o arquivo de configuração de rede real) para se adequar. Então você pode adicionar o script como um serviço systemd comWants=network-pre.target
,Before=network-pre.target
eAfter=module-init-tools.service
provavelmenteDefaultDependencies=no
. Isso deve permitir que o script seja executado como parte da configuração inicial do sistema, após todos os módulos terem sido carregados, mas antes do início da configuração da rede.