blob: 713c9510a6b6da8976ed943a8091f6fa55bec863 [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
dpranke1a70d0c2016-12-01 02:42:294[get the code](get_the_code.md) page.
5
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.
18* You must have Git and Python installed already.
andybons3322f762015-08-24 21:37:0919
sdy93387fa2016-12-01 01:03:4420Most development is done on Ubuntu (currently 14.04, Trusty Tahr). 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
dpranke0ae7cad2016-11-30 07:47:5839## Get the code
andybonsad92aa32015-08-31 02:27:4440
sdy93387fa2016-12-01 01:03:4441Create a `chromium` directory for the checkout and change to it (you can call
42this whatever you like and put it wherever you like, as long as the full path
43has no spaces):
44
45```shell
46$ mkdir ~/chromium && cd ~/chromium
47```
andybons3322f762015-08-24 21:37:0948
dpranke0ae7cad2016-11-30 07:47:5849Run the `fetch` tool from depot_tools to check out the code and its
50dependencies.
andybonsad92aa32015-08-31 02:27:4451
sdy93387fa2016-12-01 01:03:4452```shell
53$ fetch --nohooks chromium
54```
andybonsad92aa32015-08-31 02:27:4455
dpranke0ae7cad2016-11-30 07:47:5856If you don't want the full repo history, you can save a lot of time by
sdy93387fa2016-12-01 01:03:4457adding the `--no-history` flag to `fetch`.
andybons3322f762015-08-24 21:37:0958
dpranke0ae7cad2016-11-30 07:47:5859Expect the command to take 30 minutes on even a fast connection, and many
60hours on slower ones.
andybonsad92aa32015-08-31 02:27:4461
dpranke0ae7cad2016-11-30 07:47:5862If you've already installed the build dependencies on the machine (from another
sdy93387fa2016-12-01 01:03:4463checkout, for example), you can omit the `--nohooks` flag and `fetch`
dpranke0ae7cad2016-11-30 07:47:5864will automatically execute `gclient runhooks` at the end.
andybons3322f762015-08-24 21:37:0965
sdy93387fa2016-12-01 01:03:4466When `fetch` completes, it will have created a hidden `.gclient` file and a
67directory called `src` in the working directory. The remaining instructions
68assume you have switched to the `src` directory:
andybons3322f762015-08-24 21:37:0969
sdy93387fa2016-12-01 01:03:4470```shell
71$ cd src
72```
andybons3322f762015-08-24 21:37:0973
dpranke0ae7cad2016-11-30 07:47:5874### Install additional build dependencies
andybons3322f762015-08-24 21:37:0975
dpranke0ae7cad2016-11-30 07:47:5876Once you have checked out the code, and assuming you're using Ubuntu, run
77[build/install-build-deps.sh](/build/install-build-deps.sh)
andybons3322f762015-08-24 21:37:0978
dpranke2989a782016-12-02 02:57:1279You may need to adjust the build dependencies for other distros. There are
80some [notes](#notes) at the end of this document, but we make no guarantees
81for their accuracy.
andybonsad92aa32015-08-31 02:27:4482
dpranke0ae7cad2016-11-30 07:47:5883### Run the hooks
andybons3322f762015-08-24 21:37:0984
dpranke0ae7cad2016-11-30 07:47:5885Once you've run `install-build-deps` at least once, you can now run the
sdy93387fa2016-12-01 01:03:4486Chromium-specific hooks, which will download additional binaries and other
dpranke0ae7cad2016-11-30 07:47:5887things you might need:
andybonsad92aa32015-08-31 02:27:4488
sdy93387fa2016-12-01 01:03:4489```shell
90$ gclient runhooks
91```
andybonsad92aa32015-08-31 02:27:4492
sdy93387fa2016-12-01 01:03:4493*Optional*: You can also [install API
94keys](https://www.chromium.org/developers/how-tos/api-keys) if you want your
95build to talk to some Google services, but this is not necessary for most
96development and testing purposes.
andybons3322f762015-08-24 21:37:0997
dpranke1a70d0c2016-12-01 02:42:2998## Setting up the build
andybonsad92aa32015-08-31 02:27:4499
sdy93387fa2016-12-01 01:03:44100Chromium uses [Ninja](https://ninja-build.org) as its main build tool along
101with a tool called [GN](../tools/gn/docs/quick_start.md) to generate `.ninja`
102files. You can create any number of *build directories* with different
103configurations. To create a build directory, run:
andybons8c02a1f2015-09-04 17:02:32104
sdy93387fa2016-12-01 01:03:44105```shell
106$ gn gen out/Default
107```
dpranke0ae7cad2016-11-30 07:47:58108
sdy93387fa2016-12-01 01:03:44109* You only have to run this once for each new build directory, Ninja will
110 update the build files as needed.
111* You can replace `Default` with another name, but
112 it should be a subdirectory of `out`.
113* For other build arguments, including release settings, see [GN build
114 configuration](https://www.chromium.org/developers/gn-build-configuration).
dpranke0ae7cad2016-11-30 07:47:58115 The default will be a debug component build matching the current host
116 operating system and CPU.
117* For more info on GN, run `gn help` on the command line or read the
118 [quick start guide](../tools/gn/docs/quick_start.md).
119
amoylana960fa52016-12-09 22:47:28120### <a name="faster-builds"></a>Faster builds
dpranke0ae7cad2016-11-30 07:47:58121
dpranke2989a782016-12-02 02:57:12122This section contains some things you can change to speed up your builds,
123sorted so that the things that make the biggest difference are first.
124
Philip Rogerseb841682017-10-09 16:08:50125#### Jumbo/Unity builds
126
127Jumbo builds merge many translation units ("source files") and compile them
128together. Since a large portion of Chromium's code is in shared header files,
129this dramatically reduces the total amount of work needed. Check out the
130[Jumbo / Unity builds](jumbo.md) for more information.
131
132Enable jumbo builds by setting the GN arg `use_jumbo_build=true`.
133
dpranke2989a782016-12-02 02:57:12134#### Disable NaCl
135
136By default, the build includes support for
137[Native Client (NaCl)](https://developer.chrome.com/native-client), but
Victor Costan44af72b2017-11-13 20:01:30138most of the time you won't need it. You can set the GN argument
dpranke2989a782016-12-02 02:57:12139`enable_nacl=false` and it won't be built.
140
141#### Include fewer debug symbols
142
143By default GN produces a build with all of the debug assertions enabled
144(`is_debug=true`) and including full debug info (`symbol_level=2`). Setting
145`symbol_level=1` will produce enough information for stack traces, but not
146line-by-line debugging. Setting `symbol_level=0` will include no debug
147symbols at all. Either will speed up the build compared to full symbols.
148
dpranke2989a782016-12-02 02:57:12149#### Disable debug symbols for Blink
150
151Due to its extensive use of templates, the Blink code produces about half
152of our debug symbols. If you don't ever need to debug Blink, you can set
153the GN arg `remove_webcore_debug_symbols=true`.
154
155#### Use Icecc
156
157[Icecc](https://github.com/icecc/icecream) is the distributed compiler with a
158central scheduler to share build load. Currently, many external contributors use
159it. e.g. Intel, Opera, Samsung (Googlers use an internal system called Goma).
160
161In order to use `icecc`, set the following GN args:
162
163```
164linux_use_bundled_binutils=false
165use_debug_fission=false
166is_clang=false
dpranke2989a782016-12-02 02:57:12167```
168
Victor Costan44af72b2017-11-13 20:01:30169See these links for more on the
dpranke2989a782016-12-02 02:57:12170[bundled_binutils limitation](https://github.com/icecc/icecream/commit/b2ce5b9cc4bd1900f55c3684214e409fa81e7a92),
171the [debug fission limitation](http://gcc.gnu.org/wiki/DebugFission).
172
173Using the system linker may also be necessary when using glibc 2.21 or newer.
174See [related bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808181).
175
176#### ccache
177
178You can use [ccache](https://ccache.samba.org) to speed up local builds (again,
Kush Sinhae6aa1d182017-11-20 13:56:53179this is not useful if you're a Googler using Goma).
dpranke2989a782016-12-02 02:57:12180
181Increase your ccache hit rate by setting `CCACHE_BASEDIR` to a parent directory
182that the working directories all have in common (e.g.,
183`/home/yourusername/development`). Consider using
184`CCACHE_SLOPPINESS=include_file_mtime` (since if you are using multiple working
185directories, header times in svn sync'ed portions of your trees will be
186different - see
187[the ccache troubleshooting section](http://ccache.samba.org/manual.html#_troubleshooting)
188for additional information). If you use symbolic links from your home directory
189to get to the local physical disk directory where you keep those working
190development directories, consider putting
191
192 alias cd="cd -P"
193
194in your `.bashrc` so that `$PWD` or `cwd` always refers to a physical, not
195logical directory (and make sure `CCACHE_BASEDIR` also refers to a physical
196parent).
197
198If you tune ccache correctly, a second working directory that uses a branch
199tracking trunk and is up to date with trunk and was gclient sync'ed at about the
200same time should build chrome in about 1/3 the time, and the cache misses as
201reported by `ccache -s` should barely increase.
202
203This is especially useful if you use `git-new-workdir` and keep multiple local
204working directories going at once.
205
206#### Using tmpfs
207
208You can use tmpfs for the build output to reduce the amount of disk writes
209required. I.e. mount tmpfs to the output directory where the build output goes:
210
211As root:
212
213 mount -t tmpfs -o size=20G,nr_inodes=40k,mode=1777 tmpfs /path/to/out
214
215*** note
216**Caveat:** You need to have enough RAM + swap to back the tmpfs. For a full
217debug build, you will need about 20 GB. Less for just building the chrome target
218or for a release build.
219***
220
221Quick and dirty benchmark numbers on a HP Z600 (Intel core i7, 16 cores
222hyperthreaded, 12 GB RAM)
223
224* With tmpfs:
225 * 12m:20s
226* Without tmpfs
227 * 15m:40s
228
dpranke0ae7cad2016-11-30 07:47:58229## Build Chromium
230
231Build Chromium (the "chrome" target) with Ninja using the command:
232
sdy93387fa2016-12-01 01:03:44233```shell
234$ ninja -C out/Default chrome
235```
dpranke0ae7cad2016-11-30 07:47:58236
sdy93387fa2016-12-01 01:03:44237You can get a list of all of the other build targets from GN by running `gn ls
238out/Default` from the command line. To compile one, pass the GN label to Ninja
239with no preceding "//" (so, for `//chrome/test:unit_tests` use `ninja -C
240out/Default chrome/test:unit_tests`).
dpranke0ae7cad2016-11-30 07:47:58241
242## Run Chromium
243
244Once it is built, you can simply run the browser:
245
sdy93387fa2016-12-01 01:03:44246```shell
247$ out/Default/chrome
248```
dpranke0ae7cad2016-11-30 07:47:58249
250## Running test targets
251
252You can run the tests in the same way. You can also limit which tests are
253run using the `--gtest_filter` arg, e.g.:
254
sdy93387fa2016-12-01 01:03:44255```shell
dpranke1a70d0c2016-12-01 02:42:29256$ out/Default/unit_tests --gtest_filter="PushClientTest.*"
sdy93387fa2016-12-01 01:03:44257```
dpranke0ae7cad2016-11-30 07:47:58258
259You can find out more about GoogleTest at its
260[GitHub page](https://github.com/google/googletest).
261
262## Update your checkout
263
264To update an existing checkout, you can run
265
sdy93387fa2016-12-01 01:03:44266```shell
267$ git rebase-update
268$ gclient sync
269```
dpranke0ae7cad2016-11-30 07:47:58270
271The first command updates the primary Chromium source repository and rebases
sdy93387fa2016-12-01 01:03:44272any of your local branches on top of tip-of-tree (aka the Git branch
273`origin/master`). If you don't want to use this script, you can also just use
274`git pull` or other common Git commands to update the repo.
dpranke0ae7cad2016-11-30 07:47:58275
sdy93387fa2016-12-01 01:03:44276The second command syncs dependencies to the appropriate versions and re-runs
277hooks as needed.
dpranke0ae7cad2016-11-30 07:47:58278
279## Tips, tricks, and troubleshooting
andybons3322f762015-08-24 21:37:09280
281### Linker Crashes
andybonsad92aa32015-08-31 02:27:44282
andybons3322f762015-08-24 21:37:09283If, during the final link stage:
andybonsad92aa32015-08-31 02:27:44284
sdy93387fa2016-12-01 01:03:44285```
286LINK out/Debug/chrome
287```
andybonsad92aa32015-08-31 02:27:44288
andybons3322f762015-08-24 21:37:09289You get an error like:
andybons3322f762015-08-24 21:37:09290
sdy93387fa2016-12-01 01:03:44291```
292collect2: ld terminated with signal 6 Aborted terminate called after throwing an instance of 'std::bad_alloc'
293collect2: ld terminated with signal 11 [Segmentation fault], core dumped
294```
andybonsad92aa32015-08-31 02:27:44295
brettwc25693b32016-05-26 01:11:52296you are probably running out of memory when linking. You *must* use a 64-bit
297system to build. Try the following build settings (see [GN build
298configuration](https://www.chromium.org/developers/gn-build-configuration) for
sdy93387fa2016-12-01 01:03:44299other settings):
andybonsad92aa32015-08-31 02:27:44300
sdy93387fa2016-12-01 01:03:44301* Build in release mode (debugging symbols require more memory):
brettwc25693b32016-05-26 01:11:52302 `is_debug = false`
sdy93387fa2016-12-01 01:03:44303* Turn off symbols: `symbol_level = 0`
304* Build in component mode (this is for development only, it will be slower and
305 may have broken functionality): `is_component_build = true`
andybons3322f762015-08-24 21:37:09306
dpranke0ae7cad2016-11-30 07:47:58307### More links
andybons3322f762015-08-24 21:37:09308
brettwc25693b32016-05-26 01:11:52309* Information about [building with Clang](clang.md).
dpranke0ae7cad2016-11-30 07:47:58310* You may want to [use a chroot](using_a_linux_chroot.md) to
311 isolate yourself from versioning or packaging conflicts.
andybonsad92aa32015-08-31 02:27:44312* Cross-compiling for ARM? See [LinuxChromiumArm](linux_chromium_arm.md).
313* Want to use Eclipse as your IDE? See
314 [LinuxEclipseDev](linux_eclipse_dev.md).
dpranke0ae7cad2016-11-30 07:47:58315* Want to use your built version as your default browser? See
andybonsad92aa32015-08-31 02:27:44316 [LinuxDevBuildAsDefaultBrowser](linux_dev_build_as_default_browser.md).
andybons3322f762015-08-24 21:37:09317
dpranke2989a782016-12-02 02:57:12318## Next Steps
andybonsad92aa32015-08-31 02:27:44319
320If you want to contribute to the effort toward a Chromium-based browser for
321Linux, please check out the [Linux Development page](linux_development.md) for
322more information.
dpranke2989a782016-12-02 02:57:12323
324## Notes for other distros <a name="notes"></a>
325
326### Arch Linux
327
328Instead of running `install-build-deps.sh` to install build dependencies, run:
329
330```shell
331$ sudo pacman -S --needed python perl gcc gcc-libs bison flex gperf pkgconfig \
Tim Brown36312fc2017-12-15 22:56:20332nss alsa-lib glib2 gtk2 nspr ttf-ms-fonts freetype2 cairo dbus libgnome-keyring
dpranke2989a782016-12-02 02:57:12333```
334
335For the optional packages on Arch Linux:
336
337* `php-cgi` is provided with `pacman`
338* `wdiff` is not in the main repository but `dwdiff` is. You can get `wdiff`
339 in AUR/`yaourt`
340* `sun-java6-fonts` do not seem to be in main repository or AUR.
341
342### Debian
343
thomasandersonb4a2bca2016-12-08 06:46:05344Some tests require the `ttf-mscorefonts-installer` package from the `contrib`
345component. `contrib` packages may have dependencies on non-free software.
dpranke2989a782016-12-02 02:57:12346
thomasandersonb4a2bca2016-12-08 06:46:05347If you need to run tests requiring MS TTF fonts, you can edit your apt
348`sources.list` by adding `contrib` to the end of each line beginning with `deb`.
349You might end up with something like this:
350
351```
352deb http://ftp.us.debian.org/debian/ jessie main contrib
353deb-src http://ftp.us.debian.org/debian/ jessie main contrib
354
355deb http://security.debian.org/ jessie/updates main contrib
356deb-src http://security.debian.org/ jessie/updates main contrib
357
358# jessie-updates, previously known as 'volatile'
359deb http://ftp.us.debian.org/debian/ jessie-updates main contrib
360deb-src http://ftp.us.debian.org/debian/ jessie-updates main contrib
361```
362
363Next, run:
364
365``` shell
366$ sudo apt-get update
367$ sudo apt-get install ttf-mscorefonts-installer
368```
369
370If you already have the `contrib` component enabled, `install-build-deps.sh`
371will install `ttf-mscorefonts-installer` for you.
dpranke2989a782016-12-02 02:57:12372
373### Fedora
374
375Instead of running `build/install-build-deps.sh`, run:
376
377```shell
378su -c 'yum install git python bzip2 tar pkgconfig atk-devel alsa-lib-devel \
379bison binutils brlapi-devel bluez-libs-devel bzip2-devel cairo-devel \
380cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel \
Tim Brown36312fc2017-12-15 22:56:20381freetype-devel gcc-c++ glib2-devel glibc.i686 gperf glib2-devel gtk2-devel \
382gtk3-devel java-1.*.0-openjdk-devel libatomic libcap-devel libffi-devel \
383libgcc.i686 libgnome-keyring-devel libjpeg-devel libstdc++.i686 libX11-devel \
384libXScrnSaver-devel libXtst-devel libxkbcommon-x11-devel ncurses-compat-libs \
385nspr-devel nss-devel pam-devel pango-devel pciutils-devel \
386pulseaudio-libs-devel zlib.i686 httpd mod_ssl php php-cli python-psutil wdiff \
387xorg-x11-server-Xvfb'
dpranke2989a782016-12-02 02:57:12388```
389
Victor Costan44af72b2017-11-13 20:01:30390The fonts needed by Blink's LayoutTests can be obtained by following [these
391instructions](https://gist.github.com/pwnall/32a3b11c2b10f6ae5c6a6de66c1e12ae).
392For the optional packages:
dpranke2989a782016-12-02 02:57:12393
394* `php-cgi` is provided by the `php-cli` package.
Victor Costan44af72b2017-11-13 20:01:30395* `sun-java6-fonts` is covered by the instructions linked above.
dpranke2989a782016-12-02 02:57:12396
397### Gentoo
398
399You can just run `emerge www-client/chromium`.
400
dpranke2989a782016-12-02 02:57:12401### OpenSUSE
402
403Use `zypper` command to install dependencies:
404
405(openSUSE 11.1 and higher)
406
407```shell
Tim Brown36312fc2017-12-15 22:56:20408sudo zypper in subversion pkg-config python perl bison flex gperf \
409 mozilla-nss-devel glib2-devel gtk-devel wdiff lighttpd gcc gcc-c++ \
410 mozilla-nspr mozilla-nspr-devel php5-fastcgi alsa-devel libexpat-devel \
dpranke2989a782016-12-02 02:57:12411 libjpeg-devel libbz2-devel
412```
413
414For 11.0, use `libnspr4-0d` and `libnspr4-dev` instead of `mozilla-nspr` and
415`mozilla-nspr-devel`, and use `php5-cgi` instead of `php5-fastcgi`. And need
416`gtk2-devel`.
417
418(openSUSE 11.0)
419
420```shell
421sudo zypper in subversion pkg-config python perl \
422 bison flex gperf mozilla-nss-devel glib2-devel gtk-devel \
423 libnspr4-0d libnspr4-dev wdiff lighttpd gcc gcc-c++ libexpat-devel \
Tim Brown36312fc2017-12-15 22:56:20424 php5-cgi alsa-devel gtk2-devel jpeg-devel
dpranke2989a782016-12-02 02:57:12425```
426
427The Ubuntu package `sun-java6-fonts` contains a subset of Java of the fonts used.
428Since this package requires Java as a prerequisite anyway, we can do the same
429thing by just installing the equivalent openSUSE Sun Java package:
430
431```shell
432sudo zypper in java-1_6_0-sun
433```
434
435WebKit is currently hard-linked to the Microsoft fonts. To install these using `zypper`
436
437```shell
438sudo zypper in fetchmsttfonts pullin-msttf-fonts
439```
440
441To make the fonts installed above work, as the paths are hardcoded for Ubuntu,
442create symlinks to the appropriate locations:
443
444```shell
445sudo mkdir -p /usr/share/fonts/truetype/msttcorefonts
446sudo ln -s /usr/share/fonts/truetype/arial.ttf /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
447sudo ln -s /usr/share/fonts/truetype/arialbd.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
448sudo ln -s /usr/share/fonts/truetype/arialbi.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf
449sudo ln -s /usr/share/fonts/truetype/ariali.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf
450sudo ln -s /usr/share/fonts/truetype/comic.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf
451sudo ln -s /usr/share/fonts/truetype/comicbd.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf
452sudo ln -s /usr/share/fonts/truetype/cour.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf
453sudo ln -s /usr/share/fonts/truetype/courbd.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf
454sudo ln -s /usr/share/fonts/truetype/courbi.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf
455sudo ln -s /usr/share/fonts/truetype/couri.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf
456sudo ln -s /usr/share/fonts/truetype/impact.ttf /usr/share/fonts/truetype/msttcorefonts/Impact.ttf
457sudo ln -s /usr/share/fonts/truetype/times.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf
458sudo ln -s /usr/share/fonts/truetype/timesbd.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf
459sudo ln -s /usr/share/fonts/truetype/timesbi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf
460sudo ln -s /usr/share/fonts/truetype/timesi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf
461sudo ln -s /usr/share/fonts/truetype/verdana.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
462sudo ln -s /usr/share/fonts/truetype/verdanab.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf
463sudo ln -s /usr/share/fonts/truetype/verdanai.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf
464sudo ln -s /usr/share/fonts/truetype/verdanaz.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf
465```
466
467The Ubuntu package `sun-java6-fonts` contains a subset of Java of the fonts used.
468Since this package requires Java as a prerequisite anyway, we can do the same
469thing by just installing the equivalent openSUSE Sun Java package:
470
471```shell
472sudo zypper in java-1_6_0-sun
473```
474
475WebKit is currently hard-linked to the Microsoft fonts. To install these using `zypper`
476
477```shell
478sudo zypper in fetchmsttfonts pullin-msttf-fonts
479```
480
481To make the fonts installed above work, as the paths are hardcoded for Ubuntu,
482create symlinks to the appropriate locations:
483
484```shell
485sudo mkdir -p /usr/share/fonts/truetype/msttcorefonts
486sudo ln -s /usr/share/fonts/truetype/arial.ttf /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
487sudo ln -s /usr/share/fonts/truetype/arialbd.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
488sudo ln -s /usr/share/fonts/truetype/arialbi.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf
489sudo ln -s /usr/share/fonts/truetype/ariali.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf
490sudo ln -s /usr/share/fonts/truetype/comic.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf
491sudo ln -s /usr/share/fonts/truetype/comicbd.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf
492sudo ln -s /usr/share/fonts/truetype/cour.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf
493sudo ln -s /usr/share/fonts/truetype/courbd.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf
494sudo ln -s /usr/share/fonts/truetype/courbi.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf
495sudo ln -s /usr/share/fonts/truetype/couri.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf
496sudo ln -s /usr/share/fonts/truetype/impact.ttf /usr/share/fonts/truetype/msttcorefonts/Impact.ttf
497sudo ln -s /usr/share/fonts/truetype/times.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf
498sudo ln -s /usr/share/fonts/truetype/timesbd.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf
499sudo ln -s /usr/share/fonts/truetype/timesbi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf
500sudo ln -s /usr/share/fonts/truetype/timesi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf
501sudo ln -s /usr/share/fonts/truetype/verdana.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
502sudo ln -s /usr/share/fonts/truetype/verdanab.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf
503sudo ln -s /usr/share/fonts/truetype/verdanai.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf
504sudo ln -s /usr/share/fonts/truetype/verdanaz.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf
505```
506
507And then for the Java fonts:
508
509```shell
510sudo mkdir -p /usr/share/fonts/truetype/ttf-lucida
511sudo find /usr/lib*/jvm/java-1.6.*-sun-*/jre/lib -iname '*.ttf' -print \
512 -exec ln -s {} /usr/share/fonts/truetype/ttf-lucida \;
513```