readme
This commit is contained in:
		
							
								
								
									
										113
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,113 @@ | |||||||
|  | # Setting up a LAVA instance | ||||||
|  |  | ||||||
|  | This repository contains ansible scripts that help set up a LAVA instance on a Debian 9.4 (stretch) machine. | ||||||
|  |  | ||||||
|  | ## Installation | ||||||
|  | ```bash | ||||||
|  | # Get the repository | ||||||
|  | git clone http://git.k-space.ee/madislutter/ansible-lava.git | ||||||
|  | cd ansible-lava | ||||||
|  |  | ||||||
|  | # Put the IP address of your machine into the hosts file. | ||||||
|  | vim hosts | ||||||
|  |  | ||||||
|  | # Run the lava-install playbook. This will install the necessary packages  | ||||||
|  | # from stretch-backports. Not using the stretch-backports would result in  | ||||||
|  | # installing a deprecated version. It will also configure the apache  | ||||||
|  | # server to serve the LAVA website. | ||||||
|  | ansible-playbook lava-install.yml | ||||||
|  |  | ||||||
|  | # Create a superuser account with the help of lava-create-user playbook | ||||||
|  | ansible-playbook lava-create-user.yml | ||||||
|  | ``` | ||||||
|  | * The next commands need to be run in the target machine. | ||||||
|  | * If your server doesn't have HTTPS then you need to add these two lines into /etc/lava-server/settings.conf. | ||||||
|  |   ``` | ||||||
|  |   "CSRF_COOKIE_SECURE": false, | ||||||
|  |   "SESSION_COOKIE_SECURE": false | ||||||
|  |   ``` | ||||||
|  |   After editing the file, restart the django service for the changes to take effect. | ||||||
|  |   ```bash | ||||||
|  |   service lava-server-gunicorn restart | ||||||
|  |   ``` | ||||||
|  | * Now log in through the web interface and create a token at http://\<ip-address>/api/tokens/. | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | lava-tool auth-add http://<username>@<ip-address>/ | ||||||
|  | # Paste the token you created | ||||||
|  |  | ||||||
|  | # The next section will create a shortcut for lava-tool so that we | ||||||
|  | # wouldn't have to type out the server address for each command. | ||||||
|  | lava-tool auth-config --default-user http://<username>@<ip-address>/RPC2/ | ||||||
|  | lava-tool auth-config --endpoint-shortcut local http://<username>@<ip-address>/RPC2/ | ||||||
|  | ``` | ||||||
|  | ## Testing the setup, adding devices | ||||||
|  | In order to test the setup, let's add a qemu device and a standard test job that should run if everything is set up correctly. The following commands should be run inside the target machine. | ||||||
|  | ```bash | ||||||
|  | # Add the qemu device type | ||||||
|  | lava-server manage device-types add qemu | ||||||
|  | # Add the device itself. The last argument is the device name. | ||||||
|  | lava-server manage devices add --device-type qemu --worker $(hostname -f) qemu01 | ||||||
|  | ``` | ||||||
|  | * Test jobs can only be submitted to devices that have a device dictionary. So we need to add a device dictionary to the created device. Create a file with the following contents and name it qemu-dict.jinja2. | ||||||
|  | ```jinja2 | ||||||
|  | {% extends 'qemu.jinja2' %} | ||||||
|  | {% set mac_addr = '52:54:00:12:34:59' %} | ||||||
|  | {% set memory = '1024' %} | ||||||
|  | ``` | ||||||
|  | * Now add the device dictionary to the device. | ||||||
|  | ```bash | ||||||
|  | lava-tool device-dictionary --update /qemu-dict.jinja2 local qemu01 | ||||||
|  | ``` | ||||||
|  | * Navigate to this address http://\<ip-address>/scheduler/jobsubmit and submit [this standard test job](https://validation.linaro.org/static/docs/v2/examples/test-jobs/qemu-amd64-standard-stretch.yaml). | ||||||
|  |  | ||||||
|  | If the job runs and succeeds then the setup is successful. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Debugging | ||||||
|  | ### supermin: failed to find a suitable kernel (host_cpu=x86_64) | ||||||
|  | If the test job is not able to boot the device and the output contains this error then make sure you have a kernel installed in /boot directory. | ||||||
|  |  | ||||||
|  | ### Could not access KVM kernel module | ||||||
|  | If the job is not able to boot the device and the output contains: | ||||||
|  | ``` | ||||||
|  | Could not access KVM kernel module: No such file or directory | ||||||
|  | failed to initialize KVM: No such file or directory | ||||||
|  | Connection closed | ||||||
|  | ``` | ||||||
|  | then make sure your kernel has the kvm module loaded: | ||||||
|  | ```bash | ||||||
|  | lsmod | grep kvm | ||||||
|  | ``` | ||||||
|  | Sometimes the module is loaded, but the module files themselves aren't mounted in `/lib/modules/$(uname -r)`. This is especially likely if you are running inside a virtual machine. Run this to see if there is a problem with finding the module files: | ||||||
|  | ```bash | ||||||
|  | modprobe kvm | ||||||
|  | ``` | ||||||
|  | A simple solution to bypass the kvm problem is to disable kvm in the test job definition. Just add `no_kvm: true` as seen in [this test job](https://git.k-space.ee/madislutter/lava-tests/src/master/jobs/inline-pwd.yaml). | ||||||
|  |  | ||||||
|  | ## Noteworthy | ||||||
|  |  | ||||||
|  | ### Creating a superuser account | ||||||
|  | If you try to create a superuser account with this command: | ||||||
|  | ```bash | ||||||
|  | lava-server manage users add --superuser | ||||||
|  | ``` | ||||||
|  | then be aware that users created like this don't actually get access to the Django admin area of the site at http://\<ip-address>/admin. A user gets access to that only if the account is created with these commands: | ||||||
|  | ```bash | ||||||
|  | lava-server manage createsuperuser --username <username> --email <<e-mail> | ||||||
|  | lava-server manage changepassword <username> | ||||||
|  | ``` | ||||||
|  | --- | ||||||
|  | ### Use tmux for long-running processes | ||||||
|  | Installing all the packages for the LAVA setup can take a long time. It's possible you'll get a broken pipe during the installation. For this reason it might make sense to SSH into the machine, start a tmux session there and install the necessary packages inside this session. If you get a broken pipe then you'll be able to reconnect to the machine and attach to the same tmux session. | ||||||
|  |  | ||||||
|  | If you installed the packages outside a tmux session and there was a configuration prompt and you then got a broken pipe then you'll need to do this: | ||||||
|  | ```bash | ||||||
|  | # Find the dpkg job and kill it | ||||||
|  | ps aux | grep dpkg | ||||||
|  | kill <pid> | ||||||
|  |  | ||||||
|  | # Finish configuring the packages | ||||||
|  | dpkg --configure -a | ||||||
|  | ``` | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user