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.

Nenhum comentário:

Postar um comentário

Anúncios

DonkeyMails.com: No Minimum Payout