Difference between pages "LXC Fun" and "Install/pt-br/Kernel"

From Funtoo
(Difference between pages)
Jump to navigation Jump to search
 
 
Line 1: Line 1:
Linux Containers, or LXC, is a Linux feature that allows Linux to run one or more isolated virtual systems (with their own network interfaces, process namespace, user namespace, and power state) using a single Linux kernel on a single server.  To learn more take a look at the [[LXC]] article.
=== Configurando e instalando o kernel Linux ===


In this Howto you will be shown how to create containers, how to start, stop, freeze and unfreeze them and also some more fun parts like snapshoting and clonig. To have all this working you will have to have your lxc store (/var/lib/lxc/ and /var/lib/lxcsnaps) to be on a '''btrfs filesystem'''.
Agora é hora de construir e instalar um kernel Linux, o qual é o coração de qualquer sistema Funtoo Linux. O kernel é carregado pelo boot loader, e interfaces diretamente com o hardware do seu sistema, e permite programas regulares (userspace) serem executador.


__TOC__
Um kernel deve ser configurado propriamente para o hardware do seu sistema, desse modo ele suporta seus hard drives, file systems, placas de rede, e assim por diante. Usuários de Linux mais experientes podem escolher instalar o kernel sources e configurar e instalar seu próprio kernel. Se você não sabe como fazer isso, nós fornecemos ebuilds que construirão automaticamente um kernel "universal", módulos e initramfs para a inicialização do seu sistema que suporte todo o hardware. Esse é um jeito extremamente simples de construção de um kernel que colocará seu sistema para inicializar.


== Creating containers ==
Qual é o nosso objetivo? Construir um kernel que reconhecerá todo o hardware em seu sistema necessário para inicialização, você será cumprimentado por um prompt de login amigável depois que a instalação estiver completa. Estas instruções lhe guiarão através do processo de instalação de um kernel no modo "fácil" -- sem exigir configuração do usuário, ao utilizar um kernel "universal".
Creating containers is quite easy using lxc-templates. They are located in the /usr/share/lxc/templates directory. You can find there many distributions like archlinux, centos, debian, fedora, opensuse, ubuntu, gentoo and some more. There is also an inofficial funtoo template that can be found at https://github.com/golodhrim/lxc-funtoo/blob/master/lxc-funtoo. The script creates funtoo container, however I was not able to use it with lxc-create script from the lxc utils. You have to run it as a stand-alone script.


So how do you create other containers? I am going to use a debian container for this howto. You will have to emerge debootstrap.
==== Package Sets ====


<console>
Antes que instalemos um kernel, vamos cobrir um recurso do Portage chamado package sets. Portage, o sistema gerenciador/ports de pacotes para o Funtoo Linux, manterá rastro de pacotes do sistema assim como pacotes que você tem instalado ao invocar <code>emerge</code> diretamente. Esses pacotes que são parte do sistema base são considerados parte do conjunto de pacote do "sistema" (''system'' packages sets), enquanto pacotes que você tem instalado ao digitá-los na linha de comando (tal qual "gnome" em <code>emerge gnome</code>) serão adicionados ao conjunto de pacote "world". Isso proporciona um jeito fácil de atualizar o sistema inteiro.
###i## emerge -av debootstrap
 
* IMPORTANT: 8 news items need reading for repository 'gentoo'.
* Use eselect news to read news items.
 
 
These are the packages that would be merged, in order:
 
Calculating dependencies... done!
[ebuild  N    ] dev-perl/TimeDate-2.300.0  31 kB
[ebuild  N    ] app-arch/dpkg-1.17.10  USE="bzip2 lzma nls unicode update-alternatives zlib -dselect {-test}" 4,100 kB
[ebuild  N    ] dev-util/debootstrap-1.0.59  96 kB
 
Total: 3 packages (3 new), Size of downloads: 4,226 kB
 
Would you like to merge these packages? [Yes/No]
</console>
 
After installing debootstrap, you can create your debian container using:
 
<console>
###i## lxc-create -B btrfs -n vm1 -t debian
debootstrap is /usr/bin/debootstrap
Checking cache download in /var/cache/lxc/debian/rootfs-wheezy-armhf ...
Copying rootfs to /var/lib/lxc/vm1/rootfs...Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
update-rc.d: using dependency based boot sequencing
update-rc.d: using dependency based boot sequencing
update-rc.d: using dependency based boot sequencing
update-rc.d: using dependency based boot sequencing
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Creating SSH2 ECDSA key; this may take some time ...
invoke-rc.d: policy-rc.d denied execution of restart.
Timezone in container is not configured. Adjust it manually.
Root password is 'root', please change !
</console>


We will see that the lxc-create command created a subvolume on BTRFS backing file system (-B switch took care of this).
No entanto, as vezes é bom ser capaz de atualizar o kernel todo por sim só, ou deixar uma atualização do kernel fora da sua regular atualização completa do sistema. Para fazer isso, criaremo uma nova configuração de pacote chamada "kernel".
<console>
###i## btrfs sub list /
---- snip ----
ID 1143 gen 437 top level 5 path var/lib/lxc/vm1/rootfs
---- snip ----
</console>


Now you are ready to do all the fun stuff with your LXCs.
==== Configuração de Pacote do Kernel ====


== Starting/stoping containers ==
Para criar a configuração de pacote do kernel, realize os seguintes passos:
To start a previously created container use the lxc utils:


<console>
<console>
###i## lxc-start -n vm1 -d
(chroot) # ##i##mkdir /etc/portage/sets
###i## lxc-info -n vm1
(chroot) # ##i##echo sys-kernel/debian-sources > /etc/portage/sets/kernel
Name:          vm1
State:          RUNNING
PID:            29742
IP:            172.16.65.234
CPU use:        2.92 seconds
BlkIO use:      260.00 KiB
Memory use:    2.99 MiB
KMem use:      0 bytes
Link:          vethTN4NGU
TX bytes:      2.33 KiB
RX bytes:      39.54 KiB
Total bytes:  41.87 KiB
###i## lxc-attach -n vm1
###r## root@vm1:~#
###r## root@vm1:~# exit
###i## lxc-stop -n vm1
Name:          vm1
State:          STOPPED
</console>
</console>


== Freezing/unfreezing containers ==
Agora, vamos querer definir uma variável USE para dizer ao <code>debian-sources</code> que construa um kernel "universal" e o initramfs para nós, para levar Funtoo Linux a funcionamento na inicialização. Para fazer isso, vamos configurar a variável <code>binary</code> USE para <code>debian-sources</code>, como a seguir:
The command lxc-freeze freezes all the processes running inside the container. The processes will be blocked until they are explicitly thawed by the lxc-unfreeze command. To freeze a previously started container use the lxc utils:


<console>
<console>
###i## lxc-freeze -n vm1
(chroot) # ##i##echo "sys-kernel/debian-sources binary" >> /etc/portage/package.use
###i## lxc-info -n vm1
Name:          vm1
State:          FROZEN
PID:            6817
IP:            172.16.65.234
CPU use:        2.78 seconds
BlkIO use:      0 bytes
Memory use:    2.47 MiB
KMem use:      0 bytes
Link:          veth7E1J8R
TX bytes:      1.45 KiB
RX bytes:      3.85 KiB
Total bytes:  5.31 KiB
###i## lxc-unfreeze -n vm1
###i## lxc-info -n vm1
Name:          vm1
State:          RUNNING
PID:            6817
IP:            172.16.65.234
CPU use:        2.78 seconds
BlkIO use:      0 bytes
Memory use:    2.47 MiB
KMem use:      0 bytes
Link:          veth7E1J8R
TX bytes:      1.58 KiB
RX bytes:      11.13 KiB
Total bytes:  12.71 KiB
</console>
</console>


== Clones and snapshots  ==
Se as varáveis USE forem novas para você, você estará se familiarizando com elas um pouco mais enquanto utiliza o Funtoo Linux. Em sua essência, elas são "switches" que você pode definir para configurar opções que podem ser construídas em vários pacotes. Elas são utilizadas para assim personalizar seu Funtoo Linux system para que conheça as suas exatas necessidades. Nós adicionamos suporte para uma flag <code>binary</code> USE aos ebuilds <code>debian-sources</code>, assim como poucos outros de nossos kernel ebuilds, para tornar mais fácil para que novos usuários de consigam obter o Funtoo Linux funcionando e operando.
Now the really nice features of LXC are snapshots of containers and also creating clones of containers. The command lxc-snapshot creates snapshot under /var/lib/lxcsnaps/ directory, this directory must also reside on a BTRFS filesystem. To snapshot a previously created container use the lxc utils:


<console>
Agora, quando queremos somente atualizar os pacotes do nosso sistema, digitaremos <code>emerge -auDN @world</code>, e isso atualizará nossa configuração world, deixando de fora o kernel. Do mesmo modo, quando queremos atualizar somente o nosso kernel, digitaremos <code>emerge -au @kernel</code>, e isso atualizará nosso kernel, deixando de fora a configuração world.
###i## lxc-snapshot -n vm1
###i## lxc-snapshot -L -n vm1                                                                                                       
snap0 (/var/lib/lxcsnaps/vm1) 2014:11:15 14:01:18
###i## btrfs sub list /
--- snip ---
ID 1144 gen 448 top level 1136 path var/lib/lxcsnaps/vm1/snap0/rootfs
--- snip ---
</console>


You can also add comments (using a comment file and -c switch). Lets pretend something didn't go well after an upgrade. No big deal if you remembered to create a snapshot before the upgrade. Now you can restore the container to the last good state.
==== Construindo o Kernel ====


<console>
{{Fancynote|1=
###i## btrfs sub list /
Veja [[Pt-br/Funtoo_Linux_Kernels|Kernels do Funtoo Linux]] para uma lista completa de kernels que possuem suporte no Funtoo Linux. Recomendamos <code>debian-sources</code> para novos usuários.}}
--- snip ---
ID ''1143'' gen 437 top level 5 path var/lib/lxc/vm1/rootfs
ID 1144 gen 448 top level 1136 path var/lib/lxcsnaps/vm1/snap0/rootfs
--- snip ---
###i## lxc-snapshot -L -n vm1                                                                                                       
snap0 (/var/lib/lxcsnaps/vm1) 2014:11:15 14:01:18
###i## lxc-snapshot -n vm1 -r snap0
###i## lxc-snapshot -L -n vm1                                                                                                       
snap0 (/var/lib/lxcsnaps/vm1) 2014:11:15 14:01:18
###i## btrfs sub list /
--- snip ---
ID 1144 gen 448 top level 1136 path var/lib/lxcsnaps/vm1/snap0/rootfs
ID ''1147'' gen 453 top level 5 path var/lib/lxc/vm1/rootfs
--- snip ---
</console>


Notice the ID change in btrfs subvolume list command (ID in italics). BTRFS took care of the lxc-snapshot call and restored the snapshot contained in the lxcsnaps/vm1/snap0 directory.
{{fancyimportant|1=
<code>debian-sources</code> com flag <code>binary</code> USE requer ao menos 14GB livre em <code>/var/tmp</code> e leva torno de 1 hora para construir em um processador Intel Core i7.}}


Now clones are containers that are exactly the same as the originating container. So for example you will configure a basic LAMP stack (LXC Apache Mariadb PHP) in one container and want to use different container for different websites. So after doing all the hard work of setting up LAMP you just clone the container using lxc tools.
Vamos emerge nosso kernel:


<console>
<console>
###i## btrfs sub list /
(chroot) # ##i##emerge -1 @kernel
--- snip ---
ID 1144 gen 448 top level 1136 path var/lib/lxcsnaps/vm1/snap0/rootfs
ID 1147 gen 453 top level 5 path var/lib/lxc/vm1/rootfs
--- snip ---
###i## lxc-clone -B btrfs -s vm1 vm2
Created container vm2 as snapshot of vm1
###i## btrfs sub list /
--- snip ---
ID 1144 gen 448 top level 1136 path var/lib/lxcsnaps/vm1/snap0/rootfs
ID 1147 gen 455 top level 5 path var/lib/lxc/vm1/rootfs
ID 1148 gen 455 top level 5 path var/lib/lxc/vm2/rootfs
--- snip ---
</console>
</console>


== Cgroups control ==
{{Important|Agora mesmo, a opção <code>-1</code> é exigida para não adicionar nosso <code>@kernel</code> defina para <code>world-sets</code>. Isso lhe premite emerge independentemente do @world. Se você esquecer de utilizar esta opção, edite <code>/var/lib/portage/world-sets</code> e remova a linha <code>@kernel</code>. Isso vai impedir que as atualizações do kernel de serem incluídas nas atualizações @world.}}
Get or set the value of a state object (for example, 'cpuset.cpus') in the container's cgroup for the corresponding subsystem.
* TODO


== Managing devices ==
Note que enquanto o uso da flag <code>binary</code> do USE  faz instalar um kernel funcional extremamente simples, isso é uma parte do Funtoo Linux que leva um tempo ''muito'' para construir a partir da fonte, por que está construindo um kernel que suporta ''todo'' hardware que suporta Linux! Então, inicie o build, e então deixe sua máquina compilar. Máquinas mais lentas podem levar várias horas para construir o kernel, e você vai querer ter certificar-se de que configurou <code>MAKEOPTS</code> no <code>/etc/portage/make.conf</code> para o número de processamento de cores/threads (mais um) em seu sistema antes de começar a construí-lo o o mais breve possível -- veja o [[#/etc/portage/make.conf|/etc/portage/make.conf section]] se você esqueceu de fazer isso.
* TODO
 
== Monitoring containers ==
There is a utility lxc-top that shows some basic information about running containers.
 
<console>
###i## lxc-top
Container            CPU      CPU      CPU      BlkIO        Mem
Name                Used      Sys    User      Total      Used
vm1                3.16    3.00    0.95  13.05 MB  12.70 MB
vm2                0.14    0.06    0.10    0.00    372.00 KB
vm3                3.39    2.09    1.98  868.00 KB    1.44 MB
vm4                3.15    2.01    1.71    0.00    912.00 KB
TOTAL (4 )         9.84    7.16    4.74  13.89 MB  15.40 MB
</console>


== Web GUI ==
{{fancynote|usuários de placa NVIDIA: a flag <code>binary</code> de USE instala os drivers Nouveau  que não podem ser carregados ao mesmo tempo que os drivers proprietário, e não podem descarregar em tempo de execução por causa do KMS. Você precisa colocar isso na lista negra (blacklist) sob <code>/etc/modprobe.d/</code>.}}
There are a few web GUIs available for LXC. LXC-Web-Panel is a simple one that does the work good. You can get it from https://github.com/trick77/LXC-Web-Panel (it is a fork of LXC-Web-Panel from https://github.com/lxc-webpanel/LXC-Web-Panel, but supports LXC 1.0). You need flask (dev-python/flask).
* TODO
[[File:Lxc-web.png|600px|LXC Web Panel]]


== Summary ==
{{fancynote|Para uma visão geral de outras opções de kernel para o Funtoo Linux, veja [[Funtoo Linux Kernels]]. Pode haver módulos que o kernel Debian kernel não inclua, uma situação onde [http://www.funtoo.org/wiki/Funtoo_Linux_Kernels#Using_Debian-Sources_with_Genkernel genkernel] seria útil. Também certifique-se de ver a informação [[:Category:Hardware Compatibility|hardware compatibility]].}}
LXC is a very powerful virtualization technology, in Linux it is one one many to choose from and that is nice. LXC works off the host's existing vanilla kernel, thanks to functionality called cgroups that was merged into the Linux kernel v2.6.24. This allows operating system-level virtualization, and the ability to run multiple isolated Linux systems in "containers" -- a lightweight version of virtual machines (VM).


[[Category:Virtualization]]
uma vez que o <code>emerge</code> completa, você terá um kernel novinho e o initramfs instalado em <code>/boot</code>, mais o kernel headers instalado em <code>/usr/src/linux</code>, e você estará pronto para configurar o boot loader para que carregue esses para que venha a inicializar seu sistema Funtoo Linux.

Revision as of 15:33, April 11, 2015

Configurando e instalando o kernel Linux

Agora é hora de construir e instalar um kernel Linux, o qual é o coração de qualquer sistema Funtoo Linux. O kernel é carregado pelo boot loader, e interfaces diretamente com o hardware do seu sistema, e permite programas regulares (userspace) serem executador.

Um kernel deve ser configurado propriamente para o hardware do seu sistema, desse modo ele suporta seus hard drives, file systems, placas de rede, e assim por diante. Usuários de Linux mais experientes podem escolher instalar o kernel sources e configurar e instalar seu próprio kernel. Se você não sabe como fazer isso, nós fornecemos ebuilds que construirão automaticamente um kernel "universal", módulos e initramfs para a inicialização do seu sistema que suporte todo o hardware. Esse é um jeito extremamente simples de construção de um kernel que colocará seu sistema para inicializar.

Qual é o nosso objetivo? Construir um kernel que reconhecerá todo o hardware em seu sistema necessário para inicialização, você será cumprimentado por um prompt de login amigável depois que a instalação estiver completa. Estas instruções lhe guiarão através do processo de instalação de um kernel no modo "fácil" -- sem exigir configuração do usuário, ao utilizar um kernel "universal".

Package Sets

Antes que instalemos um kernel, vamos cobrir um recurso do Portage chamado package sets. Portage, o sistema gerenciador/ports de pacotes para o Funtoo Linux, manterá rastro de pacotes do sistema assim como pacotes que você tem instalado ao invocar emerge diretamente. Esses pacotes que são parte do sistema base são considerados parte do conjunto de pacote do "sistema" (system packages sets), enquanto pacotes que você tem instalado ao digitá-los na linha de comando (tal qual "gnome" em emerge gnome) serão adicionados ao conjunto de pacote "world". Isso proporciona um jeito fácil de atualizar o sistema inteiro.

No entanto, as vezes é bom ser capaz de atualizar o kernel todo por sim só, ou deixar uma atualização do kernel fora da sua regular atualização completa do sistema. Para fazer isso, criaremo uma nova configuração de pacote chamada "kernel".

Configuração de Pacote do Kernel

Para criar a configuração de pacote do kernel, realize os seguintes passos:

(chroot) # mkdir /etc/portage/sets
(chroot) # echo sys-kernel/debian-sources > /etc/portage/sets/kernel

Agora, vamos querer definir uma variável USE para dizer ao debian-sources que construa um kernel "universal" e o initramfs para nós, para levar Funtoo Linux a funcionamento na inicialização. Para fazer isso, vamos configurar a variável binary USE para debian-sources, como a seguir:

(chroot) # echo "sys-kernel/debian-sources binary" >> /etc/portage/package.use

Se as varáveis USE forem novas para você, você estará se familiarizando com elas um pouco mais enquanto utiliza o Funtoo Linux. Em sua essência, elas são "switches" que você pode definir para configurar opções que podem ser construídas em vários pacotes. Elas são utilizadas para assim personalizar seu Funtoo Linux system para que conheça as suas exatas necessidades. Nós adicionamos suporte para uma flag binary USE aos ebuilds debian-sources, assim como poucos outros de nossos kernel ebuilds, para tornar mais fácil para que novos usuários de consigam obter o Funtoo Linux funcionando e operando.

Agora, quando queremos somente atualizar os pacotes do nosso sistema, digitaremos emerge -auDN @world, e isso atualizará nossa configuração world, deixando de fora o kernel. Do mesmo modo, quando queremos atualizar somente o nosso kernel, digitaremos emerge -au @kernel, e isso atualizará nosso kernel, deixando de fora a configuração world.

Construindo o Kernel

   Note

Veja Kernels do Funtoo Linux para uma lista completa de kernels que possuem suporte no Funtoo Linux. Recomendamos debian-sources para novos usuários.

   Important

debian-sources com flag binary USE requer ao menos 14GB livre em /var/tmp e leva torno de 1 hora para construir em um processador Intel Core i7.

Vamos emerge nosso kernel:

(chroot) # emerge -1 @kernel
   Important

Agora mesmo, a opção -1 é exigida para não adicionar nosso @kernel defina para world-sets. Isso lhe premite emerge independentemente do @world. Se você esquecer de utilizar esta opção, edite /var/lib/portage/world-sets e remova a linha @kernel. Isso vai impedir que as atualizações do kernel de serem incluídas nas atualizações @world.

Note que enquanto o uso da flag binary do USE faz instalar um kernel funcional extremamente simples, isso é uma parte do Funtoo Linux que leva um tempo muito para construir a partir da fonte, por que está construindo um kernel que suporta todo hardware que suporta Linux! Então, inicie o build, e então deixe sua máquina compilar. Máquinas mais lentas podem levar várias horas para construir o kernel, e você vai querer ter certificar-se de que configurou MAKEOPTS no /etc/portage/make.conf para o número de processamento de cores/threads (mais um) em seu sistema antes de começar a construí-lo o o mais breve possível -- veja o /etc/portage/make.conf section se você esqueceu de fazer isso.

   Note

usuários de placa NVIDIA: a flag binary de USE instala os drivers Nouveau que não podem ser carregados ao mesmo tempo que os drivers proprietário, e não podem descarregar em tempo de execução por causa do KMS. Você precisa colocar isso na lista negra (blacklist) sob /etc/modprobe.d/.

   Note

Para uma visão geral de outras opções de kernel para o Funtoo Linux, veja Funtoo Linux Kernels. Pode haver módulos que o kernel Debian kernel não inclua, uma situação onde genkernel seria útil. Também certifique-se de ver a informação hardware compatibility.

uma vez que o emerge completa, você terá um kernel novinho e o initramfs instalado em /boot, mais o kernel headers instalado em /usr/src/linux, e você estará pronto para configurar o boot loader para que carregue esses para que venha a inicializar seu sistema Funtoo Linux.