When I was an intern at Sandia National Laboratories I was introduced to the concept of using virtual machines to sandbox my projects. I have found this to be very helpful for many software experiments and development environments. I even use virtual machines to run my day-to-day Linux install. Here I give my notes on how to use Virtual Box to run an Arch Linux guest install on Mac OS X. Once a base install is complete it’s easy to make snapshots and spin up and destroy clones from the base install as needed.
Create New Virtual Machine
- Download Arch Linux ISO Live CD
Create VirtualBox Disk Image (VDI) with desired settings.
Load the Arch Linux ISO as a CD/DVD image and select the “Boot Arch” option when the live CD boots.
Partition the drive(s)
# gdisk /dev/sda
- Use the n command and values (above) to create partitions using gdisk.
- Print the the gdisk partition table with the p command.
- Write the gdisk partition table with the w command.
Install and Configure System
# Format Partitions mkfs.ext4 /dev/sda1 mkswap /dev/sda2 mkfs.ext4 /dev/sda3 # Mount Partitions mount /dev/sda3 /mnt mkdir /mnt/boot mount /dev/sda1 /mnt/boot swapon /dev/sda2 # Configure Mirrors # Install Base System pacstrap /mnt base base-devel linux # Generate File System Table genfstab -p /mnt >> /mnt/etc/fstab # Set hostname echo 'myarch' > /etc/hostname # Change Root Directory arch-chroot /mnt # Configure language echo LANG="en_US.UTF-8" >> /etc/locale.conf echo LC_COLLATE="C" >> /etc/locale.conf echo LC_TIME="en_US.UTF-8" >> /etc/locale.conf echo "en_US.UTF-8 UTF-8" >>/etc/locale.gen locale-gen ln -s /usr/share/zoneinfo/America/New_York /etc/localtime hwclock --systohc --utc # Generate Ram Disk mkinitcpio -p linux # Install and Configure Bootloader pacman -S syslinux gdisk syslinux-install_update -iam # Exit CHROOT, Unmount Drives and Reboot exit umount -R /mnt reboot
The following isn’t really intended to be executed as a script.
# Setup Network systemctl start dhcpcd systemctl enable dhcpcd # Virtual Box Guest Utilities # https://wiki.archlinux.org/index.php/VirtualBox#Arch_Linux_as_a_guest_in_a_Virtual_Machine pacman -S virtualbox-guest-utils --noconfirm modprobe -a vboxguest vboxsf vboxvideo echo vboxguest >> /etc/modules-load.d/virtualbox.conf echo vboxsf >> /etc/modules-load.d/virtualbox.conf echo vboxvideo >> /etc/modules-load.d/virtualbox.conf groupadd vboxsf systemctl enable vboxservice systemctl start vboxservice # X Windows System pacman -S xorg-server xorg-server-utils xorg-xinit xterm ttf-dejavu --noconfirm pacman -S awesome # User Configuration pacman -S sudo --noconfirm # use visudo to add under "User privilege specification" before # using sudo as # Replace user_name with desired user name. useradd -m -g users -G optical,power,storage,vboxsf -s /bin/bash user_name chown root.vboxsf /media # Set password using "# passwd " # Set root password using "# passwd" # Update Packages and System pacman -Syy pacman -Syu
Per User Config
Configuration for users other than root.
echo /usr/bin/VBoxClient-all >> ~/.xinitrc echo "exec awesome" >> ~/.xinitrc ln -s /media/sf_share_name/* ~/share_name
At one point I was trying to install linux wireless drivers and since I didn’t have access to an ethernet connection I decided to transfer my driver to the computer in question via a USB thumb drive. But what do you need to do after plugging in the USB disk drive to the Linux machine in order to access the data?
Before connecting your USB device, execute the list block devices “lsblk -f” command. Then, connect your USB storage device and execute an “lsblk -f” command again. Notice anything different?
In my case I observed a new block device filesystem named “sdb1” and its own UUID. Using the UUID, one can mount the USB device by executing “mkdir /mnt/usbdrive && mount -U YOUR_USB_DEVICE_UUID /mnt/usbdrive” as root. Take care when typing these commands, unlike most Windows/Microsoft systems I have used, *nix systems are case sensitive.
When you are finished with the device, you may “un-mount” it by executing “unmount /mnt/usbdrive” as root.
That was easy!