| # 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.py` script and modify the | |
| `DEBIAN_PACKAGES` list. | |
| ### Rebuilding | |
| To rebuild the images (without any changes) run the following command for | |
| each desired architecture: | |
| $ build/linux/sysroot_scripts/sysroot_creator.py build <arch> | |
| 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 image to Google Cloud Storage run the following command: | |
| $ build/linux/sysroot_scripts/sysroot_creator.py upload <arch> | |
| 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. |