安裝 QEMU/KVM & Docker

No Comments

目前初步評估/學習了一下,不少人建議使用 qemu-kvm 來作為虛擬機器因其使用體驗或許會優於 virtualbox。不過 qemu 顯示方面目前筆者認知就是 spice & vnc 兩種用戶終端,後者速度劣於 spice。而跨平台的顯示終端又以 RDP 為常見且使用體驗也或許優於 spice,其或許也有遠端顯示的能力/見參考資料,但是否有友善的終端就待學習後才能得知了。故當前筆者結論還是會持續使用 virtualbox/rdp 於遠端顯示與操作。qemu-kvm 則用於本地端的實務使用。docker 則毌需贅言有幾乎取代各種 VM 的態勢;話說回來 qemu 此類 VM 仍有其不可取代性。
就待筆者慢慢習得/將補充常見用法於下/主要也都出處於以下參考資料就不再強調。

參考資料

# 一。安裝 qemu/kvm:
sudo apt install qemu qemu-kvm libvirt-daemon libvirt-daemon-system libvirt-clients virtinst virt-manager cpu-checker bridge-utils

二。製作 qemu base image

  • 摘錄自這篇文章
    https://octetz.com/docs/2020/2020-10-19-machine-images/
  • 我們通常會製作常用的 base images,用以 clone 出來使用。不過若使用某原生 image 來同時派生執行多個實例,則因原生的 images 都已有設定例如 hostname 的資料,將會造成混淆。其次 machine-id 也會一樣,將可能導致 client ips 被指定成相同的 ip。因此尚須將製作出來的原生 image 加工過,使得同時執行的多個 images 實例不再衝突。
  • 當我們將原生 image 製作完成,並於該系統運行下再接著加工。
  • 有三個步驟,當中二個分別是刪除 hostname,及 machine-id。第三個是産生亂數所産生的 hostname,細節如下:
  • create hostname-init.sh in /usr/local/bin/
#!/bin/sh
SN="hostname-init"

# do nothing if /etc/hostname exists
if [ -f "/etc/hostname" ]; then
  echo "${SN}: /etc/hostname exists; noop"
  exit
fi

echo "${SN}: creating hostname"

# set hostname
HN=$(head -60 /dev/urandom | tr -dc 'a-z' | fold -w 3 | head -n 1)
echo ${HN} > /etc/hostname
echo "${SN}: hostname (${HN}) created"

# sort of dangerous, but works.
if [ -f "/etc/hostname" ]; then
  /sbin/reboot
fi
  • sudo chmod a+x /usr/local/bin/hostname-init.sh
  • sudo chown root:root /usr/local/bin/hostname-init.sh
  • create /etc/systemd/system/hostname-init.service
[Unit]
Description=Set a random hostname.
ConditionPathExists=!/etc/hostname

[Service]
ExecStart=/usr/local/bin/hostname-init.sh

[Install]
WantedBy=multi-user.target
  • sudo chmod 644 /etc/systemd/system/hostname-init.service
  • sudo systemctl daemon-reload
  • sudo systemctl enable hostname-init
  • sudo -i
  • echo -n > /etc/machine-id
  • rm -v /etc/hostname
  • exit
  • 接著就關機。base image 就完成了。並將其 clone 出來使用。
  • 經實際測試發現,clone 出來的 images 佔用空間會小於來源檔。按這篇文章的加工方法,其是一年多前的做法;因此筆者猜想/不再實測,使用 virt-clone 指令或許現今已自動排除衝突的可能,讀者可自行驗測看看。
# 其中,一些指令用法如下,

# list the managed images
virsh list --all

# Clone the_u20 to another_node0
virt-clone --original the_u20 \
    --name another_node0 \
    --file /var/lib/libvirt/images/node0.qcow2

# Power on the new clone
virsh start another_node0

# Find the IP addresses; the network name can be others; default is default
virsh net-dhcp-leases default

Categories: Linux

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

PHP Code Snippets Powered By : XYZScripts.com