|  | # Linux sysroot images | 
|  |  | 
|  | The chromium build system for Linux will (by default) use a sysroot image | 
|  | rather than building against the libraries installed on the host system. | 
|  | This serves several purposes.  Firstly, it ensures that binaries will run on all | 
|  | supported linux systems independent of the packages installed on the build | 
|  | machine.  Secondly, it makes the build more hermetic, preventing issues that | 
|  | arise for variations among developers' systems. | 
|  |  | 
|  | The sysroot consists of a minimal installation of Debian/stable (or old-stable) | 
|  | to ensure maximum compatibility.  Pre-built sysroot images are stored in | 
|  | Google Cloud Storage and downloaded during `gclient runhooks` | 
|  |  | 
|  | ## Installing the sysroot images | 
|  |  | 
|  | Installation of the sysroot is performed by | 
|  | `build/linux/sysroot_scripts/install-sysroot.py`. | 
|  |  | 
|  | This script can be run manually but is normally run as part of gclient | 
|  | hooks. When run from hooks this script in a no-op on non-linux platforms. | 
|  |  | 
|  | ## Rebuilding the sysroot image | 
|  |  | 
|  | The pre-built sysroot images occasionally needs to be rebuilt.  For example, | 
|  | when security updates to Debian are released, or when a new package is needed by | 
|  | the chromium build.  If you just want to update the sysroots without adding any | 
|  | new packages, skip to `Using build_and_upload.py`. | 
|  |  | 
|  | ### Adding new packages | 
|  |  | 
|  | To add a new package, edit the `sysroot-creator-*.sh` scripts and modify the | 
|  | `DEBIAN_PACKAGES` list, then run the update step (`UpdatePackageListsAll`).  The | 
|  | steps below will use `sysroot-creator-stretch.sh` as an example. | 
|  |  | 
|  | ### Updating existing package list | 
|  |  | 
|  | To update packages to the latest versions run: | 
|  |  | 
|  | $ ./sysroot-creator-stretch.sh UpdatePackageListsAll | 
|  |  | 
|  | This command will update the package lists that are stored alongside the script. | 
|  | If no packages have changed then this script will have no effect. | 
|  |  | 
|  | ### Rebuilding | 
|  |  | 
|  | To rebuild the images (without any changes) run the following commands: | 
|  |  | 
|  | $ cd build/linux/sysroot_scripts | 
|  | $ ./sysroot-creator-stretch.sh BuildSysrootAll | 
|  |  | 
|  | The above command will rebuild the sysroot for all architectures. To build | 
|  | just one architecture use `BuildSysroot<arch>`.  Run the script with no | 
|  | arguments for a list of possible architectures.  For example: | 
|  |  | 
|  | $ ./sysroot-creator-stretch.sh BuildSysrootAmd64 | 
|  |  | 
|  | This command on its own should be a no-op and produce an image identical to | 
|  | the one on Google Cloud Storage. | 
|  |  | 
|  | ### Uploading new images | 
|  |  | 
|  | To upload images to Google Cloud Storage run the following command: | 
|  |  | 
|  | $ ./sysroot-creator-stretch.sh UploadSysrootAll <SHA1> | 
|  |  | 
|  | Here you should use the SHA1 of the git revision at which the images were | 
|  | created. | 
|  |  | 
|  | Uploading new images to Google Clound Storage requires write permission on the | 
|  | `chrome-linux-sysroot` bucket. | 
|  |  | 
|  | ### Rolling the sysroot version used by chromium | 
|  |  | 
|  | Once new images have been uploaded, the `sysroots.json` file needs to be updated | 
|  | to reference the new versions.  This process is manual and involves updating the | 
|  | `Revision` and `Sha1Sum` values in the file. | 
|  |  | 
|  | ### Using `build-and-upload.py` | 
|  |  | 
|  | The `build_and_upload.py` script automates the above four steps.  It is | 
|  | recommended to use this just before you're ready to submit your CL, after you've | 
|  | already tested one of the updated sysroots on your local configuration.  Build | 
|  | or upload failures will not produce detailed output, but will list the script | 
|  | and arguments that caused the failure.  To debug this, you must run the failing | 
|  | command manually.  This script requires Google Cloud Storage write permission on | 
|  | the `chrome-linux-sysroot` bucket. |