ReferencePlatforms/Test/Foopy: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(→‎Setup for B2G/panda testing: updated script for enabling pandas after a foopy refresh)
 
(21 intermediate revisions by 4 users not shown)
Line 1: Line 1:
= Set up a Snow Leopard foopy =
TODO: Review the striked content to see what is still relevant and remove what is not.


Rescued from Aki's text file. Will probably change to be linux at some point.
Currently, most of our foopies are linux based. They can be used for either tegras, android pandas and b2g pandas.
The foopies these days are setup with puppet.
 
= Setup for B2G/panda testing =
* Make sure that every panda that the foopy is going to manage is listed in devices.json:
    "panda-0082": {
        "foopy": "foopy39"
    },
* Make sure that slavealloc has entries for each foopy
<pre>
name,distro,bitlength,speed,datacenter,trustlevel,environment,purpose,pool,basedir,enabled
panda-0000,panda,32,mini,scl3,try,core,tests,tests-panda,/builds/panda-0000,1
</pre>
* Run this on the foopy as root
<pre>
#!/usr/bin/env python
 
import os
import json
import sys
 
if len(sys.argv) < 2:
    sys.exit('Usage: %s [foopy-name]' % sys.argv[0])
 
with open('/builds/tools/buildfarm/mobile/devices.json') as devices:
    pandas = json.load(devices)
 
for p in pandas:
    if pandas[p]['foopy'] == sys.argv[1]:
        panda_path = os.path.join('/', 'builds', p)
        try:
            os.mkdir(panda_path)
            os.chown(panda_path, 'cltbld', 'cltbld')
        except OSError:
            print "directory already exists for panda", p
</pre>
 
<strike>


== Open Issues ==
= Setup for Android/panda testing =
kmoir wrote this:
https://etherpad.mozilla.org/new-foopy-for-panda


Hal took a stab at doing this on foopy18 (also first use of osx 10.7 for foopy). Much updated, these questions remain as of 2012-12-13:
= Set up a Mac based foopy =
* Is a checkout of the tools repo needed (under <tt>/builds</tt>)? (done on foopy18, but not clear it should have been)
* Clarification needed on [[#helper scripts to populate /builds]], see more questions there.


Todo: flesh this out further.
Rescued from Aki's text file.  Will probably change to be linux at some point.


== Initial setup ==
== Initial setup ==


* Rev{1,2} mini -- install Snow Leopard
* Rev{1,2} mini -- install Snow Leopard
* Rev 5 or later mini -- install Lion
* File bug for DNS/static IP in DHCP with MAC address
* File bug for DNS/static IP in DHCP with MAC address


Line 38: Line 76:
Log in via GUI to account 'cltbld' for these actions:
Log in via GUI to account 'cltbld' for these actions:
* remote desktop
* remote desktop
** Still in System Preferences -> Sharing
** System Preferences -> Users & Groups
*** change password to real cltbld one, if needed (not from cli <tt>passwd</tt> tool)
*** "Login Options" -> "Automatic Login" -> "Off"
** In System Preferences -> Sharing
** set computer name to foopyXX (for ease of identifying VNC sessions later)
** Enable Remote Management
** Enable Remote Management
** Click all checkboxes
** Click all checkboxes
** Computer Settings
** Computer Settings
** VNC viewers may control screen with password: (enter cltbld pass)
** VNC viewers may control screen with password: (enter cltbld pass)
** ''N.B.'' if you click the wrong button at the wrong time, you can kill your GUI access. To restore see [http://support.apple.com/kb/HT2370?viewlocale=en_US this Apple doc]. Note that you may need to activate & deactivate several times to restore functionality.
* turn off bluetooth
* turn off bluetooth
** System Preferences -> Bluetooth
** System Preferences -> Bluetooth
Line 58: Line 101:
** System Preferences -> Spotlight -> Privacy
** System Preferences -> Spotlight -> Privacy
*** Click "+" button; add the entire hard drive to the list of folders not to search
*** Click "+" button; add the entire hard drive to the list of folders not to search
* xcode (use 3.x only to avoid requiring app store setup)
* ''optional:'' [[#helper scripts to populate /builds |set up ssh]] (only) so you can do next steps from your terminal, not vnc
** Aki has scp'd XCode 3.2.2 to the various foopys and installing (since that's the dmg I have), and depending on the following software update to bring me up to date.
* xcode
** Installed defaults (do not install 10.4 SDK)
** for pre-Lion (use 3.x only to avoid requiring app store setup)
** verify Xcode stars up okay: <tt>open /Developer/Applications/Xcode.app</tt>
*** Aki has scp'd XCode 3.2.2 to the various foopys and installing (since that's the dmg I have), and depending on the following software update to bring me up to date.
*** on lion, you'll be prompted to install java - do so
*** Installed defaults (do not install 10.4 SDK)
** xcode for Lion
*** if possible, copy over the "Xcode Installer.app" from another foopy
**** if not, use the <tt>releng+aid@mozilla.com</tt> Apple ID for the store
** verify Xcode starts up okay: <tt>open /Developer/Applications/Xcode.app</tt>
*** if you are prompted to install java - do so
* software update, then turn off updates
* software update, then turn off updates
** Close the prompted software update, then recheck after installing XCode
** Close the prompted software update, then recheck after installing XCode
Line 73: Line 121:


  sudo port selfupdate  
  sudo port selfupdate  
# next one takes about 20 minutes
  sudo port install mercurial wget py26-lint py26-virtualenv py26-yaml
  sudo port install mercurial wget py26-lint py26-virtualenv py26-yaml
  sudo port select --set python python26
  sudo port select --set python python26
Line 82: Line 131:
  sudo su -
  sudo su -
  cd /Users/cltbld/buildbot/master
  cd /Users/cltbld/buildbot/master
# next one takes about 5 minutes
  /opt/local/bin/python setup.py install # (need to sudo su -; sudo python setup.py won't work)
  /opt/local/bin/python setup.py install # (need to sudo su -; sudo python setup.py won't work)
  cd ../slave
  cd ../slave
Line 89: Line 139:
The buildslave install above didn't seem to create a /opt/local/bin/twistd symlink so I had to run the following manually (all 1 line):
The buildslave install above didn't seem to create a /opt/local/bin/twistd symlink so I had to run the following manually (all 1 line):
  sudo ln -s /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/twistd /opt/local/bin/twistd
  sudo ln -s /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/twistd /opt/local/bin/twistd
Create the <tt>/builds</tt> directory (requires sudo, so can't be done from <tt>./foopies.sh</tt>):
sudo mkdir /builds
sudo chown cltbld:admin /builds


== helper scripts to populate /builds ==
== helper scripts to populate /builds ==


Locate the tools/buildfarm/mobile/ directory '''on your laptop''' and run:
Locate the tools/buildfarm/mobile/ directory '''on your laptop''' and follow these directions to complete the setup of the foopy.
 
[[User:Hwine|Hwine]] several key files used in setting up ssh are not checked in. Should they be, or where are the authoritative copies found (foopy_authorized_keys, id_rsa, id_rsa.pub, possibly others)
* [[User:Bear|Bear]] the ssh files I did not want checked-in (not for any good reason TBH) - they will eventually become part of the puppet setup but foopy's don't exist in the realm of puppet yet


*Preparation - several key files used in setting up ssh are not checked in. Grab these from a known good production foopy:
  FOOP=foopyXX # know good foopy
  scp ctlbld@$FOOP:.ssh/{id_rsa{,.pub},authorized_keys} .
  mv -i authorized_keys foopy-authorized_keys
  scp ctlbld@$FOOP:.screenrc foopy-screenrc
*If your ssh key isn't already in the distributed authorized_keys, do
  cat ~/.ssh/id_rsa.pub >> foopy-authorized_keys
*One time ssh environment setup (where XX is the foopy number):
  ./foopies.sh ssh ##
  ./foopies.sh ssh ##
*At this point, you may want to [[#test basic foopy functionality]]
*If the final <tt>tegras.json</tt> is ready and present in your directory:
  ./foopies.sh ##
  ./foopies.sh ##
where ## is the foopy number.  The ssh step can only be run once, so run it seperately from the others.


After the above has been run, it's time to setup the cronjobs:
After the above has been run, it's time to setup the cronjobs:
'''Note''': most likely the scp commands will not have set +x for any /builds/*.sh scripts


[[User:Hwine|Hwine]] where does this occur? on new foopy or from "master"
On the new foopy:
* [[User:Bear|Bear]] they are designed to be run from your computer when it's connected to the buildvpn


  cd /builds
  cd /builds
Line 112: Line 171:


Running tegra_stats.sh manually once allow you to check that it is working :), but more importantly it also allows you to answer "yes" to the ssh question about connecting to the remote host.
Running tegra_stats.sh manually once allow you to check that it is working :), but more importantly it also allows you to answer "yes" to the ssh question about connecting to the remote host.
===test basic foopy functionality===
If you want to test basic foopy sanity prior to full tegra deployment, here's the process:
# borrow a tegra from staging
#* ''convention'' take one from foopy05 that looks idle
#* run <tt>cd /builds; ./stop_cp.sh tegra-XXX</tt> for the one you're stealing
# tweak your local laptop copy of foopies.sh to configure only the borrowed tegra
# finalize configuration using <tt>./foopies.sh ##</tt>
# start your tegra
#* on foopy, run <tt>cd /builds; ./start_cp.sh</tt>
# verify right number of processes running
#* <tt>ps awx | grep tegra-XXX</tt>
#* should be at least 1 twistd & 2 clientproxies
# verify contents of <tt>/builds/tegra-XXX</tt> directory
#* should be log files, buildbot.tac, clientproxy.py
# verify tegra shows on [http://dev-master01.build.scl1.mozilla.com:8160/buildslaves?no_builders=1|staging buildbot master]
# verify tegra online
#* <tt>telnet tegra-XXX 20701</tt>
# stop your borrowed tegra
#* <tt>cd /builds; ./stop_cp.sh</tt>
# return the tegra to staging
#* log into its real foopy (likely foopy05)
#* run <tt> cd /builds ; ./start_cp tegra-XXX</tt>
# remove the test configration on your new foopy
#* <tt>cd /builds ; ls -d tegra-*</tt>
#* you should '''only''' see the one borrowed tegra
#* <tt>rm -rf *</tt>


= Future reference =
= Future reference =
Line 144: Line 230:
  wget                          @1.12          net/wget
  wget                          @1.12          net/wget
  zlib                          @1.2.5          archivers/zlib
  zlib                          @1.2.5          archivers/zlib
== Rev 5 mini foopy port list ==
foopy18:builds cltbld$ port list active
bzip2                          @1.0.6          archivers/bzip2
curl-ca-bundle                @7.23.1        net/curl-ca-bundle
db46                          @4.6.21        databases/db46
expat                          @2.0.1          textproc/expat
gdbm                          @1.10          databases/gdbm
gettext                        @0.18.1.1      devel/gettext
glib2                          @2.30.2        devel/glib2
gnutls                        @2.12.11        devel/gnutls
gperf                          @3.0.4          devel/gperf
libedit                        @20110802-3.0  devel/libedit
libffi                        @3.0.10        devel/libffi
libgcrypt                      @1.5.0          devel/libgcrypt
libgpg-error                  @1.10          devel/libgpg-error
libiconv                      @1.14          textproc/libiconv
libidn                        @1.22          mail/libidn
libtasn1                      @2.9            devel/libtasn1
lzo2                          @2.05          archivers/lzo2
mercurial                      @2.0            devel/mercurial
ncurses                        @5.9            devel/ncurses
ncursesw                      @5.8            devel/ncursesw
openssl                        @1.0.0e        devel/openssl
perl5                          @5.12.3        lang/perl5
perl5.12                      @5.12.3        lang/perl5.12
pkgconfig                      @0.26          devel/pkgconfig
py26-distribute                @0.6.24        python/py-distribute
py26-lint                      @0.24.0        python/py26-lint
py26-logilab-astng            @0.22.0        python/py26-logilab-astng
py26-logilab-common            @0.56.0        python/py26-logilab-common
py26-virtualenv                @1.6.1          python/py26-virtualenv
py26-yaml                      @3.09          python/py26-yaml
python26                      @2.6.7          lang/python26
python27                      @2.7.2          lang/python27
python_select                  @0.3            sysutils/python_select
readline                      @6.2.000        devel/readline
sqlite3                        @3.7.9          databases/sqlite3
wget                          @1.13.4        net/wget
xz                            @5.0.3          archivers/xz
zlib                          @1.2.5          archivers/zlib
</strike>

Latest revision as of 19:14, 20 May 2015

TODO: Review the striked content to see what is still relevant and remove what is not.

Currently, most of our foopies are linux based. They can be used for either tegras, android pandas and b2g pandas. The foopies these days are setup with puppet.

Setup for B2G/panda testing

  • Make sure that every panda that the foopy is going to manage is listed in devices.json:
   "panda-0082": {
       "foopy": "foopy39"
   },
  • Make sure that slavealloc has entries for each foopy
name,distro,bitlength,speed,datacenter,trustlevel,environment,purpose,pool,basedir,enabled
panda-0000,panda,32,mini,scl3,try,core,tests,tests-panda,/builds/panda-0000,1
  • Run this on the foopy as root
#!/usr/bin/env python

import os
import json
import sys

if len(sys.argv) < 2:
    sys.exit('Usage: %s [foopy-name]' % sys.argv[0])

with open('/builds/tools/buildfarm/mobile/devices.json') as devices:
    pandas = json.load(devices)

for p in pandas:
    if pandas[p]['foopy'] == sys.argv[1]:
        panda_path = os.path.join('/', 'builds', p)
        try:
            os.mkdir(panda_path)
            os.chown(panda_path, 'cltbld', 'cltbld')
        except OSError:
            print "directory already exists for panda", p

Setup for Android/panda testing

kmoir wrote this: https://etherpad.mozilla.org/new-foopy-for-panda

Set up a Mac based foopy

Rescued from Aki's text file. Will probably change to be linux at some point.

Initial setup

  • Rev{1,2} mini -- install Snow Leopard
  • Rev 5 or later mini -- install Lion
  • File bug for DNS/static IP in DHCP with MAC address

Setup steps

If you're using a box set up by IT, you can skip to #Config changes from IT image:

  • set up cltbld account; remove passwordless Mozilla Corporation account
    • System Preferences -> Accounts
    • Add cltbld account, check "Allow user to administer this computer"
    • Make sure to turn off Automatic Login for Mozilla Corporation before logging out
    • Log out, log in as cltbld
      • This may log you in as moco again; turn off Automatic Login and try again
    • Remove Mozilla Corporation account
    • Disable Guest Account sharing (needed ?)
  • Add Terminal to the dock. Not needed, just a preference.
    • Finder -> Applications -> Utilities, drag Terminal into dock
  • remote login
    • System Preferences -> Sharing
    • Set computer name
    • Enable Remote Login

Config changes from IT image

Log in via GUI to account 'cltbld' for these actions:

  • remote desktop
    • System Preferences -> Users & Groups
      • change password to real cltbld one, if needed (not from cli passwd tool)
      • "Login Options" -> "Automatic Login" -> "Off"
    • In System Preferences -> Sharing
    • set computer name to foopyXX (for ease of identifying VNC sessions later)
    • Enable Remote Management
    • Click all checkboxes
    • Computer Settings
    • VNC viewers may control screen with password: (enter cltbld pass)
    • N.B. if you click the wrong button at the wrong time, you can kill your GUI access. To restore see this Apple doc. Note that you may need to activate & deactivate several times to restore functionality.
  • turn off bluetooth
    • System Preferences -> Bluetooth
    • Uncheck "On".
    • click "Advanced" button
      • uncheck "Open Bluetooth Setup Assistant at startup if no keyboard is detected"
      • uncheck "Open Bluetooth Setup Assistant at startup if no mouse or keyboard
      • note - if the bluetooth setup assistant runs, it re-enables bluetooth (so helpful)
  • turn off energy saver
    • System Preferences -> Energy Saver
    • Computer sleep: Never
    • Uncheck Put the hard disk(s) to sleep when possible
    • Start up automatically after power failure
  • Kill spotlight
    • System Preferences -> Spotlight -> Privacy
      • Click "+" button; add the entire hard drive to the list of folders not to search
  • optional: set up ssh (only) so you can do next steps from your terminal, not vnc
  • xcode
    • for pre-Lion (use 3.x only to avoid requiring app store setup)
      • Aki has scp'd XCode 3.2.2 to the various foopys and installing (since that's the dmg I have), and depending on the following software update to bring me up to date.
      • Installed defaults (do not install 10.4 SDK)
    • xcode for Lion
      • if possible, copy over the "Xcode Installer.app" from another foopy
        • if not, use the releng+aid@mozilla.com Apple ID for the store
    • verify Xcode starts up okay: open /Developer/Applications/Xcode.app
      • if you are prompted to install java - do so
  • software update, then turn off updates
    • Close the prompted software update, then recheck after installing XCode
    • Apple menu -> Software Update
    • System Preferences -> Software Update
    • Uncheck 'Check for updates'
  • macports - download & install one of:
sudo port selfupdate 
# next one takes about 20 minutes
sudo port install mercurial wget py26-lint py26-virtualenv py26-yaml
sudo port select --set python python26
cd ~/
hg clone http://hg.mozilla.org/build/buildbot
cd ~/buildbot
hg up -r production-0.8
sudo su -
cd /Users/cltbld/buildbot/master
# next one takes about 5 minutes
/opt/local/bin/python setup.py install # (need to sudo su -; sudo python setup.py won't work)
cd ../slave
/opt/local/bin/python setup.py install # (need to sudo su -; sudo python setup.py won't work)
exit

The buildslave install above didn't seem to create a /opt/local/bin/twistd symlink so I had to run the following manually (all 1 line):

sudo ln -s /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/twistd /opt/local/bin/twistd

Create the /builds directory (requires sudo, so can't be done from ./foopies.sh):

sudo mkdir /builds
sudo chown cltbld:admin /builds

helper scripts to populate /builds

Locate the tools/buildfarm/mobile/ directory on your laptop and follow these directions to complete the setup of the foopy.

  • Preparation - several key files used in setting up ssh are not checked in. Grab these from a known good production foopy:
 FOOP=foopyXX # know good foopy
 scp ctlbld@$FOOP:.ssh/{id_rsa{,.pub},authorized_keys} .
 mv -i authorized_keys foopy-authorized_keys
 scp ctlbld@$FOOP:.screenrc foopy-screenrc
  • If your ssh key isn't already in the distributed authorized_keys, do
 cat ~/.ssh/id_rsa.pub >> foopy-authorized_keys
  • One time ssh environment setup (where XX is the foopy number):
./foopies.sh ssh ##
./foopies.sh ##

After the above has been run, it's time to setup the cronjobs: Note: most likely the scp commands will not have set +x for any /builds/*.sh scripts

On the new foopy:

cd /builds
crontab crontab.foopy
./tegra_stats.sh

Running tegra_stats.sh manually once allow you to check that it is working :), but more importantly it also allows you to answer "yes" to the ssh question about connecting to the remote host.

test basic foopy functionality

If you want to test basic foopy sanity prior to full tegra deployment, here's the process:

  1. borrow a tegra from staging
    • convention take one from foopy05 that looks idle
    • run cd /builds; ./stop_cp.sh tegra-XXX for the one you're stealing
  2. tweak your local laptop copy of foopies.sh to configure only the borrowed tegra
  3. finalize configuration using ./foopies.sh ##
  4. start your tegra
    • on foopy, run cd /builds; ./start_cp.sh
  5. verify right number of processes running
    • ps awx | grep tegra-XXX
    • should be at least 1 twistd & 2 clientproxies
  6. verify contents of /builds/tegra-XXX directory
    • should be log files, buildbot.tac, clientproxy.py
  7. verify tegra shows on buildbot master
  8. verify tegra online
    • telnet tegra-XXX 20701
  9. stop your borrowed tegra
    • cd /builds; ./stop_cp.sh
  10. return the tegra to staging
    • log into its real foopy (likely foopy05)
    • run cd /builds ; ./start_cp tegra-XXX
  11. remove the test configration on your new foopy
    • cd /builds ; ls -d tegra-*
    • you should only see the one borrowed tegra
    • rm -rf *

Future reference

Rev 1 mini foopy port list

For future reference:

foopy02:~ cltbld$ sudo port list active
Warning: port definitions are more than two weeks old, consider using selfupdate
bzip2                          @1.0.6          archivers/bzip2
db46                           @4.6.21         databases/db46
expat                          @2.0.1          textproc/expat
gdbm                           @1.8.3          databases/gdbm
gettext                        @0.18.1.1       devel/gettext
gperf                          @3.0.4          devel/gperf
libiconv                       @1.13.1         textproc/libiconv
libidn                         @1.19           mail/libidn
mercurial                      @1.7.2          devel/mercurial
ncurses                        @5.7            devel/ncurses
ncursesw                       @5.7            devel/ncursesw
openssl                        @1.0.0c         devel/openssl
py26-distribute                @0.6.14         python/py26-distribute
py26-lint                      @0.22.0         python/py26-lint
py26-logilab-astng             @0.21.0         python/py26-logilab-astng
py26-logilab-common            @0.53.0         python/py26-logilab-common
py26-virtualenv                @1.5.1          python/py26-virtualenv
py26-yaml                      @3.09           python/py26-yaml
python26                       @2.6.6          lang/python26
readline                       @6.1.002        devel/readline
sqlite3                        @3.7.3          databases/sqlite3
wget                           @1.12           net/wget
zlib                           @1.2.5          archivers/zlib

Rev 5 mini foopy port list

foopy18:builds cltbld$ port list active
bzip2                          @1.0.6          archivers/bzip2
curl-ca-bundle                 @7.23.1         net/curl-ca-bundle
db46                           @4.6.21         databases/db46
expat                          @2.0.1          textproc/expat
gdbm                           @1.10           databases/gdbm
gettext                        @0.18.1.1       devel/gettext
glib2                          @2.30.2         devel/glib2
gnutls                         @2.12.11        devel/gnutls
gperf                          @3.0.4          devel/gperf
libedit                        @20110802-3.0   devel/libedit
libffi                         @3.0.10         devel/libffi
libgcrypt                      @1.5.0          devel/libgcrypt
libgpg-error                   @1.10           devel/libgpg-error
libiconv                       @1.14           textproc/libiconv
libidn                         @1.22           mail/libidn
libtasn1                       @2.9            devel/libtasn1
lzo2                           @2.05           archivers/lzo2
mercurial                      @2.0            devel/mercurial
ncurses                        @5.9            devel/ncurses
ncursesw                       @5.8            devel/ncursesw
openssl                        @1.0.0e         devel/openssl
perl5                          @5.12.3         lang/perl5
perl5.12                       @5.12.3         lang/perl5.12
pkgconfig                      @0.26           devel/pkgconfig
py26-distribute                @0.6.24         python/py-distribute
py26-lint                      @0.24.0         python/py26-lint
py26-logilab-astng             @0.22.0         python/py26-logilab-astng
py26-logilab-common            @0.56.0         python/py26-logilab-common
py26-virtualenv                @1.6.1          python/py26-virtualenv
py26-yaml                      @3.09           python/py26-yaml
python26                       @2.6.7          lang/python26
python27                       @2.7.2          lang/python27
python_select                  @0.3            sysutils/python_select
readline                       @6.2.000        devel/readline
sqlite3                        @3.7.9          databases/sqlite3
wget                           @1.13.4         net/wget
xz                             @5.0.3          archivers/xz
zlib                           @1.2.5          archivers/zlib