Você pode configurar aufs na partição raiz e ter a imagem original somente para leitura e todas as alterações são armazenadas na RAM . Dessa forma, os alunos podem fazer as alterações desejadas (mesmo como root), depois de uma reinicialização, um estado de sistema limpo e bem definido é restaurado.
Eu fiz exatamente essa configuração usando o Debian, mas o mesmo deve ser possível sem muita modificação no Fedora também. Como os clientes estavam executando sem disco, usei a inicialização PXE. Aqui estão os passos básicos, as instruções são tomadas principalmente de Inicialização sem disco Debian Debian via dhcp / pxe / nfs / tftp / aufs e Instalando o Debian usando a inicialização pela rede .
O servidor de inicialização PXE tem o endereço IP 192.168.1.10 e também serve como TFTP e servidor NFS. Ele usa aufs e o sistema de arquivos raiz é montado somente para leitura. Vencimento para os aufs os clientes têm acesso de gravação. Todas as alterações residem na memória e são limpou a reinicialização.
Instalar os pacotes necessários
apt-get install isc-dhcp-server tftp-hpa nfs-kernel-server debootstrap syslinux
Configurar o servidor DHCP para exibir uma imagem de inicialização do PXE
cat >/etc/dhcp/dhcpd.conf <<EOF
next-server 192.168.1.10; # address of the TFTP server
allow bootp;
allow booting;
subnet 192.168.1.0 netmask 255.255.255.0 {
# clients get a dynamic IP address
range dynamic-bootp 192.168.1.20 192.168.1.254;
filename "pxelinux.0";
option domain-name-servers 192.168.0.10;
option broadcast-address 192.168.1.255;
option routers 192.168.0.10;
}
EOF
Isso configura o DHCP para usar o servidor TFTP no endereço 192.168.1.10
e carregar a imagem de inicialização do PXE pxelinux.0
.
Configurar servidor TFTP
mkdir /srv/tftp
Configurar o servidor NFS.
O sistema de arquivos raiz é montado somente para leitura via NFS.
mkdir /srv/nfsroot
cat >/etc/exports <<EOF
/srv/nfsroot 192.168.1.10/24(ro,no_root_squash,no_subtree_check)
EOF
Preencher o diretório NFS com uma instalação Debian
debootstrap stable /srv/nfsroot <mirror>
# e.g.
debootstrap stable /srv/nfsroot \
http://ftp.sunet.se/pub/Linux/distributions/debian/
Instale as ferramentas kernel e initramfs:
chroot /srv/nfsroot apt-get update
chroot /srv/nfsroot apt-get install initramfs-tools linux-image-amd64
Configure o initramfs para gerar initrds de inicialização do NFS:
sed 's/BOOT=local/BOOT=nfs/' \
-i /srv/nfsroot/etc/initramfs-tools/initramfs.conf
Carregue o módulo aufs
:
echo aufs >> /srv/nfsroot/etc/initramfs-tools/modules
Configure aufs
:
cat >/srv/nfsroot/etc/initramfs-tools/scripts/init-bottom/aufs <<EOF
modprobe aufs
mkdir /ro /rw /aufs
mount -t tmpfs tmpfs /rw -o noatime,mode=0755
mount --move $rootmnt /ro
mount -t aufs aufs /aufs -o noatime,dirs=/rw:/ro=ro
mkdir -p /aufs/rw /aufs/ro
mount --move /ro /aufs/ro
mount --move /rw /aufs/rw
mount --move /aufs /root
exit 0
EOF
Torne o arquivo executável:
chmod +x /srv/nfsroot/etc/initramfs-tools/scripts/init-bottom/aufs
Gerar initrd:
chroot /srv/nfsroot update-initramfs -k $(uname -r) -u
Cuidado se o kernel do host e o chroot não coincidem. Substituir
$(uname -r)
com o kernel correto, se necessário.
Copie o initrd, a imagem do kernel e o carregador de inicialização PXE para a raiz TFTP e criar pasta para configuração do PXE:
cp /srv/nfsroot/boot/initrd.img-* /srv/tftp/
cp /srv/nfsroot/boot/vmlinuz-* /srv/tftp/
cp /usr/lib/syslinux/pxelinux.0 /srv/tftp/
mkdir /srv/tftp/pxelinux.cfg
O arquivo pxelinux.0
é o programa de boot do PXELINUX.
Configurar o carregador de boot:
cat >/srv/tftp/pxelinux.cfg/default <<EOF
default Debian
prompt 1
timeout 10
label Debian
kernel vmlinuz-2.6.32-5-amd64 # <- use correct version!
append ro initrd=initrd.img-2.6.32-5-amd64 root=/dev/nfs ip=dhcp
nfsroot=192.168.1.10:/srv/nfsroot
EOF
Alterar senha de root
chroot /srv/nfsroot passwd root
Reiniciar serviços
invoke-rc.d isc-dhcp-server restart
invoke-rc.d tftpd-hpa restart
exportfs -ra