| OLD | NEW |
| 1 # Linux sysroot images | 1 # Linux sysroot images |
| 2 | 2 |
| 3 The chromium build system for Linux will (by default) use a sysroot image | 3 The chromium build system for Linux will (by default) use a sysroot image |
| 4 rather than building against the libraries installed on the host system. | 4 rather than building against the libraries installed on the host system. |
| 5 This serves several purposes. Firstly, it ensures that binaries will run on all | 5 This serves several purposes. Firstly, it ensures that binaries will run on all |
| 6 supported linux systems independent of the packages installed on the build | 6 supported linux systems independent of the packages installed on the build |
| 7 machine. Secondly, it makes the build more hermetic, preventing issues that | 7 machine. Secondly, it makes the build more hermetic, preventing issues that |
| 8 arise for variations among developers' systems. | 8 arise for variations among developers' systems. |
| 9 | 9 |
| 10 The sysroot consists of a minimal installation of Debian/stable (or old-stable) | 10 The sysroot consists of a minimal installation of Debian/stable (or old-stable) |
| 11 to ensure maximum compatibility. Pre-built sysroot images are stored in | 11 to ensure maximum compatibility. Pre-built sysroot images are stored in |
| 12 Google Cloud Storage and downloaded during `gclient runhooks` | 12 Google Cloud Storage and downloaded during `gclient runhooks` |
| 13 | 13 |
| 14 ## Installing the sysroot images | 14 ## Installing the sysroot images |
| 15 | 15 |
| 16 Installation of the sysroot is performed by | 16 Installation of the sysroot is performed by |
| 17 `build/linux/sysroot_scripts/install-sysroot.py`. | 17 `build/linux/sysroot_scripts/install-sysroot.py`. |
| 18 | 18 |
| 19 This script can be run manually but is normally run as part of gclient | 19 This script can be run manually but is normally run as part of gclient |
| 20 hooks. When run from hooks this script in a no-op on non-linux platforms. | 20 hooks. When run from hooks this script in a no-op on non-linux platforms. |
| 21 | 21 |
| 22 ## Rebuilding the sysroot image | 22 ## Rebuilding the sysroot image |
| 23 | 23 |
| 24 The pre-built sysroot images occasionally needs to be rebuilt. For example, | 24 The pre-built sysroot images occasionally needs to be rebuilt. For example, |
| 25 when security updates to Debian are released, or when a new package is needed by | 25 when security updates to Debian are released, or when a new package is needed by |
| 26 the chromium build. | 26 the chromium build. If you just want to update the sysroots without adding any |
| 27 new packages, skip to `Using build_and_upload.py`. |
| 28 |
| 29 ### Adding new packages |
| 30 |
| 31 To add a new package, edit the `sysroot-creator-*.sh` scripts and modify the |
| 32 `DEBIAN_PACKAGES` list, then run the update step (`UpdatePackageListsAll`). The |
| 33 steps below will use `sysroot-creator-jessie.sh` as an example. |
| 34 |
| 35 ### Updating existing package list |
| 36 |
| 37 To update packages to the latest versions run: |
| 38 |
| 39 $ ./sysroot-creator-jessie.sh UpdatePackageListsAll |
| 40 |
| 41 This command will update the package lists that are stored alongside the script. |
| 42 If no packages have changed then this script will have no effect. |
| 27 | 43 |
| 28 ### Rebuilding | 44 ### Rebuilding |
| 29 | 45 |
| 30 To rebuild the images (without any changes) run the following commands: | 46 To rebuild the images (without any changes) run the following commands: |
| 31 | 47 |
| 32 $ cd build/linux/sysroot_scripts | 48 $ cd build/linux/sysroot_scripts |
| 33 $ ./sysroot-creator-wheezy.sh BuildSysrootAll | 49 $ ./sysroot-creator-jessie.sh BuildSysrootAll |
| 34 | 50 |
| 35 The above command will rebuild the sysroot for all architectures. To build | 51 The above command will rebuild the sysroot for all architectures. To build |
| 36 just one architecture use `BuildSysroot<arch>`. Run the script with no | 52 just one architecture use `BuildSysroot<arch>`. Run the script with no |
| 37 arguments for a list of possible architectures. For example: | 53 arguments for a list of possible architectures. For example: |
| 38 | 54 |
| 39 $ ./sysroot-creator-wheezy.sh BuildSysrootAmd64 | 55 $ ./sysroot-creator-jessie.sh BuildSysrootAmd64 |
| 40 | 56 |
| 41 This command on its own should be a no-op and produce an image identical to | 57 This command on its own should be a no-op and produce an image identical to |
| 42 the one on Google Cloud Storage. | 58 the one on Google Cloud Storage. |
| 43 | 59 |
| 44 ### Updating existing package list | |
| 45 | |
| 46 To update packages to the latest versions run: | |
| 47 | |
| 48 $ ./sysroot-creator-wheezy.sh UpdatePackageListsAll | |
| 49 | |
| 50 This command will update the package lists that are stored alongside the script. | |
| 51 If no packages have changed then this script will have no effect. | |
| 52 | |
| 53 ### Adding new packages | |
| 54 | |
| 55 To add a new package, edit the `sysroot-creator-wheezy.sh` script and modify | |
| 56 the `DEBIAN_PACKAGES` list, then run the update step above | |
| 57 (`UpdatePackageListsAll`). | |
| 58 | |
| 59 ### Uploading new images | 60 ### Uploading new images |
| 60 | 61 |
| 61 To upload images to Google Cloud Storage run the following command: | 62 To upload images to Google Cloud Storage run the following command: |
| 62 | 63 |
| 63 $ ./sysroot-creator-wheezy.sh UploadSysrootAll <SHA1> | 64 $ ./sysroot-creator-jessie.sh UploadSysrootAll <SHA1> |
| 64 | 65 |
| 65 Here you should use the SHA1 of the git revision at which the images were | 66 Here you should use the SHA1 of the git revision at which the images were |
| 66 created. | 67 created. |
| 67 | 68 |
| 68 Uploading new images to Google Clound Storage requires write permission on the | 69 Uploading new images to Google Clound Storage requires write permission on the |
| 69 `chrome-linux-sysroot` bucket. | 70 `chrome-linux-sysroot` bucket. |
| 70 | 71 |
| 71 ### Rolling the sysroot version used by chromium | 72 ### Rolling the sysroot version used by chromium |
| 72 | 73 |
| 73 Once new images have been uploaded the `install-sysroot.py` script needs to be | 74 Once new images have been uploaded, the `sysroots.json` file needs to be updated |
| 74 updated to reference the new versions. This process is manual and involves | 75 to reference the new versions. This process is manual and involves updating the |
| 75 updating the `REVISION` and `SHA1SUM` variables in the script. | 76 `Revision` and `Sha1Sum` values in the file. |
| 77 |
| 78 ### Using `build-and-upload.py` |
| 79 |
| 80 The `build_and_upload.py` script automates the above four steps. It is |
| 81 recommended to use this just before you're ready to submit your CL, after you've |
| 82 already tested one of the updated sysroots on your local configuration. Build |
| 83 or upload failures will not produce detailed output, but will list the script |
| 84 and arguments that caused the failure. To debug this, you must run the failing |
| 85 command manually. This script requires Google Cloud Storage write permission on |
| 86 the `chrome-linux-sysroot` bucket. |
| OLD | NEW |