aboutsummaryrefslogtreecommitdiff
path: root/binary_search_tool/cros_pkg/README.cros_pkg_triage
diff options
context:
space:
mode:
Diffstat (limited to 'binary_search_tool/cros_pkg/README.cros_pkg_triage')
-rw-r--r--binary_search_tool/cros_pkg/README.cros_pkg_triage185
1 files changed, 185 insertions, 0 deletions
diff --git a/binary_search_tool/cros_pkg/README.cros_pkg_triage b/binary_search_tool/cros_pkg/README.cros_pkg_triage
new file mode 100644
index 00000000..5e285008
--- /dev/null
+++ b/binary_search_tool/cros_pkg/README.cros_pkg_triage
@@ -0,0 +1,185 @@
+
+binary_search_state.py is a general binary search triage tool that
+performs a binary search on a set of things to try to identify which
+thing or thing(s) in the set is 'bad'. binary_search_state.py assumes
+that the user has two sets, one where everything is known to be good,
+ane one which contains at least one bad item. binary_search_state.py
+then copies items from the good and bad sets into a working set and
+tests the result (good or bad). binary_search_state.py requires that
+a set of scripts be supplied to it for any particular job. For more
+information on binary_search_state.py, see
+
+https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/team-tools-and-scripts/binary-searcher-tool-for-triage
+
+This particular set of scripts is designed to work wtih
+binary_search_state.py in order to find the bad package or set of
+packages in a ChromeOS build.
+
+
+QUICKSTART:
+
+After setting up your 3 build trees (see Prerequisites section), do the
+following:
+
+ - Decide which test script to use (boot_test.sh or
+ interactive_test.sh)
+ - Get the IP name or address of the chromebook you will use for testing.
+ - Do the following inside your chroot:
+
+ $ cd ~/trunk/src/third_party/toolchain_utils/binary_search_tool
+ $ ./cros_pkg/setup.sh <board-to-test> <IP-name-or-address-of-chromebook>
+
+ If you chose the boot test, then:
+
+ $ python ./binary_search_state.py \
+ --get_initial_items=cros_pkg/get_initial_items.sh \
+ --switch_to_good=cros_pkg/switch_to_good.sh \
+ --switch_to_bad=cros_pkg/switch_to_bad.sh \
+ --test_setup_script=cros_pkg/test_setup.sh \
+ --test_script=cros_pkg/boot_test.sh \
+ --file_args \
+ --prune
+
+ Otherwise, if you chose the interactive test, then:
+
+ $ python ./binary_search_state.py \
+ --get_initial_items=cros_pkg/get_initial_items.sh \
+ --switch_to_good=cros_pkg/switch_to_good.sh \
+ --switch_to_bad=cros_pkg/switch_to_bad.sh \
+ --test_setup_script=cros_pkg/test_setup.sh \
+ --test_script=cros_pkg/interactive_test.sh \
+ --file_args \
+ --prune
+
+ Once you have completely finished doing the binary search/triage,
+ run the genereated cleanup script, to restore your chroot to the state
+ it was in before you ran the setup.sh script:
+
+ $ cros_pkg/${BOARD}_cleanup.sh
+
+
+
+FILES AND SCRIPTS:
+
+ boot_test.sh - One of two possible test scripts used to determine
+ if the ChromeOS image built from the packages is good
+ or bad. This script tests to see if the image
+ booted, and requires no user intervention.
+
+ create_cleanup_script.py - This is called by setup.sh, to
+ generate ${BOARD}_cleanup.sh,
+ which is supposed to be run by the user
+ after the binary search triage process is
+ finished, to undo the changes made by
+ setup.sh and return everything
+ to its original state.
+
+ get_initial_items.sh - This script is used to determine the current
+ set of ChromeOS packages.
+
+ test_setup.sh - This script will build and flash your image to the
+ remote machine. If the flash fails, this script will
+ help the user troubleshoot by flashing through usb or
+ by retrying the flash over ethernet.
+
+ interactive_test.sh - One of two possible scripts used to determine
+ if the ChromeOS image built from the packages
+ is good or bad. This script requires user
+ interaction to determine if the image is
+ good or bad.
+
+ setup.sh - This is the first script the user should call, after
+ taking care of the prerequisites. It sets up the
+ environment appropriately for running the ChromeOS
+ package binary search triage, and it generates two
+ necessary scripts (see below).
+
+ switch_to_bad.sh - This script is used to copy packages from the
+ 'bad' build tree into the work area.
+
+ switch_to_good.sh - This script is used to copy packages from the
+ good' build tree into the work area.
+
+
+GENERATED SCRIPTS:
+
+ common.sh - contains basic environment variable definitions for
+ this binary search triage session.
+
+ ${BOARD}_cleanup.sh - script to undo all the changes made by
+ running setup.sh, and returning
+ everything to its original state. The user
+ should manually run this script once the
+ binary search triage process is over.
+
+ASSUMPTIONS:
+
+- There are two different ChromeOS builds, for the same board, with the
+ same set of ChromeOS packages. One build creates a good working ChromeOS
+ image and the other does not.
+
+- You have saved the complete build trees for both the good and bad builds.
+
+
+PREREQUISITES FOR USING THESE SCRIPTS (inside the chroot):
+
+- The "good" build tree, for the board, is in /build/${board}.good
+ (e.g. /build/lumpy.good or /build/daisy.good).
+
+- The "bad" build tree is in /build/${board}.bad
+ (e.g. /build/lumpy.bad or /build/daisy.bad).
+
+- You made a complete copy of the "bad" build tree , and put it in
+ /build/${board}.work (e.g. /build/lumpy.work or /build/daisy.work.
+ The easiest way to do this is to use something similar to the
+ following set of commands (this example assumes the board is
+ 'lumpy'):
+
+ $ cd /build
+ $ sudo tar -cvf lumpy.bad.tar lumpy.bad
+ $ sudo mv lumpy.bad lumpy.work
+ $ sudo tar -xvf lumpy.bad.tar
+
+
+USING THESE SCRIPTS FOR BINARY TRIAGE OF PACKAGES:
+
+To use these scripts, you must first run setup.sh, passing it two
+arguments (in order): the board for which you are building the image;
+and the name or ip address of the chromebook you want to use for
+testing your chromeos images. setup.sh will do the following:
+
+ - Verify that your build trees are set up correctly (with good, bad
+ and work).
+ - Create a soft link for /build/${board} pointing to the work build
+ tree.
+ - Create the common.sh file that the other scripts passed to the
+ binary triage tool will need.
+ - Create a cleanup script, ${board}_cleanup.sh, for you to
+ run after you are done with the binary triages, to undo all of these
+ various changes that setup.sh did.
+
+
+This set of scripts comes with two alternate test scripts. One test
+script, boot_test.sh, just checks to make sure that the image
+booted (i.e. responds to ping) and assumes that is enough. The other
+test script, interactive_test.sh, is interactive and asks YOU
+to tell it whether the image on the chromebook is ok or not (it
+prompts you and waits for a response).
+
+
+Once you have run setup.sh (and decided which test script you
+want to use) run the binary triage tool using these scripts to
+isolate/identify the bad package:
+
+~/trunk/src/third_party/toolchain_utils/binary_search_tool/binary_search_state.py \
+ --get_initial_items=cros_pkg/get_initial_items.sh \
+ --switch_to_good=cros_pkg/switch_to_good.sh \
+ --switch_to_bad=cros_pkg/switch_to_bad.sh \
+ --test_setup_script=cros_pkg/test_setup.sh \
+ --test_script=cros_pkg/boots_test.sh \ # could use interactive_test.sh instead
+ --prune
+
+
+After you have finished running the tool and have identified the bad
+package(s), you will want to run the cleanup script that setup.sh
+generated (cros_pkg/${BOARD}_cleanup.sh).