Como posso criar um ambiente de shell limpo para uso temporário?

15

Sou um respondente frequente em um site popular de Q & focado no Unix e, em muitas de minhas respostas, forneço exemplos usando o bash shell. No entanto, sempre que faço isso, tenho que percorrer manualmente o processo de criação de um ambiente limpo para garantir que todas as etapas sejam consideradas e documentadas. Como posso tornar este processo mais simples? Eu estou olhando idealmente para digitar um único comando e obter um ambiente limpo e ter todos os vestígios desse ambiente temporário removidos depois que eu terminar.

    
por Gilles 09.11.2012 / 14:34

2 respostas

10

Eu pessoalmente uso a seguinte função bash para fazer isso:

so() {
    local tmpdir="$(mktemp -d)"
    local tmprc="$(mktemp)"
    cat > "$tmprc" << EOF
PS1='\$ '
cd "$tmpdir"
EOF
    env - HOME="$HOME" TERM="$TERM" bash --rcfile "$tmprc"
    rm -rf "$tmpdir" "$tmprc"
}

Aqui está o que faz, por ordem:

  • Crie um diretório temporário (para usar como nosso diretório de trabalho no ambiente limpo);
  • Crie um arquivo temporário (para usar como nosso arquivo bash rc);
  • No arquivo rc, adicione linhas que:
    • Defina o prompt PS1 para o terminador de prompt, seguido de um espaço, que o mantém relevante caso desejemos ter uma cópia de nossa saída no site de perguntas e respostas;
    • Mude para o diretório temporário que criamos.
  • Invoque uma nova instância de bash , que:
    • Inicialmente, tem um ambiente vazio, exceto $HOME e $TERM ( env - ... );
    • Lê seu arquivo rc do arquivo temporário que criamos anteriormente ( --rcfile ).
  • Depois que o bash sair, remova os arquivos temporários que criamos.

Obviamente, isso não é totalmente infalível, ou seja, você ainda pode acessar outras partes do seu sistema. Isso, no entanto, fornece um ambiente temporário limpo que você pode usar para testes.

    
por 09.11.2012 / 14:34
2

chroot é unidirecional, usar uma VM é outra. Você poderia construir o ambiente chroot em um LV, fazer um instantâneo, fazer qualquer coisa e então reverter para o estado instantâneo.

Ou - faça o mesmo com a VM (instantâneo do disco) e reverta todas as alterações depois.

Eu geralmente faço isso com uma VM recém-instalada (usando o VirtualBox e o kickstart ou o autoyast com o PXE-boot).

    
por 09.11.2012 / 22:37