View on GitHub

presentations

Presentation notes from JMU Unix Users Group meetings

How to build a CS VM


Follow along

https://github.com/jmunixusers/cs-vm-build


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: https://github.com/jmunixusers/cs-vm-build


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
  apt:
    name: lsb-core
    state: latest
- name: Check jGRASP
  stat:
    path: ''
  register: st

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

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

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

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

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

jgrasp:
  url: 'https://www.jgrasp.org/dl4g/jgrasp/jgrasp206_02.zip'
  hash: '9b636f5b1c7687ad8dc4207ff2ad1723fd00c501'
  zip: '/jgrasp.zip'
  install_path: '/jgrasp'

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

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

Making it usable

$ ansible-pull -U https://github.com/jmunixusers/cs-vm-build -C master -t common local.yml


bg contain

bg contain


The magic


Testing


SHIP IT! Lots and lots of flash drives

bg contain bg contain right


On-going projects


Contributing to the project