blob: 92568ad05e8615d29537aab016fdff78045d66b7 [file] [log] [blame] [view]
dpranke0ae7cad2016-11-30 07:47:581# Checking out and building Chromium on Linux
andybons3322f762015-08-24 21:37:092
Victor Costan44af72b2017-11-13 20:01:303There are instructions for other platforms linked from the
Nicolas Norvezba040062020-01-15 01:17:264[get the code](../get_the_code.md) page.
dpranke1a70d0c2016-12-01 02:42:295
dpranke1a70d0c2016-12-01 02:42:296## Instructions for Google Employees
7
8Are you a Google employee? See
9[go/building-chrome](https://goto.google.com/building-chrome) instead.
andybons8c02a1f2015-09-04 17:02:3210
dpranke0ae7cad2016-11-30 07:47:5811[TOC]
andybonsad92aa32015-08-31 02:27:4412
dpranke0ae7cad2016-11-30 07:47:5813## System requirements
andybonsad92aa32015-08-31 02:27:4414
dpranke0ae7cad2016-11-30 07:47:5815* A 64-bit Intel machine with at least 8GB of RAM. More than 16GB is highly
16 recommended.
17* At least 100GB of free disk space.
Thiemo Nageldbae05f32018-07-31 14:43:2718* You must have Git and Python v2 installed already.
andybons3322f762015-08-24 21:37:0919
Takuto Ikuta903bf1f62019-07-08 04:41:3320Most development is done on Ubuntu (currently 16.04, Xenial Xerus). There are
dpranke0ae7cad2016-11-30 07:47:5821some instructions for other distros below, but they are mostly unsupported.
andybons3322f762015-08-24 21:37:0922
dpranke0ae7cad2016-11-30 07:47:5823## Install `depot_tools`
andybonsad92aa32015-08-31 02:27:4424
sdy93387fa2016-12-01 01:03:4425Clone the `depot_tools` repository:
andybons3322f762015-08-24 21:37:0926
sdy93387fa2016-12-01 01:03:4427```shell
28$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
29```
andybonsad92aa32015-08-31 02:27:4430
sdy93387fa2016-12-01 01:03:4431Add `depot_tools` to the end of your PATH (you will probably want to put this
32in your `~/.bashrc` or `~/.zshrc`). Assuming you cloned `depot_tools` to
33`/path/to/depot_tools`:
andybonsad92aa32015-08-31 02:27:4434
sdy93387fa2016-12-01 01:03:4435```shell
36$ export PATH="$PATH:/path/to/depot_tools"
37```
andybons3322f762015-08-24 21:37:0938
Claudio DeSouzaae44ac12018-02-13 16:11:4539When cloning `depot_tools` to your home directory **do not** use `~` on PATH,
40otherwise `gclient runhooks` will fail to run. Rather, you should use either
41`$HOME` or the absolute path:
42
43```shell
44$ export PATH="$PATH:${HOME}/depot_tools"
45```
46
dpranke0ae7cad2016-11-30 07:47:5847## Get the code
andybonsad92aa32015-08-31 02:27:4448
sdy93387fa2016-12-01 01:03:4449Create a `chromium` directory for the checkout and change to it (you can call
50this whatever you like and put it wherever you like, as long as the full path
51has no spaces):
52
53```shell
54$ mkdir ~/chromium && cd ~/chromium
55```
andybons3322f762015-08-24 21:37:0956
dpranke0ae7cad2016-11-30 07:47:5857Run the `fetch` tool from depot_tools to check out the code and its
58dependencies.
andybonsad92aa32015-08-31 02:27:4459
sdy93387fa2016-12-01 01:03:4460```shell
61$ fetch --nohooks chromium
62```
andybonsad92aa32015-08-31 02:27:4463
dpranke0ae7cad2016-11-30 07:47:5864If you don't want the full repo history, you can save a lot of time by
sdy93387fa2016-12-01 01:03:4465adding the `--no-history` flag to `fetch`.
andybons3322f762015-08-24 21:37:0966
dpranke0ae7cad2016-11-30 07:47:5867Expect the command to take 30 minutes on even a fast connection, and many
68hours on slower ones.
andybonsad92aa32015-08-31 02:27:4469
dpranke0ae7cad2016-11-30 07:47:5870If you've already installed the build dependencies on the machine (from another
sdy93387fa2016-12-01 01:03:4471checkout, for example), you can omit the `--nohooks` flag and `fetch`
dpranke0ae7cad2016-11-30 07:47:5872will automatically execute `gclient runhooks` at the end.
andybons3322f762015-08-24 21:37:0973
sdy93387fa2016-12-01 01:03:4474When `fetch` completes, it will have created a hidden `.gclient` file and a
75directory called `src` in the working directory. The remaining instructions
76assume you have switched to the `src` directory:
andybons3322f762015-08-24 21:37:0977
sdy93387fa2016-12-01 01:03:4478```shell
79$ cd src
80```
andybons3322f762015-08-24 21:37:0981
dpranke0ae7cad2016-11-30 07:47:5882### Install additional build dependencies
andybons3322f762015-08-24 21:37:0983
dpranke0ae7cad2016-11-30 07:47:5884Once you have checked out the code, and assuming you're using Ubuntu, run
85[build/install-build-deps.sh](/build/install-build-deps.sh)
andybons3322f762015-08-24 21:37:0986
Aaron Gable3bc93682019-01-11 02:16:0787```shell
88$ ./build/install-build-deps.sh
89```
90
dpranke2989a782016-12-02 02:57:1291You may need to adjust the build dependencies for other distros. There are
92some [notes](#notes) at the end of this document, but we make no guarantees
93for their accuracy.
andybonsad92aa32015-08-31 02:27:4494
dpranke0ae7cad2016-11-30 07:47:5895### Run the hooks
andybons3322f762015-08-24 21:37:0996
dpranke0ae7cad2016-11-30 07:47:5897Once you've run `install-build-deps` at least once, you can now run the
sdy93387fa2016-12-01 01:03:4498Chromium-specific hooks, which will download additional binaries and other
dpranke0ae7cad2016-11-30 07:47:5899things you might need:
andybonsad92aa32015-08-31 02:27:44100
sdy93387fa2016-12-01 01:03:44101```shell
102$ gclient runhooks
103```
andybonsad92aa32015-08-31 02:27:44104
sdy93387fa2016-12-01 01:03:44105*Optional*: You can also [install API
106keys](https://www.chromium.org/developers/how-tos/api-keys) if you want your
107build to talk to some Google services, but this is not necessary for most
108development and testing purposes.
andybons3322f762015-08-24 21:37:09109
dpranke1a70d0c2016-12-01 02:42:29110## Setting up the build
andybonsad92aa32015-08-31 02:27:44111
Tom Bridgwatereef401542018-08-17 00:54:43112Chromium uses [Ninja](https://ninja-build.org) as its main build tool along with
113a tool called [GN](https://gn.googlesource.com/gn/+/master/docs/quick_start.md)
114to generate `.ninja` files. You can create any number of *build directories*
115with different configurations. To create a build directory, run:
andybons8c02a1f2015-09-04 17:02:32116
sdy93387fa2016-12-01 01:03:44117```shell
118$ gn gen out/Default
119```
dpranke0ae7cad2016-11-30 07:47:58120
sdy93387fa2016-12-01 01:03:44121* You only have to run this once for each new build directory, Ninja will
122 update the build files as needed.
123* You can replace `Default` with another name, but
124 it should be a subdirectory of `out`.
125* For other build arguments, including release settings, see [GN build
126 configuration](https://www.chromium.org/developers/gn-build-configuration).
dpranke0ae7cad2016-11-30 07:47:58127 The default will be a debug component build matching the current host
128 operating system and CPU.
129* For more info on GN, run `gn help` on the command line or read the
Eric Roman01446752019-09-03 23:45:08130 [quick start guide](https://gn.googlesource.com/gn/+/master/docs/quick_start.md).
dpranke0ae7cad2016-11-30 07:47:58131
amoylana960fa52016-12-09 22:47:28132### <a name="faster-builds"></a>Faster builds
dpranke0ae7cad2016-11-30 07:47:58133
dpranke2989a782016-12-02 02:57:12134This section contains some things you can change to speed up your builds,
135sorted so that the things that make the biggest difference are first.
136
Fumitoshi Ukaie15fd782019-10-15 05:52:48137#### Use Goma
138
139Google developed the distributed compiler called
140[Goma](https://chromium.googlesource.com/infra/goma/client).
141Googlers and contributors who have
142[tryjob access](https://www.chromium.org/getting-involved/become-a-committer#TOC-Try-job-access)
143could use `Goma`.
144
145If you are not a Googler and would like to use `Goma`
146[sign up](https://docs.google.com/forms/d/1NKHcyqYqw3c4jftrLPwvyiPlolRm4Hf6ObrB83wHXy8/viewform).
147
148Once you've allowed to use `Goma` service and installed the client,
149[set the following GN args](https://www.chromium.org/developers/gn-build-configuration#TOC-Goma):
150
151```
152use_goma=true
153goma_dir=/path/to/goma-client
154```
155
dpranke2989a782016-12-02 02:57:12156#### Disable NaCl
157
158By default, the build includes support for
159[Native Client (NaCl)](https://developer.chrome.com/native-client), but
Victor Costan44af72b2017-11-13 20:01:30160most of the time you won't need it. You can set the GN argument
dpranke2989a782016-12-02 02:57:12161`enable_nacl=false` and it won't be built.
162
163#### Include fewer debug symbols
164
165By default GN produces a build with all of the debug assertions enabled
166(`is_debug=true`) and including full debug info (`symbol_level=2`). Setting
167`symbol_level=1` will produce enough information for stack traces, but not
168line-by-line debugging. Setting `symbol_level=0` will include no debug
169symbols at all. Either will speed up the build compared to full symbols.
170
dpranke2989a782016-12-02 02:57:12171#### Disable debug symbols for Blink
172
173Due to its extensive use of templates, the Blink code produces about half
174of our debug symbols. If you don't ever need to debug Blink, you can set
James Cook26699a92019-03-12 22:23:10175the GN arg `blink_symbol_level=0`.
dpranke2989a782016-12-02 02:57:12176
177#### Use Icecc
178
179[Icecc](https://github.com/icecc/icecream) is the distributed compiler with a
180central scheduler to share build load. Currently, many external contributors use
Fumitoshi Ukaie15fd782019-10-15 05:52:48181it. e.g. Intel, Opera, Samsung (this is not useful if you're using Goma).
dpranke2989a782016-12-02 02:57:12182
183In order to use `icecc`, set the following GN args:
184
185```
186linux_use_bundled_binutils=false
187use_debug_fission=false
188is_clang=false
dpranke2989a782016-12-02 02:57:12189```
190
Victor Costan44af72b2017-11-13 20:01:30191See these links for more on the
dpranke2989a782016-12-02 02:57:12192[bundled_binutils limitation](https://github.com/icecc/icecream/commit/b2ce5b9cc4bd1900f55c3684214e409fa81e7a92),
193the [debug fission limitation](http://gcc.gnu.org/wiki/DebugFission).
194
195Using the system linker may also be necessary when using glibc 2.21 or newer.
196See [related bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808181).
197
198#### ccache
199
200You can use [ccache](https://ccache.samba.org) to speed up local builds (again,
Fumitoshi Ukaie15fd782019-10-15 05:52:48201this is not useful if you're using Goma).
dpranke2989a782016-12-02 02:57:12202
203Increase your ccache hit rate by setting `CCACHE_BASEDIR` to a parent directory
204that the working directories all have in common (e.g.,
205`/home/yourusername/development`). Consider using
206`CCACHE_SLOPPINESS=include_file_mtime` (since if you are using multiple working
207directories, header times in svn sync'ed portions of your trees will be
208different - see
209[the ccache troubleshooting section](http://ccache.samba.org/manual.html#_troubleshooting)
210for additional information). If you use symbolic links from your home directory
211to get to the local physical disk directory where you keep those working
212development directories, consider putting
213
214 alias cd="cd -P"
215
216in your `.bashrc` so that `$PWD` or `cwd` always refers to a physical, not
217logical directory (and make sure `CCACHE_BASEDIR` also refers to a physical
218parent).
219
220If you tune ccache correctly, a second working directory that uses a branch
221tracking trunk and is up to date with trunk and was gclient sync'ed at about the
222same time should build chrome in about 1/3 the time, and the cache misses as
223reported by `ccache -s` should barely increase.
224
225This is especially useful if you use `git-new-workdir` and keep multiple local
226working directories going at once.
227
228#### Using tmpfs
229
230You can use tmpfs for the build output to reduce the amount of disk writes
231required. I.e. mount tmpfs to the output directory where the build output goes:
232
233As root:
234
235 mount -t tmpfs -o size=20G,nr_inodes=40k,mode=1777 tmpfs /path/to/out
236
237*** note
238**Caveat:** You need to have enough RAM + swap to back the tmpfs. For a full
239debug build, you will need about 20 GB. Less for just building the chrome target
240or for a release build.
241***
242
243Quick and dirty benchmark numbers on a HP Z600 (Intel core i7, 16 cores
244hyperthreaded, 12 GB RAM)
245
246* With tmpfs:
247 * 12m:20s
248* Without tmpfs
249 * 15m:40s
250
dpranke0ae7cad2016-11-30 07:47:58251## Build Chromium
252
253Build Chromium (the "chrome" target) with Ninja using the command:
254
sdy93387fa2016-12-01 01:03:44255```shell
Max Morozf5b31fcd2018-08-10 21:55:48256$ autoninja -C out/Default chrome
sdy93387fa2016-12-01 01:03:44257```
dpranke0ae7cad2016-11-30 07:47:58258
Dirk Pranke8bd55f22018-10-24 21:22:10259(`autoninja` is a wrapper that automatically provides optimal values for the
260arguments passed to `ninja`.)
Max Morozf5b31fcd2018-08-10 21:55:48261
sdy93387fa2016-12-01 01:03:44262You can get a list of all of the other build targets from GN by running `gn ls
263out/Default` from the command line. To compile one, pass the GN label to Ninja
Max Morozf5b31fcd2018-08-10 21:55:48264with no preceding "//" (so, for `//chrome/test:unit_tests` use `autoninja -C
sdy93387fa2016-12-01 01:03:44265out/Default chrome/test:unit_tests`).
dpranke0ae7cad2016-11-30 07:47:58266
267## Run Chromium
268
269Once it is built, you can simply run the browser:
270
sdy93387fa2016-12-01 01:03:44271```shell
272$ out/Default/chrome
273```
dpranke0ae7cad2016-11-30 07:47:58274
275## Running test targets
276
277You can run the tests in the same way. You can also limit which tests are
278run using the `--gtest_filter` arg, e.g.:
279
sdy93387fa2016-12-01 01:03:44280```shell
dpranke1a70d0c2016-12-01 02:42:29281$ out/Default/unit_tests --gtest_filter="PushClientTest.*"
sdy93387fa2016-12-01 01:03:44282```
dpranke0ae7cad2016-11-30 07:47:58283
284You can find out more about GoogleTest at its
285[GitHub page](https://github.com/google/googletest).
286
287## Update your checkout
288
289To update an existing checkout, you can run
290
sdy93387fa2016-12-01 01:03:44291```shell
292$ git rebase-update
293$ gclient sync
294```
dpranke0ae7cad2016-11-30 07:47:58295
296The first command updates the primary Chromium source repository and rebases
sdy93387fa2016-12-01 01:03:44297any of your local branches on top of tip-of-tree (aka the Git branch
298`origin/master`). If you don't want to use this script, you can also just use
299`git pull` or other common Git commands to update the repo.
dpranke0ae7cad2016-11-30 07:47:58300
sdy93387fa2016-12-01 01:03:44301The second command syncs dependencies to the appropriate versions and re-runs
302hooks as needed.
dpranke0ae7cad2016-11-30 07:47:58303
304## Tips, tricks, and troubleshooting
andybons3322f762015-08-24 21:37:09305
306### Linker Crashes
andybonsad92aa32015-08-31 02:27:44307
andybons3322f762015-08-24 21:37:09308If, during the final link stage:
andybonsad92aa32015-08-31 02:27:44309
sdy93387fa2016-12-01 01:03:44310```
311LINK out/Debug/chrome
312```
andybonsad92aa32015-08-31 02:27:44313
andybons3322f762015-08-24 21:37:09314You get an error like:
andybons3322f762015-08-24 21:37:09315
sdy93387fa2016-12-01 01:03:44316```
317collect2: ld terminated with signal 6 Aborted terminate called after throwing an instance of 'std::bad_alloc'
318collect2: ld terminated with signal 11 [Segmentation fault], core dumped
319```
andybonsad92aa32015-08-31 02:27:44320
brettwc25693b32016-05-26 01:11:52321you are probably running out of memory when linking. You *must* use a 64-bit
322system to build. Try the following build settings (see [GN build
323configuration](https://www.chromium.org/developers/gn-build-configuration) for
sdy93387fa2016-12-01 01:03:44324other settings):
andybonsad92aa32015-08-31 02:27:44325
sdy93387fa2016-12-01 01:03:44326* Build in release mode (debugging symbols require more memory):
brettwc25693b32016-05-26 01:11:52327 `is_debug = false`
sdy93387fa2016-12-01 01:03:44328* Turn off symbols: `symbol_level = 0`
329* Build in component mode (this is for development only, it will be slower and
330 may have broken functionality): `is_component_build = true`
andybons3322f762015-08-24 21:37:09331
dpranke0ae7cad2016-11-30 07:47:58332### More links
andybons3322f762015-08-24 21:37:09333
Nicolas Norvezba040062020-01-15 01:17:26334* Information about [building with Clang](../clang.md).
Tom Andersonabdbd6a2020-01-09 16:59:27335* You may want to [use a chroot](using_a_chroot.md) to
dpranke0ae7cad2016-11-30 07:47:58336 isolate yourself from versioning or packaging conflicts.
Tom Anderson93e49e492019-12-23 19:55:37337* Cross-compiling for ARM? See [LinuxChromiumArm](chromium_arm.md).
andybonsad92aa32015-08-31 02:27:44338* Want to use Eclipse as your IDE? See
Tom Anderson93e49e492019-12-23 19:55:37339 [LinuxEclipseDev](eclipse_dev.md).
dpranke0ae7cad2016-11-30 07:47:58340* Want to use your built version as your default browser? See
Tom Anderson93e49e492019-12-23 19:55:37341 [LinuxDevBuildAsDefaultBrowser](dev_build_as_default_browser.md).
andybons3322f762015-08-24 21:37:09342
dpranke2989a782016-12-02 02:57:12343## Next Steps
andybonsad92aa32015-08-31 02:27:44344
345If you want to contribute to the effort toward a Chromium-based browser for
Tom Anderson93e49e492019-12-23 19:55:37346Linux, please check out the [Linux Development page](development.md) for
andybonsad92aa32015-08-31 02:27:44347more information.
dpranke2989a782016-12-02 02:57:12348
349## Notes for other distros <a name="notes"></a>
350
351### Arch Linux
352
353Instead of running `install-build-deps.sh` to install build dependencies, run:
354
355```shell
356$ sudo pacman -S --needed python perl gcc gcc-libs bison flex gperf pkgconfig \
Tom Anderson287339e2018-08-22 21:52:02357nss alsa-lib glib2 gtk3 nspr ttf-ms-fonts freetype2 cairo dbus libgnome-keyring
dpranke2989a782016-12-02 02:57:12358```
359
360For the optional packages on Arch Linux:
361
362* `php-cgi` is provided with `pacman`
363* `wdiff` is not in the main repository but `dwdiff` is. You can get `wdiff`
364 in AUR/`yaourt`
365* `sun-java6-fonts` do not seem to be in main repository or AUR.
366
Kenneth Russell56293772018-09-21 01:46:15367### Crostini (Debian based)
368
David Munro9b5f4c4f2019-07-24 08:23:27369First install the `file` and `lsb-release` commands for the script to run properly:
Kenneth Russell56293772018-09-21 01:46:15370
371```shell
David Munro9b5f4c4f2019-07-24 08:23:27372$ sudo apt-get install file lsb-release
Kenneth Russell56293772018-09-21 01:46:15373```
374
375Then invoke install-build-deps.sh with the `--no-arm` argument,
376because the ARM toolchain doesn't exist for this configuration:
377
378```shell
379$ sudo install-build-deps.sh --no-arm
380```
381
dpranke2989a782016-12-02 02:57:12382### Fedora
383
384Instead of running `build/install-build-deps.sh`, run:
385
386```shell
387su -c 'yum install git python bzip2 tar pkgconfig atk-devel alsa-lib-devel \
388bison binutils brlapi-devel bluez-libs-devel bzip2-devel cairo-devel \
389cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel \
Tom Anderson287339e2018-08-22 21:52:02390freetype-devel gcc-c++ glib2-devel glibc.i686 gperf glib2-devel \
Tim Brown36312fc2017-12-15 22:56:20391gtk3-devel java-1.*.0-openjdk-devel libatomic libcap-devel libffi-devel \
392libgcc.i686 libgnome-keyring-devel libjpeg-devel libstdc++.i686 libX11-devel \
393libXScrnSaver-devel libXtst-devel libxkbcommon-x11-devel ncurses-compat-libs \
394nspr-devel nss-devel pam-devel pango-devel pciutils-devel \
395pulseaudio-libs-devel zlib.i686 httpd mod_ssl php php-cli python-psutil wdiff \
396xorg-x11-server-Xvfb'
dpranke2989a782016-12-02 02:57:12397```
398
Kent Tamura59ffb022018-11-27 05:30:56399The fonts needed by Blink's web tests can be obtained by following [these
Victor Costan44af72b2017-11-13 20:01:30400instructions](https://gist.github.com/pwnall/32a3b11c2b10f6ae5c6a6de66c1e12ae).
401For the optional packages:
dpranke2989a782016-12-02 02:57:12402
403* `php-cgi` is provided by the `php-cli` package.
Victor Costan44af72b2017-11-13 20:01:30404* `sun-java6-fonts` is covered by the instructions linked above.
dpranke2989a782016-12-02 02:57:12405
406### Gentoo
407
408You can just run `emerge www-client/chromium`.
409
dpranke2989a782016-12-02 02:57:12410### OpenSUSE
411
412Use `zypper` command to install dependencies:
413
414(openSUSE 11.1 and higher)
415
416```shell
Tim Brown36312fc2017-12-15 22:56:20417sudo zypper in subversion pkg-config python perl bison flex gperf \
418 mozilla-nss-devel glib2-devel gtk-devel wdiff lighttpd gcc gcc-c++ \
419 mozilla-nspr mozilla-nspr-devel php5-fastcgi alsa-devel libexpat-devel \
dpranke2989a782016-12-02 02:57:12420 libjpeg-devel libbz2-devel
421```
422
423For 11.0, use `libnspr4-0d` and `libnspr4-dev` instead of `mozilla-nspr` and
Tom Anderson287339e2018-08-22 21:52:02424`mozilla-nspr-devel`, and use `php5-cgi` instead of `php5-fastcgi`.
dpranke2989a782016-12-02 02:57:12425
426(openSUSE 11.0)
427
428```shell
429sudo zypper in subversion pkg-config python perl \
430 bison flex gperf mozilla-nss-devel glib2-devel gtk-devel \
431 libnspr4-0d libnspr4-dev wdiff lighttpd gcc gcc-c++ libexpat-devel \
Tom Anderson287339e2018-08-22 21:52:02432 php5-cgi alsa-devel gtk3-devel jpeg-devel
dpranke2989a782016-12-02 02:57:12433```
434
435The Ubuntu package `sun-java6-fonts` contains a subset of Java of the fonts used.
436Since this package requires Java as a prerequisite anyway, we can do the same
437thing by just installing the equivalent openSUSE Sun Java package:
438
439```shell
440sudo zypper in java-1_6_0-sun
441```
442
443WebKit is currently hard-linked to the Microsoft fonts. To install these using `zypper`
444
445```shell
446sudo zypper in fetchmsttfonts pullin-msttf-fonts
447```
448
449To make the fonts installed above work, as the paths are hardcoded for Ubuntu,
450create symlinks to the appropriate locations:
451
452```shell
453sudo mkdir -p /usr/share/fonts/truetype/msttcorefonts
454sudo ln -s /usr/share/fonts/truetype/arial.ttf /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
455sudo ln -s /usr/share/fonts/truetype/arialbd.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
456sudo ln -s /usr/share/fonts/truetype/arialbi.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf
457sudo ln -s /usr/share/fonts/truetype/ariali.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf
458sudo ln -s /usr/share/fonts/truetype/comic.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf
459sudo ln -s /usr/share/fonts/truetype/comicbd.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf
460sudo ln -s /usr/share/fonts/truetype/cour.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf
461sudo ln -s /usr/share/fonts/truetype/courbd.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf
462sudo ln -s /usr/share/fonts/truetype/courbi.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf
463sudo ln -s /usr/share/fonts/truetype/couri.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf
464sudo ln -s /usr/share/fonts/truetype/impact.ttf /usr/share/fonts/truetype/msttcorefonts/Impact.ttf
465sudo ln -s /usr/share/fonts/truetype/times.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf
466sudo ln -s /usr/share/fonts/truetype/timesbd.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf
467sudo ln -s /usr/share/fonts/truetype/timesbi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf
468sudo ln -s /usr/share/fonts/truetype/timesi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf
469sudo ln -s /usr/share/fonts/truetype/verdana.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
470sudo ln -s /usr/share/fonts/truetype/verdanab.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf
471sudo ln -s /usr/share/fonts/truetype/verdanai.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf
472sudo ln -s /usr/share/fonts/truetype/verdanaz.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf
473```
474
475The Ubuntu package `sun-java6-fonts` contains a subset of Java of the fonts used.
476Since this package requires Java as a prerequisite anyway, we can do the same
477thing by just installing the equivalent openSUSE Sun Java package:
478
479```shell
480sudo zypper in java-1_6_0-sun
481```
482
483WebKit is currently hard-linked to the Microsoft fonts. To install these using `zypper`
484
485```shell
486sudo zypper in fetchmsttfonts pullin-msttf-fonts
487```
488
489To make the fonts installed above work, as the paths are hardcoded for Ubuntu,
490create symlinks to the appropriate locations:
491
492```shell
493sudo mkdir -p /usr/share/fonts/truetype/msttcorefonts
494sudo ln -s /usr/share/fonts/truetype/arial.ttf /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
495sudo ln -s /usr/share/fonts/truetype/arialbd.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
496sudo ln -s /usr/share/fonts/truetype/arialbi.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf
497sudo ln -s /usr/share/fonts/truetype/ariali.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf
498sudo ln -s /usr/share/fonts/truetype/comic.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf
499sudo ln -s /usr/share/fonts/truetype/comicbd.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf
500sudo ln -s /usr/share/fonts/truetype/cour.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf
501sudo ln -s /usr/share/fonts/truetype/courbd.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf
502sudo ln -s /usr/share/fonts/truetype/courbi.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf
503sudo ln -s /usr/share/fonts/truetype/couri.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf
504sudo ln -s /usr/share/fonts/truetype/impact.ttf /usr/share/fonts/truetype/msttcorefonts/Impact.ttf
505sudo ln -s /usr/share/fonts/truetype/times.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf
506sudo ln -s /usr/share/fonts/truetype/timesbd.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf
507sudo ln -s /usr/share/fonts/truetype/timesbi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf
508sudo ln -s /usr/share/fonts/truetype/timesi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf
509sudo ln -s /usr/share/fonts/truetype/verdana.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
510sudo ln -s /usr/share/fonts/truetype/verdanab.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf
511sudo ln -s /usr/share/fonts/truetype/verdanai.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf
512sudo ln -s /usr/share/fonts/truetype/verdanaz.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf
513```
514
515And then for the Java fonts:
516
517```shell
518sudo mkdir -p /usr/share/fonts/truetype/ttf-lucida
519sudo find /usr/lib*/jvm/java-1.6.*-sun-*/jre/lib -iname '*.ttf' -print \
520 -exec ln -s {} /usr/share/fonts/truetype/ttf-lucida \;
521```