View on GitHub


Presentation notes from JMU Unix Users Group meetings

How to build a CS VM

Follow along

History and Early Encounters

History and Early Encounters

The move to virtualization

Early VMs

Approaching today

The modern era

Design considerations

VM Skeleton - too many buttons to get right

Script it!

VBoxManage createvm --name "%VM%" --ostype Ubuntu_64 --register
VBoxManage modifyvm "%VM%" --cpus 2 --memory 2048 --vram 64
VBoxManage storagectl "%VM%" --name "SATA Controller" --add sata --bootable on --portcount=4
VBoxManage createhd --filename "%VMDISK%" --size 20480 --variant Standard
VBoxManage storageattach "%VM%" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium "%VMDISK%"
VBoxManage storageattach "%VM%" --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium "%VMINSTALLDISK%"
VBoxManage modifyvm "%VM%" --audioout on
VBoxManage modifyvm "%VM%" --clipboard bidirectional
VBoxManage modifyvm "%VM%" --mouse usbtablet
VBoxManage modifyvm "%VM%" --usb on --usbehci off --usbxhci off
VBoxManage modifyvm "%VM%" --accelerate3d on

Linux Mint OEM

Move quick, get the GRUB menu

bg contain right

Linux Mint OEM

bg contain right

Linux Mint OEM

bg contain right

The theory of Ansible

Ansible key themes

I·dem·po·tent - /ˌīdemˈpōt(ə)nt,ˈēdemˌpōt(ə)nt/

Building Ansible

Our misuse of Ansible

Quick reminder:

Misusing Ansible

Role overview

- roles:
  - { role: common, tags: always, icon_mode: user }
  - { role: user, tags: always }
  - { role: wireless-printing, tags: always }
  - { role: filezilla, tags: always }
  - { role: basic-prog-pkgs, tags: ["cs101"] }
  - { role: adv-prog-pkgs, tags: ["cs261", "cs361"] }
  - { role: robot-pkgs, tags: ["cs354"] }
  - { role: eclipse, tags: ["cs101", "cs149", "cs159"] }
  - { role: jgrasp, tags: ["cs149"] }
  - { role: finch, tags: ["cs101"] }
  - { role: y86, tags: ["cs261"] }
  - { role: programming-langs, tags: ["cs430"] }
  - { role: vscode, tags: ["cs149"] }

Step-by-step playbooks - roles/jgrasp/tasks/main.yml

- name: Install jGRASP dependencies
    name: lsb-core
    state: latest
- name: Check jGRASP
    path: ''
  register: st

Step-by-step playbooks - roles/jgrasp/tasks/main.yml continued

- block:
    - name: Fetch jGRASP zip
        url: ''
        dest: ''
        checksum: 'sha1:'
        force: yes
    - name: Remove old jGRASP directory
        path: ''
        state: absent
    - name: Unpack jGRASP zip
        dest: ''
        src: ''
  when: st.stat.checksum|default("") != jgrasp.hash

Step-by-step playbooks - roles/jgrasp/tasks/main.yml continued

- name: Install jGRASP desktop icon
    src: jgrasp.desktop.j2
    dest: /usr/local/share/applications/jgrasp.desktop
    mode: 0644
    - Update desktop menu

Playbook variables - roles/jgrasp/vars/main.yml

  url: ''
  hash: '9b636f5b1c7687ad8dc4207ff2ad1723fd00c501'
  zip: '/'
  install_path: '/jgrasp'

Playbooks with lists - roles/basic-prog-pkgs/tasks/main.yml

- name: Install introductory development packages
    name: ''
    state: latest

Making it usable

$ ansible-pull -U -C master -t common local.yml

bg contain

bg contain

The magic


SHIP IT! Lots and lots of flash drives

bg contain bg contain right

On-going projects

Contributing to the project