Anúncios

DonkeyMails.com: No Minimum Payout

sábado, 16 de abril de 2011

Migração Linux - parte 5: Script de configuração do sistema

Boas pessoal! Finalmente estou de volta!

Gostaria de começar este post me desculpando por ficar mais de uma semana sem adicionar algo novo a este blog. Como de costume, quando tive tempo, acabei não conseguindo escrever algo para trazer para cá.

Desta vez, como citado no título da postagem, irei tratar da parte "final" da migração do laboratório de informática (da escola onde faço estágio) para o Ubuntu Linux: o script de configuração do sistema (também responsável pela instalação de softwares adicionais).

Devido as necessidades que se apresentavam no momento de sua criação, ele possui as seguintes funções:
  • Criar os usuários do sistema;
  • Fazer backup dos arquivos que serão alterados;
  • Configurar a conexão com a rede (ip fixo, dns etc);
  • Configurar os repositórios;
  • Configurar o Grub;
  • Configurar o SSH;
  • Alterar o "/etc/rc.local/" para que restaure a área de trabalho dos usuários;
  • Instalar softwares adicionais;
  • Configurar bloqueios a sites impróprios.
Com isso em mente, tratarei de cada parte em separado e depois deixarei um exemplo completo, que poderá ser alterado à vontade!

Neste post serão citados vários arquivos que não estão aqui representados, então, links para download dos mesmos estarão disponíveis conforme eles forem mencionados.

Indo direto ao assunto...

Back-ups
Como serão feitas alterações em arquivos de aplicações de extrema importância para o sistema, é sempre bom manter uma cópia dos mesmos em seu estado antes das modificações, então:
 echo "Efetuando backups de segurança..."
mkdir /home/[meuUsuario]/backups/
cp /etc/apt/sources.list /home/
[meuUsuario]/backups/
cp /etc/resolv.conf /home/
[meuUsuario]/backups/
cp /etc/default/grub /home/
[meuUsuario]/backups/
cp /etc/grub.d/00_header /home/
[meuUsuario]/backups/
cp /etc/grub.d/10_linux /home/
[meuUsuario]/backups/
cp /etc/network/interfaces /home/
[meuUsuario]/backups/
cp /etc/rc.local /home/
[meuUsuario]/backups/
echo "Os back-ups foram salvos dentro de \"/home/
[meuUsuario]/backups/\"!!!"
Neste caso, eu simplesmente crio uma pasta chamada "backups" dentro do "home" do meu usuário (meuUsuario) e copio para lá todos os arquivos que sofrerão alguma mudança durante a execução do script. Caso haja algum problema, basta restaurar o "original".

Criação dos usuários do sistema
 echo "Criando grupos e usuários do sistema..."
addgroup professores
useradd -m -p '[hashMD5DaSenhaDoUsuarioEntreAspasSImples]' Professores -g professores
addgroup alunos
useradd -m -p '[hashMD5DaSenhaDoUsuarioEntreAspasSimples]' Alunos -g alunos
Aqui eu só estou criando dois usuários, "Alunos" e "Professores", inseridos em dois grupos também criados. É importante citar que estou passando uma senha criptografada em MD5. Para gerar o hash MD5 da senha basta executar no terminal:
 echo minhaSenha | mkpasswd -s -H md5

Configuração da conexão com a rede
 echo "Configurando a rede..."
# Como cada PC terá um IP diferente, eu informo na hora o que será utilizado.
read -p "Informe o ip desejado: " varip
echo "O ip escolhido foi \"$varip\"!!!"
# Em seguida, reescrevo o arquivo /etc/network/interfaces, onde são configuradas
# as interfaces de rede. Defino o ip como fixo e um gateway e um servidor DNS
# específicos.
echo "auto lo\niface lo inet loopback\n\nauto eth0\niface eth0 inet static\naddress $varip\nnetmask 255.255.255.0\ngateway 192.168.xx.xx\ndns-provider 192.168.xx.xx" > /etc/network/interfaces
# Por fim, reinicio o serviço de rede.
/etc/init.d/networking restart
Assim como comentei nos trechos, eu (na realidade o script) pergunto o IP desejado e reescrevo o arquivo "/etc/network/interfaces", definindo IP (informado anteriormente) como fixo, o gateway a ser utilizado e o servidor DNS (name server). Se a interface relativa a sua placa de rede não estiver sendo identificada como "eth0", será necessário alterar o script, colocando a identificação correta.

Configuração dos repositórios
 echo "Configurando o Apt e o Aptitude..."
cp recursos/sources.list /etc/apt/sources.list
apt-get update
aptitude update
sudo wget http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list --output-document=/etc/apt/sources.list.d/medibuntu.list
echo "Fazendo backup de medibuntu.list em \"/home/[meuUsuario]/backups\"..."
cp /etc/apt/sources.list.d/medibuntu.list /home/[meuUsuario]/backups/
cp recursos/medibuntu.list /etc/apt/sources.list.d/medibuntu.list
sudo apt-get -q update
#sudo apt-get -q update
sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring
Primeiramente, eu faria alterações no arquivo "/etc/apt/sources.list", mas, como ele tem bastante conteúdo (muitas das linhas comentadas, as quais não removo para o caso de "virem a necessárias"), preferi apenas substituí-lo por um já "configurado".
Já que faço uso de um servidor Apt-cacher, a configuração do arquivo em questão deverá ser feita como mencionado na parte 4 desta "migração", ou seja, você deverá direcionar os repositórios para o servidor Apt-cacher da rede. Para fazê-lo, basta apenas alterar as entradas presentes do seguinte modo (reforçando que deverá ser feito com todas):
 #Substituir:
deb http://br.archive.ubuntu.com/ubuntu/ lucid main restricted
#Por:
deb http://[IPDoServidorApt-Cacher]:3142/br.archive.ubuntu.com/ubuntu/ lucid main restricted
Para facilitar, estou disponibilizando aqui uma cópia de meu arquivo (no qual se faz necessário apenas informar o IP do servidor Apt-Cacher, e que já tem o repositório "partner" adicionado, o qual é de extrema importância para eventos mais a frente).
Ainda na configuração dos repositórios, eu os atualizo e adiciono o Medibuntu, baixando o arquivo com a indicação para o mesmo dentro de "/etc/apt/sources.list.d/", com o nome de "medibuntu.list". Como eu também uso o servidor Apt-cacher para ele, apesar de o arquivo só ter umas poucas linhas, eu faço o mesmo que com o "sources.list", substituindo-o por um arquivo já configurado.
De qualquer maneira, a alteração que se faria necessária seria igual a do caso do "sources.list", citada acima. Da mesma forma disponibilizo para download meu arquivo "medibuntu.list" aqui, onde falta apenas informar o IP do servidor Apt-cacher.
Em sequência a isso, apenas atualizo novamente os repositórios e, digamos... "libero" o Medibuntu.

Configuração do Grub, protegendo as entradas do modo de recuperação com senha
 echo "Configurando GRUB2..."
echo "cat << EOF\nset superusers=\"nomeDoSuperUsuario\"\npassword_pbkdf2 nomeDoSuperUsuario senhaCriptografadaDoSuperUsuario\nEOF" >> /etc/grub.d/00_header
cp recursos/10_linux /etc/grub.d/10_linux
update-grub
Na segunda linha, eu adiciono ao fim do arquivo "/etc/grub.d/00_header" as definições de usuário e senha do Grub. Na terceira, substituo o arquivo "/etc/grub.d/10_linux" por um idêntico (disponível aqui), mas com as alterações necessária já efetuadas (para saber que alterações são essas, leia este post, que ensina a proteger o modo de recuperação do Grub 2 com senha). Na quarta, eu simplesmente executo o comando "update-grub" que fará com que as alterações entrem em vigor.

Configuração do SSH
Na parte que segue, eu habilito apenas o usuário com privilégios administrativos (criado durante a instalação do sistema) e o usuário "Professores" a se conectarem através do ssh (adicionando, ao fim do arquivo "/etc/ssh/sshd_config", a linha "AllowUsers ...") e reinicio o seviço :
 echo "Configurando ssh..."
echo "\nAllowUsers meuUsuarioAdministrativo Professores" >> /etc/ssh/sshd_config
/etc/init.d/ssh restart

Restauração da área de trabalho dos usuários
 echo "Configurando rc.local..."
cp recursos/rc.local /etc/rc.local
Eu basicamente substituo o arquivo "/etc/rc.local" por outro já alterado (disponível aqui), que executa os seguintes comandos:
 rm -fr /home/Professores/.gconf /home/Professores/.gconfd /home/Professores/.gnome2
rm -fr /home/Alunos/.gconf /home/Alunos/.gconfd /home/Alunos/.gnome2
Ele apaga os diretórios que contem os arquivos de configuração do gnome de cada usuário. Como o script "rc.local" é executado a cada mudança de run level (normalmente só ocorrerão durante a inicialização e encerramento do sistema), quando um usuário fizer uma alteração em sua área de trabalho (papel de parede, tema etc) e reiniciar o computador, ao tentar fazer log in, o sistema não encontrará os arquivos de configuração do gnome e os recriará, porem em sua forma padrão.
Isto pode ser visto como uma "gambiarra" (a mãe das invenções), mas é plenamente funcional!

Instalação de softwares adicionais
 echo "Instalando programas..."
echo "Removendo Empathy..."
apt-get remove empathy -y
echo "Removendo Gwibber"
apt-get remove gwibber -y
echo "Instalando rar..."
apt-get install rar -y --install-recommends
echo "Instalando unrar..."
apt-get install unrar -y --install-recommends
echo "Instalando g++.."
apt-get install g++ -y --install-recommends
echo "Instalando JRE"
apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts -y --install-recommends
echo "Instalando Java Development Kit..."
apt-get install sun-java6-jdk -y --install-recommends
# Caso não seja encontrado automaticamente pelo Netbeans,
# encontra-se em "/usr/share/doc/openjdk-6-doc"
echo "Instalando Javadocs (do OpenJDK)"
apt-get install openjdk-6-doc -y --install-recommends
echo "Instalando codecs..."
apt-get install -y --force-yes w32codecs libdvdcss2 ubuntu-restricted-extras
echo "Instalando GIMP..."
apt-get install gimp -y --install-recommends
echo "Instalando Blender..."
apt-get install blender -y --install-recommends
echo "Instalando Code::Blocks.."
apt-get install codeblocks -y --install-recommends
echo "Instalando o libgtk2.0-dev"
#aptitude install libgtk2.0-dev
apt-get install libgtk2.0-dev -y --install-recommends
echo "Instalando Lazarus IDE..."
#aptitude install lazarus
apt-get install lazarus -y --install-recommends
echo "Instalando KTurtle..."
apt-get install kturtle -y --install-recommends
echo "Instalando Ambiente de Desenvolvimento Web Quanta Plus..."
apt-get install quanta kxsldbg-kde3 kimagemapeditor-kde3 khelpcenter -y --install-recommends
echo "Instalando TuxMath..."
apt-get install tuxmath -y --install-recommends
echo "Instalando TuxPaint..."
apt-get install tuxpaint -y --install-recommends
echo "Instalando TuxTyping..."
apt-get install tuxtype -y --install-recommends
echo "Instalando KTouch..."
apt-get install ktouch -y --install-recommends
echo "Instalando KHangman..."
apt-get install khangman -y --install-recommends
echo "Instalando KBruch..."
apt-get install kbruch -y --install-recommends
echo "Instalando Kanagram..."
apt-get install kanagram -y --install-recommends
echo "Instalando Inkscape..."
apt-get install inkscape -y --install-recommends
echo "Instalando KolourPaint4..."
apt-get install kolourpaint4 -y --install-recommends
echo "Instalando Scribus..."
apt-get install scribus -y --install-recommends
echo "Instalando KTuberling"
apt-get install ktuberling -y --install-recommends
echo "Instalando lmemory..."
apt-get install lmemory -y --install-recommends
echo "Instalando Gnome Tetravex..."
apt-get install gnotravex -y --install-recommends
echo "Instalando Flash Player Plug-in..."
dpkg -i instalandores/install_flash_player_10_linux.deb
echo "Removendo versões anteriores do BrOffice/OpenOffice..."
apt-get remove openoffice* -y
echo "Instalando BrOffice 3.2.1..."
dpkg -i instaladores/broffice3.2.1/DEBS/*deb
dpkg -i instaladores/broffice3.2.1/DEBS/desktop-integration/*deb
echo "Instalando NetBeans 6.9.1"
chmod +x instaladores/netbeans-6.9.1-ml-linux.sh
sh instaladores/netbeans-6.9.1-ml-linux.sh
echo "Instalando Blender 2.56..."
cp -r instaladores/blender-2.56a-beta-linux-glibc27-i686 /usr/local/Blender
ln -s /usr/local/Blender/blender /usr/local/bin/blender
cp recursos/blender-2.56.desktop /usr/share/applications
chmod +x /usr/local/bin/blender
Bom, quanto a esta parte não tenho muito o que falar... Eu removo clientes de mensagens instantâneas para evitar que alunos fiquem acessando MSN ou coisas do gênero e instalo softwares que serão utilizados durante as aulas.
No fim desse trecho, percebe-se que alguns programas eu instalo localmente. Bom, o flash e o BrOffice, a princípio, foram apenas testes, mas acabaram ficando, no caso do NetBeans, eu só encontrava versões antigas dele nos repositórios e, no caso do Blender 2.56 (cujo atalho -"blender-2.56.desktop"- encontra-se aqui), é devido ao fato de só haver o 2.49b disponível nos repositórios.

Efetuar bloqueios a sites impróprios
 echo "Efetuando bloqueios a sites: configurando \"/etc/hosts\""
java -jar AlterarHostName.jar
Como podem ver, só é executado um arquivo ".jar", mas é ele que faz a mágica. Como não tenho experiência em Shell Script, resolvi fazer esta parte em Java, linguágem que tenho um conhecimento um pouco além do básico.
Tudo que esse arquivo faz é ler o arquivo "hosts" de uma outra máquina, que já estava com diversos sites bloqueados, alterar a linha onde se encontra o nome do outro computador, substituíndo pelo nome do atual e, por fim, reescrever o arquivo "/etc/hosts" desta última com tais informações.
Sei que poderia ter feito isso de um modo mais fácil, porem aproveitei para treinar um pouquinho de leitura e escrita de arquivos...
Os arquivos "hosts" e "AlterarHostName.jar" podem ser encontrados respectivamente aqui e aqui. O código fonte do "AlterarHostName.jar" eu disponibilizarei assim que possível, pois não o estou encontrando em lugar algum.

Script completo
Abaixo segue o Script completo:
 #! /bin/bash

echo "Efetuando backups de segurança..."
mkdir /home/[meuUsuario]/backups/
cp /etc/apt/sources.list /home/[meuUsuario]/backups/
cp /etc/resolv.conf /home/[meuUsuario]/backups/
cp /etc/default/grub /home/[meuUsuario]/backups/
cp /etc/grub.d/00_header /home/[meuUsuario]/backups/
cp /etc/grub.d/10_linux /home/[meuUsuario]/backups/
cp /etc/network/interfaces /home/[meuUsuario]/backups/
cp /etc/rc.local /home/[meuUsuario]/backups/
echo "Os back-ups foram salvos dentro de \"/home/[meuUsuario]/backups/\"!!!"

echo "Criando grupos e usuários do sistema..."
addgroup professores
useradd -m -p '[hashMD5DaSenhaDoUsuarioEntreAspasSImples]' Professores -g professores
addgroup alunos
useradd -m -p '[hashMD5DaSenhaDoUsuarioEntreAspasSimples]' Alunos -g alunos

echo "Configurando a rede..."
read -p "Informe o ip desejado: " varip
echo "O ip escolhido foi \"$varip\"!!!"
echo "auto lo\niface lo inet loopback\n\nauto eth0\niface eth0 inet static\naddress $varip\nnetmask 255.255.255.0\ngateway 192.168.xx.xx\ndns-provider 192.168.xx.xx" > /etc/network/interfaces
/etc/init.d/networking restart

echo "Configurando o Apt e o Aptitude..."
cp recursos/sources.list /etc/apt/sources.list
apt-get update
aptitude update
sudo wget http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list --output-document=/etc/apt/sources.list.d/medibuntu.list
echo "Fazendo backup de medibuntu.list em \"/home/[meuUsuario]/backups\"..."
cp /etc/apt/sources.list.d/medibuntu.list /home/[meuUsuario]/backups/
cp recursos/medibuntu.list /etc/apt/sources.list.d/medibuntu.list
sudo apt-get -q update
#sudo apt-get -q update
sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring

echo "Configurando GRUB2..."
echo "cat << EOF\nset superusers=\"nomeDoSuperUsuario\"\npassword_pbkdf2 nomeDoSuperUsuario senhaCriptografadaDoSuperUsuario\nEOF" >> /etc/grub.d/00_header
cp recursos/10_linux /etc/grub.d/10_linux
update-grub

echo "Configurando ssh..."
echo "\nAllowUsers meuUsuarioAdministrativo Professores" >> /etc/ssh/sshd_config
/etc/init.d/ssh restart

echo "Configurando rc.local..."
cp recursos/rc.local /etc/rc.local

echo "Iniciando script de instalação de programas..."
echo "Removendo Empathy..."
apt-get remove empathy -y
echo "Removendo Gwibber"
apt-get remove gwibber -y
echo "Instalando rar..."
apt-get install rar -y --install-recommends
echo "Instalando unrar..."
apt-get install unrar -y --install-recommends
echo "Instalando g++.."
apt-get install g++ -y --install-recommends
echo "Instalando JRE"
apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts -y --install-recommends
echo "Instalando Java Development Kit..."
apt-get install sun-java6-jdk -y --install-recommends
# Caso não seja encontrado automaticamente pelo Netbeans,
# encontra-se em "/usr/share/doc/openjdk-6-doc"
echo "Instalando Javadocs (do OpenJDK)"
apt-get install openjdk-6-doc -y --install-recommends
echo "Instalando codecs..."
apt-get install -y --force-yes w32codecs libdvdcss2 ubuntu-restricted-extras
echo "Instalando GIMP..."
apt-get install gimp -y --install-recommends
echo "Instalando Blender..."
apt-get install blender -y --install-recommends
echo "Instalando Code::Blocks.."
apt-get install codeblocks -y --install-recommends
echo "Instalando o libgtk2.0-dev"
#aptitude install libgtk2.0-dev
apt-get install libgtk2.0-dev -y --install-recommends
echo "Instalando Lazarus IDE..."
#aptitude install lazarus
apt-get install lazarus -y --install-recommends
echo "Instalando KTurtle..."
apt-get install kturtle -y --install-recommends
echo "Instalando Ambiente de Desenvolvimento Web Quanta Plus..."
apt-get install quanta kxsldbg-kde3 kimagemapeditor-kde3 khelpcenter -y --install-recommends
echo "Instalando TuxMath..."
apt-get install tuxmath -y --install-recommends
echo "Instalando TuxPaint..."
apt-get install tuxpaint -y --install-recommends
echo "Instalando TuxTyping..."
apt-get install tuxtype -y --install-recommends
echo "Instalando KTouch..."
apt-get install ktouch -y --install-recommends
echo "Instalando KHangman..."
apt-get install khangman -y --install-recommends
echo "Instalando KBruch..."
apt-get install kbruch -y --install-recommends
echo "Instalando Kanagram..."
apt-get install kanagram -y --install-recommends
echo "Instalando Inkscape..."
apt-get install inkscape -y --install-recommends
echo "Instalando KolourPaint4..."
apt-get install kolourpaint4 -y --install-recommends
echo "Instalando Scribus..."
apt-get install scribus -y --install-recommends
echo "Instalando KTuberling"
apt-get install ktuberling -y --install-recommends
echo "Instalando lmemory..."
apt-get install lmemory -y --install-recommends
echo "Instalando Gnome Tetravex..."
apt-get install gnotravex -y --install-recommends
echo "Instalando Flash Player Plug-in..."
dpkg -i instalandores/install_flash_player_10_linux.deb
echo "Removendo versões anteriores do BrOffice/OpenOffice..."
apt-get remove openoffice* -y
echo "Instalando BrOffice 3.2.1..."
dpkg -i instaladores/broffice3.2.1/DEBS/*deb
dpkg -i instaladores/broffice3.2.1/DEBS/desktop-integration/*deb
echo "Instalando NetBeans 6.9.1"
chmod +x instaladores/netbeans-6.9.1-ml-linux.sh
sh instaladores/netbeans-6.9.1-ml-linux.sh
echo "Instalando Blender 2.56..."
cp -r instaladores/blender-2.56a-beta-linux-glibc27-i686 /usr/local/Blender
ln -s /usr/local/Blender/blender /usr/local/bin/blender
cp recursos/blender-2.56.desktop /usr/share/applications
chmod +x /usr/local/bin/blender
echo "Efetuando bloqueios a sites: configurando \"/etc/hosts\""
java -jar AlterarHostName.jar
Obs.: Os itens que tem de ser alterados/especificados estão representados em negrito.

Bom, estando com tudo pronto, tudo definido, é só salvar o arquivo com a extensão ".sh" (por exemplo, pode chamá-lo de script_de_configuracao.sh) e abrir o terminal e executar o script como root:
 sudo sh script_de_configuracao.sh

Feito isso, ele começará a trabalhar automaticamente, só pedindo a intervenção do usuário logo no início, quando vai configurar a rede, e no final, quando vai instalar o NetBeans, pois este último só possui instalador gráfico.

E está encerrada a sequência de posts sobre a minha migração para o Linux do laboratório de informática da escola on faço estágio!

Espero que este post tenha sido útil! Se houver qualquer dúvida, correção ou informação adicional, não deixe de recorrer aos comentários!

Logo estarei de volta com algumas dicas! Até a próxima!

Migração Linux - parte 4

As formatações efetuadas nos comandos e trechos de arquivos de configuração foram geradas utilizando a "ferramenta" Source Code Formatter, encontrada neste link.

terça-feira, 5 de abril de 2011

Dica: proteger com senha o Modo de Recuperação no Grub

Estou de volta!

Quando temos algum problema com o sistema (Ubuntu Linux) e o mesmo fica incapacitado de ser iniciado ou não funciona devidamente (ao ponto de impedir que o usuário, iniciando o sistema normalmente, acesse o terminal) é comum recorrermos ao modo de recuperação. Nele temos acesso a um terminal sendo executado como root, tornando possível manipularmos o sistema "livremente", de modo a aplicarmos as correções necessárias.
Certamente ele é algo útil. O problema é que, "nas mãos" de alguém mal intencionado, pode comprometer toda a segurança e integridade do sistema.

Hoje vou falar (na realidade, escrever) sobre como proteger com senha a opção do "modo de recuperação" do Ubuntu no Grub, lembrando que é válido apenas para versão 2 (Grub 2) e talvez superiores.

Para tal, primeiramente é preciso criar um "super usuário" do Grub com senha para acessar as entradas protegidas. Para fazer isso é preciso editar o arquivo "/etc/grub.d/00_header", adicionando ao seu final as seguintes linhas:
 cat << EOF
set superusers="nomeDoSuperUsuario"
password nomeDoSuperUsuario senhaDoSuperUsuario
EOF

Creio que não haja muito a ser comentado sobre o caso acima... é só substituir "nomeDoSuperUsuario"
e "senhaDoSuperUsuario" pelo nome de usuário e senha desejados. O único problema é que, se alguém acessar o arquivo "00_header", terá acesso a tais informações de maneira explicita. Visando evitar isso, é possível fazer uso de uma senha criptografada, assim como descrito no caso abaixo:
 cat << EOF
set superusers="nomeDoSuperUsuario"
password_pbkdf2 nomeDoSuperUsuario senhaCriptografadaDoSuperUsuario
EOF

Da mesma forma que ocorre na situação anterior, basta
substituir "nomeDoSuperUsuario" e "senhaCriptografadaDoSuperUsuario" pelo nome de usuário desejado e a senha criptografada.
Para gerar tal senha, é preciso executar no terminal "grub-mkpasswd-pbkdf2" que irá requisitar o password desejado, a confirmação do mesmo e, por fim, irá devolvê-lo de forma criptografada (que será utilizada no lugar de "senhaCriptografadaDoUsuario"). Aproveito para alertar que,
no lucid (10.04), é meio "bugado", tendo vezes em que ele retorna a senha criptografada e vezes em que não faz o mesmo (tive de tentar várias vezes até funcionar), e também que, quando gerada, será uma sequência de caracteres bem grande (começando a partir de "grub.pbkdf2..."), mas é algo normal.

Tendo sido estas alterações feitas, agora é hora de partir para o arquivo "/etc/grub.d/10_linux". Aqui, aproximadamente na linha 72, há um trecho mais ou menos assim:
 if ${recovery} ; then
title="$(gettext_quoted "%s, with Linux %s (recovery mode)")"
else
title="$(gettext_quoted "%s, with Linux %s")"
fi
printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
O que é preciso fazer é deixar este bloco da seguinte forma:
 if ${recovery} ; then
title="$(gettext_quoted "%s, with Linux %s (recovery mode)")"
printf "menuentry '${title}' ${CLASS} --users nomeDoSuperUsuario {\n" "${os}" "${version}"
else
title="$(gettext_quoted "%s, with Linux %s")"
printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
fi
Fazendo desta forma, a senha será aplicada apenas ao modo de recuperação.
Perceba que a seguinte linha agora só se apresenta dentro do bloco "if .. else", não mais fora do mesmo...
printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"  
... e que ela também sofreu uma pequena alteração, que foi destacada, caso a condição (é modo de recuperação?) seja verdadeira.
 if ${recovery} ; then
title="$(gettext_quoted "%s, with Linux %s (recovery mode)")"
printf "menuentry '${title}' ${CLASS} --users nomeDoSuperUsuario {\n" "${os}" "${version}"
Se a condição for falsa, ela fica inalterada (não requerendo autenticação):
 else
title="$(gettext_quoted "%s, with Linux %s")"
printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
fi

Se tudo estiver certo até aqui, agora só resta executar o comando "update-grub"...
 sudo update-grub
... e testar se as alterações estão funcionando.
No menu do Grub, é só selecionar alguma opção de modo de recuperação que será exibida uma "tela preta" requisitando o usuário e, em seguida, a senha. Caso esteja tudo certo, o sistema será iniciado pelo modo escolhido, senão, aparecerá uma mensagem informando que as informações estão incorretas, pedindo que seja pressionada qualquer tecla para continuar, voltando para o menu anteriormente exibido (se alguma tecla for pressionada, é claro).

Para mais informações sobre como proteger as entradas do Grub com senha, recomendo dar uma olhada neste tópico do UbuntuForums.Org.

Novamente espero que este post tenha sido de alguma ajuda! Se houver qualquer dúvida, é só fazer uso dos comentários!

As formatações efetuadas nos comandos e trechos de arquivos de configuração foram geradas utilizando a "ferramenta" Source Code Formatter, encontrada neste link.
As fontes de informação utilizadas para a criação deste tópico foram este tópico do forum UbuntuForum-BR.org e este do UbuntuForum.Org.

sábado, 2 de abril de 2011

Dica: Parar contagem regressiva do Grub

Eis que aqui estou novamente postando uma dica! Desta vez irei falar sobre o Grub!
...
Quando instalamos o Ubuntu ou outra distribuição Linux, que use o Grub como "gerenciador de boot", em Dual Boot com outro sistema operacional, percebemos que o menu com as opções para boot fica disponível apenas por 10 segundos (contagem que se apresenta na parte inferior da tela), sendo iniciada a opção default (que fica destacada) após o término do tempo.
No caso de muitas pessoas que tem o costume de ligar o computador e ir fazer outras coisas enquanto o sistema não é iniciado por completo, isto pode ser um incomodo, pois pode acabar sendo carregado outro SO que não seja o desejado caso a pessoa se esqueça de selecionar a opção devida dentro do tempo disponível.

Para aumentar ou simplesmente acabar com tal contagem regressiva, basta editar um determinado arquivo de configuração do Grub.

No caso de versões anteriores ao Grub 2, o arquivo em questão é o "/boot/grub/menu.lst". Nele é só procurar pela linha abaixo e efetuar as alterações de acordo com a necessidade:
 timeout 10 #Vale lembrar que o valor do timeout pode estar diferente
Para iniciar o sistema default ("padrão") de imediato, sem a contagem, é só atribuir o valor 0 (zero):
 timeout 0

Para remover a contagem, permitindo que o menu fique ativo até alguma opção ser selecionada, basta remover ou comentar a linha:
 #timeout 10

Para aumentar o tempo da contagem regressiva, logicamente, aumenta-se o valor atribuído:
 timeout 60 #Contagem aumentada para 60 segundos

No caso do Grub 2, as coisas funcionam de modo um pouco diferente. Nele não existe o arquivo "menu.lst", mas, em contra partida, há o "/etc/default/grub". Além disso, após qualquer alteração, é necessário executar o comando "update-grub" para que as mudanças tenham efeito.
Seguindo a mesma ordem do caso acima, para iniciar o sistema padrão de imediato, é só atribuir 0 (zero) a "GRUB_TIMEOUT", assim como feito abaixo:
 GRUB_TIMEOUT=0

Para remover a contagem, deixando o menu de maneira estática até que algo seja selecionado, basta atribuir um número negativo à mesma opção:
 GRUB_TIMEOUT=-1 #Comentá-la não funcionaria, pois seria considerado um valor padrão, que é 10

Para aumentar o tempo da contagem, como no caso anterior, aumenta-se o valor atribuído:
 GRUB_TIMEOUT=60 #Contagem aumentada para 60 segundos

Tendo sido as alterações feitas conforme necessário, agora é só executar o comando "update-grub" como root que as mesmas terão efeito:
 sudo update-grub

Bom, eu citei várias vezes um tal opção "padrão" (default), certo? Para quem não faz ideia do que estou falando, ela é a que, no menu, fica "selecionada" por padrão, sendo geralmente a primeira. Para alterar qual será a entrada "default" basta:
  • Em versões anteriores ao Grub 2: alterar o valor atribuído à "default", lembrando que a contagem começa a partir do 0 (zero);
  • No Grub 2: alterar o valor atribuído à "GRUB_DEFAULT", lembrando novamente que a contagem começa a partir do 0 (zero).
Como de costume, espero que esta dica tenha sido útil! Se houver qualquer dúvida ou encontrarem qualquer erro neste post, não deixem de comentar!

Na próxima postagem pretendo aproveitar o "embalo" e falar novamente sobre o Grub 2, especificamente, escreverei sobre "como proteger o modo de recuperação com senha".

Até a próxima!

As formatações efetuadas nos comandos e trechos de arquivos de configuração foram geradas utilizando a "ferramenta" Source Code Formatter, encontrada neste link.
Quanto as fontes utilizadas para a criação deste tópico, não tenho como informar ao certo, pois foi constituído de informações coletadas há muito tempo e de diversos lugares. Além disso, a forma de remover a contagem no Grub 2 descobri na tentativa e erro.

terça-feira, 29 de março de 2011

Dica: Configurar IP fixo no Ubuntu e outras distribuições Linux

Este já é um dos assuntos mais abordados em sites e blogs sobre Linux, contudo irei falar sobre o mesmo, já que foi algo que utilizei durante a minha migração para o Ubuntu.

A situação era a seguinte: um laboratório com dezenas de computadores e todos com IPs "aleatórios", fornecidos pelo servidor DHCP.
Como precisava saber o IP de cada uma para acessar compartilhamentos, SSH e outras finalidades, se fez necessário o uso de IP estático ("fixo").

Para tal, basta editar a interface utilizada, no arquivo "/etc/network/interfaces", do seguinte modo:
 # Interface
auto eth0
iface eth0 inet static
# Endereço de IP da máquina (a ser utilizado)
address 192.168.x.x
# Mascara de rede
netmask 255.255.255.0
# Gateway
gateway 192.168.x.x
# Servidor DNS... fazendo uso desta opção, o servidor DNS aqui
# informado será automaticamente adicionado aos nameservers
# no arquivo "/etc/resolv.conf"
dns-provider 192.168.x.x


Após a edição é só reiniciar o serviço:
 sudo /etc/init.d/networking restart

E testar se está tudo funcionando devidamente!

Também há a possibilidade de fazer tal configuração através de um cliente gráfico, porem não funcionou da forma que eu gostaria.

Mais uma vez, espero que este post tenha sido útil. Se houver qualquer dúvida ou erro, não deixe de recorrer aos comentários!

As formatações efetuadas nos comandos e trechos de arquivos de configuração foram geradas utilizando a "ferramenta" Source Code Formatter, encontrada neste link.
A fonte que utilizei quando precisei fazer uso de IP fixo e durante a criação deste post foi este tópico da comunidade "Viva O Linux":

domingo, 27 de março de 2011

Migração Linux - parte 4: Apt-cacher

Olá pessoal!

Desculpem-me pela demora, mas na última semana tive a combinação de provas e uma gripe forte, então, tinha dia que eu nem chegava perto do PC de casa direito.
...
A instalação e configuração do servidor Apt-cacher, devo dizer, é uma das partes mais fáceis.

Primeiramente, o baixei (como ele usa o apache, também se faz necessária a instalação deste último). Como o instalei em outra máquina, não na mesma que utilizei para o netboot, precisei instalar o apache também:
 sudo apt-get install apache2 apt-cacher
Tendo sido o apt-cacher instalado, basta agora configurá-lo através do arquivo "/etc/apt-cacher/apt-cacher.conf". Nele há as seguintes opções (comentarei as mais importantes):
 # Diretório onde serão armazenados os arquivos .deb do cache.
cache_dir=/var/cache/apt-cacher
# E-mail do administrador da rede.
admin_email=root@localhost
# Porta padrão... no caso de haver um firewall, pode ser necessário liberá-la.
daemon_port=3142
group=www-data
user=www-data
# IPs que podem acessar o servidor apt-cacher, separados por vírgulas.
# Do jeito que aqui está, todos dentro da subrede "192.168.1.0" são permitidos.
# Para liberar faixas de IP, basta utilizar um "-" entre o inicial e o final,
# por exemplo, "192.168.1.10-192.168.1.50" (sem aspas). Para liberar qualquer
# ip, se não me engano, é só atribuir um "*" (sem aspas).
allowed_hosts=192.168.1.0/24
# O contrário da opção anterior, funcionando da mesma forma.
denied_hosts=
# O mesmo que "allowed_hosts", porem aqui são passados os IPs v6 liberados.
allowed_hosts_6=fec0::/16
# O contrário da opção anterior.
denied_hosts_6=
generate_reports=1
# Limpa diariamente os pacotes em cache que não mais estejam na lista
# dos Canais de Software do repositório atual.
clean_cache=1
offline_mode=0
logdir=/var/log/apt-cacher
# Tempo para que as listas dos Canais de Software do Repositório sejam
# atualizadas (em horas). Se for zero, a cada requisição isto será feito,
# sendo os pacotes atualizados (baixados novamente) se necessário.
expire_hours=0
use_proxy=0
use_proxy_auth=0
limit=0
debug=0
# Permite adicionar codenomes para os repositórios.
path_map = debian ftp.uni-kl.de/pub/linux/debian ftp2.de.debian.org/debian ; ubuntu archive.ubuntu.com/ubuntu ; security security.debian.org/debian-security ftp2.de.debian.org/debian-security
Eu só alterei as opções "admin_email" e "allowed_hosts" (permiti apenas uma faixa de IPs). O resto eu deixei com as definições padrão.
Estando tudo certo com o apt-cacher.conf, posteriormente só modifiquei o arquivo "/etc/default/apt-cacher", atribuindo "1" a "AUTOSTART" (AUTOSTART =1). Isso tem como objetivo iniciar o apt-cacher juntamente com o sistema.
Agora é só iniciar o apt-cacher:
 sudo service apt-cacher start
Estando com ele rodando, para ver se está funcionando, tente acessar através do navegador "http://[IPDoServidor]:3142/". Se aparecer uma página com as configurações do mesmo, tudo certo até aqui.

Também há a opção de importar o cache do apt do servidor para o apt-cacher, de modo a aproveitar os pacotes que já tenham sido baixados anteriormente (atualizações e aplicativos em geral). Como eu já havia testado algumas coisas no servidor, aproveitei para ganhar um tempo. Para importar, bastou utilizar o seguinte comando:
 sudo /usr/share/apt-cacher/apt-cacher-import.pl /var/cache/apt/archives

Se tudo estiver certo até aqui, será hora de fazer as alterações no lado dos clientes, ou seja, nas máquinas que irão utilizar o servidor apt-cacher.

Para direcioná-las para o servidor apt-cacher, basta editar o arquivo "/etc/apt/sources.list". Você simplesmente irá fazer o mesmo do exemplo abaixo com todos os demais repositórios presentes no arquivo.
 #Substituir:
deb http://br.archive.ubuntu.com/ubuntu/ lucid main restricted
#Por:
deb http://[IPDoServidorApt-Cacher]:3142/br.archive.ubuntu.com/ubuntu/ lucid main restricted
Após isso, é só atualizar os repositórios:
 sudo apt-get update

Se tudo tiver ocorrido sem problemas até aqui, instalação e configuração concluídas com sucesso. Para testar, você pode tentar instalar algo através dos repositórios. Se baixar corretamente, estará funcionando. Das próximas vezes em que for baixar o mesmo programa/pacote, seja no mesmo computador ou em outro que também esteja direcionado para o servidor apt-cacher, o receberá praticamente instantaneamente, já que não serão provenientes dos repositórios na WEB, mas sim do servidor em questão (só serão baixados novamente se estiverem "obsoletos").

Eu cheguei a criar um script bem simples para configurar o arquivo "sources.list" dos clientes. Se quiserem dar uma olhada, basta conferirem a última parte, que tratará da configuração do sistema, pós instalação, e dos aplicativos utilizados.

Espero que estejam gostando e que o que aqui escrevo esteja sendo útil! Logo virei com a última parte!


As formatações efetuadas nos comandos e trechos de arquivos de configuração foram geradas utilizando a "ferramenta" Source Code Formatter, encontrada neste link.

Para construir este post, foram utilizados como base as seguintes fontes:
http://www.vivaolinux.com.br/dica/APTCacher-Seu-repositorio-de-pacotes-locais/
http://wiki.ubuntu-br.org/apt-cacher
http://www.dicas-l.com.br/arquivo/apt-cacher.php

terça-feira, 8 de março de 2011

Migração Linux - parte 3: Preseed

Saudações, pessoal!

Desculpem-me pela demora em postar esta segunda parte... planejava fazê-lo no último Sábado ou Domingo, mas a preguiça não permitiu.

Indo ao assunto deste post, a parte do preseed não é complicada (apesar de eu ter levado uns 2~3 dias para fazê-la funcionar devidamente, mas foi por problemas de "burrice" mesmo). No arquivo você define as respostas a todas as perguntas que são feitas durante a instalação do sistema, além de poder fazer algumas coisas mais, que não aparecem durante uma instalação convencional.

Quado gerei meu arquivo de preseed, utilizei como base o disponibilizado na própria documentação do Ubuntu (que, por sinal, é o mesmo da documentação do Debian). Ele já está bem completo e todo comentado, então, se precisarem de alguma opção que não for tratada aqui e tiverem dúvidas, não exitem em perguntar através dos comentários, pois eu tentarei ajudar.

Também gostaria de ressaltar que só falarei dos parâmetros que utilizei durante minha experiência com o assunto desta postagem. Não irei citar os demais, pois, além de não ter trabalhado com os mesmos, se fosse descrevê-los, o conteúdo iria ficar muito extenso, por isso recomendo a quem tiver dúvidas a fazer perguntas através dos comentários e também a dar uma olhada na própria documentação do Ubuntu, na parte que trata do conteúdo do arquivo de preseed.

Agora, vamos ao que realmente importa!
A sintaxe dos comandos é a seguinte:
 <dono> <questão> <tipo> <valor>

Como exemplo, segue a linha abaixo.
 d-i debian-installer/locale string en_US

No caso acima, o dono seria "d-i" (Debian Installer), a questão "debian-installer/locale", o tipo "string" e o valor "en_US".

A estrutura também segue algumas regrinhas, tais como:
  • Deve haver apenas um espaço ou tabulação entre o "dono", a "questão", o "tipo" e o "valor";
  • Uma linha pode ser quebrada em várias utilizando uma contra-barra ("barra invertida") no local da divisão (muito útil se for particionar o disco através do preseed);
  • Algumas questões recebem valores na forma de "código", ao invés de seu valor em inglês, exibido em um instalação normal.

Para mais informações quanto a essas regras, questões, etc, dê uma olhada na própria documentação do Ubuntu!

Abaixo segue uma cópia de meu arquivo de preseed, sendo omitidos apenas os comentários e os valores de algumas questões:
 d-i debian-installer/locale string pt_BR
d-i console-setup/ask_detect boolean false
d-i console-setup/layoutcode string br
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string meudominio
d-i netcfg/wireless_wep string
#d-i mirror/protocol string ftp
d-i mirror/country string enter information manually
d-i mirror/http/hostname string [ipDoServidorDeNetBoot]
d-i mirror/http/directory string /ubuntu/lucid/alternate
d-i mirror/http/proxy string
d-i mirror/suite string lucid
d-i mirror/udeb/components multiselect main, restricted
d-i clock-setup/utc boolean true
d-i time/zone string America/Sao_Paulo
d-i clock-setup/ntp boolean true
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-auto/expert_recipe string boot-root :: 40 50 100 ext4 $primary{ } $bootable{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /boot } . 10000 100000 1000000000 ext4 method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ / } . 7000 100000 1000000000 ext4 method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /home } . 512 2000 2000 linux-swap method{ swap } format{ } .
d-i partman/default_filesystem string ext4
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i passwd/make-user boolean true
d-i passwd/root-password-crypted password [hash MD5 da senha do root]
d-i passwd/user-fullname string Nome Completo Do Usuario
d-i passwd/username string nomeDoUsuario
d-i passwd/user-password-crypted password [hash MD5 da senha do usuário]
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true
tasksel tasksel/first multiselect ubuntu-desktop
d-i pkgsel/include string openssh-server build-essential
d-i pkgsel/update-policy select none
d-i pkgsel/updatedb boolean false
d-i grub-installer/skip boolean false
d-i grub-installer/only_debian boolean true
d-i grub-installer/password password [senha]
d-i grub-installer/password-again password [senha]
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean false
xserver-xorg xserver-xorg/config/device/driver select vesa
xserver-xorg xserver-xorg/autodetect_monitor boolean true
xserver-xorg xserver-xorg/config/monitor/selection-method \
select medium
xserver-xorg xserver-xorg/config/monitor/mode-list \
select 1024x768 @ 60 Hz

Agora, comentando as linhas:
Nas questões abaixo eu passei a linguagem e o país ("pt_BR"), desativei a detecção automática do teclado e informei o código do layout do mesmo ("br").

 d-i debian-installer/locale string pt_BR
d-i console-setup/ask_detect boolean false
d-i console-setup/layoutcode string br
Em seguida, "configurei" a rede, passando para o "netcfg" que a interface deve ser escolhida automaticamente, informando também uma entrada "qualquer" para o hostname (como todos os computadores utilizam o mesmo arquivo de preseed durante a instalação, não é interessante especificar o nome nele, senão todas possuirão o mesmo hostname), um domínio e desabilitei a questão sobre a chave WEP (no caso de haver uma interface wireless), passando uma chave "em branco".
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string meudominio
d-i netcfg/wireless_wep string
Depois, defini os mirrors da seguinte maneira:
  • Não informo o protolo, sendo considerado o valor padrão (não recordo se é ftp mesmo ou http);
  • Também não informo o país;
  • Passo o hostname do mirror que, neste caso, é o ip do servidor utilizado para o NetBoot;
  • Informo o caminho para o mirror, que, considerando o que foi feito na parte 2, referente ao NetBoot, é "ubuntu/lucid/alternate" (o local onde foi montada a imagem do Ubuntu 10.04 alternate);
  • Passo uma resposta em branco para a questão do proxy;
  • Informo o nome da versão (neste caso, "lucid"), de modo a ele encontrar na imagem montada, se não me engano, dentro de "dists" (onde tem uma pasta lucid) o arquivo "Releases";
  • Digo de onde (de que "repositórios") os componentes adicionais serão buscados/instalados.
#d-i mirror/protocol string ftp
d-i mirror/country string enter information manually
d-i mirror/http/hostname string ipDoServidorDeNetBoot
d-i mirror/http/directory string /ubuntu/lucid/alternate
d-i mirror/http/proxy string
d-i mirror/suite string lucid
d-i mirror/udeb/components multiselect main, restricted
No bloco a seguir, defino o relógio como sendo baseado no "fuso horário" UTC, a time zone como sendo de São Paulo (as time zones podem ser encontradas em "/usr/share/zoneinfo", em um sistema já instalado) e informo que será utilizado um servidor ntp para ajustar a hora (como não especifico um em especial, ele usará o padrão).
d-i clock-setup/utc boolean true
d-i time/zone string America/Sao_Paulo
d-i clock-setup/ntp boolean true
Agora vem o particionamento:
  • Eu o defini como "regular" (pode ser "regular", "lvm" ou "crypto");
  • Permiti a remoção de uma configuração LVM que venha a existir (se fosse encontrada, haveria um alerta durante a instalação);
  • Permiti também a remoção de um arranjo RAID que venha a existir;
  • Confirmei a escrita de partições LVM;
  • Passei uma "receita" (não encontrei forma melhor de dizer que não fosse a tradução literal de "recipe") com as configurações das novas partições a serem criadas (entrarei em detalhers sobre isso em outro post, pois, se fosse fazê-lo aqui, este texto ficaria mais longo do que já está);
  • Difini o sistema de arquivos padrão como sendo ext4 (talvez não fosse necessário fazer uso desta opção, pois no recipe eu já especifiquei o sistema de arquivos);
  • Confirmei a escrita dos rótulos das partições e aquelas questões "chatas", perguntando se eu realmente desejo efetuar as alterações, pedindo para confirmar isso e aquilo.
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-auto/expert_recipe string boot-root :: 40 50 100 ext4 $primary{ } $bootable{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /boot } . 10000 100000 1000000000 ext4 method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ / } . 7000 100000 1000000000 ext4 method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /home } . 512 2000 2000 linux-swap method{ swap } format{ } .
d-i partman/default_filesystem string ext4
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
Aqui, eu:
  • Confirmo a criação de um usuário normal (creio que não fosse necessário responder a questão, pois o valor padrão, se não me engano, é "true");
  • Informo a senha do root de forma criptografada (posteriormente explicarei como criar o hash MD5);
  • Passo o nome completo do usuário normal;
  • Passo o log in dele (seu username propriamente dito);
  • Informo a senha do mesmo de forma criptografada, assim como feito com o root;
  • Confirmo previamente aquele aviso chato de senha fraca;
  • Informo que o /home do usuário normal não deve ser criptografado.
d-i passwd/make-user boolean true
d-i passwd/root-password-crypted password [hash MD5 da senha do root]
d-i passwd/user-fullname string Nome Completo Do Usuario
d-i passwd/username string nomeDoUsuario
d-i passwd/user-password-crypted password [hash MD5 da senha do usuário]
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
Nas linhas abaixo eu apenas adiciono ao apt os repositórios "restricted" e "universe".
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true
Nesta parte eu selecionei os pacotes a serem instalados e indiquei como as atualizações serão efetuadas. Especificamente, escolho os pacotes do Ubuntu Desktop (instalo a versão Desktop), como adicionais tenho o Open SSH e o build-essential, e, com relação as atualizações, através do "none", digo que as atualizações de segurança deve ser instaladas apenas manualmente. Quanto a "questão" pkgsel/updatebd", se receber true, pelo que entendi, ela atualiza o banco de dados do locate, o que pode levar algum tempo, então, respondi false, de modo a ganhar tempo.
tasksel tasksel/first multiselect ubuntu-desktop
d-i pkgsel/include string openssh-server build-essential
d-i pkgsel/update-policy select none
d-i pkgsel/updatedb boolean false
Agora defini algumas questões quanto ao Boot Loader:
  • Não pulei a instalção do Grub (o que resultaria na instalação do lilo);
  • Confirmei a instalação do mesmo na MBR apenas se nenhum outro sistema for encontrado (o HD já terá sido completamente formatado no momento, então, não haverá problemas);
  • Por questões de segurança, optei por adicionar uma senha ao grub.
d-i grub-installer/skip boolean false
d-i grub-installer/only_debian boolean true
d-i grub-installer/password password [senha]
d-i grub-installer/password-again password [senha]
Neste pequeno pedaço, eu pulo o aviso de que a instalação foi concluída, reiniciando de imediato o PC, além de instruí-lo a não ejetar o CD, tendo em vista que é uma instalação pela rede, logo, não há CD.
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean false
Por fim, eu respondo a algumas questões do X.
Como é feita uma instalação utilizando preseed, supostamente a escolha do driver de vídeo feita pelo X é ignorada, não sendo instalado o driver devido, então, eu informo que deverá ser instalado o vesa, que "funciona" praticamente com tudo quanto é VGA. Também o instruo a detectar o monitor automaticamente e escolho a configuração "medium" (creio que seja quanto aos efeitos gráficos), informando, depois de tudo, que a resolução do monitor deve ser de 1024 x 768 @ 60Hz
xserver-xorg xserver-xorg/config/device/driver select vesa
xserver-xorg xserver-xorg/autodetect_monitor boolean true
xserver-xorg xserver-xorg/config/monitor/selection-method \
select medium
xserver-xorg xserver-xorg/config/monitor/mode-list \
select 1024x768 @ 60 Hz

Observações:
Como o hostname recebeu apenas uma resposta "provisória", torna-se necessário informá-lo como um parâmetro na hora da instalação.
 hostname=nomeDaMaquina

Devido o fato de os mirrors terem sido apontados para o CD (imagem montada), é preciso alterá-los após a instalação. Para isso, basta editar o arquivo "/etc/apt/sources.list" e corrigir as URLs dos repositórios (substituir o IP do servidor de NetBoot pelo endereço do repositório na WEB). Abaixo segue um exemplo:
 #Substituir:
deb http://[ipDoServidorDeNetBoot]/ubuntu/lucid/alternate lucid multiverse
#Por:
deb http://br.archive.ubuntu.com/ubuntu/ lucid multiverse

Estando com meu arquivo de preseed pronto, eu o salvei em "/var/lib/tftpboot/ubuntu/" com o nome de "preseed.cfg". Após isso, bastou dar boot pela rede no Ubuntu 10.04 ALTERNATE, no menu com as opções de instalação apertar TAB e, no "console" que se abre na parte inferior da tela, passar informar os seguintes parâmetros de instalação:
 auto=true priority=critical url=http://[servidorDeNetBoot]/ubuntu/preseed.cfg console-keymaps-at/keymap=br locale=pt_BR hostname=nomeDaMaquina
Explicando os parâmtros passados:
  • auto=true > Indica que a instalação será feita de maneira automática;
  • priority=critical > Indica a prioridade do debconf como "critical" (prioridade crítica);
  • url=http://[servidorDeNetBoot]/ubuntu/preseed.cfg > especifica a localização do arquivo de preseed;
  • console-keymaps-at/keymap=br > Indica o "mapa de caracteres" do teclado como sendo o do Brasil, pois, como foi dado boot pela rede e o arquivo de preseed ainda não foi carregado, ele usa uma configuração padrão (creio que seja o padrão norte-americano ou um "internacional");
  • locale=pt_BR > praticamente o mesmo caso citado acima, mudando apenas que aqui se refere ao idioma a e localização;
  • hostname=nomeDaMaquina > especifica o nome do computador, assim como eu, anteriormente, já havia citado que seria necessário ser feito.

Tem como passar muitos outros parâmetros, mas esses foram os que usei.

Depois disso é só apertar ENTER que a instalação irá se iniciar e seguirá de maneira completamente automática!

Se encontrarem algum erro no que foi descrito acima, por favor, avisem através dos comentários! Sei que tem algumas entradas no arquivo de preseed que são redundantes, então, se quiserem resaltá-las, o façam! Não as removi ainda, pois não tive tempo (Ok... na realidade tive, porem não me lembrei) de testar o arquivo sem as mesmas.
Se tiverem qualquer dúvida, novamente deixo a recomendação de recorrerem aos comentários (tentarei ajudar na medida do possível)!


Espero que este post tenha sido útil. Na próxima parte, descreverei a configuração de um servior "apt-cacher", cuja função é criar um cache local dos pacotes baixados.

Migração Linux - parte 2 / Migração Linux - parte 4

As formatações efetuadas nos comandos e trechos de arquivos de configuração foram geradas utilizando a "ferramenta" Source Code Formatter, encontrada neste link.

Anúncios

DonkeyMails.com: No Minimum Payout