Para este sistema, que eventualmente vai ser um servidor chamado verynice, criei uma VM com 256MB de RAM e 640MB de disco.
O TinyCore1 é uma instalação Linux muito especial, devotada a sistemas com muito poucos recursos. Vou usar a versão CorePlus, a mais “luxuosa”, com ambiente gráfico e possibilidade de instalação em disco, mas há versões Core muito mais frugais que correm alegremente de uma pen USB carregando-se para uma RAMdrive no arranque.
O seu modo de funcionamento é muito particular, porque o core do sistema é completamente separado das aplicações e configurações, e estas só são aplicadas no arranque seguinte se forem explicitamente guardadas.
Muito poucas concessões são feitas à conveniência e user-friendliness, todos os comandos da shell por defeito (busybox)2 são extremamente simplificados em relação a uma distribuição Linux normal e os utilitários de gestão são os do Unix/Linux de há dez anos.
Instalação
Descarrega-se do site da distribuição TinyCore (http://tinycorelinux.net/) o instalador da versão CorePlus (na página Downloads, http://tinycorelinux.net/11.x/x86/release/CorePlus-current.iso)
Coloca-se o ISO na drive óptica virtual da VM e inicia-se a VM.
Escolhe-se a opção por defeito: FLWM topside
Na doca ao fundo do ecrã, abre-se a aplicação tc-install3
Escolhem-se as opções: Frugal, Whole disk, e depois desta última, o disco sda. Confirmar que Install boot loader está activado. Clicar em >
Formatting Options: ext4 >
Boot options a colocar no instalador (consultar a lista apresentada no ecrã, ou o capítulo 10 do livro oficial do Tiny Core Linux, Into the Core):
tce=sda1 home=sda1 opt=sda1 nodhcp showapps safebackup cron syslog host=verynice kmap=qwerty/pt-latin1.kmap
(Mude o hostname para algo mais adequado para si, obviamente)
O teclado está em layout US, por isso:
- o caracter
=
está na tecla«
- e o caracter
/
está na tecla–
Clicar em >
Tipo de instalação
Eu escolhi Core and X/GUI Desktop mas seguindo este guia, talvez não seja necessário o GUI e se possa escolher Core Only
A única extensão que se vai instalar é Non-US keyboard layout support
Clicar em >
Na realidade, depois de ter o CoreLinux instalado e a rede configurada, esta extensão pode-se instalar com bastante facilidade a partir do gestor de extensões, por isso também não é obrigatório utilizar o instalador CorePlus para ter teclados internacionais, um instalador mais leve seria suficiente. Mas esta é a opção mais geral.
O mesmo pode não ser verdade para o suporte a placas Wi-Fi, que também se escolhe neste painel mas que eu não testei.
Revêm-se as configurações e clica-se em Proceed
Clicar no ícone Exit da doca, opção Shutdown, OK
Quando a instalação terminar, retirar o ISO da drive óptica e reiniciar a VM.
Configurações iniciais
Mudar as opções de arranque
Se for preciso mudar as boot options: editar /mnt/sda1/tce/boot/extlinux/extlinux.conf
e mudar o conteúdo da linha APPEND
Teclado português
Abrir o Terminal e testar uma tecla específica do teclado PT-pt; se o resultado não for o esperado (o boot option kmap
não estiver a activar o layout PT-pt), usar o comando
|
|
- o caracter
-
está na tecla'
- o caracter
/
está na tecla–
- o caracter
'
está na teclaº
Seguido de (já explicarei estes comandos):
|
|
Configurar permanência
Sem este passo, o TinyCore Linux não vai guardar automaticamente as alterações que fizermos à configuração, porque depois de cada reinício, todas as configurações são perdidas excepto aquelas que dissermos que queremos guardar (o que tem vantagens e desvantagens).
O processo abaixo configura a gravação automática das configurações em caso de shutdown do sistema, através do script que o sistema corre automaticamente durante o shutdown.
|
|
Por baixo da linha #put user shutdown commands here
, acrescentar:
|
|
Guardar e sair. O comando para forçar a gravação desta alteração é, claro,
|
|
Mudar a palavra passe do utilizador por defeito (tc)
|
|
Colocar uma palavra-passe que lhe apeteça.
Adicionar um ficheiro de configuração à Permanência
Para guardar um ficheiro de configuraçºao, como o ficheiro das palavras-passe, depois de um reinício (dar-lhe permanência), o caminho do ficheiro a guardar, menos o /
inicial, é colocado no ficheiro /opt/.filetool.lst
|
|
Rede
Para configurar uma interface de rede numa versão do CoreLinux com o ambiente gráfico, usar o comando sudo network
numa janela de terminal (estes valores servem apenas de exemplo):
Interface: eth0
DHCP Broadcast: no
IP Address: 10.123.130.6
Net mask: 255.255.255.248
Broadcast: 10.123.130.7
Gateway: 10.123.130.1
NameServers: 1.1.1.1, 8.8.8.8
Save Configuration: yes
Apply
Testar com ping 1.1.1.1
Confirmar a configuração com cat /opt/eth0.sh
Deve ser:
#!/bin/sh pkill udhcpc ifconfig eth0 10.123.130.6 netmask 255.255.255.248 broadcast 10.123.130.7 up route add default gw 10.123.130.1 echo nameserver 1.1.1.1 > /etc/resolv.conf echo nameserver 8.8.8.8 >> /etc/resolv.conf
Para configurar a rede sem se ter acesso ao modo gráfico, basta copiar a informação acima para /opt/eth0.sh
Confirmar que o /opt/eth0.sh
está configurado para ser adicionado à permanência com o comando
|
|
opt/eth0.sh
Se não estiver,
|
|
Aliases
Os aliases do utilizador por defeito (tc) estão em ~/.ashrc
. Acrescentei estes aliases que julgo úteis:
|
|
E seria bom ter esses aliases (e os outros, como ll='ls -l'
e especialmente rm='rm -i'
) se estivermos numa rootshell; copiar os ficheiros necessários para a pasta /root
e dizer ao CoreLinux que queremos guardar o conteúdo da pasta /root
entre arranques:
|
|
Configurar Time Zone
Fonte
Confirmar que estamos na pasta home do utilizador: cd ~
Assegurar que temos ligação ao exterior (por exemplo, ping 1.1.1.1
)
O comando tce-fetch.sh
descarrega uma extensão sem a instalar. Neste caso queremos a extensão tzdata.tcz
(Time Zone data.TCextension Zipped)
|
|
O CoreLinux pode montar as extensões directamente para leitura (é, de resto, como ele “instala” uma extensão). Criar uma pasta e montar:
|
|
Copiar a informação de timezone de Lisboa para o local por defeito, /etc/localtime
|
|
Dar permanência à configuração:
|
|
Acesso remoto por OpenSSH
Fonte
Assegurar que temos ligação ao exterior (por exemplo, ping 1.1.1.1
)
O comando tce-load -wi
instala directamente uma extensão de modo permanente:
|
|
Criamos a configuração do serviço OpenSSH copiando a configuração por defeito fornecida com a extensão:
|
|
Arrancamos o serviço com o script fornecido pela extensão:
|
|
Verificar o serviço com
|
|
Tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1470/sshd
Primeira ligação
Com o sshd_config
que vem por defeito com a extensão é obrigatório ter uma palavra-passe configurada para o utilizador inicial tc, por isso se a palavra-passe não estiver configurada é necessário fazê-lo agora (é possível configurar host-based auth ou chaves assimétricas, mas só depois de editar o sshd_config
)
|
|
Testar, logando por SSH com um cliente (como o PuTTY em Windows):
Garantir que as configurações do SSH são guardadas:
|
|
Colocar o serviço a arrancar com o sistema
Ai, que me deu aqui um baque de nostalgia… Era assim que se fazia antes do SystemD:
|
|
(Aaahhhh… nem por isso. O SystemD é um enorme avanço sobre tricotar shell scripts e gerir dependências à unha, mas seria mais pesado que o resto do CoreLinux inteiro…)
Instalar um editor de texto (vim)
Chamar o gestor de aplicações em modo texto:
|
|
S)earch Enter starting chars of desired extension, e.g. abi:
Escrever vim
, tecla Enter
tce - Tiny Core Extension browser 1. gvim-base.tcz 2. gvim-doc.tcz 3. gvim.tcz 4. gvim-tutor.tcz 5. vim-locale.tcz 6. vim.tcz Enter selection ( 1 - 6 ) or (q)uit: 6
É mostrada a informação About
da extensão; q
para sair e mostrar o menu:
A)bout I)nstall O)nDemand D)epends T)ree F)iles siZ)e L)ist S)earch P)rovides K)eywords or Q)uit: i vim.tcz.dep OK Downloading: gvim-base.tcz Connecting to repo.tinycorelinux.net (89.22.99.37:80) saving to 'gvim-base.tcz' gvim-base.tcz 100% |************************************************************************************| 8036k 0:00:00 ETA 'gvim-base.tcz' saved gvim-base.tcz: OK Downloading: ncursesw.tcz Connecting to repo.tinycorelinux.net (89.22.99.37:80) saving to 'ncursesw.tcz' ncursesw.tcz 100% |************************************************************************************| 212k 0:00:00 ETA 'ncursesw.tcz' saved ncursesw.tcz: OK Downloading: vim.tcz Connecting to repo.tinycorelinux.net (89.22.99.37:80) saving to 'vim.tcz' vim.tcz 100% |************************************************************************************| 1432k 0:00:00 ETA 'vim.tcz' saved vim.tcz: OK vim.tcz A)bout I)nstall O)nDemand D)epends T)ree F)iles siZ)e L)ist S)earch P)rovides K)eywords or Q)uit:
Q
para sair ou S
, P
, ou K
, para encontrar mais extensões a instalar. Por exemplo, coreutils.tcz
instala os comandos GNU/POSIX mais vulgares em versões mais completas que as integradas no busybox, e bash.tcz
instala essa shell em vez do busybox (mas como o TinyCore não nos segura nas mãozinhas, é necessário ir ao /etc/passwd
mudar a login shell do utilizador, configurar o /etc/passwd
para ser guardado no backup, e fazer o backup)
Configurar o vim
|
|
Configurar no ficheiro as opções desejadas (uma vez que está na pasta /home/tc/
, será guardado automaticamente pelas boot options que demos, nomeadamente home=sda1
).
Uma sugestão para um .vimrc
está na página Dotfiles.
Depois de o ter configurado a nosso gosto, seria bom manter a configuração mesmo quando estamos a editar um ficheiro como o utilizador root. Para conseguir isso, copia-se o .vimrc
para a pasta pessoal do root:
|
|
(ver a secção Aliases para o comando que adiciona a pasta /root
à Permanência, se já não estiver)
Cliente NTP
Se o relógio de sistema não estiver correcto a comunicação entre um serviço local e os servidores na WAN pode ser recusada por estes últimos. E numa VM VirtualBox sem GuestAdditions, o relógio vai estar quase sempre errado.
Apesar de existir um pacote chrony para o TinyCore, usei apenas um cliente NTP4 muito básico, porque estava interessado em aligeirar o mais possível o sistema .
|
|
Downloading: ntpclient.tcz Connecting to repo.tinycorelinux.net (89.22.99.37:80) saving to 'ntpclient.tcz' ntpclient.tcz 100% |********************************| 12288 0:00:00 ETA 'ntpclient.tcz' saved ntpclient.tcz: OK
Configurar o cliente
Colocar no /opt/bootlocal.sh
três instruções com diferentes propósitos:
1) Actualizar o relógio durante o arranque5
Caso não tenhamos DNS disponível nesta fase do arranque, precisamos de usar directamente IPs e não nomes, por isso não podemos usar uma pool. Neste caso, vamos pedir a hora aos servidores da Hora Legal de Portugal6
|
|
2) Sincronizar o RTC
Mas o TinyCore, até lhe dizerem o contrário, ignora esta hora e vai sempre buscar a hora do relógio de hardware, que sem Guest Additions não sabe perguntar ao host e arranca na mesma hora em que a VM foi desligada. Depois de recebermos a hora de sistema a partir de um servidor NTP, temos de actualizar o relógio de hardware com o comando hwclock -w
|
|
3) Corrigir o desvio de tempo
Depois é não deixar que o relógio se vá desviando durante a operação do sistema, criando um processo que verifica periodicamente o tempo correcto:6
|
|
Começando de desligado, funciona bem.
Conclusão
O TinyCoreLinux é muito pequeno, mas isso tem os seus custos.
Tudo tem de ser configurado, tudo tem de ser definido como persistente.
Comporta-se mais como um container do que como uma instalação vulgar.
Nisso, tem boa companhia, porque o AlpineLinux tem exactamente a mesma atitude, e também é muito popular como base para containers (é o default do Docker) e sistemas embedded.
No entanto, parece-me que o TinyCore já começa a dar demasiado trabalho para aquilo que poupa em recursos. Já não estamos assim tão desesperados, geralmente.
Para um sistema realmente minimalista, existe uma versão ainda mais reduzida, o MicroCoreLinux (ou simplesmente Core), sem ambiente gráfico e com apenas 8MB.
Para algo que me permitiria ser produtivo rapidamente, tenho esperança no AlpineLinux, que vou tentar testar em breve.