1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Debian上でQEMU実行

Last updated at Posted at 2022-06-17

目的

Debian上でQEMUを実行する。
(以下暫定)

開発環境

開発環境
master@sv-server:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
・・・省略
master@sv-server:~$ lscpu | grep -Ei "(vt-x|amd-v)"
Virtualization:                  VT-x
master@sv-server:~$ lsmod | grep kvm
kvm_intel             327680  0
kvm                   921600  1 kvm_intel
irqbypass              16384  1 kvm
master@sv-server:~$ lsmem | grep "Total online memory"
Total online memory:       4G

パッケージ導入

パッケージ導入
sudo apt-get update
sudo apt-get install qemu-system-x86 bridge-utils

ブリッジ接続設定

ブリッジ接続設定
sudo cp -p /etc/network/interfaces /etc/network/interfaces.org
sudo sed -i /etc/network/interfaces \
         -e 's/^\(iface ens160 inet\) .*$/\1 manual/' \
         -e '/^iface ens160 inet .*$/a \\nauto br0\niface br0 inet static' \
         -e '$a \\tbridge_ports ens160\n\tbridge_stp off\n#\thwaddress ether '
connmanctl services
connmanctl services ethernet_(MAC ADDR)_cable
sudo connmanctl config ethernet_(MAC ADDR)_cable --ipv4 off --ipv6 off && \
sudo mkdir -p /etc/qemu
echo "allow br0" | sudo tee -a /etc/qemu/bridge.conf > /dev/null
sudo gpasswd -a ${USER} kvm
sudo reboot

QEMUテスト

予めpreseed_debian.cfgを入れたISOファイルを用意する。
ここではdist_remaster.shで以下のpreseed_debian.cfgを入れたISOファイルを作成し使用した。

QEMUテスト
mkdir -p ~/work
rm -f ~/work/debian11.img
qemu-img create -f raw ~/work/debian11.img 20G
sudo qemu-system-x86_64 \
  -smbios type=0,uefi=on \
  -cpu host -smp 2 -m 2G \
  -machine type=pc,accel=kvm -M q35 \
  -boot once=d \
  -cdrom ~/mkcd/dist_remaster_net/debian-11.3.0-amd64-netinst-preseed.iso \
  -drive file=~/work/debian11.img,media=disk,format=raw \
  -nic bridge,id=br0 \
  -nographic 
  • -boot once=d
    onceを忘れるとDVDから起動しインストールが繰り返される
  • -cdrom
    IDE接続に設定

preseed.cfg

コンソール画面でのインストールなのでpreseed_debian.cfgに以下の設定を行う。

項目 説明
ログイン先 任意(以下の例では192.168.1.1)
ユーザー名 installer
パスワード 任意(以下の例ではr00tme)
d-i netcfg/get_ipaddress string 192.168.1.1
d-i anna/choose_modules string network-console
d-i network-console/password password r00tme
d-i network-console/password-again password r00tme
preseed_debian.cfg
#_preseed_V1
# *****************************************************************************
# Contents of the preconfiguration file (for debian) : x86/amd64 [lxde-desktop]
# *****************************************************************************
# == Unattended Installation ==================================================
# d-i auto-install/enable boolean false
# d-i debconf/priority select critical
# d-i debconf/priority select low
  d-i hw-detect/select_modules multiselect usb-storage
# == Localization =============================================================
  d-i localechooser/translation/warn-light boolean true
  d-i localechooser/translation/warn-severe boolean true
  d-i debian-installer/language string ja
  d-i debian-installer/country string JP
  d-i debian-installer/locale string ja_JP.UTF-8
# -- Keyboard selection. ------------------------------------------------------
  d-i console-setup/ask_detect boolean false
  d-i keyboard-configuration/xkb-keymap select jp
  d-i keyboard-configuration/layoutcode string jp
  d-i keyboard-configuration/variant select Japanese
  d-i keyboard-configuration/modelcode string pc105
# == Network configuration ====================================================
# d-i netcfg/target_network_config select Network Manager
  d-i netcfg/choose_interface select auto
# d-i netcfg/choose_interface select ens160
# -- Static network configuration. --------------------------------------------
# d-i netcfg/disable_dhcp boolean true
  d-i netcfg/disable_autoconfig boolean true
  d-i netcfg/dhcp_failed note
  d-i netcfg/dhcp_options select Configure network manually
# -- IPv4 example -------------------------------------------------------------
  d-i netcfg/get_ipaddress string 192.168.1.1
  d-i netcfg/get_netmask string 255.255.255.0
  d-i netcfg/get_gateway string 192.168.1.254
  d-i netcfg/get_nameservers string 192.168.1.254
  d-i netcfg/confirm_static boolean true
# -- IPv6 example -------------------------------------------------------------
# d-i netcfg/get_ipaddress string fc00::2
# d-i netcfg/get_netmask string ffff:ffff:ffff:ffff::
# d-i netcfg/get_gateway string fc00::1
# d-i netcfg/get_nameservers string fc00::1
# d-i netcfg/confirm_static boolean true
# -- hostname and domain names ------------------------------------------------
  d-i netcfg/get_hostname string sv-debian
  d-i netcfg/get_domain string workgroup
# d-i netcfg/hostname string somehost
# == Network console ==========================================================
  d-i anna/choose_modules string network-console
# d-i network-console/authorized_keys_url string http://10.0.0.1/openssh-key
  d-i network-console/password password r00tme
  d-i network-console/password-again password r00tme
# == Mirror settings ==========================================================
# d-i mirror/protocol string ftp
  d-i mirror/country string JP
  d-i mirror/http/hostname string deb.debian.org
  d-i mirror/http/directory string /debian
  d-i mirror/http/proxy string
  d-i mirror/http/mirror select deb.debian.org
# == Account setup ============================================================
  d-i passwd/root-login boolean false
  d-i passwd/make-user boolean true
# -- Root password, either in clear text or encrypted -------------------------
# d-i passwd/root-password password r00tme
# d-i passwd/root-password-again password r00tme
# d-i passwd/root-password-crypted password [crypt(3) hash]
# -- Normal user's password, either in clear text or encrypted ----------------
  d-i passwd/user-fullname string Master
  d-i passwd/username string master
  d-i passwd/user-password password master
  d-i passwd/user-password-again password master
# d-i passwd/user-password-crypted password [crypt(3) hash]
# -----------------------------------------------------------------------------
  d-i user-setup/allow-password-weak boolean true
  d-i user-setup/encrypt-home boolean false
# == Clock and time zone setup ================================================
  d-i clock-setup/utc boolean true
  d-i time/zone select Asia/Tokyo
# -- Controls whether to use NTP to set the clock during the install ----------
  d-i clock-setup/ntp boolean true
# -- NTP server to use. The default is almost always fine here. ---------------
  d-i clock-setup/ntp-server string ntp.nict.jp
# == Partitioning =============================================================
  d-i partman-basicfilesystems/no_swap boolean false
# d-i partman-auto/disk string /dev/nvme0n1
# d-i partman-auto/disk string /dev/nvme0n1 /dev/sda
# d-i partman-auto/disk string /dev/sda
  d-i partman-auto/init_automatically_partition select lvm
  d-i partman-auto/method string lvm
# -----------------------------------------------------------------------------
  d-i partman-md/device_remove_md boolean true
  d-i partman-lvm/device_remove_lvm boolean true
  d-i partman-lvm/device_remove_lvm_span boolean true
  d-i partman-auto/purge_lvm_from_device boolean true
  d-i partman-lvm/confirm boolean true
  d-i partman-lvm/confirm_nooverwrite boolean true
# -----------------------------------------------------------------------------
  d-i partman-auto-lvm/guided_size string max
  d-i partman-auto/choose_recipe select atomic
# -----------------------------------------------------------------------------
  d-i partman-auto-lvm/new_vg_name string system
# -----------------------------------------------------------------------------
# /dev/nvme0n1p1: 512MB: efi
#      nvme0n1p2: 512MB: /boot
#      nvme0n1p3:    -1: vg00
# /dev/sda1     :    -1: vg01
# vg00-root     :    -1: /
# vg01-home     :    -1: /home
#
# d-i partman-auto/expert_recipe string                                       \
#         boot-lvm ::                                                         \
#               512   512   512 free                                          \
#                 $iflabel{ gpt } $reusemethod{ }                             \
#                 method{ efi } format{ }                                     \
#                 device{ /dev/nvme0n1p1 }                                    \
#             .                                                               \
#               512   512   512 ext3                                          \
#                 $primary{ } $bootable{ }                                    \
#                 method{ format } format{ }                                  \
#                 use_filesystem{ } filesystem{ ext3 }                        \
#                 mountpoint{ /boot }                                         \
#                 device{ /dev/nvme0n1p2 }                                    \
#             .                                                               \
#              1024  1024    -1 ext4                                          \
#                 $primary{ }                                                 \
#                 method{ lvm } vg_name{ vg00 }                               \
#                 device{ /dev/nvme0n1p3 }                                    \
#             .                                                               \
#              1024  1024    -1 ext4                                          \
#                 $primary{ }                                                 \
#                 method{ lvm } vg_name{ vg01 }                               \
#                 device{ /dev/sda1 }                                         \
#             .                                                               \
#              1024  1024    -1 ext4                                          \
#                 $lvmok{ } in_vg{ vg00 } lv_name{ root }                     \
#                 method{ format } format{ }                                  \
#                 use_filesystem{ } filesystem{ ext4 }                        \
#                 mountpoint{ / }                                             \
#             .                                                               \
#              1024  1024    -1 ext4                                          \
#                 $lvmok{ } in_vg{ vg01 } lv_name{ home }                     \
#                 method{ format } format{ }                                  \
#                 use_filesystem{ } filesystem{ ext4 }                        \
#                 mountpoint{ /home }                                         \
#             .
# -----------------------------------------------------------------------------
# d-i partman/default_filesystem string btrfs
# -- Force UEFI booting ('BIOS compatibility' will be lost). Default: false. --
  d-i partman-efi/non_efi_system boolean true
# -- Ensure the partition table is GPT - this is required for EFI -------------
# d-i partman-partitioning/choose_label string gpt
# d-i partman-partitioning/default_label string gpt
# -- When disk encryption is enabled, skip wiping the partitions beforehand. --
# d-i partman-auto-crypto/erase_disks boolean false
# -- This makes partman automatically partition without confirmation. ---------
  d-i partman-md/confirm boolean true
  d-i partman-partitioning/confirm_write_new_label boolean true
  d-i partman/choose_partition select finish
  d-i partman/confirm boolean true
  d-i partman/confirm_nooverwrite boolean true
# -- Controlling how partitions are mounted -----------------------------------
# d-i partman/mount_style select uuid
# == Base system installation =================================================
# d-i base-installer/install-recommends boolean true
# d-i base-installer/kernel/image select linux-image-amd64
# == Apt setup ================================================================
  d-i apt-setup/non-free boolean true
  d-i apt-setup/contrib boolean true
  d-i apt-setup/use_mirror boolean true
  d-i apt-setup/services-select multiselect security, updates
  d-i apt-setup/security_host string security.debian.org
  d-i apt-setup/cdrom/set-first boolean false
  d-i apt-setup/cdrom/set-next boolean false
  d-i apt-setup/cdrom/set-failed boolean false
# d-i debian-installer/allow_unauthenticated boolean true
# == Package selection ========================================================
# d-i pkgsel/run_tasksel boolean true
# -----------------------------------------------------------------------------
  tasksel tasksel/first multiselect \
      standard, desktop, laptop, lxde-desktop, \
      ssh-server, dns-server, file-server, print-server
# -----------------------------------------------------------------------------
  d-i pkgsel/include string \
      network-manager network-manager-gnome \
      chrony clamav curl wget rsync inxi \
      build-essential indent vim bc \
      sudo tasksel whois \
      openssh-server \
      bind9 bind9utils dnsutils \
      samba smbclient cifs-utils \
      isc-dhcp-server \
      cups cups-common \
      lxde fonts-noto ibus-mozc mozc-utils-gui \
      libreoffice-help-ja libreoffice-l10n-ja \
      firefox-esr-l10n-ja thunderbird thunderbird-l10n-ja \
      minidlna
#     task-desktop task-japanese task-japanese-desktop task-laptop task-lxde-desktop task-ssh-server
#     open-vm-tools open-vm-tools-desktop
# -----------------------------------------------------------------------------
  d-i pkgsel/install-language-support boolean true
  d-i shared/default-x-display-manager select lightdm
# -- Whether to upgrade packages after debootstrap. ---------------------------
# d-i pkgsel/upgrade select none
# d-i pkgsel/upgrade select safe-upgrade
  d-i pkgsel/upgrade select full-upgrade
  d-i pkgsel/update-policy select unattended-upgrades
# -----------------------------------------------------------------------------
  d-i samba-common/dhcp boolean false
# -----------------------------------------------------------------------------
  popularity-contest popularity-contest/participate boolean false
# == Boot loader installation =================================================
  d-i grub-installer/only_debian boolean true
  d-i grub-installer/bootdev string default
  d-i grub-installer/force-efi-extra-removable boolean true
# d-i preseed/late_command string \
#     in-target --pass-stdout systemctl disable connman.service;
  d-i finish-install/reboot_in_progress note
  d-i cdrom-detect/eject boolean true
# == Preseeding other packages ================================================
# d-i debhelper debconf-utils
#   echo "#_preseed_V1" > file
#   debconf-get-selections --installer >> file
#   debconf-get-selections >> file
#   debconf-set-selections -c preseed.cfg
# == End Of File ==============================================================

課題

  • sudo qemu-system-x86_64…としないと実行時にエラーとなる。
実行時エラー
master@sv-server:~$ qemu-system-x86_64 \
・・・省略
failed to create tun device: Operation not permitted
qemu-system-x86_64: bridge helper failed
  • ネットワークの設定が想定と異なる。
ネットワーク
master@sv-debian:~$ cat /etc/network/interfaces
・・・省略
# The primary network interface
allow-hotplug enp0s2
iface enp0s2 inet static
        address 192.168.1.1/24
        gateway 192.168.1.254
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.1.254
        dns-search workgroup
master@sv-debian:~$ ip address show enp0s2
2: enp0s2: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
・・・省略
    inet 192.168.1.116/24 brd 192.168.1.255 scope global enp0s2
・・・省略

おまけ

QEMUをmakeする。

QEMUのmake
cd /usr/src/
sudo apt-get install \
  git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build
sudo apt-get install \
  git-email \
  libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libbz2-dev \
  libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev \
  libibverbs-dev libncurses5-dev libnuma-dev \
  librbd-dev librdmacm-dev \
  libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev libssh-dev \
  libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev \
  valgrind xfslibs-dev
sudo apt-get install libnfs-dev libiscsi-dev
sudo git clone https://gitlab.com/qemu-project/qemu.git
cd qemu/
sudo git submodule init
sudo git submodule update --recursive
sudo ./configure
sudo make
sudo make install

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?