Build a Virtual Raspberry Pi Cluster

If you have ever had an idea to build a phyisical rasperry pi cluster like this:
http://modernhackers.com/raspberry-mini-data-center-cloud/
Much easier to build a virtual one 🙂

You have now a chance to simply simulate / build a virtual raspberry pi cluster with the help of Debian, KVM, QEMU ARM and GNS3 technologies together.


You have to prepare Debian 10.1 (Debian Buster) Virtual Machine (either under KVM or Vmware) that we use as the host machine, base image that will use for to emulate the raspberry pi and later transfer to under GNS3 (20 GB disk space is enough and created raspberry as a local user during the installer)
https://wiki.debian.org/DebianBuster

Install the necessary Binaries

apt-get install sudo git bridge-utils qemu-system-arm unzip

Add raspberry user to be part of the sudoers

raspberry ALL=(ALL) NOPASSWD: ALL

4. Enable auto-login for raspberry user (otherwise you won’t be able to see furthe QEMU SYSTEM ARM console later)

systemctl edit getty@tty1

Paste the following lines (all)

[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin raspberry --noclear %I 38400 linux

Enable the newly created service and reboot

systemctl enable getty@tty1.service
reboot

You have to fine tune the Debian OS for being able to run the QEMU ARM binary and have network support as well.

-Under Vmware ens33, before KVM (GNS) export, you have to re-name to ens3, otherwise under KVM the network won’t come up automatically

-You have to create a br0 bridge interface and to add both ens3 and tap0 interfaces, latter will be used by the emulated QEMU System ARM daemon to connect the raspberry interface to the bridge

root@debian:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug ens3
iface ens3 inet manual

auto br0
iface br0 inet dhcp
       pre-up ip tuntap add dev tap0 mode tap user root
       pre-up ip link set tap0 up
       bridge_ports all ens3 tap0
       bridge_stp off
       bridge_maxwait 0
       bridge_fd 0
       post-down ip link set tap0 down
       post-down ip tuntap del dev tap0 mode tap

Navigate to under the service user (raspberry) /home/raspberry

cd /home/raspberry

You will need to have a modified kernel to run raspberry as virtual

git clone https://github.com/dhruvvyas90/qemu-rpi-kernel.git

We will select the best/most compatible kernel:

ln -s /home/reaspberry/qemu-rpi-kernel/kernel-qemu-4.4.34-jessie kernel

Downloan a Raspbian headless factory image that compatible with the downloaded kernels, I have tested and raspbian buster does working with jessie kernel:

wget http://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-09-30/2019-09-26-raspbian-buster-lite.zip

Unzip the Image

unzip ./raspbian_lite-2019-09-30/2019-09-26-raspbian-buster-lite.zip

Convert to QCOW2

qemu-img convert -f raw -O qcow2 raspbian_lite-2019-09-30/2019-09-26-raspbian-buster-lite.img raspbian-buster-lite.qcow

Extend the disk size

qemu-img resize raspbian-buster-lite.qcow +6G

Create a symlink for the image for easier administration

ln -s raspbian-buster-lite.qcow image

Add QEMU ARM to the auto start, add the following section to the /home/raspberry/.profile file

We need to Generate Unique mac address for each individual qemu-system-arm instances, otherwise the local router returns the same IP for each nodes

MACADDR="52:54:00:$(dd if=/dev/urandom bs=512 count=1 2>/dev/null | md5sum | sed 's/^\(..\)\(..\)\(..\).*$/\1:\2:\3/')";

Then we can incorporate the $MACADDR variable to the qem-usystem-arm init command

sudo qemu-system-arm -kernel /home/raspberry/kernel -append "root=/dev/sda2 console=ttyAMA0 panic=1 rootfstype=ext4 rw" -hda /home/raspberry/image -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -net nic,macaddr=$MACADDR -net tap,ifname=tap0

Create a QEMU template in GNS3 and attach the creade .vmdk image file

First boot

sudo qemu-system-arm -kernel kernel -append "root=/dev/sda2 console=ttyAMA0 panic=1 rootfstype=ext4 rw" -hda image -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -net nic,macaddr=$MACADDR -net tap,ifname=tap0
pulseaudio: pa_context_connect() failed
pulseaudio: Reason: Connection refused
pulseaudio: Failed to initialize PA contextaudio: Could not init `pa' audio driver
Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0x0
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Initializing cgroup subsys cpuacct
Linux version 4.4.34+ (amit@penguin) (gcc version 6.2.1 20161119 (Debian 6.2.1-4) ) #3 Thu Dec 1 14:44:23 IST 2016
CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d
CPU: VIPT aliasing data cache, unknown instruction cache
Machine: ARM-Versatile PB
Memory policy: Data cache writeback
sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 64960
Kernel command line: root=/dev/sda2 console=ttyAMA0 panic=1 rootfstype=ext4 rw
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 253716K/262144K available (4270K kernel code, 56K rwdata, 1008K rodata, 176K init, 139K bss, 8428K reserved, 0K cma-reserved)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0xd0800000 - 0xff800000   ( 752 MB)
    lowmem  : 0xc0000000 - 0xd0000000   ( 256 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .text : 0xc0008000 - 0xc052fd68   (5280 kB)
      .init : 0xc0530000 - 0xc055c000   ( 176 kB)
      .data : 0xc055c000 - 0xc056a120   (  57 kB)
       .bss : 0xc059ae50 - 0xc05bdb58   ( 140 kB)
NR_IRQS:224
VIC @f1140000: id 0x00041190, vendor 0x41
FPGA IRQ chip 0 "SIC" @ f1003000, 13 irqs, parent IRQ: 63
clocksource: timer3: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275 ns
Console: colour dummy device 80x30
Calibrating delay loop... 390.75 BogoMIPS (lpj=1953792)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
Disabling cpuset control group subsystem
Initializing cgroup subsys memory
Initializing cgroup subsys devices
Initializing cgroup subsys freezer
CPU: Testing write buffer coherency: ok
Setting up static identity map for 0x8220 - 0x827c
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
Serial: AMBA PL011 UART driver
dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 44, base_baud = 0) is a PL011 rev1
console [ttyAMA0] enabled
dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 45, base_baud = 0) is a PL011 rev1
dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 46, base_baud = 0) is a PL011 rev1
fpga:09: ttyAMA3 at MMIO 0x10009000 (irq = 70, base_baud = 0) is a PL011 rev1
PCI core found (slot 11)
PCI host bridge to bus 0000:00
pci_bus 0000:00: root bus resource [mem 0x50000000-0x5fffffff]
pci_bus 0000:00: root bus resource [mem 0x60000000-0x6fffffff pref]
pci_bus 0000:00: root bus resource [io  0x1000-0xffff]
pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
PCI: bus0: Fast back to back transfers disabled
pci 0000:00:0c.0: BAR 2: assigned [mem 0x50000000-0x50001fff]
pci 0000:00:0c.0: BAR 1: assigned [mem 0x50002000-0x500023ff]
pci 0000:00:0c.0: BAR 0: assigned [io  0x1000-0x10ff]
vgaarb: loaded
SCSI subsystem initialized
clocksource: Switched to clocksource timer3
NET: Registered protocol family 2
TCP established hash table entries: 2048 (order: 1, 8192 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
NetWinder Floating Point Emulator V0.97 (double precision)
futex hash table entries: 256 (order: -1, 3072 bytes)
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
romfs: ROMFS MTD (C) 2007 Red Hat, Inc.
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
pl061_gpio dev:e4: PL061 GPIO chip @0x101e4000 registered
pl061_gpio dev:e5: PL061 GPIO chip @0x101e5000 registered
pl061_gpio dev:e6: PL061 GPIO chip @0x101e6000 registered
pl061_gpio dev:e7: PL061 GPIO chip @0x101e7000 registered
clcd-pl11x dev:20: PL110 rev0 at 0x10120000
clcd-pl11x dev:20: Versatile hardware, VGA display
Console: switching to colour frame buffer device 80x30
brd: module loaded
sym53c8xx 0000:00:0c.0: enabling device (0100 -> 0103)
sym0: <895a> rev 0x0 at pci 0000:00:0c.0 irq 93
sym0: No NVRAM, ID 7, Fast-40, LVD, parity checking
sym0: SCSI BUS has been reset.
scsi host0: sym-2.2.3
scsi 0:0:0:0: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
scsi target0:0:0: tagged command queuing enabled, command queue depth 16.
scsi target0:0:0: Beginning Domain Validation
scsi target0:0:0: Domain Validation skipping write tests
scsi target0:0:0: Ending Domain Validation
scsi 0:0:2:0: CD-ROM            QEMU     QEMU CD-ROM      2.5+ PQ: 0 ANSI: 5
scsi target0:0:2: tagged command queuing enabled, command queue depth 16.
scsi target0:0:2: Beginning Domain Validation
scsi target0:0:2: Domain Validation skipping write tests
scsi target0:0:2: Ending Domain Validation
sr 0:0:2:0: [sr0] scsi3-mmc drive: 16x/50x cd/rw xa/form2 cdda tray
cdrom: Uniform CD-ROM driver Revision: 3.20
sd 0:0:0:0: [sda] 16973824 512-byte logical blocks: (8.69 GB/8.09 GiB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
physmap platform flash device: 04000000 at 34000000
physmap-flash.0: Found 1 x32 devices at 0x0 in 32-bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
Intel/Sharp Extended Query Table at 0x0031
Using buffer write method
 sda: sda1 sda2
sd 0:0:0:0: [sda] Attached SCSI disk
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@fluxnic.net>
smc91x smc91x.0 eth0: SMC91C11xFD (rev 1) at d0a68000 IRQ 57
 [nowait]
smc91x smc91x.0 eth0: Ethernet addr: 52:54:00:70:ce:42
mousedev: PS/2 mouse device common for all mice
ledtrig-cpu: registered to indicate activity on CPUs
Netfilter messages via NETLINK v0.30.
nf_conntrack version 0.5.0 (3964 buckets, 15856 max)
ip_tables: (C) 2000-2006 Netfilter Core Team
NET: Registered protocol family 17
bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this.
Bridge firewalling registered
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input2
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 8:2.
devtmpfs: mounted
Freeing unused kernel memory: 176K (c0530000 - c055c000)
systemd[1]: System time before build time, advancing clock.
systemd[1]: Failed to lookup module alias 'autofs4': Function not implemented
systemd[1]: systemd 241 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
systemd[1]: Detected architecture arm.

Welcome to Raspbian GNU/Linux 10 (buster)!

systemd[1]: Set hostname to <raspberrypi>.
random: systemd: uninitialized urandom read (16 bytes read, 71 bits of entropy available)
systemd[1]: Initializing machine ID from random generator.
random: nonblocking pool is initialized
systemd[1]: File /lib/systemd/system/systemd-journald.service:12 configures an IP firewall (IPAddressDeny=any), but the local system does not support BPF/cgroup based firewalling.
systemd[1]: Proceeding WITHOUT firewalling in effect! (This warning is only shown for the first loaded unit using IP firewalling.)
systemd[1]: Created slice system-getty.slice.
[  OK  ] Created slice system-getty.slice.
systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[  OK  ] Started Dispatch Password …ts to Console Directory Watch.
systemd[1]: Listening on Syslog Socket.
[  OK  ] Listening on Syslog Socket.
systemd[1]: Condition check resulted in Journal Audit Socket being skipped.
systemd[1]: Listening on Journal Socket (/dev/log).
[  OK  ] Listening on Journal Socket (/dev/log).
systemd[1]: Created slice system-serial\x2dgetty.slice.
[  OK  ] Created slice system-serial\x2dgetty.slice.
systemd[1]: Listening on udev Control Socket.
[  OK  ] Listening on udev Control Socket.
systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[  OK  ] Started Forward Password R…uests to Wall Directory Watch.
systemd[1]: Reached target Swap.
[  OK  ] Reached target Swap.
systemd[1]: Created slice User and Session Slice.
[  OK  ] Created slice User and Session Slice.
systemd[1]: Reached target Local Encrypted Volumes.
[  OK  ] Reached target Local Encrypted Volumes.
systemd[1]: Listening on udev Kernel Socket.
[  OK  ] Listening on udev Kernel Socket.
systemd[1]: Reached target Paths.
[  OK  ] Reached target Paths.
systemd[1]: Condition check resulted in Arbitrary Executable File Formats File System Automount Point being skipped.
systemd[1]: Listening on initctl Compatibility Named Pipe.
[  OK  ] Listening on initctl Compatibility Named Pipe.
systemd[1]: Listening on Journal Socket.
[  OK  ] Listening on Journal Socket.
systemd[1]: Starting Restore / save the current clock...
         Starting Restore / save the current clock...
systemd[1]: Condition check resulted in Create list of required static device nodes for the current kernel being skipped.
systemd[1]: Starting Journal Service...
         Starting Journal Service...
systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.
systemd[1]: Condition check resulted in Kernel Debug File System being skipped.
systemd[1]: Starting Load Kernel Modules...
         Starting Load Kernel Modules...
systemd[1]: Mounting POSIX Message Queue File System...
         Mounting POSIX Message Queue File System...
systemd[1]: Mounting RPC Pipe File System...
         Mounting RPC Pipe File System...
systemd[1]: Condition check resulted in Kernel Module supporting RPCSEC_GSS being skipped.
systemd[1]: Starting udev Coldplug all Devices...
         Starting udev Coldplug all Devices...
systemd[1]: Starting Set the console keyboard layout...
         Starting Set the console keyboard layout...
systemd[1]: Condition check resulted in Huge Pages File System being skipped.
systemd[1]: Created slice system-systemd\x2dfsck.slice.
[  OK  ] Created slice system-systemd\x2dfsck.slice.
systemd[1]: Reached target Slices.
[  OK  ] Reached target Slices.
systemd[1]: Listening on fsck to fsckd communication Socket.
[  OK  ] Listening on fsck to fsckd communication Socket.
systemd[1]: Mounted POSIX Message Queue File System.
[  OK  ] Mounted POSIX Message Queue File System.
systemd[1]: Mounted RPC Pipe File System.
[  OK  ] Mounted RPC Pipe File System.
systemd[1]: Started Load Kernel Modules.
[  OK  ] Started Load Kernel Modules.
systemd[1]: Started Restore / save the current clock.
[  OK  ] Started Restore / save the current clock.
systemd[1]: Condition check resulted in File System Check on Root Device being skipped.
systemd[1]: Starting Remount Root and Kernel File Systems...
         Starting Remount Root and Kernel File Systems...
systemd[1]: Condition check resulted in FUSE Control File System being skipped.
systemd[1]: Condition check resulted in Kernel Configuration File System being skipped.
systemd[1]: Starting Apply Kernel Variables...
         Starting Apply Kernel Variables...
[  OK  ] Started Apply Kernel Variables.
[  OK  ] Started Journal Service.
[  OK  ] Started Remount Root and Kernel File Systems.
         Starting Create System Users...
         Starting Flush Journal to Persistent Storage...
         Starting Load/Save Random Seed...
[  OK  ] Started Load/Save Random Seed.
[  OK  ] Started Flush Journal to Persistent Storage.
[  OK  ] Started Create System Users.
         Starting Create Static Device Nodes in /dev...
[  OK  ] Started udev Coldplug all Devices.
         Starting Helper to synchronize boot up for ifupdown...
[  OK  ] Started Helper to synchronize boot up for ifupdown.
[  OK  ] Started Set the console keyboard layout.
[  OK  ] Started Create Static Device Nodes in /dev.
         Starting udev Kernel Device Manager...
[  OK  ] Reached target Local File Systems (Pre).
[  OK  ] Started udev Kernel Device Manager.
[  OK  ] Found device /dev/ttyAMA0.
[  OK  ] Found device QEMU_HARDDISK boot.
         Starting File System Check…isk/by-partuuid/6c586e13-01...
[  OK  ] Started File System Check Daemon to report status.
[  OK  ] Started File System Check …/disk/by-partuuid/6c586e13-01.
         Mounting /boot...
[  OK  ] Mounted /boot.
[  OK  ] Reached target Local File Systems.
         Starting Preprocess NFS configuration...
         Starting Raise network interfaces...
         Starting Create Volatile Files and Directories...
         Starting Set console font and keymap...
[  OK  ] Started Preprocess NFS configuration.
[  OK  ] Reached target NFS client services.
[  OK  ] Reached target Remote File Systems (Pre).
[  OK  ] Reached target Remote File Systems.
[  OK  ] Started Set console font and keymap.
[  OK  ] Started Create Volatile Files and Directories.
         Starting Network Time Synchronization...
         Starting Update UTMP about System Boot/Shutdown...
[  OK  ] Started Update UTMP about System Boot/Shutdown.
[  OK  ] Started Raise network interfaces.
[  OK  ] Started Network Time Synchronization.
[  OK  ] Reached target System Time Synchronized.
[  OK  ] Reached target System Initialization.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Listening on D-Bus System Message Bus Socket.
[  OK  ] Listening on triggerhappy.socket.
[  OK  ] Started Daily man-db regeneration.
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting Avahi mDNS/DNS-SD Stack...
[  OK  ] Started D-Bus System Message Bus.
         Starting rng-tools.service...
         Starting dphys-swapfile - …unt, and delete a swap file...
         Starting Regenerate SSH host keys...
         Starting System Logging Service...
         Starting Check for Raspberry Pi EEPROM updates...
         Starting dhcpcd on all interfaces...
         Starting LSB: Resize the r…ilesystem to fill partition...
         Starting Login Service...
         Starting WPA supplicant...
         Starting triggerhappy global hotkey daemon...
         Starting LSB: Switch to on…nless shift key is pressed)...
[  OK  ] Started Regular background program processing daemon.
[  OK  ] Started Daily apt download activities.
[  OK  ] Started Daily apt upgrade and clean activities.
[  OK  ] Started Daily rotation of log files.
[  OK  ] Reached target Timers.
[  OK  ] Started System Logging Service.
[  OK  ] Started triggerhappy global hotkey daemon.
[FAILED] Failed to start rng-tools.service.
See 'systemctl status rng-tools.service' for details.
[  OK  ] Started Check for Raspberry Pi EEPROM updates.
[ TIME ] Timed out waiting for device /dev/serial1.
[DEPEND] Dependency failed for Conf…ooth Modems connected by UART.
[  OK  ] Started Avahi mDNS/DNS-SD Stack.
[  OK  ] Started WPA supplicant.
[  OK  ] Started Login Service.
[  OK  ] Started LSB: Switch to ond…(unless shift key is pressed).
[  OK  ] Started dphys-swapfile - s…mount, and delete a swap file.
[  OK  ] Started dhcpcd on all interfaces.
[  OK  ] Started LSB: Resize the ro… filesystem to fill partition.
         Starting Rotate log files...
         Starting Daily man-db regeneration...
[  OK  ] Reached target Network.
         Starting Daily apt download activities...
         Starting Permit User Sessions...
         Starting /etc/rc.local Compatibility...
My IP address is 192.168.2.152
[  OK  ] Started /etc/rc.local Compatibility.
[  OK  ] Started Permit User Sessions.
[  OK  ] Started Getty on tty1.
[  OK  ] Started Serial Getty on ttyAMA0.
[  OK  ] Reached target Login Prompts.

Raspbian GNU/Linux 10 raspberrypi ttyAMA0

raspberrypi login: pi
Password:
Linux raspberrypi 4.4.34+ #3 Thu Dec 1 14:44:23 IST 2016 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
[  OK  ] Started Regenerate SSH host keys.
[  OK  ] Created slice User Slice of UID 1000.
         Starting User Runtime Directory /run/user/1000...
[  OK  ] Reached target Multi-User System.
[  OK  ] Reached target Graphical Interface.
         Starting Update UTMP about System Runlevel Changes...
[  OK  ] Started User Runtime Directory /run/user/1000.
         Starting User Manager for UID 1000...
[  OK  ] Started Update UTMP about System Runlevel Changes.
[  OK  ] Started User Manager for UID 1000.
[  OK  ] Started Session c1 of user pi.
pi@raspberrypi:~$ cat /proc/cpuinfo
processor       : 0
model name      : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 390.75
Features        : half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : ARM-Versatile PB
Revision        : 0000
Serial          : 0000000000000000
pi@raspberrypi:~$

Starting up the Cluster

Cluster System Booted Up

Load on the the ESXi is minor

Share with:


One thought on “Build a Virtual Raspberry Pi Cluster

Comments are closed.