
æ°å¹ŽåãMat-Mehã§ãEmboxãã¯ã©ãŠãåãã®çæ³çãªãã©ãããã©ãŒã ã«å€ããããšããåŠçãããžã§ã¯ãããããŸããã ãã®ã¿ã¹ã¯ã®æãããªéšåã®1ã€ã¯ãäžéšã®ä»®æ³åãã©ãããã©ãŒã ãžã®ç§»æ€ã§ãããéžæã¯Xenã«å§ããããŸããã ãã®èšäºã§ã¯ãåŠçOSãXenã«ç§»æ€ããEmboxã«æ°ãããã©ãããã©ãŒã ã远å ããããã»ã¹ãšããã¡ãããããããã¹ãŠãéå§ãããçç±ã«ã€ããŠèª¬æããŸãã
çæ³çãªã¯ã©ãŠããã©ãããã©ãŒã ã®ã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ãã
unikernelã®æŠå¿µã
ãããŸãã ã€ãŸããåäžã®ã¢ããªã±ãŒã·ã§ã³ã®éçºè
ã¯ãäœæ¥ã«å¿
èŠãªæ©èœã®ã»ãããéžæããŸãã ãã®æ©èœã®ã¿ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«å«ãŸããŠãããã¢ããªã±ãŒã·ã§ã³ãšå
±ã«åäžã®ã€ã¡ãŒãžã«ãªã³ã¯ãããŠããŸãã ãã®ã¢ãããŒãã«ããããªãœãŒã¹ãæããã«ç¯çŽãããŸãã ãã¡ãããããã¯å€ãã®æ©èœãæããªãå¯äžã®ã¢ããªã±ãŒã·ã§ã³ã§ãããã¯ã©ãŠãã«å€ãã®ç°ãªãã¢ããªã±ãŒã·ã§ã³ïŒæ¬è³ªçã«ã¯ãµãŒãã¹ïŒãé
眮ãããšãéåžžã«å¹
åºãæ©èœãå©çšã§ããŸãã
Xenãžã®ç§»æ€
Xenãã«ã¹ãã§ãã¯
äœããäœãã«ç§»æ€ããã«ã¯ããŸãæ¢åã®ãœãªã¥ãŒã·ã§ã³ã確èªããå¿
èŠããããŸãã Xenã§ã¯ãããªãã®æ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã§ã«åäœããŠããŸãã ãã¡ãããç§ãã¡ã¯äž»ã«ãªãŒãã³Linuxã«èå³ãæã£ãŠããŸãã Xenã«ã¯1ã€ã®ç¹åŸŽããããŸããäœããå§ããåã«ããŸããã®ãã©ãããã©ãŒã ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠç®¡çããæ¹æ³ãåŠã¶å¿
èŠããããŸãã ã€ãŸããåå¥ã®ä»®æ³ãã·ã³ïŒãã¡ã€ã³ïŒãäœæããæ¹æ³ãåŠã¶å¿
èŠããããŸãã
Xenã䜿çšããã«ã¯ãé©åãªããã±ãŒãžãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
sudo apt-get install xen-hypervisor-4.8-amd64 xen-tools
ãã®åŸãåèµ·åããŠãèµ·åæã«Xenäžã®OSã®ããŒãžã§ã³ãéžæããå¿
èŠããããŸãïŒéåžžã¯ããã©ã«ãã§ãïŒã
ãã€ããŒãã€ã¶ãŒã®å¶åŸ¡äžã«ããããšã確èªããã«ã¯ãã³ãã³ã
cat /proc/cpuinfo | grep hypervisor
åºåã確èªããã ãã§ååã§ã
cat /proc/cpuinfo | grep hypervisor
cat /proc/cpuinfo | grep hypervisor
空ã§
cat /proc/cpuinfo | grep hypervisor
ãŸããã åæ§ã«ã
virt-what
ã³ãã³ãã®åºåã確èªã§ããŸããxen-dom0ãå«ãŸããŠããå¿
èŠããããŸã
ãã1ã€ã®ãã¹ããªãã·ã§ã³ã¯ããxlãã³ãã³ãã䜿çšããããšã§ããããã¯å°æ¥å¿
èŠã«ãªããŸãã
sudo xl list
ã³ãã³ãã¯ã次ã®ãããªãã®ãåºåããã¯ãã§ãã
Name ID Mem VCPUs State Time(s) Domain-0 0 945 1 r
ãã¡ã€ã³ç®¡ç
Xenã«ã¯ãä»®æ³ãã·ã³ãäœæããã³ç®¡çããæ¹æ³ãããã€ããããŸãã
1ã€ç®ã¯ããµãŒãããŒãã£ããã°ã©ã ïŒvirt-managerãoVirtãªã©ïŒã䜿çšããã€ã³ã¹ããŒã«ã§ãã éåžžããããã¯ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ãŒã¹ãåããŠãããããã°ã©ã èªäœãã·ã¹ãã ãã¡ã€ã«ããæãäžãããå¿
èŠãªå€æŽãå ããŸãã
2çªç®ã®æ¹æ³ã¯ãã³ã³ãœãŒã«ã§äœæ¥ããããšã§ãã
Linuxä»®æ³åã®å Žåãxen-tools + xlïŒãŸãã¯xmïŒã䜿çšããŸãã å€ãã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã¯æºä»®æ³åã®æºåããã§ã«æŽã£ãŠãããããããã¯äŸ¿å©ã§ãã
æ°ããä»®æ³ãã·ã³ã®äœæã«äœ¿çšããããã©ã¡ãŒã¿ãŒã¯
/etc/xen-tools/xen-tools.conf
ãã¡ã€ã«ã«ãããåå®çŸ©ã§ããŸãã ãã·ã³ãäœæãããšãã«ããã¹ãŠã®ãã©ã¡ãŒã¿ãŒããªãŒããŒã©ã€ãããããšãã§ããŸãã
ãããã¯ãŒã¯ç°å¢ã®ã»ããã¢ãã
ãã¡ã€ã³éã®ãããã¯ãŒã¯ã«ã¯ããã€ãã®æ¹æ³ããããŸãã æãç°¡åãªãã®ãéžæããŸã-ããªããžãããã¯ãŒã¯ïŒä»®æ³ãã·ã³ã¯ãdom0ãšå
±ã«ç©çããã€ã¹ãšããŠããŒã«ã«ãããã¯ãŒã¯äžã«è¡šç€ºãããŸãïŒã
ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
sudo apt-get install bridge-utils
次ã«ããã¡ã€ã«
/etc/network/interfaces
ç·šéããŸã
ã ã£ã
# The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug enp5s0 iface enp5s0 inet dhcp
ã«ãªã£ãŠããŸã
# The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug enp5s0 iface enp5s0 inet manual auto xenbr0 iface xenbr0 inet dhcp bridge_ports enp5s0
ä»®æ³ãã·ã³ã®ã€ã¡ãŒãžãäœæããŸãã
Ubuntuã§ä»®æ³ãã·ã³ãäœæããäŸïŒ
sudo xen-create-image --hostname test --dhcp --pygrub --dist precise --mirror="http://mirror.yandex.ru/ubuntu" --dir /srv/xen/test
--pygrub
ãã©ã°ã¯ãPyGrubããŒããŒãä»®æ³ãã·ã³ã§äœ¿çšãããããšã瀺ããåä»®æ³ãã·ã³ãdom0ã®ã³ã¢ã®ä»£ããã«ç¬èªã®ã«ãŒãã«ã䜿çšã§ããããã«ããŸãã
--dir
ãã©ã¡ãŒã¿ãŒã¯ã以åã«ããŒãã£ã·ã§ã³åå²ããããã£ã¹ã¯ã®åå¥ã®ã»ã¯ã·ã§ã³ã§ã¯ãªããã€ã¡ãŒãžã«ãã£ã¬ã¯ããªã䜿çšããããšãæå®ããŸãã
åºåã¯ãããæ¬¡ã®ãšããã§ããäžè¬çãªæ
å ±
-ãã¹ãåïŒãã¹ã
ååžïŒæ£ç¢ºãª
ãã©ãŒïŒ
mirror.yandex.ru/ubuntuããŒãã£ã·ã§ã³ïŒ512Mã®ã¹ã¯ããïŒã¹ã¯ããïŒ
/ 4GïŒext4ïŒ
ç»åã¿ã€ãïŒã¹ããŒã¹
ã¡ã¢ãªãµã€ãºïŒ256M
ããŒãããŒããŒïŒpygrub
ãããã¯ãŒã¯æ
å ±
-IPã¢ãã¬ã¹ïŒDHCP [MACïŒ00ïŒ16ïŒ3EïŒ8EïŒ3CïŒE0]
ããŒãã£ã·ã§ã³ã€ã¡ãŒãžã®äœæïŒ/srv/xen/test/domains/test/swap.img
å®äº
/srv/xen/test/domains/test/swap.imgã§ã¹ã¯ãããäœæãã
å®äº
ããŒãã£ã·ã§ã³ã€ã¡ãŒãžã®äœæïŒ/srv/xen/test/domains/test/disk.img
å®äº
/srv/xen/test/domains/test/disk.imgã«ext4ãã¡ã€ã«ã·ã¹ãã ãäœæãã
å®äº
ã€ã³ã¹ããŒã«æ¹æ³ïŒdebootstrap
å®äº
ã©ã³ãã³ã°ããã¯
å®äº
ããŒã«ã¹ã¯ãªãããæå®ãããŠããŸããã ã¹ãããããŠããŸã
Xenæ§æãã¡ã€ã«ã®äœæ
å®äº
ããŒã«ã¹ã¯ãªãããæå®ãããŠããŸããã ã¹ãããããŠããŸã
ã«ãŒããã¹ã¯ãŒãã®èšå®
æ°ããã²ã¹ãã®ãã¹ã¯ãŒããçæããŸãã
ãã¹ãŠå®äº
çæããããã°ãã¡ã€ã«ïŒ
/var/log/xen-tools/test.log
ã€ã³ã¹ããŒã«ã®æŠèŠ
-ãã¹ãåïŒãã¹ã
ååžïŒæ£ç¢ºãª
MACã¢ãã¬ã¹ïŒ00ïŒ16ïŒ3EïŒ8EïŒ3CïŒE0
IPã¢ãã¬ã¹ïŒesïŒïŒåç
SSHãã£ã³ã¬ãŒããªã³ãïŒSHA256ïŒH49PEnPv0k0tw2faq1CStkR6KFlHF0GkUOWvYaeiqOUïŒDSAïŒ
SSHãã£ã³ã¬ãŒããªã³ãïŒSHA256ïŒ5gIsrTAriqEiwdkVCygOtLOi9uOd2DJWFBlJKxdJfUwïŒECDSAïŒ
SSHãã£ã³ã¬ãŒããªã³ãïŒSHA256ïŒSB + bTbkIUr2Qn019xT8AFtAKO5f6xlkbt8juVBq6zTEïŒRSAïŒ
ã«ãŒããã¹ã¯ãŒãïŒRJpaLfBFseH9YJX77ScxRwP
次ã®ã³ãã³ãã䜿çšããŠãã€ã¡ãŒãžãäœæãããããšã確èªã§ããŸãã
sudo xen-list-images
ç§ã®å Žåãçºè¡ãããã³ãã³ã
Name: test Memory: 256 MB Config: /etc/xen/test.cfg
èµ·åïŒãã·ã³äœæïŒ
sudo xl create /etc/xen/test.cfg
ãsudo xl listãã³ãã³ããåŒã³åºããããšããã¹ãä»®æ³ãã·ã³ã衚瀺ãããŸãã
Name ID Mem VCPUs State Time(s) Domain-0 0 15356 8 r
圌女ã®ã³ã³ãœãŒã«ã«æ¥ç¶ããå¿
èŠããããŸãïŒ
sudo xl console test
ä»®æ³ãã·ã³ã³ã³ãœãŒã«ã¯ã
"ctrl + ]"
çµã¿åããã§çµäºããŸã
çµæã®çµè« [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.2.0-126-virtual (buildd@lcy01-11) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #169-Ubuntu SMP Fri Mar 31 14:47:56 UTC 2017 (Ubuntu 3.2.0-126.169-virtual 3.2.79) [ 0.000000] Command line: root=/dev/xvda2 ro elevator=noop root=/dev/xvda2 ro [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] ACPI in unprivileged domain disabled [ 0.000000] Released 0 pages of unused memory [ 0.000000] Set 0 page(s) to 1-1 mapping [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] Xen: 0000000000000000 - 00000000000a0000 (usable) [ 0.000000] Xen: 00000000000a0000 - 0000000000100000 (reserved) [ 0.000000] Xen: 0000000000100000 - 0000000010000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI not present or invalid. [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x10000 max_arch_pfn = 0x400000000 [ 0.000000] init_memory_mapping: 0000000000000000-0000000010000000 [ 0.000000] RAMDISK: 0205c000 - 02c43000 [ 0.000000] NUMA turned off [ 0.000000] Faking a node at 0000000000000000-0000000010000000 [ 0.000000] Initmem setup node 0 0000000000000000-0000000010000000 [ 0.000000] NODE_DATA [000000000fffb000 - 000000000fffffff] [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal empty [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x000000a0 [ 0.000000] 0: 0x00000100 -> 0x00010000 [ 0.000000] SFI: Simple Firmware Interface v0.81 http://simplefirmware.org [ 0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] No local APIC present [ 0.000000] APIC: disable apic facility [ 0.000000] APIC: switched to apic NOOP [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 10000000 (gap: 10000000:f0000000) [ 0.000000] Booting paravirtualized kernel on Xen [ 0.000000] Xen version: 4.8.3-pre (preserve-AD) [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:1 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 27 pages/cpu @ffff88000fc00000 s78848 r8192 d23552 u2097152 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 64395 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: root=/dev/xvda2 ro elevator=noop root=/dev/xvda2 ro [ 0.000000] PID hash table entries: 1024 (order: 1, 8192 bytes) [ 0.000000] xsave/xrstor: enabled xstate_bv 0x7, cntxt size 0x340 [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Memory: 228408k/262144k available (6617k kernel code, 448k absent, 33288k reserved, 6579k data, 932k init) [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] NR_IRQS:4352 nr_irqs:256 16 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] console [hvc0] enabled [ 0.000000] allocated 2097152 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] installing Xen timer for CPU 0 [ 0.000000] Detected 3194.398 MHz processor. [ 0.004000] Calibrating delay loop (skipped), value calculated using timer frequency.. 6388.79 BogoMIPS (lpj=12777592) [ 0.004000] pid_max: default: 32768 minimum: 301 [ 0.004000] Security Framework initialized [ 0.004000] AppArmor: AppArmor initialized [ 0.004000] Yama: becoming mindful. [ 0.004000] Dentry cache hash table entries: 32768 (order: 6, 262144 bytes) [ 0.004000] Inode-cache hash table entries: 16384 (order: 5, 131072 bytes) [ 0.004000] Mount-cache hash table entries: 256 [ 0.004000] Initializing cgroup subsys cpuacct [ 0.004000] Initializing cgroup subsys memory [ 0.004000] Initializing cgroup subsys devices [ 0.004000] Initializing cgroup subsys freezer [ 0.004000] Initializing cgroup subsys blkio [ 0.004000] Initializing cgroup subsys perf_event [ 0.004000] CPU: Physical Processor ID: 0 [ 0.004000] CPU: Processor Core ID: 0 [ 0.006575] SMP alternatives: switching to UP code [ 0.034623] Freeing SMP alternatives: 24k freed [ 0.034647] ftrace: allocating 26699 entries in 105 pages [ 0.036061] cpu 0 spinlock event irq 17 [ 0.036079] Performance Events: [ 0.036082] no APIC, boot with the "lapic" boot parameter to force-enable it. [ 0.036086] no hardware sampling interrupt available. [ 0.036094] Broken PMU hardware detected, using software events only. [ 0.036207] NMI watchdog disabled (cpu0): hardware events not enabled [ 0.036229] Brought up 1 CPUs [ 0.036343] devtmpfs: initialized [ 0.036844] EVM: security.selinux [ 0.036848] EVM: security.SMACK64 [ 0.036851] EVM: security.capability [ 0.037364] Grant table initialized [ 0.037410] print_constraints: dummy: [ 0.057265] RTC time: 165:165:165, date: 165/165/65 [ 0.057318] NET: Registered protocol family 16 [ 0.057508] Extended Config Space enabled on 0 nodes [ 0.057542] PCI: setting up Xen PCI frontend stub [ 0.057542] bio: create slab <bio-0> at 0 [ 0.057542] ACPI: Interpreter disabled. [ 0.057542] xen/balloon: Initialising balloon driver. [ 0.057542] xen-balloon: Initialising balloon driver. [ 0.057542] vgaarb: loaded [ 0.057542] i2c-core: driver [aat2870] using legacy suspend method [ 0.057542] i2c-core: driver [aat2870] using legacy resume method [ 0.057542] SCSI subsystem initialized [ 0.057542] usbcore: registered new interface driver usbfs [ 0.057542] usbcore: registered new interface driver hub [ 0.057542] usbcore: registered new device driver usb [ 0.057542] PCI: System does not support PCI [ 0.057542] PCI: System does not support PCI [ 0.057542] NetLabel: Initializing [ 0.057542] NetLabel: domain hash size = 128 [ 0.057542] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.057542] NetLabel: unlabeled traffic allowed by default [ 0.057542] Switching to clocksource xen [ 0.061230] AppArmor: AppArmor Filesystem Enabled [ 0.061253] pnp: PnP ACPI: disabled [ 0.062521] NET: Registered protocol family 2 [ 0.065648] IP route cache hash table entries: 2048 (order: 2, 16384 bytes) [ 0.065807] TCP established hash table entries: 8192 (order: 5, 131072 bytes) [ 0.065861] TCP bind hash table entries: 8192 (order: 5, 131072 bytes) [ 0.065881] TCP: Hash tables configured (established 8192 bind 8192) [ 0.065885] TCP reno registered [ 0.065889] UDP hash table entries: 128 (order: 0, 4096 bytes) [ 0.065895] UDP-Lite hash table entries: 128 (order: 0, 4096 bytes) [ 0.065934] NET: Registered protocol family 1 [ 0.065967] platform rtc_cmos: registered platform RTC device (no PNP device found) [ 0.066094] Trying to unpack rootfs image as initramfs... [ 0.072210] audit: initializing netlink socket (disabled) [ 0.190742] type=2000 audit(1518793913.856:1): initialized [ 0.209702] Freeing initrd memory: 12188k freed [ 0.213726] VFS: Disk quotas dquot_6.5.2 [ 0.213770] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.213950] hugetlbfs: disabling because there are no supported hugepage sizes [ 0.214050] fuse init (API version 7.17) [ 0.214104] msgmni has been set to 469 [ 0.214342] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.214362] io scheduler noop registered (default) [ 0.214367] io scheduler deadline registered [ 0.214386] io scheduler cfq registered [ 0.214439] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.214454] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.214460] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5 [ 0.214672] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 0.215413] Linux agpgart interface v0.103 [ 0.216235] brd: module loaded [ 0.216618] loop: module loaded [ 0.217745] blkfront device/vbd/51714 num-ring-pages 1 nr_ents 32. [ 0.218925] blkfront device/vbd/51713 num-ring-pages 1 nr_ents 32. [ 0.219299] Fixed MDIO Bus: probed [ 0.219322] tun: Universal TUN/TAP device driver, 1.6 [ 0.219329] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com> [ 0.219390] PPP generic driver version 2.4.2 [ 0.219430] Initialising Xen virtual ethernet driver. [ 0.222394] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.222413] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.222423] uhci_hcd: USB Universal Host Controller Interface driver [ 0.222459] usbcore: registered new interface driver libusual [ 0.222477] i8042: PNP: No PS/2 controller found. Probing ports directly. [ 1.223457] i8042: No controller found [ 1.223625] mousedev: PS/2 mouse device common for all mice [ 1.263475] rtc_cmos rtc_cmos: rtc core: registered rtc_cmos as rtc0 [ 1.263520] rtc_cmos: probe of rtc_cmos failed with error -38 [ 1.263601] device-mapper: uevent: version 1.0.3 [ 1.263654] device-mapper: ioctl: 4.22.0-ioctl (2011-10-19) initialised: dm-devel@redhat.com [ 1.263664] EFI Variables Facility v0.08 2004-May-17 [ 1.263886] TCP cubic registered [ 1.263952] NET: Registered protocol family 10 [ 1.264555] NET: Registered protocol family 17 [ 1.264564] Registering the dns_resolver key type [ 1.264668] registered taskstats version 1 [ 1.273569] blkfront: xvda2: flush diskcache: enabled [ 1.274605] blkfront: xvda1: flush diskcache: enabled [ 1.368068] Magic number: 1:252:3141 [ 1.368107] /build/linux-JvAKgs/linux-3.2.0/drivers/rtc/hctosys.c: unable to open rtc device (rtc0) [ 1.368118] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.368121] EDD information not available. [ 1.368534] Freeing unused kernel memory: 932k freed [ 1.368687] Write protecting the kernel read-only data: 12288k [ 1.373188] Freeing unused kernel memory: 1556k freed [ 1.373812] Freeing unused kernel memory: 1172k freed Loading, please wait... Begin: Loading essential drivers ... done. [ 1.402645] udevd[82]: starting version 175 Begin: Running /scripts/init-premount ... done. Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done. Begin: Running /scripts/local-premount ... done. [ 1.506696] JBD2: Unrecognised features on journal [ 1.506706] EXT4-fs (xvda2): error loading journal mount: mounting /dev/xvda2 on /root failed: Invalid argument Begin: Running /scripts/local-bottom ... done. done. Begin: Running /scripts/init-bottom ... mount: mounting /dev on /root/dev failed: No such file or directory done. mount: mounting /sys on /root/sys failed: No such file or directory mount: mounting /proc on /root/proc failed: No such file or directory Target filesystem doesn't have requested /sbin/init. No init found. Try passing init= bootarg. BusyBox v1.18.5 (Ubuntu 1:1.18.5-1ubuntu4) built-in shell (ash) Enter 'help' for a list of built-in commands. (initramfs)
ãããã©ããªã€ã¡ãŒãžãªã®ãèŠãŠã¿ãŸãããïŒ
(initramfs) uname -a Linux (none) 3.2.0-126-virtual #169-Ubuntu SMP Fri Mar 31 14:47:56 UTC 2017 x86_64 GNU/Linux (initramfs)
ã¹ã¢ãŒã«OSïŒããOSïŒã®èµ·å
åã®éšåãããåäœããã«ã¯ãã¡ã€ã³ïŒã€ã³ã¹ã¿ã³ã¹ïŒãäœæããå¿
èŠãããããšãæããã«ãªããŸããã ããã¯ãæ§æãã¡ã€ã«ã«åºã¥ããŠxlãŠãŒãã£ãªãã£ã䜿çšããŠäœæãããŸãã
ããããèšå®ãã¡ã€ã«ãèŠããš # # Configuration file for the Xen instance test, created # by xen-tools 4.7 on Fri Feb 16 18:09:35 2018. # # # Kernel + memory size # bootloader = '/usr/lib/xen-4.8/bin/pygrub' vcpus = '1' memory = '256' # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'file:/srv/xen/test/domains/test/disk.img,xvda2,w', 'file:/srv/xen/test/domains/test/swap.img,xvda1,w', ] # # Physical volumes # # # Hostname # name = 'test' # # Networking # dhcp = 'dhcp' vif = [ 'mac=00:16:3E:8E:3C:E0' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
次ã«ããã£ã¹ã¯ã€ã¡ãŒãžã®å¿
èŠæ§ããããã¯ãŒã¯ã®ååšãªã©ã確èªããŸãã ãããããç§ãã¡ã®ç®çã«ã¯è€éãããŸãã ãã ããXenã¯ä»ã®OSããµããŒãããŠããŸãã ããŒã¹ã¯ãããã
Mini-OSã§ãã ããã«ã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãXENã«ç§»æ€ãããŠãŒã¶ãŒã察象ãšããŠããŸããã€ãŸããããã¯åãªããªãã·ã§ã³ã§ãã
gitã³ãŒãã¯XENãšã¯å¥ã®ãã®ã§ãã
ããã«READMEã®æé ãå®è¡ããŸãããã
make sudo xl create -c domain_config
çµè«ãåŸã Parsing config from domain_config Xen Minimal OS (pv)! start_info: 0x7d000(VA) nr_pages: 0x2000 shared_inf: 0xdee73000(MA) pt_base: 0x80000(VA) nr_pt_frames: 0x5 mfn_list: 0x6d000(VA) mod_start: 0x0(VA) mod_len: 0 flags: 0x0 cmd_line: stack: 0x2c6a0-0x4c6a0 MM: Init _text: 0(VA) _etext: 0x18484(VA) _erodata: 0x1f000(VA) _edata: 0x1f252(VA) stack start: 0x2c6a0(VA) _end: 0x6cfd8(VA) start_pfn: 85 max_pfn: 2000 Mapping memory range 0x85000 - 0x2000000 setting 0-0x1f000 readonly skipped 1000 MM: Initialise page allocator for 93000(93000)-2000000(2000000) Adding memory range 94000-2000000 MM: done Demand map pfns at 100000000000-108000000000. Initialising timer interface Initialising console ... done. gnttab_table mapped at 0x100000000000. Initialising scheduler Thread "Idle": pointer: 0x0x96078, stack: 0x0xa0000 Thread "xenstore": pointer: 0x0x960d8, stack: 0x0xb0000 xenbus initialised on irq 1 Thread "shutdown": pointer: 0x0x96138, stack: 0x0xc0000 kernel.c: dummy main: par=0
éåžžã©ãããctrl +]ã³ã³ãœãŒã«ãçµäºããŸã
äžéšã®ãã·ã³ãèµ·åããããšã確èªããŸãã
sudo xl list Name ID Mem VCPUs State Time(s) Domain-0 0 15455 8 r
ã³ã³ãœãŒã«ã«æ»ãã«ã¯
sudo xl console Mini-OS
ãã¡ã€ã³ãåé€ããã«ã¯
sudo xl destroy Mini-OS
ããŠããããžã§ã¯ãã®ã«ãŒãã«ããdomain_configã®å
容ãèŠãŠã¿ãŸããã # -*- mode: python; -*- #============================================================================ # Python configuration setup for 'xm create'. # This script sets the parameters used when a domain is created using 'xm create'. # You use a separate script for each domain you want to create, or # you can set the parameters for the domain on the xm command line. #============================================================================ #
ã«ãŒãã«ãã©ã¡ãŒã¿ãŒã䜿çšããŠããã£ã¹ã¯ã§ã¯ãªãçŽæ¥ã€ã¡ãŒãžãæå®ããæåã®æ®µéã§äžèŠãªãããã¯ãŒã¯èšå®ããã®ä»ã®ãã©ã¡ãŒã¿ãŒãæå®ããªãããšãã§ããŸãã
EmboxãXenã«ç§»æ€ãã
æ§æãã¡ã€ã«ã®äœæ
ãŸããEmboxã§ãã¡ã€ã³ãèµ·åããããã«ãMini-OSã®ã€ã¡ãŒãžãšäŒŒããããªèšå®ãã¡ã€ã«ãäœæããŸãã
name = "embox" memory = 256 kernel = "/tmp/xen_embox"
Emboxã«ã¢ãŒããã¯ãã£ã远å ãã
Emboxã«ã¯ãAnton KozlovïŒ
antonkozlov ïŒã®åæ¥èšŒæžããããããã
ãã¢ãžã¥ã©ãŒHALãåãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããŠãŒã¶ãŒã¢ãŒãã«ç§»æ€ããããšããæ°ãããã©ãããã©ãŒã ã«ç§»è¡ããããš
ãã§ããŸã ã ããæ£ç¢ºã«ã¯ãåæ¥èšŒæžã¯Emboxã®ç§»æ€ã«é¢ãããã®ã§ã¯ãªãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã å
šè¬ã®æŽçã«é¢ãããã®ã§ãããEmboxã¯ã¢ã«ã¢ãããšããŠäœ¿çšãããŠããŸããã ç¹ã«Xenã«ã€ããŠã¯ãAndrei Golikov
ãEmboxãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãXenãã©ãããã©ãŒã ã«ç§»æ€ããããšããã³ãŒã¹ããã
ãŸã ã åæ¥èšŒæžãšã³ãŒã¹ãå床èªããªãããã«ããããã«ãXenããŒãã«åºæã®ããã€ãã®éèŠãã€ç¹å®ã®ããšã«éå®ããŸãã
ãæ³åã®ãšãããå¿
èŠãªæ
å ±ã¯ãã¹ãŠ
Mini-OSããååŸã§ããŸãã
ç§»æ€ãæåã«å§ãŸããã®ã®1ã€ã¯ã¡ã¢ãªãŒã«ãŒãïŒSDã«ãŒãã§ã¯ãªããç°ãªãã¡ã¢ãªãŒé å-ã¡ã¢ãªãŒãããïŒã§ããããã¯äŒçµ±çã«ldsã¹ã¯ãªããã§èšè¿°ãããŠããŸãã ãªã³ã«ã¯ãããã°ã©ã ã³ãŒããããŒã¿ãããã°ã©ã ãžã®ãšã³ããªãã€ã³ããªã©ã®å Žæã瀺ãå¿
èŠããããŸãã ãã®å Žåãããã¯ãã€ã¡ãŒãžãããŠã³ããŒãããåã«ãããnote.Xenãã»ã¯ã·ã§ã³ã®äžéšã®æ©èœãããæ£ç¢ºã«ã¯ELF PT_NOTE圢åŒã®ããããŒãèªã¿åãå¿
èŠããããšããäºå®ã«ãã£ãŠè¿œå ãããŸãã ããã§ã¯ãã¡ã¢ãªã«ãŒããšæ©èœã«ã€ããŠèª¬æã
ãŸã ã
以äžã¯ãXenã®Emboxãªã³ã«ãŒã¹ã¯ãªããã«è¿œå ãããŸãã
PHDRS { xen PT_NOTE; } SECTIONS { .note : { *(.note) } :xen }
ããŠããã®ããããŒã®ã³ã³ãã³ããå«ãå¥ã®ã¢ã»ã³ãã©ãŒãã¡ã€ã«ã远å ãããŸãã
#include <xen/elfnote.h> .section ".note", "a" #define ELFNOTE(type, desc) \ .p2align 2; \ .long 1f - 0f; \ .long 3f - 2f; \ .long type; \ 0: .asciz "Xen"; \ 1: .p2align 2; \ 2: desc; \ 3: .p2align 2; ELFNOTE(XEN_ELFNOTE_XEN_VERSION, .asciz "xen-3.0") ELFNOTE(XEN_ELFNOTE_LOADER, .asciz "generic") ELFNOTE(XEN_ELFNOTE_PAE_MODE, .asciz "yes") ELFNOTE(XEN_ELFNOTE_VIRT_BASE, .long 0x100000) ELFNOTE(XEN_ELFNOTE_PADDR_OFFSET, .long 0x100000) ELFNOTE(XEN_ELFNOTE_HYPERCALL_PAGE, .long 0x100000)
ããã«ãã€ã¡ãŒãžãšXen struct start_infoããã³struct shared_infoã®éã®çžäºäœçšã«å¿
èŠãªæ§é ãããã«2ã€ãããŸãã
struct start_infoã¯ãã€ã¡ãŒãžã®éå§æã«ãã·ã³ã«é¢ããæ
å ±ãååŸããå Žåãã€ãŸããååãšããŠãããªãã§å®è¡ã§ããå Žåã«å¿
èŠã§ãã
* * `incontents 200 startofday_shared Start-of-day shared data structure * Xen/kernel shared data -- pointer provided in start_info. * * This structure is defined to be both smaller than a page, and the * only data on the shared page, but may vary in actual size even within * compatible Xen versions; guests should not rely on the size * of this structure remaining constant. */ struct shared_info { struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS]; xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8]; xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8]; uint32_t wc_version; uint32_t wc_sec; uint32_t wc_nsec; struct arch_shared_info arch; };
struct shared_info
ã
struct shared_info
ãçžäºäœçšã«é¢ããæ
å ±ãå«ãŸããŠããŸããã€ãŸãããããéããŠãå²ã蟌ã¿ãããŒã¿ã®å°çãªã©ã®ã€ãã³ããåãåããŸãã
ãã®æ§é ã¯4kbãªãã»ããã§é
眮ãããŠããŸã
ãªã³ã«ãŒã¹ã¯ãªããã¯æ¬¡ã®ããã«ãªããŸã
SECTIONS { .text : { . = ALIGN(0x1000); hypercall_page = .; . += 0x1000; xen_shared_info = .; . += 0x1000; _traps_text_start = .; *(.traps.*) _traps_text_end = .; *(.text) *(.text.*) } }
å®éããã¹ãŠã®ã³ãŒãã®åæã¯æããã«1ã€ã®èšäºã®ç¯å²ãè¶
ããŠãããããããã§çµäºããŸãã çŸæç¹ã§ã¯ãåŠçã¯ãããã°åºåä»ãã®ãã·ã³èµ·åãå®è£
ããŠãããšããèšããŸããã
ããã確èªããã«ã¯ãEmboxã§æ¬¡ã®æäœãè¡ããŸãã
make confload-xen/debug make ./scripts/xen/run_xen
ãã¡ã€ã³ãäœæãããEmboxèªäœã®åºåãéä¿¡ãããŸãã ãã€ãã®ããã«ãctrl +]ã³ã³ãœãŒã«ãçµäºãããã·ã³ãåé€ããããšãå¿ããªãã§ãã ããïŒ
sudo destroy embox
ã
åœç¶ãæåã«ç°å¢ãèšå®ããå¿
èŠããããŸãã ããããç°¡åã«ããããã«ãåŠçã§ã¯ãªããç§ãã¡ã¯ãã§ã«ããã¹ãŠããã°ã©ã³ãã§æäŸããæ©èœã远å ããŸããã ããã¯
wikiã§èª¬æãããŠã
ãŸã ã VirtualBoxãšvagrandã®ã¿ãå¿
èŠã§ãã Xenã®äžã§ã¯ãªãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
æåŸã«ãITã®ãã¬ãŒãã³ã°ã®ãããã¯ã«åã³è§ŠããããšæããŸãã ãã§ã«èšäºã§æžããããã«ã
ãããã°ã©ããŒãäžæ£è¡çºã«å·»ãèŸŒãæ¹æ³ãšãããããã䟡å€ããããã©ããããšæžãã
ããã« ãç§ãã¡ã®ãããžã§ã¯ãã§ã¯ãåŠçãå®éã®ãããžã§ã¯ãã«æ²¡é ãããŠããŸãã ãã®å ŽåãçåŸã¯éåžžã«éå¿çã§ã¯ãããŸãããæè²èª²é¡ãå®è¡ãããšããããã¯ããã«å€ãã®çµéšãåŸãããšãã§ããŸãã ãããŠæãéèŠãªããšã¯ã圌ãã¯ç¹å®ã®èšèªãåŠã¶ã ãã§ãªãã補åãäœããèªåã§åé¡ã解決ããåçŽã«èããããšãã§ããããã«ãªãããšãåŠã³ãŸãã äŸãšããŠãçæ³çãªã¯ã©ãŠããã©ãããã©ãŒã ã«é¢ããã¢ã€ãã¢ã®èè
ã§ããAnton KozlovïŒ
antonkozlov ïŒã玹ä»ããŸããããã¯ãå
ã«åœŒã®åæ¥èšŒæžã«ã€ããŠèšåããããã§ãã ãã¬ãŒãã³ã°ã®çµæã«ãããšã圌ã¯ã³ãŒããæžãã ãã§ãªãã圌èªèº«ã®ã¢ã€ãã¢ãæäŸããããããå®è£
ããã¿ã¹ã¯ãã³ã³ããŒãã³ãã«åè§£ããåŠçãæè²ããããšãã§ããŸããã å€ãã®åæ§ã®äŸããããŸãã
PSïŒãã®äŒè°ã®ãããªã¯
ãã¡ãããå
¥æã§ã
ãŸã ã