Getting Things Done
Copyright 2013 by Citrix Systems, Inc. This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/.
TODO: Currently this page is under the notes section since that is what it is - a collection of notes from Rob Moran. A lot of this information would be really useful in a page under Getting Started but it would need to be cleaned up and organized. It is still quite useful for non-beginners though.
- 1 Overview
- 2 Z Indices
- 3 Synchronizer XT
- 4 Extending xenclient/root disc size
- 5 Debugging a daemon
- 6 Getting Things Done
- 6.1 Enabling ‘Secure Launch’
- 6.2 Allowing a CD install of XC to upgrade OTA
- 6.3 Filling a drive
- 6.4 Turning on touch-screen keyboard in UIVM
- 6.5 Running webkit JavaScript from GTK
- 6.6 Checking out source
- 6.7 Unlocking XT installs (for SSH and v4v-proxy)
- 6.8 Mounting VM read-write
- 6.9 Passing Through PCI Devices
- 6.10 Startup Wizard
- 6.11 xenmgr Ops
- 6.11.1 Using xec
- 6.11.2 Turning on CTRL+0 tip
- 6.11.3 Making Status Report appear
- 6.11.4 Poking VM properties
- 6.12 Writing XenStore
- 6.13 dbus-send examples
- 6.13.1 notifications:
- 6.13.2 generic notifications:
- 6.13.3 signals:
- 6.13.4 method:
- 6.14 Poking the database
- 6.15 gettimeofday trickery
- 6.16 Debugging UID
- 6.17 Net Boot
- 6.18 GIT
- 6.19 Debugging Switcher Bar
- 6.20 NIS mount hack on ubuntu
- 7 GRUB Shell
- 8 Core Dumps
Overview
This page is a bunch of salvaged notes from a former XenClient engineer. There are quite a few useful tips and instructions for just doing things on (Open)XT. It is being splatted here in its original form for now - if folks want to clean it up, re-organize it and add to it, please feel free.
Z Indices
Ideal
apply update 6000
mouse pointer 5000
native screen 4500
wait screen 4000
menu popup 3000
tooltips 2000
dialogs 950
header 300
menu bar 200
footer 100
content areas 1,0,-1
Current (hacky for X applets)
mouse ponter 5000
menu popup 3000
tooltips 2000
header 1800
menu bar 1700
footer 1600
wait screen 1500
dialogs 950
content area 0
Synchronizer XT
You can test this by logging on to root@autotest-1
$ experiments -m ludo --syncxt-test
if you need to reset the db on your machine (check the help to see if this is correct)
$ experiments -m ludo --wipe-database
Extending xenclient/root disc size
First, delete something (/usr/lib/xui/images is good) to make room to do the resize. Alternatively steal from somewhere else e.g.
$ lvreduce -L -1G xenclient/storage
$ lvextend -L +1G xenclient/root
$ resize2fs -p /dev/xenclient/root
Debugging a daemon
Example using input daemon - you will probably need to extend xenclient/root first, as shown above.
$ opkg update
$ opkg install gdb //installs the debugger program
$ opkg list //lists available packages - find the one you're looking for
$ opkg install xenclient-input-daemon-dbg //we had to run this twice to get it to success
$ /etc/init.d/xenclient-input restart
$ ps auxw | grep input //to find the pid
$ gdb /usr/bin/input_server [pid]
some gdb basics
$ c // to continue
$ where // to get a stack trace
$ q // to quit
Getting Things Done
Enabling ‘Secure Launch’
NOTE: the tpm-setup script is currently broken.
(This was on my HP 8470p so might vary a little bit)
Enter BIOS setup
Go to Security settings
Set BIOS password to !XenR00t (they are zeros)
In the security settings - clear security keys (If the option is there)
go to TPM Embedded Security
Enable Embedded Security Device State
Save and reboot
Enter BIOS setup again
Go to Device Config and set TXT On
Save and reboot into XC
Open the XC terminal
Type:
$ nr
$ tpm–setup
Set the password to xenroot
It will do it’s thing… then you need to reboot twice.
Job done.
Allowing a CD install of XC to upgrade OTA
vi /config/repo-cert.conf to read:
ALLOW_DEV_REPO_CERT='true'
Filling a drive
10GB:
$ dd if=/dev/zero of=/storage/temp bs=1M count=$((10*1000))
Turning on touch-screen keyboard in UIVM
on the device, edit /usr/lib/xui/script/constants.js and set KEYBOARD: true, around line 360
Running webkit JavaScript from GTK
webkit_web_view_execute_script(web_view, "alert(window.XUICache.Host.publish_topic);");
Checking out source
git pull in these directories:
build/oe/repos/extra/
build/oe/xenclient/
Unlocking XT installs (for SSH and v4v-proxy)
$ newrole -r sysadm_r
$ setenforce 0
$ sed -i "s/enforcing/permissive/" /etc/selinux/config
Mounting VM read-write
This works for UIVM
$ db-write "/xenmgr/bypass-sha1sum-checks" true
$ xec-vm -n <name> --disk 0 set mode w
If already running:
$ xec-vm -n <name> reboot
Inside VM:
$ mount -o remount,rw /
Passing Through PCI Devices
put the below into: /etc/modprobe.d/blacklist-sound.conf
blacklist snd_hda_codec_intelhtml
blacklist snd_hda_codec_idt
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hwdep
blacklist snd_pcm
blacklist pcspkr
blacklist snd_timer
blacklist snd
blacklist soundcore
blacklist snd_page_alloc
reboot the host change the VM config to passthrough the device:
$ xec-vm -u<vm uuid> add-pt-rule 0x0403 any any
OR
$ xec-vm -n<vmname> add-pt-rule 0x0403 any any
and start your VM.
For reference: 0x0403 is the PCI class for an audio device. You can see this from looking at the output in dom0 of lspci -vvv to find the PCI bus address of the device and then lspci -vvvn to see the device class of it.
Startup Wizard
$ touch /config/deferred_dom0_password
$ touch /config/deferred_kb_layout
$ touch /config/deferred_eula
$ touch /config/deferred_language
xenmgr Ops
$ tail -f /var/log/xenmgr.log
Using xec
You can work out a lot of this from looking at the IDLhttp://git.uk.xensource.com/cgit.cgi/xenclient/idl.git/tree/interfaces lists all of the properties and methods on xenmgr object. "-o /" specifies the object, and if not supplied is assumed to be "/".
$ xec
$ xec -o /
calls one of the methods listed
$ xec list-vms
lists all of the properties and methods on the host object.
$ xec -o /host
this will Get one of the properties listed
$ xec -o /host Get build-info
to interrogate vms
$ xec-vm
these are equivalent and will show you properties and methods available on VMs
$ xec-vm -o /vm/[uuid]
$ xec -o /vm/[uuid]
if you're getting a property that exists in more than one of the interfaces, then you need to explicitly set the interface
$ xec-vm -o /vm/[uuid] -i com.citrix.xenclient.xenmgr.vm.unrestricted Get state
to get VM by name
$ xec-vm -n "VM Name"
Turning on CTRL+0 tip
$ xec set show-msg-on-vm-start true
Making Status Report appear
$ xec status-report-screen true
Poking VM properties
$ xec-vm -n "Windows XP" set-db-key policies.wired-networking true
Writing XenStore
$ xenstore-write /local/domain/1/report/state 1
dbus-send examples
notifications:
$ dbus-send --system --type=signal /host com.citrix.xenclient.xenmgr.host.storage_space_low int32:5
$ dbus-send --system --type=signal / com.citrix.xenclient.updatemgr.update_state_change string:"downloaded-files"
$ dbus-send --system --type=signal / com.citrix.xenclient.usbdaemon.device_rejected string:"device" string:"reason"
$ dbus-send --system --type=signal / com.citrix.xenclient.xenmgr.guestreq.requested_attention string:<UUID> objpath:<PATH>
generic notifications:
$ dbus-send --system --type=signal / com.citrix.xenclient.xenmgr.host.generic_message string:"Information" string:"Here is some important information"
$ dbus-send --system --type=signal / com.citrix.xenclient.xenmgr.host.generic_message string:"Information" string:"I will only appear for 5 seconds" int32:5000
$ dbus-send --system --type=signal / com.citrix.xenclient.xenmgr.host.generic_message string:"Warning" string:"I am a warning" int32:5000 int16:1
$ dbus-send --system --type=signal / com.citrix.xenclient.xenmgr.host.generic_message string:"Error" string:"I am an error and have a known ID" int32:5000 int16:2 string:"myid2"
$ dbus-send --system --type=signal / com.citrix.xenclient.xenmgr.host.generic_message string:"Information" string:"The percentage I am showing is:" int32:5000 int16:0 string:"myid2" int16:69
signals:
$ dbus-send --system --type=signal / com.citrix.xenclient.xui.popup_network_menu uint32:1000 uint32:72
$ dbus-send --system --type=signal / com.citrix.xenclient.bed.notify.vm.vm_updated_reboot_required string:"<UUID>"
$ dbus-send --system --type=signal / com.citrix.xenclient.bed.notify.vm.vm_updated_clean_reboot_required string:"<UUID>"
$ dbus-send --system --type=signal / com.citrix.xenclient.bed.notify.vm.vm_lease_near_expiry string:"<UUID>" int16:1000
$ dbus-send --system --type=signal /com/citrix/xenclient/xenmgr/host com.citrix.xenclient.bed.notify.server.auth_required
method:
$ dbus-send --system --type=method_call --print-reply --dest=com.citrix.xenclient.xenmgr /com/citrix/xenclient/xenmgr/host com.citrix.xenclient.xenmgr.host.status
Poking the database
$ db-ls
$ db-ls -f
$ db-ls /xenmgr
$ db-rm /xenmgr/showMsgOnVmStart
gettimeofday trickery
$ ps ax (find midori process)
$ strace -p <pid>
$ (strace -p <pid> 2>&1 | grep gettimeofday > file) & sleep 10; kill %1
$ wc -l file
This was to see how often the javascript was polling for gettimeofday, since it affects power.
Debugging UID
$ killall uid
$ LD_PRELOAD=/usr/lib/libv4v-1.0.so.0.0.0 INET_IS_V4V=1 uid --no-daemonize > /tmp/uid.log
Net Boot
Boot a laptop from network, and either pick one of the options as described, or type in the name of a build that's not mentionned (e.g. cam-oeprod-123456-master)
The old school method is below:
$ ssh user@boiler
(NIS password)
$ cd /home/xc_tftpboot/pxe/grover
$ ln -sf ../builds/master/cam-prod-008284-master/netboot/pxelinux.cfg
then boot laptop from network
GIT
You MUST set these in the global config
$ git config --global user.name 'Joe Bloggs'
$ git config --global user.email 'Joe.Bloggs@citrix.com'
Optionally, the following will set up any branches you checkout/create in the future with the rebase property set to true, which is useful as this means when you pull, it is the same as running 'git pull --rebase':
$ git config --global branch.autosetuprebase always
To view the global config
$ git config --global -l
To view the local config (i.e. if you're in the directory of a git project it will show you specific config for that)
$ git config --local -l
$ git branch //show branches
$ git branch <name> //create branch called <name>
$ git checkout <name> //switch to branch called <name>
$ git reset --hard <hash> //reset tree to the <hash> of the commit
$ git checkout <filename> //reset <filename> to origin
$ git stash //like diff stack
:switch branch
$ git stash apply //apply the diff stack on the branch you've switched to
$ git clone <fromtree> <totree>
$ git push <server> <branchfrom>:<branchto> //creates a remote branch based on your local branch
$ git push <server> :<branch> //deletes remote branch
$ git checkout -b test --track origin/test //checkout test branch tracked to test branch locally, create local test branch if not there
$ gitk
$ git commit --interactive
$ git cherry-pick
Debugging Switcher Bar
win-tools.git master change (c7a19d4c9440725f741756485ca3b4ad0d8355eb) mocks out the XenGuestAgent code if debugger attached and either: CITRIX_GUI_DEBUGGING environment variable is defined as non-zero Or File named “IAmACitrixGUIDeveloperAndILikeToTest.txt” is in current working directory.
NIS mount hack on ubuntu
Add this:
( sleep 15s ; /etc/init.d/autofs restart ) &
to:
/etc/rc.local
GRUB Shell
By default the grub shell is disabled in XT. If you want it back you need to add this to your grub.cfg:
set edit_and_shell=1
Also the grub menu timeout is disabled with:
set timeout=-1
You can fix that up by commenting out that if/fi block and just set a timeout (in seconds):
set timeout=5
Core Dumps
Enabling core dumps on OpenXT is not working at the moment. There is a ticket:
https://openxt.atlassian.net/browse/OXT-902
One way around it is to enable them manually from a terminal:
$ ulimit -c unlimited
In the cases where you need to have them enabled before a daemon starts you can add that to the daemon init script before the call to start it:
ulimit -c unlimited >/dev/null 2>&1
It seems SELinux must be disabled too. To disable it for every boot, edit /etc/selinix/config and change enforcing to permissive.