PHP kódminőség fenntartás
php, qa, static code checking, phpunit, phpcs, phpmd, phpstan, churn, phpdd, psalm, phplint, phan
2024-10-17
Failed: bson encoding error: BSON element key cannot contain null bytes
mongo, mongodb, bson, null, key
2024-08-24
Nem bízol a kollégáidban? Akkor valamit rosszul csinálsz!
bizalom vezetokent
2023-05-03
Dolgok, amikről a programozók azt hiszik, hogy tudják, de tévednek
programozoi-tevhitek-falsehoods
2023-04-08
A programozóktól meg kell szabadulni
chatgpt no-code low-code
2023-01-22
Miért fontosak a személyes adatok egyáltalán?
privacyaware, privacy
2023-01-07
Egy tanmese a szerény, de tehetséges informatikusról, akit én csak Gézának hívok
privacyaware, privacy
2023-01-02
Beskatulyáznád magad egy termékkel? Gondold át még egyszer!
learning, vendorlockin, risky
2022-12-11
Rekrúterekről és állásajánlatokról
bérsáv, recruiter, relevancia
2022-10-30
"A hídon akkor kell átmenni, amikor odaérünk."​ - YAGNI
yagni, pagni
2022-10-17
"A lényeg, hogy a munka készen legyen!"
agile, estimation, becsles, scrum, home office
2022-08-20
Munka vs. hivatás, a klasszikus dilemma
hr, hobbi, munka, egyensuly, hivatas
2022-07-18
Miért nem fogok nálatok technikai interjún részt venni?
technikai interju, hr, recruit, leet code, coding challenge, take home challenge
2022-07-04
"Hogyan építsek kapcsolati tőkét, ha karriert szeretnék váltani?"
linkedin, tippek, trukkok
2022-06-10
Junior/Medior/Senior, hogyan mérjük?
junior, medior, senior, hr, grade, level, experience
2022-05-09
11 tipp frontendeseknek, hogyan tegyék hatékonyabbá a munkájukat
frondend, vscode, angular
2021-10-31
Motion zoom - mozgás alapú képrekonstrukció
#52het
2021-06-01
Gesture Launcher
#52het
2021-05-31
CellEvent, első Android alkalmazásom
#52het
2021-05-19
Notebookcheck, azaz hogyan válasszuk ki a legjobb ár-érték arányú eszközt
#52het
2021-05-18
Torrent multiplexer
#52het
2021-05-17
Process watcher, logger
#52het
2021-05-05
Lazy loading material dialog content
lazy loading, angular, material, dialog
2020-12-28
Runtime configuration loading in Angular
angular, runtime, configuration, settings, environment, production
2020-03-29
How to start an Angular project?
angular
2020-03-11
Az 52 hét projekt
#52het
2020-01-01
Akkutöltöttség-jelző
#52het
2020-01-01
NetClub - Kollégiumi internetszolgáltató
#52het
2019-12-31
DeeJayy - Lost Terminal
#52het
2019-12-31
Counter Strike monitor
#52het
2019-12-31
Kollégiumi CS bajnokság 2005
#52het
2019-12-31
Mozgásérzékelős képrögzítő, Camera Capture
#52het
2019-12-30
Többszörös host pingelő
#52het
2019-12-30
Sávszélesség mérő, tesztelő
#52het
2019-12-30
Generáljunk hamis adatokat
#52het
2019-12-30
SQL lekérdezések parancssorból, odbc-vel
#52het
2019-12-30
Nonogram generátor (aka. "Fesse feketére")
#52het
2019-12-30
Egyedi chat alkalmazás, kliens és szerver
#52het
2019-12-29
FontSelector - betűtípusválasztó / font preview
#52het
2019-12-28
Saját hálózati kommunikációs segédszoftver - sox
#52het
2019-12-28
Csoportos e-mail küldő szoftver Delphiben
#52het
2019-12-28
Universal Api caller module for Angular 7-9 With NGRX state management
Ngrx, API, Effects, HttpClient
2019-07-02
A leghosszabb projekt
#52het
2019-04-19
Legelső kioszk projektem: Stari Sör Jukebox
#52het
2019-02-28
BPM számláló
#52het
2018-11-01
Assembly féléves beadandók
#52het
2018-11-01
Chatbot before it was cool
#52het
2018-10-30
StartX - Cseréljük ki a windows tálcáját és a Start menüt
#52het
2018-10-28
What? - fájltípus azonosító
#52het
2018-10-27
Transport Tycoon DirectX
#52het
2018-10-26
Diff - fájlösszehasonlító
#52het
2018-10-26
De Facto - Szoftverfelügyelet
#52het
2018-10-25
CD és DVD katalogizáló
#52het
2018-09-24
MP3 segédeszközök
#52het
2018-09-24
Keylogger - azaz billentyűleütés-figyelő és naplózó alkalmazás
#52het
2018-08-29
Az örök projekt: személyes weboldal és blog
#52het
2018-08-14
Szógyakorló nyelvtanuláshoz
#52het
2018-08-13
Warzone 2100 mentett játék szerkesztő
#52het
2018-08-13
Rejtett Windows-beállításokat konfiguráló program: TweakMaster
#52het
2018-08-13
A DrótPostaGalamb levelezőprogram adatfájljainak dekódolása
#52het
2018-08-13
Privacy jegyzet
2018-07-30
Egy éve ilyenkor
2018-07-25
The Matrix - konzol szimuláció
#52het
2018-07-13
Kakaóreceptkönyv
kakaó
2018-06-29
Crackelés!
#52het
2018-06-22
A K.I.T.T. challenge
#52het
2018-06-18
Doom 2 botokkal
#52het
2018-06-16
Römi játék Delphiben
#52het
2018-06-09
MeetsCow & DeeJayy - Intro
#52het
2018-06-09
Direct viewer - bitmap megjelenítő
#52het
2018-06-09
bazMAG
#52het
2018-06-09
Console Vision - Konzolos ablakkezelő Delphiben
#52het
2018-05-01
Quake 2 egy floppyn
#52het
2018-04-20
Játék-kitömörítők
#52het
2018-04-12
Tetszőleges program elrejtése Windows tálcáról
#52het
2018-04-05
Személyre szabás
#52het
2018-03-28
A year with Angular 5, 6 - Angular 2018
#angular5 #angular #resources #articles
2018-03-16
Az ikon evolúciója
#52het
2018-03-14
Betűtípusok
#52het
2018-03-04
Billentyűzet-gyakorló
#52het
2018-02-28
Zenél is a DeeJayy?
#52het
2018-02-22
Térképrajzoló az Ascii 3D labirintushoz
#52het
2018-02-19
Ascii 3D labyrinth
#52het
2018-02-14
52 hét - 52 projekt, avagy #eletem
#52het
2018-02-14
Dockerezzünk virtualizált környezetben!
docker, xen, ubuntu
2017-11-12
A cloud-initramfs-copymods hatásai paravirtualizált környezetben
ubuntu, xen, copymods, docker, docker-ce, docker.io
2017-11-11
Virtualizáljunk Xen 4.6-tal Ubuntu 16-on (Xenial)
ubuntu, xen, virtualizálás, hypervisor, debootstrap
2017-11-04
Álláskeresésem története
álláskeresés, it, fejvadászok, linkedin, job
2017-10-24
FAR Manager competitors
far manager, file managers
2010-01-01
Blog
blog
2001-01-02

Virtualizáljunk Xen 4.6-tal Ubuntu 16-on (Xenial)

Alaprendszer telepítés és beállítás

Először is feltelepítjük az Ubuntu 16-ot (Xenial, 16.04.3 LTS, kernel: 4.4.0-87) default beállításokkal a hoszt gépre (Dom0), értelemszerűen. Hasznos, ha a telepítés közben a gépnek van internethozzáférése, a csomagok egy részét így frissen le tudja tölteni.

A partíciókat a következőképpen állítottam be (a méretek most nem fontosak, inkább a felépítés):

Partíciók XEN virtualizációhoz

  • 4 GB ext4, ami a root könyvtár lesz, bootable
  • 2 GB swap, mert ennyi memória van a gépben
  • maradék, itt most 15.5 GB LVM-ként lesz használva

Csomagokból csak az SSH-t tettem fel, a többit majd az apt-get megoldja, amikor már fut a rendszer:

Telepítendő alapcsomagok

Újraindulás után a következő alapvető csomagok szükségesek a Xen virtualizációhoz:

  • xen-hypervisor
  • debootstrap
root@ub16:~# apt update
root@ub16:~# apt upgrade
root@ub16:~# apt install xen-hypervisor debootstrap
root@ub16:~# reboot

Ellenőrizzük a Xen telepítés sikerességét:

root@ub16:~# xl list
Name     ID  Mem VCPUs  State Time(s)
Domain-0  0 1896     1 r-----     8.7

Virtuális környezet építőelemei

A virtuális gépek (guest-ek, DomU-k) lemezeit nem tanácsos hagyományos fájlrendszeren tárolni, mivel annak alapvető működése némi overhead-et adhat az adatok írásánál/olvasásánál. Erre használjuk a korábban LVM-nek beállított partíciót (nekem most épp /dev/sda6).

Az LVM három fő komponensből épül fel:

  1. PV = physical volume, fizikai diszk, partíció vagy storage lun
  2. VG = volume group, nem szükségszerűen, de több PV-ből is állhat
  3. LV = logical volume, virtuális partíció vagy logikai diszk, ezt az objektumot tudja kezelni a virtulis gép

LVM építőelemei

root@ub16:~# pvcreate /dev/sda6
Physical volume "/dev/sda6" successfully created
root@ub16:~# vgcreate -s 256M vg01 /dev/sda6
Volume group "vg01" successfully created
root@ub16:~# lvcreate -l 16 vg01 -n lv-system
Logical volume "lv-system" created.
root@ub16:~# lvcreate -l 4 vg01 -n lv-swap
Logical volume "lv-swap" created.

Egy kis magyarázat a paraméterekhez:

  • vgcreate -s: meghatározza az extent méretét, azaz ekkora darabokból áll majd a logikai diszk, 256MB-nál kisebb diszkeket valószínűleg nem fogunk létrehozni, viszonylag könnyű vele számolni (4 db = 1GB). Persze meg lehet adni nagyobbat, mondjuk pont 1 GB-t, akkor még egyszerűbb a számolás.
  • lvcreate -l: azt adja meg, hogy hány extentből álljon a logikai lemez, 16 annyit jelent, hogy 16 * 256MB = 4GB
  • lvcreate -n: lv neve A fenti parancsok kiadása után így kell kinéznie az LVM struktúrának:
root@ub16:~# pvs
PV         VG   Fmt  Attr PSize  PFree
/dev/sda6  vg01 lvm2 a--  14.25g 9.25g
root@ub16:~# vgs
VG   #PV #LV #SN Attr   VSize  VFree
vg01   1   2   0 wz--n- 14.25g 9.25g
root@ub16:~# lvs
LV        VG   Attr       LSize...
lv-swap   vg01 -wi-a----- 1.00g
lv-system vg01 -wi-a----- 4.00g

Virtuális gép létrehozása paravirtuálizációhoz, NAT-tal

Előkészítjük (megformázzuk) a két partíciót:

root@ub16:~# mkfs.ext4 /dev/vg01/lv-system
root@ub16:~# mkswap /dev/vg01/lv-swap

Első megoldásként paravirtuálizált (PV) rendszert hozunk létre, amihez a debootstrapet használjuk.

root@ub16:~# mkdir -p /mnt/vm && mount /dev/vg01/lv-system /mnt/vm
root@ub16:~# cd /mnt/vm
root@ub16:/mnt/vm# debootstrap xenial .

...

I: Base system installed successfully.
root@ub16:/mnt/vm# cp -pr /lib/modules/`uname -r`/ ./lib/modules/

Az alaprendszer egyes elemeit még indulás előtt testre kell szabni, beállítani.

  • root jelszó
  • környezet
  • SSH
  • partíciók (fstab)
  • hosztnév
  • hálózat

Root jelszó megadása

root@ub16:/mnt/vm# chroot . /usr/bin/passwd

Környezet

root@ub16:/mnt/vm# cp /etc/apt/sources.list ./etc/apt/sources.list 
root@ub16:/mnt/vm# chroot . locale-gen "en_US.UTF-8"
root@ub16:/mnt/vm# chroot . dpkg-reconfigure tzdata
root@ub16:/mnt/vm# chroot . apt update
root@ub16:/mnt/vm# chroot . apt upgrade

SSH telepítése és beállítása

root@ub16:/mnt/vm# chroot . apt install ssh
root@ub16:/mnt/vm# sed -i "s/PermitRootLogin.*/PermitRootLogin yes/" ./etc/ssh/sshd_config

Partíciók meghatározása (/etc/fstab tartalma)

root@ub16:/mnt/vm# vi ./etc/fstab
# file_system mount_point type  options dump pass
proc             /proc           proc    defaults        0       0
/dev/xvda1       /               ext4    defaults,errors=remount-ro 0       1
/dev/xvda2       none            swap    sw              0       0

Hosztnév

root@ub16:/mnt/vm# vi ./etc/hostname
ub16-vm

Hálózati beállítások

root@ub16:/mnt/vm# vi ./etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.168.2
    netmask 255.255.255.0
    gateway 192.168.168.1
    dns-nameservers 8.8.8.8

A hoszt szerver (Dom0) beállítása

Ahhoz, hogy a virtuális gép zökkenőmentesen elinduljon a felkészítés után, néhány dologról gondoskodni kell a Dom0-n:

  • Xen konfiguráció
  • hálózat beállítása NAT-ra
  • virtuális gép definíciós fájl

Xen konfiguráció

Alapesetben a Xen úgy van beállítva, hogy a guest-eket bridge-elt kapcsolaton keresztül lássa el hálózattal. Ezt most átállítjuk NAT típusúra. Ehhez a következő fájlokban eképpen kell módosítani a konfigot:

root@ub16:~# vi /etc/xen/xend-config.sxp

...

#(vif-script vif-bridge)

...

(network-script network-nat)
(vif-script     vif-nat)

...
root@ub16:~# vi /etc/xen/xl.conf

...

vif.default.script="vif-nat"

...

Hálózat beállítása NATolásra

root@ub16:~# vi /etc/sysctl.conf

...

net.ipv4.ip_forward=1

...
root@ub16:~# mkdir /etc/firewall
root@ub16:~# vi /etc/firewall/firewall.sh
#!/bin/bash

echo iptables config...

IPT="/sbin/iptables"
IFACE_OUT="enp0s3" # ellenorizzuk a kovetkezo paranccsal: ip a

${IPT} --flush
${IPT} --flush --table nat
${IPT} --table nat --append POSTROUTING --out-interface ${IFACE_OUT} --jump MASQUERADE
${IPT} --append FORWARD --match state --state ESTABLISHED,RELATED --in-interface ${IFACE_OUT} --jump ACCEPT

${IPT} --append PREROUTING --table nat --source 192.168.168.0/24 --jump ACCEPT
root@ub16:~# vi /etc/rc.local

...

/bin/bash /etc/firewall/firewall.sh
exit 0

Guest konfig elkészítése

A konfigfájlokat a /etc/xen/machines könyvtárban fogjuk tárolni. Ahhoz, hogy a hoszt oprendszerrel automatikusan induljon a virtuális gép is, létrehozunk egy symlinket az /etc/xen/auto könyvtárban.

root@ub16:~# mkdir /etc/xen/{machines,auto}
root@ub16:~# vi /etc/xen/machines/vm.conf
kernel      = '/boot/vmlinuz-4.4.0-87-generic'
ramdisk     = '/boot/initrd.img-4.4.0-87-generic'
memory      = '1024'

root        = '/dev/xvda1 ro'
disk        = [
    'phy:/dev/vg01/lv-system,xvda1,w',
    'phy:/dev/vg01/lv-swap,xvda2,w',
]

name        = 'vm'

vif         = [ 'ip=192.168.168.2,mac=00:16:3E:00:00:02' ]

on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'
vcpus       = '1'
extra       = 'xencons=tty1'
vnc         = '0'
sdl         = 0
opengl      = 0
serial      = 'pty'
tsc_mode    = 'default'
localtime   = 1
on_xend_start = 'start'
root@ub16:~# ln -s /etc/xen/machines/vm.conf /etc/xen/auto/
root@ub16:~# reboot

Ellenőrzés

Ellenőrizzük, hogy minden az elvártaknak megfelelően működik-e:

root@ub16:~# xl list
Name      ID  Mem VCPUs  State Time(s)
Domain-0   0  988     1 r-----     8.7
vm         1 1024     1 -b----     2.3

root@ub16:~# ssh 192.168.168.2
root@ub16-vm:~# ping index.hu
PING index.hu (217.20.130.99) 56(84) bytes of data.
64 bytes from index.hu (217.20.130.99): icmp_seq=1 ttl=56 time=5.25 ms
64 bytes from index.hu (217.20.130.99): icmp_seq=2 ttl=56 time=4.96 ms