DEV Community

Cover image for CentOS ve RHEL'e LXC Kurulumu
Suleyman Poyraz
Suleyman Poyraz

Posted on

CentOS ve RHEL'e LXC Kurulumu

LXC, Linux Konteyner altyapısı olarak bilinen bir servistir. Bu servis tam olarak Docker benzeri bir yapıya sahiptir. Linux konteynırları, tek bir Linux çekirdeği üzerinde tek bir kontrol ana bilgisayarında aynı anda birden çok sanal birimi çalıştıran hafif "sanallaştırma" yöntemleridir.

Linux çekirdeği, herhangi bir sanal makinenin başlatılmasına gerek duymadann kaynak izolasyonu (CPU, bellek, blok G/Ç, ağ vb.) için Cgroups olarak adlandırılan gruplar içerir.

Cgroups ayrıca işlem ağaçları, ağlar, kullanıcı kimlikleri ve bağlı dosya sistemleri dahil olmak üzere işletim ortamının uygulama görünümünü tamamen izole etmek için isim alanı yalıtımı (namespace isolation) sağlar.

Konteyner kapsayıcıları ise, konteyner tarafından kullanılmak istenen yani kapsanan bir alanı bölmek için isim alanları, cgroups grupları, chroot adı verilen kök sistem değişim yöntemini ve çekirdek özelliklerini kullanır.
LXC'de bir konteyner kapsayıcısıdır, herhangi bir sanallaştırma yöneticisi veya hiperyönetici (hypervisor) olmadan linux içerisinde konteyner oluşturmayı sağlar.

Bu yazımda CentOS ve RHEL üzerinde LXC kurulumunu anlatacağım. Başlayalım.

Ön Gereksinimler

Her kurulumda olduğu gibi bu kurulum için de güncellemeleri yaparak başlayalım:

sudo yum update
Enter fullscreen mode Exit fullscreen mode

LXC kurulumu esnasında kaynak kodu derlemek için gcc ve make programlarına ihtiyaç duyacağız. Yani LXC kurulumu için geliştirme araçları bize sıkça gerekmekte. Bu yüzden Development Tools grubunu kuralım:

sudo yum groupinstall "Development tools"
Enter fullscreen mode Exit fullscreen mode

Ardından LXC için kullanılacak bağımlılıkları ayarlayalım. LXC iki kitaplığa bağlıdır; libpcap ve libcgroup. LXC aynı zamanda busybox ve bridge-utils yardımcı programlarını da gerektirir.
Şimdi bu paketleri kuralım:

sudo yum install libcap-devel libcgroup busybox bridge-utils
Enter fullscreen mode Exit fullscreen mode

Son olarak hala wget indirme yöneticisine sahip değilsek ona da ihtiyacımız olacağını belirteyim. Kurulumu ise şu şekilde yapılmaktadır.

sudo yum install wget
Enter fullscreen mode Exit fullscreen mode

LXC Kurulumu

Şimdi süperkullanıcı olalım ve LXC'yi kuralım.

sudo su
Enter fullscreen mode Exit fullscreen mode

Ayrıca süperkullanıcı olarak dosya işlemi yapacakken, kendi kişisel ev dizinimizden ayrılmamızda yarar var:

cd
Enter fullscreen mode Exit fullscreen mode

LXC'nin son sürümü olan lxc-4.0.x'i indireceğim şimdi:

wget https://linuxcontainers.org/downloads/lxc/lxc-4.0.10.tar.gz
Enter fullscreen mode Exit fullscreen mode

Şimdi dosyaları çıkartalım:

tar xvf lxc-4.0.10.tar.gz
Enter fullscreen mode Exit fullscreen mode
cd lxc-4.0.10/
Enter fullscreen mode Exit fullscreen mode

Şimdi yapılandırmaya başlayalım:

./configure
Enter fullscreen mode Exit fullscreen mode

Başarılı bir yapılandırma bir çıktı şu şekilde olmalı:

...
...
config.status: creating src/python-lxc/setup.py
config.status: creating src/lua-lxc/Makefile
config.status: executing depfiles commands
config.status: executing default commands
----------------------------
Environment:
 - compiler: gcc
 - distribution: centos
 - init script type(s): sysvinit
 - rpath: no
 - GnuTLS: no
 - Bash integration: yes
Security features:
 - Apparmor: no
 - Linux capabilities: yes
 - seccomp: no
 - SELinux: no
 - cgmanager: no
Bindings:
 - lua: no
 - python3: no
Documentation:
 - examples: yes
 - API documentation: yes
 - user documentation: no
Debugging:
 - tests: no
 - mutex debugging: no
Paths:
 - Logs in configpath: no
Enter fullscreen mode Exit fullscreen mode

Şimdi de LXC'yi derleyelim:

make 
Enter fullscreen mode Exit fullscreen mode

Başarılı bir inşanın bir çıktı şu şekilde olmalı:

...
Building full member lists recursively...
Adding members to member groups.
...
Generating style sheet...
Generating index page...
Generating page index...
Generating example documentation...
Generating file sources...
Generating code for file /root/lxc-4.0.10/src/lxc/attach_options.h...
Generating code for file /root/lxc-4.0.10/src/lxc/lxccontainer.h...
Generating code for file /root/lxc-4.0.10/src/lxc/lxclock.h...
Generating file documentation...
Generating docs for file /root/lxc-4.0.10/src/lxc/attach_options.h...
...
Generating file member index...
make[2]: Leaving directory `/root/lxc-4.0.10/doc/api'
make[2]: Entering directory `/root/lxc-4.0.10/doc'
...
Making all in hooks
make[1]: Entering directory `/root/lxc-4.0.10/hooks'
make[1]: Nothing to be done for `all'.
Enter fullscreen mode Exit fullscreen mode

Şimdi de yine make ile kuralım:

make install
Enter fullscreen mode Exit fullscreen mode

Başarılı bir kurulumun sonucu aşağıdaki gibi görünmelidir.

...
Making install in hooks
make[1]: Entering directory `/root/lxc-4.0.10/hooks'
 /bin/mkdir -p '/usr/local/share/lxc/hooks'
 /usr/bin/install -c clonehostname mountecryptfsroot ubuntu-cloud-prep squid-deb-proxy-client '/usr/local/share/lxc/hooks'
...
/bin/mkdir -p /usr/local/var/lib/lxc
/bin/mkdir -p /usr/local/var/cache/lxc
 /bin/mkdir -p '/usr/local/lib/pkgconfig'
 /usr/bin/install -c -m 644 lxc.pc '/usr/local/lib/pkgconfig'
...
Enter fullscreen mode Exit fullscreen mode

Bridged Adaptörü Yapılandırması

LXC konteynerlerine internet bağlamak için internet köprüsü oluşturmamız gerekecek ki bunu da bridged düzenleyerek yapacağız. Aşağıdaki ifcfg-eth0 örneğinde gösterildiği gibi köprü bağdaştırıcı için statik IP'yi yapılandıracağız:

cd /etc/sysconfig/network-scripts   
Enter fullscreen mode Exit fullscreen mode

Şimdi şu içeriği oluşturalım. Ancak ifcfg-br0 dosyasının olmadığına emin olun. Önceki yapılandırmalar için kullanıldıysa veya haricinde başka bir uygulama için kullanılıyorsa sıkıntı çıkarabilir. Ayrıca aşağıda benim xxx.xxx.xxx.xxx olan IP adresi ile NetMask'ı kendiniz için düzenleyin.

cat > ifcfg-br0 << "EOF" 
DEVICE="br0"
BOOTPROTO="static"
IPADDR="xxx.xxx.xxx.xxx"
NETMASK="255.255.255.xxx"
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"
EOF
Enter fullscreen mode Exit fullscreen mode

Örneğin benim için bu dosya şu şekilde idi:

cat > ifcfg-br0 << "EOF" 
DEVICE="br0"
BOOTPROTO="static"
IPADDR="10.32.4.31"
NETMASK="255.255.224.0"
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"
EOF
Enter fullscreen mode Exit fullscreen mode

Son adımlar

Son adımlarda LXC için bazı soft-link'ler oluşturmamız gerekecek. Bu linkler lxc'nin düzgün çalışması için önem arzetmekte.
Örneğin lxc'yi deneyelim:

# lxc-info --name test
test doesn't exist
Enter fullscreen mode Exit fullscreen mode

Yukarıdaki lxc-info --name test komutu için çıktı normal ancak eğer bizim shared object bazlı bir sorunumuz varsa çıktı biraz daha değişik olacaktır. Örneğin:

# lxc-info --name test
lxc-info: error while loading shared libraries: liblxc.so.4: cannot open shared object file: No such file or directory
Enter fullscreen mode Exit fullscreen mode

Bu durumda, bunu düzeltmek için, aşağıda gösterildiği gibi libxc.so.4 adında bir bağlantı oluşturmamız ve bu bağlantıyı, liblxc.so.xxx dosyasının doğru sürümüne bağlamamız gerekecektir.

ln -s /usr/local/lib/liblxc.so.4.0.10 /lib64/liblxc.so.4
Enter fullscreen mode Exit fullscreen mode

LXC Kurulumunu Doğrulamak

En son adımda, lxc ortamınızın doğru kurulduğunu doğrulamak için lxc-checkconfig'i çalıştıralım.

Bu script kurulumla alakalı dört farklı bölümde çıktılar verecektir, Bunlar:
1) İsim Alanları
2) Kontrol Grupları
3) Çeşitli ve
4) Kontrol Noktası/Geri Yükleme.

Sisteminizde her şey düzgün yapılandırılmışsa, yukarıdaki çıktıda, yukarıdaki gruplardaki tüm seçenekler “etkin” yazmalıdır. Örneğin:

# lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-4.18.0-80.el8.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
-------- Control groups ---
Cgroup: enabled
Cgroup namespace: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
..
-------- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
..
-------- Checkpoint/Restore ---
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
..
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/local/bin/lxc-checkconfig
Enter fullscreen mode Exit fullscreen mode

Bu kılavuzda da LXC kurmuş olduk. İyi çalışmalar...

Top comments (0)