Coder Social home page Coder Social logo

jmunixusers / cs-vm-build Goto Github PK

View Code? Open in Web Editor NEW
12.0 12.0 13.0 979 KB

Ansible playbook for configuring the JMU CS VM provided by the UUG

Home Page: https://w3.cs.jmu.edu/uug/

License: MIT License

Shell 4.40% Python 80.22% Roff 1.81% Jinja 3.41% HCL 10.15%
ansible installfest

cs-vm-build's People

Contributors

advill avatar bronstrom avatar dependabot[bot] avatar kylelaker avatar lam2mo avatar nickrhalvorsen avatar nuttercd avatar richardb122 avatar ripleymj avatar showalter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cs-vm-build's Issues

Enable logging

Before we ship to users we should consider some method of storing logs of runs. None of them are perfect. A few options include:

  • using tee in the wrapper script
  • setting log_path in ansible.cfg [1]
  • setting an ANSIBLE_LOG_PATH environment variable in the wrapper
Pros Cons
tee We can create files, directory ahead of time; we can use shell variables in the file path easily, can log based on tags passed It's another command to have to work with and worry about mucking with exit codes; only works when the wrapper is used
log_path Works regardless of whether or not wrapper is used More difficult to configure name dynamically (date, time, etc)
ANSIBLE_LOG_PATH Benefits of tee plus we can allow users to set the environment variable themselves and not override if they've set it Only works when the wrapper is used

We could use a combination of log_path and ANSIBLE_LOG_PATH. Since Ansible checks the environment first (see 2 after the list of links), we could set a log file in the wrapper /opt/vm/logs/$TAG/$(date '+%Y%m%d-%H%M%S').log. In the event that doesn't work, we can have log_path set to /opt/vm/logs/last_run.log, or a more-likely-to-exist directory /var/logs/vm_ansible.log. I really don't want to use tee unless there is a compelling reason to do so.

I would like to ship this in the spring VM so that we can get logs from users if (when) things go wrong; however, I will let someone else target this to a milestone. It doesn't seem like it'd be awful to implement, but deciding the right way to do it is the trickier part. A nice thing is that all of them are easily changeable since they'd all be set in files we control.

Check .desktop file modes

Aptana seems to get installed with 0644, but more recent files have been installing with 0755. What is necessary for .desktop files?

Install Zenity as a dependency

This should be installed in Mint by default; however, since it will be critical to the errors and warnings in the Ansible wrapper script, we should try our best to ensure it is installed. It should definitely be added to the OEM role; however, I am uncertain on the value of adding it to common.

There is no default background on first boot for user

As mentioned in comments on #34, something we are doing in the OEM script is breaking the background. The directory /usr/share/backgrounds/linuxmint is not present. That directory and the backgrounds within it are provided by mint-artwork-gnome, which does not seem to be a package we are removing.

Some dependencies are not installed.

For example, libnotify-bin is not installed which prevents notify-send from working (and the playbook to fail). Are there any other dependencies of our playbooks other than libnotify-bin? We may want to have a task in common to install these.

Robot udev rule

We probably need a udev rule for the robots. This is what is used on the lab laptops:

# On precise, for some reason, USER and GROUP are getting ignored.
# So setting mode = 0666 for now.
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="kobuki*", MODE:="0666", GROUP:="dialout", SYMLINK+="kobuki"
# Bluetooth module (currently not supported and may have problems)
# SUBSYSTEM=="tty", ATTRS{address}=="00:00:00:41:48:22", MODE:="0666", GROUP:="dialout", SYMLINK+="kobuki"

Desktop templates should use path variables

  • ./roles/jgrasp/templates/jgrasp.desktop.j2
  • ./roles/drjava/templates/drjava.desktop.j2
  • ./roles/drjava/templates/drjava.sh.j2
  • ./roles/aptana/templates/aptana.desktop.j2
  • ./roles/eclipse/templates/eclipse.desktop.j2

Remove python-pygame and Aptana

Per @ChrisMayfield, python-pygame and Aptana are unneeded for CS101. At this point, I'd only like to see Aptana removed from the local.yml playbook, and the role itself can remain in a detached state. Also update README to reflect this.

Add local applications folder to OEM role

If Cinnamon isn't detecting new apps because the /usr/local/applications folder isn't there on first boot, let's try adding it to the OEM role, and then populate it in later roles.

Desktop shortcuts fail validation

For all of our desktop files, desktop-file-validate returns:

warning: key "Encoding" in group "Desktop Entry" is deprecated
warning: value "Application;Development;" for key "Categories" in group "Desktop Entry" contains a deprecated value "Application"

Missing robot packages

These packages are missing in our image and present on the lab laptops. At this point, we don't know if they're necessary or just present. fonts-khmeros-core is a bad grep match.

$ diff -u our-pkgs.txt robot-pkgs.txt 
--- our-pkgs.txt	2017-12-17 21:25:20.529996425 -0500
+++ robot-pkgs.txt	2017-12-17 21:25:08.858224586 -0500
@@ -1,7 +1,17 @@
+fonts-khmeros-core				install
 ros-kinetic-actionlib				install
 ros-kinetic-actionlib-msgs			install
 ros-kinetic-actionlib-tutorials			install
+ros-kinetic-amcl				install
 ros-kinetic-angles				install
+ros-kinetic-ar-track-alvar			install
+ros-kinetic-ar-track-alvar-msgs			install
+ros-kinetic-ardrone-autonomy			install
+ros-kinetic-astra-camera			install
+ros-kinetic-astra-launch			install
+ros-kinetic-audio-common-msgs			install
+ros-kinetic-base-local-planner			install
+ros-kinetic-bfl					install
 ros-kinetic-bond				install
 ros-kinetic-bond-core				install
 ros-kinetic-bondcpp				install
@@ -9,8 +19,11 @@
 ros-kinetic-camera-calibration			install
 ros-kinetic-camera-calibration-parsers		install
 ros-kinetic-camera-info-manager			install
+ros-kinetic-capabilities			install
+ros-kinetic-carrot-planner			install
 ros-kinetic-catkin				install
 ros-kinetic-class-loader			install
+ros-kinetic-clear-costmap-recovery		install
 ros-kinetic-cmake-modules			install
 ros-kinetic-collada-parser			install
 ros-kinetic-collada-urdf			install
@@ -19,9 +32,16 @@
 ros-kinetic-compressed-depth-image-transport	install
 ros-kinetic-compressed-image-transport		install
 ros-kinetic-control-msgs			install
+ros-kinetic-controller-manager-msgs		install
+ros-kinetic-costmap-2d				install
 ros-kinetic-cpp-common				install
+ros-kinetic-create-dashboard			install
+ros-kinetic-create-description			install
+ros-kinetic-create-driver			install
+ros-kinetic-create-node				install
 ros-kinetic-cv-bridge				install
 ros-kinetic-depth-image-proc			install
+ros-kinetic-depthimage-to-laserscan		install
 ros-kinetic-desktop				install
 ros-kinetic-desktop-full			install
 ros-kinetic-diagnostic-aggregator		install
@@ -30,11 +50,40 @@
 ros-kinetic-diagnostic-msgs			install
 ros-kinetic-diagnostic-updater			install
 ros-kinetic-diagnostics				install
+ros-kinetic-dwa-local-planner			install
 ros-kinetic-dynamic-reconfigure			install
+ros-kinetic-ecl-build				install
+ros-kinetic-ecl-command-line			install
+ros-kinetic-ecl-concepts			install
+ros-kinetic-ecl-config				install
+ros-kinetic-ecl-containers			install
+ros-kinetic-ecl-converters			install
+ros-kinetic-ecl-devices				install
+ros-kinetic-ecl-eigen				install
+ros-kinetic-ecl-errors				install
+ros-kinetic-ecl-exceptions			install
+ros-kinetic-ecl-formatters			install
+ros-kinetic-ecl-geometry			install
+ros-kinetic-ecl-license				install
+ros-kinetic-ecl-linear-algebra			install
+ros-kinetic-ecl-math				install
+ros-kinetic-ecl-mobile-robot			install
+ros-kinetic-ecl-mpl				install
+ros-kinetic-ecl-sigslots			install
+ros-kinetic-ecl-streams				install
+ros-kinetic-ecl-threads				install
+ros-kinetic-ecl-time				install
+ros-kinetic-ecl-time-lite			install
+ros-kinetic-ecl-type-traits			install
+ros-kinetic-ecl-utilities			install
 ros-kinetic-eigen-conversions			install
 ros-kinetic-eigen-stl-containers		install
 ros-kinetic-executive-smach			install
+ros-kinetic-fake-localization			install
 ros-kinetic-filters				install
+ros-kinetic-freenect-camera			install
+ros-kinetic-freenect-launch			install
+ros-kinetic-gateway-msgs			install
 ros-kinetic-gazebo-dev				install
 ros-kinetic-gazebo-msgs				install
 ros-kinetic-gazebo-plugins			install
@@ -51,6 +100,9 @@
 ros-kinetic-geometry-msgs			install
 ros-kinetic-geometry-tutorials			install
 ros-kinetic-gl-dependency			install
+ros-kinetic-global-planner			install
+ros-kinetic-gmapping				install
+ros-kinetic-hls-lfcd-lds-driver			install
 ros-kinetic-image-common			install
 ros-kinetic-image-geometry			install
 ros-kinetic-image-pipeline			install
@@ -63,26 +115,81 @@
 ros-kinetic-interactive-marker-tutorials	install
 ros-kinetic-interactive-markers			install
 ros-kinetic-joint-state-publisher		install
+ros-kinetic-joy					install
 ros-kinetic-kdl-conversions			install
 ros-kinetic-kdl-parser				install
+ros-kinetic-kobuki-auto-docking			install
+ros-kinetic-kobuki-bumper2pc			install
+ros-kinetic-kobuki-capabilities			install
+ros-kinetic-kobuki-dashboard			install
+ros-kinetic-kobuki-description			install
+ros-kinetic-kobuki-dock-drive			install
+ros-kinetic-kobuki-driver			install
+ros-kinetic-kobuki-ftdi				install
+ros-kinetic-kobuki-gazebo-plugins		install
+ros-kinetic-kobuki-keyop			install
+ros-kinetic-kobuki-msgs				install
+ros-kinetic-kobuki-node				install
+ros-kinetic-kobuki-random-walker		install
+ros-kinetic-kobuki-rapps			install
+ros-kinetic-kobuki-safety-controller		install
+ros-kinetic-laptop-battery-monitor		install
 ros-kinetic-laser-assembler			install
 ros-kinetic-laser-filters			install
 ros-kinetic-laser-geometry			install
 ros-kinetic-laser-pipeline			install
+ros-kinetic-laser-proc				install
+ros-kinetic-libfreenect				install
+ros-kinetic-librealsense			install
 ros-kinetic-librviz-tutorial			install
 ros-kinetic-map-msgs				install
+ros-kinetic-map-server				install
 ros-kinetic-media-export			install
 ros-kinetic-message-filters			install
 ros-kinetic-message-generation			install
 ros-kinetic-message-runtime			install
 ros-kinetic-mk					install
+ros-kinetic-move-base				install
+ros-kinetic-move-base-msgs			install
+ros-kinetic-move-slow-and-clear			install
+ros-kinetic-moveit				install
+ros-kinetic-moveit-commander			install
+ros-kinetic-moveit-core				install
+ros-kinetic-moveit-fake-controller-manager	install
+ros-kinetic-moveit-kinematics			install
+ros-kinetic-moveit-msgs				install
+ros-kinetic-moveit-planners			install
+ros-kinetic-moveit-planners-ompl		install
+ros-kinetic-moveit-plugins			install
+ros-kinetic-moveit-ros				install
+ros-kinetic-moveit-ros-benchmarks		install
+ros-kinetic-moveit-ros-control-interface	install
+ros-kinetic-moveit-ros-manipulation		install
+ros-kinetic-moveit-ros-move-group		install
+ros-kinetic-moveit-ros-perception		install
+ros-kinetic-moveit-ros-planning			install
+ros-kinetic-moveit-ros-planning-interface	install
+ros-kinetic-moveit-ros-robot-interaction	install
+ros-kinetic-moveit-ros-visualization		install
+ros-kinetic-moveit-ros-warehouse		install
+ros-kinetic-moveit-setup-assistant		install
+ros-kinetic-moveit-simple-controller-manager	install
+ros-kinetic-nav-core				install
 ros-kinetic-nav-msgs				install
+ros-kinetic-navfn				install
+ros-kinetic-navigation				install
 ros-kinetic-nodelet				install
 ros-kinetic-nodelet-core			install
 ros-kinetic-nodelet-topic-tools			install
 ros-kinetic-nodelet-tutorial-math		install
+ros-kinetic-object-recognition-msgs		install
 ros-kinetic-octomap				install
+ros-kinetic-octomap-msgs			install
+ros-kinetic-ompl				install
 ros-kinetic-opencv3				install
+ros-kinetic-openni2-camera			install
+ros-kinetic-openni2-launch			install
+ros-kinetic-openslam-gmapping			install
 ros-kinetic-orocos-kdl				install
 ros-kinetic-pcl-conversions			install
 ros-kinetic-pcl-msgs				install
@@ -100,10 +207,37 @@
 ros-kinetic-qt-gui-py-common			install
 ros-kinetic-qwt-dependency			install
 ros-kinetic-random-numbers			install
+ros-kinetic-realsense-camera			install
 ros-kinetic-resource-retriever			install
+ros-kinetic-rgbd-launch				install
 ros-kinetic-robot				install
 ros-kinetic-robot-model				install
+ros-kinetic-robot-pose-ekf			install
+ros-kinetic-robot-pose-publisher		install
 ros-kinetic-robot-state-publisher		install
+ros-kinetic-rocon-app-manager			install
+ros-kinetic-rocon-app-manager-msgs		install
+ros-kinetic-rocon-app-utilities			install
+ros-kinetic-rocon-apps				install
+ros-kinetic-rocon-bubble-icons			install
+ros-kinetic-rocon-console			install
+ros-kinetic-rocon-ebnf				install
+ros-kinetic-rocon-gateway			install
+ros-kinetic-rocon-gateway-utils			install
+ros-kinetic-rocon-hub				install
+ros-kinetic-rocon-hub-client			install
+ros-kinetic-rocon-icons				install
+ros-kinetic-rocon-interaction-msgs		install
+ros-kinetic-rocon-interactions			install
+ros-kinetic-rocon-master-info			install
+ros-kinetic-rocon-python-comms			install
+ros-kinetic-rocon-python-redis			install
+ros-kinetic-rocon-python-utils			install
+ros-kinetic-rocon-python-wifi			install
+ros-kinetic-rocon-semantic-version		install
+ros-kinetic-rocon-service-pair-msgs		install
+ros-kinetic-rocon-std-msgs			install
+ros-kinetic-rocon-uri				install
 ros-kinetic-ros					install
 ros-kinetic-ros-base				install
 ros-kinetic-ros-comm				install
@@ -140,13 +274,17 @@
 ros-kinetic-rospack				install
 ros-kinetic-rosparam				install
 ros-kinetic-rospy				install
+ros-kinetic-rospy-message-converter		install
 ros-kinetic-rospy-tutorials			install
+ros-kinetic-rosserial-msgs			install
+ros-kinetic-rosserial-python			install
 ros-kinetic-rosservice				install
 ros-kinetic-rostest				install
 ros-kinetic-rostime				install
 ros-kinetic-rostopic				install
 ros-kinetic-rosunit				install
 ros-kinetic-roswtf				install
+ros-kinetic-rotate-recovery			install
 ros-kinetic-rqt-action				install
 ros-kinetic-rqt-bag				install
 ros-kinetic-rqt-bag-plugins			install
@@ -193,10 +331,20 @@
 ros-kinetic-smach-msgs				install
 ros-kinetic-smach-ros				install
 ros-kinetic-smclib				install
+ros-kinetic-sophus				install
+ros-kinetic-sound-play				install
+ros-kinetic-srdfdom				install
 ros-kinetic-stage				install
 ros-kinetic-stage-ros				install
+ros-kinetic-std-capabilities			install
 ros-kinetic-std-msgs				install
 ros-kinetic-std-srvs				install
+ros-kinetic-stdr-gui				install
+ros-kinetic-stdr-msgs				install
+ros-kinetic-stdr-parser				install
+ros-kinetic-stdr-resources			install
+ros-kinetic-stdr-robot				install
+ros-kinetic-stdr-server				install
 ros-kinetic-stereo-image-proc			install
 ros-kinetic-stereo-msgs				install
 ros-kinetic-tf					install
@@ -214,15 +362,64 @@
 ros-kinetic-turtle-actionlib			install
 ros-kinetic-turtle-tf				install
 ros-kinetic-turtle-tf2				install
+ros-kinetic-turtlebot				install
+ros-kinetic-turtlebot-actions			install
+ros-kinetic-turtlebot-apps			install
+ros-kinetic-turtlebot-bringup			install
+ros-kinetic-turtlebot-calibration		install
+ros-kinetic-turtlebot-capabilities		install
+ros-kinetic-turtlebot-create			install
+ros-kinetic-turtlebot-dashboard			install
+ros-kinetic-turtlebot-description		install
+ros-kinetic-turtlebot-follower			install
+ros-kinetic-turtlebot-gazebo			install
+ros-kinetic-turtlebot-interactions		install
+ros-kinetic-turtlebot-interactive-markers	install
+ros-kinetic-turtlebot-msgs			install
+ros-kinetic-turtlebot-navigation		install
+ros-kinetic-turtlebot-rapps			install
+ros-kinetic-turtlebot-rviz-launchers		install
+ros-kinetic-turtlebot-simulator			install
+ros-kinetic-turtlebot-stage			install
+ros-kinetic-turtlebot-stdr			install
+ros-kinetic-turtlebot-teleop			install
+ros-kinetic-turtlebot3				install
+ros-kinetic-turtlebot3-bringup			install
+ros-kinetic-turtlebot3-description		install
+ros-kinetic-turtlebot3-fake			install
+ros-kinetic-turtlebot3-gazebo			install
+ros-kinetic-turtlebot3-msgs			install
+ros-kinetic-turtlebot3-navigation		install
+ros-kinetic-turtlebot3-simulations		install
+ros-kinetic-turtlebot3-slam			install
+ros-kinetic-turtlebot3-teleop			install
 ros-kinetic-turtlesim				install
+ros-kinetic-unique-id				install
 ros-kinetic-urdf				install
 ros-kinetic-urdf-parser-plugin			install
 ros-kinetic-urdf-tutorial			install
+ros-kinetic-urdfdom-py				install
+ros-kinetic-urg-c				install
+ros-kinetic-urg-node				install
+ros-kinetic-uuid-msgs				install
 ros-kinetic-vision-opencv			install
 ros-kinetic-visualization-marker-tutorials	install
 ros-kinetic-visualization-msgs			install
 ros-kinetic-visualization-tutorials		install
 ros-kinetic-viz					install
+ros-kinetic-voxel-grid				install
+ros-kinetic-warehouse-ros			install
 ros-kinetic-webkit-dependency			install
+ros-kinetic-world-canvas-msgs			install
+ros-kinetic-world-canvas-server			install
+ros-kinetic-world-canvas-utils			install
 ros-kinetic-xacro				install
 ros-kinetic-xmlrpcpp				install
+ros-kinetic-yocs-cmd-vel-mux			install
+ros-kinetic-yocs-controllers			install
+ros-kinetic-yocs-math-toolkit			install
+ros-kinetic-yocs-msgs				install
+ros-kinetic-yocs-velocity-smoother		install
+ros-kinetic-yocs-virtual-sensor			install
+ros-kinetic-zeroconf-avahi			install
+ros-kinetic-zeroconf-msgs			install

Review CS261 requirements

Are ruby, lua5.3, and lsb-core necessary for 261, or were they just added for generic UUG purposes? Are they better better served in a role for a different course?

USB hardware level

Per @ChrisMayfield, we should be intentional about requiring the Extension Pack when packaging the VM, as most people won't need it. CS354 may require a better USB controller for moving Kinect data into the VM.

  • Remove USB 2.0 from the next image build
  • Add a warning/failure if EHCI/xHCI controllers exist during OEM script
  • Find a way to warn in the CS354 target of a missing EHCI/xHCI controller
  • Create a docs folder, and publish a How to Add Extensions and Upgrade USB markdown file

Include Filezilla, possibly drop Home on Stu

Per @ChrisMayfield, sftp via vfs is unnecessarily confusing for early students (101/149/159) and remote file access is better accomplished with FileZilla. Adding FileZilla is easy enough, bonus points if we pre-populate a connect entry in its configuration. Need to determine if we offend @lam2mo by dropping the sftp-vfs across the board in favor of sftp.

Menu shortcuts do not appear

On first installation, menu shortcut didn't populate, but appeared after reboot. Consider adding a update-desktop-database handler to anything that creates desktop shortcuts.

uug-ansible-wrapping not waiting

The end of the ansible wrapper script, where we wait for keyboard input, does not seem to fire when run from a desktop icon. Perhaps gksudo isn't running bash interactively, which would disable prompts.

Garbage collect dead configuration

Starting a tracking issue for things that have been left behind to be cleaned up later once we're sure we're done with them.

  • Home on stu
  • Aptana

Revisit CS149 vs CS159

Per @ChrisMayfield, Eclipse is used in CS149 and should be included there. Determine if we should still have separate roles so that JGrasp and DrJava are excluded from CS149. Also update README to reflect this.

Alphabetize lists of packages

Apt package lists in playbooks and documentation like README should be alphabetized unless there's a technical reason not to for a specific list.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.