updated docs
[feisty_meow.git] / production / sites / cakelampvm.com / docs / manual / cakelampvm_guide_v002.html
1 <!DOCTYPE html>
2 <html>
3   <head>
4     <meta content="text/html; charset=windows-1252" http-equiv="content-type">
5     <title>Cake LAMP VM Documentation</title>
6   </head>
7   <body>
8     <h1 style="text-align: center;">The cakelampvm VM:<br>
9       Configuration and Usage</h1>
10     <h2 style=" text-align: center;">By Chris Koeritz</h2>
11     <h3 style="   text-align: center;"> Vintage: cakelampvm v002 &nbsp;&nbsp;
12       Updated: 2017-11-15</h3>
13     <h6> </h6>
14     <h2>Basic info for the guest VM</h2>
15     <ul>
16       <li>hostname: cakelampvm.com</li>
17       <li>local IP address: 10.28.42.20</li>
18       <li>services: DNS (bind9), apache2, fluxbox X windowing system, gnome
19         display manager</li>
20       <li>main user: developer (password distributed separately)</li>
21       <li>mysql root password: (password distributed separately)</li>
22     </ul>
23     <h2>How to set up virtualbox for your host PC</h2>
24     <ol>
25       <li>Download and install virtualbox:
26         https://www.virtualbox.org/wiki/Downloads</li>
27       <li>Install the extension pack for virtualbox: This provides USB drivers
28         and other features.&nbsp; This is installed on virtualbox itself, not on
29         the guests.</li>
30       <ol>
31         <li>Download the extension pack at
32           https://www.virtualbox.org/wiki/Downloads</li>
33         <li>Stop any running virtualbox vms.</li>
34         <li>Close virtualbox control panel.</li>
35         <li>Double-click on the downloaded extensions package (in a file
36           explorer) and virtualbox should install it.</li>
37       </ol>
38       <li>Run the virtualbox control panel.</li>
39       <li>Download the cakelampvm guest vm package and unzip it.&nbsp; Store the
40         unzipped version in some appropriate place where you want the virtual
41         machine to reside on your host's hard drive.</li>
42       <li>Add the guest VM to your list of VMs.&nbsp; From the virtualbox menus,
43         choose the "Machine" menu and select "Add".&nbsp; Point the selector
44         dialog at the cakelampvm folder you created above and open the
45         cakelampvm.vbox file.</li>
46       <li>Now the cakelampvm should show up in the list of virtual
47         machines.&nbsp; Before starting it, perform the following network
48         configuration sections.</li>
49     </ol>
50     <h3>Configure the Host-Only network on virtualbox</h3>
51     <p>Configuring host-only networking for the VM makes the VM completely local
52       to your machine.&nbsp; The cakelampvm will not be accessible on the
53       internet or from the LAN, and can only be accessed by your host PC.</p>
54     <ol>
55       <li> Go to virtual box "Preferences" (global preferences, not for a
56         specific vm).</li>
57       <li> Click on the "Network" tab.</li>
58       <li> Choose the "Host-only Networks" tab from within "Network".</li>
59       <li> Click the plus icon to add a new host-only network, or if there is
60         already a Host-only network, then edit it.</li>
61       <li>Set the "Adapter" parameters:<br>
62         IPv4 Address: 10.28.42.1<br>
63         IPv4 Network Mask: 255.255.255.0<br>
64         IPv6 Address: (leave blank)<br>
65         IPv6 Prefix Length: 0<br>
66         Virtualbox will fill in the other details like so:<br>
67         <p><img alt="host only network adapter" src="images/host_only_network_adapter.png"></p>
68       </li>
69       <li>Set the "DHCP Server Settings" to disabled, e.g.<br>
70         <img alt="host only dhcp" src="images/host_only_adapter_dhcp_server.png"><br>
71         This is disabled because we will be using statically assigned addresses
72         for convenience and stability.</li>
73     </ol>
74     <p>Additional information on host-only (and other) network adapter types is
75       at: https://www.virtualbox.org/manual/ch06.html#network_nat_service<br>
76     </p>
77     <h3>Configure the Nat Network on virtualbox</h3>
78     <ol>
79       <li> Go to virtual box "Preferences" (global preferences, not for a
80         specific vm).</li>
81       <li> Click on the "Network" tab.</li>
82       <li> Choose the "Nat Networks" tab from within "Network".</li>
83       <li> Click the plus icon to add a new host-only network.</li>
84       <li>Set the "NAT Network Details" parameters:<br>
85         Network Name: NatNetwork<br>
86         Network CIDR: 10.0.2.0/24<br>
87         Supports DHCP: checked<br>
88         Supports IPv6: optionally checked<br>
89         These are my settings, with IPv6 left disabled:<br>
90         <img alt="nat net config" src="images/nat_network_config.png"></li>
91     </ol>
92     <h2>Start up the VM</h2>
93     <p>Using the virtualbox interface, you should now be able to start your
94       virtual machine.&nbsp; Virtualbox will complain if it detects any
95       remaining configuration problems in the VM, but it should start
96       normally.&nbsp; The Linux boot sequence will show many lines of text,
97       before bringing up a black console window with a login dialog.</p>
98     <p>You can log in directly on the VM console with the developer account, but
99       it is generally more useful to connect to the cakelampvm over ssh.&nbsp;
100       If the networking has been established properly, you should be able to do
101       this with:</p>
102     <pre>ssh developer@cakelampvm.com&nbsp; (or equivalent with your ssh client)</pre>
103     <p>And then provide the password to log in.</p>
104     <p>A feature called "X forwarding" is enabled, so if you start graphical
105       applications on the VM, you can display them from an appropriately
106       configured host.&nbsp; (If you're running Linux as the host for the VM,
107       you can definitely run remote windows.&nbsp; Windows may not support
108       that.)</p>
109     <p>#### check this!!!</p>
110     <h2>Using the guest VM's DNS services</h2>
111     <p>The cakelampvm has been set up to provide a DNS server which will answer
112       name requests for all of the sites that the VM hosts.</p>
113     <p>To use the cakelampvm DNS, modify your host operating system network
114       configuration by adding or changing the DNS server to use the guest VM's
115       DNS service.&nbsp; This is available at the local address
116       10.28.42.20.&nbsp; The DNS server can be tested with nslookup, dig and
117       other tools.</p>
118     <p>Note that the cakelampvm DNS should be listed first, if one intends to
119       override any DNS names that actually exist out on the internet.</p>
120     <p>If the DNS server is properly set up, then these ping commands should get
121       answering responses:</p>
122     <pre>ping cakelampvm.com</pre>
123     <pre>ping defaultcake.cakelampvm.com</pre>
124     <pre>ping mapsdemo.cakelampvm.com</pre>
125     <h3>Setting up DNS on Windows</h3>
126     <p>The ipconfig tool will provide helpful information about your current
127       networking and DNS configuration:</p>
128     <pre>ipconfig --all</pre>
129     <p>The DNS configuration on Windows is somewhat byzantine.&nbsp; The pipe
130       characters ('|') below are used to separate the menus or tabs or dialogs
131       to traverse.&nbsp; Follow this path to get to the DNS config:</p>
132     <pre>Control Panel | Network &amp; Sharing | click WiFI or Ethernet link near top right | click Adapter Settings on left | click on specific network device to modify | select Properties</pre>
133     <p><br>
134     </p>
135     <p><br>
136     </p>
137     <p><br>
138     </p>
139     <h2>Editing files on the guest VM from the host</h2>
140     <p>On the host computer, look for the guest vm as a networked computer
141       called cakelampvm.&nbsp; This should provide some network shares using
142       Microsoft SMB protocol, and they can be attached to using the "developer"
143       user and its password.</p>
144     <p>On windows, one may want to mount this network location as a drive letter
145       for easier access.</p>
146     <p>Currently, the root of all web servers is exposed as "www".&nbsp; Editing
147       the files in those folders requires ownership by the developer user.&nbsp;
148       Currently the defaultcake server is owned by developer.</p>
149     <p>One should be able to create a new directory in the www folder owned by
150       the developer user over the network also, which can be used for creating
151       new projects.&nbsp; However, there is a config issue in the current vm
152       (v001) about this; to fix, run this command on the guest vm as the
153       developer user:</p>
154     <pre>sudo chmod g+w /var/www</pre>
155     <p>Afterwards, the www folder should allow the developer user to create new
156       folders at will.</p>
157     <h2>Accessing files on the host PC from the guest VM</h2>
158     <p>If you want to share a folder from the host to the guest, perhaps for
159       driver updates or other conveniences, then make the share with these
160       steps:</p>
161     <ol>
162       <li>Create a folder on the host that is to be shared.</li>
163       <li>Right-click on the vm in virtualbox manager and choose "Settings".</li>
164       <li>In the "Shared Folders" tab of the settings, go to "Machine Folders".</li>
165       <li>Click the folder plus icon to create a new share.</li>
166       <li>Fill in the "Folder Path" on the host PC to the folder that will be
167         shared, and give it a name for the guest.&nbsp; We assume the folder
168         name will be "myshare".</li>
169       <li>On the guest vm, run the following commands to mount the share:<br>
170         <pre>mkdir ~/shared&nbsp;&nbsp;&nbsp; # for the guest's version of the shared folder</pre>
171         <pre>sudo mount -t vboxsf myshare ~/shared&nbsp;&nbsp;&nbsp; # mount the vm's share name onto the folder on the vm.</pre>
172       </li>
173     </ol>
174     <h2>Adding a new website and domain on the guest VM</h2>
175     <p>To add a new website, you will need to pick one of the DNS options below
176       (A or B) depending on how you want to name the site.&nbsp; After the DNS
177       is updated, then follow the section after for creating a new apache conf
178       file.</p>
179     <p>Assuming one has created a new folder in "www" called "greatsite", then
180       the new web site can be brought online on the vm with one of the following
181       options.</p>
182     <h3>DNS Option A: Using a sub-domain in the cakelampvm.com domain</h3>
183     Connect to the cakelampvm via ssh as the developer user, e.g.: ssh
184     developer@cakelampvm.com
185     <p>Execute the following command to edit the DNS file for the cakelampvm
186       domain:</p>
187     <pre>sudo vi /etc/bind/cakelampvm.com.conf</pre>
188     <p>Add a stanza for the new site at the end of this file:</p>
189     <pre>greatsite.cakelampvm.com&nbsp;&nbsp;&nbsp; IN A&nbsp;&nbsp;&nbsp; 10.28.42.20<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IN HINFO "linux server" "ubuntu"</pre>
190     <p>Restart the DNS server: sudo service bind9 restart</p>
191     <p>Afterwards, pinging greatsite.cakelampvm.com should work from either the
192       guest or the host.</p>
193     <h3>DNS Option B: Using an entirely new domain for the site</h3>
194     <p>Similar procedure to above, but we will create a new file for the new
195       domain and add it to the bind directory.&nbsp; For this example, we will
196       create a file called /etc/bind/greatsite.tv.conf for our new domain
197       greatsite.tv with these contents:</p>
198     <pre>$TTL 1W<br>@&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN SOA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fred.cakelampvm.com. (<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2017100801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; serial<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; refresh<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; retry<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; expiry<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6H )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; minimum<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ns.cakelampvm.com.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN MX&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mail.cakelampvm.com.<br><br># main domain for machine.<br>greatsite.tv.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.28.42.20<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN HINFO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "linux server" "ubuntu"</pre>
199     The gnarly prefix stuff above the "greatsite.tv." listing establishes
200     configuration info for the new domain.&nbsp; This file relies on the
201     existing cakelampvm.com infrastructure in DNS, such as the "ns" host, which
202     is the domain's name server.
203     <p>Now that the config file is in place, edit "named.conf.local" to add the
204       new file by adding this bit of configuration at the end:</p>
205     <pre>zone "greatsite.tv" in {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file "/etc/bind/greatsite.tv.conf";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allow-query { any; };<br>};</pre>
206     <p>Restart the DNS server: sudo service bind9 restart</p>
207     <p>Afterwards, pinging greatsite.tv should work from either the guest or the
208       host.</p>
209     <h3>Create a new apache configuration file and load it</h3>
210     <p>Start with the following template file for the new website, and modify it
211       for the appropriate host name:</p>
212     <pre>&lt;VirtualHost *:80&gt;<br>&nbsp;&nbsp;&nbsp; ServerName greatsite.cakelampvm.com<br>&nbsp;&nbsp;&nbsp; ServerAlias greatsite.cakelampvm.com *.greatsite.cakelampvm.com<br>&nbsp;&nbsp;&nbsp; DocumentRoot /var/www/greatsite<br>&nbsp;&nbsp;&nbsp; ErrorLog ${APACHE_LOG_DIR}/greatsite.cakelampvm.com-error.log<br>&nbsp;&nbsp;&nbsp; CustomLog ${APACHE_LOG_DIR}/greatsite.cakelampvm.com-access.log combined<br>&nbsp;&nbsp;&nbsp; Alias /statistics "/var/www/webwork.repository/webwork/maps_demo/webroot/statistics"<br>&nbsp;&nbsp;&nbsp; Include /etc/apache2/conf-library/basic-options.conf<br>&nbsp;&nbsp;&nbsp; Include /etc/apache2/conf-library/rewrite-enabling.conf<br>&lt;/VirtualHost&gt;</pre>
213     <p>The above example is pre-modified for DNS Option A above, the
214       greatsite.cakelampvm.com name.&nbsp; Switching all of those to
215       "greatsite.tv" instead would support DNS option B.</p>
216     <p>Copy that file into /etc/apache/available-sites under an appropriate
217       name, which here we will call "greatsite.conf".</p>
218     <p>Tell apache to use the new file:</p>
219     <pre>a2ensite greatsite.conf</pre>
220     <p>Finally, restart apache to get it to begin serving the site:</p>
221     <pre>sudo service apache2 restart</pre>
222     <h3>Test the new web site</h3>
223     <p>Given the configuration above, your host PC should now be able to access
224       the new website.</p>
225     <p>To test this, first try pinging the hostname, e.g.: ping
226       greatsite.cakelampvm.com or ping greatsite.tv</p>
227     <p>Then, if there are responses to the ping, it means the DNS is
228       working.&nbsp; If there are no responses, check the instructions in the
229       above DNS option section.</p>
230     <p>Once the DNS is working, one can try browsing to the site at:
231       http://greatsite.cakelampvm.com or http://greatsite.tv (depending on the
232       DNS option chosen).</p>
233     <p>If the site is not showing up properly, try examining the apache logs for
234       error messages that can be corrected.&nbsp; The log files are stored in
235       /var/log/apache2 and are generally named after the website.</p>
236     <h2>Configuring the guest VM</h2>
237     <p>The guest VM should already be set up appropriately.&nbsp; These steps
238       are provided for reference and updates.</p>
239     <h3>Set up virtualbox guest additions for the VM</h3>
240     <p>** note for v001 of cakelampvm: the below steps are still needed on the
241       shipped image.</p>
242     <p>This procedure is needed if the guest provides an older or incompatible
243       version of the guest additions (which have already been installed on the
244       guest vm).&nbsp; It may also be necessary when a new version of the guest
245       additions becomes available.</p>
246     <ol>
247       <li>To install the guest additions, open the guest VM and have its window
248         in focus.</li>
249       <li>Choose the "Devices" menu and select "Insert Guest Additions CD
250         Image".&nbsp; This will mount the CD's ISO image on the VM.</li>
251       <li>On the guest VM, it may be necessary to mount the CD image that's now
252         available:<br>
253         sudo mount /dev/sr0 /media/cdrom</li>
254       <li>Since the VM currently has no windowing system installed, one must
255         start the Guest Additions install manually:<br>
256         cd /media/cdrom<br>
257         sudo sh VBoxLinuxAdditions.run</li>
258       <li>This should install the guest additions.</li>
259     </ol>
260     <h3>Set up network adapters on guest VM</h3>
261     <p>The network interfaces should already be configured on the guest within
262       the virtualbox configuration.&nbsp; This is available by clicking on the
263       VM in the virtualbox manager and selecting "Settings".&nbsp; These are the
264       configuration settings used:</p>
265     Adapter 1:<br>
266     &nbsp; Attached to: Host-only Adapter<br>
267     &nbsp; Name: vboxnet0&nbsp; <br>
268     <p>Adapter 2:<br>
269       &nbsp; Attached to: Nat Network<br>
270       &nbsp; Name: NatNetwork</p>
271     <p>On the guest VM itself, the network settings are specified in a file
272       called /etc/network/interfaces.&nbsp; Here are the current contents of
273       that file:</p>
274     <pre>source /etc/network/interfaces.d/*<br><br>auto lo<br>iface lo inet loopback<br><br>auto enp0s3<br>iface enp0s3 inet static<br>&nbsp; address 10.28.42.20<br>&nbsp; netmask 255.255.255.0<br>&nbsp; network 10.28.42.0<br>&nbsp; broadcast 10.28.42.255<br>&nbsp; dns-domain cakelampvm.com<br>&nbsp; dns-search cakelampvm.com<br>&nbsp; dns-nameservers 127.0.0.1 8.8.8.8</pre>
275     <pre>auto enp0s8</pre>
276     <pre>iface enp0s8 inet dhcp</pre>
277     <p> </p>
278     <h2>Handy Techniques</h2>
279     <h3>Get the network address on the guest vm</h3>
280     <p>Run this command: ifconfig</p>
281     <p>In the results, look for "inet addr".&nbsp; There may be more than one,
282       if there are multiple network interfaces.</p>
283     <h3>How to cleanly reboot or shut down the guest VM</h3>
284     <p>When you've got the DNS and everything integrated, these commands will
285       manage the vm's state:</p>
286     <p>First, log into the guest VM: ssh developer@cakelampvm.com</p>
287     <p>Then, reboot the guest VM: sudo reboot</p>
288     <p>Or, halt the guest VM: sudo shutdown -h now</p>
289     <p>Using these commands is better than just cycling the power from the
290       virtualbox control panel.</p>
291     <h2>Notes on building the Cake Lamp VM</h2>
292     <p>This is all work that should already have been done.&nbsp; It is
293       mentioned here just as breadcrumbs for a future vm builder.</p>
294     <ul>
295       <li>Downloaded and installed virtualbox for host computer (where the vm
296         image will be built).</li>
297       <li>Downloaded ubuntu server 16.04 iso.
298         (https://www.ubuntu.com/download/server)</li>
299       <li>Created a new vm in virtualbox, telling it to start from the ubuntu
300         server iso.</li>
301       <li>Installed LAMP stack on guest VM.&nbsp; Some help here:
302         http://howtoubuntu.org/how-to-install-lamp-on-ubuntu</li>
303       <li>Configured CAKE on the guest VM.&nbsp; Useful link:
304         https://askubuntu.com/questions/628938/how-to-install-cakephp-in-ubuntu-14-04</li>
305       <li>Configured the two network adapters as needed (one for host-only
306         network and one for nat network).&nbsp; Here's some info about
307         virtualbox networking with two adapters similar to our setup:
308 https://askubuntu.com/questions/293816/in-virtualbox-how-do-i-set-up-host-only-virtual-machines-that-can-access-the-in<br>
309       </li>
310       <li>Installed and configured Samba service for the guest VM.&nbsp; The
311         main config file lives in "/etc/samba/smb.conf".&nbsp; Some pointers
312         here:
313 https://help.ubuntu.com/community/How%20to%20Create%20a%20Network%20Share%20Via%20Samba%20Via%20CLI%20%28Command-line%20interface/Linux%20Terminal%29%20-%20Uncomplicated%2C%20Simple%20and%20Brief%20Way%21</li>
314     </ul>
315     <p><br>
316     </p>
317   </body>
318 </html>